functionalscript 0.44.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/fjs/asn.1/module.f.mjs +8 -1
- package/fjs/asn.1/proof.f.d.mts +15 -0
- package/fjs/asn.1/proof.f.mjs +31 -3
- package/fjs/asserts/module.f.d.mts +14 -0
- package/fjs/asserts/module.f.mjs +20 -0
- package/fjs/asserts/proof.f.d.mts +3 -0
- package/fjs/asserts/proof.f.mjs +15 -1
- package/fjs/basen/base128/module.f.mjs +22 -5
- package/fjs/basen/base128/proof.f.d.mts +3 -1
- package/fjs/basen/base128/proof.f.mjs +3 -1
- package/fjs/basen/base64/module.f.mjs +7 -3
- package/fjs/basen/base64/proof.f.d.mts +3 -1
- package/fjs/basen/base64/proof.f.mjs +7 -4
- package/fjs/basen/cbase32/proof.f.d.mts +3 -1
- package/fjs/basen/cbase32/proof.f.mjs +3 -1
- package/fjs/bnf/data/module.f.d.mts +32 -6
- package/fjs/bnf/data/module.f.mjs +112 -7
- package/fjs/bnf/data/proof.f.d.mts +2 -0
- package/fjs/bnf/data/proof.f.mjs +74 -4
- package/fjs/bnf/data/types.d.ts +20 -2
- package/fjs/bnf/descent/module.f.d.mts +34 -5
- package/fjs/bnf/descent/module.f.mjs +176 -54
- package/fjs/bnf/descent/proof.f.d.mts +3 -0
- package/fjs/bnf/descent/proof.f.mjs +189 -27
- package/fjs/bnf/descent/types.d.ts +24 -18
- package/fjs/bnf/ll1/module.f.d.mts +74 -6
- package/fjs/bnf/ll1/module.f.mjs +297 -95
- package/fjs/bnf/ll1/proof.f.d.mts +17 -2
- package/fjs/bnf/ll1/proof.f.mjs +372 -137
- package/fjs/bnf/ll1/types.d.ts +25 -27
- package/fjs/bnf/matcher/module.f.d.mts +66 -0
- package/fjs/bnf/matcher/module.f.mjs +81 -0
- package/fjs/bnf/matcher/proof.f.d.mts +10 -0
- package/fjs/bnf/matcher/proof.f.mjs +79 -0
- package/fjs/bnf/matcher/types.d.ts +54 -0
- package/fjs/bnf/module.f.d.mts +15 -6
- package/fjs/bnf/module.f.mjs +52 -11
- package/fjs/bnf/proof.f.d.mts +2 -0
- package/fjs/bnf/proof.f.mjs +79 -3
- package/fjs/bnf/testlib.f.d.mts +31 -0
- package/fjs/bnf/testlib.f.mjs +80 -0
- package/fjs/bnf/token_symbol/module.f.d.mts +4 -3
- package/fjs/bnf/token_symbol/module.f.mjs +7 -6
- package/fjs/bnf/token_symbol/proof.f.mjs +5 -2
- package/fjs/bnf/token_symbol/types.d.ts +2 -2
- package/fjs/bnf/types.d.ts +10 -3
- package/fjs/cas/cli/module.f.d.mts +1 -1
- package/fjs/cas/cli/module.f.mjs +14 -20
- package/fjs/cas/cli/proof.f.d.mts +4 -4
- package/fjs/cas/cli/proof.f.mjs +47 -34
- package/fjs/cas/evo/module.f.d.mts +71 -31
- package/fjs/cas/evo/module.f.mjs +223 -138
- package/fjs/cas/evo/proof.f.d.mts +10 -1
- package/fjs/cas/evo/proof.f.mjs +311 -226
- package/fjs/cas/evo/types.d.ts +45 -9
- package/fjs/cas/module.f.d.mts +18 -32
- package/fjs/cas/module.f.mjs +164 -176
- package/fjs/cas/proof.f.d.mts +11 -8
- package/fjs/cas/proof.f.mjs +259 -147
- package/fjs/cas/types.d.ts +24 -10
- package/fjs/ci/common/module.f.d.mts +1 -1
- package/fjs/ci/common/module.f.mjs +1 -0
- package/fjs/ci/config/module.f.d.mts +3 -3
- package/fjs/ci/config/module.f.mjs +3 -3
- package/fjs/ci/module.f.d.mts +5 -5
- package/fjs/ci/module.f.mjs +8 -7
- package/fjs/ci/nix/module.f.d.mts +7 -5
- package/fjs/ci/nix/module.f.mjs +13 -12
- package/fjs/ci/nix/proof.f.d.mts +2 -0
- package/fjs/ci/nix/proof.f.mjs +4 -4
- package/fjs/ci/proof.f.d.mts +4 -2
- package/fjs/ci/proof.f.mjs +13 -8
- package/fjs/cli/module.f.d.mts +4 -6
- package/fjs/cli/module.f.mjs +4 -8
- package/fjs/cli/proof.f.d.mts +4 -2
- package/fjs/cli/proof.f.mjs +21 -18
- package/fjs/cli/types.d.ts +2 -3
- package/fjs/common/monoid/module.f.d.mts +70 -12
- package/fjs/common/monoid/module.f.mjs +177 -14
- package/fjs/common/monoid/proof.f.d.mts +12 -1
- package/fjs/common/monoid/proof.f.mjs +88 -4
- package/fjs/common/monoid/types.d.ts +23 -0
- package/fjs/crypto/hmac/module.f.mjs +2 -2
- package/fjs/crypto/secp/proof.f.d.mts +3 -1
- package/fjs/crypto/secp/proof.f.mjs +3 -1
- package/fjs/crypto/sha2/module.f.mjs +3 -1
- package/fjs/crypto/sha2/proof.f.d.mts +4 -1
- package/fjs/crypto/sha2/proof.f.mjs +27 -1
- package/fjs/crypto/sha2/types.d.ts +11 -0
- package/fjs/crypto/sign/module.f.mjs +2 -2
- package/fjs/crypto/vdf/module.f.d.mts +23 -4
- package/fjs/crypto/vdf/module.f.mjs +6 -4
- package/fjs/dev/module.f.d.mts +17 -5
- package/fjs/dev/module.f.mjs +60 -30
- package/fjs/dev/update/module.f.d.mts +11 -3
- package/fjs/dev/update/module.f.mjs +16 -11
- package/fjs/dev/update/proof.f.d.mts +4 -3
- package/fjs/dev/update/proof.f.mjs +11 -7
- package/fjs/djs/module.f.d.mts +13 -5
- package/fjs/djs/module.f.mjs +31 -16
- package/fjs/djs/parser/module.f.d.mts +16 -3
- package/fjs/djs/parser/module.f.mjs +135 -16
- package/fjs/djs/parser/proof.f.d.mts +8 -1
- package/fjs/djs/parser/proof.f.mjs +287 -13
- package/fjs/djs/parser/types.d.ts +7 -1
- package/fjs/djs/proof.f.d.mts +20 -1
- package/fjs/djs/proof.f.mjs +190 -12
- package/fjs/djs/serializer/module.f.d.mts +25 -8
- package/fjs/djs/serializer/module.f.mjs +66 -19
- package/fjs/djs/serializer/proof.f.d.mts +5 -0
- package/fjs/djs/serializer/proof.f.mjs +23 -1
- package/fjs/djs/tokenizer/module.f.d.mts +17 -5
- package/fjs/djs/tokenizer/module.f.mjs +120 -73
- package/fjs/djs/tokenizer/proof.f.d.mts +3 -0
- package/fjs/djs/tokenizer/proof.f.mjs +86 -67
- package/fjs/djs/transpiler/module.f.d.mts +13 -19
- package/fjs/djs/transpiler/module.f.mjs +79 -72
- package/fjs/djs/transpiler/types.d.ts +29 -0
- package/fjs/djs/types.d.ts +7 -1
- package/fjs/effects/list/module.f.d.mts +23 -12
- package/fjs/effects/list/module.f.mjs +16 -12
- package/fjs/effects/list/types.d.ts +27 -7
- package/fjs/effects/memory/module.f.d.mts +6 -3
- package/fjs/effects/memory/module.f.mjs +7 -7
- package/fjs/effects/memory/proof.f.d.mts +4 -0
- package/fjs/effects/memory/proof.f.mjs +18 -9
- package/fjs/effects/memory/types.d.ts +4 -3
- package/fjs/effects/mock/module.f.d.mts +28 -4
- package/fjs/effects/mock/module.f.mjs +39 -5
- package/fjs/effects/mock/types.d.ts +10 -1
- package/fjs/effects/module.d.mts +12 -2
- package/fjs/effects/module.f.d.mts +469 -281
- package/fjs/effects/module.f.mjs +538 -299
- package/fjs/effects/module.mjs +11 -2
- package/fjs/effects/node/memory/module.d.mts +7 -2
- package/fjs/effects/node/memory/module.mjs +9 -5
- package/fjs/effects/node/memory/proof.d.mts +2 -0
- package/fjs/effects/node/memory/proof.mjs +12 -5
- package/fjs/effects/node/module.d.mts +8 -2
- package/fjs/effects/node/module.f.d.mts +183 -43
- package/fjs/effects/node/module.f.mjs +260 -62
- package/fjs/effects/node/module.mjs +61 -50
- package/fjs/effects/node/proof.f.d.mts +28 -2
- package/fjs/effects/node/proof.f.mjs +161 -42
- package/fjs/effects/node/types.d.ts +106 -18
- package/fjs/effects/node/virtual/module.f.d.mts +21 -4
- package/fjs/effects/node/virtual/module.f.mjs +113 -70
- package/fjs/effects/node/virtual/proof.f.d.mts +31 -2
- package/fjs/effects/node/virtual/proof.f.mjs +201 -8
- package/fjs/effects/proof.f.d.mts +69 -34
- package/fjs/effects/proof.f.mjs +413 -130
- package/fjs/effects/types.d.ts +161 -33
- package/fjs/emergent_testing/all.test.d.mts +8 -0
- package/fjs/emergent_testing/all.test.mjs +14 -0
- package/fjs/emergent_testing/module.f.d.mts +22 -10
- package/fjs/emergent_testing/module.f.mjs +119 -85
- package/fjs/emergent_testing/proof.f.d.mts +21 -7
- package/fjs/emergent_testing/proof.f.mjs +169 -35
- package/fjs/emergent_testing/types.d.ts +22 -4
- package/fjs/fsc/bnf.f.d.mts +3 -0
- package/fjs/fsc/bnf.f.mjs +4 -1
- package/fjs/fsc/json.f.d.mts +3 -0
- package/fjs/fsc/json.f.mjs +4 -1
- package/fjs/fsc/module.f.d.mts +9 -0
- package/fjs/fsc/module.f.mjs +5 -3
- package/fjs/fsm/module.f.d.mts +14 -4
- package/fjs/fsm/module.f.mjs +54 -37
- package/fjs/fsm/proof.f.d.mts +5 -0
- package/fjs/fsm/proof.f.mjs +87 -115
- package/fjs/js/keywords/module.f.d.mts +52 -0
- package/fjs/js/keywords/module.f.mjs +72 -0
- package/fjs/{emergent_testing/scenarios/return-value.pass.d.ts → js/keywords/proof.f.d.mts} +1 -1
- package/fjs/js/keywords/proof.f.mjs +13 -0
- package/fjs/js/tokenizer/module.f.d.mts +30 -3
- package/fjs/js/tokenizer/module.f.mjs +161 -211
- package/fjs/js/tokenizer/proof.f.d.mts +1 -0
- package/fjs/js/tokenizer/proof.f.mjs +54 -24
- package/fjs/js/tokenizer/types.d.ts +33 -24
- package/fjs/mcp/cas/module.f.d.mts +1 -6
- package/fjs/mcp/cas/module.f.mjs +55 -51
- package/fjs/mcp/cas/proof.f.d.mts +15 -0
- package/fjs/mcp/cas/proof.f.mjs +174 -0
- package/fjs/mcp/evo/module.f.d.mts +19 -10
- package/fjs/mcp/evo/module.f.mjs +48 -27
- package/fjs/mcp/evo/proof.f.d.mts +6 -1
- package/fjs/mcp/evo/proof.f.mjs +115 -31
- package/fjs/mcp/module.f.d.mts +39 -4
- package/fjs/mcp/module.f.mjs +14 -12
- package/fjs/mcp/proof.f.d.mts +13 -1
- package/fjs/mcp/proof.f.mjs +120 -61
- package/fjs/media/html/module.f.d.mts +12 -0
- package/fjs/media/html/module.f.mjs +7 -5
- package/fjs/media/html/proof.f.d.mts +3 -0
- package/fjs/media/html/proof.f.mjs +4 -1
- package/fjs/media/json/extended/module.f.d.mts +82 -0
- package/fjs/media/json/extended/module.f.mjs +153 -0
- package/fjs/media/json/extended/proof.f.d.mts +42 -0
- package/fjs/media/json/extended/proof.f.mjs +127 -0
- package/fjs/media/json/extended/types.d.ts +23 -0
- package/fjs/media/json/module.f.d.mts +8 -2
- package/fjs/media/json/module.f.mjs +43 -41
- package/fjs/media/json/number/module.f.d.mts +59 -0
- package/fjs/media/json/number/module.f.mjs +136 -0
- package/fjs/media/json/number/proof.f.d.mts +24 -0
- package/fjs/media/json/number/proof.f.mjs +86 -0
- package/fjs/media/json/number/types.d.ts +28 -0
- package/fjs/media/json/parser/module.f.d.mts +25 -13
- package/fjs/media/json/parser/module.f.mjs +133 -72
- package/fjs/media/json/parser/proof.f.d.mts +5 -0
- package/fjs/media/json/parser/proof.f.mjs +31 -1
- package/fjs/media/json/parser/types.d.ts +38 -14
- package/fjs/media/json/rtti/module.f.d.mts +1 -1
- package/fjs/media/json/rtti/module.f.mjs +1 -1
- package/fjs/media/json/rtti/proof.f.d.mts +3 -0
- package/fjs/media/json/rtti/proof.f.mjs +12 -12
- package/fjs/media/json/schema/module.f.d.mts +61 -27
- package/fjs/media/json/schema/module.f.mjs +218 -63
- package/fjs/media/json/schema/proof.f.d.mts +41 -1
- package/fjs/media/json/schema/proof.f.mjs +220 -9
- package/fjs/media/json/serializer/module.f.d.mts +44 -0
- package/fjs/media/json/serializer/module.f.mjs +71 -9
- package/fjs/media/json/tokenizer/module.f.d.mts +8 -0
- package/fjs/media/json/tokenizer/module.f.mjs +31 -8
- package/fjs/media/json/tokenizer/proof.f.d.mts +6 -0
- package/fjs/media/json/tokenizer/proof.f.mjs +62 -21
- package/fjs/media/json/types.d.ts +36 -10
- package/fjs/media/lock/module.f.d.mts +100 -0
- package/fjs/media/lock/module.f.mjs +125 -0
- package/fjs/media/lock/proof.f.d.mts +33 -0
- package/fjs/media/lock/proof.f.mjs +196 -0
- package/fjs/media/lock/types.d.ts +15 -0
- package/fjs/media/module.f.d.mts +6 -5
- package/fjs/media/module.f.mjs +8 -7
- package/fjs/media/nix/module.f.d.mts +13 -0
- package/fjs/media/nix/module.f.mjs +4 -2
- package/fjs/media/nix/proof.f.d.mts +3 -0
- package/fjs/media/nix/proof.f.mjs +4 -1
- package/fjs/media/note/module.f.d.mts +121 -0
- package/fjs/media/note/module.f.mjs +131 -0
- package/fjs/media/note/proof.f.d.mts +29 -0
- package/fjs/media/note/proof.f.mjs +150 -0
- package/fjs/media/note/types.d.ts +10 -0
- package/fjs/media/proof.f.d.mts +4 -1
- package/fjs/media/proof.f.mjs +40 -21
- package/fjs/media/revision/module.f.d.mts +83 -7
- package/fjs/media/revision/module.f.mjs +127 -23
- package/fjs/media/revision/proof.f.d.mts +14 -0
- package/fjs/media/revision/proof.f.mjs +93 -2
- package/fjs/media/revision/types.d.ts +34 -5
- package/fjs/media/type/module.f.d.mts +53 -18
- package/fjs/media/type/module.f.mjs +87 -97
- package/fjs/media/type/proof.f.d.mts +17 -0
- package/fjs/media/type/proof.f.mjs +73 -13
- package/fjs/module.d.mts +5 -0
- package/fjs/module.f.d.mts +8 -0
- package/fjs/module.f.mjs +33 -10
- package/fjs/module.mjs +6 -0
- package/fjs/nanvm/proof.f.mjs +3 -3
- package/fjs/nanvm/rust/module.f.mjs +1 -1
- package/fjs/nanvm/update/module.f.d.mts +4 -4
- package/fjs/nanvm/update/module.f.mjs +8 -9
- package/fjs/nanvm/update/proof.f.mjs +4 -3
- package/fjs/path/module.f.d.mts +8 -0
- package/fjs/path/module.f.mjs +4 -2
- package/fjs/proof.f.d.mts +7 -3
- package/fjs/proof.f.mjs +41 -12
- package/fjs/protocol/json_rpc/module.f.d.mts +3 -3
- package/fjs/protocol/json_rpc/module.f.mjs +10 -7
- package/fjs/protocol/json_rpc/proof.f.d.mts +6 -0
- package/fjs/protocol/json_rpc/proof.f.mjs +26 -5
- package/fjs/protocol/mcp/module.f.d.mts +10 -13
- package/fjs/protocol/mcp/module.f.mjs +74 -58
- package/fjs/protocol/mcp/proof.f.d.mts +16 -3
- package/fjs/protocol/mcp/proof.f.mjs +224 -69
- package/fjs/protocol/mcp/stdio/module.f.d.mts +17 -11
- package/fjs/protocol/mcp/stdio/module.f.mjs +39 -33
- package/fjs/protocol/mcp/stdio/proof.f.d.mts +5 -3
- package/fjs/protocol/mcp/stdio/proof.f.mjs +46 -13
- package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
- package/fjs/protocol/mcp/types.d.ts +17 -6
- package/fjs/sul/id/module.f.d.mts +4 -0
- package/fjs/sul/id/module.f.mjs +6 -6
- package/fjs/sul/level/hash/module.f.d.mts +4 -1
- package/fjs/sul/level/hash/module.f.mjs +6 -4
- package/fjs/sul/level/hash/proof.f.d.mts +4 -0
- package/fjs/sul/level/hash/proof.f.mjs +7 -4
- package/fjs/sul/level/literal/module.f.d.mts +4 -1
- package/fjs/sul/level/literal/module.f.mjs +4 -3
- package/fjs/sul/level/literal/proof.f.d.mts +3 -0
- package/fjs/sul/level/literal/proof.f.mjs +4 -1
- package/fjs/sul/module.f.d.mts +5 -3
- package/fjs/sul/module.f.mjs +23 -17
- package/fjs/sul/proof.f.d.mts +4 -0
- package/fjs/sul/proof.f.mjs +5 -2
- package/fjs/text/ascii/module.f.d.mts +26 -0
- package/fjs/text/ascii/module.f.mjs +49 -1
- package/fjs/text/ascii/proof.f.d.mts +10 -0
- package/fjs/text/ascii/proof.f.mjs +33 -1
- package/fjs/text/code_point/module.f.d.mts +29 -3
- package/fjs/text/code_point/module.f.mjs +32 -9
- package/fjs/text/code_point/proof.f.d.mts +2 -0
- package/fjs/text/code_point/proof.f.mjs +39 -0
- package/fjs/text/module.f.d.mts +4 -2
- package/fjs/text/module.f.mjs +4 -3
- package/fjs/text/proof.f.d.mts +3 -0
- package/fjs/text/proof.f.mjs +4 -1
- package/fjs/text/sgr/module.f.d.mts +6 -5
- package/fjs/text/sgr/module.f.mjs +8 -8
- package/fjs/text/sgr/proof.f.d.mts +3 -0
- package/fjs/text/sgr/proof.f.mjs +4 -1
- package/fjs/text/utf16/module.f.d.mts +5 -1
- package/fjs/text/utf16/module.f.mjs +38 -35
- package/fjs/text/utf16/proof.f.d.mts +3 -1
- package/fjs/text/utf16/proof.f.mjs +19 -2
- package/fjs/text/utf8/module.f.d.mts +9 -5
- package/fjs/text/utf8/module.f.mjs +20 -20
- package/fjs/types/array/module.f.d.mts +2 -1
- package/fjs/types/array/module.f.mjs +16 -4
- package/fjs/types/bigfloat/module.f.d.mts +21 -1
- package/fjs/types/bigfloat/module.f.mjs +33 -7
- package/fjs/types/bigfloat/proof.f.d.mts +1 -0
- package/fjs/types/bigfloat/proof.f.mjs +46 -0
- package/fjs/types/bigint/module.f.d.mts +4 -0
- package/fjs/types/bigint/module.f.mjs +4 -3
- package/fjs/types/bit_vec/module.f.d.mts +10 -16
- package/fjs/types/bit_vec/module.f.mjs +99 -95
- package/fjs/types/bit_vec/proof.f.d.mts +6 -0
- package/fjs/types/bit_vec/proof.f.mjs +31 -5
- package/fjs/types/btree/find/module.f.d.mts +5 -1
- package/fjs/types/btree/find/module.f.mjs +5 -5
- package/fjs/types/btree/find/proof.f.d.mts +5 -1
- package/fjs/types/btree/find/proof.f.mjs +5 -3
- package/fjs/types/btree/module.f.d.mts +3 -0
- package/fjs/types/btree/module.f.mjs +3 -2
- package/fjs/types/btree/proof.f.d.mts +5 -1
- package/fjs/types/btree/proof.f.mjs +5 -3
- package/fjs/types/btree/remove/module.f.d.mts +11 -0
- package/fjs/types/btree/remove/module.f.mjs +10 -10
- package/fjs/types/btree/remove/proof.f.d.mts +3 -0
- package/fjs/types/btree/remove/proof.f.mjs +4 -1
- package/fjs/types/btree/set/module.f.d.mts +9 -0
- package/fjs/types/btree/set/module.f.mjs +14 -17
- package/fjs/types/btree/set/proof.f.d.mts +3 -0
- package/fjs/types/btree/set/proof.f.mjs +16 -1
- package/fjs/types/btree/types/module.f.d.mts +2 -1
- package/fjs/types/btree/types/module.f.mjs +2 -1
- package/fjs/types/byte_set/module.f.d.mts +20 -4
- package/fjs/types/byte_set/module.f.mjs +18 -8
- package/fjs/types/byte_set/proof.f.d.mts +3 -1
- package/fjs/types/byte_set/proof.f.mjs +10 -8
- package/fjs/types/function/compare/module.f.d.mts +3 -2
- package/fjs/types/function/compare/module.f.mjs +13 -5
- package/fjs/types/function/module.f.d.mts +8 -1
- package/fjs/types/function/module.f.mjs +8 -1
- package/fjs/types/function/operator/module.f.d.mts +2 -1
- package/fjs/types/function/operator/module.f.mjs +2 -2
- package/fjs/types/list/module.f.d.mts +10 -3
- package/fjs/types/list/module.f.mjs +6 -4
- package/fjs/types/list/proof.f.d.mts +4 -1
- package/fjs/types/list/proof.f.mjs +4 -2
- package/fjs/types/nibble_set/module.f.d.mts +2 -1
- package/fjs/types/nibble_set/module.f.mjs +2 -2
- package/fjs/types/nominal/module.f.d.mts +2 -1
- package/fjs/types/nominal/module.f.mjs +2 -1
- package/fjs/types/nullable/module.f.d.mts +26 -6
- package/fjs/types/nullable/module.f.mjs +25 -6
- package/fjs/types/nullable/proof.f.d.mts +4 -0
- package/fjs/types/nullable/proof.f.mjs +15 -0
- package/fjs/types/number/module.f.d.mts +4 -0
- package/fjs/types/number/module.f.mjs +4 -3
- package/fjs/types/object/module.f.d.mts +26 -4
- package/fjs/types/object/module.f.mjs +26 -7
- package/fjs/types/object/proof.f.d.mts +5 -2
- package/fjs/types/object/proof.f.mjs +6 -3
- package/fjs/types/object/structurally_same/module.f.d.mts +39 -0
- package/fjs/types/object/structurally_same/module.f.mjs +59 -0
- package/fjs/types/object/structurally_same/proof.f.d.mts +6 -0
- package/fjs/types/object/structurally_same/proof.f.mjs +73 -0
- package/fjs/types/ordered_map/module.f.d.mts +5 -0
- package/fjs/types/ordered_map/module.f.mjs +5 -4
- package/fjs/types/ordered_map/proof.f.d.mts +3 -0
- package/fjs/types/ordered_map/proof.f.mjs +4 -1
- package/fjs/types/patricia_trie/module.f.d.mts +2 -1
- package/fjs/types/patricia_trie/module.f.mjs +27 -12
- package/fjs/types/patricia_trie/proof.f.d.mts +3 -0
- package/fjs/types/patricia_trie/proof.f.mjs +4 -1
- package/fjs/types/prime_field/module.f.d.mts +3 -1
- package/fjs/types/prime_field/module.f.mjs +3 -2
- package/fjs/types/range/module.f.d.mts +2 -1
- package/fjs/types/range/module.f.mjs +2 -2
- package/fjs/types/range_map/module.f.d.mts +6 -0
- package/fjs/types/range_map/module.f.mjs +6 -9
- package/fjs/types/range_map/proof.f.d.mts +5 -1
- package/fjs/types/range_map/proof.f.mjs +5 -3
- package/fjs/types/range_set/module.f.d.mts +5 -0
- package/fjs/types/range_set/module.f.mjs +1 -0
- package/fjs/types/range_set/proof.f.d.mts +3 -0
- package/fjs/types/range_set/proof.f.mjs +4 -1
- package/fjs/types/result/module.d.mts +8 -0
- package/fjs/types/result/module.f.d.mts +37 -7
- package/fjs/types/result/module.f.mjs +38 -8
- package/fjs/types/result/module.mjs +9 -1
- package/fjs/types/result/proof.f.d.mts +5 -0
- package/fjs/types/result/proof.f.mjs +22 -2
- package/fjs/types/rtti/common/module.f.d.mts +44 -14
- package/fjs/types/rtti/common/module.f.mjs +42 -36
- package/fjs/types/rtti/common/proof.f.d.mts +4 -0
- package/fjs/types/rtti/common/proof.f.mjs +10 -7
- package/fjs/types/rtti/data/module.f.d.mts +134 -0
- package/fjs/types/rtti/data/module.f.mjs +1053 -0
- package/fjs/types/rtti/data/proof.f.d.mts +76 -0
- package/fjs/types/rtti/data/proof.f.mjs +589 -0
- package/fjs/types/rtti/data/types.d.ts +83 -0
- package/fjs/types/rtti/module.f.d.mts +12 -5
- package/fjs/types/rtti/module.f.mjs +7 -5
- package/fjs/types/rtti/parse/module.f.d.mts +48 -0
- package/fjs/types/rtti/parse/module.f.mjs +45 -34
- package/fjs/types/rtti/parse/proof.f.d.mts +3 -2
- package/fjs/types/rtti/parse/proof.f.mjs +51 -52
- package/fjs/types/rtti/proof.f.d.mts +3 -1
- package/fjs/types/rtti/proof.f.mjs +6 -2
- package/fjs/types/rtti/ts/module.f.d.mts +68 -9
- package/fjs/types/rtti/ts/module.f.mjs +258 -30
- package/fjs/types/rtti/ts/proof.f.d.mts +44 -0
- package/fjs/types/rtti/ts/proof.f.mjs +152 -4
- package/fjs/types/rtti/ts/types.d.ts +25 -1
- package/fjs/types/rtti/types.d.ts +40 -0
- package/fjs/types/sorted_list/module.f.d.mts +4 -1
- package/fjs/types/sorted_list/module.f.mjs +21 -12
- package/fjs/types/sorted_list/proof.f.d.mts +3 -1
- package/fjs/types/sorted_list/proof.f.mjs +3 -1
- package/fjs/types/sorted_set/module.f.d.mts +49 -1
- package/fjs/types/sorted_set/module.f.mjs +26 -2
- package/fjs/types/sorted_set/proof.f.d.mts +4 -1
- package/fjs/types/sorted_set/proof.f.mjs +19 -2
- package/fjs/types/string/module.f.d.mts +4 -0
- package/fjs/types/string/module.f.mjs +4 -3
- package/fjs/types/string_set/module.f.d.mts +3 -1
- package/fjs/types/string_set/module.f.mjs +3 -2
- package/fjs/types/ts/module.f.d.mts +2 -0
- package/fjs/types/ts/module.f.mjs +3 -3
- package/fjs/types/ts/proof.f.d.mts +1 -0
- package/fjs/types/ts/proof.f.mjs +5 -0
- package/fjs/types/ts/types.d.ts +6 -1
- package/fjs/types/uint8array/module.f.d.mts +13 -2
- package/fjs/types/uint8array/module.f.mjs +20 -15
- package/fjs/website/module.f.d.mts +5 -2
- package/fjs/website/module.f.mjs +6 -8
- package/fjs/website/proof.f.mjs +2 -1
- package/package.json +3 -3
- package/fjs/asn.1/types.js +0 -6
- package/fjs/asserts/types.js +0 -6
- package/fjs/basen/types.js +0 -6
- package/fjs/bnf/data/types.js +0 -6
- package/fjs/bnf/descent/types.js +0 -6
- package/fjs/bnf/ll1/types.js +0 -6
- package/fjs/bnf/token_symbol/types.js +0 -6
- package/fjs/bnf/types.js +0 -6
- package/fjs/cas/evo/types.js +0 -7
- package/fjs/cas/types.js +0 -6
- package/fjs/ci/common/types.js +0 -1
- package/fjs/ci/nix/types.js +0 -6
- package/fjs/ci/types.js +0 -6
- package/fjs/cli/types.js +0 -6
- package/fjs/common/monoid/types.js +0 -6
- package/fjs/crypto/pow/types.js +0 -6
- package/fjs/crypto/secp/types.js +0 -6
- package/fjs/crypto/sha2/types.js +0 -6
- package/fjs/crypto/sign/types.js +0 -6
- package/fjs/crypto/vdf/types.js +0 -6
- package/fjs/dev/package_json/module.f.d.mts +0 -32
- package/fjs/dev/package_json/module.f.mjs +0 -37
- package/fjs/dev/package_json/proof.f.d.mts +0 -6
- package/fjs/dev/package_json/proof.f.mjs +0 -32
- package/fjs/dev/types.js +0 -6
- package/fjs/djs/ast/types.js +0 -8
- package/fjs/djs/parser/types.js +0 -7
- package/fjs/djs/tokenizer/types.js +0 -7
- package/fjs/djs/types.js +0 -7
- package/fjs/effects/eff/module.f.d.mts +0 -10
- package/fjs/effects/eff/module.f.mjs +0 -68
- package/fjs/effects/eff/proof.f.d.mts +0 -12
- package/fjs/effects/eff/proof.f.mjs +0 -66
- package/fjs/effects/eff/types.d.ts +0 -71
- package/fjs/effects/eff/types.js +0 -6
- package/fjs/effects/list/types.js +0 -6
- package/fjs/effects/memory/types.js +0 -6
- package/fjs/effects/mock/types.js +0 -6
- package/fjs/effects/node/types.js +0 -6
- package/fjs/effects/node/virtual/types.js +0 -7
- package/fjs/effects/types.js +0 -6
- package/fjs/emergent_testing/all.test.d.ts +0 -1
- package/fjs/emergent_testing/all.test.js +0 -5
- package/fjs/emergent_testing/scenarios/all.d.ts +0 -1
- package/fjs/emergent_testing/scenarios/all.js +0 -1
- package/fjs/emergent_testing/scenarios/async-subtests.fail.d.ts +0 -6
- package/fjs/emergent_testing/scenarios/async-subtests.fail.js +0 -9
- package/fjs/emergent_testing/scenarios/async-subtests.pass.d.ts +0 -6
- package/fjs/emergent_testing/scenarios/async-subtests.pass.js +0 -9
- package/fjs/emergent_testing/scenarios/async.fail.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/async.fail.js +0 -6
- package/fjs/emergent_testing/scenarios/async.pass.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/async.pass.js +0 -5
- package/fjs/emergent_testing/scenarios/fail.fail.d.ts +0 -3
- package/fjs/emergent_testing/scenarios/fail.fail.js +0 -3
- package/fjs/emergent_testing/scenarios/return-value.pass.js +0 -4
- package/fjs/emergent_testing/scenarios/thenable.pass.d.ts +0 -5
- package/fjs/emergent_testing/scenarios/thenable.pass.js +0 -11
- package/fjs/emergent_testing/scenarios/thenable2.pass.d.ts +0 -5
- package/fjs/emergent_testing/scenarios/thenable2.pass.js +0 -3
- package/fjs/emergent_testing/scenarios/throw.pass.d.ts +0 -5
- package/fjs/emergent_testing/scenarios/throw.pass.js +0 -3
- package/fjs/emergent_testing/types.js +0 -6
- package/fjs/js/tokenizer/types.js +0 -6
- package/fjs/media/html/types.js +0 -6
- package/fjs/media/json/parser/types.js +0 -6
- package/fjs/media/json/tokenizer/types.js +0 -6
- package/fjs/media/json/types.js +0 -13
- package/fjs/media/nix/types.js +0 -6
- package/fjs/media/revision/types.js +0 -8
- package/fjs/media/type/types.js +0 -6
- package/fjs/media/types.js +0 -7
- package/fjs/nanvm/types.js +0 -11
- package/fjs/protocol/json_rpc/types.js +0 -8
- package/fjs/protocol/mcp/types.js +0 -8
- package/fjs/sul/id/types.js +0 -6
- package/fjs/sul/level/hash/types.js +0 -6
- package/fjs/sul/level/literal/types.js +0 -6
- package/fjs/sul/types.js +0 -6
- package/fjs/text/sgr/types.js +0 -6
- package/fjs/text/types.js +0 -6
- package/fjs/text/utf16/types.js +0 -6
- package/fjs/text/utf8/types.js +0 -6
- package/fjs/types/array/types.js +0 -6
- package/fjs/types/bigfloat/types.js +0 -6
- package/fjs/types/bigint/types.js +0 -6
- package/fjs/types/bit_vec/types.js +0 -6
- package/fjs/types/btree/find/types.js +0 -6
- package/fjs/types/btree/types/types.js +0 -6
- package/fjs/types/byte_set/types.js +0 -6
- package/fjs/types/function/compare/types.js +0 -6
- package/fjs/types/function/operator/types.js +0 -6
- package/fjs/types/function/types.js +0 -6
- package/fjs/types/list/types.js +0 -6
- package/fjs/types/nibble_set/types.js +0 -6
- package/fjs/types/nominal/types.js +0 -6
- package/fjs/types/nullable/types.js +0 -6
- package/fjs/types/object/types.js +0 -8
- package/fjs/types/option/types.js +0 -6
- package/fjs/types/ordered_map/types.js +0 -6
- package/fjs/types/patricia_trie/types.js +0 -6
- package/fjs/types/phantom/types.js +0 -11
- package/fjs/types/prime_field/types.js +0 -6
- package/fjs/types/range/types.js +0 -6
- package/fjs/types/range_map/types.js +0 -6
- package/fjs/types/result/types.js +0 -6
- package/fjs/types/rtti/common/types.js +0 -1
- package/fjs/types/rtti/parse/types.js +0 -1
- package/fjs/types/rtti/ts/types.js +0 -1
- package/fjs/types/rtti/types.js +0 -1
- package/fjs/types/rtti/validate/module.f.d.mts +0 -6
- package/fjs/types/rtti/validate/module.f.mjs +0 -169
- package/fjs/types/rtti/validate/proof.f.d.mts +0 -125
- package/fjs/types/rtti/validate/proof.f.mjs +0 -437
- package/fjs/types/rtti/validate/types.d.ts +0 -6
- package/fjs/types/rtti/validate/types.js +0 -1
- package/fjs/types/sorted_list/types.js +0 -6
- package/fjs/types/sorted_set/types.js +0 -6
- package/fjs/types/string_set/types.js +0 -6
- package/fjs/types/ts/types.js +0 -8
|
@@ -1,31 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Converts an rtti schema to a JSON Schema (draft 2020-12) object.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `
|
|
4
|
+
* {@link toJsonSchema} routes through the serializable RTTI data form
|
|
5
|
+
* (`fjs/types/rtti/data`): `thunk RTTI → toData → dataToJsonSchema`. The data
|
|
6
|
+
* form is a finite graph, so recursive schemas — which the thunk graph
|
|
7
|
+
* represents as self-referencing functions with no leaves — terminate:
|
|
8
|
+
* every named rule is emitted exactly once under `$defs` and every graph
|
|
9
|
+
* edge becomes a local `$ref`.
|
|
10
|
+
*
|
|
11
|
+
* Graph discovery, canonical identity, and definition naming belong to the
|
|
12
|
+
* RTTI data layer; this module only translates the finite graph, so the
|
|
13
|
+
* output is deterministic for equal canonical data: `anyOf` members follow
|
|
14
|
+
* the data form's kind order (`null`, `undefined`, booleans, numbers,
|
|
15
|
+
* strings, bigints, arrays, objects), and `properties`/`required` follow
|
|
16
|
+
* its sorted key order.
|
|
6
17
|
*
|
|
7
18
|
* @module
|
|
8
19
|
*
|
|
9
|
-
* @import {
|
|
10
|
-
* @import {
|
|
11
|
-
* @import { Primitive } from '../../../djs/types.ts'
|
|
20
|
+
* @import { Type as RttiType } from '../../../types/rtti/types.ts'
|
|
21
|
+
* @import { ArraySet, Data, KindSet, Node, ObjectSet, RuleSet, UnionSet } from '../../../types/rtti/data/types.ts'
|
|
12
22
|
* @import { Ts } from '../../../types/rtti/ts/types.ts'
|
|
13
23
|
* @import { Phantom } from '../../../types/phantom/types.ts'
|
|
14
24
|
*/
|
|
15
25
|
import type { Type as RttiType } from '../../../types/rtti/types.ts';
|
|
26
|
+
import type { Data } from '../../../types/rtti/data/types.ts';
|
|
16
27
|
import type { Ts } from '../../../types/rtti/ts/types.ts';
|
|
17
28
|
import type { Phantom } from '../../../types/phantom/types.ts';
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
readonly const: import("../../../types/rtti/types.ts").Or<readonly [() => readonly ['or', typeof import("../rtti/module.f.mjs").primitive, typeof import("../rtti/module.f.mjs").object, typeof import("../rtti/module.f.mjs").array], undefined]>;
|
|
21
|
-
readonly not: import("../../../types/rtti/types.ts").Or<readonly [Phantom<() => readonly ['const', /*elided*/ any], _UnknownConst>, undefined]>;
|
|
22
|
-
readonly anyOf: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts").Type1<"array", Phantom<() => readonly ['const', any], _UnknownConst>>, undefined]>;
|
|
23
|
-
readonly items: import("../../../types/rtti/types.ts").Or<[Phantom<() => readonly ['const', any], _UnknownConst>, false, undefined]>;
|
|
24
|
-
readonly prefixItems: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts").Type1<"array", Phantom<() => readonly ['const', any], _UnknownConst>>, undefined]>;
|
|
25
|
-
readonly properties: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts").Type1<"record", Phantom<() => readonly ['const', any], _UnknownConst>>, undefined]>;
|
|
26
|
-
readonly required: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts").Type1<"array", import("../../../types/rtti/types.ts")._Type0<"string">>, undefined]>;
|
|
27
|
-
readonly additionalProperties: import("../../../types/rtti/types.ts").Or<readonly [Phantom<() => readonly ['const', any], _UnknownConst>, undefined]>;
|
|
28
|
-
}];
|
|
29
|
+
/** @type {() => readonly ['const', typeof unknownConst]} */
|
|
30
|
+
declare const unknownThunk: () => readonly ['const', typeof unknownConst];
|
|
29
31
|
/**
|
|
30
32
|
* rtti schema for a JSON Schema (draft 2020-12) document.
|
|
31
33
|
* @type {Phantom<typeof unknownThunk, _UnknownConst>}
|
|
@@ -35,43 +37,75 @@ export type Unknown = Ts<typeof unknown>;
|
|
|
35
37
|
/** A JSON Schema (draft 2020-12) document — the subset of keywords that `toJsonSchema` emits. */
|
|
36
38
|
/** @typedef {Ts<typeof unknown>} Unknown */
|
|
37
39
|
declare const unknownConst: {
|
|
40
|
+
readonly $schema: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts")._Type0<"string">, undefined]>;
|
|
41
|
+
readonly $ref: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts")._Type0<"string">, undefined]>;
|
|
42
|
+
readonly $defs: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts").Type1<"record", Phantom<() => readonly ['const', typeof unknownConst], _UnknownConst>>, undefined]>;
|
|
38
43
|
readonly type: import("../../../types/rtti/types.ts").Or<["boolean", "number", "string", "integer", "array", "object", undefined]>;
|
|
39
44
|
readonly const: import("../../../types/rtti/types.ts").Or<readonly [() => readonly ['or', typeof import("../rtti/module.f.mjs").primitive, typeof import("../rtti/module.f.mjs").object, typeof import("../rtti/module.f.mjs").array], undefined]>;
|
|
40
|
-
readonly not: import("../../../types/rtti/types.ts").Or<readonly [Phantom<typeof
|
|
41
|
-
readonly anyOf: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts").Type1<"array", Phantom<typeof
|
|
42
|
-
readonly items: import("../../../types/rtti/types.ts").Or<[Phantom<typeof
|
|
43
|
-
readonly prefixItems: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts").Type1<"array", Phantom<typeof
|
|
44
|
-
readonly
|
|
45
|
+
readonly not: import("../../../types/rtti/types.ts").Or<readonly [Phantom<() => readonly ['const', typeof unknownConst], _UnknownConst>, undefined]>;
|
|
46
|
+
readonly anyOf: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts").Type1<"array", Phantom<() => readonly ['const', typeof unknownConst], _UnknownConst>>, undefined]>;
|
|
47
|
+
readonly items: import("../../../types/rtti/types.ts").Or<[Phantom<() => readonly ['const', typeof unknownConst], _UnknownConst>, false, undefined]>;
|
|
48
|
+
readonly prefixItems: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts").Type1<"array", Phantom<() => readonly ['const', typeof unknownConst], _UnknownConst>>, undefined]>;
|
|
49
|
+
readonly minItems: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts")._Type0<"number">, undefined]>;
|
|
50
|
+
readonly properties: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts").Type1<"record", Phantom<() => readonly ['const', typeof unknownConst], _UnknownConst>>, undefined]>;
|
|
45
51
|
readonly required: import("../../../types/rtti/types.ts").Or<readonly [import("../../../types/rtti/types.ts").Type1<"array", import("../../../types/rtti/types.ts")._Type0<"string">>, undefined]>;
|
|
46
|
-
readonly additionalProperties: import("../../../types/rtti/types.ts").Or<readonly [Phantom<typeof
|
|
52
|
+
readonly additionalProperties: import("../../../types/rtti/types.ts").Or<readonly [Phantom<() => readonly ['const', typeof unknownConst], _UnknownConst>, undefined]>;
|
|
47
53
|
};
|
|
48
54
|
export type _UnknownConst = {
|
|
55
|
+
readonly $schema?: Ts<typeof unknownConst.$schema>;
|
|
56
|
+
readonly $ref?: Ts<typeof unknownConst.$ref>;
|
|
57
|
+
readonly $defs?: Ts<typeof unknownConst.$defs>;
|
|
49
58
|
readonly type?: Ts<typeof unknownConst.type>;
|
|
50
59
|
readonly const?: Ts<typeof unknownConst.const>;
|
|
51
60
|
readonly not?: Ts<typeof unknownConst.not>;
|
|
52
61
|
readonly anyOf?: Ts<typeof unknownConst.anyOf>;
|
|
53
62
|
readonly items?: Ts<typeof unknownConst.items>;
|
|
54
63
|
readonly prefixItems?: Ts<typeof unknownConst.prefixItems>;
|
|
64
|
+
readonly minItems?: Ts<typeof unknownConst.minItems>;
|
|
55
65
|
readonly properties?: Ts<typeof unknownConst.properties>;
|
|
56
66
|
readonly required?: Ts<typeof unknownConst.required>;
|
|
57
67
|
readonly additionalProperties?: Ts<typeof unknownConst.additionalProperties>;
|
|
58
68
|
};
|
|
59
69
|
/**
|
|
60
|
-
* Converts
|
|
70
|
+
* Converts a serializable RTTI {@link Data} (from `toData`) to a JSON Schema
|
|
71
|
+
* (draft 2020-12) object.
|
|
72
|
+
*
|
|
73
|
+
* Every named rule is emitted exactly once under `$defs` and each reference
|
|
74
|
+
* becomes a local `$ref` — self- and mutual recursion terminate, and the
|
|
75
|
+
* root itself is a `$ref` when the entry is a named definition. Definition
|
|
76
|
+
* names come from the data form (deterministic for equal canonical data)
|
|
77
|
+
* and are JSON Pointer-escaped, then percent-encoded, for the `$ref`
|
|
78
|
+
* fragment. A reference naming a missing definition panics.
|
|
79
|
+
*
|
|
80
|
+
* @type {(data: Data) => Unknown}
|
|
81
|
+
*/
|
|
82
|
+
export declare const dataToJsonSchema: (data: Data) => Unknown;
|
|
83
|
+
/**
|
|
84
|
+
* Converts an rtti `Type` to a JSON Schema (draft 2020-12) object, through
|
|
85
|
+
* the canonical data form: `toData` first, then {@link dataToJsonSchema}.
|
|
61
86
|
*
|
|
62
87
|
* | rtti | JSON Schema |
|
|
63
88
|
* |-----------------------------------------------|-------------------------------------------------------------------------------------|
|
|
64
89
|
* | `boolean` / `number` / `string` | `{ "type": "..." }` |
|
|
65
90
|
* | `bigint` | `{ "type": "integer" }` (lossy; JSON integers are IEEE-754 doubles) |
|
|
66
91
|
* | `unknown` | `{}` (always-true schema) |
|
|
67
|
-
* |
|
|
92
|
+
* | `never` / `or()` | `{ "not": {} }` (no JSON value satisfies this) |
|
|
93
|
+
* | primitive const (`42`, `'x'`, `null`) | `{ "const": <value> }` |
|
|
94
|
+
* | `or(true, false)` | `{ "type": "boolean" }` (the union normalizes to the whole kind) |
|
|
68
95
|
* | `bigint` const | `{ "const": Number(value) }` (lossy for \|value\| > MAX_SAFE_INTEGER) |
|
|
69
|
-
* | `undefined` const | `{ "not": {} }`
|
|
96
|
+
* | `undefined` const | `{ "not": {} }` |
|
|
70
97
|
* | struct `{ a: T, … }` | `{ "type": "object", "properties": { "a": …T… }, "required": [non-optional keys] }` |
|
|
71
|
-
* | tuple `[A, B]` | `{ "type": "array", "prefixItems": […A…, …B…], "items": false }`
|
|
98
|
+
* | tuple `[A, B]` | `{ "type": "array", "prefixItems": […A…, …B…], "minItems": 2, "items": false }` |
|
|
72
99
|
* | `array(T)` | `{ "type": "array", "items": …T… }` |
|
|
73
100
|
* | `record(T)` | `{ "type": "object", "additionalProperties": …T… }` |
|
|
74
|
-
* | `or(...types)` | `{ "anyOf": […each…] }
|
|
101
|
+
* | `or(...types)` | `{ "anyOf": […each…] }`, normalized and in canonical kind order |
|
|
102
|
+
* | recursive schema | `{ "$ref": "#/$defs/<name>", "$defs": { "<name>": … } }` |
|
|
103
|
+
*
|
|
104
|
+
* The union rows follow the data form's normalization: operands are merged
|
|
105
|
+
* kind-wise, literals covered by their whole kind are absorbed
|
|
106
|
+
* (`or(42, number)` is all numbers), subsumed patterns are dropped, and
|
|
107
|
+
* duplicates collapse — so structurally different but equivalent thunk
|
|
108
|
+
* schemas produce the same JSON Schema.
|
|
75
109
|
*
|
|
76
110
|
* @type {(rtti: RttiType) => Unknown}
|
|
77
111
|
*/
|
|
@@ -1,23 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Converts an rtti schema to a JSON Schema (draft 2020-12) object.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `
|
|
4
|
+
* {@link toJsonSchema} routes through the serializable RTTI data form
|
|
5
|
+
* (`fjs/types/rtti/data`): `thunk RTTI → toData → dataToJsonSchema`. The data
|
|
6
|
+
* form is a finite graph, so recursive schemas — which the thunk graph
|
|
7
|
+
* represents as self-referencing functions with no leaves — terminate:
|
|
8
|
+
* every named rule is emitted exactly once under `$defs` and every graph
|
|
9
|
+
* edge becomes a local `$ref`.
|
|
10
|
+
*
|
|
11
|
+
* Graph discovery, canonical identity, and definition naming belong to the
|
|
12
|
+
* RTTI data layer; this module only translates the finite graph, so the
|
|
13
|
+
* output is deterministic for equal canonical data: `anyOf` members follow
|
|
14
|
+
* the data form's kind order (`null`, `undefined`, booleans, numbers,
|
|
15
|
+
* strings, bigints, arrays, objects), and `properties`/`required` follow
|
|
16
|
+
* its sorted key order.
|
|
6
17
|
*
|
|
7
18
|
* @module
|
|
8
19
|
*
|
|
9
|
-
* @import {
|
|
10
|
-
* @import {
|
|
11
|
-
* @import { Primitive } from '../../../djs/types.ts'
|
|
20
|
+
* @import { Type as RttiType } from '../../../types/rtti/types.ts'
|
|
21
|
+
* @import { ArraySet, Data, KindSet, Node, ObjectSet, RuleSet, UnionSet } from '../../../types/rtti/data/types.ts'
|
|
12
22
|
* @import { Ts } from '../../../types/rtti/ts/types.ts'
|
|
13
23
|
* @import { Phantom } from '../../../types/phantom/types.ts'
|
|
14
24
|
*/
|
|
15
25
|
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
26
|
+
import { assert, assertNotNullish } from '../../../asserts/module.f.mjs'
|
|
27
|
+
import { at, definedEntries } from '../../../types/object/module.f.mjs'
|
|
28
|
+
import { array, number, option, or, record, string } from '../../../types/rtti/module.f.mjs'
|
|
29
|
+
import { cmp, toData, unitBit, unknown as top, withoutUnits } from '../../../types/rtti/data/module.f.mjs'
|
|
18
30
|
import { unknown as jsonUnknown } from '../rtti/module.f.mjs'
|
|
19
31
|
|
|
20
|
-
|
|
32
|
+
/** @type {() => readonly ['const', typeof unknownConst]} */
|
|
33
|
+
const unknownThunk = () => ['const', unknownConst]
|
|
21
34
|
|
|
22
35
|
/**
|
|
23
36
|
* rtti schema for a JSON Schema (draft 2020-12) document.
|
|
@@ -29,12 +42,16 @@ export const unknown = unknownThunk
|
|
|
29
42
|
/** @typedef {Ts<typeof unknown>} Unknown */
|
|
30
43
|
|
|
31
44
|
const unknownConst = /** @type {const} */ ({
|
|
45
|
+
$schema: option(string),
|
|
46
|
+
$ref: option(string),
|
|
47
|
+
$defs: option(record(unknown)),
|
|
32
48
|
type: or('boolean', 'number', 'string', 'integer', 'array', 'object', undefined),
|
|
33
49
|
const: option(jsonUnknown),
|
|
34
50
|
not: option(unknown),
|
|
35
51
|
anyOf: option(array(unknown)),
|
|
36
52
|
items: or(unknown, false, undefined),
|
|
37
53
|
prefixItems: option(array(unknown)),
|
|
54
|
+
minItems: option(number),
|
|
38
55
|
properties: option(record(unknown)),
|
|
39
56
|
required: option(array(string)),
|
|
40
57
|
additionalProperties: option(unknown),
|
|
@@ -45,100 +62,238 @@ const unknownConst = /** @type {const} */ ({
|
|
|
45
62
|
*
|
|
46
63
|
* The `?` markers are required even though `Ts<>` already includes `undefined`
|
|
47
64
|
* in each field type. Without `?`, `Unknown = _UnknownConst` would require all
|
|
48
|
-
*
|
|
65
|
+
* 12 fields to be present in every object literal returned by `toJsonSchema`,
|
|
49
66
|
* because TypeScript distinguishes "field absent" (`?`) from "field present but
|
|
50
67
|
* undefined" (`T | undefined`). JSON Schema objects only include the fields
|
|
51
|
-
* they need, so all fields must be optional.
|
|
68
|
+
* they need, so all fields must be optional. `$defs` is an *open* map — an
|
|
69
|
+
* absent entry types as `undefined`, so missing-reference handling cannot be
|
|
70
|
+
* skipped.
|
|
52
71
|
* @typedef {{
|
|
72
|
+
* readonly $schema?: Ts<typeof unknownConst.$schema>
|
|
73
|
+
* readonly $ref?: Ts<typeof unknownConst.$ref>
|
|
74
|
+
* readonly $defs?: Ts<typeof unknownConst.$defs>
|
|
53
75
|
* readonly type?: Ts<typeof unknownConst.type>
|
|
54
76
|
* readonly const?: Ts<typeof unknownConst.const>
|
|
55
77
|
* readonly not?: Ts<typeof unknownConst.not>
|
|
56
78
|
* readonly anyOf?: Ts<typeof unknownConst.anyOf>
|
|
57
79
|
* readonly items?: Ts<typeof unknownConst.items>
|
|
58
80
|
* readonly prefixItems?: Ts<typeof unknownConst.prefixItems>
|
|
81
|
+
* readonly minItems?: Ts<typeof unknownConst.minItems>
|
|
59
82
|
* readonly properties?: Ts<typeof unknownConst.properties>
|
|
60
83
|
* readonly required?: Ts<typeof unknownConst.required>
|
|
61
84
|
* readonly additionalProperties?: Ts<typeof unknownConst.additionalProperties>
|
|
62
85
|
* }} _UnknownConst
|
|
63
86
|
*/
|
|
64
87
|
|
|
65
|
-
|
|
66
|
-
|
|
88
|
+
const nullBit = unitBit(null)
|
|
89
|
+
const undefinedBit = unitBit(undefined)
|
|
90
|
+
const falseBit = unitBit(false)
|
|
91
|
+
const trueBit = unitBit(true)
|
|
92
|
+
const booleanBits = falseBit | trueBit
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Encodes a definition name for use inside a local `$ref` URI fragment:
|
|
96
|
+
* JSON Pointer escaping first (`~` → `~0`, `/` → `~1`), then
|
|
97
|
+
* percent-encoding of the remaining code points for the URI-fragment path
|
|
98
|
+
* segment. The order matters: a literal name `%2F` must encode to `%252F`,
|
|
99
|
+
* so URI decoding restores the literal `%2F` segment instead of a `/` that
|
|
100
|
+
* JSON Pointer evaluation would then misread as a separator.
|
|
101
|
+
*
|
|
102
|
+
* @type {(name: string) => string}
|
|
67
103
|
*/
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
104
|
+
const refEncode = name => {
|
|
105
|
+
let result = ''
|
|
106
|
+
for (const c of name) {
|
|
107
|
+
result += c === '~' ? '~0' : c === '/' ? '~1' : encodeURIComponent(c)
|
|
108
|
+
}
|
|
109
|
+
return result
|
|
73
110
|
}
|
|
74
111
|
|
|
75
|
-
/**
|
|
76
|
-
*
|
|
112
|
+
/**
|
|
113
|
+
* A local `$ref` to a named definition. A reference must name an existing
|
|
114
|
+
* definition — a dangling name is malformed data and panics. The lookup is
|
|
115
|
+
* own-property only, so a name inherited from `Object.prototype`
|
|
116
|
+
* (`toString`, `constructor`, …) is still rejected.
|
|
117
|
+
*
|
|
118
|
+
* @type {(rules: RuleSet) => (name: string) => Unknown}
|
|
119
|
+
*/
|
|
120
|
+
const refSchema = rules => name => {
|
|
121
|
+
assert(at(name)(rules) !== null, `missing definition: ${name}`)
|
|
122
|
+
return { $ref: `#/$defs/${refEncode(name)}` }
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** @type {(rules: RuleSet) => (n: Node) => Unknown} */
|
|
126
|
+
const nodeSchema = rules => n =>
|
|
127
|
+
typeof n === 'string' ? refSchema(rules)(n) : unionSchema(rules)(n)
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The schemas of one kind component: nothing when absent, the whole kind
|
|
131
|
+
* when `true`, one schema per member otherwise.
|
|
132
|
+
*
|
|
133
|
+
* @template T
|
|
134
|
+
* @param {KindSet<T> | undefined} k
|
|
135
|
+
* @param {Unknown} whole
|
|
136
|
+
* @param {(v: T) => Unknown} item
|
|
137
|
+
* @returns {readonly Unknown[]}
|
|
138
|
+
*/
|
|
139
|
+
const kindSchemas = (k, whole, item) =>
|
|
140
|
+
k === undefined ? [] :
|
|
141
|
+
k === true ? [whole] :
|
|
142
|
+
k.map(item)
|
|
143
|
+
|
|
144
|
+
/** @type {(v: boolean | number | string | null) => Unknown} */
|
|
145
|
+
const constSchema = v => ({ const: v })
|
|
146
|
+
|
|
147
|
+
/** bigint consts are represented as numbers (lossy for |value| > MAX_SAFE_INTEGER) */
|
|
148
|
+
/** @type {(v: bigint) => Unknown} */
|
|
149
|
+
const bigintConstSchema = v => ({ const: Number(v) })
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* The unit kind: `null` and `undefined` are their own singletons — no JSON
|
|
153
|
+
* value is `undefined`, hence `{ "not": {} }` — and both boolean bits
|
|
154
|
+
* together are the `boolean` type with no special-case rule.
|
|
155
|
+
*
|
|
156
|
+
* @type {(bits: number) => readonly Unknown[]}
|
|
157
|
+
*/
|
|
158
|
+
const unitSchemas = bits => [
|
|
159
|
+
...((bits & nullBit) === 0 ? [] : [constSchema(null)]),
|
|
160
|
+
...((bits & undefinedBit) === 0 ? [] : [{ not: {} }]),
|
|
161
|
+
...((bits & booleanBits) === booleanBits ? [{ type: /** @type {const} */ ('boolean') }]
|
|
162
|
+
: (bits & falseBit) !== 0 ? [constSchema(false)]
|
|
163
|
+
: (bits & trueBit) !== 0 ? [constSchema(true)]
|
|
164
|
+
: []),
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* A set of arrays: `prefixItems` for the tuple prefix, `items` for the
|
|
169
|
+
* elements past it — `false` when the length is exact, so a tuple admits
|
|
170
|
+
* nothing beyond its prefix and the empty tuple is `{ "items": false }`.
|
|
171
|
+
* `prefixItems` alone constrains only elements that exist (draft 2020-12
|
|
172
|
+
* implies no minimum length), so a non-empty prefix also emits `minItems`.
|
|
173
|
+
*
|
|
174
|
+
* @type {(rules: RuleSet) => (p: ArraySet) => Unknown}
|
|
175
|
+
*/
|
|
176
|
+
const arraySetSchema = rules => p => ({
|
|
177
|
+
type: 'array',
|
|
178
|
+
...(p.prefix.length === 0 ? {} : {
|
|
179
|
+
prefixItems: p.prefix.map(nodeSchema(rules)),
|
|
180
|
+
minItems: p.prefix.length,
|
|
181
|
+
}),
|
|
182
|
+
items: p.rest === undefined ? false : nodeSchema(rules)(p.rest),
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
/** Whether the node's value set admits `undefined` — its unit bit, read
|
|
186
|
+
* through a reference if needed.
|
|
187
|
+
* @type {(rules: RuleSet) => (n: Node) => boolean}
|
|
77
188
|
*/
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
if (t !== 'or') { return rtti }
|
|
82
|
-
const rest = r.flatMap(t => t !== undefined ? [t] : [])
|
|
83
|
-
return rest.length === 1 ? rest[0] : or(...rest)
|
|
189
|
+
const admitsUndefined = rules => n => {
|
|
190
|
+
const u = typeof n === 'string' ? assertNotNullish(at(n)(rules)) : n
|
|
191
|
+
return ((u.unit ?? 0) & undefinedBit) !== 0
|
|
84
192
|
}
|
|
85
193
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
194
|
+
/**
|
|
195
|
+
* The node with `undefined` removed — for an optional property's schema,
|
|
196
|
+
* where absence is already expressed by the key not being `required`. A
|
|
197
|
+
* reference is kept as-is: its definition is shared, and the extra
|
|
198
|
+
* `{ "not": {} }` member it may carry matches no JSON value anyway.
|
|
199
|
+
*
|
|
200
|
+
* @type {(n: Node) => Node}
|
|
201
|
+
*/
|
|
202
|
+
const stripUndefined = n =>
|
|
203
|
+
typeof n === 'string' ? n : withoutUnits(undefinedBit)(n)
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* A set of objects: `properties` for the declared keys — a key admitting
|
|
207
|
+
* `undefined` is optional and has `undefined` stripped from its schema,
|
|
208
|
+
* every other key is `required` — and `additionalProperties` for the rest.
|
|
209
|
+
* No `rest` leaves the other keys unconstrained (lenient), matching rtti's
|
|
210
|
+
* open-struct validation semantics.
|
|
211
|
+
*
|
|
212
|
+
* @type {(rules: RuleSet) => (p: ObjectSet) => Unknown}
|
|
213
|
+
*/
|
|
214
|
+
const objectSetSchema = rules => p => {
|
|
215
|
+
const ents = definedEntries(p.props)
|
|
216
|
+
const required = ents.filter(([, n]) => !admitsUndefined(rules)(n)).map(([k]) => k)
|
|
98
217
|
return {
|
|
99
218
|
type: 'object',
|
|
100
|
-
|
|
101
|
-
|
|
219
|
+
...(ents.length === 0 ? {} : {
|
|
220
|
+
properties: Object.fromEntries(ents.map(
|
|
221
|
+
([k, n]) => /** @type {const} */ ([k, nodeSchema(rules)(stripUndefined(n))]))),
|
|
222
|
+
}),
|
|
223
|
+
...(required.length === 0 ? {} : { required }),
|
|
224
|
+
...(p.rest === undefined ? {} : { additionalProperties: nodeSchema(rules)(p.rest) }),
|
|
102
225
|
}
|
|
103
226
|
}
|
|
104
227
|
|
|
105
|
-
/** @type {(
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
228
|
+
/** @type {(u: UnionSet) => boolean} */
|
|
229
|
+
const isTop = u => cmp([{}, u])([{}, top]) === 0
|
|
230
|
+
|
|
231
|
+
/** @type {(rules: RuleSet) => (u: UnionSet) => Unknown} */
|
|
232
|
+
const unionSchema = rules => u => {
|
|
233
|
+
if (isTop(u)) { return {} }
|
|
234
|
+
const members = [
|
|
235
|
+
...unitSchemas(u.unit ?? 0),
|
|
236
|
+
...kindSchemas(u.number, { type: 'number' }, constSchema),
|
|
237
|
+
...kindSchemas(u.string, { type: 'string' }, constSchema),
|
|
238
|
+
...kindSchemas(u.bigint, { type: 'integer' }, bigintConstSchema),
|
|
239
|
+
...kindSchemas(u.array, { type: 'array' }, arraySetSchema(rules)),
|
|
240
|
+
...kindSchemas(u.object, { type: 'object' }, objectSetSchema(rules)),
|
|
241
|
+
]
|
|
242
|
+
return members.length === 0 ? { not: {} }
|
|
243
|
+
: members.length === 1 ? members[0]
|
|
244
|
+
: { anyOf: members }
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Converts a serializable RTTI {@link Data} (from `toData`) to a JSON Schema
|
|
249
|
+
* (draft 2020-12) object.
|
|
250
|
+
*
|
|
251
|
+
* Every named rule is emitted exactly once under `$defs` and each reference
|
|
252
|
+
* becomes a local `$ref` — self- and mutual recursion terminate, and the
|
|
253
|
+
* root itself is a `$ref` when the entry is a named definition. Definition
|
|
254
|
+
* names come from the data form (deterministic for equal canonical data)
|
|
255
|
+
* and are JSON Pointer-escaped, then percent-encoded, for the `$ref`
|
|
256
|
+
* fragment. A reference naming a missing definition panics.
|
|
257
|
+
*
|
|
258
|
+
* @type {(data: Data) => Unknown}
|
|
259
|
+
*/
|
|
260
|
+
export const dataToJsonSchema = ([rules, entry]) => {
|
|
261
|
+
const ruleEntries = definedEntries(rules)
|
|
262
|
+
const root = nodeSchema(rules)(entry)
|
|
263
|
+
return ruleEntries.length === 0 ? root : {
|
|
264
|
+
...root,
|
|
265
|
+
$defs: Object.fromEntries(ruleEntries.map(
|
|
266
|
+
([name, u]) => /** @type {const} */ ([name, unionSchema(rules)(u)]))),
|
|
267
|
+
}
|
|
123
268
|
}
|
|
124
269
|
|
|
125
270
|
/**
|
|
126
|
-
* Converts an rtti `Type` to a JSON Schema (draft 2020-12) object
|
|
271
|
+
* Converts an rtti `Type` to a JSON Schema (draft 2020-12) object, through
|
|
272
|
+
* the canonical data form: `toData` first, then {@link dataToJsonSchema}.
|
|
127
273
|
*
|
|
128
274
|
* | rtti | JSON Schema |
|
|
129
275
|
* |-----------------------------------------------|-------------------------------------------------------------------------------------|
|
|
130
276
|
* | `boolean` / `number` / `string` | `{ "type": "..." }` |
|
|
131
277
|
* | `bigint` | `{ "type": "integer" }` (lossy; JSON integers are IEEE-754 doubles) |
|
|
132
278
|
* | `unknown` | `{}` (always-true schema) |
|
|
133
|
-
* |
|
|
279
|
+
* | `never` / `or()` | `{ "not": {} }` (no JSON value satisfies this) |
|
|
280
|
+
* | primitive const (`42`, `'x'`, `null`) | `{ "const": <value> }` |
|
|
281
|
+
* | `or(true, false)` | `{ "type": "boolean" }` (the union normalizes to the whole kind) |
|
|
134
282
|
* | `bigint` const | `{ "const": Number(value) }` (lossy for \|value\| > MAX_SAFE_INTEGER) |
|
|
135
|
-
* | `undefined` const | `{ "not": {} }`
|
|
283
|
+
* | `undefined` const | `{ "not": {} }` |
|
|
136
284
|
* | struct `{ a: T, … }` | `{ "type": "object", "properties": { "a": …T… }, "required": [non-optional keys] }` |
|
|
137
|
-
* | tuple `[A, B]` | `{ "type": "array", "prefixItems": […A…, …B…], "items": false }`
|
|
285
|
+
* | tuple `[A, B]` | `{ "type": "array", "prefixItems": […A…, …B…], "minItems": 2, "items": false }` |
|
|
138
286
|
* | `array(T)` | `{ "type": "array", "items": …T… }` |
|
|
139
287
|
* | `record(T)` | `{ "type": "object", "additionalProperties": …T… }` |
|
|
140
|
-
* | `or(...types)` | `{ "anyOf": […each…] }
|
|
288
|
+
* | `or(...types)` | `{ "anyOf": […each…] }`, normalized and in canonical kind order |
|
|
289
|
+
* | recursive schema | `{ "$ref": "#/$defs/<name>", "$defs": { "<name>": … } }` |
|
|
290
|
+
*
|
|
291
|
+
* The union rows follow the data form's normalization: operands are merged
|
|
292
|
+
* kind-wise, literals covered by their whole kind are absorbed
|
|
293
|
+
* (`or(42, number)` is all numbers), subsumed patterns are dropped, and
|
|
294
|
+
* duplicates collapse — so structurally different but equivalent thunk
|
|
295
|
+
* schemas produce the same JSON Schema.
|
|
141
296
|
*
|
|
142
297
|
* @type {(rtti: RttiType) => Unknown}
|
|
143
298
|
*/
|
|
144
|
-
export const toJsonSchema =
|
|
299
|
+
export const toJsonSchema = rtti => dataToJsonSchema(toData(rtti))
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @import { Unknown as JsonValue } from '../types.ts'
|
|
3
2
|
* @import { Unknown } from './module.f.mjs'
|
|
3
|
+
* @import { Data } from '../../../types/rtti/data/types.ts'
|
|
4
4
|
*/
|
|
5
|
+
import { number, string } from '../../../types/rtti/module.f.mjs';
|
|
6
|
+
export type _List = () => readonly ['array', _List];
|
|
7
|
+
export type _Tree = () => readonly ['or', typeof number, _Forest];
|
|
8
|
+
export type _Forest = () => readonly ['array', _Tree];
|
|
9
|
+
export type _Lock = () => readonly ['record', () => readonly ['or', typeof string, _Lock]];
|
|
10
|
+
export type _Rec = () => readonly ['record', _Rec];
|
|
5
11
|
export declare const proof: {
|
|
6
12
|
tag0: {
|
|
7
13
|
boolean: () => void;
|
|
@@ -30,11 +36,45 @@ export declare const proof: {
|
|
|
30
36
|
empty: () => void;
|
|
31
37
|
orOptional: () => void;
|
|
32
38
|
withConst: () => void;
|
|
39
|
+
optionalOfEveryKind: () => void;
|
|
33
40
|
};
|
|
34
41
|
schemaUnknownTag: () => void;
|
|
35
42
|
nested: {
|
|
36
43
|
arrayOfRecords: () => void;
|
|
37
44
|
orWithConst: () => void;
|
|
38
45
|
structWithOr: () => void;
|
|
46
|
+
topInsideTuple: () => void;
|
|
47
|
+
};
|
|
48
|
+
normalization: {
|
|
49
|
+
booleanFromConsts: () => void;
|
|
50
|
+
unitMembers: () => void;
|
|
51
|
+
literalAbsorbed: () => void;
|
|
52
|
+
duplicateLiteral: () => void;
|
|
53
|
+
never: () => void;
|
|
54
|
+
emptyTuple: () => void;
|
|
55
|
+
coverageCollapse: () => void;
|
|
56
|
+
commutative: () => void;
|
|
57
|
+
};
|
|
58
|
+
recursion: {
|
|
59
|
+
selfList: () => void;
|
|
60
|
+
mutualEntry: () => void;
|
|
61
|
+
mutualInline: () => void;
|
|
62
|
+
recursiveUnion: () => void;
|
|
63
|
+
recursiveRecord: () => void;
|
|
64
|
+
optionalRecursiveProperty: () => void;
|
|
65
|
+
revisionLock: () => void;
|
|
66
|
+
sharedNonRecursive: () => void;
|
|
67
|
+
};
|
|
68
|
+
data: {
|
|
69
|
+
plain: () => void;
|
|
70
|
+
tupleWithRest: () => void;
|
|
71
|
+
structWithRest: () => void;
|
|
72
|
+
optionalByReference: () => void;
|
|
73
|
+
};
|
|
74
|
+
refEncoding: () => void;
|
|
75
|
+
throw: {
|
|
76
|
+
missingRootDefinition: () => import("./module.f.mjs")._UnknownConst;
|
|
77
|
+
missingPrototypeDefinition: () => import("./module.f.mjs")._UnknownConst;
|
|
78
|
+
missingNestedDefinition: () => import("./module.f.mjs")._UnknownConst;
|
|
39
79
|
};
|
|
40
80
|
};
|