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,371 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { Vec } from '../types/bit_vec/types.ts'
|
|
3
|
+
* @import { FileCasOperation } from './types.ts'
|
|
4
|
+
* @import { Effect } from '../effects/types.ts'
|
|
5
|
+
* @import { ReadFile, WriteFile, Rm, Mkdir, IoResult } from '../effects/node/types.ts'
|
|
6
|
+
* @import { Ok } from '../types/result/types.ts'
|
|
7
|
+
* @import { List } from '../effects/list/types.ts'
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { length, maxLength, msb, vec, vec8 } from '../types/bit_vec/module.f.mjs'
|
|
11
|
+
import { cBase32ToVec, vecToCBase32 } from '../basen/cbase32/module.f.mjs'
|
|
12
|
+
import { computeSync, sha256 } from '../crypto/sha2/module.f.mjs'
|
|
13
|
+
import { fileCas, casAddFile, collectRead, casUpload } from './module.f.mjs'
|
|
14
|
+
import { match, pure, runPure, step } from '../effects/module.f.mjs'
|
|
15
|
+
import { mkdir, writeFile, rm, readFile, access } from '../effects/node/module.f.mjs'
|
|
16
|
+
import { error, ok } from '../types/result/module.f.mjs'
|
|
17
|
+
import { emptyState, virtual } from '../effects/node/virtual/module.f.mjs'
|
|
18
|
+
import { join } from '../path/module.f.mjs'
|
|
19
|
+
import { nonEmpty, empty } from '../effects/list/module.f.mjs'
|
|
20
|
+
import { assert, assertEq, assertNotNullish } from '../asserts/module.f.mjs'
|
|
21
|
+
|
|
22
|
+
const testDir = './test-cas-cli'
|
|
23
|
+
|
|
24
|
+
/** @typedef {FileCasOperation | WriteFile | ReadFile | Rm | Mkdir} _TestOp */
|
|
25
|
+
|
|
26
|
+
// Names the command a `FileCasOperation` effect stops at, so a proof can assert
|
|
27
|
+
// on it and resume the continuation without reading the `Do` layout. The map
|
|
28
|
+
// has to list every operation the CAS can perform — that is what makes it total,
|
|
29
|
+
// and what makes a new operation a compile error here rather than a silent gap.
|
|
30
|
+
const casCommand = match({
|
|
31
|
+
access: () => 'access',
|
|
32
|
+
createExclusive: () => 'createExclusive',
|
|
33
|
+
mkdir: () => 'mkdir',
|
|
34
|
+
now: () => 'now',
|
|
35
|
+
randomInt: () => 'randomInt',
|
|
36
|
+
readBytes: () => 'readBytes',
|
|
37
|
+
readdir: () => 'readdir',
|
|
38
|
+
rename: () => 'rename',
|
|
39
|
+
rm: () => 'rm',
|
|
40
|
+
stat: () => 'stat',
|
|
41
|
+
writeBytes: () => 'writeBytes',
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
// Create a 128 KiB big file content (at the max Vec size limit)
|
|
45
|
+
// This tests the boundary where files are at the chunk size limit
|
|
46
|
+
/** @type {() => Vec} */
|
|
47
|
+
const createBigFileContent = () => {
|
|
48
|
+
const byteCount = 128n * 1024n // 128 KiB
|
|
49
|
+
// Create a repeating pattern: 0x42 repeated across the file
|
|
50
|
+
return vec(byteCount * 8n)(0x42424242n)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Test adding a big file and verifying the hash
|
|
54
|
+
/** @type {() => Effect<_TestOp, void>} */
|
|
55
|
+
const testAddBigFile = () => {
|
|
56
|
+
const bigFilePath = `${testDir}/big-file.bin`
|
|
57
|
+
const cas = fileCas(sha256)(testDir)
|
|
58
|
+
const x0 = step(
|
|
59
|
+
mkdir(testDir, { recursive: true }),
|
|
60
|
+
() => writeFile(bigFilePath, createBigFileContent())
|
|
61
|
+
)
|
|
62
|
+
const x1 = step(
|
|
63
|
+
x0,
|
|
64
|
+
writeRes => {
|
|
65
|
+
assert(writeRes[0] === 'ok', ['failed to write test file', writeRes])
|
|
66
|
+
return casAddFile(cas)(bigFilePath)
|
|
67
|
+
}
|
|
68
|
+
)
|
|
69
|
+
const x2 = step(
|
|
70
|
+
x1,
|
|
71
|
+
addRes => {
|
|
72
|
+
assert(addRes[0] === 'ok', ['failed to add file to CAS', addRes])
|
|
73
|
+
const hash = addRes[1]
|
|
74
|
+
// Verify hash is 256 bits (SHA-256)
|
|
75
|
+
assertEq(length(hash), 256n, ['expected 256-bit hash', length(hash)])
|
|
76
|
+
// Verify hash can be encoded/decoded
|
|
77
|
+
assertNotNullish(cBase32ToVec(vecToCBase32(hash)), 'failed to decode hash from cBase32')
|
|
78
|
+
return rm(testDir)
|
|
79
|
+
})
|
|
80
|
+
return step(
|
|
81
|
+
x2,
|
|
82
|
+
() => pure(undefined)
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Test adding and retrieving a big file
|
|
87
|
+
/** @type {() => Effect<_TestOp, void>} */
|
|
88
|
+
const testAddAndGetBigFile = () => {
|
|
89
|
+
const bigContent = createBigFileContent()
|
|
90
|
+
const bigFilePath = `${testDir}/big-file.bin`
|
|
91
|
+
const cas = fileCas(sha256)(testDir)
|
|
92
|
+
const x0 = step(
|
|
93
|
+
mkdir(testDir, { recursive: true }),
|
|
94
|
+
() => writeFile(bigFilePath, bigContent)
|
|
95
|
+
)
|
|
96
|
+
const x1 = step(
|
|
97
|
+
x0,
|
|
98
|
+
writeRes => {
|
|
99
|
+
assert(writeRes[0] === 'ok', ['failed to write test file', writeRes])
|
|
100
|
+
return casAddFile(cas)(bigFilePath)
|
|
101
|
+
}
|
|
102
|
+
)
|
|
103
|
+
// Verify the file is stored at the expected location
|
|
104
|
+
const x2 = step(
|
|
105
|
+
x1,
|
|
106
|
+
addRes => {
|
|
107
|
+
assert(addRes[0] === 'ok', ['failed to add file to CAS', addRes])
|
|
108
|
+
return readFile(cas.url(addRes[1]))
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
const x3 = step(
|
|
112
|
+
x2,
|
|
113
|
+
readRes => {
|
|
114
|
+
assert(readRes[0] === 'ok', ['failed to read stored file', readRes])
|
|
115
|
+
// Verify content is the same size as original
|
|
116
|
+
assertEq(length(readRes[1]), length(bigContent), 'stored content size mismatch')
|
|
117
|
+
return rm(testDir)
|
|
118
|
+
})
|
|
119
|
+
return step(
|
|
120
|
+
x3,
|
|
121
|
+
() => pure(undefined)
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export const proof = {
|
|
126
|
+
// Both effects must be interpreted, not merely built: an `Effect` is inert
|
|
127
|
+
// data, so returning one from a proof runs none of its continuations and
|
|
128
|
+
// asserts nothing.
|
|
129
|
+
addBigFile: () => { virtual(emptyState)(testAddBigFile()) },
|
|
130
|
+
addAndGetBigFile: () => { virtual(emptyState)(testAddAndGetBigFile()) },
|
|
131
|
+
//
|
|
132
|
+
casWriteRead: () => {
|
|
133
|
+
// Round-trip a single-chunk payload through the real streaming CAS: `write` returns
|
|
134
|
+
// the content hash, and `read` streams the same bytes back as `ok` chunk items.
|
|
135
|
+
const content = vec8(0x2An)
|
|
136
|
+
const c = fileCas(sha256)('.')
|
|
137
|
+
/** @type {List<FileCasOperation, IoResult<Vec>>} */
|
|
138
|
+
const payload = nonEmpty(ok(content), empty())
|
|
139
|
+
const [state1, writeResult] = virtual(emptyState)(c.write(payload))
|
|
140
|
+
assert(writeResult[0] === 'ok', ['expected write ok', writeResult])
|
|
141
|
+
const hash = writeResult[1]
|
|
142
|
+
assertEq(length(hash), 256n, ['expected 256-bit hash', length(hash)])
|
|
143
|
+
assertEq(msb.cmp(hash)(computeSync(sha256)([content])), 0, 'write hash mismatch')
|
|
144
|
+
/** @type {(acc: readonly Vec[]) => (stream: List<FileCasOperation, IoResult<Vec>>) => Effect<FileCasOperation, IoResult<readonly Vec[]>>} */
|
|
145
|
+
const drain = acc =>
|
|
146
|
+
stream =>
|
|
147
|
+
step(
|
|
148
|
+
stream,
|
|
149
|
+
(node) => {
|
|
150
|
+
if (node === undefined) { return pure(ok(acc)) }
|
|
151
|
+
const { first, tail } = node
|
|
152
|
+
if (first[0] === 'error') { return pure(first) }
|
|
153
|
+
return drain([...acc, first[1]])(tail)
|
|
154
|
+
},
|
|
155
|
+
)
|
|
156
|
+
const [, readResult] = virtual(state1)(drain([])(c.read(hash)))
|
|
157
|
+
assert(readResult[0] === 'ok', ['expected read ok', readResult])
|
|
158
|
+
assertEq(msb.cmp(msb.listToVec(readResult[1]))(content), 0, 'read content mismatch')
|
|
159
|
+
},
|
|
160
|
+
casReadMissingShard: () => {
|
|
161
|
+
// A missing shard surfaces as an explicit error *item*, never as end-of-stream.
|
|
162
|
+
const c = fileCas(sha256)('.')
|
|
163
|
+
const hash = computeSync(sha256)([vec8(0x2An)])
|
|
164
|
+
const node = virtual(emptyState)(c.read(hash))[1]
|
|
165
|
+
assert(node !== undefined, 'missing shard must not be EOF')
|
|
166
|
+
assert(node.first[0] === 'error', ['expected error item', node.tail])
|
|
167
|
+
},
|
|
168
|
+
casWriteMultiChunk: () => {
|
|
169
|
+
// A multi-chunk payload streams through `writeBytes` chunk-by-chunk (the lease is
|
|
170
|
+
// renewed between chunks); the hash equals the SHA-256 of the concatenated bytes,
|
|
171
|
+
// and read streams the same content back.
|
|
172
|
+
const chunks = /** @type {const} */ ([vec8(0x11n), vec8(0x22n), vec8(0x33n)])
|
|
173
|
+
const c = fileCas(sha256)('.')
|
|
174
|
+
/** @type {List<FileCasOperation, IoResult<Vec>>} */
|
|
175
|
+
const payload = chunks.reduceRight(
|
|
176
|
+
(tail, chunk) => nonEmpty(ok(chunk), tail),
|
|
177
|
+
/** @type {List<FileCasOperation, IoResult<Vec>>} */ (empty()))
|
|
178
|
+
const [state1, writeResult] = virtual(emptyState)(c.write(payload))
|
|
179
|
+
assert(writeResult[0] === 'ok', ['expected write ok', writeResult])
|
|
180
|
+
const hash = writeResult[1]
|
|
181
|
+
assertEq(msb.cmp(hash)(computeSync(sha256)(chunks)), 0, 'multi-chunk write hash mismatch')
|
|
182
|
+
/** @type {(acc: readonly Vec[]) => (stream: List<FileCasOperation, IoResult<Vec>>) => Effect<FileCasOperation, IoResult<readonly Vec[]>>} */
|
|
183
|
+
const drain = acc =>
|
|
184
|
+
stream =>
|
|
185
|
+
step(
|
|
186
|
+
stream,
|
|
187
|
+
(node) => {
|
|
188
|
+
if (node === undefined) { return pure(ok(acc)) }
|
|
189
|
+
const { first, tail } = node
|
|
190
|
+
if (first[0] === 'error') { return pure(first) }
|
|
191
|
+
return drain([...acc, first[1]])(tail)
|
|
192
|
+
},
|
|
193
|
+
)
|
|
194
|
+
const [, readResult] = virtual(state1)(drain([])(c.read(hash)))
|
|
195
|
+
assert(readResult[0] === 'ok', ['expected read ok', readResult])
|
|
196
|
+
const expected = msb.concat(msb.concat(chunks[0])(chunks[1]))(chunks[2])
|
|
197
|
+
assertEq(msb.cmp(msb.listToVec(readResult[1]))(expected), 0, 'multi-chunk read content mismatch')
|
|
198
|
+
},
|
|
199
|
+
casWriteDedup: () => {
|
|
200
|
+
// Same content ⇒ same hash; the second upload's replace-`rename` publishes over the
|
|
201
|
+
// first, leaving exactly one shard in the store.
|
|
202
|
+
const content = vec8(0x2An)
|
|
203
|
+
const c = fileCas(sha256)('.')
|
|
204
|
+
/** @type {() => List<FileCasOperation, IoResult<Vec>>} */
|
|
205
|
+
const payload = () => nonEmpty(ok(content), empty())
|
|
206
|
+
const [state1, w1] = virtual(emptyState)(c.write(payload()))
|
|
207
|
+
const [state2, w2] = virtual(state1)(c.write(payload()))
|
|
208
|
+
assert(!(w1[0] !== 'ok' || w2[0] !== 'ok'), ['expected both writes ok', w1, w2])
|
|
209
|
+
assertEq(msb.cmp(w1[1])(w2[1]), 0, 'dedup hash mismatch')
|
|
210
|
+
const [, hashes] = virtual(state2)(c.list())
|
|
211
|
+
assertEq(hashes.length, 1, ['expected one shard after dedup', hashes.length])
|
|
212
|
+
},
|
|
213
|
+
casWriteErrorItemAborts: () => {
|
|
214
|
+
// An error item mid-stream deletes the partial staging file and fails; nothing is
|
|
215
|
+
// published, so the store stays empty.
|
|
216
|
+
const c = fileCas(sha256)('.')
|
|
217
|
+
/** @type {IoResult<Vec>} */
|
|
218
|
+
const okItem = ok(vec8(0x11n))
|
|
219
|
+
/** @type {IoResult<Vec>} */
|
|
220
|
+
const errItem = error({ code: 'BOOM' })
|
|
221
|
+
/** @type {List<FileCasOperation, IoResult<Vec>>} */
|
|
222
|
+
const payload = nonEmpty(okItem, nonEmpty(errItem, /** @type {List<FileCasOperation, IoResult<Vec>>} */ (empty())))
|
|
223
|
+
const [state1, result] = virtual(emptyState)(c.write(payload))
|
|
224
|
+
assert(result[0] === 'error', ['expected write error', result])
|
|
225
|
+
const [, hashes] = virtual(state1)(c.list())
|
|
226
|
+
assertEq(hashes.length, 0, ['expected nothing published on abort', hashes])
|
|
227
|
+
},
|
|
228
|
+
casWriteReadExceedsMaxLength: () => {
|
|
229
|
+
// The point of streaming: a payload larger than a single `Vec`'s `maxLength`
|
|
230
|
+
// (128 KiB) must round-trip. `write` lands the chunks on disk without ever
|
|
231
|
+
// holding them as one `Vec`, and `read` streams them back the same way — so the
|
|
232
|
+
// round-trip is verified by hashing the read stream incrementally rather than
|
|
233
|
+
// concatenating it (which would itself overflow `maxLength`).
|
|
234
|
+
const big = vec(maxLength)(0xABn) // one full-size chunk: exactly maxLength bits
|
|
235
|
+
const tail = vec8(0x2An) // one more byte ⇒ total > maxLength
|
|
236
|
+
const chunks = /** @type {const} */ ([big, tail])
|
|
237
|
+
const c = fileCas(sha256)('.')
|
|
238
|
+
/** @type {List<FileCasOperation, IoResult<Vec>>} */
|
|
239
|
+
const payload = chunks.reduceRight(
|
|
240
|
+
(tl, chunk) => nonEmpty(ok(chunk), tl),
|
|
241
|
+
/** @type {List<FileCasOperation, IoResult<Vec>>} */ (empty()))
|
|
242
|
+
const [state1, w] = virtual(emptyState)(c.write(payload))
|
|
243
|
+
assert(w[0] === 'ok', ['expected write ok', w])
|
|
244
|
+
const hash = w[1]
|
|
245
|
+
assertEq(msb.cmp(hash)(computeSync(sha256)(chunks)), 0, 'oversized write hash mismatch')
|
|
246
|
+
// Fold the read stream straight into a fresh SHA-2 state — never one `Vec`.
|
|
247
|
+
/** @type {(state: typeof sha256.init) => (stream: List<FileCasOperation, IoResult<Vec>>) => Effect<FileCasOperation, IoResult<Vec>>} */
|
|
248
|
+
const rehash = state =>
|
|
249
|
+
stream =>
|
|
250
|
+
step(
|
|
251
|
+
stream,
|
|
252
|
+
(node) => {
|
|
253
|
+
if (node === undefined) { return pure(ok(sha256.end(state))) }
|
|
254
|
+
const { first, tail } = node
|
|
255
|
+
if (first[0] === 'error') { return pure(first) }
|
|
256
|
+
return rehash(sha256.append(first[1])(state))(tail)
|
|
257
|
+
}
|
|
258
|
+
)
|
|
259
|
+
const [, readBack] = virtual(state1)(rehash(sha256.init)(c.read(hash)))
|
|
260
|
+
assert(readBack[0] === 'ok', ['expected read ok', readBack])
|
|
261
|
+
assertEq(msb.cmp(readBack[1])(hash), 0, 'oversized read-back hash mismatch')
|
|
262
|
+
},
|
|
263
|
+
casWriteGcReclaimsExpired: () => {
|
|
264
|
+
// A staging file whose deadline is in the past is reclaimed by the GC that `write`
|
|
265
|
+
// runs before staging its own file.
|
|
266
|
+
const stalePath = join('.', '.cas', '_stage', '0000000000000000000-stale')
|
|
267
|
+
const state0 = {
|
|
268
|
+
...emptyState,
|
|
269
|
+
epochNs: 1_000_000,
|
|
270
|
+
root: { '.cas': { '_stage': { '0000000000000000000-stale': [vec8(0x99n)] } } },
|
|
271
|
+
}
|
|
272
|
+
const content = vec8(0x2An)
|
|
273
|
+
const c = fileCas(sha256)('.')
|
|
274
|
+
const x = c.write(nonEmpty(ok(content), /** @type {List<never, Ok<Vec>>} */ (empty())))
|
|
275
|
+
const [state1, w] = virtual(state0)(x)
|
|
276
|
+
assert(w[0] === 'ok', ['expected write ok', w])
|
|
277
|
+
const [, present] = virtual(state1)(access(stalePath))
|
|
278
|
+
assert(present[0] === 'error', 'expected GC to reclaim the expired staging file')
|
|
279
|
+
},
|
|
280
|
+
casWriteGcSkipsLiveLease: () => {
|
|
281
|
+
// A staging file whose deadline is still in the future is left alone by the GC
|
|
282
|
+
// that `write` runs before staging its own file.
|
|
283
|
+
const livePath = join('.', '.cas', '_stage', '0000000000002000000-live')
|
|
284
|
+
const state0 = {
|
|
285
|
+
...emptyState,
|
|
286
|
+
epochNs: 1_000_000,
|
|
287
|
+
root: { '.cas': { '_stage': { '0000000000002000000-live': [vec8(0x99n)] } } },
|
|
288
|
+
}
|
|
289
|
+
const content = vec8(0x2An)
|
|
290
|
+
const c = fileCas(sha256)('.')
|
|
291
|
+
const x = c.write(nonEmpty(ok(content), /** @type {List<never, Ok<Vec>>} */ (empty())))
|
|
292
|
+
const [state1, w] = virtual(state0)(x)
|
|
293
|
+
assert(w[0] === 'ok', ['expected write ok', w])
|
|
294
|
+
const [, present] = virtual(state1)(access(livePath))
|
|
295
|
+
assert(present[0] === 'ok', 'expected GC to leave the live staging file alone')
|
|
296
|
+
},
|
|
297
|
+
casUploadSuccess: () => {
|
|
298
|
+
// A successful upload returns the hash and deletes the source file from cas_upload/.
|
|
299
|
+
const content = vec8(0x2An)
|
|
300
|
+
const state0 = { ...emptyState, root: { 'cas_upload': { 'myfile': [content] } } }
|
|
301
|
+
const [state1, result] = virtual(state0)(casUpload('.')('myfile'))
|
|
302
|
+
assert(result[0] === 'ok', ['expected casUpload ok', result])
|
|
303
|
+
assertEq(length(result[1]), 256n, ['expected 256-bit hash', length(result[1])])
|
|
304
|
+
// Source must be deleted after successful publish.
|
|
305
|
+
const srcPath = join('.', 'cas_upload', 'myfile')
|
|
306
|
+
const [, srcAccess] = virtual(state1)(access(srcPath))
|
|
307
|
+
assert(srcAccess[0] === 'error', 'expected source to be deleted after successful upload')
|
|
308
|
+
},
|
|
309
|
+
casUploadFailureKeepsSource: () => {
|
|
310
|
+
// A missing source file causes write to fail; casUpload returns error and the
|
|
311
|
+
// source is left in place (trivially: it was never there, but the upload is not published).
|
|
312
|
+
const state0 = { ...emptyState, root: {} }
|
|
313
|
+
const [state1, result] = virtual(state0)(casUpload('.')('nonexistent'))
|
|
314
|
+
assert(result[0] === 'error', ['expected casUpload to fail on missing source', result])
|
|
315
|
+
// Nothing published to the store.
|
|
316
|
+
const c = fileCas(sha256)('.')
|
|
317
|
+
const [, hashes] = virtual(state1)(c.list())
|
|
318
|
+
assertEq(hashes.length, 0, ['expected nothing published on failed upload', hashes])
|
|
319
|
+
},
|
|
320
|
+
collectReadDrainsChunks: () => {
|
|
321
|
+
// The common path: every chunk is `ok`, so collectRead concatenates them all
|
|
322
|
+
// and returns the whole blob as one `Vec`.
|
|
323
|
+
/** @type {List<never, IoResult<Vec>>} */
|
|
324
|
+
const stream = nonEmpty(ok(vec8(0x11n)), nonEmpty(ok(vec8(0x22n)), empty()))
|
|
325
|
+
const o = runPure(collectRead(stream))
|
|
326
|
+
assert(o.length === 1, 'expected collectRead to finish without issuing a command')
|
|
327
|
+
assertEq(o[0][0], 'ok')
|
|
328
|
+
},
|
|
329
|
+
collectReadPropagatesErrorItem: () => {
|
|
330
|
+
// An error item mid-stream short-circuits collectRead with that same error.
|
|
331
|
+
/** @type {IoResult<Vec>} */
|
|
332
|
+
const boom = error('boom')
|
|
333
|
+
/** @type {List<never, IoResult<Vec>>} */
|
|
334
|
+
const stream = nonEmpty(ok(vec8(0x11n)), nonEmpty(boom, /** @type {List<never, IoResult<Vec>>} */ (empty())))
|
|
335
|
+
const o = runPure(collectRead(stream))
|
|
336
|
+
assert(o.length === 1, 'expected collectRead to finish without issuing a command')
|
|
337
|
+
const [r] = o
|
|
338
|
+
assertEq(r[0], 'error')
|
|
339
|
+
assertEq(r[1], 'boom')
|
|
340
|
+
},
|
|
341
|
+
// A single `Vec` cannot exceed `maxLength` bits — feed a pure stream whose second
|
|
342
|
+
// chunk pushes the running total just over the limit so the overflow guard fires
|
|
343
|
+
// without any real I/O.
|
|
344
|
+
collectReadOverflow: () => {
|
|
345
|
+
const half = maxLength / 2n
|
|
346
|
+
const v1 = vec(half)(0n)
|
|
347
|
+
const v2 = vec(half + 1n)(0n)
|
|
348
|
+
/** @type {List<never, IoResult<Vec>>} */
|
|
349
|
+
const stream = nonEmpty(ok(v1), nonEmpty(ok(v2), empty()))
|
|
350
|
+
const o = runPure(collectRead(stream))
|
|
351
|
+
assert(o.length === 1, 'expected collectRead to finish without issuing a command')
|
|
352
|
+
assertEq(o[0][0], 'error')
|
|
353
|
+
},
|
|
354
|
+
casListPropagatesNonNotFoundAccessError: () => {
|
|
355
|
+
// A non-ENOENT `access` failure (permissions, corruption) is a genuine storage
|
|
356
|
+
// error and must propagate out of `list`, not be swallowed as an empty store.
|
|
357
|
+
const c = fileCas(sha256)('.')
|
|
358
|
+
const boom = { code: 'EACCES' }
|
|
359
|
+
const r = casCommand(c.list())
|
|
360
|
+
assert(r[0] === 'cont', 'expected list() to issue an access command first')
|
|
361
|
+
assertEq(r[1], 'access')
|
|
362
|
+
/** @type {unknown} */
|
|
363
|
+
let threw
|
|
364
|
+
try {
|
|
365
|
+
r[2](error(boom))
|
|
366
|
+
} catch (e) {
|
|
367
|
+
threw = e
|
|
368
|
+
}
|
|
369
|
+
assertEq(threw, boom)
|
|
370
|
+
},
|
|
371
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for content-addressable storage utilities.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import type { Vec } from '../types/bit_vec/types.ts';
|
|
7
|
+
import type { Effect, Operation } from '../effects/types.ts';
|
|
8
|
+
import type { List } from '../effects/list/types.ts';
|
|
9
|
+
import type { IoResult, Mkdir, Now, RandomInt, ReadBytes, Readdir, Rename, Rm, CreateExclusive, WriteBytes, Access, Stat } from '../effects/node/types.ts';
|
|
10
|
+
/**
|
|
11
|
+
* The filesystem effects the streaming CAS performs: `read` pulls shards
|
|
12
|
+
* (`ReadBytes`); `list` walks the store (`Access`/`Readdir`); `write` runs the
|
|
13
|
+
* lock-free staging upload (`Mkdir`/`CreateExclusive`/`WriteBytes`/`Rename`/`Rm`/
|
|
14
|
+
* `Stat`, lease deadlines from `Now`, staging names from `RandomInt`) and GC's
|
|
15
|
+
* expired staging files (`Readdir`/`Rm`).
|
|
16
|
+
*/
|
|
17
|
+
export type FileCasOperation = ReadBytes | Mkdir | Readdir | Access | Rename | Rm | RandomInt | Now | CreateExclusive | WriteBytes | Stat | Now | Readdir | Rm;
|
|
18
|
+
export type Cas<O extends Operation> = {
|
|
19
|
+
/**
|
|
20
|
+
* Streams the content for `hash` out in `<=128 KiB` chunks. Every pull yields an
|
|
21
|
+
* explicit `ok(chunk)` or `error` item, so a missing shard or I/O error is a distinct
|
|
22
|
+
* error *item* in the stream, never collapsed into end-of-stream (`undefined`).
|
|
23
|
+
*/
|
|
24
|
+
readonly read: (hash: Vec) => List<O, IoResult<Vec>>;
|
|
25
|
+
/**
|
|
26
|
+
* Consumes a chunk stream — each item `ok(chunk)` or `error` — hashing incrementally,
|
|
27
|
+
* and returns the content address. An error item aborts the upload.
|
|
28
|
+
*/
|
|
29
|
+
readonly write: <O1 extends Operation>(payload: List<O1, IoResult<Vec>>) => Effect<O | O1, IoResult<Vec>>;
|
|
30
|
+
/** Lists all stored content hashes. */
|
|
31
|
+
readonly list: () => Effect<O, readonly Vec[]>;
|
|
32
|
+
};
|
|
33
|
+
export type FileCas = Cas<FileCasOperation> & {
|
|
34
|
+
url: (v: Vec) => string;
|
|
35
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CI step builder for Bun: installs the pinned Bun version and runs the
|
|
3
|
+
* FunctionalScript package smoke test plus Bun coverage in one canonical job.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*
|
|
7
|
+
* @import { MetaStep } from '../common/types.ts'
|
|
8
|
+
*/
|
|
9
|
+
import type { MetaStep } from '../common/types.ts';
|
|
10
|
+
/** @type {(version: string) => readonly MetaStep[]} */
|
|
11
|
+
export declare const bunSteps: (version: string) => readonly MetaStep[];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CI step builder for Bun: installs the pinned Bun version and runs the
|
|
3
|
+
* FunctionalScript package smoke test plus Bun coverage in one canonical job.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*
|
|
7
|
+
* @import { MetaStep } from '../common/types.ts'
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { bun } from '../config/module.f.mjs'
|
|
11
|
+
import { install, test, uses } from '../common/module.f.mjs'
|
|
12
|
+
|
|
13
|
+
/** @type {(version: string) => readonly MetaStep[]} */
|
|
14
|
+
export const bunSteps = version => [
|
|
15
|
+
install(uses('oven-sh/setup-bun', { 'bun-version': bun })),
|
|
16
|
+
install({ run: `bun install -g functionalscript@${version}` }),
|
|
17
|
+
test({ run: 'bun install --frozen-lockfile' }),
|
|
18
|
+
test({ run: `bunx functionalscript@${version} test` }),
|
|
19
|
+
test({ run: 'bun test --coverage' }),
|
|
20
|
+
]
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared CI types and helpers: GitHub Actions step/job RTTI schemas, the
|
|
3
|
+
* `MetaStep` representation used by tool-specific modules, and assemblers like
|
|
4
|
+
* `install`, `test`, `ubuntu`, and `toSteps`. See `./types.ts` for the
|
|
5
|
+
* `Os`/`Architecture`/`Image`/`Step`/`Job`/`Jobs`/`GitHubAction`/`StepType`/
|
|
6
|
+
* `MetaStep` type-level API.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*
|
|
10
|
+
* @import { Step, Job, MetaStep, StepType } from './types.ts'
|
|
11
|
+
*/
|
|
12
|
+
import type { Step, Job, MetaStep } from './types.ts';
|
|
13
|
+
import { actions } from '../config/module.f.mjs';
|
|
14
|
+
export declare const os: readonly ['ubuntu', 'macos', 'windows'];
|
|
15
|
+
export declare const architecture: readonly ['intel', 'arm'];
|
|
16
|
+
export declare const stepSchema: {
|
|
17
|
+
readonly run: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts")._Type0<"string">, undefined]>;
|
|
18
|
+
readonly uses: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts")._Type0<"string">, undefined]>;
|
|
19
|
+
readonly with: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts").Type1<"record", import("../../types/rtti/types.ts")._Type0<"string">>, undefined]>;
|
|
20
|
+
};
|
|
21
|
+
export declare const jobSchema: {
|
|
22
|
+
readonly 'runs-on': import("../../types/rtti/types.ts")._Type0<"string">;
|
|
23
|
+
readonly steps: import("../../types/rtti/types.ts").Type1<"array", {
|
|
24
|
+
readonly run: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts")._Type0<"string">, undefined]>;
|
|
25
|
+
readonly uses: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts")._Type0<"string">, undefined]>;
|
|
26
|
+
readonly with: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts").Type1<"record", import("../../types/rtti/types.ts")._Type0<"string">>, undefined]>;
|
|
27
|
+
}>;
|
|
28
|
+
};
|
|
29
|
+
export declare const jobsSchema: import("../../types/rtti/types.ts").Type1<"record", {
|
|
30
|
+
readonly 'runs-on': import("../../types/rtti/types.ts")._Type0<"string">;
|
|
31
|
+
readonly steps: import("../../types/rtti/types.ts").Type1<"array", {
|
|
32
|
+
readonly run: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts")._Type0<"string">, undefined]>;
|
|
33
|
+
readonly uses: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts")._Type0<"string">, undefined]>;
|
|
34
|
+
readonly with: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts").Type1<"record", import("../../types/rtti/types.ts")._Type0<"string">>, undefined]>;
|
|
35
|
+
}>;
|
|
36
|
+
}>;
|
|
37
|
+
export declare const gitHubActionSchema: {
|
|
38
|
+
readonly name: import("../../types/rtti/types.ts")._Type0<"string">;
|
|
39
|
+
readonly on: {
|
|
40
|
+
readonly pull_request: import("../../types/rtti/types.ts").Or<readonly [{}, undefined]>;
|
|
41
|
+
readonly merge_group: import("../../types/rtti/types.ts").Or<readonly [{}, undefined]>;
|
|
42
|
+
};
|
|
43
|
+
readonly permissions: import("../../types/rtti/types.ts").Type1<"record", import("../../types/rtti/types.ts")._Type0<"string">>;
|
|
44
|
+
readonly jobs: import("../../types/rtti/types.ts").Type1<"record", {
|
|
45
|
+
readonly 'runs-on': import("../../types/rtti/types.ts")._Type0<"string">;
|
|
46
|
+
readonly steps: import("../../types/rtti/types.ts").Type1<"array", {
|
|
47
|
+
readonly run: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts")._Type0<"string">, undefined]>;
|
|
48
|
+
readonly uses: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts")._Type0<"string">, undefined]>;
|
|
49
|
+
readonly with: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts").Type1<"record", import("../../types/rtti/types.ts")._Type0<"string">>, undefined]>;
|
|
50
|
+
}>;
|
|
51
|
+
}>;
|
|
52
|
+
};
|
|
53
|
+
export declare const parseGitHubAction: import("../../types/rtti/parse/types.ts").Parse<{
|
|
54
|
+
readonly name: import("../../types/rtti/types.ts")._Type0<"string">;
|
|
55
|
+
readonly on: {
|
|
56
|
+
readonly pull_request: import("../../types/rtti/types.ts").Or<readonly [{}, undefined]>;
|
|
57
|
+
readonly merge_group: import("../../types/rtti/types.ts").Or<readonly [{}, undefined]>;
|
|
58
|
+
};
|
|
59
|
+
readonly permissions: import("../../types/rtti/types.ts").Type1<"record", import("../../types/rtti/types.ts")._Type0<"string">>;
|
|
60
|
+
readonly jobs: import("../../types/rtti/types.ts").Type1<"record", {
|
|
61
|
+
readonly 'runs-on': import("../../types/rtti/types.ts")._Type0<"string">;
|
|
62
|
+
readonly steps: import("../../types/rtti/types.ts").Type1<"array", {
|
|
63
|
+
readonly run: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts")._Type0<"string">, undefined]>;
|
|
64
|
+
readonly uses: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts")._Type0<"string">, undefined]>;
|
|
65
|
+
readonly with: import("../../types/rtti/types.ts").Or<readonly [import("../../types/rtti/types.ts").Type1<"record", import("../../types/rtti/types.ts")._Type0<"string">>, undefined]>;
|
|
66
|
+
}>;
|
|
67
|
+
}>;
|
|
68
|
+
}>;
|
|
69
|
+
/** @type {(name: keyof typeof actions, w?: Record<string, string>) => Step} */
|
|
70
|
+
export declare const uses: (name: keyof typeof actions, w?: Record<string, string>) => Step;
|
|
71
|
+
/** @type {(step: Step) => MetaStep} */
|
|
72
|
+
export declare const install: (step: Step) => MetaStep;
|
|
73
|
+
/** @type {(step: Step) => MetaStep} */
|
|
74
|
+
export declare const test: (step: Step) => MetaStep;
|
|
75
|
+
/** @type {(m: readonly MetaStep[]) => readonly Step[]} */
|
|
76
|
+
export declare const toSteps: (m: readonly MetaStep[]) => readonly Step[];
|
|
77
|
+
/** @type {(ms: readonly MetaStep[]) => Job} */
|
|
78
|
+
export declare const ubuntu: (ms: readonly MetaStep[]) => Job;
|
|
79
|
+
/** @type {(ms: readonly MetaStep[]) => Job} */
|
|
80
|
+
export declare const ubuntuArm: (ms: readonly MetaStep[]) => Job;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared CI types and helpers: GitHub Actions step/job RTTI schemas, the
|
|
3
|
+
* `MetaStep` representation used by tool-specific modules, and assemblers like
|
|
4
|
+
* `install`, `test`, `ubuntu`, and `toSteps`. See `./types.ts` for the
|
|
5
|
+
* `Os`/`Architecture`/`Image`/`Step`/`Job`/`Jobs`/`GitHubAction`/`StepType`/
|
|
6
|
+
* `MetaStep` type-level API.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*
|
|
10
|
+
* @import { Step, Job, MetaStep, StepType } from './types.ts'
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { actions, images } from '../config/module.f.mjs'
|
|
14
|
+
import { option, array, record, string } from '../../types/rtti/module.f.mjs'
|
|
15
|
+
import { parse as rttiParse } from '../../types/rtti/parse/module.f.mjs'
|
|
16
|
+
|
|
17
|
+
export const os = /** @type {const} */ (['ubuntu', 'macos', 'windows'])
|
|
18
|
+
|
|
19
|
+
export const architecture = /** @type {const} */ (['intel', 'arm'])
|
|
20
|
+
|
|
21
|
+
export const stepSchema = /** @type {const} */ ({
|
|
22
|
+
run: option(string),
|
|
23
|
+
uses: option(string),
|
|
24
|
+
with: option(record(string))
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
export const jobSchema = /** @type {const} */ ({
|
|
28
|
+
'runs-on': string,
|
|
29
|
+
steps: array(stepSchema)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
export const jobsSchema = record(jobSchema)
|
|
33
|
+
|
|
34
|
+
export const gitHubActionSchema = /** @type {const} */ ({
|
|
35
|
+
name: string,
|
|
36
|
+
on: {
|
|
37
|
+
pull_request: option({}),
|
|
38
|
+
merge_group: option({})
|
|
39
|
+
},
|
|
40
|
+
permissions: record(string),
|
|
41
|
+
jobs: jobsSchema
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
export const parseGitHubAction = rttiParse(gitHubActionSchema)
|
|
45
|
+
|
|
46
|
+
/** @type {(name: keyof typeof actions, w?: Record<string, string>) => Step} */
|
|
47
|
+
export const uses = (name, w) => ({
|
|
48
|
+
uses: `${name}@${actions[name]}`,
|
|
49
|
+
...(w === undefined ? {} : { with: w })
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
/** @type {(step: Step) => MetaStep} */
|
|
53
|
+
export const install = step => ({ type: 'install', step })
|
|
54
|
+
|
|
55
|
+
/** @type {(step: Step) => MetaStep} */
|
|
56
|
+
export const test = step => ({ type: 'test', step })
|
|
57
|
+
|
|
58
|
+
/** @type {(m: readonly MetaStep[]) => readonly Step[]} */
|
|
59
|
+
export const toSteps = m => {
|
|
60
|
+
/** @type {(st: StepType) => Step[]} */
|
|
61
|
+
const filter = st => m.flatMap(mt => mt.type === st ? [mt.step] : [])
|
|
62
|
+
const aptGet = m.flatMap(v => v.type === 'apt-get' ? [v.package] : []).join(' ')
|
|
63
|
+
|
|
64
|
+
const needRust = m.find(v => v.type === 'rust') !== undefined
|
|
65
|
+
const targets = m.flatMap(v => v.type === 'rust' && v.target !== undefined ? [v.target] : []).join(',')
|
|
66
|
+
return [
|
|
67
|
+
...(aptGet !== '' ? [{ run: `sudo apt-get update && sudo apt-get install -y ${aptGet}` }] : []),
|
|
68
|
+
...(needRust ? [uses('dtolnay/rust-toolchain', {
|
|
69
|
+
components: 'rustfmt,clippy',
|
|
70
|
+
...(targets === '' ? {} : { targets }),
|
|
71
|
+
})] : []),
|
|
72
|
+
...filter('install'),
|
|
73
|
+
uses('actions/checkout'),
|
|
74
|
+
...filter('test'),
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** @type {(ms: readonly MetaStep[]) => Job} */
|
|
79
|
+
export const ubuntu = ms => ({
|
|
80
|
+
'runs-on': images.ubuntu.intel,
|
|
81
|
+
steps: toSteps(ms)
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
/** @type {(ms: readonly MetaStep[]) => Job} */
|
|
85
|
+
export const ubuntuArm = ms => ({
|
|
86
|
+
'runs-on': images.ubuntu.arm,
|
|
87
|
+
steps: toSteps(ms)
|
|
88
|
+
})
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-level API for shared CI types: GitHub Actions step/job RTTI schemas,
|
|
3
|
+
* the `MetaStep` representation used by tool-specific modules.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import type { Ts } from '../../types/rtti/ts/types.ts';
|
|
8
|
+
import type { images } from '../config/module.f.mjs';
|
|
9
|
+
import type { os, architecture, stepSchema, jobSchema, jobsSchema, gitHubActionSchema } from './module.f.mjs';
|
|
10
|
+
export type Os = typeof os[number];
|
|
11
|
+
export type Architecture = typeof architecture[number];
|
|
12
|
+
export type Image = typeof images[Os][Architecture];
|
|
13
|
+
export type Step = Ts<typeof stepSchema>;
|
|
14
|
+
export type Job = Ts<typeof jobSchema>;
|
|
15
|
+
export type Jobs = Ts<typeof jobsSchema>;
|
|
16
|
+
export type GitHubAction = Ts<typeof gitHubActionSchema>;
|
|
17
|
+
export type StepType = 'install' | 'test';
|
|
18
|
+
export type MetaStep = {
|
|
19
|
+
readonly type: StepType;
|
|
20
|
+
readonly step: Step;
|
|
21
|
+
} | {
|
|
22
|
+
readonly type: 'rust';
|
|
23
|
+
readonly target?: string;
|
|
24
|
+
} | {
|
|
25
|
+
readonly type: 'apt-get';
|
|
26
|
+
readonly package: string;
|
|
27
|
+
};
|