@aws/nx-plugin 1.0.0-rc.14 → 1.0.0-rc.16

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 (25) hide show
  1. package/package.json +1 -1
  2. package/src/py/project/generator.js +8 -1
  3. package/src/py/project/generator.js.map +1 -1
  4. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +74 -322
  5. package/src/ts/rdb/files/config.json.template +14 -0
  6. package/src/ts/rdb/files/prisma.config.ts.template +5 -4
  7. package/src/ts/rdb/files/src/index.ts.template +0 -1
  8. package/src/ts/rdb/files/src/prisma.ts.template +26 -21
  9. package/src/ts/rdb/generator.d.ts +0 -4
  10. package/src/ts/rdb/generator.js +15 -7
  11. package/src/ts/rdb/generator.js.map +1 -1
  12. package/src/utils/files/common/scripts/src/rdb/pull-image.ts.template +16 -0
  13. package/src/utils/files/common/scripts/src/rdb/start-container.ts.template +102 -0
  14. package/src/utils/files/common/scripts/src/rdb/wait-for-db.ts.template +59 -0
  15. package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +12 -2
  16. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +6 -4
  17. package/src/utils/rdb-constructs/rdb-constructs.d.ts +1 -0
  18. package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
  19. package/src/utils/shared-rdb-scripts.d.ts +11 -0
  20. package/src/utils/shared-rdb-scripts.js +20 -0
  21. package/src/utils/shared-rdb-scripts.js.map +1 -0
  22. package/src/ts/rdb/files/scripts/pull-image.ts.template +0 -15
  23. package/src/ts/rdb/files/scripts/start-container.ts.template +0 -84
  24. package/src/ts/rdb/files/scripts/wait-for-db.ts.template +0 -55
  25. package/src/ts/rdb/files/src/constants.ts.template +0 -8
@@ -4,27 +4,31 @@ import { Prisma, PrismaClient } from '../generated/prisma/client.js';
4
4
  <%_ if (engine === 'postgres') { _%>
5
5
  import { Pool } from 'pg';
6
6
  <%_ } _%>
7
- import {
8
- DB_PACKAGE_NAME,
9
- LOCAL_DB_HOST,
10
- LOCAL_DB_NAME,
11
- LOCAL_DB_PASSWORD,
12
- LOCAL_DB_PORT,
13
- LOCAL_DB_USER,
14
- } from './constants.js';
7
+ import { readFileSync } from 'fs';
8
+ import { join, dirname } from 'path';
9
+ import { fileURLToPath } from 'url';
15
10
  import { getDatabaseConfig } from './utils.js';
16
- <%_ if (engine === 'mysql') { _%>
17
11
 
12
+ // Generated: must match runtimeConfigKey in config.json
13
+ const runtimeConfigKey = '<%= runtimeConfigKey %>';
14
+
15
+ const __dirname = dirname(fileURLToPath(import.meta.url));
16
+ // config.json is only present in local dev (not included in the deployed bundle); guard with SERVE_LOCAL check
17
+ const serveLocal = () =>
18
+ JSON.parse(readFileSync(join(__dirname, '../config.json'), 'utf-8')).serveLocal;
19
+
20
+ <%_ if (engine === 'mysql') { _%>
18
21
  export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
19
22
  log: LogOpts[] = ['warn', 'error'] as LogOpts[],
20
23
  ): Promise<PrismaClient<LogOpts>> => {
21
24
  if (process.env.SERVE_LOCAL === 'true') {
25
+ const { host, port, dbName, dbUser, dbPassword } = serveLocal();
22
26
  const adapter = new PrismaMariaDb({
23
- host: LOCAL_DB_HOST,
24
- port: LOCAL_DB_PORT,
25
- database: LOCAL_DB_NAME,
26
- user: LOCAL_DB_USER,
27
- password: LOCAL_DB_PASSWORD,
27
+ host,
28
+ port,
29
+ database: dbName,
30
+ user: dbUser,
31
+ password: dbPassword,
28
32
  allowPublicKeyRetrieval: true,
29
33
  });
30
34
  return new PrismaClient({
@@ -34,7 +38,7 @@ export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
34
38
  }
35
39
 
36
40
  const { hostname, port, database, dbUser, region } =
37
- await getDatabaseConfig(DB_PACKAGE_NAME);
41
+ await getDatabaseConfig(runtimeConfigKey);
38
42
  const iamAuthToken = await new Signer({
39
43
  hostname,
40
44
  port,
@@ -68,13 +72,14 @@ export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
68
72
  if (prismaClient) return prismaClient;
69
73
 
70
74
  if (process.env.SERVE_LOCAL === 'true') {
75
+ const { host, port, dbName, dbUser, dbPassword } = serveLocal();
71
76
  const adapter = new PrismaPg(
72
77
  new Pool({
73
- host: LOCAL_DB_HOST,
74
- port: LOCAL_DB_PORT,
75
- database: LOCAL_DB_NAME,
76
- user: LOCAL_DB_USER,
77
- password: LOCAL_DB_PASSWORD,
78
+ host,
79
+ port,
80
+ database: dbName,
81
+ user: dbUser,
82
+ password: dbPassword,
78
83
  allowExitOnIdle: true,
79
84
  }),
80
85
  );
@@ -86,7 +91,7 @@ export const getPrisma = async <LogOpts extends Prisma.LogLevel>(
86
91
  }
87
92
 
88
93
  const { hostname, port, database, dbUser, region } =
89
- await getDatabaseConfig(DB_PACKAGE_NAME);
94
+ await getDatabaseConfig(runtimeConfigKey);
90
95
  const adapter = new PrismaPg(
91
96
  new Pool({
92
97
  host: hostname,
@@ -1,7 +1,3 @@
1
- /**
2
- * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
- * SPDX-License-Identifier: Apache-2.0
4
- */
5
1
  import { type GeneratorCallback, type Tree } from '@nx/devkit';
6
2
  import { type NxGeneratorInfo } from '../../utils/nx';
7
3
  import type { TsRdbGeneratorSchema } from './schema';
@@ -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 scripts/pull-image.ts ${dockerImage}`,
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 scripts/start-container.ts ${containerName} ${dockerImage} ${localDbPort} ${databaseName}${options.engine === 'mysql' ? '' : ` ${localDbUser}`} ${localDbPassword}`,
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 scripts/wait-for-db.ts ${localDbPort} ${databaseName} ${localDbUser} ${localDbPassword}`,
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":"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"}
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,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: DB_PACKAGE_NAME,
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
- create_db_user_bundle_path = "${path.module}/../../../../../../../<%- createDbUserBundleDir %>"
145
- migration_function_name = "<%= nameKebabCase %>-migration-${random_string.suffix.result}"
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 = "db_${random_string.suffix.result}"
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 = "<%= nameClassName %>"
215
+ key = local.runtime_config_key
214
216
  value = {
215
217
  hostname = module.aurora.cluster_endpoint
216
218
  port = module.aurora.cluster_port
@@ -7,6 +7,7 @@ import type { Containers } from '../containers';
7
7
  import type { Iac } from '../iac';
8
8
  export interface AddRdbConstructOptions {
9
9
  projectName: string;
10
+ projectRoot: string;
10
11
  nameClassName: string;
11
12
  nameKebabCase: string;
12
13
  databasePackageAlias: string;
@@ -1 +1 @@
1
- {"version":3,"file":"rdb-constructs.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/rdb-constructs/rdb-constructs.ts"],"names":[],"mappings":"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"}
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
- });