@formspec/build 0.1.0-alpha.10 → 0.1.0-alpha.11
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/browser.cjs +549 -0
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.ts +4 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +498 -45
- package/dist/browser.js.map +1 -1
- package/dist/build.d.ts +343 -33
- package/dist/cli.cjs +2267 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.js +2204 -101
- package/dist/cli.js.map +1 -1
- package/dist/generators/class-schema.d.ts +5 -9
- package/dist/generators/class-schema.d.ts.map +1 -1
- package/dist/index.cjs +2093 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2024 -114
- package/dist/index.js.map +1 -1
- package/dist/internals.cjs +1345 -0
- package/dist/internals.cjs.map +1 -0
- package/dist/internals.d.ts +1 -0
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +1297 -21
- package/dist/internals.js.map +1 -1
- package/dist/json-schema/generator.d.ts.map +1 -1
- package/dist/json-schema/schema.d.ts +16 -0
- package/dist/json-schema/schema.d.ts.map +1 -0
- package/dist/ui-schema/generator.d.ts +15 -0
- package/dist/ui-schema/generator.d.ts.map +1 -1
- package/dist/ui-schema/schema.d.ts +357 -0
- package/dist/ui-schema/schema.d.ts.map +1 -0
- package/dist/ui-schema/types.d.ts +8 -73
- package/dist/ui-schema/types.d.ts.map +1 -1
- package/package.json +14 -9
- package/dist/__tests__/analyzer-edge-cases.test.js +0 -376
- package/dist/__tests__/analyzer-edge-cases.test.js.map +0 -1
- package/dist/__tests__/analyzer.test.js +0 -190
- package/dist/__tests__/analyzer.test.js.map +0 -1
- package/dist/__tests__/cli.test.js +0 -178
- package/dist/__tests__/cli.test.js.map +0 -1
- package/dist/__tests__/codegen.test.js +0 -506
- package/dist/__tests__/codegen.test.js.map +0 -1
- package/dist/__tests__/decorator-pipeline.test.js +0 -460
- package/dist/__tests__/decorator-pipeline.test.js.map +0 -1
- package/dist/__tests__/edge-cases.test.js +0 -215
- package/dist/__tests__/edge-cases.test.js.map +0 -1
- package/dist/__tests__/fixtures/edge-cases.js +0 -137
- package/dist/__tests__/fixtures/edge-cases.js.map +0 -1
- package/dist/__tests__/fixtures/example-a-builtins.js +0 -100
- package/dist/__tests__/fixtures/example-a-builtins.js.map +0 -1
- package/dist/__tests__/fixtures/example-b-decorators.js +0 -5
- package/dist/__tests__/fixtures/example-b-decorators.js.map +0 -1
- package/dist/__tests__/fixtures/example-b-extended.js +0 -60
- package/dist/__tests__/fixtures/example-b-extended.js.map +0 -1
- package/dist/__tests__/fixtures/example-c-custom.js +0 -61
- package/dist/__tests__/fixtures/example-c-custom.js.map +0 -1
- package/dist/__tests__/fixtures/example-c-decorators.js +0 -4
- package/dist/__tests__/fixtures/example-c-decorators.js.map +0 -1
- package/dist/__tests__/fixtures/example-d-mixed-decorators.js +0 -75
- package/dist/__tests__/fixtures/example-d-mixed-decorators.js.map +0 -1
- package/dist/__tests__/fixtures/example-e-decorators.js +0 -10
- package/dist/__tests__/fixtures/example-e-decorators.js.map +0 -1
- package/dist/__tests__/fixtures/example-e-no-namespace.js +0 -61
- package/dist/__tests__/fixtures/example-e-no-namespace.js.map +0 -1
- package/dist/__tests__/fixtures/example-interface-types.js +0 -8
- package/dist/__tests__/fixtures/example-interface-types.js.map +0 -1
- package/dist/__tests__/fixtures/example-jsdoc-constraints.js +0 -98
- package/dist/__tests__/fixtures/example-jsdoc-constraints.js.map +0 -1
- package/dist/__tests__/fixtures/example-nested-class.js +0 -248
- package/dist/__tests__/fixtures/example-nested-class.js.map +0 -1
- package/dist/__tests__/fixtures/sample-forms.js +0 -78
- package/dist/__tests__/fixtures/sample-forms.js.map +0 -1
- package/dist/__tests__/generator.test.js +0 -234
- package/dist/__tests__/generator.test.js.map +0 -1
- package/dist/__tests__/integration.test.js +0 -161
- package/dist/__tests__/integration.test.js.map +0 -1
- package/dist/__tests__/interface-types.test.js +0 -404
- package/dist/__tests__/interface-types.test.js.map +0 -1
- package/dist/__tests__/jsdoc-constraints.test.js +0 -465
- package/dist/__tests__/jsdoc-constraints.test.js.map +0 -1
- package/dist/__tests__/write-schemas.test.js +0 -198
- package/dist/__tests__/write-schemas.test.js.map +0 -1
- package/dist/analyzer/class-analyzer.js +0 -377
- package/dist/analyzer/class-analyzer.js.map +0 -1
- package/dist/analyzer/decorator-extractor.js +0 -336
- package/dist/analyzer/decorator-extractor.js.map +0 -1
- package/dist/analyzer/jsdoc-constraints.js +0 -153
- package/dist/analyzer/jsdoc-constraints.js.map +0 -1
- package/dist/analyzer/program.js +0 -114
- package/dist/analyzer/program.js.map +0 -1
- package/dist/analyzer/type-converter.js +0 -474
- package/dist/analyzer/type-converter.js.map +0 -1
- package/dist/codegen/index.js +0 -597
- package/dist/codegen/index.js.map +0 -1
- package/dist/generators/class-schema.js +0 -140
- package/dist/generators/class-schema.js.map +0 -1
- package/dist/generators/method-schema.js +0 -108
- package/dist/generators/method-schema.js.map +0 -1
- package/dist/json-schema/generator.js +0 -166
- package/dist/json-schema/generator.js.map +0 -1
- package/dist/json-schema/types.js +0 -33
- package/dist/json-schema/types.js.map +0 -1
- package/dist/ui-schema/generator.js +0 -148
- package/dist/ui-schema/generator.js.map +0 -1
- package/dist/ui-schema/types.js +0 -8
- package/dist/ui-schema/types.js.map +0 -1
|
@@ -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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"}
|