54 lines
2.2 KiB
JavaScript
54 lines
2.2 KiB
JavaScript
|
"use strict";
|
||
|
/*---------------------------------------------------------------------------------------------
|
||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||
|
*--------------------------------------------------------------------------------------------*/
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.getProductionDependencies = getProductionDependencies;
|
||
|
const fs = require("fs");
|
||
|
const path = require("path");
|
||
|
const cp = require("child_process");
|
||
|
const root = fs.realpathSync(path.dirname(path.dirname(__dirname)));
|
||
|
function getNpmProductionDependencies(folder) {
|
||
|
let raw;
|
||
|
try {
|
||
|
raw = cp.execSync('npm ls --all --omit=dev --parseable', { cwd: folder, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, null] });
|
||
|
}
|
||
|
catch (err) {
|
||
|
const regex = /^npm ERR! .*$/gm;
|
||
|
let match;
|
||
|
while (match = regex.exec(err.message)) {
|
||
|
if (/ELSPROBLEMS/.test(match[0])) {
|
||
|
continue;
|
||
|
}
|
||
|
else if (/invalid: xterm/.test(match[0])) {
|
||
|
continue;
|
||
|
}
|
||
|
else if (/A complete log of this run/.test(match[0])) {
|
||
|
continue;
|
||
|
}
|
||
|
else {
|
||
|
throw err;
|
||
|
}
|
||
|
}
|
||
|
raw = err.stdout;
|
||
|
}
|
||
|
return raw.split(/\r?\n/).filter(line => {
|
||
|
return !!line.trim() && path.relative(root, line) !== path.relative(root, folder);
|
||
|
});
|
||
|
}
|
||
|
function getProductionDependencies(folderPath) {
|
||
|
const result = getNpmProductionDependencies(folderPath);
|
||
|
// Account for distro npm dependencies
|
||
|
const realFolderPath = fs.realpathSync(folderPath);
|
||
|
const relativeFolderPath = path.relative(root, realFolderPath);
|
||
|
const distroFolderPath = `${root}/.build/distro/npm/${relativeFolderPath}`;
|
||
|
if (fs.existsSync(distroFolderPath)) {
|
||
|
result.push(...getNpmProductionDependencies(distroFolderPath));
|
||
|
}
|
||
|
return [...new Set(result)];
|
||
|
}
|
||
|
if (require.main === module) {
|
||
|
console.log(JSON.stringify(getProductionDependencies(root), null, ' '));
|
||
|
}
|
||
|
//# sourceMappingURL=dependencies.js.map
|