@anvil-works/anvil-cli 0.8.0-canary.1 → 0.8.0-canary.2

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
@@ -16256,15 +16256,73 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
16256
16256
  message
16257
16257
  });
16258
16258
  }
16259
+ function offsetToLocation(source, offset) {
16260
+ const safeOffset = Math.max(0, Math.min(offset, source.length));
16261
+ let line = 1;
16262
+ let column = 1;
16263
+ for(let index = 0; index < safeOffset; index += 1){
16264
+ const char = source[index];
16265
+ if ("\n" === char) {
16266
+ line += 1;
16267
+ column = 1;
16268
+ } else column += 1;
16269
+ }
16270
+ return {
16271
+ line,
16272
+ column,
16273
+ offset: safeOffset
16274
+ };
16275
+ }
16276
+ function warningLocationFields(source, bodyStartOffset, warning) {
16277
+ if ("number" != typeof warning.from) return {};
16278
+ const start = offsetToLocation(source, bodyStartOffset + warning.from);
16279
+ const fields = {
16280
+ line: start.line,
16281
+ column: start.column,
16282
+ offset: start.offset
16283
+ };
16284
+ if ("number" == typeof warning.to) {
16285
+ const end = offsetToLocation(source, bodyStartOffset + warning.to);
16286
+ fields.endLine = end.line;
16287
+ fields.endColumn = end.column;
16288
+ fields.endOffset = end.offset;
16289
+ }
16290
+ return fields;
16291
+ }
16292
+ function parserWarnings(parsed, source, bodyStartOffset) {
16293
+ const warnings = parsed.warnings ?? [];
16294
+ return warnings.map((warning)=>({
16295
+ path: warning.path,
16296
+ message: warning.message,
16297
+ ...warning.code ? {
16298
+ code: warning.code
16299
+ } : {},
16300
+ ...warning.name ? {
16301
+ name: warning.name
16302
+ } : {},
16303
+ ...warning.attrName ? {
16304
+ attrName: warning.attrName
16305
+ } : {},
16306
+ ...warning.tagName ? {
16307
+ tagName: warning.tagName
16308
+ } : {},
16309
+ ...warning.eventName ? {
16310
+ eventName: warning.eventName
16311
+ } : {},
16312
+ ...warningLocationFields(source, bodyStartOffset, warning)
16313
+ }));
16314
+ }
16259
16315
  function splitHtmlFormTemplateFrontmatter(htmlContent) {
16260
16316
  const match = htmlContent.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/);
16261
16317
  if (!match) return {
16262
16318
  frontmatter: null,
16263
- body: htmlContent
16319
+ body: htmlContent,
16320
+ bodyStartOffset: 0
16264
16321
  };
16265
16322
  return {
16266
16323
  frontmatter: match[1],
16267
- body: htmlContent.slice(match[0].length)
16324
+ body: htmlContent.slice(match[0].length),
16325
+ bodyStartOffset: match[0].length
16268
16326
  };
16269
16327
  }
16270
16328
  function validateHtmlFrontmatter(frontmatterYaml) {
@@ -16295,8 +16353,8 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
16295
16353
  function validateParsedHtmlTemplate(parsed) {
16296
16354
  return validateFormTemplateData(parsed);
16297
16355
  }
16298
- function validateFormTemplateHtml(htmlContent) {
16299
- const { frontmatter, body } = splitHtmlFormTemplateFrontmatter(htmlContent);
16356
+ function validateFormTemplateHtml(htmlContent, parseHtml = form_template_parser_namespaceObject.parseSerializedHtml) {
16357
+ const { frontmatter, body, bodyStartOffset } = splitHtmlFormTemplateFrontmatter(htmlContent);
16300
16358
  if (null !== frontmatter) {
16301
16359
  const frontmatterIssues = validateHtmlFrontmatter(frontmatter);
16302
16360
  if (frontmatterIssues.length > 0) return {
@@ -16307,7 +16365,9 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
16307
16365
  }
16308
16366
  let parsed;
16309
16367
  try {
16310
- parsed = (0, form_template_parser_namespaceObject.parseSerializedHtml)(body);
16368
+ parsed = parseHtml(body, {
16369
+ warnings: true
16370
+ });
16311
16371
  } catch (error) {
16312
16372
  return {
16313
16373
  ok: false,
@@ -16320,13 +16380,20 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
16320
16380
  ]
16321
16381
  };
16322
16382
  }
16383
+ const warnings = parserWarnings(parsed, htmlContent, bodyStartOffset);
16323
16384
  const issues = validateParsedHtmlTemplate(parsed);
16324
16385
  if (issues.length > 0) return {
16325
16386
  ok: false,
16326
16387
  message: "form_template.html is invalid for Anvil",
16327
- issues
16328
- };
16329
- return {
16388
+ issues,
16389
+ ...warnings.length > 0 ? {
16390
+ warnings
16391
+ } : {}
16392
+ };
16393
+ return warnings.length > 0 ? {
16394
+ ok: true,
16395
+ warnings
16396
+ } : {
16330
16397
  ok: true
16331
16398
  };
16332
16399
  }
@@ -16596,6 +16663,16 @@ print(json.dumps({"issues": issues}))
16596
16663
  message
16597
16664
  });
16598
16665
  }
16666
+ function validPathResult(target, warnings) {
16667
+ return warnings && warnings.length > 0 ? {
16668
+ ok: true,
16669
+ target,
16670
+ warnings
16671
+ } : {
16672
+ ok: true,
16673
+ target
16674
+ };
16675
+ }
16599
16676
  function formatValidationPath(path) {
16600
16677
  return path || "root";
16601
16678
  }
@@ -16967,10 +17044,7 @@ print(json.dumps({"issues": issues}))
16967
17044
  ]
16968
17045
  };
16969
17046
  const result = validateAnvilYaml(fileContent);
16970
- return result.ok ? {
16971
- ok: true,
16972
- target
16973
- } : {
17047
+ return result.ok ? validPathResult(target, result.warnings) : {
16974
17048
  ...result,
16975
17049
  target
16976
17050
  };
@@ -16993,10 +17067,7 @@ print(json.dumps({"issues": issues}))
16993
17067
  };
16994
17068
  }
16995
17069
  const result = validateFormTemplate(fileContent);
16996
- return result.ok ? {
16997
- ok: true,
16998
- target
16999
- } : {
17070
+ return result.ok ? validPathResult(target, result.warnings) : {
17000
17071
  ...result,
17001
17072
  target
17002
17073
  };
@@ -17019,10 +17090,7 @@ print(json.dumps({"issues": issues}))
17019
17090
  };
17020
17091
  }
17021
17092
  const result = validateFormTemplateHtml(fileContent);
17022
- return result.ok ? {
17023
- ok: true,
17024
- target
17025
- } : {
17093
+ return result.ok ? validPathResult(target, result.warnings) : {
17026
17094
  ...result,
17027
17095
  target
17028
17096
  };
@@ -17048,10 +17116,7 @@ print(json.dumps({"issues": issues}))
17048
17116
  };
17049
17117
  }
17050
17118
  const result = validatePython(filePath, fileContent, appRoot);
17051
- return result.ok ? {
17052
- ok: true,
17053
- target
17054
- } : {
17119
+ return result.ok ? validPathResult(target, result.warnings) : {
17055
17120
  ...result,
17056
17121
  target
17057
17122
  };
@@ -23259,14 +23324,20 @@ print(json.dumps({"issues": issues}))
23259
23324
  if (result.ok) return {
23260
23325
  file,
23261
23326
  type: result.target,
23262
- valid: true
23327
+ valid: true,
23328
+ ...result.warnings && result.warnings.length > 0 ? {
23329
+ warnings: result.warnings
23330
+ } : {}
23263
23331
  };
23264
23332
  return {
23265
23333
  file,
23266
23334
  type: result.target,
23267
23335
  valid: false,
23268
23336
  error: result.message,
23269
- issues: result.issues
23337
+ issues: result.issues,
23338
+ ...result.warnings && result.warnings.length > 0 ? {
23339
+ warnings: result.warnings
23340
+ } : {}
23270
23341
  };
23271
23342
  }
23272
23343
  function logValidationFailure(fileResult) {
@@ -23276,6 +23347,14 @@ print(json.dumps({"issues": issues}))
23276
23347
  logger_logger.error(` - ${issuePath}: ${issue.message}`);
23277
23348
  }
23278
23349
  }
23350
+ function formatValidationWarning(file, warning) {
23351
+ const warningPath = warning.path.length > 0 ? warning.path : "root";
23352
+ const location = void 0 !== warning.line && void 0 !== warning.column ? `${file}:${warning.line}:${warning.column}` : file;
23353
+ return `${location}: ${warningPath}: ${warning.message}`;
23354
+ }
23355
+ function logValidationWarnings(fileResult) {
23356
+ for (const warning of fileResult.warnings ?? [])logger_logger.warn(formatValidationWarning(fileResult.file, warning));
23357
+ }
23279
23358
  function handleValidateFile(file) {
23280
23359
  const fileResult = validateSingleFile(file);
23281
23360
  if (fileResult.valid) {
@@ -23283,10 +23362,16 @@ print(json.dumps({"issues": issues}))
23283
23362
  data: {
23284
23363
  file: fileResult.file,
23285
23364
  type: fileResult.type,
23286
- valid: true
23365
+ valid: true,
23366
+ ...fileResult.warnings && fileResult.warnings.length > 0 ? {
23367
+ warnings: fileResult.warnings
23368
+ } : {}
23287
23369
  }
23288
23370
  });
23289
- else logger_logger.success(`${fileResult.file} is valid (${fileResult.type})`);
23371
+ else {
23372
+ logger_logger.success(`${fileResult.file} is valid (${fileResult.type})`);
23373
+ logValidationWarnings(fileResult);
23374
+ }
23290
23375
  return;
23291
23376
  }
23292
23377
  if (getGlobalOutputConfig().jsonMode) logJsonResult(false, {
@@ -23294,10 +23379,16 @@ print(json.dumps({"issues": issues}))
23294
23379
  data: {
23295
23380
  file: fileResult.file,
23296
23381
  type: fileResult.type,
23297
- issues: fileResult.issues ?? []
23382
+ issues: fileResult.issues ?? [],
23383
+ ...fileResult.warnings && fileResult.warnings.length > 0 ? {
23384
+ warnings: fileResult.warnings
23385
+ } : {}
23298
23386
  }
23299
23387
  });
23300
- else logValidationFailure(fileResult);
23388
+ else {
23389
+ logValidationFailure(fileResult);
23390
+ logValidationWarnings(fileResult);
23391
+ }
23301
23392
  process.exitCode = 1;
23302
23393
  }
23303
23394
  function handleValidateDirectory(dir) {
@@ -23327,8 +23418,13 @@ print(json.dumps({"issues": issues}))
23327
23418
  files: fileResults
23328
23419
  }
23329
23420
  });
23330
- else for (const fileResult of fileResults)if (fileResult.valid) logger_logger.success(`${fileResult.file} is valid (${fileResult.type})`);
23331
- else logValidationFailure(fileResult);
23421
+ else for (const fileResult of fileResults)if (fileResult.valid) {
23422
+ logger_logger.success(`${fileResult.file} is valid (${fileResult.type})`);
23423
+ logValidationWarnings(fileResult);
23424
+ } else {
23425
+ logValidationFailure(fileResult);
23426
+ logValidationWarnings(fileResult);
23427
+ }
23332
23428
  if (failedResults.length > 0) process.exitCode = 1;
23333
23429
  }
23334
23430
  function getUpdateInstructions(platform) {
package/dist/index.js CHANGED
@@ -16285,15 +16285,73 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
16285
16285
  message
16286
16286
  });
16287
16287
  }
16288
+ function offsetToLocation(source, offset) {
16289
+ const safeOffset = Math.max(0, Math.min(offset, source.length));
16290
+ let line = 1;
16291
+ let column = 1;
16292
+ for(let index = 0; index < safeOffset; index += 1){
16293
+ const char = source[index];
16294
+ if ("\n" === char) {
16295
+ line += 1;
16296
+ column = 1;
16297
+ } else column += 1;
16298
+ }
16299
+ return {
16300
+ line,
16301
+ column,
16302
+ offset: safeOffset
16303
+ };
16304
+ }
16305
+ function warningLocationFields(source, bodyStartOffset, warning) {
16306
+ if ("number" != typeof warning.from) return {};
16307
+ const start = offsetToLocation(source, bodyStartOffset + warning.from);
16308
+ const fields = {
16309
+ line: start.line,
16310
+ column: start.column,
16311
+ offset: start.offset
16312
+ };
16313
+ if ("number" == typeof warning.to) {
16314
+ const end = offsetToLocation(source, bodyStartOffset + warning.to);
16315
+ fields.endLine = end.line;
16316
+ fields.endColumn = end.column;
16317
+ fields.endOffset = end.offset;
16318
+ }
16319
+ return fields;
16320
+ }
16321
+ function parserWarnings(parsed, source, bodyStartOffset) {
16322
+ const warnings = parsed.warnings ?? [];
16323
+ return warnings.map((warning)=>({
16324
+ path: warning.path,
16325
+ message: warning.message,
16326
+ ...warning.code ? {
16327
+ code: warning.code
16328
+ } : {},
16329
+ ...warning.name ? {
16330
+ name: warning.name
16331
+ } : {},
16332
+ ...warning.attrName ? {
16333
+ attrName: warning.attrName
16334
+ } : {},
16335
+ ...warning.tagName ? {
16336
+ tagName: warning.tagName
16337
+ } : {},
16338
+ ...warning.eventName ? {
16339
+ eventName: warning.eventName
16340
+ } : {},
16341
+ ...warningLocationFields(source, bodyStartOffset, warning)
16342
+ }));
16343
+ }
16288
16344
  function splitHtmlFormTemplateFrontmatter(htmlContent) {
16289
16345
  const match = htmlContent.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/);
16290
16346
  if (!match) return {
16291
16347
  frontmatter: null,
16292
- body: htmlContent
16348
+ body: htmlContent,
16349
+ bodyStartOffset: 0
16293
16350
  };
16294
16351
  return {
16295
16352
  frontmatter: match[1],
16296
- body: htmlContent.slice(match[0].length)
16353
+ body: htmlContent.slice(match[0].length),
16354
+ bodyStartOffset: match[0].length
16297
16355
  };
16298
16356
  }
16299
16357
  function validateHtmlFrontmatter(frontmatterYaml) {
@@ -16324,8 +16382,8 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
16324
16382
  function validateParsedHtmlTemplate(parsed) {
16325
16383
  return validateFormTemplateData(parsed);
16326
16384
  }
16327
- function validateFormTemplateHtml(htmlContent) {
16328
- const { frontmatter, body } = splitHtmlFormTemplateFrontmatter(htmlContent);
16385
+ function validateFormTemplateHtml(htmlContent, parseHtml = form_template_parser_namespaceObject.parseSerializedHtml) {
16386
+ const { frontmatter, body, bodyStartOffset } = splitHtmlFormTemplateFrontmatter(htmlContent);
16329
16387
  if (null !== frontmatter) {
16330
16388
  const frontmatterIssues = validateHtmlFrontmatter(frontmatter);
16331
16389
  if (frontmatterIssues.length > 0) return {
@@ -16336,7 +16394,9 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
16336
16394
  }
16337
16395
  let parsed;
16338
16396
  try {
16339
- parsed = (0, form_template_parser_namespaceObject.parseSerializedHtml)(body);
16397
+ parsed = parseHtml(body, {
16398
+ warnings: true
16399
+ });
16340
16400
  } catch (error) {
16341
16401
  return {
16342
16402
  ok: false,
@@ -16349,13 +16409,20 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
16349
16409
  ]
16350
16410
  };
16351
16411
  }
16412
+ const warnings = parserWarnings(parsed, htmlContent, bodyStartOffset);
16352
16413
  const issues = validateParsedHtmlTemplate(parsed);
16353
16414
  if (issues.length > 0) return {
16354
16415
  ok: false,
16355
16416
  message: "form_template.html is invalid for Anvil",
16356
- issues
16357
- };
16358
- return {
16417
+ issues,
16418
+ ...warnings.length > 0 ? {
16419
+ warnings
16420
+ } : {}
16421
+ };
16422
+ return warnings.length > 0 ? {
16423
+ ok: true,
16424
+ warnings
16425
+ } : {
16359
16426
  ok: true
16360
16427
  };
16361
16428
  }
@@ -16625,6 +16692,16 @@ print(json.dumps({"issues": issues}))
16625
16692
  message
16626
16693
  });
16627
16694
  }
16695
+ function validPathResult(target, warnings) {
16696
+ return warnings && warnings.length > 0 ? {
16697
+ ok: true,
16698
+ target,
16699
+ warnings
16700
+ } : {
16701
+ ok: true,
16702
+ target
16703
+ };
16704
+ }
16628
16705
  function formatValidationPath(path) {
16629
16706
  return path || "root";
16630
16707
  }
@@ -16996,10 +17073,7 @@ print(json.dumps({"issues": issues}))
16996
17073
  ]
16997
17074
  };
16998
17075
  const result = validateAnvilYaml(fileContent);
16999
- return result.ok ? {
17000
- ok: true,
17001
- target
17002
- } : {
17076
+ return result.ok ? validPathResult(target, result.warnings) : {
17003
17077
  ...result,
17004
17078
  target
17005
17079
  };
@@ -17022,10 +17096,7 @@ print(json.dumps({"issues": issues}))
17022
17096
  };
17023
17097
  }
17024
17098
  const result = validateFormTemplate(fileContent);
17025
- return result.ok ? {
17026
- ok: true,
17027
- target
17028
- } : {
17099
+ return result.ok ? validPathResult(target, result.warnings) : {
17029
17100
  ...result,
17030
17101
  target
17031
17102
  };
@@ -17048,10 +17119,7 @@ print(json.dumps({"issues": issues}))
17048
17119
  };
17049
17120
  }
17050
17121
  const result = validateFormTemplateHtml(fileContent);
17051
- return result.ok ? {
17052
- ok: true,
17053
- target
17054
- } : {
17122
+ return result.ok ? validPathResult(target, result.warnings) : {
17055
17123
  ...result,
17056
17124
  target
17057
17125
  };
@@ -17077,10 +17145,7 @@ print(json.dumps({"issues": issues}))
17077
17145
  };
17078
17146
  }
17079
17147
  const result = validatePython(filePath, fileContent, appRoot);
17080
- return result.ok ? {
17081
- ok: true,
17082
- target
17083
- } : {
17148
+ return result.ok ? validPathResult(target, result.warnings) : {
17084
17149
  ...result,
17085
17150
  target
17086
17151
  };
package/dist/program.d.ts CHANGED
@@ -1,5 +1,22 @@
1
1
  import { Command } from "commander";
2
+ type ValidateCommandWarning = {
3
+ path: string;
4
+ message: string;
5
+ code?: string;
6
+ name?: string;
7
+ attrName?: string;
8
+ tagName?: string;
9
+ eventName?: string;
10
+ line?: number;
11
+ column?: number;
12
+ endLine?: number;
13
+ endColumn?: number;
14
+ offset?: number;
15
+ endOffset?: number;
16
+ };
17
+ export declare function formatValidationWarning(file: string, warning: ValidateCommandWarning): string;
2
18
  export declare function getUpdateInstructions(platform: NodeJS.Platform): string[];
3
19
  export declare function handleUpdateCommand(): Promise<void>;
4
20
  export declare function buildProgram(): Command;
21
+ export {};
5
22
  //# sourceMappingURL=program.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2LpC,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
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuDpC,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;AA2EF,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,10 +1,16 @@
1
1
  import { type ParsedHtmlTemplate } from "@anvil-works/form-template-parser";
2
2
  import type { FormTemplateValidationResult, ValidationIssue } from "./validators";
3
+ type ParseHtmlOptions = {
4
+ warnings?: boolean;
5
+ };
6
+ type ParseHtml = (html: string, options?: ParseHtmlOptions) => ParsedHtmlTemplate;
3
7
  export declare function splitHtmlFormTemplateFrontmatter(htmlContent: string): {
4
8
  frontmatter: string | null;
5
9
  body: string;
10
+ bodyStartOffset: number;
6
11
  };
7
12
  export declare function validateHtmlFrontmatter(frontmatterYaml: string): ValidationIssue[];
8
13
  export declare function validateParsedHtmlTemplate(parsed: ParsedHtmlTemplate): ValidationIssue[];
9
- export declare function validateFormTemplateHtml(htmlContent: string): FormTemplateValidationResult;
14
+ export declare function validateFormTemplateHtml(htmlContent: string, parseHtml?: ParseHtml): FormTemplateValidationResult;
15
+ export {};
10
16
  //# 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,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,MAAM,GAAG;IACnE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CAChB,CASA;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,CAAC,WAAW,EAAE,MAAM,GAAG,4BAA4B,CAyC1F"}
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;AAC/C,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,kBAAkB,CAAC;AA0ElF,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,GACxD,4BAA4B,CA2C9B"}
@@ -1,10 +1,12 @@
1
1
  import type { ValidationIssue } from "./validators";
2
2
  export type PythonValidationResult = {
3
3
  ok: true;
4
+ warnings?: ValidationIssue[];
4
5
  } | {
5
6
  ok: false;
6
7
  message: string;
7
8
  issues: ValidationIssue[];
9
+ warnings?: ValidationIssue[];
8
10
  };
9
11
  export type PythonInterpreterCommand = {
10
12
  command: string;
@@ -1 +1 @@
1
- {"version":3,"file":"validatePython.d.ts","sourceRoot":"","sources":["../src/validatePython.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,MAAM,sBAAsB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IACI,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC7B,CAAC;AAER,MAAM,MAAM,wBAAwB,GAAG;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,KAAK,WAAW,GAAG,CACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,QAAQ,EAAE,cAAc,CAAA;CAAE,KACpC;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAuE9C,wBAAgB,qBAAqB,CACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,GAAE,WAAuB,GAC/B,wBAAwB,GAAG,IAAI,CAkBjC;AAiCD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,sBAAsB,CAsEpH"}
1
+ {"version":3,"file":"validatePython.d.ts","sourceRoot":"","sources":["../src/validatePython.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,MAAM,sBAAsB,GAC5B;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,wBAAwB,GAAG;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,KAAK,WAAW,GAAG,CACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,QAAQ,EAAE,cAAc,CAAA;CAAE,KACpC;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAuE9C,wBAAgB,qBAAqB,CACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,GAAE,WAAuB,GAC/B,wBAAwB,GAAG,IAAI,CAkBjC;AAiCD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,sBAAsB,CAsEpH"}
@@ -1,30 +1,47 @@
1
1
  export type ValidationIssue = {
2
2
  path: string;
3
3
  message: string;
4
+ code?: string;
5
+ name?: string;
6
+ attrName?: string;
7
+ tagName?: string;
8
+ eventName?: string;
9
+ line?: number;
10
+ column?: number;
11
+ endLine?: number;
12
+ endColumn?: number;
13
+ offset?: number;
14
+ endOffset?: number;
4
15
  };
5
16
  export type FormTemplateValidationResult = {
6
17
  ok: true;
18
+ warnings?: ValidationIssue[];
7
19
  } | {
8
20
  ok: false;
9
21
  message: string;
10
22
  issues: ValidationIssue[];
23
+ warnings?: ValidationIssue[];
11
24
  };
12
25
  export type AnvilYamlValidationResult = {
13
26
  ok: true;
27
+ warnings?: ValidationIssue[];
14
28
  } | {
15
29
  ok: false;
16
30
  message: string;
17
31
  issues: ValidationIssue[];
32
+ warnings?: ValidationIssue[];
18
33
  };
19
34
  export type ValidationTarget = "anvil.yaml" | "form_template.yaml" | "form_template.html" | "python";
20
35
  export type ValidatePathResult = {
21
36
  ok: true;
22
37
  target: ValidationTarget;
38
+ warnings?: ValidationIssue[];
23
39
  } | {
24
40
  ok: false;
25
41
  target: ValidationTarget | "unknown";
26
42
  message: string;
27
43
  issues: ValidationIssue[];
44
+ warnings?: ValidationIssue[];
28
45
  };
29
46
  export declare function formatValidationPath(path: string): string;
30
47
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,eAAe,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAClC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IACI,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC7B,CAAC;AAER,MAAM,MAAM,yBAAyB,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IACI,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC7B,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,CAAA;CAAE,GACtC;IACI,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC7B,CAAC;AAoER,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,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAoItF"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAYA,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;AAwER,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,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAoItF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvil-works/anvil-cli",
3
- "version": "0.8.0-canary.1",
3
+ "version": "0.8.0-canary.2",
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.3",
67
+ "@anvil-works/form-template-parser": "0.0.4",
68
68
  "@napi-rs/keyring": "^1.2.0",
69
69
  "@types/inquirer": "^9.0.9",
70
70
  "@types/js-yaml": "^4.0.9",