@aws/nx-plugin 0.113.0 → 0.114.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 (43) hide show
  1. package/generators.json +33 -1
  2. package/package.json +1 -1
  3. package/src/connection/generator.d.ts +2 -2
  4. package/src/connection/generator.js +19 -0
  5. package/src/connection/generator.js.map +1 -1
  6. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +2 -2
  7. package/src/smithy/project/files/build.Dockerfile.template +1 -1
  8. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +4 -3
  9. package/src/ts/mcp-server/files/http.ts.template +1 -1
  10. package/src/ts/mcp-server/files/server.ts.template +1 -1
  11. package/src/ts/mcp-server/files/stdio.ts.template +2 -1
  12. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +3 -2
  13. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +54 -44
  14. package/src/ts/rdb/files/src/prisma.ts.template +54 -46
  15. package/src/ts/rdb/generator.js +3 -0
  16. package/src/ts/rdb/generator.js.map +1 -1
  17. package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +117 -0
  18. package/src/ts/rdb/mcp-server-connection/generator.d.ts +10 -0
  19. package/src/ts/rdb/mcp-server-connection/generator.js +59 -0
  20. package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -0
  21. package/src/ts/rdb/mcp-server-connection/schema.d.ts +14 -0
  22. package/src/ts/rdb/mcp-server-connection/schema.json +22 -0
  23. package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +286 -0
  24. package/src/ts/rdb/smithy-connection/generator.d.ts +10 -0
  25. package/src/ts/rdb/smithy-connection/generator.js +72 -0
  26. package/src/ts/rdb/smithy-connection/generator.js.map +1 -0
  27. package/src/ts/rdb/smithy-connection/schema.d.ts +12 -0
  28. package/src/ts/rdb/smithy-connection/schema.json +18 -0
  29. package/src/ts/rdb/strands-agent-connection/__snapshots__/generator.spec.ts.snap +183 -0
  30. package/src/ts/rdb/strands-agent-connection/generator.d.ts +10 -0
  31. package/src/ts/rdb/strands-agent-connection/generator.js +65 -0
  32. package/src/ts/rdb/strands-agent-connection/generator.js.map +1 -0
  33. package/src/ts/rdb/strands-agent-connection/schema.d.ts +14 -0
  34. package/src/ts/rdb/strands-agent-connection/schema.json +22 -0
  35. package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +75 -0
  36. package/src/ts/rdb/trpc-connection/files/src/middleware/__rdbNameKebab__.ts.template +32 -0
  37. package/src/ts/rdb/trpc-connection/generator.d.ts +10 -0
  38. package/src/ts/rdb/trpc-connection/generator.js +41 -0
  39. package/src/ts/rdb/trpc-connection/generator.js.map +1 -0
  40. package/src/ts/rdb/trpc-connection/schema.d.ts +12 -0
  41. package/src/ts/rdb/trpc-connection/schema.json +18 -0
  42. package/src/utils/ast.js +9 -2
  43. package/src/utils/ast.js.map +1 -1
@@ -0,0 +1,183 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`ts#rdb strands-agent-connection generator > should add rdb serve-local dependency to the agent prefixed serve-local 1`] = `
4
+ {
5
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
6
+ "metadata": {
7
+ "components": [
8
+ {
9
+ "generator": "ts#strands-agent",
10
+ "name": "my-agent",
11
+ "path": "src/my-agent",
12
+ "protocol": "HTTP",
13
+ },
14
+ ],
15
+ },
16
+ "name": "my-service",
17
+ "root": "packages/my-service",
18
+ "targets": {
19
+ "my-agent-serve-local": {
20
+ "continuous": true,
21
+ "dependsOn": [
22
+ {
23
+ "projects": [
24
+ "db",
25
+ ],
26
+ "target": "serve-local",
27
+ },
28
+ ],
29
+ "executor": "nx:run-commands",
30
+ },
31
+ },
32
+ }
33
+ `;
34
+
35
+ exports[`ts#rdb strands-agent-connection generator > should be idempotent for A2A agent.ts injection 1`] = `
36
+ "import { getPrisma as getDb } from 'db';
37
+ import { Agent, tool } from '@strands-agents/sdk';
38
+ import { z } from 'zod';
39
+
40
+ const multiply = tool({
41
+ name: 'Multiply',
42
+ description: 'Multiply two numbers',
43
+ inputSchema: z.object({ a: z.number(), b: z.number() }),
44
+ callback: ({ a, b }) => a * b,
45
+ });
46
+
47
+ export const getAgent = async () => {
48
+ const db = await getDb();
49
+ db.$on('error', console.error);
50
+ return new Agent({
51
+ systemPrompt: 'You are a helpful assistant.',
52
+ tools: [multiply],
53
+ });
54
+ };
55
+ "
56
+ `;
57
+
58
+ exports[`ts#rdb strands-agent-connection generator > should be idempotent for agent.ts injection 1`] = `
59
+ "import { getPrisma as getDb } from 'db';
60
+ import { Agent, tool } from '@strands-agents/sdk';
61
+ import { z } from 'zod';
62
+
63
+ const multiply = tool({
64
+ name: 'Multiply',
65
+ description: 'Multiply two numbers',
66
+ inputSchema: z.object({ a: z.number(), b: z.number() }),
67
+ callback: ({ a, b }) => a * b,
68
+ });
69
+
70
+ export const getAgent = async () => {
71
+ const db = await getDb();
72
+ db.$on('error', console.error);
73
+ return new Agent({
74
+ systemPrompt: 'You are a helpful assistant.',
75
+ tools: [multiply],
76
+ });
77
+ };
78
+ "
79
+ `;
80
+
81
+ exports[`ts#rdb strands-agent-connection generator > should fall back to agent-serve-local when no component name 1`] = `
82
+ {
83
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
84
+ "metadata": {
85
+ "components": [
86
+ {
87
+ "generator": "ts#strands-agent",
88
+ "name": "agent",
89
+ "path": "src/agent",
90
+ "protocol": "HTTP",
91
+ },
92
+ ],
93
+ },
94
+ "name": "my-service",
95
+ "root": "packages/my-service",
96
+ "targets": {
97
+ "agent-serve-local": {
98
+ "continuous": true,
99
+ "dependsOn": [
100
+ {
101
+ "projects": [
102
+ "db",
103
+ ],
104
+ "target": "serve-local",
105
+ },
106
+ ],
107
+ "executor": "nx:run-commands",
108
+ },
109
+ },
110
+ }
111
+ `;
112
+
113
+ exports[`ts#rdb strands-agent-connection generator > should inject db into agent.ts 1`] = `
114
+ "import { getPrisma as getDb } from 'db';
115
+ import { Agent, tool } from '@strands-agents/sdk';
116
+ import { z } from 'zod';
117
+
118
+ const multiply = tool({
119
+ name: 'Multiply',
120
+ description: 'Multiply two numbers',
121
+ inputSchema: z.object({ a: z.number(), b: z.number() }),
122
+ callback: ({ a, b }) => a * b,
123
+ });
124
+
125
+ export const getAgent = async () => {
126
+ const db = await getDb();
127
+ db.$on('error', console.error);
128
+ return new Agent({
129
+ systemPrompt: 'You are a helpful assistant.',
130
+ tools: [multiply],
131
+ });
132
+ };
133
+ "
134
+ `;
135
+
136
+ exports[`ts#rdb strands-agent-connection generator > should inject db into agent.ts for A2A 1`] = `
137
+ "import { getPrisma as getDb } from 'db';
138
+ import { Agent, tool } from '@strands-agents/sdk';
139
+ import { z } from 'zod';
140
+
141
+ const multiply = tool({
142
+ name: 'Multiply',
143
+ description: 'Multiply two numbers',
144
+ inputSchema: z.object({ a: z.number(), b: z.number() }),
145
+ callback: ({ a, b }) => a * b,
146
+ });
147
+
148
+ export const getAgent = async () => {
149
+ const db = await getDb();
150
+ db.$on('error', console.error);
151
+ return new Agent({
152
+ systemPrompt: 'You are a helpful assistant.',
153
+ tools: [multiply],
154
+ });
155
+ };
156
+ "
157
+ `;
158
+
159
+ exports[`ts#rdb strands-agent-connection generator > should support multiple rdb connections in agent.ts 1`] = `
160
+ "import { getPrisma as getMysqlDb } from 'mysql-db';
161
+ import { getPrisma as getPostgresDb } from 'postgres-db';
162
+ import { Agent, tool } from '@strands-agents/sdk';
163
+ import { z } from 'zod';
164
+
165
+ const multiply = tool({
166
+ name: 'Multiply',
167
+ description: 'Multiply two numbers',
168
+ inputSchema: z.object({ a: z.number(), b: z.number() }),
169
+ callback: ({ a, b }) => a * b,
170
+ });
171
+
172
+ export const getAgent = async () => {
173
+ const mysqlDb = await getMysqlDb();
174
+ mysqlDb.$on('error', console.error);
175
+ const postgresDb = await getPostgresDb();
176
+ postgresDb.$on('error', console.error);
177
+ return new Agent({
178
+ systemPrompt: 'You are a helpful assistant.',
179
+ tools: [multiply],
180
+ });
181
+ };
182
+ "
183
+ `;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { Tree } from '@nx/devkit';
6
+ import { TsRdbStrandsAgentConnectionGeneratorSchema } from './schema';
7
+ import { NxGeneratorInfo } from '../../../utils/nx';
8
+ export declare const TS_RDB_STRANDS_AGENT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
9
+ export declare const tsRdbStrandsAgentConnectionGenerator: (tree: Tree, options: TsRdbStrandsAgentConnectionGeneratorSchema) => Promise<void>;
10
+ export default tsRdbStrandsAgentConnectionGenerator;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tsRdbStrandsAgentConnectionGenerator = exports.TS_RDB_STRANDS_AGENT_CONNECTION_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 names_1 = require("../../../utils/names");
14
+ const lodash_camelcase_1 = tslib_1.__importDefault(require("lodash.camelcase"));
15
+ const npm_scope_1 = require("../../../utils/npm-scope");
16
+ const ast_1 = require("../../../utils/ast");
17
+ exports.TS_RDB_STRANDS_AGENT_CONNECTION_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
18
+ const tsRdbStrandsAgentConnectionGenerator = async (tree, options) => {
19
+ const sourceProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.sourceProject);
20
+ const targetProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.targetProject);
21
+ const agentName = options.sourceComponent?.name ?? 'agent';
22
+ const serveLocalTarget = `${agentName}-serve-local`;
23
+ if (sourceProject.targets?.[serveLocalTarget]) {
24
+ (0, nx_1.addDependencyToTargetIfNotPresent)(sourceProject, serveLocalTarget, {
25
+ projects: [targetProject.name],
26
+ target: 'serve-local',
27
+ });
28
+ (0, devkit_1.updateProjectConfiguration)(tree, sourceProject.name, sourceProject);
29
+ }
30
+ const rdbBaseName = targetProject.name.split('/').pop();
31
+ const rdbNameCamel = (0, lodash_camelcase_1.default)(rdbBaseName);
32
+ const rdbNamePascal = (0, names_1.pascalCase)(rdbBaseName);
33
+ const rdbPackageAlias = (0, npm_scope_1.toScopeAlias)(targetProject.name);
34
+ const getterAlias = `getPrisma as get${rdbNamePascal}`;
35
+ const agentSourceDir = (0, devkit_1.joinPathFragments)(sourceProject.root, 'src', agentName);
36
+ const agentPath = (0, devkit_1.joinPathFragments)(agentSourceDir, 'agent.ts');
37
+ if (tree.exists(agentPath)) {
38
+ await (0, ast_1.addDestructuredImport)(tree, agentPath, [getterAlias], rdbPackageAlias);
39
+ // Block body form: export const getAgent = async () => { ... }
40
+ await (0, ast_1.applyGritQL)(tree, agentPath, `\`export const getAgent = async () => { $body }\` => raw\`export const getAgent = async () => {
41
+ const ${rdbNameCamel} = await get${rdbNamePascal}();
42
+ $body
43
+ }\` where { $body <: not some \`const ${rdbNameCamel} = await get${rdbNamePascal}()\` }`);
44
+ // Expression body form: export const getAgent = async () => expr
45
+ await (0, ast_1.applyGritQL)(tree, agentPath, `\`export const getAgent = async () => $expr\` => raw\`export const getAgent = async () => {
46
+ const ${rdbNameCamel} = await get${rdbNamePascal}();
47
+ return $expr;
48
+ }\` where { $expr <: not \`{ $_ }\` }`);
49
+ // Add $on error handler after the db declaration.
50
+ // Done via string replacement because GritQL treats $on as a metavariable.
51
+ const dbDecl = `const ${rdbNameCamel} = await get${rdbNamePascal}();`;
52
+ const onCall = `${rdbNameCamel}.$on('error', console.error);`;
53
+ const content = tree.read(agentPath, 'utf-8');
54
+ if (content.includes(dbDecl) && !content.includes(`${rdbNameCamel}.$on`)) {
55
+ tree.write(agentPath, content.replace(dbDecl, `${dbDecl}\n ${onCall}`));
56
+ }
57
+ }
58
+ await (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [
59
+ exports.TS_RDB_STRANDS_AGENT_CONNECTION_GENERATOR_INFO,
60
+ ]);
61
+ await (0, format_1.formatFilesInSubtree)(tree);
62
+ };
63
+ exports.tsRdbStrandsAgentConnectionGenerator = tsRdbStrandsAgentConnectionGenerator;
64
+ exports.default = exports.tsRdbStrandsAgentConnectionGenerator;
65
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/strands-agent-connection/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAIoB;AAEpB,0CAK2B;AAC3B,oDAAyE;AACzE,kDAA6D;AAC7D,gDAAkD;AAClD,gFAAyC;AACzC,wDAAwD;AACxD,4CAAwE;AAE3D,QAAA,8CAA8C,GACzD,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAExB,MAAM,oCAAoC,GAAG,KAAK,EACvD,IAAU,EACV,OAAmD,EACpC,EAAE;IACjB,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE,IAAI,IAAI,OAAO,CAAC;IAC3D,MAAM,gBAAgB,GAAG,GAAG,SAAS,cAAc,CAAC;IAEpD,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9C,IAAA,sCAAiC,EAAC,aAAa,EAAE,gBAAgB,EAAE;YACjE,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;YAC9B,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QACH,IAAA,mCAA0B,EAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACxD,MAAM,YAAY,GAAG,IAAA,0BAAS,EAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,eAAe,GAAG,IAAA,wBAAY,EAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,mBAAmB,aAAa,EAAE,CAAC;IAEvD,MAAM,cAAc,GAAG,IAAA,0BAAiB,EACtC,aAAa,CAAC,IAAI,EAClB,KAAK,EACL,SAAS,CACV,CAAC;IACF,MAAM,SAAS,GAAG,IAAA,0BAAiB,EAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAEhE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAA,2BAAqB,EACzB,IAAI,EACJ,SAAS,EACT,CAAC,WAAW,CAAC,EACb,eAAe,CAChB,CAAC;QAEF,+DAA+D;QAC/D,MAAM,IAAA,iBAAW,EACf,IAAI,EACJ,SAAS,EACT;UACI,YAAY,eAAe,aAAa;;wCAEV,YAAY,eAAe,aAAa,QAAQ,CACnF,CAAC;QAEF,iEAAiE;QACjE,MAAM,IAAA,iBAAW,EACf,IAAI,EACJ,SAAS,EACT;UACI,YAAY,eAAe,aAAa;;sCAEZ,CACjC,CAAC;QAEF,kDAAkD;QAClD,2EAA2E;QAC3E,MAAM,MAAM,GAAG,SAAS,YAAY,eAAe,aAAa,KAAK,CAAC;QACtE,MAAM,MAAM,GAAG,GAAG,YAAY,+BAA+B,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,YAAY,MAAM,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,MAAM,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,MAAM,IAAA,yCAA+B,EAAC,IAAI,EAAE;QAC1C,sDAA8C;KAC/C,CAAC,CAAC;IACH,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC;AA/EW,QAAA,oCAAoC,wCA+E/C;AAEF,kBAAe,4CAAoC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { ComponentMetadata } from '../../../utils/nx';
6
+
7
+ /**
8
+ * TypeScript types for options defined in schema.json
9
+ */
10
+ export interface TsRdbStrandsAgentConnectionGeneratorSchema {
11
+ sourceProject: string;
12
+ targetProject: string;
13
+ sourceComponent?: ComponentMetadata;
14
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "$id": "ts#rdb#strands-agent-connection",
4
+ "title": "ts#rdb#strands-agent-connection",
5
+ "description": "Connect a ts#strands-agent to a ts#rdb project",
6
+ "type": "object",
7
+ "properties": {
8
+ "sourceProject": {
9
+ "type": "string",
10
+ "description": "The project containing the ts#strands-agent to connect from"
11
+ },
12
+ "targetProject": {
13
+ "type": "string",
14
+ "description": "The ts#rdb project to connect to"
15
+ },
16
+ "sourceComponent": {
17
+ "type": "string",
18
+ "description": "The agent component name"
19
+ }
20
+ },
21
+ "required": ["sourceProject", "targetProject"]
22
+ }
@@ -0,0 +1,75 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`ts#rdb trpc-connection generator > should add rdb serve-local dependency to trpc serve-local 1`] = `
4
+ {
5
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
6
+ "name": "api",
7
+ "root": "packages/api",
8
+ "targets": {
9
+ "serve-local": {
10
+ "continuous": true,
11
+ "dependsOn": [
12
+ {
13
+ "projects": [
14
+ "db",
15
+ ],
16
+ "target": "serve-local",
17
+ },
18
+ ],
19
+ "executor": "nx:run-commands",
20
+ },
21
+ },
22
+ }
23
+ `;
24
+
25
+ exports[`ts#rdb trpc-connection generator > should generate middleware file for PostgreSQL engine 1`] = `
26
+ "import { getPrisma } from 'db';
27
+ import { initTRPC } from '@trpc/server';
28
+
29
+ export interface IDbContext {
30
+ db?: Awaited<ReturnType<typeof getPrisma>>;
31
+ }
32
+
33
+ export const createDbPlugin = () => {
34
+ const t = initTRPC.context<IDbContext>().create();
35
+ return t.procedure.use(async (opts) => {
36
+ const db = await getPrisma();
37
+
38
+ return await opts.next({
39
+ ctx: {
40
+ ...opts.ctx,
41
+ db,
42
+ },
43
+ });
44
+ });
45
+ };
46
+ "
47
+ `;
48
+
49
+ exports[`ts#rdb trpc-connection generator > should generate middleware file with try/finally for MySQL engine 1`] = `
50
+ "import { getPrisma } from 'db';
51
+ import { initTRPC } from '@trpc/server';
52
+
53
+ export interface IDbContext {
54
+ db?: Awaited<ReturnType<typeof getPrisma>>;
55
+ }
56
+
57
+ export const createDbPlugin = () => {
58
+ const t = initTRPC.context<IDbContext>().create();
59
+ return t.procedure.use(async (opts) => {
60
+ const db = await getPrisma();
61
+
62
+ try {
63
+ return await opts.next({
64
+ ctx: {
65
+ ...opts.ctx,
66
+ db,
67
+ },
68
+ });
69
+ } finally {
70
+ await db.$disconnect();
71
+ }
72
+ });
73
+ };
74
+ "
75
+ `;
@@ -0,0 +1,32 @@
1
+ import { getPrisma } from '<%= rdbPackageAlias %>';
2
+ import { initTRPC } from '@trpc/server';
3
+
4
+ export interface I<%= rdbNamePascal %>Context {
5
+ <%= rdbNameCamel %>?: Awaited<ReturnType<typeof getPrisma>>;
6
+ }
7
+
8
+ export const create<%= rdbNamePascal %>Plugin = () => {
9
+ const t = initTRPC.context<I<%= rdbNamePascal %>Context>().create();
10
+ return t.procedure.use(async (opts) => {
11
+ const <%= rdbNameCamel %> = await getPrisma();
12
+ <% if (engine === 'MySQL') { %>
13
+ try {
14
+ return await opts.next({
15
+ ctx: {
16
+ ...opts.ctx,
17
+ <%= rdbNameCamel %>,
18
+ },
19
+ });
20
+ } finally {
21
+ await <%= rdbNameCamel %>.$disconnect();
22
+ }
23
+ <% } else { %>
24
+ return await opts.next({
25
+ ctx: {
26
+ ...opts.ctx,
27
+ <%= rdbNameCamel %>,
28
+ },
29
+ });
30
+ <% } %>
31
+ });
32
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { Tree } from '@nx/devkit';
6
+ import { TsRdbTrpcConnectionGeneratorSchema } from './schema';
7
+ import { NxGeneratorInfo } from '../../../utils/nx';
8
+ export declare const TS_RDB_TRPC_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
9
+ export declare const tsRdbTrpcConnectionGenerator: (tree: Tree, options: TsRdbTrpcConnectionGeneratorSchema) => Promise<void>;
10
+ export default tsRdbTrpcConnectionGenerator;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tsRdbTrpcConnectionGenerator = exports.TS_RDB_TRPC_CONNECTION_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 names_1 = require("../../../utils/names");
14
+ const lodash_camelcase_1 = tslib_1.__importDefault(require("lodash.camelcase"));
15
+ const npm_scope_1 = require("../../../utils/npm-scope");
16
+ exports.TS_RDB_TRPC_CONNECTION_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
17
+ const tsRdbTrpcConnectionGenerator = async (tree, options) => {
18
+ const sourceProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.sourceProject);
19
+ const targetProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.targetProject);
20
+ if (sourceProject.targets?.['serve-local']) {
21
+ (0, nx_1.addDependencyToTargetIfNotPresent)(sourceProject, 'serve-local', {
22
+ projects: [targetProject.name],
23
+ target: 'serve-local',
24
+ });
25
+ (0, devkit_1.updateProjectConfiguration)(tree, sourceProject.name, sourceProject);
26
+ }
27
+ const rdbBaseName = targetProject.name.split('/').pop();
28
+ const rdbNameKebab = (0, names_1.kebabCase)(rdbBaseName);
29
+ const rdbNameCamel = (0, lodash_camelcase_1.default)(rdbBaseName);
30
+ const rdbNamePascal = (0, names_1.pascalCase)(rdbBaseName);
31
+ const rdbPackageAlias = (0, npm_scope_1.toScopeAlias)(targetProject.name);
32
+ const engine = (targetProject.metadata ?? {}).engine ?? 'PostgreSQL';
33
+ (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), sourceProject.root, { rdbNameKebab, rdbNameCamel, rdbNamePascal, rdbPackageAlias, engine }, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
34
+ await (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [
35
+ exports.TS_RDB_TRPC_CONNECTION_GENERATOR_INFO,
36
+ ]);
37
+ await (0, format_1.formatFilesInSubtree)(tree);
38
+ };
39
+ exports.tsRdbTrpcConnectionGenerator = tsRdbTrpcConnectionGenerator;
40
+ exports.default = exports.tsRdbTrpcConnectionGenerator;
41
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/rdb/trpc-connection/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAMoB;AAEpB,0CAK2B;AAC3B,oDAAyE;AACzE,kDAA6D;AAC7D,gDAA6D;AAC7D,gFAAyC;AACzC,wDAAwD;AAE3C,QAAA,qCAAqC,GAChD,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAExB,MAAM,4BAA4B,GAAG,KAAK,EAC/C,IAAU,EACV,OAA2C,EAC5B,EAAE;IACjB,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IAEF,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3C,IAAA,sCAAiC,EAAC,aAAa,EAAE,aAAa,EAAE;YAC9D,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;YAC9B,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QACH,IAAA,mCAA0B,EAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACxD,MAAM,YAAY,GAAG,IAAA,iBAAS,EAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,IAAA,0BAAS,EAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,eAAe,GAAG,IAAA,wBAAY,EAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,CAAE,aAAa,CAAC,QAAgB,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,YAAY,CAAC;IAE9E,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,CAAC,EACrC,aAAa,CAAC,IAAI,EAClB,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,EACtE,EAAE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY,EAAE,CACtD,CAAC;IAEF,MAAM,IAAA,yCAA+B,EAAC,IAAI,EAAE;QAC1C,6CAAqC;KACtC,CAAC,CAAC;IACH,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC;AAxCW,QAAA,4BAA4B,gCAwCvC;AAEF,kBAAe,oCAA4B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ /**
7
+ * TypeScript types for options defined in schema.json
8
+ */
9
+ export interface TsRdbTrpcConnectionGeneratorSchema {
10
+ sourceProject: string;
11
+ targetProject: string;
12
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "$id": "ts#rdb#trpc-connection",
4
+ "title": "ts#rdb#trpc-connection",
5
+ "description": "Connect a ts#trpc-api project to a ts#rdb project",
6
+ "type": "object",
7
+ "properties": {
8
+ "sourceProject": {
9
+ "type": "string",
10
+ "description": "The ts#trpc-api project to connect from"
11
+ },
12
+ "targetProject": {
13
+ "type": "string",
14
+ "description": "The ts#rdb project to connect to"
15
+ }
16
+ },
17
+ "required": ["sourceProject", "targetProject"]
18
+ }
package/src/utils/ast.js CHANGED
@@ -22,10 +22,17 @@ const addDestructuredImport = async (tree, filePath, variableNames, from) => {
22
22
  }
23
23
  }
24
24
  else {
25
- // No existing import — prepend a new one
25
+ // No existing import — prepend a new one (after shebang if present)
26
26
  const specifiers = variableNames.join(', ');
27
27
  const contents = tree.read(filePath).toString();
28
- tree.write(filePath, `import { ${specifiers} } from '${from}';\n${contents}`);
28
+ const newImport = `import { ${specifiers} } from '${from}';\n`;
29
+ if (contents.startsWith('#!')) {
30
+ const newlineIndex = contents.indexOf('\n');
31
+ tree.write(filePath, `${contents.substring(0, newlineIndex + 1)}${newImport}${contents.substring(newlineIndex + 1)}`);
32
+ }
33
+ else {
34
+ tree.write(filePath, `${newImport}${contents}`);
35
+ }
29
36
  }
30
37
  };
31
38
  exports.addDestructuredImport = addDestructuredImport;
@@ -1 +1 @@
1
- {"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/ast.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/ast.ts"],"names":[],"mappings":"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"}