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
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Magic-byte MIME type detection.
|
|
3
|
-
*
|
|
4
|
-
* `detect` is a pure table lookup over the leading bytes of a `Vec`: it returns a
|
|
5
|
-
* MIME type string for the container formats whose signatures it knows, or `null`
|
|
6
|
-
* for anything else — text, unknown binary, or a `Vec` too short to match.
|
|
7
|
-
*
|
|
8
|
-
* Beside it, `detectStream` is the **streaming counterpart**: a byte-accepting
|
|
9
|
-
* state machine (length × magic-byte eliminator × UTF-8 validity DFA) that derives
|
|
10
|
-
* `{ length, mime_type, type }` by folding a CAS read stream in O(1) space, without
|
|
11
|
-
* ever buffering the blob into a single `maxLength`-bounded `Vec`. See the README
|
|
12
|
-
* for the factored design.
|
|
13
|
-
*
|
|
14
|
-
* The CAS store is type-agnostic and keeps raw bytes only, so type is never
|
|
15
|
-
* stored; it is recovered on read by sniffing the content. Callers decide what
|
|
16
|
-
* `null` means: the CAS MCP adapter falls back to a plain text result.
|
|
17
|
-
*
|
|
18
|
-
* ## Recognised signatures
|
|
19
|
-
*
|
|
20
|
-
* | MIME type | Leading bytes |
|
|
21
|
-
* |-------------------|----------------------------------------|
|
|
22
|
-
* | `image/png` | `89 50 4E 47 0D 0A 1A 0A` |
|
|
23
|
-
* | `image/jpeg` | `FF D8 FF` |
|
|
24
|
-
* | `image/gif` | `47 49 46 38 37 61` / `…39 61` (`"GIF87a"` / `"GIF89a"`) |
|
|
25
|
-
* | `image/webp` | `52 49 46 46 .. .. .. .. 57 45 42 50` (`"RIFF"…"WEBP"`) |
|
|
26
|
-
* | `application/pdf` | `25 50 44 46 2D` (`"%PDF-"`) |
|
|
27
|
-
* | `application/zip` | `50 4B 03 04` / `05 06` / `07 08` (`"PK"` entry, empty, or spanned) |
|
|
28
|
-
*
|
|
29
|
-
* WebP is the one signature with a gap: the four-byte little-endian file size
|
|
30
|
-
* sits between the `RIFF` and `WEBP` markers, so it is matched as a prefix plus
|
|
31
|
-
* a second marker at byte offset 8 rather than a single contiguous run.
|
|
32
|
-
*
|
|
33
|
-
* @module
|
|
34
|
-
*/
|
|
35
|
-
import { msb, fromSentinel, length, u8List } from '../../types/bit_vec/module.f.js';
|
|
36
|
-
import { iterable } from '../../types/list/module.f.js';
|
|
37
|
-
import { pure, step } from '../../effects/module.f.js';
|
|
38
|
-
import { ok, error } from '../../types/result/module.f.js';
|
|
39
|
-
import { isValidCodePoint, isTextCodePoint } from '../../text/code_point/module.f.js';
|
|
40
|
-
import { utf8ByteToCodePointOp } from '../../text/utf8/module.f.js';
|
|
41
|
-
const { startsWith, removeFront } = msb;
|
|
42
|
-
// Each signature is written as a hex literal whose leading `1` nibble is a
|
|
43
|
-
// sentinel marking the start of the byte run (so leading zero bytes survive)
|
|
44
|
-
// and fixing the length — see `bit_vec` `fromSentinel`.
|
|
45
|
-
const sig = fromSentinel;
|
|
46
|
-
/**
|
|
47
|
-
* Contiguous magic-byte signatures, checked in order; the first prefix match
|
|
48
|
-
* wins. Ordering is irrelevant here — no signature is a prefix of another.
|
|
49
|
-
*/
|
|
50
|
-
const table = [
|
|
51
|
-
[sig(0x189504e470d0a1a0an), 'image/png'],
|
|
52
|
-
[sig(0x1ffd8ffn), 'image/jpeg'],
|
|
53
|
-
// Match the full GIF version headers ("GIF87a" / "GIF89a"), not just "GIF8",
|
|
54
|
-
// so opaque bytes that merely start with "GIF8" are not mistyped.
|
|
55
|
-
[sig(0x1474946383761n), 'image/gif'],
|
|
56
|
-
[sig(0x1474946383961n), 'image/gif'],
|
|
57
|
-
[sig(0x1255044462dn), 'application/pdf'],
|
|
58
|
-
// ZIP has three "PK" local-header variants: a normal entry, an empty
|
|
59
|
-
// archive (end-of-central-directory only), and a spanned archive.
|
|
60
|
-
[sig(0x1504b0304n), 'application/zip'],
|
|
61
|
-
[sig(0x1504b0506n), 'application/zip'],
|
|
62
|
-
[sig(0x1504b0708n), 'application/zip'],
|
|
63
|
-
];
|
|
64
|
-
// WebP: "RIFF" at offset 0, "WEBP" at offset 8 (the 4 bytes between are the
|
|
65
|
-
// file size). 12 bytes = 96 bits is the minimum to carry both markers.
|
|
66
|
-
const riff = sig(0x152494646n);
|
|
67
|
-
const webp = sig(0x157454250n);
|
|
68
|
-
const isWebp = (bytes) => length(bytes) >= 96n
|
|
69
|
-
&& startsWith(riff)(bytes)
|
|
70
|
-
&& startsWith(webp)(removeFront(64n)(bytes));
|
|
71
|
-
/**
|
|
72
|
-
* Detects the MIME type of `bytes` from its leading magic-byte signature.
|
|
73
|
-
*
|
|
74
|
-
* @returns the MIME type string for a recognized format, or `null` when the
|
|
75
|
-
* leading bytes match no known signature (including any `Vec` shorter than
|
|
76
|
-
* the signature it might otherwise match).
|
|
77
|
-
*/
|
|
78
|
-
export const detect = (bytes) => {
|
|
79
|
-
if (isWebp(bytes)) {
|
|
80
|
-
return 'image/webp';
|
|
81
|
-
}
|
|
82
|
-
for (const [s, m] of table) {
|
|
83
|
-
if (startsWith(s)(bytes)) {
|
|
84
|
-
return m;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return null;
|
|
88
|
-
};
|
|
89
|
-
// The streaming counterpart of `table`/`isWebp`: the same signatures expressed as
|
|
90
|
-
// byte patterns the eliminator can consume one byte at a time. WebP's gap is the
|
|
91
|
-
// only wildcard run.
|
|
92
|
-
const signatures = [
|
|
93
|
-
{ pattern: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a], mime: 'image/png' },
|
|
94
|
-
{ pattern: [0xff, 0xd8, 0xff], mime: 'image/jpeg' },
|
|
95
|
-
{ pattern: [0x47, 0x49, 0x46, 0x38, 0x37, 0x61], mime: 'image/gif' },
|
|
96
|
-
{ pattern: [0x47, 0x49, 0x46, 0x38, 0x39, 0x61], mime: 'image/gif' },
|
|
97
|
-
{ pattern: [0x25, 0x50, 0x44, 0x46, 0x2d], mime: 'application/pdf' },
|
|
98
|
-
{ pattern: [0x50, 0x4b, 0x03, 0x04], mime: 'application/zip' },
|
|
99
|
-
{ pattern: [0x50, 0x4b, 0x05, 0x06], mime: 'application/zip' },
|
|
100
|
-
{ pattern: [0x50, 0x4b, 0x07, 0x08], mime: 'application/zip' },
|
|
101
|
-
{
|
|
102
|
-
pattern: [0x52, 0x49, 0x46, 0x46, null, null, null, null, 0x57, 0x45, 0x42, 0x50],
|
|
103
|
-
mime: 'image/webp',
|
|
104
|
-
},
|
|
105
|
-
];
|
|
106
|
-
const magicInit = { tag: 'scan', pos: 0, viable: signatures };
|
|
107
|
-
const magicStep = (m, byte) => {
|
|
108
|
-
if (m.tag !== 'scan') {
|
|
109
|
-
return m;
|
|
110
|
-
}
|
|
111
|
-
const { pos } = m;
|
|
112
|
-
const viable = m.viable.filter(s => {
|
|
113
|
-
const p = s.pattern[pos];
|
|
114
|
-
return p === null || p === byte;
|
|
115
|
-
});
|
|
116
|
-
for (const s of viable) {
|
|
117
|
-
if (s.pattern.length === pos + 1) {
|
|
118
|
-
return { tag: 'matched', mime: s.mime };
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return viable.length === 0 ? { tag: 'dead' } : { tag: 'scan', pos: pos + 1, viable };
|
|
122
|
-
};
|
|
123
|
-
const magicMime = (m) => m.tag === 'matched' ? m.mime : null;
|
|
124
|
-
const utf8Init = { st: null, valid: true, text: true };
|
|
125
|
-
const utf8Step = (u, byte) => {
|
|
126
|
-
if (!u.valid) {
|
|
127
|
-
return u;
|
|
128
|
-
}
|
|
129
|
-
const [cps, st] = utf8ByteToCodePointOp(byte, u.st);
|
|
130
|
-
let text = u.text;
|
|
131
|
-
for (const cp of cps) {
|
|
132
|
-
if (!isValidCodePoint(cp)) {
|
|
133
|
-
return { st, valid: false, text };
|
|
134
|
-
}
|
|
135
|
-
if (!isTextCodePoint(cp)) {
|
|
136
|
-
text = false;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return { st, valid: true, text };
|
|
140
|
-
};
|
|
141
|
-
const utf8Valid = (u) => u.valid && u.st === null;
|
|
142
|
-
// A blob is text only when it is whole-blob-valid UTF-8 *and* every decoded code
|
|
143
|
-
// point is a text code point (no NUL/other controls).
|
|
144
|
-
const utf8Text = (u) => utf8Valid(u) && u.text;
|
|
145
|
-
/** The initial detector state `q₀`. */
|
|
146
|
-
export const detectInit = {
|
|
147
|
-
length: 0n,
|
|
148
|
-
magic: magicInit,
|
|
149
|
-
utf8: utf8Init,
|
|
150
|
-
};
|
|
151
|
-
// The outcome can no longer change — `push` may stop decoding and only count
|
|
152
|
-
// length — once `finish` is pinned down. A magic `matched` pins it on its own
|
|
153
|
-
// (`finish` returns the detected mime and ignores the utf8 verdict), so we must
|
|
154
|
-
// not wait for utf8 to go invalid (it may stay valid forever, e.g. an ASCII PDF).
|
|
155
|
-
// A magic `dead` leaves text-vs-octet open, so it settles only once utf8 can no
|
|
156
|
-
// longer be text — either invalid or a control byte seen (both absorbing); `scan`
|
|
157
|
-
// is never settled.
|
|
158
|
-
const isSettled = (magic, utf8) => {
|
|
159
|
-
switch (magic.tag) {
|
|
160
|
-
case 'matched': return true;
|
|
161
|
-
case 'dead': return !utf8.valid || !utf8.text;
|
|
162
|
-
case 'scan': return false;
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
/**
|
|
166
|
-
* Folds one `Vec` chunk into the detector state (`δ` over a whole chunk). Length
|
|
167
|
-
* always advances by the chunk's bit length; per-byte iteration stops as soon as
|
|
168
|
-
* the verdict is fixed (see {@link isSettled}), so large blobs — including large
|
|
169
|
-
* magic-matched ones — cost ≈ length counting.
|
|
170
|
-
*/
|
|
171
|
-
export const push = (s) => (chunk) => {
|
|
172
|
-
const bits = length(chunk);
|
|
173
|
-
let magic = s.magic;
|
|
174
|
-
let utf8 = s.utf8;
|
|
175
|
-
if (!isSettled(magic, utf8)) {
|
|
176
|
-
for (const byte of iterable(u8List(msb)(chunk))) {
|
|
177
|
-
magic = magicStep(magic, byte);
|
|
178
|
-
utf8 = utf8Step(utf8, byte);
|
|
179
|
-
if (isSettled(magic, utf8)) {
|
|
180
|
-
break;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
return { length: s.length + bits, magic, utf8 };
|
|
185
|
-
};
|
|
186
|
-
/**
|
|
187
|
-
* Reads the answer off the final state (`λ`). Reproduces the three-way result of
|
|
188
|
-
* the pure path: magic hit → `base64` + detected mime; else whole-blob-valid UTF-8
|
|
189
|
-
* that is also all-text (byte-aligned, no invalidity, no control bytes) → `text` +
|
|
190
|
-
* `text/plain`; else → `base64` + `application/octet-stream`. A valid-but-control
|
|
191
|
-
* blob (NUL, other controls) is well-formed UTF-8 yet falls through to the binary
|
|
192
|
-
* branch.
|
|
193
|
-
*/
|
|
194
|
-
export const finish = (s) => {
|
|
195
|
-
const byteLength = s.length >> 3n;
|
|
196
|
-
const mime = magicMime(s.magic);
|
|
197
|
-
if (mime !== null) {
|
|
198
|
-
return { length: byteLength, mime_type: mime, type: 'base64' };
|
|
199
|
-
}
|
|
200
|
-
if (utf8Text(s.utf8) && (s.length & 7n) === 0n) {
|
|
201
|
-
return { length: byteLength, mime_type: 'text/plain', type: 'text' };
|
|
202
|
-
}
|
|
203
|
-
return { length: byteLength, mime_type: 'application/octet-stream', type: 'base64' };
|
|
204
|
-
};
|
|
205
|
-
/**
|
|
206
|
-
* Classifies a whole `Vec` with the same state machine as {@link detectStream}.
|
|
207
|
-
* The single-buffer counterpart for callers that already hold the bytes (the
|
|
208
|
-
* `cas_get` `content: true` path materializes the blob anyway): both paths read
|
|
209
|
-
* the three-way `{ length, mime_type, type }` verdict from one machine instead of
|
|
210
|
-
* re-deriving it from `detect` + a separate UTF-8 check.
|
|
211
|
-
*/
|
|
212
|
-
export const detectVec = (bytes) => finish(push(detectInit)(bytes));
|
|
213
|
-
/**
|
|
214
|
-
* Folds a CAS read stream through {@link push} and reads {@link finish} at EOF,
|
|
215
|
-
* deriving `cas_get` metadata without ever materializing the blob. A read `error`
|
|
216
|
-
* item short-circuits into the `IoResult` error.
|
|
217
|
-
*/
|
|
218
|
-
export const detectStream = (stream) => {
|
|
219
|
-
const loop = (s) => (l) => step(l, (node) => {
|
|
220
|
-
if (node === undefined) {
|
|
221
|
-
return pure(ok(finish(s)));
|
|
222
|
-
}
|
|
223
|
-
const { first, tail } = node;
|
|
224
|
-
const [t, v] = first;
|
|
225
|
-
if (t === 'error') {
|
|
226
|
-
return pure(error(v));
|
|
227
|
-
}
|
|
228
|
-
return loop(push(s)(v))(tail);
|
|
229
|
-
});
|
|
230
|
-
return loop(detectInit)(stream);
|
|
231
|
-
};
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
export declare const proof: {
|
|
2
|
-
png: () => void;
|
|
3
|
-
jpeg: () => void;
|
|
4
|
-
gif89a: () => void;
|
|
5
|
-
gif87a: () => void;
|
|
6
|
-
gif8NotGif: () => void;
|
|
7
|
-
pdf: () => void;
|
|
8
|
-
zip: () => void;
|
|
9
|
-
emptyZip: () => void;
|
|
10
|
-
webp: () => void;
|
|
11
|
-
riffNotWebp: () => void;
|
|
12
|
-
textIsNull: () => void;
|
|
13
|
-
shortIsNull: () => void;
|
|
14
|
-
emptyIsNull: () => void;
|
|
15
|
-
stream: {
|
|
16
|
-
text: () => void;
|
|
17
|
-
png: () => void;
|
|
18
|
-
octetStream: () => void;
|
|
19
|
-
nul: () => void;
|
|
20
|
-
controlByte: () => void;
|
|
21
|
-
c1Control: () => void;
|
|
22
|
-
whitespaceControlsStayText: () => void;
|
|
23
|
-
magicAcrossChunks: () => void;
|
|
24
|
-
webp: () => void;
|
|
25
|
-
utf8AcrossChunks: () => void;
|
|
26
|
-
validUntilTrailingInvalidByte: () => void;
|
|
27
|
-
truncatedSequence: () => void;
|
|
28
|
-
largeMultiChunkBlob: () => void;
|
|
29
|
-
pdfThenLargeTextTail: () => void;
|
|
30
|
-
pdfThenBinaryTail: () => void;
|
|
31
|
-
readErrorSurfaces: () => void;
|
|
32
|
-
empty: () => void;
|
|
33
|
-
};
|
|
34
|
-
vec: {
|
|
35
|
-
text: () => void;
|
|
36
|
-
png: () => void;
|
|
37
|
-
octetStream: () => void;
|
|
38
|
-
nul: () => void;
|
|
39
|
-
};
|
|
40
|
-
};
|
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
import { assert, assertEq } from '../../asserts/module.f.js';
|
|
2
|
-
import { msb, u8ListToVec, vec8, repeat, empty } from '../../types/bit_vec/module.f.js';
|
|
3
|
-
import { runPure } from '../../effects/module.f.js';
|
|
4
|
-
import { nonEmpty, empty as emptyList } from '../../effects/list/module.f.js';
|
|
5
|
-
import { ok } from '../../types/result/module.f.js';
|
|
6
|
-
import { detect, detectStream, detectVec } from './module.f.js';
|
|
7
|
-
// Builds a big-endian `Vec` from a list of byte values — mirrors how the CAS
|
|
8
|
-
// store would hold the leading bytes of a stored blob.
|
|
9
|
-
const bytes = (...b) => u8ListToVec(msb)(b);
|
|
10
|
-
// ── Streaming detector helpers ──────────────────────────────────────────────────
|
|
11
|
-
// Builds a CAS-style read stream from a sequence of ok(chunk) items.
|
|
12
|
-
const stream = (...chunks) => chunks.reduceRight((tail, c) => nonEmpty(ok(c), tail), emptyList());
|
|
13
|
-
// Runs the streaming detector over the given chunks and unwraps the metadata.
|
|
14
|
-
const detectChunks = (...chunks) => {
|
|
15
|
-
const o = runPure(detectStream(stream(...chunks)));
|
|
16
|
-
assert(o.length === 1, 'effect is not pure');
|
|
17
|
-
const [r] = o;
|
|
18
|
-
assert(r[0] !== 'error', r[1]);
|
|
19
|
-
return r[1];
|
|
20
|
-
};
|
|
21
|
-
export const proof = {
|
|
22
|
-
png: () => assertEq(detect(bytes(0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a)), 'image/png'),
|
|
23
|
-
jpeg: () => assertEq(detect(bytes(0xff, 0xd8, 0xff, 0xe0)), 'image/jpeg'),
|
|
24
|
-
gif89a: () => assertEq(detect(bytes(0x47, 0x49, 0x46, 0x38, 0x39, 0x61)), 'image/gif'),
|
|
25
|
-
gif87a: () => assertEq(detect(bytes(0x47, 0x49, 0x46, 0x38, 0x37, 0x61)), 'image/gif'),
|
|
26
|
-
// "GIF8" alone, without a valid version suffix, is not a GIF.
|
|
27
|
-
gif8NotGif: () => assertEq(detect(bytes(0x47, 0x49, 0x46, 0x38, 0x30, 0x30)), null),
|
|
28
|
-
pdf: () =>
|
|
29
|
-
// "%PDF-1.4"
|
|
30
|
-
assertEq(detect(bytes(0x25, 0x50, 0x44, 0x46, 0x2d, 0x31, 0x2e, 0x34)), 'application/pdf'),
|
|
31
|
-
zip: () => assertEq(detect(bytes(0x50, 0x4b, 0x03, 0x04, 0x14, 0x00)), 'application/zip'),
|
|
32
|
-
// An empty ZIP archive starts with the end-of-central-directory record.
|
|
33
|
-
emptyZip: () => assertEq(detect(bytes(0x50, 0x4b, 0x05, 0x06, 0x00, 0x00)), 'application/zip'),
|
|
34
|
-
webp: () =>
|
|
35
|
-
// "RIFF" + 4-byte size + "WEBP"
|
|
36
|
-
assertEq(detect(bytes(0x52, 0x49, 0x46, 0x46, 0x1a, 0x00, 0x00, 0x00, 0x57, 0x45, 0x42, 0x50)), 'image/webp'),
|
|
37
|
-
// "RIFF…" without the "WEBP" marker (e.g. a WAV) is not WebP.
|
|
38
|
-
riffNotWebp: () => assertEq(detect(bytes(0x52, 0x49, 0x46, 0x46, 0x1a, 0x00, 0x00, 0x00, 0x57, 0x41, 0x56, 0x45)), null),
|
|
39
|
-
// Plain ASCII text matches no signature.
|
|
40
|
-
textIsNull: () => assertEq(detect(bytes(0x68, 0x65, 0x6c, 0x6c, 0x6f)), null),
|
|
41
|
-
// A prefix shorter than any signature falls through to null, not a partial match.
|
|
42
|
-
shortIsNull: () => assertEq(detect(bytes(0x89, 0x50)), null),
|
|
43
|
-
emptyIsNull: () => assertEq(detect(empty), null),
|
|
44
|
-
// ── Streaming detector (detectStream) ───────────────────────────────────────
|
|
45
|
-
stream: {
|
|
46
|
-
// Plain UTF-8 text classifies as text/plain with the correct byte length.
|
|
47
|
-
text: () => {
|
|
48
|
-
const m = detectChunks(bytes(0x68, 0x65, 0x6c, 0x6c, 0x6f)); // "hello"
|
|
49
|
-
assertEq(m.type, 'text');
|
|
50
|
-
assertEq(m.mime_type, 'text/plain');
|
|
51
|
-
assertEq(m.length, 5n);
|
|
52
|
-
},
|
|
53
|
-
// A magic-byte signature classifies as base64 with the detected mime type.
|
|
54
|
-
png: () => {
|
|
55
|
-
const m = detectChunks(bytes(0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x01));
|
|
56
|
-
assertEq(m.type, 'base64');
|
|
57
|
-
assertEq(m.mime_type, 'image/png');
|
|
58
|
-
assertEq(m.length, 10n);
|
|
59
|
-
},
|
|
60
|
-
// Unknown binary (no signature, not UTF-8) falls back to octet-stream/base64.
|
|
61
|
-
octetStream: () => {
|
|
62
|
-
const m = detectChunks(bytes(0xff, 0xfe, 0x00, 0x01));
|
|
63
|
-
assertEq(m.type, 'base64');
|
|
64
|
-
assertEq(m.mime_type, 'application/octet-stream');
|
|
65
|
-
assertEq(m.length, 4n);
|
|
66
|
-
},
|
|
67
|
-
// A NUL-byte blob is valid single-byte UTF-8 (all U+0000) but is binary:
|
|
68
|
-
// NUL is the sharpest binary marker, so it classifies as octet-stream.
|
|
69
|
-
nul: () => {
|
|
70
|
-
const m = detectChunks(bytes(0x00, 0x00, 0x00));
|
|
71
|
-
assertEq(m.type, 'base64');
|
|
72
|
-
assertEq(m.mime_type, 'application/octet-stream');
|
|
73
|
-
assertEq(m.length, 3n);
|
|
74
|
-
},
|
|
75
|
-
// A control byte embedded in otherwise-valid ASCII (here ESC) is still
|
|
76
|
-
// binary — text/plain must not imply terminal escapes.
|
|
77
|
-
controlByte: () => {
|
|
78
|
-
const m = detectChunks(bytes(0x68, 0x69, 0x1b, 0x5b, 0x30, 0x6d)); // "hi\x1b[0m"
|
|
79
|
-
assertEq(m.type, 'base64');
|
|
80
|
-
assertEq(m.mime_type, 'application/octet-stream');
|
|
81
|
-
assertEq(m.length, 6n);
|
|
82
|
-
},
|
|
83
|
-
// A C1 control arrives as 2-byte UTF-8 (C2 85 = U+0085, NEL); invisible at
|
|
84
|
-
// the byte level, it is caught at the code-point level and reads as binary.
|
|
85
|
-
c1Control: () => {
|
|
86
|
-
const m = detectChunks(bytes(0x41, 0xc2, 0x85)); // "A" + U+0085
|
|
87
|
-
assertEq(m.type, 'base64');
|
|
88
|
-
assertEq(m.mime_type, 'application/octet-stream');
|
|
89
|
-
assertEq(m.length, 3n);
|
|
90
|
-
},
|
|
91
|
-
// The text whitespace controls (TAB, LF, VT, FF, CR) are legitimate in text.
|
|
92
|
-
whitespaceControlsStayText: () => {
|
|
93
|
-
const m = detectChunks(bytes(0x61, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x62)); // "a\t\n\v\f\rb"
|
|
94
|
-
assertEq(m.type, 'text');
|
|
95
|
-
assertEq(m.mime_type, 'text/plain');
|
|
96
|
-
assertEq(m.length, 7n);
|
|
97
|
-
},
|
|
98
|
-
// Magic-byte detection threads across a chunk boundary mid-signature.
|
|
99
|
-
magicAcrossChunks: () => {
|
|
100
|
-
const m = detectChunks(bytes(0x89, 0x50, 0x4e), // first 3 bytes of the PNG signature
|
|
101
|
-
bytes(0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00)); // the rest, in a second chunk
|
|
102
|
-
assertEq(m.type, 'base64');
|
|
103
|
-
assertEq(m.mime_type, 'image/png');
|
|
104
|
-
assertEq(m.length, 9n);
|
|
105
|
-
},
|
|
106
|
-
// WebP's wildcard size gap is handled in the streaming form too.
|
|
107
|
-
webp: () => {
|
|
108
|
-
const m = detectChunks(bytes(0x52, 0x49, 0x46, 0x46), // "RIFF"
|
|
109
|
-
bytes(0x1a, 0x00, 0x00, 0x00), // 4-byte size (wildcards)
|
|
110
|
-
bytes(0x57, 0x45, 0x42, 0x50)); // "WEBP"
|
|
111
|
-
assertEq(m.type, 'base64');
|
|
112
|
-
assertEq(m.mime_type, 'image/webp');
|
|
113
|
-
assertEq(m.length, 12n);
|
|
114
|
-
},
|
|
115
|
-
// A multi-byte UTF-8 sequence split across chunks stays valid text.
|
|
116
|
-
utf8AcrossChunks: () => {
|
|
117
|
-
const m = detectChunks(bytes(0xc3), bytes(0xa9)); // "é" = C3 A9
|
|
118
|
-
assertEq(m.type, 'text');
|
|
119
|
-
assertEq(m.mime_type, 'text/plain');
|
|
120
|
-
assertEq(m.length, 2n);
|
|
121
|
-
},
|
|
122
|
-
// The decisive case: valid UTF-8 for every chunk but the last, which adds a
|
|
123
|
-
// lone invalid byte. A leading-bytes buffer would wrongly say "text"; the
|
|
124
|
-
// streaming validator sees the whole blob and classifies it as base64.
|
|
125
|
-
validUntilTrailingInvalidByte: () => {
|
|
126
|
-
const m = detectChunks(bytes(0x68, 0x65, 0x6c, 0x6c, 0x6f), // "hello" — valid UTF-8
|
|
127
|
-
bytes(0xff)); // trailing invalid byte
|
|
128
|
-
assertEq(m.type, 'base64');
|
|
129
|
-
assertEq(m.mime_type, 'application/octet-stream');
|
|
130
|
-
assertEq(m.length, 6n);
|
|
131
|
-
},
|
|
132
|
-
// A truncated multi-byte sequence at EOF is invalid UTF-8, hence base64.
|
|
133
|
-
truncatedSequence: () => {
|
|
134
|
-
const m = detectChunks(bytes(0xc3)); // lead byte with no continuation
|
|
135
|
-
assertEq(m.type, 'base64');
|
|
136
|
-
assertEq(m.mime_type, 'application/octet-stream');
|
|
137
|
-
assertEq(m.length, 1n);
|
|
138
|
-
},
|
|
139
|
-
// A blob larger than `maxLength` (1,048,576 bits) split across chunks — the
|
|
140
|
-
// exact case where `collectRead` would error — returns correct metadata.
|
|
141
|
-
largeMultiChunkBlob: () => {
|
|
142
|
-
const a = repeat(70000n)(vec8(0x61n)); // 70,000 bytes of 'a' (560,000 bits)
|
|
143
|
-
const m = detectChunks(a, a); // 140,000 bytes = 1,120,000 bits > maxLength
|
|
144
|
-
assertEq(m.type, 'text');
|
|
145
|
-
assertEq(m.mime_type, 'text/plain');
|
|
146
|
-
assertEq(m.length, 140000n);
|
|
147
|
-
},
|
|
148
|
-
// A magic match settles the verdict on its own: a large magic-matched blob
|
|
149
|
-
// whose tail stays valid UTF-8 (an ASCII PDF) classifies by the signature.
|
|
150
|
-
// `push` stops decoding the tail once `magic` is matched — `finish` ignores
|
|
151
|
-
// the utf8 verdict here — so this is the magic-matched fast path.
|
|
152
|
-
pdfThenLargeTextTail: () => {
|
|
153
|
-
const header = bytes(0x25, 0x50, 0x44, 0x46, 0x2d); // "%PDF-"
|
|
154
|
-
const tail = repeat(70000n)(vec8(0x61n)); // valid ASCII, never invalidates utf8
|
|
155
|
-
const m = detectChunks(header, tail);
|
|
156
|
-
assertEq(m.type, 'base64');
|
|
157
|
-
assertEq(m.mime_type, 'application/pdf');
|
|
158
|
-
assertEq(m.length, 70005n);
|
|
159
|
-
},
|
|
160
|
-
// A magic match wins regardless of the tail: a binary (non-UTF-8) tail
|
|
161
|
-
// after the signature is still classified by the signature.
|
|
162
|
-
pdfThenBinaryTail: () => {
|
|
163
|
-
const header = bytes(0x25, 0x50, 0x44, 0x46, 0x2d); // "%PDF-"
|
|
164
|
-
const m = detectChunks(header, bytes(0xff, 0xfe, 0x00));
|
|
165
|
-
assertEq(m.type, 'base64');
|
|
166
|
-
assertEq(m.mime_type, 'application/pdf');
|
|
167
|
-
assertEq(m.length, 8n);
|
|
168
|
-
},
|
|
169
|
-
// A read `error` item short-circuits into the IoResult error.
|
|
170
|
-
readErrorSurfaces: () => {
|
|
171
|
-
const errStream = nonEmpty(['error', 'boom'], emptyList());
|
|
172
|
-
const o = runPure(detectStream(errStream));
|
|
173
|
-
assert(o.length === 1, 'effect is not pure');
|
|
174
|
-
assert(o[0][0] === 'error');
|
|
175
|
-
},
|
|
176
|
-
// Empty stream: zero-length text/plain.
|
|
177
|
-
empty: () => {
|
|
178
|
-
const m = detectChunks();
|
|
179
|
-
assertEq(m.type, 'text');
|
|
180
|
-
assertEq(m.length, 0n);
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
// ── Single-Vec detector (detectVec) ─────────────────────────────────────────
|
|
184
|
-
// The whole-Vec form used by the `cas_get` content:true path; same machine,
|
|
185
|
-
// same three-way verdict as the streaming form.
|
|
186
|
-
vec: {
|
|
187
|
-
text: () => {
|
|
188
|
-
const m = detectVec(bytes(0x68, 0x65, 0x6c, 0x6c, 0x6f)); // "hello"
|
|
189
|
-
assertEq(m.type, 'text');
|
|
190
|
-
assertEq(m.mime_type, 'text/plain');
|
|
191
|
-
assertEq(m.length, 5n);
|
|
192
|
-
},
|
|
193
|
-
png: () => {
|
|
194
|
-
const m = detectVec(bytes(0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x01));
|
|
195
|
-
assertEq(m.type, 'base64');
|
|
196
|
-
assertEq(m.mime_type, 'image/png');
|
|
197
|
-
assertEq(m.length, 10n);
|
|
198
|
-
},
|
|
199
|
-
octetStream: () => {
|
|
200
|
-
const m = detectVec(bytes(0xff, 0xfe, 0x00, 0x01));
|
|
201
|
-
assertEq(m.type, 'base64');
|
|
202
|
-
assertEq(m.mime_type, 'application/octet-stream');
|
|
203
|
-
assertEq(m.length, 4n);
|
|
204
|
-
},
|
|
205
|
-
// Valid UTF-8 NUL run is binary in the single-Vec path too.
|
|
206
|
-
nul: () => {
|
|
207
|
-
const m = detectVec(bytes(0x00, 0x00, 0x00));
|
|
208
|
-
assertEq(m.type, 'base64');
|
|
209
|
-
assertEq(m.mime_type, 'application/octet-stream');
|
|
210
|
-
assertEq(m.length, 3n);
|
|
211
|
-
},
|
|
212
|
-
},
|
|
213
|
-
};
|
package/fjs/module.d.ts
DELETED
package/fjs/module.f.d.ts
DELETED
package/fjs/module.f.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FunctionalScript compiler entry points and command handlers.
|
|
3
|
-
*
|
|
4
|
-
* @module
|
|
5
|
-
*/
|
|
6
|
-
import { compile } from './djs/module.f.js';
|
|
7
|
-
import { main as testMain } from './emergent_testing/module.f.js';
|
|
8
|
-
import { commands as casCommands } from './cas/cli/module.f.js';
|
|
9
|
-
import { main as ciMain } from './ci/module.f.js';
|
|
10
|
-
import { import_ } from './effects/node/module.f.js';
|
|
11
|
-
import { dispatch } from './cli/module.f.js';
|
|
12
|
-
import { casMcpServer } from './mcp/module.f.js';
|
|
13
|
-
import { pure, step } from './effects/module.f.js';
|
|
14
|
-
import { unwrap } from './types/result/module.f.js';
|
|
15
|
-
const commands = [
|
|
16
|
-
{
|
|
17
|
-
names: ['test', 't'],
|
|
18
|
-
description: 'Run the FunctionalScript test suite',
|
|
19
|
-
handler: testMain,
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
names: ['compile', 'c'],
|
|
23
|
-
description: 'Compile a FunctionalScript module to JavaScript',
|
|
24
|
-
handler: ({ args }) => compile(args),
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
names: ['cas', 's'],
|
|
28
|
-
description: 'Content-addressable storage operations',
|
|
29
|
-
handler: casCommands,
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
names: ['mcp', 'm'],
|
|
33
|
-
description: 'Run an MCP server over stdio exposing the CAS and Evo (subjects/heads) as tools',
|
|
34
|
-
handler: ({ home }) => step(casMcpServer(home), () => pure(0)),
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
names: ['ci', 'i'],
|
|
38
|
-
description: 'Generate the GitHub Actions CI workflow',
|
|
39
|
-
handler: ciMain,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
names: ['run', 'r'],
|
|
43
|
-
description: 'Run a FunctionalScript module as a NodeProgram',
|
|
44
|
-
handler: options => {
|
|
45
|
-
const [file, ...args] = options.args;
|
|
46
|
-
return step(import_(file), x => unwrap(x).main({ ...options, args }));
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
];
|
|
50
|
-
export const main = dispatch(commands);
|
package/fjs/module.js
DELETED
package/fjs/path/module.f.d.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Path parsing and normalization helpers for portable module paths.
|
|
3
|
-
*
|
|
4
|
-
* @module
|
|
5
|
-
*/
|
|
6
|
-
import type { Reduce, Unary } from '../types/function/operator/module.f.ts';
|
|
7
|
-
/**
|
|
8
|
-
* Converts Windows separators (`\`) to POSIX separators (`/`).
|
|
9
|
-
*/
|
|
10
|
-
export declare const toPosix: (path: string) => string;
|
|
11
|
-
/**
|
|
12
|
-
* Splits a path into normalized segments.
|
|
13
|
-
*
|
|
14
|
-
* Empty (`""`) and current-directory (`"."`) segments are removed, parent-directory
|
|
15
|
-
* (`".."`) segments collapse the previous segment when possible, and Windows
|
|
16
|
-
* separators are converted to POSIX separators.
|
|
17
|
-
*/
|
|
18
|
-
export declare const parse: (path: string) => readonly string[];
|
|
19
|
-
/**
|
|
20
|
-
* Normalizes a path string by parsing and rejoining it with POSIX separators.
|
|
21
|
-
*/
|
|
22
|
-
export declare const normalize: Unary<string, string>;
|
|
23
|
-
/**
|
|
24
|
-
* Concatenates two path fragments and returns a normalized path.
|
|
25
|
-
*/
|
|
26
|
-
export declare const concat: Reduce<string>;
|
|
27
|
-
/**
|
|
28
|
-
* Joins path segments with single POSIX `/` separators, without
|
|
29
|
-
* normalization. Unlike {@link concat}, the result is not parsed/collapsed,
|
|
30
|
-
* so absolute roots and `.`/`..` segments are preserved verbatim. Use this
|
|
31
|
-
* for building paths from already-clean segments (directory walks, store
|
|
32
|
-
* layouts); use {@link concat} when normalization is desired.
|
|
33
|
-
*/
|
|
34
|
-
export declare const join: (...list: readonly string[]) => string;
|
|
35
|
-
/**
|
|
36
|
-
* Returns `path` relative to `base` with a `./` prefix, or `path` unchanged
|
|
37
|
-
* if it does not start with `base` or `base` is empty.
|
|
38
|
-
* E.g. `relativize('/repo', '/repo/fs/a.ts')` → `'./fs/a.ts'`.
|
|
39
|
-
*/
|
|
40
|
-
export declare const relativize: (base: string, path: string) => string;
|
|
41
|
-
/**
|
|
42
|
-
* Returns `true` when `prefix` is a strict ancestor of `path` in segment space:
|
|
43
|
-
* every segment of `prefix` matches the corresponding segment of `path`, and
|
|
44
|
-
* `path` has at least one additional segment.
|
|
45
|
-
*/
|
|
46
|
-
export declare const isProperPrefix: (prefix: readonly string[], path: readonly string[]) => boolean;
|
package/fjs/path/module.f.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { fold, last, take, length, concat as listConcat, toArray } from '../types/list/module.f.js';
|
|
2
|
-
import { join as listJoin, concat as stringConcat } from '../types/string/module.f.js';
|
|
3
|
-
const foldNormalizeOp = input => state => {
|
|
4
|
-
switch (input) {
|
|
5
|
-
case '':
|
|
6
|
-
case '.': {
|
|
7
|
-
return state;
|
|
8
|
-
}
|
|
9
|
-
case '..': {
|
|
10
|
-
switch (last(undefined)(state)) {
|
|
11
|
-
case undefined:
|
|
12
|
-
case '..': {
|
|
13
|
-
return listConcat(state)([input]);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
return take(length(state) - 1)(state);
|
|
17
|
-
}
|
|
18
|
-
default: {
|
|
19
|
-
return listConcat(state)([input]);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* Converts Windows separators (`\`) to POSIX separators (`/`).
|
|
25
|
-
*/
|
|
26
|
-
export const toPosix = (path) => path.replaceAll('\\', '/');
|
|
27
|
-
/**
|
|
28
|
-
* Splits a path into normalized segments.
|
|
29
|
-
*
|
|
30
|
-
* Empty (`""`) and current-directory (`"."`) segments are removed, parent-directory
|
|
31
|
-
* (`".."`) segments collapse the previous segment when possible, and Windows
|
|
32
|
-
* separators are converted to POSIX separators.
|
|
33
|
-
*/
|
|
34
|
-
export const parse = (path) => {
|
|
35
|
-
const split = toPosix(path).split('/');
|
|
36
|
-
return toArray(fold(foldNormalizeOp)([])(split));
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* Normalizes a path string by parsing and rejoining it with POSIX separators.
|
|
40
|
-
*/
|
|
41
|
-
export const normalize = path => {
|
|
42
|
-
const foldResult = parse(path);
|
|
43
|
-
return listJoin('/')(foldResult);
|
|
44
|
-
};
|
|
45
|
-
/**
|
|
46
|
-
* Concatenates two path fragments and returns a normalized path.
|
|
47
|
-
*/
|
|
48
|
-
export const concat = a => b => {
|
|
49
|
-
const s = stringConcat([a, '/', b]);
|
|
50
|
-
return normalize(s);
|
|
51
|
-
};
|
|
52
|
-
/**
|
|
53
|
-
* Joins path segments with single POSIX `/` separators, without
|
|
54
|
-
* normalization. Unlike {@link concat}, the result is not parsed/collapsed,
|
|
55
|
-
* so absolute roots and `.`/`..` segments are preserved verbatim. Use this
|
|
56
|
-
* for building paths from already-clean segments (directory walks, store
|
|
57
|
-
* layouts); use {@link concat} when normalization is desired.
|
|
58
|
-
*/
|
|
59
|
-
export const join = (...list) => list.join('/');
|
|
60
|
-
/**
|
|
61
|
-
* Returns `path` relative to `base` with a `./` prefix, or `path` unchanged
|
|
62
|
-
* if it does not start with `base` or `base` is empty.
|
|
63
|
-
* E.g. `relativize('/repo', '/repo/fs/a.ts')` → `'./fs/a.ts'`.
|
|
64
|
-
*/
|
|
65
|
-
export const relativize = (base, path) => base !== '' && path.startsWith(base) ? `.${path.slice(base.length)}` : path;
|
|
66
|
-
/**
|
|
67
|
-
* Returns `true` when `prefix` is a strict ancestor of `path` in segment space:
|
|
68
|
-
* every segment of `prefix` matches the corresponding segment of `path`, and
|
|
69
|
-
* `path` has at least one additional segment.
|
|
70
|
-
*/
|
|
71
|
-
export const isProperPrefix = (prefix, path) => prefix.length < path.length && prefix.every((seg, i) => seg === path[i]);
|