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

164 lines 6.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.cdkAppGenerator = void 0; const devkit_1 = require("@nx/devkit"); const eslint_1 = require("@nx/eslint"); const jest_1 = require("@nx/jest"); const js_1 = require("@nx/js"); const workspace_1 = require("@nx/workspace"); const node_path_1 = require("node:path"); const normalize_project_options_1 = require("../../utils/normalize-project-options"); const use_inference_plugins_1 = require("../../utils/use-inference-plugins"); const versions_1 = require("../../utils/versions"); const generator_1 = require("../e2e-project/generator"); const generator_2 = require("../init/generator"); const app_type_1 = require("./app-type"); const create_project_configuration_1 = require("./create-project-configuration"); const addLambdaDependencies = (tree, versions) => { return (0, devkit_1.addDependenciesToPackageJson)(tree, { // Lambda dependencies '@aws-lambda-powertools/logger': versions['@aws-lambda-powertools/logger'], }, { // Lambda development dependencies '@types/aws-lambda': versions['@types/aws-lambda'], esbuild: versions['esbuild'], }); }; const addConfiguration = (tree, options, projectOptions, useInferencePlugins) => { const { projectName } = projectOptions; (0, devkit_1.addProjectConfiguration)(tree, projectName, (0, create_project_configuration_1.createProjectConfiguration)({ options, projectOptions, useInferencePlugins, })); }; const addESLint = async (tree, projectOptions, useInferencePlugins) => { const { projectName, projectRoot } = projectOptions; return await (0, eslint_1.lintProjectGenerator)(tree, { project: projectName, linter: eslint_1.Linter.EsLint, eslintFilePatterns: [`${projectRoot}/**/*.ts`], tsConfigPaths: [(0, devkit_1.joinPathFragments)(projectRoot, 'tsconfig.cdk.json')], skipFormat: true, setParserOptionsProject: false, skipPackageJson: false, unitTestRunner: 'jest', rootProject: false, addPlugin: useInferencePlugins, }); }; const jestConfigSnippet = `, collectCoverageFrom: [ 'cdk/**/*.ts', 'shared/**/*.ts', 'src/**/*.ts', '!cdk/main.ts', '!cdk.out/**/*', '!jest.config.ts', ], coverageThreshold: { global: { branches: 80, functions: 80, lines: 80, statements: 80, }, }, coverageReporters: ['lcov', 'text'], resetMocks: true, }; `; const addJest = async (tree, projectOptions, useInferencePlugins) => { const { projectName, projectRoot } = projectOptions; (0, devkit_1.writeJson)(tree, (0, devkit_1.joinPathFragments)(projectOptions.projectRoot, 'tsconfig.json'), {}); const callback = await (0, jest_1.configurationGenerator)(tree, { project: projectName, supportTsx: false, setupFile: 'none', skipSerializers: true, testEnvironment: 'node', skipFormat: true, addPlugin: useInferencePlugins, compiler: 'tsc', skipPackageJson: false, js: false, }); const jestConfig = tree.read(`${projectRoot}/jest.config.ts`, 'utf-8'); const lines = jestConfig.split('\n'); lines.pop(); lines.pop(); const extendedJestConfig = lines.join('\n') + jestConfigSnippet; tree.write(`${projectRoot}/jest.config.ts`, extendedJestConfig); return callback; }; const addE2ETestsProject = async (tree, options, projectOptions) => { const { projectName, projectRoot } = projectOptions; return await (0, generator_1.default)(tree, { name: `${projectName}-e2e`, directory: `${projectRoot}-e2e`, project: projectName, type: options.type, skipFormat: true, }); }; const addFiles = (tree, options, projectOptions) => { const { projectName, projectRoot } = projectOptions; (0, devkit_1.generateFiles)(tree, (0, node_path_1.resolve)(__dirname, 'files'), projectRoot, { offset: (0, devkit_1.offsetFromRoot)(projectRoot), rootTsConfigPath: (0, js_1.getRelativePathToRootTsConfig)(tree, projectRoot), defaultEnvironment: options.defaultEnvironment, environments: options.environments, type: options.type, tmpl: '', }); if (options.type === app_type_1.AppType.generic) { (0, devkit_1.generateFiles)(tree, (0, node_path_1.resolve)(__dirname, 'files-generic'), projectRoot, { projectName, defaultEnvironment: options.defaultEnvironment, environments: options.environments, tmpl: '', }); } else { (0, devkit_1.generateFiles)(tree, (0, node_path_1.resolve)(__dirname, 'files-lambda'), projectRoot, { projectName, defaultEnvironment: options.defaultEnvironment, environments: options.environments, tmpl: '', }); } }; const cdkAppGenerator = async (tree, options) => { const versions = (0, versions_1.getVersions)(); const projectOptions = (0, normalize_project_options_1.default)(tree, { name: options.name, directory: options.directory, projectType: workspace_1.ProjectType.Application, }); const inferencePlugins = (0, use_inference_plugins_1.useInferencePlugins)(tree); const tasks = []; tasks.push(await (0, js_1.initGenerator)(tree, { js: false, skipFormat: true, skipPackageJson: false, tsConfigName: 'tsconfig.base.json', })); tasks.push(await (0, generator_2.default)(tree, { skipFormat: true, })); if (options.type === app_type_1.AppType.lambda) { tasks.push(addLambdaDependencies(tree, versions)); } addConfiguration(tree, options, projectOptions, inferencePlugins); tasks.push(await addESLint(tree, projectOptions, inferencePlugins)); tasks.push(await addJest(tree, projectOptions, inferencePlugins)); tasks.push(await addE2ETestsProject(tree, options, projectOptions)); addFiles(tree, options, projectOptions); if (!options.skipFormat) { await (0, devkit_1.formatFiles)(tree); } return (0, devkit_1.runTasksInSerial)(...tasks); }; exports.cdkAppGenerator = cdkAppGenerator; exports.default = exports.cdkAppGenerator; //# sourceMappingURL=generator.js.map