UNPKG

@rxap/plugin-library

Version:

This package provides generators and executors for managing and maintaining Nx plugin libraries. It includes functionality for generating index exports, fixing dependencies, generating JSON schemas, and more. It helps streamline the development process fo

156 lines 9.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = runExecutor; const tslib_1 = require("tslib"); const plugin_utilities_1 = require("@rxap/plugin-utilities"); const workspace_utilities_1 = require("@rxap/workspace-utilities"); const fs_1 = require("fs"); const package_json_1 = require("nx/src/utils/package-json"); const path_1 = require("path"); let rootPackageJson = null; function normalizePackageVersion(packageName, version) { var _a, _b; if (!rootPackageJson) { rootPackageJson = (0, workspace_utilities_1.GetRootPackageJson)(); } if ((_a = rootPackageJson === null || rootPackageJson === void 0 ? void 0 : rootPackageJson.dependencies) === null || _a === void 0 ? void 0 : _a[packageName]) { version = rootPackageJson.dependencies[packageName]; } if ((_b = rootPackageJson === null || rootPackageJson === void 0 ? void 0 : rootPackageJson.devDependencies) === null || _b === void 0 ? void 0 : _b[packageName]) { version = rootPackageJson.devDependencies[packageName]; } return version.replace(/[\^~>=<]/g, ''); } function convertToPackageGroup(input, packageGroupRegex) { return Object.entries(input) .filter(([packageName]) => packageGroupRegex.some(regex => regex.test(packageName))) .map(([packageName, version]) => ({ package: packageName, version: normalizePackageVersion(packageName, version), })); } function getPackageGroupFromDependencies(context, packageGroupRegex) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const directPackageDependencies = yield (0, plugin_utilities_1.GetAllPackageDependenciesForProjectWihRetry)(context); return convertToPackageGroup(directPackageDependencies, packageGroupRegex); }); } function loadPackageJsonForPackage(packageName) { try { // eslint-disable-next-line @typescript-eslint/no-var-requires const packageJsonPath = require.resolve(`${packageName}/package.json`); // eslint-disable-next-line @typescript-eslint/no-var-requires return require(packageJsonPath); } catch (e) { console.error(`Could not load package.json for package ${packageName}`, e); } return null; } function getPeerDependenciesForPackage(packageName) { var _a, _b; const packageJson = loadPackageJsonForPackage(packageName); if (!packageJson) { return {}; } console.log(`Package ${packageName} has the following peer dependencies:`, Object.keys((_a = packageJson.peerDependencies) !== null && _a !== void 0 ? _a : {}).join(', ')); return (_b = packageJson.peerDependencies) !== null && _b !== void 0 ? _b : {}; } function getAllPeerDependenciesForProject(context_1) { return tslib_1.__awaiter(this, arguments, void 0, function* (context, projectName = context.projectName, resolvedPeerDependencies = []) { let { peerDependencies = {} } = yield (0, plugin_utilities_1.readPackageJsonForProjectWithRetry)(context, projectName); console.log(`Project ${projectName} has the following peer dependencies:`, Object.keys(peerDependencies).join(', ')); for (const peerDependency of Object.keys(peerDependencies)) { if (resolvedPeerDependencies.includes(peerDependency)) { continue; } if ((0, plugin_utilities_1.HasProjectWithPackageName)(peerDependency)) { console.log(`Peer dependency ${peerDependency} is a project`); const deps = yield getAllPeerDependenciesForProject(context, (0, plugin_utilities_1.PackageNameToProjectName)(peerDependency), [...resolvedPeerDependencies]); peerDependencies = Object.assign(Object.assign({}, deps), peerDependencies); resolvedPeerDependencies.push(peerDependency); resolvedPeerDependencies.push(...Object.keys(deps)); } else { console.log(`Peer dependency ${peerDependency} is a package`); const deps = getPeerDependenciesForPackage(peerDependency); peerDependencies = Object.assign(Object.assign({}, deps), peerDependencies); resolvedPeerDependencies.push(peerDependency); resolvedPeerDependencies.push(...Object.keys(deps)); } } return Object.assign({}, peerDependencies); }); } function getPackageGroupFromPeerDependencies(context, packageGroupRegex) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const peerDependencies = yield getAllPeerDependenciesForProject(context); console.log('Include the following packages from the peer dependencies:', Object.keys(peerDependencies).join(', ')); return convertToPackageGroup(peerDependencies, packageGroupRegex); }); } function getPackageGroupFromRootDependencies(context, include) { if (include.length === 0) { console.log('No packages to include from the root package.json'); return []; } console.log('Include the following packages:', include.join(', '), 'from the root package.json'); const { dependencies = {}, devDependencies = {}, } = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(context.root, 'package.json'), 'utf-8')); const includeDependencies = Object.entries(dependencies).filter(([packageName]) => include.includes(packageName)).reduce((acc, [packageName, version]) => (Object.assign(Object.assign({}, acc), { [packageName]: version })), {}); const includePeerDependencies = Object.entries(devDependencies).filter(([packageName]) => include.includes(packageName)).reduce((acc, [packageName, version]) => (Object.assign(Object.assign({}, acc), { [packageName]: version })), {}); const includes = Object.assign(Object.assign({}, includeDependencies), includePeerDependencies); return convertToPackageGroup(includes, [/.*/]); } function getPackageGroup(context, packageGroupRegex, include, includeDependnecies) { return tslib_1.__awaiter(this, void 0, void 0, function* () { let packageGroupArray = mergePackageGroup( // load package defined as peer dependencies yield getPackageGroupFromPeerDependencies(context, packageGroupRegex), // load package defined by the include option from the root package.json getPackageGroupFromRootDependencies(context, include)); if (includeDependnecies) { packageGroupArray = mergePackageGroup(packageGroupArray, yield getPackageGroupFromDependencies(context, packageGroupRegex)); } return packageGroupArray; }); } function mergePackageGroup(original, updated) { const normalized = (0, package_json_1.normalizePackageGroup)(original); return [...updated, ...normalized].filter((item, index, array) => { return array.findIndex(({ package: packageName }) => packageName === item.package) === index; }); } function runExecutor(options, context) { return tslib_1.__awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d, _e, _f; console.log('Executor ran for update-package-group', options); const packageJson = yield (0, plugin_utilities_1.readPackageJsonForProjectWithRetry)(context); // ensure the property "ng-migrations" exists (_a = packageJson['nx-migrations']) !== null && _a !== void 0 ? _a : (packageJson['nx-migrations'] = {}); const { 'nx-migrations': nxMigrations } = packageJson; if (!nxMigrations) { console.error('INTERNAL: Could not extract the nx-migrations property from the package.json'); return { success: false }; } if (typeof nxMigrations !== 'object') { console.error('INTERNAL: The nx-migrations property in the package.json is not an object'); return { success: false }; } const packageGroupRegex = (_c = (_b = options.packageGroupRegex) === null || _b === void 0 ? void 0 : _b.map(regex => new RegExp(regex))) !== null && _c !== void 0 ? _c : []; console.log(`Update package group for project ${context.projectName} with the following package group regex:`, packageGroupRegex.map(regex => regex.toString())); yield (0, plugin_utilities_1.LoadProjectToPackageMappingWithRetry)(context); let packageGroup = yield getPackageGroup(context, packageGroupRegex, (_d = options.include) !== null && _d !== void 0 ? _d : [], (_e = options.includeDependencies) !== null && _e !== void 0 ? _e : false); (_f = nxMigrations.packageGroup) !== null && _f !== void 0 ? _f : (nxMigrations.packageGroup = []); if (options.merge) { console.log('Merge the package group'); packageGroup = mergePackageGroup(nxMigrations.packageGroup, packageGroup); } console.log('set the package group', JSON.stringify(packageGroup, undefined, 2)); nxMigrations.packageGroup = packageGroup.sort((a, b) => a.package.localeCompare(b.package)); (0, plugin_utilities_1.writePackageJsonFormProject)(context, packageJson); return { success: true, }; }); } //# sourceMappingURL=executor.js.map