@fjall/generator 2.16.0 → 2.17.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.
- package/dist/.minified +1 -1
- package/dist/src/ast/astDatabaseParser.js +1 -1
- package/dist/src/ast/astDomainParser.d.ts +2 -1
- package/dist/src/ast/astDomainParser.js +1 -1
- package/dist/src/ast/astMessagingParser.d.ts +1 -0
- package/dist/src/ast/astMessagingParser.js +1 -1
- package/dist/src/ast/astNetworkParser.js +1 -1
- package/dist/src/ast/astTestHelpers.d.ts +1 -0
- package/dist/src/dns/domainRecords.d.ts +12 -0
- package/dist/src/dns/domainRecords.js +1 -1
- package/dist/src/generation/storage.js +8 -7
- package/dist/src/schemas/applicationSchemas.d.ts +4 -0
- package/dist/src/schemas/messagingSchemas.d.ts +15 -0
- package/dist/src/schemas/messagingSchemas.js +1 -1
- package/dist/src/schemas/networkSchemas.d.ts +5 -0
- package/dist/src/schemas/networkSchemas.js +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +3 -3
package/dist/.minified
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
139 files minified at 2026-06-
|
|
1
|
+
139 files minified at 2026-06-15T10:18:04.720Z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as c from"typescript";import{constIncludes as
|
|
1
|
+
import*as c from"typescript";import{constIncludes as b,DATABASE_ENGINES as x}from"../schemas/constants.js";import{asBoolean as p,asNumber as u,asString as o,asStringArray as A,captureExtraProperties as I,collectFromAst as E,extractVariableName as S,isCallRef as R,isFactoryBuildCall as h,isFactoryMethodCall as D,omitUndefined as N,parseObjectLiteral as w,parseOptionalConfig as d,parseBooleanOrConfig as g,resolveTemplateLiteral as v,typed as l}from"./astCommonParser.js";import{extractDynamoDBFields as C}from"./astDynamoDBParser.js";import{extractClickHouseFields as P}from"./astClickHouseParser.js";import{convertDynamoDBResources as j}from"./astDynamoDBParser.js";import{convertClickHouseResources as V}from"./astClickHouseParser.js";function T(r){const e=o(r.databaseEngine);if(e!==void 0&&b(x,e))return e;const i=r.engine;if(R(i)){const t=String(i.__call);if(t.includes("postgres")||t.includes("auroraPostgres"))return"postgresql";if(t.includes("mysql")||t.includes("auroraMysql"))return"mysql"}}function W(r){const e=r.engine;if(R(e))return String(e.__call)}const B=new Set(["type","databaseName","databaseEngine","engine","vpc","port","deletionProtection","instanceType","multiAz","publiclyAccessible","enableSecretRotation","encryption","databaseInsights","proxy","readReplica","credentials","writer","readers","backupRetention","preferredMaintenanceWindow","primaryRegion","secondaryRegions","globalClusterIdentifier","enableGlobalWriteForwarding","snapshotIdentifier","allocatedStorage","monitoringInterval","snapshotUsername"]);function F(r,e,i){if(i.arguments.length<2)return null;const t=i.arguments[0],a=i.arguments[1];if(!c.isStringLiteral(t)&&!c.isTemplateExpression(t))return null;const s=c.isStringLiteral(t)?t.text:v(r,t);if(!c.isObjectLiteralExpression(a))return null;const n=w(a),m={resourceName:s,type:o(n.type)??"",databaseName:o(n.databaseName)??"",databaseEngine:T(n),engineExpression:W(n),port:u(n.port),deletionProtection:p(n.deletionProtection),instanceType:o(n.instanceType),multiAz:p(n.multiAz),publiclyAccessible:p(n.publiclyAccessible),enableSecretRotation:p(n.enableSecretRotation),encryption:d(n.encryption,l()),databaseInsights:g(n.databaseInsights,l()),proxy:g(n.proxy,l()),readReplica:g(n.readReplica,l()),credentials:d(n.credentials,l()),writer:d(n.writer,l()),readers:g(n.readers,l()),backupRetention:u(n.backupRetention),preferredMaintenanceWindow:o(n.preferredMaintenanceWindow),primaryRegion:o(n.primaryRegion),secondaryRegions:A(n.secondaryRegions),globalClusterIdentifier:o(n.globalClusterIdentifier),enableGlobalWriteForwarding:p(n.enableGlobalWriteForwarding),allocatedStorage:u(n.allocatedStorage),monitoringInterval:u(n.monitoringInterval),snapshotIdentifier:o(n.snapshotIdentifier),snapshotUsername:o(n.snapshotUsername),node:e},f=S(e);f&&(m.variableName=f);const y=I(n,B);return y.length>0&&(m.extraProperties=y),m}function z(r){return E(r,e=>{if(!c.isCallExpression(e)||!D(e,"addDatabase"))return null;const i=e.arguments[0];return h(i,"DatabaseFactory")?F(r,e,i):null})}function O(r){const e=[],i=[],t=[];for(const a of r)if(a.type==="DynamoDB"){const s=C(a);s&&i.push(s)}else if(a.type==="ClickHouse"){const s=P(a);s&&t.push(s)}else e.push(a);return{databases:e,dynamodb:i,clickhouse:t}}const k=["Instance","Aurora","GlobalAurora"];function q(r){return r.filter(e=>e.type!=="DynamoDB").map(e=>({name:e.resourceName,type:b(k,e.type)?e.type:"Instance",databaseName:e.databaseName,...N({port:e.port,deletionProtection:e.deletionProtection,instanceType:e.instanceType,multiAz:e.multiAz,publiclyAccessible:e.publiclyAccessible,enableSecretRotation:e.enableSecretRotation,encryption:e.encryption,databaseInsights:e.databaseInsights,proxy:e.proxy,readReplica:e.readReplica,credentials:e.credentials,writer:e.writer,readers:e.readers,backupRetention:e.backupRetention,preferredMaintenanceWindow:e.preferredMaintenanceWindow,primaryRegion:e.primaryRegion,secondaryRegions:e.secondaryRegions,globalClusterIdentifier:e.globalClusterIdentifier,enableGlobalWriteForwarding:e.enableGlobalWriteForwarding,allocatedStorage:e.allocatedStorage,monitoringInterval:e.monitoringInterval,variableName:e.variableName,databaseEngine:e.databaseEngine,engineExpression:e.engineExpression,extraProperties:e.extraProperties})}))}export{V as convertClickHouseResources,q as convertDatabaseResources,j as convertDynamoDBResources,z as findDatabaseResources,O as splitDatabaseResources};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as ts from "typescript";
|
|
2
2
|
import { type Result } from "../types/Result.js";
|
|
3
|
+
import { type DnsRecordType } from "../dns/types.js";
|
|
3
4
|
/** One-of match for a single `new Domain(...)` call in an infrastructure file. */
|
|
4
5
|
export interface DomainCallMatch {
|
|
5
6
|
readonly callExpression: ts.NewExpression;
|
|
@@ -45,7 +46,7 @@ export type ParsedFjallTarget = {
|
|
|
45
46
|
};
|
|
46
47
|
export interface ParsedStandardRecord {
|
|
47
48
|
readonly kind: "standard";
|
|
48
|
-
readonly type:
|
|
49
|
+
readonly type: DnsRecordType;
|
|
49
50
|
readonly name: string;
|
|
50
51
|
readonly value: string | string[];
|
|
51
52
|
readonly ttl?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as l from"typescript";import{parseObjectLiteral as x,asString as c,asStringUnion as
|
|
1
|
+
import*as l from"typescript";import{parseObjectLiteral as x,asString as c,asStringUnion as y,asStringArray as k,asBoolean as h,asNumber as N,isCallRef as T,isParsedObject as g}from"./astCommonParser.js";import{success as a,failure as u}from"../types/Result.js";import{DnsRecordTypeSchema as $}from"../dns/types.js";import{DomainRegistrarSchema as I,AliasRecordTypeSchema as D,TYPED_FJALL_TARGET_KINDS as R}from"../dns/domainRecords.js";const _=I.options,E=$.options,L=D.options;function U(e){const n=[],t=i=>{if(l.isNewExpression(i)&&j(i.expression)){const o=v(i);o!==void 0&&n.push(o)}l.forEachChild(i,t)};if(t(e),n.length===0)return a(void 0);if(n.length>1)return u(new Error(`Expected exactly one 'new Domain(...)' call per infrastructure file, found ${n.length}`));const r=n[0];return r?a(r):a(void 0)}function j(e){return l.isIdentifier(e)&&e.text==="Domain"}function v(e){const n=e.arguments;if(!n||n.length<3)return;const t=n[0],r=n[1],i=n[2];if(!t||!r||!i||!l.isObjectLiteralExpression(i))return;const o=O(e);if(o===void 0)return;const d=C(e),s=l.isStringLiteral(r)?r.text:void 0;return{callExpression:e,containingStatement:o,propsObjectLiteral:i,domainVarId:d,scopeArgumentText:t.getText(),constructIdLiteral:s}}function O(e){let n=e;for(;n!==void 0;){if(l.isExpressionStatement(n)||l.isVariableStatement(n))return n;n=n.parent}}function C(e){let n=e.parent;for(;n!==void 0;){if(l.isVariableDeclaration(n)&&l.isIdentifier(n.name)&&n.initializer===e)return n.name.text;n=n.parent}}function Z(e){switch(e.kind){case"registrar_required":return"'registrar' property is required";case"registrar_unsupported":return`'registrar' must be one of ${_.join(", ")}, got ${JSON.stringify(e.value)}`;case"missing_field":return`'${e.field}' property is required`;case"invalid_literal":return`'${e.field}' ${e.reason}`}}function H(e){const n=x(e),t=y(n.registrar,_);if(t===void 0){const s=n.registrar;if(s===void 0)return u({kind:"registrar_required"});const f=typeof s=="string"?s:p(s);return u({kind:"registrar_unsupported",value:f})}const r=c(n.zoneName);if(r===void 0)return u({kind:"missing_field",field:"zoneName"});const i=V(n.records);if(!i.success)return i;const o=M(n.certificates);if(!o.success)return o;const d={zoneName:r,description:c(n.description),costAllocationEnvironment:c(n.costAllocationEnvironment),tags:Y(n.tags),records:i.data,certificates:o.data};switch(t){case"route53":{const s=S(n.delegations);return s.success?a({...d,registrar:t,hostedZoneId:c(n.hostedZoneId),delegations:s.data}):s}case"external-delegated":{const s=c(n.delegatedSubdomain);if(s===void 0)return u({kind:"missing_field",field:"delegatedSubdomain"});const f=S(n.delegations);return f.success?a({...d,registrar:t,delegatedSubdomain:s,delegations:f.data}):f}case"external-records":return a({...d,registrar:t})}}function Q(e){return Z(e)}function V(e){if(e===void 0)return a([]);if(!Array.isArray(e))return u({kind:"invalid_literal",field:"records",reason:"must be an array"});const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(!g(r))return u({kind:"invalid_literal",field:`records[${t}]`,reason:"must be an object literal"});const i=P(r,t);if(!i.success)return i;n.push(i.data)}return a(n)}function P(e,n){const t=c(e.type),r=c(e.name);if(t===void 0)return u({kind:"missing_field",field:`records[${n}].type`});if(r===void 0)return u({kind:"missing_field",field:`records[${n}].name`});if(e.target!==void 0){if(!L.some(f=>f===t))return u({kind:"invalid_literal",field:`records[${n}]`,reason:`alias records must have type 'A' or 'AAAA', got '${t}'`});const s=q(e.target);return a({kind:"alias",type:t,name:r,target:s})}if(!E.some(s=>s===t))return u({kind:"invalid_literal",field:`records[${n}]`,reason:`unsupported record type '${t}'`});const i=z(e.value);if(i===void 0)return u({kind:"invalid_literal",field:`records[${n}].value`,reason:`must be a string or array of strings (got ${JSON.stringify(e.value)})`});const o=N(e.ttl),d={kind:"standard",type:t,name:r,value:i,...o!==void 0?{ttl:o}:{}};return a(d)}function z(e){if(e===void 0)return;if(typeof e=="string")return e;const n=k(e);if(n!==void 0)return n}function q(e){if(T(e))return J(e);if(g(e)){const n=y(e.kind,R);if(n==="ecs"||n==="cdn"){const t=c(e.appName);if(t!==void 0)return{kind:n,appName:t}}if(n==="bucket"){const t=c(e.bucketName);if(t!==void 0)return{kind:n,bucketName:t}}if(n==="custom"){const t=c(e.dnsName),r=c(e.hostedZoneId);if(t!==void 0&&r!==void 0)return{kind:n,dnsName:t,hostedZoneId:r}}}return{kind:"unresolved",sourceText:p(e)}}function J(e){const n=e.__call.trim(),t=n.match(/^([A-Za-z_][\w$]*)\s*\(([\s\S]*)\)\s*$/);if(!t)return{kind:"unresolved",sourceText:n};const r=t[1],i=t[2]??"",o=A(i);switch(r){case"fjallApp":{const d=m(o,0);return d===void 0?{kind:"dynamic",sourceText:n}:{kind:"ecs",appName:d}}case"fjallCdn":{const d=m(o,0);return d===void 0?{kind:"dynamic",sourceText:n}:{kind:"cdn",appName:d}}case"fjallBucket":{const d=m(o,0);return d===void 0?{kind:"dynamic",sourceText:n}:{kind:"bucket",bucketName:d}}case"aliasTo":{if(o.length>=2){const d=m(o,0),s=m(o,1);return d!==void 0&&s!==void 0?{kind:"custom",dnsName:d,hostedZoneId:s}:{kind:"dynamic",sourceText:n}}if(o.length===1){const d=o[0]?.trim()??"",s=b(d,"dnsName"),f=b(d,"hostedZoneId");return s!==void 0&&f!==void 0?{kind:"custom",dnsName:s,hostedZoneId:f}:{kind:"dynamic",sourceText:n}}return{kind:"unresolved",sourceText:n}}default:return{kind:"unresolved",sourceText:n}}}function A(e){const n=[];let t=0,r=null,i="";for(let d=0;d<e.length;d++){const s=e[d];if(r!==null){if(i+=s,s==="\\"&&d+1<e.length){const f=e[d+1];f!==void 0&&(i+=f,d+=1);continue}s===r&&(r=null);continue}if(s==='"'||s==="'"||s==="`"){r=s,i+=s;continue}if(s==="("||s==="{"||s==="["){t+=1,i+=s;continue}if(s===")"||s==="}"||s==="]"){t-=1,i+=s;continue}if(s===","&&t===0){n.push(i.trim()),i="";continue}i+=s}const o=i.trim();return o.length>0&&n.push(o),n}function m(e,n){const t=e[n];if(t===void 0)return;const r=t.trim();if(r.length<2)return;const i=r[0],o=r[r.length-1];if(i===o&&!(i!=='"'&&i!=="'"&&i!=="`"))return r.slice(1,-1)}function b(e,n){const t=e.trim().replace(/^\{|\}$/g,""),r=A(t);for(const i of r){const o=i.indexOf(":");if(o<0||i.slice(0,o).trim().replace(/["'`]/g,"")!==n)continue;const s=i.slice(o+1).trim();return m([s],0)}}function M(e){if(e===void 0)return a([]);if(!Array.isArray(e))return u({kind:"invalid_literal",field:"certificates",reason:"must be an array"});const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(typeof r=="string"){n.push({domainName:r});continue}if(!g(r))return u({kind:"invalid_literal",field:`certificates[${t}]`,reason:"must be a string or object literal"});const i=c(r.domainName);if(i===void 0)return u({kind:"missing_field",field:`certificates[${t}].domainName`});const o=k(r.subjectAlternativeNames),d=h(r.transparencyLogging);n.push({domainName:i,...o!==void 0?{subjectAlternativeNames:o}:{},...d!==void 0?{transparencyLogging:d}:{}})}return a(n)}function S(e){if(e===void 0)return a([]);if(!Array.isArray(e))return u({kind:"invalid_literal",field:"delegations",reason:"must be an array"});const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(!g(r))return u({kind:"invalid_literal",field:`delegations[${t}]`,reason:"must be an object literal"});const i=c(r.subdomain),o=c(r.toAccount);if(i===void 0)return u({kind:"missing_field",field:`delegations[${t}].subdomain`});if(o===void 0)return u({kind:"missing_field",field:`delegations[${t}].toAccount`});const d=h(r.auto);n.push({subdomain:i,toAccount:o,...d!==void 0?{auto:d}:{}})}return a(n)}function Y(e){if(e===void 0||!g(e))return;const n={};for(const[t,r]of Object.entries(e)){const i=c(r);i!==void 0&&(n[t]=i)}return Object.keys(n).length===0?void 0:n}function p(e){if(e===void 0)return"undefined";if(e===null)return"null";if(typeof e=="string")return JSON.stringify(e);if(typeof e=="number"||typeof e=="boolean")return String(e);if(Array.isArray(e))return`[${e.map(n=>p(n)).join(", ")}]`;if(typeof e=="object"){if("__call"in e)return String(e.__call);if("__identifier"in e)return String(e.__identifier);if("__expression"in e)return String(e.__expression);if("__unknown"in e)return String(e.__unknown)}return String(e)}export{U as findDomainConstructCall,Q as parseDomainErrorMessage,H as parseDomainProps,A as splitTopLevelArgs};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as o from"typescript";import{asBoolean as
|
|
1
|
+
import*as o from"typescript";import{SqsRemovalPolicySchema as f}from"../schemas/messagingSchemas.js";import{asBoolean as u,asNumber as a,asString as m,captureExtraProperties as p,collectFromAst as S,extractVariableName as y,isFactoryBuildCall as g,isFactoryMethodCall as P,isParsedObject as x,omitUndefined as d,parseObjectLiteral as b}from"./astCommonParser.js";function v(e,t){if(t.arguments.length<2)return null;const n=t.arguments[0],s=t.arguments[1];if(!o.isStringLiteral(n)||!o.isObjectLiteralExpression(s))return null;const i=b(s),r={resourceName:n.text,queueType:m(i.queueType)??"standard",visibilityTimeout:a(i.visibilityTimeout),retentionPeriod:a(i.messageRetentionPeriod),contentBasedDeduplication:u(i.contentBasedDeduplication),removalPolicy:m(i.removalPolicy),node:e},c=y(e);c&&(r.variableName=c);const l=p(i,new Set(["type","queueType","visibilityTimeout","messageRetentionPeriod","contentBasedDeduplication","removalPolicy"]));return l.length>0&&(r.extraProperties=l),r}function Q(e){if(e!=null){if(e===!1)return!1;if(x(e))return d({enabled:u(e.enabled),maxReceiveCount:a(e.maxReceiveCount)})}}function h(e){return S(e,t=>{if(!o.isCallExpression(t)||!P(t,"addMessaging"))return null;const n=t.arguments[0];return g(n,"MessagingFactory")?v(t,n):null})}function D(e){if(e.length!==0)return e.map(t=>({name:t.resourceName,queueType:t.queueType==="fifo"?"fifo":"standard",...d({visibilityTimeout:t.visibilityTimeout,retentionPeriod:t.retentionPeriod,contentBasedDeduplication:t.contentBasedDeduplication,removalPolicy:T(t.removalPolicy),variableName:t.variableName,extraProperties:t.extraProperties})}))}const N=new Set(f.options);function R(e){return N.has(e)}function T(e){return e!==void 0&&R(e)?e:void 0}export{D as convertSQSResources,h as findSQSResources,Q as parseDeadLetterQueueConfig};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as r from"typescript";import{constIncludes as
|
|
1
|
+
import*as r from"typescript";import{constIncludes as E,BACKUP_VAULT_TIERS as z}from"../schemas/constants.js";import{FlowLogDestinationSchema as A}from"../schemas/networkSchemas.js";import{asNumber as d,asString as p,collectFromAst as N,extractVariableName as O,findFirstInAst as f,isAppGetAppCall as u,isFactoryBuildCall as k,isFactoryMethodCall as F,isNamedProperty as a,isParsedObject as b,omitUndefined as l,parseObjectLiteral as c,parseBooleanOrConfig as x}from"./astCommonParser.js";const S=new Set(A.options);function T(n){if(n!==void 0)return S.has(n)?n:void 0}function w(n){return{maxAzs:d(n.maxAzs),natGateways:x(n.natGateways,e=>({count:d(e.count)})),flowLogs:x(n.flowLogs,e=>({destination:p(e.destination),retentionDays:d(e.retentionDays)})),vpcEndpoints:b(n.vpcEndpoints)?n.vpcEndpoints:void 0}}function h(n,e){if(e.arguments.length<2)return null;const t=e.arguments[0],i=e.arguments[1];if(!r.isStringLiteral(t))return null;const o=t.text,s=r.isObjectLiteralExpression(i)?c(i):{},L=w(s),g={name:o,config:l({...L}),node:n},m=O(n);return m&&(g.variableName=m),g}function v(n){return f(n,e=>{if(!u(e)||e.arguments.length<=1)return;const t=e.arguments[1];if(r.isObjectLiteralExpression(t)){for(const i of t.properties)if(a(i,"network")&&r.isObjectLiteralExpression(i.initializer)){for(const o of i.initializer.properties)if(a(o,"useExisting")&&r.isStringLiteral(o.initializer))return o.initializer.text}}})}function D(n){return f(n,e=>{if(!u(e)||e.arguments.length<=1)return;const t=e.arguments[1];if(r.isObjectLiteralExpression(t)){for(const i of t.properties)if(a(i,"network")){if(i.initializer.kind===r.SyntaxKind.FalseKeyword)return;if(r.isObjectLiteralExpression(i.initializer)&&!i.initializer.properties.some(s=>a(s,"useExisting"))){const s=c(i.initializer);return w(s)}}}})}function G(n){return f(n,e=>{if(!u(e)||e.arguments.length<=1)return;const t=e.arguments[1];if(r.isObjectLiteralExpression(t)){for(const i of t.properties)if(a(i,"backup")){if(i.initializer.kind===r.SyntaxKind.FalseKeyword)return!1;if(r.isObjectLiteralExpression(i.initializer)){const o=c(i.initializer),s=p(o.tier);if(s)return{tier:s}}}}})}function I(n){return f(n,e=>{if(!u(e)||e.arguments.length<=1)return;const t=e.arguments[1];if(r.isObjectLiteralExpression(t)){for(const i of t.properties)if(a(i,"tunnel")){if(i.initializer.kind===r.SyntaxKind.FalseKeyword)return!1;if(i.initializer.kind===r.SyntaxKind.TrueKeyword)return!0;if(r.isObjectLiteralExpression(i.initializer)){const o=c(i.initializer),s=p(o.instanceType);return s?{instanceType:s}:{}}}}})}function B(n){return N(n,e=>{if(!r.isCallExpression(e)||!F(e,"addNetwork"))return null;const t=e.arguments[0];return k(t,"NetworkFactory")?h(e,t):null})}function y(n){const e=n.flowLogs;return{...l({maxAzs:n.maxAzs,natGateways:n.natGateways,vpcEndpoints:n.vpcEndpoints}),...e!==void 0&&{flowLogs:e===!1?!1:l({destination:T(e.destination),retentionDays:e.retentionDays})}}}function U(n){if(n)return y(n)}function P(n){if(n===void 0)return;if(n===!1)return!1;const e=n.tier;if(E(z,e))return{tier:e}}function _(n){if(n===void 0)return;if(n===!1)return!1;if(n===!0)return{};const e={};return n.instanceType&&(e.instanceType=n.instanceType),e}function V(n){if(!(!n||n.length===0))return n.map(e=>({name:e.name,...y(e.config)}))}export{y as buildNetworkFields,V as convertAdditionalNetworks,P as convertBackupConfig,U as convertNetworkConfig,_ as convertTunnelConfig,G as findBackupConfig,D as findNetworkConfig,B as findNetworkResources,I as findTunnelConfig,v as findVpcId};
|
|
@@ -632,6 +632,7 @@ export declare function parseAndConvert(code: string): {
|
|
|
632
632
|
visibilityTimeout?: number | undefined;
|
|
633
633
|
retentionPeriod?: number | undefined;
|
|
634
634
|
contentBasedDeduplication?: boolean | undefined;
|
|
635
|
+
removalPolicy?: "DESTROY" | "RETAIN" | undefined;
|
|
635
636
|
variableName?: string | undefined;
|
|
636
637
|
extraProperties?: {
|
|
637
638
|
key: string;
|
|
@@ -13,6 +13,18 @@ export declare const TypedFjallTargetSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
|
|
|
13
13
|
dnsName: z.ZodString;
|
|
14
14
|
hostedZoneId: z.ZodString;
|
|
15
15
|
}, z.core.$strict>], "kind">;
|
|
16
|
+
export declare const TYPED_FJALL_TARGET_KINDS: ("custom" | "ecs" | "cdn" | "bucket")[];
|
|
17
|
+
export declare const AliasRecordTypeSchema: z.ZodEnum<{
|
|
18
|
+
A: "A";
|
|
19
|
+
AAAA: "AAAA";
|
|
20
|
+
}>;
|
|
21
|
+
export type AliasRecordType = z.infer<typeof AliasRecordTypeSchema>;
|
|
22
|
+
export declare const DomainRegistrarSchema: z.ZodEnum<{
|
|
23
|
+
route53: "route53";
|
|
24
|
+
"external-delegated": "external-delegated";
|
|
25
|
+
"external-records": "external-records";
|
|
26
|
+
}>;
|
|
27
|
+
export type DomainRegistrar = z.infer<typeof DomainRegistrarSchema>;
|
|
16
28
|
export declare const ParsedStandardRecordSchema: z.ZodObject<{
|
|
17
29
|
kind: z.ZodLiteral<"standard">;
|
|
18
30
|
type: z.ZodEnum<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z as e}from"zod";const r=e.discriminatedUnion("kind",[e.object({kind:e.literal("ecs"),appName:e.string()}).strict(),e.object({kind:e.literal("cdn"),appName:e.string()}).strict(),e.object({kind:e.literal("bucket"),bucketName:e.string()}).strict(),e.object({kind:e.literal("custom"),dnsName:e.string(),hostedZoneId:e.string()}).strict()]),a=e.object({kind:e.literal("standard"),type:e.enum(["A","AAAA","CNAME","MX","TXT","NS","SRV","CAA"]),name:e.string(),value:e.union([e.string(),e.array(e.string())]),ttl:e.number().int().positive().optional()}).strict(),
|
|
1
|
+
import{z as e}from"zod";const r=e.discriminatedUnion("kind",[e.object({kind:e.literal("ecs"),appName:e.string()}).strict(),e.object({kind:e.literal("cdn"),appName:e.string()}).strict(),e.object({kind:e.literal("bucket"),bucketName:e.string()}).strict(),e.object({kind:e.literal("custom"),dnsName:e.string(),hostedZoneId:e.string()}).strict()]),g=r.options.map(t=>t.shape.kind.value),a=e.enum(["A","AAAA"]),n=e.enum(["route53","external-delegated","external-records"]),i=e.object({kind:e.literal("standard"),type:e.enum(["A","AAAA","CNAME","MX","TXT","NS","SRV","CAA"]),name:e.string(),value:e.union([e.string(),e.array(e.string())]),ttl:e.number().int().positive().optional()}).strict(),o=e.object({kind:e.literal("alias"),type:a,name:e.string(),target:r}).strict(),s=e.discriminatedUnion("kind",[i,o]),d=e.object({domainName:e.string(),subjectAlternativeNames:e.array(e.string()).optional(),transparencyLogging:e.boolean().optional()}).strict(),c=e.object({subdomain:e.string(),toAccount:e.string(),auto:e.boolean().optional()}).strict(),m=e.object({zoneName:e.string(),registrar:n,hostedZoneId:e.string().optional(),delegatedSubdomain:e.string().optional(),records:e.array(s),certificates:e.array(d),delegations:e.array(c)}).strict().refine(t=>t.registrar!=="external-delegated"||t.delegatedSubdomain!==void 0,{message:"external-delegated requires delegatedSubdomain"}).refine(t=>t.registrar!=="external-records"||t.delegations.length===0,{message:"external-records forbids delegations"});export{a as AliasRecordTypeSchema,n as DomainRegistrarSchema,o as ParsedAliasRecordSchema,d as ParsedCertificateSchema,s as ParsedDnsRecordSchema,m as ParsedDomainRecordsSchema,i as ParsedStandardRecordSchema,c as ParsedSubdomainDelegationSchema,g as TYPED_FJALL_TARGET_KINDS,r as TypedFjallTargetSchema};
|
|
@@ -1,9 +1,9 @@
|
|
|
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),
|
|
2
|
-
`:"",
|
|
3
|
-
StorageFactory.build(${r(i.name)}, {${
|
|
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}
|
|
4
4
|
})
|
|
5
5
|
);
|
|
6
|
-
`:t+=`${
|
|
6
|
+
`:t+=`${l}${y}app.addStorage(
|
|
7
7
|
StorageFactory.build(${r(i.name)}, {})
|
|
8
8
|
);
|
|
9
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+=`
|
|
@@ -36,14 +36,15 @@ const ${i} = app.addDatabase(
|
|
|
36
36
|
stream: true`),t+=u(n.extraProperties),t+=`
|
|
37
37
|
})
|
|
38
38
|
);
|
|
39
|
-
`}return t}function $(e,t){return t.compute.some(n=>n.connectedMessaging?.includes(e.name))}function
|
|
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+=`
|
|
40
40
|
${a}app.addMessaging(
|
|
41
41
|
MessagingFactory.build(${r(n.name)}, {
|
|
42
42
|
type: "queue",
|
|
43
43
|
queueType: ${r(n.queueType)}`,n.visibilityTimeout!==void 0&&(t+=`,
|
|
44
44
|
visibilityTimeout: ${n.visibilityTimeout}`),n.retentionPeriod!==void 0&&(t+=`,
|
|
45
45
|
messageRetentionPeriod: ${n.retentionPeriod}`),n.contentBasedDeduplication&&(t+=`,
|
|
46
|
-
contentBasedDeduplication: true`),
|
|
46
|
+
contentBasedDeduplication: true`),n.removalPolicy!==void 0&&(t+=`,
|
|
47
|
+
removalPolicy: ${r(n.removalPolicy)}`),t+=u(n.extraProperties),t+=`
|
|
47
48
|
})
|
|
48
49
|
);
|
|
49
|
-
`}return t}export{K as generateDynamoDBCode,x as generateS3Code,
|
|
50
|
+
`}return t}export{K as generateDynamoDBCode,x as generateS3Code,P as generateSQSCode,g as s3NeedsVariable,$ as sqsNeedsVariable};
|
|
@@ -759,6 +759,10 @@ export declare const ApplicationResourcePlanSchema: z.ZodObject<{
|
|
|
759
759
|
visibilityTimeout: z.ZodOptional<z.ZodNumber>;
|
|
760
760
|
retentionPeriod: z.ZodOptional<z.ZodNumber>;
|
|
761
761
|
contentBasedDeduplication: z.ZodOptional<z.ZodBoolean>;
|
|
762
|
+
removalPolicy: z.ZodOptional<z.ZodEnum<{
|
|
763
|
+
DESTROY: "DESTROY";
|
|
764
|
+
RETAIN: "RETAIN";
|
|
765
|
+
}>>;
|
|
762
766
|
variableName: z.ZodOptional<z.ZodString>;
|
|
763
767
|
extraProperties: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
764
768
|
key: z.ZodString;
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Removal policy for a generated SQS queue. Unset, the SQSQueue wrapper applies
|
|
4
|
+
* DESTROY (a queue is a transient work medium); RETAIN is the opt-in for a
|
|
5
|
+
* durable queue whose contents are irreplaceable and must survive stack
|
|
6
|
+
* deletion. The parser derives its accept-set from this schema's `.options`.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SqsRemovalPolicySchema: z.ZodEnum<{
|
|
9
|
+
DESTROY: "DESTROY";
|
|
10
|
+
RETAIN: "RETAIN";
|
|
11
|
+
}>;
|
|
12
|
+
export type SqsRemovalPolicy = z.infer<typeof SqsRemovalPolicySchema>;
|
|
2
13
|
/**
|
|
3
14
|
* SQS queue resource plan schema (for OpenNext patterns)
|
|
4
15
|
*/
|
|
@@ -11,6 +22,10 @@ export declare const SQSResourcePlanSchema: z.ZodObject<{
|
|
|
11
22
|
visibilityTimeout: z.ZodOptional<z.ZodNumber>;
|
|
12
23
|
retentionPeriod: z.ZodOptional<z.ZodNumber>;
|
|
13
24
|
contentBasedDeduplication: z.ZodOptional<z.ZodBoolean>;
|
|
25
|
+
removalPolicy: z.ZodOptional<z.ZodEnum<{
|
|
26
|
+
DESTROY: "DESTROY";
|
|
27
|
+
RETAIN: "RETAIN";
|
|
28
|
+
}>>;
|
|
14
29
|
variableName: z.ZodOptional<z.ZodString>;
|
|
15
30
|
extraProperties: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
16
31
|
key: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z as
|
|
1
|
+
import{z as o}from"zod";import{VALIDATION_MESSAGES as e}from"../validation/patterns.js";import{ResourceNameSchema as t,ExtraPropertySchema as a}from"./baseSchemas.js";const i=o.enum(["DESTROY","RETAIN"]),S=o.object({name:t,queueType:o.enum(["standard","fifo"]).default("standard"),visibilityTimeout:o.number().int(e.SQS.VISIBILITY_TIMEOUT.INTEGER).min(0,e.SQS.VISIBILITY_TIMEOUT.MIN).max(43200,e.SQS.VISIBILITY_TIMEOUT.MAX).optional(),retentionPeriod:o.number().int(e.SQS.RETENTION_PERIOD.INTEGER).min(60,e.SQS.RETENTION_PERIOD.MIN).max(1209600,e.SQS.RETENTION_PERIOD.MAX).optional(),contentBasedDeduplication:o.boolean().optional(),removalPolicy:i.optional(),variableName:o.string().optional(),extraProperties:o.array(a).optional()}).strict();export{S as SQSResourcePlanSchema,i as SqsRemovalPolicySchema};
|
|
@@ -5,6 +5,11 @@ export declare const NatConfigSchema: z.ZodObject<{
|
|
|
5
5
|
export declare const NatConfigOrFalseSchema: z.ZodUnion<[z.ZodLiteral<false>, z.ZodObject<{
|
|
6
6
|
count: z.ZodOptional<z.ZodNumber>;
|
|
7
7
|
}, z.core.$strict>]>;
|
|
8
|
+
export declare const FlowLogDestinationSchema: z.ZodEnum<{
|
|
9
|
+
s3: "s3";
|
|
10
|
+
cloudwatch: "cloudwatch";
|
|
11
|
+
}>;
|
|
12
|
+
export type FlowLogDestination = z.infer<typeof FlowLogDestinationSchema>;
|
|
8
13
|
export declare const FlowLogConfigSchema: z.ZodObject<{
|
|
9
14
|
destination: z.ZodOptional<z.ZodEnum<{
|
|
10
15
|
s3: "s3";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z as o}from"zod";import{VALIDATION_PATTERNS as t,VALIDATION_MESSAGES as e}from"../validation/patterns.js";import{optionalOrDisabled as n,AppNameSchema as l,ResourceNameSchema as a,PortSchema as m}from"./baseSchemas.js";const R=o.object({count:o.number().int(e.NAT_GATEWAY.INTEGER).min(0,e.NAT_GATEWAY.MIN).max(3,e.NAT_GATEWAY.MAX).optional()}).strict().describe("NAT gateway configuration"),i=n(R),A=o.
|
|
1
|
+
import{z as o}from"zod";import{VALIDATION_PATTERNS as t,VALIDATION_MESSAGES as e}from"../validation/patterns.js";import{optionalOrDisabled as n,AppNameSchema as l,ResourceNameSchema as a,PortSchema as m}from"./baseSchemas.js";const R=o.object({count:o.number().int(e.NAT_GATEWAY.INTEGER).min(0,e.NAT_GATEWAY.MIN).max(3,e.NAT_GATEWAY.MAX).optional()}).strict().describe("NAT gateway configuration"),i=n(R),A=o.enum(["cloudwatch","s3"]),N=o.object({destination:A.optional(),retentionDays:o.number().int(e.RETENTION_DAYS.INTEGER).min(1,e.RETENTION_DAYS.MIN).max(365,e.RETENTION_DAYS.MAX).optional(),trafficType:o.enum(["ALL","ACCEPT","REJECT"]).optional()}).strict().describe("VPC flow log configuration"),c=n(N),S=o.object({s3:o.boolean().optional(),dynamodb:o.boolean().optional()}).strict().describe("Gateway VPC endpoints (FREE)"),C=n(S),_=o.object({ecr:o.boolean().optional(),secretsManager:o.boolean().optional(),kms:o.boolean().optional(),cloudwatchLogs:o.boolean().optional(),ssm:o.boolean().optional(),sts:o.boolean().optional()}).strict().describe("Interface VPC endpoints (cost per hour)"),I=n(_),d=o.object({gateway:C.optional(),interface:I.optional()}).strict().describe("VPC endpoints configuration"),s=n(d),p=o.object({maxAzs:o.number().int(e.MAX_AZS.INTEGER).min(1,e.MAX_AZS.MIN).max(3,e.MAX_AZS.MAX).optional(),natGateways:i.optional(),flowLogs:c.optional(),vpcEndpoints:s.optional(),cidrMask:o.number().int(e.CIDR_MASK.INTEGER).min(16,e.CIDR_MASK.MIN).max(28,e.CIDR_MASK.MAX).optional()}).strict(),E=o.string().min(1,e.REQUIRED.NETWORK_NAME).max(50,e.MAX_LENGTH.NETWORK_NAME).regex(t.RESOURCE_NAME,e.RESOURCE_NAME),h=p.extend({name:E}).strict(),O=n(p),f=o.object({appName:l,networkName:E.optional(),maxAzs:o.number().int(e.MAX_AZS.INTEGER).min(1,e.MAX_AZS.MIN).max(3,e.MAX_AZS.MAX).optional(),natGateways:i.optional(),flowLogs:c.optional(),vpcEndpoints:s.optional()}).strict(),g=t.CIDR,r=o.string().regex(g,e.CIDR),x=o.object({kind:o.literal("database"),resource:o.string().min(1,e.REQUIRED.RESOURCE_REFERENCE),name:a,allowedFromCidrs:o.array(r),access:o.enum(["read","write","readWrite"]).optional()}).strict(),T=o.object({kind:o.literal("ecsService"),resource:o.string().min(1,e.REQUIRED.RESOURCE_REFERENCE),serviceName:o.string().min(1,e.REQUIRED.SERVICE_NAME),name:a,allowedFromCidrs:o.array(r),port:m.optional()}).strict(),b=o.discriminatedUnion("kind",[x,T]),w=o.object({name:a,peerAppName:o.string().min(1,e.REQUIRED.APP_NAME),peerAccountId:o.string().regex(t.AWS_ACCOUNT_ID,e.AWS_ACCOUNT_ID),peerRegion:o.string().min(1,e.VPC_PEER.REGION_REQUIRED).optional(),peerVpcId:o.string().regex(t.VPC_ID,e.VPC_ID).optional(),peerVpcCidr:r.optional(),peerRoleArn:o.string().regex(t.ROLE_ARN,e.ROLE_ARN).optional(),peerRouteTableIds:o.array(o.string().min(1,e.VPC_PEER.ROUTE_TABLE_ID_REQUIRED)).optional(),localVpcName:o.string().min(1,e.REQUIRED.NETWORK_NAME).optional(),enableDnsResolution:o.boolean().optional()}).strict(),P=o.object({name:a,requesterAccountIds:o.array(o.string().regex(t.AWS_ACCOUNT_ID,e.AWS_ACCOUNT_ID)).min(1,e.VPC_PEER.MIN_REQUESTER_ACCOUNTS),localVpcName:o.string().min(1,e.REQUIRED.NETWORK_NAME).optional(),publishToSsm:o.boolean().optional(),exposedResources:o.array(b).optional()}).strict();export{h as AdditionalNetworkResourcePlanSchema,g as CIDR_REGEX,r as CidrStringSchema,x as DatabaseExposedResourceSchema,T as EcsServiceExposedResourceSchema,b as ExposedResourceSchema,c as FlowLogConfigOrFalseSchema,N as FlowLogConfigSchema,A as FlowLogDestinationSchema,C as GatewayEndpointsConfigOrFalseSchema,S as GatewayEndpointsConfigSchema,I as InterfaceEndpointsConfigOrFalseSchema,_ as InterfaceEndpointsConfigSchema,i as NatConfigOrFalseSchema,R as NatConfigSchema,O as NetworkConfigSchema,f as NetworkGeneratorSchema,E as NetworkNameSchema,p as NetworkResourcePlanSchema,s as VpcEndpointsConfigOrFalseSchema,d as VpcEndpointsConfigSchema,P as VpcPeerAccepterResourcePlanSchema,w as VpcPeerResourcePlanSchema};
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const GENERATOR_VERSION = "2.
|
|
1
|
+
export declare const GENERATOR_VERSION = "2.16.0";
|
package/dist/src/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const E="2.
|
|
1
|
+
const E="2.16.0";export{E as GENERATOR_VERSION};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/generator",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.17.0",
|
|
4
4
|
"description": "Pure infrastructure generation logic for Fjall",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
},
|
|
44
44
|
"license": "SEE LICENSE IN LICENSE",
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@fjall/util": "^2.
|
|
46
|
+
"@fjall/util": "^2.17.0",
|
|
47
47
|
"ast-types": "^0.16.1",
|
|
48
48
|
"recast": "^0.23.11",
|
|
49
49
|
"ts-morph": "^28.0.0",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"typescript-eslint": "^8.59.1",
|
|
60
60
|
"vitest": "^4.1.5"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "21cfe1aae339e12183af2813ec81f581b9b77d49"
|
|
63
63
|
}
|