@fjall/generator 0.94.1 → 0.96.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 (126) hide show
  1. package/dist/.minified +1 -1
  2. package/dist/src/ast/astCodeInjection.d.ts +9 -0
  3. package/dist/src/ast/astCodeInjection.js +8 -0
  4. package/dist/src/ast/astInfrastructureParser.d.ts +1 -1
  5. package/dist/src/ast/astStatementClassifier.d.ts +2 -2
  6. package/dist/src/ast/astStatementClassifier.js +1 -1
  7. package/dist/src/ast/astStatementQueries.d.ts +4 -4
  8. package/dist/src/ast/astStatementQueries.js +3 -3
  9. package/dist/src/ast/astSurgicalModification.d.ts +14 -12
  10. package/dist/src/ast/astSurgicalModification.js +6 -13
  11. package/dist/src/ast/astTestHelpers.d.ts +7 -7
  12. package/dist/src/ast/index.d.ts +3 -2
  13. package/dist/src/ast/index.js +1 -1
  14. package/dist/src/codemod/_internal.d.ts +6 -1
  15. package/dist/src/codemod/_internal.js +1 -1
  16. package/dist/src/codemod/drift/__tests__/fixtures.d.ts +55 -0
  17. package/dist/src/codemod/drift/__tests__/fixtures.js +2 -0
  18. package/dist/src/codemod/drift/detect.d.ts +11 -0
  19. package/dist/src/codemod/drift/detect.js +1 -0
  20. package/dist/src/codemod/drift/index.d.ts +4 -0
  21. package/dist/src/codemod/drift/index.js +1 -0
  22. package/dist/src/codemod/drift/merge.d.ts +19 -0
  23. package/dist/src/codemod/drift/merge.js +1 -0
  24. package/dist/src/codemod/drift/snapshot.d.ts +4 -0
  25. package/dist/src/codemod/drift/snapshot.js +1 -0
  26. package/dist/src/codemod/drift/types.d.ts +60 -0
  27. package/dist/src/codemod/drift/types.js +1 -0
  28. package/dist/src/codemod/edits/addResource/propertyBuilder.d.ts +1 -1
  29. package/dist/src/codemod/edits/addResource/propertyBuilder.js +1 -1
  30. package/dist/src/codemod/edits/addResource.d.ts +8 -3
  31. package/dist/src/codemod/edits/addResource.js +1 -1
  32. package/dist/src/codemod/edits/controlFlowPolicy.d.ts +19 -0
  33. package/dist/src/codemod/edits/controlFlowPolicy.js +1 -0
  34. package/dist/src/codemod/edits/crossPlanConnection.d.ts +24 -0
  35. package/dist/src/codemod/edits/crossPlanConnection.js +1 -0
  36. package/dist/src/codemod/edits/driftPolicy.d.ts +7 -0
  37. package/dist/src/codemod/edits/driftPolicy.js +1 -0
  38. package/dist/src/codemod/edits/findInsertionPosition.js +1 -1
  39. package/dist/src/codemod/edits/index.d.ts +3 -0
  40. package/dist/src/codemod/edits/index.js +1 -1
  41. package/dist/src/codemod/edits/modifyResource.d.ts +9 -3
  42. package/dist/src/codemod/edits/modifyResource.js +1 -1
  43. package/dist/src/codemod/edits/removeResource.d.ts +2 -2
  44. package/dist/src/codemod/edits/removeResource.js +1 -1
  45. package/dist/src/codemod/edits/vpcPeer.d.ts +28 -0
  46. package/dist/src/codemod/edits/vpcPeer.js +1 -0
  47. package/dist/src/codemod/edits/vpcPeerAccepter.d.ts +23 -0
  48. package/dist/src/codemod/edits/vpcPeerAccepter.js +1 -0
  49. package/dist/src/codemod/index.d.ts +16 -4
  50. package/dist/src/codemod/index.js +1 -1
  51. package/dist/src/codemod/llmFallback/__tests__/fixtures.d.ts +5 -0
  52. package/dist/src/codemod/llmFallback/__tests__/fixtures.js +7 -0
  53. package/dist/src/codemod/llmFallback/apply.d.ts +10 -0
  54. package/dist/src/codemod/llmFallback/apply.js +1 -0
  55. package/dist/src/codemod/llmFallback/claudeTier.d.ts +6 -0
  56. package/dist/src/codemod/llmFallback/claudeTier.js +1 -0
  57. package/dist/src/codemod/llmFallback/egressGate.d.ts +5 -0
  58. package/dist/src/codemod/llmFallback/egressGate.js +1 -0
  59. package/dist/src/codemod/llmFallback/egressGate.types.d.ts +9 -0
  60. package/dist/src/codemod/llmFallback/egressGate.types.js +0 -0
  61. package/dist/src/codemod/llmFallback/index.d.ts +6 -0
  62. package/dist/src/codemod/llmFallback/index.js +1 -0
  63. package/dist/src/codemod/llmFallback/morphTier.d.ts +2 -0
  64. package/dist/src/codemod/llmFallback/morphTier.js +3 -0
  65. package/dist/src/codemod/llmFallback/prompt.d.ts +12 -0
  66. package/dist/src/codemod/llmFallback/prompt.js +36 -0
  67. package/dist/src/codemod/llmFallback/runFallback.d.ts +13 -0
  68. package/dist/src/codemod/llmFallback/runFallback.js +1 -0
  69. package/dist/src/codemod/llmFallback/shouldTryFallback.d.ts +13 -0
  70. package/dist/src/codemod/llmFallback/shouldTryFallback.js +1 -0
  71. package/dist/src/codemod/llmFallback/signals.d.ts +4 -0
  72. package/dist/src/codemod/llmFallback/signals.js +1 -0
  73. package/dist/src/codemod/llmFallback/telemetryEvents.d.ts +141 -0
  74. package/dist/src/codemod/llmFallback/telemetryEvents.js +1 -0
  75. package/dist/src/codemod/llmFallback/tierRunner.d.ts +7 -0
  76. package/dist/src/codemod/llmFallback/tierRunner.js +1 -0
  77. package/dist/src/codemod/llmFallback/types.d.ts +104 -0
  78. package/dist/src/codemod/llmFallback/types.js +1 -0
  79. package/dist/src/codemod/registry.d.ts +4 -1
  80. package/dist/src/codemod/registry.js +1 -1
  81. package/dist/src/codemod/semanticIndex/classifyControlFlow.d.ts +2 -0
  82. package/dist/src/codemod/semanticIndex/classifyControlFlow.js +1 -0
  83. package/dist/src/codemod/semanticIndex/findReferences.js +2 -2
  84. package/dist/src/codemod/telemetry/__tests__/errorKinds.fixture.d.ts +1 -0
  85. package/dist/src/codemod/telemetry/__tests__/errorKinds.fixture.js +1 -0
  86. package/dist/src/codemod/telemetry/errorKinds.d.ts +2 -0
  87. package/dist/src/codemod/telemetry/errorKinds.js +1 -0
  88. package/dist/src/codemod/types.d.ts +105 -1
  89. package/dist/src/codemod/types.js +1 -1
  90. package/dist/src/codemod/validationGate/gates/classify.d.ts +2 -0
  91. package/dist/src/codemod/validationGate/gates/classify.js +1 -0
  92. package/dist/src/codemod/validationGate/gates/drift.d.ts +2 -0
  93. package/dist/src/codemod/validationGate/gates/drift.js +1 -0
  94. package/dist/src/codemod/validationGate/gates/locate.d.ts +7 -0
  95. package/dist/src/codemod/validationGate/gates/locate.js +1 -0
  96. package/dist/src/codemod/validationGate/gates/parse.d.ts +2 -0
  97. package/dist/src/codemod/validationGate/gates/parse.js +1 -0
  98. package/dist/src/codemod/validationGate/gates/schema.d.ts +2 -0
  99. package/dist/src/codemod/validationGate/gates/schema.js +1 -0
  100. package/dist/src/codemod/validationGate/index.d.ts +6 -0
  101. package/dist/src/codemod/validationGate/index.js +1 -0
  102. package/dist/src/codemod/validationGate/types.d.ts +35 -0
  103. package/dist/src/codemod/validationGate/types.js +1 -0
  104. package/dist/src/dns/domainFileGenerator.js +22 -183
  105. package/dist/src/index.js +1 -21
  106. package/dist/src/planning/index.d.ts +2 -1
  107. package/dist/src/planning/index.js +1 -1
  108. package/dist/src/planning/openNextPlanning.d.ts +38 -0
  109. package/dist/src/planning/openNextPlanning.js +1 -0
  110. package/dist/src/planning/resourcePlanning.d.ts +0 -46
  111. package/dist/src/planning/resourcePlanning.js +1 -1
  112. package/dist/src/schemas/applicationSchemas.d.ts +16 -0
  113. package/dist/src/schemas/applicationSchemas.js +1 -1
  114. package/dist/src/schemas/baseSchemas.d.ts +8 -5
  115. package/dist/src/schemas/baseSchemas.js +2 -2
  116. package/dist/src/schemas/networkSchemas.d.ts +119 -5
  117. package/dist/src/schemas/networkSchemas.js +1 -1
  118. package/dist/src/validation/patterns.d.ts +2 -318
  119. package/dist/src/validation/patterns.js +1 -1
  120. package/dist/src/validation/validationMessages.d.ts +314 -0
  121. package/dist/src/validation/validationMessages.js +1 -0
  122. package/dist/src/validation/validationPatterns.d.ts +20 -0
  123. package/dist/src/validation/validationPatterns.js +1 -0
  124. package/dist/src/version.d.ts +1 -1
  125. package/dist/src/version.js +1 -1
  126. package/package.json +3 -3
@@ -1,207 +1,46 @@
1
- /**
2
- * Pure domain file generation — replaces CLI's EJS template + copySharedFiles approach.
3
- * Produces all files needed for a domain component as string arrays.
4
- */
5
- import { generateZoneFile } from "./bindWriter.js";
6
- import { toPascalCase } from "../generation/common.js";
7
- import { GENERATOR_VERSION } from "../version.js";
8
- /**
9
- * Generates all files for a domain component as pure strings.
10
- * Returns a `GeneratedFile[]` ready for the GitHub PR pipeline.
11
- */
12
- export function generateDomainFiles(options) {
13
- const { domainName, hostedZoneId, records = [] } = options;
14
- const basePath = `fjall/domains/${domainName}`;
15
- const zone = {
16
- origin: domainName,
17
- ttl: 300,
18
- records,
19
- delegations: [],
20
- certificates: [{ domainName, subjectAlternativeNames: [] }],
21
- };
22
- return [
23
- {
24
- path: `${basePath}/zone.bind`,
25
- content: records.length > 0
26
- ? generateZoneFile(zone)
27
- : generateDefaultZoneFile(domainName),
28
- },
29
- {
30
- path: `${basePath}/infrastructure.ts`,
31
- content: generateDefaultInfrastructureTs({
32
- domainName,
33
- records,
34
- hostedZoneId,
35
- }),
36
- },
37
- {
38
- path: `${basePath}/package.json`,
39
- content: generateDomainPackageJson(domainName),
40
- },
41
- {
42
- path: `${basePath}/tsconfig.json`,
43
- content: TSCONFIG_CONTENT,
44
- },
45
- {
46
- path: `${basePath}/cdk.json`,
47
- content: CDK_JSON_CONTENT,
48
- },
49
- {
50
- path: `${basePath}/.gitignore`,
51
- content: GITIGNORE_CONTENT,
52
- },
53
- ];
54
- }
55
- // Lightweight default-scaffold emitter for the webapp PR pipeline.
56
- // The CLI uses the richer `tsEmitter` in `@fjall/cli` for import-flow output.
57
- function generateDefaultInfrastructureTs(args) {
58
- const { domainName, records, hostedZoneId } = args;
59
- const safeZoneName = toPascalCase(domainName.split(".").join(""));
60
- const recordLines = records.map((r) => {
61
- const ttl = r.ttl !== undefined ? `, ttl: ${r.ttl}` : "";
62
- return ` { type: ${JSON.stringify(r.type)}, name: ${JSON.stringify(r.name)}, value: ${JSON.stringify(r.value)}${ttl} },`;
63
- });
64
- const recordsBlock = recordLines.length > 0 ? `[\n${recordLines.join("\n")}\n ]` : "[]";
65
- const hostedZoneLine = hostedZoneId
66
- ? ` hostedZoneId: ${JSON.stringify(hostedZoneId)},\n`
67
- : "";
68
- return `import {
1
+ import{generateZoneFile as d}from"./bindWriter.js";import{toPascalCase as p}from"../generation/common.js";import{GENERATOR_VERSION as c}from"../version.js";function $(e){const{domainName:t,hostedZoneId:o,records:a=[]}=e,s=`fjall/domains/${t}`,n={origin:t,ttl:300,records:a,delegations:[],certificates:[{domainName:t,subjectAlternativeNames:[]}]};return[{path:`${s}/zone.bind`,content:a.length>0?d(n):w(t)},{path:`${s}/infrastructure.ts`,content:m({domainName:t,records:a,hostedZoneId:o})},{path:`${s}/package.json`,content:f(t)},{path:`${s}/tsconfig.json`,content:k},{path:`${s}/cdk.json`,content:y},{path:`${s}/.gitignore`,content:g}]}function m(e){const{domainName:t,records:o,hostedZoneId:a}=e,s=p(t.split(".").join("")),n=o.map(r=>{const l=r.ttl!==void 0?`, ttl: ${r.ttl}`:"";return` { type: ${JSON.stringify(r.type)}, name: ${JSON.stringify(r.name)}, value: ${JSON.stringify(r.value)}${l} },`}),i=n.length>0?`[
2
+ ${n.join(`
3
+ `)}
4
+ ]`:"[]",u=a?` hostedZoneId: ${JSON.stringify(a)},
5
+ `:"";return`import {
69
6
  App,
70
7
  Domain,
71
8
  } from "@fjall/components-infrastructure";
72
9
 
73
- // Fjall-managed domain edit this file to add or change records.
10
+ // Fjall-managed domain \u2014 edit this file to add or change records.
74
11
  // See docs/domains.md for the Domain construct API.
75
12
 
76
- const app = App.getApp(${JSON.stringify(`${safeZoneName}Domain`)});
13
+ const app = App.getApp(${JSON.stringify(`${s}Domain`)});
77
14
 
78
- new Domain(app, ${JSON.stringify(safeZoneName)}, {
15
+ new Domain(app, ${JSON.stringify(s)}, {
79
16
  registrar: "route53",
80
- zoneName: ${JSON.stringify(domainName)},
81
- ${hostedZoneLine} certificates: [
82
- { domainName: ${JSON.stringify(domainName)} },
17
+ zoneName: ${JSON.stringify(t)},
18
+ ${u} certificates: [
19
+ { domainName: ${JSON.stringify(t)} },
83
20
  ],
84
- records: ${recordsBlock},
21
+ records: ${i},
85
22
  });
86
- `;
87
- }
88
- // ─── File content generators ────────────────────────────────────────────────
89
- function generateDefaultZoneFile(domainName) {
90
- return `; zone.bind — advisory copy only (Fjall reads infrastructure.ts)
23
+ `}function w(e){return`; zone.bind \u2014 advisory copy only (Fjall reads infrastructure.ts)
91
24
  ; This file is written at import time with --preserve-bind; edit infrastructure.ts to change records
92
- $ORIGIN ${domainName}.
25
+ $ORIGIN ${e}.
93
26
  $TTL 300
94
27
 
95
28
  ; Certificate for this domain
96
- $FJALL-CERT ${domainName}
29
+ $FJALL-CERT ${e}
97
30
 
98
31
  ; Add your DNS records below
99
32
  ; Examples:
100
33
  ; @ IN A ALIAS fjall:ecs:my-app
101
- ; www IN CNAME ${domainName}.
34
+ ; www IN CNAME ${e}.
102
35
  ; api IN A ALIAS fjall:ecs:my-api
103
- ; @ IN MX 10 mail.${domainName}.
104
- `;
105
- }
106
- function generateDomainPackageJson(domainName) {
107
- return (JSON.stringify({
108
- name: `domain-${domainName}`,
109
- version: GENERATOR_VERSION,
110
- scripts: {},
111
- devDependencies: {
112
- "@types/node": "20.4.9",
113
- "ts-node": "^10.9.1",
114
- typescript: "~5.1.6",
115
- },
116
- dependencies: {
117
- "@fjall/components-infrastructure": `^${GENERATOR_VERSION}`,
118
- "aws-cdk-lib": "^2.239.0",
119
- constructs: "^10.0.0",
120
- },
121
- }, null, 2) + "\n");
122
- }
123
- const GITIGNORE_CONTENT = `node_modules/
36
+ ; @ IN MX 10 mail.${e}.
37
+ `}function f(e){return JSON.stringify({name:`domain-${e}`,version:c,scripts:{},devDependencies:{"@types/node":"20.4.9","ts-node":"^10.9.1",typescript:"~5.1.6"},dependencies:{"@fjall/components-infrastructure":`^${c}`,"aws-cdk-lib":"^2.239.0",constructs:"^10.0.0"}},null,2)+`
38
+ `}const g=`node_modules/
124
39
  cdk.out/
125
40
  *.d.ts
126
41
  *.js
127
42
  .deploy-state.json
128
43
  .deploy-state.json.tmp
129
- `;
130
- const TSCONFIG_CONTENT = JSON.stringify({
131
- compilerOptions: {
132
- target: "ES2020",
133
- module: "commonjs",
134
- lib: ["es2020", "dom"],
135
- declaration: true,
136
- strict: true,
137
- noImplicitAny: true,
138
- strictNullChecks: true,
139
- noImplicitThis: true,
140
- alwaysStrict: true,
141
- noUnusedLocals: false,
142
- noUnusedParameters: false,
143
- noImplicitReturns: true,
144
- noFallthroughCasesInSwitch: false,
145
- inlineSourceMap: true,
146
- inlineSources: true,
147
- experimentalDecorators: true,
148
- strictPropertyInitialization: false,
149
- typeRoots: ["./node_modules/@types"],
150
- },
151
- exclude: ["node_modules", "cdk.out"],
152
- }, null, 2) + "\n";
153
- const CDK_JSON_CONTENT = JSON.stringify({
154
- app: "npx ts-node --prefer-ts-exts --transpile-only infrastructure.ts",
155
- assetMetadata: false,
156
- pathMetadata: false,
157
- versionReporting: false,
158
- watch: {
159
- include: ["**"],
160
- exclude: [
161
- "README.md",
162
- "cdk*.json",
163
- "**/*.d.ts",
164
- "**/*.js",
165
- "tsconfig.json",
166
- "package*.json",
167
- "yarn.lock",
168
- "node_modules",
169
- "test",
170
- ],
171
- },
172
- context: {
173
- "@aws-cdk/aws-lambda:recognizeLayerVersion": true,
174
- "@aws-cdk/core:checkSecretUsage": true,
175
- "@aws-cdk/core:target-partitions": ["aws", "aws-cn"],
176
- "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
177
- "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
178
- "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true,
179
- "@aws-cdk/aws-iam:minimizePolicies": true,
180
- "@aws-cdk/core:validateSnapshotRemovalPolicy": true,
181
- "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true,
182
- "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true,
183
- "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true,
184
- "@aws-cdk/aws-apigateway:disableCloudWatchRole": true,
185
- "@aws-cdk/core:enablePartitionLiterals": true,
186
- "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true,
187
- "@aws-cdk/aws-iam:standardizedServicePrincipals": true,
188
- "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true,
189
- "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true,
190
- "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true,
191
- "@aws-cdk/aws-route53-patters:useCertificate": true,
192
- "@aws-cdk/customresources:installLatestAwsSdkDefault": false,
193
- "@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true,
194
- "@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true,
195
- "@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true,
196
- "@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true,
197
- "@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true,
198
- "@aws-cdk/aws-redshift:columnId": true,
199
- "@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true,
200
- "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true,
201
- "@aws-cdk/aws-apigateway:requestValidatorUniqueId": true,
202
- "@aws-cdk/aws-kms:aliasNameRef": true,
203
- "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true,
204
- "@aws-cdk/core:includePrefixInUniqueNameGeneration": true,
205
- "@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true,
206
- },
207
- }, null, 2) + "\n";
44
+ `,k=JSON.stringify({compilerOptions:{target:"ES2020",module:"commonjs",lib:["es2020","dom"],declaration:!0,strict:!0,noImplicitAny:!0,strictNullChecks:!0,noImplicitThis:!0,alwaysStrict:!0,noUnusedLocals:!1,noUnusedParameters:!1,noImplicitReturns:!0,noFallthroughCasesInSwitch:!1,inlineSourceMap:!0,inlineSources:!0,experimentalDecorators:!0,strictPropertyInitialization:!1,typeRoots:["./node_modules/@types"]},exclude:["node_modules","cdk.out"]},null,2)+`
45
+ `,y=JSON.stringify({app:"npx ts-node --prefer-ts-exts --transpile-only infrastructure.ts",assetMetadata:!1,pathMetadata:!1,versionReporting:!1,watch:{include:["**"],exclude:["README.md","cdk*.json","**/*.d.ts","**/*.js","tsconfig.json","package*.json","yarn.lock","node_modules","test"]},context:{"@aws-cdk/aws-lambda:recognizeLayerVersion":!0,"@aws-cdk/core:checkSecretUsage":!0,"@aws-cdk/core:target-partitions":["aws","aws-cn"],"@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver":!0,"@aws-cdk/aws-ec2:uniqueImdsv2TemplateName":!0,"@aws-cdk/aws-ecs:arnFormatIncludesClusterName":!0,"@aws-cdk/aws-iam:minimizePolicies":!0,"@aws-cdk/core:validateSnapshotRemovalPolicy":!0,"@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName":!0,"@aws-cdk/aws-s3:createDefaultLoggingPolicy":!0,"@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption":!0,"@aws-cdk/aws-apigateway:disableCloudWatchRole":!0,"@aws-cdk/core:enablePartitionLiterals":!0,"@aws-cdk/aws-events:eventsTargetQueueSameAccount":!0,"@aws-cdk/aws-iam:standardizedServicePrincipals":!0,"@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker":!0,"@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName":!0,"@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy":!0,"@aws-cdk/aws-route53-patters:useCertificate":!0,"@aws-cdk/customresources:installLatestAwsSdkDefault":!1,"@aws-cdk/aws-rds:databaseProxyUniqueResourceName":!0,"@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup":!0,"@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId":!0,"@aws-cdk/aws-ec2:launchTemplateDefaultUserData":!0,"@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments":!0,"@aws-cdk/aws-redshift:columnId":!0,"@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2":!0,"@aws-cdk/aws-ec2:restrictDefaultSecurityGroup":!0,"@aws-cdk/aws-apigateway:requestValidatorUniqueId":!0,"@aws-cdk/aws-kms:aliasNameRef":!0,"@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig":!0,"@aws-cdk/core:includePrefixInUniqueNameGeneration":!0,"@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby":!0}},null,2)+`
46
+ `;export{$ as generateDomainFiles};
package/dist/src/index.js CHANGED
@@ -1,21 +1 @@
1
- // Utility foundation
2
- export { normaliseError, getErrorMessage } from "./util/errorUtils.js";
3
- export { isSuccess, isFailure, success, failure, tryAsync, trySync, } from "./types/Result.js";
4
- // Validation
5
- export { VALIDATION_PATTERNS, VALIDATION_MESSAGES, } from "./validation/patterns.js";
6
- // AWS
7
- export { DEFAULT_REGION, regions, AWS_REGIONS_METADATA, topRegions, commonRegions, parseRegionList, isValidRegion, isValidRegionFormat, getSuggestions, validateRegion, validateRegionList, filterDuplicateRegions, getRegionOptions, getRegionOptionsExcluding, getRegionName, createRegionFormatter, } from "./aws/regions.js";
8
- // Version
9
- export { GENERATOR_VERSION } from "./version.js";
10
- // Schemas, plan types, constants
11
- export * from "./schemas/index.js";
12
- // Code generation
13
- export * from "./generation/index.js";
14
- // Tier, pattern, and storage presets
15
- export * from "./presets/index.js";
16
- // AST parsing & surgical modification
17
- export * from "./ast/index.js";
18
- // Resource planning
19
- export * from "./planning/index.js";
20
- // DNS
21
- export * from "./dns/index.js";
1
+ import{normaliseError as r,getErrorMessage as i}from"./util/errorUtils.js";import{isSuccess as s,isFailure as g,success as n,failure as R,tryAsync as m,trySync as a}from"./types/Result.js";import{VALIDATION_PATTERNS as f,VALIDATION_MESSAGES as A}from"./validation/patterns.js";import{DEFAULT_REGION as x,regions as c,AWS_REGIONS_METADATA as l,topRegions as S,commonRegions as N,parseRegionList as O,isValidRegion as T,isValidRegionFormat as u,getSuggestions as I,validateRegion as _,validateRegionList as d,filterDuplicateRegions as D,getRegionOptions as L,getRegionOptionsExcluding as V,getRegionName as y,createRegionFormatter as F}from"./aws/regions.js";import{GENERATOR_VERSION as M}from"./version.js";export*from"./schemas/index.js";export*from"./generation/index.js";export*from"./presets/index.js";export*from"./ast/index.js";export*from"./planning/index.js";export*from"./dns/index.js";export{l as AWS_REGIONS_METADATA,x as DEFAULT_REGION,M as GENERATOR_VERSION,A as VALIDATION_MESSAGES,f as VALIDATION_PATTERNS,N as commonRegions,F as createRegionFormatter,R as failure,D as filterDuplicateRegions,i as getErrorMessage,y as getRegionName,L as getRegionOptions,V as getRegionOptionsExcluding,I as getSuggestions,g as isFailure,s as isSuccess,T as isValidRegion,u as isValidRegionFormat,r as normaliseError,O as parseRegionList,c as regions,n as success,S as topRegions,m as tryAsync,a as trySync,_ as validateRegion,d as validateRegionList};
@@ -1,4 +1,5 @@
1
- export { planApplicationResources, type OpenNextResourceOptions, planOpenNextResources, type GenerationOptions, generateInfrastructureFromPlan, } from "./resourcePlanning.js";
1
+ export { planApplicationResources, type GenerationOptions, generateInfrastructureFromPlan, } from "./resourcePlanning.js";
2
+ export { type OpenNextResourceOptions, planOpenNextResources, } from "./openNextPlanning.js";
2
3
  export { type ConnectionType, applyComputeConnections, applyServiceConnections, } from "./resourceConnections.js";
3
4
  export { type AddableResourceType, type AddResourceOptions, type DatabaseAddOptions, type ProxyAddOptions, type S3AddOptions, type NetworkAddOptions, type EcsComputeAddOptions, type LambdaComputeAddOptions, type CdnAddOptions, type TunnelAddOptions, addResourceToPlan, validateResourceAddition, listAvailableResources, } from "./resourceAddition.js";
4
5
  export { type ResourceChangeResult, generateResourceChange, } from "./generateResourceChange.js";
@@ -1 +1 @@
1
- import{planApplicationResources as r,planOpenNextResources as n,generateInfrastructureFromPlan as a}from"./resourcePlanning.js";import{applyComputeConnections as p,applyServiceConnections as s}from"./resourceConnections.js";import{addResourceToPlan as l,validateResourceAddition as i,listAvailableResources as u}from"./resourceAddition.js";import{generateResourceChange as R}from"./generateResourceChange.js";export{l as addResourceToPlan,p as applyComputeConnections,s as applyServiceConnections,a as generateInfrastructureFromPlan,R as generateResourceChange,u as listAvailableResources,r as planApplicationResources,n as planOpenNextResources,i as validateResourceAddition};
1
+ import{planApplicationResources as r,generateInfrastructureFromPlan as n}from"./resourcePlanning.js";import{planOpenNextResources as a}from"./openNextPlanning.js";import{applyComputeConnections as s,applyServiceConnections as c}from"./resourceConnections.js";import{addResourceToPlan as i,validateResourceAddition as u,listAvailableResources as m}from"./resourceAddition.js";import{generateResourceChange as x}from"./generateResourceChange.js";export{i as addResourceToPlan,s as applyComputeConnections,c as applyServiceConnections,n as generateInfrastructureFromPlan,x as generateResourceChange,m as listAvailableResources,r as planApplicationResources,a as planOpenNextResources,u as validateResourceAddition};
@@ -0,0 +1,38 @@
1
+ import { type PatternTypeWithCustom } from "../presets/patternTierPresets.js";
2
+ import type { PatternType } from "../schemas/constants.js";
3
+ import { type Result } from "../types/Result.js";
4
+ import type { ApplicationResourcePlan } from "../schemas/resourceSchemas.js";
5
+ export interface OpenNextResourceOptions {
6
+ /** Pattern tier: lightweight, standard, resilient, or custom */
7
+ tier?: PatternTypeWithCustom;
8
+ /** Custom domain (auto-creates certificate + DNS) */
9
+ domain?: string;
10
+ /** Database configuration (uses tier defaults if not specified) */
11
+ database?: {
12
+ type?: "Instance" | "Aurora";
13
+ instanceType?: string;
14
+ databaseName?: string;
15
+ publiclyAccessible?: boolean;
16
+ allowedIpCidr?: string;
17
+ backupRetention?: number;
18
+ deletionProtection?: boolean;
19
+ encryption?: {
20
+ useCMK: true;
21
+ } | false;
22
+ };
23
+ /** Compute (Lambda) configuration (uses tier defaults if not specified) */
24
+ compute?: {
25
+ memorySize?: number;
26
+ timeout?: number;
27
+ };
28
+ /** CDN configuration (advanced - prefer `domain` for simple setup) */
29
+ cdn?: {
30
+ domainNames?: string[];
31
+ certificateArn?: string;
32
+ };
33
+ /** Additional environment variables */
34
+ environment?: Record<string, string>;
35
+ /** Resource tags */
36
+ tags?: Record<string, string>;
37
+ }
38
+ export declare function planOpenNextResources(appName: string, pattern: PatternType, options?: OpenNextResourceOptions): Result<ApplicationResourcePlan, Error>;
@@ -0,0 +1 @@
1
+ import{getPatternTierPreset as b,isPatternTierName as C,PATTERN_TIER_NAMES as T}from"../presets/patternTierPresets.js";import{getNetworkPreset as P}from"../presets/tierPresets.js";import{success as l,failure as f}from"../types/Result.js";import{PatternConfigSchema as y}from"../schemas/resourceSchemas.js";const N=P("standard");function w(e){return y.options.some(n=>n.shape?.type?.value===e)}function $(e,n,c){const{tier:r="standard",domain:u,database:d,compute:a,cdn:p,environment:i,tags:m}=c??{},s=C(r);if(!s&&r!=="custom")return f(new Error(`Invalid pattern tier: "${r}". Valid tiers are: ${[...T,"custom"].join(", ")}`));if(!w(n))return f(new Error(`Unsupported pattern type: ${n}`));const t=s?b(r):null,o=R(n,e,{domain:u,database:d,compute:a,cdn:p,environment:i,tierPreset:t});if(!o.success)return o;const g=o.data;return l({appName:e,type:"standard",pattern:n,network:t?t.network:N,backup:t?t.backup:!1,patternConfig:g,database:[],s3:[],compute:[],tags:m??{}})}function k(e,n){return{type:e?.type??n.database.type,instanceType:e?.instanceType??n.database.instanceType,backupRetention:e?.backupRetention??n.database.backupRetention,deletionProtection:e?.deletionProtection??n.database.deletionProtection,...e?.databaseName!==void 0&&{databaseName:e.databaseName},...e?.publiclyAccessible!==void 0&&{publiclyAccessible:e.publiclyAccessible},...e?.allowedIpCidr!==void 0&&{allowedIpCidr:e.allowedIpCidr},...e?.encryption!==void 0&&{encryption:e.encryption}}}function A(e,n){return{memorySize:e?.memorySize??n.compute.memorySize,timeout:e?.timeout??n.compute.timeout}}function E(e){const{encryption:n,...c}=e;return{...c,...n&&{encryption:{storageKey:n}}}}function R(e,n,c){const{domain:r,database:u,compute:d,cdn:a,environment:p,tierPreset:i}=c,m=i?k(u,i):u,s=i?A(d,i):d,t={type:e,name:n,domain:r,database:m?E(m):void 0,compute:s?{server:s}:void 0,cdn:a?{domainNames:a.domainNames,certificateArn:a.certificateArn}:void 0,environment:p},o=y.safeParse(t);return o.success?l(o.data):f(new Error(`Invalid pattern config: ${o.error.message}`))}export{$ as planOpenNextResources};
@@ -1,56 +1,10 @@
1
1
  import { type UserServiceConfig, type AppType } from "../presets/tierPresets.js";
2
- import { type PatternTypeWithCustom } from "../presets/patternTierPresets.js";
3
- import { type PatternType } from "../schemas/constants.js";
4
2
  import { type Result } from "../types/Result.js";
5
3
  import type { ApplicationResourcePlan } from "../schemas/resourceSchemas.js";
6
4
  export declare function planApplicationResources(appName: string, appType: AppType, includeDatabase?: boolean, services?: UserServiceConfig[], snapshotOptions?: {
7
5
  snapshotIdentifier?: string;
8
6
  snapshotUsername?: string;
9
7
  }): ApplicationResourcePlan;
10
- export interface OpenNextResourceOptions {
11
- /** Pattern tier: lightweight, standard, resilient, or custom */
12
- tier?: PatternTypeWithCustom;
13
- /** Custom domain (auto-creates certificate + DNS) */
14
- domain?: string;
15
- /** Database configuration (uses tier defaults if not specified) */
16
- database?: {
17
- type?: "Instance" | "Aurora";
18
- instanceType?: string;
19
- databaseName?: string;
20
- publiclyAccessible?: boolean;
21
- allowedIpCidr?: string;
22
- backupRetention?: number;
23
- deletionProtection?: boolean;
24
- encryption?: {
25
- useCMK: true;
26
- } | false;
27
- };
28
- /** Compute (Lambda) configuration (uses tier defaults if not specified) */
29
- compute?: {
30
- memorySize?: number;
31
- timeout?: number;
32
- };
33
- /** CDN configuration (advanced - prefer `domain` for simple setup) */
34
- cdn?: {
35
- domainNames?: string[];
36
- certificateArn?: string;
37
- };
38
- /** Additional environment variables */
39
- environment?: Record<string, string>;
40
- /** Resource tags */
41
- tags?: Record<string, string>;
42
- }
43
- /**
44
- * Plan resources for OpenNext patterns (Next.js/Payload).
45
- *
46
- * All OpenNext patterns use the PatternFactory approach, generating a single
47
- * `PatternFactory.build()` call. The pattern class internally handles all
48
- * infrastructure (database, S3, DynamoDB, SQS, Lambdas, CDN).
49
- *
50
- * @example
51
- * const plan = planOpenNextResources("my-cms", "payload", { tier: "standard" });
52
- */
53
- export declare function planOpenNextResources(appName: string, pattern: PatternType, options?: OpenNextResourceOptions): Result<ApplicationResourcePlan, Error>;
54
8
  export interface GenerationOptions {
55
9
  /** Resource name mapping from old names to new names (for custom code repositioning) */
56
10
  resourceMapping?: Map<string, string>;
@@ -1 +1 @@
1
- import{TIER_PRESETS as P,getDefaultDatabaseTypeForTier as y,getNetworkPreset as k,applyTierDefaultsToServices as T}from"../presets/tierPresets.js";import{getPatternTierPreset as h,isPatternTierName as D}from"../presets/patternTierPresets.js";import{COMPUTE_TYPE as w}from"../schemas/constants.js";import{success as g,failure as l}from"../types/Result.js";import{PatternConfigSchema as p}from"../schemas/resourceSchemas.js";import{injectCustomCodeBlocks as E}from"../ast/astSurgicalModification.js";import{toVariableName as b,toValidDatabaseName as R,generateImports as S,generateAppInit as I,generateTags as v,generateNetworkCode as C,generateDatabaseCode as A,generateS3Code as N,generateDynamoDBCode as $,generateSQSCode as U,generateComputeCode as B,generateCDNCode as j,collectCdnReferencedResources as x,usesPatternApproach as z,generatePatternCodeWithComments as F}from"../generation/index.js";const V=k("standard");function _(e){return p.options.some(t=>t.shape?.type?.value===e)}function ne(e,t,r=!0,o,n){const i={appName:e,type:t,database:[],s3:[],compute:[]};if(t==="custom")return i;const a=t,s=P[a];return{...i,database:K(e,s,a,r,n),compute:L(e,s,a,r,o),network:s.network,backup:s.backup}}function K(e,t,r,o,n){const i=y(r),a=t.database[i];return!o||a===null?[]:[{name:e,type:i,databaseName:R(e),variableName:`${b(e)}Database`,...a,...n?.snapshotIdentifier!==void 0&&{snapshotIdentifier:n.snapshotIdentifier},...n?.snapshotUsername!==void 0&&{snapshotUsername:n.snapshotUsername}}]}function M(e,t){if(!(e===void 0&&t===void 0))return{scaling:{...e!==void 0&&{minCapacity:e},...t!==void 0&&{maxCapacity:t}}}}function W(e,t){const{minCapacity:r,maxCapacity:o,...n}=e,i=t?.containerPort??3e3;return{...n,dockerfilePath:t?.dockerfilePath,needsDatabaseConnection:t?.needsDatabaseConnection,containers:[{port:i}],...M(r,o)}}function L(e,t,r,o,n){const i=t.compute.ecs,a=n&&n.length>0?T(r,n):i.services.map((s,c)=>({...s,name:c===0?"api":`service-${c+1}`}));return[{name:e,type:w.ECS,needsConnection:o,connectedDatabase:o?[e]:void 0,variableName:`${b(e)}Compute`,cluster:i.cluster,services:a.map((s,c)=>W(s,n?.[c]))}]}function re(e,t,r){const{tier:o="standard",domain:n,database:i,compute:a,cdn:s,environment:c,tags:f}=r??{},m=D(o);if(!m&&o!=="custom")return l(new Error(`Invalid pattern tier: "${o}". Valid tiers are: lightweight, standard, resilient, custom`));if(!_(t))return l(new Error(`Unsupported pattern type: ${t}`));const u=m?h(o):null,d=G(t,e,{domain:n,database:i,compute:a,cdn:s,environment:c,tierPreset:u});return d instanceof Error?l(d):g({appName:e,type:"standard",pattern:t,network:u?u.network:V,backup:u?u.backup:!1,patternConfig:d,database:[],s3:[],compute:[],tags:f??{}})}function Q(e,t){return{type:e?.type??t.database.type,instanceType:e?.instanceType??t.database.instanceType,databaseName:e?.databaseName,publiclyAccessible:e?.publiclyAccessible,allowedIpCidr:e?.allowedIpCidr,backupRetention:e?.backupRetention??t.database.backupRetention,deletionProtection:e?.deletionProtection??t.database.deletionProtection,encryption:e?.encryption}}function Y(e,t){return{memorySize:e?.memorySize??t.compute.memorySize,timeout:e?.timeout??t.compute.timeout}}function q(e){const{encryption:t,...r}=e;return{...r,...t&&{encryption:{storageKey:t}}}}function G(e,t,r){const{domain:o,database:n,compute:i,cdn:a,environment:s,tierPreset:c}=r,f=c?Q(n,c):n,m=c?Y(i,c):i,u={type:e,name:t,domain:o,database:f?q(f):void 0,compute:m?{server:m}:void 0,cdn:a?{domainNames:a.domainNames,certificateArn:a.certificateArn}:void 0,environment:s},d=p.safeParse(u);return d.success?d.data:new Error(`Invalid pattern config: ${d.error.message}`)}function oe(e,t){const r=[S(e),I(e),v(e)];if(z(e))r.push(F(e),C(e));else{const n=x(e);r.push(C(e),A(e),N(e),$(e),U(e),B(e,n),j(e))}const o=r.join("");if(e.customCodeBlocks&&e.customCodeBlocks.length>0){const n=E(o,e.customCodeBlocks,t?.resourceMapping);return n.success?g(n.content):l(new Error(`Custom code injection failed: ${n.error??"unknown error"}`))}return g(o)}export{oe as generateInfrastructureFromPlan,ne as planApplicationResources,re as planOpenNextResources};
1
+ import{TIER_PRESETS as m,getDefaultDatabaseTypeForTier as C,applyTierDefaultsToServices as b}from"../presets/tierPresets.js";import{COMPUTE_TYPE as g}from"../schemas/constants.js";import{success as u,failure as l}from"../types/Result.js";import{injectCustomCodeBlocks as P}from"../ast/astCodeInjection.js";import{toVariableName as d,toValidDatabaseName as k,generateImports as h,generateAppInit as D,generateTags as E,generateNetworkCode as f,generateDatabaseCode as R,generateS3Code as S,generateDynamoDBCode as T,generateSQSCode as I,generateComputeCode as w,generateCDNCode as B,collectCdnReferencedResources as j,usesPatternApproach as y,generatePatternCodeWithComments as U}from"../generation/index.js";function N(e,n,r=!0,o,t){const s={appName:e,type:n,database:[],s3:[],compute:[]};if(n==="custom")return s;const c=n,a=m[c];return{...s,database:$(e,a,c,r,t),compute:A(e,a,c,r,o),network:a.network,backup:a.backup}}function $(e,n,r,o,t){const s=C(r),c=n.database[s];return!o||c===null?[]:[{name:e,type:s,databaseName:k(e),variableName:`${d(e)}Database`,...c,...t?.snapshotIdentifier!==void 0&&{snapshotIdentifier:t.snapshotIdentifier},...t?.snapshotUsername!==void 0&&{snapshotUsername:t.snapshotUsername}}]}function p(e,n){if(!(e===void 0&&n===void 0))return{scaling:{...e!==void 0&&{minCapacity:e},...n!==void 0&&{maxCapacity:n}}}}function v(e,n){const{minCapacity:r,maxCapacity:o,...t}=e,s=n?.containerPort??3e3;return{...t,dockerfilePath:n?.dockerfilePath,needsDatabaseConnection:n?.needsDatabaseConnection,containers:[{port:s}],...p(r,o)}}function A(e,n,r,o,t){const s=n.compute.ecs,c=t&&t.length>0?b(r,t):s.services.map((a,i)=>({...a,name:i===0?"api":`service-${i+1}`}));return[{name:e,type:g.ECS,needsConnection:o,connectedDatabase:o?[e]:void 0,variableName:`${d(e)}Compute`,cluster:s.cluster,services:c.map((a,i)=>v(a,t?.[i]))}]}function Q(e,n){const r=[h(e),D(e),E(e)];if(y(e))r.push(U(e),f(e));else{const t=j(e);r.push(f(e),R(e),S(e),T(e),I(e),w(e,t),B(e))}const o=r.join("");if(e.customCodeBlocks&&e.customCodeBlocks.length>0){const t=P(o,e.customCodeBlocks,n?.resourceMapping);return t.success?u(t.content):l(new Error(`Custom code injection failed: ${t.error??"unknown error"}`))}return u(o)}export{Q as generateInfrastructureFromPlan,N as planApplicationResources};
@@ -761,6 +761,9 @@ export declare const ApplicationResourcePlanSchema: z.ZodObject<{
761
761
  network: "network";
762
762
  messaging: "messaging";
763
763
  cdn: "cdn";
764
+ "vpc-peer": "vpc-peer";
765
+ "vpc-peer-accepter": "vpc-peer-accepter";
766
+ "cross-plan-connection": "cross-plan-connection";
764
767
  }>;
765
768
  name: z.ZodOptional<z.ZodString>;
766
769
  }, z.core.$strict>>;
@@ -866,5 +869,18 @@ export declare const ApplicationGeneratorSchema: z.ZodObject<{
866
869
  snapshotIdentifier: z.ZodOptional<z.ZodString>;
867
870
  snapshotUsername: z.ZodOptional<z.ZodString>;
868
871
  }, z.core.$strict>;
872
+ export declare const CrossPlanConnectionResourcePlanSchema: z.ZodObject<{
873
+ name: z.ZodString;
874
+ localResource: z.ZodString;
875
+ remoteApp: z.ZodString;
876
+ remoteResource: z.ZodString;
877
+ permission: z.ZodEnum<{
878
+ read: "read";
879
+ write: "write";
880
+ "read-write": "read-write";
881
+ }>;
882
+ remoteArn: z.ZodOptional<z.ZodString>;
883
+ }, z.core.$strict>;
869
884
  export type ApplicationResourcePlan = z.infer<typeof ApplicationResourcePlanSchema>;
870
885
  export type ApplicationGeneratorOptions = z.infer<typeof ApplicationGeneratorSchema>;
886
+ export type CrossPlanConnectionResourcePlan = z.infer<typeof CrossPlanConnectionResourcePlanSchema>;
@@ -1 +1 @@
1
- import{z as o}from"zod";import{VALIDATION_MESSAGES as a}from"../validation/patterns.js";import{AppNameSchema as t,AppTypeSchema as e,PatternSchema as r,CustomCodeBlockSchema as n,BackupConfigSchema as i,TunnelConfigSchema as p}from"./baseSchemas.js";import{DatabaseResourcePlanSchema as m}from"./databaseSchemas.js";import{NetworkResourcePlanSchema as c,AdditionalNetworkResourcePlanSchema as s,NetworkConfigSchema as l}from"./networkSchemas.js";import{S3ResourcePlanSchema as S}from"./storageSchemas.js";import{SQSResourcePlanSchema as u}from"./messagingSchemas.js";import{CDNResourcePlanSchema as h}from"./cdnSchemas.js";import{ComputeResourcePlanSchema as g,ApplicationServiceConfigSchema as d}from"./computeSchemas.js";import{DynamoDBResourcePlanSchema as f}from"./databaseSchemas.js";import{PatternConfigSchema as A,PatternTierSchema as y,CustomPatternDatabaseSchema as C,CustomPatternComputeSchema as P}from"./patternSchemas.js";const v=o.object({appName:t,type:e,pattern:r.optional(),patternConfig:A.optional(),owner:o.string().optional(),tags:o.record(o.string(),o.string()).optional(),vpcId:o.string().optional(),network:c.optional(),backup:i.optional(),tunnel:p.optional(),additionalNetworks:o.array(s).optional(),database:o.array(m),s3:o.array(S),compute:o.array(g),dynamodb:o.array(f).optional(),sqs:o.array(u).optional(),cdn:h.optional(),customCodeBlocks:o.array(n).optional(),additionalManagedImports:o.array(o.object({moduleSpecifier:o.string(),namedImports:o.array(o.string()),defaultImport:o.string().optional()}).strict()).optional()}).strict(),j=o.object({name:t,type:e,pattern:r.optional(),patternTier:y.optional(),patternDomain:o.string().optional(),customDatabase:C.optional(),customCompute:P.optional(),region:o.string().optional(),owner:o.string().optional(),includeDatabase:o.boolean().optional(),databaseName:o.string().min(1,a.DATABASE.NAME.REQUIRED).max(63,a.DATABASE.NAME.MAX_LENGTH).optional(),vpcId:o.string().optional(),network:l.optional(),services:o.array(d).optional(),snapshotIdentifier:o.string().optional(),snapshotUsername:o.string().optional()}).strict();export{j as ApplicationGeneratorSchema,v as ApplicationResourcePlanSchema};
1
+ import{z as o}from"zod";import{VALIDATION_MESSAGES as a}from"../validation/patterns.js";import{AppNameSchema as t,AppTypeSchema as e,PatternSchema as r,CustomCodeBlockSchema as n,BackupConfigSchema as i,TunnelConfigSchema as m,ResourceNameSchema as p}from"./baseSchemas.js";import{DatabaseResourcePlanSchema as c}from"./databaseSchemas.js";import{NetworkResourcePlanSchema as s,AdditionalNetworkResourcePlanSchema as l,NetworkConfigSchema as S}from"./networkSchemas.js";import{S3ResourcePlanSchema as u}from"./storageSchemas.js";import{SQSResourcePlanSchema as g}from"./messagingSchemas.js";import{CDNResourcePlanSchema as h}from"./cdnSchemas.js";import{ComputeResourcePlanSchema as d,ApplicationServiceConfigSchema as f}from"./computeSchemas.js";import{DynamoDBResourcePlanSchema as A}from"./databaseSchemas.js";import{PatternConfigSchema as C,PatternTierSchema as P,CustomPatternDatabaseSchema as y,CustomPatternComputeSchema as R}from"./patternSchemas.js";const v=o.object({appName:t,type:e,pattern:r.optional(),patternConfig:C.optional(),owner:o.string().optional(),tags:o.record(o.string(),o.string()).optional(),vpcId:o.string().optional(),network:s.optional(),backup:i.optional(),tunnel:m.optional(),additionalNetworks:o.array(l).optional(),database:o.array(c),s3:o.array(u),compute:o.array(d),dynamodb:o.array(A).optional(),sqs:o.array(g).optional(),cdn:h.optional(),customCodeBlocks:o.array(n).optional(),additionalManagedImports:o.array(o.object({moduleSpecifier:o.string(),namedImports:o.array(o.string()),defaultImport:o.string().optional()}).strict()).optional()}).strict(),x=o.object({name:t,type:e,pattern:r.optional(),patternTier:P.optional(),patternDomain:o.string().optional(),customDatabase:y.optional(),customCompute:R.optional(),region:o.string().optional(),owner:o.string().optional(),includeDatabase:o.boolean().optional(),databaseName:o.string().min(1,a.DATABASE.NAME.REQUIRED).max(63,a.DATABASE.NAME.MAX_LENGTH).optional(),vpcId:o.string().optional(),network:S.optional(),services:o.array(f).optional(),snapshotIdentifier:o.string().optional(),snapshotUsername:o.string().optional()}).strict(),G=o.object({name:p,localResource:o.string().min(1),remoteApp:o.string().min(1),remoteResource:o.string().min(1),permission:o.enum(["read","write","read-write"]),remoteArn:o.string().optional()}).strict();export{x as ApplicationGeneratorSchema,v as ApplicationResourcePlanSchema,G as CrossPlanConnectionResourcePlanSchema};
@@ -108,10 +108,7 @@ export declare const CustomCodePositionSchema: z.ZodEnum<{
108
108
  "after-resource": "after-resource";
109
109
  "end-of-file": "end-of-file";
110
110
  }>;
111
- /**
112
- * Statement type for managed resources.
113
- */
114
- export declare const StatementTypeSchema: z.ZodEnum<{
111
+ export declare const AstStatementTypeSchema: z.ZodEnum<{
115
112
  custom: "custom";
116
113
  storage: "storage";
117
114
  database: "database";
@@ -123,6 +120,9 @@ export declare const StatementTypeSchema: z.ZodEnum<{
123
120
  network: "network";
124
121
  messaging: "messaging";
125
122
  cdn: "cdn";
123
+ "vpc-peer": "vpc-peer";
124
+ "vpc-peer-accepter": "vpc-peer-accepter";
125
+ "cross-plan-connection": "cross-plan-connection";
126
126
  }>;
127
127
  /**
128
128
  * Custom code block schema.
@@ -152,6 +152,9 @@ export declare const CustomCodeBlockSchema: z.ZodObject<{
152
152
  network: "network";
153
153
  messaging: "messaging";
154
154
  cdn: "cdn";
155
+ "vpc-peer": "vpc-peer";
156
+ "vpc-peer-accepter": "vpc-peer-accepter";
157
+ "cross-plan-connection": "cross-plan-connection";
155
158
  }>;
156
159
  name: z.ZodOptional<z.ZodString>;
157
160
  }, z.core.$strict>>;
@@ -205,7 +208,7 @@ export type CallValue = z.infer<typeof CallValueSchema>;
205
208
  export type SpecialValue = z.infer<typeof SpecialValueSchema>;
206
209
  export type EnvironmentValue = z.infer<typeof EnvironmentValueSchema>;
207
210
  export type CustomCodePosition = z.infer<typeof CustomCodePositionSchema>;
208
- export type StatementType = z.infer<typeof StatementTypeSchema>;
211
+ export type AstStatementType = z.infer<typeof AstStatementTypeSchema>;
209
212
  export type CustomCodeBlock = z.infer<typeof CustomCodeBlockSchema>;
210
213
  export type ExtraProperty = z.infer<typeof ExtraPropertySchema>;
211
214
  export type OrganisationGeneratorOptions = z.infer<typeof OrganisationGeneratorSchema>;
@@ -1,2 +1,2 @@
1
- import{z as e}from"zod";import{VALIDATION_PATTERNS as o,VALIDATION_MESSAGES as t}from"../validation/patterns.js";import{APP_TYPES as a,PATTERN_TYPE_VALUES as i,MIN_PORT as c,MAX_PORT as m,BACKUP_VAULT_TIERS as E}from"./constants.js";import{regions as p}from"../aws/regions.js";const O=n=>e.union([e.literal(!1),n]),b={check:n=>n.minCapacity!==void 0&&n.maxCapacity!==void 0?n.minCapacity<=n.maxCapacity:!0,params:{message:t.CAPACITY_CONSTRAINT.MIN_LTE_MAX,path:["maxCapacity"]}},P=n=>e.number().int(t.MEMORY_LIMIT.INTEGER).min(n,n===128?t.MEMORY_LIMIT.MIN_128:t.MEMORY_LIMIT.MIN_512).max(30720,t.MEMORY_LIMIT.MAX),D=e.string().min(1,t.REQUIRED.RESOURCE_NAME).max(63,t.MAX_LENGTH.RESOURCE_NAME).regex(o.RESOURCE_NAME,t.RESOURCE_NAME),L=e.string().min(1,t.REQUIRED.BUCKET_NAME).max(63,t.MAX_LENGTH.BUCKET_NAME).regex(o.BUCKET_NAME,t.BUCKET_NAME),y=e.string().min(1,t.REQUIRED.DATABASE_NAME).max(63,t.MAX_LENGTH.DATABASE_NAME).regex(o.DATABASE_NAME,t.DATABASE_NAME),U=e.string().min(2,t.IDENTIFIER_MIN_LENGTH).max(50,t.MAX_LENGTH.APP_NAME).regex(o.IDENTIFIER,t.IDENTIFIER).refine(n=>!n.endsWith("-"),{message:t.IDENTIFIER_NO_TRAILING_HYPHEN}).refine(n=>!n.includes("--"),{message:t.IDENTIFIER_NO_CONSECUTIVE_HYPHENS}),G=e.number().int(t.PORT.INTEGER).min(c,t.PORT.MIN).max(m,t.PORT.MAX),H=e.object({key:e.string(),sourceText:e.string()}).strict(),I=e.object({__identifier:e.string()}).strict(),N=e.object({__expression:e.string()}).strict(),T=e.object({__call:e.string()}).strict(),A=e.union([I,N,T]),_=e.union([e.string(),e.number(),e.boolean(),A]),j=e.record(e.string(),_),g=e.object({id:e.string(),name:e.string(),field:e.string().optional()}).strict(),B=e.record(e.string(),g),Y=e.record(e.string(),e.unknown()),F=e.enum(a).describe(`Application type must be one of: ${a.join(", ")}`),V=e.enum(i).describe(`OpenNext deployment pattern: ${i.join(", ")}`),l=e.enum(["before-imports","after-imports","after-app-init","after-tags","after-resource","end-of-file"]),R=e.enum(["import","app-init","tags","database","compute","storage","network","messaging","cdn","pattern","custom"]),X=e.object({sourceText:e.string(),position:l,afterManagedResource:e.object({type:R,name:e.string().optional()}).strict().optional(),originalLine:e.number().int().optional(),leadingComments:e.array(e.string()).optional(),orphaned:e.boolean().optional(),orphanedComment:e.string().optional()}).strict(),k=e.union([e.object({tier:e.enum(E)}).strict(),e.literal(!1)]),K=e.union([e.object({instanceType:e.string().optional()}).strict(),e.literal(!1)]),S=e.string().min(2,t.IDENTIFIER_MIN_LENGTH).max(50,t.MAX_LENGTH.ORGANISATION_NAME).regex(o.IDENTIFIER,t.IDENTIFIER).refine(n=>!n.endsWith("-"),{message:t.IDENTIFIER_NO_TRAILING_HYPHEN}).refine(n=>!n.includes("--"),{message:t.IDENTIFIER_NO_CONSECUTIVE_HYPHENS}),x=e.string().email(t.EMAIL),s=e.string().refine(n=>p.includes(n),{message:t.REGION}),$=e.object({name:S,email:x,accountName:e.string().optional(),primaryRegion:s.optional().default("us-east-1"),secondaryRegions:e.array(s).optional(),security:e.enum(["foundation","compliance","hardened"]).optional(),force:e.boolean().optional()}).strict();function Q(n){return n.issues.map(r=>`${r.path.length>0?`${r.path.join(".")}: `:""}${r.message}`).join(`
2
- `)}export{U as AppNameSchema,F as AppTypeSchema,k as BackupConfigSchema,L as BucketNameSchema,b as CAPACITY_REFINEMENT,T as CallValueSchema,X as CustomCodeBlockSchema,l as CustomCodePositionSchema,y as DatabaseNameSchema,x as EmailSchema,j as EnvironmentRecordSchema,_ as EnvironmentValueSchema,N as ExpressionValueSchema,H as ExtraPropertySchema,I as IdentifierValueSchema,Y as MetadataRecordSchema,$ as OrganisationGeneratorSchema,S as OrganisationNameSchema,V as PatternSchema,G as PortSchema,s as RegionSchema,D as ResourceNameSchema,g as SecretImportSchema,B as SecretsImportRecordSchema,A as SpecialValueSchema,R as StatementTypeSchema,K as TunnelConfigSchema,Q as getZodErrorMessage,P as memoryLimitMiBSchema,O as optionalOrDisabled};
1
+ import{z as e}from"zod";import{VALIDATION_PATTERNS as o,VALIDATION_MESSAGES as t}from"../validation/patterns.js";import{APP_TYPES as a,PATTERN_TYPE_VALUES as i,MIN_PORT as c,MAX_PORT as m,BACKUP_VAULT_TIERS as p}from"./constants.js";import{regions as E}from"../aws/regions.js";const O=n=>e.union([e.literal(!1),n]),b={check:n=>n.minCapacity!==void 0&&n.maxCapacity!==void 0?n.minCapacity<=n.maxCapacity:!0,params:{message:t.CAPACITY_CONSTRAINT.MIN_LTE_MAX,path:["maxCapacity"]}},P=n=>e.number().int(t.MEMORY_LIMIT.INTEGER).min(n,n===128?t.MEMORY_LIMIT.MIN_128:t.MEMORY_LIMIT.MIN_512).max(30720,t.MEMORY_LIMIT.MAX),L=e.string().min(1,t.REQUIRED.RESOURCE_NAME).max(63,t.MAX_LENGTH.RESOURCE_NAME).regex(o.RESOURCE_NAME,t.RESOURCE_NAME),D=e.string().min(1,t.REQUIRED.BUCKET_NAME).max(63,t.MAX_LENGTH.BUCKET_NAME).regex(o.BUCKET_NAME,t.BUCKET_NAME),y=e.string().min(1,t.REQUIRED.DATABASE_NAME).max(63,t.MAX_LENGTH.DATABASE_NAME).regex(o.DATABASE_NAME,t.DATABASE_NAME),U=e.string().min(2,t.IDENTIFIER_MIN_LENGTH).max(50,t.MAX_LENGTH.APP_NAME).regex(o.IDENTIFIER,t.IDENTIFIER).refine(n=>!n.endsWith("-"),{message:t.IDENTIFIER_NO_TRAILING_HYPHEN}).refine(n=>!n.includes("--"),{message:t.IDENTIFIER_NO_CONSECUTIVE_HYPHENS}),G=e.number().int(t.PORT.INTEGER).min(c,t.PORT.MIN).max(m,t.PORT.MAX),H=e.object({key:e.string(),sourceText:e.string()}).strict(),I=e.object({__identifier:e.string()}).strict(),N=e.object({__expression:e.string()}).strict(),T=e.object({__call:e.string()}).strict(),A=e.union([I,N,T]),_=e.union([e.string(),e.number(),e.boolean(),A]),j=e.record(e.string(),_),g=e.object({id:e.string(),name:e.string(),field:e.string().optional()}).strict(),B=e.record(e.string(),g),Y=e.record(e.string(),e.unknown()),F=e.enum(a).describe(`Application type must be one of: ${a.join(", ")}`),V=e.enum(i).describe(`OpenNext deployment pattern: ${i.join(", ")}`),l=e.enum(["before-imports","after-imports","after-app-init","after-tags","after-resource","end-of-file"]),x=e.enum(["import","app-init","tags","database","compute","storage","network","messaging","cdn","pattern","vpc-peer","vpc-peer-accepter","cross-plan-connection","custom"]),X=e.object({sourceText:e.string(),position:l,afterManagedResource:e.object({type:x,name:e.string().optional()}).strict().optional(),originalLine:e.number().int().optional(),leadingComments:e.array(e.string()).optional(),orphaned:e.boolean().optional(),orphanedComment:e.string().optional()}).strict(),k=e.union([e.object({tier:e.enum(p)}).strict(),e.literal(!1)]),K=e.union([e.object({instanceType:e.string().optional()}).strict(),e.literal(!1)]),R=e.string().min(2,t.IDENTIFIER_MIN_LENGTH).max(50,t.MAX_LENGTH.ORGANISATION_NAME).regex(o.IDENTIFIER,t.IDENTIFIER).refine(n=>!n.endsWith("-"),{message:t.IDENTIFIER_NO_TRAILING_HYPHEN}).refine(n=>!n.includes("--"),{message:t.IDENTIFIER_NO_CONSECUTIVE_HYPHENS}),S=e.string().regex(o.EMAIL,t.EMAIL),s=e.string().refine(n=>E.includes(n),{message:t.REGION}),$=e.object({name:R,email:S,accountName:e.string().optional(),primaryRegion:s.optional().default("us-east-1"),secondaryRegions:e.array(s).optional(),security:e.enum(["foundation","compliance","hardened"]).optional(),force:e.boolean().optional()}).strict();function v(n){return n.issues.map(r=>`${r.path.length>0?`${r.path.join(".")}: `:""}${r.message}`).join(`
2
+ `)}export{U as AppNameSchema,F as AppTypeSchema,x as AstStatementTypeSchema,k as BackupConfigSchema,D as BucketNameSchema,b as CAPACITY_REFINEMENT,T as CallValueSchema,X as CustomCodeBlockSchema,l as CustomCodePositionSchema,y as DatabaseNameSchema,S as EmailSchema,j as EnvironmentRecordSchema,_ as EnvironmentValueSchema,N as ExpressionValueSchema,H as ExtraPropertySchema,I as IdentifierValueSchema,Y as MetadataRecordSchema,$ as OrganisationGeneratorSchema,R as OrganisationNameSchema,V as PatternSchema,G as PortSchema,s as RegionSchema,L as ResourceNameSchema,g as SecretImportSchema,B as SecretsImportRecordSchema,A as SpecialValueSchema,K as TunnelConfigSchema,v as getZodErrorMessage,P as memoryLimitMiBSchema,O as optionalOrDisabled};