functionalscript 0.43.1 → 0.45.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 +53 -21
- package/fjs/asn.1/module.f.d.mts +123 -0
- package/fjs/asn.1/module.f.mjs +459 -0
- package/fjs/asn.1/proof.f.d.mts +53 -0
- package/fjs/asn.1/proof.f.mjs +321 -0
- package/fjs/asn.1/types.d.ts +37 -0
- package/fjs/asserts/module.f.d.mts +51 -0
- package/fjs/asserts/module.f.mjs +69 -0
- package/fjs/asserts/proof.f.d.mts +14 -0
- package/fjs/asserts/proof.f.mjs +33 -0
- package/fjs/asserts/types.d.ts +11 -0
- package/fjs/basen/base128/module.f.d.mts +22 -0
- package/fjs/basen/base128/module.f.mjs +51 -0
- package/fjs/basen/base128/proof.f.d.mts +4 -0
- package/fjs/basen/base128/proof.f.mjs +32 -0
- package/fjs/basen/base64/module.f.d.mts +14 -0
- package/fjs/basen/base64/module.f.mjs +75 -0
- package/fjs/basen/base64/proof.f.d.mts +19 -0
- package/fjs/basen/base64/proof.f.mjs +150 -0
- package/fjs/basen/cbase32/module.f.d.mts +18 -0
- package/fjs/basen/cbase32/module.f.mjs +61 -0
- package/fjs/basen/cbase32/proof.f.d.mts +10 -0
- package/fjs/basen/cbase32/proof.f.mjs +79 -0
- package/fjs/basen/module.f.d.mts +30 -0
- package/fjs/basen/module.f.mjs +88 -0
- package/fjs/basen/proof.f.mjs +69 -0
- package/fjs/basen/types.d.ts +14 -0
- package/fjs/bnf/data/module.f.d.mts +47 -0
- package/fjs/bnf/data/module.f.mjs +188 -0
- package/fjs/bnf/data/proof.f.d.mts +13 -0
- package/fjs/bnf/data/proof.f.mjs +159 -0
- package/fjs/bnf/data/types.d.ts +35 -0
- package/fjs/bnf/descent/module.f.d.mts +48 -0
- package/fjs/bnf/descent/module.f.mjs +289 -0
- package/fjs/bnf/descent/proof.f.d.mts +14 -0
- package/fjs/bnf/descent/proof.f.mjs +427 -0
- package/fjs/bnf/descent/types.d.ts +79 -0
- package/fjs/bnf/ll1/module.f.d.mts +67 -0
- package/fjs/bnf/ll1/module.f.mjs +341 -0
- package/fjs/bnf/ll1/proof.f.d.mts +18 -0
- package/fjs/bnf/ll1/proof.f.mjs +413 -0
- package/fjs/bnf/ll1/types.d.ts +65 -0
- package/fjs/bnf/module.f.d.mts +173 -0
- package/fjs/bnf/module.f.mjs +339 -0
- package/fjs/bnf/proof.f.d.mts +19 -0
- package/fjs/bnf/proof.f.mjs +165 -0
- package/fjs/bnf/testlib.f.d.mts +10 -0
- package/fjs/bnf/testlib.f.mjs +196 -0
- package/fjs/bnf/token_symbol/module.f.d.mts +36 -0
- package/fjs/bnf/token_symbol/module.f.mjs +63 -0
- package/fjs/bnf/token_symbol/proof.f.mjs +46 -0
- package/fjs/bnf/token_symbol/types.d.ts +27 -0
- package/fjs/bnf/types.d.ts +74 -0
- package/fjs/cas/cli/module.f.d.mts +17 -0
- package/fjs/cas/cli/module.f.mjs +73 -0
- package/fjs/cas/cli/proof.f.d.mts +20 -0
- package/fjs/cas/cli/proof.f.mjs +120 -0
- package/fjs/cas/evo/module.f.d.mts +157 -0
- package/fjs/cas/evo/module.f.mjs +563 -0
- package/fjs/cas/evo/proof.f.d.mts +55 -0
- package/fjs/cas/evo/proof.f.mjs +752 -0
- package/fjs/cas/evo/types.d.ts +111 -0
- package/fjs/cas/module.f.d.mts +68 -0
- package/fjs/cas/module.f.mjs +350 -0
- package/fjs/cas/proof.f.d.mts +29 -0
- package/fjs/cas/proof.f.mjs +371 -0
- package/fjs/cas/types.d.ts +35 -0
- package/fjs/ci/bun/module.f.d.mts +11 -0
- package/fjs/ci/bun/module.f.mjs +20 -0
- package/fjs/ci/common/module.f.d.mts +80 -0
- package/fjs/ci/common/module.f.mjs +88 -0
- package/fjs/ci/common/types.d.ts +27 -0
- package/fjs/ci/config/module.f.d.mts +45 -0
- package/fjs/ci/config/module.f.mjs +89 -0
- package/fjs/ci/deno/module.f.d.mts +16 -0
- package/fjs/ci/deno/module.f.mjs +29 -0
- package/fjs/ci/deno/proof.f.d.mts +4 -0
- package/fjs/ci/deno/proof.f.mjs +26 -0
- package/fjs/ci/module.f.d.mts +19 -0
- package/fjs/ci/module.f.mjs +89 -0
- package/fjs/ci/nix/module.f.d.mts +69 -0
- package/fjs/ci/nix/module.f.mjs +136 -0
- package/fjs/ci/nix/proof.f.d.mts +30 -0
- package/fjs/ci/nix/proof.f.mjs +146 -0
- package/fjs/ci/nix/types.d.ts +16 -0
- package/fjs/ci/node/module.f.d.mts +48 -0
- package/fjs/ci/node/module.f.mjs +139 -0
- package/fjs/ci/node/proof.f.mjs +18 -0
- package/fjs/ci/proof.f.d.mts +22 -0
- package/fjs/ci/proof.f.mjs +220 -0
- package/fjs/ci/rust/module.f.d.mts +15 -0
- package/fjs/ci/rust/module.f.mjs +108 -0
- package/fjs/ci/types.d.ts +9 -0
- package/fjs/cli/module.f.d.mts +16 -0
- package/fjs/cli/module.f.mjs +51 -0
- package/fjs/cli/proof.f.d.mts +18 -0
- package/fjs/cli/proof.f.mjs +132 -0
- package/fjs/cli/types.d.ts +15 -0
- package/fjs/common/monoid/module.f.d.mts +145 -0
- package/fjs/common/monoid/module.f.mjs +267 -0
- package/fjs/common/monoid/proof.f.d.mts +21 -0
- package/fjs/common/monoid/proof.f.mjs +142 -0
- package/fjs/common/monoid/types.d.ts +73 -0
- package/fjs/crypto/hmac/module.f.d.mts +32 -0
- package/fjs/crypto/hmac/module.f.mjs +65 -0
- package/fjs/crypto/hmac/proof.f.mjs +34 -0
- package/fjs/crypto/pow/module.f.d.mts +43 -0
- package/fjs/crypto/pow/module.f.mjs +93 -0
- package/fjs/crypto/pow/proof.f.mjs +121 -0
- package/fjs/crypto/pow/types.d.ts +19 -0
- package/fjs/crypto/secp/module.f.d.mts +61 -0
- package/fjs/crypto/secp/module.f.mjs +204 -0
- package/fjs/crypto/secp/proof.f.d.mts +11 -0
- package/fjs/crypto/secp/proof.f.mjs +139 -0
- package/fjs/crypto/secp/types.d.ts +36 -0
- package/fjs/crypto/sha2/module.f.d.mts +80 -0
- package/fjs/crypto/sha2/module.f.mjs +431 -0
- package/fjs/crypto/sha2/proof.f.d.mts +34 -0
- package/fjs/crypto/sha2/proof.f.mjs +146 -0
- package/fjs/crypto/sha2/types.d.ts +57 -0
- package/fjs/crypto/sign/module.f.d.mts +46 -0
- package/fjs/crypto/sign/module.f.mjs +189 -0
- package/fjs/crypto/sign/proof.f.d.mts +17 -0
- package/fjs/crypto/sign/proof.f.mjs +604 -0
- package/fjs/crypto/sign/types.d.ts +13 -0
- package/fjs/crypto/vdf/module.f.d.mts +34 -0
- package/fjs/crypto/vdf/module.f.mjs +86 -0
- package/fjs/crypto/vdf/proof.f.mjs +106 -0
- package/fjs/crypto/vdf/types.d.ts +18 -0
- package/fjs/dev/module.f.d.mts +59 -0
- package/fjs/dev/module.f.mjs +171 -0
- package/fjs/dev/package_json/module.f.d.mts +39 -0
- package/fjs/dev/package_json/module.f.mjs +40 -0
- package/fjs/dev/package_json/proof.f.mjs +32 -0
- package/fjs/dev/proof.f.d.mts +13 -0
- package/fjs/dev/proof.f.mjs +78 -0
- package/fjs/dev/types.d.ts +14 -0
- package/fjs/dev/update/module.f.d.mts +22 -0
- package/fjs/dev/update/module.f.mjs +37 -0
- package/fjs/dev/update/proof.f.d.mts +10 -0
- package/fjs/dev/update/proof.f.mjs +35 -0
- package/fjs/djs/ast/module.f.d.mts +35 -0
- package/fjs/djs/ast/module.f.mjs +82 -0
- package/fjs/djs/ast/proof.f.mjs +48 -0
- package/fjs/djs/ast/types.d.ts +54 -0
- package/fjs/djs/examples/input.f.mjs +4 -0
- package/fjs/djs/examples/m.f.mjs +1 -0
- package/fjs/djs/module.f.d.mts +17 -0
- package/fjs/djs/module.f.mjs +47 -0
- package/fjs/djs/parser/module.f.d.mts +78 -0
- package/fjs/djs/parser/module.f.mjs +565 -0
- package/fjs/djs/parser/proof.f.d.mts +17 -0
- package/fjs/djs/parser/proof.f.mjs +555 -0
- package/fjs/djs/parser/types.d.ts +11 -0
- package/fjs/djs/proof.f.d.mts +13 -0
- package/fjs/djs/proof.f.mjs +55 -0
- package/fjs/djs/serializer/module.f.d.mts +30 -0
- package/fjs/djs/serializer/module.f.mjs +207 -0
- package/fjs/djs/serializer/proof.f.mjs +116 -0
- package/fjs/djs/tokenizer/module.f.d.mts +65 -0
- package/fjs/djs/tokenizer/module.f.mjs +632 -0
- package/fjs/djs/tokenizer/proof.f.d.mts +17 -0
- package/fjs/djs/tokenizer/proof.f.mjs +992 -0
- package/fjs/djs/tokenizer/types.d.ts +20 -0
- package/fjs/djs/transpiler/module.f.d.mts +33 -0
- package/fjs/djs/transpiler/module.f.mjs +122 -0
- package/fjs/djs/transpiler/proof.f.mjs +76 -0
- package/fjs/djs/transpiler/types.d.ts +25 -0
- package/fjs/djs/types.d.ts +13 -0
- package/fjs/effects/eff/module.f.d.mts +20 -0
- package/fjs/effects/eff/module.f.mjs +70 -0
- package/fjs/effects/eff/proof.f.d.mts +15 -0
- package/fjs/effects/eff/proof.f.mjs +69 -0
- package/fjs/effects/eff/types.d.ts +71 -0
- package/fjs/effects/list/module.f.d.mts +32 -0
- package/fjs/effects/list/module.f.mjs +36 -0
- package/fjs/effects/list/types.d.ts +26 -0
- package/fjs/effects/memory/module.f.d.mts +34 -0
- package/fjs/effects/memory/module.f.mjs +45 -0
- package/fjs/effects/memory/proof.f.d.mts +16 -0
- package/fjs/effects/memory/proof.f.mjs +86 -0
- package/fjs/effects/memory/types.d.ts +18 -0
- package/fjs/effects/mock/module.f.d.mts +14 -0
- package/fjs/effects/mock/module.f.mjs +28 -0
- package/fjs/effects/mock/types.d.ts +15 -0
- package/fjs/effects/module.d.mts +15 -0
- package/fjs/effects/module.f.d.mts +352 -0
- package/fjs/effects/module.f.mjs +383 -0
- package/fjs/effects/module.mjs +26 -0
- package/fjs/effects/node/memory/module.d.mts +27 -0
- package/fjs/effects/node/memory/module.mjs +60 -0
- package/fjs/effects/node/memory/proof.d.mts +12 -0
- package/fjs/effects/node/memory/proof.mjs +44 -0
- package/fjs/effects/node/module.d.mts +59 -0
- package/fjs/effects/node/module.f.d.mts +177 -0
- package/fjs/effects/node/module.f.mjs +348 -0
- package/fjs/effects/node/module.mjs +381 -0
- package/fjs/effects/node/proof.f.d.mts +76 -0
- package/fjs/effects/node/proof.f.mjs +444 -0
- package/fjs/effects/node/types.d.ts +203 -0
- package/fjs/effects/node/virtual/module.f.d.mts +34 -0
- package/fjs/effects/node/virtual/module.f.mjs +435 -0
- package/fjs/effects/node/virtual/proof.f.d.mts +38 -0
- package/fjs/effects/node/virtual/proof.f.mjs +238 -0
- package/fjs/effects/node/virtual/types.d.ts +39 -0
- package/fjs/effects/proof.f.d.mts +65 -0
- package/fjs/effects/proof.f.mjs +234 -0
- package/fjs/effects/types.d.ts +115 -0
- package/fjs/emergent_testing/all.test.d.mts +8 -0
- package/fjs/emergent_testing/all.test.mjs +14 -0
- package/fjs/emergent_testing/example.f.d.mts +16 -0
- package/fjs/emergent_testing/example.f.mjs +34 -0
- package/fjs/emergent_testing/module.f.d.mts +155 -0
- package/fjs/emergent_testing/module.f.mjs +388 -0
- package/fjs/emergent_testing/proof.f.d.mts +97 -0
- package/fjs/emergent_testing/proof.f.mjs +518 -0
- package/fjs/emergent_testing/types.d.ts +53 -0
- package/fjs/fsc/bnf.f.d.mts +6 -0
- package/fjs/fsc/bnf.f.mjs +80 -0
- package/fjs/fsc/json.f.d.mts +16 -0
- package/fjs/fsc/json.f.mjs +127 -0
- package/fjs/fsc/module.f.d.mts +23 -0
- package/fjs/fsc/module.f.mjs +140 -0
- package/fjs/fsc/proof.f.mjs +119 -0
- package/fjs/fsm/module.f.d.mts +27 -0
- package/fjs/fsm/module.f.mjs +99 -0
- package/fjs/fsm/proof.f.d.mts +7 -0
- package/fjs/fsm/proof.f.mjs +149 -0
- package/fjs/js/tokenizer/module.f.d.mts +26 -0
- package/fjs/js/tokenizer/module.f.mjs +759 -0
- package/fjs/js/tokenizer/proof.f.d.mts +12 -0
- package/fjs/js/tokenizer/proof.f.mjs +681 -0
- package/fjs/js/tokenizer/types.d.ts +193 -0
- package/fjs/mcp/cas/module.f.d.mts +156 -0
- package/fjs/mcp/cas/module.f.mjs +302 -0
- package/fjs/mcp/evo/module.f.d.mts +88 -0
- package/fjs/mcp/evo/module.f.mjs +153 -0
- package/fjs/mcp/evo/proof.f.d.mts +17 -0
- package/fjs/mcp/evo/proof.f.mjs +166 -0
- package/fjs/mcp/module.f.d.mts +67 -0
- package/fjs/mcp/module.f.mjs +98 -0
- package/fjs/mcp/proof.f.d.mts +56 -0
- package/fjs/mcp/proof.f.mjs +718 -0
- package/fjs/media/html/module.f.d.mts +55 -0
- package/fjs/media/html/module.f.mjs +169 -0
- package/fjs/media/html/proof.f.d.mts +19 -0
- package/fjs/media/html/proof.f.mjs +80 -0
- package/fjs/media/html/types.d.ts +19 -0
- package/fjs/media/json/module.f.d.mts +48 -0
- package/fjs/media/json/module.f.mjs +104 -0
- package/fjs/media/json/parser/module.f.d.mts +30 -0
- package/fjs/media/json/parser/module.f.mjs +236 -0
- package/fjs/media/json/parser/proof.f.d.mts +8 -0
- package/fjs/media/json/parser/proof.f.mjs +314 -0
- package/fjs/media/json/parser/types.d.ts +39 -0
- package/fjs/media/json/proof.f.mjs +79 -0
- package/fjs/media/json/rtti/module.f.d.mts +38 -0
- package/fjs/media/json/rtti/module.f.mjs +51 -0
- package/fjs/media/json/rtti/proof.f.d.mts +29 -0
- package/fjs/media/json/rtti/proof.f.mjs +86 -0
- package/fjs/media/json/schema/module.f.d.mts +113 -0
- package/fjs/media/json/schema/module.f.mjs +309 -0
- package/fjs/media/json/schema/proof.f.d.mts +81 -0
- package/fjs/media/json/schema/proof.f.mjs +305 -0
- package/fjs/media/json/serializer/module.f.d.mts +40 -0
- package/fjs/media/json/serializer/module.f.mjs +131 -0
- package/fjs/media/json/serializer/proof.f.mjs +92 -0
- package/fjs/media/json/tokenizer/module.f.d.mts +25 -0
- package/fjs/media/json/tokenizer/module.f.mjs +96 -0
- package/fjs/media/json/tokenizer/proof.f.d.mts +8 -0
- package/fjs/media/json/tokenizer/proof.f.mjs +291 -0
- package/fjs/media/json/tokenizer/types.d.ts +17 -0
- package/fjs/media/json/types.d.ts +25 -0
- package/fjs/media/module.f.d.mts +116 -0
- package/fjs/media/module.f.mjs +152 -0
- package/fjs/media/nix/module.f.d.mts +27 -0
- package/fjs/media/nix/module.f.mjs +263 -0
- package/fjs/media/nix/proof.f.d.mts +35 -0
- package/fjs/media/nix/proof.f.mjs +184 -0
- package/fjs/media/nix/types.d.ts +22 -0
- package/fjs/media/proof.f.d.mts +19 -0
- package/fjs/media/proof.f.mjs +159 -0
- package/fjs/media/revision/module.f.d.mts +124 -0
- package/fjs/media/revision/module.f.mjs +163 -0
- package/fjs/media/revision/proof.f.d.mts +46 -0
- package/fjs/media/revision/proof.f.mjs +231 -0
- package/fjs/media/revision/types.d.ts +16 -0
- package/fjs/media/rust/module.f.d.mts +61 -0
- package/fjs/media/rust/module.f.mjs +93 -0
- package/fjs/media/rust/proof.f.d.mts +17 -0
- package/fjs/media/rust/proof.f.mjs +50 -0
- package/fjs/media/type/module.f.d.mts +114 -0
- package/fjs/media/type/module.f.mjs +265 -0
- package/fjs/media/type/proof.f.d.mts +56 -0
- package/fjs/media/type/proof.f.mjs +325 -0
- package/fjs/media/type/types.d.ts +67 -0
- package/fjs/media/types.d.ts +26 -0
- package/fjs/module.d.mts +7 -0
- package/fjs/module.f.d.mts +11 -0
- package/fjs/module.f.mjs +62 -0
- package/fjs/module.mjs +12 -0
- package/fjs/nanvm/module.f.d.mts +54 -0
- package/fjs/nanvm/module.f.mjs +240 -0
- package/fjs/nanvm/proof.f.d.mts +41 -0
- package/fjs/nanvm/proof.f.mjs +173 -0
- package/fjs/nanvm/rust/module.f.d.mts +54 -0
- package/fjs/nanvm/rust/module.f.mjs +166 -0
- package/fjs/nanvm/rust/proof.f.d.mts +21 -0
- package/fjs/nanvm/rust/proof.f.mjs +119 -0
- package/fjs/nanvm/types.d.ts +105 -0
- package/fjs/nanvm/update/module.f.d.mts +23 -0
- package/fjs/nanvm/update/module.f.mjs +33 -0
- package/fjs/nanvm/update/proof.f.d.mts +9 -0
- package/fjs/nanvm/update/proof.f.mjs +32 -0
- package/fjs/path/module.f.d.mts +63 -0
- package/fjs/path/module.f.mjs +98 -0
- package/fjs/path/proof.f.mjs +125 -0
- package/fjs/proof.f.d.mts +13 -0
- package/fjs/proof.f.mjs +51 -0
- package/fjs/protocol/json_rpc/module.f.d.mts +127 -0
- package/fjs/protocol/json_rpc/module.f.mjs +115 -0
- package/fjs/protocol/json_rpc/proof.f.d.mts +41 -0
- package/fjs/protocol/json_rpc/proof.f.mjs +105 -0
- package/fjs/protocol/json_rpc/types.d.ts +30 -0
- package/fjs/protocol/mcp/module.f.d.mts +227 -0
- package/fjs/protocol/mcp/module.f.mjs +369 -0
- package/fjs/protocol/mcp/proof.f.d.mts +57 -0
- package/fjs/protocol/mcp/proof.f.mjs +335 -0
- package/fjs/protocol/mcp/stdio/module.f.d.mts +50 -0
- package/fjs/protocol/mcp/stdio/module.f.mjs +125 -0
- package/fjs/protocol/mcp/stdio/proof.f.d.mts +20 -0
- package/fjs/protocol/mcp/stdio/proof.f.mjs +190 -0
- package/fjs/protocol/mcp/stdio/types.d.ts +14 -0
- package/fjs/protocol/mcp/types.d.ts +59 -0
- package/fjs/sul/id/module.f.d.mts +42 -0
- package/fjs/sul/id/module.f.mjs +144 -0
- package/fjs/sul/id/proof.f.mjs +72 -0
- package/fjs/sul/id/types.d.ts +8 -0
- package/fjs/sul/level/hash/module.f.d.mts +40 -0
- package/fjs/sul/level/hash/module.f.mjs +62 -0
- package/fjs/sul/level/hash/proof.f.d.mts +19 -0
- package/fjs/sul/level/hash/proof.f.mjs +134 -0
- package/fjs/sul/level/hash/types.d.ts +20 -0
- package/fjs/sul/level/literal/module.f.d.mts +57 -0
- package/fjs/sul/level/literal/module.f.mjs +121 -0
- package/fjs/sul/level/literal/proof.f.d.mts +15 -0
- package/fjs/sul/level/literal/proof.f.mjs +791 -0
- package/fjs/sul/level/literal/types.d.ts +31 -0
- package/fjs/sul/module.f.d.mts +27 -0
- package/fjs/sul/module.f.mjs +70 -0
- package/fjs/sul/proof.f.d.mts +15 -0
- package/fjs/sul/proof.f.mjs +65 -0
- package/fjs/sul/types.d.ts +19 -0
- package/fjs/text/ascii/module.f.d.mts +162 -0
- package/fjs/text/ascii/module.f.mjs +272 -0
- package/fjs/text/ascii/proof.f.d.mts +16 -0
- package/fjs/text/ascii/proof.f.mjs +48 -0
- package/fjs/text/code_point/module.f.d.mts +92 -0
- package/fjs/text/code_point/module.f.mjs +155 -0
- package/fjs/text/code_point/proof.f.d.mts +9 -0
- package/fjs/text/code_point/proof.f.mjs +108 -0
- package/fjs/text/module.f.d.mts +41 -0
- package/fjs/text/module.f.mjs +62 -0
- package/fjs/text/proof.f.d.mts +13 -0
- package/fjs/text/proof.f.mjs +51 -0
- package/fjs/text/sgr/module.f.d.mts +61 -0
- package/fjs/text/sgr/module.f.mjs +100 -0
- package/fjs/text/sgr/proof.f.d.mts +4 -0
- package/fjs/text/sgr/proof.f.mjs +42 -0
- package/fjs/text/sgr/types.d.ts +12 -0
- package/fjs/text/types.d.ts +13 -0
- package/fjs/text/utf16/module.f.d.mts +151 -0
- package/fjs/text/utf16/module.f.mjs +348 -0
- package/fjs/text/utf16/proof.f.d.mts +13 -0
- package/fjs/text/utf16/proof.f.mjs +175 -0
- package/fjs/text/utf16/types.d.ts +19 -0
- package/fjs/text/utf8/module.f.d.mts +73 -0
- package/fjs/text/utf8/module.f.mjs +278 -0
- package/fjs/text/utf8/proof.f.mjs +217 -0
- package/fjs/text/utf8/types.d.ts +26 -0
- package/fjs/types/array/module.f.d.mts +69 -0
- package/fjs/types/array/module.f.mjs +101 -0
- package/fjs/types/array/proof.f.mjs +98 -0
- package/fjs/types/array/types.d.ts +13 -0
- package/fjs/types/bigfloat/module.f.d.mts +34 -0
- package/fjs/types/bigfloat/module.f.mjs +125 -0
- package/fjs/types/bigfloat/proof.f.d.mts +6 -0
- package/fjs/types/bigfloat/proof.f.mjs +264 -0
- package/fjs/types/bigfloat/types.d.ts +6 -0
- package/fjs/types/bigint/benchmark.mjs +205 -0
- package/fjs/types/bigint/module.f.d.mts +180 -0
- package/fjs/types/bigint/module.f.mjs +290 -0
- package/fjs/types/bigint/proof.f.d.mts +39 -0
- package/fjs/types/bigint/proof.f.mjs +443 -0
- package/fjs/types/bigint/types.d.ts +14 -0
- package/fjs/types/bit_vec/module.f.d.mts +195 -0
- package/fjs/types/bit_vec/module.f.mjs +475 -0
- package/fjs/types/bit_vec/proof.f.d.mts +71 -0
- package/fjs/types/bit_vec/proof.f.mjs +521 -0
- package/fjs/types/bit_vec/types.d.ts +51 -0
- package/fjs/types/btree/find/module.f.d.mts +19 -0
- package/fjs/types/btree/find/module.f.mjs +80 -0
- package/fjs/types/btree/find/proof.f.d.mts +8 -0
- package/fjs/types/btree/find/proof.f.mjs +123 -0
- package/fjs/types/btree/find/types.d.ts +22 -0
- package/fjs/types/btree/module.f.d.mts +13 -0
- package/fjs/types/btree/module.f.mjs +40 -0
- package/fjs/types/btree/proof.f.d.mts +18 -0
- package/fjs/types/btree/proof.f.mjs +87 -0
- package/fjs/types/btree/remove/module.f.d.mts +32 -0
- package/fjs/types/btree/remove/module.f.mjs +187 -0
- package/fjs/types/btree/remove/proof.f.d.mts +12 -0
- package/fjs/types/btree/remove/proof.f.mjs +475 -0
- package/fjs/types/btree/set/module.f.d.mts +14 -0
- package/fjs/types/btree/set/module.f.mjs +116 -0
- package/fjs/types/btree/set/proof.f.d.mts +4 -0
- package/fjs/types/btree/set/proof.f.mjs +430 -0
- package/fjs/types/btree/types/module.f.d.mts +20 -0
- package/fjs/types/btree/types/module.f.mjs +20 -0
- package/fjs/types/btree/types/types.d.ts +14 -0
- package/fjs/types/byte_set/module.f.d.mts +35 -0
- package/fjs/types/byte_set/module.f.mjs +68 -0
- package/fjs/types/byte_set/proof.f.d.mts +14 -0
- package/fjs/types/byte_set/proof.f.mjs +86 -0
- package/fjs/types/byte_set/types.d.ts +6 -0
- package/fjs/types/function/compare/module.f.d.mts +45 -0
- package/fjs/types/function/compare/module.f.mjs +72 -0
- package/fjs/types/function/compare/proof.f.mjs +50 -0
- package/fjs/types/function/compare/types.d.ts +22 -0
- package/fjs/types/function/module.f.d.mts +33 -0
- package/fjs/types/function/module.f.mjs +39 -0
- package/fjs/types/function/operator/module.f.d.mts +38 -0
- package/fjs/types/function/operator/module.f.mjs +55 -0
- package/fjs/types/function/operator/proof.f.mjs +76 -0
- package/fjs/types/function/operator/types.d.ts +39 -0
- package/fjs/types/function/proof.f.mjs +16 -0
- package/fjs/types/function/types.d.ts +16 -0
- package/fjs/types/list/module.f.d.mts +95 -0
- package/fjs/types/list/module.f.mjs +311 -0
- package/fjs/types/list/proof.f.d.mts +35 -0
- package/fjs/types/list/proof.f.mjs +365 -0
- package/fjs/types/list/types.d.ts +36 -0
- package/fjs/types/map/module.f.d.mts +13 -0
- package/fjs/types/map/module.f.mjs +42 -0
- package/fjs/types/map/proof.f.mjs +25 -0
- package/fjs/types/nibble_set/module.f.d.mts +31 -0
- package/fjs/types/nibble_set/module.f.mjs +43 -0
- package/fjs/types/nibble_set/proof.f.mjs +59 -0
- package/fjs/types/nibble_set/types.d.ts +9 -0
- package/fjs/types/nominal/module.f.d.mts +10 -0
- package/fjs/types/nominal/module.f.mjs +17 -0
- package/fjs/types/nominal/proof.f.d.mts +7 -0
- package/fjs/types/nominal/proof.f.mjs +79 -0
- package/fjs/types/nominal/types.d.ts +25 -0
- package/fjs/types/nullable/module.f.d.mts +44 -0
- package/fjs/types/nullable/module.f.mjs +55 -0
- package/fjs/types/nullable/proof.f.mjs +34 -0
- package/fjs/types/nullable/types.d.ts +6 -0
- package/fjs/types/number/module.f.d.mts +27 -0
- package/fjs/types/number/module.f.mjs +56 -0
- package/fjs/types/number/proof.f.mjs +204 -0
- package/fjs/types/object/module.f.d.mts +45 -0
- package/fjs/types/object/module.f.mjs +67 -0
- package/fjs/types/object/proof.f.d.mts +28 -0
- package/fjs/types/object/proof.f.mjs +29 -0
- 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/object/types.d.ts +50 -0
- package/fjs/types/ordered_map/module.f.d.mts +26 -0
- package/fjs/types/ordered_map/module.f.mjs +55 -0
- package/fjs/types/ordered_map/proof.f.d.mts +8 -0
- package/fjs/types/ordered_map/proof.f.mjs +91 -0
- package/fjs/types/ordered_map/types.d.ts +8 -0
- package/fjs/types/patricia_trie/module.f.d.mts +20 -0
- package/fjs/types/patricia_trie/module.f.mjs +43 -0
- package/fjs/types/patricia_trie/proof.f.d.mts +17 -0
- package/fjs/types/patricia_trie/proof.f.mjs +151 -0
- package/fjs/types/patricia_trie/types.d.ts +34 -0
- package/fjs/types/prime_field/module.f.d.mts +44 -0
- package/fjs/types/prime_field/module.f.mjs +137 -0
- package/fjs/types/prime_field/proof.f.mjs +131 -0
- package/fjs/types/prime_field/types.d.ts +38 -0
- package/fjs/types/range/module.f.d.mts +12 -0
- package/fjs/types/range/module.f.mjs +13 -0
- package/fjs/types/range/proof.f.mjs +10 -0
- package/fjs/types/range/types.d.ts +6 -0
- package/fjs/types/range_map/module.f.d.mts +78 -0
- package/fjs/types/range_map/module.f.mjs +127 -0
- package/fjs/types/range_map/proof.f.d.mts +11 -0
- package/fjs/types/range_map/proof.f.mjs +188 -0
- package/fjs/types/range_map/types.d.ts +56 -0
- package/fjs/types/range_set/module.f.d.mts +10 -0
- package/fjs/types/range_set/module.f.mjs +20 -0
- package/fjs/types/range_set/proof.f.d.mts +4 -0
- package/fjs/types/range_set/proof.f.mjs +29 -0
- package/fjs/types/result/module.d.mts +13 -0
- package/fjs/types/result/module.f.d.mts +89 -0
- package/fjs/types/result/module.f.mjs +97 -0
- package/fjs/types/result/module.mjs +30 -0
- package/fjs/types/result/proof.f.d.mts +17 -0
- package/fjs/types/result/proof.f.mjs +61 -0
- package/fjs/types/result/types.d.ts +17 -0
- package/fjs/types/rtti/common/module.f.d.mts +119 -0
- package/fjs/types/rtti/common/module.f.mjs +185 -0
- package/fjs/types/rtti/common/proof.f.d.mts +13 -0
- package/fjs/types/rtti/common/proof.f.mjs +67 -0
- package/fjs/types/rtti/common/types.d.ts +43 -0
- package/fjs/types/rtti/data/module.f.d.mts +120 -0
- package/fjs/types/rtti/data/module.f.mjs +1030 -0
- package/fjs/types/rtti/data/proof.f.d.mts +75 -0
- package/fjs/types/rtti/data/proof.f.mjs +566 -0
- package/fjs/types/rtti/data/types.d.ts +83 -0
- package/fjs/types/rtti/module.f.d.mts +83 -0
- package/fjs/types/rtti/module.f.mjs +112 -0
- package/fjs/types/rtti/parse/module.f.d.mts +47 -0
- package/fjs/types/rtti/parse/module.f.mjs +198 -0
- package/fjs/types/rtti/parse/proof.f.d.mts +122 -0
- package/fjs/types/rtti/parse/proof.f.mjs +343 -0
- package/fjs/types/rtti/parse/types.d.ts +12 -0
- package/fjs/types/rtti/proof.f.d.mts +10 -0
- package/fjs/types/rtti/proof.f.mjs +22 -0
- package/fjs/types/rtti/ts/module.f.d.mts +93 -0
- package/fjs/types/rtti/ts/module.f.mjs +296 -0
- package/fjs/types/rtti/ts/proof.f.d.mts +103 -0
- package/fjs/types/rtti/ts/proof.f.mjs +236 -0
- package/fjs/types/rtti/ts/types.d.ts +99 -0
- package/fjs/types/rtti/types.d.ts +83 -0
- package/fjs/types/rtti/validate/module.f.d.mts +41 -0
- package/fjs/types/rtti/validate/module.f.mjs +171 -0
- package/fjs/types/rtti/validate/proof.f.d.mts +125 -0
- package/fjs/types/rtti/validate/proof.f.mjs +437 -0
- package/fjs/types/rtti/validate/types.d.ts +6 -0
- package/fjs/types/sorted_list/module.f.d.mts +46 -0
- package/fjs/types/sorted_list/module.f.mjs +119 -0
- package/fjs/types/sorted_list/proof.f.d.mts +7 -0
- package/fjs/types/sorted_list/proof.f.mjs +54 -0
- package/fjs/types/sorted_list/types.d.ts +15 -0
- package/fjs/types/sorted_set/module.f.d.mts +54 -0
- package/fjs/types/sorted_set/module.f.mjs +58 -0
- package/fjs/types/sorted_set/proof.f.d.mts +9 -0
- package/fjs/types/sorted_set/proof.f.mjs +79 -0
- package/fjs/types/sorted_set/types.d.ts +6 -0
- package/fjs/types/string/module.f.d.mts +40 -0
- package/fjs/types/string/module.f.mjs +59 -0
- package/fjs/types/string/proof.f.mjs +76 -0
- package/fjs/types/string_set/module.f.d.mts +39 -0
- package/fjs/types/string_set/module.f.mjs +54 -0
- package/fjs/types/string_set/proof.f.mjs +46 -0
- package/fjs/types/string_set/types.d.ts +7 -0
- package/fjs/types/ts/module.f.d.mts +22 -0
- package/fjs/types/ts/module.f.mjs +51 -0
- package/fjs/types/ts/proof.f.d.mts +39 -0
- package/fjs/types/ts/proof.f.mjs +102 -0
- package/fjs/types/ts/types.d.ts +21 -0
- package/fjs/types/uint8array/module.f.d.mts +42 -0
- package/fjs/types/uint8array/module.f.mjs +58 -0
- package/fjs/types/uint8array/proof.f.d.mts +17 -0
- package/fjs/types/uint8array/proof.f.mjs +73 -0
- package/fjs/website/module.f.d.mts +11 -0
- package/fjs/website/module.f.mjs +25 -0
- package/fjs/website/proof.f.mjs +14 -0
- package/package.json +12 -10
- package/todo/proof.f.d.mts +22 -0
- package/todo/proof.f.mjs +59 -0
- package/fjs/asn.1/module.f.d.ts +0 -62
- package/fjs/asn.1/module.f.js +0 -278
- package/fjs/asn.1/proof.f.d.ts +0 -48
- package/fjs/asn.1/proof.f.js +0 -285
- package/fjs/asserts/module.f.d.ts +0 -36
- package/fjs/asserts/module.f.js +0 -39
- package/fjs/asserts/proof.f.d.ts +0 -11
- package/fjs/asserts/proof.f.js +0 -18
- package/fjs/base_n/module.f.d.ts +0 -45
- package/fjs/base_n/module.f.js +0 -72
- package/fjs/base_n/proof.f.js +0 -73
- package/fjs/basen/base128/module.f.d.ts +0 -20
- package/fjs/basen/base128/module.f.js +0 -43
- package/fjs/basen/base128/proof.f.js +0 -26
- package/fjs/basen/base64/module.f.d.ts +0 -9
- package/fjs/basen/base64/module.f.js +0 -71
- package/fjs/basen/base64/proof.f.d.ts +0 -16
- package/fjs/basen/base64/proof.f.js +0 -139
- package/fjs/basen/cbase32/module.f.d.ts +0 -11
- package/fjs/basen/cbase32/module.f.js +0 -55
- package/fjs/basen/cbase32/proof.f.d.ts +0 -7
- package/fjs/basen/cbase32/proof.f.js +0 -62
- package/fjs/bnf/data/module.f.d.ts +0 -52
- package/fjs/bnf/data/module.f.js +0 -143
- package/fjs/bnf/data/proof.f.d.ts +0 -8
- package/fjs/bnf/data/proof.f.js +0 -169
- package/fjs/bnf/descent/module.f.d.ts +0 -87
- package/fjs/bnf/descent/module.f.js +0 -149
- package/fjs/bnf/descent/proof.f.d.ts +0 -7
- package/fjs/bnf/descent/proof.f.js +0 -368
- package/fjs/bnf/ll1/module.f.d.ts +0 -72
- package/fjs/bnf/ll1/module.f.js +0 -155
- package/fjs/bnf/ll1/proof.f.d.ts +0 -10
- package/fjs/bnf/ll1/proof.f.js +0 -375
- package/fjs/bnf/module.f.d.ts +0 -165
- package/fjs/bnf/module.f.js +0 -174
- package/fjs/bnf/proof.f.d.ts +0 -12
- package/fjs/bnf/proof.f.js +0 -69
- package/fjs/bnf/testlib.f.d.ts +0 -3
- package/fjs/bnf/testlib.f.js +0 -138
- package/fjs/bnf/token_symbol/module.f.d.ts +0 -38
- package/fjs/bnf/token_symbol/module.f.js +0 -48
- package/fjs/bnf/token_symbol/proof.f.js +0 -37
- package/fjs/cas/cli/module.f.d.ts +0 -6
- package/fjs/cas/cli/module.f.js +0 -53
- package/fjs/cas/cli/proof.f.d.ts +0 -17
- package/fjs/cas/cli/proof.f.js +0 -112
- package/fjs/cas/evo/module.f.d.ts +0 -223
- package/fjs/cas/evo/module.f.js +0 -455
- package/fjs/cas/evo/proof.f.d.ts +0 -47
- package/fjs/cas/evo/proof.f.js +0 -707
- package/fjs/cas/module.f.d.ts +0 -64
- package/fjs/cas/module.f.js +0 -255
- package/fjs/cas/proof.f.d.ts +0 -18
- package/fjs/cas/proof.f.js +0 -305
- package/fjs/ci/bun/module.f.d.ts +0 -2
- package/fjs/ci/bun/module.f.js +0 -15
- package/fjs/ci/common/module.f.d.ts +0 -88
- package/fjs/ci/common/module.f.js +0 -63
- package/fjs/ci/config/module.f.d.ts +0 -45
- package/fjs/ci/config/module.f.js +0 -80
- package/fjs/ci/deno/module.f.d.ts +0 -10
- package/fjs/ci/deno/module.f.js +0 -28
- package/fjs/ci/deno/proof.f.d.ts +0 -5
- package/fjs/ci/deno/proof.f.js +0 -26
- package/fjs/ci/module.f.d.ts +0 -13
- package/fjs/ci/module.f.js +0 -58
- package/fjs/ci/nix/module.f.d.ts +0 -61
- package/fjs/ci/nix/module.f.js +0 -92
- package/fjs/ci/nix/proof.f.d.ts +0 -23
- package/fjs/ci/nix/proof.f.js +0 -109
- package/fjs/ci/node/module.f.d.ts +0 -28
- package/fjs/ci/node/module.f.js +0 -92
- package/fjs/ci/node/proof.f.js +0 -17
- package/fjs/ci/proof.f.d.ts +0 -18
- package/fjs/ci/proof.f.js +0 -182
- package/fjs/ci/rust/module.f.d.ts +0 -3
- package/fjs/ci/rust/module.f.js +0 -75
- package/fjs/cli/module.f.d.ts +0 -11
- package/fjs/cli/module.f.js +0 -34
- package/fjs/cli/proof.f.d.ts +0 -14
- package/fjs/cli/proof.f.js +0 -111
- package/fjs/common/monoid/module.f.d.ts +0 -126
- package/fjs/common/monoid/module.f.js +0 -88
- package/fjs/common/monoid/proof.f.d.ts +0 -9
- package/fjs/common/monoid/proof.f.js +0 -48
- package/fjs/crypto/hmac/module.f.d.ts +0 -29
- package/fjs/crypto/hmac/module.f.js +0 -56
- package/fjs/crypto/hmac/proof.f.js +0 -32
- package/fjs/crypto/pow/module.f.d.ts +0 -37
- package/fjs/crypto/pow/module.f.js +0 -72
- package/fjs/crypto/pow/proof.f.js +0 -111
- package/fjs/crypto/secp/module.f.d.ts +0 -85
- package/fjs/crypto/secp/module.f.js +0 -176
- package/fjs/crypto/secp/proof.f.d.ts +0 -8
- package/fjs/crypto/secp/proof.f.js +0 -124
- package/fjs/crypto/sha2/module.f.d.ts +0 -102
- package/fjs/crypto/sha2/module.f.js +0 -266
- package/fjs/crypto/sha2/proof.f.d.ts +0 -31
- package/fjs/crypto/sha2/proof.f.js +0 -139
- package/fjs/crypto/sign/module.f.d.ts +0 -33
- package/fjs/crypto/sign/module.f.js +0 -163
- package/fjs/crypto/sign/proof.f.d.ts +0 -11
- package/fjs/crypto/sign/proof.f.js +0 -562
- package/fjs/crypto/vdf/module.f.d.ts +0 -21
- package/fjs/crypto/vdf/module.f.js +0 -57
- package/fjs/crypto/vdf/proof.f.js +0 -94
- package/fjs/dev/module.f.d.ts +0 -57
- package/fjs/dev/module.f.js +0 -135
- package/fjs/dev/package_json/module.f.d.ts +0 -16
- package/fjs/dev/package_json/module.f.js +0 -24
- package/fjs/dev/package_json/proof.f.js +0 -28
- package/fjs/dev/proof.f.d.ts +0 -13
- package/fjs/dev/proof.f.js +0 -77
- package/fjs/dev/update/module.f.d.ts +0 -11
- package/fjs/dev/update/module.f.js +0 -20
- package/fjs/dev/update/proof.f.d.ts +0 -7
- package/fjs/dev/update/proof.f.js +0 -35
- package/fjs/djs/ast/module.f.d.ts +0 -62
- package/fjs/djs/ast/module.f.js +0 -61
- package/fjs/djs/ast/proof.f.js +0 -49
- package/fjs/djs/examples/input.f.js +0 -4
- package/fjs/djs/examples/m.f.js +0 -1
- package/fjs/djs/module.f.d.ts +0 -17
- package/fjs/djs/module.f.js +0 -22
- package/fjs/djs/parser/module.f.d.ts +0 -23
- package/fjs/djs/parser/module.f.js +0 -410
- package/fjs/djs/parser/proof.f.d.ts +0 -14
- package/fjs/djs/parser/proof.f.js +0 -556
- package/fjs/djs/proof.f.d.ts +0 -10
- package/fjs/djs/proof.f.js +0 -50
- package/fjs/djs/serializer/module.f.d.ts +0 -17
- package/fjs/djs/serializer/module.f.js +0 -173
- package/fjs/djs/serializer/proof.f.js +0 -133
- package/fjs/djs/tokenizer/module.f.d.ts +0 -24
- package/fjs/djs/tokenizer/module.f.js +0 -472
- package/fjs/djs/tokenizer/proof.f.d.ts +0 -14
- package/fjs/djs/tokenizer/proof.f.js +0 -1211
- package/fjs/djs/transpiler/module.f.d.ts +0 -41
- package/fjs/djs/transpiler/module.f.js +0 -88
- package/fjs/djs/transpiler/proof.f.js +0 -67
- package/fjs/effects/eff/module.f.d.ts +0 -72
- package/fjs/effects/eff/module.f.js +0 -46
- package/fjs/effects/eff/proof.f.d.ts +0 -11
- package/fjs/effects/eff/proof.f.js +0 -58
- package/fjs/effects/list/module.f.d.ts +0 -37
- package/fjs/effects/list/module.f.js +0 -17
- package/fjs/effects/memory/module.f.d.ts +0 -37
- package/fjs/effects/memory/module.f.js +0 -24
- package/fjs/effects/memory/proof.f.d.ts +0 -6
- package/fjs/effects/memory/proof.f.js +0 -50
- package/fjs/effects/mock/module.f.d.ts +0 -16
- package/fjs/effects/mock/module.f.js +0 -20
- package/fjs/effects/module.d.ts +0 -2
- package/fjs/effects/module.f.d.ts +0 -408
- package/fjs/effects/module.f.js +0 -312
- package/fjs/effects/module.js +0 -11
- package/fjs/effects/node/memory/module.d.ts +0 -20
- package/fjs/effects/node/memory/module.js +0 -44
- package/fjs/effects/node/memory/proof.d.ts +0 -10
- package/fjs/effects/node/memory/proof.js +0 -29
- package/fjs/effects/node/module.d.ts +0 -20
- package/fjs/effects/node/module.f.d.ts +0 -300
- package/fjs/effects/node/module.f.js +0 -171
- package/fjs/effects/node/module.js +0 -305
- package/fjs/effects/node/proof.f.d.ts +0 -69
- package/fjs/effects/node/proof.f.js +0 -409
- package/fjs/effects/node/virtual/module.f.d.ts +0 -49
- package/fjs/effects/node/virtual/module.f.js +0 -440
- package/fjs/effects/node/virtual/proof.f.d.ts +0 -33
- package/fjs/effects/node/virtual/proof.f.js +0 -186
- package/fjs/effects/proof.f.d.ts +0 -56
- package/fjs/effects/proof.f.js +0 -200
- package/fjs/emergent_testing/all.test.js +0 -5
- package/fjs/emergent_testing/example.f.d.ts +0 -13
- package/fjs/emergent_testing/example.f.js +0 -31
- package/fjs/emergent_testing/module.f.d.ts +0 -140
- package/fjs/emergent_testing/module.f.js +0 -289
- package/fjs/emergent_testing/proof.f.d.ts +0 -67
- package/fjs/emergent_testing/proof.f.js +0 -416
- 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.d.ts +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/fsc/bnf.f.d.ts +0 -2
- package/fjs/fsc/bnf.f.js +0 -42
- package/fjs/fsc/json.f.d.ts +0 -7
- package/fjs/fsc/json.f.js +0 -64
- package/fjs/fsc/module.f.d.ts +0 -11
- package/fjs/fsc/module.f.js +0 -73
- package/fjs/fsc/proof.f.js +0 -104
- package/fjs/fsm/module.f.d.ts +0 -17
- package/fjs/fsm/module.f.js +0 -55
- package/fjs/fsm/proof.f.d.ts +0 -4
- package/fjs/fsm/proof.f.js +0 -126
- package/fjs/js/tokenizer/module.f.d.ts +0 -104
- package/fjs/js/tokenizer/module.f.js +0 -547
- package/fjs/js/tokenizer/proof.f.d.ts +0 -9
- package/fjs/js/tokenizer/proof.f.js +0 -986
- package/fjs/mcp/cas/module.f.d.ts +0 -27
- package/fjs/mcp/cas/module.f.js +0 -232
- package/fjs/mcp/evo/module.f.d.ts +0 -32
- package/fjs/mcp/evo/module.f.js +0 -99
- package/fjs/mcp/evo/proof.f.d.ts +0 -12
- package/fjs/mcp/evo/proof.f.js +0 -147
- package/fjs/mcp/module.f.d.ts +0 -56
- package/fjs/mcp/module.f.js +0 -69
- package/fjs/mcp/proof.f.d.ts +0 -45
- package/fjs/mcp/proof.f.js +0 -535
- package/fjs/media/html/module.f.d.ts +0 -52
- package/fjs/media/html/module.f.js +0 -117
- package/fjs/media/html/proof.f.d.ts +0 -16
- package/fjs/media/html/proof.f.js +0 -65
- package/fjs/media/json/module.f.d.ts +0 -64
- package/fjs/media/json/module.f.js +0 -109
- package/fjs/media/json/parser/module.f.d.ts +0 -21
- package/fjs/media/json/parser/module.f.js +0 -194
- package/fjs/media/json/parser/proof.f.d.ts +0 -5
- package/fjs/media/json/parser/proof.f.js +0 -314
- package/fjs/media/json/proof.f.js +0 -98
- package/fjs/media/json/schema/module.f.d.ts +0 -78
- package/fjs/media/json/schema/module.f.js +0 -96
- package/fjs/media/json/schema/proof.f.d.ts +0 -36
- package/fjs/media/json/schema/proof.f.js +0 -83
- package/fjs/media/json/serializer/module.f.d.ts +0 -28
- package/fjs/media/json/serializer/module.f.js +0 -73
- package/fjs/media/json/serializer/proof.f.js +0 -94
- package/fjs/media/json/tokenizer/module.f.d.ts +0 -15
- package/fjs/media/json/tokenizer/module.f.js +0 -63
- package/fjs/media/json/tokenizer/proof.f.d.ts +0 -5
- package/fjs/media/json/tokenizer/proof.f.js +0 -417
- package/fjs/media/module.f.d.ts +0 -119
- package/fjs/media/module.f.js +0 -88
- package/fjs/media/nix/module.f.d.ts +0 -30
- package/fjs/media/nix/module.f.js +0 -166
- package/fjs/media/nix/proof.f.d.ts +0 -32
- package/fjs/media/nix/proof.f.js +0 -127
- package/fjs/media/proof.f.d.ts +0 -19
- package/fjs/media/proof.f.js +0 -127
- package/fjs/media/revision/module.f.d.ts +0 -94
- package/fjs/media/revision/module.f.js +0 -143
- package/fjs/media/revision/proof.f.d.ts +0 -42
- package/fjs/media/revision/proof.f.js +0 -190
- package/fjs/media/type/module.f.d.ts +0 -135
- package/fjs/media/type/module.f.js +0 -231
- package/fjs/media/type/proof.f.d.ts +0 -40
- package/fjs/media/type/proof.f.js +0 -213
- package/fjs/module.d.ts +0 -2
- package/fjs/module.f.d.ts +0 -2
- package/fjs/module.f.js +0 -50
- package/fjs/module.js +0 -4
- package/fjs/path/module.f.d.ts +0 -46
- package/fjs/path/module.f.js +0 -71
- package/fjs/path/proof.f.js +0 -119
- package/fjs/proof.f.d.ts +0 -9
- package/fjs/proof.f.js +0 -38
- package/fjs/protocol/json_rpc/module.f.d.ts +0 -114
- package/fjs/protocol/json_rpc/module.f.js +0 -89
- package/fjs/protocol/json_rpc/proof.f.d.ts +0 -35
- package/fjs/protocol/json_rpc/proof.f.js +0 -68
- package/fjs/protocol/mcp/module.f.d.ts +0 -239
- package/fjs/protocol/mcp/module.f.js +0 -272
- package/fjs/protocol/mcp/proof.f.d.ts +0 -34
- package/fjs/protocol/mcp/proof.f.js +0 -208
- package/fjs/protocol/mcp/stdio/module.f.d.ts +0 -47
- package/fjs/protocol/mcp/stdio/module.f.js +0 -78
- package/fjs/protocol/mcp/stdio/proof.f.d.ts +0 -13
- package/fjs/protocol/mcp/stdio/proof.f.js +0 -143
- package/fjs/sul/id/module.f.d.ts +0 -33
- package/fjs/sul/id/module.f.js +0 -93
- package/fjs/sul/id/proof.f.js +0 -61
- package/fjs/sul/level/hash/module.f.d.ts +0 -38
- package/fjs/sul/level/hash/module.f.js +0 -43
- package/fjs/sul/level/hash/proof.f.d.ts +0 -13
- package/fjs/sul/level/hash/proof.f.js +0 -112
- package/fjs/sul/level/literal/module.f.d.ts +0 -64
- package/fjs/sul/level/literal/module.f.js +0 -88
- package/fjs/sul/level/literal/proof.f.d.ts +0 -12
- package/fjs/sul/level/literal/proof.f.js +0 -714
- package/fjs/sul/module.f.d.ts +0 -23
- package/fjs/sul/module.f.js +0 -46
- package/fjs/sul/proof.f.d.ts +0 -9
- package/fjs/sul/proof.f.js +0 -47
- package/fjs/text/ascii/module.f.d.ts +0 -136
- package/fjs/text/ascii/module.f.js +0 -154
- package/fjs/text/ascii/proof.f.d.ts +0 -6
- package/fjs/text/ascii/proof.f.js +0 -14
- package/fjs/text/code_point/module.f.d.ts +0 -65
- package/fjs/text/code_point/module.f.js +0 -103
- package/fjs/text/code_point/proof.f.d.ts +0 -8
- package/fjs/text/code_point/proof.f.js +0 -72
- package/fjs/text/module.f.d.ts +0 -40
- package/fjs/text/module.f.js +0 -43
- package/fjs/text/proof.f.d.ts +0 -10
- package/fjs/text/proof.f.js +0 -44
- package/fjs/text/sgr/module.f.d.ts +0 -53
- package/fjs/text/sgr/module.f.js +0 -63
- package/fjs/text/sgr/proof.f.js +0 -33
- package/fjs/text/utf16/module.f.d.ts +0 -161
- package/fjs/text/utf16/module.f.js +0 -311
- package/fjs/text/utf16/proof.f.d.ts +0 -10
- package/fjs/text/utf16/proof.f.js +0 -144
- package/fjs/text/utf8/module.f.d.ts +0 -83
- package/fjs/text/utf8/module.f.js +0 -247
- package/fjs/text/utf8/proof.f.js +0 -217
- package/fjs/types/array/module.f.d.ts +0 -49
- package/fjs/types/array/module.f.js +0 -42
- package/fjs/types/array/proof.f.js +0 -92
- package/fjs/types/bigfloat/module.f.d.ts +0 -6
- package/fjs/types/bigfloat/module.f.js +0 -69
- package/fjs/types/bigfloat/proof.f.d.ts +0 -5
- package/fjs/types/bigfloat/proof.f.js +0 -217
- package/fjs/types/bigint/module.f.d.ts +0 -172
- package/fjs/types/bigint/module.f.js +0 -251
- package/fjs/types/bigint/proof.f.d.ts +0 -37
- package/fjs/types/bigint/proof.f.js +0 -400
- package/fjs/types/bit_vec/module.f.d.ts +0 -302
- package/fjs/types/bit_vec/module.f.js +0 -375
- package/fjs/types/bit_vec/proof.f.d.ts +0 -65
- package/fjs/types/bit_vec/proof.f.js +0 -465
- package/fjs/types/btree/find/module.f.d.ts +0 -25
- package/fjs/types/btree/find/module.f.js +0 -80
- package/fjs/types/btree/find/proof.f.d.ts +0 -3
- package/fjs/types/btree/find/proof.f.js +0 -108
- package/fjs/types/btree/module.f.d.ts +0 -9
- package/fjs/types/btree/module.f.js +0 -33
- package/fjs/types/btree/proof.f.d.ts +0 -13
- package/fjs/types/btree/proof.f.js +0 -64
- package/fjs/types/btree/remove/module.f.d.ts +0 -14
- package/fjs/types/btree/remove/module.f.js +0 -186
- package/fjs/types/btree/remove/proof.f.d.ts +0 -9
- package/fjs/types/btree/remove/proof.f.js +0 -484
- package/fjs/types/btree/set/module.f.d.ts +0 -8
- package/fjs/types/btree/set/module.f.js +0 -128
- package/fjs/types/btree/set/proof.f.d.ts +0 -1
- package/fjs/types/btree/set/proof.f.js +0 -368
- package/fjs/types/btree/types/module.f.d.ts +0 -23
- package/fjs/types/btree/types/module.f.js +0 -9
- package/fjs/types/byte_set/module.f.d.ts +0 -16
- package/fjs/types/byte_set/module.f.js +0 -30
- package/fjs/types/byte_set/proof.f.d.ts +0 -11
- package/fjs/types/byte_set/proof.f.js +0 -79
- package/fjs/types/function/compare/module.f.d.ts +0 -49
- package/fjs/types/function/compare/module.f.js +0 -51
- package/fjs/types/function/compare/proof.f.js +0 -47
- package/fjs/types/function/module.f.d.ts +0 -28
- package/fjs/types/function/module.f.js +0 -19
- package/fjs/types/function/operator/module.f.d.ts +0 -48
- package/fjs/types/function/operator/module.f.js +0 -16
- package/fjs/types/function/operator/proof.f.js +0 -53
- package/fjs/types/function/proof.f.js +0 -10
- package/fjs/types/list/module.f.d.ts +0 -75
- package/fjs/types/list/module.f.js +0 -190
- package/fjs/types/list/proof.f.d.ts +0 -31
- package/fjs/types/list/proof.f.js +0 -330
- package/fjs/types/map/module.f.d.ts +0 -2
- package/fjs/types/map/module.f.js +0 -22
- package/fjs/types/map/proof.f.js +0 -22
- package/fjs/types/nibble_set/module.f.d.ts +0 -27
- package/fjs/types/nibble_set/module.f.js +0 -25
- package/fjs/types/nibble_set/proof.f.js +0 -60
- package/fjs/types/nominal/module.f.d.ts +0 -22
- package/fjs/types/nominal/module.f.js +0 -13
- package/fjs/types/nominal/proof.f.d.ts +0 -4
- package/fjs/types/nominal/proof.f.js +0 -48
- package/fjs/types/nullable/module.f.d.ts +0 -21
- package/fjs/types/nullable/module.f.js +0 -29
- package/fjs/types/nullable/proof.f.d.ts +0 -1
- package/fjs/types/nullable/proof.f.js +0 -29
- package/fjs/types/number/module.f.d.ts +0 -16
- package/fjs/types/number/module.f.js +0 -30
- package/fjs/types/number/proof.f.js +0 -124
- package/fjs/types/object/module.f.d.ts +0 -54
- package/fjs/types/object/module.f.js +0 -25
- package/fjs/types/object/proof.f.d.ts +0 -4
- package/fjs/types/object/proof.f.js +0 -14
- package/fjs/types/option/module.f.js +0 -6
- package/fjs/types/ordered_map/module.f.d.ts +0 -17
- package/fjs/types/ordered_map/module.f.js +0 -22
- package/fjs/types/ordered_map/proof.f.d.ts +0 -5
- package/fjs/types/ordered_map/proof.f.js +0 -73
- package/fjs/types/patricia_trie/module.f.d.ts +0 -25
- package/fjs/types/patricia_trie/module.f.js +0 -35
- package/fjs/types/patricia_trie/proof.f.d.ts +0 -13
- package/fjs/types/patricia_trie/proof.f.js +0 -121
- package/fjs/types/phantom/module.f.js +0 -11
- package/fjs/types/prime_field/module.f.d.ts +0 -62
- package/fjs/types/prime_field/module.f.js +0 -112
- package/fjs/types/prime_field/proof.f.js +0 -128
- package/fjs/types/range/module.f.d.ts +0 -8
- package/fjs/types/range/module.f.js +0 -2
- package/fjs/types/range/proof.f.d.ts +0 -1
- package/fjs/types/range/proof.f.js +0 -9
- package/fjs/types/range_map/module.f.d.ts +0 -92
- package/fjs/types/range_map/module.f.js +0 -82
- package/fjs/types/range_map/proof.f.d.ts +0 -6
- package/fjs/types/range_map/proof.f.js +0 -151
- package/fjs/types/range_set/module.f.d.ts +0 -5
- package/fjs/types/range_set/module.f.js +0 -16
- package/fjs/types/range_set/proof.f.d.ts +0 -1
- package/fjs/types/range_set/proof.f.js +0 -19
- package/fjs/types/result/module.d.ts +0 -3
- package/fjs/types/result/module.f.d.ts +0 -61
- package/fjs/types/result/module.f.js +0 -54
- package/fjs/types/result/module.js +0 -19
- package/fjs/types/result/proof.f.d.ts +0 -12
- package/fjs/types/result/proof.f.js +0 -31
- package/fjs/types/rtti/common/module.f.d.ts +0 -121
- package/fjs/types/rtti/common/module.f.js +0 -94
- package/fjs/types/rtti/common/proof.f.d.ts +0 -8
- package/fjs/types/rtti/common/proof.f.js +0 -51
- package/fjs/types/rtti/module.f.d.ts +0 -75
- package/fjs/types/rtti/module.f.js +0 -34
- package/fjs/types/rtti/parse/module.f.d.ts +0 -36
- package/fjs/types/rtti/parse/module.f.js +0 -114
- package/fjs/types/rtti/parse/proof.f.d.ts +0 -115
- package/fjs/types/rtti/parse/proof.f.js +0 -334
- package/fjs/types/rtti/proof.f.d.ts +0 -5
- package/fjs/types/rtti/proof.f.js +0 -16
- package/fjs/types/rtti/ts/module.f.d.ts +0 -118
- package/fjs/types/rtti/ts/module.f.js +0 -59
- package/fjs/types/rtti/ts/proof.f.d.ts +0 -59
- package/fjs/types/rtti/ts/proof.f.js +0 -75
- package/fjs/types/rtti/validate/module.f.d.ts +0 -4
- package/fjs/types/rtti/validate/module.f.js +0 -74
- package/fjs/types/rtti/validate/proof.f.d.ts +0 -118
- package/fjs/types/rtti/validate/proof.f.js +0 -349
- package/fjs/types/sorted_list/module.f.d.ts +0 -26
- package/fjs/types/sorted_list/module.f.js +0 -51
- package/fjs/types/sorted_list/proof.f.d.ts +0 -4
- package/fjs/types/sorted_list/proof.f.js +0 -46
- package/fjs/types/sorted_set/module.f.d.ts +0 -33
- package/fjs/types/sorted_set/module.f.js +0 -5
- package/fjs/types/sorted_set/proof.f.d.ts +0 -6
- package/fjs/types/sorted_set/proof.f.js +0 -67
- package/fjs/types/string/module.f.d.ts +0 -24
- package/fjs/types/string/module.f.js +0 -35
- package/fjs/types/string/proof.f.js +0 -77
- package/fjs/types/string_set/module.f.d.ts +0 -30
- package/fjs/types/string_set/module.f.js +0 -37
- package/fjs/types/string_set/proof.f.js +0 -43
- package/fjs/types/ts/module.f.d.ts +0 -23
- package/fjs/types/ts/module.f.js +0 -27
- package/fjs/types/ts/proof.f.d.ts +0 -38
- package/fjs/types/ts/proof.f.js +0 -86
- package/fjs/types/uint8array/module.f.d.ts +0 -13
- package/fjs/types/uint8array/module.f.js +0 -34
- package/fjs/types/uint8array/proof.f.d.ts +0 -17
- package/fjs/types/uint8array/proof.f.js +0 -64
- package/fjs/website/module.f.d.ts +0 -3
- package/fjs/website/module.f.js +0 -14
- package/fjs/website/proof.f.js +0 -13
- package/nanvm-lib/tests/proof.f.d.ts +0 -122
- package/nanvm-lib/tests/proof.f.js +0 -330
- package/todo/031-json.f.d.ts +0 -1
- package/todo/031-json.f.js +0 -241
- package/todo/proof.f.d.ts +0 -20
- package/todo/proof.f.js +0 -62
- /package/fjs/{base_n/proof.f.d.ts → basen/proof.f.d.mts} +0 -0
- /package/fjs/bnf/token_symbol/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/ci/node/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/crypto/hmac/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/crypto/pow/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/crypto/vdf/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/dev/package_json/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/djs/ast/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/djs/examples/{input.f.d.ts → input.f.d.mts} +0 -0
- /package/fjs/djs/examples/{m.f.d.ts → m.f.d.mts} +0 -0
- /package/fjs/djs/serializer/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/djs/transpiler/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/fsc/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/media/json/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/media/json/serializer/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/path/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/sul/id/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/text/utf8/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/types/array/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/{emergent_testing/all.test.d.ts → types/bigint/benchmark.d.mts} +0 -0
- /package/fjs/{basen/base128/proof.f.d.ts → types/function/compare/proof.f.d.mts} +0 -0
- /package/fjs/types/function/operator/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/types/function/{compare/proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/types/map/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/types/nibble_set/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/{text/sgr/proof.f.d.ts → types/nullable/proof.f.d.mts} +0 -0
- /package/fjs/types/number/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/types/option/{module.f.d.ts → types.d.ts} +0 -0
- /package/fjs/types/phantom/{module.f.d.ts → types.d.ts} +0 -0
- /package/fjs/types/prime_field/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/types/{function/proof.f.d.ts → range/proof.f.d.mts} +0 -0
- /package/fjs/types/string/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/types/string_set/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/website/{proof.f.d.ts → proof.f.d.mts} +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { Result } from './types.ts'
|
|
3
|
+
*/
|
|
4
|
+
declare const example: () => void;
|
|
5
|
+
declare const invertTest: () => void;
|
|
6
|
+
declare const mapOkTest: () => void;
|
|
7
|
+
declare const okThenTest: () => void;
|
|
8
|
+
export declare const proof: {
|
|
9
|
+
example: typeof example;
|
|
10
|
+
invertTest: typeof invertTest;
|
|
11
|
+
mapOkTest: typeof mapOkTest;
|
|
12
|
+
okThenTest: typeof okThenTest;
|
|
13
|
+
throw: {
|
|
14
|
+
unwrapError: () => string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { Result } from './types.ts'
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { error, ok, unwrap, invert, mapOk, okThen } from './module.f.mjs'
|
|
6
|
+
import { assert, assertEq } from '../../asserts/module.f.mjs'
|
|
7
|
+
|
|
8
|
+
const example = () => {
|
|
9
|
+
/** @type {Result<number, string>} */
|
|
10
|
+
const success = ok(42)
|
|
11
|
+
/** @type {Result<number, string>} */
|
|
12
|
+
const failure = error('Something went wrong')
|
|
13
|
+
|
|
14
|
+
assertEq(unwrap(success), 42, 'error')
|
|
15
|
+
const [kind, v] = failure
|
|
16
|
+
assertEq(kind, 'error')
|
|
17
|
+
// `v` is inferred as `string` here
|
|
18
|
+
assertEq(v, 'Something went wrong', 'error')
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const invertTest = () => {
|
|
22
|
+
const [k0, v0] = invert(ok(42))
|
|
23
|
+
assert(!(k0 !== 'error' || v0 !== 42), [k0, v0])
|
|
24
|
+
const [k1, v1] = invert(error('oops'))
|
|
25
|
+
assert(!(k1 !== 'ok' || v1 !== 'oops'), [k1, v1])
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const mapOkTest = () => {
|
|
29
|
+
/** @type {(n: number) => number} */
|
|
30
|
+
const inc = n => n + 1
|
|
31
|
+
const [k0, v0] = mapOk(inc)(ok(41))
|
|
32
|
+
assert(!(k0 !== 'ok' || v0 !== 42), [k0, v0])
|
|
33
|
+
const [k1, v1] = mapOk(inc)(error('oops'))
|
|
34
|
+
assert(!(k1 !== 'error' || v1 !== 'oops'), [k1, v1])
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const okThenTest = () => {
|
|
38
|
+
/** @type {(n: number) => Result<string, string>} */
|
|
39
|
+
const half = n => n % 2 === 0 ? ok(`${n / 2}`) : error('odd')
|
|
40
|
+
const [k0, v0] = okThen(half)(ok(42))
|
|
41
|
+
assert(!(k0 !== 'ok' || v0 !== '21'), [k0, v0])
|
|
42
|
+
// `f` itself failing: the chain reports `f`'s own error.
|
|
43
|
+
const [k1, v1] = okThen(half)(ok(41))
|
|
44
|
+
assert(!(k1 !== 'error' || v1 !== 'odd'), [k1, v1])
|
|
45
|
+
// An incoming `error` skips `f` and passes through unchanged, keeping its
|
|
46
|
+
// own error type: the result is `Result<string, string | number>`.
|
|
47
|
+
/** @type {Result<number, number>} */
|
|
48
|
+
const incoming = error(7)
|
|
49
|
+
const [k2, v2] = okThen(half)(incoming)
|
|
50
|
+
assert(!(k2 !== 'error' || v2 !== 7), [k2, v2])
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export const proof = {
|
|
54
|
+
example,
|
|
55
|
+
invertTest,
|
|
56
|
+
mapOkTest,
|
|
57
|
+
okThenTest,
|
|
58
|
+
throw: {
|
|
59
|
+
unwrapError: () => unwrap(error('oops')),
|
|
60
|
+
},
|
|
61
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for representing operations that can succeed or fail.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Represents a successful result.
|
|
8
|
+
*/
|
|
9
|
+
export type Ok<T> = readonly ['ok', T];
|
|
10
|
+
/**
|
|
11
|
+
* Represents a failed result.
|
|
12
|
+
*/
|
|
13
|
+
export type Error<E> = readonly ['error', E];
|
|
14
|
+
/**
|
|
15
|
+
* Represents a result that can be either successful or failed.
|
|
16
|
+
*/
|
|
17
|
+
export type Result<T, E> = Ok<T> | Error<E>;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared kernel for RTTI consumers (`validate`, `parse`).
|
|
3
|
+
*
|
|
4
|
+
* Both consumers traverse the same schema shape and produce the same
|
|
5
|
+
* `Result<T, ValidationError>` outcome. Only the per-variant handling differs
|
|
6
|
+
* — `validate` keeps the original value, `parse` constructs a fresh one.
|
|
7
|
+
*
|
|
8
|
+
* This module hosts the parts that do not differ:
|
|
9
|
+
*
|
|
10
|
+
* - The error shape (`ValidationError`, `Path`) and path bookkeeping
|
|
11
|
+
* (`verror`, `prependPath`).
|
|
12
|
+
* - Primitive checks (`primitive0Validate`, `constPrimitiveValidate`).
|
|
13
|
+
* - The `Validate<T>`/`Result<T>` signatures — `parse` uses the same shape.
|
|
14
|
+
* - `visit`: a visitor over the `Type` ADT. Callers supply a `Visitor<R>`
|
|
15
|
+
* with one handler per variant; `visit(v)(rtti)` recognizes `rtti` and
|
|
16
|
+
* calls the matching handler. Both consumers compose their top-level
|
|
17
|
+
* function from a visitor.
|
|
18
|
+
* - `eachEntry`: the container entry loop (array/record/tuple/struct), shared
|
|
19
|
+
* by both consumers' container builders. Callers choose what (if anything)
|
|
20
|
+
* to accumulate, so `validate`'s pure pass/fail check pays no allocation.
|
|
21
|
+
* - `orVisit`: the shared `or` handler — try each variant's recursive walker,
|
|
22
|
+
* return the first match.
|
|
23
|
+
*
|
|
24
|
+
* Keeping the kernel here also removes `parse`'s incidental dependency on
|
|
25
|
+
* `validate` and gives schema-driven consumers (e.g. the data form in
|
|
26
|
+
* `../data/module.f.mjs`) a stable shared base.
|
|
27
|
+
*
|
|
28
|
+
* @module
|
|
29
|
+
*
|
|
30
|
+
* @import { Primitive, Unknown } from '../ts/types.ts'
|
|
31
|
+
* @import { Const, Info0, Primitive0, Struct, Tag1, Tuple, Type } from '../types.ts'
|
|
32
|
+
* @import { Error, Result as CommonResult } from '../../result/types.ts'
|
|
33
|
+
* @import { StringMap } from '../../object/types.ts'
|
|
34
|
+
* @import { Validate, Visitor, IsContainer, Container, ResultE, ValidateE, ValidationError } from './types.ts'
|
|
35
|
+
*/
|
|
36
|
+
import type { Primitive, Unknown } from '../ts/types.ts';
|
|
37
|
+
import type { Info0, Primitive0, Type } from '../types.ts';
|
|
38
|
+
import type { Error, Result as CommonResult } from '../../result/types.ts';
|
|
39
|
+
import type { StringMap } from '../../object/types.ts';
|
|
40
|
+
import type { Validate, Visitor, IsContainer, ResultE, ValidateE, ValidationError } from './types.ts';
|
|
41
|
+
/** Builds an error result with empty path and the given message. */
|
|
42
|
+
/** @type {(message: string) => Error<ValidationError>} */
|
|
43
|
+
export declare const verror: (message: string) => Error<ValidationError>;
|
|
44
|
+
/** Prepends `key` to the error's path, used to build the path bottom-up. */
|
|
45
|
+
/** @type {(key: string, error: Error<ValidationError>) => Error<ValidationError>} */
|
|
46
|
+
export declare const prependPath: (key: string, error: Error<ValidationError>) => Error<ValidationError>;
|
|
47
|
+
/** Validates a `Tag0` primitive schema using `typeof`. */
|
|
48
|
+
export declare const primitive0Validate: <K extends Primitive0, T extends Info0<K>>(
|
|
49
|
+
/**
|
|
50
|
+
* @template {Primitive0} K
|
|
51
|
+
* @template {Info0<K>} T
|
|
52
|
+
* @param {K} tag
|
|
53
|
+
* @returns {Validate<T>}
|
|
54
|
+
*/
|
|
55
|
+
tag: K) => Validate<T>;
|
|
56
|
+
/**
|
|
57
|
+
* Validates a primitive `Const` schema using `Object.is` (SameValue).
|
|
58
|
+
*
|
|
59
|
+
* `Object.is` is used instead of `===` so that:
|
|
60
|
+
* - `NaN` const schemas match `NaN` values (`===` would always fail because `NaN !== NaN`).
|
|
61
|
+
* - `+0` and `-0` are treated as distinct const values.
|
|
62
|
+
*/
|
|
63
|
+
export declare const constPrimitiveValidate: <T extends Primitive>(
|
|
64
|
+
/**
|
|
65
|
+
* @template {Primitive} T
|
|
66
|
+
* @param {T} rtti
|
|
67
|
+
* @returns {Validate<T>}
|
|
68
|
+
*/
|
|
69
|
+
rtti: T) => Validate<T>;
|
|
70
|
+
/** `IsContainer` guard for arrays, shared by `validate` and `parse`. */
|
|
71
|
+
/** @type {IsContainer<ReadonlyArray<Unknown>>} */
|
|
72
|
+
export declare const isArray: IsContainer<ReadonlyArray<Unknown>>;
|
|
73
|
+
/** `IsContainer` guard for records/structs, shared by `validate` and `parse`. */
|
|
74
|
+
/** @type {IsContainer<StringMap<Unknown>>} */
|
|
75
|
+
export declare const isObject: IsContainer<StringMap<Unknown>>;
|
|
76
|
+
/**
|
|
77
|
+
* Runs `item` over each `[key, value]` entry, bailing out with the first
|
|
78
|
+
* error, path-prefixed with that entry's key. On success, folds each item's
|
|
79
|
+
* result into `acc` (starting from `init`) with `accumulate` and returns the
|
|
80
|
+
* final accumulator.
|
|
81
|
+
*
|
|
82
|
+
* Shared by `validate` and `parse`'s container builders (array/record/tuple/
|
|
83
|
+
* struct), which differ only in what `item` does with the value and what
|
|
84
|
+
* they accumulate: `validate` has nothing to collect — its entire schema is
|
|
85
|
+
* "did every entry succeed?" — so it passes `undefined`/`(acc) => acc` and
|
|
86
|
+
* pays no allocation per entry; `parse` needs the rebuilt `[key, value]`
|
|
87
|
+
* pairs, so it folds them into a `List` (see its call site) and converts to
|
|
88
|
+
* an array once at the end.
|
|
89
|
+
*/
|
|
90
|
+
export declare const eachEntry: <V, R, A>(entries: ReadonlyArray<readonly [string, V]>, item: (k: string, v: V) => CommonResult<R, ValidationError>, init: A, accumulate: (acc: A, k: string, value: R) => A) => CommonResult<A, ValidationError>;
|
|
91
|
+
/**
|
|
92
|
+
* First variant in `variants` that `recurse` accepts, else `verror('no match')`.
|
|
93
|
+
*
|
|
94
|
+
* Shared `or` handler for `validate` and `parse`: both try each variant
|
|
95
|
+
* against the value and return the first `'ok'` verbatim, differing only in
|
|
96
|
+
* which recursive function (`validate` or `parse`) walks each variant. `recurse`
|
|
97
|
+
* is typed over the erased `ValidateE` alias — annotating it as `(t: Type) =>
|
|
98
|
+
* Validate<Type>` would itself instantiate `Validate<Type>` and hit TS2589 —
|
|
99
|
+
* so each caller passes its recursive function through one boundary cast.
|
|
100
|
+
*
|
|
101
|
+
* @type {(recurse: (t: Type) => ValidateE) => (variants: readonly Type[]) => (value: Unknown) => ResultE}
|
|
102
|
+
*/
|
|
103
|
+
export declare const orVisit: (recurse: (t: Type) => ValidateE) => (variants: readonly Type[]) => (value: Unknown) => ResultE;
|
|
104
|
+
/**
|
|
105
|
+
* Visits a schema `Type` by dispatching to the matching handler in `v`.
|
|
106
|
+
*
|
|
107
|
+
* - `Thunk` schemas are evaluated once to read the `Info` descriptor, then
|
|
108
|
+
* routed by tag (`'const'`, `'array'`, `'record'`, `'unknown'`, `'or'`,
|
|
109
|
+
* or a `Tag0` primitive).
|
|
110
|
+
* - `Const` schemas (primitives, tuples, structs) are routed directly to
|
|
111
|
+
* `tuple`, `struct`, or `constPrimitive`.
|
|
112
|
+
*/
|
|
113
|
+
export declare const visit: <R>(
|
|
114
|
+
/**
|
|
115
|
+
* @template R
|
|
116
|
+
* @param {Visitor<R>} v
|
|
117
|
+
* @returns {(rtti: Type) => R}
|
|
118
|
+
*/
|
|
119
|
+
v: Visitor<R>) => (rtti: Type) => R;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared kernel for RTTI consumers (`validate`, `parse`).
|
|
3
|
+
*
|
|
4
|
+
* Both consumers traverse the same schema shape and produce the same
|
|
5
|
+
* `Result<T, ValidationError>` outcome. Only the per-variant handling differs
|
|
6
|
+
* — `validate` keeps the original value, `parse` constructs a fresh one.
|
|
7
|
+
*
|
|
8
|
+
* This module hosts the parts that do not differ:
|
|
9
|
+
*
|
|
10
|
+
* - The error shape (`ValidationError`, `Path`) and path bookkeeping
|
|
11
|
+
* (`verror`, `prependPath`).
|
|
12
|
+
* - Primitive checks (`primitive0Validate`, `constPrimitiveValidate`).
|
|
13
|
+
* - The `Validate<T>`/`Result<T>` signatures — `parse` uses the same shape.
|
|
14
|
+
* - `visit`: a visitor over the `Type` ADT. Callers supply a `Visitor<R>`
|
|
15
|
+
* with one handler per variant; `visit(v)(rtti)` recognizes `rtti` and
|
|
16
|
+
* calls the matching handler. Both consumers compose their top-level
|
|
17
|
+
* function from a visitor.
|
|
18
|
+
* - `eachEntry`: the container entry loop (array/record/tuple/struct), shared
|
|
19
|
+
* by both consumers' container builders. Callers choose what (if anything)
|
|
20
|
+
* to accumulate, so `validate`'s pure pass/fail check pays no allocation.
|
|
21
|
+
* - `orVisit`: the shared `or` handler — try each variant's recursive walker,
|
|
22
|
+
* return the first match.
|
|
23
|
+
*
|
|
24
|
+
* Keeping the kernel here also removes `parse`'s incidental dependency on
|
|
25
|
+
* `validate` and gives schema-driven consumers (e.g. the data form in
|
|
26
|
+
* `../data/module.f.mjs`) a stable shared base.
|
|
27
|
+
*
|
|
28
|
+
* @module
|
|
29
|
+
*
|
|
30
|
+
* @import { Primitive, Unknown } from '../ts/types.ts'
|
|
31
|
+
* @import { Const, Info0, Primitive0, Struct, Tag1, Tuple, Type } from '../types.ts'
|
|
32
|
+
* @import { Error, Result as CommonResult } from '../../result/types.ts'
|
|
33
|
+
* @import { StringMap } from '../../object/types.ts'
|
|
34
|
+
* @import { Validate, Visitor, IsContainer, Container, ResultE, ValidateE, ValidationError } from './types.ts'
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
import { error, ok } from '../../result/module.f.mjs'
|
|
38
|
+
import { isArray as commonIsArray } from '../../array/module.f.mjs'
|
|
39
|
+
import { isObject as commonIsObject } from '../../object/module.f.mjs'
|
|
40
|
+
|
|
41
|
+
/** Builds an error result with empty path and the given message. */
|
|
42
|
+
/** @type {(message: string) => Error<ValidationError>} */
|
|
43
|
+
export const verror = message =>
|
|
44
|
+
error({ path: [], message })
|
|
45
|
+
|
|
46
|
+
/** Prepends `key` to the error's path, used to build the path bottom-up. */
|
|
47
|
+
/** @type {(key: string, error: Error<ValidationError>) => Error<ValidationError>} */
|
|
48
|
+
export const prependPath = (key, [,r]) =>
|
|
49
|
+
error({ path: [key, ...r.path], message: r.message })
|
|
50
|
+
|
|
51
|
+
/** Validates a `Tag0` primitive schema using `typeof`. */
|
|
52
|
+
export const primitive0Validate =
|
|
53
|
+
/**
|
|
54
|
+
* @template {Primitive0} K
|
|
55
|
+
* @template {Info0<K>} T
|
|
56
|
+
* @param {K} tag
|
|
57
|
+
* @returns {Validate<T>}
|
|
58
|
+
*/
|
|
59
|
+
tag =>
|
|
60
|
+
value => typeof value === tag ? /** @type {any} */ (ok(value)) : verror('unexpected value')
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Validates a primitive `Const` schema using `Object.is` (SameValue).
|
|
64
|
+
*
|
|
65
|
+
* `Object.is` is used instead of `===` so that:
|
|
66
|
+
* - `NaN` const schemas match `NaN` values (`===` would always fail because `NaN !== NaN`).
|
|
67
|
+
* - `+0` and `-0` are treated as distinct const values.
|
|
68
|
+
*/
|
|
69
|
+
export const constPrimitiveValidate =
|
|
70
|
+
/**
|
|
71
|
+
* @template {Primitive} T
|
|
72
|
+
* @param {T} rtti
|
|
73
|
+
* @returns {Validate<T>}
|
|
74
|
+
*/
|
|
75
|
+
rtti =>
|
|
76
|
+
value => Object.is(rtti, value)
|
|
77
|
+
? /** @type {any} */ (ok(value))
|
|
78
|
+
: verror('unexpected value')
|
|
79
|
+
|
|
80
|
+
/** @type {<R>(v: Visitor<R>) => (c: Const) => R} */
|
|
81
|
+
const visitConst = v => c =>
|
|
82
|
+
typeof c === 'object' && c !== null
|
|
83
|
+
? (commonIsArray(c) ? v.tuple(c) : v.struct(/** @type {Struct} */ (c)))
|
|
84
|
+
: v.constPrimitive(/** @type {Primitive} */ (c))
|
|
85
|
+
|
|
86
|
+
/** `IsContainer` guard for arrays, shared by `validate` and `parse`. */
|
|
87
|
+
/** @type {IsContainer<ReadonlyArray<Unknown>>} */
|
|
88
|
+
export const isArray =
|
|
89
|
+
value => commonIsArray(value)
|
|
90
|
+
|
|
91
|
+
/** `IsContainer` guard for records/structs, shared by `validate` and `parse`. */
|
|
92
|
+
/** @type {IsContainer<StringMap<Unknown>>} */
|
|
93
|
+
export const isObject =
|
|
94
|
+
value => commonIsObject(value)
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Runs `item` over each `[key, value]` entry, bailing out with the first
|
|
98
|
+
* error, path-prefixed with that entry's key. On success, folds each item's
|
|
99
|
+
* result into `acc` (starting from `init`) with `accumulate` and returns the
|
|
100
|
+
* final accumulator.
|
|
101
|
+
*
|
|
102
|
+
* Shared by `validate` and `parse`'s container builders (array/record/tuple/
|
|
103
|
+
* struct), which differ only in what `item` does with the value and what
|
|
104
|
+
* they accumulate: `validate` has nothing to collect — its entire schema is
|
|
105
|
+
* "did every entry succeed?" — so it passes `undefined`/`(acc) => acc` and
|
|
106
|
+
* pays no allocation per entry; `parse` needs the rebuilt `[key, value]`
|
|
107
|
+
* pairs, so it folds them into a `List` (see its call site) and converts to
|
|
108
|
+
* an array once at the end.
|
|
109
|
+
*/
|
|
110
|
+
export const eachEntry =
|
|
111
|
+
/**
|
|
112
|
+
* @template V
|
|
113
|
+
* @template R
|
|
114
|
+
* @template A
|
|
115
|
+
* @param {ReadonlyArray<readonly [string, V]>} entries
|
|
116
|
+
* @param {(k: string, v: V) => CommonResult<R, ValidationError>} item
|
|
117
|
+
* @param {A} init
|
|
118
|
+
* @param {(acc: A, k: string, value: R) => A} accumulate
|
|
119
|
+
* @returns {CommonResult<A, ValidationError>}
|
|
120
|
+
*/
|
|
121
|
+
(entries, item, init, accumulate) => {
|
|
122
|
+
let acc = init
|
|
123
|
+
for (const [k, v] of entries) {
|
|
124
|
+
const r = item(k, v)
|
|
125
|
+
if (r[0] === 'error') {
|
|
126
|
+
return prependPath(k, r)
|
|
127
|
+
}
|
|
128
|
+
acc = accumulate(acc, k, r[1])
|
|
129
|
+
}
|
|
130
|
+
return ok(acc)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* First variant in `variants` that `recurse` accepts, else `verror('no match')`.
|
|
135
|
+
*
|
|
136
|
+
* Shared `or` handler for `validate` and `parse`: both try each variant
|
|
137
|
+
* against the value and return the first `'ok'` verbatim, differing only in
|
|
138
|
+
* which recursive function (`validate` or `parse`) walks each variant. `recurse`
|
|
139
|
+
* is typed over the erased `ValidateE` alias — annotating it as `(t: Type) =>
|
|
140
|
+
* Validate<Type>` would itself instantiate `Validate<Type>` and hit TS2589 —
|
|
141
|
+
* so each caller passes its recursive function through one boundary cast.
|
|
142
|
+
*
|
|
143
|
+
* @type {(recurse: (t: Type) => ValidateE) => (variants: readonly Type[]) => (value: Unknown) => ResultE}
|
|
144
|
+
*/
|
|
145
|
+
export const orVisit =
|
|
146
|
+
recurse =>
|
|
147
|
+
variants => value => {
|
|
148
|
+
for (const t of variants) {
|
|
149
|
+
const r = recurse(t)(value)
|
|
150
|
+
if (r[0] === 'ok') {
|
|
151
|
+
return r
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return verror('no match')
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Visits a schema `Type` by dispatching to the matching handler in `v`.
|
|
159
|
+
*
|
|
160
|
+
* - `Thunk` schemas are evaluated once to read the `Info` descriptor, then
|
|
161
|
+
* routed by tag (`'const'`, `'array'`, `'record'`, `'unknown'`, `'or'`,
|
|
162
|
+
* or a `Tag0` primitive).
|
|
163
|
+
* - `Const` schemas (primitives, tuples, structs) are routed directly to
|
|
164
|
+
* `tuple`, `struct`, or `constPrimitive`.
|
|
165
|
+
*/
|
|
166
|
+
export const visit =
|
|
167
|
+
/**
|
|
168
|
+
* @template R
|
|
169
|
+
* @param {Visitor<R>} v
|
|
170
|
+
* @returns {(rtti: Type) => R}
|
|
171
|
+
*/
|
|
172
|
+
v => rtti => {
|
|
173
|
+
if (typeof rtti === 'function') {
|
|
174
|
+
const [tag, ...value] = rtti()
|
|
175
|
+
switch (tag) {
|
|
176
|
+
case 'const': return visitConst(v)(/** @type {Const} */ (value[0]))
|
|
177
|
+
case 'array': return v.array(value[0])
|
|
178
|
+
case 'record': return v.record(value[0])
|
|
179
|
+
case 'unknown': return v.unknown()
|
|
180
|
+
case 'or': return v.or(value)
|
|
181
|
+
}
|
|
182
|
+
return v.primitive0(/** @type {Primitive0} */ (tag))
|
|
183
|
+
}
|
|
184
|
+
return visitConst(v)(rtti)
|
|
185
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { Result } from '../../result/types.ts'
|
|
3
|
+
* @import { ValidationError } from './types.ts'
|
|
4
|
+
*/
|
|
5
|
+
export type _Entries = ReadonlyArray<readonly [string, number]>;
|
|
6
|
+
export declare const proof: {
|
|
7
|
+
empty: () => void;
|
|
8
|
+
allOk: () => void;
|
|
9
|
+
noAccumulate: () => void;
|
|
10
|
+
firstErrorWins: () => void;
|
|
11
|
+
shortCircuits: () => void;
|
|
12
|
+
pathPrefixed: () => void;
|
|
13
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { Result } from '../../result/types.ts'
|
|
3
|
+
* @import { ValidationError } from './types.ts'
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { eachEntry } from './module.f.mjs'
|
|
7
|
+
import { error, ok } from '../../result/module.f.mjs'
|
|
8
|
+
import { assert, assertEq } from '../../../asserts/module.f.mjs'
|
|
9
|
+
|
|
10
|
+
/** @typedef {ReadonlyArray<readonly [string, number]>} _Entries */
|
|
11
|
+
|
|
12
|
+
/** @type {(k: string, v: number) => Result<number, ValidationError>} */
|
|
13
|
+
const item = (k, v) =>
|
|
14
|
+
v < 0 ? error({ path: [], message: `negative at ${k}` }) : ok(v * 2)
|
|
15
|
+
|
|
16
|
+
/** Mirrors `parse`'s accumulate step, kept simple (a small test list, not a `List`). */
|
|
17
|
+
/** @type {(acc: _Entries, k: string, v: number) => _Entries} */
|
|
18
|
+
const collect = (acc, k, v) => [...acc, [k, v]]
|
|
19
|
+
|
|
20
|
+
export const proof = {
|
|
21
|
+
empty: () => {
|
|
22
|
+
const r = eachEntry(/** @type {_Entries} */ ([]), item, /** @type {_Entries} */ ([]), collect)
|
|
23
|
+
assert(r[0] === 'ok')
|
|
24
|
+
assertEq(r[1].length, 0)
|
|
25
|
+
},
|
|
26
|
+
allOk: () => {
|
|
27
|
+
const r = eachEntry([['a', 1], ['b', 2]], item, /** @type {_Entries} */ ([]), collect)
|
|
28
|
+
assert(r[0] === 'ok')
|
|
29
|
+
assertEq(r[1].length, 2)
|
|
30
|
+
assertEq(r[1][0][0], 'a')
|
|
31
|
+
assertEq(r[1][0][1], 2)
|
|
32
|
+
assertEq(r[1][1][0], 'b')
|
|
33
|
+
assertEq(r[1][1][1], 4)
|
|
34
|
+
},
|
|
35
|
+
// Mirrors `validate`'s usage: nothing is collected, only pass/fail matters.
|
|
36
|
+
noAccumulate: () => {
|
|
37
|
+
const r = eachEntry([['a', 1]], item, undefined, () => undefined)
|
|
38
|
+
assert(r[0] === 'ok')
|
|
39
|
+
assertEq(r[1], undefined)
|
|
40
|
+
},
|
|
41
|
+
firstErrorWins: () => {
|
|
42
|
+
const r = eachEntry([['a', -1], ['b', -2]], item, /** @type {_Entries} */ ([]), collect)
|
|
43
|
+
assert(r[0] === 'error')
|
|
44
|
+
assertEq(r[1].message, 'negative at a')
|
|
45
|
+
},
|
|
46
|
+
shortCircuits: () => {
|
|
47
|
+
let calls = 0
|
|
48
|
+
/** @type {(k: string, v: number) => Result<number, ValidationError>} */
|
|
49
|
+
const counting = (k, v) => {
|
|
50
|
+
calls++
|
|
51
|
+
return item(k, v)
|
|
52
|
+
}
|
|
53
|
+
const r = eachEntry([['a', -1], ['b', -2], ['c', -3]], counting, /** @type {_Entries} */ ([]), collect)
|
|
54
|
+
assert(r[0] === 'error')
|
|
55
|
+
assertEq(calls, 1)
|
|
56
|
+
},
|
|
57
|
+
pathPrefixed: () => {
|
|
58
|
+
/** @type {(k: string, v: number) => Result<number, ValidationError>} */
|
|
59
|
+
const nested = (k, v) =>
|
|
60
|
+
v < 0 ? error({ path: ['inner'], message: 'bad' }) : ok(v)
|
|
61
|
+
const r = eachEntry([['outer', -1]], nested, /** @type {_Entries} */ ([]), collect)
|
|
62
|
+
assert(r[0] === 'error')
|
|
63
|
+
assertEq(r[1].path.length, 2)
|
|
64
|
+
assertEq(r[1].path[0], 'outer')
|
|
65
|
+
assertEq(r[1].path[1], 'inner')
|
|
66
|
+
},
|
|
67
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-level API shared by RTTI consumers (`validate`, `parse`).
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import type { Primitive, Unknown } from '../ts/types.ts';
|
|
7
|
+
import type { Primitive0, Struct, Tag1, Tuple, Type } from '../types.ts';
|
|
8
|
+
import type { Result as CommonResult } from '../../result/types.ts';
|
|
9
|
+
import type { Ts } from '../ts/types.ts';
|
|
10
|
+
import type { StringMap } from '../../object/types.ts';
|
|
11
|
+
/** A path to a sub-value within the validated structure. Each step is an object key or stringified array index. */
|
|
12
|
+
export type Path = readonly string[];
|
|
13
|
+
/** Detailed validation failure: the offending `path` plus a short `message`. */
|
|
14
|
+
export type ValidationError = {
|
|
15
|
+
readonly path: Path;
|
|
16
|
+
readonly message: string;
|
|
17
|
+
};
|
|
18
|
+
/** Validation/parse result: either the typed value or a `ValidationError`. */
|
|
19
|
+
export type Result<T extends Type> = CommonResult<Ts<T>, ValidationError>;
|
|
20
|
+
/** A function that checks an unknown value against schema `T`. Shared by `validate` and `parse`. */
|
|
21
|
+
export type Validate<T extends Type> = (value: Unknown) => Result<T>;
|
|
22
|
+
/**
|
|
23
|
+
* One handler per `Type` variant. Both `validate` and `parse` provide a
|
|
24
|
+
* `Visitor<R>` where `R` is the per-variant output (e.g. a `Validate` function).
|
|
25
|
+
*/
|
|
26
|
+
export type Visitor<R> = {
|
|
27
|
+
readonly tuple: (rtti: Tuple) => R;
|
|
28
|
+
readonly struct: (rtti: Struct) => R;
|
|
29
|
+
readonly array: (item: Type) => R;
|
|
30
|
+
readonly record: (item: Type) => R;
|
|
31
|
+
readonly or: (variants: readonly Type[]) => R;
|
|
32
|
+
readonly constPrimitive: (p: Primitive) => R;
|
|
33
|
+
readonly primitive0: (tag: Primitive0) => R;
|
|
34
|
+
readonly unknown: () => R;
|
|
35
|
+
};
|
|
36
|
+
/** Type guard narrowing `Unknown` to a specific container type `C`. */
|
|
37
|
+
export type IsContainer<C extends Unknown> = (value: Unknown) => value is C;
|
|
38
|
+
/** Maps a `Tag1` to its runtime container type. */
|
|
39
|
+
export type Container<K extends Tag1> = K extends 'array' ? ReadonlyArray<Unknown> : StringMap<Unknown>;
|
|
40
|
+
/** `Result` with the payload type erased; avoids instantiating `Ts<Type>`. */
|
|
41
|
+
export type ResultE = CommonResult<Unknown, ValidationError>;
|
|
42
|
+
/** A `Validate`-shaped function with the payload type erased. */
|
|
43
|
+
export type ValidateE = (value: Unknown) => ResultE;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The serializable RTTI data form and the {@link toData} conversion from the
|
|
3
|
+
* thunk form.
|
|
4
|
+
*
|
|
5
|
+
* A schema denotes a set of values. The data form partitions that set into
|
|
6
|
+
* six disjoint kinds — unit values (`null`, `undefined`, `false`, `true`),
|
|
7
|
+
* numbers, strings, bigints, arrays and objects — so that all schema algebra
|
|
8
|
+
* (union normalization, coverage collapse, {@link equal}, {@link subset},
|
|
9
|
+
* canonical ordering via {@link cmp}) reduces to kind-wise set operations.
|
|
10
|
+
* {@link toData} is the single bridge from the thunk form; {@link validate}
|
|
11
|
+
* is the data-driven counterpart of `../validate`. The form serializes as
|
|
12
|
+
* DJS — plain JSON when no `bigint` literals are involved. See `./README.md`
|
|
13
|
+
* for the design rationale and serialization notes, and `./types.ts` for the
|
|
14
|
+
* type-level API.
|
|
15
|
+
*
|
|
16
|
+
* @module
|
|
17
|
+
*
|
|
18
|
+
* @import { Const, ConstObject, Type } from '../types.ts'
|
|
19
|
+
* @import { Primitive, Unknown } from '../ts/types.ts'
|
|
20
|
+
* @import { ResultE } from '../common/types.ts'
|
|
21
|
+
* @import { StringMap } from '../../object/types.ts'
|
|
22
|
+
* @import { ArraySet, Data, KindSet, Node, ObjectSet, RuleSet, UnionSet } from './types.ts'
|
|
23
|
+
*/
|
|
24
|
+
import type { Const, Type } from '../types.ts';
|
|
25
|
+
import type { Primitive, Unknown } from '../ts/types.ts';
|
|
26
|
+
import type { ResultE } from '../common/types.ts';
|
|
27
|
+
import type { StringMap } from '../../object/types.ts';
|
|
28
|
+
import type { Data, Node, RuleSet, UnionSet } from './types.ts';
|
|
29
|
+
/**
|
|
30
|
+
* The unit kind's enumeration: bit `1 << i` of a {@link UnionSet}'s `unit`
|
|
31
|
+
* bitset stands for `unitList[i]`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const unitList: readonly ['null', 'undefined', 'false', 'true'];
|
|
34
|
+
/**
|
|
35
|
+
* The `unit` bit of one unit value.
|
|
36
|
+
*
|
|
37
|
+
* @type {(v: null | undefined | boolean) => number}
|
|
38
|
+
*/
|
|
39
|
+
export declare const unitBit: (v: null | undefined | boolean) => number;
|
|
40
|
+
/**
|
|
41
|
+
* The data form of the empty set — rtti `never`.
|
|
42
|
+
*
|
|
43
|
+
* @type {UnionSet}
|
|
44
|
+
*/
|
|
45
|
+
export declare const never: UnionSet;
|
|
46
|
+
/**
|
|
47
|
+
* The data form of the set of all values — rtti `unknown`.
|
|
48
|
+
*
|
|
49
|
+
* @type {UnionSet}
|
|
50
|
+
*/
|
|
51
|
+
export declare const unknown: UnionSet;
|
|
52
|
+
/**
|
|
53
|
+
* Total order over the data form: negative, zero or positive, with zero
|
|
54
|
+
* exactly on structural identity. {@link toData} output is canonical, so two
|
|
55
|
+
* conversions of equivalent thunk schemas compare equal — this is what makes
|
|
56
|
+
* the data form comparable and sortable.
|
|
57
|
+
*
|
|
58
|
+
* @type {(a: Data) => (b: Data) => number}
|
|
59
|
+
*/
|
|
60
|
+
export declare const cmp: (a: Data) => (b: Data) => number;
|
|
61
|
+
/**
|
|
62
|
+
* Structural equality of canonical forms: `equal(toData(a))(toData(b))`
|
|
63
|
+
* holds exactly when `a` and `b` normalize to the same data — e.g.
|
|
64
|
+
* `or(a, b)` and `or(b, a)` are equal. Recursive definitions compare by
|
|
65
|
+
* their rule names, which are derived from the defining functions' names.
|
|
66
|
+
*
|
|
67
|
+
* @type {(a: Data) => (b: Data) => boolean}
|
|
68
|
+
*/
|
|
69
|
+
export declare const equal: (a: Data) => (b: Data) => boolean;
|
|
70
|
+
export type _Ctx = readonly [RuleSet, RuleSet];
|
|
71
|
+
export type _Assumed = StringMap<StringMap<true>>;
|
|
72
|
+
export type _Keyed = readonly [Node, string | undefined];
|
|
73
|
+
/**
|
|
74
|
+
* Sound subset test: `true` means every value of `a` is a value of `b`.
|
|
75
|
+
* Kind-wise on unions, pattern-wise on arrays/objects, coinductive on
|
|
76
|
+
* reference cycles. Incomplete in the known-hard corners of semantic
|
|
77
|
+
* subtyping (see `./README.md`): it may answer `false` for an inclusion
|
|
78
|
+
* that only holds by distributing a union across positions, or one whose
|
|
79
|
+
* left side is a non-syntactic empty set — never `true` for a non-inclusion.
|
|
80
|
+
*
|
|
81
|
+
* @type {(a: Data) => (b: Data) => boolean}
|
|
82
|
+
*/
|
|
83
|
+
export declare const subset: (a: Data) => (b: Data) => boolean;
|
|
84
|
+
export type _NodeMap = (n: Node) => Node;
|
|
85
|
+
export type _Thunk = Exclude<Type, Const>;
|
|
86
|
+
export type _Key = Exclude<Type, Primitive>;
|
|
87
|
+
export type _State = {
|
|
88
|
+
readonly converting: readonly _Thunk[];
|
|
89
|
+
readonly names: readonly (readonly [_Thunk, string])[];
|
|
90
|
+
readonly done: readonly (readonly [_Key, UnionSet])[];
|
|
91
|
+
readonly deferred: readonly (readonly [_Thunk, _Thunk])[];
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Converts a thunk-form schema into its canonical data form.
|
|
95
|
+
*
|
|
96
|
+
* Runs once per consumer need; schemas that are built but never consumed pay
|
|
97
|
+
* nothing. The output is normalized — unions are flattened and merged
|
|
98
|
+
* kind-wise, literals are sorted and deduplicated, subsumed array/object
|
|
99
|
+
* patterns are dropped, rules are pruned to the reachable set and sorted,
|
|
100
|
+
* and a union equal to a rule's body reads back as a reference — so schema
|
|
101
|
+
* identity is a property of this form: `toData(or(a, b))` and
|
|
102
|
+
* `toData(or(b, a))` are structurally identical even though the two thunks
|
|
103
|
+
* are distinct, and `or` is idempotent on recursive schemas.
|
|
104
|
+
*
|
|
105
|
+
* Only recursive definitions become named rules (named after their defining
|
|
106
|
+
* functions), everything else is inlined; a schema with no reference cycles
|
|
107
|
+
* converts to `[{}, unionSet]`.
|
|
108
|
+
*
|
|
109
|
+
* @type {(t: Type) => Data}
|
|
110
|
+
*/
|
|
111
|
+
export declare const toData: (t: Type) => Data;
|
|
112
|
+
/**
|
|
113
|
+
* Data-driven validation — the counterpart of `../validate` that consumes a
|
|
114
|
+
* {@link Data} produced by {@link toData} instead of walking the thunk
|
|
115
|
+
* graph. Returns the original value on success, or the first
|
|
116
|
+
* `{ path, message }` error.
|
|
117
|
+
*
|
|
118
|
+
* @type {(data: Data) => (value: Unknown) => ResultE}
|
|
119
|
+
*/
|
|
120
|
+
export declare const validate: (data: Data) => (value: Unknown) => ResultE;
|