remove pacote - blocks webpack build

This commit is contained in:
Jan Prochazka
2020-11-26 17:24:30 +01:00
parent 3533683a32
commit 6729317fcb
4 changed files with 98 additions and 595 deletions

View File

@@ -1,10 +1,10 @@
const fs = require('fs-extra');
const fetch = require('node-fetch');
const axios = require('axios');
const path = require('path');
const pacote = require('pacote');
const { pluginstmpdir, pluginsdir } = require('../utility/directories');
const socket = require('../utility/socket');
const requirePlugin = require('../shell/requirePlugin');
const downloadPackage = require('../utility/downloadPackage');
async function loadPackageInfo(dir) {
const readmeFile = path.join(dir, 'README.md');
@@ -36,17 +36,11 @@ module.exports = {
search_meta: 'get',
async search({ filter }) {
// const response = await fetch(`https://api.npms.io/v2/search?q=keywords:dbgate ${encodeURIComponent(filter)}`);
// const json = await response.json();
// const { results } = json || {};
// return (results || []).map((x) => x.package);
// DOCS: https://github.com/npm/registry/blob/master/docs/REGISTRY-API.md#get-v1search
const response = await fetch(
const resp = await axios.default.get(
`http://registry.npmjs.com/-/v1/search?text=${encodeURIComponent(filter)}+keywords:dbgateplugin&size=25&from=0`
);
const json = await response.json();
const { objects } = json || {};
const { objects } = resp.data || {};
return (objects || []).map((x) => x.package);
},
@@ -54,7 +48,7 @@ module.exports = {
async info({ packageName }) {
const dir = path.join(pluginstmpdir(), packageName);
if (!(await fs.exists(dir))) {
await pacote.extract(packageName, dir);
await downloadPackage(packageName, dir);
}
return await loadPackageInfo(dir);
// return await {
@@ -77,7 +71,7 @@ module.exports = {
async install({ packageName }) {
const dir = path.join(pluginsdir(), packageName);
if (!(await fs.exists(dir))) {
await pacote.extract(packageName, dir);
await downloadPackage(packageName, dir);
}
socket.emitChanged(`installed-plugins-changed`);
},

View File

@@ -0,0 +1,64 @@
// const pacote = require('pacote');
const axios = require('axios');
// const tarballExtract = require('tarball-extract');
const uuidv1 = require('uuid/v1');
const path = require('path');
const fs = require('fs');
const zlib = require('zlib');
const tar = require('tar');
const ncp = require('ncp').ncp;
const { uploadsdir } = require('./directories');
function extractTarball(tmpFile, destination) {
return new Promise((resolve, reject) => {
fs.createReadStream(tmpFile)
.pipe(zlib.createGunzip())
.pipe(tar.extract({ cwd: destination }))
.on('error', (err) => reject(err))
.on('end', () => resolve());
});
}
function saveStreamToFile(pipedStream, fileName) {
return new Promise((resolve, reject) => {
const fileStream = fs.createWriteStream(fileName);
fileStream.on('close', () => resolve());
pipedStream.pipe(fileStream);
});
}
function copyDirectory(source, target) {
return new Promise((resolve, reject) => {
ncp(source, target, (err) => {
if (err) reject(err);
resolve();
});
});
}
async function downloadPackage(packageName, directory) {
// await pacote.extract(packageName, directory);
const infoResp = await axios.default.get(`https://registry.npmjs.org/${packageName}`);
const { latest } = infoResp.data['dist-tags'] || {};
if (!latest) return false;
const tarball = infoResp.data.versions[latest].dist.tarball;
const tmpFile = path.join(uploadsdir(), uuidv1() + '.tgz');
console.log(`Downloading tarball ${tarball} into ${tmpFile}`);
const tarballResp = await axios.default({
method: 'get',
url: tarball,
responseType: 'stream',
});
await saveStreamToFile(tarballResp.data, tmpFile);
const tmpDir = path.join(uploadsdir(), uuidv1());
fs.mkdirSync(tmpDir);
await extractTarball(tmpFile, tmpDir);
await copyDirectory(path.join(tmpDir, 'package'), directory);
return true;
}
module.exports = downloadPackage;