@fjall/generator 2.33.0 → 3.0.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 (110) hide show
  1. package/dist/.minified +1 -1
  2. package/dist/src/ast/astTestHelpers.js +1 -1
  3. package/dist/src/ast/domain/astDomainParser.d.ts +15 -7
  4. package/dist/src/ast/domain/astDomainParser.js +1 -1
  5. package/dist/src/ast/index.d.ts +1 -1
  6. package/dist/src/ast/mutation/astCodeInjection.js +4 -4
  7. package/dist/src/ast/mutation/astExpressionEvaluator.js +1 -1
  8. package/dist/src/ast/mutation/astSurgicalModification.js +5 -5
  9. package/dist/src/ast/parsers/common/astCommonParser.js +1 -1
  10. package/dist/src/ast/parsers/common/astStatementClassifier.js +1 -1
  11. package/dist/src/ast/parsers/common/astStatementQueries.js +3 -3
  12. package/dist/src/ast/parsers/orchestrator/astInfrastructureParser.js +1 -1
  13. package/dist/src/ast/parsers/orchestrator/astPlanConverter.js +2 -2
  14. package/dist/src/ast/parsers/resources/astCdnParser.js +1 -1
  15. package/dist/src/ast/parsers/resources/astClickHouseParser.js +1 -1
  16. package/dist/src/ast/parsers/resources/astComputeConnectionParser.js +1 -1
  17. package/dist/src/ast/parsers/resources/astComputeParser.js +1 -1
  18. package/dist/src/ast/parsers/resources/astComputeParserHelpers.js +1 -1
  19. package/dist/src/ast/parsers/resources/astDatabaseParser.js +1 -1
  20. package/dist/src/ast/parsers/resources/astDynamoDBParser.js +1 -1
  21. package/dist/src/ast/parsers/resources/astMessagingParser.js +1 -1
  22. package/dist/src/ast/parsers/resources/astNetworkParser.js +1 -1
  23. package/dist/src/ast/parsers/resources/astPatternParser.js +1 -1
  24. package/dist/src/ast/parsers/resources/astScheduleParser.js +1 -1
  25. package/dist/src/ast/parsers/resources/astStorageParser.js +1 -1
  26. package/dist/src/aws/regions.js +1 -1
  27. package/dist/src/codemod/_internal.js +1 -1
  28. package/dist/src/codemod/drift/detect.js +1 -1
  29. package/dist/src/codemod/drift/merge.js +1 -1
  30. package/dist/src/codemod/drift/snapshot.js +1 -1
  31. package/dist/src/codemod/edits/addResource/bodyIndex.js +1 -1
  32. package/dist/src/codemod/edits/addResource/propertyBuilder.js +1 -1
  33. package/dist/src/codemod/edits/addResource.js +1 -1
  34. package/dist/src/codemod/edits/appendAccountToStage.js +1 -1
  35. package/dist/src/codemod/edits/controlFlowPolicy.js +1 -1
  36. package/dist/src/codemod/edits/crossPlanConnection.js +1 -1
  37. package/dist/src/codemod/edits/driftPolicy.js +1 -1
  38. package/dist/src/codemod/edits/ensureImports.js +1 -1
  39. package/dist/src/codemod/edits/findInsertionPosition.js +1 -1
  40. package/dist/src/codemod/edits/modifyResource/literalConversion.js +1 -1
  41. package/dist/src/codemod/edits/modifyResource.js +1 -1
  42. package/dist/src/codemod/edits/removeResource/commentHeuristic.js +1 -1
  43. package/dist/src/codemod/edits/removeResource/importPruning.js +1 -1
  44. package/dist/src/codemod/edits/removeResource.js +1 -1
  45. package/dist/src/codemod/edits/vpcPeer.js +1 -1
  46. package/dist/src/codemod/edits/vpcPeerAccepter.js +1 -1
  47. package/dist/src/codemod/fileRewriter/builders.js +1 -1
  48. package/dist/src/codemod/fileRewriter/locateByRange.js +1 -1
  49. package/dist/src/codemod/fileRewriter/parse.js +2 -2
  50. package/dist/src/codemod/fileRewriter/print.js +2 -2
  51. package/dist/src/codemod/historyPaths.js +1 -1
  52. package/dist/src/codemod/listResources.js +1 -1
  53. package/dist/src/codemod/llmFallback/apply.js +1 -1
  54. package/dist/src/codemod/llmFallback/claudeTier.js +1 -1
  55. package/dist/src/codemod/llmFallback/egressGate.js +1 -1
  56. package/dist/src/codemod/llmFallback/morphTier.js +2 -2
  57. package/dist/src/codemod/llmFallback/prompt.js +13 -13
  58. package/dist/src/codemod/llmFallback/runFallback.js +1 -1
  59. package/dist/src/codemod/llmFallback/shouldTryFallback.js +1 -1
  60. package/dist/src/codemod/llmFallback/signals.js +1 -1
  61. package/dist/src/codemod/llmFallback/telemetryEvents.js +1 -1
  62. package/dist/src/codemod/llmFallback/tierRunner.js +1 -1
  63. package/dist/src/codemod/registry.js +1 -1
  64. package/dist/src/codemod/semanticIndex/classifyControlFlow.js +1 -1
  65. package/dist/src/codemod/semanticIndex/findReferences.js +2 -2
  66. package/dist/src/codemod/semanticIndex/listImports.js +1 -1
  67. package/dist/src/codemod/semanticIndex/locateByShape.js +1 -1
  68. package/dist/src/codemod/semanticIndex/projectCache.js +1 -1
  69. package/dist/src/codemod/semanticIndex/resolveConstructByLiteralProperty.js +1 -1
  70. package/dist/src/codemod/validationGate/gates/classify.js +1 -1
  71. package/dist/src/codemod/validationGate/gates/locate.js +1 -1
  72. package/dist/src/codemod/validationGate/types.js +1 -1
  73. package/dist/src/detection/index.js +1 -1
  74. package/dist/src/dns/bindParser.js +2 -2
  75. package/dist/src/dns/bindWriter.js +2 -2
  76. package/dist/src/dns/domainFileGenerator.js +18 -28
  77. package/dist/src/dns/domainRecords.d.ts +11 -0
  78. package/dist/src/dns/domainRecords.js +1 -1
  79. package/dist/src/generation/common.js +7 -7
  80. package/dist/src/generation/compute/ec2.js +3 -3
  81. package/dist/src/generation/compute/ecs.js +24 -24
  82. package/dist/src/generation/compute/lambda.js +8 -8
  83. package/dist/src/generation/compute/shared.js +4 -4
  84. package/dist/src/generation/compute.js +5 -5
  85. package/dist/src/generation/database.js +18 -18
  86. package/dist/src/generation/generatePatternCode.js +16 -16
  87. package/dist/src/generation/infrastructure.js +14 -14
  88. package/dist/src/generation/messagingConnections.js +1 -1
  89. package/dist/src/generation/storage.js +14 -14
  90. package/dist/src/generation/storageConnections.js +1 -1
  91. package/dist/src/planning/generateResourceChange.js +1 -1
  92. package/dist/src/planning/openNextPlanning.js +1 -1
  93. package/dist/src/planning/resourceAddition.js +1 -1
  94. package/dist/src/planning/resourceConnections.js +1 -1
  95. package/dist/src/planning/resourcePlanning.js +1 -1
  96. package/dist/src/planning/staticSitePlanning.js +1 -1
  97. package/dist/src/presets/patternTierPresets.js +1 -1
  98. package/dist/src/presets/storagePresets.js +1 -1
  99. package/dist/src/presets/tierPresets.js +1 -1
  100. package/dist/src/schemas/baseSchemas.js +2 -2
  101. package/dist/src/schemas/computeSchemas.js +1 -1
  102. package/dist/src/schemas/constants.js +1 -1
  103. package/dist/src/schemas/devRolePolicies.js +1 -1
  104. package/dist/src/schemas/instanceTypeArchitecture.js +1 -1
  105. package/dist/src/schemas/securityBoundary.js +1 -1
  106. package/dist/src/types/Result.js +1 -1
  107. package/dist/src/validation/validationPatterns.js +1 -1
  108. package/dist/src/version.d.ts +1 -1
  109. package/dist/src/version.js +1 -1
  110. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- import{formatValue as c}from"../common.js";function a(n){return!!(n.needsConnection&&n.connectedDatabase?.length)}function i(n){return!!n.connectedStorage?.length}function s(n){return!!n.connectedMessaging?.length}function f(n){return a(n)||i(n)||s(n)}const g={ENVIRONMENT:{__expression:"getConfig().environment"}};function p(n,e){return Object.entries(n).map(([o,t])=>`${e}${o}: ${c(t)},`).join(`
2
- `)}function m(n,e,o){return n.length<=1?`{ ${n[0]??""} }`:`{${n.map(r=>`
3
- ${o}${r},`).join("")}
4
- ${e}}`}export{g as BASE_ENVIRONMENT_VARS,f as computeHasConnections,a as computeHasDatabaseConnections,s as computeHasMessagingConnections,i as computeHasStorageConnections,m as formatCompactOrExpandedObject,p as formatEnvBlock};
1
+ var a=Object.defineProperty;var e=(n,o)=>a(n,"name",{value:o,configurable:!0});import{formatValue as i}from"../common.js";function s(n){return!!(n.needsConnection&&n.connectedDatabase?.length)}e(s,"computeHasDatabaseConnections");function u(n){return!!n.connectedStorage?.length}e(u,"computeHasStorageConnections");function f(n){return!!n.connectedMessaging?.length}e(f,"computeHasMessagingConnections");function m(n){return s(n)||u(n)||f(n)}e(m,"computeHasConnections");const l={ENVIRONMENT:{__expression:"getConfig().environment"}};function x(n,o){return Object.entries(n).map(([t,r])=>`${o}${t}: ${i(r)},`).join(`
2
+ `)}e(x,"formatEnvBlock");function $(n,o,t){return n.length<=1?`{ ${n[0]??""} }`:`{${n.map(c=>`
3
+ ${t}${c},`).join("")}
4
+ ${o}}`}e($,"formatCompactOrExpandedObject");export{l as BASE_ENVIRONMENT_VARS,m as computeHasConnections,s as computeHasDatabaseConnections,f as computeHasMessagingConnections,u as computeHasStorageConnections,$ as formatCompactOrExpandedObject,x as formatEnvBlock};
@@ -1,8 +1,8 @@
1
- import{getVariableName as p,escapeStringLiteral as r}from"./common.js";import{generateLambdaCode as u,generateLambdaConnectionsCode as g}from"./compute/lambda.js";import{generateEc2Code as l}from"./compute/ec2.js";import{generateEcsCode as f}from"./compute/ecs.js";import{generateLambdaCode as L,generateLambdaConnectionsCode as N}from"./compute/lambda.js";import{generateEc2Code as k}from"./compute/ec2.js";import{generateEcsCode as v}from"./compute/ecs.js";function E(o,d){if(o.compute.length===0)return"";let t="";for(let n=0;n<o.compute.length;n++){const e=o.compute[n],c=d.has(e.name)||e.scheduleExpression!==void 0,a=p(e),s=o.database.length>0||o.s3.length>0||n>0,i=c?`const ${a} = `:"";switch(t+=`${s?`
2
- `:""}${i}app.addCompute(
1
+ var u=Object.defineProperty;var c=(t,a)=>u(t,"name",{value:a,configurable:!0});import{getVariableName as g,escapeStringLiteral as r}from"./common.js";import{generateLambdaCode as l,generateLambdaConnectionsCode as f}from"./compute/lambda.js";import{generateEc2Code as h}from"./compute/ec2.js";import{generateEcsCode as C}from"./compute/ecs.js";import{generateLambdaCode as k,generateLambdaConnectionsCode as V}from"./compute/lambda.js";import{generateEc2Code as F}from"./compute/ec2.js";import{generateEcsCode as U}from"./compute/ecs.js";function L(t,a){if(t.compute.length===0)return"";let o="";for(let n=0;n<t.compute.length;n++){const e=t.compute[n],s=a.has(e.name)||e.scheduleExpression!==void 0,d=g(e),i=t.database.length>0||t.s3.length>0||n>0,m=s?`const ${d} = `:"";switch(o+=`${i?`
2
+ `:""}${m}app.addCompute(
3
3
  ComputeFactory.build(${r(e.name)}, {
4
- type: ${r(e.type)},`,e.type){case"lambda":t+=u(e),t+=g(e,o);break;case"ec2":t+=l(e);break;case"ecs":t+=f(e,o);break;default:{const m=e.type;throw new Error(`Unhandled compute type: ${String(m)}`)}}t+=`
4
+ type: ${r(e.type)},`,e.type){case"lambda":o+=l(e),o+=f(e,t);break;case"ec2":o+=h(e);break;case"ecs":o+=C(e,t);break;default:{const p=e.type;throw new Error(`Unhandled compute type: ${String(p)}`)}}o+=`
5
5
  })
6
6
  );
7
- `,e.scheduleExpression!==void 0&&(t+=`app.addSchedule(${r(`${e.name}Schedule`)}, { schedule: ${r(e.scheduleExpression)}, target: ${a} });
8
- `)}return t}export{E as generateComputeCode,k as generateEc2Code,v as generateEcsCode,L as generateLambdaCode,N as generateLambdaConnectionsCode};
7
+ `,e.scheduleExpression!==void 0&&(o+=`app.addSchedule(${r(`${e.name}Schedule`)}, { schedule: ${r(e.scheduleExpression)}, target: ${d} });
8
+ `)}return o}c(L,"generateComputeCode");export{L as generateComputeCode,F as generateEc2Code,U as generateEcsCode,k as generateLambdaCode,V as generateLambdaConnectionsCode};
@@ -1,26 +1,26 @@
1
- import{buildProperty as o,formatValue as f,getVariableName as d,emitExtraProperties as S,escapeStringLiteral as a,formatStringArray as A,emitProductionAlertsTopicSpread as b}from"./common.js";const c=Object.freeze({HOST:"DATABASE_HOST",PORT:"DATABASE_PORT",NAME:"DATABASE_NAME",SSL:"DATABASE_SSL",USERNAME:"DATABASE_USERNAME",PASSWORD:"DATABASE_PASSWORD"}),p=Object.freeze({USERNAME:"username",PASSWORD:"password"});function y(e,n){const r=n.connectedDatabase;return r?.length?e.database.filter(t=>r.includes(t.name)):[]}function g(e,n){return`${e}.getCredentials().getImport(${a(n)})`}function m(e){const n=[],r=(t,l,s)=>{n.push({key:t,expression:l,isSecret:s})};if(e.length===1){const t=d(e[0]);r(c.HOST,`${t}.getHostEndpoint()`,!1),r(c.PORT,`${t}.getHostPort()`,!1),r(c.NAME,`${t}.getDatabaseName()`,!1),r(c.SSL,'"true"',!1),r(c.USERNAME,g(t,p.USERNAME),!0),r(c.PASSWORD,g(t,p.PASSWORD),!0)}else for(const[t,l]of e.entries()){const s=d(l),i=t===0?"":`_${t+1}`;r(`${c.HOST}${i}`,`${s}.getHostEndpoint()`,!1),r(`${c.PORT}${i}`,`${s}.getHostPort()`,!1),r(`${c.NAME}${i}`,`${s}.getDatabaseName()`,!1),r(`${c.SSL}${i}`,'"true"',!1),r(`${c.USERNAME}${i}`,g(s,p.USERNAME),!0),r(`${c.PASSWORD}${i}`,g(s,p.PASSWORD),!0)}return n}function k(e){return`connections: [${e.map(r=>d(r)).join(", ")}],`}function E(e){return e.expression==='"true"'?"true":{__expression:e.expression}}function I(e,n){const r={},t={};if(!n.needsConnection||!n.connectedDatabase?.length)return{env:r,secrets:t};const l=y(e,n),s=m(l);for(const i of s){const u=E(i);i.isSecret?t[i.key]={__expression:i.expression}:r[i.key]=u}return{env:r,secrets:t}}function $(e){let n="";return n+=o(e.port!==void 0,"port",e.port),n+=o(e.deletionProtection!==void 0,"deletionProtection",e.deletionProtection),n+=o(e.snapshotIdentifier!==void 0,"snapshotIdentifier",e.snapshotIdentifier,"string"),n+=o(e.snapshotUsername!==void 0,"snapshotUsername",e.snapshotUsername,"string"),n+=o(e.monitoringInterval!==void 0,"monitoringInterval",e.monitoringInterval),n}function R(e){if(e.type!=="Instance")return"";let n="";return n+=o(e.instanceType!==void 0,"instanceType",e.instanceType,"string"),n+=o(e.allocatedStorage!==void 0,"allocatedStorage",e.allocatedStorage),n+=o(e.multiAz!==void 0,"multiAz",e.multiAz),n+=o(e.publiclyAccessible!==void 0,"publiclyAccessible",e.publiclyAccessible),n+=o(e.encryption!==void 0,"encryption",e.encryption,"object"),n+=o(e.databaseInsights!==void 0,"databaseInsights",e.databaseInsights,"boolean-or-object"),n+=o(e.proxy!==void 0,"proxy",e.proxy,"boolean-or-object"),n+=o(e.readReplica!==void 0,"readReplica",e.readReplica,"boolean-or-object"),n+=o(e.credentials!==void 0,"credentials",e.credentials,"object"),n+=o(e.backupRetention!==void 0,"backupRetention",e.backupRetention),n}function h(e){if(e.type!=="Aurora"&&e.type!=="GlobalAurora")return"";let n="";return n+=o(e.encryption!==void 0,"encryption",e.encryption,"object"),n+=o(e.databaseInsights!==void 0,"databaseInsights",e.databaseInsights,"boolean-or-object"),n+=o(e.proxy!==void 0,"proxy",e.proxy,"boolean-or-object"),n+=o(e.credentials!==void 0,"credentials",e.credentials,"object"),n+=o(e.writer!==void 0,"writer",e.writer,"object"),n+=o(e.readers!==void 0,"readers",e.readers,"boolean-or-object"),n+=o(e.backupRetention!==void 0,"backupRetention",e.backupRetention),n+=o(e.preferredMaintenanceWindow!==void 0,"preferredMaintenanceWindow",e.preferredMaintenanceWindow,"string"),n}function D(e){if(e.type!=="GlobalAurora")return"";let n="";return n+=o(e.primaryRegion!==void 0,"primaryRegion",e.primaryRegion,"string"),e.secondaryRegions!==void 0&&e.secondaryRegions.length>0&&(n+=`
2
- secondaryRegions: [${A(e.secondaryRegions)}],`),n+=o(e.globalClusterIdentifier!==void 0,"globalClusterIdentifier",e.globalClusterIdentifier,"string"),n+=o(e.enableGlobalWriteForwarding!==void 0,"enableGlobalWriteForwarding",e.enableGlobalWriteForwarding),n}function x(e,n){return n.compute.some(r=>r.needsConnection&&r.connectedDatabase?.includes(e.name))}function C(e){if(e.database.length===0)return"";let n="";for(let r=0;r<e.database.length;r++){const t=e.database[r],l=d(t),s=x(t,e),i=r>0,u=s?`const ${l} = `:"";n+=`${i?`
3
- `:""}${u}app.addDatabase(
4
- DatabaseFactory.build(${a(t.name)}, {
1
+ var b=Object.defineProperty;var s=(e,n)=>b(e,"name",{value:n,configurable:!0});import{buildProperty as o,formatValue as p,getVariableName as f,emitExtraProperties as A,escapeStringLiteral as u,formatStringArray as y,emitProductionAlertsTopicSpread as m}from"./common.js";const l=Object.freeze({HOST:"DATABASE_HOST",PORT:"DATABASE_PORT",NAME:"DATABASE_NAME",SSL:"DATABASE_SSL",USERNAME:"DATABASE_USERNAME",PASSWORD:"DATABASE_PASSWORD"}),g=Object.freeze({USERNAME:"username",PASSWORD:"password"});function E(e,n){const r=n.connectedDatabase;return r?.length?e.database.filter(t=>r.includes(t.name)):[]}s(E,"getConnectedDatabases");function S(e,n){return`${e}.getCredentials().getImport(${u(n)})`}s(S,"getCredentialExpression");function $(e){const n=[],r=s((t,a,c)=>{n.push({key:t,expression:a,isSecret:c})},"addEntry");if(e.length===1){const t=f(e[0]);r(l.HOST,`${t}.getHostEndpoint()`,!1),r(l.PORT,`${t}.getHostPort()`,!1),r(l.NAME,`${t}.getDatabaseName()`,!1),r(l.SSL,'"true"',!1),r(l.USERNAME,S(t,g.USERNAME),!0),r(l.PASSWORD,S(t,g.PASSWORD),!0)}else for(const[t,a]of e.entries()){const c=f(a),i=t===0?"":`_${t+1}`;r(`${l.HOST}${i}`,`${c}.getHostEndpoint()`,!1),r(`${l.PORT}${i}`,`${c}.getHostPort()`,!1),r(`${l.NAME}${i}`,`${c}.getDatabaseName()`,!1),r(`${l.SSL}${i}`,'"true"',!1),r(`${l.USERNAME}${i}`,S(c,g.USERNAME),!0),r(`${l.PASSWORD}${i}`,S(c,g.PASSWORD),!0)}return n}s($,"generateDatabaseEnvVarEntries");function O(e){return`connections: [${e.map(r=>f(r)).join(", ")}],`}s(O,"formatConnectionsCode");function R(e){return e.expression==='"true"'?"true":{__expression:e.expression}}s(R,"toDatabaseEnvVarValue");function V(e,n){const r={},t={};if(!n.needsConnection||!n.connectedDatabase?.length)return{env:r,secrets:t};const a=E(e,n),c=$(a);for(const i of c){const d=R(i);i.isSecret?t[i.key]={__expression:i.expression}:r[i.key]=d}return{env:r,secrets:t}}s(V,"buildDatabaseEnvVars");function h(e){let n="";return n+=o(e.port!==void 0,"port",e.port),n+=o(e.deletionProtection!==void 0,"deletionProtection",e.deletionProtection),n+=o(e.snapshotIdentifier!==void 0,"snapshotIdentifier",e.snapshotIdentifier,"string"),n+=o(e.snapshotUsername!==void 0,"snapshotUsername",e.snapshotUsername,"string"),n+=o(e.monitoringInterval!==void 0,"monitoringInterval",e.monitoringInterval),n}s(h,"generateDatabaseSharedProps");function D(e){if(e.type!=="Instance")return"";let n="";return n+=o(e.instanceType!==void 0,"instanceType",e.instanceType,"string"),n+=o(e.allocatedStorage!==void 0,"allocatedStorage",e.allocatedStorage),n+=o(e.multiAz!==void 0,"multiAz",e.multiAz),n+=o(e.publiclyAccessible!==void 0,"publiclyAccessible",e.publiclyAccessible),n+=o(e.encryption!==void 0,"encryption",e.encryption,"object"),n+=o(e.databaseInsights!==void 0,"databaseInsights",e.databaseInsights,"boolean-or-object"),n+=o(e.proxy!==void 0,"proxy",e.proxy,"boolean-or-object"),n+=o(e.readReplica!==void 0,"readReplica",e.readReplica,"boolean-or-object"),n+=o(e.credentials!==void 0,"credentials",e.credentials,"object"),n+=o(e.backupRetention!==void 0,"backupRetention",e.backupRetention),n}s(D,"generateDatabaseInstanceProps");function x(e){if(e.type!=="Aurora"&&e.type!=="GlobalAurora")return"";let n="";return n+=o(e.encryption!==void 0,"encryption",e.encryption,"object"),n+=o(e.databaseInsights!==void 0,"databaseInsights",e.databaseInsights,"boolean-or-object"),n+=o(e.proxy!==void 0,"proxy",e.proxy,"boolean-or-object"),n+=o(e.credentials!==void 0,"credentials",e.credentials,"object"),n+=o(e.writer!==void 0,"writer",e.writer,"object"),n+=o(e.readers!==void 0,"readers",e.readers,"boolean-or-object"),n+=o(e.backupRetention!==void 0,"backupRetention",e.backupRetention),n+=o(e.preferredMaintenanceWindow!==void 0,"preferredMaintenanceWindow",e.preferredMaintenanceWindow,"string"),n}s(x,"generateDatabaseAuroraProps");function N(e){if(e.type!=="GlobalAurora")return"";let n="";return n+=o(e.primaryRegion!==void 0,"primaryRegion",e.primaryRegion,"string"),e.secondaryRegions!==void 0&&e.secondaryRegions.length>0&&(n+=`
2
+ secondaryRegions: [${y(e.secondaryRegions)}],`),n+=o(e.globalClusterIdentifier!==void 0,"globalClusterIdentifier",e.globalClusterIdentifier,"string"),n+=o(e.enableGlobalWriteForwarding!==void 0,"enableGlobalWriteForwarding",e.enableGlobalWriteForwarding),n}s(N,"generateDatabaseGlobalAuroraProps");function T(e,n){return n.compute.some(r=>r.needsConnection&&r.connectedDatabase?.includes(e.name))}s(T,"databaseNeedsVariable");function j(e){if(e.database.length===0)return"";let n="";for(let r=0;r<e.database.length;r++){const t=e.database[r],a=f(t),c=T(t,e),i=r>0,d=c?`const ${a} = `:"";n+=`${i?`
3
+ `:""}${d}app.addDatabase(
4
+ DatabaseFactory.build(${u(t.name)}, {
5
5
  vpc: app.getVpc(),
6
- type: ${a(t.type)},
7
- databaseName: ${a(t.databaseName)},`,t.engineExpression?n+=`
6
+ type: ${u(t.type)},
7
+ databaseName: ${u(t.databaseName)},`,t.engineExpression?n+=`
8
8
  engine: ${t.engineExpression},`:t.databaseEngine&&(n+=`
9
- databaseEngine: ${a(t.databaseEngine)},`),n+=$(t),n+=R(t),n+=h(t),n+=D(t),n+=S(t.extraProperties),t.alarms===!1?n+=`
9
+ databaseEngine: ${u(t.databaseEngine)},`),n+=h(t),n+=D(t),n+=x(t),n+=N(t),n+=A(t.extraProperties),t.alarms===!1?n+=`
10
10
  alarms: false,`:typeof t.alarms=="object"&&(n+=`
11
- alarms: ${f(t.alarms," ")},`),t.type!=="GlobalAurora"&&(n+=b()),n+=`
11
+ alarms: ${p(t.alarms," ")},`),t.type!=="GlobalAurora"&&(n+=m()),n+=`
12
12
  })
13
13
  );
14
- `}return n}function O(e){if(!e.clickhouse||e.clickhouse.length===0)return"";let n="";for(let r=0;r<e.clickhouse.length;r++){const t=e.clickhouse[r],l=d(t),s=N(t,e),i=r>0?`
15
- `:"",u=s?`const ${l} = `:"";n+=`${i}${u}app.addDatabase(
16
- DatabaseFactory.build(${a(t.name)}, {
14
+ `}return n}s(j,"generateDatabaseCode");function w(e){if(!e.clickhouse||e.clickhouse.length===0)return"";let n="";for(let r=0;r<e.clickhouse.length;r++){const t=e.clickhouse[r],a=f(t),c=P(t,e),i=r>0?`
15
+ `:"",d=c?`const ${a} = `:"";n+=`${i}${d}app.addDatabase(
16
+ DatabaseFactory.build(${u(t.name)}, {
17
17
  type: "ClickHouse",
18
- databaseName: ${a(t.databaseName)},`,t.instanceType!==void 0&&(n+=`
19
- instanceType: ${a(t.instanceType)},`),t.coldTier!==void 0&&(n+=`
20
- coldTier: ${f(t.coldTier," ")},`),t.optimiseSchedule!==void 0&&(n+=`
21
- optimiseSchedule: ${f(t.optimiseSchedule," ")},`),t.backupSchedule!==void 0&&(n+=`
22
- backupSchedule: ${f(t.backupSchedule," ")},`),t.backupRetentionDays!==void 0&&(n+=`
23
- backupRetentionDays: ${t.backupRetentionDays},`),n+=S(t.extraProperties),n+=`
18
+ databaseName: ${u(t.databaseName)},`,t.instanceType!==void 0&&(n+=`
19
+ instanceType: ${u(t.instanceType)},`),t.coldTier!==void 0&&(n+=`
20
+ coldTier: ${p(t.coldTier," ")},`),t.optimiseSchedule!==void 0&&(n+=`
21
+ optimiseSchedule: ${p(t.optimiseSchedule," ")},`),t.backupSchedule!==void 0&&(n+=`
22
+ backupSchedule: ${p(t.backupSchedule," ")},`),t.backupRetentionDays!==void 0&&(n+=`
23
+ backupRetentionDays: ${t.backupRetentionDays},`),n+=A(t.extraProperties),n+=`
24
24
  })
25
25
  );
26
- `}return n}function N(e,n){return n.compute.some(r=>r.connectedDatabase?.includes(e.name))}export{p as CREDENTIAL_KEYS,c as DATABASE_ENV_VARS,I as buildDatabaseEnvVars,x as databaseNeedsVariable,k as formatConnectionsCode,O as generateClickHouseCode,C as generateDatabaseCode,m as generateDatabaseEnvVarEntries,y as getConnectedDatabases,E as toDatabaseEnvVarValue};
26
+ `}return n}s(w,"generateClickHouseCode");function P(e,n){return n.compute.some(r=>r.connectedDatabase?.includes(e.name))}s(P,"clickhouseNeedsVariable");export{g as CREDENTIAL_KEYS,l as DATABASE_ENV_VARS,V as buildDatabaseEnvVars,T as databaseNeedsVariable,O as formatConnectionsCode,w as generateClickHouseCode,j as generateDatabaseCode,$ as generateDatabaseEnvVarEntries,E as getConnectedDatabases,R as toDatabaseEnvVarValue};
@@ -1,34 +1,34 @@
1
- import{toPascalCase as y,formatValue as p}from"./common.js";import{PATTERN_REGISTRY as f}from"@fjall/util";const a=Object.freeze({database:{type:"Instance",backupRetention:7,deletionProtection:!0},compute:{server:{memorySize:1536,timeout:30},imageOptimisation:{memorySize:1536,timeout:30},revalidation:{memorySize:768,timeout:300}}});function s(n,e,t){return e===void 0?"":`
2
- ${t}${n}: ${e},`}function m(n,e,t){return e===void 0?"":`
3
- ${t}${n}: ${JSON.stringify(e)},`}function d(n,e,t){return e===void 0?"":e===!1?`
1
+ var f=Object.defineProperty;var r=(n,e)=>f(n,"name",{value:e,configurable:!0});import{toPascalCase as $,formatValue as l}from"./common.js";import{PATTERN_REGISTRY as b}from"@fjall/util";const m=Object.freeze({database:{type:"Instance",backupRetention:7,deletionProtection:!0},compute:{server:{memorySize:1536,timeout:30},imageOptimisation:{memorySize:1536,timeout:30},revalidation:{memorySize:768,timeout:300}}});function c(n,e,t){return e===void 0?"":`
2
+ ${t}${n}: ${e},`}r(c,"emitScalar");function s(n,e,t){return e===void 0?"":`
3
+ ${t}${n}: ${JSON.stringify(e)},`}r(s,"emitStringField");function u(n,e,t){return e===void 0?"":e===!1?`
4
4
  ${t}${n}: false,`:`
5
- ${t}${n}: ${p(e,t)},`}function r(n,e,t){return e===void 0||Object.keys(e).length===0?"":`
6
- ${t}${n}: ${p(e,t)},`}function $(n){const e=n??{},t=" ",c=e.type??a.database.type,o=e.backupRetention??a.database.backupRetention,u=e.deletionProtection??a.database.deletionProtection;let i=`
7
- ${t}type: "${c}",`;return i+=m("databaseName",e.databaseName,t),i+=m("databaseEngine",e.databaseEngine,t),c==="Instance"&&e.instanceType!==void 0&&(i+=m("instanceType",e.instanceType,t)),i+=s("allocatedStorage",e.allocatedStorage,t),i+=s("port",e.port,t),i+=`
5
+ ${t}${n}: ${l(e,t)},`}r(u,"emitObjectOrFalse");function a(n,e,t){return e===void 0||Object.keys(e).length===0?"":`
6
+ ${t}${n}: ${l(e,t)},`}r(a,"emitObject");function g(n){const e=n??{},t=" ",d=e.type??m.database.type,o=e.backupRetention??m.database.backupRetention,p=e.deletionProtection??m.database.deletionProtection;let i=`
7
+ ${t}type: "${d}",`;return i+=s("databaseName",e.databaseName,t),i+=s("databaseEngine",e.databaseEngine,t),d==="Instance"&&e.instanceType!==void 0&&(i+=s("instanceType",e.instanceType,t)),i+=c("allocatedStorage",e.allocatedStorage,t),i+=c("port",e.port,t),i+=`
8
8
  ${t}backupRetention: ${o},`,i+=`
9
- ${t}deletionProtection: ${u},`,i+=s("publiclyAccessible",e.publiclyAccessible,t),i+=m("allowedIpCidr",e.allowedIpCidr,t),i+=s("multiAz",e.multiAz,t),i+=s("allowVpcAccess",e.allowVpcAccess,t),i+=s("monitoringInterval",e.monitoringInterval,t),i+=m("preferredMaintenanceWindow",e.preferredMaintenanceWindow,t),i+=m("snapshotIdentifier",e.snapshotIdentifier,t),i+=m("snapshotUsername",e.snapshotUsername,t),i+=d("readReplica",e.readReplica,t),i+=r("writer",e.writer,t),i+=d("readers",e.readers,t),i+=d("databaseInsights",e.databaseInsights,t),i+=d("proxy",e.proxy,t),i+=r("credentials",e.credentials,t),i+=r("encryption",e.encryption,t),`
9
+ ${t}deletionProtection: ${p},`,i+=c("publiclyAccessible",e.publiclyAccessible,t),i+=s("allowedIpCidr",e.allowedIpCidr,t),i+=c("multiAz",e.multiAz,t),i+=c("allowVpcAccess",e.allowVpcAccess,t),i+=c("monitoringInterval",e.monitoringInterval,t),i+=s("preferredMaintenanceWindow",e.preferredMaintenanceWindow,t),i+=s("snapshotIdentifier",e.snapshotIdentifier,t),i+=s("snapshotUsername",e.snapshotUsername,t),i+=u("readReplica",e.readReplica,t),i+=a("writer",e.writer,t),i+=u("readers",e.readers,t),i+=u("databaseInsights",e.databaseInsights,t),i+=u("proxy",e.proxy,t),i+=a("credentials",e.credentials,t),i+=a("encryption",e.encryption,t),`
10
10
  database: {${i}
11
- },`}function b(n){const e=n??{},t=e.server?.memorySize??a.compute.server.memorySize,c=e.server?.timeout??a.compute.server.timeout,o=e.imageOptimisation?.memorySize??a.compute.imageOptimisation.memorySize,u=e.imageOptimisation?.timeout??a.compute.imageOptimisation.timeout,i=e.revalidation?.memorySize??a.compute.revalidation.memorySize,l=e.revalidation?.timeout??a.compute.revalidation.timeout;return`
11
+ },`}r(g,"emitDatabaseBlock");function S(n){const e=n??{},t=e.server?.memorySize??m.compute.server.memorySize,d=e.server?.timeout??m.compute.server.timeout,o=e.imageOptimisation?.memorySize??m.compute.imageOptimisation.memorySize,p=e.imageOptimisation?.timeout??m.compute.imageOptimisation.timeout,i=e.revalidation?.memorySize??m.compute.revalidation.memorySize,y=e.revalidation?.timeout??m.compute.revalidation.timeout;return`
12
12
  compute: {
13
13
  server: {
14
14
  memorySize: ${t},
15
- timeout: ${c},
15
+ timeout: ${d},
16
16
  },
17
17
  imageOptimisation: {
18
18
  memorySize: ${o},
19
- timeout: ${u},
19
+ timeout: ${p},
20
20
  },
21
21
  revalidation: {
22
22
  memorySize: ${i},
23
- timeout: ${l},
23
+ timeout: ${y},
24
24
  },
25
- },`}function g(n){return r("storage",n," ")}function S(n){return r("messaging",n," ")}function v(n){return r("cdn",n," ")}function z(n){return r("environment",n," ")}function I(n){const e=" ";let t="";return t+=m("source",n.source,e),t+=r("build",n.build,e),t+=m("routing",n.routing,e),t+=r("security",n.security,e),n.domain!==void 0&&n.domain!==""&&(t+=`
26
- ${e}domain: ${JSON.stringify(n.domain)},`),t+=r("forms",n.forms,e),t+=r("cdn",n.cdn,e),t}function k(n){if(!n.patternConfig)return"";const e=n.patternConfig;let o=`app.addPattern(
27
- PatternFactory.build("${`${y(e.name)}${f[e.type].constructIdSuffix}`}", {
25
+ },`}r(S,"emitComputeBlock");function v(n){return a("storage",n," ")}r(v,"emitStorageBlock");function z(n){return a("messaging",n," ")}r(z,"emitMessagingBlock");function I(n){return a("cdn",n," ")}r(I,"emitCdnBlock");function O(n){return a("environment",n," ")}r(O,"emitEnvironmentBlock");function T(n){const e=" ";let t="";return t+=s("source",n.source,e),t+=a("build",n.build,e),t+=s("routing",n.routing,e),t+=a("security",n.security,e),n.domain!==void 0&&n.domain!==""&&(t+=`
26
+ ${e}domain: ${JSON.stringify(n.domain)},`),t+=a("forms",n.forms,e),t+=a("cdn",n.cdn,e),t}r(T,"emitStaticSiteFields");function C(n){if(!n.patternConfig)return"";const e=n.patternConfig;let o=`app.addPattern(
27
+ PatternFactory.build("${`${$(e.name)}${b[e.type].constructIdSuffix}`}", {
28
28
  type: "${e.type}",
29
29
  name: "${e.name}",`;return e.type==="payload"||e.type==="nextjs"?(e.domain!==void 0&&e.domain!==""&&(o+=`
30
- domain: "${e.domain}",`),o+=$(e.database),o+=b(e.compute),o+=g(e.storage),o+=S(e.messaging),o+=v(e.cdn),o+=z(e.environment)):o+=I(e),o+=`
30
+ domain: "${e.domain}",`),o+=g(e.database),o+=S(e.compute),o+=v(e.storage),o+=z(e.messaging),o+=I(e.cdn),o+=O(e.environment)):o+=T(e),o+=`
31
31
  })
32
32
  );
33
33
 
34
- `,o}export{a as OPENNEXT_DEFAULTS,k as generatePatternCodeWithComments};
34
+ `,o}r(C,"generatePatternCodeWithComments");export{m as OPENNEXT_DEFAULTS,C as generatePatternCodeWithComments};
@@ -1,39 +1,39 @@
1
- import{toVariableName as p,formatValue as a,resolveResourceVariable as f,emitExtraProperties as g}from"./common.js";import{COMPUTE_TYPE as d}from"../schemas/constants.js";import{OPENNEXT_DEFAULTS as O,generatePatternCodeWithComments as P}from"./generatePatternCode.js";const u="fjall:costAllocation:owner",h="engineering";function l(e){return typeof e=="object"&&e!==null&&Object.keys(e).length===0}function m(e){const t={...e};return l(t.flowLogs)&&delete t.flowLogs,t}function A(e){if(!e.additionalNetworks||e.additionalNetworks.length===0)return"";let t="";for(const n of e.additionalNetworks){const i=p(n.name),o={};n.maxAzs!==void 0&&(o.maxAzs=n.maxAzs),n.natGateways!==void 0&&(o.natGateways=n.natGateways),n.flowLogs!==void 0&&(o.flowLogs=n.flowLogs),n.vpcEndpoints!==void 0&&(o.vpcEndpoints=n.vpcEndpoints);const c=m(o);t+=`const ${i} = app.addNetwork(
2
- NetworkFactory.build("${n.name}", ${a(c," ")})
1
+ var g=Object.defineProperty;var s=(e,t)=>g(e,"name",{value:t,configurable:!0});import{toVariableName as h,formatValue as d,resolveResourceVariable as u,emitExtraProperties as l}from"./common.js";import{COMPUTE_TYPE as f}from"../schemas/constants.js";import{OPENNEXT_DEFAULTS as F,generatePatternCodeWithComments as E}from"./generatePatternCode.js";const m="fjall:costAllocation:owner",b="engineering";function y(e){return typeof e=="object"&&e!==null&&Object.keys(e).length===0}s(y,"isEmptyObject");function p(e){const t={...e};return y(t.flowLogs)&&delete t.flowLogs,t}s(p,"cleanNetworkConfig");function w(e){if(!e.additionalNetworks||e.additionalNetworks.length===0)return"";let t="";for(const n of e.additionalNetworks){const i=h(n.name),o={};n.maxAzs!==void 0&&(o.maxAzs=n.maxAzs),n.natGateways!==void 0&&(o.natGateways=n.natGateways),n.flowLogs!==void 0&&(o.flowLogs=n.flowLogs),n.vpcEndpoints!==void 0&&(o.vpcEndpoints=n.vpcEndpoints);const c=p(o);t+=`const ${i} = app.addNetwork(
2
+ NetworkFactory.build("${n.name}", ${d(c," ")})
3
3
  );
4
4
 
5
- `}return t}function $(e){const t={};return e.tags&&Object.keys(e.tags).length>0&&Object.assign(t,e.tags),t[u]||(t[u]=e.owner||h),`app.addTags({
5
+ `}return t}s(w,"generateNetworkCode");function C(e){const t={};return e.tags&&Object.keys(e.tags).length>0&&Object.assign(t,e.tags),t[m]||(t[m]=e.owner||b),`app.addTags({
6
6
  ${Object.entries(t).map(([i,o])=>` "${i}": "${o}"`).join(`,
7
7
  `)}
8
8
  });
9
9
 
10
- `}function k(e){let t=`
10
+ `}s(C,"generateTags");function N(e){let t=`
11
11
  const appName = "${e.appName}";
12
12
  `;const n=e.backup&&typeof e.backup=="object"?e.backup:void 0,i=e.tunnel&&typeof e.tunnel=="object"?e.tunnel:void 0,o=i?i.instanceType?`tunnel: { instanceType: "${i.instanceType}" }`:"tunnel: true":void 0;if(e.vpcId)t+=`const app = App.getApp(appName, {
13
13
  network: { useExisting: "${e.vpcId}" }`,n&&(t+=`,
14
14
  backup: { tier: "${n.tier}" }`),o&&(t+=`,
15
15
  ${o}`),t+=`
16
16
  });
17
- `;else if(e.network){const c=m(e.network);t+=`const app = App.getApp(appName, {
18
- network: ${a(c," ")}`,n&&(t+=`,
17
+ `;else if(e.network){const c=p(e.network);t+=`const app = App.getApp(appName, {
18
+ network: ${d(c," ")}`,n&&(t+=`,
19
19
  backup: { tier: "${n.tier}" }`),o&&(t+=`,
20
20
  ${o}`),t+=`
21
21
  });
22
22
  `}else t+="const app = App.getApp(appName, { network: false",n&&(t+=`, backup: { tier: "${n.tier}" }`),o&&(t+=`, ${o}`),t+=` });
23
23
  `;return t+=`
24
- `,t}function w(e){const t=[];if(e.patternConfig?t.push("PatternFactory"):(e.database.length>0&&t.push("DatabaseFactory"),e.s3.length>0&&t.push("StorageFactory"),e.compute.length>0&&t.push("ComputeFactory"),(e.compute.length>0||e.database.length>0)&&t.push("getConfig"),e.dynamodb&&e.dynamodb.length>0&&e.database.length===0&&t.push("DatabaseFactory"),e.clickhouse&&e.clickhouse.length>0&&e.database.length===0&&!(e.dynamodb&&e.dynamodb.length>0)&&t.push("DatabaseFactory"),e.sqs&&e.sqs.length>0&&t.push("MessagingFactory"),e.cdn&&t.push("CdnFactory"),e.compute.some(r=>r.type===d.LAMBDA&&r.deployment==="code")&&(t.push("Code"),t.push("Runtime")),e.compute.some(r=>r.type===d.LAMBDA&&r.functionUrl)&&t.push("FunctionUrlAuthType"),e.compute.some(r=>r.type===d.LAMBDA&&(r.architecture||r.deployment==="container"))&&t.push("Architecture")),e.additionalNetworks&&e.additionalNetworks.length>0&&t.push("NetworkFactory"),e.additionalManagedImports){for(const o of e.additionalManagedImports)if(o.moduleSpecifier==="@fjall/components-infrastructure"||o.moduleSpecifier==="@fjall/infrastructure")for(const c of o.namedImports)t.includes(c)||t.push(c)}let i=`#!/usr/bin/env node
24
+ `,t}s(N,"generateAppInit");function j(e){const t=[];if(e.patternConfig?t.push("PatternFactory"):(e.database.length>0&&t.push("DatabaseFactory"),e.s3.length>0&&t.push("StorageFactory"),e.compute.length>0&&t.push("ComputeFactory"),(e.compute.length>0||e.database.length>0)&&t.push("getConfig"),e.dynamodb&&e.dynamodb.length>0&&e.database.length===0&&t.push("DatabaseFactory"),e.clickhouse&&e.clickhouse.length>0&&e.database.length===0&&!(e.dynamodb&&e.dynamodb.length>0)&&t.push("DatabaseFactory"),e.sqs&&e.sqs.length>0&&t.push("MessagingFactory"),e.cdn&&t.push("CdnFactory"),e.compute.some(r=>r.type===f.LAMBDA&&r.deployment==="code")&&(t.push("Code"),t.push("Runtime")),e.compute.some(r=>r.type===f.LAMBDA&&r.functionUrl)&&t.push("FunctionUrlAuthType"),e.compute.some(r=>r.type===f.LAMBDA&&(r.architecture||r.deployment==="container"))&&t.push("Architecture")),e.additionalNetworks&&e.additionalNetworks.length>0&&t.push("NetworkFactory"),e.additionalManagedImports){for(const o of e.additionalManagedImports)if(o.moduleSpecifier==="@fjall/components-infrastructure"||o.moduleSpecifier==="@fjall/infrastructure")for(const c of o.namedImports)t.includes(c)||t.push(c)}let i=`#!/usr/bin/env node
25
25
 
26
26
  import { App${t.length>0?`, ${t.join(", ")}`:""} } from "@fjall/components-infrastructure";
27
27
  `;if(e.additionalManagedImports)for(const o of e.additionalManagedImports){if(o.moduleSpecifier==="@fjall/components-infrastructure"||o.moduleSpecifier==="@fjall/infrastructure")continue;const c=o.namedImports.length>0?`{ ${o.namedImports.join(", ")} }`:"",r=[o.defaultImport??"",c].filter(Boolean).join(", ");r&&(i+=`import ${r} from "${o.moduleSpecifier}";
28
- `)}return i}function C(e){if(!e.cdn)return"";const t=f(e,e.cdn.defaultOriginRef);let n=`
28
+ `)}return i}s(j,"generateImports");function x(e){if(!e.cdn)return"";const t=u(e,e.cdn.defaultOriginRef);let n=`
29
29
  app.addCdn(
30
30
  CdnFactory.build("${e.cdn.name}", {
31
31
  originType: "auto",
32
- origin: ${t}`;if(e.cdn.behaviours&&e.cdn.behaviours.length>0){const i=e.cdn.behaviours.map(o=>{const c=f(e,o.originRef);let s=`{
32
+ origin: ${t}`;if(e.cdn.behaviours&&e.cdn.behaviours.length>0){const i=e.cdn.behaviours.map(o=>{const c=u(e,o.originRef);let a=`{
33
33
  pathPattern: "${o.pathPattern}",
34
- origin: ${c},`;return o.cachePolicy&&(s+=`
35
- cachePolicy: "${o.cachePolicy}",`),s+=`
36
- }`,s}).join(`,
34
+ origin: ${c},`;return o.cachePolicy&&(a+=`
35
+ cachePolicy: "${o.cachePolicy}",`),a+=`
36
+ }`,a}).join(`,
37
37
  `);n+=`,
38
38
  behaviours: [
39
39
  ${i}
@@ -41,7 +41,7 @@ app.addCdn(
41
41
  domainNames: ["${e.cdn.customDomain}"]`),e.cdn.certificateArn&&(n+=`,
42
42
  certificateArn: "${e.cdn.certificateArn}"`),e.cdn.accessGate!==void 0&&(e.cdn.accessGate===!1?n+=`,
43
43
  accessGate: false`:n+=`,
44
- accessGate: ${a(e.cdn.accessGate," ")}`),n+=g(e.cdn.extraProperties),n+=`
44
+ accessGate: ${d(e.cdn.accessGate," ")}`),n+=l(e.cdn.extraProperties),n+=`
45
45
  })
46
46
  );
47
- `,n}function N(e){const t=new Set;if(e.cdn&&(e.cdn.defaultOriginRef&&t.add(e.cdn.defaultOriginRef),e.cdn.behaviours))for(const n of e.cdn.behaviours)t.add(n.originRef);return t}function j(e){return e.patternConfig!==void 0}export{u as COST_ALLOCATION_TAG,h as DEFAULT_COST_ALLOCATION_OWNER,O as OPENNEXT_DEFAULTS,N as collectCdnReferencedResources,k as generateAppInit,C as generateCDNCode,w as generateImports,A as generateNetworkCode,P as generatePatternCodeWithComments,$ as generateTags,j as usesPatternApproach};
47
+ `,n}s(x,"generateCDNCode");function L(e){const t=new Set;if(e.cdn&&(e.cdn.defaultOriginRef&&t.add(e.cdn.defaultOriginRef),e.cdn.behaviours))for(const n of e.cdn.behaviours)t.add(n.originRef);return t}s(L,"collectCdnReferencedResources");function O(e){return e.patternConfig!==void 0}s(O,"usesPatternApproach");export{m as COST_ALLOCATION_TAG,b as DEFAULT_COST_ALLOCATION_OWNER,F as OPENNEXT_DEFAULTS,L as collectCdnReferencedResources,N as generateAppInit,x as generateCDNCode,j as generateImports,w as generateNetworkCode,E as generatePatternCodeWithComments,C as generateTags,O as usesPatternApproach};
@@ -1 +1 @@
1
- import{getVariableName as c}from"./common.js";const u=Object.freeze({URL:"QUEUE_URL",ARN:"QUEUE_ARN"});function g(t,n){const{connectedMessaging:e}=n;return e?.length?(t.sqs??[]).filter(s=>e.includes(s.name)):[]}function f(t){const n=[];if(t.length===1){const e=t[0];if(!e)return n;const s=c(e);n.push({key:u.URL,expression:`${s}.getQueueUrl()`}),n.push({key:u.ARN,expression:`${s}.getQueueArn()`})}else for(const[e,s]of t.entries()){const r=c(s),o=e===0?"":`_${e+1}`;n.push({key:`${u.URL}${o}`,expression:`${r}.getQueueUrl()`}),n.push({key:`${u.ARN}${o}`,expression:`${r}.getQueueArn()`})}return n}function a(t,n){const e={},s={};if(!n.connectedMessaging?.length)return{env:e,secrets:s};const r=g(t,n),o=f(r);for(const i of o)e[i.key]={__expression:i.expression};return{env:e,secrets:s}}export{u as MESSAGING_ENV_VARS,a as buildMessagingEnvVars,f as generateMessagingEnvVarEntries,g as getConnectedMessaging};
1
+ var f=Object.defineProperty;var u=(s,e)=>f(s,"name",{value:e,configurable:!0});import{getVariableName as g}from"./common.js";const i=Object.freeze({URL:"QUEUE_URL",ARN:"QUEUE_ARN"});function p(s,e){const{connectedMessaging:n}=e;return n?.length?(s.sqs??[]).filter(t=>n.includes(t.name)):[]}u(p,"getConnectedMessaging");function a(s){const e=[];if(s.length===1){const n=s[0];if(!n)return e;const t=g(n);e.push({key:i.URL,expression:`${t}.getQueueUrl()`}),e.push({key:i.ARN,expression:`${t}.getQueueArn()`})}else for(const[n,t]of s.entries()){const r=g(t),o=n===0?"":`_${n+1}`;e.push({key:`${i.URL}${o}`,expression:`${r}.getQueueUrl()`}),e.push({key:`${i.ARN}${o}`,expression:`${r}.getQueueArn()`})}return e}u(a,"generateMessagingEnvVarEntries");function U(s,e){const n={},t={};if(!e.connectedMessaging?.length)return{env:n,secrets:t};const r=p(s,e),o=a(r);for(const c of o)n[c.key]={__expression:c.expression};return{env:n,secrets:t}}u(U,"buildMessagingEnvVars");export{i as MESSAGING_ENV_VARS,U as buildMessagingEnvVars,a as generateMessagingEnvVarEntries,p as getConnectedMessaging};
@@ -1,12 +1,12 @@
1
- import{buildProperty as o,getVariableName as c,emitExtraProperties as u,escapeStringLiteral as r}from"./common.js";function p(e){let t="";return t+=o(e.bucketName!==void 0,"bucketName",e.bucketName,"string"),t+=o(e.stackPlacement!==void 0&&e.stackPlacement!=="storage","stackPlacement",e.stackPlacement,"string"),t+=o(e.publicReadAccess===!0,"publicReadAccess",!0),t+=o(e.websiteHosting!==void 0,"websiteHosting",e.websiteHosting,"object"),t+=o(e.backupVaultTier!==void 0,"backupVaultTier",e.backupVaultTier,"string"),t+=o(e.versioned!==void 0,"versioned",e.versioned),t+=o(e.encryption!==void 0,"encryption",e.encryption,"string"),t+=o(e.kmsKeyArn!==void 0,"kmsKeyArn",e.kmsKeyArn,"string"),t+=o(e.cors!==void 0&&e.cors.length>0,"cors",e.cors,"object"),t+=o(e.deployment!==void 0,"deployment",e.deployment,"object"),t+=o(e.retain===!0,"retain",!0),t}function g(e,t){return!!(t.compute.some(i=>i.connectedStorage?.includes(e.name))||t.cdn&&(t.cdn.defaultOriginRef===e.name||t.cdn.behaviours?.some(i=>i.originRef===e.name)))}function x(e){if(e.s3.length===0)return"";let t="";for(let n=0;n<e.s3.length;n++){const i=e.s3[n],s=c(i),a=g(i,e),l=e.database.length>0||n>0?`
2
- `:"",m=p(i),y=a?`const ${s} = `:"",f=u(i.extraProperties);m||f?t+=`${l}${y}app.addStorage(
3
- StorageFactory.build(${r(i.name)}, {${m}${f}
1
+ var g=Object.defineProperty;var s=(e,t)=>g(e,"name",{value:t,configurable:!0});import{buildProperty as o,getVariableName as u,emitExtraProperties as l,escapeStringLiteral as r}from"./common.js";function $(e){let t="";return t+=o(e.bucketName!==void 0,"bucketName",e.bucketName,"string"),t+=o(e.stackPlacement!==void 0&&e.stackPlacement!=="storage","stackPlacement",e.stackPlacement,"string"),t+=o(e.publicReadAccess===!0,"publicReadAccess",!0),t+=o(e.websiteHosting!==void 0,"websiteHosting",e.websiteHosting,"object"),t+=o(e.backupVaultTier!==void 0,"backupVaultTier",e.backupVaultTier,"string"),t+=o(e.versioned!==void 0,"versioned",e.versioned),t+=o(e.encryption!==void 0,"encryption",e.encryption,"string"),t+=o(e.kmsKeyArn!==void 0,"kmsKeyArn",e.kmsKeyArn,"string"),t+=o(e.cors!==void 0&&e.cors.length>0,"cors",e.cors,"object"),t+=o(e.deployment!==void 0,"deployment",e.deployment,"object"),t+=o(e.retain===!0,"retain",!0),t}s($,"generateS3BucketProps");function b(e,t){return!!(t.compute.some(i=>i.connectedStorage?.includes(e.name))||t.cdn&&(t.cdn.defaultOriginRef===e.name||t.cdn.behaviours?.some(i=>i.originRef===e.name)))}s(b,"s3NeedsVariable");function S(e){if(e.s3.length===0)return"";let t="";for(let n=0;n<e.s3.length;n++){const i=e.s3[n],d=u(i),a=b(i,e),m=e.database.length>0||n>0?`
2
+ `:"",y=$(i),f=a?`const ${d} = `:"",p=l(i.extraProperties);y||p?t+=`${m}${f}app.addStorage(
3
+ StorageFactory.build(${r(i.name)}, {${y}${p}
4
4
  })
5
5
  );
6
- `:t+=`${l}${y}app.addStorage(
6
+ `:t+=`${m}${f}app.addStorage(
7
7
  StorageFactory.build(${r(i.name)}, {})
8
8
  );
9
- `}return t}function K(e){if(!e.dynamodb||e.dynamodb.length===0)return"";let t="";for(const n of e.dynamodb){const i=c(n);if(t+=`
9
+ `}return t}s(S,"generateS3Code");function h(e){if(!e.dynamodb||e.dynamodb.length===0)return"";let t="";for(const n of e.dynamodb){const i=u(n);if(t+=`
10
10
  const ${i} = app.addDatabase(
11
11
  DatabaseFactory.build(${r(n.name)}, {
12
12
  type: "DynamoDB",
@@ -17,26 +17,26 @@ const ${i} = app.addDatabase(
17
17
  sortKey: {
18
18
  name: ${r(n.sortKey.name)},
19
19
  type: ${r(n.sortKey.type)},
20
- }`),n.globalSecondaryIndexes&&n.globalSecondaryIndexes.length>0){const s=n.globalSecondaryIndexes.map(a=>{let d=`{
20
+ }`),n.globalSecondaryIndexes&&n.globalSecondaryIndexes.length>0){const d=n.globalSecondaryIndexes.map(a=>{let c=`{
21
21
  indexName: ${r(a.indexName)},
22
22
  partitionKey: {
23
23
  name: ${r(a.partitionKey.name)},
24
24
  type: ${r(a.partitionKey.type)},
25
- },`;return a.sortKey&&(d+=`
25
+ },`;return a.sortKey&&(c+=`
26
26
  sortKey: {
27
27
  name: ${r(a.sortKey.name)},
28
28
  type: ${r(a.sortKey.type)},
29
- },`),d+=`
30
- }`,d}).join(`,
29
+ },`),c+=`
30
+ }`,c}).join(`,
31
31
  `);t+=`,
32
32
  globalSecondaryIndexes: [
33
- ${s}
33
+ ${d}
34
34
  ]`}n.ttlAttribute&&(t+=`,
35
35
  ttlAttribute: ${r(n.ttlAttribute)}`),n.stream&&(t+=`,
36
- stream: true`),t+=u(n.extraProperties),t+=`
36
+ stream: true`),t+=l(n.extraProperties),t+=`
37
37
  })
38
38
  );
39
- `}return t}function $(e,t){return t.compute.some(n=>n.connectedMessaging?.includes(e.name))}function P(e){if(!e.sqs||e.sqs.length===0)return"";let t="";for(const n of e.sqs){const i=c(n),a=$(n,e)?`const ${i} = `:"";t+=`
39
+ `}return t}s(h,"generateDynamoDBCode");function x(e,t){return t.compute.some(n=>n.connectedMessaging?.includes(e.name))}s(x,"sqsNeedsVariable");function N(e){if(!e.sqs||e.sqs.length===0)return"";let t="";for(const n of e.sqs){const i=u(n),a=x(n,e)?`const ${i} = `:"";t+=`
40
40
  ${a}app.addMessaging(
41
41
  MessagingFactory.build(${r(n.name)}, {
42
42
  type: "queue",
@@ -44,7 +44,7 @@ ${a}app.addMessaging(
44
44
  visibilityTimeout: ${n.visibilityTimeout}`),n.retentionPeriod!==void 0&&(t+=`,
45
45
  messageRetentionPeriod: ${n.retentionPeriod}`),n.contentBasedDeduplication&&(t+=`,
46
46
  contentBasedDeduplication: true`),n.removalPolicy!==void 0&&(t+=`,
47
- removalPolicy: ${r(n.removalPolicy)}`),t+=u(n.extraProperties),t+=`
47
+ removalPolicy: ${r(n.removalPolicy)}`),t+=l(n.extraProperties),t+=`
48
48
  })
49
49
  );
50
- `}return t}export{K as generateDynamoDBCode,x as generateS3Code,P as generateSQSCode,g as s3NeedsVariable,$ as sqsNeedsVariable};
50
+ `}return t}s(N,"generateSQSCode");export{h as generateDynamoDBCode,S as generateS3Code,N as generateSQSCode,b as s3NeedsVariable,x as sqsNeedsVariable};
@@ -1 +1 @@
1
- import{getVariableName as a}from"./common.js";const u=Object.freeze({NAME:"BUCKET_NAME"});function f(r,t){const{connectedStorage:e}=t;return e?.length?r.s3.filter(n=>e.includes(n.name)):[]}function g(r){const t=[];if(r.length===1){const e=r[0];if(!e)return t;const n=a(e);t.push({key:u.NAME,expression:`${n}.getBucketName()`})}else for(const[e,n]of r.entries()){const o=a(n),s=e===0?"":`_${e+1}`;t.push({key:`${u.NAME}${s}`,expression:`${o}.getBucketName()`})}return t}function p(r,t){const e={},n={};if(!t.connectedStorage?.length)return{env:e,secrets:n};const o=f(r,t),s=g(o);for(const i of s)e[i.key]={__expression:i.expression};return{env:e,secrets:n}}function V(r,t,e=[]){const n=r.map(c=>a(c)),o=t.map(c=>a(c)),s=e.map(c=>a(c));return`connections: [${[...n,...o,...s].join(", ")}],`}export{u as STORAGE_ENV_VARS,p as buildStorageEnvVars,V as formatAllConnectionsCode,g as generateStorageEnvVarEntries,f as getConnectedStorage};
1
+ var g=Object.defineProperty;var a=(n,t)=>g(n,"name",{value:t,configurable:!0});import{getVariableName as i}from"./common.js";const f=Object.freeze({NAME:"BUCKET_NAME"});function l(n,t){const{connectedStorage:e}=t;return e?.length?n.s3.filter(r=>e.includes(r.name)):[]}a(l,"getConnectedStorage");function p(n){const t=[];if(n.length===1){const e=n[0];if(!e)return t;const r=i(e);t.push({key:f.NAME,expression:`${r}.getBucketName()`})}else for(const[e,r]of n.entries()){const o=i(r),s=e===0?"":`_${e+1}`;t.push({key:`${f.NAME}${s}`,expression:`${o}.getBucketName()`})}return t}a(p,"generateStorageEnvVarEntries");function m(n,t){const e={},r={};if(!t.connectedStorage?.length)return{env:e,secrets:r};const o=l(n,t),s=p(o);for(const u of s)e[u.key]={__expression:u.expression};return{env:e,secrets:r}}a(m,"buildStorageEnvVars");function E(n,t,e=[]){const r=n.map(c=>i(c)),o=t.map(c=>i(c)),s=e.map(c=>i(c));return`connections: [${[...r,...o,...s].join(", ")}],`}a(E,"formatAllConnectionsCode");export{f as STORAGE_ENV_VARS,m as buildStorageEnvVars,E as formatAllConnectionsCode,p as generateStorageEnvVarEntries,l as getConnectedStorage};
@@ -1 +1 @@
1
- import{parseInfrastructure as d,convertToResourcePlan as l}from"../ast/index.js";import{success as m,failure as n}from"../types/Result.js";import{generateInfrastructureFromPlan as f}from"./resourcePlanning.js";import{addResourceToPlan as g,validateResourceAddition as p}from"./resourceAddition.js";function h(c,i,t){let r;try{r=d(c,{extractCustomCode:!0})}catch(e){return n(new Error(`Failed to parse infrastructure.ts: ${e instanceof Error?e.message:String(e)}`))}let o;try{o=l(r,i,{skipValidation:!0})}catch(e){return n(new Error(`Failed to build resource plan: ${e instanceof Error?e.message:String(e)}`))}r.customCodeBlocks&&r.customCodeBlocks.length>0&&(o.customCodeBlocks=r.customCodeBlocks);const u=p(o,t);if(!u.success)return u;const s=g(o,t);if(!s.success)return s;const a=f(s.data);return a.success?m({originalContent:c,modifiedContent:a.data,addedResource:{type:t.type,name:t.resourceName}}):n(new Error(`Code generation failed: ${a.error.message}`))}export{h as generateResourceChange};
1
+ var l=Object.defineProperty;var d=(t,a)=>l(t,"name",{value:a,configurable:!0});import{parseInfrastructure as m,convertToResourcePlan as f}from"../ast/index.js";import{success as g,failure as u}from"../types/Result.js";import{generateInfrastructureFromPlan as p}from"./resourcePlanning.js";import{addResourceToPlan as C,validateResourceAddition as R}from"./resourceAddition.js";function v(t,a,o){let r;try{r=m(t,{extractCustomCode:!0})}catch(e){return u(new Error(`Failed to parse infrastructure.ts: ${e instanceof Error?e.message:String(e)}`))}let s;try{s=f(r,a,{skipValidation:!0})}catch(e){return u(new Error(`Failed to build resource plan: ${e instanceof Error?e.message:String(e)}`))}r.customCodeBlocks&&r.customCodeBlocks.length>0&&(s.customCodeBlocks=r.customCodeBlocks);const i=R(s,o);if(!i.success)return i;const n=C(s,o);if(!n.success)return n;const c=p(n.data);return c.success?g({originalContent:t,modifiedContent:c.data,addedResource:{type:o.type,name:o.resourceName}}):u(new Error(`Code generation failed: ${c.error.message}`))}d(v,"generateResourceChange");export{v as generateResourceChange};
@@ -1 +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
+ var C=Object.defineProperty;var r=(e,n)=>C(e,"name",{value:n,configurable:!0});import{getPatternTierPreset as T,isPatternTierName as P,PATTERN_TIER_NAMES as N}from"../presets/patternTierPresets.js";import{getNetworkPreset as w}from"../presets/tierPresets.js";import{success as y,failure as l}from"../types/Result.js";import{PatternConfigSchema as g}from"../schemas/resourceSchemas.js";const k=w("standard");function A(e){return g.options.some(n=>n.shape?.type?.value===e)}r(A,"isPatternConfigType");function h(e,n,a){const{tier:i="standard",domain:d,database:m,compute:s,cdn:f,environment:c,tags:p}=a??{},u=P(i);if(!u&&i!=="custom")return l(new Error(`Invalid pattern tier: "${i}". Valid tiers are: ${[...N,"custom"].join(", ")}`));if(!A(n))return l(new Error(`Unsupported pattern type: ${n}`));const t=u?T(i):null,o=I(n,e,{domain:d,database:m,compute:s,cdn:f,environment:c,tierPreset:t});if(!o.success)return o;const b=o.data;return y({appName:e,type:"standard",pattern:n,network:t?t.network:k,backup:t?t.backup:!1,patternConfig:b,database:[],s3:[],compute:[],tags:p??{}})}r(h,"planOpenNextResources");function E(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}}}r(E,"mergeDatabaseConfig");function R(e,n){return{memorySize:e?.memorySize??n.compute.memorySize,timeout:e?.timeout??n.compute.timeout}}r(R,"mergeComputeConfig");function v(e){const{encryption:n,...a}=e;return{...a,...n&&{encryption:{storageKey:n}}}}r(v,"toPatternDatabaseConfig");function I(e,n,a){const{domain:i,database:d,compute:m,cdn:s,environment:f,tierPreset:c}=a,p=c?E(d,c):d,u=c?R(m,c):m,t={type:e,name:n,domain:i,database:p?v(p):void 0,compute:u?{server:u}:void 0,cdn:s?{domainNames:s.domainNames,certificateArn:s.certificateArn}:void 0,environment:f},o=g.safeParse(t);return o.success?y(o.data):l(new Error(`Invalid pattern config: ${o.error.message}`))}r(I,"buildPatternConfig");export{h as planOpenNextResources};
@@ -1 +1 @@
1
- import{success as d,failure as c}from"../types/Result.js";import{toPascalCase as o}from"../generation/common.js";import{applyComputeConnections as b,applyServiceConnections as l}from"./resourceConnections.js";function L(a){const e=a.database.length>0,n=a.cdn!==void 0;return[{type:"database",label:"Database (RDS)",available:!0},{type:"database:proxy",label:"RDS Proxy",available:e,reason:e?void 0:"Requires at least one database"},{type:"storage:s3",label:"S3 Bucket",available:!0},{type:"network",label:"Network (VPC)",available:!0},{type:"compute:ecs",label:"Compute (ECS)",available:!0},{type:"compute:lambda",label:"Compute (Lambda)",available:!0},{type:"cdn",label:"CDN (CloudFront)",available:!n,reason:n?"A CDN is already configured. Remove existing CDN first.":void 0},{type:"tunnel",label:"Database Tunnel",available:e&&!a.tunnel,reason:e?a.tunnel?"Tunnel is already enabled":void 0:"Requires at least one database"}]}function y(a,e){if(E(a,e.resourceName))return c(new Error(`Resource name '${e.resourceName}' is already used in this application.`));switch(e.type){case"database":return w(a,e);case"database:proxy":return g(a,e);case"storage:s3":return d(void 0);case"network":return d(void 0);case"compute:ecs":return!e.services||e.services.length===0?c(new Error("ECS compute requires at least one service.")):d(void 0);case"compute:lambda":return d(void 0);case"cdn":return v(a,e);case"tunnel":return C(a);default:{const n=e;return c(new Error(`Unknown resource type: ${String(n)}`))}}}function w(a,e){const n=e.databaseName??e.resourceName.toLowerCase();return a.database.some(t=>t.databaseName===n)?c(new Error(`Database name '${n}' already exists. Choose a different database name.`)):e.databaseType==="GlobalAurora"&&!e.primaryRegion?c(new Error("GlobalAurora databases require a primaryRegion.")):d(void 0)}function g(a,e){const n=a.database.find(r=>r.name===e.targetDatabase||r.databaseName===e.targetDatabase);if(!n){const r=a.database.map(t=>t.name).join(", ")||"none";return c(new Error(`Database '${e.targetDatabase}' not found. Available databases: ${r}`))}return n.proxy!==void 0&&n.proxy!==!1?c(new Error(`Database '${n.name}' already has RDS Proxy enabled.`)):d(void 0)}function v(a,e){if(a.cdn)return c(new Error("A CDN is already configured for this application. Remove the existing CDN first."));if(!m(a,e.defaultOriginRef))return c(new Error(`Origin '${e.defaultOriginRef}' not found in plan. CDN origin must reference an existing resource.`));if(e.behaviours){for(const n of e.behaviours)if(!m(a,n.originRef))return c(new Error(`Behaviour origin '${n.originRef}' not found in plan.`))}return d(void 0)}function C(a){return a.tunnel&&typeof a.tunnel=="object"?c(new Error("Tunnel is already enabled for this application.")):a.database.length===0?c(new Error("No databases found \u2014 tunnel requires at least one relational database.")):d(void 0)}function q(a,e){const n=y(a,e);if(!n.success)return n;switch(e.type){case"database":return h(a,e);case"database:proxy":return R(a,e);case"storage:s3":return x(a,e);case"network":return k(a,e);case"compute:ecs":return D(a,e);case"compute:lambda":return N(a,e);case"cdn":return A(a,e);case"tunnel":return T(a,e);default:{const r=e;return c(new Error(`Unknown resource type: ${String(r)}`))}}}function h(a,e){const n=e.databaseName??e.resourceName.toLowerCase(),r={name:e.resourceName,type:e.databaseType,databaseName:n};let t;switch(e.databaseType){case"Instance":t={...r,...e.instanceType!==void 0?{instanceType:e.instanceType}:{},...e.multiAz!==void 0?{multiAz:e.multiAz}:{},...e.readReplica!==void 0?{readReplica:e.readReplica}:{},...e.publiclyAccessible!==void 0?{publiclyAccessible:e.publiclyAccessible}:{},...e.backupRetention!==void 0?{backupRetention:e.backupRetention}:{}};break;case"Aurora":t={...r,...e.writer!==void 0?{writer:e.writer}:{},...e.readers!==void 0?{readers:e.readers}:{},...e.backupRetention!==void 0?{backupRetention:e.backupRetention}:{},...e.preferredMaintenanceWindow!==void 0?{preferredMaintenanceWindow:e.preferredMaintenanceWindow}:{}};break;case"GlobalAurora":t={...r,primaryRegion:e.primaryRegion,...e.secondaryRegions!==void 0?{secondaryRegions:e.secondaryRegions}:{}};break;default:{const i=e.databaseType;return c(new Error(`Unknown database type: ${String(i)}`))}}const u={...a,database:[...a.database,t]};return f(u,e.resourceName,"database",e),d(u)}function R(a,e){const n=a.database.map(u=>({...u})),r=n.find(u=>u.name===e.targetDatabase||u.databaseName===e.targetDatabase);if(!r)return c(new Error(`Database '${e.targetDatabase}' not found.`));const t={};return e.maxConnections!==void 0&&(t.maxConnections=e.maxConnections),e.maxIdleConnections!==void 0&&(t.maxIdleConnections=e.maxIdleConnections),e.connectionBorrowTimeout!==void 0&&(t.connectionBorrowTimeout=e.connectionBorrowTimeout),e.requireTLS!==void 0&&(t.requireTLS=e.requireTLS),r.proxy=Object.keys(t).length>0?t:{},d({...a,database:n})}function x(a,e){const n=e.bucketName??e.resourceName.toLowerCase(),r=o(n),t=a.s3.length,u=t===0?"":`${t+1}`,i={name:r,bucketName:n,variableName:`bucket${u}`,...e.publicReadAccess!==void 0?{publicReadAccess:e.publicReadAccess}:{},...e.versioned!==void 0?{versioned:e.versioned}:{},...e.encryption!==void 0?{encryption:e.encryption}:{},...e.websiteHosting?{websiteHosting:{indexDocument:"index.html"}}:{}},s={...a,s3:[...a.s3,i]};return f(s,r,"storage",e),d(s)}function k(a,e){const n={};if(e.maxAzs!==void 0&&(n.maxAzs=e.maxAzs),e.natGateways!==void 0&&(n.natGateways=e.natGateways),e.flowLogs!==void 0&&(n.flowLogs=e.flowLogs),e.vpcEndpoints!==void 0&&(n.vpcEndpoints=e.vpcEndpoints),e.networkName){const r={name:e.networkName,...n};return d({...a,additionalNetworks:[...a.additionalNetworks??[],r]})}return d({...a,network:{...a.network??{},...n}})}function D(a,e){const n=e.connectedDatabase??[],r={name:e.resourceName,type:"ecs",needsConnection:n.length>0,connectedDatabase:n,...e.loadBalancer!==void 0?{cluster:{loadBalancer:e.loadBalancer}}:{},services:e.services.map(t=>({name:t.name,capacityProvider:t.capacityProvider??"FARGATE",...t.port!==void 0?{containers:[{port:t.port}]}:{},...t.cpu!==void 0?{cpu:t.cpu}:{},...t.memory!==void 0?{memoryLimitMiB:t.memory}:{}})),...e.docker!==void 0&&{docker:e.docker}};return d({...a,compute:[...a.compute,r]})}function N(a,e){const n=e.connectedDatabase??[],r={name:e.resourceName,type:"lambda",needsConnection:n.length>0,connectedDatabase:n,...e.timeout!==void 0?{timeout:e.timeout}:{},...e.memory!==void 0?{memory:e.memory}:{},...e.handler!==void 0?{handler:e.handler}:{},...e.runtime!==void 0?{runtime:e.runtime}:{}};return d({...a,compute:[...a.compute,r]})}function A(a,e){const n={name:e.resourceName,defaultOriginRef:e.defaultOriginRef,...e.customDomain!==void 0?{customDomain:e.customDomain}:{},...e.certificateArn!==void 0?{certificateArn:e.certificateArn}:{},...e.behaviours&&e.behaviours.length>0?{behaviours:[...e.behaviours].map(r=>({pathPattern:r.pathPattern,originRef:r.originRef,...r.cachePolicy!==void 0?{cachePolicy:r.cachePolicy}:{}}))}:{}};return d({...a,cdn:n})}function T(a,e){const n=e.instanceType?{instanceType:e.instanceType}:{};return d({...a,tunnel:n})}function E(a,e){const n=[...a.database.map(r=>r.name),...a.s3.map(r=>r.name),...a.compute.map(r=>r.name),...(a.dynamodb??[]).map(r=>r.name),...(a.sqs??[]).map(r=>r.name)];return a.cdn&&n.push(a.cdn.name),n.includes(e)}function m(a,e){return a.database.some(n=>n.name===e)||a.s3.some(n=>n.name===e)||a.compute.some(n=>n.name===e)||(a.dynamodb??[]).some(n=>n.name===e)||(a.sqs??[]).some(n=>n.name===e)}function f(a,e,n,r){r.connectToCompute&&r.connectToCompute.length>0&&b(a,[...r.connectToCompute],e,n),r.connectToServices&&r.connectToServices.length>0&&l(a,[...r.connectToServices],e,n)}export{q as addResourceToPlan,L as listAvailableResources,y as validateResourceAddition};
1
+ var b=Object.defineProperty;var d=(a,e)=>b(a,"name",{value:e,configurable:!0});import{success as c,failure as u}from"../types/Result.js";import{toPascalCase as l}from"../generation/common.js";import{applyComputeConnections as y,applyServiceConnections as w}from"./resourceConnections.js";function G(a){const e=a.database.length>0,n=a.cdn!==void 0;return[{type:"database",label:"Database (RDS)",available:!0},{type:"database:proxy",label:"RDS Proxy",available:e,reason:e?void 0:"Requires at least one database"},{type:"storage:s3",label:"S3 Bucket",available:!0},{type:"network",label:"Network (VPC)",available:!0},{type:"compute:ecs",label:"Compute (ECS)",available:!0},{type:"compute:lambda",label:"Compute (Lambda)",available:!0},{type:"cdn",label:"CDN (CloudFront)",available:!n,reason:n?"A CDN is already configured. Remove existing CDN first.":void 0},{type:"tunnel",label:"Database Tunnel",available:e&&!a.tunnel,reason:e?a.tunnel?"Tunnel is already enabled":void 0:"Requires at least one database"}]}d(G,"listAvailableResources");function g(a,e){if(S(a,e.resourceName))return u(new Error(`Resource name '${e.resourceName}' is already used in this application.`));switch(e.type){case"database":return v(a,e);case"database:proxy":return C(a,e);case"storage:s3":return c(void 0);case"network":return c(void 0);case"compute:ecs":return!e.services||e.services.length===0?u(new Error("ECS compute requires at least one service.")):c(void 0);case"compute:lambda":return c(void 0);case"cdn":return h(a,e);case"tunnel":return R(a);default:{const n=e;return u(new Error(`Unknown resource type: ${String(n)}`))}}}d(g,"validateResourceAddition");function v(a,e){const n=e.databaseName??e.resourceName.toLowerCase();return a.database.some(t=>t.databaseName===n)?u(new Error(`Database name '${n}' already exists. Choose a different database name.`)):e.databaseType==="GlobalAurora"&&!e.primaryRegion?u(new Error("GlobalAurora databases require a primaryRegion.")):c(void 0)}d(v,"validateDatabaseAddition");function C(a,e){const n=a.database.find(r=>r.name===e.targetDatabase||r.databaseName===e.targetDatabase);if(!n){const r=a.database.map(t=>t.name).join(", ")||"none";return u(new Error(`Database '${e.targetDatabase}' not found. Available databases: ${r}`))}return n.proxy!==void 0&&n.proxy!==!1?u(new Error(`Database '${n.name}' already has RDS Proxy enabled.`)):c(void 0)}d(C,"validateProxyAddition");function h(a,e){if(a.cdn)return u(new Error("A CDN is already configured for this application. Remove the existing CDN first."));if(!f(a,e.defaultOriginRef))return u(new Error(`Origin '${e.defaultOriginRef}' not found in plan. CDN origin must reference an existing resource.`));if(e.behaviours){for(const n of e.behaviours)if(!f(a,n.originRef))return u(new Error(`Behaviour origin '${n.originRef}' not found in plan.`))}return c(void 0)}d(h,"validateCdnAddition");function R(a){return a.tunnel&&typeof a.tunnel=="object"?u(new Error("Tunnel is already enabled for this application.")):a.database.length===0?u(new Error("No databases found \u2014 tunnel requires at least one relational database.")):c(void 0)}d(R,"validateTunnelAddition");function z(a,e){const n=g(a,e);if(!n.success)return n;switch(e.type){case"database":return x(a,e);case"database:proxy":return k(a,e);case"storage:s3":return D(a,e);case"network":return N(a,e);case"compute:ecs":return A(a,e);case"compute:lambda":return T(a,e);case"cdn":return E(a,e);case"tunnel":return P(a,e);default:{const r=e;return u(new Error(`Unknown resource type: ${String(r)}`))}}}d(z,"addResourceToPlan");function x(a,e){const n=e.databaseName??e.resourceName.toLowerCase(),r={name:e.resourceName,type:e.databaseType,databaseName:n};let t;switch(e.databaseType){case"Instance":t={...r,...e.instanceType!==void 0?{instanceType:e.instanceType}:{},...e.multiAz!==void 0?{multiAz:e.multiAz}:{},...e.readReplica!==void 0?{readReplica:e.readReplica}:{},...e.publiclyAccessible!==void 0?{publiclyAccessible:e.publiclyAccessible}:{},...e.backupRetention!==void 0?{backupRetention:e.backupRetention}:{}};break;case"Aurora":t={...r,...e.writer!==void 0?{writer:e.writer}:{},...e.readers!==void 0?{readers:e.readers}:{},...e.backupRetention!==void 0?{backupRetention:e.backupRetention}:{},...e.preferredMaintenanceWindow!==void 0?{preferredMaintenanceWindow:e.preferredMaintenanceWindow}:{}};break;case"GlobalAurora":t={...r,primaryRegion:e.primaryRegion,...e.secondaryRegions!==void 0?{secondaryRegions:e.secondaryRegions}:{}};break;default:{const s=e.databaseType;return u(new Error(`Unknown database type: ${String(s)}`))}}const i={...a,database:[...a.database,t]};return o(i,e.resourceName,"database",e),c(i)}d(x,"addDatabase");function k(a,e){const n=a.database.map(i=>({...i})),r=n.find(i=>i.name===e.targetDatabase||i.databaseName===e.targetDatabase);if(!r)return u(new Error(`Database '${e.targetDatabase}' not found.`));const t={};return e.maxConnections!==void 0&&(t.maxConnections=e.maxConnections),e.maxIdleConnections!==void 0&&(t.maxIdleConnections=e.maxIdleConnections),e.connectionBorrowTimeout!==void 0&&(t.connectionBorrowTimeout=e.connectionBorrowTimeout),e.requireTLS!==void 0&&(t.requireTLS=e.requireTLS),r.proxy=Object.keys(t).length>0?t:{},c({...a,database:n})}d(k,"addProxy");function D(a,e){const n=e.bucketName??e.resourceName.toLowerCase(),r=l(n),t=a.s3.length,i=t===0?"":`${t+1}`,s={name:r,bucketName:n,variableName:`bucket${i}`,...e.publicReadAccess!==void 0?{publicReadAccess:e.publicReadAccess}:{},...e.versioned!==void 0?{versioned:e.versioned}:{},...e.encryption!==void 0?{encryption:e.encryption}:{},...e.websiteHosting?{websiteHosting:{indexDocument:"index.html"}}:{}},m={...a,s3:[...a.s3,s]};return o(m,r,"storage",e),c(m)}d(D,"addS3");function N(a,e){const n={};if(e.maxAzs!==void 0&&(n.maxAzs=e.maxAzs),e.natGateways!==void 0&&(n.natGateways=e.natGateways),e.flowLogs!==void 0&&(n.flowLogs=e.flowLogs),e.vpcEndpoints!==void 0&&(n.vpcEndpoints=e.vpcEndpoints),e.networkName){const r={name:e.networkName,...n};return c({...a,additionalNetworks:[...a.additionalNetworks??[],r]})}return c({...a,network:{...a.network??{},...n}})}d(N,"addNetwork");function A(a,e){const n=e.connectedDatabase??[],r={name:e.resourceName,type:"ecs",needsConnection:n.length>0,connectedDatabase:n,...e.loadBalancer!==void 0?{cluster:{loadBalancer:e.loadBalancer}}:{},services:e.services.map(t=>({name:t.name,capacityProvider:t.capacityProvider??"FARGATE",...t.port!==void 0?{containers:[{port:t.port}]}:{},...t.cpu!==void 0?{cpu:t.cpu}:{},...t.memory!==void 0?{memoryLimitMiB:t.memory}:{}})),...e.docker!==void 0&&{docker:e.docker}};return c({...a,compute:[...a.compute,r]})}d(A,"addEcsCompute");function T(a,e){const n=e.connectedDatabase??[],r={name:e.resourceName,type:"lambda",needsConnection:n.length>0,connectedDatabase:n,...e.timeout!==void 0?{timeout:e.timeout}:{},...e.memory!==void 0?{memory:e.memory}:{},...e.handler!==void 0?{handler:e.handler}:{},...e.runtime!==void 0?{runtime:e.runtime}:{}};return c({...a,compute:[...a.compute,r]})}d(T,"addLambdaCompute");function E(a,e){const n={name:e.resourceName,defaultOriginRef:e.defaultOriginRef,...e.customDomain!==void 0?{customDomain:e.customDomain}:{},...e.certificateArn!==void 0?{certificateArn:e.certificateArn}:{},...e.behaviours&&e.behaviours.length>0?{behaviours:[...e.behaviours].map(r=>({pathPattern:r.pathPattern,originRef:r.originRef,...r.cachePolicy!==void 0?{cachePolicy:r.cachePolicy}:{}}))}:{}};return c({...a,cdn:n})}d(E,"addCdn");function P(a,e){const n=e.instanceType?{instanceType:e.instanceType}:{};return c({...a,tunnel:n})}d(P,"addTunnel");function S(a,e){const n=[...a.database.map(r=>r.name),...a.s3.map(r=>r.name),...a.compute.map(r=>r.name),...(a.dynamodb??[]).map(r=>r.name),...(a.sqs??[]).map(r=>r.name)];return a.cdn&&n.push(a.cdn.name),n.includes(e)}d(S,"isResourceNameTaken");function f(a,e){return a.database.some(n=>n.name===e)||a.s3.some(n=>n.name===e)||a.compute.some(n=>n.name===e)||(a.dynamodb??[]).some(n=>n.name===e)||(a.sqs??[]).some(n=>n.name===e)}d(f,"resourceExistsInPlan");function o(a,e,n,r){r.connectToCompute&&r.connectToCompute.length>0&&y(a,[...r.connectToCompute],e,n),r.connectToServices&&r.connectToServices.length>0&&w(a,[...r.connectToServices],e,n)}d(o,"applyConnections");export{z as addResourceToPlan,G as listAvailableResources,g as validateResourceAddition};
@@ -1 +1 @@
1
- function u(e){const n=e.split("/");if(n.length!==2||!n[0]||!n[1])throw new Error(`Invalid service reference format: '${e}'. Expected 'ClusterName/ServiceName'.`);return n[0]}function f(e,n,o){o==="database"?(e.needsConnection=!0,e.connectedDatabase=[...new Set([...e.connectedDatabase??[],n])]):e.connectedStorage=[...new Set([...e.connectedStorage??[],n])]}function l(e,n,o,s){const t=new Set(n),a=[...new Set(n.map(u))];for(const i of a){const r=e.compute.find(c=>c.name===i);if(r?.services){f(r,o,s);for(const c of r.services){const d=`${i}/${c.name}`;t.has(d)&&(s==="database"?c.needsDatabaseConnection=!0:c.needsStorageConnection=!0)}}}}function v(e,n,o,s){for(const t of e.compute)if(n.includes(t.name)&&(f(t,o,s),t.services))for(const a of t.services)s==="database"?a.needsDatabaseConnection=!0:a.needsStorageConnection=!0}export{v as applyComputeConnections,l as applyServiceConnections};
1
+ var l=Object.defineProperty;var a=(e,n)=>l(e,"name",{value:n,configurable:!0});function v(e){const n=e.split("/");if(n.length!==2||!n[0]||!n[1])throw new Error(`Invalid service reference format: '${e}'. Expected 'ClusterName/ServiceName'.`);return n[0]}a(v,"parseServiceReference");function d(e,n,o){o==="database"?(e.needsConnection=!0,e.connectedDatabase=[...new Set([...e.connectedDatabase??[],n])]):e.connectedStorage=[...new Set([...e.connectedStorage??[],n])]}a(d,"addResourceConnection");function p(e,n,o,s){const t=new Set(n),r=[...new Set(n.map(v))];for(const f of r){const i=e.compute.find(c=>c.name===f);if(i?.services){d(i,o,s);for(const c of i.services){const u=`${f}/${c.name}`;t.has(u)&&(s==="database"?c.needsDatabaseConnection=!0:c.needsStorageConnection=!0)}}}}a(p,"applyServiceConnections");function C(e,n,o,s){for(const t of e.compute)if(n.includes(t.name)&&(d(t,o,s),t.services))for(const r of t.services)s==="database"?r.needsDatabaseConnection=!0:r.needsStorageConnection=!0}a(C,"applyComputeConnections");export{C as applyComputeConnections,p as applyServiceConnections};
@@ -1 +1 @@
1
- import{TIER_PRESETS as g,getDefaultDatabaseTypeForTier as b,applyTierDefaultsToServices as l}from"../presets/tierPresets.js";import{COMPUTE_TYPE as k,DEFAULT_CONTAINER_PORT as P}from"../schemas/constants.js";import{success as u,failure as D}from"../types/Result.js";import{injectCustomCodeBlocks as T}from"../ast/mutation/astCodeInjection.js";import{toVariableName as f,toValidDatabaseName as h,generateImports as p,generateAppInit as v,generateTags as E,generateNetworkCode as m,generateDatabaseCode as R,generateClickHouseCode as S,generateS3Code as y,generateDynamoDBCode as I,generateSQSCode as w,generateComputeCode as A,generateCDNCode as B,collectCdnReferencedResources as U,usesPatternApproach as x,generatePatternCodeWithComments as j}from"../generation/index.js";function Y(e){return e?.map(n=>({name:n.name,...n.serviceType!==void 0&&{serviceType:n.serviceType},...n.docker!==void 0&&{docker:n.docker},...n.containerPort!==void 0&&{containerPort:n.containerPort},...n.needsDatabaseConnection!==void 0&&{needsDatabaseConnection:n.needsDatabaseConnection},...n.routing!==void 0&&{routing:n.routing}}))}function q(e,n,r=!0,c,t){const i={appName:e,type:n,database:[],s3:[],compute:[]};if(n==="custom")return i;const s=n,o=g[s];return{...i,database:_(e,o,s,r,t),compute:H(e,o,s,r,c),network:o.network,backup:o.backup}}function _(e,n,r,c,t){const i=b(r),s=n.database[i];return!c||s===null?[]:[{name:e,type:i,databaseName:h(e),variableName:`${f(e)}Database`,...s,...t?.snapshotIdentifier!==void 0&&{snapshotIdentifier:t.snapshotIdentifier},...t?.snapshotUsername!==void 0&&{snapshotUsername:t.snapshotUsername}}]}function $(e,n){if(!(e===void 0&&n===void 0))return{scaling:{...e!==void 0&&{minCapacity:e},...n!==void 0&&{maxCapacity:n}}}}function F(e,n){const{minCapacity:r,maxCapacity:c,...t}=e,i=n?.serviceType==="worker",s=n?.containerPort??P,o=n?.docker;return{...t,...o?.path!==void 0&&{docker:{path:o.path,...o.context!==void 0&&{context:o.context},...o.target!==void 0&&{target:o.target}}},...n?.needsDatabaseConnection!==void 0&&{needsDatabaseConnection:n.needsDatabaseConnection},containers:i?[{}]:[{port:s}],...$(r,c)}}function N(e,n){return n||e?.directAccess===!0?e:{...e,loadBalancer:!1}}function H(e,n,r,c,t){const i=n.compute.ecs,o=(t&&t.length>0?l(r,t):i.services.map((d,a)=>({...d,name:a===0?"api":`service-${a+1}`}))).map((d,a)=>F(d,t?.[a])),C=o.some(d=>d.containers?.some(a=>a.port!==void 0));return[{name:e,type:k.ECS,needsConnection:c,connectedDatabase:c?[e]:void 0,variableName:`${f(e)}Compute`,cluster:N(i.cluster,C),services:o}]}function z(e,n){const r=[p(e),v(e),E(e)];if(x(e))r.push(j(e),m(e));else{const t=U(e);r.push(m(e),R(e),S(e),y(e),I(e),w(e),A(e,t),B(e))}const c=r.join("");if(e.customCodeBlocks&&e.customCodeBlocks.length>0){const t=T(c,e.customCodeBlocks,n?.resourceMapping);return t.success?u(t.content):D(new Error(`Custom code injection failed: ${t.error??"unknown error"}`))}return u(c)}export{z as generateInfrastructureFromPlan,q as planApplicationResources,Y as toUserServiceConfigs};
1
+ var b=Object.defineProperty;var a=(e,n)=>b(e,"name",{value:n,configurable:!0});import{TIER_PRESETS as l,getDefaultDatabaseTypeForTier as k,applyTierDefaultsToServices as P}from"../presets/tierPresets.js";import{COMPUTE_TYPE as D,DEFAULT_CONTAINER_PORT as T}from"../schemas/constants.js";import{success as f,failure as h}from"../types/Result.js";import{injectCustomCodeBlocks as p}from"../ast/mutation/astCodeInjection.js";import{toVariableName as m,toValidDatabaseName as v,generateImports as E,generateAppInit as R,generateTags as S,generateNetworkCode as C,generateDatabaseCode as y,generateClickHouseCode as I,generateS3Code as w,generateDynamoDBCode as A,generateSQSCode as B,generateComputeCode as U,generateCDNCode as x,collectCdnReferencedResources as j,usesPatternApproach as _,generatePatternCodeWithComments as $}from"../generation/index.js";function G(e){return e?.map(n=>({name:n.name,...n.serviceType!==void 0&&{serviceType:n.serviceType},...n.docker!==void 0&&{docker:n.docker},...n.containerPort!==void 0&&{containerPort:n.containerPort},...n.needsDatabaseConnection!==void 0&&{needsDatabaseConnection:n.needsDatabaseConnection},...n.routing!==void 0&&{routing:n.routing}}))}a(G,"toUserServiceConfigs");function J(e,n,r=!0,c,t){const i={appName:e,type:n,database:[],s3:[],compute:[]};if(n==="custom")return i;const s=n,o=l[s];return{...i,database:F(e,o,s,r,t),compute:V(e,o,s,r,c),network:o.network,backup:o.backup}}a(J,"planApplicationResources");function F(e,n,r,c,t){const i=k(r),s=n.database[i];return!c||s===null?[]:[{name:e,type:i,databaseName:v(e),variableName:`${m(e)}Database`,...s,...t?.snapshotIdentifier!==void 0&&{snapshotIdentifier:t.snapshotIdentifier},...t?.snapshotUsername!==void 0&&{snapshotUsername:t.snapshotUsername}}]}a(F,"buildDatabasePlan");function N(e,n){if(!(e===void 0&&n===void 0))return{scaling:{...e!==void 0&&{minCapacity:e},...n!==void 0&&{maxCapacity:n}}}}a(N,"buildScalingConfig");function H(e,n){const{minCapacity:r,maxCapacity:c,...t}=e,i=n?.serviceType==="worker",s=n?.containerPort??T,o=n?.docker;return{...t,...o?.path!==void 0&&{docker:{path:o.path,...o.context!==void 0&&{context:o.context},...o.target!==void 0&&{target:o.target}}},...n?.needsDatabaseConnection!==void 0&&{needsDatabaseConnection:n.needsDatabaseConnection},containers:i?[{}]:[{port:s}],...N(r,c)}}a(H,"buildServiceEntry");function M(e,n){return n||e?.directAccess===!0?e:{...e,loadBalancer:!1}}a(M,"resolveClusterConfig");function V(e,n,r,c,t){const i=n.compute.ecs,o=(t&&t.length>0?P(r,t):i.services.map((u,d)=>({...u,name:d===0?"api":`service-${d+1}`}))).map((u,d)=>H(u,t?.[d])),g=o.some(u=>u.containers?.some(d=>d.port!==void 0));return[{name:e,type:D.ECS,needsConnection:c,connectedDatabase:c?[e]:void 0,variableName:`${m(e)}Compute`,cluster:M(i.cluster,g),services:o}]}a(V,"buildComputePlan");function K(e,n){const r=[E(e),R(e),S(e)];if(_(e))r.push($(e),C(e));else{const t=j(e);r.push(C(e),y(e),I(e),w(e),A(e),B(e),U(e,t),x(e))}const c=r.join("");if(e.customCodeBlocks&&e.customCodeBlocks.length>0){const t=p(c,e.customCodeBlocks,n?.resourceMapping);return t.success?f(t.content):h(new Error(`Custom code injection failed: ${t.error??"unknown error"}`))}return f(c)}a(K,"generateInfrastructureFromPlan");export{K as generateInfrastructureFromPlan,J as planApplicationResources,G as toUserServiceConfigs};
@@ -1 +1 @@
1
- import{success as n,failure as c}from"../types/Result.js";import{StaticSitePatternConfigSchema as i}from"../schemas/resourceSchemas.js";function s(t,e){const a={type:"staticsite",name:t,source:e.source,build:e.build,...e.routing!==void 0&&{routing:e.routing},...e.security!==void 0&&{security:e.security},...e.domain!==void 0&&{domain:e.domain},...e.forms!==void 0&&{forms:e.forms},...e.cdn!==void 0&&{cdn:e.cdn}},r=i.safeParse(a);return r.success?n({appName:t,type:"standard",pattern:"staticsite",patternConfig:r.data,database:[],s3:[],compute:[],tags:e.tags??{}}):c(new Error(`Invalid static-site pattern config: ${r.error.message}`))}export{s as planStaticSiteResources};
1
+ var c=Object.defineProperty;var a=(r,e)=>c(r,"name",{value:e,configurable:!0});import{success as i,failure as u}from"../types/Result.js";import{StaticSitePatternConfigSchema as d}from"../schemas/resourceSchemas.js";function g(r,e){const n={type:"staticsite",name:r,source:e.source,build:e.build,...e.routing!==void 0&&{routing:e.routing},...e.security!==void 0&&{security:e.security},...e.domain!==void 0&&{domain:e.domain},...e.forms!==void 0&&{forms:e.forms},...e.cdn!==void 0&&{cdn:e.cdn}},t=d.safeParse(n);return t.success?i({appName:r,type:"standard",pattern:"staticsite",patternConfig:t.data,database:[],s3:[],compute:[],tags:e.tags??{}}):u(new Error(`Invalid static-site pattern config: ${t.error.message}`))}a(g,"planStaticSiteResources");export{g as planStaticSiteResources};
@@ -1 +1 @@
1
- const i=["lightweight","standard","resilient"],n=[...i,"custom"],e=Object.freeze({lightweight:{displayName:"Lightweight",description:"Cost-effective \xB7 Instance DB, minimal Lambda",database:{type:"Instance",instanceType:"t4g.small",backupRetention:7,deletionProtection:!1},compute:{memorySize:512,timeout:30},network:{maxAzs:2,natGateways:{count:1},flowLogs:!1},backup:!1},standard:{displayName:"Standard",description:"Production-ready \xB7 Instance DB, balanced Lambda",database:{type:"Instance",instanceType:"t4g.large",backupRetention:14,deletionProtection:!0},compute:{memorySize:1536,timeout:60},network:{maxAzs:3,natGateways:{count:1},flowLogs:{}},backup:{tier:"standard"}},resilient:{displayName:"Resilient",description:"High-availability \xB7 Aurora V2, KMS encryption",database:{type:"Aurora",backupRetention:30,deletionProtection:!0,encryption:{useCMK:!0}},compute:{memorySize:2048,timeout:120},network:{maxAzs:3,natGateways:{count:3},flowLogs:{retentionDays:90}},backup:{tier:"resilient"}}});function o(t){return e[t]}function r(){return[{label:e.standard.displayName,value:"standard",description:e.standard.description},{label:e.lightweight.displayName,value:"lightweight",description:e.lightweight.description},{label:e.resilient.displayName,value:"resilient",description:e.resilient.description},{label:"Custom",value:"custom",description:"Full control \xB7 Configure everything"}]}const a=new Set(i);function s(t){return a.has(t)}export{i as PATTERN_TIER_NAMES,e as PATTERN_TIER_PRESETS,n as PATTERN_TYPES_WITH_CUSTOM,r as getPatternTierOptions,o as getPatternTierPreset,s as isPatternTierName};
1
+ var o=Object.defineProperty;var i=(t,n)=>o(t,"name",{value:n,configurable:!0});const a=["lightweight","standard","resilient"],l=[...a,"custom"],e=Object.freeze({lightweight:{displayName:"Lightweight",description:"Cost-effective \xB7 Instance DB, minimal Lambda",database:{type:"Instance",instanceType:"t4g.small",backupRetention:7,deletionProtection:!1},compute:{memorySize:512,timeout:30},network:{maxAzs:2,natGateways:{count:1},flowLogs:!1},backup:!1},standard:{displayName:"Standard",description:"Production-ready \xB7 Instance DB, balanced Lambda",database:{type:"Instance",instanceType:"t4g.large",backupRetention:14,deletionProtection:!0},compute:{memorySize:1536,timeout:60},network:{maxAzs:3,natGateways:{count:1},flowLogs:{}},backup:{tier:"standard"}},resilient:{displayName:"Resilient",description:"High-availability \xB7 Aurora V2, KMS encryption",database:{type:"Aurora",backupRetention:30,deletionProtection:!0,encryption:{useCMK:!0}},compute:{memorySize:2048,timeout:120},network:{maxAzs:3,natGateways:{count:3},flowLogs:{retentionDays:90}},backup:{tier:"resilient"}}});function c(t){return e[t]}i(c,"getPatternTierPreset");function d(){return[{label:e.standard.displayName,value:"standard",description:e.standard.description},{label:e.lightweight.displayName,value:"lightweight",description:e.lightweight.description},{label:e.resilient.displayName,value:"resilient",description:e.resilient.description},{label:"Custom",value:"custom",description:"Full control \xB7 Configure everything"}]}i(d,"getPatternTierOptions");const r=new Set(a);function p(t){return r.has(t)}i(p,"isPatternTierName");export{a as PATTERN_TIER_NAMES,e as PATTERN_TIER_PRESETS,l as PATTERN_TYPES_WITH_CUSTOM,d as getPatternTierOptions,c as getPatternTierPreset,p as isPatternTierName};
@@ -1 +1 @@
1
- const t=Object.freeze({standard:{},assets:{versioned:!0,deployment:{source:"./assets"}},upload:{versioned:!0,cors:[{allowedOrigins:["*"],allowedMethods:["GET","PUT","POST"]}]},website:{publicReadAccess:!0,websiteHosting:{indexDocument:"index.html",errorDocument:"error.html"}}});function s(e){return{...t[e]}}function r(){return[{label:"Standard",value:"standard"},{label:"Assets",value:"assets"},{label:"Upload",value:"upload"},{label:"Website Hosting",value:"website"}]}export{t as STORAGE_PRESETS,s as getStoragePreset,r as getStoragePresetOptions};
1
+ var r=Object.defineProperty;var t=(e,s)=>r(e,"name",{value:s,configurable:!0});const o=Object.freeze({standard:{},assets:{versioned:!0,deployment:{source:"./assets"}},upload:{versioned:!0,cors:[{allowedOrigins:["*"],allowedMethods:["GET","PUT","POST"]}]},website:{publicReadAccess:!0,websiteHosting:{indexDocument:"index.html",errorDocument:"error.html"}}});function l(e){return{...o[e]}}t(l,"getStoragePreset");function n(){return[{label:"Standard",value:"standard"},{label:"Assets",value:"assets"},{label:"Upload",value:"upload"},{label:"Website Hosting",value:"website"}]}t(n,"getStoragePresetOptions");export{o as STORAGE_PRESETS,l as getStoragePreset,n as getStoragePresetOptions};
@@ -1 +1 @@
1
- import{TIER_NAMES as g}from"../schemas/sharedTypes.js";import{TIER_NAMES as S,CUSTOM_TIER as K,APP_TYPES as I}from"../schemas/sharedTypes.js";const n="service",c="0 4 * * ? *",u="0 5 * * ? *",i=Object.freeze({tinkerer:{displayName:"Tinkerer",description:"Free tier eligible, minimal cost for experimentation",database:{Instance:{instanceType:"t4g.micro",multiAz:!1,proxy:!1,readReplica:!1,publiclyAccessible:!0},Aurora:null,GlobalAurora:null,ClickHouse:null},compute:{ecs:{services:[{name:n,capacityProvider:"EC2",desiredCount:1,minCapacity:1,maxCapacity:1,ec2Config:{instanceType:"t4g.micro",amiHardwareType:"ARM",minCapacity:1,maxCapacity:1,memoryLimitMiB:400}}],cluster:{directAccess:!0}},lambda:{timeout:30,memory:128}},network:{maxAzs:2,natGateways:!1,flowLogs:!1},backup:!1},lightweight:{displayName:"Lightweight",description:"Streamlined single-AZ deployment for cost efficiency",database:{Instance:{instanceType:"t4g.small",multiAz:!1},Aurora:{readers:!1},GlobalAurora:null,ClickHouse:null},compute:{ecs:{services:[{name:n,capacityProvider:"FARGATE_SPOT",cpu:256,memoryLimitMiB:512,desiredCount:1,minCapacity:1,maxCapacity:3}]},lambda:{timeout:30,memory:256}},network:{maxAzs:2,natGateways:{count:1},flowLogs:!1},backup:!1},standard:{displayName:"Standard",description:"Production-ready with sensible defaults",database:{Instance:{instanceType:"t4g.large"},Aurora:{readers:{count:1}},GlobalAurora:{readers:{count:1}},ClickHouse:{instanceType:"t4g.medium",coldTier:{mode:"s3"},optimiseSchedule:c,backupSchedule:u,backupRetentionDays:14}},compute:{ecs:{services:[{name:n,capacityProvider:"FARGATE",cpu:512,memoryLimitMiB:1024,desiredCount:2,minCapacity:2,maxCapacity:5}]},lambda:{timeout:60,memory:256}},network:{maxAzs:3,natGateways:{count:1},flowLogs:{},vpcEndpoints:{interface:{ecr:!0}}},backup:!1},resilient:{displayName:"Resilient",description:"High availability with enhanced monitoring and scaling",database:{Instance:{instanceType:"r7g.large",encryption:{storageKey:{useCMK:!0}},databaseInsights:{mode:"advanced",encryptionKey:{useCMK:!0}},proxy:{requireTLS:!0}},Aurora:{readers:{count:2},encryption:{storageKey:{useCMK:!0}},databaseInsights:{mode:"advanced",encryptionKey:{useCMK:!0}},proxy:{requireTLS:!0},backupRetention:30},GlobalAurora:{readers:{count:2},encryption:{storageKey:{useCMK:!0}},databaseInsights:{mode:"advanced",encryptionKey:{useCMK:!0}},proxy:{requireTLS:!0},backupRetention:30,enableGlobalWriteForwarding:!0},ClickHouse:{instanceType:"m6g.large",coldTier:{mode:"s3"},optimiseSchedule:c,backupSchedule:u,backupRetentionDays:14}},compute:{ecs:{services:[{name:n,capacityProvider:"FARGATE",cpu:1024,memoryLimitMiB:2048,desiredCount:4,minCapacity:4,maxCapacity:20}]},lambda:{timeout:120,memory:512}},network:{maxAzs:3,natGateways:{count:3},flowLogs:{retentionDays:90},vpcEndpoints:{interface:{ecr:!0,secretsManager:!0}}},backup:{tier:"resilient"}},enterprise:{displayName:"Enterprise",description:"Maximum capability with all features enabled",database:{Instance:{instanceType:"r7g.xlarge",encryption:{storageKey:{useCMK:!0}},databaseInsights:{mode:"advanced",encryptionKey:{useCMK:!0}},proxy:{requireTLS:!0},readReplica:{}},Aurora:{readers:{count:2},encryption:{storageKey:{useCMK:!0}},databaseInsights:{mode:"advanced",encryptionKey:{useCMK:!0}},proxy:{requireTLS:!0},backupRetention:35},GlobalAurora:{readers:{count:2},encryption:{storageKey:{useCMK:!0}},databaseInsights:{mode:"advanced",encryptionKey:{useCMK:!0}},proxy:{requireTLS:!0},backupRetention:35,enableGlobalWriteForwarding:!0},ClickHouse:{instanceType:"m6g.xlarge",coldTier:{mode:"s3"},optimiseSchedule:c,backupSchedule:u,backupRetentionDays:30}},compute:{ecs:{services:[{name:n,capacityProvider:"FARGATE",cpu:2048,memoryLimitMiB:4096,desiredCount:6,minCapacity:6,maxCapacity:100}]},lambda:{timeout:300,memory:1024}},network:{maxAzs:3,natGateways:{count:3},flowLogs:{destination:"s3",retentionDays:365},vpcEndpoints:{interface:{ecr:!0,secretsManager:!0,kms:!0,cloudwatchLogs:!0}}},backup:{tier:"enterprise"}}});function k(e,t){return i[e].database[t]}function w(e){return i[e].compute.ecs}function x(e){return i[e].network}function C(e){return g.filter(t=>i[t].database[e]!==null)}function E(e){return C(e).map(t=>({label:i[t].displayName,value:t,description:i[t].description}))}function v(e){switch(e){case"tinkerer":case"lightweight":case"standard":return"Instance";case"resilient":case"enterprise":return"Aurora"}}function h(e,t){const s=i[e].compute.ecs,r=s.services[0],d=!s.cluster?.directAccess&&s.cluster?.loadBalancer!==!1,m=t.filter(a=>a.serviceType!=="worker").length,y=t.findIndex(a=>a.serviceType!=="worker");return t.map((a,p)=>{const l=p===y,b=a.serviceType==="worker";let o;return d&&!b&&(a.routing?o=a.routing:m>1&&(o={path:l?"/*":`/${a.name.toLowerCase()}/*`,...l?{}:{priority:100+p}})),{name:a.name,capacityProvider:r.capacityProvider,ec2Config:r.ec2Config,cpu:r.cpu,memoryLimitMiB:r.memoryLimitMiB,desiredCount:r.desiredCount,minCapacity:r.minCapacity,maxCapacity:r.maxCapacity,routing:o}})}export{I as APP_TYPES,K as CUSTOM_TIER,S as TIER_NAMES,i as TIER_PRESETS,h as applyTierDefaultsToServices,C as getAvailableTiersForDatabase,k as getDatabasePreset,v as getDefaultDatabaseTypeForTier,w as getEcsPreset,x as getNetworkPreset,E as getTierOptionsForDatabase};
1
+ var C=Object.defineProperty;var r=(e,t)=>C(e,"name",{value:t,configurable:!0});import{TIER_NAMES as f}from"../schemas/sharedTypes.js";import{TIER_NAMES as P,CUSTOM_TIER as R,APP_TYPES as G}from"../schemas/sharedTypes.js";const s="service",u="0 4 * * ? *",p="0 5 * * ? *",n=Object.freeze({tinkerer:{displayName:"Tinkerer",description:"Free tier eligible, minimal cost for experimentation",database:{Instance:{instanceType:"t4g.micro",multiAz:!1,proxy:!1,readReplica:!1,publiclyAccessible:!0},Aurora:null,GlobalAurora:null,ClickHouse:null},compute:{ecs:{services:[{name:s,capacityProvider:"EC2",desiredCount:1,minCapacity:1,maxCapacity:1,ec2Config:{instanceType:"t4g.micro",amiHardwareType:"ARM",minCapacity:1,maxCapacity:1,memoryLimitMiB:400}}],cluster:{directAccess:!0}},lambda:{timeout:30,memory:128}},network:{maxAzs:2,natGateways:!1,flowLogs:!1},backup:!1},lightweight:{displayName:"Lightweight",description:"Streamlined single-AZ deployment for cost efficiency",database:{Instance:{instanceType:"t4g.small",multiAz:!1},Aurora:{readers:!1},GlobalAurora:null,ClickHouse:null},compute:{ecs:{services:[{name:s,capacityProvider:"FARGATE_SPOT",cpu:256,memoryLimitMiB:512,desiredCount:1,minCapacity:1,maxCapacity:3}]},lambda:{timeout:30,memory:256}},network:{maxAzs:2,natGateways:{count:1},flowLogs:!1},backup:!1},standard:{displayName:"Standard",description:"Production-ready with sensible defaults",database:{Instance:{instanceType:"t4g.large"},Aurora:{readers:{count:1}},GlobalAurora:{readers:{count:1}},ClickHouse:{instanceType:"t4g.medium",coldTier:{mode:"s3"},optimiseSchedule:u,backupSchedule:p,backupRetentionDays:14}},compute:{ecs:{services:[{name:s,capacityProvider:"FARGATE",cpu:512,memoryLimitMiB:1024,desiredCount:2,minCapacity:2,maxCapacity:5}]},lambda:{timeout:60,memory:256}},network:{maxAzs:3,natGateways:{count:1},flowLogs:{},vpcEndpoints:{interface:{ecr:!0}}},backup:!1},resilient:{displayName:"Resilient",description:"High availability with enhanced monitoring and scaling",database:{Instance:{instanceType:"r7g.large",encryption:{storageKey:{useCMK:!0}},databaseInsights:{mode:"advanced",encryptionKey:{useCMK:!0}},proxy:{requireTLS:!0}},Aurora:{readers:{count:2},encryption:{storageKey:{useCMK:!0}},databaseInsights:{mode:"advanced",encryptionKey:{useCMK:!0}},proxy:{requireTLS:!0},backupRetention:30},GlobalAurora:{readers:{count:2},encryption:{storageKey:{useCMK:!0}},databaseInsights:{mode:"advanced",encryptionKey:{useCMK:!0}},proxy:{requireTLS:!0},backupRetention:30,enableGlobalWriteForwarding:!0},ClickHouse:{instanceType:"m6g.large",coldTier:{mode:"s3"},optimiseSchedule:u,backupSchedule:p,backupRetentionDays:14}},compute:{ecs:{services:[{name:s,capacityProvider:"FARGATE",cpu:1024,memoryLimitMiB:2048,desiredCount:4,minCapacity:4,maxCapacity:20}]},lambda:{timeout:120,memory:512}},network:{maxAzs:3,natGateways:{count:3},flowLogs:{retentionDays:90},vpcEndpoints:{interface:{ecr:!0,secretsManager:!0}}},backup:{tier:"resilient"}},enterprise:{displayName:"Enterprise",description:"Maximum capability with all features enabled",database:{Instance:{instanceType:"r7g.xlarge",encryption:{storageKey:{useCMK:!0}},databaseInsights:{mode:"advanced",encryptionKey:{useCMK:!0}},proxy:{requireTLS:!0},readReplica:{}},Aurora:{readers:{count:2},encryption:{storageKey:{useCMK:!0}},databaseInsights:{mode:"advanced",encryptionKey:{useCMK:!0}},proxy:{requireTLS:!0},backupRetention:35},GlobalAurora:{readers:{count:2},encryption:{storageKey:{useCMK:!0}},databaseInsights:{mode:"advanced",encryptionKey:{useCMK:!0}},proxy:{requireTLS:!0},backupRetention:35,enableGlobalWriteForwarding:!0},ClickHouse:{instanceType:"m6g.xlarge",coldTier:{mode:"s3"},optimiseSchedule:u,backupSchedule:p,backupRetentionDays:30}},compute:{ecs:{services:[{name:s,capacityProvider:"FARGATE",cpu:2048,memoryLimitMiB:4096,desiredCount:6,minCapacity:6,maxCapacity:100}]},lambda:{timeout:300,memory:1024}},network:{maxAzs:3,natGateways:{count:3},flowLogs:{destination:"s3",retentionDays:365},vpcEndpoints:{interface:{ecr:!0,secretsManager:!0,kms:!0,cloudwatchLogs:!0}}},backup:{tier:"enterprise"}}});function E(e,t){return n[e].database[t]}r(E,"getDatabasePreset");function v(e){return n[e].compute.ecs}r(v,"getEcsPreset");function h(e){return n[e].network}r(h,"getNetworkPreset");function T(e){return f.filter(t=>n[t].database[e]!==null)}r(T,"getAvailableTiersForDatabase");function L(e){return T(e).map(t=>({label:n[t].displayName,value:t,description:n[t].description}))}r(L,"getTierOptionsForDatabase");function M(e){switch(e){case"tinkerer":case"lightweight":case"standard":return"Instance";case"resilient":case"enterprise":return"Aurora"}}r(M,"getDefaultDatabaseTypeForTier");function S(e,t){const o=n[e].compute.ecs,i=o.services[0],m=!o.cluster?.directAccess&&o.cluster?.loadBalancer!==!1,y=t.filter(a=>a.serviceType!=="worker").length,b=t.findIndex(a=>a.serviceType!=="worker");return t.map((a,l)=>{const d=l===b,g=a.serviceType==="worker";let c;return m&&!g&&(a.routing?c=a.routing:y>1&&(c={path:d?"/*":`/${a.name.toLowerCase()}/*`,...d?{}:{priority:100+l}})),{name:a.name,capacityProvider:i.capacityProvider,ec2Config:i.ec2Config,cpu:i.cpu,memoryLimitMiB:i.memoryLimitMiB,desiredCount:i.desiredCount,minCapacity:i.minCapacity,maxCapacity:i.maxCapacity,routing:c}})}r(S,"applyTierDefaultsToServices");export{G as APP_TYPES,R as CUSTOM_TIER,P as TIER_NAMES,n as TIER_PRESETS,S as applyTierDefaultsToServices,T as getAvailableTiersForDatabase,E as getDatabasePreset,M as getDefaultDatabaseTypeForTier,v as getEcsPreset,h as getNetworkPreset,L as getTierOptionsForDatabase};
@@ -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 c,PATTERN_TYPE_VALUES as m,MIN_PORT as E,MAX_PORT as A,BACKUP_VAULT_TIERS as N,GOVERNANCE_PRESETS as _}from"./constants.js";import{DEFAULT_REGION as g,regions as T}from"../aws/regions.js";const L=n=>e.union([e.literal(!1),n]),y={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"]}},D=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),G=e.string().min(1,t.REQUIRED.RESOURCE_NAME).max(63,t.MAX_LENGTH.RESOURCE_NAME).regex(o.RESOURCE_NAME,t.RESOURCE_NAME),U=e.string().min(1,t.REQUIRED.BUCKET_NAME).max(63,t.MAX_LENGTH.BUCKET_NAME).regex(o.BUCKET_NAME,t.BUCKET_NAME),V=e.string().min(1,t.REQUIRED.DATABASE_NAME).max(63,t.MAX_LENGTH.DATABASE_NAME).regex(o.DATABASE_NAME,t.DATABASE_NAME);function i(n,s=o.IDENTIFIER,r=t.IDENTIFIER){return e.string().min(2,t.IDENTIFIER_MIN_LENGTH).max(50,n).regex(s,r).refine(a=>!a.endsWith("-"),{message:t.IDENTIFIER_NO_TRAILING_HYPHEN}).refine(a=>!a.includes("--"),{message:t.IDENTIFIER_NO_CONSECUTIVE_HYPHENS})}const j=i(t.MAX_LENGTH.APP_NAME),B=i(t.MAX_LENGTH.APP_NAME,o.NEW_APP_NAME,t.NEW_APP_NAME),H=e.number().int(t.PORT.INTEGER).min(E,t.PORT.MIN).max(A,t.PORT.MAX),X=e.object({key:e.string(),sourceText:e.string()}).strict(),I=e.object({__identifier:e.string()}).strict(),l=e.object({__expression:e.string()}).strict(),M=e.object({__call:e.string()}).strict(),S=e.union([I,l,M]),x=e.union([e.string(),e.number(),e.boolean(),S]),Y=e.record(e.string().regex(o.ENV_VAR_NAME,t.ENV_VAR_NAME),x),u=e.object({id:e.string(),name:e.string().optional(),arn:e.string().optional(),field:e.string().optional()}).strict().refine(n=>n.name!==void 0!=(n.arn!==void 0),{message:"secretsImport requires exactly one of `name` or `arn`."}),k=e.record(e.string(),u),F=e.record(e.string(),e.unknown()),K=e.enum(c).describe(`Application type must be one of: ${c.join(", ")}`),$=e.enum(m).describe(`OpenNext deployment pattern: ${m.join(", ")}`),R=e.enum(["before-imports","after-imports","after-app-init","after-tags","after-resource","end-of-file"]),h=e.enum(["import","app-init","tags","database","compute","storage","network","messaging","cdn","pattern","vpc-peer","vpc-peer-accepter","cross-plan-connection","custom"]),v=e.object({sourceText:e.string(),position:R,afterManagedResource:e.object({type:h,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(),w=e.union([e.object({tier:e.enum(N)}).strict(),e.literal(!1)]),Q=e.union([e.object({instanceType:e.string().optional()}).strict(),e.literal(!1)]),f=i(t.MAX_LENGTH.ORGANISATION_NAME),d=e.string().regex(o.EMAIL,t.EMAIL),p=e.string().refine(n=>T.includes(n),{message:t.REGION}),W=e.object({name:f,email:d,accountName:e.string().optional(),primaryRegion:p.optional().default(g),secondaryRegions:e.array(p).optional(),security:e.enum(_).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{j as AppNameSchema,K as AppTypeSchema,h as AstStatementTypeSchema,w as BackupConfigSchema,U as BucketNameSchema,y as CAPACITY_REFINEMENT,M as CallValueSchema,v as CustomCodeBlockSchema,R as CustomCodePositionSchema,V as DatabaseNameSchema,d as EmailSchema,Y as EnvironmentRecordSchema,x as EnvironmentValueSchema,l as ExpressionValueSchema,X as ExtraPropertySchema,I as IdentifierValueSchema,F as MetadataRecordSchema,B as NewAppNameSchema,W as OrganisationGeneratorSchema,f as OrganisationNameSchema,$ as PatternSchema,H as PortSchema,p as RegionSchema,G as ResourceNameSchema,u as SecretImportSchema,k as SecretsImportRecordSchema,S as SpecialValueSchema,Q as TunnelConfigSchema,q as getZodErrorMessage,D as memoryLimitMiBSchema,L as optionalOrDisabled};
1
+ var A=Object.defineProperty;var r=(n,i)=>A(n,"name",{value:i,configurable:!0});import{z as e}from"zod";import{VALIDATION_PATTERNS as o,VALIDATION_MESSAGES as t}from"../validation/patterns.js";import{APP_TYPES as m,PATTERN_TYPE_VALUES as p,MIN_PORT as N,MAX_PORT as _,BACKUP_VAULT_TIERS as g,GOVERNANCE_PRESETS as T}from"./constants.js";import{DEFAULT_REGION as I,regions as l}from"../aws/regions.js";const G=r(n=>e.union([e.literal(!1),n]),"optionalOrDisabled"),U={check:r(n=>n.minCapacity!==void 0&&n.maxCapacity!==void 0?n.minCapacity<=n.maxCapacity:!0,"check"),params:{message:t.CAPACITY_CONSTRAINT.MIN_LTE_MAX,path:["maxCapacity"]}},V=r(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),"memoryLimitMiBSchema"),j=e.string().min(1,t.REQUIRED.RESOURCE_NAME).max(63,t.MAX_LENGTH.RESOURCE_NAME).regex(o.RESOURCE_NAME,t.RESOURCE_NAME),B=e.string().min(1,t.REQUIRED.BUCKET_NAME).max(63,t.MAX_LENGTH.BUCKET_NAME).regex(o.BUCKET_NAME,t.BUCKET_NAME),H=e.string().min(1,t.REQUIRED.DATABASE_NAME).max(63,t.MAX_LENGTH.DATABASE_NAME).regex(o.DATABASE_NAME,t.DATABASE_NAME);function c(n,i=o.IDENTIFIER,a=t.IDENTIFIER){return e.string().min(2,t.IDENTIFIER_MIN_LENGTH).max(50,n).regex(i,a).refine(s=>!s.endsWith("-"),{message:t.IDENTIFIER_NO_TRAILING_HYPHEN}).refine(s=>!s.includes("--"),{message:t.IDENTIFIER_NO_CONSECUTIVE_HYPHENS})}r(c,"identifierSchema");const X=c(t.MAX_LENGTH.APP_NAME),Y=c(t.MAX_LENGTH.APP_NAME,o.NEW_APP_NAME,t.NEW_APP_NAME),k=e.number().int(t.PORT.INTEGER).min(N,t.PORT.MIN).max(_,t.PORT.MAX),F=e.object({key:e.string(),sourceText:e.string()}).strict(),M=e.object({__identifier:e.string()}).strict(),S=e.object({__expression:e.string()}).strict(),x=e.object({__call:e.string()}).strict(),u=e.union([M,S,x]),R=e.union([e.string(),e.number(),e.boolean(),u]),K=e.record(e.string().regex(o.ENV_VAR_NAME,t.ENV_VAR_NAME),R),h=e.object({id:e.string(),name:e.string().optional(),arn:e.string().optional(),field:e.string().optional()}).strict().refine(n=>n.name!==void 0!=(n.arn!==void 0),{message:"secretsImport requires exactly one of `name` or `arn`."}),$=e.record(e.string(),h),v=e.record(e.string(),e.unknown()),w=e.enum(m).describe(`Application type must be one of: ${m.join(", ")}`),Q=e.enum(p).describe(`OpenNext deployment pattern: ${p.join(", ")}`),f=e.enum(["before-imports","after-imports","after-app-init","after-tags","after-resource","end-of-file"]),d=e.enum(["import","app-init","tags","database","compute","storage","network","messaging","cdn","pattern","vpc-peer","vpc-peer-accepter","cross-plan-connection","custom"]),W=e.object({sourceText:e.string(),position:f,afterManagedResource:e.object({type:d,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(),q=e.union([e.object({tier:e.enum(g)}).strict(),e.literal(!1)]),z=e.union([e.object({instanceType:e.string().optional()}).strict(),e.literal(!1)]),C=c(t.MAX_LENGTH.ORGANISATION_NAME),P=e.string().regex(o.EMAIL,t.EMAIL),E=e.string().refine(n=>l.includes(n),{message:t.REGION}),Z=e.object({name:C,email:P,accountName:e.string().optional(),primaryRegion:E.optional().default(I),secondaryRegions:e.array(E).optional(),security:e.enum(T).optional(),force:e.boolean().optional()}).strict();function J(n){return n.issues.map(a=>`${a.path.length>0?`${a.path.join(".")}: `:""}${a.message}`).join(`
2
+ `)}r(J,"getZodErrorMessage");export{X as AppNameSchema,w as AppTypeSchema,d as AstStatementTypeSchema,q as BackupConfigSchema,B as BucketNameSchema,U as CAPACITY_REFINEMENT,x as CallValueSchema,W as CustomCodeBlockSchema,f as CustomCodePositionSchema,H as DatabaseNameSchema,P as EmailSchema,K as EnvironmentRecordSchema,R as EnvironmentValueSchema,S as ExpressionValueSchema,F as ExtraPropertySchema,M as IdentifierValueSchema,v as MetadataRecordSchema,Y as NewAppNameSchema,Z as OrganisationGeneratorSchema,C as OrganisationNameSchema,Q as PatternSchema,k as PortSchema,E as RegionSchema,j as ResourceNameSchema,h as SecretImportSchema,$ as SecretsImportRecordSchema,u as SpecialValueSchema,z as TunnelConfigSchema,J as getZodErrorMessage,V as memoryLimitMiBSchema,G as optionalOrDisabled};