UNPKG

nx-serverless-cdk

Version:

nx-serverless-cdk is an Nx plugin for creating AWS CDK applications and libraries inside an Nx monorepo. It offers the possibility to test and debug CDK applications as well as AWS Lambda functions locally. The plugin provides the full flexibility of the

89 lines 3.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createNodes = exports.createDependencies = exports.targetsCache = exports.calculatedTargets = void 0; const devkit_1 = require("@nx/devkit"); const node_fs_1 = require("node:fs"); const node_path_1 = require("node:path"); const app_type_1 = require("../generators/cdk-app/app-type"); const create_project_configuration_1 = require("../generators/cdk-app/create-project-configuration"); const cachePath = (0, node_path_1.join)(devkit_1.cacheDir, 'nx-serverless-cdk.hash'); exports.calculatedTargets = {}; const readTargetsCache = () => { return (0, devkit_1.readJsonFile)(cachePath); }; exports.targetsCache = (0, node_fs_1.existsSync)(cachePath) ? readTargetsCache() : {}; const writeTargetsToCache = (targets) => { (0, devkit_1.writeJsonFile)(cachePath, targets); }; const hashObject = (obj) => { const parts = []; for (const key of Object.keys(obj).sort()) { parts.push(key); parts.push(JSON.stringify(obj[key])); } return (0, devkit_1.hashArray)(parts); }; const calculateHashForCreateNodes = ({ defaultEnvironment, environments, type, options, }) => { return (0, devkit_1.hashArray)([ defaultEnvironment, (0, devkit_1.hashArray)(environments), type, hashObject(options), ]); }; const buildNxServerlessCdkTargets = async ({ defaultEnvironment, environments, type, options, }) => { return (0, create_project_configuration_1.createTargets)({ defaultEnvironment, environments, type, customTargetNames: options, }); }; const createDependencies = () => { writeTargetsToCache(exports.calculatedTargets); return []; }; exports.createDependencies = createDependencies; exports.createNodes = [ '**/cdk.json', async (configFilePath, options, context) => { const normalizedOptions = options ?? {}; const projectRoot = (0, node_path_1.dirname)(configFilePath); const projectRootResolved = (0, node_path_1.resolve)(context.workspaceRoot, projectRoot); const cdkJsonResolved = (0, node_path_1.resolve)(context.workspaceRoot, configFilePath); // Do not create a project if package.json and project.json isn't there. const siblingFiles = (0, node_fs_1.readdirSync)(projectRootResolved); if (!siblingFiles.includes('package.json') && !siblingFiles.includes('project.json')) { return {}; } const cdkJson = (0, devkit_1.readJsonFile)(cdkJsonResolved); const defaultEnvironment = cdkJson.context['nx-serverless-cdk/defaultEnvironment'] ?? 'Dev'; const environments = cdkJson.context['nx-serverless-cdk/environments'] ?? []; const type = cdkJson.context['nx-serverless-cdk/type'] ?? app_type_1.AppType.generic; const hash = calculateHashForCreateNodes({ defaultEnvironment, environments, type, options: normalizedOptions, }); const targets = exports.targetsCache[hash] ? exports.targetsCache[hash] : await buildNxServerlessCdkTargets({ defaultEnvironment, environments, type, options: normalizedOptions, }); exports.calculatedTargets[hash] = targets; return { projects: { [projectRoot]: { root: projectRoot, targets, }, }, }; }, ]; //# sourceMappingURL=plugin.js.map