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,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monoids: the `Monoid<T>` algebraic structure (identity plus associative
|
|
3
|
+
* binary operation), `repeat`, which applies the operation `n` times using
|
|
4
|
+
* exponentiation by squaring, and `fold`, which applies it across every element
|
|
5
|
+
* of a list as a balanced binary tree.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*
|
|
9
|
+
* @import { Fold, Reduce } from '../../types/function/operator/types.ts'
|
|
10
|
+
* @import { Accumulator, List } from '../../types/list/types.ts'
|
|
11
|
+
* @import { Absorbing, Monoid } from './types.ts'
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { fold as listFold, tryFold } from '../../types/list/module.f.mjs'
|
|
15
|
+
import { compose } from '../../types/function/module.f.mjs'
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Repeats a monoid operation `n` times on the given element `a`.
|
|
19
|
+
* This function efficiently performs the operation using exponentiation by squaring.
|
|
20
|
+
*
|
|
21
|
+
* @template T The type of the elements in the monoid.
|
|
22
|
+
* @param {Monoid<T>} monoid The monoid structure, including the identity and binary operation.
|
|
23
|
+
* @returns {Fold<bigint, T>} A function that takes an element `a` and a repetition count `n`,
|
|
24
|
+
* and returns the result of applying the operation `n` times.
|
|
25
|
+
*
|
|
26
|
+
* See also {@link https://en.wikipedia.org/wiki/Exponentiation_by_squaring}.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
*
|
|
30
|
+
* ```ts
|
|
31
|
+
* const add: Monoid<number> = {
|
|
32
|
+
* identity: 0,
|
|
33
|
+
* operation: a => b => a + b,
|
|
34
|
+
* };
|
|
35
|
+
*
|
|
36
|
+
* const resultAdd = repeat(add)(10n)(2) // 20
|
|
37
|
+
*
|
|
38
|
+
* const concat: Monoid<string> = {
|
|
39
|
+
* identity: '',
|
|
40
|
+
* operation: a => b => a + b,
|
|
41
|
+
* };
|
|
42
|
+
*
|
|
43
|
+
* const resultConcat = repeat(concat)(3n)('ha') // 'hahaha'
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export const repeat = ({ identity, operation }) => n => a => {
|
|
47
|
+
let ai = a
|
|
48
|
+
let ni = n
|
|
49
|
+
let result = identity
|
|
50
|
+
while (true) {
|
|
51
|
+
if ((ni & 1n) !== 0n) {
|
|
52
|
+
result = operation(result)(ai)
|
|
53
|
+
}
|
|
54
|
+
ni >>= 1n
|
|
55
|
+
if (ni === 0n) {
|
|
56
|
+
return result
|
|
57
|
+
}
|
|
58
|
+
ai = operation(ai)(ai)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* A run of `size` already-combined elements. Runs live on a stack whose top is
|
|
64
|
+
* the most recent — and smallest — run, so `rest` holds everything to the left
|
|
65
|
+
* of `value`.
|
|
66
|
+
*
|
|
67
|
+
* @template T
|
|
68
|
+
* @typedef {{
|
|
69
|
+
* readonly size: number
|
|
70
|
+
* readonly value: T
|
|
71
|
+
* readonly rest: _Stack<T>
|
|
72
|
+
* }} _Run
|
|
73
|
+
*/
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* A stack of runs, `null` when empty.
|
|
77
|
+
*
|
|
78
|
+
* @template T
|
|
79
|
+
* @typedef {_Run<T> | null} _Stack
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Pushes a run of `size` combined elements onto the stack, merging while the
|
|
84
|
+
* top run has the same size — exactly the carry of incrementing a binary
|
|
85
|
+
* counter, so every merge joins two runs of equal size and the stack never
|
|
86
|
+
* holds more than `log2(n)` runs.
|
|
87
|
+
*
|
|
88
|
+
* The merge keeps the earlier run on the left (`operation(stack.value)(value)`),
|
|
89
|
+
* so re-associating never re-orders.
|
|
90
|
+
*
|
|
91
|
+
* The result is always a run, never the empty stack — which is what lets
|
|
92
|
+
* {@link absorbingAccumulator} read `null` as a stop signal rather than a state.
|
|
93
|
+
*
|
|
94
|
+
* @type {<T>(operation: Reduce<T>) => (size: number) => (value: T) => (stack: _Stack<T>) => _Run<T>}
|
|
95
|
+
*/
|
|
96
|
+
const push = operation => size => value => stack =>
|
|
97
|
+
stack === null || stack.size !== size
|
|
98
|
+
? { size, value, rest: stack }
|
|
99
|
+
: push(operation)(size * 2)(operation(stack.value)(value))(stack.rest)
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* `push` seeded for a single element — the step both {@link fold} and
|
|
103
|
+
* {@link absorbingAccumulator} walk a list with.
|
|
104
|
+
*
|
|
105
|
+
* @type {<T>(operation: Reduce<T>) => (value: T) => (stack: _Stack<T>) => _Run<T>}
|
|
106
|
+
*/
|
|
107
|
+
const step = operation => push(operation)(1)
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* {@link step} seen as the {@link Fold} `list.fold` takes: the same function,
|
|
111
|
+
* with its result widened from a run to the stack `list.fold` threads.
|
|
112
|
+
*
|
|
113
|
+
* @type {<T>(operation: Reduce<T>) => Fold<T, _Stack<T>>}
|
|
114
|
+
*/
|
|
115
|
+
const foldStep = step
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Combines the stack's runs into one value, earliest (bottom, largest) first,
|
|
119
|
+
* seeded at `identity`.
|
|
120
|
+
*
|
|
121
|
+
* @type {<T>(monoid: Monoid<T>) => (stack: _Stack<T>) => T}
|
|
122
|
+
*/
|
|
123
|
+
const combine = monoid => stack =>
|
|
124
|
+
stack === null
|
|
125
|
+
? monoid.identity
|
|
126
|
+
: monoid.operation(combine(monoid)(stack.rest))(stack.value)
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Reduces a `List<T>` with the monoid's associative `operation`, seeded at its
|
|
130
|
+
* `identity`. An empty list folds to `identity`.
|
|
131
|
+
*
|
|
132
|
+
* `fold` is the reduction companion of {@link repeat}: where `repeat` applies
|
|
133
|
+
* the operation a fixed number of times to a single element, `fold` applies it
|
|
134
|
+
* across every element of a list. Together they let list reductions such as
|
|
135
|
+
* `sum`, `product`, and string `concat` be expressed directly as monoid folds,
|
|
136
|
+
* so the identity paired with each operation is stated once at the call site
|
|
137
|
+
* instead of hand-seeding a raw `reduce`.
|
|
138
|
+
*
|
|
139
|
+
* The reduction is **balanced**, not a left fold: `[a, b, c, d]` folds to
|
|
140
|
+
* `(a op b) op (c op d)`, not `((a op b) op c) op d`. A `Monoid`'s
|
|
141
|
+
* associativity is what licenses the re-grouping — `list.reduce` takes an
|
|
142
|
+
* arbitrary operation with no such contract and therefore stays strictly
|
|
143
|
+
* left-to-right. Balancing matters for size-growing exact operations
|
|
144
|
+
* (`bigint.product`, `string`/`bit_vec` concatenation): a left fold grows the
|
|
145
|
+
* accumulator while every new operand stays small, so step *k* costs work
|
|
146
|
+
* proportional to *k* and the total is O(n²), while merging runs of comparable
|
|
147
|
+
* size costs O(n log n). It is the list-shaped sibling of {@link repeat}'s
|
|
148
|
+
* exponentiation by squaring.
|
|
149
|
+
*
|
|
150
|
+
* Only the grouping changes, never the order: each merge keeps the earlier
|
|
151
|
+
* operand on the left, so `fold` stays correct for non-commutative monoids
|
|
152
|
+
* (e.g. string concatenation as `a => b => a + b`).
|
|
153
|
+
*
|
|
154
|
+
* Re-grouping does move the rounding of an inexact operation. IEEE-754 addition
|
|
155
|
+
* is not truly associative, so `number.sum` returns a (marginally more
|
|
156
|
+
* accurate — O(log n · ε) instead of O(n · ε)) different value than a left fold
|
|
157
|
+
* for some inputs. That is a consequence of the uniform treatment, not a goal:
|
|
158
|
+
* a `Monoid` promises associativity, and every monoid folds the same way.
|
|
159
|
+
*
|
|
160
|
+
* @template T The type of the elements in the monoid.
|
|
161
|
+
* @param {Monoid<T>} monoid The monoid structure, including the identity and binary operation.
|
|
162
|
+
* @returns {(list: List<T>) => T} A function that reduces a `List<T>` to a single `T`.
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
*
|
|
166
|
+
* ```ts
|
|
167
|
+
* const add: Monoid<number> = {
|
|
168
|
+
* identity: 0,
|
|
169
|
+
* operation: a => b => a + b,
|
|
170
|
+
* };
|
|
171
|
+
*
|
|
172
|
+
* fold(add)([1, 2, 3, 4]) // 10
|
|
173
|
+
* fold(add)([]) // 0
|
|
174
|
+
*
|
|
175
|
+
* const concat: Monoid<string> = {
|
|
176
|
+
* identity: '',
|
|
177
|
+
* operation: a => b => a + b,
|
|
178
|
+
* };
|
|
179
|
+
*
|
|
180
|
+
* fold(concat)(['a', 'b', 'c']) // 'abc' — order preserved
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
export const fold = monoid =>
|
|
184
|
+
compose(listFold(foldStep(monoid.operation))(null))(combine(monoid))
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* The run stack as a short-circuiting {@link Accumulator}: `update` returns
|
|
188
|
+
* `null` — `tryFold`'s stop signal — as soon as a merge produces the absorbing
|
|
189
|
+
* element.
|
|
190
|
+
*
|
|
191
|
+
* Only the newest run can be `absorbing`: an earlier one would have stopped the
|
|
192
|
+
* walk already.
|
|
193
|
+
*
|
|
194
|
+
* `end` wraps the folded value in a one-element tuple because `tryFold` reports
|
|
195
|
+
* both "stopped" and "finished with this result" through the same
|
|
196
|
+
* `Nullable<R>`: a monoid whose `T` includes `null` would otherwise be unable to
|
|
197
|
+
* tell a completed fold that produced `null` from an abandoned walk. The tuple
|
|
198
|
+
* costs one allocation per fold, not per element.
|
|
199
|
+
*/
|
|
200
|
+
const absorbingAccumulator =
|
|
201
|
+
/**
|
|
202
|
+
* @template T
|
|
203
|
+
* @param {Monoid<T>} monoid
|
|
204
|
+
*/
|
|
205
|
+
monoid => {
|
|
206
|
+
const p = step(monoid.operation)
|
|
207
|
+
const c = combine(monoid)
|
|
208
|
+
/**
|
|
209
|
+
* @param {T} absorbing
|
|
210
|
+
* @returns {Accumulator<T, _Stack<T>, readonly[T]>}
|
|
211
|
+
*/
|
|
212
|
+
return absorbing => ({
|
|
213
|
+
init: null,
|
|
214
|
+
update: (value, stack) => {
|
|
215
|
+
const next = p(value)(stack)
|
|
216
|
+
return next.value === absorbing ? null : next
|
|
217
|
+
},
|
|
218
|
+
end: stack => [c(stack)],
|
|
219
|
+
})
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* {@link fold} for a monoid with an absorbing element, stopping at the first
|
|
224
|
+
* element that reaches it.
|
|
225
|
+
*
|
|
226
|
+
* The result is the same as `fold`'s — combining `absorbing` with the rest of
|
|
227
|
+
* the list is `absorbing` again — but the rest of the list is never read. That
|
|
228
|
+
* is what makes it usable on an unbounded lazy `List`, where `fold` keeps
|
|
229
|
+
* pulling elements forever after the answer is already decided.
|
|
230
|
+
*
|
|
231
|
+
* It stops as soon as a **run** reaches `absorbing`: immediately when an element
|
|
232
|
+
* is absorbing on its own (`0` in a product), otherwise at the merge that first
|
|
233
|
+
* produces it. When only a combination is absorbing — `bit_vec`'s length cap —
|
|
234
|
+
* that merge can lag the element that actually decided the answer, because runs
|
|
235
|
+
* merge at power-of-two boundaries: at most one doubling, so under twice as many
|
|
236
|
+
* elements as a left fold's per-element check would read. Bounded either way,
|
|
237
|
+
* which is the property that matters against an unbounded list.
|
|
238
|
+
*
|
|
239
|
+
* Grouping, order, and the `log2(n)` stack bound are `fold`'s; only the walk
|
|
240
|
+
* gains an exit. `foldAbsorbing(a)(list)` and `fold(a.monoid)(list)` agree on
|
|
241
|
+
* every finite list, including one whose folded value is itself `null`.
|
|
242
|
+
*
|
|
243
|
+
* @template T The type of the elements in the monoid.
|
|
244
|
+
* @param {Absorbing<T>} absorbing The monoid together with its absorbing element.
|
|
245
|
+
* @returns {(list: List<T>) => T} A function that reduces a `List<T>` to a single `T`.
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
*
|
|
249
|
+
* ```ts
|
|
250
|
+
* const multiply: Absorbing<number> = {
|
|
251
|
+
* monoid: { identity: 1, operation: a => b => a * b },
|
|
252
|
+
* absorbing: 0,
|
|
253
|
+
* }
|
|
254
|
+
*
|
|
255
|
+
* foldAbsorbing(multiply)([2, 3, 4]) // 24
|
|
256
|
+
* foldAbsorbing(multiply)([2, 0, 4]) // 0 — `4` is never read
|
|
257
|
+
* ```
|
|
258
|
+
*/
|
|
259
|
+
export const foldAbsorbing = ({ monoid, absorbing }) => {
|
|
260
|
+
const f = tryFold(absorbingAccumulator(monoid)(absorbing))
|
|
261
|
+
return list => {
|
|
262
|
+
const result = f(list)
|
|
263
|
+
if (result === null) { return absorbing }
|
|
264
|
+
const [value] = result
|
|
265
|
+
return value
|
|
266
|
+
}
|
|
267
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { List } from '../../types/list/types.ts'
|
|
3
|
+
* @import { Nullable } from '../../types/nullable/types.ts'
|
|
4
|
+
* @import { Absorbing, Monoid } from './types.ts'
|
|
5
|
+
*/
|
|
6
|
+
export declare const proof: {
|
|
7
|
+
numberAdd: () => void;
|
|
8
|
+
stringConcat: () => void;
|
|
9
|
+
fold: {
|
|
10
|
+
nonEmpty: () => void;
|
|
11
|
+
order: () => void;
|
|
12
|
+
empty: () => void;
|
|
13
|
+
balanced: () => void;
|
|
14
|
+
};
|
|
15
|
+
foldAbsorbing: {
|
|
16
|
+
plain: () => void;
|
|
17
|
+
absorbed: () => void;
|
|
18
|
+
nullValued: () => void;
|
|
19
|
+
stopsEarly: () => void;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { List } from '../../types/list/types.ts'
|
|
3
|
+
* @import { Nullable } from '../../types/nullable/types.ts'
|
|
4
|
+
* @import { Absorbing, Monoid } from './types.ts'
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { repeat, fold, foldAbsorbing } from './module.f.mjs'
|
|
8
|
+
import { assert, assertEq } from '../../asserts/module.f.mjs'
|
|
9
|
+
|
|
10
|
+
/** @type {Absorbing<number>} */
|
|
11
|
+
const multiply = {
|
|
12
|
+
monoid: {
|
|
13
|
+
identity: 1,
|
|
14
|
+
operation: a => b => a * b,
|
|
15
|
+
},
|
|
16
|
+
absorbing: 0,
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const proof = {
|
|
20
|
+
numberAdd: () => {
|
|
21
|
+
/** @type {Monoid<number>} */
|
|
22
|
+
const add = {
|
|
23
|
+
identity: 0,
|
|
24
|
+
operation: a => b => a + b,
|
|
25
|
+
};
|
|
26
|
+
const resultAdd = repeat(add)(10n)(2) // 20
|
|
27
|
+
assertEq(resultAdd, 20)
|
|
28
|
+
|
|
29
|
+
const id = repeat(add)(0n)(42)
|
|
30
|
+
assertEq(id, 0)
|
|
31
|
+
},
|
|
32
|
+
stringConcat: () => {
|
|
33
|
+
/** @type {Monoid<string>} */
|
|
34
|
+
const concat = {
|
|
35
|
+
identity: '',
|
|
36
|
+
operation: a => b => a + b,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const resultConcat = repeat(concat)(3n)('ha') // 'hahaha'
|
|
40
|
+
assertEq(resultConcat, 'hahaha')
|
|
41
|
+
},
|
|
42
|
+
fold: {
|
|
43
|
+
nonEmpty: () => {
|
|
44
|
+
/** @type {Monoid<number>} */
|
|
45
|
+
const add = {
|
|
46
|
+
identity: 0,
|
|
47
|
+
operation: a => b => a + b,
|
|
48
|
+
};
|
|
49
|
+
assertEq(fold(add)([1, 2, 3, 4]), 10)
|
|
50
|
+
},
|
|
51
|
+
order: () => {
|
|
52
|
+
// a non-commutative monoid: `fold` must preserve left-to-right order
|
|
53
|
+
// (`((('' + 'a') + 'b') + 'c')`), not reverse it to `'cba'`.
|
|
54
|
+
/** @type {Monoid<string>} */
|
|
55
|
+
const concat = {
|
|
56
|
+
identity: '',
|
|
57
|
+
operation: a => b => a + b,
|
|
58
|
+
};
|
|
59
|
+
assertEq(fold(concat)(['a', 'b', 'c']), 'abc')
|
|
60
|
+
},
|
|
61
|
+
empty: () => {
|
|
62
|
+
/** @type {Monoid<string>} */
|
|
63
|
+
const concat = {
|
|
64
|
+
identity: '',
|
|
65
|
+
operation: a => b => a + b,
|
|
66
|
+
};
|
|
67
|
+
// an empty list folds to the identity
|
|
68
|
+
assertEq(fold(concat)([]), '')
|
|
69
|
+
},
|
|
70
|
+
balanced: () => {
|
|
71
|
+
// `operation` brackets each combination so the *grouping* `fold`
|
|
72
|
+
// chose is visible in the result. It is deliberately **not**
|
|
73
|
+
// associative — a lawful monoid could not observe the grouping at
|
|
74
|
+
// all, which is exactly why re-associating is allowed. The identity
|
|
75
|
+
// still behaves as one (both branches return the other operand
|
|
76
|
+
// unchanged), so `fold`'s contract is respected.
|
|
77
|
+
/** @type {Monoid<string>} */
|
|
78
|
+
const bracket = {
|
|
79
|
+
identity: '',
|
|
80
|
+
operation: a => b => a === '' ? b : b === '' ? a : `(${a}${b})`,
|
|
81
|
+
}
|
|
82
|
+
const f = fold(bracket)
|
|
83
|
+
assertEq(f(['a']), 'a')
|
|
84
|
+
assertEq(f(['a', 'b']), '(ab)')
|
|
85
|
+
// three elements keep the trailing run separate: `c` merges with
|
|
86
|
+
// nothing, so it combines against `(ab)` only at the end.
|
|
87
|
+
assertEq(f(['a', 'b', 'c']), '((ab)c)')
|
|
88
|
+
// four is where balancing separates from a left fold, which would
|
|
89
|
+
// give `(((ab)c)d)`.
|
|
90
|
+
assertEq(f(['a', 'b', 'c', 'd']), '((ab)(cd))')
|
|
91
|
+
assertEq(f(['a', 'b', 'c', 'd', 'e']), '(((ab)(cd))e)')
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
foldAbsorbing: {
|
|
95
|
+
plain: () => {
|
|
96
|
+
// with no absorbing element in the list, it is `fold`
|
|
97
|
+
assertEq(foldAbsorbing(multiply)([2, 3, 4]), 24)
|
|
98
|
+
assertEq(foldAbsorbing(multiply)([]), 1)
|
|
99
|
+
assertEq(foldAbsorbing(multiply)([2, 3, 4]), fold(multiply.monoid)([2, 3, 4]))
|
|
100
|
+
},
|
|
101
|
+
absorbed: () => {
|
|
102
|
+
assertEq(foldAbsorbing(multiply)([2, 0, 4]), 0)
|
|
103
|
+
},
|
|
104
|
+
nullValued: () => {
|
|
105
|
+
// `min` over non-negative numbers, where `null` is the identity
|
|
106
|
+
// (+infinity) and `0` is the absorbing element. `T` therefore
|
|
107
|
+
// includes `null` without `null` being the stop condition — and
|
|
108
|
+
// `tryFold` signals "stopped" and "finished" through one
|
|
109
|
+
// `Nullable`, so a completed fold whose value is `null` must not be
|
|
110
|
+
// read as an abandoned walk.
|
|
111
|
+
/** @type {Absorbing<Nullable<number>>} */
|
|
112
|
+
const min = {
|
|
113
|
+
monoid: {
|
|
114
|
+
identity: null,
|
|
115
|
+
operation: a => b =>
|
|
116
|
+
a === null ? b : b === null ? a : a <= b ? a : b,
|
|
117
|
+
},
|
|
118
|
+
absorbing: 0,
|
|
119
|
+
}
|
|
120
|
+
assertEq(foldAbsorbing(min)([]), null)
|
|
121
|
+
assertEq(foldAbsorbing(min)([3, null, 5]), 3)
|
|
122
|
+
assertEq(foldAbsorbing(min)([3, 0, 5]), 0)
|
|
123
|
+
},
|
|
124
|
+
stopsEarly: () => {
|
|
125
|
+
// `List` includes `Thunk`, so this list is unbounded: `fold` would
|
|
126
|
+
// pull from it forever. The elements past the absorbing one assert
|
|
127
|
+
// that they are never read.
|
|
128
|
+
/** @type {(n: number) => List<number>} */
|
|
129
|
+
const rest = n => () => {
|
|
130
|
+
assert(false)
|
|
131
|
+
return { first: n, tail: rest(n + 1) }
|
|
132
|
+
}
|
|
133
|
+
// `0` is absorbing on its own, so the walk stops at the element
|
|
134
|
+
// itself...
|
|
135
|
+
assertEq(foldAbsorbing(multiply)({ first: 0, tail: rest(1) }), 0)
|
|
136
|
+
// ...and here only the merge of `2` and `0` reaches it.
|
|
137
|
+
assertEq(
|
|
138
|
+
foldAbsorbing(multiply)({ first: 2, tail: { first: 0, tail: rest(1) } }),
|
|
139
|
+
0)
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `Monoid<T>` algebraic structure.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import type { Reduce } from '../../types/function/operator/types.ts';
|
|
7
|
+
/**
|
|
8
|
+
* Represents a monoid, an algebraic structure with a binary operation
|
|
9
|
+
* and an identity (neutral) element.
|
|
10
|
+
*
|
|
11
|
+
* A monoid satisfies the following properties:
|
|
12
|
+
* 1. **Associativity**: The operation must be associative.
|
|
13
|
+
* For all `a`, `b`, and `c` in the set, `(a operation b) operation c = a operation (b operation c)`.
|
|
14
|
+
* {@link https://en.wikipedia.org/wiki/Associative_property Learn more about associativity}.
|
|
15
|
+
* 2. **Identity Element**: There exists an element (called the identity) such that,
|
|
16
|
+
* when combined with any other element under the operation, it leaves the other element unchanged.
|
|
17
|
+
* {@link https://en.wikipedia.org/wiki/Identity_element Learn more about identity elements}.
|
|
18
|
+
*
|
|
19
|
+
* Learn more about monoids: {@link https://en.wikipedia.org/wiki/Monoid}.
|
|
20
|
+
*
|
|
21
|
+
* @property identity
|
|
22
|
+
*
|
|
23
|
+
* The identity (neutral) element for the monoid.
|
|
24
|
+
* When combined with any value under the `operation`, it leaves the other value unchanged.
|
|
25
|
+
*
|
|
26
|
+
* Examples:
|
|
27
|
+
* - `0` for addition
|
|
28
|
+
* - `1` for multiplication
|
|
29
|
+
* - `""` for string concatenation
|
|
30
|
+
* - `[]` for array concatenation
|
|
31
|
+
*
|
|
32
|
+
* Learn more: {@link https://en.wikipedia.org/wiki/Identity_element}
|
|
33
|
+
*
|
|
34
|
+
* @property operation
|
|
35
|
+
*
|
|
36
|
+
* The associative binary operation of the monoid.
|
|
37
|
+
* Takes one value of type `T` and returns a function that takes another value of type `T`,
|
|
38
|
+
* producing a result of type `T`.
|
|
39
|
+
*
|
|
40
|
+
* Examples:
|
|
41
|
+
* - `(a, b) => a + b` for addition
|
|
42
|
+
* - `(a, b) => a * b` for multiplication
|
|
43
|
+
* - `(a, b) => a.concat(b)` for arrays or strings
|
|
44
|
+
*
|
|
45
|
+
* Learn more: {@link https://en.wikipedia.org/wiki/Binary_operation}
|
|
46
|
+
*/
|
|
47
|
+
export type Monoid<T> = {
|
|
48
|
+
readonly identity: T;
|
|
49
|
+
readonly operation: Reduce<T>;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* A monoid that additionally has an
|
|
53
|
+
* {@link https://en.wikipedia.org/wiki/Absorbing_element absorbing element}
|
|
54
|
+
* (also called a zero or annihilator): a value that swallows the operation
|
|
55
|
+
* from either side.
|
|
56
|
+
*
|
|
57
|
+
* For all `a`: `operation(absorbing)(a) = operation(a)(absorbing) = absorbing`.
|
|
58
|
+
*
|
|
59
|
+
* Once a fold reaches `absorbing`, the result is decided — every remaining
|
|
60
|
+
* element combines to `absorbing` again — so `foldAbsorbing` may stop reading
|
|
61
|
+
* the list there instead of walking to its end. That is the difference between
|
|
62
|
+
* answering and not returning at all when the list is an unbounded `Thunk`.
|
|
63
|
+
*
|
|
64
|
+
* Multiplication over numbers has `0`; `bit_vec`'s length-capped concatenation
|
|
65
|
+
* has `null`, meaning "longer than `maxLength`".
|
|
66
|
+
*
|
|
67
|
+
* The monoid is carried as a field rather than intersected in, so it stays
|
|
68
|
+
* independently constructed and consumed (`AGENTS.md` §6.2).
|
|
69
|
+
*/
|
|
70
|
+
export type Absorbing<T> = {
|
|
71
|
+
readonly monoid: Monoid<T>;
|
|
72
|
+
readonly absorbing: T;
|
|
73
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provides an implementation of HMAC (Hash-based Message Authentication Code).
|
|
3
|
+
*
|
|
4
|
+
* https://en.wikipedia.org/wiki/HMAC
|
|
5
|
+
* https://www.rfc-editor.org/rfc/rfc2104
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { vec } from '../../types/bit_vec/module.f.mjs'
|
|
13
|
+
* import { msbUtf8 } from '../../text/module.f.mjs'
|
|
14
|
+
* import { sha256 } from '../sha2/module.f.mjs'
|
|
15
|
+
*
|
|
16
|
+
* const r = hmac(sha256)(msbUtf8('key'))(msbUtf8('The quick brown fox jumps over the lazy dog'))
|
|
17
|
+
* if (r !== vec(256n)(0xf7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8n)) { throw r }
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @import { Vec, Reduce } from '../../types/bit_vec/types.ts'
|
|
21
|
+
* @import { Sha2 } from '../sha2/types.ts'
|
|
22
|
+
*/
|
|
23
|
+
import type { Reduce } from '../../types/bit_vec/types.ts';
|
|
24
|
+
import type { Sha2 } from '../sha2/types.ts';
|
|
25
|
+
/**
|
|
26
|
+
* Generates an HMAC (Hash-based Message Authentication Code) using the specified hash function.
|
|
27
|
+
*
|
|
28
|
+
* @param {Sha2} hashFunc - The hash function implementation to use.
|
|
29
|
+
* @returns {Reduce} A function that takes a key and returns another function
|
|
30
|
+
* that takes a message and computes the HMAC.
|
|
31
|
+
*/
|
|
32
|
+
export declare const hmac: (hashFunc: Sha2) => Reduce;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provides an implementation of HMAC (Hash-based Message Authentication Code).
|
|
3
|
+
*
|
|
4
|
+
* https://en.wikipedia.org/wiki/HMAC
|
|
5
|
+
* https://www.rfc-editor.org/rfc/rfc2104
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { vec } from '../../types/bit_vec/module.f.mjs'
|
|
13
|
+
* import { msbUtf8 } from '../../text/module.f.mjs'
|
|
14
|
+
* import { sha256 } from '../sha2/module.f.mjs'
|
|
15
|
+
*
|
|
16
|
+
* const r = hmac(sha256)(msbUtf8('key'))(msbUtf8('The quick brown fox jumps over the lazy dog'))
|
|
17
|
+
* if (r !== vec(256n)(0xf7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8n)) { throw r }
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @import { Vec, Reduce } from '../../types/bit_vec/types.ts'
|
|
21
|
+
* @import { Sha2 } from '../sha2/types.ts'
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { length, msb, vec, vec8, repeat } from '../../types/bit_vec/module.f.mjs'
|
|
25
|
+
import { computeSync } from '../sha2/module.f.mjs'
|
|
26
|
+
|
|
27
|
+
const { concat, xor } = msb
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Outer padding.
|
|
31
|
+
*/
|
|
32
|
+
const oPad = vec8(0x5cn)
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Inner padding.
|
|
36
|
+
*/
|
|
37
|
+
const iPad = vec8(0x36n)
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Generates an HMAC (Hash-based Message Authentication Code) using the specified hash function.
|
|
41
|
+
*
|
|
42
|
+
* @param {Sha2} hashFunc - The hash function implementation to use.
|
|
43
|
+
* @returns {Reduce} A function that takes a key and returns another function
|
|
44
|
+
* that takes a message and computes the HMAC.
|
|
45
|
+
*/
|
|
46
|
+
export const hmac = hashFunc => {
|
|
47
|
+
const { blockLength } = hashFunc
|
|
48
|
+
const p = repeat(blockLength >> 3n)
|
|
49
|
+
const ip = p(iPad)
|
|
50
|
+
const op = p(oPad)
|
|
51
|
+
const c = computeSync(hashFunc)
|
|
52
|
+
return k => {
|
|
53
|
+
const k1 = length(k) > blockLength ? c([k]) : k
|
|
54
|
+
const k2 = concat(k1)(vec(blockLength - length(k1))(0n))
|
|
55
|
+
const xk2 = xor(k2)
|
|
56
|
+
/** @type {(p: Vec) => (msg: Vec) => Vec} */
|
|
57
|
+
const f = p => {
|
|
58
|
+
const x = xk2(p)
|
|
59
|
+
return msg => c([x, msg])
|
|
60
|
+
}
|
|
61
|
+
const fip = f(ip)
|
|
62
|
+
const fop = f(op)
|
|
63
|
+
return m => fop(fip(m))
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { assertEq } from '../../asserts/module.f.mjs'
|
|
2
|
+
import { utf8 } from '../../text/module.f.mjs'
|
|
3
|
+
import { uint, vec } from '../../types/bit_vec/module.f.mjs'
|
|
4
|
+
import { sha256, sha384, sha512 } from '../sha2/module.f.mjs'
|
|
5
|
+
import { hmac } from './module.f.mjs'
|
|
6
|
+
|
|
7
|
+
export const proof = {
|
|
8
|
+
example: () => {
|
|
9
|
+
const r = hmac(sha256)(utf8('key'))(utf8('The quick brown fox jumps over the lazy dog'))
|
|
10
|
+
assertEq(r, vec(256n)(0xf7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8n))
|
|
11
|
+
},
|
|
12
|
+
sha256: () => {
|
|
13
|
+
const r = hmac(sha256)(utf8('key'))(utf8('The quick brown fox jumps over the lazy dog'))
|
|
14
|
+
assertEq(uint(r), 0xf7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8n, r)
|
|
15
|
+
},
|
|
16
|
+
sha384: () => {
|
|
17
|
+
const k = vec(384n)(0n)
|
|
18
|
+
const m = vec(904n)(
|
|
19
|
+
0x0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010069c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbc9a9083505bc92276aec4be312696ef7bf3bf603f4bbd381196a029f340585312n)
|
|
20
|
+
const r = hmac(sha384)(k)(m)
|
|
21
|
+
assertEq(r, vec(384n)(0x8F858157CE005CD52FD8E8F1A46B55E6CFAE21C8C183D9C2F7504BEDF450609EDD7D3C6171DC0BDD2D2444FAA28F18BAn), uint(r).toString(16))
|
|
22
|
+
},
|
|
23
|
+
sha512: () => {
|
|
24
|
+
const r = hmac(sha512)(utf8('key'))(utf8('The quick brown fox jumps over the lazy dog'))
|
|
25
|
+
assertEq(r, vec(512n)(0xb42af09057bac1e2d41708e48a902e09b5ff7f12ab428a4fe86653c73dd248fb82f948a549f7b791a5b41915ee4d1ec3935357e4e2317250d0372afa2ebeeb3an))
|
|
26
|
+
},
|
|
27
|
+
// RFC 4231 Test Case 6: key (131 bytes of 0xaa = 1048 bits) exceeds SHA-256 block size (512 bits),
|
|
28
|
+
// so the key is first compressed via the hash function before use.
|
|
29
|
+
longKey: () => {
|
|
30
|
+
const key = vec(1048n)(BigInt('0x' + 'aa'.repeat(131)))
|
|
31
|
+
const r = hmac(sha256)(key)(utf8('Test Using Larger Than Block-Size Key - Hash Key First'))
|
|
32
|
+
assertEq(uint(r), 0x60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54n)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bitcoin-style proof-of-work: compact **nBits** target decoding and
|
|
3
|
+
* hash-vs-target verification using an injected SHA-2 hash.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*
|
|
7
|
+
* @import { Vec } from '../../types/bit_vec/types.ts'
|
|
8
|
+
* @import { Nullable } from '../../types/nullable/types.ts'
|
|
9
|
+
* @import { Sha2 } from '../sha2/types.ts'
|
|
10
|
+
* @import { Pow } from './types.ts'
|
|
11
|
+
*/
|
|
12
|
+
import type { Nullable } from '../../types/nullable/types.ts';
|
|
13
|
+
import type { Sha2 } from '../sha2/types.ts';
|
|
14
|
+
import type { Pow } from './types.ts';
|
|
15
|
+
/** Genesis-block compact target (`0x1d00ffff`). */
|
|
16
|
+
export declare const genesisNBits = 486604799n;
|
|
17
|
+
/** Genesis-block uint256 target decoded from {@link genesisNBits}. */
|
|
18
|
+
export declare const genesisTarget = 26959535291011309493156476344723991336010898738574164086137773096960n;
|
|
19
|
+
/**
|
|
20
|
+
* Decodes compact **nBits** (32-bit block-header "bits") to a uint256 target:
|
|
21
|
+
*
|
|
22
|
+
* - `exponent = nBits >> 24`
|
|
23
|
+
* - `mantissa = nBits & 0xffffff`
|
|
24
|
+
* - `target = mantissa × 2^(8 × (exponent − 3))`
|
|
25
|
+
*
|
|
26
|
+
* Returns `null` for malformed encodings per Bitcoin `SetCompact` rules (negative
|
|
27
|
+
* sign bit, overflow, target wider than 256 bits).
|
|
28
|
+
*
|
|
29
|
+
* @param {bigint} nBits Compact target encoding.
|
|
30
|
+
* @returns {Nullable<bigint>} Decoded target, or `null` when **nBits** is invalid.
|
|
31
|
+
*/
|
|
32
|
+
export declare const targetFromNBits: (nBits: bigint) => Nullable<bigint>;
|
|
33
|
+
/**
|
|
34
|
+
* Builds PoW helpers for a hash function (typical consumer: {@link sha256}).
|
|
35
|
+
*
|
|
36
|
+
* @param {Sha2} hash SHA-2 configuration whose digest is compared as uint256.
|
|
37
|
+
* @returns {Pow}
|
|
38
|
+
*/
|
|
39
|
+
export declare const pow: (hash: Sha2) => Pow;
|
|
40
|
+
/** SHA-256 proof-of-work (`pow(sha256)`). */
|
|
41
|
+
export declare const sha256Pow: Pow;
|
|
42
|
+
/** Bitcoin block-header PoW; same as {@link sha256Pow}. */
|
|
43
|
+
export declare const bitcoinPow: Pow;
|