@aws/nx-plugin 1.0.8 → 1.0.10

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 (97) hide show
  1. package/LICENSE-THIRD-PARTY +100 -562
  2. package/migrations.json +67 -24
  3. package/package.json +10 -10
  4. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +1 -1
  5. package/src/infra/app/__snapshots__/generator.spec.ts.snap +3 -3
  6. package/src/migrations/latest/pin-strands-mcp-client-peer/metadata.json +3 -0
  7. package/src/migrations/latest/pin-strands-mcp-client-peer/migration.d.ts +20 -0
  8. package/src/migrations/latest/pin-strands-mcp-client-peer/migration.js +51 -0
  9. package/src/migrations/latest/pin-strands-mcp-client-peer/migration.js.map +1 -0
  10. package/src/migrations/latest/py-dynamodb-bind-base-model-meta/metadata.json +3 -0
  11. package/src/migrations/latest/{rdb-drop-lambda-rie → py-dynamodb-bind-base-model-meta}/migration.d.ts +1 -1
  12. package/src/migrations/latest/py-dynamodb-bind-base-model-meta/migration.js +56 -0
  13. package/src/migrations/latest/py-dynamodb-bind-base-model-meta/migration.js.map +1 -0
  14. package/src/migrations/v1.0.7/0001-pin-strands-express-peer/migration.js.map +1 -0
  15. package/src/migrations/v1.0.7/0002-rdb-drop-lambda-rie/migration.js.map +1 -0
  16. package/src/migrations/v1.0.8/0001-infra-test-loop/migration.js.map +1 -0
  17. package/src/migrations/v1.0.8/0002-py-dynamodb-type-base-model-meta/metadata.json +3 -0
  18. package/src/migrations/v1.0.8/0002-py-dynamodb-type-base-model-meta/migration.d.ts +6 -0
  19. package/src/migrations/v1.0.8/0002-py-dynamodb-type-base-model-meta/migration.js +54 -0
  20. package/src/migrations/v1.0.8/0002-py-dynamodb-type-base-model-meta/migration.js.map +1 -0
  21. package/src/migrations/v1.0.8/0003-cache-inputs-outputs/migration.js.map +1 -0
  22. package/src/open-api/py-client/files/shared/errors.py.template +3 -5
  23. package/src/open-api/py-client/generator.d.ts +1 -1
  24. package/src/preset/__snapshots__/generator.spec.ts.snap +3 -3
  25. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +5 -5
  26. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +9 -9
  27. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +4 -4
  28. package/src/py/agent/a2a-connection/generator.d.ts +1 -1
  29. package/src/py/agent/gateway-connection/generator.d.ts +1 -1
  30. package/src/py/agent/mcp-connection/generator.d.ts +1 -1
  31. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +8 -4
  32. package/src/py/dynamodb/base-model-meta.d.ts +39 -0
  33. package/src/py/dynamodb/base-model-meta.js +54 -0
  34. package/src/py/dynamodb/base-model-meta.js.map +1 -0
  35. package/src/py/dynamodb/files/__name__/entities/base.py.template +3 -1
  36. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +12 -12
  37. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
  38. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +3 -3
  39. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +4 -4
  40. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +5 -5
  41. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +8 -8
  42. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +12 -12
  43. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +4 -4
  44. package/src/ts/agent/a2a-connection/generator.d.ts +2 -2
  45. package/src/ts/agent/gateway-connection/generator.d.ts +3 -1
  46. package/src/ts/agent/gateway-connection/generator.js +4 -0
  47. package/src/ts/agent/gateway-connection/generator.js.map +1 -1
  48. package/src/ts/agent/generator.d.ts +3 -1
  49. package/src/ts/agent/generator.js +5 -0
  50. package/src/ts/agent/generator.js.map +1 -1
  51. package/src/ts/agent/mcp-connection/generator.d.ts +3 -1
  52. package/src/ts/agent/mcp-connection/generator.js +4 -0
  53. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  54. package/src/ts/astro-docs/generator.d.ts +1 -1
  55. package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +1 -1
  56. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
  57. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
  58. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
  59. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +5 -5
  60. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +41 -39
  61. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +2 -2
  62. package/src/utils/agent-connection/agent-connection.d.ts +9 -3
  63. package/src/utils/agent-connection/agent-connection.js +9 -2
  64. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  65. package/src/utils/git.d.ts +5 -0
  66. package/src/utils/git.js +29 -4
  67. package/src/utils/git.js.map +1 -1
  68. package/src/utils/shared-constructs.d.ts +5 -0
  69. package/src/utils/shared-constructs.js +10 -9
  70. package/src/utils/shared-constructs.js.map +1 -1
  71. package/src/utils/version-lockstep/hold.d.ts +29 -0
  72. package/src/utils/version-lockstep/hold.js +40 -0
  73. package/src/utils/version-lockstep/hold.js.map +1 -0
  74. package/src/utils/version-lockstep/lockstep.d.ts +2 -2
  75. package/src/utils/version-lockstep/lockstep.js.map +1 -1
  76. package/src/utils/versions.d.ts +81 -80
  77. package/src/utils/versions.js +79 -78
  78. package/src/utils/versions.js.map +1 -1
  79. package/src/migrations/latest/cache-inputs-outputs/migration.js.map +0 -1
  80. package/src/migrations/latest/infra-test-loop/migration.js.map +0 -1
  81. package/src/migrations/latest/pin-strands-express-peer/migration.js.map +0 -1
  82. package/src/migrations/latest/py-dynamodb-type-base-model-meta/metadata.json +0 -3
  83. package/src/migrations/latest/py-dynamodb-type-base-model-meta/migration.js +0 -87
  84. package/src/migrations/latest/py-dynamodb-type-base-model-meta/migration.js.map +0 -1
  85. package/src/migrations/latest/rdb-drop-lambda-rie/migration.js.map +0 -1
  86. /package/src/migrations/{latest/pin-strands-express-peer → v1.0.7/0001-pin-strands-express-peer}/metadata.json +0 -0
  87. /package/src/migrations/{latest/pin-strands-express-peer → v1.0.7/0001-pin-strands-express-peer}/migration.d.ts +0 -0
  88. /package/src/migrations/{latest/pin-strands-express-peer → v1.0.7/0001-pin-strands-express-peer}/migration.js +0 -0
  89. /package/src/migrations/{latest/rdb-drop-lambda-rie → v1.0.7/0002-rdb-drop-lambda-rie}/metadata.json +0 -0
  90. /package/src/migrations/{latest/cache-inputs-outputs → v1.0.7/0002-rdb-drop-lambda-rie}/migration.d.ts +0 -0
  91. /package/src/migrations/{latest/rdb-drop-lambda-rie → v1.0.7/0002-rdb-drop-lambda-rie}/migration.js +0 -0
  92. /package/src/migrations/{latest/infra-test-loop → v1.0.8/0001-infra-test-loop}/metadata.json +0 -0
  93. /package/src/migrations/{latest/infra-test-loop → v1.0.8/0001-infra-test-loop}/migration.d.ts +0 -0
  94. /package/src/migrations/{latest/infra-test-loop → v1.0.8/0001-infra-test-loop}/migration.js +0 -0
  95. /package/src/migrations/{latest/cache-inputs-outputs → v1.0.8/0003-cache-inputs-outputs}/metadata.json +0 -0
  96. /package/src/migrations/{latest/py-dynamodb-type-base-model-meta → v1.0.8/0003-cache-inputs-outputs}/migration.d.ts +0 -0
  97. /package/src/migrations/{latest/cache-inputs-outputs → v1.0.8/0003-cache-inputs-outputs}/migration.js +0 -0
@@ -13,5 +13,10 @@ export declare const getGitIncludedFiles: (tree: Tree) => string[];
13
13
  export declare const isWithinGitRepo: (tree: Tree) => boolean;
14
14
  /**
15
15
  * Update a .gitignore file. Will create a new .gitignore file if it does not exist
16
+ *
17
+ * A trailing newline is kept rather than handed to `doUpdate` as an empty
18
+ * pattern. Duplicate patterns are removed, but blank lines are kept where they
19
+ * are. When the update adds and removes nothing the file is left untouched, so
20
+ * re-running a caller is a no-op.
16
21
  */
17
22
  export declare const updateGitIgnore: (tree: Tree, dir: string, doUpdate: (patterns: string[]) => string[]) => void;
package/src/utils/git.js CHANGED
@@ -3,7 +3,6 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */ import { joinPathFragments } from "@nx/devkit";
5
5
  import { execSync } from "child_process";
6
- import uniqBy from "lodash.uniqby";
7
6
  /**
8
7
  * Returns all files from the tree root that are not gitignored (both tracked and untracked)
9
8
  */ export const getGitIncludedFiles = (tree)=>{
@@ -37,11 +36,37 @@ import uniqBy from "lodash.uniqby";
37
36
  };
38
37
  /**
39
38
  * Update a .gitignore file. Will create a new .gitignore file if it does not exist
39
+ *
40
+ * A trailing newline is kept rather than handed to `doUpdate` as an empty
41
+ * pattern. Duplicate patterns are removed, but blank lines are kept where they
42
+ * are. When the update adds and removes nothing the file is left untouched, so
43
+ * re-running a caller is a no-op.
40
44
  */ export const updateGitIgnore = (tree, dir, doUpdate)=>{
41
45
  const gitIgnorePath = joinPathFragments(dir, '.gitignore');
42
- const existingPatterns = tree.read(gitIgnorePath, 'utf-8')?.split('\n') ?? [];
43
- const newPatterns = doUpdate(existingPatterns);
44
- tree.write(gitIgnorePath, uniqBy(newPatterns, (p)=>p).join('\n'));
46
+ const existing = tree.read(gitIgnorePath, 'utf-8');
47
+ const hasTrailingNewline = existing?.endsWith('\n') ?? false;
48
+ const existingPatterns = existing === null ? [] : (hasTrailingNewline ? existing.slice(0, -1) : existing).split('\n');
49
+ const seen = new Set();
50
+ const newPatterns = doUpdate([
51
+ ...existingPatterns
52
+ ]).filter((p)=>{
53
+ if (p.trim() === '') {
54
+ return true;
55
+ }
56
+ if (seen.has(p)) {
57
+ return false;
58
+ }
59
+ seen.add(p);
60
+ return true;
61
+ });
62
+ if (existing !== null) {
63
+ const existingSet = new Set(existingPatterns);
64
+ const newSet = new Set(newPatterns);
65
+ if (newPatterns.every((p)=>existingSet.has(p)) && existingPatterns.every((p)=>newSet.has(p))) {
66
+ return;
67
+ }
68
+ }
69
+ tree.write(gitIgnorePath, newPatterns.join('\n') + (hasTrailingNewline ? '\n' : ''));
45
70
  };
46
71
 
47
72
  //# sourceMappingURL=git.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/git.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { joinPathFragments, type Tree } from '@nx/devkit';\nimport { execSync } from 'child_process';\nimport uniqBy from 'lodash.uniqby';\n\n/**\n * Returns all files from the tree root that are not gitignored (both tracked and untracked)\n */\nexport const getGitIncludedFiles = (tree: Tree): string[] => {\n return [\n // Git tracked files\n ...execSync('git ls-files --exclude-standard', {\n encoding: 'utf-8',\n cwd: tree.root,\n })\n .split('\\n')\n .filter((x) => x),\n // Untracked files that aren't ignored\n ...execSync('git ls-files --others --exclude-standard', {\n encoding: 'utf-8',\n cwd: tree.root,\n })\n .split('\\n')\n .filter((x) => x),\n ].filter((f) => tree.exists(f));\n};\n\n/**\n * Return whether or not a tree is within a git repo\n */\nexport const isWithinGitRepo = (tree: Tree): boolean => {\n if (tree.exists('.git')) {\n return true;\n }\n try {\n return execSync('git rev-parse --is-inside-work-tree', {\n encoding: 'utf-8',\n cwd: tree.root,\n }).startsWith('true');\n } catch {\n return false;\n }\n};\n\n/**\n * Update a .gitignore file. Will create a new .gitignore file if it does not exist\n */\nexport const updateGitIgnore = (\n tree: Tree,\n dir: string,\n doUpdate: (patterns: string[]) => string[],\n) => {\n const gitIgnorePath = joinPathFragments(dir, '.gitignore');\n const existingPatterns = tree.read(gitIgnorePath, 'utf-8')?.split('\\n') ?? [];\n const newPatterns = doUpdate(existingPatterns);\n tree.write(gitIgnorePath, uniqBy(newPatterns, (p) => p).join('\\n'));\n};\n"],"names":["joinPathFragments","execSync","uniqBy","getGitIncludedFiles","tree","encoding","cwd","root","split","filter","x","f","exists","isWithinGitRepo","startsWith","updateGitIgnore","dir","doUpdate","gitIgnorePath","existingPatterns","read","newPatterns","write","p","join"],"mappings":"AAAA;;;CAGC,GACD,SAASA,iBAAiB,QAAmB,aAAa;AAC1D,SAASC,QAAQ,QAAQ,gBAAgB;AACzC,OAAOC,YAAY,gBAAgB;AAEnC;;CAEC,GACD,OAAO,MAAMC,sBAAsB,CAACC;IAClC,OAAO;QACL,oBAAoB;WACjBH,SAAS,mCAAmC;YAC7CI,UAAU;YACVC,KAAKF,KAAKG,IAAI;QAChB,GACGC,KAAK,CAAC,MACNC,MAAM,CAAC,CAACC,IAAMA;QACjB,sCAAsC;WACnCT,SAAS,4CAA4C;YACtDI,UAAU;YACVC,KAAKF,KAAKG,IAAI;QAChB,GACGC,KAAK,CAAC,MACNC,MAAM,CAAC,CAACC,IAAMA;KAClB,CAACD,MAAM,CAAC,CAACE,IAAMP,KAAKQ,MAAM,CAACD;AAC9B,EAAE;AAEF;;CAEC,GACD,OAAO,MAAME,kBAAkB,CAACT;IAC9B,IAAIA,KAAKQ,MAAM,CAAC,SAAS;QACvB,OAAO;IACT;IACA,IAAI;QACF,OAAOX,SAAS,uCAAuC;YACrDI,UAAU;YACVC,KAAKF,KAAKG,IAAI;QAChB,GAAGO,UAAU,CAAC;IAChB,EAAE,OAAM;QACN,OAAO;IACT;AACF,EAAE;AAEF;;CAEC,GACD,OAAO,MAAMC,kBAAkB,CAC7BX,MACAY,KACAC;IAEA,MAAMC,gBAAgBlB,kBAAkBgB,KAAK;IAC7C,MAAMG,mBAAmBf,KAAKgB,IAAI,CAACF,eAAe,UAAUV,MAAM,SAAS,EAAE;IAC7E,MAAMa,cAAcJ,SAASE;IAC7Bf,KAAKkB,KAAK,CAACJ,eAAehB,OAAOmB,aAAa,CAACE,IAAMA,GAAGC,IAAI,CAAC;AAC/D,EAAE"}
1
+ {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/git.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { joinPathFragments, type Tree } from '@nx/devkit';\nimport { execSync } from 'child_process';\n\n/**\n * Returns all files from the tree root that are not gitignored (both tracked and untracked)\n */\nexport const getGitIncludedFiles = (tree: Tree): string[] => {\n return [\n // Git tracked files\n ...execSync('git ls-files --exclude-standard', {\n encoding: 'utf-8',\n cwd: tree.root,\n })\n .split('\\n')\n .filter((x) => x),\n // Untracked files that aren't ignored\n ...execSync('git ls-files --others --exclude-standard', {\n encoding: 'utf-8',\n cwd: tree.root,\n })\n .split('\\n')\n .filter((x) => x),\n ].filter((f) => tree.exists(f));\n};\n\n/**\n * Return whether or not a tree is within a git repo\n */\nexport const isWithinGitRepo = (tree: Tree): boolean => {\n if (tree.exists('.git')) {\n return true;\n }\n try {\n return execSync('git rev-parse --is-inside-work-tree', {\n encoding: 'utf-8',\n cwd: tree.root,\n }).startsWith('true');\n } catch {\n return false;\n }\n};\n\n/**\n * Update a .gitignore file. Will create a new .gitignore file if it does not exist\n *\n * A trailing newline is kept rather than handed to `doUpdate` as an empty\n * pattern. Duplicate patterns are removed, but blank lines are kept where they\n * are. When the update adds and removes nothing the file is left untouched, so\n * re-running a caller is a no-op.\n */\nexport const updateGitIgnore = (\n tree: Tree,\n dir: string,\n doUpdate: (patterns: string[]) => string[],\n) => {\n const gitIgnorePath = joinPathFragments(dir, '.gitignore');\n const existing = tree.read(gitIgnorePath, 'utf-8');\n const hasTrailingNewline = existing?.endsWith('\\n') ?? false;\n const existingPatterns =\n existing === null\n ? []\n : (hasTrailingNewline ? existing.slice(0, -1) : existing).split('\\n');\n const seen = new Set<string>();\n const newPatterns = doUpdate([...existingPatterns]).filter((p) => {\n if (p.trim() === '') {\n return true;\n }\n if (seen.has(p)) {\n return false;\n }\n seen.add(p);\n return true;\n });\n\n if (existing !== null) {\n const existingSet = new Set(existingPatterns);\n const newSet = new Set(newPatterns);\n if (\n newPatterns.every((p) => existingSet.has(p)) &&\n existingPatterns.every((p) => newSet.has(p))\n ) {\n return;\n }\n }\n\n tree.write(\n gitIgnorePath,\n newPatterns.join('\\n') + (hasTrailingNewline ? '\\n' : ''),\n );\n};\n"],"names":["joinPathFragments","execSync","getGitIncludedFiles","tree","encoding","cwd","root","split","filter","x","f","exists","isWithinGitRepo","startsWith","updateGitIgnore","dir","doUpdate","gitIgnorePath","existing","read","hasTrailingNewline","endsWith","existingPatterns","slice","seen","Set","newPatterns","p","trim","has","add","existingSet","newSet","every","write","join"],"mappings":"AAAA;;;CAGC,GACD,SAASA,iBAAiB,QAAmB,aAAa;AAC1D,SAASC,QAAQ,QAAQ,gBAAgB;AAEzC;;CAEC,GACD,OAAO,MAAMC,sBAAsB,CAACC;IAClC,OAAO;QACL,oBAAoB;WACjBF,SAAS,mCAAmC;YAC7CG,UAAU;YACVC,KAAKF,KAAKG,IAAI;QAChB,GACGC,KAAK,CAAC,MACNC,MAAM,CAAC,CAACC,IAAMA;QACjB,sCAAsC;WACnCR,SAAS,4CAA4C;YACtDG,UAAU;YACVC,KAAKF,KAAKG,IAAI;QAChB,GACGC,KAAK,CAAC,MACNC,MAAM,CAAC,CAACC,IAAMA;KAClB,CAACD,MAAM,CAAC,CAACE,IAAMP,KAAKQ,MAAM,CAACD;AAC9B,EAAE;AAEF;;CAEC,GACD,OAAO,MAAME,kBAAkB,CAACT;IAC9B,IAAIA,KAAKQ,MAAM,CAAC,SAAS;QACvB,OAAO;IACT;IACA,IAAI;QACF,OAAOV,SAAS,uCAAuC;YACrDG,UAAU;YACVC,KAAKF,KAAKG,IAAI;QAChB,GAAGO,UAAU,CAAC;IAChB,EAAE,OAAM;QACN,OAAO;IACT;AACF,EAAE;AAEF;;;;;;;CAOC,GACD,OAAO,MAAMC,kBAAkB,CAC7BX,MACAY,KACAC;IAEA,MAAMC,gBAAgBjB,kBAAkBe,KAAK;IAC7C,MAAMG,WAAWf,KAAKgB,IAAI,CAACF,eAAe;IAC1C,MAAMG,qBAAqBF,UAAUG,SAAS,SAAS;IACvD,MAAMC,mBACJJ,aAAa,OACT,EAAE,GACF,AAACE,CAAAA,qBAAqBF,SAASK,KAAK,CAAC,GAAG,CAAC,KAAKL,QAAO,EAAGX,KAAK,CAAC;IACpE,MAAMiB,OAAO,IAAIC;IACjB,MAAMC,cAAcV,SAAS;WAAIM;KAAiB,EAAEd,MAAM,CAAC,CAACmB;QAC1D,IAAIA,EAAEC,IAAI,OAAO,IAAI;YACnB,OAAO;QACT;QACA,IAAIJ,KAAKK,GAAG,CAACF,IAAI;YACf,OAAO;QACT;QACAH,KAAKM,GAAG,CAACH;QACT,OAAO;IACT;IAEA,IAAIT,aAAa,MAAM;QACrB,MAAMa,cAAc,IAAIN,IAAIH;QAC5B,MAAMU,SAAS,IAAIP,IAAIC;QACvB,IACEA,YAAYO,KAAK,CAAC,CAACN,IAAMI,YAAYF,GAAG,CAACF,OACzCL,iBAAiBW,KAAK,CAAC,CAACN,IAAMK,OAAOH,GAAG,CAACF,KACzC;YACA;QACF;IACF;IAEAxB,KAAK+B,KAAK,CACRjB,eACAS,YAAYS,IAAI,CAAC,QAASf,CAAAA,qBAAqB,OAAO,EAAC;AAE3D,EAAE"}
@@ -11,3 +11,8 @@ export interface SharedConstructsGeneratorOptions {
11
11
  iac: Iac;
12
12
  }
13
13
  export declare function sharedConstructsGenerator<const D extends DependencyDeclaration>(tree: Tree, options: SharedConstructsGeneratorOptions, declaration: D & MustDeclare<typeof SHARED_CONSTRUCTS_DEPENDENCIES, D>): Promise<void>;
14
+ /**
15
+ * Ignore the root `runtime-config.json`, unless an existing entry already
16
+ * covers it.
17
+ */
18
+ export declare const ignoreRuntimeConfig: (tree: Tree) => void;
@@ -8,6 +8,7 @@ import { addCdkTestGlobalSetup } from "./cdk-test-setup.js";
8
8
  import { readAwsNxPluginConfig } from "./config/utils.js";
9
9
  import { addDependenciesToPackageJson } from "./dependencies.js";
10
10
  import { formatFilesInSubtree } from "./format.js";
11
+ import { updateGitIgnore } from "./git.js";
11
12
  import { esmVars } from "./module-format.js";
12
13
  import { getNpmScopePrefix } from "./npm-scope.js";
13
14
  import { getPackageManagerDisplayCommands } from "./pkg-manager.js";
@@ -17,7 +18,7 @@ import { terraformProviderVersions, withVersions } from "./versions.js";
17
18
  export async function sharedConstructsGenerator(tree, options, declaration) {
18
19
  const { iac } = options;
19
20
  const npmScopePrefix = getNpmScopePrefix(tree);
20
- updateGitignore(tree);
21
+ ignoreRuntimeConfig(tree);
21
22
  if (iac === 'cdk') {
22
23
  if (!tree.exists(joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'project.json'))) {
23
24
  await tsProjectGenerator(tree, {
@@ -85,14 +86,14 @@ export async function sharedConstructsGenerator(tree, options, declaration) {
85
86
  }
86
87
  }
87
88
  }
88
- const updateGitignore = (tree)=>{
89
- const gitignore = tree.exists('.gitignore') ? tree.read('.gitignore', 'utf-8') : '';
90
- const regex = /runtime-config.json/gm;
91
- const hasRuntimeConfig = regex.test(gitignore ?? '');
92
- if (hasRuntimeConfig) {
93
- return;
94
- }
95
- tree.write('.gitignore', `${gitignore}\n\nruntime-config.json`);
89
+ /**
90
+ * Ignore the root `runtime-config.json`, unless an existing entry already
91
+ * covers it.
92
+ */ export const ignoreRuntimeConfig = (tree)=>{
93
+ updateGitIgnore(tree, '.', (patterns)=>patterns.some((p)=>p.includes('runtime-config.json')) ? patterns : [
94
+ ...patterns,
95
+ 'runtime-config.json'
96
+ ]);
96
97
  };
97
98
 
98
99
  //# sourceMappingURL=shared-constructs.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-constructs.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type ProjectConfiguration,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport terraformProjectGenerator from '../terraform/project/generator.js';\nimport tsProjectGenerator from '../ts/lib/generator.js';\nimport { addCdkTestGlobalSetup } from './cdk-test-setup.js';\nimport { readAwsNxPluginConfig } from './config/utils.js';\nimport type {\n DependencyDeclaration,\n MustDeclare,\n} from './declared-dependencies.js';\nimport { addDependenciesToPackageJson } from './dependencies.js';\nimport { formatFilesInSubtree } from './format.js';\nimport type { Iac } from './iac.js';\nimport { esmVars } from './module-format.js';\nimport { getNpmScopePrefix } from './npm-scope.js';\nimport { getPackageManagerDisplayCommands } from './pkg-manager.js';\nimport {\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DEPENDENCIES,\n SHARED_CONSTRUCTS_DIR,\n SHARED_CONSTRUCTS_NAME,\n SHARED_TERRAFORM_DIR,\n SHARED_TERRAFORM_NAME,\n} from './shared-constructs-constants.js';\n\nexport { SHARED_CONSTRUCTS_DEPENDENCIES };\n\nimport { terraformProviderVersions, withVersions } from './versions.js';\n\nexport interface SharedConstructsGeneratorOptions {\n iac: Iac;\n}\n\nexport async function sharedConstructsGenerator<\n const D extends DependencyDeclaration,\n>(\n tree: Tree,\n options: SharedConstructsGeneratorOptions,\n declaration: D & MustDeclare<typeof SHARED_CONSTRUCTS_DEPENDENCIES, D>,\n) {\n const { iac } = options;\n const npmScopePrefix = getNpmScopePrefix(tree);\n updateGitignore(tree);\n\n if (iac === 'cdk') {\n if (\n !tree.exists(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'project.json'),\n )\n ) {\n await tsProjectGenerator(tree, {\n name: SHARED_CONSTRUCTS_NAME,\n directory: PACKAGES_DIR,\n subDirectory: SHARED_CONSTRUCTS_DIR,\n });\n tree.delete(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src'),\n );\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n 'files',\n SHARED_CONSTRUCTS_DIR,\n 'src',\n ),\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src'),\n {\n npmScopePrefix,\n scopeAlias: npmScopePrefix,\n tags: readAwsNxPluginConfig(tree)?.tags ?? [],\n ...esmVars(tree),\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common', 'readme'),\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR),\n {\n fullyQualifiedName: `${npmScopePrefix}${SHARED_CONSTRUCTS_NAME}`,\n name: SHARED_CONSTRUCTS_NAME,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n },\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n addDependenciesToPackageJson(\n tree,\n withVersions(\n declaration as DependencyDeclaration<\n typeof SHARED_CONSTRUCTS_DEPENDENCIES\n >,\n ['constructs', 'aws-cdk-lib'],\n ),\n withVersions(\n declaration as DependencyDeclaration<\n typeof SHARED_CONSTRUCTS_DEPENDENCIES\n >,\n ['@types/node'],\n ),\n joinPathFragments(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR),\n 'package.json',\n ),\n );\n await addCdkTestGlobalSetup(\n tree,\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR),\n );\n await formatFilesInSubtree(tree);\n }\n }\n\n // Handle Terraform provider\n if (iac === 'terraform') {\n const terraformLibPath = joinPathFragments(\n PACKAGES_DIR,\n SHARED_TERRAFORM_DIR,\n );\n if (!tree.exists(joinPathFragments(terraformLibPath, 'project.json'))) {\n await terraformProjectGenerator(tree, {\n name: SHARED_TERRAFORM_NAME,\n directory: joinPathFragments(PACKAGES_DIR, 'common'),\n type: 'library',\n });\n\n // `build` is a no-op orchestration target that produces no files of its\n // own. Terraform writes runtime-config entries into\n // `dist/{projectRoot}/runtime-config` at apply time, and other terraform\n // projects contribute their own entries to the same directory. Without\n // explicit outputs, Nx infers `dist/{projectRoot}` as this target's\n // cached output and, on a cache hit, restores the cached copy over the\n // freshly-applied config — wiping the very values consumers read. Declare\n // no outputs so Nx never treats runtime config as a cacheable artifact.\n updateJson(\n tree,\n joinPathFragments(PACKAGES_DIR, SHARED_TERRAFORM_DIR, 'project.json'),\n (projectConfig: ProjectConfiguration) => {\n projectConfig.targets ??= {};\n projectConfig.targets.build ??= {};\n projectConfig.targets.build.outputs = [];\n return projectConfig;\n },\n );\n\n tree.delete(joinPathFragments(terraformLibPath, 'src', 'main.tf'));\n\n // Create the metrics.tf file with empty initial values\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'terraform'),\n terraformLibPath,\n { ...terraformProviderVersions() },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n await formatFilesInSubtree(tree);\n }\n }\n}\n\nconst updateGitignore = (tree: Tree) => {\n const gitignore = tree.exists('.gitignore')\n ? tree.read('.gitignore', 'utf-8')\n : '';\n const regex = /runtime-config.json/gm;\n const hasRuntimeConfig = regex.test(gitignore ?? '');\n if (hasRuntimeConfig) {\n return;\n }\n tree.write('.gitignore', `${gitignore}\\n\\nruntime-config.json`);\n};\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateJson","terraformProjectGenerator","tsProjectGenerator","addCdkTestGlobalSetup","readAwsNxPluginConfig","addDependenciesToPackageJson","formatFilesInSubtree","esmVars","getNpmScopePrefix","getPackageManagerDisplayCommands","PACKAGES_DIR","SHARED_CONSTRUCTS_DEPENDENCIES","SHARED_CONSTRUCTS_DIR","SHARED_CONSTRUCTS_NAME","SHARED_TERRAFORM_DIR","SHARED_TERRAFORM_NAME","terraformProviderVersions","withVersions","sharedConstructsGenerator","tree","options","declaration","iac","npmScopePrefix","updateGitignore","exists","name","directory","subDirectory","delete","dirname","scopeAlias","tags","overwriteStrategy","KeepExisting","fullyQualifiedName","pkgMgrCmd","exec","Overwrite","terraformLibPath","type","projectConfig","targets","build","outputs","gitignore","read","regex","hasRuntimeConfig","test","write"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/shared-constructs.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type ProjectConfiguration,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport terraformProjectGenerator from '../terraform/project/generator.js';\nimport tsProjectGenerator from '../ts/lib/generator.js';\nimport { addCdkTestGlobalSetup } from './cdk-test-setup.js';\nimport { readAwsNxPluginConfig } from './config/utils.js';\nimport type {\n DependencyDeclaration,\n MustDeclare,\n} from './declared-dependencies.js';\nimport { addDependenciesToPackageJson } from './dependencies.js';\nimport { formatFilesInSubtree } from './format.js';\nimport { updateGitIgnore } from './git.js';\nimport type { Iac } from './iac.js';\nimport { esmVars } from './module-format.js';\nimport { getNpmScopePrefix } from './npm-scope.js';\nimport { getPackageManagerDisplayCommands } from './pkg-manager.js';\nimport {\n PACKAGES_DIR,\n SHARED_CONSTRUCTS_DEPENDENCIES,\n SHARED_CONSTRUCTS_DIR,\n SHARED_CONSTRUCTS_NAME,\n SHARED_TERRAFORM_DIR,\n SHARED_TERRAFORM_NAME,\n} from './shared-constructs-constants.js';\n\nexport { SHARED_CONSTRUCTS_DEPENDENCIES };\n\nimport { terraformProviderVersions, withVersions } from './versions.js';\n\nexport interface SharedConstructsGeneratorOptions {\n iac: Iac;\n}\n\nexport async function sharedConstructsGenerator<\n const D extends DependencyDeclaration,\n>(\n tree: Tree,\n options: SharedConstructsGeneratorOptions,\n declaration: D & MustDeclare<typeof SHARED_CONSTRUCTS_DEPENDENCIES, D>,\n) {\n const { iac } = options;\n const npmScopePrefix = getNpmScopePrefix(tree);\n ignoreRuntimeConfig(tree);\n\n if (iac === 'cdk') {\n if (\n !tree.exists(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'project.json'),\n )\n ) {\n await tsProjectGenerator(tree, {\n name: SHARED_CONSTRUCTS_NAME,\n directory: PACKAGES_DIR,\n subDirectory: SHARED_CONSTRUCTS_DIR,\n });\n tree.delete(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src'),\n );\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n 'files',\n SHARED_CONSTRUCTS_DIR,\n 'src',\n ),\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR, 'src'),\n {\n npmScopePrefix,\n scopeAlias: npmScopePrefix,\n tags: readAwsNxPluginConfig(tree)?.tags ?? [],\n ...esmVars(tree),\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common', 'readme'),\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR),\n {\n fullyQualifiedName: `${npmScopePrefix}${SHARED_CONSTRUCTS_NAME}`,\n name: SHARED_CONSTRUCTS_NAME,\n pkgMgrCmd: getPackageManagerDisplayCommands().exec,\n },\n {\n overwriteStrategy: OverwriteStrategy.Overwrite,\n },\n );\n addDependenciesToPackageJson(\n tree,\n withVersions(\n declaration as DependencyDeclaration<\n typeof SHARED_CONSTRUCTS_DEPENDENCIES\n >,\n ['constructs', 'aws-cdk-lib'],\n ),\n withVersions(\n declaration as DependencyDeclaration<\n typeof SHARED_CONSTRUCTS_DEPENDENCIES\n >,\n ['@types/node'],\n ),\n joinPathFragments(\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR),\n 'package.json',\n ),\n );\n await addCdkTestGlobalSetup(\n tree,\n joinPathFragments(PACKAGES_DIR, SHARED_CONSTRUCTS_DIR),\n );\n await formatFilesInSubtree(tree);\n }\n }\n\n // Handle Terraform provider\n if (iac === 'terraform') {\n const terraformLibPath = joinPathFragments(\n PACKAGES_DIR,\n SHARED_TERRAFORM_DIR,\n );\n if (!tree.exists(joinPathFragments(terraformLibPath, 'project.json'))) {\n await terraformProjectGenerator(tree, {\n name: SHARED_TERRAFORM_NAME,\n directory: joinPathFragments(PACKAGES_DIR, 'common'),\n type: 'library',\n });\n\n // `build` is a no-op orchestration target that produces no files of its\n // own. Terraform writes runtime-config entries into\n // `dist/{projectRoot}/runtime-config` at apply time, and other terraform\n // projects contribute their own entries to the same directory. Without\n // explicit outputs, Nx infers `dist/{projectRoot}` as this target's\n // cached output and, on a cache hit, restores the cached copy over the\n // freshly-applied config — wiping the very values consumers read. Declare\n // no outputs so Nx never treats runtime config as a cacheable artifact.\n updateJson(\n tree,\n joinPathFragments(PACKAGES_DIR, SHARED_TERRAFORM_DIR, 'project.json'),\n (projectConfig: ProjectConfiguration) => {\n projectConfig.targets ??= {};\n projectConfig.targets.build ??= {};\n projectConfig.targets.build.outputs = [];\n return projectConfig;\n },\n );\n\n tree.delete(joinPathFragments(terraformLibPath, 'src', 'main.tf'));\n\n // Create the metrics.tf file with empty initial values\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'terraform'),\n terraformLibPath,\n { ...terraformProviderVersions() },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n await formatFilesInSubtree(tree);\n }\n }\n}\n\n/**\n * Ignore the root `runtime-config.json`, unless an existing entry already\n * covers it.\n */\nexport const ignoreRuntimeConfig = (tree: Tree) => {\n updateGitIgnore(tree, '.', (patterns) =>\n patterns.some((p) => p.includes('runtime-config.json'))\n ? patterns\n : [...patterns, 'runtime-config.json'],\n );\n};\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateJson","terraformProjectGenerator","tsProjectGenerator","addCdkTestGlobalSetup","readAwsNxPluginConfig","addDependenciesToPackageJson","formatFilesInSubtree","updateGitIgnore","esmVars","getNpmScopePrefix","getPackageManagerDisplayCommands","PACKAGES_DIR","SHARED_CONSTRUCTS_DEPENDENCIES","SHARED_CONSTRUCTS_DIR","SHARED_CONSTRUCTS_NAME","SHARED_TERRAFORM_DIR","SHARED_TERRAFORM_NAME","terraformProviderVersions","withVersions","sharedConstructsGenerator","tree","options","declaration","iac","npmScopePrefix","ignoreRuntimeConfig","exists","name","directory","subDirectory","delete","dirname","scopeAlias","tags","overwriteStrategy","KeepExisting","fullyQualifiedName","pkgMgrCmd","exec","Overwrite","terraformLibPath","type","projectConfig","targets","build","outputs","patterns","some","p","includes"],"mappings":"AAAA;;;CAGC,GACD,SACEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAGjBC,UAAU,QACL,aAAa;AACpB,OAAOC,+BAA+B,oCAAoC;AAC1E,OAAOC,wBAAwB,yBAAyB;AACxD,SAASC,qBAAqB,QAAQ,sBAAsB;AAC5D,SAASC,qBAAqB,QAAQ,oBAAoB;AAK1D,SAASC,4BAA4B,QAAQ,oBAAoB;AACjE,SAASC,oBAAoB,QAAQ,cAAc;AACnD,SAASC,eAAe,QAAQ,WAAW;AAE3C,SAASC,OAAO,QAAQ,qBAAqB;AAC7C,SAASC,iBAAiB,QAAQ,iBAAiB;AACnD,SAASC,gCAAgC,QAAQ,mBAAmB;AACpE,SACEC,YAAY,EACZC,8BAA8B,EAC9BC,qBAAqB,EACrBC,sBAAsB,EACtBC,oBAAoB,EACpBC,qBAAqB,QAChB,mCAAmC;AAE1C,SAASJ,8BAA8B,GAAG;AAE1C,SAASK,yBAAyB,EAAEC,YAAY,QAAQ,gBAAgB;AAMxE,OAAO,eAAeC,0BAGpBC,IAAU,EACVC,OAAyC,EACzCC,WAAsE;IAEtE,MAAM,EAAEC,GAAG,EAAE,GAAGF;IAChB,MAAMG,iBAAiBf,kBAAkBW;IACzCK,oBAAoBL;IAEpB,IAAIG,QAAQ,OAAO;QACjB,IACE,CAACH,KAAKM,MAAM,CACV5B,kBAAkBa,cAAcE,uBAAuB,kBAEzD;YACA,MAAMX,mBAAmBkB,MAAM;gBAC7BO,MAAMb;gBACNc,WAAWjB;gBACXkB,cAAchB;YAChB;YACAO,KAAKU,MAAM,CACThC,kBAAkBa,cAAcE,uBAAuB;YAEzDhB,cACEuB,MACAtB,kBACE,YAAYiC,OAAO,EACnB,SACAlB,uBACA,QAEFf,kBAAkBa,cAAcE,uBAAuB,QACvD;gBACEW;gBACAQ,YAAYR;gBACZS,MAAM7B,sBAAsBgB,OAAOa,QAAQ,EAAE;gBAC7C,GAAGzB,QAAQY,KAAK;YAClB,GACA;gBACEc,mBAAmBnC,kBAAkBoC,YAAY;YACnD;YAEFtC,cACEuB,MACAtB,kBAAkB,YAAYiC,OAAO,EAAE,SAAS,UAAU,WAC1DjC,kBAAkBa,cAAcE,wBAChC;gBACEuB,oBAAoB,GAAGZ,iBAAiBV,wBAAwB;gBAChEa,MAAMb;gBACNuB,WAAW3B,mCAAmC4B,IAAI;YACpD,GACA;gBACEJ,mBAAmBnC,kBAAkBwC,SAAS;YAChD;YAEFlC,6BACEe,MACAF,aACEI,aAGA;gBAAC;gBAAc;aAAc,GAE/BJ,aACEI,aAGA;gBAAC;aAAc,GAEjBxB,kBACEA,kBAAkBa,cAAcE,wBAChC;YAGJ,MAAMV,sBACJiB,MACAtB,kBAAkBa,cAAcE;YAElC,MAAMP,qBAAqBc;QAC7B;IACF;IAEA,4BAA4B;IAC5B,IAAIG,QAAQ,aAAa;QACvB,MAAMiB,mBAAmB1C,kBACvBa,cACAI;QAEF,IAAI,CAACK,KAAKM,MAAM,CAAC5B,kBAAkB0C,kBAAkB,kBAAkB;YACrE,MAAMvC,0BAA0BmB,MAAM;gBACpCO,MAAMX;gBACNY,WAAW9B,kBAAkBa,cAAc;gBAC3C8B,MAAM;YACR;YAEA,wEAAwE;YACxE,oDAAoD;YACpD,yEAAyE;YACzE,uEAAuE;YACvE,oEAAoE;YACpE,uEAAuE;YACvE,0EAA0E;YAC1E,wEAAwE;YACxEzC,WACEoB,MACAtB,kBAAkBa,cAAcI,sBAAsB,iBACtD,CAAC2B;gBACCA,cAAcC,OAAO,KAAK,CAAC;gBAC3BD,cAAcC,OAAO,CAACC,KAAK,KAAK,CAAC;gBACjCF,cAAcC,OAAO,CAACC,KAAK,CAACC,OAAO,GAAG,EAAE;gBACxC,OAAOH;YACT;YAGFtB,KAAKU,MAAM,CAAChC,kBAAkB0C,kBAAkB,OAAO;YAEvD,uDAAuD;YACvD3C,cACEuB,MACAtB,kBAAkB,YAAYiC,OAAO,EAAE,SAAS,cAChDS,kBACA;gBAAE,GAAGvB,2BAA2B;YAAC,GACjC;gBACEiB,mBAAmBnC,kBAAkBoC,YAAY;YACnD;YAGF,MAAM7B,qBAAqBc;QAC7B;IACF;AACF;AAEA;;;CAGC,GACD,OAAO,MAAMK,sBAAsB,CAACL;IAClCb,gBAAgBa,MAAM,KAAK,CAAC0B,WAC1BA,SAASC,IAAI,CAAC,CAACC,IAAMA,EAAEC,QAAQ,CAAC,0BAC5BH,WACA;eAAIA;YAAU;SAAsB;AAE5C,EAAE"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import type { IPyDepVersion, ITerraformProviderVersion } from '../versions.js';
6
+ import type { IVersionedDep, LockstepNote } from './lockstep.js';
7
+ /**
8
+ * A pin the version update must not move, why, and what lets it move again.
9
+ *
10
+ * The npm equivalent is a `reject` entry in `.ncurc.cjs`. pip-check-updates
11
+ * has no exclude option and Terraform providers are resolved from the
12
+ * registry, so Python and Terraform pins are held here instead.
13
+ */
14
+ export interface VersionHold<Name extends IVersionedDep = IVersionedDep> {
15
+ name: Name;
16
+ reason: string;
17
+ liftWhen: string;
18
+ }
19
+ /** Python pins the version update keeps at their current version. */
20
+ export declare const PY_VERSION_HOLDS: readonly VersionHold<IPyDepVersion>[];
21
+ /** Terraform providers the version update keeps at their current version. */
22
+ export declare const TERRAFORM_VERSION_HOLDS: readonly VersionHold<ITerraformProviderVersion>[];
23
+ /**
24
+ * Put each held pin the run proposed moving back to its current version.
25
+ *
26
+ * Mutates `proposed`, which holds versions not yet written anywhere, and
27
+ * returns a note for each pin it held so the reason reaches the update's PR.
28
+ */
29
+ export declare const holdPinnedVersions: <Name extends IVersionedDep>(holds: readonly VersionHold<Name>[], current: Readonly<Partial<Record<Name, string>>>, proposed: Partial<Record<Name, string>>) => LockstepNote[];
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */ /** Python pins the version update keeps at their current version. */ export const PY_VERSION_HOLDS = [
5
+ {
6
+ name: 'ty',
7
+ reason: 'ty is 0.x and its releases add diagnostics that fail the vended Python templates',
8
+ liftWhen: 'a newer ty has been checked against all vended Python templates (run the py-client, py#dynamodb and other Python-typecheck specs with it)'
9
+ }
10
+ ];
11
+ /** Terraform providers the version update keeps at their current version. */ export const TERRAFORM_VERSION_HOLDS = [
12
+ {
13
+ name: 'aws',
14
+ reason: 'hashicorp/aws 6.69.0 moved to aws-sdk-go-base/v2 v2.0.0-beta.75, whose bufio.Scanner response logger fails reading aws_cognito_managed_login_branding with "token too long", so the vended Cognito user identity fails apply (terraform-provider-aws#50481)',
15
+ liftWhen: "a hashicorp/aws release includes aws-sdk-go-base#1539 (fixes terraform-provider-aws#50481); check the provider's go.mod for aws-sdk-go-base/v2 > beta.75 or the changelog"
16
+ }
17
+ ];
18
+ /**
19
+ * Put each held pin the run proposed moving back to its current version.
20
+ *
21
+ * Mutates `proposed`, which holds versions not yet written anywhere, and
22
+ * returns a note for each pin it held so the reason reaches the update's PR.
23
+ */ export const holdPinnedVersions = (holds, current, proposed)=>{
24
+ const notes = [];
25
+ for (const { name, reason, liftWhen } of holds){
26
+ const held = current[name];
27
+ const available = proposed[name];
28
+ if (held === undefined || available === undefined || available === held) {
29
+ continue;
30
+ }
31
+ proposed[name] = held;
32
+ notes.push({
33
+ name,
34
+ note: `${name} held at ${held} (${available} available): ${reason}. Lift when ${liftWhen}`
35
+ });
36
+ }
37
+ return notes;
38
+ };
39
+
40
+ //# sourceMappingURL=hold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/utils/version-lockstep/hold.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type { IPyDepVersion, ITerraformProviderVersion } from '../versions.js';\nimport type { IVersionedDep, LockstepNote } from './lockstep.js';\n\n/**\n * A pin the version update must not move, why, and what lets it move again.\n *\n * The npm equivalent is a `reject` entry in `.ncurc.cjs`. pip-check-updates\n * has no exclude option and Terraform providers are resolved from the\n * registry, so Python and Terraform pins are held here instead.\n */\nexport interface VersionHold<Name extends IVersionedDep = IVersionedDep> {\n name: Name;\n reason: string;\n liftWhen: string;\n}\n\n/** Python pins the version update keeps at their current version. */\nexport const PY_VERSION_HOLDS: readonly VersionHold<IPyDepVersion>[] = [\n {\n name: 'ty',\n reason:\n 'ty is 0.x and its releases add diagnostics that fail the vended Python templates',\n liftWhen:\n 'a newer ty has been checked against all vended Python templates (run the py-client, py#dynamodb and other Python-typecheck specs with it)',\n },\n];\n\n/** Terraform providers the version update keeps at their current version. */\nexport const TERRAFORM_VERSION_HOLDS: readonly VersionHold<ITerraformProviderVersion>[] =\n [\n {\n name: 'aws',\n reason:\n 'hashicorp/aws 6.69.0 moved to aws-sdk-go-base/v2 v2.0.0-beta.75, whose bufio.Scanner response logger fails reading aws_cognito_managed_login_branding with \"token too long\", so the vended Cognito user identity fails apply (terraform-provider-aws#50481)',\n liftWhen:\n \"a hashicorp/aws release includes aws-sdk-go-base#1539 (fixes terraform-provider-aws#50481); check the provider's go.mod for aws-sdk-go-base/v2 > beta.75 or the changelog\",\n },\n ];\n\n/**\n * Put each held pin the run proposed moving back to its current version.\n *\n * Mutates `proposed`, which holds versions not yet written anywhere, and\n * returns a note for each pin it held so the reason reaches the update's PR.\n */\nexport const holdPinnedVersions = <Name extends IVersionedDep>(\n holds: readonly VersionHold<Name>[],\n current: Readonly<Partial<Record<Name, string>>>,\n proposed: Partial<Record<Name, string>>,\n): LockstepNote[] => {\n const notes: LockstepNote[] = [];\n\n for (const { name, reason, liftWhen } of holds) {\n const held = current[name];\n const available = proposed[name];\n if (held === undefined || available === undefined || available === held) {\n continue;\n }\n proposed[name] = held;\n notes.push({\n name,\n note: `${name} held at ${held} (${available} available): ${reason}. Lift when ${liftWhen}`,\n });\n }\n\n return notes;\n};\n"],"names":["PY_VERSION_HOLDS","name","reason","liftWhen","TERRAFORM_VERSION_HOLDS","holdPinnedVersions","holds","current","proposed","notes","held","available","undefined","push","note"],"mappings":"AAAA;;;CAGC,GAiBD,mEAAmE,GACnE,OAAO,MAAMA,mBAA0D;IACrE;QACEC,MAAM;QACNC,QACE;QACFC,UACE;IACJ;CACD,CAAC;AAEF,2EAA2E,GAC3E,OAAO,MAAMC,0BACX;IACE;QACEH,MAAM;QACNC,QACE;QACFC,UACE;IACJ;CACD,CAAC;AAEJ;;;;;CAKC,GACD,OAAO,MAAME,qBAAqB,CAChCC,OACAC,SACAC;IAEA,MAAMC,QAAwB,EAAE;IAEhC,KAAK,MAAM,EAAER,IAAI,EAAEC,MAAM,EAAEC,QAAQ,EAAE,IAAIG,MAAO;QAC9C,MAAMI,OAAOH,OAAO,CAACN,KAAK;QAC1B,MAAMU,YAAYH,QAAQ,CAACP,KAAK;QAChC,IAAIS,SAASE,aAAaD,cAAcC,aAAaD,cAAcD,MAAM;YACvE;QACF;QACAF,QAAQ,CAACP,KAAK,GAAGS;QACjBD,MAAMI,IAAI,CAAC;YACTZ;YACAa,MAAM,GAAGb,KAAK,SAAS,EAAES,KAAK,EAAE,EAAEC,UAAU,aAAa,EAAET,OAAO,YAAY,EAAEC,UAAU;QAC5F;IACF;IAEA,OAAOM;AACT,EAAE"}
@@ -1,6 +1,6 @@
1
- import type { IJavaVersion, IMiseVersion, IPyDepVersion, ITsDepVersion } from '../versions.js';
1
+ import type { IJavaVersion, IMiseVersion, IPyDepVersion, ITerraformProviderVersion, ITsDepVersion } from '../versions.js';
2
2
  /** Any dependency a version table pins. */
3
- export type IVersionedDep = ITsDepVersion | IPyDepVersion | IJavaVersion | IMiseVersion;
3
+ export type IVersionedDep = ITsDepVersion | IPyDepVersion | IJavaVersion | IMiseVersion | ITerraformProviderVersion;
4
4
  /** A pin the run deliberately did not take, and why. */
5
5
  export interface LockstepNote {
6
6
  name: IVersionedDep;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/utils/version-lockstep/lockstep.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { coerce, compare } from 'semver';\nimport type {\n IJavaVersion,\n IMiseVersion,\n IPyDepVersion,\n ITsDepVersion,\n} from '../versions.js';\n\n/** Any dependency a version table pins. */\nexport type IVersionedDep =\n | ITsDepVersion\n | IPyDepVersion\n | IJavaVersion\n | IMiseVersion;\n\n/** A pin the run deliberately did not take, and why. */\nexport interface LockstepNote {\n name: IVersionedDep;\n note: string;\n}\n\n/** Proposed versions from a run, keyed by dependency name. */\nexport type ProposedVersions = Partial<Record<IVersionedDep, string>>;\n\n/**\n * Dependencies that must move as a unit. At least two, since one pin has nothing\n * to stay in step with.\n */\nexport type LockstepGroup = readonly [\n IVersionedDep,\n IVersionedDep,\n ...IVersionedDep[],\n];\n\n/** The bare version in a pin, whatever range syntax it was written with. */\nconst bare = (version: string): string | undefined =>\n coerce(version, { includePrerelease: true })?.version;\n\n/** The range prefix a pin was written with, so it is preserved. */\nconst prefixOf = (version: string, bareVersion: string): string =>\n version.slice(0, version.indexOf(bareVersion));\n\n/**\n * Hold every member of each group at the lowest version proposed across it, so a\n * group only moves once all of its members can.\n *\n * Mutates the tables, which hold proposed versions not yet written anywhere.\n * Groups the run proposed fewer than two comparable versions for are left alone.\n */\nexport const holdGroupsInLockstep = (\n groups: readonly LockstepGroup[],\n ...tables: readonly ProposedVersions[]\n): LockstepNote[] => {\n const notes: LockstepNote[] = [];\n\n for (const group of groups) {\n const members = group.flatMap((name) => {\n const table = tables.find((candidate) => candidate[name] !== undefined);\n const proposed = table?.[name];\n const version = proposed && bare(proposed);\n return table && proposed && version\n ? [{ name, table, proposed, version }]\n : [];\n });\n if (members.length < 2) continue;\n\n const lowest = members\n .map(({ version }) => version)\n .reduce((min, version) => (compare(version, min) < 0 ? version : min));\n\n for (const { name, table, proposed, version } of members) {\n if (version === lowest) continue;\n const held = `${prefixOf(proposed, version)}${lowest}`;\n table[name] = held;\n notes.push({\n name,\n note: `${name} held at ${held} (${proposed} available): must move in step with ${group\n .filter((other) => other !== name)\n .join(', ')}`,\n });\n }\n }\n\n return notes;\n};\n"],"names":["coerce","compare","bare","version","includePrerelease","prefixOf","bareVersion","slice","indexOf","holdGroupsInLockstep","groups","tables","notes","group","members","flatMap","name","table","find","candidate","undefined","proposed","length","lowest","map","reduce","min","held","push","note","filter","other","join"],"mappings":"AAAA;;;CAGC,GACD,SAASA,MAAM,EAAEC,OAAO,QAAQ,SAAS;AAkCzC,0EAA0E,GAC1E,MAAMC,OAAO,CAACC,UACZH,OAAOG,SAAS;QAAEC,mBAAmB;IAAK,IAAID;AAEhD,iEAAiE,GACjE,MAAME,WAAW,CAACF,SAAiBG,cACjCH,QAAQI,KAAK,CAAC,GAAGJ,QAAQK,OAAO,CAACF;AAEnC;;;;;;CAMC,GACD,OAAO,MAAMG,uBAAuB,CAClCC,QACA,GAAGC;IAEH,MAAMC,QAAwB,EAAE;IAEhC,KAAK,MAAMC,SAASH,OAAQ;QAC1B,MAAMI,UAAUD,MAAME,OAAO,CAAC,CAACC;YAC7B,MAAMC,QAAQN,OAAOO,IAAI,CAAC,CAACC,YAAcA,SAAS,CAACH,KAAK,KAAKI;YAC7D,MAAMC,WAAWJ,OAAO,CAACD,KAAK;YAC9B,MAAMb,UAAUkB,YAAYnB,KAAKmB;YACjC,OAAOJ,SAASI,YAAYlB,UACxB;gBAAC;oBAAEa;oBAAMC;oBAAOI;oBAAUlB;gBAAQ;aAAE,GACpC,EAAE;QACR;QACA,IAAIW,QAAQQ,MAAM,GAAG,GAAG;QAExB,MAAMC,SAAST,QACZU,GAAG,CAAC,CAAC,EAAErB,OAAO,EAAE,GAAKA,SACrBsB,MAAM,CAAC,CAACC,KAAKvB,UAAaF,QAAQE,SAASuB,OAAO,IAAIvB,UAAUuB;QAEnE,KAAK,MAAM,EAAEV,IAAI,EAAEC,KAAK,EAAEI,QAAQ,EAAElB,OAAO,EAAE,IAAIW,QAAS;YACxD,IAAIX,YAAYoB,QAAQ;YACxB,MAAMI,OAAO,GAAGtB,SAASgB,UAAUlB,WAAWoB,QAAQ;YACtDN,KAAK,CAACD,KAAK,GAAGW;YACdf,MAAMgB,IAAI,CAAC;gBACTZ;gBACAa,MAAM,GAAGb,KAAK,SAAS,EAAEW,KAAK,EAAE,EAAEN,SAAS,oCAAoC,EAAER,MAC9EiB,MAAM,CAAC,CAACC,QAAUA,UAAUf,MAC5BgB,IAAI,CAAC,OAAO;YACjB;QACF;IACF;IAEA,OAAOpB;AACT,EAAE"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/utils/version-lockstep/lockstep.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { coerce, compare } from 'semver';\nimport type {\n IJavaVersion,\n IMiseVersion,\n IPyDepVersion,\n ITerraformProviderVersion,\n ITsDepVersion,\n} from '../versions.js';\n\n/** Any dependency a version table pins. */\nexport type IVersionedDep =\n | ITsDepVersion\n | IPyDepVersion\n | IJavaVersion\n | IMiseVersion\n | ITerraformProviderVersion;\n\n/** A pin the run deliberately did not take, and why. */\nexport interface LockstepNote {\n name: IVersionedDep;\n note: string;\n}\n\n/** Proposed versions from a run, keyed by dependency name. */\nexport type ProposedVersions = Partial<Record<IVersionedDep, string>>;\n\n/**\n * Dependencies that must move as a unit. At least two, since one pin has nothing\n * to stay in step with.\n */\nexport type LockstepGroup = readonly [\n IVersionedDep,\n IVersionedDep,\n ...IVersionedDep[],\n];\n\n/** The bare version in a pin, whatever range syntax it was written with. */\nconst bare = (version: string): string | undefined =>\n coerce(version, { includePrerelease: true })?.version;\n\n/** The range prefix a pin was written with, so it is preserved. */\nconst prefixOf = (version: string, bareVersion: string): string =>\n version.slice(0, version.indexOf(bareVersion));\n\n/**\n * Hold every member of each group at the lowest version proposed across it, so a\n * group only moves once all of its members can.\n *\n * Mutates the tables, which hold proposed versions not yet written anywhere.\n * Groups the run proposed fewer than two comparable versions for are left alone.\n */\nexport const holdGroupsInLockstep = (\n groups: readonly LockstepGroup[],\n ...tables: readonly ProposedVersions[]\n): LockstepNote[] => {\n const notes: LockstepNote[] = [];\n\n for (const group of groups) {\n const members = group.flatMap((name) => {\n const table = tables.find((candidate) => candidate[name] !== undefined);\n const proposed = table?.[name];\n const version = proposed && bare(proposed);\n return table && proposed && version\n ? [{ name, table, proposed, version }]\n : [];\n });\n if (members.length < 2) continue;\n\n const lowest = members\n .map(({ version }) => version)\n .reduce((min, version) => (compare(version, min) < 0 ? version : min));\n\n for (const { name, table, proposed, version } of members) {\n if (version === lowest) continue;\n const held = `${prefixOf(proposed, version)}${lowest}`;\n table[name] = held;\n notes.push({\n name,\n note: `${name} held at ${held} (${proposed} available): must move in step with ${group\n .filter((other) => other !== name)\n .join(', ')}`,\n });\n }\n }\n\n return notes;\n};\n"],"names":["coerce","compare","bare","version","includePrerelease","prefixOf","bareVersion","slice","indexOf","holdGroupsInLockstep","groups","tables","notes","group","members","flatMap","name","table","find","candidate","undefined","proposed","length","lowest","map","reduce","min","held","push","note","filter","other","join"],"mappings":"AAAA;;;CAGC,GACD,SAASA,MAAM,EAAEC,OAAO,QAAQ,SAAS;AAoCzC,0EAA0E,GAC1E,MAAMC,OAAO,CAACC,UACZH,OAAOG,SAAS;QAAEC,mBAAmB;IAAK,IAAID;AAEhD,iEAAiE,GACjE,MAAME,WAAW,CAACF,SAAiBG,cACjCH,QAAQI,KAAK,CAAC,GAAGJ,QAAQK,OAAO,CAACF;AAEnC;;;;;;CAMC,GACD,OAAO,MAAMG,uBAAuB,CAClCC,QACA,GAAGC;IAEH,MAAMC,QAAwB,EAAE;IAEhC,KAAK,MAAMC,SAASH,OAAQ;QAC1B,MAAMI,UAAUD,MAAME,OAAO,CAAC,CAACC;YAC7B,MAAMC,QAAQN,OAAOO,IAAI,CAAC,CAACC,YAAcA,SAAS,CAACH,KAAK,KAAKI;YAC7D,MAAMC,WAAWJ,OAAO,CAACD,KAAK;YAC9B,MAAMb,UAAUkB,YAAYnB,KAAKmB;YACjC,OAAOJ,SAASI,YAAYlB,UACxB;gBAAC;oBAAEa;oBAAMC;oBAAOI;oBAAUlB;gBAAQ;aAAE,GACpC,EAAE;QACR;QACA,IAAIW,QAAQQ,MAAM,GAAG,GAAG;QAExB,MAAMC,SAAST,QACZU,GAAG,CAAC,CAAC,EAAErB,OAAO,EAAE,GAAKA,SACrBsB,MAAM,CAAC,CAACC,KAAKvB,UAAaF,QAAQE,SAASuB,OAAO,IAAIvB,UAAUuB;QAEnE,KAAK,MAAM,EAAEV,IAAI,EAAEC,KAAK,EAAEI,QAAQ,EAAElB,OAAO,EAAE,IAAIW,QAAS;YACxD,IAAIX,YAAYoB,QAAQ;YACxB,MAAMI,OAAO,GAAGtB,SAASgB,UAAUlB,WAAWoB,QAAQ;YACtDN,KAAK,CAACD,KAAK,GAAGW;YACdf,MAAMgB,IAAI,CAAC;gBACTZ;gBACAa,MAAM,GAAGb,KAAK,SAAS,EAAEW,KAAK,EAAE,EAAEN,SAAS,oCAAoC,EAAER,MAC9EiB,MAAM,CAAC,CAACC,QAAUA,UAAUf,MAC5BgB,IAAI,CAAC,OAAO;YACjB;QACF;IACF;IAEA,OAAOpB;AACT,EAAE"}
@@ -9,46 +9,47 @@ import { type DeclaredPy, type DeclaredTs, type DependencyDeclaration } from './
9
9
  export declare const TS_VERSIONS: {
10
10
  readonly '@a2a-js/sdk': "0.3.14";
11
11
  readonly '@aws/aws-distro-opentelemetry-node-autoinstrumentation': "0.13.0";
12
- readonly '@opentelemetry/propagator-jaeger': "2.11.0";
12
+ readonly '@opentelemetry/propagator-jaeger': "2.12.0";
13
13
  readonly minimatch: "10.2.6";
14
14
  readonly 'deepmerge-ts': "8.0.2";
15
- readonly mysql2: "3.24.5";
16
- readonly '@aws-sdk/client-dynamodb': "3.1146.0";
17
- readonly '@aws-sdk/client-api-gateway': "3.1146.0";
18
- readonly '@aws-sdk/client-iam': "3.1146.0";
19
- readonly '@aws-sdk/client-bedrock-agentcore': "3.1146.0";
20
- readonly '@aws-sdk/client-bedrock-runtime': "3.1146.0";
21
- readonly '@aws-sdk/client-s3': "3.1146.0";
22
- readonly '@aws-sdk/client-sts': "3.1146.0";
23
- readonly '@aws-sdk/client-cognito-identity-provider': "3.1146.0";
24
- readonly '@aws-sdk/credential-providers': "3.1146.0";
25
- readonly '@aws-sdk/credential-provider-cognito-identity': "3.972.71";
26
- readonly '@aws-sdk/client-secrets-manager': "3.1146.0";
27
- readonly '@aws-sdk/rds-signer': "3.1146.0";
28
- readonly '@smithy/server-apigateway': "0.3.3";
29
- readonly '@smithy/server-node': "0.3.3";
30
- readonly '@aws-lambda-powertools/logger': "2.35.0";
31
- readonly '@aws-lambda-powertools/metrics': "2.35.0";
32
- readonly '@aws-lambda-powertools/parameters': "2.35.0";
33
- readonly '@aws-lambda-powertools/tracer': "2.35.0";
34
- readonly '@aws-lambda-powertools/parser': "2.35.0";
35
- readonly '@aws-sdk/client-appconfigdata': "3.1146.0";
15
+ readonly mysql2: "3.24.6";
16
+ readonly '@aws-sdk/client-dynamodb': "3.1151.0";
17
+ readonly '@aws-sdk/client-api-gateway': "3.1151.0";
18
+ readonly '@aws-sdk/client-iam': "3.1151.0";
19
+ readonly '@aws-sdk/client-bedrock-agentcore': "3.1151.0";
20
+ readonly '@aws-sdk/client-bedrock-runtime': "3.1151.0";
21
+ readonly '@aws-sdk/client-s3': "3.1151.0";
22
+ readonly '@aws-sdk/client-sts': "3.1151.0";
23
+ readonly '@aws-sdk/client-cognito-identity-provider': "3.1151.0";
24
+ readonly '@aws-sdk/credential-providers': "3.1151.0";
25
+ readonly '@aws-sdk/credential-provider-cognito-identity': "3.972.73";
26
+ readonly '@aws-sdk/client-secrets-manager': "3.1151.0";
27
+ readonly '@aws-sdk/rds-signer': "3.1151.0";
28
+ readonly '@smithy/server-apigateway': "0.3.4";
29
+ readonly '@smithy/server-node': "0.3.4";
30
+ readonly '@aws-lambda-powertools/logger': "2.36.0";
31
+ readonly '@aws-lambda-powertools/metrics': "2.36.0";
32
+ readonly '@aws-lambda-powertools/parameters': "2.36.0";
33
+ readonly '@aws-lambda-powertools/tracer': "2.36.0";
34
+ readonly '@aws-lambda-powertools/parser': "2.36.0";
35
+ readonly '@aws-sdk/client-appconfigdata': "3.1151.0";
36
36
  readonly '@middy/core': "7.9.2";
37
37
  readonly '@nxlv/python': "23.2.1";
38
38
  readonly '@nx-extend/terraform': "10.4.1";
39
- readonly nx: "23.2.1";
40
- readonly '@nx/devkit': "23.2.1";
41
- readonly '@nx/js': "23.2.1";
42
- readonly '@nx/react': "23.2.1";
43
- readonly '@nx/vite': "23.2.1";
44
- readonly '@nx/vitest': "23.2.1";
45
- readonly '@nx/workspace': "23.2.1";
46
- readonly 'create-nx-workspace': "23.2.1";
39
+ readonly nx: "23.3.0";
40
+ readonly '@nx/devkit': "23.3.0";
41
+ readonly '@nx/js': "23.3.0";
42
+ readonly '@nx/react': "23.3.0";
43
+ readonly '@nx/vite': "23.3.0";
44
+ readonly '@nx/vitest': "23.3.0";
45
+ readonly '@nx/workspace': "23.3.0";
46
+ readonly 'create-nx-workspace': "23.3.0";
47
47
  readonly '@swc-node/register': "1.12.1";
48
- readonly '@swc/core': "1.16.13";
49
- readonly '@modelcontextprotocol/sdk': "1.32.0";
50
- readonly '@modelcontextprotocol/inspector': "2.9.0";
51
- readonly '@ag-ui/a2ui-toolkit': "0.0.4";
48
+ readonly '@swc/core': "1.16.18";
49
+ readonly '@modelcontextprotocol/sdk': "1.32.1";
50
+ readonly '@modelcontextprotocol/client': "2.3.1";
51
+ readonly '@modelcontextprotocol/inspector': "2.10.1";
52
+ readonly '@ag-ui/a2ui-toolkit': "0.0.5";
52
53
  readonly '@ag-ui/aws-strands': "0.3.0";
53
54
  readonly '@ag-ui/client': "0.0.59";
54
55
  readonly '@ag-ui/core': "0.0.59";
@@ -56,22 +57,22 @@ export declare const TS_VERSIONS: {
56
57
  readonly 'agent-chat-cli': "0.3.0";
57
58
  readonly '@copilotkit/react-core': "1.74.0";
58
59
  readonly rxjs: "7.8.2";
59
- readonly '@strands-agents/sdk': "1.19.0";
60
- readonly '@tanstack/react-router': "1.170.41";
61
- readonly '@tanstack/router-plugin': "1.168.42";
62
- readonly '@tanstack/router-generator': "1.167.40";
60
+ readonly '@strands-agents/sdk': "1.20.0";
61
+ readonly '@tanstack/react-router': "1.170.44";
62
+ readonly '@tanstack/router-plugin': "1.168.45";
63
+ readonly '@tanstack/router-generator': "1.167.43";
63
64
  readonly '@tanstack/virtual-file-routes': "1.162.0";
64
65
  readonly '@tanstack/router-utils': "1.162.3";
65
- readonly '@cloudscape-design/board-components': "3.0.236";
66
- readonly '@cloudscape-design/chat-components': "1.0.177";
67
- readonly '@cloudscape-design/components': "3.0.1391";
66
+ readonly '@cloudscape-design/board-components': "3.0.238";
67
+ readonly '@cloudscape-design/chat-components': "1.0.179";
68
+ readonly '@cloudscape-design/components': "3.0.1400";
68
69
  readonly '@cloudscape-design/global-styles': "1.0.71";
69
- readonly '@tanstack/react-query': "5.104.1";
70
- readonly '@tanstack/react-query-devtools': "5.104.1";
70
+ readonly '@tanstack/react-query': "5.104.2";
71
+ readonly '@tanstack/react-query-devtools': "5.104.2";
71
72
  readonly '@trpc/tanstack-react-query': "11.19.0";
72
73
  readonly '@trpc/client': "11.19.0";
73
74
  readonly '@trpc/server': "11.19.0";
74
- readonly '@types/node': "26.6.4";
75
+ readonly '@types/node': "26.6.5";
75
76
  readonly '@types/aws-lambda': "8.10.164";
76
77
  readonly '@types/cors': "2.8.19";
77
78
  readonly '@types/pg': "8.23.1";
@@ -84,12 +85,12 @@ export declare const TS_VERSIONS: {
84
85
  readonly '@vitest/coverage-v8': "4.1.11";
85
86
  readonly '@vitest/ui': "4.1.11";
86
87
  readonly '@astrojs/react': "6.0.6";
87
- readonly '@astrojs/starlight': "0.42.5";
88
- readonly astro: "7.3.5";
88
+ readonly '@astrojs/starlight': "0.42.6";
89
+ readonly astro: "7.3.8";
89
90
  readonly cookie: "2.0.1";
90
91
  readonly aws4fetch: "1.0.20";
91
- readonly 'aws-cdk': "2.1144.0";
92
- readonly 'aws-cdk-lib': "2.272.0";
92
+ readonly 'aws-cdk': "2.1145.0";
93
+ readonly 'aws-cdk-lib': "2.273.0";
93
94
  readonly 'aws-xray-sdk-core': "3.12.0";
94
95
  readonly constructs: "10.8.1";
95
96
  readonly cors: "2.8.6";
@@ -107,39 +108,39 @@ export declare const TS_VERSIONS: {
107
108
  readonly '@prisma/client': "7.10.0";
108
109
  readonly ejs: "6.0.1";
109
110
  readonly '@types/ejs': "3.1.5";
110
- readonly express: "5.2.1";
111
+ readonly express: "5.3.0";
111
112
  readonly 'fast-glob': "3.3.3";
112
113
  readonly husky: "9.1.7";
113
114
  readonly 'fs-extra': "11.4.1";
114
115
  readonly '@types/fs-extra': "11.0.4";
115
116
  readonly mariadb: "3.5.4";
116
- readonly mise: "2026.10.1";
117
+ readonly mise: "2026.10.9";
117
118
  readonly npm: "12.2.0";
118
- readonly 'npm-check-updates': "23.1.0";
119
+ readonly 'npm-check-updates': "23.1.1";
119
120
  readonly 'oidc-client-ts': "3.5.0";
120
121
  readonly pg: "8.23.1";
121
122
  readonly prisma: "7.10.0";
122
123
  readonly 'react-oidc-context': "3.3.1";
123
124
  readonly react: "19.3.0";
124
125
  readonly 'react-dom': "19.3.0";
125
- readonly rolldown: "1.2.12";
126
- readonly 'rolldown-plugin-dts': "0.28.6";
126
+ readonly rolldown: "1.2.13";
127
+ readonly 'rolldown-plugin-dts': "0.28.8";
127
128
  readonly shx: "0.4.0";
128
129
  readonly 'simple-git': "4.0.2";
129
130
  readonly 'source-map-support': "0.5.21";
130
- readonly 'starlight-blog': "0.30.0";
131
+ readonly 'starlight-blog': "0.30.1";
131
132
  readonly tailwindcss: "4.3.3";
132
133
  readonly '@tailwindcss/vite': "4.3.3";
133
134
  readonly tsx: "4.23.15";
134
- readonly 'lucide-react': "1.51.0";
135
- readonly 'radix-ui': "1.6.7";
136
- readonly shadcn: "4.21.1";
135
+ readonly 'lucide-react': "1.56.0";
136
+ readonly 'radix-ui': "1.8.1";
137
+ readonly shadcn: "4.21.4";
137
138
  readonly 'tw-animate-css': "1.4.0";
138
- readonly vite: "8.3.2";
139
+ readonly vite: "8.3.4";
139
140
  readonly typescript: "6.0.3";
140
141
  readonly vitest: "4.1.11";
141
142
  readonly jsdom: "29.1.1";
142
- readonly zod: "4.6.5";
143
+ readonly zod: "4.6.7";
143
144
  readonly ws: "8.22.0";
144
145
  };
145
146
  export type ITsDepVersion = keyof typeof TS_VERSIONS;
@@ -170,13 +171,13 @@ export declare const NX_PACKAGES: readonly ["nx", "@nx/devkit", "@nx/js", "@nx/r
170
171
  * The nx version the plugin is built against, and the single source of truth
171
172
  * for every place a workspace's nx is pinned.
172
173
  */
173
- export declare const NX_VERSION: "23.2.1";
174
+ export declare const NX_VERSION: "23.3.0";
174
175
  /**
175
176
  * Versions for Python dependencies added by generators
176
177
  */
177
178
  export declare const PY_VERSIONS: {
178
179
  readonly 'a2a-sdk': "==0.3.26";
179
- readonly 'ag-ui-langgraph': "==0.0.46";
180
+ readonly 'ag-ui-langgraph': "==0.0.47";
180
181
  readonly 'ag-ui-protocol': "==0.1.22";
181
182
  readonly 'ag-ui-strands': "==0.4.1";
182
183
  readonly aiosqlite: "==0.22.1";
@@ -184,33 +185,33 @@ export declare const PY_VERSIONS: {
184
185
  readonly 'aws-lambda-powertools[tracer]': "==3.35.0";
185
186
  readonly 'aws-lambda-powertools[parser]': "==3.35.0";
186
187
  readonly 'aws-opentelemetry-distro': "==0.21.0";
187
- readonly 'bedrock-agentcore': "==1.24.0";
188
- readonly boto3: "==1.43.108";
189
- readonly checkov: "==3.3.22";
190
- readonly fastapi: "==0.142.2";
191
- readonly 'fastapi[standard]': "==0.142.2";
188
+ readonly 'bedrock-agentcore': "==1.24.1";
189
+ readonly boto3: "==1.43.113";
190
+ readonly checkov: "==3.3.29";
191
+ readonly fastapi: "==0.143.1";
192
+ readonly 'fastapi[standard]': "==0.143.1";
192
193
  readonly httpx: "==0.28.1";
193
- readonly langchain: "==1.4.3";
194
- readonly 'langchain-aws': "==1.8.0";
194
+ readonly langchain: "==1.4.6";
195
+ readonly 'langchain-aws': "==1.8.2";
195
196
  readonly 'langchain-mcp-adapters': "==0.3.2";
196
- readonly langgraph: "==1.2.12";
197
- readonly 'langgraph-checkpoint-aws': "==1.2.4";
198
- readonly 'langgraph-checkpoint-sqlite': "==3.1.1";
197
+ readonly langgraph: "==1.2.15";
198
+ readonly 'langgraph-checkpoint-aws': "==1.2.5";
199
+ readonly 'langgraph-checkpoint-sqlite': "==3.1.2";
199
200
  readonly mcp: "==1.28.1";
200
201
  readonly 'pip-check-updates': "==0.29.0";
201
202
  readonly 'pip-licenses': "==5.5.5";
202
- readonly pydantic: "==2.13.5";
203
- readonly ruff: "==0.16.10";
204
- readonly 'strands-agents': "==1.57.2";
205
- readonly 'strands-agents[a2a]': "==1.57.2";
203
+ readonly pydantic: "==2.14.1";
204
+ readonly ruff: "==0.17.0";
205
+ readonly 'strands-agents': "==1.60.0";
206
+ readonly 'strands-agents[a2a]': "==1.60.0";
206
207
  readonly 'strands-agents-tools': "==0.8.9";
207
- readonly ty: "==0.0.86";
208
+ readonly ty: "==0.0.87";
208
209
  readonly pynamodb: "==6.1.0";
209
210
  readonly uvicorn: "==0.54.0";
210
- readonly sqlmodel: "==0.0.47";
211
+ readonly sqlmodel: "==0.0.48";
211
212
  readonly alembic: "==1.20.0";
212
213
  readonly aiomysql: "==0.3.2";
213
- readonly asyncpg: "==0.31.0";
214
+ readonly asyncpg: "==0.32.0";
214
215
  readonly greenlet: "==3.5.6";
215
216
  };
216
217
  export type IPyDepVersion = keyof typeof PY_VERSIONS;
@@ -363,7 +364,7 @@ export declare const terraformLambdaRuntimeVars: () => {
363
364
  * Pinned exactly (no range operator) so generated infrastructure is reproducible.
364
365
  */
365
366
  export declare const TERRAFORM_VERSIONS: {
366
- readonly aws: "6.67.0";
367
+ readonly aws: "6.68.0";
367
368
  readonly random: "3.9.1";
368
369
  readonly null: "3.3.2";
369
370
  readonly archive: "2.8.1";
@@ -377,7 +378,7 @@ export type ITerraformProviderVersion = keyof typeof TERRAFORM_VERSIONS;
377
378
  * generated `.tf` templates (e.g. `version = "<%- awsProviderVersion %>"`)
378
379
  */
379
380
  export declare const terraformProviderVersions: () => {
380
- awsProviderVersion: "6.67.0";
381
+ awsProviderVersion: "6.68.0";
381
382
  randomProviderVersion: "3.9.1";
382
383
  nullProviderVersion: "3.3.2";
383
384
  archiveProviderVersion: "2.8.1";