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,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The JavaScript reference for `nanvm-lib`'s operators.
|
|
3
|
+
*
|
|
4
|
+
* Every case in [`module.f.mjs`](./module.f.mjs) is run through the native
|
|
5
|
+
* JavaScript operators here, so the shared data is proven to describe
|
|
6
|
+
* JavaScript before `nanvm-lib/tests/test/generated.rs` holds `nanvm-lib` to
|
|
7
|
+
* it. This module contains no test cases of its own beyond the `jsOnly`
|
|
8
|
+
* section at the end — adding a case means editing the data.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*
|
|
12
|
+
* @import { Case, EqCase, Op, Struct, Value } from './types.ts'
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { assert, assertEq } from '../asserts/module.f.mjs'
|
|
16
|
+
import { data } from './module.f.mjs'
|
|
17
|
+
|
|
18
|
+
const { entries, fromEntries, hasOwn, is } = Object
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Builds the JavaScript value a `Value` describes.
|
|
22
|
+
*
|
|
23
|
+
* `resolve` supplies the *already built* object a `ref` names — rebuilding it
|
|
24
|
+
* per reference would hand each side of a comparison its own object, which is
|
|
25
|
+
* exactly what a `ref` exists to avoid.
|
|
26
|
+
*
|
|
27
|
+
* @type {(resolve: (name: string) => unknown) => (v: Value) => unknown}
|
|
28
|
+
*/
|
|
29
|
+
const build = resolve => v => {
|
|
30
|
+
if (v === null) { return null }
|
|
31
|
+
if (typeof v === 'function') {
|
|
32
|
+
const info = v()
|
|
33
|
+
switch (info[0]) {
|
|
34
|
+
case 'function': { return () => 5 }
|
|
35
|
+
case 'ref': { return resolve(info[1]) }
|
|
36
|
+
case 'throw': { throw ['`throws` is not a value', info] }
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (Array.isArray(v)) { return v.map(build(resolve)) }
|
|
40
|
+
if (typeof v === 'object') {
|
|
41
|
+
return fromEntries(entries(v).map(([k, p]) => [k, build(resolve)(p)]))
|
|
42
|
+
}
|
|
43
|
+
return v
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Cases outside the `eq` group share nothing, so a `ref` is a mistake there. */
|
|
47
|
+
const value = build(name => { throw ['unknown shared value', name] })
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Applies an operator to already-built arguments.
|
|
51
|
+
*
|
|
52
|
+
* The `any` casts are the point of the exercise: these operators are being
|
|
53
|
+
* applied to operand types TypeScript rejects (`{} * 1`, `-[]`), which is
|
|
54
|
+
* exactly the coercion behaviour under test.
|
|
55
|
+
*
|
|
56
|
+
* @type {(op: Op) => (args: readonly unknown[]) => unknown}
|
|
57
|
+
*/
|
|
58
|
+
const apply = op => args => {
|
|
59
|
+
const [a, b] = /** @type {readonly any[]} */(args)
|
|
60
|
+
switch (op) {
|
|
61
|
+
case 'unaryPlus': { return +a }
|
|
62
|
+
case 'unaryMinus': { return -a }
|
|
63
|
+
case 'mul': { return a * b }
|
|
64
|
+
case 'stringCoercion': { return String(a) }
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** `true` when a case's `expected` is `throws` rather than a value. */
|
|
69
|
+
const isThrows = (/** @type {Value} */ expected) =>
|
|
70
|
+
typeof expected === 'function' && expected()[0] === 'throw'
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Every argument order a case is checked in: one, or both for a commutative
|
|
74
|
+
* operator. The Rust printer applies the same rule.
|
|
75
|
+
*
|
|
76
|
+
* @type {(commutative: boolean) => (c: Case) => readonly (readonly[string, readonly Value[]])[]}
|
|
77
|
+
*/
|
|
78
|
+
const orders = commutative => c => commutative
|
|
79
|
+
? [[c.name, c.args], [`${c.name}Swapped`, c.args.toReversed()]]
|
|
80
|
+
: [[c.name, c.args]]
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* The leaf tests of one group, keyed by case name.
|
|
84
|
+
*
|
|
85
|
+
* Throwing cases go under a nested `throw` key — the framework's structural
|
|
86
|
+
* way of declaring that a test is expected to throw. A throwing leaf stops at
|
|
87
|
+
* its first exception, which is why each argument order is its own leaf.
|
|
88
|
+
*
|
|
89
|
+
* @type {(op: Op) => (commutative: boolean) => (cases: readonly Case[]) => object}
|
|
90
|
+
*/
|
|
91
|
+
const group = op => commutative => cases => {
|
|
92
|
+
/** @type {(c: Case) => readonly (readonly[string, () => void])[]} */
|
|
93
|
+
const leaves = c => {
|
|
94
|
+
const { expected } = c
|
|
95
|
+
/** @type {(args: readonly Value[]) => () => void} */
|
|
96
|
+
const fn = isThrows(expected)
|
|
97
|
+
? args => () => { apply(op)(args.map(value)) }
|
|
98
|
+
: args => () => {
|
|
99
|
+
// `Object.is` rather than `===`, so `NaN` matches `NaN` and
|
|
100
|
+
// `0` does not match `-0`; the Rust side compares the same way.
|
|
101
|
+
const result = apply(op)(args.map(value))
|
|
102
|
+
const e = value(expected)
|
|
103
|
+
assert(is(result, e), [result, 'is not', e])
|
|
104
|
+
}
|
|
105
|
+
return orders(commutative)(c).map(([name, args]) => [name, fn(args)])
|
|
106
|
+
}
|
|
107
|
+
const ok = cases.filter(c => !isThrows(c.expected)).flatMap(leaves)
|
|
108
|
+
const bad = cases.filter(c => isThrows(c.expected)).flatMap(leaves)
|
|
109
|
+
return bad.length === 0
|
|
110
|
+
? fromEntries(ok)
|
|
111
|
+
: { ...fromEntries(ok), throw: fromEntries(bad) }
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const eqProof = (() => {
|
|
115
|
+
const { shared, cases } = data.eq
|
|
116
|
+
// Built once, so two `ref`s to the same name really are the same object.
|
|
117
|
+
const built = fromEntries(entries(shared).map(([k, v]) => [k, value(v)]))
|
|
118
|
+
const operand = build(name => {
|
|
119
|
+
assert(hasOwn(built, name), ['unknown shared value', name])
|
|
120
|
+
return built[name]
|
|
121
|
+
})
|
|
122
|
+
/** @type {(c: EqCase) => readonly[string, () => void]} */
|
|
123
|
+
const leaf = c => [c.name, () => {
|
|
124
|
+
const a = /** @type {any} */(operand(c.a))
|
|
125
|
+
const b = /** @type {any} */(operand(c.b))
|
|
126
|
+
assertEq(a === b, c.eq, [a, c.eq ? '===' : '!==', b])
|
|
127
|
+
assertEq(b === a, c.eq)
|
|
128
|
+
}]
|
|
129
|
+
return fromEntries(cases.map(leaf))
|
|
130
|
+
})()
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Behaviour that is real JavaScript but has no `nanvm-lib` counterpart to
|
|
134
|
+
* share data with, so it stays here instead of in `module.f.mjs`.
|
|
135
|
+
*/
|
|
136
|
+
const jsOnly = {
|
|
137
|
+
/**
|
|
138
|
+
* `Object.is` distinguishes `0` from `-0` where `===` does not; the whole
|
|
139
|
+
* corpus relies on that, so it is checked directly.
|
|
140
|
+
*/
|
|
141
|
+
negativeZero: () => {
|
|
142
|
+
assert(is(-0, -0))
|
|
143
|
+
assert(!is(0, -0))
|
|
144
|
+
assert(is(NaN, NaN))
|
|
145
|
+
},
|
|
146
|
+
/** A function's string form is engine-specific — only its type is fixed. */
|
|
147
|
+
functionToString: () => {
|
|
148
|
+
assertEq(typeof String(() => 5), 'string')
|
|
149
|
+
},
|
|
150
|
+
/**
|
|
151
|
+
* `ToPrimitive` consults a `toString` method. `nanvm-lib` has no object
|
|
152
|
+
* methods yet, so these cases cannot be shared; see
|
|
153
|
+
* `nanvm-lib/todo/mvp-roadmap.md`.
|
|
154
|
+
*/
|
|
155
|
+
toStringMethod: () => {
|
|
156
|
+
assertEq(String({ toString: () => 'custom string' }), 'custom string')
|
|
157
|
+
},
|
|
158
|
+
throw: {
|
|
159
|
+
toStringThrows: () => String({ toString: () => { throw 'Custom error' } }),
|
|
160
|
+
toStringNotAFunction: () => String(/** @type {any} */({ toString: 'hello' })),
|
|
161
|
+
toStringNotPrimitive: () => String({ toString: () => [] }),
|
|
162
|
+
/** `throws` describes a case's outcome; it is not a value to build. */
|
|
163
|
+
throwsIsNotAValue: () => value(() => ['throw']),
|
|
164
|
+
unknownRef: () => value(() => ['ref', 'nope']),
|
|
165
|
+
},
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export const proof = {
|
|
169
|
+
eq: eqProof,
|
|
170
|
+
...fromEntries(data.groups.map(
|
|
171
|
+
g => [g.op, group(g.op)(g.commutative === true)(g.cases)])),
|
|
172
|
+
jsOnly,
|
|
173
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prints the shared operator test data as Rust.
|
|
3
|
+
*
|
|
4
|
+
* The output is `nanvm-lib/tests/test/generated.rs`: one statement per case,
|
|
5
|
+
* calling the hand-written helpers in `nanvm-lib/tests/test/harness.rs`. Only
|
|
6
|
+
* the helpers are written by hand — a new operator case is added to
|
|
7
|
+
* [`../module.f.mjs`](../module.f.mjs) and appears on both the JavaScript and
|
|
8
|
+
* the Rust side at once.
|
|
9
|
+
*
|
|
10
|
+
* Literal syntax comes from [`fjs/media/rust`](../../media/rust/module.f.mjs);
|
|
11
|
+
* what is specific to this module is the `nanvm-lib` API the statements target.
|
|
12
|
+
*
|
|
13
|
+
* Every emitted function carries `#[rustfmt::skip]`: the line layout here is
|
|
14
|
+
* one statement per case, and `cargo fmt -- --check` runs in CI, so the
|
|
15
|
+
* printer would otherwise have to reproduce rustfmt's wrapping exactly.
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*
|
|
19
|
+
* @import { Case, Data, Eq, Group, Op, Value } from '../types.ts'
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
*
|
|
23
|
+
* ```js
|
|
24
|
+
* import { generate } from './module.f.mjs'
|
|
25
|
+
* import { data } from '../module.f.mjs'
|
|
26
|
+
*
|
|
27
|
+
* generate(data) // the contents of `nanvm-lib/tests/test/generated.rs`
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
import type { Data, Op, Value } from '../types.ts';
|
|
31
|
+
/**
|
|
32
|
+
* Where this printer's output goes, relative to the repository root.
|
|
33
|
+
*
|
|
34
|
+
* `tests/test/` rather than `tests/`: cargo turns every `tests/*.rs` into its
|
|
35
|
+
* own test target, so a generated file directly in `tests/` would be built as
|
|
36
|
+
* a second, harness-less crate. Inside `tests/test/` it is an ordinary
|
|
37
|
+
* submodule of the `tests/test/main.rs` target.
|
|
38
|
+
*/
|
|
39
|
+
export declare const directory = "nanvm-lib/tests/test";
|
|
40
|
+
/** @type {string} */
|
|
41
|
+
export declare const path: string;
|
|
42
|
+
/**
|
|
43
|
+
* A Rust expression of type `Any<A>`.
|
|
44
|
+
*
|
|
45
|
+
* Every use site fixes `A`, so no expression needs a turbofish: the harness
|
|
46
|
+
* helpers take `Any<A>` arguments and the shared `let` bindings are annotated.
|
|
47
|
+
*
|
|
48
|
+
* @type {(v: Value) => string}
|
|
49
|
+
*/
|
|
50
|
+
export declare const valueExpr: (v: Value) => string;
|
|
51
|
+
/** @type {(op: Op) => (args: readonly string[]) => string} */
|
|
52
|
+
export declare const call: (op: Op) => (args: readonly string[]) => string;
|
|
53
|
+
/** @type {(data: Data) => string} */
|
|
54
|
+
export declare const generate: (data: Data) => string;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prints the shared operator test data as Rust.
|
|
3
|
+
*
|
|
4
|
+
* The output is `nanvm-lib/tests/test/generated.rs`: one statement per case,
|
|
5
|
+
* calling the hand-written helpers in `nanvm-lib/tests/test/harness.rs`. Only
|
|
6
|
+
* the helpers are written by hand — a new operator case is added to
|
|
7
|
+
* [`../module.f.mjs`](../module.f.mjs) and appears on both the JavaScript and
|
|
8
|
+
* the Rust side at once.
|
|
9
|
+
*
|
|
10
|
+
* Literal syntax comes from [`fjs/media/rust`](../../media/rust/module.f.mjs);
|
|
11
|
+
* what is specific to this module is the `nanvm-lib` API the statements target.
|
|
12
|
+
*
|
|
13
|
+
* Every emitted function carries `#[rustfmt::skip]`: the line layout here is
|
|
14
|
+
* one statement per case, and `cargo fmt -- --check` runs in CI, so the
|
|
15
|
+
* printer would otherwise have to reproduce rustfmt's wrapping exactly.
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*
|
|
19
|
+
* @import { Case, Data, Eq, Group, Op, Value } from '../types.ts'
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
*
|
|
23
|
+
* ```js
|
|
24
|
+
* import { generate } from './module.f.mjs'
|
|
25
|
+
* import { data } from '../module.f.mjs'
|
|
26
|
+
*
|
|
27
|
+
* generate(data) // the contents of `nanvm-lib/tests/test/generated.rs`
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
import {
|
|
32
|
+
f64Literal,
|
|
33
|
+
i64Literal,
|
|
34
|
+
snakeCase,
|
|
35
|
+
stringLiteral,
|
|
36
|
+
} from '../../media/rust/module.f.mjs'
|
|
37
|
+
|
|
38
|
+
const { entries } = Object
|
|
39
|
+
|
|
40
|
+
const indent = ' '
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Where this printer's output goes, relative to the repository root.
|
|
44
|
+
*
|
|
45
|
+
* `tests/test/` rather than `tests/`: cargo turns every `tests/*.rs` into its
|
|
46
|
+
* own test target, so a generated file directly in `tests/` would be built as
|
|
47
|
+
* a second, harness-less crate. Inside `tests/test/` it is an ordinary
|
|
48
|
+
* submodule of the `tests/test/main.rs` target.
|
|
49
|
+
*/
|
|
50
|
+
export const directory = 'nanvm-lib/tests/test'
|
|
51
|
+
|
|
52
|
+
/** @type {string} */
|
|
53
|
+
export const path = `${directory}/generated.rs`
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* A Rust expression of type `Any<A>`.
|
|
57
|
+
*
|
|
58
|
+
* Every use site fixes `A`, so no expression needs a turbofish: the harness
|
|
59
|
+
* helpers take `Any<A>` arguments and the shared `let` bindings are annotated.
|
|
60
|
+
*
|
|
61
|
+
* @type {(v: Value) => string}
|
|
62
|
+
*/
|
|
63
|
+
export const valueExpr = v => {
|
|
64
|
+
if (v === null) { return 'Nullish::Null.to_any()' }
|
|
65
|
+
if (typeof v === 'function') {
|
|
66
|
+
const info = v()
|
|
67
|
+
switch (info[0]) {
|
|
68
|
+
case 'function': { return 'function_any()' }
|
|
69
|
+
case 'ref': { return `${snakeCase(info[1])}.clone()` }
|
|
70
|
+
case 'throw': { throw ['`throws` is not a value', info] }
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
switch (typeof v) {
|
|
74
|
+
case 'undefined': { return 'Nullish::Undefined.to_any()' }
|
|
75
|
+
case 'boolean': { return `${v}.to_any()` }
|
|
76
|
+
case 'number': { return `(${f64Literal(v)}).to_any()` }
|
|
77
|
+
case 'string': { return `string_any(${stringLiteral(v)})` }
|
|
78
|
+
case 'bigint': { return `bigint_any(${i64Literal(v)})` }
|
|
79
|
+
}
|
|
80
|
+
if (Array.isArray(v)) {
|
|
81
|
+
const items = /** @type {readonly Value[]} */(v)
|
|
82
|
+
return items.length === 0
|
|
83
|
+
? 'Array::default().to_any()'
|
|
84
|
+
: `[${items.map(valueExpr).join(', ')}].to_array().to_any()`
|
|
85
|
+
}
|
|
86
|
+
const properties = entries(v)
|
|
87
|
+
return properties.length === 0
|
|
88
|
+
? 'Object::default().to_any()'
|
|
89
|
+
: `[${properties.map(
|
|
90
|
+
([k, p]) => `(string_key(${stringLiteral(k)}), ${valueExpr(p)})`).join(', ')}].to_object().to_any()`
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** @type {(op: Op) => (args: readonly string[]) => string} */
|
|
94
|
+
export const call = op => args => {
|
|
95
|
+
switch (op) {
|
|
96
|
+
case 'unaryPlus': { return `Any::unary_plus(${args[0]})` }
|
|
97
|
+
case 'unaryMinus': { return `-(${args[0]})` }
|
|
98
|
+
case 'mul': { return `${args[0]} * ${args[1]}` }
|
|
99
|
+
case 'stringCoercion': { return `${args[0]}.to_string().map(|v| v.to_any())` }
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Comments out a statement `nanvm-lib` cannot pass yet, keeping the case
|
|
105
|
+
* visible in the generated file as the work still to do.
|
|
106
|
+
*
|
|
107
|
+
* @type {(reason: string|undefined) => (statement: string) => readonly string[]}
|
|
108
|
+
*/
|
|
109
|
+
const emit = reason => statement => reason === undefined
|
|
110
|
+
? [`${indent}${statement}`]
|
|
111
|
+
: [`${indent}// TODO: ${reason}`, `${indent}// ${statement}`]
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Every argument order a case is checked in — both for a commutative
|
|
115
|
+
* operator, matching what the JavaScript proof does.
|
|
116
|
+
*
|
|
117
|
+
* @type {(commutative: boolean) => (c: Case) => readonly (readonly[string, readonly Value[]])[]}
|
|
118
|
+
*/
|
|
119
|
+
const orders = commutative => c => commutative
|
|
120
|
+
? [[c.name, c.args], [`${c.name}Swapped`, c.args.toReversed()]]
|
|
121
|
+
: [[c.name, c.args]]
|
|
122
|
+
|
|
123
|
+
/** @type {(expected: Value) => (name: string) => (result: string) => string} */
|
|
124
|
+
const assertion = expected => name => result =>
|
|
125
|
+
typeof expected === 'function' && expected()[0] === 'throw'
|
|
126
|
+
? `check_throws::<A>(${stringLiteral(name)}, ${result});`
|
|
127
|
+
: `check::<A>(${stringLiteral(name)}, ${result}, ${valueExpr(expected)});`
|
|
128
|
+
|
|
129
|
+
/** @type {(g: Group) => readonly string[]} */
|
|
130
|
+
const groupFn = g => [
|
|
131
|
+
'#[rustfmt::skip]',
|
|
132
|
+
`fn ${snakeCase(g.op)}<A: IVm>() {`,
|
|
133
|
+
...g.cases.flatMap(c => orders(g.commutative === true)(c).flatMap(
|
|
134
|
+
([name, args]) => emit(c.rust)(
|
|
135
|
+
assertion(c.expected)(name)(call(g.op)(args.map(valueExpr)))))),
|
|
136
|
+
'}',
|
|
137
|
+
'',
|
|
138
|
+
]
|
|
139
|
+
|
|
140
|
+
/** @type {(eq: Eq) => readonly string[]} */
|
|
141
|
+
const eqFn = eq => [
|
|
142
|
+
'#[rustfmt::skip]',
|
|
143
|
+
'fn eq<A: IVm>() {',
|
|
144
|
+
...entries(eq.shared).map(
|
|
145
|
+
([k, v]) => `${indent}let ${snakeCase(k)}: Any<A> = ${valueExpr(v)};`),
|
|
146
|
+
...eq.cases.flatMap(c => emit(c.rust)(
|
|
147
|
+
`check_eq::<A>(${stringLiteral(c.name)}, ${valueExpr(c.a)}, ${valueExpr(c.b)}, ${c.eq});`)),
|
|
148
|
+
'}',
|
|
149
|
+
'',
|
|
150
|
+
]
|
|
151
|
+
|
|
152
|
+
/** @type {(data: Data) => string} */
|
|
153
|
+
export const generate = data => [
|
|
154
|
+
'// @generated by `npm run ci-update` from `fjs/nanvm/module.f.mjs`.',
|
|
155
|
+
'// Do not edit: change the shared operator test data and regenerate.',
|
|
156
|
+
'',
|
|
157
|
+
'use super::harness::*;',
|
|
158
|
+
'',
|
|
159
|
+
...eqFn(data.eq),
|
|
160
|
+
...data.groups.flatMap(groupFn),
|
|
161
|
+
'pub fn all<A: IVm>() {',
|
|
162
|
+
`${indent}eq::<A>();`,
|
|
163
|
+
...data.groups.map(g => `${indent}${snakeCase(g.op)}::<A>();`),
|
|
164
|
+
'}',
|
|
165
|
+
'',
|
|
166
|
+
].join('\n')
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proofs for the Rust printer.
|
|
3
|
+
*
|
|
4
|
+
* The interesting assertion is `generate`'s on a tiny synthetic corpus: it
|
|
5
|
+
* pins the exact text of every construct the printer can emit, so a change in
|
|
6
|
+
* layout is a visible diff here and not only in the generated file.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*
|
|
10
|
+
* @import { Data } from '../types.ts'
|
|
11
|
+
*/
|
|
12
|
+
export declare const proof: {
|
|
13
|
+
path: () => void;
|
|
14
|
+
valueExpr: () => void;
|
|
15
|
+
call: () => void;
|
|
16
|
+
generate: () => void;
|
|
17
|
+
generateData: () => void;
|
|
18
|
+
throw: {
|
|
19
|
+
throwsIsNotAValue: () => string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proofs for the Rust printer.
|
|
3
|
+
*
|
|
4
|
+
* The interesting assertion is `generate`'s on a tiny synthetic corpus: it
|
|
5
|
+
* pins the exact text of every construct the printer can emit, so a change in
|
|
6
|
+
* layout is a visible diff here and not only in the generated file.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*
|
|
10
|
+
* @import { Data } from '../types.ts'
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { assert, assertEq } from '../../asserts/module.f.mjs'
|
|
14
|
+
import { data, functionValue, ref, throws } from '../module.f.mjs'
|
|
15
|
+
import { call, directory, generate, path, valueExpr } from './module.f.mjs'
|
|
16
|
+
import { snakeCase } from '../../media/rust/module.f.mjs'
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* One case of every shape the printer can emit: a shared value and a
|
|
20
|
+
* reference to it, a skipped case, a throwing case, and a commutative binary
|
|
21
|
+
* operator.
|
|
22
|
+
*
|
|
23
|
+
* @type {Data}
|
|
24
|
+
*/
|
|
25
|
+
const sample = {
|
|
26
|
+
eq: {
|
|
27
|
+
shared: { emptyArray: [] },
|
|
28
|
+
cases: [
|
|
29
|
+
{ name: 'itself', a: ref('emptyArray'), b: ref('emptyArray'), eq: true },
|
|
30
|
+
{ name: 'skipped', a: null, b: null, eq: true, rust: 'not yet' },
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
groups: [
|
|
34
|
+
{ op: 'unaryPlus', cases: [{ name: 'bigint', args: [0n], expected: throws }] },
|
|
35
|
+
{
|
|
36
|
+
op: 'mul',
|
|
37
|
+
commutative: true,
|
|
38
|
+
cases: [{ name: 'oneByTwo', args: [1, 2], expected: 2 }],
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const expected = `// @generated by \`npm run ci-update\` from \`fjs/nanvm/module.f.mjs\`.
|
|
44
|
+
// Do not edit: change the shared operator test data and regenerate.
|
|
45
|
+
|
|
46
|
+
use super::harness::*;
|
|
47
|
+
|
|
48
|
+
#[rustfmt::skip]
|
|
49
|
+
fn eq<A: IVm>() {
|
|
50
|
+
let empty_array: Any<A> = Array::default().to_any();
|
|
51
|
+
check_eq::<A>("itself", empty_array.clone(), empty_array.clone(), true);
|
|
52
|
+
// TODO: not yet
|
|
53
|
+
// check_eq::<A>("skipped", Nullish::Null.to_any(), Nullish::Null.to_any(), true);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
#[rustfmt::skip]
|
|
57
|
+
fn unary_plus<A: IVm>() {
|
|
58
|
+
check_throws::<A>("bigint", Any::unary_plus(bigint_any(0)));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
#[rustfmt::skip]
|
|
62
|
+
fn mul<A: IVm>() {
|
|
63
|
+
check::<A>("oneByTwo", (1f64).to_any() * (2f64).to_any(), (2f64).to_any());
|
|
64
|
+
check::<A>("oneByTwoSwapped", (2f64).to_any() * (1f64).to_any(), (2f64).to_any());
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
pub fn all<A: IVm>() {
|
|
68
|
+
eq::<A>();
|
|
69
|
+
unary_plus::<A>();
|
|
70
|
+
mul::<A>();
|
|
71
|
+
}
|
|
72
|
+
`
|
|
73
|
+
|
|
74
|
+
export const proof = {
|
|
75
|
+
path: () => {
|
|
76
|
+
assertEq(directory, 'nanvm-lib/tests/test')
|
|
77
|
+
assertEq(path, 'nanvm-lib/tests/test/generated.rs')
|
|
78
|
+
},
|
|
79
|
+
valueExpr: () => {
|
|
80
|
+
assertEq(valueExpr(null), 'Nullish::Null.to_any()')
|
|
81
|
+
assertEq(valueExpr(undefined), 'Nullish::Undefined.to_any()')
|
|
82
|
+
assertEq(valueExpr(true), 'true.to_any()')
|
|
83
|
+
assertEq(valueExpr(false), 'false.to_any()')
|
|
84
|
+
assertEq(valueExpr(-0.3), '(-0.3f64).to_any()')
|
|
85
|
+
assertEq(valueExpr('a'), 'string_any("a")')
|
|
86
|
+
assertEq(valueExpr(-1n), 'bigint_any(-1)')
|
|
87
|
+
assertEq(valueExpr([]), 'Array::default().to_any()')
|
|
88
|
+
assertEq(valueExpr([null]), '[Nullish::Null.to_any()].to_array().to_any()')
|
|
89
|
+
assertEq(valueExpr({}), 'Object::default().to_any()')
|
|
90
|
+
assertEq(
|
|
91
|
+
valueExpr({ k: null }),
|
|
92
|
+
'[(string_key("k"), Nullish::Null.to_any())].to_object().to_any()')
|
|
93
|
+
assertEq(valueExpr(functionValue), 'function_any()')
|
|
94
|
+
assertEq(valueExpr(ref('stringArray')), 'string_array.clone()')
|
|
95
|
+
},
|
|
96
|
+
call: () => {
|
|
97
|
+
assertEq(call('unaryPlus')(['x']), 'Any::unary_plus(x)')
|
|
98
|
+
assertEq(call('unaryMinus')(['x']), '-(x)')
|
|
99
|
+
assertEq(call('mul')(['x', 'y']), 'x * y')
|
|
100
|
+
assertEq(call('stringCoercion')(['x']), 'x.to_string().map(|v| v.to_any())')
|
|
101
|
+
},
|
|
102
|
+
generate: () => {
|
|
103
|
+
assertEq(generate(sample), expected)
|
|
104
|
+
},
|
|
105
|
+
generateData: () => {
|
|
106
|
+
// The real corpus, which is what `ci-update` writes. Only its shape is
|
|
107
|
+
// asserted here: its contents are checked by `cargo test`.
|
|
108
|
+
const result = generate(data)
|
|
109
|
+
assert(result.endsWith('}\n'), result)
|
|
110
|
+
assert(result.includes('pub fn all<A: IVm>() {'), result)
|
|
111
|
+
for (const g of data.groups) {
|
|
112
|
+
assert(result.includes(`fn ${snakeCase(g.op)}<A: IVm>() {`), g.op)
|
|
113
|
+
assert(result.includes(`${snakeCase(g.op)}::<A>();`), g.op)
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
throw: {
|
|
117
|
+
throwsIsNotAValue: () => valueExpr(throws),
|
|
118
|
+
},
|
|
119
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-level API for the shared operator test data.
|
|
3
|
+
*
|
|
4
|
+
* The data described here is the single source of truth for operator
|
|
5
|
+
* behaviour: [`proof.f.mjs`](./proof.f.mjs) runs it against a standard
|
|
6
|
+
* JavaScript engine, and [`rust/module.f.mjs`](./rust/module.f.mjs) prints it
|
|
7
|
+
* as the Rust tests in [`test/generated.rs`](./test/generated.rs).
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* A value under test, written as itself.
|
|
13
|
+
*
|
|
14
|
+
* The shape follows `fjs/types/rtti`, where a constant is its own schema and a
|
|
15
|
+
* thunk describes anything that needs a tag: `2.3`, `'a'`, `12n`, `[1, 2]`,
|
|
16
|
+
* and `{ a: 1 }` mean exactly what they look like, and the only tagged forms
|
|
17
|
+
* are the ones a literal cannot express — see {@link Special}.
|
|
18
|
+
*
|
|
19
|
+
* Writing operands as plain JavaScript is what makes the corpus readable
|
|
20
|
+
* (`args: [[2.3]], expected: 2.3` rather than a tree of constructor calls) and
|
|
21
|
+
* costs nothing: both consumers already have to walk the value, and `typeof`
|
|
22
|
+
* plus `Array.isArray` recovers everything a tag would have carried.
|
|
23
|
+
*/
|
|
24
|
+
export type Value = Const | Special;
|
|
25
|
+
/** A value that is its own description. */
|
|
26
|
+
export type Const = null | undefined | boolean | number | string | bigint | readonly Value[] | Struct;
|
|
27
|
+
/** An object value. Property order is the order the Rust printer emits. */
|
|
28
|
+
export type Struct = {
|
|
29
|
+
readonly [k in string]?: Value;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Something no literal can express, described by a thunk.
|
|
33
|
+
*
|
|
34
|
+
* A function in the data is therefore always a *description*, never a value
|
|
35
|
+
* that happens to be a function — `functionValue` is how the data says "a
|
|
36
|
+
* function".
|
|
37
|
+
*/
|
|
38
|
+
export type Special = () => Info;
|
|
39
|
+
/**
|
|
40
|
+
* What a {@link Special} describes.
|
|
41
|
+
*
|
|
42
|
+
* - `function` — a function value. Every operator here coerces one through
|
|
43
|
+
* `ToPrimitive`, which never inspects it, so there is nothing to carry.
|
|
44
|
+
* - `ref` — one of the {@link Eq} `shared` values, so the *same* object
|
|
45
|
+
* reaches both sides of a comparison.
|
|
46
|
+
* - `throw` — not a value at all: the case must throw. Valid only as a
|
|
47
|
+
* {@link Case}'s `expected`.
|
|
48
|
+
*/
|
|
49
|
+
export type Info = readonly ['function'] | readonly ['ref', string] | readonly ['throw'];
|
|
50
|
+
/** The operators covered by the shared data. */
|
|
51
|
+
export type Op = 'unaryPlus' | 'unaryMinus' | 'mul' | 'stringCoercion';
|
|
52
|
+
/**
|
|
53
|
+
* One operator test case.
|
|
54
|
+
*
|
|
55
|
+
* `expected` is compared with `Object.is`, so `NaN` matches `NaN` and `0` does
|
|
56
|
+
* not match `-0`; `throws` there means the operation must throw, and the
|
|
57
|
+
* exception value — being engine-specific — is not part of the data.
|
|
58
|
+
*
|
|
59
|
+
* `rust` marks a case `nanvm-lib` does not implement yet: the value is the
|
|
60
|
+
* reason, the generated Rust keeps the case as a commented-out `TODO`, and
|
|
61
|
+
* the JavaScript proof still runs it. Removing the property is what turns the
|
|
62
|
+
* case on for Rust — the gap list is data, not prose in a README.
|
|
63
|
+
*/
|
|
64
|
+
export type Case = {
|
|
65
|
+
readonly name: string;
|
|
66
|
+
readonly args: readonly Value[];
|
|
67
|
+
readonly expected: Value;
|
|
68
|
+
readonly rust?: string;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* The cases of one operator.
|
|
72
|
+
*
|
|
73
|
+
* `commutative` additionally checks every case with its arguments swapped,
|
|
74
|
+
* which is what the hand-written tests did for `*`.
|
|
75
|
+
*/
|
|
76
|
+
export type Group = {
|
|
77
|
+
readonly op: Op;
|
|
78
|
+
readonly commutative?: boolean;
|
|
79
|
+
readonly cases: readonly Case[];
|
|
80
|
+
};
|
|
81
|
+
/** One strict-equality (`===`) case; `eq` is the expected result. */
|
|
82
|
+
export type EqCase = {
|
|
83
|
+
readonly name: string;
|
|
84
|
+
readonly name2?: string;
|
|
85
|
+
readonly a: Value;
|
|
86
|
+
readonly b: Value;
|
|
87
|
+
readonly eq: boolean;
|
|
88
|
+
readonly rust?: string;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Strict-equality cases plus the values they share.
|
|
92
|
+
*
|
|
93
|
+
* Equality of arrays and objects is reference equality in both JavaScript and
|
|
94
|
+
* `nanvm-lib`, so a case can only express "the same object" by naming a value
|
|
95
|
+
* in `shared` and reaching it with a `ref`.
|
|
96
|
+
*/
|
|
97
|
+
export type Eq = {
|
|
98
|
+
readonly shared: Struct;
|
|
99
|
+
readonly cases: readonly EqCase[];
|
|
100
|
+
};
|
|
101
|
+
/** The whole shared test corpus. */
|
|
102
|
+
export type Data = {
|
|
103
|
+
readonly eq: Eq;
|
|
104
|
+
readonly groups: readonly Group[];
|
|
105
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writes the generated Rust operator tests.
|
|
3
|
+
*
|
|
4
|
+
* The printer in [`../rust/module.f.mjs`](../rust/module.f.mjs) is pure; this
|
|
5
|
+
* module is the thin effectful shell around it, invoked from `ci-update` so
|
|
6
|
+
* the CI drift check regenerates the file on every pull request and fails
|
|
7
|
+
* when the committed copy is stale.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*
|
|
11
|
+
* @import { Effect } from '../../effects/types.ts'
|
|
12
|
+
* @import { Mkdir, NodeProgram, WriteFile } from '../../effects/node/types.ts'
|
|
13
|
+
*/
|
|
14
|
+
import type { Effect } from '../../effects/types.ts';
|
|
15
|
+
import type { Mkdir, NodeProgram, WriteFile } from '../../effects/node/types.ts';
|
|
16
|
+
/**
|
|
17
|
+
* Regenerates `nanvm-lib/tests/test/generated.rs` from the shared test data.
|
|
18
|
+
*
|
|
19
|
+
* @type {() => Effect<Mkdir | WriteFile, void>}
|
|
20
|
+
*/
|
|
21
|
+
export declare const generateRustTests: () => Effect<Mkdir | WriteFile, void>;
|
|
22
|
+
/** @type {NodeProgram} */
|
|
23
|
+
export declare const main: NodeProgram;
|