@fjall/generator 21.0.0 → 22.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.
- package/dist/.build-source-hash +7 -7
- package/dist/.minified +1 -1
- package/dist/src/detection/index.d.ts +174 -2
- package/dist/src/detection/index.js +1 -1
- package/dist/src/dns/domainFileGenerator.js +5 -36
- package/dist/src/schemas/devRolePolicies.d.ts +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +2 -2
package/dist/.build-source-hash
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"package.json",
|
|
10
10
|
"tsconfig.json"
|
|
11
11
|
],
|
|
12
|
-
"hash": "
|
|
12
|
+
"hash": "072da3c52c9b559750731318bd00cee13ef1e254a1b6e8ece9e9f4378f958c06",
|
|
13
13
|
"files": {
|
|
14
14
|
"src/ast/astTestHelpers.ts": "026cac849eb88bdb",
|
|
15
15
|
"src/ast/domain/astDomainParser.ts": "a88b990396db0a46",
|
|
@@ -111,10 +111,10 @@
|
|
|
111
111
|
"src/codemod/validationGate/gates/schema.ts": "7ed5acaec0620a46",
|
|
112
112
|
"src/codemod/validationGate/index.ts": "bbe1f460330a11cf",
|
|
113
113
|
"src/codemod/validationGate/types.ts": "4a1cfa054e3383d5",
|
|
114
|
-
"src/detection/index.ts": "
|
|
114
|
+
"src/detection/index.ts": "88a577f0173028d4",
|
|
115
115
|
"src/dns/bindParser.ts": "2b463c4dd1395ae5",
|
|
116
116
|
"src/dns/bindWriter.ts": "c296911ce5aef77c",
|
|
117
|
-
"src/dns/domainFileGenerator.ts": "
|
|
117
|
+
"src/dns/domainFileGenerator.ts": "f2d0ba8cca5ab1c9",
|
|
118
118
|
"src/dns/domainRecords.ts": "8bdfcb0b3b32a000",
|
|
119
119
|
"src/dns/index.ts": "5a0173ea07707af3",
|
|
120
120
|
"src/dns/tsEmitter.ts": "8e56a893773c1c07",
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
"src/schemas/computeSchemas.ts": "7105193fd34c8bcb",
|
|
166
166
|
"src/schemas/constants.ts": "b0abe53d7a42feb0",
|
|
167
167
|
"src/schemas/databaseSchemas.ts": "7d33a96789cbfdb5",
|
|
168
|
-
"src/schemas/devRolePolicies.ts": "
|
|
168
|
+
"src/schemas/devRolePolicies.ts": "73000c87ea0de1d2",
|
|
169
169
|
"src/schemas/index.ts": "a1500a885048074b",
|
|
170
170
|
"src/schemas/instanceTypeArchitecture.ts": "6bf38031a54a4620",
|
|
171
171
|
"src/schemas/messagingSchemas.ts": "2c1975fac903fd1b",
|
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
"src/validation/patterns.ts": "f9629eafdad7ac3e",
|
|
182
182
|
"src/validation/validationMessages.ts": "b03413b3953c3e79",
|
|
183
183
|
"src/validation/validationPatterns.ts": "865f3d688975b7c8",
|
|
184
|
-
"src/version.ts": "
|
|
184
|
+
"src/version.ts": "b24668563e688655",
|
|
185
185
|
"../scripts/minify-dist.mjs": "6b2e4b0df8aec601",
|
|
186
|
-
"package.json": "
|
|
186
|
+
"package.json": "68bbbd728e286eff",
|
|
187
187
|
"tsconfig.json": "1929cf3f99fe9b1e"
|
|
188
188
|
},
|
|
189
|
-
"outputHash": "
|
|
189
|
+
"outputHash": "b14439370356dd742ad72b81c29bf80df1c5ce3ffbd9470bac6637e6d3d42843",
|
|
190
190
|
"outputFileCount": 343
|
|
191
191
|
}
|
package/dist/.minified
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
171 files minified at 2026-08-
|
|
1
|
+
171 files minified at 2026-08-30T00:18:26.718Z
|
|
@@ -10,8 +10,18 @@
|
|
|
10
10
|
* `apps detect --output json` frame and the MCP `detect_app_framework`
|
|
11
11
|
* tool's `outputSchema`.
|
|
12
12
|
*/
|
|
13
|
+
import { type Framework } from "@fjall/util";
|
|
13
14
|
import { z } from "zod";
|
|
14
|
-
|
|
15
|
+
/**
|
|
16
|
+
* The framework vocabulary now lives in `@fjall/util/patterns`, beside the
|
|
17
|
+
* pattern vocabulary it has to be joined to — `FRAMEWORK_PATTERN_RECOMMENDATIONS`
|
|
18
|
+
* needs both halves in one module, and `generator` depends on `util` rather
|
|
19
|
+
* than the reverse. Re-exported here so detection's long-standing consumers,
|
|
20
|
+
* and the MCP tool's output contract, keep importing it from one place. This
|
|
21
|
+
* mirrors `STATIC_SITE_ROUTING_VALUES`: util owns the tuple, generator owns the
|
|
22
|
+
* Zod schema built over it.
|
|
23
|
+
*/
|
|
24
|
+
export { FRAMEWORK_VALUES, type Framework, FRAMEWORKS, isFramework, type PatternRecommendation, FRAMEWORK_PATTERN_RECOMMENDATIONS, recommendPatternForFramework, CREATABLE_FRAMEWORKS, } from "@fjall/util";
|
|
15
25
|
export declare const FrameworkSchema: z.ZodEnum<{
|
|
16
26
|
unknown: "unknown";
|
|
17
27
|
payload: "payload";
|
|
@@ -21,7 +31,93 @@ export declare const FrameworkSchema: z.ZodEnum<{
|
|
|
21
31
|
remix: "remix";
|
|
22
32
|
astro: "astro";
|
|
23
33
|
}>;
|
|
24
|
-
|
|
34
|
+
/**
|
|
35
|
+
* What a detected workspace IS, as opposed to what it is built with.
|
|
36
|
+
*
|
|
37
|
+
* A monorepo's workspaces are mostly not deployable: a design-token package
|
|
38
|
+
* and a shared content package have a `package.json` and no framework, and
|
|
39
|
+
* reporting them beside the real sites made the agent's first decision a
|
|
40
|
+
* judgement call it had no basis for. Detection has the evidence, so
|
|
41
|
+
* detection makes the call.
|
|
42
|
+
*/
|
|
43
|
+
export declare const APP_ROLE_VALUES: readonly ["application", "library"];
|
|
44
|
+
export declare const AppRoleSchema: z.ZodEnum<{
|
|
45
|
+
application: "application";
|
|
46
|
+
library: "library";
|
|
47
|
+
}>;
|
|
48
|
+
export type AppRole = z.infer<typeof AppRoleSchema>;
|
|
49
|
+
/**
|
|
50
|
+
* Classify a workspace. Deliberately conservative: a recognised framework or a
|
|
51
|
+
* Dockerfile is positive evidence of something deployable, and everything else
|
|
52
|
+
* is a library until it shows one. Being wrong in this direction costs the user
|
|
53
|
+
* an explicit `--pattern`; being wrong in the other direction invites an agent
|
|
54
|
+
* to scaffold infrastructure around a package that has no runtime.
|
|
55
|
+
*/
|
|
56
|
+
export declare function inferAppRole(framework: Framework, hasDockerfile: boolean): AppRole;
|
|
57
|
+
/** The wire form of `@fjall/util`'s `PatternRecommendation`. */
|
|
58
|
+
export declare const PatternRecommendationSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
59
|
+
kind: z.ZodLiteral<"recommended">;
|
|
60
|
+
pattern: z.ZodEnum<{
|
|
61
|
+
payload: "payload";
|
|
62
|
+
nextjs: "nextjs";
|
|
63
|
+
staticsite: "staticsite";
|
|
64
|
+
}>;
|
|
65
|
+
rationale: z.ZodString;
|
|
66
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
67
|
+
kind: z.ZodLiteral<"blocked">;
|
|
68
|
+
pattern: z.ZodEnum<{
|
|
69
|
+
payload: "payload";
|
|
70
|
+
nextjs: "nextjs";
|
|
71
|
+
staticsite: "staticsite";
|
|
72
|
+
}>;
|
|
73
|
+
reason: z.ZodString;
|
|
74
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
75
|
+
kind: z.ZodLiteral<"unsupported">;
|
|
76
|
+
reason: z.ZodString;
|
|
77
|
+
}, z.core.$strict>], "kind">;
|
|
78
|
+
/**
|
|
79
|
+
* Where each framework's build lands, relative to the workspace.
|
|
80
|
+
*
|
|
81
|
+
* `Record<Framework, ...>` so a new framework must state its convention rather
|
|
82
|
+
* than inherit a wrong default — and `outputDir` is the field where a wrong
|
|
83
|
+
* default is most expensive: the deploy succeeds and serves an empty bucket.
|
|
84
|
+
* `null` means "no convention worth asserting"; the caller then leaves the
|
|
85
|
+
* prefill empty and the create-time gate asks for the flag.
|
|
86
|
+
*/
|
|
87
|
+
export declare const FRAMEWORK_OUTPUT_DIRS: Record<Framework, string | null>;
|
|
88
|
+
/**
|
|
89
|
+
* Values `fjall apps create` will ask for, read from the repository instead of
|
|
90
|
+
* guessed by the agent. Null when the framework has no creatable pattern.
|
|
91
|
+
*
|
|
92
|
+
* `outputDir` is a CONVENTION, not an observation — nothing here has run the
|
|
93
|
+
* build. The field description says so, because an agent that treats it as
|
|
94
|
+
* verified will deploy an empty bucket without ever seeing an error.
|
|
95
|
+
*/
|
|
96
|
+
export declare const CreatePrefillSchema: z.ZodObject<{
|
|
97
|
+
pattern: z.ZodEnum<{
|
|
98
|
+
payload: "payload";
|
|
99
|
+
nextjs: "nextjs";
|
|
100
|
+
staticsite: "staticsite";
|
|
101
|
+
}>;
|
|
102
|
+
source: z.ZodString;
|
|
103
|
+
buildCommand: z.ZodNullable<z.ZodString>;
|
|
104
|
+
outputDir: z.ZodNullable<z.ZodString>;
|
|
105
|
+
routing: z.ZodNullable<z.ZodEnum<{
|
|
106
|
+
multipage: "multipage";
|
|
107
|
+
spa: "spa";
|
|
108
|
+
}>>;
|
|
109
|
+
}, z.core.$strict>;
|
|
110
|
+
export type CreatePrefill = z.infer<typeof CreatePrefillSchema>;
|
|
111
|
+
/**
|
|
112
|
+
* Assemble the create prefill for one detected workspace. Pure: the caller
|
|
113
|
+
* supplies the parsed `package.json` and the repo's monorepo tool.
|
|
114
|
+
*/
|
|
115
|
+
export declare function inferCreatePrefill(input: {
|
|
116
|
+
framework: Framework;
|
|
117
|
+
relativePath: string;
|
|
118
|
+
pkg: ParsedPackageJson | null;
|
|
119
|
+
monorepoTool: MonorepoTool | null;
|
|
120
|
+
}): CreatePrefill | null;
|
|
25
121
|
export declare const MONOREPO_TOOL_VALUES: readonly ["npm-workspaces", "pnpm", "lerna", "turbo", "nx"];
|
|
26
122
|
export declare const MonorepoToolSchema: z.ZodEnum<{
|
|
27
123
|
"npm-workspaces": "npm-workspaces";
|
|
@@ -50,6 +146,44 @@ export declare const AppDetectionSchema: z.ZodObject<{
|
|
|
50
146
|
inferredPort: z.ZodNumber;
|
|
51
147
|
suggestedAppName: z.ZodString;
|
|
52
148
|
suggestedConfigPath: z.ZodString;
|
|
149
|
+
role: z.ZodEnum<{
|
|
150
|
+
application: "application";
|
|
151
|
+
library: "library";
|
|
152
|
+
}>;
|
|
153
|
+
recommendation: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
154
|
+
kind: z.ZodLiteral<"recommended">;
|
|
155
|
+
pattern: z.ZodEnum<{
|
|
156
|
+
payload: "payload";
|
|
157
|
+
nextjs: "nextjs";
|
|
158
|
+
staticsite: "staticsite";
|
|
159
|
+
}>;
|
|
160
|
+
rationale: z.ZodString;
|
|
161
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
162
|
+
kind: z.ZodLiteral<"blocked">;
|
|
163
|
+
pattern: z.ZodEnum<{
|
|
164
|
+
payload: "payload";
|
|
165
|
+
nextjs: "nextjs";
|
|
166
|
+
staticsite: "staticsite";
|
|
167
|
+
}>;
|
|
168
|
+
reason: z.ZodString;
|
|
169
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
170
|
+
kind: z.ZodLiteral<"unsupported">;
|
|
171
|
+
reason: z.ZodString;
|
|
172
|
+
}, z.core.$strict>], "kind">;
|
|
173
|
+
create: z.ZodNullable<z.ZodObject<{
|
|
174
|
+
pattern: z.ZodEnum<{
|
|
175
|
+
payload: "payload";
|
|
176
|
+
nextjs: "nextjs";
|
|
177
|
+
staticsite: "staticsite";
|
|
178
|
+
}>;
|
|
179
|
+
source: z.ZodString;
|
|
180
|
+
buildCommand: z.ZodNullable<z.ZodString>;
|
|
181
|
+
outputDir: z.ZodNullable<z.ZodString>;
|
|
182
|
+
routing: z.ZodNullable<z.ZodEnum<{
|
|
183
|
+
multipage: "multipage";
|
|
184
|
+
spa: "spa";
|
|
185
|
+
}>>;
|
|
186
|
+
}, z.core.$strict>>;
|
|
53
187
|
}, z.core.$strict>;
|
|
54
188
|
export type AppDetection = z.infer<typeof AppDetectionSchema>;
|
|
55
189
|
export declare const RepositoryDetectionSchema: z.ZodObject<{
|
|
@@ -81,6 +215,44 @@ export declare const RepositoryDetectionSchema: z.ZodObject<{
|
|
|
81
215
|
inferredPort: z.ZodNumber;
|
|
82
216
|
suggestedAppName: z.ZodString;
|
|
83
217
|
suggestedConfigPath: z.ZodString;
|
|
218
|
+
role: z.ZodEnum<{
|
|
219
|
+
application: "application";
|
|
220
|
+
library: "library";
|
|
221
|
+
}>;
|
|
222
|
+
recommendation: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
223
|
+
kind: z.ZodLiteral<"recommended">;
|
|
224
|
+
pattern: z.ZodEnum<{
|
|
225
|
+
payload: "payload";
|
|
226
|
+
nextjs: "nextjs";
|
|
227
|
+
staticsite: "staticsite";
|
|
228
|
+
}>;
|
|
229
|
+
rationale: z.ZodString;
|
|
230
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
231
|
+
kind: z.ZodLiteral<"blocked">;
|
|
232
|
+
pattern: z.ZodEnum<{
|
|
233
|
+
payload: "payload";
|
|
234
|
+
nextjs: "nextjs";
|
|
235
|
+
staticsite: "staticsite";
|
|
236
|
+
}>;
|
|
237
|
+
reason: z.ZodString;
|
|
238
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
239
|
+
kind: z.ZodLiteral<"unsupported">;
|
|
240
|
+
reason: z.ZodString;
|
|
241
|
+
}, z.core.$strict>], "kind">;
|
|
242
|
+
create: z.ZodNullable<z.ZodObject<{
|
|
243
|
+
pattern: z.ZodEnum<{
|
|
244
|
+
payload: "payload";
|
|
245
|
+
nextjs: "nextjs";
|
|
246
|
+
staticsite: "staticsite";
|
|
247
|
+
}>;
|
|
248
|
+
source: z.ZodString;
|
|
249
|
+
buildCommand: z.ZodNullable<z.ZodString>;
|
|
250
|
+
outputDir: z.ZodNullable<z.ZodString>;
|
|
251
|
+
routing: z.ZodNullable<z.ZodEnum<{
|
|
252
|
+
multipage: "multipage";
|
|
253
|
+
spa: "spa";
|
|
254
|
+
}>>;
|
|
255
|
+
}, z.core.$strict>>;
|
|
84
256
|
}, z.core.$strict>>;
|
|
85
257
|
warnings: z.ZodArray<z.ZodString>;
|
|
86
258
|
}, z.core.$strict>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var c=Object.defineProperty;var
|
|
1
|
+
var c=Object.defineProperty;var o=(e,t)=>c(e,"name",{value:t,configurable:!0});import{buildAppConfigPath as p,FRAMEWORK_VALUES as u,PATTERN_TYPE_VALUES as s,STATIC_SITE_ROUTING_VALUES as f,recommendPatternForFramework as d}from"@fjall/util";import{z as r}from"zod";import{FRAMEWORK_VALUES as q,FRAMEWORKS as V,isFramework as I,FRAMEWORK_PATTERN_RECOMMENDATIONS as B,recommendPatternForFramework as G,CREATABLE_FRAMEWORKS as J}from"@fjall/util";const m=r.enum(u),b=["application","library"],k=r.enum(b);function T(e,t){return e!=="unknown"||t?"application":"library"}o(T,"inferAppRole");const g=r.discriminatedUnion("kind",[r.object({kind:r.literal("recommended"),pattern:r.enum(s),rationale:r.string()}).strict(),r.object({kind:r.literal("blocked"),pattern:r.enum(s),reason:r.string()}).strict(),r.object({kind:r.literal("unsupported"),reason:r.string()}).strict()]),w={astro:"dist",nextjs:"out","nextjs+payload":null,payload:null,remix:null,express:null,unknown:null},x=r.object({pattern:r.enum(s),source:r.string().describe("Directory the build runs in, relative to the repo root."),buildCommand:r.string().nullable().describe("Build command, from the workspace's own build script. Null when it declares none."),outputDir:r.string().nullable().describe("Build output directory relative to `source`, by framework convention \u2014 NOT verified against disk. Confirm it exists after building before deploying."),routing:r.enum(f).nullable()}).strict();function h(e){return e==="pnpm"?"pnpm run build":"npm run build"}o(h,"buildCommandFor");function F(e){const t=d(e.framework);if(t.kind!=="recommended")return null;const n=typeof e.pkg?.scripts?.build=="string"&&e.pkg.scripts.build.trim().length>0;return{pattern:t.pattern,source:e.relativePath===""?".":e.relativePath,buildCommand:n?h(e.monorepoTool):null,outputDir:w[e.framework],routing:t.pattern==="staticsite"?"multipage":null}}o(F,"inferCreatePrefill");const A=["npm-workspaces","pnpm","lerna","turbo","nx"],E=r.enum(A),R=r.object({relativePath:r.string().describe("Path relative to repo root. '.' for flat repo, e.g. 'apps/website' for monorepo workspace."),framework:m,packageName:r.string().nullable(),hasDockerfile:r.boolean(),docker:r.object({path:r.string().describe("Path to chosen Dockerfile, relative to relativePath.")}).strict().nullable().describe("Docker build descriptor. Null if no Dockerfile present."),inferredPort:r.number().int().min(1).max(65535),suggestedAppName:r.string().describe("kebab-case app name suggestion derived from packageName or relativePath."),suggestedConfigPath:r.string().describe("Suggested fjall config path relative to repo root, e.g. 'fjall/website' or 'apps/website/fjall/website'."),role:k.describe("'application' if deployable evidence was found (a framework, or a Dockerfile); 'library' otherwise. Do not scaffold libraries."),recommendation:g.describe("What this workspace's framework means for `fjall apps create --pattern`. Pass `pattern` from here; never pass the framework name."),create:x.nullable().describe("Values to pass to `fjall apps create`, read from the repository. Null when no pattern applies.")}).strict(),O=r.object({isMonorepo:r.boolean(),monorepoTool:E.nullable(),rootPackageName:r.string().nullable(),apps:r.array(R).describe("Detected apps. Empty if nothing scaffoldable was found. Single-element for flat repos, multi-element for monorepos."),warnings:r.array(r.string()).describe("Non-fatal observations (e.g. 'apps/legacy has no package.json \u2014 skipped').")}).strict();function _(e,t){return t.turboJson?"turbo":t.nxJson?"nx":t.pnpmWorkspaceYaml?"pnpm":t.lernaJson?"lerna":e?.workspaces?"npm-workspaces":null}o(_,"inferMonorepoTool");function j(e){return e?.workspaces?Array.isArray(e.workspaces)?e.workspaces:e.workspaces.packages??[]:[]}o(j,"extractWorkspaceGlobs");const D=[{framework:"nextjs+payload",required:["next","payload"]},{framework:"nextjs",required:["next"]},{framework:"payload",required:["payload"]},{framework:"remix",required:["@remix-run/node"]},{framework:"astro",required:["astro"]},{framework:"express",required:["express"]}];function M(e){if(!e)return"unknown";const t={...e.dependencies??{},...e.devDependencies??{}};for(const n of D)if(n.required.every(a=>a in t))return n.framework;return"unknown"}o(M,"inferFrameworkFromDeps");const y={nextjs:3e3,"nextjs+payload":3e3,payload:3e3,remix:3e3,astro:4321,express:3e3,unknown:3e3};function C(e){return y[e]}o(C,"inferPortForFramework");function N(e){if(e.length===0)return null;const t=e.find(i=>i==="Dockerfile");if(t)return{name:t,isDev:!1};const n=e.find(i=>i.startsWith("Dockerfile")&&!/\.(dev|local|test)$/i.test(i));if(n)return{name:n,isDev:!1};const a=e.find(i=>/\.dev$/i.test(i));if(a)return{name:a,isDev:!0};const l=e[0];return l===void 0?null:{name:l,isDev:!1}}o(N,"pickPreferredDockerfile");function W(e,t){if(e){const a=e.replace(/^@[^/]+\//,"");if(a.length>0)return a}return t==="."||t===""?"app":t.split("/").pop()??"app"}o(W,"suggestAppName");function L(e,t){return t==="."||t===""?p(e):p(e,t)}o(L,"suggestConfigPath");export{b as APP_ROLE_VALUES,R as AppDetectionSchema,k as AppRoleSchema,J as CREATABLE_FRAMEWORKS,x as CreatePrefillSchema,V as FRAMEWORKS,w as FRAMEWORK_OUTPUT_DIRS,B as FRAMEWORK_PATTERN_RECOMMENDATIONS,q as FRAMEWORK_VALUES,m as FrameworkSchema,A as MONOREPO_TOOL_VALUES,E as MonorepoToolSchema,g as PatternRecommendationSchema,O as RepositoryDetectionSchema,j as extractWorkspaceGlobs,T as inferAppRole,F as inferCreatePrefill,M as inferFrameworkFromDeps,_ as inferMonorepoTool,C as inferPortForFramework,I as isFramework,N as pickPreferredDockerfile,G as recommendPatternForFramework,W as suggestAppName,L as suggestConfigPath};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var p=Object.defineProperty;var
|
|
1
|
+
var p=Object.defineProperty;var r=(t,e)=>p(t,"name",{value:e,configurable:!0});import{getDomainStackName as w,FJALL_COMPONENT_GITIGNORE as g}from"@fjall/util";import{toPascalCase as h}from"../generation/common.js";import{GENERATOR_VERSION as d}from"../version.js";function $(t){const{domainName:e,hostedZoneId:o,records:n=[]}=t,a=t.basePath??`fjall/domains/${e}`;return[{path:`${a}/infrastructure.ts`,content:k({domainName:e,records:n,hostedZoneId:o})},{path:`${a}/package.json`,content:f(e)},{path:`${a}/tsconfig.json`,content:N},{path:`${a}/cdk.json`,content:y},{path:`${a}/cdk.context.json`,content:S},{path:`${a}/.gitignore`,content:g}]}r($,"generateDomainFiles");function k(t){const{domainName:e,records:o,hostedZoneId:n}=t,a=h(e.split(".").join("")),i=w(e),c=o.map(s=>{const m=s.ttl!==void 0?`, ttl: ${s.ttl}`:"";return` { type: ${JSON.stringify(s.type)}, name: ${JSON.stringify(s.name)}, value: ${JSON.stringify(s.value)}${m} },`}),l=c.length>0?`[
|
|
2
2
|
${c.join(`
|
|
3
3
|
`)}
|
|
4
4
|
]`:"[]",u=n?` hostedZoneId: ${JSON.stringify(n)},
|
|
@@ -44,7 +44,7 @@ ${u} // Position-independent record logical IDs (fresh-zone default): records
|
|
|
44
44
|
// and adoptedNameServers (both together) on the child Domain \u2014 the literals
|
|
45
45
|
// feed the parent NS UPSERT because an imported zone exposes no name-server
|
|
46
46
|
// attribute at synth.
|
|
47
|
-
`}
|
|
47
|
+
`}r(k,"generateDefaultInfrastructureTs");function f(t){return`{
|
|
48
48
|
"name": ${JSON.stringify(`domain-${t}`)},
|
|
49
49
|
"version": "${d}",
|
|
50
50
|
"type": "module",
|
|
@@ -60,38 +60,7 @@ ${u} // Position-independent record logical IDs (fresh-zone default): records
|
|
|
60
60
|
"constructs": "^10.7.2"
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
`}
|
|
64
|
-
*.d.ts
|
|
65
|
-
node_modules
|
|
66
|
-
.cdk.staging
|
|
67
|
-
**/**/cdk.out
|
|
68
|
-
|
|
69
|
-
.DS_Store
|
|
70
|
-
|
|
71
|
-
# Fjall config (contains organisation-specific settings)
|
|
72
|
-
fjall-config.json
|
|
73
|
-
|
|
74
|
-
# Fjall-managed state directories. Keep explicit so drift baselines
|
|
75
|
-
# (Phase 6) and codemod history (Phase 2) stay out of version control.
|
|
76
|
-
/.fjall/history/
|
|
77
|
-
/.fjall/baseline/
|
|
78
|
-
/.fjall/logs/
|
|
79
|
-
|
|
80
|
-
# Fjall per-target deploy state \u2014 a per-machine cache of last-deployed template
|
|
81
|
-
# hashes (cascade deploys write one file per account/region). Safe when absent:
|
|
82
|
-
# a missing file marks every stack changed, so the next deploy is a full deploy.
|
|
83
|
-
# Stays out of version control to avoid churn and merge conflicts between
|
|
84
|
-
# deployers. The *.tmp pair covers atomic-write temp files; the
|
|
85
|
-
# .deploy-state.json pair is the legacy name, kept while migration unlinks it.
|
|
86
|
-
.fjall-state*.json
|
|
87
|
-
.fjall-state*.json.tmp
|
|
88
|
-
.deploy-state.json
|
|
89
|
-
.deploy-state.json.tmp
|
|
90
|
-
|
|
91
|
-
# Fjall backup files (sibling \`.bak\` from codemod mutations + domain eject)
|
|
92
|
-
**/backup/
|
|
93
|
-
*.bak
|
|
94
|
-
`,y=`{
|
|
63
|
+
`}r(f,"generateDomainPackageJson");const N=`{
|
|
95
64
|
"compilerOptions": {
|
|
96
65
|
"target": "ES2022",
|
|
97
66
|
"module": "NodeNext",
|
|
@@ -119,7 +88,7 @@ fjall-config.json
|
|
|
119
88
|
`,S=`{
|
|
120
89
|
"acknowledged-issue-numbers": [32775, 34892, 34635]
|
|
121
90
|
}
|
|
122
|
-
`,
|
|
91
|
+
`,y=`{
|
|
123
92
|
"app": "npx tsx infrastructure.ts",
|
|
124
93
|
"assetMetadata": false,
|
|
125
94
|
"pathMetadata": false,
|
|
@@ -175,4 +144,4 @@ fjall-config.json
|
|
|
175
144
|
"@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true
|
|
176
145
|
}
|
|
177
146
|
}
|
|
178
|
-
`;export{
|
|
147
|
+
`;export{$ as generateDomainFiles};
|
|
@@ -11,7 +11,7 @@ import { type BoundaryStatement } from "./securityBoundary.js";
|
|
|
11
11
|
* (`components/infrastructure/lib/config/aws/oidcConnector.ts`) — consumes
|
|
12
12
|
* these builders directly, so construct⇔SSoT parity holds by construction;
|
|
13
13
|
* 2. the static Quick-Create template
|
|
14
|
-
* (`
|
|
14
|
+
* (`public-assets/fjall/public-assets/assets/oidc-connector.yaml`) — hand-
|
|
15
15
|
* mirrors the rendered JSON, locked by the deep-compare fixture in
|
|
16
16
|
* `components/infrastructure/lib/__tests__/devRoleParity.test.ts`;
|
|
17
17
|
* 3. the webapp `dev-gate-remediate` pass (Phase-2 Increment C) — imports
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const GENERATOR_VERSION = "
|
|
1
|
+
export declare const GENERATOR_VERSION = "22.0.0";
|
package/dist/src/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const E="
|
|
1
|
+
const E="22.0.0";export{E as GENERATOR_VERSION};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/generator",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "22.0.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/fjall-tech/fjall.git",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"license": "SEE LICENSE IN LICENSE",
|
|
59
59
|
"dependencies": {
|
|
60
60
|
"@babel/parser": "^7.29.8",
|
|
61
|
-
"@fjall/util": "^
|
|
61
|
+
"@fjall/util": "^22.0.0",
|
|
62
62
|
"ast-types": "^0.16.1",
|
|
63
63
|
"recast": "^0.23.12",
|
|
64
64
|
"ts-morph": "^28.0.0",
|