@grnsft/if
Version:
Impact Framework
75 lines • 9.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.injectEnvironment = void 0;
const luxon_1 = require("luxon");
const os_checker_1 = require("../util/os-checker");
const helpers_1 = require("../../common/util/helpers");
const strings_1 = require("../config/strings");
const packageJson = require('../../../package.json');
const { CAPTURING_RUNTIME_ENVIRONMENT_DATA } = strings_1.STRINGS;
/**
* 1. Gets the high-resolution real time when the application starts.
* 2. Converts the high-resolution time to milliseconds.
* 3. Gets the current DateTime.
* 4. Subtracts the milliseconds from the current DateTime.
*/
const getProcessStartingTimestamp = () => {
const startTime = process.hrtime();
const [seconds, nanoseconds] = process.hrtime(startTime);
const milliseconds = seconds * 1000 + nanoseconds / 1e6;
const currentDateTime = luxon_1.DateTime.local();
const applicationStartDateTime = currentDateTime.minus({
milliseconds: milliseconds,
});
return applicationStartDateTime.toUTC().toString();
};
/**
* Goes through the dependencies, converts them into oneliner.
*/
const flattenDependencies = (dependencies) => dependencies.map(dependency => {
const [packageName, versionInfo] = dependency;
const { version, extraneous, resolved } = versionInfo;
const ifExtraneous = extraneous ? ` extraneous -> ${resolved}` : '';
const ifFromGithub = resolved && resolved.startsWith('git') ? ` (${resolved})` : '';
const formattedString = `${packageName}@${version}${ifExtraneous || ifFromGithub}`;
return formattedString;
});
/**
* 1. Runs `npm list --json`.
* 2. Parses json data and converts to list.
*/
const listDependencies = async () => {
const { stdout } = await (0, helpers_1.execPromise)('npm list --json');
const npmListResponse = JSON.parse(stdout);
if (npmListResponse.dependencies) {
const dependencies = Object.entries(npmListResponse.dependencies);
return flattenDependencies(dependencies);
}
return [];
};
/**
* Injects execution information (command, environment) to existing manifest.
*/
const injectEnvironment = async (manifest) => {
console.debug(CAPTURING_RUNTIME_ENVIRONMENT_DATA);
const dependencies = await listDependencies();
const info = await (0, os_checker_1.osInfo)();
const dateTime = `${getProcessStartingTimestamp()} (UTC)`;
return {
...manifest,
execution: {
status: 'success',
command: process.argv.join(' '),
environment: {
'if-version': packageJson.version,
os: info.os,
'os-version': info['os-version'],
'node-version': process.versions.node,
'date-time': dateTime,
dependencies,
},
},
};
};
exports.injectEnvironment = injectEnvironment;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaWYtcnVuL2xpYi9lbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBK0I7QUFFL0IsbURBQTBDO0FBQzFDLHVEQUFzRDtBQUd0RCwrQ0FBMEM7QUFHMUMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFFckQsTUFBTSxFQUFDLGtDQUFrQyxFQUFDLEdBQUcsaUJBQU8sQ0FBQztBQUVyRDs7Ozs7R0FLRztBQUNILE1BQU0sMkJBQTJCLEdBQUcsR0FBRyxFQUFFO0lBQ3ZDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUVuQyxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekQsTUFBTSxZQUFZLEdBQUcsT0FBTyxHQUFHLElBQUksR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDO0lBRXhELE1BQU0sZUFBZSxHQUFHLGdCQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFekMsTUFBTSx3QkFBd0IsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBQ3JELFlBQVksRUFBRSxZQUFZO0tBQzNCLENBQUMsQ0FBQztJQUVILE9BQU8sd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDckQsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLENBQUMsWUFBMkMsRUFBRSxFQUFFLENBQzFFLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDNUIsTUFBTSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsR0FBRyxVQUFVLENBQUM7SUFDOUMsTUFBTSxFQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLEdBQUcsV0FBVyxDQUFDO0lBQ3BELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEUsTUFBTSxZQUFZLEdBQ2hCLFFBQVEsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDakUsTUFBTSxlQUFlLEdBQUcsR0FBRyxXQUFXLElBQUksT0FBTyxHQUMvQyxZQUFZLElBQUksWUFDbEIsRUFBRSxDQUFDO0lBRUgsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQyxDQUFDLENBQUM7QUFFTDs7O0dBR0c7QUFDSCxNQUFNLGdCQUFnQixHQUFHLEtBQUssSUFBSSxFQUFFO0lBQ2xDLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxNQUFNLElBQUEscUJBQVcsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sZUFBZSxHQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTVELElBQUksZUFBZSxDQUFDLFlBQVksRUFBRTtRQUNoQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVsRSxPQUFPLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQzFDO0lBRUQsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNJLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUNwQyxRQUFrQixFQUNDLEVBQUU7SUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBRWxELE1BQU0sWUFBWSxHQUFHLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztJQUM5QyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsbUJBQU0sR0FBRSxDQUFDO0lBQzVCLE1BQU0sUUFBUSxHQUFHLEdBQUcsMkJBQTJCLEVBQUUsUUFBUSxDQUFDO0lBRTFELE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxTQUFTLEVBQUU7WUFDVCxNQUFNLEVBQUUsU0FBUztZQUNqQixPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQy9CLFdBQVcsRUFBRTtnQkFDWCxZQUFZLEVBQUUsV0FBVyxDQUFDLE9BQU87Z0JBQ2pDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDaEMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSTtnQkFDckMsV0FBVyxFQUFFLFFBQVE7Z0JBQ3JCLFlBQVk7YUFDYjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQXhCVyxRQUFBLGlCQUFpQixxQkF3QjVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRlVGltZX0gZnJvbSAnbHV4b24nO1xuXG5pbXBvcnQge29zSW5mb30gZnJvbSAnLi4vdXRpbC9vcy1jaGVja2VyJztcbmltcG9ydCB7ZXhlY1Byb21pc2V9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlsL2hlbHBlcnMnO1xuaW1wb3J0IHtNYW5pZmVzdH0gZnJvbSAnLi4vLi4vY29tbW9uL3R5cGVzL21hbmlmZXN0JztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi9jb25maWcvc3RyaW5ncyc7XG5pbXBvcnQge05wbUxpc3RSZXNwb25zZSwgUGFja2FnZURlcGVuZGVuY3l9IGZyb20gJy4uL3R5cGVzL2Vudmlyb25tZW50JztcblxuY29uc3QgcGFja2FnZUpzb24gPSByZXF1aXJlKCcuLi8uLi8uLi9wYWNrYWdlLmpzb24nKTtcblxuY29uc3Qge0NBUFRVUklOR19SVU5USU1FX0VOVklST05NRU5UX0RBVEF9ID0gU1RSSU5HUztcblxuLyoqXG4gKiAxLiBHZXRzIHRoZSBoaWdoLXJlc29sdXRpb24gcmVhbCB0aW1lIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHN0YXJ0cy5cbiAqIDIuIENvbnZlcnRzIHRoZSBoaWdoLXJlc29sdXRpb24gdGltZSB0byBtaWxsaXNlY29uZHMuXG4gKiAzLiBHZXRzIHRoZSBjdXJyZW50IERhdGVUaW1lLlxuICogNC4gU3VidHJhY3RzIHRoZSBtaWxsaXNlY29uZHMgZnJvbSB0aGUgY3VycmVudCBEYXRlVGltZS5cbiAqL1xuY29uc3QgZ2V0UHJvY2Vzc1N0YXJ0aW5nVGltZXN0YW1wID0gKCkgPT4ge1xuICBjb25zdCBzdGFydFRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuXG4gIGNvbnN0IFtzZWNvbmRzLCBuYW5vc2Vjb25kc10gPSBwcm9jZXNzLmhydGltZShzdGFydFRpbWUpO1xuICBjb25zdCBtaWxsaXNlY29uZHMgPSBzZWNvbmRzICogMTAwMCArIG5hbm9zZWNvbmRzIC8gMWU2O1xuXG4gIGNvbnN0IGN1cnJlbnREYXRlVGltZSA9IERhdGVUaW1lLmxvY2FsKCk7XG5cbiAgY29uc3QgYXBwbGljYXRpb25TdGFydERhdGVUaW1lID0gY3VycmVudERhdGVUaW1lLm1pbnVzKHtcbiAgICBtaWxsaXNlY29uZHM6IG1pbGxpc2Vjb25kcyxcbiAgfSk7XG5cbiAgcmV0dXJuIGFwcGxpY2F0aW9uU3RhcnREYXRlVGltZS50b1VUQygpLnRvU3RyaW5nKCk7XG59O1xuXG4vKipcbiAqIEdvZXMgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzLCBjb252ZXJ0cyB0aGVtIGludG8gb25lbGluZXIuXG4gKi9cbmNvbnN0IGZsYXR0ZW5EZXBlbmRlbmNpZXMgPSAoZGVwZW5kZW5jaWVzOiBbc3RyaW5nLCBQYWNrYWdlRGVwZW5kZW5jeV1bXSkgPT5cbiAgZGVwZW5kZW5jaWVzLm1hcChkZXBlbmRlbmN5ID0+IHtcbiAgICBjb25zdCBbcGFja2FnZU5hbWUsIHZlcnNpb25JbmZvXSA9IGRlcGVuZGVuY3k7XG4gICAgY29uc3Qge3ZlcnNpb24sIGV4dHJhbmVvdXMsIHJlc29sdmVkfSA9IHZlcnNpb25JbmZvO1xuICAgIGNvbnN0IGlmRXh0cmFuZW91cyA9IGV4dHJhbmVvdXMgPyBgIGV4dHJhbmVvdXMgLT4gJHtyZXNvbHZlZH1gIDogJyc7XG4gICAgY29uc3QgaWZGcm9tR2l0aHViID1cbiAgICAgIHJlc29sdmVkICYmIHJlc29sdmVkLnN0YXJ0c1dpdGgoJ2dpdCcpID8gYCAoJHtyZXNvbHZlZH0pYCA6ICcnO1xuICAgIGNvbnN0IGZvcm1hdHRlZFN0cmluZyA9IGAke3BhY2thZ2VOYW1lfUAke3ZlcnNpb259JHtcbiAgICAgIGlmRXh0cmFuZW91cyB8fCBpZkZyb21HaXRodWJcbiAgICB9YDtcblxuICAgIHJldHVybiBmb3JtYXR0ZWRTdHJpbmc7XG4gIH0pO1xuXG4vKipcbiAqIDEuIFJ1bnMgYG5wbSBsaXN0IC0tanNvbmAuXG4gKiAyLiBQYXJzZXMganNvbiBkYXRhIGFuZCBjb252ZXJ0cyB0byBsaXN0LlxuICovXG5jb25zdCBsaXN0RGVwZW5kZW5jaWVzID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWNQcm9taXNlKCducG0gbGlzdCAtLWpzb24nKTtcbiAgY29uc3QgbnBtTGlzdFJlc3BvbnNlOiBOcG1MaXN0UmVzcG9uc2UgPSBKU09OLnBhcnNlKHN0ZG91dCk7XG5cbiAgaWYgKG5wbUxpc3RSZXNwb25zZS5kZXBlbmRlbmNpZXMpIHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBPYmplY3QuZW50cmllcyhucG1MaXN0UmVzcG9uc2UuZGVwZW5kZW5jaWVzKTtcblxuICAgIHJldHVybiBmbGF0dGVuRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcyk7XG4gIH1cblxuICByZXR1cm4gW107XG59O1xuXG4vKipcbiAqIEluamVjdHMgZXhlY3V0aW9uIGluZm9ybWF0aW9uIChjb21tYW5kLCBlbnZpcm9ubWVudCkgdG8gZXhpc3RpbmcgbWFuaWZlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBpbmplY3RFbnZpcm9ubWVudCA9IGFzeW5jIChcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0XG4pOiBQcm9taXNlPE1hbmlmZXN0PiA9PiB7XG4gIGNvbnNvbGUuZGVidWcoQ0FQVFVSSU5HX1JVTlRJTUVfRU5WSVJPTk1FTlRfREFUQSk7XG5cbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gYXdhaXQgbGlzdERlcGVuZGVuY2llcygpO1xuICBjb25zdCBpbmZvID0gYXdhaXQgb3NJbmZvKCk7XG4gIGNvbnN0IGRhdGVUaW1lID0gYCR7Z2V0UHJvY2Vzc1N0YXJ0aW5nVGltZXN0YW1wKCl9IChVVEMpYDtcblxuICByZXR1cm4ge1xuICAgIC4uLm1hbmlmZXN0LFxuICAgIGV4ZWN1dGlvbjoge1xuICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICBjb21tYW5kOiBwcm9jZXNzLmFyZ3Yuam9pbignICcpLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgJ2lmLXZlcnNpb24nOiBwYWNrYWdlSnNvbi52ZXJzaW9uLFxuICAgICAgICBvczogaW5mby5vcyxcbiAgICAgICAgJ29zLXZlcnNpb24nOiBpbmZvWydvcy12ZXJzaW9uJ10sXG4gICAgICAgICdub2RlLXZlcnNpb24nOiBwcm9jZXNzLnZlcnNpb25zLm5vZGUsXG4gICAgICAgICdkYXRlLXRpbWUnOiBkYXRlVGltZSxcbiAgICAgICAgZGVwZW5kZW5jaWVzLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufTtcbiJdfQ==