@ultimat3/schema 1.0.0 → 1.2.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.
package/src/validators.js DELETED
@@ -1,271 +0,0 @@
1
- // Single responsibility: the builtin, dependency-free validators behind `t`. Small on purpose —
2
- // ArkType or Zod replace them wholesale via `configureSchemaProvider()`; the IR and the
3
- // Standard Schema surface are what the rest of the framework actually depends on.
4
- import { checkOf, expected, fail, failWith, makeSchema, pass, } from './builder';
5
- const EMAIL_RE = /^[^\s@]+@[^\s@.]+(\.[^\s@.]+)+$/;
6
- const SLUG_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
7
- const CURSOR_RE = /^[A-Za-z0-9_-]+$/;
8
- const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
9
- const CURRENCY_RE = /^[A-Z]{3}$/;
10
- function stringLike(node, what, test) {
11
- const check = (value, path) => {
12
- if (typeof value !== 'string')
13
- return fail(path, expected(what, value));
14
- if (node.minLength !== undefined && value.length < node.minLength) {
15
- return fail(path, expected(`${what} of at least ${node.minLength} chars`, value));
16
- }
17
- if (node.maxLength !== undefined && value.length > node.maxLength) {
18
- return fail(path, expected(`${what} of at most ${node.maxLength} chars`, value));
19
- }
20
- if (node.pattern !== undefined && !new RegExp(node.pattern).test(value)) {
21
- return fail(path, expected(`${what} matching ${node.pattern}`, value));
22
- }
23
- if (test !== undefined && !test(value))
24
- return fail(path, expected(what, value));
25
- return pass(value);
26
- };
27
- return check;
28
- }
29
- function makeStringSchema(node, what, test) {
30
- const base = makeSchema(node, stringLike(node, what, test));
31
- return {
32
- ...base,
33
- min: (length) => makeStringSchema({ ...node, minLength: length }, what, test),
34
- max: (length) => makeStringSchema({ ...node, maxLength: length }, what, test),
35
- pattern: (regex) => makeStringSchema({ ...node, pattern: regex.source }, what, test),
36
- };
37
- }
38
- function makeNumberSchema(node) {
39
- const check = (value, path) => {
40
- if (typeof value !== 'number' || !Number.isFinite(value)) {
41
- return fail(path, expected('a finite number', value));
42
- }
43
- if (node.integer === true && !Number.isInteger(value)) {
44
- return fail(path, expected('an integer', value));
45
- }
46
- if (node.minimum !== undefined && value < node.minimum) {
47
- return fail(path, expected(`a number >= ${node.minimum}`, value));
48
- }
49
- if (node.maximum !== undefined && value > node.maximum) {
50
- return fail(path, expected(`a number <= ${node.maximum}`, value));
51
- }
52
- return pass(value);
53
- };
54
- const base = makeSchema(node, check);
55
- return {
56
- ...base,
57
- min: (value) => makeNumberSchema({ ...node, minimum: value }),
58
- max: (value) => makeNumberSchema({ ...node, maximum: value }),
59
- int: () => makeNumberSchema({ ...node, integer: true }),
60
- };
61
- }
62
- function isPlainObject(value) {
63
- return typeof value === 'object' && value !== null && !Array.isArray(value);
64
- }
65
- export function objectSchema(shape) {
66
- const properties = {};
67
- const checks = [];
68
- for (const [key, member] of Object.entries(shape)) {
69
- properties[key] = member.node;
70
- checks.push([key, checkOf(member)]);
71
- }
72
- const node = { kind: 'object', properties };
73
- const check = (value, path) => {
74
- if (!isPlainObject(value))
75
- return fail(path, expected('an object', value));
76
- const issues = [];
77
- const out = {};
78
- for (const [key, memberCheck] of checks) {
79
- const result = memberCheck(value[key], [...path, key]);
80
- if (result.ok) {
81
- // Unknown keys are dropped, never forwarded — no mass assignment through an action.
82
- if (result.value !== undefined)
83
- out[key] = result.value;
84
- }
85
- else {
86
- issues.push(...result.issues);
87
- }
88
- }
89
- if (issues.length > 0)
90
- return failWith(issues);
91
- return pass(out);
92
- };
93
- const base = makeSchema(node, check);
94
- return {
95
- ...base,
96
- shape,
97
- extend: (extra) => objectSchema({ ...shape, ...extra }),
98
- pick: (...keys) => {
99
- const next = {};
100
- for (const key of keys)
101
- next[key] = shape[key];
102
- return objectSchema(next);
103
- },
104
- omit: (...keys) => {
105
- const drop = new Set(keys);
106
- const next = {};
107
- for (const [key, member] of Object.entries(shape)) {
108
- if (!drop.has(key))
109
- next[key] = member;
110
- }
111
- return objectSchema(next);
112
- },
113
- };
114
- }
115
- export function arraySchema(items) {
116
- const itemCheck = checkOf(items);
117
- const node = { kind: 'array', items: items.node };
118
- return makeSchema(node, (value, path) => {
119
- if (!Array.isArray(value))
120
- return fail(path, expected('an array', value));
121
- const issues = [];
122
- const out = [];
123
- for (const [index, item] of value.entries()) {
124
- const result = itemCheck(item, [...path, index]);
125
- if (result.ok)
126
- out.push(result.value);
127
- else
128
- issues.push(...result.issues);
129
- }
130
- if (issues.length > 0)
131
- return failWith(issues);
132
- return pass(out);
133
- });
134
- }
135
- export function enumSchema(values) {
136
- const node = { kind: 'enum', values: [...values] };
137
- return makeSchema(node, (value, path) => {
138
- if (typeof value === 'string' && values.includes(value)) {
139
- return pass(value);
140
- }
141
- return fail(path, expected(`one of ${values.join(' | ')}`, value));
142
- });
143
- }
144
- export function literalSchema(value) {
145
- const node = { kind: 'literal', literal: value };
146
- return makeSchema(node, (candidate, path) => candidate === value ? pass(value) : fail(path, expected(JSON.stringify(value), candidate)));
147
- }
148
- export function unionSchema(...members) {
149
- const checks = members.map((member) => checkOf(member));
150
- const node = { kind: 'union', anyOf: members.map((member) => member.node) };
151
- return makeSchema(node, (value, path) => {
152
- const reasons = [];
153
- for (const memberCheck of checks) {
154
- const result = memberCheck(value, path);
155
- if (result.ok)
156
- return pass(result.value);
157
- reasons.push(result.issues.map((issue) => issue.message).join(', '));
158
- }
159
- return fail(path, `no union member matched (${reasons.join(' | ')})`);
160
- });
161
- }
162
- export function recordSchema(values) {
163
- const valueCheck = checkOf(values);
164
- const node = { kind: 'record', valueNode: values.node };
165
- return makeSchema(node, (value, path) => {
166
- if (!isPlainObject(value))
167
- return fail(path, expected('an object', value));
168
- const issues = [];
169
- const out = {};
170
- for (const [key, entry] of Object.entries(value)) {
171
- const result = valueCheck(entry, [...path, key]);
172
- if (result.ok)
173
- out[key] = result.value;
174
- else
175
- issues.push(...result.issues);
176
- }
177
- if (issues.length > 0)
178
- return failWith(issues);
179
- return pass(out);
180
- });
181
- }
182
- export function nullableSchema(schema) {
183
- return schema.nullable();
184
- }
185
- export function optionalSchema(schema) {
186
- return schema.optional();
187
- }
188
- function isTimeZone(value) {
189
- try {
190
- new Intl.DateTimeFormat('en', { timeZone: value });
191
- return true;
192
- }
193
- catch {
194
- return false;
195
- }
196
- }
197
- function isLocale(value) {
198
- try {
199
- return Intl.getCanonicalLocales(value).length === 1;
200
- }
201
- catch {
202
- return false;
203
- }
204
- }
205
- const dateSchema = makeSchema({ kind: 'date', format: 'date-time' }, (value, path) => {
206
- if (value instanceof Date) {
207
- return Number.isNaN(value.getTime())
208
- ? fail(path, expected('a valid Date', value))
209
- : pass(value);
210
- }
211
- if (typeof value === 'string' || typeof value === 'number') {
212
- const parsed = new Date(value);
213
- return Number.isNaN(parsed.getTime())
214
- ? fail(path, expected('an ISO-8601 date-time', value))
215
- : pass(parsed);
216
- }
217
- return fail(path, expected('an ISO-8601 date-time', value));
218
- });
219
- const moneySchema = makeSchema({
220
- kind: 'money',
221
- description: 'integer minor units plus an ISO 4217 currency code',
222
- properties: {
223
- minor: { kind: 'number', integer: true },
224
- currency: { kind: 'string', pattern: CURRENCY_RE.source },
225
- },
226
- }, (value, path) => {
227
- if (!isPlainObject(value))
228
- return fail(path, expected('a Money object', value));
229
- const minor = value['minor'];
230
- const currency = value['currency'];
231
- const issues = [];
232
- if (typeof minor !== 'number' || !Number.isInteger(minor)) {
233
- issues.push({
234
- message: expected('an integer number of minor units', minor),
235
- path: [...path, 'minor'],
236
- });
237
- }
238
- if (typeof currency !== 'string' || !CURRENCY_RE.test(currency)) {
239
- issues.push({
240
- message: expected('a 3-letter ISO 4217 code', currency),
241
- path: [...path, 'currency'],
242
- });
243
- }
244
- if (issues.length > 0)
245
- return failWith(issues);
246
- return pass({ minor: minor, currency: currency });
247
- });
248
- export const builtinT = Object.freeze({
249
- string: makeStringSchema({ kind: 'string', minLength: 1 }, 'a non-empty string'),
250
- number: makeNumberSchema({ kind: 'number' }),
251
- boolean: makeSchema({ kind: 'boolean' }, (value, path) => typeof value === 'boolean' ? pass(value) : fail(path, expected('a boolean', value))),
252
- uuid: makeStringSchema({ kind: 'string', format: 'uuid' }, 'a uuid', (value) => UUID_RE.test(value)),
253
- email: makeStringSchema({ kind: 'string', format: 'email' }, 'an email address', (value) => EMAIL_RE.test(value)),
254
- url: makeStringSchema({ kind: 'string', format: 'uri' }, 'an absolute URL', (value) => URL.canParse(value)),
255
- date: dateSchema,
256
- money: moneySchema,
257
- timezone: makeStringSchema({ kind: 'string', format: 'timezone' }, 'an IANA time zone', isTimeZone),
258
- locale: makeStringSchema({ kind: 'string', format: 'locale' }, 'a BCP-47 locale', isLocale),
259
- slug: makeStringSchema({ kind: 'string', format: 'slug', pattern: SLUG_RE.source }, 'a slug'),
260
- cursor: makeStringSchema({ kind: 'string', format: 'cursor', pattern: CURSOR_RE.source }, 'an opaque base64url cursor'),
261
- object: objectSchema,
262
- array: arraySchema,
263
- enum: enumSchema,
264
- enumerated: (...values) => enumSchema(values),
265
- literal: literalSchema,
266
- union: unionSchema,
267
- record: recordSchema,
268
- nullable: nullableSchema,
269
- optional: optionalSchema,
270
- });
271
- //# sourceMappingURL=validators.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["validators.ts"],"names":[],"mappings":"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"}