lib0 0.2.110 → 0.2.112
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 +15 -15
- package/array.d.ts.map +1 -1
- package/array.test.d.ts.map +1 -1
- package/binary.d.ts.map +1 -1
- package/binary.test.d.ts.map +1 -1
- package/broadcastchannel.d.ts.map +1 -1
- package/broadcastchannel.test.d.ts.map +1 -1
- package/buffer.d.ts +6 -6
- package/buffer.d.ts.map +1 -1
- package/buffer.test.d.ts.map +1 -1
- package/cache.d.ts +3 -3
- package/cache.d.ts.map +1 -1
- package/cache.test.d.ts.map +1 -1
- package/component.d.ts +3 -3
- package/component.d.ts.map +1 -1
- package/component.js +1 -1
- package/conditions.d.ts.map +1 -1
- package/coverage/tmp/coverage-20054-1752683240888-0.json +1 -0
- package/coverage/tmp/{coverage-19939-1752497665435-0.json → coverage-20055-1752683207886-0.json} +1 -1
- package/crypto/aes-gcm.d.ts +2 -2
- package/crypto/aes-gcm.d.ts.map +1 -1
- package/crypto/common.d.ts.map +1 -1
- package/crypto/ecdsa.d.ts +1 -1
- package/crypto/ecdsa.d.ts.map +1 -1
- package/crypto/rsa-oaep.d.ts +1 -1
- package/crypto/rsa-oaep.d.ts.map +1 -1
- package/crypto.test.d.ts.map +1 -1
- package/decoding.d.ts +1 -1
- package/decoding.d.ts.map +1 -1
- package/diff/patience.d.ts.map +1 -1
- package/diff/patience.test.d.ts.map +1 -1
- package/diff.d.ts +2 -3
- package/diff.d.ts.map +1 -1
- package/diff.js +1 -3
- package/diff.test.d.ts.map +1 -1
- package/dist/aes-gcm.cjs +5 -5
- package/dist/{array-f5410bdd.cjs → array-78849c95.cjs} +2 -2
- package/dist/{array-f5410bdd.cjs.map → array-78849c95.cjs.map} +1 -1
- package/dist/array.cjs +2 -2
- package/dist/array.d.ts +15 -15
- package/dist/array.d.ts.map +1 -1
- package/dist/array.test.d.ts.map +1 -1
- package/dist/binary.d.ts.map +1 -1
- package/dist/binary.test.d.ts.map +1 -1
- package/dist/{broadcastchannel-7479dcb7.cjs → broadcastchannel-2c4b0a1c.cjs} +3 -3
- package/dist/{broadcastchannel-7479dcb7.cjs.map → broadcastchannel-2c4b0a1c.cjs.map} +1 -1
- package/dist/broadcastchannel.cjs +9 -9
- package/dist/broadcastchannel.d.ts.map +1 -1
- package/dist/broadcastchannel.test.d.ts.map +1 -1
- package/dist/{buffer-cba90761.cjs → buffer-a74f7330.cjs} +6 -6
- package/dist/{buffer-cba90761.cjs.map → buffer-a74f7330.cjs.map} +1 -1
- package/dist/buffer.cjs +8 -8
- package/dist/buffer.d.ts +6 -6
- package/dist/buffer.d.ts.map +1 -1
- package/dist/buffer.test.d.ts.map +1 -1
- package/dist/cache.cjs +3 -3
- package/dist/cache.d.ts +3 -3
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.test.d.ts.map +1 -1
- package/dist/component.cjs +6 -6
- package/dist/component.cjs.map +1 -1
- package/dist/component.d.ts +3 -3
- package/dist/component.d.ts.map +1 -1
- package/dist/conditions.d.ts.map +1 -1
- package/dist/crypto/aes-gcm.d.ts +2 -2
- package/dist/crypto/aes-gcm.d.ts.map +1 -1
- package/dist/crypto/common.d.ts.map +1 -1
- package/dist/crypto/ecdsa.d.ts +1 -1
- package/dist/crypto/ecdsa.d.ts.map +1 -1
- package/dist/crypto/rsa-oaep.d.ts +1 -1
- package/dist/crypto/rsa-oaep.d.ts.map +1 -1
- package/dist/crypto.test.d.ts.map +1 -1
- package/dist/{decoding-9732ddf2.cjs → decoding-2b136346.cjs} +3 -3
- package/dist/{decoding-9732ddf2.cjs.map → decoding-2b136346.cjs.map} +1 -1
- package/dist/decoding.cjs +5 -5
- package/dist/decoding.d.ts +1 -1
- package/dist/decoding.d.ts.map +1 -1
- package/dist/diff/patience.d.ts.map +1 -1
- package/dist/diff/patience.test.d.ts.map +1 -1
- package/dist/{diff-63d13d0f.cjs → diff-77c4cf8e.cjs} +3 -5
- package/dist/diff-77c4cf8e.cjs.map +1 -0
- package/dist/diff.cjs +4 -4
- package/dist/diff.d.ts +2 -3
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.test.d.ts.map +1 -1
- package/dist/dom.d.ts.map +1 -1
- package/dist/{encoding-62f41e96.cjs → encoding-1acb59c4.cjs} +3 -3
- package/dist/{encoding-62f41e96.cjs.map → encoding-1acb59c4.cjs.map} +1 -1
- package/dist/encoding.cjs +4 -4
- package/dist/encoding.d.ts +6 -6
- package/dist/encoding.d.ts.map +1 -1
- package/dist/encoding.test.d.ts.map +1 -1
- package/dist/{environment-2789c99d.cjs → environment-2de08e0e.cjs} +3 -3
- package/dist/{environment-2789c99d.cjs.map → environment-2de08e0e.cjs.map} +1 -1
- package/dist/environment.cjs +5 -5
- package/dist/eventloop.d.ts.map +1 -1
- package/dist/eventloop.test.d.ts.map +1 -1
- package/dist/{function-6c17de82.cjs → function-09b8292c.cjs} +2 -2
- package/dist/{function-6c17de82.cjs.map → function-09b8292c.cjs.map} +1 -1
- package/dist/function.cjs +3 -3
- package/dist/function.d.ts +8 -3
- package/dist/function.d.ts.map +1 -1
- package/dist/function.test.d.ts.map +1 -1
- package/dist/hash/rabin-gf2-polynomial.d.ts +3 -3
- package/dist/hash/rabin-gf2-polynomial.d.ts.map +1 -1
- package/dist/hash/rabin-uncached.d.ts +3 -3
- package/dist/hash/rabin-uncached.d.ts.map +1 -1
- package/dist/hash/rabin.d.ts +10 -10
- package/dist/hash/rabin.d.ts.map +1 -1
- package/dist/hash/rabin.test.d.ts.map +1 -1
- package/dist/hash/sha256.d.ts +1 -1
- package/dist/hash/sha256.d.ts.map +1 -1
- package/dist/hash/sha256.node.d.ts +1 -1
- package/dist/hash/sha256.node.d.ts.map +1 -1
- package/dist/hash/sha256.test.d.ts.map +1 -1
- package/dist/index.cjs +12 -12
- package/dist/indexeddb.d.ts +11 -11
- package/dist/indexeddb.d.ts.map +1 -1
- package/dist/indexeddbV2.d.ts +9 -9
- package/dist/indexeddbV2.d.ts.map +1 -1
- package/dist/iterator.d.ts +4 -4
- package/dist/iterator.d.ts.map +1 -1
- package/dist/json.d.ts +3 -3
- package/dist/json.d.ts.map +1 -1
- package/dist/jwt.cjs +8 -8
- package/dist/list.cjs +3 -3
- package/dist/list.d.ts +3 -3
- package/dist/list.d.ts.map +1 -1
- package/dist/list.test.d.ts.map +1 -1
- package/dist/logging.cjs +5 -5
- package/dist/logging.common.cjs +5 -5
- package/dist/logging.common.d.ts.map +1 -1
- package/dist/logging.d.ts.map +1 -1
- package/dist/logging.node.cjs +5 -5
- package/dist/logging.node.d.ts.map +1 -1
- package/dist/map.d.ts +1 -1
- package/dist/map.d.ts.map +1 -1
- package/dist/map.test.d.ts.map +1 -1
- package/dist/math.test.d.ts.map +1 -1
- package/dist/metric.d.ts +1 -1
- package/dist/metric.d.ts.map +1 -1
- package/dist/metric.test.d.ts.map +1 -1
- package/dist/mutex.d.ts.map +1 -1
- package/dist/number.d.ts +1 -1
- package/dist/number.d.ts.map +1 -1
- package/dist/number.test.d.ts.map +1 -1
- package/dist/object.d.ts +9 -13
- package/dist/object.d.ts.map +1 -1
- package/dist/object.test.d.ts.map +1 -1
- package/dist/observable.cjs +2 -2
- package/dist/observable.d.ts +4 -4
- package/dist/observable.d.ts.map +1 -1
- package/dist/observable.test.d.ts.map +1 -1
- package/dist/pair.d.ts +2 -2
- package/dist/pair.d.ts.map +1 -1
- package/dist/pair.test.d.ts.map +1 -1
- package/dist/patience.cjs +2 -2
- package/dist/performance.d.ts +3 -3
- package/dist/performance.d.ts.map +1 -1
- package/dist/performance.node.cjs +3 -3
- package/dist/performance.node.d.ts +0 -1
- package/dist/performance.node.d.ts.map +1 -1
- package/dist/pledge.d.ts +9 -9
- package/dist/pledge.d.ts.map +1 -1
- package/dist/pledge.test.d.ts.map +1 -1
- package/dist/prng/Mt19937.d.ts +1 -1
- package/dist/prng/Mt19937.d.ts.map +1 -1
- package/dist/prng/Xoroshiro128plus.d.ts +1 -1
- package/dist/prng/Xoroshiro128plus.d.ts.map +1 -1
- package/dist/{prng-6cd9a82d.cjs → prng-24dfe0bf.cjs} +3 -3
- package/dist/{prng-6cd9a82d.cjs.map → prng-24dfe0bf.cjs.map} +1 -1
- package/dist/prng.cjs +9 -9
- package/dist/prng.d.ts +3 -3
- package/dist/prng.d.ts.map +1 -1
- package/dist/prng.test.d.ts.map +1 -1
- package/dist/promise.d.ts +4 -4
- package/dist/promise.d.ts.map +1 -1
- package/dist/promise.test.d.ts.map +1 -1
- package/dist/queue.d.ts +1 -1
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.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.d.ts +1 -1
- package/dist/random.d.ts.map +1 -1
- package/dist/random.test.d.ts.map +1 -1
- package/dist/schema.cjs +100 -32
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.ts +76 -47
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.test.d.ts +1 -0
- package/dist/schema.test.d.ts.map +1 -1
- package/dist/{set-a0a3ea69.cjs → set-5b47859e.cjs} +8 -9
- package/dist/set-5b47859e.cjs.map +1 -0
- package/dist/set.cjs +1 -1
- package/dist/set.d.ts +2 -2
- package/dist/set.d.ts.map +1 -1
- package/dist/set.test.d.ts.map +1 -1
- package/dist/sort.d.ts +3 -3
- package/dist/sort.d.ts.map +1 -1
- package/dist/sort.test.d.ts.map +1 -1
- package/dist/statistics.d.ts.map +1 -1
- package/dist/statistics.test.d.ts.map +1 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.test.d.ts.map +1 -1
- package/dist/{string-04e96f2d.cjs → string-b2827a90.cjs} +2 -2
- package/dist/{string-04e96f2d.cjs.map → string-b2827a90.cjs.map} +1 -1
- package/dist/string.cjs +3 -3
- package/dist/string.d.ts.map +1 -1
- package/dist/string.test.d.ts.map +1 -1
- package/dist/symbol.test.d.ts.map +1 -1
- package/dist/testing.cjs +12 -12
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.ts +6 -5
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.test.d.ts.map +1 -1
- package/dist/time.test.d.ts.map +1 -1
- package/dist/traits.d.ts.map +1 -1
- package/dist/traits.test.d.ts.map +1 -1
- package/dist/tree.d.ts +4 -4
- package/dist/tree.d.ts.map +1 -1
- package/dist/url.d.ts.map +1 -1
- package/dist/url.test.d.ts.map +1 -1
- package/dist/{websocket-2c325505.cjs → websocket-40a601d4.cjs} +1 -1
- package/dist/{websocket-2c325505.cjs.map → websocket-40a601d4.cjs.map} +1 -1
- package/dist/websocket.cjs +3 -3
- package/dist/websocket.d.ts +1 -1
- package/dist/websocket.d.ts.map +1 -1
- package/dom.d.ts.map +1 -1
- package/encoding.d.ts +6 -6
- package/encoding.d.ts.map +1 -1
- package/encoding.test.d.ts.map +1 -1
- package/eventloop.d.ts.map +1 -1
- package/eventloop.test.d.ts.map +1 -1
- package/function.d.ts +8 -3
- package/function.d.ts.map +1 -1
- package/function.test.d.ts.map +1 -1
- package/hash/rabin-gf2-polynomial.d.ts +3 -3
- package/hash/rabin-gf2-polynomial.d.ts.map +1 -1
- package/hash/rabin-uncached.d.ts +3 -3
- package/hash/rabin-uncached.d.ts.map +1 -1
- package/hash/rabin.d.ts +10 -10
- package/hash/rabin.d.ts.map +1 -1
- package/hash/rabin.test.d.ts.map +1 -1
- package/hash/sha256.d.ts +1 -1
- package/hash/sha256.d.ts.map +1 -1
- package/hash/sha256.node.d.ts +1 -1
- package/hash/sha256.node.d.ts.map +1 -1
- package/hash/sha256.test.d.ts.map +1 -1
- package/indexeddb.d.ts +11 -11
- package/indexeddb.d.ts.map +1 -1
- package/indexeddbV2.d.ts +9 -9
- package/indexeddbV2.d.ts.map +1 -1
- package/iterator.d.ts +4 -4
- package/iterator.d.ts.map +1 -1
- package/json.d.ts +3 -3
- package/json.d.ts.map +1 -1
- package/list.d.ts +3 -3
- package/list.d.ts.map +1 -1
- package/list.test.d.ts.map +1 -1
- package/logging.common.d.ts.map +1 -1
- package/logging.d.ts.map +1 -1
- package/logging.node.d.ts.map +1 -1
- package/map.d.ts +1 -1
- package/map.d.ts.map +1 -1
- package/map.test.d.ts.map +1 -1
- package/math.test.d.ts.map +1 -1
- package/metric.d.ts +1 -1
- package/metric.d.ts.map +1 -1
- package/metric.test.d.ts.map +1 -1
- package/mutex.d.ts.map +1 -1
- package/number.d.ts +1 -1
- package/number.d.ts.map +1 -1
- package/number.test.d.ts.map +1 -1
- package/object.d.ts +9 -13
- package/object.d.ts.map +1 -1
- package/object.test.d.ts.map +1 -1
- package/observable.d.ts +4 -4
- package/observable.d.ts.map +1 -1
- package/observable.test.d.ts.map +1 -1
- package/package.json +3 -3
- package/pair.d.ts +2 -2
- package/pair.d.ts.map +1 -1
- package/pair.test.d.ts.map +1 -1
- package/performance.d.ts +3 -3
- package/performance.d.ts.map +1 -1
- package/performance.node.d.ts +0 -1
- package/performance.node.d.ts.map +1 -1
- package/pledge.d.ts +9 -9
- package/pledge.d.ts.map +1 -1
- package/pledge.test.d.ts.map +1 -1
- package/prng/Mt19937.d.ts +1 -1
- package/prng/Mt19937.d.ts.map +1 -1
- package/prng/Xoroshiro128plus.d.ts +1 -1
- package/prng/Xoroshiro128plus.d.ts.map +1 -1
- package/prng.d.ts +3 -3
- package/prng.d.ts.map +1 -1
- package/prng.test.d.ts.map +1 -1
- package/promise.d.ts +4 -4
- package/promise.d.ts.map +1 -1
- package/promise.test.d.ts.map +1 -1
- package/queue.d.ts +1 -1
- package/queue.d.ts.map +1 -1
- package/queue.test.d.ts.map +1 -1
- package/random.d.ts +1 -1
- package/random.d.ts.map +1 -1
- package/random.test.d.ts.map +1 -1
- package/schema.d.ts +76 -47
- package/schema.d.ts.map +1 -1
- package/schema.js +93 -27
- package/schema.test.d.ts +1 -0
- package/schema.test.d.ts.map +1 -1
- package/set.d.ts +2 -2
- package/set.d.ts.map +1 -1
- package/set.js +2 -3
- package/set.test.d.ts.map +1 -1
- package/sort.d.ts +3 -3
- package/sort.d.ts.map +1 -1
- package/sort.test.d.ts.map +1 -1
- package/statistics.d.ts.map +1 -1
- package/statistics.test.d.ts.map +1 -1
- package/storage.d.ts.map +1 -1
- package/storage.test.d.ts.map +1 -1
- package/string.d.ts.map +1 -1
- package/string.test.d.ts.map +1 -1
- package/symbol.test.d.ts.map +1 -1
- package/test.html +1 -0
- package/testing.d.ts +6 -5
- package/testing.d.ts.map +1 -1
- package/testing.js +2 -1
- package/testing.test.d.ts.map +1 -1
- package/time.test.d.ts.map +1 -1
- package/traits.d.ts.map +1 -1
- package/traits.test.d.ts.map +1 -1
- package/tree.d.ts +4 -4
- package/tree.d.ts.map +1 -1
- package/url.d.ts.map +1 -1
- package/url.test.d.ts.map +1 -1
- package/websocket.d.ts +1 -1
- package/websocket.d.ts.map +1 -1
- package/coverage/tmp/coverage-19938-1752497708602-0.json +0 -1
- package/dist/diff-63d13d0f.cjs.map +0 -1
- package/dist/set-a0a3ea69.cjs.map +0 -1
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-a74f7330.cjs');
|
|
6
6
|
var map = require('./map-0dabcc55.cjs');
|
|
7
|
-
require('./string-
|
|
8
|
-
require('./array-
|
|
9
|
-
require('./set-
|
|
10
|
-
require('./environment-
|
|
7
|
+
require('./string-b2827a90.cjs');
|
|
8
|
+
require('./array-78849c95.cjs');
|
|
9
|
+
require('./set-5b47859e.cjs');
|
|
10
|
+
require('./environment-2de08e0e.cjs');
|
|
11
11
|
require('./conditions-f5c0c102.cjs');
|
|
12
12
|
require('./storage.cjs');
|
|
13
|
-
require('./function-
|
|
13
|
+
require('./function-09b8292c.cjs');
|
|
14
14
|
require('./object-491858d1.cjs');
|
|
15
15
|
require('./traits.cjs');
|
|
16
16
|
require('./math-08e068f9.cjs');
|
|
17
|
-
require('./encoding-
|
|
17
|
+
require('./encoding-1acb59c4.cjs');
|
|
18
18
|
require('./number-466d8922.cjs');
|
|
19
19
|
require('./binary-ac8e39e2.cjs');
|
|
20
|
-
require('./decoding-
|
|
20
|
+
require('./decoding-2b136346.cjs');
|
|
21
21
|
require('./error-8582d695.cjs');
|
|
22
22
|
|
|
23
23
|
/**
|
package/dist/random.d.ts
CHANGED
package/dist/random.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../random.js"],"names":[],"mappings":"AAYA,gCAA+B;AAExB,iCAA2D;AAE3D,iCAGN;AAOM,
|
|
1
|
+
{"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../random.js"],"names":[],"mappings":"AAYA,gCAA+B;AAExB,iCAA2D;AAE3D,iCAGN;AAOM,sBAJM,CAAC,OACH,KAAK,CAAC,CAAC,CAAC,GACP,CAAC,CAEmD;AAQzD,0BAFK,MAAM,CAIjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.test.d.ts","sourceRoot":"","sources":["../random.test.js"],"names":[],"mappings":"AASO,+BAFI,
|
|
1
|
+
{"version":3,"file":"random.test.d.ts","sourceRoot":"","sources":["../random.test.js"],"names":[],"mappings":"AASO,+BAFI,CAAC,CAAC,QAAQ,QAKpB;AAKM,+BAFI,CAAC,CAAC,QAAQ,QA0BpB;AAKM,+BAFI,CAAC,CAAC,QAAQ,QAyBpB;AAKM,+BAFI,CAAC,CAAC,QAAQ,QAIpB;AAKM,uCAFI,CAAC,CAAC,QAAQ,QAiBpB;mBA/FkB,cAAc"}
|
package/dist/schema.cjs
CHANGED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var object$1 = require('./object-491858d1.cjs');
|
|
6
|
-
var array$1 = require('./array-
|
|
6
|
+
var array$1 = require('./array-78849c95.cjs');
|
|
7
7
|
var error = require('./error-8582d695.cjs');
|
|
8
|
-
var environment = require('./environment-
|
|
9
|
-
require('./set-
|
|
8
|
+
var environment = require('./environment-2de08e0e.cjs');
|
|
9
|
+
require('./set-5b47859e.cjs');
|
|
10
10
|
require('./map-0dabcc55.cjs');
|
|
11
|
-
require('./string-
|
|
11
|
+
require('./string-b2827a90.cjs');
|
|
12
12
|
require('./conditions-f5c0c102.cjs');
|
|
13
13
|
require('./storage.cjs');
|
|
14
|
-
require('./function-
|
|
14
|
+
require('./function-09b8292c.cjs');
|
|
15
15
|
require('./traits.cjs');
|
|
16
16
|
|
|
17
17
|
/**
|
|
@@ -30,24 +30,12 @@ require('./traits.cjs');
|
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* @template T
|
|
33
|
-
* @typedef {T extends $Schema<infer X> ? X : T}
|
|
33
|
+
* @typedef {T extends $Schema<infer X> ? X : T} Unwrap
|
|
34
34
|
*/
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
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
|
|
38
|
+
* @typedef {T extends readonly [$Schema<infer First>, ...infer Rest] ? [First, ...UnwrapArray<Rest>] : [] } UnwrapArray
|
|
51
39
|
*/
|
|
52
40
|
|
|
53
41
|
/**
|
|
@@ -65,6 +53,18 @@ require('./traits.cjs');
|
|
|
65
53
|
* @typedef {Arr extends [...infer Fs, unknown] ? Fs : never} TuplePop
|
|
66
54
|
*/
|
|
67
55
|
|
|
56
|
+
/**
|
|
57
|
+
* @template {readonly unknown[]} T
|
|
58
|
+
* @typedef {T extends []
|
|
59
|
+
* ? {}
|
|
60
|
+
* : T extends [infer First]
|
|
61
|
+
* ? First
|
|
62
|
+
* : T extends [infer First, ...infer Rest]
|
|
63
|
+
* ? First & Intersect<Rest>
|
|
64
|
+
* : never
|
|
65
|
+
* } Intersect
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
68
|
const schemaSymbol = Symbol('0schema');
|
|
69
69
|
|
|
70
70
|
/**
|
|
@@ -104,10 +104,10 @@ class $Schema {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
/**
|
|
107
|
-
* @type {$Schema<T
|
|
107
|
+
* @type {$Optional<$Schema<T>>}
|
|
108
108
|
*/
|
|
109
109
|
get optional () {
|
|
110
|
-
return
|
|
110
|
+
return new $Optional(/** @type {$Schema<T>} */ (this))
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
/**
|
|
@@ -203,9 +203,39 @@ class $Literal extends $Schema {
|
|
|
203
203
|
*/
|
|
204
204
|
const literal = (...literals) => new $Literal(literals);
|
|
205
205
|
|
|
206
|
+
const isOptionalSymbol = Symbol('optional');
|
|
207
|
+
/**
|
|
208
|
+
* @template {$Schema<any>} S
|
|
209
|
+
* @extends $Schema<Unwrap<S>|undefined>
|
|
210
|
+
*/
|
|
211
|
+
class $Optional extends $Schema {
|
|
212
|
+
/**
|
|
213
|
+
* @param {S} s
|
|
214
|
+
*/
|
|
215
|
+
constructor (s) {
|
|
216
|
+
super();
|
|
217
|
+
this.s = s;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* @param {any} o
|
|
222
|
+
* @return {o is (Unwrap<S>|undefined)}
|
|
223
|
+
*/
|
|
224
|
+
check (o) {
|
|
225
|
+
return o === undefined || this.s.check(o)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
get [isOptionalSymbol] () { return true }
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* @template {{ [key: string|symbol|number]: $Schema<any> }} S
|
|
233
|
+
* @typedef {{ [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? Key : never]?: S[Key] extends $Optional<$Schema<infer Type>> ? Type : never } & { [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? never : Key]: S[Key] extends $Schema<infer Type> ? Type : never }} $ObjectToType
|
|
234
|
+
*/
|
|
235
|
+
|
|
206
236
|
/**
|
|
207
237
|
* @template {{[key:string|symbol|number]: $Schema<any>}} S
|
|
208
|
-
* @extends {$Schema<
|
|
238
|
+
* @extends {$Schema<$ObjectToType<S>>}
|
|
209
239
|
*/
|
|
210
240
|
class $Object extends $Schema {
|
|
211
241
|
/**
|
|
@@ -218,19 +248,55 @@ class $Object extends $Schema {
|
|
|
218
248
|
|
|
219
249
|
/**
|
|
220
250
|
* @param {any} o
|
|
221
|
-
* @return {o is
|
|
251
|
+
* @return {o is $ObjectToType<S>}
|
|
222
252
|
*/
|
|
223
253
|
check (o) {
|
|
224
254
|
return o != null && object$1.every(this.v, (vv, vk) => vv.check(o[vk]))
|
|
225
255
|
}
|
|
226
256
|
}
|
|
227
257
|
|
|
258
|
+
// I used an explicit type annotation instead of $ObjectToType, so that the user doesn't see the
|
|
259
|
+
// weird type definitions when inspecting type definions.
|
|
228
260
|
/**
|
|
229
|
-
* @template {{ [key:string|symbol|number]: $Schema<any> }}
|
|
230
|
-
* @param {
|
|
231
|
-
* @return {
|
|
261
|
+
* @template {{ [key:string|symbol|number]: $Schema<any> }} S
|
|
262
|
+
* @param {S} def
|
|
263
|
+
* @return {$Schema<{ [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? Key : never]?: S[Key] extends $Optional<$Schema<infer Type>> ? Type : never } & { [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? never : Key]: S[Key] extends $Schema<infer Type> ? Type : never }>}
|
|
264
|
+
*/
|
|
265
|
+
const object = def => /** @type {any} */ (new $Object(def));
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* @template {$Schema<string|number|symbol>} Keys
|
|
269
|
+
* @template {$Schema<any>} Values
|
|
270
|
+
* @extends {$Schema<Record<Keys extends $Schema<infer K> ? K : never,Values extends $Schema<infer T> ? T : never>>}
|
|
271
|
+
*/
|
|
272
|
+
class $Record extends $Schema {
|
|
273
|
+
/**
|
|
274
|
+
* @param {Keys} keys
|
|
275
|
+
* @param {Values} values
|
|
276
|
+
*/
|
|
277
|
+
constructor (keys, values) {
|
|
278
|
+
super();
|
|
279
|
+
this.keys = keys;
|
|
280
|
+
this.values = values;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* @param {any} o
|
|
285
|
+
* @return {o is Record<Keys extends $Schema<infer K> ? K : never,Values extends $Schema<infer T> ? T : never>}
|
|
286
|
+
*/
|
|
287
|
+
check (o) {
|
|
288
|
+
return o != null && object$1.every(o, (vv, vk) => this.keys.check(vk) && this.values.check(vv))
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* @template {$Schema<string|number|symbol>} Keys
|
|
294
|
+
* @template {$Schema<any>} Values
|
|
295
|
+
* @param {Keys} keys
|
|
296
|
+
* @param {Values} values
|
|
297
|
+
* @return {CastToSchema<$Record<Keys,Values>>}
|
|
232
298
|
*/
|
|
233
|
-
const
|
|
299
|
+
const record = (keys, values) => new $Record(keys, values);
|
|
234
300
|
|
|
235
301
|
/**
|
|
236
302
|
* @template {$Schema<any>[]} S
|
|
@@ -324,7 +390,7 @@ const instance = c => new $InstanceOf(c);
|
|
|
324
390
|
|
|
325
391
|
/**
|
|
326
392
|
* @template {$Schema<any>[]} Args
|
|
327
|
-
* @typedef {(...args:
|
|
393
|
+
* @typedef {(...args:UnwrapArray<TuplePop<Args>>)=>Unwrap<TupleLast<Args>>} _LArgsToLambdaDef
|
|
328
394
|
*/
|
|
329
395
|
|
|
330
396
|
/**
|
|
@@ -354,13 +420,13 @@ class $Lambda extends $Schema {
|
|
|
354
420
|
/**
|
|
355
421
|
* @template {$Schema<any>[]} Args
|
|
356
422
|
* @param {Args} args
|
|
357
|
-
* @return {$Schema<(...args:
|
|
423
|
+
* @return {$Schema<(...args:UnwrapArray<TuplePop<Args>>)=>Unwrap<TupleLast<Args>>>}
|
|
358
424
|
*/
|
|
359
425
|
const lambda = (...args) => new $Lambda(args.length > 0 ? args : [void_]);
|
|
360
426
|
|
|
361
427
|
/**
|
|
362
428
|
* @template {Array<$Schema<any>>} T
|
|
363
|
-
* @extends {$Schema<Intersect<
|
|
429
|
+
* @extends {$Schema<Intersect<UnwrapArray<T>>>}
|
|
364
430
|
*/
|
|
365
431
|
class $Intersection extends $Schema {
|
|
366
432
|
/**
|
|
@@ -376,7 +442,7 @@ class $Intersection extends $Schema {
|
|
|
376
442
|
|
|
377
443
|
/**
|
|
378
444
|
* @param {any} o
|
|
379
|
-
* @return {o is Intersect<
|
|
445
|
+
* @return {o is Intersect<UnwrapArray<T>>}
|
|
380
446
|
*/
|
|
381
447
|
check (o) {
|
|
382
448
|
// @ts-ignore
|
|
@@ -418,7 +484,7 @@ class $Union extends $Schema {
|
|
|
418
484
|
/**
|
|
419
485
|
* @template {Array<$Schema<any>>} T
|
|
420
486
|
* @param {T} def
|
|
421
|
-
* @return {CastToSchema<$Union<T extends Array<$Schema<infer S>> ? S : never>>}
|
|
487
|
+
* @return {CastToSchema<$Union<T extends [] ? never : (T extends Array<$Schema<infer S>> ? S : never)>>}
|
|
422
488
|
*/
|
|
423
489
|
const union = (...def) => $Union.schema.check(def[0]) ? new $Union([...def[0].v, ...def.slice(1)]) : new $Union(def);
|
|
424
490
|
|
|
@@ -485,6 +551,7 @@ exports.$Intersection = $Intersection;
|
|
|
485
551
|
exports.$Lambda = $Lambda;
|
|
486
552
|
exports.$Literal = $Literal;
|
|
487
553
|
exports.$Object = $Object;
|
|
554
|
+
exports.$Record = $Record;
|
|
488
555
|
exports.$Schema = $Schema;
|
|
489
556
|
exports.$Tuple = $Tuple;
|
|
490
557
|
exports.$Union = $Union;
|
|
@@ -500,6 +567,7 @@ exports.literal = literal;
|
|
|
500
567
|
exports["null"] = null_;
|
|
501
568
|
exports.number = number;
|
|
502
569
|
exports.object = object;
|
|
570
|
+
exports.record = record;
|
|
503
571
|
exports.string = string;
|
|
504
572
|
exports.symbol = symbol;
|
|
505
573
|
exports.tuple = tuple;
|
package/dist/schema.cjs.map
CHANGED
|
@@ -1 +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<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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"}
|
|
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} Unwrap\n */\n\n/**\n * @template {readonly unknown[]} T\n * @typedef {T extends readonly [$Schema<infer First>, ...infer Rest] ? [First, ...UnwrapArray<Rest>] : [] } UnwrapArray\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\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\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 {$Optional<$Schema<T>>}\n */\n get optional () {\n return new $Optional(/** @type {$Schema<T>} */ (this))\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\nconst isOptionalSymbol = Symbol('optional')\n/**\n * @template {$Schema<any>} S\n * @extends $Schema<Unwrap<S>|undefined>\n */\nclass $Optional extends $Schema {\n /**\n * @param {S} s\n */\n constructor (s) {\n super()\n this.s = s\n }\n\n /**\n * @param {any} o\n * @return {o is (Unwrap<S>|undefined)}\n */\n check (o) {\n return o === undefined || this.s.check(o)\n }\n\n get [isOptionalSymbol] () { return true }\n}\n\n/**\n * @template {{ [key: string|symbol|number]: $Schema<any> }} S\n * @typedef {{ [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? Key : never]?: S[Key] extends $Optional<$Schema<infer Type>> ? Type : never } & { [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? never : Key]: S[Key] extends $Schema<infer Type> ? Type : never }} $ObjectToType\n */\n\n/**\n * @template {{[key:string|symbol|number]: $Schema<any>}} S\n * @extends {$Schema<$ObjectToType<S>>}\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 $ObjectToType<S>}\n */\n check (o) {\n return o != null && obj.every(this.v, (vv, vk) => vv.check(o[vk]))\n }\n}\n\n// I used an explicit type annotation instead of $ObjectToType, so that the user doesn't see the\n// weird type definitions when inspecting type definions.\n/**\n * @template {{ [key:string|symbol|number]: $Schema<any> }} S\n * @param {S} def\n * @return {$Schema<{ [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? Key : never]?: S[Key] extends $Optional<$Schema<infer Type>> ? Type : never } & { [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? never : Key]: S[Key] extends $Schema<infer Type> ? Type : never }>}\n */\nexport const object = def => /** @type {any} */ (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:UnwrapArray<TuplePop<Args>>)=>Unwrap<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:UnwrapArray<TuplePop<Args>>)=>Unwrap<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<UnwrapArray<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<UnwrapArray<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 [] ? never : (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,IAAI,SAAS,4BAA4B,IAAI,EAAE;AAC1D,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,GAA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"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -23,9 +23,9 @@ export class $Schema<T> {
|
|
|
23
23
|
*/
|
|
24
24
|
get nullable(): $Schema<T | null>;
|
|
25
25
|
/**
|
|
26
|
-
* @type {$Schema<T
|
|
26
|
+
* @type {$Optional<$Schema<T>>}
|
|
27
27
|
*/
|
|
28
|
-
get optional(): $Schema<T
|
|
28
|
+
get optional(): $Optional<$Schema<T>>;
|
|
29
29
|
/**
|
|
30
30
|
* Cast a variable to a specific type. Returns the casted value, or throws an exception otherwise.
|
|
31
31
|
* Use this if you know that the type is of a specific type and you just want to convince the type
|
|
@@ -68,9 +68,9 @@ export class $ConstructedBy<C extends (new (...args: any[]) => any) | ((...args:
|
|
|
68
68
|
* @param {any} o
|
|
69
69
|
* @return {o is C extends ((...args:any[]) => infer T) ? T : (C extends (new (...args:any[]) => any) ? InstanceType<C> : never)} o
|
|
70
70
|
*/
|
|
71
|
-
check(o: any): o is C extends (...args: any[]) => infer T_1 ? T_1 : C extends new (...args: any[]) => any ? InstanceType<C> : never;
|
|
71
|
+
check(o: any): o is C extends ((...args: any[]) => infer T_1) ? T_1 : (C extends (new (...args: any[]) => any) ? InstanceType<C> : never);
|
|
72
72
|
}
|
|
73
|
-
export function constructedBy<C extends (new (...args: any[]) => any) | ((...args: any[]) => any)>(c: C):
|
|
73
|
+
export function constructedBy<C extends (new (...args: any[]) => any) | ((...args: any[]) => any)>(c: C): CastToSchema<$ConstructedBy<C>>;
|
|
74
74
|
/**
|
|
75
75
|
* @template {LiteralType} T
|
|
76
76
|
* @extends {$Schema<T>}
|
|
@@ -82,32 +82,47 @@ export class $Literal<T extends LiteralType> extends $Schema<T> {
|
|
|
82
82
|
constructor(literals: Array<T>);
|
|
83
83
|
v: T[];
|
|
84
84
|
}
|
|
85
|
-
export function literal<T extends LiteralType[]>(...literals: T):
|
|
85
|
+
export function literal<T extends LiteralType[]>(...literals: T): CastToSchema<$Literal<T[number]>>;
|
|
86
|
+
/**
|
|
87
|
+
* @template {{ [key: string|symbol|number]: $Schema<any> }} S
|
|
88
|
+
* @typedef {{ [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? Key : never]?: S[Key] extends $Optional<$Schema<infer Type>> ? Type : never } & { [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? never : Key]: S[Key] extends $Schema<infer Type> ? Type : never }} $ObjectToType
|
|
89
|
+
*/
|
|
86
90
|
/**
|
|
87
91
|
* @template {{[key:string|symbol|number]: $Schema<any>}} S
|
|
88
|
-
* @extends {$Schema<
|
|
92
|
+
* @extends {$Schema<$ObjectToType<S>>}
|
|
89
93
|
*/
|
|
90
94
|
export class $Object<S extends {
|
|
91
|
-
[key: string]: $Schema<any>;
|
|
92
|
-
|
|
93
|
-
[key: symbol]: $Schema<any>;
|
|
94
|
-
}> extends $Schema<{ [Key in keyof S]: S[Key] extends $Schema<infer Type> ? Type : never; }> {
|
|
95
|
+
[key: string | symbol | number]: $Schema<any>;
|
|
96
|
+
}> extends $Schema<$ObjectToType<S>> {
|
|
95
97
|
/**
|
|
96
98
|
* @param {S} v
|
|
97
99
|
*/
|
|
98
100
|
constructor(v: S);
|
|
99
101
|
v: S;
|
|
102
|
+
}
|
|
103
|
+
export function object<S extends {
|
|
104
|
+
[key: string | symbol | number]: $Schema<any>;
|
|
105
|
+
}>(def: S): $Schema<{ [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? Key : never]?: S[Key] extends $Optional<$Schema<infer Type>> ? Type : never; } & { [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? never : Key]: S[Key] extends $Schema<infer Type> ? Type : never; }>;
|
|
106
|
+
/**
|
|
107
|
+
* @template {$Schema<string|number|symbol>} Keys
|
|
108
|
+
* @template {$Schema<any>} Values
|
|
109
|
+
* @extends {$Schema<Record<Keys extends $Schema<infer K> ? K : never,Values extends $Schema<infer T> ? T : never>>}
|
|
110
|
+
*/
|
|
111
|
+
export class $Record<Keys extends $Schema<string | number | symbol>, Values extends $Schema<any>> extends $Schema<Record<Keys extends $Schema<infer K> ? K : never, Values extends $Schema<infer T> ? T : never>> {
|
|
112
|
+
/**
|
|
113
|
+
* @param {Keys} keys
|
|
114
|
+
* @param {Values} values
|
|
115
|
+
*/
|
|
116
|
+
constructor(keys: Keys, values: Values);
|
|
117
|
+
keys: Keys;
|
|
118
|
+
values: Values;
|
|
100
119
|
/**
|
|
101
120
|
* @param {any} o
|
|
102
|
-
* @return {o is
|
|
121
|
+
* @return {o is Record<Keys extends $Schema<infer K> ? K : never,Values extends $Schema<infer T> ? T : never>}
|
|
103
122
|
*/
|
|
104
|
-
check(o: any): o is
|
|
123
|
+
check(o: any): o is Record<Keys extends $Schema<infer K_1> ? K_1 : never, Values extends $Schema<infer T_1> ? T_1 : never>;
|
|
105
124
|
}
|
|
106
|
-
export function
|
|
107
|
-
[key: string]: $Schema<any>;
|
|
108
|
-
[key: number]: $Schema<any>;
|
|
109
|
-
[key: symbol]: $Schema<any>;
|
|
110
|
-
}>(def: T): $Schema<{ [Key in keyof T]: T[Key] extends $Schema<infer Type> ? Type : never; }>;
|
|
125
|
+
export function record<Keys extends $Schema<string | number | symbol>, Values extends $Schema<any>>(keys: Keys, values: Values): CastToSchema<$Record<Keys, Values>>;
|
|
111
126
|
/**
|
|
112
127
|
* @template {$Schema<any>[]} S
|
|
113
128
|
* @extends {$Schema<{ [Key in keyof S]: S[Key] extends $Schema<infer Type> ? Type : never }>}
|
|
@@ -124,7 +139,7 @@ export class $Tuple<S extends $Schema<any>[]> extends $Schema<{ [Key in keyof S]
|
|
|
124
139
|
*/
|
|
125
140
|
check(o: any): o is { [K in keyof S]: S[K] extends $Schema<infer Type_1> ? Type_1 : never; };
|
|
126
141
|
}
|
|
127
|
-
export function tuple<T extends
|
|
142
|
+
export function tuple<T extends Array<$Schema<any>>>(...def: T): CastToSchema<$Tuple<T>>;
|
|
128
143
|
/**
|
|
129
144
|
* @template {$Schema<any>} S
|
|
130
145
|
* @extends {$Schema<Array<S extends $Schema<infer T> ? T : never>>}
|
|
@@ -142,9 +157,9 @@ export class $Array<S extends $Schema<any>> extends $Schema<(S extends $Schema<i
|
|
|
142
157
|
* @param {any} o
|
|
143
158
|
* @return {o is Array<S extends $Schema<infer T> ? T : never>} o
|
|
144
159
|
*/
|
|
145
|
-
check(o: any): o is
|
|
160
|
+
check(o: any): o is Array<S extends $Schema<infer T_1> ? T_1 : never>;
|
|
146
161
|
}
|
|
147
|
-
export function array<T extends
|
|
162
|
+
export function array<T extends Array<$Schema<any>>>(...def: T): $Schema<Array<T extends Array<$Schema<infer S>> ? S : never>>;
|
|
148
163
|
/**
|
|
149
164
|
* @template T
|
|
150
165
|
* @extends {$Schema<T>}
|
|
@@ -159,13 +174,13 @@ export class $InstanceOf<T> extends $Schema<T> {
|
|
|
159
174
|
export function instance<T>(c: new (...args: any) => T): $Schema<T>;
|
|
160
175
|
/**
|
|
161
176
|
* @template {$Schema<any>[]} Args
|
|
162
|
-
* @typedef {(...args:
|
|
177
|
+
* @typedef {(...args:UnwrapArray<TuplePop<Args>>)=>Unwrap<TupleLast<Args>>} _LArgsToLambdaDef
|
|
163
178
|
*/
|
|
164
179
|
/**
|
|
165
180
|
* @template {Array<$Schema<any>>} Args
|
|
166
181
|
* @extends {$Schema<_LArgsToLambdaDef<Args>>}
|
|
167
182
|
*/
|
|
168
|
-
export class $Lambda<Args extends
|
|
183
|
+
export class $Lambda<Args extends Array<$Schema<any>>> extends $Schema<_LArgsToLambdaDef<Args>> {
|
|
169
184
|
/**
|
|
170
185
|
* @param {Args} args
|
|
171
186
|
*/
|
|
@@ -174,12 +189,12 @@ export class $Lambda<Args extends $Schema<any>[]> extends $Schema<_LArgsToLambda
|
|
|
174
189
|
args: $Schema<any[]>;
|
|
175
190
|
res: $Schema<any>;
|
|
176
191
|
}
|
|
177
|
-
export function lambda<Args extends $Schema<any>[]>(...args: Args): $Schema<(...args:
|
|
192
|
+
export function lambda<Args extends $Schema<any>[]>(...args: Args): $Schema<(...args: UnwrapArray<TuplePop<Args>>) => Unwrap<TupleLast<Args>>>;
|
|
178
193
|
/**
|
|
179
194
|
* @template {Array<$Schema<any>>} T
|
|
180
|
-
* @extends {$Schema<Intersect<
|
|
195
|
+
* @extends {$Schema<Intersect<UnwrapArray<T>>>}
|
|
181
196
|
*/
|
|
182
|
-
export class $Intersection<T extends
|
|
197
|
+
export class $Intersection<T extends Array<$Schema<any>>> extends $Schema<Intersect<UnwrapArray<T>>> {
|
|
183
198
|
/**
|
|
184
199
|
* @param {T} v
|
|
185
200
|
*/
|
|
@@ -189,7 +204,7 @@ export class $Intersection<T extends $Schema<any>[]> extends $Schema<Intersect<E
|
|
|
189
204
|
*/
|
|
190
205
|
v: T;
|
|
191
206
|
}
|
|
192
|
-
export function intersect<T extends $Schema<any>[]>(...def: T):
|
|
207
|
+
export function intersect<T extends $Schema<any>[]>(...def: T): CastToSchema<$Intersection<T>>;
|
|
193
208
|
/**
|
|
194
209
|
* @template S
|
|
195
210
|
* @extends {$Schema<S>}
|
|
@@ -202,7 +217,7 @@ export class $Union<S> extends $Schema<S> {
|
|
|
202
217
|
constructor(v: Array<$Schema<S>>);
|
|
203
218
|
v: $Schema<S>[];
|
|
204
219
|
}
|
|
205
|
-
export function union<T extends
|
|
220
|
+
export function union<T extends Array<$Schema<any>>>(...def: T): CastToSchema<$Union<T extends [] ? never : (T extends Array<$Schema<infer S>> ? S : never)>>;
|
|
206
221
|
/**
|
|
207
222
|
* @type {$Schema<any>}
|
|
208
223
|
*/
|
|
@@ -232,17 +247,30 @@ export const string: $Schema<string>;
|
|
|
232
247
|
export const assert: <T>(o: any, schema: $Schema<T>) => asserts o is T;
|
|
233
248
|
export type LiteralType = string | number | bigint | boolean | null | undefined;
|
|
234
249
|
export type AnyObject = {
|
|
235
|
-
[k: string]: any;
|
|
236
|
-
[k: number]: any;
|
|
237
|
-
[k: symbol]: any;
|
|
250
|
+
[k: string | number | symbol]: any;
|
|
238
251
|
};
|
|
239
|
-
export type
|
|
240
|
-
export type
|
|
241
|
-
export type ExtractTypesFromSchemaArray<T extends readonly unknown[]> = T extends readonly [$Schema<infer First>, ...infer Rest] ? [First, ...ExtractTypesFromSchemaArray<Rest>] : [];
|
|
252
|
+
export type Unwrap<T> = T extends $Schema<infer X> ? X : T;
|
|
253
|
+
export type UnwrapArray<T extends readonly unknown[]> = T extends readonly [$Schema<infer First>, ...infer Rest] ? [First, ...UnwrapArray<Rest>] : [];
|
|
242
254
|
export type CastToSchema<T> = T extends $Schema<infer S> ? $Schema<S> : never;
|
|
243
255
|
export type TupleLast<Arr extends unknown[]> = Arr extends [...unknown[], infer L] ? L : never;
|
|
244
256
|
export type TuplePop<Arr extends unknown[]> = Arr extends [...infer Fs, unknown] ? Fs : never;
|
|
245
|
-
export type
|
|
257
|
+
export type Intersect<T extends readonly unknown[]> = T extends [] ? {} : T extends [infer First] ? First : T extends [infer First, ...infer Rest] ? First & Intersect<Rest> : never;
|
|
258
|
+
export type $ObjectToType<S extends {
|
|
259
|
+
[key: string | symbol | number]: $Schema<any>;
|
|
260
|
+
}> = { [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? Key : never]?: S[Key] extends $Optional<$Schema<infer Type>> ? Type : never; } & { [Key in keyof S as S[Key] extends $Optional<$Schema<any>> ? never : Key]: S[Key] extends $Schema<infer Type> ? Type : never; };
|
|
261
|
+
export type _LArgsToLambdaDef<Args extends $Schema<any>[]> = (...args: UnwrapArray<TuplePop<Args>>) => Unwrap<TupleLast<Args>>;
|
|
262
|
+
/**
|
|
263
|
+
* @template {$Schema<any>} S
|
|
264
|
+
* @extends $Schema<Unwrap<S>|undefined>
|
|
265
|
+
*/
|
|
266
|
+
declare class $Optional<S extends $Schema<any>> extends $Schema<Unwrap<S> | undefined> {
|
|
267
|
+
/**
|
|
268
|
+
* @param {S} s
|
|
269
|
+
*/
|
|
270
|
+
constructor(s: S);
|
|
271
|
+
s: S;
|
|
272
|
+
get [isOptionalSymbol](): boolean;
|
|
273
|
+
}
|
|
246
274
|
/**
|
|
247
275
|
* @typedef {string|number|bigint|boolean|null|undefined} LiteralType
|
|
248
276
|
*/
|
|
@@ -251,22 +279,11 @@ export type _LArgsToLambdaDef<Args extends $Schema<any>[]> = (...args: ExtractTy
|
|
|
251
279
|
*/
|
|
252
280
|
/**
|
|
253
281
|
* @template T
|
|
254
|
-
* @typedef {T extends $Schema<infer X> ? X : T}
|
|
255
|
-
*/
|
|
256
|
-
/**
|
|
257
|
-
* @template {readonly unknown[]} T
|
|
258
|
-
* @typedef {T extends []
|
|
259
|
-
* ? {}
|
|
260
|
-
* : T extends [infer First]
|
|
261
|
-
* ? First
|
|
262
|
-
* : T extends [infer First, ...infer Rest]
|
|
263
|
-
* ? First & Intersect<Rest>
|
|
264
|
-
* : never
|
|
265
|
-
* } Intersect
|
|
282
|
+
* @typedef {T extends $Schema<infer X> ? X : T} Unwrap
|
|
266
283
|
*/
|
|
267
284
|
/**
|
|
268
285
|
* @template {readonly unknown[]} T
|
|
269
|
-
* @typedef {T extends readonly [$Schema<infer First>, ...infer Rest] ? [First, ...
|
|
286
|
+
* @typedef {T extends readonly [$Schema<infer First>, ...infer Rest] ? [First, ...UnwrapArray<Rest>] : [] } UnwrapArray
|
|
270
287
|
*/
|
|
271
288
|
/**
|
|
272
289
|
* @template T
|
|
@@ -280,6 +297,17 @@ export type _LArgsToLambdaDef<Args extends $Schema<any>[]> = (...args: ExtractTy
|
|
|
280
297
|
* @template {unknown[]} Arr
|
|
281
298
|
* @typedef {Arr extends [...infer Fs, unknown] ? Fs : never} TuplePop
|
|
282
299
|
*/
|
|
300
|
+
/**
|
|
301
|
+
* @template {readonly unknown[]} T
|
|
302
|
+
* @typedef {T extends []
|
|
303
|
+
* ? {}
|
|
304
|
+
* : T extends [infer First]
|
|
305
|
+
* ? First
|
|
306
|
+
* : T extends [infer First, ...infer Rest]
|
|
307
|
+
* ? First & Intersect<Rest>
|
|
308
|
+
* : never
|
|
309
|
+
* } Intersect
|
|
310
|
+
*/
|
|
283
311
|
declare const schemaSymbol: unique symbol;
|
|
284
312
|
/**
|
|
285
313
|
* @type {$Schema<null>}
|
|
@@ -293,5 +321,6 @@ declare const void_: $Schema<void>;
|
|
|
293
321
|
* @type {$Schema<undefined>}
|
|
294
322
|
*/
|
|
295
323
|
declare const undefined_: $Schema<undefined>;
|
|
324
|
+
declare const isOptionalSymbol: unique symbol;
|
|
296
325
|
export { null_ as null, _null as null, void_ as void, _void as void, undefined_ as undefined };
|
|
297
326
|
//# sourceMappingURL=schema.d.ts.map
|