@redrockswebdevelopment/formstack-platform-cli 0.2.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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export declare function runFspt(argv?: readonly string[]): Promise<void>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA2oCA,wBAAsB,OAAO,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAiI5F"}
package/dist/index.js ADDED
@@ -0,0 +1,989 @@
1
+ #!/usr/bin/env node
2
+ import path from "node:path";
3
+ import { mkdir, writeFile } from "node:fs/promises";
4
+ import { fileURLToPath } from "node:url";
5
+ import { buildAndMaybeMinifyCodeEmbeds, generateFormFieldTypes, generateFieldOptionTypes, getDataRouteProfile, getCodeEmbedProfile, getFormCodeEmbedProfile, getFormProfile, loadFormstackProjectConfig, minifyCodeEmbeds, } from "@redrockswebdevelopment/formstack-code-embed";
6
+ import { auditLineage, buildLineageGraph, checkLineageFreshness, checkLineageMappings, generateLineageContracts, getLineageProfile, inventoryLineageSnapshots, parseLineageSmarty, queryLineageGraph, simulateLineageScenario, validateLineageScenarios, } from "@redrockswebdevelopment/formstack-lineage";
7
+ import { FormstackFormsConnector } from "@redrockswebdevelopment/formstack-forms-api-connector";
8
+ import { WebmergeClient } from "@redrockswebdevelopment/formstack-documents-api-connector";
9
+ import { assignFormTheme, buildFormStyle, getFormStyleEmbedProfile, getFormThemeProfile, minifyFormStyles, syncFormStyle, } from "@redrockswebdevelopment/formstack-form-styling";
10
+ function parseArgs(argv) {
11
+ const positionals = [];
12
+ const flags = new Map();
13
+ for (let index = 0; index < argv.length; index += 1) {
14
+ const arg = argv[index];
15
+ if (!arg) {
16
+ continue;
17
+ }
18
+ if (!arg.startsWith("--")) {
19
+ positionals.push(arg);
20
+ continue;
21
+ }
22
+ const name = arg.slice(2);
23
+ const next = argv[index + 1];
24
+ if (next && !next.startsWith("--")) {
25
+ flags.set(name, next);
26
+ index += 1;
27
+ continue;
28
+ }
29
+ flags.set(name, true);
30
+ }
31
+ return { positionals, flags };
32
+ }
33
+ function flagString(flags, name) {
34
+ const value = flags.get(name);
35
+ return typeof value === "string" ? value : undefined;
36
+ }
37
+ function flagBoolean(flags, name) {
38
+ return flags.get(name) === true;
39
+ }
40
+ function flagNumber(flags, name) {
41
+ const value = flagString(flags, name);
42
+ if (value == null) {
43
+ return undefined;
44
+ }
45
+ const parsed = Number(value);
46
+ if (!Number.isFinite(parsed)) {
47
+ throw new Error(`--${name} must be a number.`);
48
+ }
49
+ return parsed;
50
+ }
51
+ function usage() {
52
+ return [
53
+ "Usage:",
54
+ " fspt code-embed build [--config <project.mjs>] --profile <name> [--minify]",
55
+ " fspt code-embed build [--config <project.mjs>] --form <name> --embed <name> [--minify]",
56
+ " fspt code-embed build --entry <input:output.js> [--entry <input:output.js>] --out-dir <dir> [--root <dir>] [--minify]",
57
+ " fspt code-embed minify [--config <project.mjs>] --profile <name>",
58
+ " fspt code-embed minify [--config <project.mjs>] --form <name> --embed <name>",
59
+ " fspt code-embed minify --input-dir <dir> [--out-dir <dir>] [--file <file.js>]",
60
+ " fspt code-embed field-options [--config <project.mjs>] --profile <name> [--check]",
61
+ " fspt code-embed field-options --form-backup <backup.json> --source <file.ts> [--source <file.ts>] --out <generated.d.ts> [--root <dir>] [--check]",
62
+ " fspt forms pull [--config <project.mjs>] --form <name> [--token-env <env>]",
63
+ " fspt forms field-types [--config <project.mjs>] --form <name> [--check]",
64
+ " fspt forms field-types [--config <project.mjs>] --all [--check]",
65
+ " fspt forms field-types --form-backup <backup.json> --out <generated.d.ts> [--field <id>] [--all-fields] [--root <dir>] [--check]",
66
+ " fspt documents file <document-id> [--out <pdf>] [--api-key-env <env>] [--api-secret-env <env>]",
67
+ " fspt data-routes pull [--config <project.mjs>] --route <name> [--api-key-env <env>] [--api-secret-env <env>]",
68
+ " fspt styles build [--config <project.mjs>] --form <name> --embed <name>",
69
+ " fspt styles build --input <style.css> [--out <style.html>] [--out-dir <dir>] [--root <dir>] [--minify]",
70
+ " fspt styles minify --input-dir <dir> [--out-dir <dir>] [--file <file.css>]",
71
+ " fspt styles sync [--config <project.mjs>] --form <name> --embed <name> [--token-env <env>]",
72
+ " fspt themes list [--token-env <env>] [--format json|markdown]",
73
+ " fspt themes copy --theme <id> [--name <name>] [--token-env <env>]",
74
+ " fspt themes assign [--config <project.mjs>] --form <name> [--theme <id>] [--token-env <env>]",
75
+ " fspt themes assign --form-id <id> --theme <id> [--token-env <env>]",
76
+ " fspt lineage inventory [--config <project.mjs>] --profile <name> [--format json|markdown]",
77
+ " fspt lineage freshness [--config <project.mjs>] --profile <name> [--max-age-days <days>] [--format json|markdown]",
78
+ " fspt lineage is-fresh [--config <project.mjs>] --profile <name> [--max-age-days <days>]",
79
+ " fspt lineage contract [--config <project.mjs>] --profile <name> [--write]",
80
+ " fspt lineage parse-smarty [--config <project.mjs>] --profile <name> [--write]",
81
+ " fspt lineage build [--config <project.mjs>] --profile <name> [--write]",
82
+ " fspt lineage query <target> <value> [second] [--config <project.mjs>] --profile <name> [--format json|markdown|llm-context] [--chart] [--write-to <path>]",
83
+ " fspt lineage mappings check [--config <project.mjs>] --profile <name> [--strict]",
84
+ " fspt lineage audit [--config <project.mjs>] --profile <name>",
85
+ " fspt lineage scenarios validate [--config <project.mjs>] --profile <name>",
86
+ " fspt lineage simulate --scenario <id> [--config <project.mjs>] --profile <name> [--write] [--update-expected]",
87
+ "",
88
+ "Options:",
89
+ " --config <path> JavaScript or JSON project config. Defaults to formstack.project.mjs.",
90
+ " --profile <name> codeEmbeds profile name from config.",
91
+ " --form <name> forms registry key from config.",
92
+ " --route <name> dataRoutes registry key from config.",
93
+ " --embed <name> Code Embed key under a form registry entry.",
94
+ " --entry <in:out> Direct entry mapping. Repeatable with shell argument repetition.",
95
+ " --file <file.js> Direct minify file name. Repeatable with shell argument repetition.",
96
+ " --source <file.ts> Source file to scan for field option type references. Repeatable.",
97
+ " --field <id> Field ID to generate without source scanning. Repeatable.",
98
+ " --document <id> Formstack Documents template ID.",
99
+ " --form-backup <path> Local Formstack form backup JSON for field option types.",
100
+ " --out <path> Generated declaration output path.",
101
+ " --root <dir> Project root for direct entry mode.",
102
+ " --out-dir <dir> Build output directory for direct entry mode.",
103
+ " --input-dir <dir> Minify input directory for direct minify mode.",
104
+ " --format <format> Output format for report commands.",
105
+ " --max-age-days <days> Maximum API snapshot age for freshness checks.",
106
+ " --write Write generated lineage artifacts.",
107
+ " --write-to <path> Write command output to a file.",
108
+ " --minified-out-dir Minified output directory.",
109
+ " --minify Also write minified files.",
110
+ " --token-env <name> Environment variable containing a Formstack Forms API token.",
111
+ " --api-key-env <name> Environment variable containing a Formstack Documents API key.",
112
+ " --api-secret-env <name> Environment variable containing a Formstack Documents API secret.",
113
+ ].join("\n");
114
+ }
115
+ function readRepeatedFlag(argv, name) {
116
+ const values = [];
117
+ for (let index = 0; index < argv.length; index += 1) {
118
+ if (argv[index] === `--${name}` && argv[index + 1]) {
119
+ values.push(argv[index + 1]);
120
+ index += 1;
121
+ }
122
+ }
123
+ return values;
124
+ }
125
+ function parseEntry(value, index) {
126
+ const separatorIndex = value.lastIndexOf(":");
127
+ if (separatorIndex === -1) {
128
+ const parsed = path.parse(value);
129
+ return {
130
+ name: parsed.name || `entry${index + 1}`,
131
+ input: value,
132
+ outputFile: `${parsed.name || `entry${index + 1}`}.js`,
133
+ };
134
+ }
135
+ const input = value.slice(0, separatorIndex);
136
+ const outputFile = value.slice(separatorIndex + 1);
137
+ const parsedOutput = path.parse(outputFile);
138
+ return {
139
+ name: parsedOutput.name || `entry${index + 1}`,
140
+ input,
141
+ outputFile,
142
+ };
143
+ }
144
+ function defaultConfigPath() {
145
+ return path.resolve("formstack.project.mjs");
146
+ }
147
+ function configCwd(configPath) {
148
+ return path.dirname(path.resolve(configPath));
149
+ }
150
+ async function writeJsonFile(filePath, value) {
151
+ await mkdir(path.dirname(filePath), { recursive: true });
152
+ await writeFile(filePath, `${JSON.stringify(value, null, 2)}\n`, "utf8");
153
+ }
154
+ async function loadCodeEmbedProfile(configPath, profileName) {
155
+ const config = await loadFormstackProjectConfig(configPath);
156
+ return getCodeEmbedProfile(config, profileName);
157
+ }
158
+ async function loadCodeEmbedProfileFromArgs(configPath, flags) {
159
+ const formName = flagString(flags, "form");
160
+ if (formName) {
161
+ const embedName = flagString(flags, "embed") ?? flagString(flags, "profile");
162
+ if (!embedName) {
163
+ throw new Error("Missing --embed for form-scoped Code Embed command.");
164
+ }
165
+ const config = await loadFormstackProjectConfig(configPath);
166
+ return getFormCodeEmbedProfile(config, formName, embedName);
167
+ }
168
+ const profileName = flagString(flags, "profile");
169
+ if (!profileName) {
170
+ throw new Error("Missing --profile for config-based Code Embed command.");
171
+ }
172
+ return loadCodeEmbedProfile(configPath, profileName);
173
+ }
174
+ function buildOptionsFromProfile(configPath, profile) {
175
+ return {
176
+ cwd: configCwd(configPath),
177
+ ...profile,
178
+ };
179
+ }
180
+ function resolveFrom(base, value) {
181
+ return path.isAbsolute(value) ? value : path.resolve(base, value);
182
+ }
183
+ function outputFileFor(entry) {
184
+ return entry.outputFile ?? `${entry.name}.js`;
185
+ }
186
+ function minifyOptionsFromProfile(configPath, profile) {
187
+ const cwd = configCwd(configPath);
188
+ const root = profile.root ? resolveFrom(cwd, profile.root) : cwd;
189
+ const minifyOptions = profile.minify ?? {};
190
+ return {
191
+ ...minifyOptions,
192
+ inputDir: resolveFrom(root, minifyOptions.inputDir ?? profile.outDir ?? "dist-code-embed"),
193
+ outDir: resolveFrom(root, minifyOptions.outDir ?? profile.minifiedOutDir ?? "dist-code-embed-min"),
194
+ files: minifyOptions.files ?? profile.entries.map(outputFileFor),
195
+ };
196
+ }
197
+ function getFormsAccessTokenFromFlags(flags) {
198
+ const tokenEnv = flagString(flags, "token-env") ?? "FORMSTACK_ACCESS_TOKEN";
199
+ const accessToken = process.env[tokenEnv];
200
+ if (!accessToken) {
201
+ throw new Error(`Missing Formstack access token. Set ${tokenEnv} or pass --token-env <env>.`);
202
+ }
203
+ return accessToken;
204
+ }
205
+ function createFormsConnectorFromFlags(flags) {
206
+ const accessToken = getFormsAccessTokenFromFlags(flags);
207
+ return new FormstackFormsConnector({ accessToken });
208
+ }
209
+ function createDocumentsClientFromFlags(flags) {
210
+ const apiKeyEnv = flagString(flags, "api-key-env") ?? "WEBMERGE_API_KEY";
211
+ const apiSecretEnv = flagString(flags, "api-secret-env") ?? "WEBMERGE_API_SECRET";
212
+ const apiKey = process.env[apiKeyEnv];
213
+ const apiSecret = process.env[apiSecretEnv];
214
+ if (!apiKey) {
215
+ throw new Error(`Missing Formstack Documents API key. Set ${apiKeyEnv} or pass --api-key-env <env>.`);
216
+ }
217
+ if (!apiSecret) {
218
+ throw new Error(`Missing Formstack Documents API secret. Set ${apiSecretEnv} or pass --api-secret-env <env>.`);
219
+ }
220
+ return new WebmergeClient({ apiKey, apiSecret });
221
+ }
222
+ function styleOptionsFromProfile(configPath, profile) {
223
+ return {
224
+ cwd: configCwd(configPath),
225
+ ...profile,
226
+ };
227
+ }
228
+ async function loadStyleProfileFromArgs(configPath, flags) {
229
+ const formName = flagString(flags, "form");
230
+ const embedName = flagString(flags, "embed") ?? flagString(flags, "profile");
231
+ if (!formName || !embedName) {
232
+ throw new Error("Missing --form or --embed for config-based style command.");
233
+ }
234
+ const config = (await loadFormstackProjectConfig(configPath));
235
+ return getFormStyleEmbedProfile(config, formName, embedName);
236
+ }
237
+ async function loadFormIdFromConfig(configPath, formName) {
238
+ const config = await loadFormstackProjectConfig(configPath);
239
+ const form = getFormProfile(config, formName);
240
+ if (form.id == null) {
241
+ throw new Error(`Form "${formName}" does not define id.`);
242
+ }
243
+ return form.id;
244
+ }
245
+ function fieldOptionTypesOptionsFromProfile(configPath, profile) {
246
+ if (!profile.fieldOptionTypes) {
247
+ throw new Error("Code Embed profile does not define fieldOptionTypes.");
248
+ }
249
+ const root = profile.fieldOptionTypes.root ?? profile.root;
250
+ return {
251
+ cwd: configCwd(configPath),
252
+ ...profile.fieldOptionTypes,
253
+ ...(root ? { root } : {}),
254
+ };
255
+ }
256
+ async function loadFormFieldTypesOptions(configPath, formName) {
257
+ const config = await loadFormstackProjectConfig(configPath);
258
+ const form = getFormProfile(config, formName);
259
+ const fieldTypes = form.fieldTypes;
260
+ const formBackup = fieldTypes?.formBackup ?? form.formBackup;
261
+ if (!formBackup) {
262
+ throw new Error(`Form "${formName}" does not define formBackup or fieldTypes.formBackup.`);
263
+ }
264
+ if (!fieldTypes?.outFile) {
265
+ throw new Error(`Form "${formName}" does not define fieldTypes.outFile.`);
266
+ }
267
+ const root = fieldTypes.root;
268
+ return {
269
+ cwd: configCwd(configPath),
270
+ ...fieldTypes,
271
+ formBackup,
272
+ includeAllFields: fieldTypes.includeAllFields ?? true,
273
+ ...(root ? { root } : {}),
274
+ };
275
+ }
276
+ async function loadLineageProfileFromArgs(argv) {
277
+ const parsed = parseArgs(argv);
278
+ const profileName = flagString(parsed.flags, "profile");
279
+ if (!profileName) {
280
+ throw new Error("Missing --profile for lineage command.");
281
+ }
282
+ const configPath = flagString(parsed.flags, "config") ?? defaultConfigPath();
283
+ const config = (await loadFormstackProjectConfig(configPath));
284
+ return {
285
+ configPath,
286
+ profile: getLineageProfile(config, profileName),
287
+ };
288
+ }
289
+ async function runCodeEmbedBuild(argv) {
290
+ const parsed = parseArgs(argv);
291
+ const configPath = flagString(parsed.flags, "config") ?? (flagString(parsed.flags, "profile") || flagString(parsed.flags, "form") ? defaultConfigPath() : undefined);
292
+ const shouldMinify = flagBoolean(parsed.flags, "minify");
293
+ if (configPath) {
294
+ const profile = await loadCodeEmbedProfileFromArgs(configPath, parsed.flags).catch((error) => {
295
+ if (error instanceof Error && error.message === "Missing --profile for config-based Code Embed command.") {
296
+ throw new Error("Missing --profile for config-based Code Embed build.");
297
+ }
298
+ throw error;
299
+ });
300
+ const result = await buildAndMaybeMinifyCodeEmbeds(buildOptionsFromProfile(configPath, profile), shouldMinify);
301
+ printBuildResult(result);
302
+ return;
303
+ }
304
+ const entries = readRepeatedFlag(argv, "entry").map(parseEntry);
305
+ if (entries.length === 0) {
306
+ throw new Error("Missing --entry or --config.");
307
+ }
308
+ const directOptions = { entries };
309
+ const root = flagString(parsed.flags, "root");
310
+ const outDir = flagString(parsed.flags, "out-dir");
311
+ const minifiedOutDir = flagString(parsed.flags, "minified-out-dir");
312
+ const result = await buildAndMaybeMinifyCodeEmbeds({
313
+ ...directOptions,
314
+ ...(root ? { root } : {}),
315
+ ...(outDir ? { outDir } : {}),
316
+ ...(minifiedOutDir ? { minifiedOutDir } : {}),
317
+ }, shouldMinify);
318
+ printBuildResult(result);
319
+ }
320
+ async function runCodeEmbedMinify(argv) {
321
+ const parsed = parseArgs(argv);
322
+ const profileName = flagString(parsed.flags, "profile");
323
+ const configPath = flagString(parsed.flags, "config") ?? (profileName || flagString(parsed.flags, "form") ? defaultConfigPath() : undefined);
324
+ if (configPath) {
325
+ const profile = await loadCodeEmbedProfileFromArgs(configPath, parsed.flags).catch((error) => {
326
+ if (error instanceof Error && error.message === "Missing --profile for config-based Code Embed command.") {
327
+ throw new Error("Missing --profile for config-based Code Embed minify.");
328
+ }
329
+ throw error;
330
+ });
331
+ printMinifyResult(await minifyCodeEmbeds(minifyOptionsFromProfile(configPath, profile)));
332
+ return;
333
+ }
334
+ const inputDir = flagString(parsed.flags, "input-dir");
335
+ const outDir = flagString(parsed.flags, "out-dir");
336
+ const files = readRepeatedFlag(argv, "file");
337
+ if (!inputDir) {
338
+ throw new Error("Missing --input-dir or --config.");
339
+ }
340
+ printMinifyResult(await minifyCodeEmbeds({
341
+ inputDir,
342
+ ...(outDir ? { outDir } : {}),
343
+ ...(files.length > 0 ? { files } : {}),
344
+ }));
345
+ }
346
+ async function runCodeEmbedFieldOptions(argv) {
347
+ const parsed = parseArgs(argv);
348
+ const profileName = flagString(parsed.flags, "profile");
349
+ const configPath = flagString(parsed.flags, "config") ?? (profileName ? defaultConfigPath() : undefined);
350
+ const check = flagBoolean(parsed.flags, "check");
351
+ if (configPath) {
352
+ if (!profileName) {
353
+ throw new Error("Missing --profile for config-based Code Embed field option generation.");
354
+ }
355
+ const profile = await loadCodeEmbedProfile(configPath, profileName);
356
+ printFieldOptionTypesResult(await generateFieldOptionTypes({
357
+ ...fieldOptionTypesOptionsFromProfile(configPath, profile),
358
+ check,
359
+ }), check);
360
+ return;
361
+ }
362
+ const formBackup = flagString(parsed.flags, "form-backup");
363
+ const outFile = flagString(parsed.flags, "out");
364
+ const root = flagString(parsed.flags, "root");
365
+ const sourceFiles = readRepeatedFlag(argv, "source");
366
+ const fieldIds = [
367
+ ...readRepeatedFlag(argv, "field"),
368
+ ...(flagString(parsed.flags, "fields") ?? "")
369
+ .split(",")
370
+ .map((fieldId) => fieldId.trim())
371
+ .filter((fieldId) => fieldId.length > 0),
372
+ ];
373
+ if (!formBackup || !outFile) {
374
+ throw new Error("Missing --form-backup or --out.");
375
+ }
376
+ if (sourceFiles.length === 0 && fieldIds.length === 0) {
377
+ throw new Error("Missing --source or --field.");
378
+ }
379
+ printFieldOptionTypesResult(await generateFieldOptionTypes({
380
+ formBackup,
381
+ sourceFiles,
382
+ outFile,
383
+ ...(root ? { root } : {}),
384
+ ...(fieldIds.length > 0 ? { fieldIds } : {}),
385
+ ...(flagBoolean(parsed.flags, "export") ? { exportDeclarations: true } : {}),
386
+ check,
387
+ }), check);
388
+ }
389
+ async function runFormsPull(argv) {
390
+ const parsed = parseArgs(argv);
391
+ const configPath = flagString(parsed.flags, "config") ?? defaultConfigPath();
392
+ const formName = flagString(parsed.flags, "form");
393
+ if (!formName) {
394
+ throw new Error("Missing --form for form pull.");
395
+ }
396
+ const config = await loadFormstackProjectConfig(configPath);
397
+ const form = getFormProfile(config, formName);
398
+ if (form.id == null) {
399
+ throw new Error(`Form "${formName}" does not define id.`);
400
+ }
401
+ const formBackup = form.fieldTypes?.formBackup ?? form.formBackup;
402
+ if (!formBackup) {
403
+ throw new Error(`Form "${formName}" does not define formBackup or fieldTypes.formBackup.`);
404
+ }
405
+ const connector = createFormsConnectorFromFlags(parsed.flags);
406
+ const result = await connector.forms.getWithFullFields(form.id);
407
+ const outputPath = resolveFrom(configCwd(configPath), formBackup);
408
+ await writeJsonFile(outputPath, result);
409
+ console.log(`Pulled form ${form.id} to ${outputPath}`);
410
+ }
411
+ async function runFormsFieldTypes(argv) {
412
+ const parsed = parseArgs(argv);
413
+ const configPath = flagString(parsed.flags, "config") ?? (flagString(parsed.flags, "form") || flagBoolean(parsed.flags, "all") ? defaultConfigPath() : undefined);
414
+ const check = flagBoolean(parsed.flags, "check");
415
+ if (configPath) {
416
+ const config = await loadFormstackProjectConfig(configPath);
417
+ const formName = flagString(parsed.flags, "form");
418
+ const formNames = formName ? [formName] : flagBoolean(parsed.flags, "all") ? Object.keys(config.forms ?? {}) : [];
419
+ if (formNames.length === 0) {
420
+ throw new Error("Missing --form or --all for config-based form field type generation.");
421
+ }
422
+ for (const name of formNames) {
423
+ printGeneratedTypesResult(await generateFormFieldTypes({ ...(await loadFormFieldTypesOptions(configPath, name)), check }), check, "field types");
424
+ }
425
+ return;
426
+ }
427
+ const formBackup = flagString(parsed.flags, "form-backup");
428
+ const outFile = flagString(parsed.flags, "out");
429
+ const root = flagString(parsed.flags, "root");
430
+ const sourceFiles = readRepeatedFlag(argv, "source");
431
+ const fieldIds = [
432
+ ...readRepeatedFlag(argv, "field"),
433
+ ...(flagString(parsed.flags, "fields") ?? "")
434
+ .split(",")
435
+ .map((fieldId) => fieldId.trim())
436
+ .filter((fieldId) => fieldId.length > 0),
437
+ ];
438
+ if (!formBackup || !outFile) {
439
+ throw new Error("Missing --form-backup or --out.");
440
+ }
441
+ printGeneratedTypesResult(await generateFormFieldTypes({
442
+ formBackup,
443
+ sourceFiles,
444
+ outFile,
445
+ includeAllFields: flagBoolean(parsed.flags, "all-fields") || (sourceFiles.length === 0 && fieldIds.length === 0),
446
+ ...(root ? { root } : {}),
447
+ ...(fieldIds.length > 0 ? { fieldIds } : {}),
448
+ ...(flagBoolean(parsed.flags, "export") ? { exportDeclarations: true } : {}),
449
+ check,
450
+ }), check, "field types");
451
+ }
452
+ async function runStylesBuild(argv) {
453
+ const parsed = parseArgs(argv);
454
+ const configPath = flagString(parsed.flags, "config") ?? (flagString(parsed.flags, "form") ? defaultConfigPath() : undefined);
455
+ if (configPath) {
456
+ const profile = await loadStyleProfileFromArgs(configPath, parsed.flags);
457
+ const result = await buildFormStyle(styleOptionsFromProfile(configPath, profile));
458
+ printStyleBuildResult(result);
459
+ return;
460
+ }
461
+ const input = flagString(parsed.flags, "input");
462
+ if (!input) {
463
+ throw new Error("Missing --input or --config.");
464
+ }
465
+ const root = flagString(parsed.flags, "root");
466
+ const outputFile = flagString(parsed.flags, "out");
467
+ const outDir = flagString(parsed.flags, "out-dir");
468
+ const result = await buildFormStyle({
469
+ input,
470
+ ...(root ? { root } : {}),
471
+ ...(outputFile ? { outputFile } : {}),
472
+ ...(outDir ? { outDir } : {}),
473
+ ...(flagBoolean(parsed.flags, "minify") ? { minify: true } : {}),
474
+ });
475
+ printStyleBuildResult(result);
476
+ }
477
+ async function runStylesMinify(argv) {
478
+ const parsed = parseArgs(argv);
479
+ const inputDir = flagString(parsed.flags, "input-dir");
480
+ if (!inputDir) {
481
+ throw new Error("Missing --input-dir.");
482
+ }
483
+ const outDir = flagString(parsed.flags, "out-dir");
484
+ const files = readRepeatedFlag(argv, "file");
485
+ const result = await minifyFormStyles({
486
+ inputDir,
487
+ ...(outDir ? { outDir } : {}),
488
+ ...(files.length > 0 ? { files } : {}),
489
+ });
490
+ printStyleMinifyResult(result);
491
+ }
492
+ async function runStylesSync(argv) {
493
+ const parsed = parseArgs(argv);
494
+ const configPath = flagString(parsed.flags, "config") ?? defaultConfigPath();
495
+ const formName = flagString(parsed.flags, "form");
496
+ const connector = createFormsConnectorFromFlags(parsed.flags);
497
+ if (!formName) {
498
+ throw new Error("Missing --form for style sync.");
499
+ }
500
+ const profile = await loadStyleProfileFromArgs(configPath, parsed.flags);
501
+ const formId = await loadFormIdFromConfig(configPath, formName);
502
+ const fieldId = flagString(parsed.flags, "field-id") ?? profile.fieldId;
503
+ if (fieldId == null) {
504
+ throw new Error(`Style profile for form "${formName}" does not define fieldId. Pass --field-id or set styles.embeds.<name>.fieldId.`);
505
+ }
506
+ const result = await syncFormStyle({
507
+ ...styleOptionsFromProfile(configPath, profile),
508
+ connector,
509
+ formId,
510
+ fieldId,
511
+ });
512
+ console.log(`Synced style embed field ${result.fieldId} on form ${result.formId}`);
513
+ console.log(`- ${path.basename(result.file.outputPath)}: ${result.file.outputBytes} bytes`);
514
+ }
515
+ async function runDataRoutesPull(argv) {
516
+ const parsed = parseArgs(argv);
517
+ const configPath = flagString(parsed.flags, "config") ?? defaultConfigPath();
518
+ const routeName = flagString(parsed.flags, "route");
519
+ if (!routeName) {
520
+ throw new Error("Missing --route for data route pull.");
521
+ }
522
+ const config = await loadFormstackProjectConfig(configPath);
523
+ const route = getDataRouteProfile(config, routeName);
524
+ if (route.id == null) {
525
+ throw new Error(`Data route "${routeName}" does not define id.`);
526
+ }
527
+ const client = createDocumentsClientFromFlags(parsed.flags);
528
+ const root = configCwd(configPath);
529
+ const writes = [];
530
+ if (route.routeBackup) {
531
+ writes.push({ label: "route", path: route.routeBackup, value: await client.getRoute(route.id) });
532
+ }
533
+ if (route.fieldsBackup) {
534
+ writes.push({ label: "fields", path: route.fieldsBackup, value: await client.getRouteFields(route.id) });
535
+ }
536
+ if (route.rulesBackup) {
537
+ writes.push({ label: "rules", path: route.rulesBackup, value: await client.getRouteRules(route.id) });
538
+ }
539
+ if (route.deliveriesBackup) {
540
+ writes.push({ label: "deliveries", path: route.deliveriesBackup, value: await client.getRouteDeliveries(route.id) });
541
+ }
542
+ if (writes.length === 0) {
543
+ throw new Error(`Data route "${routeName}" does not define any API-backed backup paths. Set routeBackup, fieldsBackup, rulesBackup, or deliveriesBackup.`);
544
+ }
545
+ for (const write of writes) {
546
+ const outputPath = resolveFrom(root, write.path);
547
+ await writeJsonFile(outputPath, write.value);
548
+ console.log(`Pulled data route ${write.label} for ${route.id} to ${outputPath}`);
549
+ }
550
+ if (route.fieldMap) {
551
+ console.log(`Skipped manual field map ${resolveFrom(root, route.fieldMap)}`);
552
+ }
553
+ }
554
+ async function runDocumentsFile(argv) {
555
+ const parsed = parseArgs(argv);
556
+ const documentId = flagString(parsed.flags, "document") ?? parsed.positionals[0];
557
+ if (!documentId) {
558
+ throw new Error("Missing document ID for documents file.");
559
+ }
560
+ const client = createDocumentsClientFromFlags(parsed.flags);
561
+ const result = await client.getDocumentFile(documentId);
562
+ const output = flagString(parsed.flags, "out");
563
+ if (!output) {
564
+ console.log(JSON.stringify(result, null, 2));
565
+ return;
566
+ }
567
+ const outputPath = resolveFrom(process.cwd(), output);
568
+ const body = Buffer.from(result.contents, "base64");
569
+ await mkdir(path.dirname(outputPath), { recursive: true });
570
+ await writeFile(outputPath, body);
571
+ console.log(`Downloaded document file ${documentId} to ${outputPath}`);
572
+ }
573
+ async function runThemesList(argv) {
574
+ const parsed = parseArgs(argv);
575
+ const connector = createFormsConnectorFromFlags(parsed.flags);
576
+ const pageNumber = flagNumber(parsed.flags, "page-number");
577
+ const pageSize = flagNumber(parsed.flags, "page-size");
578
+ const result = await connector.themes.list({
579
+ ...(pageNumber == null ? {} : { pageNumber }),
580
+ ...(pageSize == null ? {} : { pageSize }),
581
+ });
582
+ const format = flagString(parsed.flags, "format") ?? "markdown";
583
+ if (format === "json") {
584
+ console.log(JSON.stringify(result, null, 2));
585
+ return;
586
+ }
587
+ if (format !== "markdown") {
588
+ throw new Error(`Unsupported format "${format}". Use json or markdown.`);
589
+ }
590
+ console.log("Formstack themes");
591
+ for (const theme of result.themes) {
592
+ console.log(`- ${theme.id}: ${theme.name}${theme.isDefault ? " (default)" : ""}`);
593
+ }
594
+ }
595
+ async function runThemesCopy(argv) {
596
+ const parsed = parseArgs(argv);
597
+ const connector = createFormsConnectorFromFlags(parsed.flags);
598
+ const themeId = flagString(parsed.flags, "theme") ?? flagString(parsed.flags, "from") ?? parsed.positionals[0];
599
+ if (!themeId) {
600
+ throw new Error("Missing --theme for theme copy.");
601
+ }
602
+ const name = flagString(parsed.flags, "name");
603
+ const result = await connector.themes.copy(themeId, {
604
+ ...(name ? { name } : {}),
605
+ });
606
+ console.log(`Copied theme ${themeId} to ${result.id}`);
607
+ }
608
+ async function runThemesAssign(argv) {
609
+ const parsed = parseArgs(argv);
610
+ const connector = createFormsConnectorFromFlags(parsed.flags);
611
+ const configPath = flagString(parsed.flags, "config") ?? (flagString(parsed.flags, "form") ? defaultConfigPath() : undefined);
612
+ const directFormId = flagString(parsed.flags, "form-id");
613
+ const directThemeId = flagString(parsed.flags, "theme");
614
+ if (configPath) {
615
+ const formName = flagString(parsed.flags, "form");
616
+ if (!formName) {
617
+ throw new Error("Missing --form for config-based theme assignment.");
618
+ }
619
+ const config = (await loadFormstackProjectConfig(configPath));
620
+ const formId = await loadFormIdFromConfig(configPath, formName);
621
+ const theme = directThemeId ?? getFormThemeProfile(config, formName);
622
+ const result = await assignFormTheme({ connector, formId, theme });
623
+ console.log(`Assigned theme ${result.currentThemeId ?? directThemeId ?? "unknown"} to form ${result.formId ?? formId}`);
624
+ return;
625
+ }
626
+ if (!directFormId || !directThemeId) {
627
+ throw new Error("Missing --form-id or --theme for direct theme assignment.");
628
+ }
629
+ const result = await assignFormTheme({ connector, formId: directFormId, theme: directThemeId });
630
+ console.log(`Assigned theme ${result.currentThemeId ?? directThemeId} to form ${result.formId ?? directFormId}`);
631
+ }
632
+ function printFieldOptionTypesResult(result, check) {
633
+ printGeneratedTypesResult(result, check, "field option types");
634
+ }
635
+ function printGeneratedTypesResult(result, check, label) {
636
+ if (check) {
637
+ console.log(`${result.outFile} is ${result.changed ? "out of date" : "up to date"}.`);
638
+ if (result.changed) {
639
+ process.exitCode = 1;
640
+ }
641
+ return;
642
+ }
643
+ console.log(`Generated ${label} for ${result.fieldIds.length} fields to ${result.outFile}`);
644
+ }
645
+ function printBuildResult(result) {
646
+ console.log(`Built Code Embed files to ${result.build.outDir}`);
647
+ for (const file of result.build.files) {
648
+ console.log(`- ${path.basename(file.outputPath)}: ${file.bytes} bytes`);
649
+ }
650
+ if (result.minify) {
651
+ printMinifyResult(result.minify);
652
+ }
653
+ }
654
+ function printMinifyResult(result) {
655
+ console.log(`Minified Code Embed files to ${result.outDir}`);
656
+ for (const file of result.files) {
657
+ const reduction = Math.round((1 - file.outputBytes / file.sourceBytes) * 100);
658
+ console.log(`- ${file.fileName}: ${file.sourceBytes} -> ${file.outputBytes} bytes (${reduction}% smaller)`);
659
+ }
660
+ }
661
+ function printStyleBuildResult(result) {
662
+ console.log(`Built form style file to ${result.outDir}`);
663
+ console.log(`- ${path.basename(result.file.outputPath)}: ${result.file.outputBytes} bytes`);
664
+ }
665
+ function printStyleMinifyResult(result) {
666
+ console.log(`Minified form style files to ${result.outDir}`);
667
+ for (const file of result.files) {
668
+ const reduction = Math.round((1 - file.outputBytes / file.cssBytes) * 100);
669
+ console.log(`- ${path.basename(file.outputPath)}: ${file.cssBytes} -> ${file.outputBytes} bytes (${reduction}% smaller)`);
670
+ }
671
+ }
672
+ async function runLineageInventory(argv) {
673
+ const parsed = parseArgs(argv);
674
+ const { configPath, profile } = await loadLineageProfileFromArgs(argv);
675
+ const result = await inventoryLineageSnapshots(profile, configCwd(configPath));
676
+ printLineageInventory(result, flagString(parsed.flags, "format") ?? "markdown");
677
+ }
678
+ async function runLineageFreshness(argv) {
679
+ const parsed = parseArgs(argv);
680
+ const { configPath, profile } = await loadLineageProfileFromArgs(argv);
681
+ const maxAgeDaysFlag = flagString(parsed.flags, "max-age-days");
682
+ const maxAgeDays = maxAgeDaysFlag ? Number(maxAgeDaysFlag) : undefined;
683
+ if (maxAgeDaysFlag && (!Number.isFinite(maxAgeDays) || Number(maxAgeDays) < 0)) {
684
+ throw new Error("--max-age-days must be a non-negative number.");
685
+ }
686
+ const result = await checkLineageFreshness(profile, {
687
+ cwd: configCwd(configPath),
688
+ ...(maxAgeDays == null ? {} : { maxAgeDays }),
689
+ });
690
+ printLineageFreshness(result, flagString(parsed.flags, "format") ?? "markdown");
691
+ }
692
+ async function runLineageIsFresh(argv) {
693
+ const parsed = parseArgs(argv);
694
+ const { configPath, profile } = await loadLineageProfileFromArgs(argv);
695
+ const maxAgeDaysFlag = flagString(parsed.flags, "max-age-days");
696
+ const maxAgeDays = maxAgeDaysFlag ? Number(maxAgeDaysFlag) : undefined;
697
+ if (maxAgeDaysFlag && (!Number.isFinite(maxAgeDays) || Number(maxAgeDays) < 0)) {
698
+ throw new Error("--max-age-days must be a non-negative number.");
699
+ }
700
+ const result = await checkLineageFreshness(profile, {
701
+ cwd: configCwd(configPath),
702
+ ...(maxAgeDays == null ? {} : { maxAgeDays }),
703
+ });
704
+ console.log(result.isFresh ? "true" : "false");
705
+ if (!result.isFresh) {
706
+ process.exitCode = 1;
707
+ }
708
+ }
709
+ function printLineageInventory(result, format) {
710
+ if (format === "json") {
711
+ console.log(JSON.stringify(result, null, 2));
712
+ return;
713
+ }
714
+ if (format !== "markdown") {
715
+ throw new Error(`Unsupported format "${format}". Use json or markdown.`);
716
+ }
717
+ console.log(`Lineage snapshots in ${result.rawDir}`);
718
+ for (const snapshot of result.snapshots) {
719
+ const status = snapshot.exists ? "ok" : "missing";
720
+ const required = snapshot.required ? "required" : "optional";
721
+ const details = snapshot.exists ? ` (${snapshot.sizeBytes ?? 0} bytes${snapshot.summary ? `, ${snapshot.summary}` : ""})` : "";
722
+ console.log(`- ${status} ${required} ${snapshot.path}${details}`);
723
+ }
724
+ }
725
+ function printLineageFreshness(result, format) {
726
+ if (format === "json") {
727
+ console.log(JSON.stringify(result, null, 2));
728
+ return;
729
+ }
730
+ if (format !== "markdown") {
731
+ throw new Error(`Unsupported format "${format}". Use json or markdown.`);
732
+ }
733
+ console.log("Lineage snapshot freshness");
734
+ console.log(`- Fresh: ${result.isFresh ? "yes" : "no"}`);
735
+ console.log(`- Fetched at: ${result.fetchedAt ?? "unknown"}`);
736
+ console.log(`- Age: ${result.ageDays ?? "unknown"} days`);
737
+ console.log(`- Max age: ${result.maxAgeDays} days`);
738
+ console.log(`- Missing API snapshots: ${result.missingApiSnapshots.length}`);
739
+ console.log(`- Manual inputs with newer source files: ${result.manualInputs.filter((entry) => entry.sourceIsNewer).length}`);
740
+ }
741
+ async function writeOrPrint(content, writeToPath) {
742
+ if (!writeToPath) {
743
+ console.log(content.trimEnd());
744
+ return;
745
+ }
746
+ const targetPath = path.resolve(process.cwd(), writeToPath);
747
+ await mkdir(path.dirname(targetPath), { recursive: true });
748
+ await writeFile(targetPath, content, "utf8");
749
+ console.log(`Wrote output to ${targetPath}`);
750
+ }
751
+ async function runLineageContract(argv) {
752
+ const parsed = parseArgs(argv);
753
+ const { configPath, profile } = await loadLineageProfileFromArgs(argv);
754
+ const result = await generateLineageContracts(profile, {
755
+ cwd: configCwd(configPath),
756
+ ...(flagBoolean(parsed.flags, "write") ? { write: true } : {}),
757
+ });
758
+ console.log(`Generated ${result.formFields.length} form field contracts.`);
759
+ console.log(`Generated ${result.routeFields.length} route field contracts.`);
760
+ console.log(`Generated ${result.documentFields.length} document field sets.`);
761
+ console.log(`Generated ${result.variables.length} allowed variables.`);
762
+ if (result.outDir)
763
+ console.log(`Wrote contracts to ${result.outDir}`);
764
+ }
765
+ async function runLineageParseSmarty(argv) {
766
+ const parsed = parseArgs(argv);
767
+ const { configPath, profile } = await loadLineageProfileFromArgs(argv);
768
+ const result = await parseLineageSmarty(profile, {
769
+ cwd: configCwd(configPath),
770
+ ...(flagBoolean(parsed.flags, "write") ? { write: true } : {}),
771
+ });
772
+ console.log(`Parsed ${result.summary.expressions} Smarty expressions.`);
773
+ console.log(`Expressions with variables: ${result.summary.expressionsWithVariables}.`);
774
+ console.log(`Unique variables: ${result.summary.uniqueVariables.length}.`);
775
+ console.log(`Expressions with parser warnings: ${result.summary.expressionsWithWarnings}.`);
776
+ if (result.outDir)
777
+ console.log(`Wrote Smarty dependency output to ${result.outDir}`);
778
+ }
779
+ async function runLineageBuild(argv) {
780
+ const parsed = parseArgs(argv);
781
+ const { configPath, profile } = await loadLineageProfileFromArgs(argv);
782
+ const result = await buildLineageGraph(profile, {
783
+ cwd: configCwd(configPath),
784
+ ...(flagBoolean(parsed.flags, "write") ? { write: true } : {}),
785
+ });
786
+ console.log(`Built ${result.nodes.length} lineage nodes.`);
787
+ console.log(`Built ${result.edges.length} lineage edges.`);
788
+ console.log(`Built ${result.transformations.length} lineage transformations.`);
789
+ if (result.outDir)
790
+ console.log(`Wrote graph output to ${result.outDir}`);
791
+ }
792
+ async function runLineageQuery(argv) {
793
+ const parsed = parseArgs(argv);
794
+ const { configPath, profile } = await loadLineageProfileFromArgs(argv);
795
+ const commandArgs = parsed.positionals.filter((arg) => arg !== "impact");
796
+ const [target, value, secondValue] = commandArgs;
797
+ if (!target || !value) {
798
+ throw new Error("Missing lineage query target and value.");
799
+ }
800
+ const query = {
801
+ target: target,
802
+ value,
803
+ ...(secondValue ? { secondValue } : {}),
804
+ ...(flagBoolean(parsed.flags, "downstream-only")
805
+ ? { direction: "downstream" }
806
+ : flagBoolean(parsed.flags, "upstream-only")
807
+ ? { direction: "upstream" }
808
+ : {}),
809
+ };
810
+ const result = await queryLineageGraph(profile, query, {
811
+ cwd: configCwd(configPath),
812
+ ...(flagBoolean(parsed.flags, "chart") ? { chart: true } : {}),
813
+ ...(flagBoolean(parsed.flags, "use-written-graph") ? { useWrittenGraph: true } : {}),
814
+ });
815
+ const format = flagString(parsed.flags, "format") ?? "markdown";
816
+ const content = format === "json"
817
+ ? `${JSON.stringify(result, null, 2)}\n`
818
+ : format === "llm-context"
819
+ ? result.llmContext
820
+ : result.markdown;
821
+ await writeOrPrint(content, flagString(parsed.flags, "write-to"));
822
+ }
823
+ async function runLineageMappings(argv) {
824
+ const parsed = parseArgs(argv);
825
+ const { configPath, profile } = await loadLineageProfileFromArgs(argv);
826
+ const result = await checkLineageMappings(profile, {
827
+ cwd: configCwd(configPath),
828
+ ...(flagBoolean(parsed.flags, "strict") ? { strict: true } : {}),
829
+ });
830
+ console.log(`Checked ${result.checkedMappings} lineage mappings.`);
831
+ console.log(`Unknown route fields: ${result.unknownRouteFields.length}.`);
832
+ console.log(`Unknown variables: ${result.unknownVariables.length}.`);
833
+ console.log(`Parser warnings: ${result.warnings.length}.`);
834
+ if (!result.ok)
835
+ process.exitCode = 1;
836
+ }
837
+ async function runLineageAudit(argv) {
838
+ const { configPath, profile } = await loadLineageProfileFromArgs(argv);
839
+ const result = await auditLineage(profile, { cwd: configCwd(configPath) });
840
+ console.log(`Lineage audit ${result.ok ? "passed" : "failed"}.`);
841
+ console.log(JSON.stringify(result.counts, null, 2));
842
+ if (!result.ok)
843
+ process.exitCode = 1;
844
+ }
845
+ async function runLineageScenarios(argv) {
846
+ const { configPath, profile } = await loadLineageProfileFromArgs(argv);
847
+ const result = await validateLineageScenarios(profile, { cwd: configCwd(configPath) });
848
+ console.log(`Validated ${result.scenarios.length} lineage scenarios.`);
849
+ for (const scenario of result.scenarios) {
850
+ if (scenario.errors.length > 0) {
851
+ console.log(`- ${scenario.id}: ${scenario.errors.join(", ")}`);
852
+ }
853
+ }
854
+ if (!result.ok)
855
+ process.exitCode = 1;
856
+ }
857
+ async function runLineageSimulate(argv) {
858
+ const parsed = parseArgs(argv);
859
+ const { configPath, profile } = await loadLineageProfileFromArgs(argv);
860
+ const scenarioId = flagString(parsed.flags, "scenario") ?? parsed.positionals[0];
861
+ if (!scenarioId) {
862
+ throw new Error("Missing --scenario for lineage simulation.");
863
+ }
864
+ const result = await simulateLineageScenario(profile, scenarioId, {
865
+ cwd: configCwd(configPath),
866
+ ...(flagBoolean(parsed.flags, "write") ? { write: true } : {}),
867
+ ...(flagBoolean(parsed.flags, "update-expected") ? { updateExpected: true } : {}),
868
+ });
869
+ console.log(`Simulated route output for ${result.scenarioId}.`);
870
+ console.log(`Selected documents: ${result.selectedDocuments.length}.`);
871
+ console.log(`Assertion failures: ${result.assertionFailures.length}.`);
872
+ if (result.outDir)
873
+ console.log(`Wrote simulation output to ${result.outDir}`);
874
+ if (result.assertionFailures.length > 0)
875
+ process.exitCode = 1;
876
+ }
877
+ export async function runFspt(argv = process.argv.slice(2)) {
878
+ const [scope, command, ...rest] = argv;
879
+ if (!scope || scope === "help" || scope === "--help") {
880
+ console.log(usage());
881
+ return;
882
+ }
883
+ if (scope === "code-embed" && command === "build") {
884
+ await runCodeEmbedBuild(rest);
885
+ return;
886
+ }
887
+ if (scope === "code-embed" && command === "minify") {
888
+ await runCodeEmbedMinify(rest);
889
+ return;
890
+ }
891
+ if (scope === "code-embed" && command === "field-options") {
892
+ await runCodeEmbedFieldOptions(rest);
893
+ return;
894
+ }
895
+ if (scope === "forms" && command === "field-types") {
896
+ await runFormsFieldTypes(rest);
897
+ return;
898
+ }
899
+ if (scope === "forms" && command === "pull") {
900
+ await runFormsPull(rest);
901
+ return;
902
+ }
903
+ if (scope === "data-routes" && command === "pull") {
904
+ await runDataRoutesPull(rest);
905
+ return;
906
+ }
907
+ if (scope === "documents" && command === "file") {
908
+ await runDocumentsFile(rest);
909
+ return;
910
+ }
911
+ if (scope === "styles" && command === "build") {
912
+ await runStylesBuild(rest);
913
+ return;
914
+ }
915
+ if (scope === "styles" && command === "minify") {
916
+ await runStylesMinify(rest);
917
+ return;
918
+ }
919
+ if (scope === "styles" && command === "sync") {
920
+ await runStylesSync(rest);
921
+ return;
922
+ }
923
+ if (scope === "themes" && command === "list") {
924
+ await runThemesList(rest);
925
+ return;
926
+ }
927
+ if (scope === "themes" && command === "copy") {
928
+ await runThemesCopy(rest);
929
+ return;
930
+ }
931
+ if (scope === "themes" && command === "assign") {
932
+ await runThemesAssign(rest);
933
+ return;
934
+ }
935
+ if (scope === "lineage" && command === "inventory") {
936
+ await runLineageInventory(rest);
937
+ return;
938
+ }
939
+ if (scope === "lineage" && command === "freshness") {
940
+ await runLineageFreshness(rest);
941
+ return;
942
+ }
943
+ if (scope === "lineage" && command === "is-fresh") {
944
+ await runLineageIsFresh(rest);
945
+ return;
946
+ }
947
+ if (scope === "lineage" && command === "contract") {
948
+ await runLineageContract(rest);
949
+ return;
950
+ }
951
+ if (scope === "lineage" && command === "parse-smarty") {
952
+ await runLineageParseSmarty(rest);
953
+ return;
954
+ }
955
+ if (scope === "lineage" && command === "build") {
956
+ await runLineageBuild(rest);
957
+ return;
958
+ }
959
+ if (scope === "lineage" && command === "query") {
960
+ await runLineageQuery(rest);
961
+ return;
962
+ }
963
+ if (scope === "lineage" && command === "mappings" && rest[0] === "check") {
964
+ await runLineageMappings(rest.slice(1));
965
+ return;
966
+ }
967
+ if (scope === "lineage" && command === "audit") {
968
+ await runLineageAudit(rest);
969
+ return;
970
+ }
971
+ if (scope === "lineage" && command === "scenarios" && rest[0] === "validate") {
972
+ await runLineageScenarios(rest.slice(1));
973
+ return;
974
+ }
975
+ if (scope === "lineage" && command === "simulate") {
976
+ await runLineageSimulate(rest);
977
+ return;
978
+ }
979
+ throw new Error(`Unknown command: ${[scope, command].filter(Boolean).join(" ")}`);
980
+ }
981
+ if (process.argv[1] && fileURLToPath(import.meta.url) === path.resolve(process.argv[1])) {
982
+ runFspt().catch((error) => {
983
+ console.error(error instanceof Error ? error.message : error);
984
+ console.error("");
985
+ console.error(usage());
986
+ process.exit(1);
987
+ });
988
+ }
989
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@redrockswebdevelopment/formstack-platform-cli",
3
+ "version": "0.2.0",
4
+ "type": "module",
5
+ "description": "Umbrella CLI for Formstack platform developer tooling.",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "fspt": "dist/index.js",
10
+ "formstack-platform": "dist/index.js"
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "dependencies": {
16
+ "@redrockswebdevelopment/formstack-documents-api-connector": "1.1.0",
17
+ "@redrockswebdevelopment/formstack-forms-api-connector": "0.2.0",
18
+ "@redrockswebdevelopment/formstack-code-embed": "0.1.0",
19
+ "@redrockswebdevelopment/formstack-form-styling": "0.1.0",
20
+ "@redrockswebdevelopment/formstack-lineage": "0.1.0"
21
+ },
22
+ "devDependencies": {
23
+ "@types/node": "^25.7.0",
24
+ "typescript": "^5.9.0",
25
+ "vitest": "^4.1.6"
26
+ },
27
+ "scripts": {
28
+ "build": "tsc -p tsconfig.json",
29
+ "typecheck": "pnpm --filter @redrockswebdevelopment/formstack-code-embed run build && pnpm --filter @redrockswebdevelopment/formstack-lineage run build && pnpm --filter @redrockswebdevelopment/formstack-form-styling run build && tsc -p tsconfig.json --noEmit",
30
+ "test": "vitest run"
31
+ }
32
+ }