@routineless/nx-aws-cdk
Version:
Nx plugin for AWS CDK
85 lines • 3.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const devkit_1 = require("@nx/devkit");
const get_npm_scope_1 = require("@nx/js/src/utils/package-json/get-npm-scope");
const node_1 = require("@nx/node");
const path_1 = require("path");
const routineless_1 = require("../../../utils/routineless");
const workspace_1 = require("../../../utils/workspace");
const normalizeOptions = (options) => {
return {
...options,
name: `${options.name}-infra`,
directory: `${options.projectRoot}/infra`,
baseProjectName: options.name,
};
};
const addStackToInfraApp = (tree, options) => {
const routinelessConfig = (0, routineless_1.getRoutinelessConfig)(tree);
if (!routinelessConfig || !routinelessConfig.infraApp) {
devkit_1.logger.warn("Could not find infra app name at .routineless.json config. Can't add stack to infra app");
return;
}
let infraAppConfig;
try {
infraAppConfig = (0, devkit_1.readProjectConfiguration)(tree, routinelessConfig.infraApp);
}
catch (e) {
devkit_1.logger.error('Could not find infra app');
return;
}
const mainInfraAppFilePath = (0, path_1.join)(infraAppConfig.root, 'src/main.ts');
const mainInfraAppFile = tree.read(mainInfraAppFilePath);
if (mainInfraAppFile) {
const { className } = (0, devkit_1.names)(options.baseProjectName);
const { name } = options;
const scope = (0, get_npm_scope_1.getNpmScope)(tree);
const importStatement = Buffer.from(`import { ${className}Stack } from '${scope ? `@${scope}/` : ''}${name}'\n`);
const stackCreationStatement = Buffer.from(`new ${className}Stack(app, \`${className}Stack\${stackEnvPostfix}\`, { ...baseStackProps })\n`);
const resultContent = Buffer.concat([importStatement, mainInfraAppFile, stackCreationStatement]);
tree.write(mainInfraAppFilePath, resultContent);
}
};
const updateAwsLambdaInfraProjectConfiguration = (tree, options) => {
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.name);
const implicitDependencies = projectConfig.implicitDependencies || [];
implicitDependencies.push(options.name.replace('infra', 'runtime'));
projectConfig.implicitDependencies = implicitDependencies;
(0, devkit_1.updateProjectConfiguration)(tree, options.name, projectConfig);
};
const addFiles = (tree, options, filesType = 'files') => {
const templateOptions = {
...options,
...(0, devkit_1.names)(options.baseProjectName),
offsetFromRoot: (0, devkit_1.offsetFromRoot)(options.directory),
runtimeProjectDirectory: options.directory.replace('infra', 'runtime'),
template: '',
};
(0, devkit_1.generateFiles)(tree, (0, path_1.join)(__dirname, 'generatorFiles', filesType), options.directory, templateOptions);
};
const awsLambdaInfraLibraryGenerator = async (tree, options) => {
const tasks = [];
const normalizedOptions = normalizeOptions(options);
tasks.push(await (0, node_1.libraryGenerator)(tree, {
...normalizedOptions,
projectNameAndRootFormat: 'as-provided',
skipFormat: true,
compiler: 'tsc',
addPlugin: true,
}));
(0, workspace_1.deleteNodeLibRedundantDirs)(tree, normalizedOptions.directory);
addFiles(tree, normalizedOptions);
if (normalizedOptions.unitTestRunner === 'jest') {
addFiles(tree, normalizedOptions, 'jest-files');
}
updateAwsLambdaInfraProjectConfiguration(tree, normalizedOptions);
if (normalizedOptions.addLambdaToInfraApp) {
addStackToInfraApp(tree, normalizedOptions);
}
if (!normalizedOptions.skipFormat) {
await (0, devkit_1.formatFiles)(tree);
}
return (0, devkit_1.runTasksInSerial)(...tasks);
};
exports.default = awsLambdaInfraLibraryGenerator;
//# sourceMappingURL=index.js.map