UNPKG

@criticalmanufacturing/node-package-bundler

Version:
127 lines 6.24 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ShrinkwrapGenerator = void 0; const log_1 = require("./log"); const io = require("fs-extra"); const path = require("path"); const inversify_1 = require("inversify"); const types_1 = require("../types"); let ShrinkwrapGenerator = class ShrinkwrapGenerator { process(source, fileName) { var _a, _b, _c, _d, _e; let lockFilePath = path.join(source, "package-lock.json"); let isWorkspaces = false; if (!io.existsSync(lockFilePath)) { this._logger.warn(`Package Lock file not found. Assuming this environment is using workspaces`); // Search up to 3 levels up for (let i = 0; i < 3; i++) { const levels = []; for (let j = 0; j <= i; j++) { levels.push(".."); } lockFilePath = path.resolve(source, ...levels, "package-lock.json"); if (io.existsSync(lockFilePath)) { isWorkspaces = true; break; } } } if (!io.existsSync(lockFilePath)) { this._logger.error(`Unable to find a suitable package lock file in the directory tree!`); } else { if (!isWorkspaces) { this._logger.info(`Since this is not a workspace environment, copying package-lock.json file as ${fileName}`); io.copyFileSync(lockFilePath, path.join(source, fileName)); } else { const packageJsonLocation = path.join(source, "package.json"); this._logger.info(`Reading original package from '${packageJsonLocation}'`); const packageJson = io.readJSONSync(packageJsonLocation); this._logger.info(`Reading lock file from '${lockFilePath}'`); const lockJson = io.readJSONSync(lockFilePath); // now, cleanup the file const prefix = source.slice(path.dirname(lockFilePath).length + 1).replace("\\", "/"); let dependencies = []; for (const key in (_a = packageJson.dependencies) !== null && _a !== void 0 ? _a : {}) { dependencies.push(key); } for (const key in (_b = packageJson.peerDependencies) !== null && _b !== void 0 ? _b : {}) { dependencies.push(key); } // Reprocess the important packages (@criticalmanufacturing/); for (const dep of dependencies) { if (dep.startsWith("@criticalmanufacturing/")) { const importantPack = this.searchImportantPackage((_c = lockJson.packages) !== null && _c !== void 0 ? _c : {}, dep); for (const key in (_d = importantPack.dependencies) !== null && _d !== void 0 ? _d : {}) { dependencies.push(key); } for (const key in (_e = importantPack.peerDependencies) !== null && _e !== void 0 ? _e : {}) { dependencies.push(key); } } } // Remove duplicates dependencies = dependencies.filter((item, index) => dependencies.indexOf(item) === index); const result = {}; // First add all entries that match the same name of this path for (const key in lockJson.packages) { if (key.startsWith(prefix)) { result[key] = lockJson.packages[key]; } } dependencies.forEach((pack) => { var _a; this._logger.info(` Adding resolved package information for '${pack}'`); const results = this.searchPackage((_a = lockJson.packages) !== null && _a !== void 0 ? _a : {}, pack); for (const key in results) { result[key] = results[key]; } }); this._logger.info(`Generating '${fileName}' file with relevant dependencies information for this package`); io.writeJSONSync(path.join(source, fileName), { name: packageJson.name, version: packageJson.version, packages: result }, { spaces: 2 }); } } } searchPackage(full, search) { const result = {}; for (const key in full) { if (key === ("node_modules/" + search) || key.startsWith("node_modules/" + search + "/") || full[key].name === search) { result[key] = full[key]; } } return (result); } searchImportantPackage(full, search) { for (const key in full) { if (full[key].name === search) { return (full[key]); } } return ({}); } }; exports.ShrinkwrapGenerator = ShrinkwrapGenerator; __decorate([ (0, inversify_1.inject)(types_1.TYPES.Logger), __metadata("design:type", log_1.Log) ], ShrinkwrapGenerator.prototype, "_logger", void 0); exports.ShrinkwrapGenerator = ShrinkwrapGenerator = __decorate([ (0, inversify_1.injectable)() ], ShrinkwrapGenerator); //# sourceMappingURL=shrinkwrapGenerator.js.map