@aws/nx-plugin 0.111.0 → 0.112.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +1 -0
  2. package/generators.json +6 -0
  3. package/package.json +1 -1
  4. package/src/preset/__snapshots__/generator.spec.ts.snap +2 -0
  5. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +4822 -0
  6. package/src/ts/rdb/files/Dockerfile.template +15 -0
  7. package/src/ts/rdb/files/prisma/models/example.prisma.template +5 -0
  8. package/src/ts/rdb/files/prisma/schema.prisma.template +9 -0
  9. package/src/ts/rdb/files/prisma.config.ts.template +24 -0
  10. package/src/ts/rdb/files/scripts/docker-pull.ts.template +15 -0
  11. package/src/ts/rdb/files/scripts/docker-start.ts.template +81 -0
  12. package/src/ts/rdb/files/scripts/wait-for-db.ts.template +55 -0
  13. package/src/ts/rdb/files/src/constants.ts.template +8 -0
  14. package/src/ts/rdb/files/src/create-db-user-handler.ts.template +128 -0
  15. package/src/ts/rdb/files/src/index.ts.template +2 -0
  16. package/src/ts/rdb/files/src/migration-handler.ts.template +54 -0
  17. package/src/ts/rdb/files/src/prisma.ts.template +104 -0
  18. package/src/ts/rdb/files/src/utils.ts.template +145 -0
  19. package/src/ts/rdb/generator.d.ts +10 -0
  20. package/src/ts/rdb/generator.js +206 -0
  21. package/src/ts/rdb/generator.js.map +1 -0
  22. package/src/ts/rdb/schema.d.ts +17 -0
  23. package/src/ts/rdb/schema.json +73 -0
  24. package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +43 -0
  25. package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +380 -0
  26. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +732 -0
  27. package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +742 -0
  28. package/src/utils/rdb-constructs/rdb-constructs.d.ts +23 -0
  29. package/src/utils/rdb-constructs/rdb-constructs.js +59 -0
  30. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -0
  31. package/src/utils/versions.d.ts +12 -1
  32. package/src/utils/versions.js +11 -0
  33. package/src/utils/versions.js.map +1 -1
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tsRdbGenerator = exports.TS_RDB_GENERATOR_INFO = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /**
6
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
7
+ * SPDX-License-Identifier: Apache-2.0
8
+ */
9
+ const devkit_1 = require("@nx/devkit");
10
+ const nx_1 = require("../../utils/nx");
11
+ const metrics_1 = require("../../utils/metrics");
12
+ const format_1 = require("../../utils/format");
13
+ const shared_constructs_1 = require("../../utils/shared-constructs");
14
+ const rdb_constructs_1 = require("../../utils/rdb-constructs/rdb-constructs");
15
+ const names_1 = require("../../utils/names");
16
+ const fs_1 = require("../../utils/fs");
17
+ const paths_1 = require("../../utils/paths");
18
+ const generator_1 = tslib_1.__importStar(require("../lib/generator"));
19
+ const eslint_1 = require("../lib/eslint");
20
+ const bundle_1 = require("../../utils/bundle/bundle");
21
+ const versions_1 = require("../../utils/versions");
22
+ const iac_1 = require("../../utils/iac");
23
+ const npm_scope_1 = require("../../utils/npm-scope");
24
+ const git_1 = require("../../utils/git");
25
+ const port_1 = require("../../utils/port");
26
+ const pnpm_workspace_1 = require("../../utils/pnpm-workspace");
27
+ exports.TS_RDB_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
28
+ const tsRdbGenerator = async (tree, options) => {
29
+ const nameKebabCase = (0, names_1.kebabCase)(options.name);
30
+ const nameClassName = (0, names_1.toClassName)(options.name);
31
+ const databaseUser = options.databaseUser ?? 'dbadmin';
32
+ const databaseName = (0, names_1.snakeCase)(options.databaseName ?? options.name);
33
+ const iacProvider = await (0, iac_1.resolveIacProvider)(tree, options.iacProvider);
34
+ const { fullyQualifiedName, dir } = (0, generator_1.getTsLibDetails)(tree, {
35
+ name: options.name,
36
+ directory: options.directory,
37
+ subDirectory: options.subDirectory,
38
+ });
39
+ await (0, generator_1.default)(tree, {
40
+ name: options.name,
41
+ directory: options.directory,
42
+ });
43
+ (0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(dir, 'tsconfig.lib.json'), (tsConfig) => ({
44
+ ...tsConfig,
45
+ include: ['src/**/*.ts', 'generated/prisma/**/*.ts'],
46
+ }));
47
+ await (0, eslint_1.addIgnoresToEslintConfig)(tree, (0, devkit_1.joinPathFragments)(dir, 'eslint.config.mjs'), ['**/generated/**', '**/out-tsc']);
48
+ const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, fullyQualifiedName);
49
+ const localDbPort = (0, port_1.assignPort)(tree, projectConfig, options.engine === 'MySQL' ? 3306 : 5432);
50
+ const localDbHost = 'localhost';
51
+ const localDbUser = options.engine === 'MySQL' ? 'root' : 'dbadmin';
52
+ const localDbPassword = 'password';
53
+ const templateOptions = {
54
+ engine: options.engine,
55
+ runtimeConfigKey: nameClassName,
56
+ databasePackageAlias: (0, npm_scope_1.toScopeAlias)(fullyQualifiedName),
57
+ databaseProvider: options.engine === 'MySQL' ? 'mysql' : 'postgresql',
58
+ prismaVersion: versions_1.TS_VERSIONS.prisma,
59
+ prismaAdapterPackage: options.engine === 'MySQL'
60
+ ? '@prisma/adapter-mariadb'
61
+ : '@prisma/adapter-pg',
62
+ prismaAdapterClassName: options.engine === 'MySQL' ? 'PrismaMariaDb' : 'PrismaPg',
63
+ localDbPort,
64
+ localDbHost,
65
+ localDbName: databaseName,
66
+ localDbUser,
67
+ localDbPassword,
68
+ };
69
+ (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), dir, templateOptions);
70
+ (0, git_1.updateGitIgnore)(tree, dir, (patterns) => [...patterns, 'generated/prisma']);
71
+ const relativePathToRoot = (0, paths_1.getRelativePathToRootByDirectory)(projectConfig.root);
72
+ const fs = new fs_1.FsCommands(tree);
73
+ await (0, bundle_1.addTypeScriptBundleTarget)(tree, projectConfig, {
74
+ targetFilePath: 'src/migration-handler.ts',
75
+ bundleOutputDir: 'migration',
76
+ });
77
+ await (0, bundle_1.addTypeScriptBundleTarget)(tree, projectConfig, {
78
+ targetFilePath: 'src/create-db-user-handler.ts',
79
+ bundleOutputDir: 'create-db-user',
80
+ });
81
+ const bundleTarget = projectConfig.targets['bundle'];
82
+ const rolldownCommand = bundleTarget.options.command;
83
+ delete bundleTarget.options.command;
84
+ bundleTarget.options = {
85
+ ...bundleTarget.options,
86
+ commands: [
87
+ fs.rm(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),
88
+ fs.mkdir(`${relativePathToRoot}dist/{projectRoot}/bundle/migration`),
89
+ fs.cp('prisma', `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma`),
90
+ fs.cp('prisma.config.ts', `${relativePathToRoot}dist/{projectRoot}/bundle/migration/prisma.config.ts`),
91
+ fs.cp('Dockerfile', `${relativePathToRoot}dist/{projectRoot}/bundle/migration/Dockerfile`),
92
+ rolldownCommand,
93
+ ],
94
+ parallel: false,
95
+ };
96
+ projectConfig.targets.generate = {
97
+ executor: 'nx:run-commands',
98
+ outputs: ['{projectRoot}/generated/prisma'],
99
+ options: {
100
+ command: 'prisma generate',
101
+ cwd: '{projectRoot}',
102
+ },
103
+ };
104
+ const containerName = `${(0, npm_scope_1.getNpmScope)(tree)}-${databaseName}`;
105
+ const dockerImage = options.engine === 'MySQL'
106
+ ? 'public.ecr.aws/docker/library/mysql:8.0.44'
107
+ : 'public.ecr.aws/docker/library/postgres:17.7';
108
+ projectConfig.targets['docker-pull'] = {
109
+ executor: 'nx:run-commands',
110
+ options: {
111
+ command: `tsx scripts/docker-pull.ts ${dockerImage}`,
112
+ cwd: '{projectRoot}',
113
+ },
114
+ };
115
+ projectConfig.targets['serve-local'] = {
116
+ executor: 'nx:run-commands',
117
+ options: {
118
+ command: `tsx scripts/docker-start.ts ${containerName} ${dockerImage} ${localDbPort} ${databaseName}${options.engine === 'MySQL' ? '' : ` ${localDbUser}`} ${localDbPassword}`,
119
+ cwd: '{projectRoot}',
120
+ },
121
+ continuous: true,
122
+ dependsOn: ['docker-pull'],
123
+ };
124
+ projectConfig.targets['wait-for-db'] = {
125
+ executor: 'nx:run-commands',
126
+ dependsOn: ['serve-local'],
127
+ options: {
128
+ command: `tsx scripts/wait-for-db.ts ${localDbPort} ${databaseName} ${localDbUser} ${localDbPassword}`,
129
+ cwd: '{projectRoot}',
130
+ },
131
+ };
132
+ projectConfig.targets.prisma = {
133
+ executor: 'nx:run-commands',
134
+ dependsOn: ['serve-local', 'wait-for-db'],
135
+ options: {
136
+ cwd: '{projectRoot}',
137
+ command: 'prisma',
138
+ env: {
139
+ SERVE_LOCAL: 'true',
140
+ },
141
+ },
142
+ };
143
+ const migrationBundleDir = (0, devkit_1.joinPathFragments)('dist', projectConfig.root, 'bundle', 'migration');
144
+ const dockerImageTag = `${(0, npm_scope_1.getNpmScope)(tree)}-${(0, names_1.kebabCase)(options.name)}-migration:latest`;
145
+ if (iacProvider === 'Terraform') {
146
+ projectConfig.targets['docker'] = {
147
+ cache: true,
148
+ executor: 'nx:run-commands',
149
+ options: {
150
+ command: `docker build --platform linux/arm64 --provenance=false -t ${dockerImageTag} ${migrationBundleDir}`,
151
+ },
152
+ dependsOn: ['bundle'],
153
+ };
154
+ (0, nx_1.addDependencyToTargetIfNotPresent)(projectConfig, 'build', 'docker');
155
+ }
156
+ (0, nx_1.addDependencyToTargetIfNotPresent)(projectConfig, 'compile', 'generate');
157
+ (0, devkit_1.updateProjectConfiguration)(tree, fullyQualifiedName, projectConfig);
158
+ await (0, shared_constructs_1.sharedConstructsGenerator)(tree, { iacProvider });
159
+ await (0, rdb_constructs_1.addRdbInfra)(tree, {
160
+ iacProvider,
161
+ projectName: fullyQualifiedName,
162
+ nameClassName,
163
+ nameKebabCase,
164
+ databasePackageAlias: (0, npm_scope_1.toScopeAlias)(fullyQualifiedName),
165
+ databaseName,
166
+ adminUser: databaseUser,
167
+ engine: options.engine === 'MySQL' ? 'mysql' : 'postgres',
168
+ migrationBundleDir,
169
+ createDbUserBundleDir: (0, devkit_1.joinPathFragments)('dist', projectConfig.root, 'bundle', 'create-db-user'),
170
+ dockerImageTag,
171
+ });
172
+ (0, devkit_1.addDependenciesToPackageJson)(tree, (0, versions_1.withVersions)([
173
+ '@aws-lambda-powertools/parameters',
174
+ '@aws-sdk/client-appconfigdata',
175
+ '@aws-sdk/client-secrets-manager',
176
+ '@aws-sdk/rds-signer',
177
+ '@prisma/client',
178
+ ...(options.engine === 'MySQL'
179
+ ? ['@prisma/adapter-mariadb', 'mariadb']
180
+ : ['@prisma/adapter-pg', 'pg']),
181
+ ]), (0, versions_1.withVersions)([
182
+ 'prisma',
183
+ 'tsx',
184
+ 'dockerode',
185
+ '@types/dockerode',
186
+ '@types/aws-lambda',
187
+ ...(options.engine === 'MySQL'
188
+ ? []
189
+ : ['@types/pg']),
190
+ ]));
191
+ (0, pnpm_workspace_1.registerPnpmBuiltDependencies)(tree, {
192
+ '@prisma/engines': false,
193
+ prisma: false,
194
+ ssh2: false,
195
+ 'cpu-features': false,
196
+ protobufjs: false,
197
+ });
198
+ await (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [exports.TS_RDB_GENERATOR_INFO]);
199
+ await (0, format_1.formatFilesInSubtree)(tree);
200
+ return () => {
201
+ (0, devkit_1.installPackagesTask)(tree);
202
+ };
203
+ };
204
+ exports.tsRdbGenerator = tsRdbGenerator;
205
+ exports.default = exports.tsRdbGenerator;
206
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/rdb/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { IacProviderOption } from '../../utils/iac';
6
+
7
+ export interface TsRdbGeneratorSchema {
8
+ name: string;
9
+ directory?: string;
10
+ subDirectory?: string;
11
+ service: 'Aurora';
12
+ engine: 'PostgreSQL' | 'MySQL';
13
+ databaseUser?: string;
14
+ databaseName?: string;
15
+ ormFramework: 'Prisma';
16
+ iacProvider: IacProviderOption;
17
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "$id": "ts#rdb",
4
+ "title": "ts#rdb",
5
+ "description": "Create a relational database project",
6
+ "type": "object",
7
+ "properties": {
8
+ "name": {
9
+ "type": "string",
10
+ "description": "Name of the database project to generate",
11
+ "$default": {
12
+ "$source": "argv",
13
+ "index": 0
14
+ },
15
+ "x-priority": "important",
16
+ "x-prompt": "What name would you like your database project to have? i.e: MyDb"
17
+ },
18
+ "directory": {
19
+ "type": "string",
20
+ "description": "The directory to store the application in.",
21
+ "default": "packages",
22
+ "x-priority": "important",
23
+ "x-prompt": "Which directory do you want to create the project in?"
24
+ },
25
+ "subDirectory": {
26
+ "type": "string",
27
+ "description": "The sub directory the project is placed in. By default this is the project name.",
28
+ "x-prompt": "Which sub directory do you want to create the project in? (By default this is the project name)"
29
+ },
30
+ "service": {
31
+ "type": "string",
32
+ "enum": ["Aurora"],
33
+ "default": "Aurora",
34
+ "description": "Relational database service to provision.",
35
+ "x-priority": "important",
36
+ "x-prompt": "Which database service would you like to use?"
37
+ },
38
+ "engine": {
39
+ "type": "string",
40
+ "enum": ["PostgreSQL", "MySQL"],
41
+ "default": "PostgreSQL",
42
+ "description": "Database engine to use with the selected service.",
43
+ "x-priority": "important",
44
+ "x-prompt": "Which database engine would you like to use?"
45
+ },
46
+ "databaseUser": {
47
+ "type": "string",
48
+ "description": "Database admin username. Defaults to 'dbadmin'.",
49
+ "default": "dbadmin"
50
+ },
51
+ "databaseName": {
52
+ "type": "string",
53
+ "description": "Initial database name. Defaults to the project name."
54
+ },
55
+ "ormFramework": {
56
+ "type": "string",
57
+ "enum": ["Prisma"],
58
+ "default": "Prisma",
59
+ "description": "ORM framework to use for the generated project.",
60
+ "x-priority": "important",
61
+ "x-prompt": "Which ORM framework would you like to use?"
62
+ },
63
+ "iacProvider": {
64
+ "type": "string",
65
+ "description": "The preferred IaC provider. By default this is inherited from your initial selection.",
66
+ "enum": ["Inherit", "CDK", "Terraform"],
67
+ "x-priority": "important",
68
+ "default": "Inherit",
69
+ "x-prompt": "Which provider would you like to manage your infrastructure? (default: Inherit)"
70
+ }
71
+ },
72
+ "required": ["name", "service", "engine", "ormFramework"]
73
+ }
@@ -0,0 +1,43 @@
1
+ import * as path from 'path';
2
+ import * as url from 'url';
3
+ import { Construct } from 'constructs';
4
+ import { DB_PACKAGE_NAME } from '<%= databasePackageAlias %>';
5
+ import {
6
+ AuroraDatabase,
7
+ AuroraDatabaseEngines,
8
+ AuroraDatabaseProps,
9
+ } from '../../core/rdb/aurora.js';
10
+ import { findWorkspaceRoot } from '../../core/workspace.js';
11
+
12
+ export type <%= nameClassName %>Props = Omit<
13
+ AuroraDatabaseProps,
14
+ | 'databaseName'
15
+ | 'adminUser'
16
+ | 'createDbUserBundleDir'
17
+ | 'engine'
18
+ | 'runtimeConfigKey'
19
+ | 'migrationBundleDir'
20
+ >;
21
+
22
+ /**
23
+ * CDK construct that provisions an Aurora Serverless v2 cluster.
24
+ */
25
+ export class <%= nameClassName %> extends AuroraDatabase {
26
+ constructor(scope: Construct, id: string, props: <%= nameClassName %>Props) {
27
+ super(scope, id, {
28
+ ...props,
29
+ databaseName: '<%= databaseName %>',
30
+ adminUser: '<%= adminUser %>',
31
+ runtimeConfigKey: DB_PACKAGE_NAME,
32
+ migrationBundleDir: path.join(
33
+ findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
34
+ '<%- migrationBundleDir %>',
35
+ ),
36
+ createDbUserBundleDir: path.join(
37
+ findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
38
+ '<%- createDbUserBundleDir %>',
39
+ ),
40
+ engine: AuroraDatabaseEngines.<%= engine %>({}),
41
+ });
42
+ }
43
+ }