UNPKG

vsce2

Version:

VSCode Extension Manager

69 lines (68 loc) 2.35 kB
"use strict"; 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;