@formspec/build 0.1.0-alpha.4 → 0.1.0-alpha.40

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.
Files changed (113) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +238 -93
  3. package/dist/analyzer/class-analyzer.d.ts +135 -0
  4. package/dist/analyzer/class-analyzer.d.ts.map +1 -0
  5. package/dist/analyzer/jsdoc-constraints.d.ts +53 -0
  6. package/dist/analyzer/jsdoc-constraints.d.ts.map +1 -0
  7. package/dist/analyzer/program.d.ts +94 -0
  8. package/dist/analyzer/program.d.ts.map +1 -0
  9. package/dist/analyzer/tsdoc-parser.d.ts +126 -0
  10. package/dist/analyzer/tsdoc-parser.d.ts.map +1 -0
  11. package/dist/browser.cjs +1904 -0
  12. package/dist/browser.cjs.map +1 -0
  13. package/dist/browser.d.ts +74 -0
  14. package/dist/browser.d.ts.map +1 -0
  15. package/dist/browser.js +1861 -0
  16. package/dist/browser.js.map +1 -0
  17. package/dist/build-alpha.d.ts +1491 -0
  18. package/dist/build-beta.d.ts +1491 -0
  19. package/dist/build-internal.d.ts +1491 -0
  20. package/dist/build.d.ts +1184 -43
  21. package/dist/canonicalize/chain-dsl-canonicalizer.d.ts +22 -0
  22. package/dist/canonicalize/chain-dsl-canonicalizer.d.ts.map +1 -0
  23. package/dist/canonicalize/index.d.ts +8 -0
  24. package/dist/canonicalize/index.d.ts.map +1 -0
  25. package/dist/canonicalize/tsdoc-canonicalizer.d.ts +38 -0
  26. package/dist/canonicalize/tsdoc-canonicalizer.d.ts.map +1 -0
  27. package/dist/cli.cjs +6579 -0
  28. package/dist/cli.cjs.map +1 -0
  29. package/dist/cli.js +6551 -103
  30. package/dist/cli.js.map +1 -1
  31. package/dist/extensions/index.d.ts +8 -0
  32. package/dist/extensions/index.d.ts.map +1 -0
  33. package/dist/extensions/registry.d.ts +83 -0
  34. package/dist/extensions/registry.d.ts.map +1 -0
  35. package/dist/generators/class-schema.d.ts +342 -0
  36. package/dist/generators/class-schema.d.ts.map +1 -0
  37. package/dist/generators/discovered-schema.d.ts +152 -0
  38. package/dist/generators/discovered-schema.d.ts.map +1 -0
  39. package/dist/generators/method-schema.d.ts +65 -0
  40. package/dist/generators/method-schema.d.ts.map +1 -0
  41. package/dist/generators/mixed-authoring.d.ts +52 -0
  42. package/dist/generators/mixed-authoring.d.ts.map +1 -0
  43. package/dist/index.cjs +6293 -0
  44. package/dist/index.cjs.map +1 -0
  45. package/dist/index.d.ts +50 -8
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +6268 -107
  48. package/dist/index.js.map +1 -1
  49. package/dist/internals.cjs +5480 -0
  50. package/dist/internals.cjs.map +1 -0
  51. package/dist/internals.d.ts +32 -0
  52. package/dist/internals.d.ts.map +1 -0
  53. package/dist/internals.js +5461 -0
  54. package/dist/internals.js.map +1 -0
  55. package/dist/json-schema/generator.d.ts +27 -6
  56. package/dist/json-schema/generator.d.ts.map +1 -1
  57. package/dist/json-schema/ir-generator.d.ts +144 -0
  58. package/dist/json-schema/ir-generator.d.ts.map +1 -0
  59. package/dist/json-schema/schema.d.ts +23 -0
  60. package/dist/json-schema/schema.d.ts.map +1 -0
  61. package/dist/json-schema/types.d.ts +76 -2
  62. package/dist/json-schema/types.d.ts.map +1 -1
  63. package/dist/metadata/collision-guards.d.ts +3 -0
  64. package/dist/metadata/collision-guards.d.ts.map +1 -0
  65. package/dist/metadata/index.d.ts +7 -0
  66. package/dist/metadata/index.d.ts.map +1 -0
  67. package/dist/metadata/policy.d.ts +11 -0
  68. package/dist/metadata/policy.d.ts.map +1 -0
  69. package/dist/metadata/resolve.d.ts +20 -0
  70. package/dist/metadata/resolve.d.ts.map +1 -0
  71. package/dist/static-build.d.ts +61 -0
  72. package/dist/static-build.d.ts.map +1 -0
  73. package/dist/ui-schema/generator.d.ts +18 -2
  74. package/dist/ui-schema/generator.d.ts.map +1 -1
  75. package/dist/ui-schema/ir-generator.d.ts +54 -0
  76. package/dist/ui-schema/ir-generator.d.ts.map +1 -0
  77. package/dist/ui-schema/schema.d.ts +429 -0
  78. package/dist/ui-schema/schema.d.ts.map +1 -0
  79. package/dist/ui-schema/types.d.ts +179 -35
  80. package/dist/ui-schema/types.d.ts.map +1 -1
  81. package/dist/validate/constraint-validator.d.ts +85 -0
  82. package/dist/validate/constraint-validator.d.ts.map +1 -0
  83. package/dist/validate/index.d.ts +9 -0
  84. package/dist/validate/index.d.ts.map +1 -0
  85. package/package.json +31 -11
  86. package/dist/__tests__/cli.test.d.ts +0 -2
  87. package/dist/__tests__/cli.test.d.ts.map +0 -1
  88. package/dist/__tests__/cli.test.js +0 -178
  89. package/dist/__tests__/cli.test.js.map +0 -1
  90. package/dist/__tests__/edge-cases.test.d.ts +0 -7
  91. package/dist/__tests__/edge-cases.test.d.ts.map +0 -1
  92. package/dist/__tests__/edge-cases.test.js +0 -217
  93. package/dist/__tests__/edge-cases.test.js.map +0 -1
  94. package/dist/__tests__/generator.test.d.ts +0 -2
  95. package/dist/__tests__/generator.test.d.ts.map +0 -1
  96. package/dist/__tests__/generator.test.js +0 -225
  97. package/dist/__tests__/generator.test.js.map +0 -1
  98. package/dist/__tests__/integration.test.d.ts +0 -8
  99. package/dist/__tests__/integration.test.d.ts.map +0 -1
  100. package/dist/__tests__/integration.test.js +0 -163
  101. package/dist/__tests__/integration.test.js.map +0 -1
  102. package/dist/__tests__/write-schemas.test.d.ts +0 -2
  103. package/dist/__tests__/write-schemas.test.d.ts.map +0 -1
  104. package/dist/__tests__/write-schemas.test.js +0 -196
  105. package/dist/__tests__/write-schemas.test.js.map +0 -1
  106. package/dist/json-schema/generator.js +0 -161
  107. package/dist/json-schema/generator.js.map +0 -1
  108. package/dist/json-schema/types.js +0 -7
  109. package/dist/json-schema/types.js.map +0 -1
  110. package/dist/ui-schema/generator.js +0 -150
  111. package/dist/ui-schema/generator.js.map +0 -1
  112. package/dist/ui-schema/types.js +0 -8
  113. package/dist/ui-schema/types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ui-schema/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,gBAAgB,GAChB,kBAAkB,GAClB,OAAO,GACP,gBAAgB,GAChB,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,oBAAoB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,mBAAmB;IACtD,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,WAAW,CAAC;AAEhB;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,gBAAgB,GAAG,WAAW,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ui-schema/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Constraint validator for the FormSpec IR.
3
+ *
4
+ * Delegates target-centric semantic analysis to `@formspec/analysis` so build
5
+ * validation and editor tooling share the same inheritance, path-target,
6
+ * contradiction, and broadening semantics.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import type { FormIR } from "@formspec/core/internals";
11
+ import type { ExtensionRegistry } from "../extensions/index.js";
12
+ /**
13
+ * Supported severity levels returned by static build validation.
14
+ *
15
+ * @public
16
+ */
17
+ export type ValidationDiagnosticSeverity = "error" | "warning";
18
+ /**
19
+ * Public source-location shape attached to validation diagnostics.
20
+ *
21
+ * This mirrors the provenance information surfaced by the shared analysis
22
+ * layer without exposing `@formspec/core/internals` through the public API.
23
+ *
24
+ * @public
25
+ */
26
+ export interface ValidationDiagnosticLocation {
27
+ /** Authoring surface that produced the diagnostic location. */
28
+ readonly surface: "tsdoc" | "chain-dsl" | "extension" | "inferred";
29
+ /** Absolute path to the source file. */
30
+ readonly file: string;
31
+ /** 1-based line number in the source file. */
32
+ readonly line: number;
33
+ /** 0-based column number in the source file. */
34
+ readonly column: number;
35
+ /** Optional span length in characters. */
36
+ readonly length?: number;
37
+ /** Optional tag or construct associated with the location. */
38
+ readonly tagName?: string;
39
+ }
40
+ /**
41
+ * A machine-readable validation diagnostic returned by static schema analysis.
42
+ *
43
+ * @public
44
+ */
45
+ export interface ValidationDiagnostic {
46
+ /** Stable machine-readable diagnostic code. */
47
+ readonly code: string;
48
+ /** Human-readable explanation of the validation problem. */
49
+ readonly message: string;
50
+ /** Severity of the reported validation problem. */
51
+ readonly severity: ValidationDiagnosticSeverity;
52
+ /** Primary source location associated with the diagnostic. */
53
+ readonly primaryLocation: ValidationDiagnosticLocation;
54
+ /** Related source locations that add context to the diagnostic. */
55
+ readonly relatedLocations: readonly ValidationDiagnosticLocation[];
56
+ }
57
+ /**
58
+ * Result of validating canonical FormIR before schema emission.
59
+ *
60
+ * @public
61
+ */
62
+ export interface ValidationResult {
63
+ /** Diagnostics produced during validation. */
64
+ readonly diagnostics: readonly ValidationDiagnostic[];
65
+ /** Whether any error-severity diagnostics were produced. */
66
+ readonly valid: boolean;
67
+ }
68
+ /**
69
+ * Options for validating canonical FormIR.
70
+ *
71
+ * @public
72
+ */
73
+ export interface ValidateIROptions {
74
+ /** Vendor prefix used when resolving extension-backed keywords. */
75
+ readonly vendorPrefix?: string;
76
+ /** Extension registry used to resolve custom constraints and types. */
77
+ readonly extensionRegistry?: ExtensionRegistry;
78
+ }
79
+ /**
80
+ * Validates canonical FormIR and returns all discovered diagnostics.
81
+ *
82
+ * @public
83
+ */
84
+ export declare function validateIR(ir: FormIR, options?: ValidateIROptions): ValidationResult;
85
+ //# sourceMappingURL=constraint-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint-validator.d.ts","sourceRoot":"","sources":["../../src/validate/constraint-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,MAAM,EAA4C,MAAM,0BAA0B,CAAC;AACjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;;;GAIG;AACH,MAAM,MAAM,4BAA4B,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D;;;;;;;GAOG;AACH,MAAM,WAAW,4BAA4B;IAC3C,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;IACnE,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;IAChD,8DAA8D;IAC9D,QAAQ,CAAC,eAAe,EAAE,4BAA4B,CAAC;IACvD,mEAAmE;IACnE,QAAQ,CAAC,gBAAgB,EAAE,SAAS,4BAA4B,EAAE,CAAC;CACpE;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACtD,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CAChD;AA6ED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAepF"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Constraint validation for the FormSpec IR.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export { validateIR } from "./constraint-validator.js";
7
+ export type { ValidationDiagnostic, ValidationDiagnosticLocation, ValidationDiagnosticSeverity, ValidationResult, ValidateIROptions, } from "./constraint-validator.js";
8
+ export type { ExtensionRegistry } from "../extensions/index.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validate/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,YAAY,EACV,oBAAoB,EACpB,4BAA4B,EAC5B,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@formspec/build",
3
- "version": "0.1.0-alpha.4",
3
+ "version": "0.1.0-alpha.40",
4
4
  "description": "Build tools to compile FormSpec forms to JSON Schema and UI Schema",
5
5
  "type": "module",
6
- "main": "./dist/index.js",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
7
8
  "types": "./dist/build.d.ts",
8
9
  "bin": {
9
10
  "formspec-build": "./dist/cli.js"
@@ -11,32 +12,51 @@
11
12
  "exports": {
12
13
  ".": {
13
14
  "types": "./dist/build.d.ts",
14
- "import": "./dist/index.js"
15
+ "import": "./dist/index.js",
16
+ "require": "./dist/index.cjs"
17
+ },
18
+ "./browser": {
19
+ "types": "./dist/browser.d.ts",
20
+ "import": "./dist/browser.js",
21
+ "require": "./dist/browser.cjs"
22
+ },
23
+ "./internals": {
24
+ "types": "./dist/internals.d.ts",
25
+ "import": "./dist/internals.js",
26
+ "require": "./dist/internals.cjs"
15
27
  }
16
28
  },
17
29
  "files": [
18
30
  "dist",
19
- "README.md"
31
+ "README.md",
32
+ "LICENSE"
20
33
  ],
21
34
  "dependencies": {
22
- "@formspec/core": "0.1.0-alpha.4"
35
+ "@microsoft/tsdoc": "^0.16.0",
36
+ "@microsoft/tsdoc-config": "^0.18.1",
37
+ "zod": "^3.25.0",
38
+ "@formspec/analysis": "0.1.0-alpha.38",
39
+ "@formspec/core": "0.1.0-alpha.33"
40
+ },
41
+ "peerDependencies": {
42
+ "typescript": "^5.0.0"
23
43
  },
24
44
  "devDependencies": {
25
45
  "vitest": "^3.0.0",
26
- "@formspec/dsl": "0.1.0-alpha.4"
46
+ "@formspec/dsl": "0.1.0-alpha.33"
27
47
  },
28
48
  "publishConfig": {
29
49
  "access": "public"
30
50
  },
31
51
  "keywords": [],
32
- "license": "UNLICENSED",
52
+ "license": "MIT",
33
53
  "scripts": {
34
- "build": "tsc && api-extractor run --local",
54
+ "build": "tsup && tsc --emitDeclarationOnly && pnpm run api-extractor:local",
35
55
  "clean": "rm -rf dist temp",
36
56
  "typecheck": "tsc --noEmit",
37
57
  "test": "pnpm run build && vitest run",
38
- "api-extractor": "api-extractor run",
39
- "api-extractor:local": "api-extractor run --local",
40
- "api-documenter": "api-documenter markdown -i temp -o docs"
58
+ "api-extractor": "api-extractor run && node ../../scripts/normalize-generated-markdown.mjs api-report",
59
+ "api-extractor:local": "api-extractor run --local && node ../../scripts/normalize-generated-markdown.mjs api-report",
60
+ "api-documenter": "api-documenter markdown -i temp -o docs && node ../../scripts/normalize-generated-markdown.mjs docs"
41
61
  }
42
62
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=cli.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":""}
@@ -1,178 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
- import * as fs from "node:fs";
3
- import * as path from "node:path";
4
- import * as os from "node:os";
5
- import { execSync } from "node:child_process";
6
- describe("CLI", () => {
7
- let tempDir;
8
- const cliPath = path.join(__dirname, "..", "..", "dist", "cli.js");
9
- beforeEach(() => {
10
- tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "formspec-cli-test-"));
11
- });
12
- afterEach(() => {
13
- if (fs.existsSync(tempDir)) {
14
- fs.rmSync(tempDir, { recursive: true });
15
- }
16
- });
17
- function runCli(args) {
18
- try {
19
- const stdout = execSync(`node ${cliPath} ${args.join(" ")}`, {
20
- encoding: "utf-8",
21
- cwd: tempDir,
22
- stdio: ["pipe", "pipe", "pipe"],
23
- });
24
- return { stdout, exitCode: 0 };
25
- }
26
- catch (error) {
27
- const execError = error;
28
- return {
29
- stdout: execError.stdout || execError.stderr || "",
30
- exitCode: execError.status || 1,
31
- };
32
- }
33
- }
34
- function createFormFile(filename, content) {
35
- const filepath = path.join(tempDir, filename);
36
- fs.writeFileSync(filepath, content);
37
- return filepath;
38
- }
39
- describe("help", () => {
40
- it("should show help with --help flag", () => {
41
- const result = runCli(["--help"]);
42
- expect(result.stdout).toContain("FormSpec Build CLI");
43
- expect(result.stdout).toContain("Usage:");
44
- expect(result.stdout).toContain("--out-dir");
45
- expect(result.stdout).toContain("--name");
46
- });
47
- it("should show help with -h flag", () => {
48
- const result = runCli(["-h"]);
49
- expect(result.stdout).toContain("FormSpec Build CLI");
50
- });
51
- });
52
- describe("argument parsing", () => {
53
- it("should fail when no input file provided", () => {
54
- const result = runCli([]);
55
- expect(result.exitCode).not.toBe(0);
56
- // Shows help which includes Usage information
57
- expect(result.stdout).toContain("Usage:");
58
- });
59
- it("should fail for unknown option", () => {
60
- const formFile = createFormFile("form.js", `
61
- export default { elements: [] };
62
- `);
63
- const result = runCli([formFile, "--unknown-option"]);
64
- expect(result.exitCode).not.toBe(0);
65
- expect(result.stdout).toContain("Unknown option");
66
- });
67
- it("should fail when --out-dir has no value", () => {
68
- const formFile = createFormFile("form.js", `
69
- export default { elements: [] };
70
- `);
71
- const result = runCli([formFile, "--out-dir"]);
72
- expect(result.exitCode).not.toBe(0);
73
- expect(result.stdout).toContain("--out-dir requires a value");
74
- });
75
- it("should fail when --name has no value", () => {
76
- const formFile = createFormFile("form.js", `
77
- export default { elements: [] };
78
- `);
79
- const result = runCli([formFile, "--name"]);
80
- expect(result.exitCode).not.toBe(0);
81
- expect(result.stdout).toContain("--name requires a value");
82
- });
83
- });
84
- describe("file handling", () => {
85
- it("should fail when input file doesn't exist", () => {
86
- const result = runCli(["nonexistent.js"]);
87
- expect(result.exitCode).not.toBe(0);
88
- expect(result.stdout).toContain("Error");
89
- });
90
- it("should fail when file has no form export", () => {
91
- const formFile = createFormFile("no-export.js", `
92
- const notExported = { foo: "bar" };
93
- `);
94
- const result = runCli([formFile]);
95
- expect(result.exitCode).not.toBe(0);
96
- expect(result.stdout).toContain("Error");
97
- });
98
- it("should fail when export is not a FormSpec", () => {
99
- const formFile = createFormFile("not-formspec.js", `
100
- export default { notAForm: true };
101
- `);
102
- const result = runCli([formFile]);
103
- expect(result.exitCode).not.toBe(0);
104
- expect(result.stdout).toContain("FormSpec");
105
- });
106
- });
107
- describe("successful generation", () => {
108
- it("should generate schemas from default export", () => {
109
- const formFile = createFormFile("form-default.js", `
110
- export default {
111
- elements: [
112
- { _type: "field", _field: "text", name: "name" }
113
- ]
114
- };
115
- `);
116
- const outDir = path.join(tempDir, "output");
117
- const result = runCli([formFile, "-o", outDir, "-n", "test"]);
118
- expect(result.exitCode).toBe(0);
119
- expect(result.stdout).toContain("Generated");
120
- expect(fs.existsSync(path.join(outDir, "test-schema.json"))).toBe(true);
121
- expect(fs.existsSync(path.join(outDir, "test-uischema.json"))).toBe(true);
122
- });
123
- it("should generate schemas from named 'form' export", () => {
124
- const formFile = createFormFile("form-named.js", `
125
- export const form = {
126
- elements: [
127
- { _type: "field", _field: "text", name: "title" }
128
- ]
129
- };
130
- `);
131
- const outDir = path.join(tempDir, "output");
132
- const result = runCli([formFile, "-o", outDir, "-n", "test"]);
133
- expect(result.exitCode).toBe(0);
134
- expect(fs.existsSync(path.join(outDir, "test-schema.json"))).toBe(true);
135
- });
136
- it("should derive name from input filename when not specified", () => {
137
- const formFile = createFormFile("my-form.js", `
138
- export default {
139
- elements: [
140
- { _type: "field", _field: "text", name: "name" }
141
- ]
142
- };
143
- `);
144
- const outDir = path.join(tempDir, "output");
145
- const result = runCli([formFile, "-o", outDir]);
146
- expect(result.exitCode).toBe(0);
147
- expect(fs.existsSync(path.join(outDir, "my-form-schema.json"))).toBe(true);
148
- expect(fs.existsSync(path.join(outDir, "my-form-uischema.json"))).toBe(true);
149
- });
150
- it("should use default output directory when not specified", () => {
151
- const formFile = createFormFile("form.js", `
152
- export default {
153
- elements: [
154
- { _type: "field", _field: "text", name: "name" }
155
- ]
156
- };
157
- `);
158
- const result = runCli([formFile, "-n", "test"]);
159
- expect(result.exitCode).toBe(0);
160
- // Default output is ./generated relative to cwd
161
- expect(fs.existsSync(path.join(tempDir, "generated", "test-schema.json"))).toBe(true);
162
- });
163
- it("should accept short flags -o and -n", () => {
164
- const formFile = createFormFile("form.js", `
165
- export default {
166
- elements: [
167
- { _type: "field", _field: "text", name: "name" }
168
- ]
169
- };
170
- `);
171
- const outDir = path.join(tempDir, "out");
172
- const result = runCli([formFile, "-o", outDir, "-n", "short"]);
173
- expect(result.exitCode).toBe(0);
174
- expect(fs.existsSync(path.join(outDir, "short-schema.json"))).toBe(true);
175
- });
176
- });
177
- });
178
- //# sourceMappingURL=cli.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Edge case and error handling tests.
3
- *
4
- * These tests verify correct behavior in unusual or boundary situations.
5
- */
6
- export {};
7
- //# sourceMappingURL=edge-cases.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edge-cases.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/edge-cases.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1,217 +0,0 @@
1
- /**
2
- * Edge case and error handling tests.
3
- *
4
- * These tests verify correct behavior in unusual or boundary situations.
5
- */
6
- import { describe, it, expect } from "vitest";
7
- import { buildFormSchemas, generateJsonSchema, generateUiSchema } from "../index.js";
8
- import { formspec, field, group, when, is } from "@formspec/dsl";
9
- describe("Edge cases: Empty and minimal forms", () => {
10
- it("should handle form with no fields", () => {
11
- const emptyForm = formspec();
12
- const { jsonSchema, uiSchema } = buildFormSchemas(emptyForm);
13
- expect(jsonSchema.type).toBe("object");
14
- expect(jsonSchema.properties).toEqual({});
15
- expect(jsonSchema.required).toBeUndefined();
16
- expect(uiSchema.type).toBe("VerticalLayout");
17
- expect(uiSchema.elements).toEqual([]);
18
- });
19
- it("should handle empty group", () => {
20
- const form = formspec(group("Empty Group"));
21
- const { jsonSchema, uiSchema } = buildFormSchemas(form);
22
- expect(jsonSchema.properties).toEqual({});
23
- expect(uiSchema.elements).toHaveLength(1);
24
- expect(uiSchema.elements[0]).toMatchObject({
25
- type: "Group",
26
- label: "Empty Group",
27
- elements: [],
28
- });
29
- });
30
- it("should handle empty conditional", () => {
31
- const form = formspec(field.enum("type", ["a", "b"]), when(is("type", "a")));
32
- const { jsonSchema, uiSchema } = buildFormSchemas(form);
33
- // Only the enum field should exist
34
- expect(Object.keys(jsonSchema.properties ?? {})).toEqual(["type"]);
35
- expect(uiSchema.elements).toHaveLength(1);
36
- });
37
- it("should handle empty array field", () => {
38
- const form = formspec(field.array("items"));
39
- const { jsonSchema } = buildFormSchemas(form);
40
- expect(jsonSchema.properties?.["items"]).toMatchObject({
41
- type: "array",
42
- items: {
43
- type: "object",
44
- properties: {},
45
- },
46
- });
47
- });
48
- it("should handle empty object field", () => {
49
- const form = formspec(field.object("data"));
50
- const { jsonSchema } = buildFormSchemas(form);
51
- expect(jsonSchema.properties?.["data"]).toMatchObject({
52
- type: "object",
53
- properties: {},
54
- });
55
- });
56
- });
57
- describe("Edge cases: Field names", () => {
58
- it("should handle field names with special characters", () => {
59
- const form = formspec(field.text("field_with_underscore"), field.text("field-with-dash"), field.text("field123"));
60
- const { jsonSchema, uiSchema } = buildFormSchemas(form);
61
- expect(jsonSchema.properties?.["field_with_underscore"]).toBeDefined();
62
- expect(jsonSchema.properties?.["field-with-dash"]).toBeDefined();
63
- expect(jsonSchema.properties?.["field123"]).toBeDefined();
64
- // All scopes should be properly formed
65
- expect(uiSchema.elements[0]).toMatchObject({
66
- scope: "#/properties/field_with_underscore",
67
- });
68
- expect(uiSchema.elements[1]).toMatchObject({
69
- scope: "#/properties/field-with-dash",
70
- });
71
- });
72
- it("should handle single character field names", () => {
73
- const form = formspec(field.text("a"), field.number("b"), field.boolean("c"));
74
- const { jsonSchema } = buildFormSchemas(form);
75
- expect(Object.keys(jsonSchema.properties ?? {})).toEqual(["a", "b", "c"]);
76
- });
77
- });
78
- describe("Edge cases: Number constraints", () => {
79
- it("should handle zero as min/max", () => {
80
- const form = formspec(field.number("zeroMin", { min: 0 }), field.number("zeroMax", { max: 0 }), field.number("zeroRange", { min: 0, max: 0 }));
81
- const { jsonSchema } = buildFormSchemas(form);
82
- expect(jsonSchema.properties?.["zeroMin"]).toMatchObject({
83
- type: "number",
84
- minimum: 0,
85
- });
86
- expect(jsonSchema.properties?.["zeroMax"]).toMatchObject({
87
- type: "number",
88
- maximum: 0,
89
- });
90
- expect(jsonSchema.properties?.["zeroRange"]).toMatchObject({
91
- type: "number",
92
- minimum: 0,
93
- maximum: 0,
94
- });
95
- });
96
- it("should handle negative min/max", () => {
97
- const form = formspec(field.number("temperature", { min: -273, max: 1000000 }));
98
- const { jsonSchema } = buildFormSchemas(form);
99
- expect(jsonSchema.properties?.["temperature"]).toMatchObject({
100
- type: "number",
101
- minimum: -273,
102
- maximum: 1000000,
103
- });
104
- });
105
- });
106
- describe("Edge cases: Enum options", () => {
107
- it("should handle single option enum", () => {
108
- const form = formspec(field.enum("singleOption", ["only"]));
109
- const { jsonSchema } = buildFormSchemas(form);
110
- expect(jsonSchema.properties?.["singleOption"]).toMatchObject({
111
- type: "string",
112
- enum: ["only"],
113
- });
114
- });
115
- it("should handle single object option enum", () => {
116
- const form = formspec(field.enum("singleObj", [{ id: "only", label: "Only Option" }]));
117
- const { jsonSchema } = buildFormSchemas(form);
118
- expect(jsonSchema.properties?.["singleObj"]).toMatchObject({
119
- type: "string",
120
- oneOf: [{ const: "only", title: "Only Option" }],
121
- });
122
- });
123
- it("should handle enum with empty string option", () => {
124
- const form = formspec(field.enum("withEmpty", ["", "value"]));
125
- const { jsonSchema } = buildFormSchemas(form);
126
- expect(jsonSchema.properties?.["withEmpty"]).toMatchObject({
127
- type: "string",
128
- enum: ["", "value"],
129
- });
130
- });
131
- });
132
- describe("Edge cases: Conditional values", () => {
133
- it("should handle boolean conditional value", () => {
134
- const form = formspec(field.boolean("enabled"), when(is("enabled", true), field.text("config")));
135
- const { uiSchema } = buildFormSchemas(form);
136
- const conditionalField = uiSchema.elements.find((el) => el.type === "Control" && "scope" in el && el.scope === "#/properties/config");
137
- expect(conditionalField?.rule?.condition.schema).toMatchObject({
138
- const: true,
139
- });
140
- });
141
- it("should handle null conditional value", () => {
142
- const form = formspec(field.text("optional"), when(is("optional", null), field.text("fallback")));
143
- const { uiSchema } = buildFormSchemas(form);
144
- const conditionalField = uiSchema.elements.find((el) => el.type === "Control" && "scope" in el && el.scope === "#/properties/fallback");
145
- expect(conditionalField?.rule?.condition.schema).toMatchObject({
146
- const: null,
147
- });
148
- });
149
- it("should handle number conditional value", () => {
150
- const form = formspec(field.number("quantity"), when(is("quantity", 0), field.text("zeroReason", { label: "Why zero?" })));
151
- const { uiSchema } = buildFormSchemas(form);
152
- const conditionalField = uiSchema.elements.find((el) => el.type === "Control" && "scope" in el && el.scope === "#/properties/zeroReason");
153
- expect(conditionalField?.rule?.condition.schema).toMatchObject({
154
- const: 0,
155
- });
156
- });
157
- });
158
- describe("Edge cases: Array min/max items", () => {
159
- it("should handle minItems of 0", () => {
160
- const form = formspec(field.arrayWithConfig("items", { minItems: 0 }, field.text("name")));
161
- const { jsonSchema } = buildFormSchemas(form);
162
- expect(jsonSchema.properties?.["items"]).toMatchObject({
163
- type: "array",
164
- minItems: 0,
165
- });
166
- });
167
- it("should handle minItems equal to maxItems", () => {
168
- const form = formspec(field.arrayWithConfig("exactFive", { minItems: 5, maxItems: 5 }, field.text("item")));
169
- const { jsonSchema } = buildFormSchemas(form);
170
- expect(jsonSchema.properties?.["exactFive"]).toMatchObject({
171
- type: "array",
172
- minItems: 5,
173
- maxItems: 5,
174
- });
175
- });
176
- });
177
- describe("Edge cases: Deeply nested structures", () => {
178
- it("should handle 3+ levels of nesting", () => {
179
- const form = formspec(field.object("level1", field.object("level2", field.object("level3", field.text("deepValue")))));
180
- const { jsonSchema } = buildFormSchemas(form);
181
- expect(jsonSchema.properties?.["level1"]).toMatchObject({
182
- type: "object",
183
- properties: {
184
- level2: {
185
- type: "object",
186
- properties: {
187
- level3: {
188
- type: "object",
189
- properties: {
190
- deepValue: { type: "string" },
191
- },
192
- },
193
- },
194
- },
195
- },
196
- });
197
- });
198
- it("should handle conditionals inside groups inside conditionals", () => {
199
- const form = formspec(field.enum("outer", ["a", "b"]), when(is("outer", "a"), group("Inner Group", field.enum("inner", ["x", "y"]), when(is("inner", "x"), field.text("deepest")))));
200
- const { jsonSchema, uiSchema } = buildFormSchemas(form);
201
- // All fields should be in schema
202
- expect(Object.keys(jsonSchema.properties ?? {})).toContain("outer");
203
- expect(Object.keys(jsonSchema.properties ?? {})).toContain("inner");
204
- expect(Object.keys(jsonSchema.properties ?? {})).toContain("deepest");
205
- // Find the deepest field and verify it has combined rules
206
- const deepestControl = uiSchema.elements.find((el) => {
207
- if (el.type === "Group") {
208
- return el.elements.some((inner) => inner.type === "Control" &&
209
- "scope" in inner &&
210
- inner.scope === "#/properties/deepest");
211
- }
212
- return false;
213
- });
214
- expect(deepestControl).toBeDefined();
215
- });
216
- });
217
- //# sourceMappingURL=edge-cases.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edge-cases.test.js","sourceRoot":"","sources":["../../src/__tests__/edge-cases.test.ts"],"names":[],"mappings":"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"}