schematox 1.2.1 → 1.2.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.
Files changed (63) hide show
  1. package/dist/constants.d.ts +20 -0
  2. package/dist/constants.d.ts.map +1 -0
  3. package/dist/constants.js +22 -0
  4. package/dist/constants.js.map +1 -0
  5. package/dist/index.d.ts +10 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +9 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/parse.d.ts +5 -0
  10. package/dist/parse.d.ts.map +1 -0
  11. package/dist/parse.js +328 -0
  12. package/dist/parse.js.map +1 -0
  13. package/dist/struct.d.ts +48 -0
  14. package/dist/struct.d.ts.map +1 -0
  15. package/dist/struct.js +111 -0
  16. package/dist/struct.js.map +1 -0
  17. package/dist/types/extensions.d.ts +13 -0
  18. package/dist/types/extensions.d.ts.map +1 -0
  19. package/dist/types/extensions.js +2 -0
  20. package/dist/types/extensions.js.map +1 -0
  21. package/dist/types/infer.d.ts +35 -0
  22. package/dist/types/infer.d.ts.map +1 -0
  23. package/dist/types/infer.js +2 -0
  24. package/dist/types/infer.js.map +1 -0
  25. package/dist/types/schema.d.ts +93 -0
  26. package/dist/types/schema.d.ts.map +1 -0
  27. package/dist/types/schema.js +2 -0
  28. package/dist/types/schema.js.map +1 -0
  29. package/dist/types/standard-schema.d.ts +35 -0
  30. package/dist/types/standard-schema.d.ts.map +1 -0
  31. package/dist/types/standard-schema.js +2 -0
  32. package/dist/types/standard-schema.js.map +1 -0
  33. package/dist/types/struct.d.ts +52 -0
  34. package/dist/types/struct.d.ts.map +1 -0
  35. package/dist/types/struct.js +2 -0
  36. package/dist/types/struct.js.map +1 -0
  37. package/dist/types/utils.d.ts +41 -0
  38. package/dist/types/utils.d.ts.map +1 -0
  39. package/dist/types/utils.js +2 -0
  40. package/dist/types/utils.js.map +1 -0
  41. package/dist/utils.d.ts +9 -0
  42. package/dist/utils.d.ts.map +1 -0
  43. package/dist/utils.js +14 -0
  44. package/dist/utils.js.map +1 -0
  45. package/package.json +15 -5
  46. package/src/tests/README.md +390 -0
  47. package/src/tests/by-struct/array.test.ts +1684 -0
  48. package/src/tests/by-struct/boolean.test.ts +741 -0
  49. package/src/tests/by-struct/literal.test.ts +755 -0
  50. package/src/tests/by-struct/number.test.ts +1234 -0
  51. package/src/tests/by-struct/object.test.ts +1484 -0
  52. package/src/tests/by-struct/record.test.ts +1802 -0
  53. package/src/tests/by-struct/string.test.ts +1252 -0
  54. package/src/tests/by-struct/tuple.test.ts +1341 -0
  55. package/src/tests/by-struct/union.test.ts +1284 -0
  56. package/src/tests/fixtures.ts +53 -0
  57. package/src/tests/fold-constants.ts +247 -0
  58. package/src/tests/fold-morph.ts +49 -0
  59. package/src/tests/type.ts +1 -0
  60. package/src/tests/types/extensions.test.ts +117 -0
  61. package/src/tests/types/infer.test.ts +1413 -0
  62. package/src/tests/utils.test.ts +191 -0
  63. package/CHANGELOG.md +0 -52
@@ -0,0 +1,20 @@
1
+ export declare const ERROR_CODE: {
2
+ readonly invalidType: "INVALID_TYPE";
3
+ readonly invalidRange: "INVALID_RANGE";
4
+ };
5
+ export declare const PARAMS_BY_SCHEMA_TYPE: {
6
+ readonly boolean: Set<"optional" | "nullable" | "brand" | "description">;
7
+ readonly literal: Set<"optional" | "nullable" | "brand" | "description">;
8
+ readonly number: Set<"optional" | "nullable" | "brand" | "description" | "min" | "max">;
9
+ readonly string: Set<"optional" | "nullable" | "brand" | "description" | "minLength" | "maxLength">;
10
+ readonly array: Set<"optional" | "nullable" | "description" | "minLength" | "maxLength">;
11
+ readonly object: Set<"optional" | "nullable" | "description">;
12
+ readonly record: Set<"optional" | "nullable" | "description" | "minLength" | "maxLength">;
13
+ readonly tuple: Set<"optional" | "nullable" | "description">;
14
+ readonly union: Set<"optional" | "nullable" | "description">;
15
+ };
16
+ export declare const STANDARD_SCHEMA: {
17
+ readonly version: 1;
18
+ readonly vendor: "schematox";
19
+ };
20
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;CAGb,CAAA;AAGV,eAAO,MAAM,qBAAqB;;;;;;;;;;CAWxB,CAAA;AAEV,eAAO,MAAM,eAAe;;;CAGlB,CAAA"}
@@ -0,0 +1,22 @@
1
+ export const ERROR_CODE = {
2
+ invalidType: 'INVALID_TYPE',
3
+ invalidRange: 'INVALID_RANGE',
4
+ };
5
+ // prettier-ignore
6
+ export const PARAMS_BY_SCHEMA_TYPE = {
7
+ boolean: new Set(['optional', 'nullable', 'brand', 'description']),
8
+ literal: new Set(['optional', 'nullable', 'brand', 'description']),
9
+ number: new Set(['optional', 'nullable', 'brand', 'description', 'min', 'max']),
10
+ string: new Set(['optional', 'nullable', 'brand', 'description', 'minLength', 'maxLength']),
11
+ //
12
+ array: new Set(['optional', 'nullable', 'description', 'minLength', 'maxLength']),
13
+ object: new Set(['optional', 'nullable', 'description']),
14
+ record: new Set(['optional', 'nullable', 'description', 'minLength', 'maxLength']),
15
+ tuple: new Set(['optional', 'nullable', 'description']),
16
+ union: new Set(['optional', 'nullable', 'description']),
17
+ };
18
+ export const STANDARD_SCHEMA = {
19
+ version: 1,
20
+ vendor: 'schematox',
21
+ };
22
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,eAAe;CACrB,CAAA;AAEV,kBAAkB;AAClB,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,OAAO,EAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,CAAU,CAAC;IAC5E,OAAO,EAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,CAAU,CAAC;IAC5E,MAAM,EAAI,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;IAC1F,MAAM,EAAI,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,CAAU,CAAC;IACtG,EAAE;IACF,KAAK,EAAK,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,CAAU,CAAC;IAC7F,MAAM,EAAI,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAU,CAAC;IACnE,MAAM,EAAI,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,CAAU,CAAC;IAC7F,KAAK,EAAK,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAU,CAAC;IACnE,KAAK,EAAK,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAU,CAAC;CAC3D,CAAA;AAEV,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,WAAW;CACX,CAAA"}
@@ -0,0 +1,10 @@
1
+ export { ERROR_CODE, PARAMS_BY_SCHEMA_TYPE } from './constants';
2
+ export { parse } from './parse';
3
+ export { makeStruct, boolean, literal, number, string, array, object, record, tuple, union, } from './struct';
4
+ export { error, success, tCh } from './utils';
5
+ export type { ErrorCode, ErrorPath, InvalidSubject, ParseError, ParseResult, ParseSuccess, PrettifyObject, } from './types/utils';
6
+ export type { Infer, InferSchema, InferPrimitive, InferArray, InferObject, InferRecord, InferUnion, } from './types/infer';
7
+ export type { Schema, PrimitiveSchema, ArraySchema, ObjectSchema, RecordSchema, UnionSchema, BrandSchema, BooleanSchema, LiteralSchema, NumberSchema, StringSchema, } from './types/schema';
8
+ export type { Struct, StructShape, StructParams } from './types/struct';
9
+ export type { ExtendParams, ExtendBrand, ExtendOptional, ExtendNullable, } from './types/extensions';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,OAAO,EACL,UAAU,EAEV,OAAO,EACP,OAAO,EACP,MAAM,EACN,MAAM,EAEN,KAAK,EACL,MAAM,EACN,MAAM,EACN,KAAK,EACL,KAAK,GACN,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAE7C,YAAY,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,eAAe,CAAA;AAEtB,YAAY,EACV,KAAK,EAEL,WAAW,EACX,cAAc,EAEd,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,GACX,MAAM,eAAe,CAAA;AAEtB,YAAY,EACV,MAAM,EACN,eAAe,EAEf,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EAEX,WAAW,EAEX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAA;AAEvB,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAEvE,YAAY,EACV,YAAY,EAEZ,WAAW,EACX,cAAc,EACd,cAAc,GACf,MAAM,oBAAoB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export { ERROR_CODE, PARAMS_BY_SCHEMA_TYPE } from './constants';
2
+ export { parse } from './parse';
3
+ export { makeStruct,
4
+ //
5
+ boolean, literal, number, string,
6
+ //
7
+ array, object, record, tuple, union, } from './struct';
8
+ export { error, success, tCh } from './utils';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,OAAO,EACL,UAAU;AACV,EAAE;AACF,OAAO,EACP,OAAO,EACP,MAAM,EACN,MAAM;AACN,EAAE;AACF,KAAK,EACL,MAAM,EACN,MAAM,EACN,KAAK,EACL,KAAK,GACN,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { InferSchema } from './types/infer';
2
+ import type { ParseResult } from './types/utils';
3
+ import type { Schema } from './types/schema';
4
+ export declare function parse<T extends Schema>(schema: T, subject: unknown): ParseResult<InferSchema<T>>;
5
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAA6B,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3E,OAAO,KAAK,EACV,MAAM,EAYP,MAAM,gBAAgB,CAAA;AAevB,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,OAAO,GACf,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA"}
package/dist/parse.js ADDED
@@ -0,0 +1,328 @@
1
+ import { ERROR_CODE } from './constants';
2
+ import { error, success } from './utils';
3
+ const PARSE_FN_BY_SCHEMA_KIND = {
4
+ boolean: parseBoolean,
5
+ literal: parseLiteral,
6
+ number: parseNumber,
7
+ string: parseString,
8
+ //
9
+ array: parseArray,
10
+ object: parseObject,
11
+ record: parseRecord,
12
+ tuple: parseTuple,
13
+ union: parseUnion,
14
+ };
15
+ export function parse(schema, subject) {
16
+ return parseRecursively([], schema, subject);
17
+ }
18
+ function parseRecursively(errorPath, schema, subject) {
19
+ if (schema.optional === true && subject === undefined) {
20
+ return success(undefined);
21
+ }
22
+ if (schema.nullable === true && subject === null) {
23
+ return success(null);
24
+ }
25
+ return PARSE_FN_BY_SCHEMA_KIND[schema.type](errorPath, schema, subject);
26
+ }
27
+ function parseBoolean(errorPath, schema, subject) {
28
+ if (typeof subject !== 'boolean') {
29
+ return error([
30
+ {
31
+ code: ERROR_CODE.invalidType,
32
+ path: errorPath,
33
+ subject,
34
+ schema,
35
+ },
36
+ ]);
37
+ }
38
+ return success(subject);
39
+ }
40
+ function parseLiteral(errorPath, schema, subject) {
41
+ if (subject !== schema.of) {
42
+ return error([
43
+ {
44
+ code: ERROR_CODE.invalidType,
45
+ path: errorPath,
46
+ subject,
47
+ schema,
48
+ },
49
+ ]);
50
+ }
51
+ return success(subject);
52
+ }
53
+ function parseNumber(errorPath, schema, subject) {
54
+ if (typeof subject !== 'number' || Number.isFinite(subject) === false) {
55
+ return error([
56
+ {
57
+ code: ERROR_CODE.invalidType,
58
+ path: errorPath,
59
+ subject,
60
+ schema,
61
+ },
62
+ ]);
63
+ }
64
+ if (typeof schema.min === 'number') {
65
+ if (subject < schema.min) {
66
+ return error([
67
+ {
68
+ code: ERROR_CODE.invalidRange,
69
+ path: errorPath,
70
+ subject,
71
+ schema,
72
+ },
73
+ ]);
74
+ }
75
+ }
76
+ if (typeof schema.max === 'number') {
77
+ if (subject > schema.max) {
78
+ return error([
79
+ {
80
+ code: ERROR_CODE.invalidRange,
81
+ path: errorPath,
82
+ subject,
83
+ schema,
84
+ },
85
+ ]);
86
+ }
87
+ }
88
+ return success(subject);
89
+ }
90
+ function parseString(errorPath, schema, subject) {
91
+ if (typeof subject !== 'string') {
92
+ return error([
93
+ {
94
+ code: ERROR_CODE.invalidType,
95
+ path: errorPath,
96
+ subject,
97
+ schema,
98
+ },
99
+ ]);
100
+ }
101
+ if (typeof schema.minLength === 'number') {
102
+ if (subject.length < schema.minLength) {
103
+ return error([
104
+ {
105
+ code: ERROR_CODE.invalidRange,
106
+ path: errorPath,
107
+ subject,
108
+ schema,
109
+ },
110
+ ]);
111
+ }
112
+ }
113
+ if (typeof schema.maxLength === 'number') {
114
+ if (subject.length > schema.maxLength) {
115
+ return error([
116
+ {
117
+ code: ERROR_CODE.invalidRange,
118
+ path: errorPath,
119
+ subject,
120
+ schema,
121
+ },
122
+ ]);
123
+ }
124
+ }
125
+ return success(subject);
126
+ }
127
+ function parseArray(errorPath, schema, subject) {
128
+ if (Array.isArray(subject) === false) {
129
+ return error([
130
+ {
131
+ code: ERROR_CODE.invalidType,
132
+ path: errorPath,
133
+ subject,
134
+ schema,
135
+ },
136
+ ]);
137
+ }
138
+ const result = [];
139
+ let invalidSubjects;
140
+ for (let i = 0; i < subject.length; i++) {
141
+ const nestedSchema = schema.of;
142
+ const nestedValue = subject[i];
143
+ const updatedErrorPath = [...errorPath, i];
144
+ const parsed = parseRecursively(updatedErrorPath, nestedSchema, nestedValue);
145
+ if (parsed.error) {
146
+ invalidSubjects = invalidSubjects ?? [];
147
+ for (const invalidSubject of parsed.error) {
148
+ invalidSubjects.push(invalidSubject);
149
+ }
150
+ continue;
151
+ }
152
+ result.push(parsed.data);
153
+ if (typeof schema.maxLength === 'number' &&
154
+ result.length > schema.maxLength) {
155
+ return error([
156
+ {
157
+ code: ERROR_CODE.invalidRange,
158
+ path: errorPath,
159
+ subject,
160
+ schema,
161
+ },
162
+ ]);
163
+ }
164
+ }
165
+ if (invalidSubjects?.length) {
166
+ return error(invalidSubjects);
167
+ }
168
+ if (typeof schema.minLength === 'number' &&
169
+ result.length < schema.minLength) {
170
+ return error([
171
+ {
172
+ code: ERROR_CODE.invalidRange,
173
+ path: errorPath,
174
+ subject,
175
+ schema,
176
+ },
177
+ ]);
178
+ }
179
+ return success(result);
180
+ }
181
+ function parseObject(errorPath, schema, subject) {
182
+ if (typeof subject !== 'object' ||
183
+ subject === null ||
184
+ subject.constructor !== Object) {
185
+ return error([
186
+ {
187
+ code: ERROR_CODE.invalidType,
188
+ path: errorPath,
189
+ schema,
190
+ subject,
191
+ },
192
+ ]);
193
+ }
194
+ const result = {};
195
+ let invalidSubjects;
196
+ // Extra keys in the subject are ignored
197
+ for (const key in schema.of) {
198
+ const narrowedSubj = subject;
199
+ const nestedSchema = schema.of[key];
200
+ const nestedValue = narrowedSubj[key];
201
+ const updatedErrorPath = [...errorPath, key];
202
+ const parsed = parseRecursively(updatedErrorPath, nestedSchema, nestedValue);
203
+ if (parsed.error) {
204
+ invalidSubjects = invalidSubjects ?? [];
205
+ for (const invalidSubject of parsed.error) {
206
+ invalidSubjects.push(invalidSubject);
207
+ }
208
+ continue;
209
+ }
210
+ if (Object.prototype.hasOwnProperty.call(narrowedSubj, key)) {
211
+ result[key] = parsed.data;
212
+ }
213
+ }
214
+ if (invalidSubjects?.length) {
215
+ return error(invalidSubjects);
216
+ }
217
+ return success(result);
218
+ }
219
+ function parseRecord(errorPath, schema, subject) {
220
+ if (typeof subject !== 'object' ||
221
+ subject === null ||
222
+ subject.constructor !== Object) {
223
+ return error([
224
+ {
225
+ code: ERROR_CODE.invalidType,
226
+ path: errorPath,
227
+ schema,
228
+ subject,
229
+ },
230
+ ]);
231
+ }
232
+ const result = {};
233
+ let invalidSubjects;
234
+ let validEntryCounter = 0;
235
+ for (const key in subject) {
236
+ const nestedValue = subject[key];
237
+ if (nestedValue === undefined) {
238
+ // Undefined entry key is not included in parsed object
239
+ continue;
240
+ }
241
+ const updatedErrorPath = [...errorPath, key];
242
+ const parsed = parseRecursively(updatedErrorPath, schema.of, nestedValue);
243
+ if (parsed.error) {
244
+ invalidSubjects = invalidSubjects ?? [];
245
+ for (const invalidSubject of parsed.error) {
246
+ invalidSubjects.push(invalidSubject);
247
+ }
248
+ continue;
249
+ }
250
+ validEntryCounter++;
251
+ if (typeof schema.maxLength === 'number' &&
252
+ validEntryCounter > schema.maxLength) {
253
+ return error([
254
+ {
255
+ code: ERROR_CODE.invalidRange,
256
+ path: errorPath,
257
+ subject,
258
+ schema,
259
+ },
260
+ ]);
261
+ }
262
+ result[key] = parsed.data;
263
+ }
264
+ if (typeof schema.minLength === 'number' &&
265
+ validEntryCounter < schema.minLength) {
266
+ return error([
267
+ {
268
+ code: ERROR_CODE.invalidRange,
269
+ path: errorPath,
270
+ subject,
271
+ schema,
272
+ },
273
+ ]);
274
+ }
275
+ if (invalidSubjects?.length) {
276
+ return error(invalidSubjects);
277
+ }
278
+ return success(result);
279
+ }
280
+ function parseTuple(errorPath, schema, subject) {
281
+ if (Array.isArray(subject) === false) {
282
+ return error([
283
+ {
284
+ code: ERROR_CODE.invalidType,
285
+ path: errorPath,
286
+ subject,
287
+ schema,
288
+ },
289
+ ]);
290
+ }
291
+ const result = [];
292
+ let invalidSubjects;
293
+ for (let i = 0; i < schema.of.length; i++) {
294
+ const nestedSchema = schema.of[i];
295
+ const nestedValue = subject[i];
296
+ const updatedErrorPath = [...errorPath, i];
297
+ const parsed = parseRecursively(updatedErrorPath, nestedSchema, nestedValue);
298
+ if (parsed.error) {
299
+ invalidSubjects = invalidSubjects ?? [];
300
+ for (const invalidSubject of parsed.error) {
301
+ invalidSubjects.push(invalidSubject);
302
+ }
303
+ continue;
304
+ }
305
+ result.push(parsed.data);
306
+ }
307
+ if (invalidSubjects?.length) {
308
+ return error(invalidSubjects);
309
+ }
310
+ return success(result);
311
+ }
312
+ function parseUnion(errorPath, schema, subject) {
313
+ for (const subSchema of schema.of) {
314
+ const parsed = parseRecursively(errorPath, subSchema, subject);
315
+ if (parsed.error === undefined) {
316
+ return parsed;
317
+ }
318
+ }
319
+ return error([
320
+ {
321
+ code: ERROR_CODE.invalidType,
322
+ path: errorPath,
323
+ subject,
324
+ schema,
325
+ },
326
+ ]);
327
+ }
328
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { Schema, StringSchema } from './types/schema';
2
+ import type { Struct, StructShape } from './types/struct';
3
+ export declare function makeStruct<T extends Schema>(schema: T): Struct<T>;
4
+ /**
5
+ * Primitives
6
+ **/
7
+ export declare function boolean(): Struct<{
8
+ type: "boolean";
9
+ }>;
10
+ export declare function literal<T extends string | number | boolean>(of: T): Struct<{
11
+ type: "literal";
12
+ of: T;
13
+ }>;
14
+ export declare function number(): Struct<{
15
+ type: "number";
16
+ }>;
17
+ export declare function string(): Struct<{
18
+ type: "string";
19
+ }>;
20
+ /**
21
+ * Compounds
22
+ **/
23
+ export declare function array<T extends StructShape<Schema>>(of: T): Struct<{
24
+ type: "array";
25
+ of: T["__schema"];
26
+ }>;
27
+ export declare function object<T extends Record<string, StructShape<Schema>>>(of: T): Struct<{
28
+ type: "object";
29
+ of: { [K in keyof T]: T[K]["__schema"]; };
30
+ }>;
31
+ export declare function record<T extends StructShape<Schema>, U extends StructShape<StringSchema> | undefined>(of: T, key?: U): Struct<{
32
+ type: "record";
33
+ of: T["__schema"];
34
+ key: NonNullable<U>["__schema"];
35
+ } | {
36
+ type: "record";
37
+ of: T["__schema"];
38
+ key?: undefined;
39
+ }>;
40
+ export declare function tuple<T extends [StructShape<Schema>, ...Array<StructShape<Schema>>]>(of: T): Struct<{
41
+ readonly type: "tuple";
42
+ readonly of: { [K in keyof T]: T[K]["__schema"]; };
43
+ }>;
44
+ export declare function union<T extends [StructShape<Schema>, ...Array<StructShape<Schema>>]>(of: T): Struct<{
45
+ type: 'union';
46
+ of: T extends [...infer U] ? { [K in keyof U]: U[K] extends StructShape<infer V> ? V : never; } : never;
47
+ }>;
48
+ //# sourceMappingURL=struct.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACvE,OAAO,KAAK,EAAE,MAAM,EAAgB,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEvE,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAkElE;;IAEI;AAEJ,wBAAgB,OAAO;;GAEtB;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC;;;GAEjE;AAED,wBAAgB,MAAM;;GAErB;AAED,wBAAgB,MAAM;;GAErB;AAED;;IAEI;AAEJ,wBAAgB,KAAK,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;;;GAKzD;AAED,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;;;GAW1E;AAED,wBAAgB,MAAM,CACpB,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAC7B,CAAC,SAAS,WAAW,CAAC,YAAY,CAAC,GAAG,SAAS,EAC/C,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;;;;;;;;GAUf;AAED,wBAAgB,KAAK,CACnB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAC9D,EAAE,EAAE,CAAC;;;GAON;AAED,wBAAgB,KAAK,CACnB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAC9D,EAAE,EAAE,CAAC;UAEG,OAAO;;GAahB"}
package/dist/struct.js ADDED
@@ -0,0 +1,111 @@
1
+ import { PARAMS_BY_SCHEMA_TYPE, STANDARD_SCHEMA } from './constants';
2
+ import { parse } from './parse';
3
+ export function makeStruct(schema) {
4
+ const params = PARAMS_BY_SCHEMA_TYPE[schema.type];
5
+ const result = {
6
+ __schema: { ...schema },
7
+ parse: (subj) => parse(schema, subj),
8
+ ['~standard']: {
9
+ ...STANDARD_SCHEMA,
10
+ validate: (input) => {
11
+ const parsed = parse(schema, input);
12
+ return parsed.success
13
+ ? { value: parsed.data }
14
+ : {
15
+ issues: parsed.error.map((x) => ({
16
+ path: x.path,
17
+ message: x.code,
18
+ })),
19
+ };
20
+ },
21
+ },
22
+ };
23
+ if (params.has('optional')) {
24
+ result.optional = () => makeStruct({ ...schema, optional: true });
25
+ }
26
+ if (params.has('nullable')) {
27
+ result.nullable = () => makeStruct({ ...schema, nullable: true });
28
+ }
29
+ if (params.has('description')) {
30
+ result.description = (description) => makeStruct({ ...schema, description });
31
+ }
32
+ if (params.has('brand')) {
33
+ result.brand = (...args) => {
34
+ return makeStruct({
35
+ ...schema,
36
+ brand: (Array.isArray(args[0]) ? args[0] : args),
37
+ });
38
+ };
39
+ }
40
+ if (params.has('min')) {
41
+ result.min = (min) => makeStruct({ ...schema, min });
42
+ }
43
+ if (params.has('max')) {
44
+ result.max = (max) => makeStruct({ ...schema, max });
45
+ }
46
+ if (params.has('minLength')) {
47
+ result.minLength = (minLength) => makeStruct({ ...schema, minLength });
48
+ }
49
+ if (params.has('maxLength')) {
50
+ result.maxLength = (maxLength) => makeStruct({ ...schema, maxLength });
51
+ }
52
+ return result;
53
+ }
54
+ /**
55
+ * Primitives
56
+ **/
57
+ export function boolean() {
58
+ return makeStruct({ type: 'boolean' });
59
+ }
60
+ export function literal(of) {
61
+ return makeStruct({ type: 'literal', of });
62
+ }
63
+ export function number() {
64
+ return makeStruct({ type: 'number' });
65
+ }
66
+ export function string() {
67
+ return makeStruct({ type: 'string' });
68
+ }
69
+ /**
70
+ * Compounds
71
+ **/
72
+ export function array(of) {
73
+ return makeStruct({
74
+ type: 'array',
75
+ of: of.__schema,
76
+ });
77
+ }
78
+ export function object(of) {
79
+ const schema = {
80
+ type: 'object',
81
+ of: {},
82
+ };
83
+ for (const key in of) {
84
+ schema.of[key] = of[key].__schema;
85
+ }
86
+ return makeStruct(schema);
87
+ }
88
+ export function record(of, key) {
89
+ return makeStruct(key
90
+ ? {
91
+ type: 'record',
92
+ of: of.__schema,
93
+ key: key.__schema,
94
+ }
95
+ : { type: 'record', of: of.__schema });
96
+ }
97
+ export function tuple(of) {
98
+ const schema = {
99
+ type: 'tuple',
100
+ of: of.map((x) => x.__schema),
101
+ };
102
+ return makeStruct(schema);
103
+ }
104
+ export function union(of) {
105
+ const schema = { type: 'union', of: [] };
106
+ for (const subSchema of of) {
107
+ schema.of.push(subSchema.__schema);
108
+ }
109
+ return makeStruct(schema);
110
+ }
111
+ //# sourceMappingURL=struct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"struct.js","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { BrandSchema } from './schema';
2
+ import type { InferBrand } from './infer';
3
+ export type ExtendParams<Schema, Subject, T0 = ExtendBrand<Schema, Subject>, T1 = ExtendOptional<Schema, T0>, T2 = ExtendNullable<Schema, T1>> = T2;
4
+ export type ExtendBrand<Schema, Subject> = Schema extends {
5
+ brand: infer T;
6
+ } ? T extends BrandSchema ? InferBrand<T> & Subject : never : Subject;
7
+ export type ExtendOptional<Schema, Subject> = Schema extends {
8
+ optional: true;
9
+ } ? Subject | undefined : Subject;
10
+ export type ExtendNullable<Schema, Subject> = Schema extends {
11
+ nullable: true;
12
+ } ? Subject | null : Subject;
13
+ //# sourceMappingURL=extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../../src/types/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAIzC,MAAM,MAAM,YAAY,CACtB,MAAM,EACN,OAAO,EACP,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,EAC/B,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,IAC7B,EAAE,CAAA;AAEN,MAAM,MAAM,WAAW,CAAC,MAAM,EAAE,OAAO,IAAI,MAAM,SAAS;IACxD,KAAK,EAAE,MAAM,CAAC,CAAA;CACf,GACG,CAAC,SAAS,WAAW,GACnB,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,GACvB,KAAK,GACP,OAAO,CAAA;AAEX,MAAM,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,IAAI,MAAM,SAAS;IAC3D,QAAQ,EAAE,IAAI,CAAA;CACf,GACG,OAAO,GAAG,SAAS,GACnB,OAAO,CAAA;AAEX,MAAM,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,IAAI,MAAM,SAAS;IAC3D,QAAQ,EAAE,IAAI,CAAA;CACf,GACG,OAAO,GAAG,IAAI,GACd,OAAO,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../src/types/extensions.ts"],"names":[],"mappings":""}