schematox 1.2.2 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/parse.js CHANGED
@@ -143,7 +143,7 @@ function parseArray(errorPath, schema, subject) {
143
143
  const updatedErrorPath = [...errorPath, i];
144
144
  const parsed = parseRecursively(updatedErrorPath, nestedSchema, nestedValue);
145
145
  if (parsed.error) {
146
- invalidSubjects = invalidSubjects ?? [];
146
+ invalidSubjects = invalidSubjects !== null && invalidSubjects !== void 0 ? invalidSubjects : [];
147
147
  for (const invalidSubject of parsed.error) {
148
148
  invalidSubjects.push(invalidSubject);
149
149
  }
@@ -162,7 +162,7 @@ function parseArray(errorPath, schema, subject) {
162
162
  ]);
163
163
  }
164
164
  }
165
- if (invalidSubjects?.length) {
165
+ if (invalidSubjects === null || invalidSubjects === void 0 ? void 0 : invalidSubjects.length) {
166
166
  return error(invalidSubjects);
167
167
  }
168
168
  if (typeof schema.minLength === 'number' &&
@@ -201,7 +201,7 @@ function parseObject(errorPath, schema, subject) {
201
201
  const updatedErrorPath = [...errorPath, key];
202
202
  const parsed = parseRecursively(updatedErrorPath, nestedSchema, nestedValue);
203
203
  if (parsed.error) {
204
- invalidSubjects = invalidSubjects ?? [];
204
+ invalidSubjects = invalidSubjects !== null && invalidSubjects !== void 0 ? invalidSubjects : [];
205
205
  for (const invalidSubject of parsed.error) {
206
206
  invalidSubjects.push(invalidSubject);
207
207
  }
@@ -211,7 +211,7 @@ function parseObject(errorPath, schema, subject) {
211
211
  result[key] = parsed.data;
212
212
  }
213
213
  }
214
- if (invalidSubjects?.length) {
214
+ if (invalidSubjects === null || invalidSubjects === void 0 ? void 0 : invalidSubjects.length) {
215
215
  return error(invalidSubjects);
216
216
  }
217
217
  return success(result);
@@ -241,7 +241,7 @@ function parseRecord(errorPath, schema, subject) {
241
241
  const updatedErrorPath = [...errorPath, key];
242
242
  const parsed = parseRecursively(updatedErrorPath, schema.of, nestedValue);
243
243
  if (parsed.error) {
244
- invalidSubjects = invalidSubjects ?? [];
244
+ invalidSubjects = invalidSubjects !== null && invalidSubjects !== void 0 ? invalidSubjects : [];
245
245
  for (const invalidSubject of parsed.error) {
246
246
  invalidSubjects.push(invalidSubject);
247
247
  }
@@ -272,7 +272,7 @@ function parseRecord(errorPath, schema, subject) {
272
272
  },
273
273
  ]);
274
274
  }
275
- if (invalidSubjects?.length) {
275
+ if (invalidSubjects === null || invalidSubjects === void 0 ? void 0 : invalidSubjects.length) {
276
276
  return error(invalidSubjects);
277
277
  }
278
278
  return success(result);
@@ -296,7 +296,7 @@ function parseTuple(errorPath, schema, subject) {
296
296
  const updatedErrorPath = [...errorPath, i];
297
297
  const parsed = parseRecursively(updatedErrorPath, nestedSchema, nestedValue);
298
298
  if (parsed.error) {
299
- invalidSubjects = invalidSubjects ?? [];
299
+ invalidSubjects = invalidSubjects !== null && invalidSubjects !== void 0 ? invalidSubjects : [];
300
300
  for (const invalidSubject of parsed.error) {
301
301
  invalidSubjects.push(invalidSubject);
302
302
  }
@@ -304,7 +304,7 @@ function parseTuple(errorPath, schema, subject) {
304
304
  }
305
305
  result.push(parsed.data);
306
306
  }
307
- if (invalidSubjects?.length) {
307
+ if (invalidSubjects === null || invalidSubjects === void 0 ? void 0 : invalidSubjects.length) {
308
308
  return error(invalidSubjects);
309
309
  }
310
310
  return success(result);
package/dist/parse.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "schematox",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "scripts": {
5
5
  "build": "tsc",
6
6
  "prepublishOnly": "npm run build && bash release-check.sh",
@@ -10,8 +10,8 @@
10
10
  "formatter:fix": "prettier --write .",
11
11
  "formatter:check": "prettier --check . || (echo \"ERROR: use `npm run formatter:fix`\" && exit 1)",
12
12
  "ts": "tsc --noEmit",
13
- "check": "npm run formatter:check && npm run ts && npm run test & npm run test:coverage",
14
- "morph": "jiti src/tests/fold-morph.ts && npm run formatter:fix",
13
+ "check": "npm run formatter:check && npm run ts && npm run test:coverage",
14
+ "morph": "jiti tests/fold-morph.ts && npm run formatter:fix",
15
15
  "version:patch": "npm run check && npm version patch",
16
16
  "version:minor": "npm run check && npm version minor",
17
17
  "version:major": "npm run check && npm version major"
@@ -1,390 +0,0 @@
1
- The testing strategy for schematox uses a **fold-based approach** to ensure consistency across all data type tests. The system tests three equivalent ways of creating and using schemas:
2
-
3
- 1. **Raw schema objects** (e.g., `{ type: 'boolean' }`)
4
- 2. **Constructs** created via `x.makeStruct(schema)`
5
- 3. **Structs** created via fluent API (e.g., `x.boolean()`)
6
-
7
- The key principle is that all three approaches should behave identically in terms of:
8
- - Type inference
9
- - Runtime parsing
10
- - Error handling
11
- - Schema immutability
12
-
13
- **Folds** are reusable code blocks marked with comments like `foldA:`, `foldB:`, etc. These are automatically synchronized across all type tests using the `npm run morph` script with AST manipulation, ensuring consistency and reducing maintenance overhead.
14
-
15
- # By struct scaffold
16
-
17
- ```typescript
18
- import * as x from '../../'
19
- import * as fixture from '../fixtures'
20
-
21
- describe('Type inference and parse by schema/construct/struct (foldA)', () => {
22
- it.todo('required')
23
- it.todo('optional')
24
- it.todo('nullable')
25
- it.todo('min')
26
- it.todo('max')
27
- it.todo('optional + nullable + minLength + maxLength')
28
- })
29
-
30
- describe('Struct parameter keys reduction and schema immutability (foldB)', () => {
31
- it.todo('optional')
32
- it.todo('optional + nullable')
33
- it.todo('optional + nullable + brand')
34
- it.todo('optional + nullable + brand + min')
35
- it.todo('optional + nullable + brand + min')
36
- it.todo('optional + nullable + brand + min + max')
37
- it.todo('optional + nullable + brand + min + max + description')
38
- it.todo('description + max + min + brand + nullable + optional')
39
- })
40
-
41
- describe('ERROR_CODE.invalidType (foldC, foldE)', () => {
42
- it.todo('iterate over fixture.DATA_TYPE')
43
- it.todo('InvalidSubject error of nested schema should have correct path/schema/subject')
44
- })
45
-
46
- describe('ERROR_CODE.invalidRange (foldD)', () => {
47
- it.todo('min')
48
- it.todo('max')
49
- it.todo('min + max')
50
- })
51
-
52
- describe('Compound schema specifics (foldA)', () => {
53
- it.todo('nested primitive schema: optional + nullable + brand')
54
- it.todo('nested compound schema: optional + nullable')
55
- it.todo('nested by itself (schema depth: 4)')
56
- })
57
- ```
58
-
59
- # Fold A: Type Inference and Parse Consistency
60
-
61
- Purpose**: Validates that all three approaches (schema, construct, struct) produce identical TypeScript types and runtime behavior for successful parsing scenarios.
62
-
63
- ```typescript
64
- it('required', () => {
65
- const schema = { type: 'boolean' } as const satisfies x.Schema
66
- const struct = x.boolean()
67
-
68
- type ExpectedSubj = boolean
69
-
70
- const subjects: Array<ExpectedSubj> = [true, false]
71
-
72
- foldA: {
73
- const construct = x.makeStruct(schema)
74
-
75
- /* ensure that schema/construct/struct/~standard subject types are identical */
76
-
77
- type ConstructSchemaSubj = x.Infer<typeof construct.__schema>
78
-
79
- x.tCh<ConstructSchemaSubj, ExpectedSubj>()
80
- x.tCh<ExpectedSubj, ConstructSchemaSubj>()
81
-
82
- type SchemaSubj = x.Infer<typeof schema>
83
-
84
- x.tCh<SchemaSubj, ExpectedSubj>()
85
- x.tCh<ExpectedSubj, SchemaSubj>()
86
-
87
- type StructSubj = x.Infer<typeof struct.__schema>
88
-
89
- x.tCh<StructSubj, ExpectedSubj>()
90
- x.tCh<ExpectedSubj, StructSubj>()
91
-
92
- type StandardSubj = NonNullable<
93
- (typeof struct)['~standard']['types']
94
- >['output']
95
-
96
- x.tCh<StandardSubj, ExpectedSubj>()
97
- x.tCh<ExpectedSubj, StandardSubj>()
98
-
99
- /* parsed either type check */
100
-
101
- type ExpectedParsed = x.ParseResult<ExpectedSubj>
102
-
103
- const parsed = x.parse(schema, undefined)
104
-
105
- type SchemaParsed = typeof parsed
106
-
107
- x.tCh<SchemaParsed, ExpectedParsed>()
108
- x.tCh<ExpectedParsed, SchemaParsed>()
109
-
110
- type ConstructParsed = ReturnType<typeof construct.parse>
111
-
112
- x.tCh<ConstructParsed, ExpectedParsed>()
113
- x.tCh<ExpectedParsed, ConstructParsed>()
114
-
115
- type StructParsed = ReturnType<typeof struct.parse>
116
-
117
- x.tCh<StructParsed, ExpectedParsed>()
118
- x.tCh<ExpectedParsed, StructParsed>()
119
-
120
- type StandardParsed = Extract<
121
- ReturnType<(typeof struct)['~standard']['validate']>,
122
- { value: unknown }
123
- >['value']
124
-
125
- x.tCh<StandardParsed, ExpectedSubj>()
126
- x.tCh<ExpectedSubj, StandardParsed>()
127
-
128
- /* runtime schema check */
129
-
130
- expect(struct.__schema).toStrictEqual(schema)
131
- expect(construct.__schema).toStrictEqual(schema)
132
- expect(construct.__schema === schema).toBe(false)
133
-
134
- /* parse result check */
135
-
136
- for (const subj of subjects) {
137
- const schemaParsed = x.parse(schema, subj)
138
-
139
- expect(schemaParsed.error).toBe(undefined)
140
- expect(schemaParsed.data).toStrictEqual(subj)
141
-
142
- const constructParsed = construct.parse(subj)
143
-
144
- expect(constructParsed.error).toBe(undefined)
145
- expect(constructParsed.data).toStrictEqual(subj)
146
-
147
- const structParsed = struct.parse(subj)
148
-
149
- expect(structParsed.error).toBe(undefined)
150
- expect(structParsed.data).toStrictEqual(subj)
151
-
152
- const standardParsed = struct['~standard'].validate(subj)
153
-
154
- if (standardParsed instanceof Promise) {
155
- throw Error('Not expected')
156
- }
157
-
158
- if (standardParsed.issues !== undefined) {
159
- throw Error('not expected')
160
- }
161
-
162
- expect(standardParsed.value).toStrictEqual(subj)
163
- }
164
- }
165
- })
166
- ```
167
-
168
- # Fold B: Parameter Keys Reduction and Schema Immutability
169
-
170
- Purpose**: Tests that fluent API methods correctly reduce available keys (removing applied methods) and ensure schema objects are immutable when parameters are applied.
171
-
172
- ```typescript
173
- it('optional', () => {
174
- const schema = {
175
- type: 'boolean',
176
- optional: true,
177
- } as const satisfies x.Schema
178
-
179
- const prevStruct = x.boolean()
180
- const struct = prevStruct.optional()
181
-
182
- type ExpectedKeys =
183
- | 'brand'
184
- | 'nullable'
185
- | 'description'
186
- | '__schema'
187
- | 'parse'
188
-
189
- foldB: {
190
- const construct = x.makeStruct(schema)
191
-
192
- /* ensure that struct keys are reduced after application */
193
-
194
- type StructKeys = keyof typeof struct
195
-
196
- x.tCh<StructKeys, ExpectedKeys>()
197
- x.tCh<ExpectedKeys, StructKeys>()
198
-
199
- type ConstructKeys = keyof typeof construct
200
-
201
- x.tCh<ConstructKeys, ExpectedKeys>()
202
- x.tCh<ExpectedKeys, ConstructKeys>()
203
-
204
- /* ensure that construct/struct schema types are identical */
205
-
206
- type ExpectedSchema = typeof schema
207
- type StructSchema = typeof struct.__schema
208
-
209
- x.tCh<StructSchema, ExpectedSchema>()
210
- x.tCh<ExpectedSchema, StructSchema>()
211
-
212
- type ConstructSchema = typeof struct.__schema
213
-
214
- x.tCh<ConstructSchema, ExpectedSchema>()
215
- x.tCh<ExpectedSchema, ConstructSchema>()
216
-
217
- /* runtime schema check */
218
-
219
- expect(struct.__schema).toStrictEqual(schema)
220
- expect(construct.__schema).toStrictEqual(schema)
221
- expect(construct.__schema === schema).toBe(false)
222
-
223
- /* runtime schema parameter application immutability check */
224
-
225
- expect(prevStruct.__schema === struct.__schema).toBe(false)
226
- }
227
- })
228
- ```
229
-
230
- # Fold C: Invalid Type Error Handling
231
-
232
- Purpose**: Systematically tests type validation errors by feeding incompatible data types and ensuring consistent error responses across all three approaches.
233
-
234
- ```typescript
235
- it('iterate over fixture.DATA_TYPE', () => {
236
- const schema = { type: 'boolean' } satisfies x.Schema
237
- const struct = x.boolean()
238
- const source = fixture.DATA_TYPE
239
-
240
- foldC: {
241
- const construct = x.makeStruct(schema)
242
-
243
- for (const [kind, types] of source) {
244
- if (kind === schema.type) {
245
- continue
246
- }
247
-
248
- for (const subject of types) {
249
- const expectedError = [
250
- {
251
- code: x.ERROR_CODE.invalidType,
252
- schema: schema,
253
- subject: subject,
254
- path: [],
255
- },
256
- ]
257
-
258
- const parsedSchema = x.parse(schema, subject)
259
- const parsedConstruct = construct.parse(subject)
260
- const parsedStruct = struct.parse(subject)
261
-
262
- expect(parsedSchema.error).toStrictEqual(expectedError)
263
- expect(parsedConstruct.error).toStrictEqual(expectedError)
264
- expect(parsedStruct.error).toStrictEqual(expectedError)
265
-
266
- const parsedStandard = struct['~standard'].validate(subject)
267
-
268
- if (parsedStandard instanceof Promise) {
269
- throw Error('Not expected')
270
- }
271
-
272
- expect(parsedStandard.issues).toStrictEqual([
273
- { message: x.ERROR_CODE.invalidType, path: [] },
274
- ])
275
- }
276
- }
277
- }
278
- })
279
- ```
280
-
281
- Fold D: Range Validation Error Handling
282
-
283
- Purpose**: Tests range/constraint validation errors (like `min`, `max`, `minLength`, `maxLength`) ensuring consistent error handling.
284
-
285
- ```typescript
286
- it('min', () => {
287
- const schema = { type: 'number', min: 0 } satisfies x.Schema
288
- const struct = x.number().min(schema.min)
289
- const subjects = [-1, -2, -3]
290
-
291
- foldD: {
292
- const construct = x.makeStruct(schema)
293
-
294
- for (const subject of subjects) {
295
- const expectedError = [
296
- {
297
- code: x.ERROR_CODE.invalidRange,
298
- schema: schema,
299
- subject: subject,
300
- path: [],
301
- },
302
- ]
303
-
304
- const parsedSchema = x.parse(schema, subject)
305
- const parsedConstruct = construct.parse(subject)
306
- const parsedStruct = struct.parse(subject)
307
-
308
- expect(parsedSchema.error).toStrictEqual(expectedError)
309
- expect(parsedConstruct.error).toStrictEqual(expectedError)
310
- expect(parsedStruct.error).toStrictEqual(expectedError)
311
-
312
- const parsedStandard = struct['~standard'].validate(subject)
313
-
314
- if (parsedStandard instanceof Promise) {
315
- throw Error('Not expected')
316
- }
317
-
318
- expect(parsedStandard.issues).toStrictEqual([
319
- { message: x.ERROR_CODE.invalidRange, path: [] },
320
- ])
321
- }
322
- }
323
- })
324
- ```
325
-
326
- # Fold E: Nested Schema Error Path Tracking
327
-
328
- Purpose**: Tests that error reporting correctly tracks the path to invalid data in nested structures, ensuring the `path`, `schema`, and `subject` properties in errors point to the exact location and nature of validation failures.
329
-
330
- ```typescript
331
- it('InvalidSubject error of nested schema should have correct path/schema/subject', () => {
332
- const schema = {
333
- type: 'array',
334
- of: { type: 'array', of: { type: 'boolean' } },
335
- } as const satisfies x.Schema
336
-
337
- const struct = x.array(x.array(x.boolean()))
338
- const samples: Array<
339
- [
340
- subj: unknown[],
341
- invalidSubj: unknown,
342
- invalidSubjSchema: x.Schema,
343
- errorPath: x.ErrorPath,
344
- ]
345
- > = [
346
- [[[null, false, true]], null, schema.of.of, [0, 0]],
347
- [[[], [null, false, true]], null, schema.of.of, [1, 0]],
348
- [[[], [], [null, false, true]], null, schema.of.of, [2, 0]],
349
- [[[true, 'str', true]], 'str', schema.of.of, [0, 1]],
350
- [[[], [true, 'str', true]], 'str', schema.of.of, [1, 1]],
351
- [[[], [], [true, 'str', true]], 'str', schema.of.of, [2, 1]],
352
- [[[true, false, 69]], 69, schema.of.of, [0, 2]],
353
- [[[], [true, false, 69]], 69, schema.of.of, [1, 2]],
354
- [[[], [], [true, false, 69]], 69, schema.of.of, [2, 2]],
355
- ]
356
-
357
- foldE: {
358
- const construct = x.makeStruct(schema)
359
-
360
- for (const [subject, invalidSubj, invalidSubjSchema, path] of samples) {
361
- const expectedError = [
362
- {
363
- path,
364
- code: x.ERROR_CODE.invalidType,
365
- schema: invalidSubjSchema,
366
- subject: invalidSubj,
367
- },
368
- ]
369
-
370
- const parsedSchema = x.parse(schema, subject)
371
- const parsedConstruct = construct.parse(subject)
372
- const parsedStruct = struct.parse(subject)
373
-
374
- expect(parsedSchema.error).toStrictEqual(expectedError)
375
- expect(parsedConstruct.error).toStrictEqual(expectedError)
376
- expect(parsedStruct.error).toStrictEqual(expectedError)
377
-
378
- const parsedStandard = struct['~standard'].validate(subject)
379
-
380
- if (parsedStandard instanceof Promise) {
381
- throw Error('Not expected')
382
- }
383
-
384
- expect(parsedStandard.issues).toStrictEqual([
385
- { path, message: x.ERROR_CODE.invalidType },
386
- ])
387
- }
388
- }
389
- })
390
- ```