@anvil-works/anvil-cli 0.8.0-canary.2 → 0.8.0-canary.3
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/cli.js
CHANGED
|
@@ -16353,7 +16353,7 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
16353
16353
|
function validateParsedHtmlTemplate(parsed) {
|
|
16354
16354
|
return validateFormTemplateData(parsed);
|
|
16355
16355
|
}
|
|
16356
|
-
function validateFormTemplateHtml(htmlContent, parseHtml = form_template_parser_namespaceObject.parseSerializedHtml) {
|
|
16356
|
+
function validateFormTemplateHtml(htmlContent, parseHtml = form_template_parser_namespaceObject.parseSerializedHtml, options = {}) {
|
|
16357
16357
|
const { frontmatter, body, bodyStartOffset } = splitHtmlFormTemplateFrontmatter(htmlContent);
|
|
16358
16358
|
if (null !== frontmatter) {
|
|
16359
16359
|
const frontmatterIssues = validateHtmlFrontmatter(frontmatter);
|
|
@@ -16366,7 +16366,10 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
16366
16366
|
let parsed;
|
|
16367
16367
|
try {
|
|
16368
16368
|
parsed = parseHtml(body, {
|
|
16369
|
-
warnings: true
|
|
16369
|
+
warnings: true,
|
|
16370
|
+
...options.formSpecPackageContext ? {
|
|
16371
|
+
formSpecPackageContext: options.formSpecPackageContext
|
|
16372
|
+
} : {}
|
|
16370
16373
|
});
|
|
16371
16374
|
} catch (error) {
|
|
16372
16375
|
return {
|
|
@@ -17016,7 +17019,7 @@ print(json.dumps({"issues": issues}))
|
|
|
17016
17019
|
currentDir = parentDir;
|
|
17017
17020
|
}
|
|
17018
17021
|
}
|
|
17019
|
-
function validatePath(filePath, fileContent) {
|
|
17022
|
+
function validatePath(filePath, fileContent, options = {}) {
|
|
17020
17023
|
const target = inferValidationTarget(filePath);
|
|
17021
17024
|
const existingPath = resolveExistingPath(filePath);
|
|
17022
17025
|
const appRoot = findAnvilAppRoot(filePath);
|
|
@@ -17089,7 +17092,9 @@ print(json.dumps({"issues": issues}))
|
|
|
17089
17092
|
]
|
|
17090
17093
|
};
|
|
17091
17094
|
}
|
|
17092
|
-
const result = validateFormTemplateHtml(fileContent
|
|
17095
|
+
const result = validateFormTemplateHtml(fileContent, void 0, {
|
|
17096
|
+
formSpecPackageContext: options.formSpecPackageContext
|
|
17097
|
+
});
|
|
17093
17098
|
return result.ok ? validPathResult(target, result.warnings) : {
|
|
17094
17099
|
...result,
|
|
17095
17100
|
target
|
|
@@ -23302,7 +23307,7 @@ print(json.dumps({"issues": issues}))
|
|
|
23302
23307
|
walk(dir);
|
|
23303
23308
|
return files.sort();
|
|
23304
23309
|
}
|
|
23305
|
-
function validateSingleFile(file) {
|
|
23310
|
+
async function validateSingleFile(file) {
|
|
23306
23311
|
let fileContent;
|
|
23307
23312
|
try {
|
|
23308
23313
|
fileContent = (0, external_fs_.readFileSync)(file, "utf8");
|
|
@@ -23320,7 +23325,10 @@ print(json.dumps({"issues": issues}))
|
|
|
23320
23325
|
]
|
|
23321
23326
|
};
|
|
23322
23327
|
}
|
|
23323
|
-
const
|
|
23328
|
+
const formSpecPackageContext = "form_template.html" === inferValidationTarget(file) ? await buildFormSpecPackageContext(file) : void 0;
|
|
23329
|
+
const result = validatePath(file, fileContent, {
|
|
23330
|
+
formSpecPackageContext
|
|
23331
|
+
});
|
|
23324
23332
|
if (result.ok) return {
|
|
23325
23333
|
file,
|
|
23326
23334
|
type: result.target,
|
|
@@ -23355,8 +23363,8 @@ print(json.dumps({"issues": issues}))
|
|
|
23355
23363
|
function logValidationWarnings(fileResult) {
|
|
23356
23364
|
for (const warning of fileResult.warnings ?? [])logger_logger.warn(formatValidationWarning(fileResult.file, warning));
|
|
23357
23365
|
}
|
|
23358
|
-
function handleValidateFile(file) {
|
|
23359
|
-
const fileResult = validateSingleFile(file);
|
|
23366
|
+
async function handleValidateFile(file) {
|
|
23367
|
+
const fileResult = await validateSingleFile(file);
|
|
23360
23368
|
if (fileResult.valid) {
|
|
23361
23369
|
if (getGlobalOutputConfig().jsonMode) logJsonResult(true, {
|
|
23362
23370
|
data: {
|
|
@@ -23391,7 +23399,7 @@ print(json.dumps({"issues": issues}))
|
|
|
23391
23399
|
}
|
|
23392
23400
|
process.exitCode = 1;
|
|
23393
23401
|
}
|
|
23394
|
-
function handleValidateDirectory(dir) {
|
|
23402
|
+
async function handleValidateDirectory(dir) {
|
|
23395
23403
|
const files = collectValidationFiles(dir);
|
|
23396
23404
|
if (0 === files.length) {
|
|
23397
23405
|
const error = `No supported files found under ${dir}`;
|
|
@@ -23407,7 +23415,7 @@ print(json.dumps({"issues": issues}))
|
|
|
23407
23415
|
process.exitCode = 1;
|
|
23408
23416
|
return;
|
|
23409
23417
|
}
|
|
23410
|
-
const fileResults = files.map(validateSingleFile);
|
|
23418
|
+
const fileResults = await Promise.all(files.map(validateSingleFile));
|
|
23411
23419
|
const failedResults = fileResults.filter((result)=>!result.valid);
|
|
23412
23420
|
if (getGlobalOutputConfig().jsonMode) logJsonResult(0 === failedResults.length, {
|
|
23413
23421
|
error: failedResults.length > 0 ? "Validation failed" : void 0,
|
|
@@ -23540,7 +23548,7 @@ print(json.dumps({"issues": issues}))
|
|
|
23540
23548
|
program.command("update").description("Update anvil to the latest version").alias("u").action(async ()=>{
|
|
23541
23549
|
await handleUpdateCommand();
|
|
23542
23550
|
});
|
|
23543
|
-
program.command("validate").description("Validate Anvil app files by path or directory (anvil.yaml, client_code/**/*.yaml, client_code/**/*.html, client_code/**/*.py, or server_code/**/*.py)").argument("<path>", "Path to file or directory").action((file)=>{
|
|
23551
|
+
program.command("validate").description("Validate Anvil app files by path or directory (anvil.yaml, client_code/**/*.yaml, client_code/**/*.html, client_code/**/*.py, or server_code/**/*.py)").argument("<path>", "Path to file or directory").action(async (file)=>{
|
|
23544
23552
|
let pathStat;
|
|
23545
23553
|
try {
|
|
23546
23554
|
pathStat = (0, external_fs_.statSync)(file);
|
|
@@ -23549,8 +23557,8 @@ print(json.dumps({"issues": issues}))
|
|
|
23549
23557
|
process.exitCode = 1;
|
|
23550
23558
|
return;
|
|
23551
23559
|
}
|
|
23552
|
-
if (pathStat.isDirectory()) return void handleValidateDirectory(file);
|
|
23553
|
-
handleValidateFile(file);
|
|
23560
|
+
if (pathStat.isDirectory()) return void await handleValidateDirectory(file);
|
|
23561
|
+
await handleValidateFile(file);
|
|
23554
23562
|
});
|
|
23555
23563
|
if (watchCommand) {
|
|
23556
23564
|
const watchOptions = watchCommand.options.map((opt)=>{
|
package/dist/index.js
CHANGED
|
@@ -16382,7 +16382,7 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
16382
16382
|
function validateParsedHtmlTemplate(parsed) {
|
|
16383
16383
|
return validateFormTemplateData(parsed);
|
|
16384
16384
|
}
|
|
16385
|
-
function validateFormTemplateHtml(htmlContent, parseHtml = form_template_parser_namespaceObject.parseSerializedHtml) {
|
|
16385
|
+
function validateFormTemplateHtml(htmlContent, parseHtml = form_template_parser_namespaceObject.parseSerializedHtml, options = {}) {
|
|
16386
16386
|
const { frontmatter, body, bodyStartOffset } = splitHtmlFormTemplateFrontmatter(htmlContent);
|
|
16387
16387
|
if (null !== frontmatter) {
|
|
16388
16388
|
const frontmatterIssues = validateHtmlFrontmatter(frontmatter);
|
|
@@ -16395,7 +16395,10 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
16395
16395
|
let parsed;
|
|
16396
16396
|
try {
|
|
16397
16397
|
parsed = parseHtml(body, {
|
|
16398
|
-
warnings: true
|
|
16398
|
+
warnings: true,
|
|
16399
|
+
...options.formSpecPackageContext ? {
|
|
16400
|
+
formSpecPackageContext: options.formSpecPackageContext
|
|
16401
|
+
} : {}
|
|
16399
16402
|
});
|
|
16400
16403
|
} catch (error) {
|
|
16401
16404
|
return {
|
|
@@ -17045,7 +17048,7 @@ print(json.dumps({"issues": issues}))
|
|
|
17045
17048
|
currentDir = parentDir;
|
|
17046
17049
|
}
|
|
17047
17050
|
}
|
|
17048
|
-
function validatePath(filePath, fileContent) {
|
|
17051
|
+
function validatePath(filePath, fileContent, options = {}) {
|
|
17049
17052
|
const target = inferValidationTarget(filePath);
|
|
17050
17053
|
const existingPath = resolveExistingPath(filePath);
|
|
17051
17054
|
const appRoot = findAnvilAppRoot(filePath);
|
|
@@ -17118,7 +17121,9 @@ print(json.dumps({"issues": issues}))
|
|
|
17118
17121
|
]
|
|
17119
17122
|
};
|
|
17120
17123
|
}
|
|
17121
|
-
const result = validateFormTemplateHtml(fileContent
|
|
17124
|
+
const result = validateFormTemplateHtml(fileContent, void 0, {
|
|
17125
|
+
formSpecPackageContext: options.formSpecPackageContext
|
|
17126
|
+
});
|
|
17122
17127
|
return result.ok ? validPathResult(target, result.warnings) : {
|
|
17123
17128
|
...result,
|
|
17124
17129
|
target
|
package/dist/program.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwDpC,KAAK,sBAAsB,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA6EF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAO7F;AA0FD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,EAAE,CAezE;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwFzD;AAiBD,wBAAgB,YAAY,IAAI,OAAO,CAkGtC"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import { type ParsedHtmlTemplate } from "@anvil-works/form-template-parser";
|
|
1
|
+
import { type FormSpecPackageContext, type ParsedHtmlTemplate } from "@anvil-works/form-template-parser";
|
|
2
2
|
import type { FormTemplateValidationResult, ValidationIssue } from "./validators";
|
|
3
3
|
type ParseHtmlOptions = {
|
|
4
4
|
warnings?: boolean;
|
|
5
|
+
formSpecPackageContext?: FormSpecPackageContext;
|
|
5
6
|
};
|
|
6
7
|
type ParseHtml = (html: string, options?: ParseHtmlOptions) => ParsedHtmlTemplate;
|
|
8
|
+
export type ValidateFormTemplateHtmlOptions = {
|
|
9
|
+
formSpecPackageContext?: FormSpecPackageContext;
|
|
10
|
+
};
|
|
7
11
|
export declare function splitHtmlFormTemplateFrontmatter(htmlContent: string): {
|
|
8
12
|
frontmatter: string | null;
|
|
9
13
|
body: string;
|
|
@@ -11,6 +15,6 @@ export declare function splitHtmlFormTemplateFrontmatter(htmlContent: string): {
|
|
|
11
15
|
};
|
|
12
16
|
export declare function validateHtmlFrontmatter(frontmatterYaml: string): ValidationIssue[];
|
|
13
17
|
export declare function validateParsedHtmlTemplate(parsed: ParsedHtmlTemplate): ValidationIssue[];
|
|
14
|
-
export declare function validateFormTemplateHtml(htmlContent: string, parseHtml?: ParseHtml): FormTemplateValidationResult;
|
|
18
|
+
export declare function validateFormTemplateHtml(htmlContent: string, parseHtml?: ParseHtml, options?: ValidateFormTemplateHtmlOptions): FormTemplateValidationResult;
|
|
15
19
|
export {};
|
|
16
20
|
//# sourceMappingURL=validateFormTemplateHtml.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateFormTemplateHtml.d.ts","sourceRoot":"","sources":["../src/validateFormTemplateHtml.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,kBAAkB,EAC1B,MAAM,mCAAmC,CAAC;AAM3C,OAAO,KAAK,EAAE,4BAA4B,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAmClF,KAAK,gBAAgB,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"validateFormTemplateHtml.d.ts","sourceRoot":"","sources":["../src/validateFormTemplateHtml.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EAC1B,MAAM,mCAAmC,CAAC;AAM3C,OAAO,KAAK,EAAE,4BAA4B,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAmClF,KAAK,gBAAgB,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAChG,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,kBAAkB,CAAC;AAClF,MAAM,MAAM,+BAA+B,GAAG;IAC1C,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACnD,CAAC;AA0EF,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,MAAM,GAAG;IACnE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;CAC3B,CAUA;AAED,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,MAAM,GAAG,eAAe,EAAE,CAyClF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,eAAe,EAAE,CAExF;AAED,wBAAgB,wBAAwB,CACpC,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,SAA4C,EACvD,OAAO,GAAE,+BAAoC,GAC9C,4BAA4B,CA8C9B"}
|
package/dist/validators.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FormSpecPackageContext } from "@anvil-works/form-template-parser";
|
|
1
2
|
export type ValidationIssue = {
|
|
2
3
|
path: string;
|
|
3
4
|
message: string;
|
|
@@ -43,6 +44,9 @@ export type ValidatePathResult = {
|
|
|
43
44
|
issues: ValidationIssue[];
|
|
44
45
|
warnings?: ValidationIssue[];
|
|
45
46
|
};
|
|
47
|
+
export type ValidatePathOptions = {
|
|
48
|
+
formSpecPackageContext?: FormSpecPackageContext;
|
|
49
|
+
};
|
|
46
50
|
export declare function formatValidationPath(path: string): string;
|
|
47
51
|
/**
|
|
48
52
|
* Validates form_template.yaml structure
|
|
@@ -62,5 +66,5 @@ export declare function findAnvilAppRoot(filePath: string): string | null;
|
|
|
62
66
|
* - any form HTML under `client_code/` with a `.html` suffix
|
|
63
67
|
* - any Python file under `client_code/` or `server_code/`
|
|
64
68
|
*/
|
|
65
|
-
export declare function validatePath(filePath: string, fileContent: string): ValidatePathResult;
|
|
69
|
+
export declare function validatePath(filePath: string, fileContent: string, options?: ValidatePathOptions): ValidatePathResult;
|
|
66
70
|
//# sourceMappingURL=validators.d.ts.map
|
package/dist/validators.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAMhF,MAAM,MAAM,eAAe,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAClC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;CAAE,GAC1C;IACI,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC,CAAC;AAER,MAAM,MAAM,yBAAyB,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;CAAE,GAC1C;IACI,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC,CAAC;AAER,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,QAAQ,CAAC;AAErG,MAAM,MAAM,kBAAkB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;CAAE,GACpE;IACI,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC,CAAC;AAER,MAAM,MAAM,mBAAmB,GAAG;IAC9B,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACnD,CAAC;AAwEF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,UAEhD;AAgBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,4BAA4B,CA0BtF;AAqaD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,yBAAyB,CAkFhF;AAED,iBAAS,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CA4BxE;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAOjC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBhE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CACxB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,mBAAwB,GAClC,kBAAkB,CAsIpB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anvil-works/anvil-cli",
|
|
3
|
-
"version": "0.8.0-canary.
|
|
3
|
+
"version": "0.8.0-canary.3",
|
|
4
4
|
"description": "CLI tool for developing Anvil apps locally",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/api.d.ts",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"typescript": "^5.9.3"
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@anvil-works/form-template-parser": "0.0.
|
|
67
|
+
"@anvil-works/form-template-parser": "0.0.5",
|
|
68
68
|
"@napi-rs/keyring": "^1.2.0",
|
|
69
69
|
"@types/inquirer": "^9.0.9",
|
|
70
70
|
"@types/js-yaml": "^4.0.9",
|