@featurevisor/core 2.10.0 → 2.12.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.
Files changed (79) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/coverage/clover.xml +684 -3
  3. package/coverage/coverage-final.json +4 -0
  4. package/coverage/lcov-report/builder/allocator.ts.html +1 -1
  5. package/coverage/lcov-report/builder/buildScopedConditions.ts.html +1 -1
  6. package/coverage/lcov-report/builder/buildScopedDatafile.ts.html +1 -1
  7. package/coverage/lcov-report/builder/buildScopedSegments.ts.html +1 -1
  8. package/coverage/lcov-report/builder/index.html +1 -1
  9. package/coverage/lcov-report/builder/revision.ts.html +1 -1
  10. package/coverage/lcov-report/builder/traffic.ts.html +1 -1
  11. package/coverage/lcov-report/index.html +25 -10
  12. package/coverage/lcov-report/linter/conditionSchema.ts.html +775 -0
  13. package/coverage/lcov-report/linter/featureSchema.ts.html +4924 -0
  14. package/coverage/lcov-report/linter/index.html +161 -0
  15. package/coverage/lcov-report/linter/schema.ts.html +1471 -0
  16. package/coverage/lcov-report/linter/segmentSchema.ts.html +130 -0
  17. package/coverage/lcov-report/list/index.html +1 -1
  18. package/coverage/lcov-report/list/matrix.ts.html +1 -1
  19. package/coverage/lcov-report/parsers/index.html +1 -1
  20. package/coverage/lcov-report/parsers/json.ts.html +1 -1
  21. package/coverage/lcov-report/parsers/yml.ts.html +1 -1
  22. package/coverage/lcov-report/tester/helpers.ts.html +1 -1
  23. package/coverage/lcov-report/tester/index.html +1 -1
  24. package/coverage/lcov.info +1471 -0
  25. package/lib/builder/buildDatafile.js +15 -1
  26. package/lib/builder/buildDatafile.js.map +1 -1
  27. package/lib/config/projectConfig.d.ts +2 -0
  28. package/lib/config/projectConfig.js +3 -1
  29. package/lib/config/projectConfig.js.map +1 -1
  30. package/lib/datasource/datasource.d.ts +6 -1
  31. package/lib/datasource/datasource.js +16 -0
  32. package/lib/datasource/datasource.js.map +1 -1
  33. package/lib/datasource/filesystemAdapter.js +10 -0
  34. package/lib/datasource/filesystemAdapter.js.map +1 -1
  35. package/lib/generate-code/typescript.js +283 -49
  36. package/lib/generate-code/typescript.js.map +1 -1
  37. package/lib/linter/conditionSchema.spec.d.ts +1 -0
  38. package/lib/linter/conditionSchema.spec.js +331 -0
  39. package/lib/linter/conditionSchema.spec.js.map +1 -0
  40. package/lib/linter/featureSchema.d.ts +153 -17
  41. package/lib/linter/featureSchema.js +536 -49
  42. package/lib/linter/featureSchema.js.map +1 -1
  43. package/lib/linter/featureSchema.spec.d.ts +1 -0
  44. package/lib/linter/featureSchema.spec.js +978 -0
  45. package/lib/linter/featureSchema.spec.js.map +1 -0
  46. package/lib/linter/lintProject.js +67 -1
  47. package/lib/linter/lintProject.js.map +1 -1
  48. package/lib/linter/schema.d.ts +42 -0
  49. package/lib/linter/schema.js +417 -0
  50. package/lib/linter/schema.js.map +1 -0
  51. package/lib/linter/schema.spec.d.ts +1 -0
  52. package/lib/linter/schema.spec.js +483 -0
  53. package/lib/linter/schema.spec.js.map +1 -0
  54. package/lib/linter/segmentSchema.spec.d.ts +1 -0
  55. package/lib/linter/segmentSchema.spec.js +231 -0
  56. package/lib/linter/segmentSchema.spec.js.map +1 -0
  57. package/lib/tester/testFeature.js +5 -3
  58. package/lib/tester/testFeature.js.map +1 -1
  59. package/lib/utils/git.js +3 -0
  60. package/lib/utils/git.js.map +1 -1
  61. package/package.json +5 -5
  62. package/src/builder/buildDatafile.ts +17 -1
  63. package/src/config/projectConfig.ts +3 -0
  64. package/src/datasource/datasource.ts +23 -0
  65. package/src/datasource/filesystemAdapter.ts +7 -0
  66. package/src/generate-code/typescript.ts +333 -52
  67. package/src/linter/conditionSchema.spec.ts +446 -0
  68. package/src/linter/featureSchema.spec.ts +1218 -0
  69. package/src/linter/featureSchema.ts +747 -70
  70. package/src/linter/lintProject.ts +84 -0
  71. package/src/linter/schema.spec.ts +617 -0
  72. package/src/linter/schema.ts +462 -0
  73. package/src/linter/segmentSchema.spec.ts +273 -0
  74. package/src/tester/testFeature.ts +5 -3
  75. package/src/utils/git.ts +2 -0
  76. package/lib/linter/propertySchema.d.ts +0 -5
  77. package/lib/linter/propertySchema.js +0 -43
  78. package/lib/linter/propertySchema.js.map +0 -1
  79. package/src/linter/propertySchema.ts +0 -47
@@ -0,0 +1,483 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Unit tests for standalone schema validation (schemas/*.yml).
5
+ * Covers getSchemaZodSchema and the refinement helpers: refineEnumMatchesType,
6
+ * refineMinimumMaximum, refineStringLengthPattern, refineArrayItems.
7
+ */
8
+ const zod_1 = require("zod");
9
+ const schema_1 = require("./schema");
10
+ /** Build a refinement context that collects issues for assertion. */
11
+ function createRefinementCtx() {
12
+ const issues = [];
13
+ const ctx = {
14
+ path: [],
15
+ addIssue(issue) {
16
+ issues.push(issue);
17
+ },
18
+ };
19
+ return { issues, ctx };
20
+ }
21
+ /** Return human-readable message from a Zod issue (custom or default). */
22
+ function issueMessage(issue) {
23
+ if (issue.code === zod_1.z.ZodIssueCode.custom && typeof issue.message === "string") {
24
+ return issue.message;
25
+ }
26
+ return issue.message ?? "";
27
+ }
28
+ describe("schema.ts :: valueZodSchema and propertyTypeEnum", () => {
29
+ describe("valueZodSchema", () => {
30
+ it("accepts boolean, string, number", () => {
31
+ expect(schema_1.valueZodSchema.safeParse(true).success).toBe(true);
32
+ expect(schema_1.valueZodSchema.safeParse("x").success).toBe(true);
33
+ expect(schema_1.valueZodSchema.safeParse(1).success).toBe(true);
34
+ });
35
+ it("accepts plain objects and arrays of values", () => {
36
+ expect(schema_1.valueZodSchema.safeParse({ a: 1 }).success).toBe(true);
37
+ expect(schema_1.valueZodSchema.safeParse([1, "b"]).success).toBe(true);
38
+ });
39
+ it("rejects null at top level", () => {
40
+ const r = schema_1.valueZodSchema.safeParse(null);
41
+ expect(r.success).toBe(false);
42
+ });
43
+ });
44
+ describe("propertyTypeEnum", () => {
45
+ it("accepts allowed types", () => {
46
+ expect(schema_1.propertyTypeEnum.safeParse("string").success).toBe(true);
47
+ expect(schema_1.propertyTypeEnum.safeParse("array").success).toBe(true);
48
+ expect(schema_1.propertyTypeEnum.safeParse("object").success).toBe(true);
49
+ });
50
+ it("rejects invalid type", () => {
51
+ expect(schema_1.propertyTypeEnum.safeParse("date").success).toBe(false);
52
+ });
53
+ });
54
+ });
55
+ describe("schema.ts :: refineEnumMatchesType", () => {
56
+ it("adds no issue when enum values match type string", () => {
57
+ const { issues, ctx } = createRefinementCtx();
58
+ (0, schema_1.refineEnumMatchesType)({ type: "string", enum: ["a", "b"] }, [], ctx);
59
+ expect(issues).toHaveLength(0);
60
+ });
61
+ it("adds no issue when enum values match type integer", () => {
62
+ const { issues, ctx } = createRefinementCtx();
63
+ (0, schema_1.refineEnumMatchesType)({ type: "integer", enum: [1, 2, 3] }, [], ctx);
64
+ expect(issues).toHaveLength(0);
65
+ });
66
+ it("adds issue when an enum value does not match type", () => {
67
+ const { issues, ctx } = createRefinementCtx();
68
+ (0, schema_1.refineEnumMatchesType)({ type: "string", enum: ["a", 2, "c"] }, [], ctx);
69
+ expect(issues).toHaveLength(1);
70
+ expect(issueMessage(issues[0])).toContain("index 1");
71
+ expect(issueMessage(issues[0])).toContain('does not match type "string"');
72
+ expect(issues[0].path).toEqual(["enum", 1]);
73
+ });
74
+ it("adds issue for each enum value that does not match type", () => {
75
+ const { issues, ctx } = createRefinementCtx();
76
+ (0, schema_1.refineEnumMatchesType)({ type: "boolean", enum: [true, "yes", false] }, [], ctx);
77
+ expect(issues.length).toBeGreaterThanOrEqual(1);
78
+ expect(issues.some((i) => issueMessage(i).includes("index 1"))).toBe(true);
79
+ });
80
+ it("recurses into items and adds issue for enum mismatch in items", () => {
81
+ const { issues, ctx } = createRefinementCtx();
82
+ (0, schema_1.refineEnumMatchesType)({
83
+ type: "array",
84
+ items: { type: "integer", enum: [1, "two", 3] },
85
+ }, [], ctx);
86
+ expect(issues).toHaveLength(1);
87
+ expect(issues[0].path).toEqual(["items", "enum", 1]);
88
+ });
89
+ it("recurses into properties and adds issue for enum mismatch in property", () => {
90
+ const { issues, ctx } = createRefinementCtx();
91
+ (0, schema_1.refineEnumMatchesType)({
92
+ type: "object",
93
+ properties: {
94
+ level: { type: "integer", enum: [1, 2, 3.5] },
95
+ },
96
+ }, [], ctx);
97
+ expect(issues).toHaveLength(1);
98
+ expect(issues[0].path).toEqual(["properties", "level", "enum", 2]);
99
+ });
100
+ it("recurses into oneOf branches", () => {
101
+ const { issues, ctx } = createRefinementCtx();
102
+ (0, schema_1.refineEnumMatchesType)({
103
+ oneOf: [
104
+ { type: "string", enum: ["a", "b"] },
105
+ { type: "integer", enum: [1, "two"] },
106
+ ],
107
+ }, [], ctx);
108
+ expect(issues).toHaveLength(1);
109
+ expect(issues[0].path).toEqual(["oneOf", 1, "enum", 1]);
110
+ });
111
+ it("does nothing when schema is null or not an object", () => {
112
+ const { issues: i1, ctx: c1 } = createRefinementCtx();
113
+ (0, schema_1.refineEnumMatchesType)(null, [], c1);
114
+ expect(i1).toHaveLength(0);
115
+ const { issues: i2, ctx: c2 } = createRefinementCtx();
116
+ (0, schema_1.refineEnumMatchesType)({ type: "string" }, [], c2);
117
+ expect(i2).toHaveLength(0);
118
+ });
119
+ });
120
+ describe("schema.ts :: refineMinimumMaximum", () => {
121
+ it("adds no issue when minimum <= maximum", () => {
122
+ const { issues, ctx } = createRefinementCtx();
123
+ (0, schema_1.refineMinimumMaximum)({ type: "integer", minimum: 0, maximum: 10 }, [], ctx);
124
+ expect(issues).toHaveLength(0);
125
+ });
126
+ it("adds issue when minimum > maximum for integer", () => {
127
+ const { issues, ctx } = createRefinementCtx();
128
+ (0, schema_1.refineMinimumMaximum)({ type: "integer", minimum: 10, maximum: 5 }, [], ctx);
129
+ expect(issues).toHaveLength(1);
130
+ expect(issueMessage(issues[0])).toContain("minimum");
131
+ expect(issueMessage(issues[0])).toContain("maximum");
132
+ expect(issues[0].path).toEqual(["minimum"]);
133
+ });
134
+ it("adds issue when minimum > maximum for double", () => {
135
+ const { issues, ctx } = createRefinementCtx();
136
+ (0, schema_1.refineMinimumMaximum)({ type: "double", minimum: 1.5, maximum: 1.0 }, [], ctx);
137
+ expect(issues).toHaveLength(1);
138
+ });
139
+ it("adds issue when const is less than minimum", () => {
140
+ const { issues, ctx } = createRefinementCtx();
141
+ (0, schema_1.refineMinimumMaximum)({ type: "integer", minimum: 10, const: 5 }, [], ctx);
142
+ expect(issues).toHaveLength(1);
143
+ expect(issueMessage(issues[0])).toContain("const");
144
+ expect(issueMessage(issues[0])).toContain("minimum");
145
+ });
146
+ it("adds issue when const is greater than maximum", () => {
147
+ const { issues, ctx } = createRefinementCtx();
148
+ (0, schema_1.refineMinimumMaximum)({ type: "integer", maximum: 10, const: 15 }, [], ctx);
149
+ expect(issues).toHaveLength(1);
150
+ });
151
+ it("adds issue when an enum value is out of range", () => {
152
+ const { issues, ctx } = createRefinementCtx();
153
+ (0, schema_1.refineMinimumMaximum)({ type: "integer", minimum: 1, maximum: 5, enum: [1, 3, 10] }, [], ctx);
154
+ expect(issues).toHaveLength(1);
155
+ expect(issueMessage(issues[0])).toContain("index 2");
156
+ expect(issueMessage(issues[0])).toContain("maximum");
157
+ });
158
+ it("does nothing for non-numeric types", () => {
159
+ const { issues, ctx } = createRefinementCtx();
160
+ (0, schema_1.refineMinimumMaximum)({ type: "string", minimum: 0, maximum: 10 }, [], ctx);
161
+ expect(issues).toHaveLength(0);
162
+ });
163
+ it("recurses into items", () => {
164
+ const { issues, ctx } = createRefinementCtx();
165
+ (0, schema_1.refineMinimumMaximum)({
166
+ type: "array",
167
+ items: { type: "integer", minimum: 20, maximum: 10 },
168
+ }, [], ctx);
169
+ expect(issues).toHaveLength(1);
170
+ expect(issues[0].path).toEqual(["items", "minimum"]);
171
+ });
172
+ });
173
+ describe("schema.ts :: refineStringLengthPattern", () => {
174
+ it("adds no issue when minLength <= maxLength", () => {
175
+ const { issues, ctx } = createRefinementCtx();
176
+ (0, schema_1.refineStringLengthPattern)({ type: "string", minLength: 1, maxLength: 10 }, [], ctx);
177
+ expect(issues).toHaveLength(0);
178
+ });
179
+ it("adds issue when minLength > maxLength", () => {
180
+ const { issues, ctx } = createRefinementCtx();
181
+ (0, schema_1.refineStringLengthPattern)({ type: "string", minLength: 10, maxLength: 5 }, [], ctx);
182
+ expect(issues).toHaveLength(1);
183
+ expect(issueMessage(issues[0])).toContain("minLength");
184
+ expect(issues[0].path).toEqual(["minLength"]);
185
+ });
186
+ it("adds issue when pattern is invalid regex", () => {
187
+ const { issues, ctx } = createRefinementCtx();
188
+ (0, schema_1.refineStringLengthPattern)({ type: "string", pattern: "[" }, [], ctx);
189
+ expect(issues).toHaveLength(1);
190
+ expect(issueMessage(issues[0])).toContain("pattern");
191
+ expect(issueMessage(issues[0])).toContain("invalid");
192
+ });
193
+ it("adds no issue when pattern is valid", () => {
194
+ const { issues, ctx } = createRefinementCtx();
195
+ (0, schema_1.refineStringLengthPattern)({ type: "string", pattern: "^[a-z]+$" }, [], ctx);
196
+ expect(issues).toHaveLength(0);
197
+ });
198
+ it("adds issue when const string is shorter than minLength", () => {
199
+ const { issues, ctx } = createRefinementCtx();
200
+ (0, schema_1.refineStringLengthPattern)({ type: "string", minLength: 5, const: "ab" }, [], ctx);
201
+ expect(issues).toHaveLength(1);
202
+ expect(issueMessage(issues[0])).toContain("const");
203
+ });
204
+ it("adds issue when const string is longer than maxLength", () => {
205
+ const { issues, ctx } = createRefinementCtx();
206
+ (0, schema_1.refineStringLengthPattern)({ type: "string", maxLength: 2, const: "hello" }, [], ctx);
207
+ expect(issues).toHaveLength(1);
208
+ });
209
+ it("adds issue when const string does not match pattern", () => {
210
+ const { issues, ctx } = createRefinementCtx();
211
+ (0, schema_1.refineStringLengthPattern)({ type: "string", pattern: "^[0-9]+$", const: "abc" }, [], ctx);
212
+ expect(issues).toHaveLength(1);
213
+ expect(issueMessage(issues[0])).toContain("pattern");
214
+ });
215
+ it("adds issue when an enum string value violates length or pattern", () => {
216
+ const { issues, ctx } = createRefinementCtx();
217
+ (0, schema_1.refineStringLengthPattern)({ type: "string", maxLength: 2, enum: ["a", "abc", "b"] }, [], ctx);
218
+ expect(issues).toHaveLength(1);
219
+ expect(issueMessage(issues[0])).toContain("index 1");
220
+ });
221
+ it("recurses into items and properties", () => {
222
+ const { issues, ctx } = createRefinementCtx();
223
+ (0, schema_1.refineStringLengthPattern)({
224
+ type: "object",
225
+ properties: {
226
+ code: { type: "string", minLength: 10, maxLength: 5 },
227
+ },
228
+ }, [], ctx);
229
+ expect(issues).toHaveLength(1);
230
+ expect(issues[0].path).toEqual(["properties", "code", "minLength"]);
231
+ });
232
+ });
233
+ describe("schema.ts :: refineArrayItems", () => {
234
+ it("adds no issue when minItems <= maxItems", () => {
235
+ const { issues, ctx } = createRefinementCtx();
236
+ (0, schema_1.refineArrayItems)({ type: "array", minItems: 0, maxItems: 10 }, [], ctx);
237
+ expect(issues).toHaveLength(0);
238
+ });
239
+ it("adds issue when minItems > maxItems", () => {
240
+ const { issues, ctx } = createRefinementCtx();
241
+ (0, schema_1.refineArrayItems)({ type: "array", minItems: 10, maxItems: 5 }, [], ctx);
242
+ expect(issues).toHaveLength(1);
243
+ expect(issueMessage(issues[0])).toContain("minItems");
244
+ expect(issues[0].path).toEqual(["minItems"]);
245
+ });
246
+ it("adds issue when const array length is less than minItems", () => {
247
+ const { issues, ctx } = createRefinementCtx();
248
+ (0, schema_1.refineArrayItems)({ type: "array", minItems: 3, const: [1, 2] }, [], ctx);
249
+ expect(issues).toHaveLength(1);
250
+ expect(issueMessage(issues[0])).toContain("minItems");
251
+ });
252
+ it("adds issue when const array length is greater than maxItems", () => {
253
+ const { issues, ctx } = createRefinementCtx();
254
+ (0, schema_1.refineArrayItems)({ type: "array", maxItems: 2, const: [1, 2, 3] }, [], ctx);
255
+ expect(issues).toHaveLength(1);
256
+ });
257
+ it("adds issue when uniqueItems is true and const array has duplicates", () => {
258
+ const { issues, ctx } = createRefinementCtx();
259
+ (0, schema_1.refineArrayItems)({ type: "array", uniqueItems: true, const: [1, 2, 1] }, [], ctx);
260
+ expect(issues).toHaveLength(1);
261
+ expect(issueMessage(issues[0])).toContain("duplicate");
262
+ });
263
+ it("adds issue when uniqueItems is true and enum array value has duplicates", () => {
264
+ const { issues, ctx } = createRefinementCtx();
265
+ (0, schema_1.refineArrayItems)({
266
+ type: "array",
267
+ uniqueItems: true,
268
+ enum: [
269
+ [1, 2],
270
+ [3, 3],
271
+ [4, 5],
272
+ ],
273
+ }, [], ctx);
274
+ expect(issues).toHaveLength(1);
275
+ expect(issues[0].path).toEqual(["enum", 1]);
276
+ });
277
+ it("recurses into items", () => {
278
+ const { issues, ctx } = createRefinementCtx();
279
+ (0, schema_1.refineArrayItems)({
280
+ type: "array",
281
+ items: { type: "array", minItems: 5, maxItems: 2 },
282
+ }, [], ctx);
283
+ expect(issues).toHaveLength(1);
284
+ expect(issues[0].path).toEqual(["items", "minItems"]);
285
+ });
286
+ });
287
+ describe("schema.ts :: getSchemaZodSchema", () => {
288
+ it("accepts a minimal valid schema with type and items for array", () => {
289
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
290
+ const result = Schema.safeParse({
291
+ type: "array",
292
+ items: { type: "string" },
293
+ });
294
+ expect(result.success).toBe(true);
295
+ });
296
+ it("accepts a schema with description only (no type)", () => {
297
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
298
+ const result = Schema.safeParse({ description: "A schema" });
299
+ expect(result.success).toBe(true);
300
+ });
301
+ it("rejects unknown schema reference when key not in schemaKeys", () => {
302
+ const Schema = (0, schema_1.getSchemaZodSchema)(["link", "color"]);
303
+ const result = Schema.safeParse({ schema: "nonexistent" });
304
+ expect(result.success).toBe(false);
305
+ const err = !result.success ? result.error : null;
306
+ expect(err?.issues.some((i) => i.message === 'Unknown schema "nonexistent"')).toBe(true);
307
+ });
308
+ it("accepts schema reference when key is in schemaKeys", () => {
309
+ const Schema = (0, schema_1.getSchemaZodSchema)(["link"]);
310
+ const result = Schema.safeParse({ schema: "link" });
311
+ expect(result.success).toBe(true);
312
+ });
313
+ it("rejects oneOf with only one branch (requires min 2)", () => {
314
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
315
+ const result = Schema.safeParse({
316
+ oneOf: [{ type: "string" }],
317
+ });
318
+ expect(result.success).toBe(false);
319
+ const err = !result.success ? result.error : null;
320
+ const msg = err?.issues.map((i) => (typeof i.message === "string" ? i.message : "")).join(" ") ?? "";
321
+ expect(msg).toMatch(/array|length|minimum|oneOf|element/i);
322
+ });
323
+ it("accepts oneOf with at least two branches", () => {
324
+ const Schema = (0, schema_1.getSchemaZodSchema)(["link"]);
325
+ const result = Schema.safeParse({
326
+ oneOf: [{ type: "string" }, { schema: "link" }],
327
+ });
328
+ expect(result.success).toBe(true);
329
+ });
330
+ it("rejects type array without items", () => {
331
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
332
+ const result = Schema.safeParse({ type: "array" });
333
+ expect(result.success).toBe(false);
334
+ const err = !result.success ? result.error : null;
335
+ expect(err?.issues.some((i) => typeof i.message === "string" &&
336
+ i.message.includes("array") &&
337
+ i.message.includes("items"))).toBe(true);
338
+ });
339
+ it("rejects extra keys (strict)", () => {
340
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
341
+ const result = Schema.safeParse({
342
+ type: "string",
343
+ unknownKey: true,
344
+ });
345
+ expect(result.success).toBe(false);
346
+ });
347
+ it("rejects enum value that does not match type (via refinement)", () => {
348
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
349
+ const result = Schema.safeParse({
350
+ type: "string",
351
+ enum: ["a", 42, "c"],
352
+ });
353
+ expect(result.success).toBe(false);
354
+ const err = !result.success ? result.error : null;
355
+ expect(err?.issues.some((i) => typeof i.message === "string" && i.message.includes("does not match type"))).toBe(true);
356
+ });
357
+ it("rejects minimum > maximum (via refinement)", () => {
358
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
359
+ const result = Schema.safeParse({
360
+ type: "integer",
361
+ minimum: 10,
362
+ maximum: 5,
363
+ });
364
+ expect(result.success).toBe(false);
365
+ });
366
+ it("rejects invalid pattern (via refinement)", () => {
367
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
368
+ const result = Schema.safeParse({
369
+ type: "string",
370
+ pattern: "[unclosed",
371
+ });
372
+ expect(result.success).toBe(false);
373
+ });
374
+ it("rejects minItems > maxItems (via refinement)", () => {
375
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
376
+ const result = Schema.safeParse({
377
+ type: "array",
378
+ items: { type: "string" },
379
+ minItems: 10,
380
+ maxItems: 2,
381
+ });
382
+ expect(result.success).toBe(false);
383
+ });
384
+ it("accepts object schema with properties and required", () => {
385
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
386
+ const result = Schema.safeParse({
387
+ type: "object",
388
+ required: ["id"],
389
+ properties: {
390
+ id: { type: "string" },
391
+ name: { type: "string" },
392
+ },
393
+ });
394
+ expect(result.success).toBe(true);
395
+ });
396
+ it("accepts array schema with items that reference another schema", () => {
397
+ const Schema = (0, schema_1.getSchemaZodSchema)(["link"]);
398
+ const result = Schema.safeParse({
399
+ type: "array",
400
+ items: { schema: "link" },
401
+ });
402
+ expect(result.success).toBe(true);
403
+ });
404
+ it("accepts const schema with valid value", () => {
405
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
406
+ const result = Schema.safeParse({
407
+ type: "string",
408
+ const: "draft",
409
+ });
410
+ expect(result.success).toBe(true);
411
+ });
412
+ it("accepts boolean type", () => {
413
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
414
+ const result = Schema.safeParse({ type: "boolean" });
415
+ expect(result.success).toBe(true);
416
+ });
417
+ it("accepts double type with minimum and maximum", () => {
418
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
419
+ const result = Schema.safeParse({
420
+ type: "double",
421
+ minimum: 0,
422
+ maximum: 1,
423
+ });
424
+ expect(result.success).toBe(true);
425
+ });
426
+ it("accepts object schema with property that references another schema (e.g. productSummary)", () => {
427
+ const Schema = (0, schema_1.getSchemaZodSchema)(["money", "image"]);
428
+ const result = Schema.safeParse({
429
+ type: "object",
430
+ description: "Product summary",
431
+ properties: {
432
+ id: { type: "string" },
433
+ name: { type: "string" },
434
+ price: { schema: "money" },
435
+ image: { schema: "image" },
436
+ },
437
+ required: ["id", "name", "price"],
438
+ });
439
+ expect(result.success).toBe(true);
440
+ });
441
+ describe("errors surface properly: intentional mistakes produce correct path and message", () => {
442
+ function expectSchemaErrorSurfaces(schemaKeys, invalidSchema, opts) {
443
+ const Schema = (0, schema_1.getSchemaZodSchema)(schemaKeys);
444
+ const result = Schema.safeParse(invalidSchema);
445
+ expect(result.success).toBe(false);
446
+ const err = !result.success ? result.error : null;
447
+ expect(err).not.toBeNull();
448
+ const messages = (err?.issues ?? [])
449
+ .map((i) => (typeof i.message === "string" ? i.message : ""))
450
+ .join(" ");
451
+ expect(messages).toContain(opts.messageContains);
452
+ const pathStrings = (err?.issues ?? []).map((i) => i.path.join("."));
453
+ const hasMatchingPath = pathStrings.some((p) => opts.pathContains.every((seg) => p.includes(seg)));
454
+ expect(hasMatchingPath).toBe(true);
455
+ }
456
+ it("unknown schema ref: error path includes schema, message says Unknown schema", () => {
457
+ expectSchemaErrorSurfaces(["link"], { schema: "nonexistent" }, { pathContains: ["schema"], messageContains: "Unknown schema" });
458
+ });
459
+ it("array without items: error path points to items, message mentions array and items", () => {
460
+ expectSchemaErrorSurfaces([], { type: "array" }, { pathContains: ["items"], messageContains: "array" });
461
+ });
462
+ it("minimum > maximum: error path points to minimum, message mentions minimum and maximum", () => {
463
+ expectSchemaErrorSurfaces([], { type: "integer", minimum: 20, maximum: 10 }, { pathContains: ["minimum"], messageContains: "minimum" });
464
+ });
465
+ it("invalid pattern: error path points to pattern, message mentions pattern", () => {
466
+ expectSchemaErrorSurfaces([], { type: "string", pattern: "[" }, { pathContains: ["pattern"], messageContains: "pattern" });
467
+ });
468
+ it("enum value does not match type: error path points to enum index, message says match type", () => {
469
+ expectSchemaErrorSurfaces([], { type: "string", enum: ["a", 42, "c"] }, { pathContains: ["enum"], messageContains: "match type" });
470
+ });
471
+ it("extra key: parse fails and message mentions unrecognized key", () => {
472
+ const Schema = (0, schema_1.getSchemaZodSchema)([]);
473
+ const result = Schema.safeParse({ type: "string", invalidKey: true });
474
+ expect(result.success).toBe(false);
475
+ const err = !result.success ? result.error : null;
476
+ const messages = (err?.issues ?? [])
477
+ .map((i) => (typeof i.message === "string" ? i.message : ""))
478
+ .join(" ");
479
+ expect(messages).toMatch(/unrecognized|invalidKey/i);
480
+ });
481
+ });
482
+ });
483
+ //# sourceMappingURL=schema.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.spec.js","sourceRoot":"","sources":["../../src/linter/schema.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};