vsce2
Version:
VSCode Extension Manager
69 lines (68 loc) • 2.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.readVSIXPackage = void 0;
const yauzl_1 = require("yauzl");
const xml_1 = require("./xml");
function readEntryString(zipfile, entry, cb) {
zipfile.openReadStream(entry, (err, stream) => {
if (err) {
return cb(err);
}
const buffers = [];
stream.on('data', buffer => buffers.push(buffer));
stream.once('error', cb);
stream.once('end', () => {
try {
cb(null, Buffer.concat(buffers).toString('utf8'));
}
catch (err) {
cb(err);
}
});
});
}
function readVSIXPackage(packagePath) {
return new Promise((c, e) => {
yauzl_1.open(packagePath, (err, zipfile) => {
if (err) {
return e(err);
}
let manifest;
let xmlManifest;
zipfile.once('close', () => {
if (!manifest) {
e(new Error('Manifest not found'));
}
else if (!xmlManifest) {
e(new Error('VSIX manifest not found'));
}
else {
c({ manifest, xmlManifest });
}
});
zipfile.on('entry', (entry) => {
switch (entry.fileName.toLowerCase()) {
case 'extension/package.json': {
return readEntryString(zipfile, entry, (err, result) => {
if (err) {
zipfile.close();
return e(err);
}
manifest = JSON.parse(result);
});
}
case 'extension.vsixmanifest': {
return readEntryString(zipfile, entry, (err, result) => {
if (err) {
zipfile.close();
return e(err);
}
xml_1.parseXmlManifest(result).then(r => (xmlManifest = r));
});
}
}
});
});
});
}
exports.readVSIXPackage = readVSIXPackage;