@aws/nx-plugin 1.0.0-rc.15 → 1.0.0-rc.17
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.
- package/package.json +1 -1
- package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +122 -14
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +122 -14
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +74 -322
- package/src/ts/rdb/files/config.json.template +14 -0
- package/src/ts/rdb/files/prisma.config.ts.template +5 -4
- package/src/ts/rdb/files/src/index.ts.template +0 -1
- package/src/ts/rdb/files/src/prisma.ts.template +26 -21
- package/src/ts/rdb/generator.d.ts +0 -4
- package/src/ts/rdb/generator.js +15 -7
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/utils/api-constructs/files/cdk/core/api/utils/utils.ts.template +61 -7
- package/src/utils/files/common/scripts/src/rdb/pull-image.ts.template +16 -0
- package/src/utils/files/common/scripts/src/rdb/start-container.ts.template +102 -0
- package/src/utils/files/common/scripts/src/rdb/wait-for-db.ts.template +59 -0
- package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +12 -2
- package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +6 -4
- package/src/utils/rdb-constructs/rdb-constructs.d.ts +1 -0
- package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
- package/src/utils/shared-rdb-scripts.d.ts +11 -0
- package/src/utils/shared-rdb-scripts.js +20 -0
- package/src/utils/shared-rdb-scripts.js.map +1 -0
- package/src/ts/rdb/files/scripts/pull-image.ts.template +0 -15
- package/src/ts/rdb/files/scripts/start-container.ts.template +0 -84
- package/src/ts/rdb/files/scripts/wait-for-db.ts.template +0 -55
- package/src/ts/rdb/files/src/constants.ts.template +0 -8
package/src/ts/rdb/generator.js
CHANGED
|
@@ -6,6 +6,7 @@ const tslib_1 = require("tslib");
|
|
|
6
6
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
7
|
* SPDX-License-Identifier: Apache-2.0
|
|
8
8
|
*/
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
9
10
|
const devkit_1 = require("@nx/devkit");
|
|
10
11
|
const bundle_1 = require("../../utils/bundle/bundle");
|
|
11
12
|
const containers_1 = require("../../utils/containers");
|
|
@@ -22,6 +23,8 @@ const pnpm_workspace_1 = require("../../utils/pnpm-workspace");
|
|
|
22
23
|
const port_1 = require("../../utils/port");
|
|
23
24
|
const rdb_constructs_1 = require("../../utils/rdb-constructs/rdb-constructs");
|
|
24
25
|
const shared_constructs_1 = require("../../utils/shared-constructs");
|
|
26
|
+
const shared_constructs_constants_1 = require("../../utils/shared-constructs-constants");
|
|
27
|
+
const shared_rdb_scripts_1 = require("../../utils/shared-rdb-scripts");
|
|
25
28
|
const versions_1 = require("../../utils/versions");
|
|
26
29
|
const generator_1 = tslib_1.__importStar(require("../lib/generator"));
|
|
27
30
|
exports.TS_RDB_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
|
|
@@ -59,6 +62,10 @@ const tsRdbGenerator = async (tree, options) => {
|
|
|
59
62
|
const localDbHost = 'localhost';
|
|
60
63
|
const localDbUser = options.engine === 'mysql' ? 'root' : 'dbadmin';
|
|
61
64
|
const localDbPassword = 'password';
|
|
65
|
+
const containerName = `${(0, npm_scope_1.getNpmScope)(tree)}-${databaseName}`;
|
|
66
|
+
const dockerImage = options.engine === 'mysql'
|
|
67
|
+
? 'public.ecr.aws/docker/library/mysql:8.0.44'
|
|
68
|
+
: 'public.ecr.aws/docker/library/postgres:17.7';
|
|
62
69
|
const templateOptions = {
|
|
63
70
|
engine: options.engine,
|
|
64
71
|
runtimeConfigKey: nameClassName,
|
|
@@ -75,9 +82,13 @@ const tsRdbGenerator = async (tree, options) => {
|
|
|
75
82
|
localDbUser,
|
|
76
83
|
localDbPassword,
|
|
77
84
|
containerEngine,
|
|
85
|
+
containerName,
|
|
86
|
+
dockerImage,
|
|
78
87
|
};
|
|
79
88
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), dir, templateOptions);
|
|
80
89
|
(0, git_1.updateGitIgnore)(tree, dir, (patterns) => [...patterns, 'generated/prisma']);
|
|
90
|
+
await (0, shared_rdb_scripts_1.sharedRdbScriptsGenerator)(tree);
|
|
91
|
+
const scriptsDir = (0, node_path_1.relative)(dir, (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_SCRIPTS_DIR, 'src', 'rdb'));
|
|
81
92
|
const relativePathToRoot = (0, paths_1.getRelativePathToRootByDirectory)(projectConfig.root);
|
|
82
93
|
const fs = new fs_1.FsCommands(tree);
|
|
83
94
|
const migrationBundleDir = (0, devkit_1.joinPathFragments)('dist', projectConfig.root, 'bundle', 'migration');
|
|
@@ -120,21 +131,17 @@ const tsRdbGenerator = async (tree, options) => {
|
|
|
120
131
|
cwd: '{projectRoot}',
|
|
121
132
|
},
|
|
122
133
|
};
|
|
123
|
-
const containerName = `${(0, npm_scope_1.getNpmScope)(tree)}-${databaseName}`;
|
|
124
|
-
const dockerImage = options.engine === 'mysql'
|
|
125
|
-
? 'public.ecr.aws/docker/library/mysql:8.0.44'
|
|
126
|
-
: 'public.ecr.aws/docker/library/postgres:17.7';
|
|
127
134
|
projectConfig.targets['pull-image'] = {
|
|
128
135
|
executor: 'nx:run-commands',
|
|
129
136
|
options: {
|
|
130
|
-
command: `tsx
|
|
137
|
+
command: `tsx ${scriptsDir}/pull-image.ts`,
|
|
131
138
|
cwd: '{projectRoot}',
|
|
132
139
|
},
|
|
133
140
|
};
|
|
134
141
|
projectConfig.targets['serve-local'] = {
|
|
135
142
|
executor: 'nx:run-commands',
|
|
136
143
|
options: {
|
|
137
|
-
command: `tsx
|
|
144
|
+
command: `tsx ${scriptsDir}/start-container.ts`,
|
|
138
145
|
cwd: '{projectRoot}',
|
|
139
146
|
},
|
|
140
147
|
continuous: true,
|
|
@@ -144,7 +151,7 @@ const tsRdbGenerator = async (tree, options) => {
|
|
|
144
151
|
executor: 'nx:run-commands',
|
|
145
152
|
dependsOn: ['serve-local'],
|
|
146
153
|
options: {
|
|
147
|
-
command: `tsx
|
|
154
|
+
command: `tsx ${scriptsDir}/wait-for-db.ts`,
|
|
148
155
|
cwd: '{projectRoot}',
|
|
149
156
|
},
|
|
150
157
|
};
|
|
@@ -185,6 +192,7 @@ const tsRdbGenerator = async (tree, options) => {
|
|
|
185
192
|
await (0, rdb_constructs_1.addRdbInfra)(tree, {
|
|
186
193
|
iac,
|
|
187
194
|
projectName: fullyQualifiedName,
|
|
195
|
+
projectRoot: dir,
|
|
188
196
|
nameClassName,
|
|
189
197
|
nameKebabCase,
|
|
190
198
|
databasePackageAlias: (0, npm_scope_1.toScopeAlias)(fullyQualifiedName),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/rdb/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAUoB;AACpB,sDAAsE;AACtE,uDAA2D;AAC3D,+CAA0D;AAC1D,uCAA4C;AAC5C,yCAAkD;AAClD,yCAA6C;AAC7C,iDAAsE;AACtE,6CAAsE;AACtE,qDAAkE;AAClE,uCAKwB;AACxB,6CAAqE;AACrE,+DAA2E;AAC3E,2CAA8C;AAC9C,8EAAwE;AACxE,qEAA0E;AAC1E,mDAAiE;AACjE,sEAAuE;AAG1D,QAAA,qBAAqB,GAChC,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAExB,MAAM,cAAc,GAAG,KAAK,EACjC,IAAU,EACV,OAA6B,EACD,EAAE;IAC9B,MAAM,aAAa,GAAG,IAAA,iBAAS,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,IAAA,mBAAW,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC;IACvD,MAAM,YAAY,GAAG,IAAA,iBAAS,EAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,MAAM,IAAA,8BAAiB,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACjE,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG,IAAA,2BAAe,EAAC,IAAI,EAAE;QACxD,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,CAAC;IAEH,IAAI,aAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,IAAA,iCAAwB,EAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACnD,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAA,mBAAkB,EAAC,IAAI,EAAE;YAC7B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,IAAA,mBAAU,EAAC,IAAI,EAAE,IAAA,0BAAiB,EAAC,GAAG,EAAE,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC3E,GAAG,QAAQ;QACX,OAAO,EAAE,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACrD,CAAC,CAAC,CAAC;IAEJ,MAAM,aAAa,GAAG,IAAA,iCAAwB,EAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,IAAA,iBAAU,EAC5B,IAAI,EACJ,aAAa,EACb,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CACzC,CAAC;IACF,MAAM,WAAW,GAAG,WAAW,CAAC;IAChC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,MAAM,eAAe,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/rdb/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -148,6 +148,8 @@ export type ApiIntegrations<TOperation extends string, TBaseIntegration> =
|
|
|
148
148
|
* @template TDefaultIntegrationProps - Type for default integration properties
|
|
149
149
|
* @template TDefaultIntegration - Type for default integration implementation
|
|
150
150
|
* @template TPattern - The integration pattern ('shared' or 'isolated')
|
|
151
|
+
* @template TOverridden - Union of operation names that have been overridden
|
|
152
|
+
* @template TOperationOptioned - Union of operation names with per-operation options
|
|
151
153
|
*/
|
|
152
154
|
export class IntegrationBuilder<
|
|
153
155
|
TOperation extends string,
|
|
@@ -156,6 +158,8 @@ export class IntegrationBuilder<
|
|
|
156
158
|
TDefaultIntegrationProps extends object,
|
|
157
159
|
TDefaultIntegration extends TBaseIntegration,
|
|
158
160
|
TPattern extends 'shared' | 'isolated',
|
|
161
|
+
TOverridden extends string = never,
|
|
162
|
+
TOperationOptioned extends string = never,
|
|
159
163
|
> {
|
|
160
164
|
/** Options for the integration builder */
|
|
161
165
|
private options: IntegrationBuilderProps<
|
|
@@ -168,6 +172,11 @@ export class IntegrationBuilder<
|
|
|
168
172
|
/** Map of operation names to their custom integrations */
|
|
169
173
|
private integrations: Partial<TIntegrations> = {};
|
|
170
174
|
|
|
175
|
+
/** Map of default integration keys to per-operation default option overrides */
|
|
176
|
+
private perOperationOptions: Partial<
|
|
177
|
+
Record<string, Partial<TDefaultIntegrationProps>>
|
|
178
|
+
> = {};
|
|
179
|
+
|
|
171
180
|
/**
|
|
172
181
|
* Create an Integration Builder for an HTTP API with a shared pattern
|
|
173
182
|
*/
|
|
@@ -322,11 +331,16 @@ export class IntegrationBuilder<
|
|
|
322
331
|
/**
|
|
323
332
|
* Overrides default integrations with custom implementations for specific operations.
|
|
324
333
|
*
|
|
334
|
+
* Operations which have per-operation options set via withOperationOptions cannot be
|
|
335
|
+
* overridden, since these still use the default integration.
|
|
336
|
+
*
|
|
325
337
|
* @param overrides - Map of operation names to their custom integration implementations
|
|
326
338
|
* @returns The builder instance with updated type information reflecting the overrides
|
|
327
339
|
*/
|
|
328
340
|
public withOverrides<
|
|
329
|
-
TOverrideIntegrations extends Partial<
|
|
341
|
+
TOverrideIntegrations extends Partial<
|
|
342
|
+
Record<Exclude<TOperation, TOperationOptioned>, TBaseIntegration>
|
|
343
|
+
>,
|
|
330
344
|
>(overrides: TOverrideIntegrations) {
|
|
331
345
|
this.integrations = { ...this.integrations, ...overrides };
|
|
332
346
|
// Re-type to include the overridden integration types.
|
|
@@ -342,7 +356,9 @@ export class IntegrationBuilder<
|
|
|
342
356
|
MergedIntegrations,
|
|
343
357
|
TDefaultIntegrationProps,
|
|
344
358
|
TDefaultIntegration,
|
|
345
|
-
TPattern
|
|
359
|
+
TPattern,
|
|
360
|
+
TOverridden | Extract<keyof TOverrideIntegrations, string>,
|
|
361
|
+
TOperationOptioned
|
|
346
362
|
>;
|
|
347
363
|
}
|
|
348
364
|
|
|
@@ -361,6 +377,43 @@ export class IntegrationBuilder<
|
|
|
361
377
|
return this;
|
|
362
378
|
}
|
|
363
379
|
|
|
380
|
+
/**
|
|
381
|
+
* Updates the default integration options for specific operations, without
|
|
382
|
+
* affecting the others. The given options are merged with the defaults (and
|
|
383
|
+
* any options set via withDefaultOptions) when building each default integration.
|
|
384
|
+
*
|
|
385
|
+
* Operations which have been replaced via withOverrides cannot be targeted, since
|
|
386
|
+
* they no longer use the default integration.
|
|
387
|
+
*
|
|
388
|
+
* @param options - Map of operation names to partial default integration options
|
|
389
|
+
* @returns The builder instance
|
|
390
|
+
*/
|
|
391
|
+
public withOperationOptions<
|
|
392
|
+
TOptions extends Partial<
|
|
393
|
+
Record<
|
|
394
|
+
Exclude<DefaultIntegrationKeys<TPattern, TOperation>, TOverridden>,
|
|
395
|
+
Partial<TDefaultIntegrationProps>
|
|
396
|
+
>
|
|
397
|
+
>,
|
|
398
|
+
>(options: TOptions) {
|
|
399
|
+
Object.entries(options).forEach(([op, opOptions]) => {
|
|
400
|
+
this.perOperationOptions[op] = {
|
|
401
|
+
...this.perOperationOptions[op],
|
|
402
|
+
...(opOptions as Partial<TDefaultIntegrationProps>),
|
|
403
|
+
};
|
|
404
|
+
});
|
|
405
|
+
return this as unknown as IntegrationBuilder<
|
|
406
|
+
TOperation,
|
|
407
|
+
TBaseIntegration,
|
|
408
|
+
TIntegrations,
|
|
409
|
+
TDefaultIntegrationProps,
|
|
410
|
+
TDefaultIntegration,
|
|
411
|
+
TPattern,
|
|
412
|
+
TOverridden,
|
|
413
|
+
TOperationOptioned | Extract<keyof TOptions, string>
|
|
414
|
+
>;
|
|
415
|
+
}
|
|
416
|
+
|
|
364
417
|
/**
|
|
365
418
|
* Builds and returns the complete set of integrations.
|
|
366
419
|
*
|
|
@@ -375,6 +428,10 @@ export class IntegrationBuilder<
|
|
|
375
428
|
*/
|
|
376
429
|
public build(): TIntegrations {
|
|
377
430
|
const options = this.options;
|
|
431
|
+
const buildOptionsFor = (op: string): TDefaultIntegrationProps => ({
|
|
432
|
+
...options.defaultIntegrationOptions,
|
|
433
|
+
...this.perOperationOptions[op],
|
|
434
|
+
});
|
|
378
435
|
return {
|
|
379
436
|
...Object.fromEntries(
|
|
380
437
|
options.pattern === 'shared'
|
|
@@ -383,7 +440,7 @@ export class IntegrationBuilder<
|
|
|
383
440
|
'$router',
|
|
384
441
|
options.buildDefaultIntegration(
|
|
385
442
|
'$router',
|
|
386
|
-
|
|
443
|
+
buildOptionsFor('$router'),
|
|
387
444
|
),
|
|
388
445
|
],
|
|
389
446
|
]
|
|
@@ -394,10 +451,7 @@ export class IntegrationBuilder<
|
|
|
394
451
|
)
|
|
395
452
|
.map((op) => [
|
|
396
453
|
op,
|
|
397
|
-
options.buildDefaultIntegration(
|
|
398
|
-
op,
|
|
399
|
-
options.defaultIntegrationOptions,
|
|
400
|
-
),
|
|
454
|
+
options.buildDefaultIntegration(op, buildOptionsFor(op)),
|
|
401
455
|
]),
|
|
402
456
|
),
|
|
403
457
|
...this.integrations,
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { spawnSync } from 'child_process';
|
|
2
|
+
import { readFileSync } from 'fs';
|
|
3
|
+
|
|
4
|
+
const { containerEngine, image } =
|
|
5
|
+
JSON.parse(readFileSync('config.json', 'utf-8')).serveLocal;
|
|
6
|
+
|
|
7
|
+
const inspect = spawnSync(containerEngine, ['image', 'inspect', image], {
|
|
8
|
+
stdio: 'ignore',
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
if (inspect.status !== 0) {
|
|
12
|
+
const pull = spawnSync(containerEngine, ['pull', image], { stdio: 'inherit' });
|
|
13
|
+
if (pull.status !== 0) {
|
|
14
|
+
process.exit(pull.status ?? 1);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { spawn, spawnSync } from "child_process";
|
|
2
|
+
import { readFileSync } from "fs";
|
|
3
|
+
|
|
4
|
+
const {
|
|
5
|
+
containerEngine,
|
|
6
|
+
containerName,
|
|
7
|
+
image,
|
|
8
|
+
port,
|
|
9
|
+
dbName,
|
|
10
|
+
dbUser,
|
|
11
|
+
dbPassword,
|
|
12
|
+
dbEngine,
|
|
13
|
+
} = JSON.parse(readFileSync("config.json", "utf-8")).serveLocal;
|
|
14
|
+
|
|
15
|
+
const containerExists = (): boolean =>
|
|
16
|
+
spawnSync(containerEngine, ["container", "inspect", containerName], {
|
|
17
|
+
stdio: "ignore",
|
|
18
|
+
}).status === 0;
|
|
19
|
+
|
|
20
|
+
const isRunning = (): boolean => {
|
|
21
|
+
const result = spawnSync(
|
|
22
|
+
containerEngine,
|
|
23
|
+
["container", "inspect", "-f", "{{.State.Running}}", containerName],
|
|
24
|
+
{ encoding: "utf-8" },
|
|
25
|
+
);
|
|
26
|
+
return result.status === 0 && result.stdout.trim() === "true";
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
if (containerExists()) {
|
|
30
|
+
if (!isRunning()) {
|
|
31
|
+
const start = spawnSync(containerEngine, ["start", containerName], {
|
|
32
|
+
stdio: "inherit",
|
|
33
|
+
});
|
|
34
|
+
if (start.status !== 0) process.exit(start.status ?? 1);
|
|
35
|
+
}
|
|
36
|
+
} else {
|
|
37
|
+
const engineArgs =
|
|
38
|
+
dbEngine === "mysql"
|
|
39
|
+
? [
|
|
40
|
+
"-v",
|
|
41
|
+
`${containerName}-data:/var/lib/mysql`,
|
|
42
|
+
"-e",
|
|
43
|
+
`MYSQL_DATABASE=${dbName}`,
|
|
44
|
+
"-e",
|
|
45
|
+
`MYSQL_ROOT_PASSWORD=${dbPassword}`,
|
|
46
|
+
"-p",
|
|
47
|
+
`${port}:3306`,
|
|
48
|
+
]
|
|
49
|
+
: [
|
|
50
|
+
"-v",
|
|
51
|
+
`${containerName}-data:/var/lib/postgresql`,
|
|
52
|
+
"-e",
|
|
53
|
+
`POSTGRES_DB=${dbName}`,
|
|
54
|
+
"-e",
|
|
55
|
+
`POSTGRES_USER=${dbUser}`,
|
|
56
|
+
"-e",
|
|
57
|
+
`POSTGRES_PASSWORD=${dbPassword}`,
|
|
58
|
+
"-e",
|
|
59
|
+
"PGDATA=/var/lib/postgresql/17/docker",
|
|
60
|
+
"-p",
|
|
61
|
+
`${port}:5432`,
|
|
62
|
+
];
|
|
63
|
+
const runArgs = [
|
|
64
|
+
"run",
|
|
65
|
+
...(containerEngine === "docker" ? ["--rm"] : []),
|
|
66
|
+
"--name",
|
|
67
|
+
containerName,
|
|
68
|
+
"-d",
|
|
69
|
+
...engineArgs,
|
|
70
|
+
image,
|
|
71
|
+
];
|
|
72
|
+
const create = spawnSync(containerEngine, runArgs, { stdio: "inherit" });
|
|
73
|
+
if (create.status !== 0) process.exit(create.status ?? 1);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const logs = spawn(containerEngine, ["logs", "-f", containerName], {
|
|
77
|
+
stdio: ["ignore", "inherit", "inherit"],
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
let exiting = false;
|
|
81
|
+
|
|
82
|
+
const cleanup = () => {
|
|
83
|
+
if (exiting) return;
|
|
84
|
+
exiting = true;
|
|
85
|
+
if (containerEngine === "docker") {
|
|
86
|
+
spawnSync(containerEngine, ["stop", containerName], { stdio: "ignore" });
|
|
87
|
+
} else {
|
|
88
|
+
spawnSync(containerEngine, ["rm", "-f", containerName], {
|
|
89
|
+
stdio: "ignore",
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
logs.kill();
|
|
93
|
+
process.exit(0);
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
process.on("SIGTERM", cleanup);
|
|
97
|
+
process.on("SIGINT", cleanup);
|
|
98
|
+
process.on("SIGHUP", cleanup);
|
|
99
|
+
|
|
100
|
+
logs.on("exit", (code) => {
|
|
101
|
+
if (!exiting) process.exit(code ?? 0);
|
|
102
|
+
});
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
|
|
3
|
+
const { port, dbName, dbUser, dbPassword, dbEngine } =
|
|
4
|
+
JSON.parse(readFileSync('config.json', 'utf-8')).serveLocal;
|
|
5
|
+
|
|
6
|
+
const noop = () => undefined;
|
|
7
|
+
const timeoutAt = Date.now() + 60000;
|
|
8
|
+
|
|
9
|
+
if (dbEngine === 'mysql') {
|
|
10
|
+
// @ts-ignore - mariadb is only installed for mysql engine
|
|
11
|
+
const { createConnection } = await import('mariadb');
|
|
12
|
+
while (Date.now() < timeoutAt) {
|
|
13
|
+
let conn: Awaited<ReturnType<typeof createConnection>> | undefined;
|
|
14
|
+
try {
|
|
15
|
+
conn = await createConnection({
|
|
16
|
+
host: 'localhost',
|
|
17
|
+
port: parseInt(port),
|
|
18
|
+
user: dbUser,
|
|
19
|
+
password: dbPassword,
|
|
20
|
+
database: dbName,
|
|
21
|
+
connectTimeout: 500,
|
|
22
|
+
allowPublicKeyRetrieval: true,
|
|
23
|
+
});
|
|
24
|
+
await conn.end();
|
|
25
|
+
console.log('Database is ready.');
|
|
26
|
+
process.exit(0);
|
|
27
|
+
} catch {
|
|
28
|
+
console.log('Database is not ready.');
|
|
29
|
+
await conn?.end().catch(noop);
|
|
30
|
+
}
|
|
31
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
32
|
+
}
|
|
33
|
+
} else {
|
|
34
|
+
// @ts-ignore - pg is only installed for pg engine
|
|
35
|
+
const { Client } = await import('pg');
|
|
36
|
+
while (Date.now() < timeoutAt) {
|
|
37
|
+
const client = new Client({
|
|
38
|
+
host: 'localhost',
|
|
39
|
+
port: parseInt(port),
|
|
40
|
+
user: dbUser,
|
|
41
|
+
password: dbPassword,
|
|
42
|
+
database: dbName,
|
|
43
|
+
connectionTimeoutMillis: 500,
|
|
44
|
+
});
|
|
45
|
+
client.on('error', noop);
|
|
46
|
+
try {
|
|
47
|
+
await client.connect();
|
|
48
|
+
await client.end();
|
|
49
|
+
console.log('Database is ready.');
|
|
50
|
+
process.exit(0);
|
|
51
|
+
} catch {
|
|
52
|
+
console.log('Database is not ready.');
|
|
53
|
+
await client.end().catch(noop);
|
|
54
|
+
}
|
|
55
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
throw new Error(`Timed out waiting for ${dbEngine} on port ${port}`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
2
|
import * as url from 'url';
|
|
3
|
+
import { readFileSync } from 'fs';
|
|
3
4
|
import { Construct } from 'constructs';
|
|
4
|
-
import { DB_PACKAGE_NAME } from '<%= databasePackageAlias %>';
|
|
5
5
|
import {
|
|
6
6
|
AuroraDatabase,
|
|
7
7
|
AuroraDatabaseEngines,
|
|
@@ -9,6 +9,16 @@ import {
|
|
|
9
9
|
} from '../../core/rdb/aurora.js';
|
|
10
10
|
import { findWorkspaceRoot } from '../../core/workspace.js';
|
|
11
11
|
|
|
12
|
+
const { runtimeConfigKey } = JSON.parse(
|
|
13
|
+
readFileSync(
|
|
14
|
+
path.join(
|
|
15
|
+
findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
|
|
16
|
+
'<%= projectRoot %>/config.json',
|
|
17
|
+
),
|
|
18
|
+
'utf-8',
|
|
19
|
+
),
|
|
20
|
+
) as { runtimeConfigKey: string };
|
|
21
|
+
|
|
12
22
|
export type <%= nameClassName %>Props = Omit<
|
|
13
23
|
AuroraDatabaseProps,
|
|
14
24
|
| 'databaseName'
|
|
@@ -28,7 +38,7 @@ export class <%= nameClassName %> extends AuroraDatabase {
|
|
|
28
38
|
...props,
|
|
29
39
|
databaseName: '<%= databaseName %>',
|
|
30
40
|
adminUser: '<%= adminUser %>',
|
|
31
|
-
runtimeConfigKey
|
|
41
|
+
runtimeConfigKey,
|
|
32
42
|
migrationBundleDir: path.join(
|
|
33
43
|
findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
|
|
34
44
|
'<%- migrationBundleDir %>',
|
|
@@ -141,10 +141,12 @@ resource "random_string" "suffix" {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
locals {
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
config = jsondecode(file("${path.module}/../../../../../../../<%= projectRoot %>/config.json"))
|
|
145
|
+
runtime_config_key = local.config.runtimeConfigKey
|
|
146
|
+
create_db_user_bundle_path = "${path.module}/../../../../../../../<%- createDbUserBundleDir %>"
|
|
147
|
+
migration_function_name = "<%= nameKebabCase %>-migration-${random_string.suffix.result}"
|
|
146
148
|
create_db_user_function_name = "<%= nameKebabCase %>-create-db-user-${random_string.suffix.result}"
|
|
147
|
-
database_runtime_user
|
|
149
|
+
database_runtime_user = "db_${random_string.suffix.result}"
|
|
148
150
|
}
|
|
149
151
|
|
|
150
152
|
module "aurora" {
|
|
@@ -210,7 +212,7 @@ module "add_rdb_to_runtime_config" {
|
|
|
210
212
|
source = "../../../core/runtime-config/entry"
|
|
211
213
|
|
|
212
214
|
namespace = "database"
|
|
213
|
-
key =
|
|
215
|
+
key = local.runtime_config_key
|
|
214
216
|
value = {
|
|
215
217
|
hostname = module.aurora.cluster_endpoint
|
|
216
218
|
port = module.aurora.cluster_port
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rdb-constructs.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/rdb-constructs/rdb-constructs.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAOoB;AACpB,gCAAuC;AAGvC,8BAA0D;AAC1D,gFAIwC;
|
|
1
|
+
{"version":3,"file":"rdb-constructs.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/rdb-constructs/rdb-constructs.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAOoB;AACpB,gCAAuC;AAGvC,8BAA0D;AAC1D,gFAIwC;AAiBjC,MAAM,WAAW,GAAG,KAAK,EAC9B,IAAU,EACV,OAA8C,EAC9C,EAAE;IACF,IAAI,OAAO,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAA,2BAAmB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;QACvC,IAAA,8BAAsB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,IAAA,mBAAU,EACR,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,mDAAqB,CAAC,CAAC,CAAC,kDAAoB,EACpE,cAAc,CACf,EACD,CAAC,MAA4B,EAAE,EAAE;QAC/B,IAAA,sCAAiC,EAC/B,MAAM,EACN,OAAO,EACP,GAAG,OAAO,CAAC,WAAW,QAAQ,CAC/B,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AA5BW,QAAA,WAAW,eA4BtB;AAEK,MAAM,mBAAmB,GAAG,KAAK,EACtC,IAAU,EACV,OAA+B,EAC/B,EAAE;IACF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAC3D,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,MAAM,EACN,KAAK,CACN,EACD,OAAO,EACP;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAC1D,IAAA,0BAAiB,EAAC,0CAAY,EAAE,mDAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAC3E,OAAO,EACP;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,MAAM,IAAA,mBAAa,EACjB,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,MAAM,EACN,UAAU,CACX,EACD,iBAAiB,CAClB,CAAC;IACF,MAAM,IAAA,mBAAa,EACjB,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,KAAK,EACL,UAAU,CACX,EACD,KAAK,OAAO,CAAC,aAAa,KAAK,CAChC,CAAC;IACF,MAAM,IAAA,mBAAa,EACjB,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,UAAU,CACX,EACD,gBAAgB,CACjB,CAAC;AACJ,CAAC,CAAC;AAhEW,QAAA,mBAAmB,uBAgE9B;AAEK,MAAM,sBAAsB,GAAG,CACpC,IAAU,EACV,OAA+B,EAC/B,EAAE;IACF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EACjE,IAAA,0BAAiB,EAAC,0CAAY,EAAE,kDAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAC3E,EAAE,EACF;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,EAChE,IAAA,0BAAiB,EAAC,0CAAY,EAAE,kDAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAC1E,OAAO,EACP;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;AACJ,CAAC,CAAC;AAvBW,QAAA,sBAAsB,0BAuBjC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { type Tree } from '@nx/devkit';
|
|
6
|
+
/**
|
|
7
|
+
* Ensures the shared scripts package exists and adds RDB local-dev scripts
|
|
8
|
+
* to packages/common/scripts/src/rdb/. Used by ts#rdb. Scripts read all
|
|
9
|
+
* config at runtime from config.json so a single set serves all database engines.
|
|
10
|
+
*/
|
|
11
|
+
export declare function sharedRdbScriptsGenerator(tree: Tree): Promise<void>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sharedRdbScriptsGenerator = sharedRdbScriptsGenerator;
|
|
4
|
+
/**
|
|
5
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
*/
|
|
8
|
+
const devkit_1 = require("@nx/devkit");
|
|
9
|
+
const shared_constructs_constants_1 = require("./shared-constructs-constants");
|
|
10
|
+
const shared_scripts_1 = require("./shared-scripts");
|
|
11
|
+
/**
|
|
12
|
+
* Ensures the shared scripts package exists and adds RDB local-dev scripts
|
|
13
|
+
* to packages/common/scripts/src/rdb/. Used by ts#rdb. Scripts read all
|
|
14
|
+
* config at runtime from config.json so a single set serves all database engines.
|
|
15
|
+
*/
|
|
16
|
+
async function sharedRdbScriptsGenerator(tree) {
|
|
17
|
+
await (0, shared_scripts_1.ensureSharedScriptsProject)(tree);
|
|
18
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', shared_constructs_constants_1.SHARED_SCRIPTS_DIR, 'src', 'rdb'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_SCRIPTS_DIR, 'src', 'rdb'), {}, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=shared-rdb-scripts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-rdb-scripts.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/shared-rdb-scripts.ts"],"names":[],"mappings":";;AAqBA,8DAUC;AA/BD;;;GAGG;AACH,uCAKoB;AACpB,+EAGuC;AACvC,qDAA8D;AAE9D;;;;GAIG;AACI,KAAK,UAAU,yBAAyB,CAAC,IAAU;IACxD,MAAM,IAAA,2CAA0B,EAAC,IAAI,CAAC,CAAC;IAEvC,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,gDAAkB,EAAE,KAAK,EAAE,KAAK,CAAC,EACvE,IAAA,0BAAiB,EAAC,0CAAY,EAAE,gDAAkB,EAAE,KAAK,EAAE,KAAK,CAAC,EACjE,EAAE,EACF,EAAE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY,EAAE,CACtD,CAAC;AACJ,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { spawnSync } from 'child_process';
|
|
2
|
-
|
|
3
|
-
const ENGINE = '<%= containerEngine %>';
|
|
4
|
-
const image = process.argv[2];
|
|
5
|
-
|
|
6
|
-
const inspect = spawnSync(ENGINE, ['image', 'inspect', image], {
|
|
7
|
-
stdio: 'ignore',
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
if (inspect.status !== 0) {
|
|
11
|
-
const pull = spawnSync(ENGINE, ['pull', image], { stdio: 'inherit' });
|
|
12
|
-
if (pull.status !== 0) {
|
|
13
|
-
process.exit(pull.status ?? 1);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { spawn, spawnSync } from 'child_process';
|
|
2
|
-
|
|
3
|
-
const ENGINE = '<%= containerEngine %>';
|
|
4
|
-
|
|
5
|
-
<%_ if (engine === 'mysql') { _%>
|
|
6
|
-
const [containerName, image, hostPort, dbName, dbPassword] =
|
|
7
|
-
process.argv.slice(2);
|
|
8
|
-
<%_ } else { _%>
|
|
9
|
-
const [containerName, image, hostPort, dbName, dbUser, dbPassword] =
|
|
10
|
-
process.argv.slice(2);
|
|
11
|
-
<%_ } _%>
|
|
12
|
-
|
|
13
|
-
const containerExists = (): boolean =>
|
|
14
|
-
spawnSync(ENGINE, ['container', 'inspect', containerName], {
|
|
15
|
-
stdio: 'ignore',
|
|
16
|
-
}).status === 0;
|
|
17
|
-
|
|
18
|
-
const isRunning = (): boolean => {
|
|
19
|
-
const result = spawnSync(
|
|
20
|
-
ENGINE,
|
|
21
|
-
['container', 'inspect', '-f', '{{.State.Running}}', containerName],
|
|
22
|
-
{ encoding: 'utf-8' },
|
|
23
|
-
);
|
|
24
|
-
return result.status === 0 && result.stdout.trim() === 'true';
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
if (containerExists()) {
|
|
28
|
-
if (!isRunning()) {
|
|
29
|
-
const start = spawnSync(ENGINE, ['start', containerName], {
|
|
30
|
-
stdio: 'inherit',
|
|
31
|
-
});
|
|
32
|
-
if (start.status !== 0) process.exit(start.status ?? 1);
|
|
33
|
-
}
|
|
34
|
-
} else {
|
|
35
|
-
<%_ if (engine === 'mysql') { _%>
|
|
36
|
-
const runArgs = (
|
|
37
|
-
`run <%- containerEngine === 'docker' ? '--rm ' : '' %>--name ${containerName}` +
|
|
38
|
-
` -e MYSQL_DATABASE=${dbName}` +
|
|
39
|
-
` -e MYSQL_ROOT_PASSWORD=${dbPassword}` +
|
|
40
|
-
` -p ${hostPort}:3306` +
|
|
41
|
-
` -v ${containerName}-data:/var/lib/mysql` +
|
|
42
|
-
` -d ${image}`
|
|
43
|
-
).split(' ');
|
|
44
|
-
<%_ } else { _%>
|
|
45
|
-
const runArgs = (
|
|
46
|
-
`run <%- containerEngine === 'docker' ? '--rm ' : '' %>--name ${containerName}` +
|
|
47
|
-
` -e POSTGRES_DB=${dbName}` +
|
|
48
|
-
` -e POSTGRES_USER=${dbUser}` +
|
|
49
|
-
` -e POSTGRES_PASSWORD=${dbPassword}` +
|
|
50
|
-
` -e PGDATA=/var/lib/postgresql/17/docker` +
|
|
51
|
-
` -p ${hostPort}:5432` +
|
|
52
|
-
` -v ${containerName}-data:/var/lib/postgresql` +
|
|
53
|
-
` -d ${image}`
|
|
54
|
-
).split(' ');
|
|
55
|
-
<%_ } _%>
|
|
56
|
-
const create = spawnSync(ENGINE, runArgs, { stdio: 'inherit' });
|
|
57
|
-
if (create.status !== 0) process.exit(create.status ?? 1);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const logs = spawn(ENGINE, ['logs', '-f', containerName], {
|
|
61
|
-
stdio: ['ignore', 'inherit', 'inherit'],
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
let exiting = false;
|
|
65
|
-
|
|
66
|
-
const cleanup = () => {
|
|
67
|
-
if (exiting) return;
|
|
68
|
-
exiting = true;
|
|
69
|
-
<%_ if (containerEngine === 'docker') { _%>
|
|
70
|
-
spawnSync(ENGINE, ['stop', containerName], { stdio: 'ignore' });
|
|
71
|
-
<%_ } else { _%>
|
|
72
|
-
spawnSync(ENGINE, ['rm', '-f', containerName], { stdio: 'ignore' });
|
|
73
|
-
<%_ } _%>
|
|
74
|
-
logs.kill();
|
|
75
|
-
process.exit(0);
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
process.on('SIGTERM', cleanup);
|
|
79
|
-
process.on('SIGINT', cleanup);
|
|
80
|
-
process.on('SIGHUP', cleanup);
|
|
81
|
-
|
|
82
|
-
logs.on('exit', (code) => {
|
|
83
|
-
if (!exiting) process.exit(code ?? 0);
|
|
84
|
-
});
|