lib0 0.2.109 → 0.2.111
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/array.d.ts +2 -2
- package/array.d.ts.map +1 -1
- package/array.js +5 -6
- package/bin/gentesthtml.js +16 -2
- package/coverage/tmp/coverage-37930-1752527249527-0.json +1 -0
- package/coverage/tmp/coverage-37931-1752527222567-0.json +1 -0
- package/dist/aes-gcm.cjs +4 -4
- package/dist/{array-f0f52786.cjs → array-f5410bdd.cjs} +6 -7
- package/dist/array-f5410bdd.cjs.map +1 -0
- package/dist/array.cjs +1 -1
- package/dist/array.d.ts +2 -2
- package/dist/array.d.ts.map +1 -1
- package/dist/{broadcastchannel-3f71755b.cjs → broadcastchannel-7479dcb7.cjs} +2 -2
- package/dist/{broadcastchannel-3f71755b.cjs.map → broadcastchannel-7479dcb7.cjs.map} +1 -1
- package/dist/broadcastchannel.cjs +9 -9
- package/dist/{buffer-c040e625.cjs → buffer-cba90761.cjs} +6 -6
- package/dist/{buffer-c040e625.cjs.map → buffer-cba90761.cjs.map} +1 -1
- package/dist/buffer.cjs +8 -8
- package/dist/cache.cjs +3 -3
- package/dist/component.cjs +5 -5
- package/dist/{decoding-7b1393a8.cjs → decoding-9732ddf2.cjs} +3 -3
- package/dist/{decoding-7b1393a8.cjs.map → decoding-9732ddf2.cjs.map} +1 -1
- package/dist/decoding.cjs +4 -4
- package/dist/{diff-117a5b30.cjs → diff-63d13d0f.cjs} +2 -2
- package/dist/{diff-117a5b30.cjs.map → diff-63d13d0f.cjs.map} +1 -1
- package/dist/diff.cjs +4 -4
- package/dist/{encoding-364fc682.cjs → encoding-62f41e96.cjs} +3 -3
- package/dist/{encoding-364fc682.cjs.map → encoding-62f41e96.cjs.map} +1 -1
- package/dist/encoding.cjs +3 -3
- package/dist/{environment-f28f4004.cjs → environment-2789c99d.cjs} +3 -3
- package/dist/{environment-f28f4004.cjs.map → environment-2789c99d.cjs.map} +1 -1
- package/dist/environment.cjs +5 -5
- package/dist/{function-e09c7eb7.cjs → function-6c17de82.cjs} +3 -3
- package/dist/{function-e09c7eb7.cjs.map → function-6c17de82.cjs.map} +1 -1
- package/dist/function.cjs +3 -3
- package/dist/index.cjs +12 -12
- package/dist/indexeddbV2.cjs +1 -1
- package/dist/jwt.cjs +8 -8
- package/dist/list.cjs +3 -3
- package/dist/logging.cjs +5 -5
- package/dist/logging.common.cjs +5 -5
- package/dist/logging.node.cjs +5 -5
- package/dist/{object-0dc73acd.cjs → object-491858d1.cjs} +24 -7
- package/dist/object-491858d1.cjs.map +1 -0
- package/dist/object.cjs +2 -1
- package/dist/object.cjs.map +1 -1
- package/dist/object.d.ts +12 -7
- package/dist/object.d.ts.map +1 -1
- package/dist/object.test.d.ts +1 -0
- package/dist/object.test.d.ts.map +1 -1
- package/dist/observable.cjs +1 -1
- package/dist/patience.cjs +1 -1
- package/dist/performance.node.cjs +3 -3
- package/dist/pledge.cjs +1 -1
- package/dist/{prng-57f83f83.cjs → prng-6cd9a82d.cjs} +3 -3
- package/dist/{prng-57f83f83.cjs.map → prng-6cd9a82d.cjs.map} +1 -1
- package/dist/prng.cjs +9 -9
- package/dist/prng.test.d.ts.map +1 -1
- package/dist/rabin-gf2-polynomial.cjs +8 -8
- package/dist/rabin-uncached.cjs +8 -8
- package/dist/rabin.cjs +8 -8
- package/dist/random.test.d.ts.map +1 -1
- package/dist/schema.cjs +545 -0
- package/dist/schema.cjs.map +1 -0
- package/dist/schema.d.ts +317 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.test.d.ts +3 -0
- package/dist/schema.test.d.ts.map +1 -0
- package/dist/sort.test.d.ts.map +1 -1
- package/dist/{string-42009272.cjs → string-04e96f2d.cjs} +2 -2
- package/dist/{string-42009272.cjs.map → string-04e96f2d.cjs.map} +1 -1
- package/dist/string.cjs +2 -2
- package/dist/testing.cjs +10 -11
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/url.cjs +1 -1
- package/dist/{websocket-3a481d20.cjs → websocket-2c325505.cjs} +1 -1
- package/dist/{websocket-3a481d20.cjs.map → websocket-2c325505.cjs.map} +1 -1
- package/dist/websocket.cjs +2 -2
- package/object.d.ts +12 -7
- package/object.d.ts.map +1 -1
- package/object.js +20 -5
- package/object.test.d.ts +1 -0
- package/object.test.d.ts.map +1 -1
- package/package.json +11 -5
- package/prng.test.d.ts.map +1 -1
- package/random.test.d.ts.map +1 -1
- package/schema.d.ts +317 -0
- package/schema.d.ts.map +1 -0
- package/schema.js +504 -0
- package/schema.test.d.ts +3 -0
- package/schema.test.d.ts.map +1 -0
- package/sort.test.d.ts.map +1 -1
- package/test.html +1 -0
- package/test.js +3 -2
- package/testing.d.ts.map +1 -1
- package/testing.js +0 -1
- package/coverage/tmp/coverage-32991-1750516864118-0.json +0 -1
- package/dist/array-f0f52786.cjs.map +0 -1
- package/dist/object-0dc73acd.cjs.map +0 -1
package/dist/prng.test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prng.test.d.ts","sourceRoot":"","sources":["../prng.test.js"],"names":[],"mappings":"AA4LO,kDAFI,EAAE,QAAQ,QAE2E;AAKzF,4CAFI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"prng.test.d.ts","sourceRoot":"","sources":["../prng.test.js"],"names":[],"mappings":"AA4LO,kDAFI,EAAE,QAAQ,QAE2E;AAKzF,4CAFI,EAAE,QAAQ,QAIpB;AAKM,yCAFI,EAAE,QAAQ,QAIpB;AA2BM,4CAFI,EAAE,QAAQ,QAOpB;mBAtOkB,cAAc"}
|
|
@@ -4,21 +4,21 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var math = require('./math-08e068f9.cjs');
|
|
6
6
|
var webcrypto = require('lib0/webcrypto');
|
|
7
|
-
var array = require('./array-
|
|
8
|
-
var buffer = require('./buffer-
|
|
7
|
+
var array = require('./array-f5410bdd.cjs');
|
|
8
|
+
var buffer = require('./buffer-cba90761.cjs');
|
|
9
9
|
require('./set-a0a3ea69.cjs');
|
|
10
|
-
require('./string-
|
|
11
|
-
require('./environment-
|
|
10
|
+
require('./string-04e96f2d.cjs');
|
|
11
|
+
require('./environment-2789c99d.cjs');
|
|
12
12
|
require('./map-0dabcc55.cjs');
|
|
13
13
|
require('./conditions-f5c0c102.cjs');
|
|
14
14
|
require('./storage.cjs');
|
|
15
|
-
require('./function-
|
|
16
|
-
require('./object-
|
|
15
|
+
require('./function-6c17de82.cjs');
|
|
16
|
+
require('./object-491858d1.cjs');
|
|
17
17
|
require('./traits.cjs');
|
|
18
|
-
require('./encoding-
|
|
18
|
+
require('./encoding-62f41e96.cjs');
|
|
19
19
|
require('./number-466d8922.cjs');
|
|
20
20
|
require('./binary-ac8e39e2.cjs');
|
|
21
|
-
require('./decoding-
|
|
21
|
+
require('./decoding-9732ddf2.cjs');
|
|
22
22
|
require('./error-8582d695.cjs');
|
|
23
23
|
|
|
24
24
|
function _interopNamespace(e) {
|
package/dist/rabin-uncached.cjs
CHANGED
|
@@ -3,21 +3,21 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var math = require('./math-08e068f9.cjs');
|
|
6
|
-
var buffer = require('./buffer-
|
|
7
|
-
require('./string-
|
|
8
|
-
require('./array-
|
|
6
|
+
var buffer = require('./buffer-cba90761.cjs');
|
|
7
|
+
require('./string-04e96f2d.cjs');
|
|
8
|
+
require('./array-f5410bdd.cjs');
|
|
9
9
|
require('./set-a0a3ea69.cjs');
|
|
10
|
-
require('./environment-
|
|
10
|
+
require('./environment-2789c99d.cjs');
|
|
11
11
|
require('./map-0dabcc55.cjs');
|
|
12
12
|
require('./conditions-f5c0c102.cjs');
|
|
13
13
|
require('./storage.cjs');
|
|
14
|
-
require('./function-
|
|
15
|
-
require('./object-
|
|
14
|
+
require('./function-6c17de82.cjs');
|
|
15
|
+
require('./object-491858d1.cjs');
|
|
16
16
|
require('./traits.cjs');
|
|
17
|
-
require('./encoding-
|
|
17
|
+
require('./encoding-62f41e96.cjs');
|
|
18
18
|
require('./number-466d8922.cjs');
|
|
19
19
|
require('./binary-ac8e39e2.cjs');
|
|
20
|
-
require('./decoding-
|
|
20
|
+
require('./decoding-9732ddf2.cjs');
|
|
21
21
|
require('./error-8582d695.cjs');
|
|
22
22
|
|
|
23
23
|
/**
|
package/dist/rabin.cjs
CHANGED
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var buffer = require('./buffer-
|
|
5
|
+
var buffer = require('./buffer-cba90761.cjs');
|
|
6
6
|
var map = require('./map-0dabcc55.cjs');
|
|
7
|
-
require('./string-
|
|
8
|
-
require('./array-
|
|
7
|
+
require('./string-04e96f2d.cjs');
|
|
8
|
+
require('./array-f5410bdd.cjs');
|
|
9
9
|
require('./set-a0a3ea69.cjs');
|
|
10
|
-
require('./environment-
|
|
10
|
+
require('./environment-2789c99d.cjs');
|
|
11
11
|
require('./conditions-f5c0c102.cjs');
|
|
12
12
|
require('./storage.cjs');
|
|
13
|
-
require('./function-
|
|
14
|
-
require('./object-
|
|
13
|
+
require('./function-6c17de82.cjs');
|
|
14
|
+
require('./object-491858d1.cjs');
|
|
15
15
|
require('./traits.cjs');
|
|
16
16
|
require('./math-08e068f9.cjs');
|
|
17
|
-
require('./encoding-
|
|
17
|
+
require('./encoding-62f41e96.cjs');
|
|
18
18
|
require('./number-466d8922.cjs');
|
|
19
19
|
require('./binary-ac8e39e2.cjs');
|
|
20
|
-
require('./decoding-
|
|
20
|
+
require('./decoding-9732ddf2.cjs');
|
|
21
21
|
require('./error-8582d695.cjs');
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.test.d.ts","sourceRoot":"","sources":["../random.test.js"],"names":[],"mappings":"AASO,+BAFI,EAAE,QAAQ,QAKpB;AAKM,+BAFI,EAAE,QAAQ,QA0BpB;AAKM,+BAFI,EAAE,QAAQ,QAyBpB;AAKM,+BAFI,EAAE,QAAQ,QAIpB;AAKM,uCAFI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"random.test.d.ts","sourceRoot":"","sources":["../random.test.js"],"names":[],"mappings":"AASO,+BAFI,EAAE,QAAQ,QAKpB;AAKM,+BAFI,EAAE,QAAQ,QA0BpB;AAKM,+BAFI,EAAE,QAAQ,QAyBpB;AAKM,+BAFI,EAAE,QAAQ,QAIpB;AAKM,uCAFI,EAAE,QAAQ,QAiBpB;mBA/FkB,cAAc"}
|
package/dist/schema.cjs
ADDED
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var object$1 = require('./object-491858d1.cjs');
|
|
6
|
+
var array$1 = require('./array-f5410bdd.cjs');
|
|
7
|
+
var error = require('./error-8582d695.cjs');
|
|
8
|
+
var environment = require('./environment-2789c99d.cjs');
|
|
9
|
+
require('./set-a0a3ea69.cjs');
|
|
10
|
+
require('./map-0dabcc55.cjs');
|
|
11
|
+
require('./string-04e96f2d.cjs');
|
|
12
|
+
require('./conditions-f5c0c102.cjs');
|
|
13
|
+
require('./storage.cjs');
|
|
14
|
+
require('./function-6c17de82.cjs');
|
|
15
|
+
require('./traits.cjs');
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @experimental WIP
|
|
19
|
+
*
|
|
20
|
+
* Simple & efficient schemas for your data.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @typedef {string|number|bigint|boolean|null|undefined} LiteralType
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @typedef {{ [k:string|number|symbol]: any }} AnyObject
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @template T
|
|
33
|
+
* @typedef {T extends $Schema<infer X> ? X : T} TypeOfSchema
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @template {readonly unknown[]} T
|
|
38
|
+
* @typedef {T extends []
|
|
39
|
+
* ? {}
|
|
40
|
+
* : T extends [infer First]
|
|
41
|
+
* ? First
|
|
42
|
+
* : T extends [infer First, ...infer Rest]
|
|
43
|
+
* ? First & Intersect<Rest>
|
|
44
|
+
* : never
|
|
45
|
+
* } Intersect
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @template {readonly unknown[]} T
|
|
50
|
+
* @typedef {T extends readonly [$Schema<infer First>, ...infer Rest] ? [First, ...ExtractTypesFromSchemaArray<Rest>] : [] } ExtractTypesFromSchemaArray
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @template T
|
|
55
|
+
* @typedef {T extends $Schema<infer S> ? $Schema<S> : never} CastToSchema
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @template {unknown[]} Arr
|
|
60
|
+
* @typedef {Arr extends [...unknown[], infer L] ? L : never} TupleLast
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @template {unknown[]} Arr
|
|
65
|
+
* @typedef {Arr extends [...infer Fs, unknown] ? Fs : never} TuplePop
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
const schemaSymbol = Symbol('0schema');
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @template T
|
|
72
|
+
*/
|
|
73
|
+
class $Schema {
|
|
74
|
+
get [schemaSymbol] () { return true }
|
|
75
|
+
/**
|
|
76
|
+
* Use `schema.validate(obj)` with a typed parameter that is already of typed to be an instance of
|
|
77
|
+
* Schema. Validate will check the structure of the parameter and return true iff the instance
|
|
78
|
+
* really is an instance of Schema.
|
|
79
|
+
*
|
|
80
|
+
* @param {T} o
|
|
81
|
+
* @return {boolean}
|
|
82
|
+
*/
|
|
83
|
+
validate (o) {
|
|
84
|
+
return this.check(o)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* c8 ignore start */
|
|
88
|
+
/**
|
|
89
|
+
* Similar to validate, but this method accepts untyped parameters.
|
|
90
|
+
*
|
|
91
|
+
* @param {any} _o
|
|
92
|
+
* @return {_o is T}
|
|
93
|
+
*/
|
|
94
|
+
check (_o) {
|
|
95
|
+
error.methodUnimplemented();
|
|
96
|
+
}
|
|
97
|
+
/* c8 ignore stop */
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @type {$Schema<T?>}
|
|
101
|
+
*/
|
|
102
|
+
get nullable () {
|
|
103
|
+
return union(this, null_)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @type {$Schema<T|undefined>}
|
|
108
|
+
*/
|
|
109
|
+
get optional () {
|
|
110
|
+
return union(this, undefined_)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Cast a variable to a specific type. Returns the casted value, or throws an exception otherwise.
|
|
115
|
+
* Use this if you know that the type is of a specific type and you just want to convince the type
|
|
116
|
+
* system.
|
|
117
|
+
*
|
|
118
|
+
* **Do not rely on these error messages!**
|
|
119
|
+
* Performs an assertion check only if not in a production environment.
|
|
120
|
+
*
|
|
121
|
+
* @param {any} o
|
|
122
|
+
* @return {o extends T ? T : never}
|
|
123
|
+
*/
|
|
124
|
+
cast (o) {
|
|
125
|
+
assert(o, this);
|
|
126
|
+
return o
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Ensures that a variable is a a specific type. Returns the value, or throws an exception if the assertion check failed.
|
|
131
|
+
* Use this if you know that the type is of a specific type and you just want to convince the type
|
|
132
|
+
* system.
|
|
133
|
+
*
|
|
134
|
+
* Can be useful when defining lambdas: `s.lambda(s.$number, s.$void).ensure((n) => n + 1)`
|
|
135
|
+
*
|
|
136
|
+
* **Do not rely on these error messages!**
|
|
137
|
+
* Performs an assertion check if not in a production environment.
|
|
138
|
+
*
|
|
139
|
+
* @param {T} o
|
|
140
|
+
* @return {o extends T ? T : never}
|
|
141
|
+
*/
|
|
142
|
+
ensure (o) {
|
|
143
|
+
assert(o, this);
|
|
144
|
+
return o
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* @template {(new (...args:any[]) => any) | ((...args:any[]) => any)} C
|
|
150
|
+
* @extends {$Schema<C extends ((...args:any[]) => infer T) ? T : (C extends (new (...args:any[]) => any) ? InstanceType<C> : never)>}
|
|
151
|
+
*/
|
|
152
|
+
class $ConstructedBy extends $Schema {
|
|
153
|
+
/**
|
|
154
|
+
* @param {C} c
|
|
155
|
+
*/
|
|
156
|
+
constructor (c) {
|
|
157
|
+
super();
|
|
158
|
+
this.v = c;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* @param {any} o
|
|
163
|
+
* @return {o is C extends ((...args:any[]) => infer T) ? T : (C extends (new (...args:any[]) => any) ? InstanceType<C> : never)} o
|
|
164
|
+
*/
|
|
165
|
+
check (o) {
|
|
166
|
+
return o?.constructor === this.v
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* @template {(new (...args:any[]) => any) | ((...args:any[]) => any)} C
|
|
172
|
+
* @param {C} c
|
|
173
|
+
* @return {CastToSchema<$ConstructedBy<C>>}
|
|
174
|
+
*/
|
|
175
|
+
const constructedBy = c => new $ConstructedBy(c);
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* @template {LiteralType} T
|
|
179
|
+
* @extends {$Schema<T>}
|
|
180
|
+
*/
|
|
181
|
+
class $Literal extends $Schema {
|
|
182
|
+
/**
|
|
183
|
+
* @param {Array<T>} literals
|
|
184
|
+
*/
|
|
185
|
+
constructor (literals) {
|
|
186
|
+
super();
|
|
187
|
+
this.v = literals;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* @param {any} o
|
|
192
|
+
* @return {o is T}
|
|
193
|
+
*/
|
|
194
|
+
check (o) {
|
|
195
|
+
return this.v.some(a => a === o)
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* @template {LiteralType[]} T
|
|
201
|
+
* @param {T} literals
|
|
202
|
+
* @return {CastToSchema<$Literal<T[number]>>}
|
|
203
|
+
*/
|
|
204
|
+
const literal = (...literals) => new $Literal(literals);
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* @template {{[key:string|symbol|number]: $Schema<any>}} S
|
|
208
|
+
* @extends {$Schema<{ [Key in keyof S]: S[Key] extends $Schema<infer Type> ? Type : never }>}
|
|
209
|
+
*/
|
|
210
|
+
class $Object extends $Schema {
|
|
211
|
+
/**
|
|
212
|
+
* @param {S} v
|
|
213
|
+
*/
|
|
214
|
+
constructor (v) {
|
|
215
|
+
super();
|
|
216
|
+
this.v = v;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* @param {any} o
|
|
221
|
+
* @return {o is { [K in keyof S]: S[K] extends $Schema<infer Type> ? Type : never }}
|
|
222
|
+
*/
|
|
223
|
+
check (o) {
|
|
224
|
+
return o != null && object$1.every(this.v, (vv, vk) => vv.check(o[vk]))
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* @template {{ [key:string|symbol|number]: $Schema<any> }} T
|
|
230
|
+
* @param {T} def
|
|
231
|
+
* @return {CastToSchema<$Object<T>>}
|
|
232
|
+
*/
|
|
233
|
+
const object = def => new $Object(def);
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* @template {$Schema<string|number|symbol>} Keys
|
|
237
|
+
* @template {$Schema<any>} Values
|
|
238
|
+
* @extends {$Schema<Record<Keys extends $Schema<infer K> ? K : never,Values extends $Schema<infer T> ? T : never>>}
|
|
239
|
+
*/
|
|
240
|
+
class $Record extends $Schema {
|
|
241
|
+
/**
|
|
242
|
+
* @param {Keys} keys
|
|
243
|
+
* @param {Values} values
|
|
244
|
+
*/
|
|
245
|
+
constructor (keys, values) {
|
|
246
|
+
super();
|
|
247
|
+
this.keys = keys;
|
|
248
|
+
this.values = values;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* @param {any} o
|
|
253
|
+
* @return {o is Record<Keys extends $Schema<infer K> ? K : never,Values extends $Schema<infer T> ? T : never>}
|
|
254
|
+
*/
|
|
255
|
+
check (o) {
|
|
256
|
+
return o != null && object$1.every(o, (vv, vk) => this.keys.check(vk) && this.values.check(vv))
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* @template {$Schema<string|number|symbol>} Keys
|
|
262
|
+
* @template {$Schema<any>} Values
|
|
263
|
+
* @param {Keys} keys
|
|
264
|
+
* @param {Values} values
|
|
265
|
+
* @return {CastToSchema<$Record<Keys,Values>>}
|
|
266
|
+
*/
|
|
267
|
+
const record = (keys, values) => new $Record(keys, values);
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* @template {$Schema<any>[]} S
|
|
271
|
+
* @extends {$Schema<{ [Key in keyof S]: S[Key] extends $Schema<infer Type> ? Type : never }>}
|
|
272
|
+
*/
|
|
273
|
+
class $Tuple extends $Schema {
|
|
274
|
+
/**
|
|
275
|
+
* @param {S} v
|
|
276
|
+
*/
|
|
277
|
+
constructor (v) {
|
|
278
|
+
super();
|
|
279
|
+
this.v = v;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* @param {any} o
|
|
284
|
+
* @return {o is { [K in keyof S]: S[K] extends $Schema<infer Type> ? Type : never }}
|
|
285
|
+
*/
|
|
286
|
+
check (o) {
|
|
287
|
+
return o != null && object$1.every(this.v, (vv, vk) => /** @type {$Schema<any>} */ (vv).check(o[vk]))
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* @template {Array<$Schema<any>>} T
|
|
293
|
+
* @param {T} def
|
|
294
|
+
* @return {CastToSchema<$Tuple<T>>}
|
|
295
|
+
*/
|
|
296
|
+
const tuple = (...def) => new $Tuple(def);
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* @template {$Schema<any>} S
|
|
300
|
+
* @extends {$Schema<Array<S extends $Schema<infer T> ? T : never>>}
|
|
301
|
+
*/
|
|
302
|
+
class $Array extends $Schema {
|
|
303
|
+
/**
|
|
304
|
+
* @param {Array<S>} v
|
|
305
|
+
*/
|
|
306
|
+
constructor (v) {
|
|
307
|
+
super();
|
|
308
|
+
/**
|
|
309
|
+
* @type {$Schema<S extends $Schema<infer T> ? T : never>}
|
|
310
|
+
*/
|
|
311
|
+
this.v = v.length === 1 ? v[0] : new $Union(v);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* @param {any} o
|
|
316
|
+
* @return {o is Array<S extends $Schema<infer T> ? T : never>} o
|
|
317
|
+
*/
|
|
318
|
+
check (o) {
|
|
319
|
+
return array$1.isArray(o) && array$1.every(o, oi => this.v.check(oi))
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* @template {Array<$Schema<any>>} T
|
|
325
|
+
* @param {T} def
|
|
326
|
+
* @return {$Schema<Array<T extends Array<$Schema<infer S>> ? S : never>>}
|
|
327
|
+
*/
|
|
328
|
+
const array = (...def) => new $Array(def);
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* @template T
|
|
332
|
+
* @extends {$Schema<T>}
|
|
333
|
+
*/
|
|
334
|
+
class $InstanceOf extends $Schema {
|
|
335
|
+
/**
|
|
336
|
+
* @param {new (...args:any) => T} constructor
|
|
337
|
+
*/
|
|
338
|
+
constructor (constructor) {
|
|
339
|
+
super();
|
|
340
|
+
this.v = constructor;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* @param {any} o
|
|
345
|
+
* @return {o is T}
|
|
346
|
+
*/
|
|
347
|
+
check (o) {
|
|
348
|
+
return o instanceof this.v
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* @template T
|
|
354
|
+
* @param {new (...args:any) => T} c
|
|
355
|
+
* @return {$Schema<T>}
|
|
356
|
+
*/
|
|
357
|
+
const instance = c => new $InstanceOf(c);
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* @template {$Schema<any>[]} Args
|
|
361
|
+
* @typedef {(...args:ExtractTypesFromSchemaArray<TuplePop<Args>>)=>TypeOfSchema<TupleLast<Args>>} _LArgsToLambdaDef
|
|
362
|
+
*/
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* @template {Array<$Schema<any>>} Args
|
|
366
|
+
* @extends {$Schema<_LArgsToLambdaDef<Args>>}
|
|
367
|
+
*/
|
|
368
|
+
class $Lambda extends $Schema {
|
|
369
|
+
/**
|
|
370
|
+
* @param {Args} args
|
|
371
|
+
*/
|
|
372
|
+
constructor (args) {
|
|
373
|
+
super();
|
|
374
|
+
this.len = args.length - 1;
|
|
375
|
+
this.args = tuple(...args.slice(-1));
|
|
376
|
+
this.res = args[this.len];
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* @param {any} f
|
|
381
|
+
* @return {f is _LArgsToLambdaDef<Args>}
|
|
382
|
+
*/
|
|
383
|
+
check (f) {
|
|
384
|
+
return f.constructor === Function && f.length <= this.len
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* @template {$Schema<any>[]} Args
|
|
390
|
+
* @param {Args} args
|
|
391
|
+
* @return {$Schema<(...args:ExtractTypesFromSchemaArray<TuplePop<Args>>)=>TypeOfSchema<TupleLast<Args>>>}
|
|
392
|
+
*/
|
|
393
|
+
const lambda = (...args) => new $Lambda(args.length > 0 ? args : [void_]);
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* @template {Array<$Schema<any>>} T
|
|
397
|
+
* @extends {$Schema<Intersect<ExtractTypesFromSchemaArray<T>>>}
|
|
398
|
+
*/
|
|
399
|
+
class $Intersection extends $Schema {
|
|
400
|
+
/**
|
|
401
|
+
* @param {T} v
|
|
402
|
+
*/
|
|
403
|
+
constructor (v) {
|
|
404
|
+
super();
|
|
405
|
+
/**
|
|
406
|
+
* @type {T}
|
|
407
|
+
*/
|
|
408
|
+
this.v = v;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* @param {any} o
|
|
413
|
+
* @return {o is Intersect<ExtractTypesFromSchemaArray<T>>}
|
|
414
|
+
*/
|
|
415
|
+
check (o) {
|
|
416
|
+
// @ts-ignore
|
|
417
|
+
return array$1.every(this.v, check => check.check(o))
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* @template {$Schema<any>[]} T
|
|
423
|
+
* @param {T} def
|
|
424
|
+
* @return {CastToSchema<$Intersection<T>>}
|
|
425
|
+
*/
|
|
426
|
+
const intersect = (...def) => new $Intersection(def);
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* @template S
|
|
430
|
+
* @extends {$Schema<S>}
|
|
431
|
+
*/
|
|
432
|
+
class $Union extends $Schema {
|
|
433
|
+
/**
|
|
434
|
+
* @param {Array<$Schema<S>>} v
|
|
435
|
+
*/
|
|
436
|
+
constructor (v) {
|
|
437
|
+
super();
|
|
438
|
+
this.v = v;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* @param {any} o
|
|
443
|
+
* @return {o is S}
|
|
444
|
+
*/
|
|
445
|
+
check (o) {
|
|
446
|
+
return array$1.some(this.v, (vv) => vv.check(o))
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
static schema = constructedBy($Union)
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* @template {Array<$Schema<any>>} T
|
|
454
|
+
* @param {T} def
|
|
455
|
+
* @return {CastToSchema<$Union<T extends Array<$Schema<infer S>> ? S : never>>}
|
|
456
|
+
*/
|
|
457
|
+
const union = (...def) => $Union.schema.check(def[0]) ? new $Union([...def[0].v, ...def.slice(1)]) : new $Union(def);
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* @type {$Schema<any>}
|
|
461
|
+
*/
|
|
462
|
+
const any = intersect();
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* @type {$Schema<bigint>}
|
|
466
|
+
*/
|
|
467
|
+
const bigint = constructedBy(BigInt);
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* @type {$Schema<Symbol>}
|
|
471
|
+
*/
|
|
472
|
+
const symbol = constructedBy(Symbol);
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* @type {$Schema<number>}
|
|
476
|
+
*/
|
|
477
|
+
const number = constructedBy(Number);
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* @type {$Schema<string>}
|
|
481
|
+
*/
|
|
482
|
+
const string = constructedBy(String);
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* @type {$Schema<undefined>}
|
|
486
|
+
*/
|
|
487
|
+
const undefined_ = literal(undefined);
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* @type {$Schema<void>}
|
|
491
|
+
*/
|
|
492
|
+
const void_ = undefined_;
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* @type {$Schema<null>}
|
|
496
|
+
*/
|
|
497
|
+
const null_ = literal(null);
|
|
498
|
+
|
|
499
|
+
/* c8 ignore start */
|
|
500
|
+
/**
|
|
501
|
+
* Assert that a variable is of this specific type.
|
|
502
|
+
* The assertion check is only performed in non-production environments.
|
|
503
|
+
*
|
|
504
|
+
* @type {<T>(o:any,schema:$Schema<T>) => asserts o is T}
|
|
505
|
+
*/
|
|
506
|
+
const assert = environment.production
|
|
507
|
+
? () => {}
|
|
508
|
+
: (o, schema) => {
|
|
509
|
+
if (!schema.check(o)) {
|
|
510
|
+
throw error.create(`Expected value to be of type ${schema.constructor.name}.`)
|
|
511
|
+
}
|
|
512
|
+
};
|
|
513
|
+
/* c8 ignore end */
|
|
514
|
+
|
|
515
|
+
exports.$Array = $Array;
|
|
516
|
+
exports.$ConstructedBy = $ConstructedBy;
|
|
517
|
+
exports.$InstanceOf = $InstanceOf;
|
|
518
|
+
exports.$Intersection = $Intersection;
|
|
519
|
+
exports.$Lambda = $Lambda;
|
|
520
|
+
exports.$Literal = $Literal;
|
|
521
|
+
exports.$Object = $Object;
|
|
522
|
+
exports.$Record = $Record;
|
|
523
|
+
exports.$Schema = $Schema;
|
|
524
|
+
exports.$Tuple = $Tuple;
|
|
525
|
+
exports.$Union = $Union;
|
|
526
|
+
exports.any = any;
|
|
527
|
+
exports.array = array;
|
|
528
|
+
exports.assert = assert;
|
|
529
|
+
exports.bigint = bigint;
|
|
530
|
+
exports.constructedBy = constructedBy;
|
|
531
|
+
exports.instance = instance;
|
|
532
|
+
exports.intersect = intersect;
|
|
533
|
+
exports.lambda = lambda;
|
|
534
|
+
exports.literal = literal;
|
|
535
|
+
exports["null"] = null_;
|
|
536
|
+
exports.number = number;
|
|
537
|
+
exports.object = object;
|
|
538
|
+
exports.record = record;
|
|
539
|
+
exports.string = string;
|
|
540
|
+
exports.symbol = symbol;
|
|
541
|
+
exports.tuple = tuple;
|
|
542
|
+
exports["undefined"] = undefined_;
|
|
543
|
+
exports.union = union;
|
|
544
|
+
exports["void"] = void_;
|
|
545
|
+
//# sourceMappingURL=schema.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.cjs","sources":["../schema.js"],"sourcesContent":["/**\n * @experimental WIP\n *\n * Simple & efficient schemas for your data.\n */\n\nimport * as obj from './object.js'\nimport * as arr from './array.js'\nimport * as error from './error.js'\nimport * as env from './environment.js'\n\n/**\n * @typedef {string|number|bigint|boolean|null|undefined} LiteralType\n */\n\n/**\n * @typedef {{ [k:string|number|symbol]: any }} AnyObject\n */\n\n/**\n * @template T\n * @typedef {T extends $Schema<infer X> ? X : T} TypeOfSchema\n */\n\n/**\n * @template {readonly unknown[]} T\n * @typedef {T extends []\n * ? {}\n * : T extends [infer First]\n * ? First\n * : T extends [infer First, ...infer Rest]\n * ? First & Intersect<Rest>\n * : never\n * } Intersect\n */\n\n/**\n * @template {readonly unknown[]} T\n * @typedef {T extends readonly [$Schema<infer First>, ...infer Rest] ? [First, ...ExtractTypesFromSchemaArray<Rest>] : [] } ExtractTypesFromSchemaArray\n */\n\n/**\n * @template T\n * @typedef {T extends $Schema<infer S> ? $Schema<S> : never} CastToSchema\n */\n\n/**\n * @template {unknown[]} Arr\n * @typedef {Arr extends [...unknown[], infer L] ? L : never} TupleLast\n */\n\n/**\n * @template {unknown[]} Arr\n * @typedef {Arr extends [...infer Fs, unknown] ? Fs : never} TuplePop\n */\n\nconst schemaSymbol = Symbol('0schema')\n\n/**\n * @template T\n */\nexport class $Schema {\n get [schemaSymbol] () { return true }\n /**\n * Use `schema.validate(obj)` with a typed parameter that is already of typed to be an instance of\n * Schema. Validate will check the structure of the parameter and return true iff the instance\n * really is an instance of Schema.\n *\n * @param {T} o\n * @return {boolean}\n */\n validate (o) {\n return this.check(o)\n }\n\n /* c8 ignore start */\n /**\n * Similar to validate, but this method accepts untyped parameters.\n *\n * @param {any} _o\n * @return {_o is T}\n */\n check (_o) {\n error.methodUnimplemented()\n }\n /* c8 ignore stop */\n\n /**\n * @type {$Schema<T?>}\n */\n get nullable () {\n return union(this, null_)\n }\n\n /**\n * @type {$Schema<T|undefined>}\n */\n get optional () {\n return union(this, undefined_)\n }\n\n /**\n * Cast a variable to a specific type. Returns the casted value, or throws an exception otherwise.\n * Use this if you know that the type is of a specific type and you just want to convince the type\n * system.\n *\n * **Do not rely on these error messages!**\n * Performs an assertion check only if not in a production environment.\n *\n * @param {any} o\n * @return {o extends T ? T : never}\n */\n cast (o) {\n assert(o, this)\n return o\n }\n\n /**\n * Ensures that a variable is a a specific type. Returns the value, or throws an exception if the assertion check failed.\n * Use this if you know that the type is of a specific type and you just want to convince the type\n * system.\n *\n * Can be useful when defining lambdas: `s.lambda(s.$number, s.$void).ensure((n) => n + 1)`\n *\n * **Do not rely on these error messages!**\n * Performs an assertion check if not in a production environment.\n *\n * @param {T} o\n * @return {o extends T ? T : never}\n */\n ensure (o) {\n assert(o, this)\n return o\n }\n}\n\n/**\n * @template {(new (...args:any[]) => any) | ((...args:any[]) => any)} C\n * @extends {$Schema<C extends ((...args:any[]) => infer T) ? T : (C extends (new (...args:any[]) => any) ? InstanceType<C> : never)>}\n */\nexport class $ConstructedBy extends $Schema {\n /**\n * @param {C} c\n */\n constructor (c) {\n super()\n this.v = c\n }\n\n /**\n * @param {any} o\n * @return {o is C extends ((...args:any[]) => infer T) ? T : (C extends (new (...args:any[]) => any) ? InstanceType<C> : never)} o\n */\n check (o) {\n return o?.constructor === this.v\n }\n}\n\n/**\n * @template {(new (...args:any[]) => any) | ((...args:any[]) => any)} C\n * @param {C} c\n * @return {CastToSchema<$ConstructedBy<C>>}\n */\nexport const constructedBy = c => new $ConstructedBy(c)\n\n/**\n * @template {LiteralType} T\n * @extends {$Schema<T>}\n */\nexport class $Literal extends $Schema {\n /**\n * @param {Array<T>} literals\n */\n constructor (literals) {\n super()\n this.v = literals\n }\n\n /**\n * @param {any} o\n * @return {o is T}\n */\n check (o) {\n return this.v.some(a => a === o)\n }\n}\n\n/**\n * @template {LiteralType[]} T\n * @param {T} literals\n * @return {CastToSchema<$Literal<T[number]>>}\n */\nexport const literal = (...literals) => new $Literal(literals)\n\n/**\n * @template {{[key:string|symbol|number]: $Schema<any>}} S\n * @extends {$Schema<{ [Key in keyof S]: S[Key] extends $Schema<infer Type> ? Type : never }>}\n */\nexport class $Object extends $Schema {\n /**\n * @param {S} v\n */\n constructor (v) {\n super()\n this.v = v\n }\n\n /**\n * @param {any} o\n * @return {o is { [K in keyof S]: S[K] extends $Schema<infer Type> ? Type : never }}\n */\n check (o) {\n return o != null && obj.every(this.v, (vv, vk) => vv.check(o[vk]))\n }\n}\n\n/**\n * @template {{ [key:string|symbol|number]: $Schema<any> }} T\n * @param {T} def\n * @return {CastToSchema<$Object<T>>}\n */\nexport const object = def => new $Object(def)\n\n/**\n * @template {$Schema<string|number|symbol>} Keys\n * @template {$Schema<any>} Values\n * @extends {$Schema<Record<Keys extends $Schema<infer K> ? K : never,Values extends $Schema<infer T> ? T : never>>}\n */\nexport class $Record extends $Schema {\n /**\n * @param {Keys} keys\n * @param {Values} values\n */\n constructor (keys, values) {\n super()\n this.keys = keys\n this.values = values\n }\n\n /**\n * @param {any} o\n * @return {o is Record<Keys extends $Schema<infer K> ? K : never,Values extends $Schema<infer T> ? T : never>}\n */\n check (o) {\n return o != null && obj.every(o, (vv, vk) => this.keys.check(vk) && this.values.check(vv))\n }\n}\n\n/**\n * @template {$Schema<string|number|symbol>} Keys\n * @template {$Schema<any>} Values\n * @param {Keys} keys\n * @param {Values} values\n * @return {CastToSchema<$Record<Keys,Values>>}\n */\nexport const record = (keys, values) => new $Record(keys, values)\n\n/**\n * @template {$Schema<any>[]} S\n * @extends {$Schema<{ [Key in keyof S]: S[Key] extends $Schema<infer Type> ? Type : never }>}\n */\nexport class $Tuple extends $Schema {\n /**\n * @param {S} v\n */\n constructor (v) {\n super()\n this.v = v\n }\n\n /**\n * @param {any} o\n * @return {o is { [K in keyof S]: S[K] extends $Schema<infer Type> ? Type : never }}\n */\n check (o) {\n return o != null && obj.every(this.v, (vv, vk) => /** @type {$Schema<any>} */ (vv).check(o[vk]))\n }\n}\n\n/**\n * @template {Array<$Schema<any>>} T\n * @param {T} def\n * @return {CastToSchema<$Tuple<T>>}\n */\nexport const tuple = (...def) => new $Tuple(def)\n\n/**\n * @template {$Schema<any>} S\n * @extends {$Schema<Array<S extends $Schema<infer T> ? T : never>>}\n */\nexport class $Array extends $Schema {\n /**\n * @param {Array<S>} v\n */\n constructor (v) {\n super()\n /**\n * @type {$Schema<S extends $Schema<infer T> ? T : never>}\n */\n this.v = v.length === 1 ? v[0] : new $Union(v)\n }\n\n /**\n * @param {any} o\n * @return {o is Array<S extends $Schema<infer T> ? T : never>} o\n */\n check (o) {\n return arr.isArray(o) && arr.every(o, oi => this.v.check(oi))\n }\n}\n\n/**\n * @template {Array<$Schema<any>>} T\n * @param {T} def\n * @return {$Schema<Array<T extends Array<$Schema<infer S>> ? S : never>>}\n */\nexport const array = (...def) => new $Array(def)\n\n/**\n * @template T\n * @extends {$Schema<T>}\n */\nexport class $InstanceOf extends $Schema {\n /**\n * @param {new (...args:any) => T} constructor\n */\n constructor (constructor) {\n super()\n this.v = constructor\n }\n\n /**\n * @param {any} o\n * @return {o is T}\n */\n check (o) {\n return o instanceof this.v\n }\n}\n\n/**\n * @template T\n * @param {new (...args:any) => T} c\n * @return {$Schema<T>}\n */\nexport const instance = c => new $InstanceOf(c)\n\n/**\n * @template {$Schema<any>[]} Args\n * @typedef {(...args:ExtractTypesFromSchemaArray<TuplePop<Args>>)=>TypeOfSchema<TupleLast<Args>>} _LArgsToLambdaDef\n */\n\n/**\n * @template {Array<$Schema<any>>} Args\n * @extends {$Schema<_LArgsToLambdaDef<Args>>}\n */\nexport class $Lambda extends $Schema {\n /**\n * @param {Args} args\n */\n constructor (args) {\n super()\n this.len = args.length - 1\n this.args = tuple(...args.slice(-1))\n this.res = args[this.len]\n }\n\n /**\n * @param {any} f\n * @return {f is _LArgsToLambdaDef<Args>}\n */\n check (f) {\n return f.constructor === Function && f.length <= this.len\n }\n}\n\n/**\n * @template {$Schema<any>[]} Args\n * @param {Args} args\n * @return {$Schema<(...args:ExtractTypesFromSchemaArray<TuplePop<Args>>)=>TypeOfSchema<TupleLast<Args>>>}\n */\nexport const lambda = (...args) => new $Lambda(args.length > 0 ? args : [void_])\n\n/**\n * @template {Array<$Schema<any>>} T\n * @extends {$Schema<Intersect<ExtractTypesFromSchemaArray<T>>>}\n */\nexport class $Intersection extends $Schema {\n /**\n * @param {T} v\n */\n constructor (v) {\n super()\n /**\n * @type {T}\n */\n this.v = v\n }\n\n /**\n * @param {any} o\n * @return {o is Intersect<ExtractTypesFromSchemaArray<T>>}\n */\n check (o) {\n // @ts-ignore\n return arr.every(this.v, check => check.check(o))\n }\n}\n\n/**\n * @template {$Schema<any>[]} T\n * @param {T} def\n * @return {CastToSchema<$Intersection<T>>}\n */\nexport const intersect = (...def) => new $Intersection(def)\n\n/**\n * @template S\n * @extends {$Schema<S>}\n */\nexport class $Union extends $Schema {\n /**\n * @param {Array<$Schema<S>>} v\n */\n constructor (v) {\n super()\n this.v = v\n }\n\n /**\n * @param {any} o\n * @return {o is S}\n */\n check (o) {\n return arr.some(this.v, (vv) => vv.check(o))\n }\n\n static schema = constructedBy($Union)\n}\n\n/**\n * @template {Array<$Schema<any>>} T\n * @param {T} def\n * @return {CastToSchema<$Union<T extends Array<$Schema<infer S>> ? S : never>>}\n */\nexport const union = (...def) => $Union.schema.check(def[0]) ? new $Union([...def[0].v, ...def.slice(1)]) : new $Union(def)\n\n/**\n * @type {$Schema<any>}\n */\nexport const any = intersect()\n\n/**\n * @type {$Schema<bigint>}\n */\nexport const bigint = constructedBy(BigInt)\n\n/**\n * @type {$Schema<Symbol>}\n */\nexport const symbol = constructedBy(Symbol)\n\n/**\n * @type {$Schema<number>}\n */\nexport const number = constructedBy(Number)\n\n/**\n * @type {$Schema<string>}\n */\nexport const string = constructedBy(String)\n\n/**\n * @type {$Schema<undefined>}\n */\nconst undefined_ = literal(undefined)\n\n/**\n * @type {$Schema<void>}\n */\nconst void_ = undefined_\n\n/**\n * @type {$Schema<null>}\n */\nconst null_ = literal(null)\n\nexport { null_ as null, void_ as void, undefined_ as undefined }\n\n/* c8 ignore start */\n/**\n * Assert that a variable is of this specific type.\n * The assertion check is only performed in non-production environments.\n *\n * @type {<T>(o:any,schema:$Schema<T>) => asserts o is T}\n */\nexport const assert = env.production\n ? () => {}\n : (o, schema) => {\n if (!schema.check(o)) {\n throw error.create(`Expected value to be of type ${schema.constructor.name}.`)\n }\n }\n/* c8 ignore end */\n"],"names":["error.methodUnimplemented","obj.every","arr.isArray","arr.every","arr.some","env.production","error.create"],"mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,EAAC;AACtC;AACA;AACA;AACA;AACO,MAAM,OAAO,CAAC;AACrB,EAAE,KAAK,YAAY,EAAE,GAAG,EAAE,OAAO,IAAI,EAAE;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;AACf,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACxB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE;AACb,IAAIA,yBAAyB,GAAE;AAC/B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,CAAC,GAAG;AAClB,IAAI,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,CAAC,GAAG;AAClB,IAAI,OAAO,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;AACX,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,EAAC;AACnB,IAAI,OAAO,CAAC;AACZ,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;AACb,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,EAAC;AACnB,IAAI,OAAO,CAAC;AACZ,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"}
|