anyvali 0.3.1
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/CHANGELOG.md +44 -0
- package/README.md +370 -0
- package/VERSION +1 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +12 -0
- package/dist/errors.js.map +1 -0
- package/dist/format/validators.d.ts +2 -0
- package/dist/format/validators.d.ts.map +1 -0
- package/dist/format/validators.js +57 -0
- package/dist/format/validators.js.map +1 -0
- package/dist/forms/index.d.ts +57 -0
- package/dist/forms/index.d.ts.map +1 -0
- package/dist/forms/index.js +586 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/index.d.ts +93 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +156 -0
- package/dist/index.js.map +1 -0
- package/dist/infer.d.ts +8 -0
- package/dist/infer.d.ts.map +1 -0
- package/dist/infer.js +2 -0
- package/dist/infer.js.map +1 -0
- package/dist/interchange/document.d.ts +5 -0
- package/dist/interchange/document.d.ts.map +1 -0
- package/dist/interchange/document.js +12 -0
- package/dist/interchange/document.js.map +1 -0
- package/dist/interchange/exporter.d.ts +7 -0
- package/dist/interchange/exporter.d.ts.map +1 -0
- package/dist/interchange/exporter.js +7 -0
- package/dist/interchange/exporter.js.map +1 -0
- package/dist/interchange/importer.d.ts +4 -0
- package/dist/interchange/importer.d.ts.map +1 -0
- package/dist/interchange/importer.js +229 -0
- package/dist/interchange/importer.js.map +1 -0
- package/dist/issue-codes.d.ts +19 -0
- package/dist/issue-codes.d.ts.map +1 -0
- package/dist/issue-codes.js +18 -0
- package/dist/issue-codes.js.map +1 -0
- package/dist/parse/coerce.d.ts +16 -0
- package/dist/parse/coerce.d.ts.map +1 -0
- package/dist/parse/coerce.js +115 -0
- package/dist/parse/coerce.js.map +1 -0
- package/dist/parse/defaults.d.ts +7 -0
- package/dist/parse/defaults.d.ts.map +1 -0
- package/dist/parse/defaults.js +12 -0
- package/dist/parse/defaults.js.map +1 -0
- package/dist/parse/parser.d.ts +11 -0
- package/dist/parse/parser.d.ts.map +1 -0
- package/dist/parse/parser.js +13 -0
- package/dist/parse/parser.js.map +1 -0
- package/dist/schemas/any.d.ts +7 -0
- package/dist/schemas/any.d.ts.map +1 -0
- package/dist/schemas/any.js +12 -0
- package/dist/schemas/any.js.map +1 -0
- package/dist/schemas/array.d.ts +13 -0
- package/dist/schemas/array.d.ts.map +1 -0
- package/dist/schemas/array.js +73 -0
- package/dist/schemas/array.js.map +1 -0
- package/dist/schemas/base.d.ts +37 -0
- package/dist/schemas/base.d.ts.map +1 -0
- package/dist/schemas/base.js +285 -0
- package/dist/schemas/base.js.map +1 -0
- package/dist/schemas/bool.d.ts +8 -0
- package/dist/schemas/bool.d.ts.map +1 -0
- package/dist/schemas/bool.js +27 -0
- package/dist/schemas/bool.js.map +1 -0
- package/dist/schemas/enum.d.ts +9 -0
- package/dist/schemas/enum.d.ts.map +1 -0
- package/dist/schemas/enum.js +31 -0
- package/dist/schemas/enum.js.map +1 -0
- package/dist/schemas/index.d.ts +21 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +21 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/int.d.ts +32 -0
- package/dist/schemas/int.d.ts.map +1 -0
- package/dist/schemas/int.js +108 -0
- package/dist/schemas/int.js.map +1 -0
- package/dist/schemas/intersection.d.ts +16 -0
- package/dist/schemas/intersection.d.ts.map +1 -0
- package/dist/schemas/intersection.js +58 -0
- package/dist/schemas/intersection.js.map +1 -0
- package/dist/schemas/literal.d.ts +11 -0
- package/dist/schemas/literal.d.ts.map +1 -0
- package/dist/schemas/literal.js +28 -0
- package/dist/schemas/literal.js.map +1 -0
- package/dist/schemas/never.d.ts +7 -0
- package/dist/schemas/never.d.ts.map +1 -0
- package/dist/schemas/never.js +19 -0
- package/dist/schemas/never.js.map +1 -0
- package/dist/schemas/null.d.ts +7 -0
- package/dist/schemas/null.d.ts.map +1 -0
- package/dist/schemas/null.js +24 -0
- package/dist/schemas/null.js.map +1 -0
- package/dist/schemas/nullable.d.ts +10 -0
- package/dist/schemas/nullable.d.ts.map +1 -0
- package/dist/schemas/nullable.js +29 -0
- package/dist/schemas/nullable.js.map +1 -0
- package/dist/schemas/number.d.ts +27 -0
- package/dist/schemas/number.d.ts.map +1 -0
- package/dist/schemas/number.js +134 -0
- package/dist/schemas/number.js.map +1 -0
- package/dist/schemas/object.d.ts +28 -0
- package/dist/schemas/object.d.ts.map +1 -0
- package/dist/schemas/object.js +153 -0
- package/dist/schemas/object.js.map +1 -0
- package/dist/schemas/optional.d.ts +11 -0
- package/dist/schemas/optional.d.ts.map +1 -0
- package/dist/schemas/optional.js +39 -0
- package/dist/schemas/optional.js.map +1 -0
- package/dist/schemas/record.d.ts +9 -0
- package/dist/schemas/record.d.ts.map +1 -0
- package/dist/schemas/record.js +45 -0
- package/dist/schemas/record.js.map +1 -0
- package/dist/schemas/ref.d.ts +10 -0
- package/dist/schemas/ref.d.ts.map +1 -0
- package/dist/schemas/ref.js +30 -0
- package/dist/schemas/ref.js.map +1 -0
- package/dist/schemas/string.d.ts +29 -0
- package/dist/schemas/string.d.ts.map +1 -0
- package/dist/schemas/string.js +181 -0
- package/dist/schemas/string.js.map +1 -0
- package/dist/schemas/tuple.d.ts +14 -0
- package/dist/schemas/tuple.d.ts.map +1 -0
- package/dist/schemas/tuple.js +59 -0
- package/dist/schemas/tuple.js.map +1 -0
- package/dist/schemas/union.d.ts +9 -0
- package/dist/schemas/union.d.ts.map +1 -0
- package/dist/schemas/union.js +45 -0
- package/dist/schemas/union.js.map +1 -0
- package/dist/schemas/unknown.d.ts +7 -0
- package/dist/schemas/unknown.d.ts.map +1 -0
- package/dist/schemas/unknown.js +12 -0
- package/dist/schemas/unknown.js.map +1 -0
- package/dist/types.d.ts +132 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +6 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +12 -0
- package/dist/util.js.map +1 -0
- package/package.json +41 -0
- package/sdk/js/CHANGELOG.md +13 -0
- package/src/errors.ts +17 -0
- package/src/format/validators.ts +71 -0
- package/src/forms/index.ts +789 -0
- package/src/index.ts +285 -0
- package/src/infer.ts +12 -0
- package/src/interchange/document.ts +18 -0
- package/src/interchange/exporter.ts +12 -0
- package/src/interchange/importer.ts +285 -0
- package/src/issue-codes.ts +19 -0
- package/src/parse/coerce.ts +133 -0
- package/src/parse/defaults.ts +15 -0
- package/src/parse/parser.ts +19 -0
- package/src/schemas/any.ts +14 -0
- package/src/schemas/array.ts +83 -0
- package/src/schemas/base.ts +322 -0
- package/src/schemas/bool.ts +30 -0
- package/src/schemas/enum.ts +37 -0
- package/src/schemas/index.ts +30 -0
- package/src/schemas/int.ts +129 -0
- package/src/schemas/intersection.ts +81 -0
- package/src/schemas/literal.ts +34 -0
- package/src/schemas/never.ts +21 -0
- package/src/schemas/null.ts +26 -0
- package/src/schemas/nullable.ts +36 -0
- package/src/schemas/number.ts +151 -0
- package/src/schemas/object.ts +203 -0
- package/src/schemas/optional.ts +49 -0
- package/src/schemas/record.ts +55 -0
- package/src/schemas/ref.ts +35 -0
- package/src/schemas/string.ts +192 -0
- package/src/schemas/tuple.ts +74 -0
- package/src/schemas/union.ts +53 -0
- package/src/schemas/unknown.ts +14 -0
- package/src/types.ts +239 -0
- package/src/util.ts +9 -0
- package/tests/conformance/runner.test.ts +28 -0
- package/tests/conformance/runner.ts +137 -0
- package/tests/forms.test.ts +146 -0
- package/tests/unit/coerce.test.ts +136 -0
- package/tests/unit/collections.test.ts +99 -0
- package/tests/unit/composition.test.ts +80 -0
- package/tests/unit/date-format.test.ts +18 -0
- package/tests/unit/default-mutation.test.ts +32 -0
- package/tests/unit/defaults.test.ts +49 -0
- package/tests/unit/errors.test.ts +53 -0
- package/tests/unit/export.test.ts +270 -0
- package/tests/unit/inference.test.ts +306 -0
- package/tests/unit/interchange.test.ts +191 -0
- package/tests/unit/number.test.ts +195 -0
- package/tests/unit/object.test.ts +208 -0
- package/tests/unit/parser.test.ts +151 -0
- package/tests/unit/primitives.test.ts +111 -0
- package/tests/unit/security-recursion.test.ts +105 -0
- package/tests/unit/security.test.ts +945 -0
- package/tests/unit/shared-ref-falsepos.test.ts +33 -0
- package/tests/unit/string-pattern-redos.test.ts +46 -0
- package/tests/unit/string.test.ts +147 -0
- package/tsconfig.json +21 -0
- package/vitest.config.ts +7 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { ValidationError } from "../errors.js";
|
|
2
|
+
import { applyCoercion } from "../parse/coerce.js";
|
|
3
|
+
import { ISSUE_CODES } from "../issue-codes.js";
|
|
4
|
+
const ANYVALI_VERSION = "1.0";
|
|
5
|
+
const SCHEMA_VERSION = "1.1";
|
|
6
|
+
/**
|
|
7
|
+
* Maximum validation recursion depth. Bounds recursion through recursive
|
|
8
|
+
* `$ref` schemas (and deeply nested data) so a malicious payload cannot
|
|
9
|
+
* exhaust the call stack and crash the process (DoS). Far above any
|
|
10
|
+
* legitimate schema nesting.
|
|
11
|
+
*/
|
|
12
|
+
export const MAX_DEPTH = 512;
|
|
13
|
+
const RESERVED_METADATA_KEYS = new Set([
|
|
14
|
+
'title', 'description', 'deprecated', 'deprecatedMessage',
|
|
15
|
+
'notStable', 'since', 'sensitive', 'readonly', 'writeonly', 'examples',
|
|
16
|
+
]);
|
|
17
|
+
/** Sentinel for "value not present" */
|
|
18
|
+
export const ABSENT = Symbol.for("anyvali.absent");
|
|
19
|
+
/**
|
|
20
|
+
* Deep-clone a default value so mutable defaults are isolated per parse.
|
|
21
|
+
* Uses structuredClone when the value is structured-cloneable; falls back to
|
|
22
|
+
* returning the value as-is for things structuredClone cannot handle
|
|
23
|
+
* (e.g. functions), which are not portable defaults anyway.
|
|
24
|
+
*/
|
|
25
|
+
function cloneDefault(value) {
|
|
26
|
+
if (value === null || typeof value !== "object")
|
|
27
|
+
return value;
|
|
28
|
+
try {
|
|
29
|
+
return structuredClone(value);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class BaseSchema {
|
|
36
|
+
/** @internal */ _defaultValue = ABSENT;
|
|
37
|
+
/** @internal */ _coercionConfig = undefined;
|
|
38
|
+
/** @internal */ _isPortable = true;
|
|
39
|
+
/** @internal */ _metadata = undefined;
|
|
40
|
+
// ---------- public API ----------
|
|
41
|
+
parse(input) {
|
|
42
|
+
const result = this.safeParse(input);
|
|
43
|
+
if (result.success)
|
|
44
|
+
return result.data;
|
|
45
|
+
throw new ValidationError(result.issues);
|
|
46
|
+
}
|
|
47
|
+
safeParse(input) {
|
|
48
|
+
const ctx = { path: [], issues: [] };
|
|
49
|
+
let output;
|
|
50
|
+
try {
|
|
51
|
+
output = this._runPipeline(input, ctx);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
// Backstop: the depth guard bounds recursion, but if any path resets
|
|
55
|
+
// the context and exhausts the stack, convert it to a clean issue so
|
|
56
|
+
// safeParse never throws (DoS / contract guarantee).
|
|
57
|
+
if (err instanceof RangeError) {
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
issues: [
|
|
61
|
+
{
|
|
62
|
+
code: ISSUE_CODES.TOO_DEEP,
|
|
63
|
+
message: "Maximum validation depth exceeded",
|
|
64
|
+
path: [],
|
|
65
|
+
expected: "bounded nesting",
|
|
66
|
+
received: "too deep",
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
throw err;
|
|
72
|
+
}
|
|
73
|
+
if (ctx.issues.length > 0) {
|
|
74
|
+
return { success: false, issues: ctx.issues };
|
|
75
|
+
}
|
|
76
|
+
return { success: true, data: output };
|
|
77
|
+
}
|
|
78
|
+
/** Internal: run the 5-step pipeline */
|
|
79
|
+
_runPipeline(input, ctx) {
|
|
80
|
+
// Depth guard: bound recursion (recursive $ref + deep data) so a crafted
|
|
81
|
+
// payload cannot exhaust the call stack. Return a clean issue instead of
|
|
82
|
+
// letting safeParse throw a RangeError.
|
|
83
|
+
const depth = (ctx.depth ?? 0) + 1;
|
|
84
|
+
if (depth > MAX_DEPTH) {
|
|
85
|
+
ctx.issues.push({
|
|
86
|
+
code: ISSUE_CODES.TOO_DEEP,
|
|
87
|
+
message: `Maximum validation depth of ${MAX_DEPTH} exceeded`,
|
|
88
|
+
path: [...ctx.path],
|
|
89
|
+
expected: `<= ${MAX_DEPTH} levels`,
|
|
90
|
+
received: "too deep",
|
|
91
|
+
});
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
ctx.depth = depth;
|
|
95
|
+
try {
|
|
96
|
+
return this._runPipelineInner(input, ctx);
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
ctx.depth = depth - 1;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
_runPipelineInner(input, ctx) {
|
|
103
|
+
// Step 1: detect presence
|
|
104
|
+
const isAbsent = input === undefined || input === ABSENT;
|
|
105
|
+
let value = input;
|
|
106
|
+
// Step 2: coercion (only for present values)
|
|
107
|
+
if (!isAbsent && this._coercionConfig) {
|
|
108
|
+
const coerced = applyCoercion(value, this._coercionConfig, this._getCoercionTarget());
|
|
109
|
+
if (coerced.success) {
|
|
110
|
+
value = coerced.value;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
ctx.issues.push({
|
|
114
|
+
code: ISSUE_CODES.COERCION_FAILED,
|
|
115
|
+
message: coerced.message,
|
|
116
|
+
path: [...ctx.path],
|
|
117
|
+
expected: this._getCoercionTarget(),
|
|
118
|
+
received: String(input),
|
|
119
|
+
});
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Step 3: default materialization (only for absent values)
|
|
124
|
+
let usedDefault = false;
|
|
125
|
+
if (isAbsent && this._defaultValue !== ABSENT) {
|
|
126
|
+
// Deep-clone so mutable defaults (arrays/objects) are not shared across
|
|
127
|
+
// parses. Pass-through schemas (any/unknown) return the value by
|
|
128
|
+
// reference, so without cloning a mutation would corrupt the default.
|
|
129
|
+
value = cloneDefault(this._defaultValue);
|
|
130
|
+
usedDefault = true;
|
|
131
|
+
}
|
|
132
|
+
// Step 4: validate
|
|
133
|
+
const issuesBefore = ctx.issues.length;
|
|
134
|
+
const result = this._validate(value, ctx);
|
|
135
|
+
// If default was materialized and validation failed, remap issues to default_invalid
|
|
136
|
+
if (usedDefault && ctx.issues.length > issuesBefore) {
|
|
137
|
+
for (let i = issuesBefore; i < ctx.issues.length; i++) {
|
|
138
|
+
const issue = ctx.issues[i];
|
|
139
|
+
ctx.issues[i] = {
|
|
140
|
+
...issue,
|
|
141
|
+
code: ISSUE_CODES.DEFAULT_INVALID,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
/** Override in subclasses to provide the coercion target type name */
|
|
148
|
+
_getCoercionTarget() {
|
|
149
|
+
return "unknown";
|
|
150
|
+
}
|
|
151
|
+
// optional() and nullable() are provided via standalone functions
|
|
152
|
+
// to avoid circular imports. See index.ts.
|
|
153
|
+
default(value) {
|
|
154
|
+
const clone = this._clone();
|
|
155
|
+
clone._defaultValue = value;
|
|
156
|
+
return clone;
|
|
157
|
+
}
|
|
158
|
+
coerce(options = {}) {
|
|
159
|
+
const clone = this._clone();
|
|
160
|
+
clone._coercionConfig = { ...options };
|
|
161
|
+
return clone;
|
|
162
|
+
}
|
|
163
|
+
describe(description, opts) {
|
|
164
|
+
const reservedMeta = this._validateDescribeOpts(description, opts);
|
|
165
|
+
const clone = this._clone();
|
|
166
|
+
clone._metadata = { ...(clone._metadata || {}), ...reservedMeta };
|
|
167
|
+
return clone;
|
|
168
|
+
}
|
|
169
|
+
metadata(meta, opts) {
|
|
170
|
+
// Validate no reserved keys
|
|
171
|
+
for (const key of Object.keys(meta)) {
|
|
172
|
+
if (RESERVED_METADATA_KEYS.has(key)) {
|
|
173
|
+
throw new Error(`metadata(): "${key}" is a reserved key. Use describe() instead.`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const clone = this._clone();
|
|
177
|
+
if (opts?.replace) {
|
|
178
|
+
// Replace mode: keep only reserved keys from existing, add new non-reserved
|
|
179
|
+
const existing = clone._metadata || {};
|
|
180
|
+
const reserved = {};
|
|
181
|
+
for (const [k, v] of Object.entries(existing)) {
|
|
182
|
+
if (RESERVED_METADATA_KEYS.has(k)) {
|
|
183
|
+
reserved[k] = v;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
clone._metadata = { ...reserved, ...meta };
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
// Merge mode (default): shallow merge
|
|
190
|
+
clone._metadata = { ...(clone._metadata || {}), ...meta };
|
|
191
|
+
}
|
|
192
|
+
return clone;
|
|
193
|
+
}
|
|
194
|
+
export(mode = "portable") {
|
|
195
|
+
if (mode === "portable" && !this._isPortable) {
|
|
196
|
+
throw new Error("Cannot export in portable mode: schema contains non-portable features");
|
|
197
|
+
}
|
|
198
|
+
const node = this._toNode();
|
|
199
|
+
return {
|
|
200
|
+
anyvaliVersion: ANYVALI_VERSION,
|
|
201
|
+
schemaVersion: SCHEMA_VERSION,
|
|
202
|
+
root: node,
|
|
203
|
+
definitions: {},
|
|
204
|
+
extensions: {},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
// ---------- internal helpers ----------
|
|
208
|
+
_validateDescribeOpts(description, opts) {
|
|
209
|
+
const meta = { description };
|
|
210
|
+
if (typeof description !== 'string') {
|
|
211
|
+
throw new Error('describe(): description must be a string');
|
|
212
|
+
}
|
|
213
|
+
if (opts) {
|
|
214
|
+
if (opts.title !== undefined) {
|
|
215
|
+
if (typeof opts.title !== 'string')
|
|
216
|
+
throw new Error('describe(): title must be a string');
|
|
217
|
+
meta.title = opts.title;
|
|
218
|
+
}
|
|
219
|
+
if (opts.deprecated !== undefined) {
|
|
220
|
+
if (typeof opts.deprecated !== 'boolean')
|
|
221
|
+
throw new Error('describe(): deprecated must be a boolean');
|
|
222
|
+
meta.deprecated = opts.deprecated;
|
|
223
|
+
}
|
|
224
|
+
if (opts.deprecatedMessage !== undefined) {
|
|
225
|
+
if (typeof opts.deprecatedMessage !== 'string')
|
|
226
|
+
throw new Error('describe(): deprecatedMessage must be a string');
|
|
227
|
+
if (!opts.deprecated)
|
|
228
|
+
throw new Error('describe(): deprecatedMessage requires deprecated to be true');
|
|
229
|
+
meta.deprecatedMessage = opts.deprecatedMessage;
|
|
230
|
+
}
|
|
231
|
+
if (opts.notStable !== undefined) {
|
|
232
|
+
if (typeof opts.notStable !== 'boolean')
|
|
233
|
+
throw new Error('describe(): notStable must be a boolean');
|
|
234
|
+
meta.notStable = opts.notStable;
|
|
235
|
+
}
|
|
236
|
+
if (opts.since !== undefined) {
|
|
237
|
+
if (typeof opts.since !== 'string')
|
|
238
|
+
throw new Error('describe(): since must be a string');
|
|
239
|
+
meta.since = opts.since;
|
|
240
|
+
}
|
|
241
|
+
if (opts.sensitive !== undefined) {
|
|
242
|
+
if (typeof opts.sensitive !== 'boolean')
|
|
243
|
+
throw new Error('describe(): sensitive must be a boolean');
|
|
244
|
+
meta.sensitive = opts.sensitive;
|
|
245
|
+
}
|
|
246
|
+
if (opts.readonly !== undefined) {
|
|
247
|
+
if (typeof opts.readonly !== 'boolean')
|
|
248
|
+
throw new Error('describe(): readonly must be a boolean');
|
|
249
|
+
meta.readonly = opts.readonly;
|
|
250
|
+
}
|
|
251
|
+
if (opts.writeonly !== undefined) {
|
|
252
|
+
if (typeof opts.writeonly !== 'boolean')
|
|
253
|
+
throw new Error('describe(): writeonly must be a boolean');
|
|
254
|
+
meta.writeonly = opts.writeonly;
|
|
255
|
+
}
|
|
256
|
+
if (opts.readonly && opts.writeonly) {
|
|
257
|
+
throw new Error('describe(): readonly and writeonly cannot both be true');
|
|
258
|
+
}
|
|
259
|
+
if (opts.examples !== undefined) {
|
|
260
|
+
if (!Array.isArray(opts.examples))
|
|
261
|
+
throw new Error('describe(): examples must be an array');
|
|
262
|
+
meta.examples = opts.examples;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return meta;
|
|
266
|
+
}
|
|
267
|
+
_clone() {
|
|
268
|
+
const clone = Object.create(Object.getPrototypeOf(this));
|
|
269
|
+
Object.assign(clone, this);
|
|
270
|
+
return clone;
|
|
271
|
+
}
|
|
272
|
+
_addDefault(node) {
|
|
273
|
+
if (this._defaultValue !== ABSENT) {
|
|
274
|
+
node.default = this._defaultValue;
|
|
275
|
+
}
|
|
276
|
+
if (this._coercionConfig) {
|
|
277
|
+
node.coerce = { ...this._coercionConfig };
|
|
278
|
+
}
|
|
279
|
+
if (this._metadata && Object.keys(this._metadata).length > 0) {
|
|
280
|
+
node.metadata = { ...this._metadata };
|
|
281
|
+
}
|
|
282
|
+
return node;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/schemas/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParseContext, SchemaNode } from "../types.js";
|
|
2
|
+
import { BaseSchema } from "./base.js";
|
|
3
|
+
export declare class BoolSchema extends BaseSchema<boolean, boolean> {
|
|
4
|
+
_getCoercionTarget(): string;
|
|
5
|
+
_validate(input: unknown, ctx: ParseContext): unknown;
|
|
6
|
+
_toNode(): SchemaNode;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=bool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bool.d.ts","sourceRoot":"","sources":["../../src/schemas/bool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIvC,qBAAa,UAAW,SAAQ,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1D,kBAAkB,IAAI,MAAM;IAI5B,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IAcrD,OAAO,IAAI,UAAU;CAKtB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { BaseSchema } from "./base.js";
|
|
2
|
+
import { ISSUE_CODES } from "../issue-codes.js";
|
|
3
|
+
import { describeType } from "../util.js";
|
|
4
|
+
export class BoolSchema extends BaseSchema {
|
|
5
|
+
_getCoercionTarget() {
|
|
6
|
+
return "bool";
|
|
7
|
+
}
|
|
8
|
+
_validate(input, ctx) {
|
|
9
|
+
if (typeof input !== "boolean") {
|
|
10
|
+
ctx.issues.push({
|
|
11
|
+
code: ISSUE_CODES.INVALID_TYPE,
|
|
12
|
+
message: `Expected boolean, received ${describeType(input)}`,
|
|
13
|
+
path: [...ctx.path],
|
|
14
|
+
expected: "bool",
|
|
15
|
+
received: describeType(input),
|
|
16
|
+
});
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
return input;
|
|
20
|
+
}
|
|
21
|
+
_toNode() {
|
|
22
|
+
const node = { kind: "bool" };
|
|
23
|
+
this._addDefault(node);
|
|
24
|
+
return node;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=bool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bool.js","sourceRoot":"","sources":["../../src/schemas/bool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,OAAO,UAAW,SAAQ,UAA4B;IAC1D,kBAAkB;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,KAAc,EAAE,GAAiB;QACzC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,WAAW,CAAC,YAAY;gBAC9B,OAAO,EAAE,8BAA8B,YAAY,CAAC,KAAK,CAAC,EAAE;gBAC5D,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;gBACnB,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC;aAC9B,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,MAAM,EAAgB,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ParseContext, SchemaNode } from "../types.js";
|
|
2
|
+
import { BaseSchema } from "./base.js";
|
|
3
|
+
export declare class EnumSchema<T extends readonly (string | number)[] = (string | number)[]> extends BaseSchema<T[number], T[number]> {
|
|
4
|
+
private _values;
|
|
5
|
+
constructor(values: T);
|
|
6
|
+
_validate(input: unknown, ctx: ParseContext): unknown;
|
|
7
|
+
_toNode(): SchemaNode;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=enum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../src/schemas/enum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,qBAAa,UAAU,CACrB,CAAC,SAAS,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAC5D,SAAQ,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,OAAO,CAAI;gBAEP,MAAM,EAAE,CAAC;IAKrB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IAcrD,OAAO,IAAI,UAAU;CAQtB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { BaseSchema } from "./base.js";
|
|
2
|
+
import { ISSUE_CODES } from "../issue-codes.js";
|
|
3
|
+
export class EnumSchema extends BaseSchema {
|
|
4
|
+
_values;
|
|
5
|
+
constructor(values) {
|
|
6
|
+
super();
|
|
7
|
+
this._values = values;
|
|
8
|
+
}
|
|
9
|
+
_validate(input, ctx) {
|
|
10
|
+
if (!this._values.includes(input)) {
|
|
11
|
+
ctx.issues.push({
|
|
12
|
+
code: ISSUE_CODES.INVALID_TYPE,
|
|
13
|
+
message: `Expected one of enum(${this._values.join(",")}), received ${String(input)}`,
|
|
14
|
+
path: [...ctx.path],
|
|
15
|
+
expected: `enum(${this._values.join(",")})`,
|
|
16
|
+
received: String(input),
|
|
17
|
+
});
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return input;
|
|
21
|
+
}
|
|
22
|
+
_toNode() {
|
|
23
|
+
const node = {
|
|
24
|
+
kind: "enum",
|
|
25
|
+
values: [...this._values],
|
|
26
|
+
};
|
|
27
|
+
this._addDefault(node);
|
|
28
|
+
return node;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../../src/schemas/enum.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,UAEX,SAAQ,UAAgC;IAChC,OAAO,CAAI;IAEnB,YAAY,MAAS;QACnB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,SAAS,CAAC,KAAc,EAAE,GAAiB;QACzC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAwB,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,WAAW,CAAC,YAAY;gBAC9B,OAAO,EAAE,wBAAwB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,KAAK,CAAC,EAAE;gBACrF,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;gBACnB,QAAQ,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;gBAC3C,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;aACxB,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,MAAe;YACrB,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;SAC1B,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,IAA6B,CAAC,CAAC;QAChD,OAAO,IAA6B,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { BaseSchema, ABSENT } from "./base.js";
|
|
2
|
+
export { StringSchema } from "./string.js";
|
|
3
|
+
export { NumberSchema, Float32Schema, Float64Schema } from "./number.js";
|
|
4
|
+
export { IntSchema, Int8Schema, Int16Schema, Int32Schema, Int64Schema, Uint8Schema, Uint16Schema, Uint32Schema, Uint64Schema, } from "./int.js";
|
|
5
|
+
export { BoolSchema } from "./bool.js";
|
|
6
|
+
export { NullSchema } from "./null.js";
|
|
7
|
+
export { AnySchema } from "./any.js";
|
|
8
|
+
export { UnknownSchema } from "./unknown.js";
|
|
9
|
+
export { NeverSchema } from "./never.js";
|
|
10
|
+
export { LiteralSchema } from "./literal.js";
|
|
11
|
+
export { EnumSchema } from "./enum.js";
|
|
12
|
+
export { ArraySchema } from "./array.js";
|
|
13
|
+
export { TupleSchema } from "./tuple.js";
|
|
14
|
+
export { ObjectSchema } from "./object.js";
|
|
15
|
+
export { RecordSchema } from "./record.js";
|
|
16
|
+
export { UnionSchema } from "./union.js";
|
|
17
|
+
export { IntersectionSchema } from "./intersection.js";
|
|
18
|
+
export { OptionalSchema } from "./optional.js";
|
|
19
|
+
export { NullableSchema } from "./nullable.js";
|
|
20
|
+
export { RefSchema } from "./ref.js";
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { BaseSchema, ABSENT } from "./base.js";
|
|
2
|
+
export { StringSchema } from "./string.js";
|
|
3
|
+
export { NumberSchema, Float32Schema, Float64Schema } from "./number.js";
|
|
4
|
+
export { IntSchema, Int8Schema, Int16Schema, Int32Schema, Int64Schema, Uint8Schema, Uint16Schema, Uint32Schema, Uint64Schema, } from "./int.js";
|
|
5
|
+
export { BoolSchema } from "./bool.js";
|
|
6
|
+
export { NullSchema } from "./null.js";
|
|
7
|
+
export { AnySchema } from "./any.js";
|
|
8
|
+
export { UnknownSchema } from "./unknown.js";
|
|
9
|
+
export { NeverSchema } from "./never.js";
|
|
10
|
+
export { LiteralSchema } from "./literal.js";
|
|
11
|
+
export { EnumSchema } from "./enum.js";
|
|
12
|
+
export { ArraySchema } from "./array.js";
|
|
13
|
+
export { TupleSchema } from "./tuple.js";
|
|
14
|
+
export { ObjectSchema } from "./object.js";
|
|
15
|
+
export { RecordSchema } from "./record.js";
|
|
16
|
+
export { UnionSchema } from "./union.js";
|
|
17
|
+
export { IntersectionSchema } from "./intersection.js";
|
|
18
|
+
export { OptionalSchema } from "./optional.js";
|
|
19
|
+
export { NullableSchema } from "./nullable.js";
|
|
20
|
+
export { RefSchema } from "./ref.js";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ParseContext, SchemaKind } from "../types.js";
|
|
2
|
+
import { NumberSchema } from "./number.js";
|
|
3
|
+
export declare class IntSchema extends NumberSchema {
|
|
4
|
+
private _intRange;
|
|
5
|
+
constructor(kind?: SchemaKind);
|
|
6
|
+
_validate(input: unknown, ctx: ParseContext): unknown;
|
|
7
|
+
}
|
|
8
|
+
export declare class Int8Schema extends IntSchema {
|
|
9
|
+
constructor();
|
|
10
|
+
}
|
|
11
|
+
export declare class Int16Schema extends IntSchema {
|
|
12
|
+
constructor();
|
|
13
|
+
}
|
|
14
|
+
export declare class Int32Schema extends IntSchema {
|
|
15
|
+
constructor();
|
|
16
|
+
}
|
|
17
|
+
export declare class Int64Schema extends IntSchema {
|
|
18
|
+
constructor();
|
|
19
|
+
}
|
|
20
|
+
export declare class Uint8Schema extends IntSchema {
|
|
21
|
+
constructor();
|
|
22
|
+
}
|
|
23
|
+
export declare class Uint16Schema extends IntSchema {
|
|
24
|
+
constructor();
|
|
25
|
+
}
|
|
26
|
+
export declare class Uint32Schema extends IntSchema {
|
|
27
|
+
constructor();
|
|
28
|
+
}
|
|
29
|
+
export declare class Uint64Schema extends IntSchema {
|
|
30
|
+
constructor();
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=int.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"int.d.ts","sourceRoot":"","sources":["../../src/schemas/int.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAc,UAAU,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAqB3C,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,SAAS,CAAW;gBAEhB,IAAI,GAAE,UAAkB;IAKpC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;CAkDtD;AAED,qBAAa,UAAW,SAAQ,SAAS;;CAIxC;AAED,qBAAa,WAAY,SAAQ,SAAS;;CAIzC;AAED,qBAAa,WAAY,SAAQ,SAAS;;CAIzC;AAED,qBAAa,WAAY,SAAQ,SAAS;;CAIzC;AAED,qBAAa,WAAY,SAAQ,SAAS;;CAIzC;AAED,qBAAa,YAAa,SAAQ,SAAS;;CAI1C;AAED,qBAAa,YAAa,SAAQ,SAAS;;CAI1C;AAED,qBAAa,YAAa,SAAQ,SAAS;;CAI1C"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { NumberSchema } from "./number.js";
|
|
2
|
+
import { ISSUE_CODES } from "../issue-codes.js";
|
|
3
|
+
import { describeType } from "../util.js";
|
|
4
|
+
const INT_RANGES = {
|
|
5
|
+
int8: { min: -128, max: 127 },
|
|
6
|
+
int16: { min: -32768, max: 32767 },
|
|
7
|
+
int32: { min: -2147483648, max: 2147483647 },
|
|
8
|
+
int64: { min: Number.MIN_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER },
|
|
9
|
+
uint8: { min: 0, max: 255 },
|
|
10
|
+
uint16: { min: 0, max: 65535 },
|
|
11
|
+
uint32: { min: 0, max: 4294967295 },
|
|
12
|
+
uint64: { min: 0, max: Number.MAX_SAFE_INTEGER },
|
|
13
|
+
int: { min: Number.MIN_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER },
|
|
14
|
+
};
|
|
15
|
+
export class IntSchema extends NumberSchema {
|
|
16
|
+
_intRange;
|
|
17
|
+
constructor(kind = "int") {
|
|
18
|
+
super(kind);
|
|
19
|
+
this._intRange = INT_RANGES[kind] ?? INT_RANGES.int;
|
|
20
|
+
}
|
|
21
|
+
_validate(input, ctx) {
|
|
22
|
+
if (typeof input !== "number" || !Number.isFinite(input)) {
|
|
23
|
+
ctx.issues.push({
|
|
24
|
+
code: ISSUE_CODES.INVALID_TYPE,
|
|
25
|
+
message: `Expected integer, received ${describeType(input)}`,
|
|
26
|
+
path: [...ctx.path],
|
|
27
|
+
expected: this._kind,
|
|
28
|
+
received: describeType(input),
|
|
29
|
+
});
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
if (!Number.isInteger(input)) {
|
|
33
|
+
ctx.issues.push({
|
|
34
|
+
code: ISSUE_CODES.INVALID_TYPE,
|
|
35
|
+
message: `Expected integer, received float`,
|
|
36
|
+
path: [...ctx.path],
|
|
37
|
+
expected: this._kind,
|
|
38
|
+
received: "number",
|
|
39
|
+
});
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
// Range check for the specific int width
|
|
43
|
+
if (input > this._intRange.max) {
|
|
44
|
+
ctx.issues.push({
|
|
45
|
+
code: ISSUE_CODES.TOO_LARGE,
|
|
46
|
+
message: `Value ${input} is above the maximum for ${this._kind}`,
|
|
47
|
+
path: [...ctx.path],
|
|
48
|
+
expected: this._kind,
|
|
49
|
+
received: String(input),
|
|
50
|
+
});
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
if (input < this._intRange.min) {
|
|
54
|
+
ctx.issues.push({
|
|
55
|
+
code: ISSUE_CODES.TOO_SMALL,
|
|
56
|
+
message: `Value ${input} is below the minimum for ${this._kind}`,
|
|
57
|
+
path: [...ctx.path],
|
|
58
|
+
expected: this._kind,
|
|
59
|
+
received: String(input),
|
|
60
|
+
});
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
// Additional user constraints
|
|
64
|
+
this._validateConstraints(input, ctx);
|
|
65
|
+
return input;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export class Int8Schema extends IntSchema {
|
|
69
|
+
constructor() {
|
|
70
|
+
super("int8");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export class Int16Schema extends IntSchema {
|
|
74
|
+
constructor() {
|
|
75
|
+
super("int16");
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export class Int32Schema extends IntSchema {
|
|
79
|
+
constructor() {
|
|
80
|
+
super("int32");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export class Int64Schema extends IntSchema {
|
|
84
|
+
constructor() {
|
|
85
|
+
super("int64");
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export class Uint8Schema extends IntSchema {
|
|
89
|
+
constructor() {
|
|
90
|
+
super("uint8");
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export class Uint16Schema extends IntSchema {
|
|
94
|
+
constructor() {
|
|
95
|
+
super("uint16");
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export class Uint32Schema extends IntSchema {
|
|
99
|
+
constructor() {
|
|
100
|
+
super("uint32");
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export class Uint64Schema extends IntSchema {
|
|
104
|
+
constructor() {
|
|
105
|
+
super("uint64");
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=int.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"int.js","sourceRoot":"","sources":["../../src/schemas/int.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ParseContext, SchemaNode } from "../types.js";
|
|
2
|
+
import { BaseSchema } from "./base.js";
|
|
3
|
+
/** Convert a union of types to an intersection. */
|
|
4
|
+
type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends (x: infer I) => void ? I : never;
|
|
5
|
+
/** Flatten an intersection into a clean single-level type. */
|
|
6
|
+
type Prettify<T> = {
|
|
7
|
+
[K in keyof T]: T[K];
|
|
8
|
+
} & {};
|
|
9
|
+
export declare class IntersectionSchema<T extends BaseSchema<any, any>[] = BaseSchema[]> extends BaseSchema<unknown, Prettify<UnionToIntersection<T[number]["_output"]>>> {
|
|
10
|
+
private _schemas;
|
|
11
|
+
constructor(schemas: [...T]);
|
|
12
|
+
_validate(input: unknown, ctx: ParseContext): unknown;
|
|
13
|
+
_toNode(): SchemaNode;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=intersection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intersection.d.ts","sourceRoot":"","sources":["../../src/schemas/intersection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,mDAAmD;AACnD,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAC5B,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CACvC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GAC1B,CAAC,GACD,KAAK,CAAC;AAEV,8DAA8D;AAC9D,KAAK,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,EAAE,CAAC;AAEjD,qBAAa,kBAAkB,CAC7B,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,UAAU,EAAE,CAC/C,SAAQ,UAAU,CAClB,OAAO,EACP,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CACpD;IACC,OAAO,CAAC,QAAQ,CAAI;gBAER,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAK3B,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IA8CrD,OAAO,IAAI,UAAU;CAQtB"}
|