@aws-cdk/core
Version:
AWS Cloud Development Kit Core Library
94 lines • 11.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.collectRuntimeInformation = void 0;
const path_1 = require("path");
const node_version_1 = require("./node-version");
// list of NPM scopes included in version reporting e.g. @aws-cdk and @aws-solutions-konstruk
const WHITELIST_SCOPES = ['@aws-cdk', '@aws-solutions-konstruk', '@aws-solutions-constructs', '@amzn'];
// list of NPM packages included in version reporting
const WHITELIST_PACKAGES = ['aws-rfdk'];
/**
* Returns a list of loaded modules and their versions.
*/
function collectRuntimeInformation() {
const libraries = {};
for (const fileName of Object.keys(require.cache)) {
const pkg = findNpmPackage(fileName);
if (pkg && !pkg.private) {
libraries[pkg.name] = pkg.version;
}
}
// include only libraries that are in the whitelistLibraries list
for (const name of Object.keys(libraries)) {
let foundMatch = false;
for (const scope of WHITELIST_SCOPES) {
if (name.startsWith(`${scope}/`)) {
foundMatch = true;
}
}
foundMatch = foundMatch || WHITELIST_PACKAGES.includes(name);
if (!foundMatch) {
delete libraries[name];
}
}
// add jsii runtime version
libraries['jsii-runtime'] = getJsiiAgentVersion();
return { libraries };
}
exports.collectRuntimeInformation = collectRuntimeInformation;
/**
* Determines which NPM module a given loaded javascript file is from.
*
* The only infromation that is available locally is a list of Javascript files,
* and every source file is associated with a search path to resolve the further
* ``require`` calls made from there, which includes its own directory on disk,
* and parent directories - for example:
*
* [ '...repo/packages/aws-cdk-resources/lib/cfn/node_modules',
* '...repo/packages/aws-cdk-resources/lib/node_modules',
* '...repo/packages/aws-cdk-resources/node_modules',
* '...repo/packages/node_modules',
* // etc...
* ]
*
* We are looking for ``package.json`` that is anywhere in the tree, except it's
* in the parent directory, not in the ``node_modules`` directory. For this
* reason, we strip the ``/node_modules`` suffix off each path and use regular
* module resolution to obtain a reference to ``package.json``.
*
* @param fileName a javascript file name.
* @returns the NPM module infos (aka ``package.json`` contents), or
* ``undefined`` if the lookup was unsuccessful.
*/
function findNpmPackage(fileName) {
const mod = require.cache[fileName];
if (!(mod === null || mod === void 0 ? void 0 : mod.paths)) {
// sometimes this can be undefined. for example when querying for .json modules
// inside a jest runtime environment.
// see https://github.com/aws/aws-cdk/issues/7657
// potentially we can remove this if it turns out to be a bug in how jest implemented the 'require' module.
return undefined;
}
// For any path in ``mod.paths`` that is a node_modules folder, use its parent directory instead.
const paths = mod === null || mod === void 0 ? void 0 : mod.paths.map((path) => path_1.basename(path) === 'node_modules' ? path_1.dirname(path) : path);
try {
const packagePath = require.resolve(
// Resolution behavior changed in node 12.0.0 - https://github.com/nodejs/node/issues/27583
node_version_1.major >= 12 ? './package.json' : 'package.json', { paths });
// eslint-disable-next-line @typescript-eslint/no-require-imports
return require(packagePath);
}
catch (e) {
return undefined;
}
}
function getJsiiAgentVersion() {
let jsiiAgent = process.env.JSII_AGENT;
// if JSII_AGENT is not specified, we will assume this is a node.js runtime
// and plug in our node.js version
if (!jsiiAgent) {
jsiiAgent = `node.js/${process.version}`;
}
return jsiiAgent;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicnVudGltZS1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUF5QztBQUV6QyxpREFBMkQ7QUFFM0QsNkZBQTZGO0FBQzdGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxVQUFVLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkcscURBQXFEO0FBQ3JELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUV4Qzs7R0FFRztBQUNILFNBQWdCLHlCQUF5QjtJQUN2QyxNQUFNLFNBQVMsR0FBK0IsRUFBRSxDQUFDO0lBRWpELEtBQUssTUFBTSxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDakQsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtZQUN2QixTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7U0FDbkM7S0FDRjtJQUVELGlFQUFpRTtJQUNqRSxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDekMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxLQUFLLElBQUksZ0JBQWdCLEVBQUU7WUFDcEMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRTtnQkFDaEMsVUFBVSxHQUFHLElBQUksQ0FBQzthQUNuQjtTQUNGO1FBQ0QsVUFBVSxHQUFHLFVBQVUsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCO0tBQ0Y7SUFFRCwyQkFBMkI7SUFDM0IsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLG1CQUFtQixFQUFFLENBQUM7SUFFbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ3ZCLENBQUM7QUE3QkQsOERBNkJDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsU0FBUyxjQUFjLENBQUMsUUFBZ0I7SUFDdEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVwQyxJQUFJLEVBQUMsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLEtBQUssQ0FBQSxFQUFFO1FBQ2YsK0VBQStFO1FBQy9FLHFDQUFxQztRQUNyQyxpREFBaUQ7UUFDakQsMkdBQTJHO1FBQzNHLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRUQsaUdBQWlHO0lBQ2pHLE1BQU0sS0FBSyxHQUFHLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxlQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXpHLElBQUk7UUFDRixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTztRQUNqQywyRkFBMkY7UUFDM0Ysb0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUMxRCxFQUFFLEtBQUssRUFBRSxDQUNWLENBQUM7UUFDRixpRUFBaUU7UUFDakUsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDN0I7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQztBQUVELFNBQVMsbUJBQW1CO0lBQzFCLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0lBRXZDLDJFQUEyRTtJQUMzRSxrQ0FBa0M7SUFDbEMsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNkLFNBQVMsR0FBRyxXQUFXLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUMxQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IG1ham9yIGFzIG5vZGVNYWpvclZlcnNpb24gfSBmcm9tICcuL25vZGUtdmVyc2lvbic7XG5cbi8vIGxpc3Qgb2YgTlBNIHNjb3BlcyBpbmNsdWRlZCBpbiB2ZXJzaW9uIHJlcG9ydGluZyBlLmcuIEBhd3MtY2RrIGFuZCBAYXdzLXNvbHV0aW9ucy1rb25zdHJ1a1xuY29uc3QgV0hJVEVMSVNUX1NDT1BFUyA9IFsnQGF3cy1jZGsnLCAnQGF3cy1zb2x1dGlvbnMta29uc3RydWsnLCAnQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cycsICdAYW16biddO1xuLy8gbGlzdCBvZiBOUE0gcGFja2FnZXMgaW5jbHVkZWQgaW4gdmVyc2lvbiByZXBvcnRpbmdcbmNvbnN0IFdISVRFTElTVF9QQUNLQUdFUyA9IFsnYXdzLXJmZGsnXTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBsb2FkZWQgbW9kdWxlcyBhbmQgdGhlaXIgdmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0UnVudGltZUluZm9ybWF0aW9uKCk6IGN4c2NoZW1hLlJ1bnRpbWVJbmZvIHtcbiAgY29uc3QgbGlicmFyaWVzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXG4gIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgT2JqZWN0LmtleXMocmVxdWlyZS5jYWNoZSkpIHtcbiAgICBjb25zdCBwa2cgPSBmaW5kTnBtUGFja2FnZShmaWxlTmFtZSk7XG4gICAgaWYgKHBrZyAmJiAhcGtnLnByaXZhdGUpIHtcbiAgICAgIGxpYnJhcmllc1twa2cubmFtZV0gPSBwa2cudmVyc2lvbjtcbiAgICB9XG4gIH1cblxuICAvLyBpbmNsdWRlIG9ubHkgbGlicmFyaWVzIHRoYXQgYXJlIGluIHRoZSB3aGl0ZWxpc3RMaWJyYXJpZXMgbGlzdFxuICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMobGlicmFyaWVzKSkge1xuICAgIGxldCBmb3VuZE1hdGNoID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBzY29wZSBvZiBXSElURUxJU1RfU0NPUEVTKSB7XG4gICAgICBpZiAobmFtZS5zdGFydHNXaXRoKGAke3Njb3BlfS9gKSkge1xuICAgICAgICBmb3VuZE1hdGNoID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm91bmRNYXRjaCA9IGZvdW5kTWF0Y2ggfHwgV0hJVEVMSVNUX1BBQ0tBR0VTLmluY2x1ZGVzKG5hbWUpO1xuXG4gICAgaWYgKCFmb3VuZE1hdGNoKSB7XG4gICAgICBkZWxldGUgbGlicmFyaWVzW25hbWVdO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCBqc2lpIHJ1bnRpbWUgdmVyc2lvblxuICBsaWJyYXJpZXNbJ2pzaWktcnVudGltZSddID0gZ2V0SnNpaUFnZW50VmVyc2lvbigpO1xuXG4gIHJldHVybiB7IGxpYnJhcmllcyB9O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hpY2ggTlBNIG1vZHVsZSBhIGdpdmVuIGxvYWRlZCBqYXZhc2NyaXB0IGZpbGUgaXMgZnJvbS5cbiAqXG4gKiBUaGUgb25seSBpbmZyb21hdGlvbiB0aGF0IGlzIGF2YWlsYWJsZSBsb2NhbGx5IGlzIGEgbGlzdCBvZiBKYXZhc2NyaXB0IGZpbGVzLFxuICogYW5kIGV2ZXJ5IHNvdXJjZSBmaWxlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNlYXJjaCBwYXRoIHRvIHJlc29sdmUgdGhlIGZ1cnRoZXJcbiAqIGBgcmVxdWlyZWBgIGNhbGxzIG1hZGUgZnJvbSB0aGVyZSwgd2hpY2ggaW5jbHVkZXMgaXRzIG93biBkaXJlY3Rvcnkgb24gZGlzayxcbiAqIGFuZCBwYXJlbnQgZGlyZWN0b3JpZXMgLSBmb3IgZXhhbXBsZTpcbiAqXG4gKiBbICcuLi5yZXBvL3BhY2thZ2VzL2F3cy1jZGstcmVzb3VyY2VzL2xpYi9jZm4vbm9kZV9tb2R1bGVzJyxcbiAqICAgJy4uLnJlcG8vcGFja2FnZXMvYXdzLWNkay1yZXNvdXJjZXMvbGliL25vZGVfbW9kdWxlcycsXG4gKiAgICcuLi5yZXBvL3BhY2thZ2VzL2F3cy1jZGstcmVzb3VyY2VzL25vZGVfbW9kdWxlcycsXG4gKiAgICcuLi5yZXBvL3BhY2thZ2VzL25vZGVfbW9kdWxlcycsXG4gKiAgIC8vIGV0Yy4uLlxuICogXVxuICpcbiAqIFdlIGFyZSBsb29raW5nIGZvciBgYHBhY2thZ2UuanNvbmBgIHRoYXQgaXMgYW55d2hlcmUgaW4gdGhlIHRyZWUsIGV4Y2VwdCBpdCdzXG4gKiBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeSwgbm90IGluIHRoZSBgYG5vZGVfbW9kdWxlc2BgIGRpcmVjdG9yeS4gRm9yIHRoaXNcbiAqIHJlYXNvbiwgd2Ugc3RyaXAgdGhlIGBgL25vZGVfbW9kdWxlc2BgIHN1ZmZpeCBvZmYgZWFjaCBwYXRoIGFuZCB1c2UgcmVndWxhclxuICogbW9kdWxlIHJlc29sdXRpb24gdG8gb2J0YWluIGEgcmVmZXJlbmNlIHRvIGBgcGFja2FnZS5qc29uYGAuXG4gKlxuICogQHBhcmFtIGZpbGVOYW1lIGEgamF2YXNjcmlwdCBmaWxlIG5hbWUuXG4gKiBAcmV0dXJucyB0aGUgTlBNIG1vZHVsZSBpbmZvcyAoYWthIGBgcGFja2FnZS5qc29uYGAgY29udGVudHMpLCBvclxuICogICAgICBgYHVuZGVmaW5lZGBgIGlmIHRoZSBsb29rdXAgd2FzIHVuc3VjY2Vzc2Z1bC5cbiAqL1xuZnVuY3Rpb24gZmluZE5wbVBhY2thZ2UoZmlsZU5hbWU6IHN0cmluZyk6IHsgbmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHByaXZhdGU/OiBib29sZWFuIH0gfCB1bmRlZmluZWQge1xuICBjb25zdCBtb2QgPSByZXF1aXJlLmNhY2hlW2ZpbGVOYW1lXTtcblxuICBpZiAoIW1vZD8ucGF0aHMpIHtcbiAgICAvLyBzb21ldGltZXMgdGhpcyBjYW4gYmUgdW5kZWZpbmVkLiBmb3IgZXhhbXBsZSB3aGVuIHF1ZXJ5aW5nIGZvciAuanNvbiBtb2R1bGVzXG4gICAgLy8gaW5zaWRlIGEgamVzdCBydW50aW1lIGVudmlyb25tZW50LlxuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzc2NTdcbiAgICAvLyBwb3RlbnRpYWxseSB3ZSBjYW4gcmVtb3ZlIHRoaXMgaWYgaXQgdHVybnMgb3V0IHRvIGJlIGEgYnVnIGluIGhvdyBqZXN0IGltcGxlbWVudGVkIHRoZSAncmVxdWlyZScgbW9kdWxlLlxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBGb3IgYW55IHBhdGggaW4gYGBtb2QucGF0aHNgYCB0aGF0IGlzIGEgbm9kZV9tb2R1bGVzIGZvbGRlciwgdXNlIGl0cyBwYXJlbnQgZGlyZWN0b3J5IGluc3RlYWQuXG4gIGNvbnN0IHBhdGhzID0gbW9kPy5wYXRocy5tYXAoKHBhdGg6IHN0cmluZykgPT4gYmFzZW5hbWUocGF0aCkgPT09ICdub2RlX21vZHVsZXMnID8gZGlybmFtZShwYXRoKSA6IHBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSByZXF1aXJlLnJlc29sdmUoXG4gICAgICAvLyBSZXNvbHV0aW9uIGJlaGF2aW9yIGNoYW5nZWQgaW4gbm9kZSAxMi4wLjAgLSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzI3NTgzXG4gICAgICBub2RlTWFqb3JWZXJzaW9uID49IDEyID8gJy4vcGFja2FnZS5qc29uJyA6ICdwYWNrYWdlLmpzb24nLFxuICAgICAgeyBwYXRocyB9LFxuICAgICk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICByZXR1cm4gcmVxdWlyZShwYWNrYWdlUGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEpzaWlBZ2VudFZlcnNpb24oKSB7XG4gIGxldCBqc2lpQWdlbnQgPSBwcm9jZXNzLmVudi5KU0lJX0FHRU5UO1xuXG4gIC8vIGlmIEpTSUlfQUdFTlQgaXMgbm90IHNwZWNpZmllZCwgd2Ugd2lsbCBhc3N1bWUgdGhpcyBpcyBhIG5vZGUuanMgcnVudGltZVxuICAvLyBhbmQgcGx1ZyBpbiBvdXIgbm9kZS5qcyB2ZXJzaW9uXG4gIGlmICghanNpaUFnZW50KSB7XG4gICAganNpaUFnZW50ID0gYG5vZGUuanMvJHtwcm9jZXNzLnZlcnNpb259YDtcbiAgfVxuXG4gIHJldHVybiBqc2lpQWdlbnQ7XG59XG4iXX0=