@aws/nx-plugin 0.34.0 → 0.36.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 (58) hide show
  1. package/README.md +3 -62
  2. package/generators.json +6 -0
  3. package/package.json +1 -1
  4. package/sdk/ts.d.ts +4 -0
  5. package/sdk/ts.js +15 -9
  6. package/sdk/ts.js.map +1 -1
  7. package/src/mcp-server/tools/create-workspace-command.js +1 -8
  8. package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
  9. package/src/mcp-server/tools/generator-guide.js +1 -1
  10. package/src/mcp-server/tools/generator-guide.js.map +1 -1
  11. package/src/preset/__snapshots__/generator.spec.ts.snap +2 -0
  12. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +1 -1
  13. package/src/trpc/backend/files/src/schema/echo.ts.template +1 -1
  14. package/src/trpc/backend/generator.js +0 -3
  15. package/src/trpc/backend/generator.js.map +1 -1
  16. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +41 -314
  17. package/src/ts/mcp-server/files/index.ts.template +17 -0
  18. package/src/ts/mcp-server/files/resources/sample-guidance.ts.template +9 -0
  19. package/src/ts/mcp-server/files/server.ts.template +18 -0
  20. package/src/ts/mcp-server/files/tools/add.ts.template +11 -0
  21. package/src/ts/mcp-server/generator.js +42 -31
  22. package/src/ts/mcp-server/generator.js.map +1 -1
  23. package/src/ts/mcp-server/schema.d.ts +4 -2
  24. package/src/ts/mcp-server/schema.json +9 -16
  25. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +2 -2
  26. package/src/ts/nx-generator/files/common/schema.json.template +1 -1
  27. package/src/ts/nx-generator/files/local/README.md.template +5 -0
  28. package/src/ts/nx-generator/generator.js +5 -41
  29. package/src/ts/nx-generator/generator.js.map +1 -1
  30. package/src/ts/nx-generator/schema.d.ts +1 -1
  31. package/src/ts/nx-generator/schema.json +3 -3
  32. package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +375 -0
  33. package/src/ts/nx-plugin/files/mcp-server/resources/GENERAL_GUIDANCE.md.template +49 -0
  34. package/src/ts/nx-plugin/files/mcp-server/schema.ts.template +4 -0
  35. package/src/ts/nx-plugin/files/mcp-server/server.ts.template +41 -0
  36. package/src/ts/nx-plugin/files/mcp-server/tools/create-workspace-command.ts.template +36 -0
  37. package/src/ts/nx-plugin/files/mcp-server/tools/general-guidance.ts.template +24 -0
  38. package/src/ts/nx-plugin/files/mcp-server/tools/generator-guide.ts.template +45 -0
  39. package/src/ts/nx-plugin/files/mcp-server/tools/list-generators.ts.template +27 -0
  40. package/src/ts/nx-plugin/files/mcp-server/utils.ts.template +97 -0
  41. package/src/ts/nx-plugin/generator.d.ts +10 -0
  42. package/src/ts/nx-plugin/generator.js +88 -0
  43. package/src/ts/nx-plugin/generator.js.map +1 -0
  44. package/src/ts/nx-plugin/schema.d.ts +11 -0
  45. package/src/ts/nx-plugin/schema.json +32 -0
  46. package/src/ts/nx-plugin/utils.d.ts +9 -0
  47. package/src/ts/nx-plugin/utils.js +65 -0
  48. package/src/ts/nx-plugin/utils.js.map +1 -0
  49. package/src/utils/ast.js +3 -1
  50. package/src/utils/ast.js.map +1 -1
  51. package/src/ts/mcp-server/files/README.md.template +0 -108
  52. package/src/ts/mcp-server/files/src/global.d.ts.template +0 -4
  53. package/src/ts/mcp-server/files/src/index.ts.template +0 -6
  54. package/src/ts/mcp-server/files/src/resources/example-context.md +0 -3
  55. package/src/ts/mcp-server/files/src/server.ts.template +0 -28
  56. package/src/utils/zod.d.ts +0 -9
  57. package/src/utils/zod.js +0 -19
  58. package/src/utils/zod.js.map +0 -1
package/README.md CHANGED
@@ -57,7 +57,8 @@
57
57
  - `ts#cloudscape-website#auth` - Add AWS Cognito authentication to your Cloudscape website.
58
58
  - `ts#trpc-api` - Generate a tRPC backend service with Amazon API Gateway/AWS Lambda integrations and [AWS Powertools](https://github.com/aws-powertools/powertools-lambda-typescript) pre-configured.
59
59
  - `ts#nx-generator` - Add an [Nx Generator](https://nx.dev/features/generate-code) to a TypeScript project.
60
- - `ts#mcp-server` - Generate a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server in TypeScript.
60
+ - `ts#mcp-server` - Add a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server to a TypeScript project.
61
+ - `ts#lambda-function` - Generate a TypeScript lambda function with optional type-safe event sources.
61
62
  - `py#project` - Generate a uv based Python project.
62
63
  - `py#fast-api` - Generate a FastAPI backend service with [AWS Powertools](https://github.com/aws-powertools/powertools-lambda-python) pre-configured.
63
64
  - `py#lambda-function` - Add a lambda function to an existing python project with optional type-safe event sources.
@@ -68,35 +69,10 @@
68
69
 
69
70
  @aws/nx-plugin has been designed for gradual adoption from the start, and **you can use as little or as much of it as you need**.
70
71
 
71
- 1. Create a new NX workspace
72
-
73
- ```bash
74
- npx create-nx-workspace@~20.6.3 demo --pm=pnpm --preset=@aws/nx-plugin --ci=skip
75
- cd demo
76
- ```
77
-
78
- 2. Add components:
79
-
80
- ```bash
81
- # Generate a tRPC API backend
82
- pnpm nx g @aws/nx-plugin:ts#trpc-api
83
-
84
- # Generate a Cloudscape website
85
- pnpm nx g @aws/nx-plugin:ts#cloudscape-website
86
-
87
- # Connect the frontend to the backend
88
- pnpm nx g @aws/nx-plugin:api-connection
89
-
90
- # Add authentication to your website
91
- pnpm nx g @aws/nx-plugin:ts#cloudscape-website#auth
92
-
93
- # Generate AWS CDK infrastructure
94
- pnpm nx g @aws/nx-plugin:ts#infra
95
- ```
72
+ Follow the [Quick Start](https://awslabs.github.io/nx-plugin-for-aws/en/get_started/quick-start) guide to create a workspace and add projects.
96
73
 
97
74
  ### Additional resources
98
75
 
99
- - Use [Quick Start](https://awslabs.github.io/nx-plugin-for-aws/en/get_started/quick-start/) to get a taste of @aws/nx-plugin.
100
76
  - [Build a Dungeon Adventure Game](https://awslabs.github.io/nx-plugin-for-aws/en/get_started/tutorials/dungeon-game/overview/) to get an in-depth guided tutorial on how to use the @aws/nx-plugin.
101
77
  - [Add @aws/nx-plugin to your existing project](https://awslabs.github.io/nx-plugin-for-aws/en/get_started/tutorials/existing-project/)
102
78
 
@@ -124,41 +100,6 @@ If you have issues such as `ENOENT npx`, replace the command with `/full/path/to
124
100
 
125
101
  For more details, [take a look at the guide here](https://awslabs.github.io/nx-plugin-for-aws/en/get_started/building-with-ai/)
126
102
 
127
- ## Documentation Translation
128
-
129
- The project supports automatic translation of documentation using AWS Bedrock's Deepseek & Haiku 3.5 models. Documentation is translated from English to multiple languages (currently Japanese, with support for French, Spanish, German, Chinese, and Korean).
130
-
131
- > **_NOTE:_** It is important that only files in english (en folder) are modified directly as the translated files are generating using english as a base.
132
-
133
- ### Running Translations Locally
134
-
135
- > **_NOTE:_** Ensure you have your aws cli configured to an AWS account with DeepSeek/Haiku 3.5 Bedrock model access before continuing.
136
-
137
- To translate documentation locally:
138
-
139
- ```bash
140
- # Translate only changed files
141
- pnpm tsx ./scripts/translate.ts
142
-
143
- # Translate all files
144
- pnpm tsx ./scripts/translate.ts --all
145
-
146
- # Translate to specific languages
147
- pnpm tsx ./scripts/translate.ts --languages jp,fr,es
148
-
149
- # Show what would be translated without actually translating
150
- pnpm tsx ./scripts/translate.ts --dry-run
151
- ```
152
-
153
- ### GitHub Workflow
154
-
155
- A GitHub workflow automatically translates documentation when changes are made to English documentation files in pull requests. The workflow:
156
-
157
- 1. Detects changes to English documentation files
158
- 2. Translates the changed files using DeepSeek and Haiku 3.5 on AWS Bedrock
159
- 3. Commits the translations back to the source branch
160
- 4. Updates the PR with files translated
161
-
162
103
  ## Contributing
163
104
 
164
105
  The main purpose of this repository is to continue evolving @aws/nx-plugin, making it faster and easier to use. Development happens in the open on GitHub, and we are grateful to the community for contributing bugfixes and improvements.
package/generators.json CHANGED
@@ -150,6 +150,12 @@
150
150
  "description": "The @aws/nx-plugin workspace preset.",
151
151
  "metric": "g20",
152
152
  "hidden": true
153
+ },
154
+ "ts#nx-plugin": {
155
+ "factory": "./src/ts/nx-plugin/generator",
156
+ "schema": "./src/ts/nx-plugin/schema.json",
157
+ "description": "Generate an Nx Plugin of your own! Build custom generators automatically made available for AI vibe-coding via MCP",
158
+ "metric": "g22"
153
159
  }
154
160
  }
155
161
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws/nx-plugin",
3
- "version": "0.34.0",
3
+ "version": "0.36.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/awslabs/nx-plugin-for-aws.git",
package/sdk/ts.d.ts CHANGED
@@ -10,6 +10,8 @@ export { tsMcpServerGenerator } from '../src/ts/mcp-server/generator';
10
10
  export type { TsMcpServerGeneratorSchema } from '../src/ts/mcp-server/schema';
11
11
  export { tsNxGeneratorGenerator } from '../src/ts/nx-generator/generator';
12
12
  export type { TsNxGeneratorGeneratorSchema } from '../src/ts/nx-generator/schema';
13
+ export { tsNxPluginGenerator } from '../src/ts/nx-plugin/generator';
14
+ export type { TsNxPluginGeneratorSchema } from '../src/ts/nx-plugin/schema';
13
15
  export { tsCloudScapeWebsiteGenerator } from '../src/cloudscape-website/app/generator';
14
16
  export type { TsCloudScapeWebsiteGeneratorSchema } from '../src/cloudscape-website/app/schema';
15
17
  export { tsCloudScapeWebsiteAuthGenerator } from '../src/cloudscape-website/cognito-auth/generator';
@@ -18,4 +20,6 @@ export { runtimeConfigGenerator } from '../src/cloudscape-website/runtime-config
18
20
  export type { RuntimeConfigGeneratorSchema } from '../src/cloudscape-website/runtime-config/schema';
19
21
  export { tsTrpcApiGenerator } from '../src/trpc/backend/generator';
20
22
  export type { TsTrpcApiGeneratorSchema } from '../src/trpc/backend/schema';
23
+ export { tsLambdaFunctionGenerator } from '../src/ts/lambda-function/generator';
24
+ export type { TsLambdaFunctionGeneratorSchema } from '../src/ts/lambda-function/schema';
21
25
  export { sharedConstructsGenerator } from '../src/utils/shared-constructs';
package/sdk/ts.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.sharedConstructsGenerator = exports.tsTrpcApiGenerator = exports.runtimeConfigGenerator = exports.tsCloudScapeWebsiteAuthGenerator = exports.tsCloudScapeWebsiteGenerator = exports.tsNxGeneratorGenerator = exports.tsMcpServerGenerator = exports.tsInfraGenerator = exports.tsProjectGenerator = void 0;
7
+ exports.sharedConstructsGenerator = exports.tsLambdaFunctionGenerator = exports.tsTrpcApiGenerator = exports.runtimeConfigGenerator = exports.tsCloudScapeWebsiteAuthGenerator = exports.tsCloudScapeWebsiteGenerator = exports.tsNxPluginGenerator = exports.tsNxGeneratorGenerator = exports.tsMcpServerGenerator = exports.tsInfraGenerator = exports.tsProjectGenerator = void 0;
8
8
  // TypeScript Project Generator
9
9
  var generator_1 = require("../src/ts/lib/generator");
10
10
  Object.defineProperty(exports, "tsProjectGenerator", { enumerable: true, get: function () { return generator_1.tsProjectGenerator; } });
@@ -17,18 +17,24 @@ Object.defineProperty(exports, "tsMcpServerGenerator", { enumerable: true, get:
17
17
  // TypeScript Nx Generator Generator
18
18
  var generator_4 = require("../src/ts/nx-generator/generator");
19
19
  Object.defineProperty(exports, "tsNxGeneratorGenerator", { enumerable: true, get: function () { return generator_4.tsNxGeneratorGenerator; } });
20
+ // TypeScript Nx Plugin Generator
21
+ var generator_5 = require("../src/ts/nx-plugin/generator");
22
+ Object.defineProperty(exports, "tsNxPluginGenerator", { enumerable: true, get: function () { return generator_5.tsNxPluginGenerator; } });
20
23
  // TypeScript CloudScape Website Generator
21
- var generator_5 = require("../src/cloudscape-website/app/generator");
22
- Object.defineProperty(exports, "tsCloudScapeWebsiteGenerator", { enumerable: true, get: function () { return generator_5.tsCloudScapeWebsiteGenerator; } });
24
+ var generator_6 = require("../src/cloudscape-website/app/generator");
25
+ Object.defineProperty(exports, "tsCloudScapeWebsiteGenerator", { enumerable: true, get: function () { return generator_6.tsCloudScapeWebsiteGenerator; } });
23
26
  // TypeScript CloudScape Website Auth Generator
24
- var generator_6 = require("../src/cloudscape-website/cognito-auth/generator");
25
- Object.defineProperty(exports, "tsCloudScapeWebsiteAuthGenerator", { enumerable: true, get: function () { return generator_6.tsCloudScapeWebsiteAuthGenerator; } });
27
+ var generator_7 = require("../src/cloudscape-website/cognito-auth/generator");
28
+ Object.defineProperty(exports, "tsCloudScapeWebsiteAuthGenerator", { enumerable: true, get: function () { return generator_7.tsCloudScapeWebsiteAuthGenerator; } });
26
29
  // Runtime Config
27
- var generator_7 = require("../src/cloudscape-website/runtime-config/generator");
28
- Object.defineProperty(exports, "runtimeConfigGenerator", { enumerable: true, get: function () { return generator_7.runtimeConfigGenerator; } });
30
+ var generator_8 = require("../src/cloudscape-website/runtime-config/generator");
31
+ Object.defineProperty(exports, "runtimeConfigGenerator", { enumerable: true, get: function () { return generator_8.runtimeConfigGenerator; } });
29
32
  // TypeScript tRPC API
30
- var generator_8 = require("../src/trpc/backend/generator");
31
- Object.defineProperty(exports, "tsTrpcApiGenerator", { enumerable: true, get: function () { return generator_8.tsTrpcApiGenerator; } });
33
+ var generator_9 = require("../src/trpc/backend/generator");
34
+ Object.defineProperty(exports, "tsTrpcApiGenerator", { enumerable: true, get: function () { return generator_9.tsTrpcApiGenerator; } });
35
+ // TypeScript Lambda Function
36
+ var generator_10 = require("../src/ts/lambda-function/generator");
37
+ Object.defineProperty(exports, "tsLambdaFunctionGenerator", { enumerable: true, get: function () { return generator_10.tsLambdaFunctionGenerator; } });
32
38
  // Shared Constructs
33
39
  var shared_constructs_1 = require("../src/utils/shared-constructs");
34
40
  Object.defineProperty(exports, "sharedConstructsGenerator", { enumerable: true, get: function () { return shared_constructs_1.sharedConstructsGenerator; } });
package/sdk/ts.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ts.js","sourceRoot":"","sources":["../../../../packages/nx-plugin/sdk/ts.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+BAA+B;AAC/B,qDAA6D;AAApD,+GAAA,kBAAkB,OAAA;AAG3B,4BAA4B;AAC5B,wDAA8D;AAArD,6GAAA,gBAAgB,OAAA;AAGzB,kCAAkC;AAClC,4DAAsE;AAA7D,iHAAA,oBAAoB,OAAA;AAG7B,oCAAoC;AACpC,8DAA0E;AAAjE,mHAAA,sBAAsB,OAAA;AAG/B,0CAA0C;AAC1C,qEAAuF;AAA9E,yHAAA,4BAA4B,OAAA;AAGrC,+CAA+C;AAC/C,8EAAoG;AAA3F,6HAAA,gCAAgC,OAAA;AAGzC,iBAAiB;AACjB,gFAA4F;AAAnF,mHAAA,sBAAsB,OAAA;AAG/B,sBAAsB;AACtB,2DAAmE;AAA1D,+GAAA,kBAAkB,OAAA;AAG3B,oBAAoB;AACpB,oEAA2E;AAAlE,8HAAA,yBAAyB,OAAA"}
1
+ {"version":3,"file":"ts.js","sourceRoot":"","sources":["../../../../packages/nx-plugin/sdk/ts.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+BAA+B;AAC/B,qDAA6D;AAApD,+GAAA,kBAAkB,OAAA;AAG3B,4BAA4B;AAC5B,wDAA8D;AAArD,6GAAA,gBAAgB,OAAA;AAGzB,kCAAkC;AAClC,4DAAsE;AAA7D,iHAAA,oBAAoB,OAAA;AAG7B,oCAAoC;AACpC,8DAA0E;AAAjE,mHAAA,sBAAsB,OAAA;AAG/B,iCAAiC;AACjC,2DAAoE;AAA3D,gHAAA,mBAAmB,OAAA;AAG5B,0CAA0C;AAC1C,qEAAuF;AAA9E,yHAAA,4BAA4B,OAAA;AAGrC,+CAA+C;AAC/C,8EAAoG;AAA3F,6HAAA,gCAAgC,OAAA;AAGzC,iBAAiB;AACjB,gFAA4F;AAAnF,mHAAA,sBAAsB,OAAA;AAG/B,sBAAsB;AACtB,2DAAmE;AAA1D,+GAAA,kBAAkB,OAAA;AAG3B,6BAA6B;AAC7B,kEAAgF;AAAvE,uHAAA,yBAAyB,OAAA;AAGlC,oBAAoB;AACpB,oEAA2E;AAAlE,8HAAA,yBAAyB,OAAA"}
@@ -17,14 +17,7 @@ const addCreateWorkspaceCommandTool = (server) => {
17
17
  npx create-nx-workspace@~21.0.3 ${workspaceName} --pm=${packageManager} --preset=@aws/nx-plugin --ci=skip
18
18
  \`\`\`
19
19
 
20
- Note that this will create a workspace in a new directory named ${workspaceName}. If you are already working in the directory
21
- you would like for your workspace, you can move all the files up one level and delete the empty directory afterwards, eg:
22
-
23
- \`\`\`bash
24
- mv ${workspaceName}/{*,.*} ./ && rm -rf ${workspaceName}
25
- \`\`\`
26
-
27
- (Note that the above command will complain about moving . and .. but that is expected and ok!)
20
+ This will create a new workspace within the ${workspaceName} directory.
28
21
  `,
29
22
  },
30
23
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"create-workspace-command.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/mcp-server/tools/create-workspace-command.ts"],"names":[],"mappings":";;;AAKA,6BAAwB;AACxB,sCAAiD;AAEjD;;GAEG;AACI,MAAM,6BAA6B,GAAG,CAAC,MAAiB,EAAE,EAAE;IACjE,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,oEAAoE,EACpE,EAAE,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,6BAAoB,EAAE,EACnE,CAAC,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;;;kCAGkB,aAAa,SAAS,cAAc;;;kEAGJ,aAAa;;;;KAI1E,aAAa,wBAAwB,aAAa;;;;GAIpD;aACM;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AA5BW,QAAA,6BAA6B,iCA4BxC"}
1
+ {"version":3,"file":"create-workspace-command.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/mcp-server/tools/create-workspace-command.ts"],"names":[],"mappings":";;;AAKA,6BAAwB;AACxB,sCAAiD;AAEjD;;GAEG;AACI,MAAM,6BAA6B,GAAG,CAAC,MAAiB,EAAE,EAAE;IACjE,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,oEAAoE,EACpE,EAAE,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,6BAAoB,EAAE,EACnE,CAAC,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;;;kCAGkB,aAAa,SAAS,cAAc;;;8CAGxB,aAAa;GACxD;aACM;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AArBW,QAAA,6BAA6B,iCAqBxC"}
@@ -11,7 +11,7 @@ const schema_1 = require("../schema");
11
11
  const addGeneratorGuideTool = (server, generators) => {
12
12
  server.tool('generator-guide', 'Tool to retrieve detailed information about a specific generator.', {
13
13
  packageManager: schema_1.PackageManagerSchema,
14
- generator: zod_1.z.custom((v) => generators.map((g) => g.id).includes(v)),
14
+ generator: zod_1.z.custom((v) => typeof v === 'string' && generators.map((g) => g.id).includes(v)),
15
15
  }, (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ packageManager, generator: generatorId }) {
16
16
  const generator = generators.find((g) => g.id === generatorId);
17
17
  if (!generator) {
@@ -1 +1 @@
1
- {"version":3,"file":"generator-guide.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/mcp-server/tools/generator-guide.ts"],"names":[],"mappings":";;;;AAMA,6BAAwB;AACxB,sDAG2B;AAC3B,sCAAiD;AAEjD;;GAEG;AACI,MAAM,qBAAqB,GAAG,CACnC,MAAiB,EACjB,UAA6B,EAC7B,EAAE;IACF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,mEAAmE,EACnE;QACE,cAAc,EAAE,6BAAoB;QACpC,SAAS,EAAE,OAAC,CAAC,MAAM,CAAS,CAAC,CAAC,EAAE,EAAE,CAChC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CACxC;KACF,EACD,KAAmD,EAAE,oDAA9C,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE;QAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,8BAA8B,WAAW,2BAA2B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7G,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,IAAA,oCAAmB,EAAC,cAAc,EAAE,SAAS,CAAC;;;;EAIpE,MAAM,IAAA,4CAA2B,EAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC;CACzE;iBACU;aACF;SACF,CAAC;IACJ,CAAC,CAAA,CACF,CAAC;AACJ,CAAC,CAAC;AApCW,QAAA,qBAAqB,yBAoChC"}
1
+ {"version":3,"file":"generator-guide.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/mcp-server/tools/generator-guide.ts"],"names":[],"mappings":";;;;AAMA,6BAAwB;AACxB,sDAG2B;AAC3B,sCAAiD;AAEjD;;GAEG;AACI,MAAM,qBAAqB,GAAG,CACnC,MAAiB,EACjB,UAA6B,EAC7B,EAAE;IACF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,mEAAmE,EACnE;QACE,cAAc,EAAE,6BAAoB;QACpC,SAAS,EAAE,OAAC,CAAC,MAAM,CACjB,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CACxE;KACF,EACD,KAAmD,EAAE,oDAA9C,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE;QAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,8BAA8B,WAAW,2BAA2B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7G,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,IAAA,oCAAmB,EAAC,cAAc,EAAE,SAAS,CAAC;;;;EAIpE,MAAM,IAAA,4CAA2B,EAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC;CACzE;iBACU;aACF;SACF,CAAC;IACJ,CAAC,CAAA,CACF,CAAC;AACJ,CAAC,CAAC;AApCW,QAAA,qBAAqB,yBAoChC"}
@@ -56,6 +56,8 @@ The following list of generators are what is currently available in the \`@aws/n
56
56
 
57
57
  - **ts#mcp-server**: Generate a TypeScript Model Context Protocol (MCP) server for providing context to Large Language Models
58
58
 
59
+ - **ts#nx-plugin**: Generate an Nx Plugin of your own! Build custom generators automatically made available for AI vibe-coding via MCP
60
+
59
61
  You also have the option of using additional [commmunity plugins](https://nx.dev/plugin-registry) as needed.
60
62
 
61
63
  ## Invoking a generator
@@ -295,7 +295,7 @@ export type AppRouter = typeof appRouter;
295
295
  `;
296
296
 
297
297
  exports[`trpc backend generator > should generate the project > apps/test-api/src/schema/echo.ts 1`] = `
298
- "import { z } from 'zod';
298
+ "import { z } from 'zod/v4';
299
299
 
300
300
  export const EchoInputSchema = z.object({
301
301
  message: z.string(),
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v4';
2
2
 
3
3
  export const EchoInputSchema = z.object({
4
4
  message: z.string(),
@@ -20,7 +20,6 @@ const nx_1 = require("../../utils/nx");
20
20
  const metrics_1 = require("../../utils/metrics");
21
21
  const api_constructs_1 = require("../../utils/api-constructs/api-constructs");
22
22
  const port_1 = require("../../utils/port");
23
- const zod_1 = require("../../utils/zod");
24
23
  exports.TRPC_BACKEND_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
25
24
  function tsTrpcApiGenerator(tree, options) {
26
25
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
@@ -99,8 +98,6 @@ function tsTrpcApiGenerator(tree, options) {
99
98
  overwriteStrategy: devkit_1.OverwriteStrategy.Overwrite,
100
99
  });
101
100
  tree.delete((0, devkit_1.joinPathFragments)(backendRoot, 'src', 'lib'));
102
- // Add an alias for zod v4
103
- (0, zod_1.addZodV4Alias)(tree);
104
101
  (0, devkit_1.addDependenciesToPackageJson)(tree, (0, versions_1.withVersions)([
105
102
  'aws-xray-sdk-core',
106
103
  'zod',
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/trpc/backend/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/trpc/backend/generator.ts"],"names":[],"mappings":"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"}