functionalscript 0.43.1 → 0.44.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.mjs +309 -0
- package/fjs/asn.1/types.d.ts +37 -0
- package/fjs/asn.1/types.js +6 -0
- package/fjs/asserts/module.f.d.mts +37 -0
- package/fjs/asserts/module.f.mjs +49 -0
- package/fjs/asserts/proof.f.mjs +19 -0
- package/fjs/asserts/types.d.ts +11 -0
- package/fjs/asserts/types.js +6 -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 +2 -0
- package/fjs/basen/base128/proof.f.mjs +30 -0
- package/fjs/basen/base64/module.f.d.mts +14 -0
- package/fjs/basen/base64/module.f.mjs +71 -0
- package/fjs/basen/base64/proof.f.d.mts +17 -0
- package/fjs/basen/base64/proof.f.mjs +147 -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 +8 -0
- package/fjs/basen/cbase32/proof.f.mjs +77 -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/basen/types.js +6 -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 +160 -0
- package/fjs/bnf/data/types.d.ts +35 -0
- package/fjs/bnf/data/types.js +6 -0
- package/fjs/bnf/descent/module.f.d.mts +33 -0
- package/fjs/bnf/descent/module.f.mjs +212 -0
- package/fjs/bnf/descent/proof.f.d.mts +13 -0
- package/fjs/bnf/descent/proof.f.mjs +351 -0
- package/fjs/bnf/descent/types.d.ts +71 -0
- package/fjs/bnf/descent/types.js +6 -0
- package/fjs/bnf/ll1/module.f.d.mts +41 -0
- package/fjs/bnf/ll1/module.f.mjs +199 -0
- package/fjs/bnf/ll1/proof.f.d.mts +16 -0
- package/fjs/bnf/ll1/proof.f.mjs +352 -0
- package/fjs/bnf/ll1/types.d.ts +59 -0
- package/fjs/bnf/ll1/types.js +6 -0
- package/fjs/bnf/module.f.d.mts +164 -0
- package/fjs/bnf/module.f.mjs +298 -0
- package/fjs/bnf/proof.f.d.mts +17 -0
- package/fjs/bnf/proof.f.mjs +89 -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 +35 -0
- package/fjs/bnf/token_symbol/module.f.mjs +62 -0
- package/fjs/bnf/token_symbol/proof.f.mjs +43 -0
- package/fjs/bnf/token_symbol/types.d.ts +27 -0
- package/fjs/bnf/token_symbol/types.js +6 -0
- package/fjs/bnf/types.d.ts +67 -0
- package/fjs/bnf/types.js +6 -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 +18 -0
- package/fjs/cas/cli/proof.f.mjs +118 -0
- package/fjs/cas/evo/module.f.d.mts +163 -0
- package/fjs/cas/evo/module.f.mjs +556 -0
- package/fjs/cas/evo/proof.f.d.mts +55 -0
- package/fjs/cas/evo/proof.f.mjs +749 -0
- package/fjs/cas/evo/types.d.ts +111 -0
- package/fjs/cas/evo/types.js +7 -0
- package/fjs/cas/module.f.d.mts +68 -0
- package/fjs/cas/module.f.mjs +363 -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/cas/types.js +6 -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 +87 -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 +28 -0
- package/fjs/ci/nix/proof.f.mjs +146 -0
- package/fjs/ci/nix/types.d.ts +16 -0
- package/fjs/ci/nix/types.js +6 -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 +20 -0
- package/fjs/ci/proof.f.mjs +219 -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/ci/types.js +6 -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 +16 -0
- package/fjs/cli/proof.f.mjs +130 -0
- package/fjs/cli/types.d.ts +15 -0
- package/fjs/cli/types.js +6 -0
- package/fjs/common/monoid/module.f.d.mts +87 -0
- package/fjs/common/monoid/module.f.mjs +104 -0
- package/fjs/common/monoid/proof.f.d.mts +10 -0
- package/fjs/common/monoid/proof.f.mjs +58 -0
- package/fjs/common/monoid/types.d.ts +50 -0
- package/fjs/common/monoid/types.js +6 -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/pow/types.js +6 -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 +9 -0
- package/fjs/crypto/secp/proof.f.mjs +137 -0
- package/fjs/crypto/secp/types.d.ts +36 -0
- package/fjs/crypto/secp/types.js +6 -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 +32 -0
- package/fjs/crypto/sha2/proof.f.mjs +144 -0
- package/fjs/crypto/sha2/types.d.ts +57 -0
- package/fjs/crypto/sha2/types.js +6 -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/sign/types.js +6 -0
- package/fjs/crypto/vdf/module.f.d.mts +15 -0
- package/fjs/crypto/vdf/module.f.mjs +84 -0
- package/fjs/crypto/vdf/proof.f.mjs +106 -0
- package/fjs/crypto/vdf/types.d.ts +18 -0
- package/fjs/crypto/vdf/types.js +6 -0
- package/fjs/dev/module.f.d.mts +56 -0
- package/fjs/dev/module.f.mjs +170 -0
- package/fjs/dev/package_json/module.f.d.mts +32 -0
- package/fjs/dev/package_json/module.f.mjs +37 -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/types.js +6 -0
- package/fjs/dev/update/module.f.d.mts +19 -0
- package/fjs/dev/update/module.f.mjs +36 -0
- package/fjs/dev/update/proof.f.d.mts +7 -0
- package/fjs/dev/update/proof.f.mjs +36 -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/ast/types.js +8 -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 +75 -0
- package/fjs/djs/parser/module.f.mjs +547 -0
- package/fjs/djs/parser/proof.f.mjs +543 -0
- package/fjs/djs/parser/types.d.ts +11 -0
- package/fjs/djs/parser/types.js +7 -0
- package/fjs/djs/proof.f.mjs +52 -0
- package/fjs/djs/serializer/module.f.d.mts +30 -0
- package/fjs/djs/serializer/module.f.mjs +206 -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 +624 -0
- package/fjs/djs/tokenizer/proof.f.mjs +980 -0
- package/fjs/djs/tokenizer/types.d.ts +20 -0
- package/fjs/djs/tokenizer/types.js +7 -0
- package/fjs/djs/transpiler/module.f.d.mts +44 -0
- package/fjs/djs/transpiler/module.f.mjs +141 -0
- package/fjs/djs/transpiler/proof.f.mjs +76 -0
- package/fjs/djs/types.d.ts +13 -0
- package/fjs/djs/types.js +7 -0
- package/fjs/effects/eff/module.f.d.mts +10 -0
- package/fjs/effects/eff/module.f.mjs +68 -0
- package/fjs/effects/eff/proof.f.d.mts +12 -0
- package/fjs/effects/eff/proof.f.mjs +66 -0
- package/fjs/effects/eff/types.d.ts +71 -0
- package/fjs/effects/eff/types.js +6 -0
- package/fjs/effects/list/module.f.d.mts +24 -0
- package/fjs/effects/list/module.f.mjs +34 -0
- package/fjs/effects/list/types.d.ts +26 -0
- package/fjs/effects/list/types.js +6 -0
- package/fjs/effects/memory/module.f.d.mts +32 -0
- package/fjs/effects/memory/module.f.mjs +44 -0
- package/fjs/effects/memory/proof.f.d.mts +12 -0
- package/fjs/effects/memory/proof.f.mjs +83 -0
- package/fjs/effects/memory/types.d.ts +18 -0
- package/fjs/effects/memory/types.js +6 -0
- package/fjs/effects/mock/module.f.d.mts +6 -0
- package/fjs/effects/mock/module.f.mjs +26 -0
- package/fjs/effects/mock/types.d.ts +15 -0
- package/fjs/effects/mock/types.js +6 -0
- package/fjs/effects/module.d.mts +7 -0
- package/fjs/effects/module.f.d.mts +350 -0
- package/fjs/effects/module.f.mjs +382 -0
- package/fjs/effects/module.mjs +18 -0
- package/fjs/effects/node/memory/module.d.mts +24 -0
- package/fjs/effects/node/memory/module.mjs +59 -0
- package/fjs/effects/node/memory/proof.mjs +43 -0
- package/fjs/effects/node/module.d.mts +54 -0
- package/fjs/effects/node/module.f.d.mts +172 -0
- package/fjs/effects/node/module.f.mjs +354 -0
- package/fjs/effects/node/module.mjs +393 -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/types.js +6 -0
- package/fjs/effects/node/virtual/module.f.d.mts +31 -0
- package/fjs/effects/node/virtual/module.f.mjs +434 -0
- package/fjs/effects/node/virtual/proof.f.d.mts +35 -0
- package/fjs/effects/node/virtual/proof.f.mjs +226 -0
- package/fjs/effects/node/virtual/types.d.ts +39 -0
- package/fjs/effects/node/virtual/types.js +7 -0
- package/fjs/effects/proof.f.d.mts +62 -0
- package/fjs/effects/proof.f.mjs +231 -0
- package/fjs/effects/types.d.ts +115 -0
- package/fjs/effects/types.js +6 -0
- package/fjs/emergent_testing/all.test.js +2 -2
- 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 +150 -0
- package/fjs/emergent_testing/module.f.mjs +414 -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/emergent_testing/types.js +6 -0
- package/fjs/fsc/bnf.f.d.mts +3 -0
- package/fjs/fsc/bnf.f.mjs +77 -0
- package/fjs/fsc/json.f.d.mts +13 -0
- package/fjs/fsc/json.f.mjs +124 -0
- package/fjs/fsc/module.f.d.mts +14 -0
- package/fjs/fsc/module.f.mjs +138 -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.mjs +146 -0
- package/fjs/js/tokenizer/module.f.d.mts +19 -0
- package/fjs/js/tokenizer/module.f.mjs +795 -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/js/tokenizer/types.js +6 -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 +32 -0
- package/fjs/mcp/module.f.mjs +96 -0
- package/fjs/mcp/proof.f.d.mts +46 -0
- package/fjs/mcp/proof.f.mjs +725 -0
- package/fjs/media/html/module.f.d.mts +43 -0
- package/fjs/media/html/module.f.mjs +167 -0
- package/fjs/media/html/proof.f.mjs +77 -0
- package/fjs/media/html/types.d.ts +19 -0
- package/fjs/media/html/types.js +6 -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 +219 -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 +34 -0
- package/fjs/media/json/parser/types.js +6 -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 +26 -0
- package/fjs/media/json/rtti/proof.f.mjs +86 -0
- package/fjs/media/json/schema/module.f.d.mts +79 -0
- package/fjs/media/json/schema/module.f.mjs +144 -0
- package/fjs/media/json/schema/proof.f.d.mts +40 -0
- package/fjs/media/json/schema/proof.f.mjs +93 -0
- package/fjs/media/json/serializer/module.f.d.mts +27 -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 +17 -0
- package/fjs/media/json/tokenizer/module.f.mjs +77 -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/tokenizer/types.js +6 -0
- package/fjs/media/json/types.d.ts +25 -0
- package/fjs/media/json/types.js +13 -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 +14 -0
- package/fjs/media/nix/module.f.mjs +261 -0
- package/fjs/media/nix/proof.f.mjs +181 -0
- package/fjs/media/nix/types.d.ts +22 -0
- package/fjs/media/nix/types.js +6 -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 +119 -0
- package/fjs/media/revision/module.f.mjs +166 -0
- package/fjs/media/revision/proof.f.mjs +228 -0
- package/fjs/media/revision/types.d.ts +16 -0
- package/fjs/media/revision/types.js +8 -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 +97 -0
- package/fjs/media/type/module.f.mjs +281 -0
- package/fjs/media/type/proof.f.mjs +285 -0
- package/fjs/media/type/types.d.ts +67 -0
- package/fjs/media/type/types.js +6 -0
- package/fjs/media/types.d.ts +26 -0
- package/fjs/media/types.js +7 -0
- package/fjs/module.f.d.mts +3 -0
- package/fjs/module.f.mjs +60 -0
- package/fjs/module.mjs +6 -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/types.js +11 -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 +55 -0
- package/fjs/path/module.f.mjs +96 -0
- package/fjs/path/proof.f.mjs +125 -0
- package/fjs/proof.f.mjs +48 -0
- package/fjs/protocol/json_rpc/module.f.d.mts +127 -0
- package/fjs/protocol/json_rpc/module.f.mjs +112 -0
- package/fjs/protocol/json_rpc/proof.f.mjs +84 -0
- package/fjs/protocol/json_rpc/types.d.ts +30 -0
- package/fjs/protocol/json_rpc/types.js +8 -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 +53 -0
- package/fjs/protocol/mcp/proof.f.mjs +312 -0
- package/fjs/protocol/mcp/stdio/module.f.d.mts +52 -0
- package/fjs/protocol/mcp/stdio/module.f.mjs +132 -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/types.d.ts +59 -0
- package/fjs/protocol/mcp/types.js +8 -0
- package/fjs/sul/id/module.f.d.mts +37 -0
- package/fjs/sul/id/module.f.mjs +143 -0
- package/fjs/sul/id/proof.f.mjs +72 -0
- package/fjs/sul/id/types.d.ts +8 -0
- package/fjs/sul/id/types.js +6 -0
- package/fjs/sul/level/hash/module.f.d.mts +37 -0
- package/fjs/sul/level/hash/module.f.mjs +61 -0
- package/fjs/sul/level/hash/proof.f.d.mts +15 -0
- package/fjs/sul/level/hash/proof.f.mjs +131 -0
- package/fjs/sul/level/hash/types.d.ts +20 -0
- package/fjs/sul/level/hash/types.js +6 -0
- package/fjs/sul/level/literal/module.f.d.mts +54 -0
- package/fjs/sul/level/literal/module.f.mjs +120 -0
- package/fjs/sul/level/literal/proof.f.mjs +788 -0
- package/fjs/sul/level/literal/types.d.ts +31 -0
- package/fjs/sul/level/literal/types.js +6 -0
- package/fjs/sul/module.f.d.mts +25 -0
- package/fjs/sul/module.f.mjs +69 -0
- package/fjs/sul/proof.f.d.mts +11 -0
- package/fjs/sul/proof.f.mjs +62 -0
- package/fjs/sul/types.d.ts +19 -0
- package/fjs/sul/types.js +6 -0
- package/fjs/text/ascii/module.f.d.mts +136 -0
- package/fjs/text/ascii/module.f.mjs +224 -0
- package/fjs/text/ascii/proof.f.mjs +16 -0
- package/fjs/text/code_point/module.f.d.mts +74 -0
- package/fjs/text/code_point/module.f.mjs +139 -0
- package/fjs/text/code_point/proof.f.mjs +80 -0
- package/fjs/text/module.f.d.mts +39 -0
- package/fjs/text/module.f.mjs +61 -0
- package/fjs/text/proof.f.mjs +48 -0
- package/fjs/text/sgr/module.f.d.mts +58 -0
- package/fjs/text/sgr/module.f.mjs +99 -0
- package/fjs/text/sgr/proof.f.mjs +39 -0
- package/fjs/text/sgr/types.d.ts +12 -0
- package/fjs/text/sgr/types.js +6 -0
- package/fjs/text/types.d.ts +13 -0
- package/fjs/text/types.js +6 -0
- package/fjs/text/utf16/module.f.d.mts +147 -0
- package/fjs/text/utf16/module.f.mjs +350 -0
- package/fjs/text/utf16/proof.f.d.mts +11 -0
- package/fjs/text/utf16/proof.f.mjs +158 -0
- package/fjs/text/utf16/types.d.ts +19 -0
- package/fjs/text/utf16/types.js +6 -0
- package/fjs/text/utf8/module.f.d.mts +69 -0
- package/fjs/text/utf8/module.f.mjs +280 -0
- package/fjs/text/utf8/proof.f.mjs +217 -0
- package/fjs/text/utf8/types.d.ts +26 -0
- package/fjs/text/utf8/types.js +6 -0
- package/fjs/types/array/module.f.d.mts +68 -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/array/types.js +6 -0
- package/fjs/types/bigfloat/module.f.d.mts +14 -0
- package/fjs/types/bigfloat/module.f.mjs +99 -0
- package/fjs/types/bigfloat/proof.f.mjs +218 -0
- package/fjs/types/bigfloat/types.d.ts +6 -0
- package/fjs/types/bigfloat/types.js +6 -0
- package/fjs/types/bigint/benchmark.d.mts +1 -0
- package/fjs/types/bigint/benchmark.mjs +205 -0
- package/fjs/types/bigint/module.f.d.mts +176 -0
- package/fjs/types/bigint/module.f.mjs +289 -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/bigint/types.js +6 -0
- package/fjs/types/bit_vec/module.f.d.mts +199 -0
- package/fjs/types/bit_vec/module.f.mjs +485 -0
- package/fjs/types/bit_vec/proof.f.mjs +495 -0
- package/fjs/types/bit_vec/types.d.ts +51 -0
- package/fjs/types/bit_vec/types.js +6 -0
- package/fjs/types/btree/find/module.f.d.mts +15 -0
- package/fjs/types/btree/find/module.f.mjs +80 -0
- package/fjs/types/btree/find/proof.f.d.mts +4 -0
- package/fjs/types/btree/find/proof.f.mjs +121 -0
- package/fjs/types/btree/find/types.d.ts +22 -0
- package/fjs/types/btree/find/types.js +6 -0
- package/fjs/types/btree/module.f.d.mts +10 -0
- package/fjs/types/btree/module.f.mjs +39 -0
- package/fjs/types/btree/proof.f.d.mts +14 -0
- package/fjs/types/btree/proof.f.mjs +85 -0
- package/fjs/types/btree/remove/module.f.d.mts +21 -0
- package/fjs/types/btree/remove/module.f.mjs +187 -0
- package/fjs/types/btree/remove/proof.f.mjs +472 -0
- package/fjs/types/btree/set/module.f.d.mts +5 -0
- package/fjs/types/btree/set/module.f.mjs +117 -0
- package/fjs/types/btree/set/proof.f.mjs +427 -0
- package/fjs/types/btree/types/module.f.d.mts +19 -0
- package/fjs/types/btree/types/module.f.mjs +19 -0
- package/fjs/types/btree/types/types.d.ts +14 -0
- package/fjs/types/btree/types/types.js +6 -0
- package/fjs/types/byte_set/module.f.d.mts +26 -0
- package/fjs/types/byte_set/module.f.mjs +66 -0
- package/fjs/types/byte_set/proof.f.d.mts +12 -0
- package/fjs/types/byte_set/proof.f.mjs +84 -0
- package/fjs/types/byte_set/types.d.ts +6 -0
- package/fjs/types/byte_set/types.js +6 -0
- package/fjs/types/function/compare/module.f.d.mts +44 -0
- package/fjs/types/function/compare/module.f.mjs +71 -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/compare/types.js +6 -0
- package/fjs/types/function/module.f.d.mts +26 -0
- package/fjs/types/function/module.f.mjs +32 -0
- package/fjs/types/function/operator/module.f.d.mts +37 -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/operator/types.js +6 -0
- package/fjs/types/function/proof.f.mjs +16 -0
- package/fjs/types/function/types.d.ts +16 -0
- package/fjs/types/function/types.js +6 -0
- package/fjs/types/list/module.f.d.mts +88 -0
- package/fjs/types/list/module.f.mjs +309 -0
- package/fjs/types/list/proof.f.d.mts +32 -0
- package/fjs/types/list/proof.f.mjs +363 -0
- package/fjs/types/list/types.d.ts +36 -0
- package/fjs/types/list/types.js +6 -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 +30 -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/nibble_set/types.js +6 -0
- package/fjs/types/nominal/module.f.d.mts +9 -0
- package/fjs/types/nominal/module.f.mjs +16 -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/nominal/types.js +6 -0
- package/fjs/types/nullable/module.f.d.mts +38 -0
- package/fjs/types/nullable/module.f.mjs +53 -0
- package/fjs/types/nullable/proof.f.mjs +34 -0
- package/fjs/types/nullable/types.d.ts +6 -0
- package/fjs/types/nullable/types.js +6 -0
- package/fjs/types/number/module.f.d.mts +23 -0
- package/fjs/types/number/module.f.mjs +55 -0
- package/fjs/types/number/proof.f.mjs +204 -0
- package/fjs/types/object/module.f.d.mts +33 -0
- package/fjs/types/object/module.f.mjs +58 -0
- package/fjs/types/object/proof.f.d.mts +25 -0
- package/fjs/types/object/proof.f.mjs +26 -0
- package/fjs/types/object/types.d.ts +50 -0
- package/fjs/types/object/types.js +8 -0
- package/fjs/types/ordered_map/module.f.d.mts +21 -0
- package/fjs/types/ordered_map/module.f.mjs +54 -0
- package/fjs/types/ordered_map/proof.f.mjs +88 -0
- package/fjs/types/ordered_map/types.d.ts +8 -0
- package/fjs/types/ordered_map/types.js +6 -0
- package/fjs/types/patricia_trie/module.f.d.mts +19 -0
- package/fjs/types/patricia_trie/module.f.mjs +43 -0
- package/fjs/types/patricia_trie/proof.f.d.mts +14 -0
- package/fjs/types/patricia_trie/proof.f.mjs +148 -0
- package/fjs/types/patricia_trie/types.d.ts +34 -0
- package/fjs/types/patricia_trie/types.js +6 -0
- package/fjs/types/prime_field/module.f.d.mts +42 -0
- package/fjs/types/prime_field/module.f.mjs +136 -0
- package/fjs/types/prime_field/proof.f.mjs +131 -0
- package/fjs/types/prime_field/types.d.ts +38 -0
- package/fjs/types/prime_field/types.js +6 -0
- package/fjs/types/range/module.f.d.mts +11 -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/types.js +6 -0
- package/fjs/types/range_map/module.f.d.mts +72 -0
- package/fjs/types/range_map/module.f.mjs +130 -0
- package/fjs/types/range_map/proof.f.d.mts +7 -0
- package/fjs/types/range_map/proof.f.mjs +186 -0
- package/fjs/types/range_map/types.d.ts +56 -0
- package/fjs/types/range_map/types.js +6 -0
- package/fjs/types/range_set/module.f.d.mts +5 -0
- package/fjs/types/range_set/module.f.mjs +19 -0
- package/fjs/types/range_set/proof.f.mjs +26 -0
- package/fjs/types/result/module.d.mts +5 -0
- package/fjs/types/result/module.f.d.mts +59 -0
- package/fjs/types/result/module.f.mjs +67 -0
- package/fjs/types/result/module.mjs +22 -0
- package/fjs/types/result/proof.f.mjs +41 -0
- package/fjs/types/result/types.d.ts +17 -0
- package/fjs/types/result/types.js +6 -0
- package/fjs/types/rtti/common/module.f.d.mts +86 -0
- package/fjs/types/rtti/common/module.f.mjs +183 -0
- package/fjs/types/rtti/common/proof.f.d.mts +9 -0
- package/fjs/types/rtti/common/proof.f.mjs +64 -0
- package/fjs/types/rtti/common/types.d.ts +43 -0
- package/fjs/types/rtti/common/types.js +1 -0
- package/fjs/types/rtti/module.f.d.mts +76 -0
- package/fjs/types/rtti/module.f.mjs +110 -0
- package/fjs/types/rtti/parse/module.f.d.mts +9 -0
- package/fjs/types/rtti/parse/module.f.mjs +196 -0
- package/fjs/types/rtti/parse/proof.f.d.mts +122 -0
- package/fjs/types/rtti/parse/proof.f.mjs +363 -0
- package/fjs/types/rtti/parse/types.d.ts +12 -0
- package/fjs/types/rtti/parse/types.js +1 -0
- package/fjs/types/rtti/proof.f.d.mts +8 -0
- package/fjs/types/rtti/proof.f.mjs +20 -0
- package/fjs/types/rtti/ts/module.f.d.mts +34 -0
- package/fjs/types/rtti/ts/module.f.mjs +64 -0
- package/fjs/types/rtti/ts/proof.f.mjs +88 -0
- package/fjs/types/rtti/ts/types.d.ts +88 -0
- package/fjs/types/rtti/ts/types.js +1 -0
- package/fjs/types/rtti/types.d.ts +43 -0
- package/fjs/types/rtti/types.js +1 -0
- package/fjs/types/rtti/validate/module.f.d.mts +6 -0
- package/fjs/types/rtti/validate/module.f.mjs +169 -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/rtti/validate/types.js +1 -0
- package/fjs/types/sorted_list/module.f.d.mts +43 -0
- package/fjs/types/sorted_list/module.f.mjs +110 -0
- package/fjs/types/sorted_list/proof.f.d.mts +5 -0
- package/fjs/types/sorted_list/proof.f.mjs +52 -0
- package/fjs/types/sorted_list/types.d.ts +15 -0
- package/fjs/types/sorted_list/types.js +6 -0
- package/fjs/types/sorted_set/module.f.d.mts +24 -0
- package/fjs/types/sorted_set/module.f.mjs +56 -0
- package/fjs/types/sorted_set/proof.f.d.mts +7 -0
- package/fjs/types/sorted_set/proof.f.mjs +77 -0
- package/fjs/types/sorted_set/types.d.ts +6 -0
- package/fjs/types/sorted_set/types.js +6 -0
- package/fjs/types/string/module.f.d.mts +36 -0
- package/fjs/types/string/module.f.mjs +58 -0
- package/fjs/types/string/proof.f.mjs +76 -0
- package/fjs/types/string_set/module.f.d.mts +37 -0
- package/fjs/types/string_set/module.f.mjs +53 -0
- package/fjs/types/string_set/proof.f.mjs +46 -0
- package/fjs/types/string_set/types.d.ts +7 -0
- package/fjs/types/string_set/types.js +6 -0
- package/fjs/types/ts/module.f.d.mts +20 -0
- package/fjs/types/ts/module.f.mjs +51 -0
- package/fjs/types/ts/proof.f.mjs +97 -0
- package/fjs/types/ts/types.d.ts +16 -0
- package/fjs/types/ts/types.js +8 -0
- package/fjs/types/uint8array/module.f.d.mts +31 -0
- package/fjs/types/uint8array/module.f.mjs +53 -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 +8 -0
- package/fjs/website/module.f.mjs +24 -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.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.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.js +0 -556
- 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.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.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/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/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.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.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.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.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.js +0 -213
- 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.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.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.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.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.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.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.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.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.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.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.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/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.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/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.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.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.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.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.js +0 -241
- package/todo/proof.f.d.ts +0 -20
- package/todo/proof.f.js +0 -62
- /package/fjs/asn.1/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/asserts/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /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/{todo/031-json.f.d.ts → fjs/ci/common/types.js} +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/parser/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/djs/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/djs/serializer/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/djs/tokenizer/{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/effects/node/memory/{proof.d.ts → proof.d.mts} +0 -0
- /package/fjs/fsc/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/fsm/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/media/html/{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/media/nix/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/media/revision/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/media/type/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/{module.d.ts → module.d.mts} +0 -0
- /package/fjs/path/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/protocol/json_rpc/{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/sul/level/literal/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/text/ascii/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/text/code_point/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/text/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/text/sgr/{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/types/bigfloat/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/types/bit_vec/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/types/btree/remove/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/types/btree/set/{proof.f.d.ts → proof.f.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/types/nullable/{proof.f.d.ts → 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/option/{module.f.js → types.js} +0 -0
- /package/fjs/types/ordered_map/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/types/phantom/{module.f.d.ts → types.d.ts} +0 -0
- /package/fjs/types/phantom/{module.f.js → types.js} +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/{range/proof.f.d.ts → range_set/proof.f.d.mts} +0 -0
- /package/fjs/types/result/{proof.f.d.ts → proof.f.d.mts} +0 -0
- /package/fjs/types/rtti/ts/{proof.f.d.ts → 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/types/ts/{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,556 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evo API: subjects and revision heads, cached in memory over an immutable
|
|
3
|
+
* content-addressable store.
|
|
4
|
+
*
|
|
5
|
+
* A `Cas<O>` stores `vnd.fjs.revision` blobs ([`fjs/media/revision`](../../media/revision/module.f.mjs))
|
|
6
|
+
* like any other content: as immutable bytes under a hash. Resolving "what
|
|
7
|
+
* are the current heads of subject X" from that store means walking every
|
|
8
|
+
* stored revision and reversing the parent links — too expensive to redo on
|
|
9
|
+
* every query. This module scans the store once into an in-memory `Cache`
|
|
10
|
+
* ([`fjs/effects/memory`](../../effects/memory/module.f.mjs)) mapping subject →
|
|
11
|
+
* head hashes, then keeps the cache current as new revisions are `add`ed
|
|
12
|
+
* through it — or, for a revision stored some other way (e.g. the generic
|
|
13
|
+
* `cas_add` MCP tool), via {@link syncRevision}.
|
|
14
|
+
*
|
|
15
|
+
* A **head** of a subject is any stored revision of that subject whose hash
|
|
16
|
+
* is not referenced as a `parents` entry by another revision of the same
|
|
17
|
+
* subject (see [`fjs/media/revision/README.md`](../../media/revision/README.md)).
|
|
18
|
+
* `Cache` therefore tracks, per subject, every revision hash seen and every
|
|
19
|
+
* hash referenced as somebody's parent; heads are the set difference between
|
|
20
|
+
* the two, computed at read time ({@link headsOf}). Alongside them it records
|
|
21
|
+
* which of the seen revisions are `archived`, so {@link Evo.list} can classify
|
|
22
|
+
* a subject as active or archived from its heads' flags
|
|
23
|
+
* ({@link subjectListed}) without touching the store. Storing both sets rather
|
|
24
|
+
* than a running head list is what makes folding revisions truly order
|
|
25
|
+
* independent: `cas.list()` (used by {@link buildCache} to scan an existing
|
|
26
|
+
* store) returns hashes in hash order, not revision ancestry, so a child can
|
|
27
|
+
* be seen before its parent — an incremental "drop this hash from the head
|
|
28
|
+
* set, then re-add whichever hash we just saw" would wrongly resurrect the
|
|
29
|
+
* parent as a head once it is scanned after its child. Tracking the two sets
|
|
30
|
+
* separately and only subtracting at read time has no such ordering
|
|
31
|
+
* dependency: whichever order revisions are folded in, `hashes − parents`
|
|
32
|
+
* converges to the same result. {@link buildCache} and {@link addRevision}
|
|
33
|
+
* both fold through the same {@link addRevisionToCache}, the former over the
|
|
34
|
+
* whole store at once, the latter incrementally for one new revision.
|
|
35
|
+
*
|
|
36
|
+
* Not everything here is cache-backed: {@link readRevision} answers "what is
|
|
37
|
+
* the revision at this hash" straight from the store, decoded, validated, and
|
|
38
|
+
* with every hash canonicalized ({@link toRevisionData}). It is the typed
|
|
39
|
+
* counterpart of a raw blob read — {@link addRevision} validates on the way
|
|
40
|
+
* in, {@link readRevision} on the way out — and both speak the same
|
|
41
|
+
* {@link RevisionData} vocabulary.
|
|
42
|
+
*
|
|
43
|
+
* @module
|
|
44
|
+
*
|
|
45
|
+
* @import { Effect, Operation } from '../../effects/types.ts'
|
|
46
|
+
* @import { Key, MemOp } from '../../effects/memory/types.ts'
|
|
47
|
+
* @import { Cas } from '../types.ts'
|
|
48
|
+
* @import { Ok, Result } from '../../types/result/types.ts'
|
|
49
|
+
* @import { Vec } from '../../types/bit_vec/types.ts'
|
|
50
|
+
* @import { IoResult } from '../../effects/node/types.ts'
|
|
51
|
+
* @import { List } from '../../effects/list/types.ts'
|
|
52
|
+
* @import { LockMap, Revision } from '../../media/revision/types.ts'
|
|
53
|
+
* @import { Hash, Subject, RevisionData, SubjectState, Cache, Evo } from './types.ts'
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
import { pure, foldStep } from '../../effects/module.f.mjs'
|
|
57
|
+
import { eff } from '../../effects/eff/module.f.mjs'
|
|
58
|
+
import { create, read, write } from '../../effects/memory/module.f.mjs'
|
|
59
|
+
import { collectRead } from '../module.f.mjs'
|
|
60
|
+
import { cBase32ToVec, vecToCBase32 } from '../../basen/cbase32/module.f.mjs'
|
|
61
|
+
import { fromVec } from '../../text/utf8/module.f.mjs'
|
|
62
|
+
import { tryUtf8 } from '../../text/module.f.mjs'
|
|
63
|
+
import { ok, error } from '../../types/result/module.f.mjs'
|
|
64
|
+
import { nonEmpty, empty as elEmpty } from '../../effects/list/module.f.mjs'
|
|
65
|
+
import { at, definedEntries } from '../../types/object/module.f.mjs'
|
|
66
|
+
import { unwrap } from '../../types/nullable/module.f.mjs'
|
|
67
|
+
import { isNotFound } from '../../effects/node/module.f.mjs'
|
|
68
|
+
import { decodeText, encodeText, dialect, checkReferences, isHash } from '../../media/revision/module.f.mjs'
|
|
69
|
+
|
|
70
|
+
/** A cache with no known subjects yet — the starting point for {@link buildCache}. */
|
|
71
|
+
export const emptyCache = /** @type {Cache} */ ({ bySubject: {} })
|
|
72
|
+
|
|
73
|
+
/** @type {SubjectState} */
|
|
74
|
+
const emptySubjectState = { hashes: [], parents: [], archived: [] }
|
|
75
|
+
|
|
76
|
+
/** Adds every item of `items` to `set` that isn't already there, preserving `set`'s existing order.
|
|
77
|
+
* @type {(set: readonly Hash[]) => (items: readonly Hash[]) => readonly Hash[]}
|
|
78
|
+
*/
|
|
79
|
+
const union = set => items =>
|
|
80
|
+
items.reduce((/** @type {readonly Hash[]} */ acc, h) => acc.includes(h) ? acc : [...acc, h], set)
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Re-encodes `h` in its canonical cBase32 spelling. `cBase32ToVec` accepts
|
|
84
|
+
* more than one spelling of the same hash (e.g. case, or alphabet aliases),
|
|
85
|
+
* but {@link headsOf} compares hash strings directly, so a parent reference
|
|
86
|
+
* recorded in a non-canonical spelling would never match the canonical
|
|
87
|
+
* spelling a revision's own hash is always recorded under ({@link
|
|
88
|
+
* addRevisionToCache}'s `hash` parameter is always produced by
|
|
89
|
+
* `vecToCBase32`) — silently keeping a demoted revision listed as a head.
|
|
90
|
+
* Every caller of this module reaches {@link addRevisionToCache} only with a
|
|
91
|
+
* `revision` whose `parents` already passed `isHash`
|
|
92
|
+
* (`fjs/media/revision` `checkReferences`), so decoding here cannot fail.
|
|
93
|
+
* @type {(h: Hash) => Hash}
|
|
94
|
+
*/
|
|
95
|
+
const canonicalHash = h => vecToCBase32(unwrap(cBase32ToVec(h)))
|
|
96
|
+
|
|
97
|
+
/** Canonicalizes every direct hash in a structurally validated flat lock map.
|
|
98
|
+
* @type {(lock: LockMap) => LockMap}
|
|
99
|
+
*/
|
|
100
|
+
const canonicalLock = lock =>
|
|
101
|
+
Object.fromEntries(definedEntries(lock).map(([subject, hash]) => [subject, canonicalHash(hash)]))
|
|
102
|
+
|
|
103
|
+
/** A subject's current heads: revision hashes seen that no other revision of the same subject names as a parent.
|
|
104
|
+
* @type {(state: SubjectState) => readonly Hash[]}
|
|
105
|
+
*/
|
|
106
|
+
const headsOf = state =>
|
|
107
|
+
state.hashes.filter(h => !state.parents.includes(h))
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Whether a subject in `state` belongs in {@link Evo.list}'s result for the
|
|
111
|
+
* given `archived` filter — the subject-level status derived from its
|
|
112
|
+
* revision-level `archived` flags:
|
|
113
|
+
*
|
|
114
|
+
* - **active** — at least one current head is not archived. This is the
|
|
115
|
+
* default result set (`archived` omitted).
|
|
116
|
+
* - **archived** — the subject has at least one current head and every one of
|
|
117
|
+
* them is archived (`archived: true`).
|
|
118
|
+
*
|
|
119
|
+
* Concurrent heads can disagree, and the two rules resolve that the same way:
|
|
120
|
+
* one unarchived head keeps the whole subject active, because a subject is
|
|
121
|
+
* only done evolving when nothing left to build on remains. A subject with no
|
|
122
|
+
* current heads is neither active nor archived and appears in no result — the
|
|
123
|
+
* status is a statement about heads, and there is nothing to state. That case
|
|
124
|
+
* needs the explicit `heads.length` test only in the archived branch, since
|
|
125
|
+
* "every head is archived" is vacuously true of no heads at all.
|
|
126
|
+
* @type {(archived: true | undefined) => (state: SubjectState) => boolean}
|
|
127
|
+
*/
|
|
128
|
+
const subjectListed = archived => state => {
|
|
129
|
+
const heads = headsOf(state)
|
|
130
|
+
const unarchived = heads.filter(h => !state.archived.includes(h))
|
|
131
|
+
return archived === undefined
|
|
132
|
+
? unarchived.length !== 0
|
|
133
|
+
: heads.length !== 0 && unarchived.length === 0
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Folds one more stored revision into `cache`: `hash` joins its subject's
|
|
138
|
+
* `hashes` set, `revision.parents` (canonicalized, see {@link canonicalHash})
|
|
139
|
+
* join its `parents` set, and `hash` also joins the `archived` set when the
|
|
140
|
+
* revision carries `archived: true`. Order independent (see the module doc) —
|
|
141
|
+
* used both for a full-store scan and for a single incremental `add`.
|
|
142
|
+
*
|
|
143
|
+
* Looks `revision.subject` up via {@link at} (own-property only), not plain
|
|
144
|
+
* bracket indexing: a subject is an arbitrary caller-supplied string
|
|
145
|
+
* (`RevisionData.subject`, or the MCP `evo_add`/`evo_head` argument), so it
|
|
146
|
+
* can collide with an inherited `Object.prototype` name (`toString`,
|
|
147
|
+
* `constructor`, …) — bracket indexing would then return that inherited
|
|
148
|
+
* value instead of "no entry yet" and crash on the (non-array) `.hashes`
|
|
149
|
+
* access below.
|
|
150
|
+
* @type {(hash: Hash, revision: Revision) => (cache: Cache) => Cache}
|
|
151
|
+
*/
|
|
152
|
+
const addRevisionToCache = (hash, revision) => cache => {
|
|
153
|
+
const existing = at(revision.subject)(cache.bySubject) ?? emptySubjectState
|
|
154
|
+
/** @type {SubjectState} */
|
|
155
|
+
const state = {
|
|
156
|
+
hashes: union(existing.hashes)([hash]),
|
|
157
|
+
parents: union(existing.parents)(revision.parents.map(canonicalHash)),
|
|
158
|
+
archived: union(existing.archived)(revision.archived === undefined ? [] : [hash]),
|
|
159
|
+
}
|
|
160
|
+
return { bySubject: { ...cache.bySubject, [revision.subject]: state } }
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Decodes already-read bytes as a `vnd.fjs.revision`. Returns `null` for
|
|
165
|
+
* anything that is not a valid revision — bytes that are not valid UTF-8, or
|
|
166
|
+
* text that does not parse/validate as the dialect.
|
|
167
|
+
* @type {(value: Vec) => Revision | null}
|
|
168
|
+
*/
|
|
169
|
+
export const decodeRevisionVec = value => {
|
|
170
|
+
const text = fromVec(value)
|
|
171
|
+
if (text === null) { return null }
|
|
172
|
+
const [decodeTag, revision] = decodeText(text)
|
|
173
|
+
return decodeTag === 'error' ? null : revision
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Reads and decodes the blob at `hash` as a `vnd.fjs.revision`. Returns
|
|
178
|
+
* `null` for anything that is not a valid revision — a missing hash, or (via
|
|
179
|
+
* {@link decodeRevisionVec}) bytes that are not valid UTF-8 or do not
|
|
180
|
+
* parse/validate as the dialect — so a store containing arbitrary other
|
|
181
|
+
* content can be scanned without failing the whole cache build.
|
|
182
|
+
*
|
|
183
|
+
* @template {Operation} O
|
|
184
|
+
* @param {Cas<O>} cas
|
|
185
|
+
* @returns {(hash: Vec) => Effect<O, Revision | null>}
|
|
186
|
+
*/
|
|
187
|
+
export const decodeRevisionBlob = cas => hash =>
|
|
188
|
+
eff(collectRead(cas.read(hash)))
|
|
189
|
+
.map(([tag, value]) => tag === 'error' ? null : decodeRevisionVec(value))
|
|
190
|
+
.value
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Scans every hash in `cas` and builds a fresh {@link Cache} from the
|
|
194
|
+
* `vnd.fjs.revision` blobs found among them. Non-revision blobs are ignored.
|
|
195
|
+
*
|
|
196
|
+
* @template {Operation} O
|
|
197
|
+
* @param {Cas<O>} cas
|
|
198
|
+
* @returns {Effect<O, Cache>}
|
|
199
|
+
*/
|
|
200
|
+
export const buildCache = cas =>
|
|
201
|
+
foldStep(
|
|
202
|
+
cas.list(),
|
|
203
|
+
emptyCache,
|
|
204
|
+
hash => cache =>
|
|
205
|
+
eff(decodeRevisionBlob(cas)(hash))
|
|
206
|
+
.step(revision =>
|
|
207
|
+
pure(revision === null ? cache : addRevisionToCache(vecToCBase32(hash), revision)(cache))
|
|
208
|
+
)
|
|
209
|
+
.value)
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Scans `cas` once and allocates a memory slot holding the resulting {@link Cache}.
|
|
213
|
+
*
|
|
214
|
+
* @template {Operation} O
|
|
215
|
+
* @param {Cas<O>} cas
|
|
216
|
+
* @returns {Effect<O | MemOp, Key<Cache>>}
|
|
217
|
+
*/
|
|
218
|
+
export const initEvo = cas =>
|
|
219
|
+
eff(buildCache(cas))
|
|
220
|
+
.step(cache => create(cache))
|
|
221
|
+
.value
|
|
222
|
+
|
|
223
|
+
/** Reads, then rewrites, the cache at `cacheKey` with `revision` folded in at `hash`.
|
|
224
|
+
* @type {(cacheKey: Key<Cache>) => (hash: Hash) => (revision: Revision) => Effect<MemOp, void>}
|
|
225
|
+
*/
|
|
226
|
+
const foldIntoCache = cacheKey => hash => revision =>
|
|
227
|
+
eff(read(cacheKey))
|
|
228
|
+
.step(cache => write(cacheKey, addRevisionToCache(hash, revision)(cache)))
|
|
229
|
+
.value
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Folds `value` — bytes already written to a `Cas` at `hash` by some other
|
|
233
|
+
* caller — into the cache at `cacheKey` if it decodes as a `vnd.fjs.revision`
|
|
234
|
+
* ({@link decodeRevisionVec}); a no-op otherwise. `cas_add`/`evo_add`
|
|
235
|
+
* (`fjs/mcp`) are two ways to reach the same store — a plain `cas_add`
|
|
236
|
+
* call can store a revision blob without going through {@link addRevision},
|
|
237
|
+
* and this is what keeps the cache honest about it without rescanning the
|
|
238
|
+
* whole store.
|
|
239
|
+
* @type {(cacheKey: Key<Cache>) => (hash: Vec) => (value: Vec) => Effect<MemOp, void>}
|
|
240
|
+
*/
|
|
241
|
+
export const syncRevision = cacheKey => hash => value => {
|
|
242
|
+
const revision = decodeRevisionVec(value)
|
|
243
|
+
return revision === null ? pure(undefined) : foldIntoCache(cacheKey)(vecToCBase32(hash))(revision)
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Resolves and validates one `parents` entry: the hash must decode as
|
|
248
|
+
* cBase32 and the blob it names must itself be a `vnd.fjs.revision`. Used
|
|
249
|
+
* unconditionally for every parent — even when `subject` is given explicitly
|
|
250
|
+
* — so `add` never stores a revision whose declared parent is missing or not
|
|
251
|
+
* a revision.
|
|
252
|
+
*
|
|
253
|
+
* @template {Operation} O
|
|
254
|
+
* @param {Cas<O>} cas
|
|
255
|
+
* @returns {(parentRef: Hash) => Effect<O, Result<Revision, string>>}
|
|
256
|
+
*/
|
|
257
|
+
const resolveParent = cas => parentRef => {
|
|
258
|
+
const parentHash = cBase32ToVec(parentRef)
|
|
259
|
+
if (parentHash === null) {
|
|
260
|
+
return pure(error(`invalid parent hash: ${parentRef}`))
|
|
261
|
+
}
|
|
262
|
+
return eff(decodeRevisionBlob(cas)(parentHash))
|
|
263
|
+
.step(parent =>
|
|
264
|
+
pure(parent === null ? error(`parent is not a revision blob: ${parentRef}`) : ok(parent))
|
|
265
|
+
)
|
|
266
|
+
.value
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Resolves and validates every entry of `parents`, in order, short-circuiting on the first failure.
|
|
271
|
+
*
|
|
272
|
+
* @template {Operation} O
|
|
273
|
+
* @param {Cas<O>} cas
|
|
274
|
+
* @returns {(parents: readonly Hash[]) => Effect<O, Result<readonly Revision[], string>>}
|
|
275
|
+
*/
|
|
276
|
+
const resolveParents = cas => parents => {
|
|
277
|
+
/** @type {Result<readonly Revision[], string>} */
|
|
278
|
+
const init = ok([])
|
|
279
|
+
return foldStep(
|
|
280
|
+
pure(parents),
|
|
281
|
+
init,
|
|
282
|
+
parentRef => (/** @type {Result<readonly Revision[], string>} */ acc) => {
|
|
283
|
+
if (acc[0] === 'error') { return pure(acc) }
|
|
284
|
+
return eff(resolveParent(cas)(parentRef))
|
|
285
|
+
.step((/** @type {Result<Revision, string>} */ parentResult) =>
|
|
286
|
+
/** @type {Effect<never, Result<readonly Revision[], string>>} */
|
|
287
|
+
(pure(parentResult[0] === 'error' ? parentResult : ok([...acc[1], parentResult[1]])))
|
|
288
|
+
)
|
|
289
|
+
.value
|
|
290
|
+
})
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Resolves the `subject` of a new revision from its already-resolved
|
|
295
|
+
* `parents`: the caller's explicit `subject` when given, otherwise the
|
|
296
|
+
* single parent's own `subject` (a revision does not carry its own
|
|
297
|
+
* subject-inheritance rule the way `snapshot` does, so this is derived
|
|
298
|
+
* explicitly). More or fewer than one parent without an explicit `subject`
|
|
299
|
+
* cannot be resolved.
|
|
300
|
+
* @type {(input: RevisionData) => (parents: readonly Revision[]) => Result<Subject, string>}
|
|
301
|
+
*/
|
|
302
|
+
const resolveSubject = input => parents => {
|
|
303
|
+
if (input.subject !== undefined) { return ok(input.subject) }
|
|
304
|
+
if (parents.length !== 1) {
|
|
305
|
+
return error('subject is required unless there is exactly one parent to inherit it from')
|
|
306
|
+
}
|
|
307
|
+
return ok(parents[0].subject)
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Checks that every already-resolved parent belongs to `subject`. A revision
|
|
312
|
+
* models one step in the evolution of a single mutable object, so a parent
|
|
313
|
+
* from a different subject would silently graft the new revision (and any
|
|
314
|
+
* inherited `snapshot`) onto an unrelated object's history; head demotion is
|
|
315
|
+
* also scoped to `revision.subject` ({@link addRevisionToCache}), so a
|
|
316
|
+
* cross-subject parent would never even leave its own subject's head set —
|
|
317
|
+
* this must be rejected rather than merely producing a head mismatch later.
|
|
318
|
+
* @type {(subject: Subject) => (parents: readonly Revision[]) => Result<void, string>}
|
|
319
|
+
*/
|
|
320
|
+
const validateParentSubjects = subject => parents => {
|
|
321
|
+
const mismatch = parents.find(p => p.subject !== subject)
|
|
322
|
+
return mismatch === undefined
|
|
323
|
+
? ok(undefined)
|
|
324
|
+
: error(`parent belongs to a different subject (${mismatch.subject}), expected ${subject}`)
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Resolves the `snapshot` of a new revision — the inference the
|
|
329
|
+
* `vnd.fjs.revision` format used to carry, now run once at the write boundary
|
|
330
|
+
* with the parents already resolved and written explicitly into the stored
|
|
331
|
+
* blob (which requires `snapshot`; see `fjs/media/revision`). The caller's
|
|
332
|
+
* explicit `snapshot` is used as-is when given; otherwise zero parents fall
|
|
333
|
+
* back to `subject` as the snapshot reference (which must then be a hash),
|
|
334
|
+
* exactly one parent inherits that parent's stored `snapshot`, and more than
|
|
335
|
+
* one parent without an explicit `snapshot` cannot be resolved — there is no
|
|
336
|
+
* single parent snapshot to inherit, and falling back to `subject` would
|
|
337
|
+
* silently lose the merge result.
|
|
338
|
+
* @type {(input: RevisionData) => (subject: Subject) => (parents: readonly Revision[]) => Result<Hash, string>}
|
|
339
|
+
*/
|
|
340
|
+
const resolveSnapshot = input => subject => parents => {
|
|
341
|
+
if (input.snapshot !== undefined) { return ok(input.snapshot) }
|
|
342
|
+
if (parents.length === 0) {
|
|
343
|
+
return isHash(subject)
|
|
344
|
+
? ok(subject)
|
|
345
|
+
: error(`subject must be a valid hash when snapshot is omitted and there are no parents: ${subject}`)
|
|
346
|
+
}
|
|
347
|
+
if (parents.length === 1) { return ok(parents[0].snapshot) }
|
|
348
|
+
return error('snapshot is required when a revision has more than one parent')
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* The authoritative `generation` of a new revision: `0` for a root
|
|
353
|
+
* (`parents: []`), else `1 + max(parents' generations)`. Computed here from
|
|
354
|
+
* the already-decoded parents, never taken from input — everything evo writes
|
|
355
|
+
* follows the formula by construction (see the `generation` semantics in
|
|
356
|
+
* [`fjs/media/revision/README.md`](../../media/revision/README.md), where a
|
|
357
|
+
* deviation is a readable epoch-reset signal rather than an invalid blob).
|
|
358
|
+
*
|
|
359
|
+
* The max is a `reduce`, not `Math.max(...parents.map(...))`: `parents` is
|
|
360
|
+
* caller-sized (the direct API or the `evo_add` MCP tool), and argument-spread
|
|
361
|
+
* of a large array overflows the JS call stack with a `RangeError` before the
|
|
362
|
+
* documented `Result` error path can run — a `reduce` has no such limit.
|
|
363
|
+
* @type {(parents: readonly Revision[]) => number}
|
|
364
|
+
*/
|
|
365
|
+
const computeGeneration = parents =>
|
|
366
|
+
parents.length === 0 ? 0 : 1 + parents.reduce((max, p) => Math.max(max, p.generation), 0)
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Adds a new revision to `cas` and folds it into the cache at `cacheKey`.
|
|
370
|
+
*
|
|
371
|
+
* Steps: resolve and validate every parent ({@link resolveParents}), resolve
|
|
372
|
+
* `subject` from them ({@link resolveSubject}) and check every parent
|
|
373
|
+
* actually belongs to it ({@link validateParentSubjects}), resolve `snapshot`
|
|
374
|
+
* ({@link resolveSnapshot}) and compute `generation`
|
|
375
|
+
* ({@link computeGeneration}), assemble a `Revision` and check its hash /
|
|
376
|
+
* generation semantics (`fjs/media/revision` `checkReferences` — the same rule
|
|
377
|
+
* a reader applies; the shape itself is already guaranteed by this function's
|
|
378
|
+
* own field types), encode and write it to `cas`, then fold the new revision
|
|
379
|
+
* into the cache. Every failure — an invalid or missing parent, a
|
|
380
|
+
* cross-subject parent, an unresolvable subject or snapshot, an invalid
|
|
381
|
+
* revision, a blob too large to encode, or a store write failure — is
|
|
382
|
+
* reported as `error(message)` rather than thrown, so a caller (e.g. an MCP
|
|
383
|
+
* tool handler) can surface it without a `throw`/`catch`.
|
|
384
|
+
*
|
|
385
|
+
* `input.generation` is ignored: it exists on {@link RevisionData} only so a
|
|
386
|
+
* value read back by {@link readRevision} round-trips into `add` unchanged,
|
|
387
|
+
* and {@link computeGeneration} always derives the stored value from the
|
|
388
|
+
* resolved parents.
|
|
389
|
+
*
|
|
390
|
+
* @template {Operation} O
|
|
391
|
+
* @param {Cas<O>} cas
|
|
392
|
+
* @returns {(cacheKey: Key<Cache>) => (input: RevisionData) => Effect<O | MemOp, Result<Hash, string>>}
|
|
393
|
+
*/
|
|
394
|
+
export const addRevision = cas => cacheKey => input =>
|
|
395
|
+
eff(resolveParents(cas)(input.parents))
|
|
396
|
+
.step((/** @type {Result<readonly Revision[], string>} */ parentsResult) => {
|
|
397
|
+
if (parentsResult[0] === 'error') { return pure(parentsResult) }
|
|
398
|
+
const subjectResult = resolveSubject(input)(parentsResult[1])
|
|
399
|
+
if (subjectResult[0] === 'error') { return pure(subjectResult) }
|
|
400
|
+
const parentSubjectsResult = validateParentSubjects(subjectResult[1])(parentsResult[1])
|
|
401
|
+
if (parentSubjectsResult[0] === 'error') { return pure(parentSubjectsResult) }
|
|
402
|
+
const snapshotResult = resolveSnapshot(input)(subjectResult[1])(parentsResult[1])
|
|
403
|
+
if (snapshotResult[0] === 'error') { return pure(snapshotResult) }
|
|
404
|
+
/** @type {Revision} */
|
|
405
|
+
const revision = {
|
|
406
|
+
dialect,
|
|
407
|
+
subject: subjectResult[1],
|
|
408
|
+
parents: input.parents,
|
|
409
|
+
snapshot: snapshotResult[1],
|
|
410
|
+
generation: computeGeneration(parentsResult[1]),
|
|
411
|
+
archived: input.archived,
|
|
412
|
+
lock: input.lock,
|
|
413
|
+
}
|
|
414
|
+
const referencesResult = checkReferences(revision)
|
|
415
|
+
if (referencesResult[0] === 'error') { return pure(referencesResult) }
|
|
416
|
+
// Canonicalize parent/snapshot spellings now that checkReferences has
|
|
417
|
+
// confirmed they decode (`unwrap` inside `canonicalHash` is safe):
|
|
418
|
+
// two `add` calls describing the same logical revision but spelled
|
|
419
|
+
// differently (case, `i`/`l`/`o` aliases) must serialize identically,
|
|
420
|
+
// or they'd produce two distinct CAS blobs that both remain heads —
|
|
421
|
+
// the point of `canonicalHash` (see the module doc) is defeated if
|
|
422
|
+
// this module itself writes non-canonical spellings.
|
|
423
|
+
/** @type {Revision} */
|
|
424
|
+
const canonicalRevision = {
|
|
425
|
+
...revision,
|
|
426
|
+
parents: revision.parents.map(canonicalHash),
|
|
427
|
+
snapshot: canonicalHash(revision.snapshot),
|
|
428
|
+
lock: revision.lock === undefined ? undefined : canonicalLock(revision.lock),
|
|
429
|
+
}
|
|
430
|
+
const bytes = tryUtf8(encodeText(canonicalRevision))
|
|
431
|
+
if (bytes === null) {
|
|
432
|
+
return pure(error('revision too large to encode'))
|
|
433
|
+
}
|
|
434
|
+
return eff(cas.write(nonEmpty(ok(bytes), /** @type {List<never, Ok<Vec>>} */ (elEmpty()))))
|
|
435
|
+
.step((/** @type {IoResult<Vec>} */ writeResult) => {
|
|
436
|
+
if (writeResult[0] === 'error') {
|
|
437
|
+
return /** @type {Effect<MemOp, Result<Hash, string>>} */ (pure(error('failed to write revision to CAS')))
|
|
438
|
+
}
|
|
439
|
+
const hash = vecToCBase32(writeResult[1])
|
|
440
|
+
return eff(foldIntoCache(cacheKey)(hash)(canonicalRevision))
|
|
441
|
+
.step(() => pure(ok(hash)))
|
|
442
|
+
.value
|
|
443
|
+
})
|
|
444
|
+
.value
|
|
445
|
+
})
|
|
446
|
+
.value
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* Projects a decoded `Revision` into the shared {@link RevisionData}
|
|
450
|
+
* vocabulary: `dialect` is dropped (a serialization tag with no information
|
|
451
|
+
* left once decoding has validated it), and every hash is re-spelled
|
|
452
|
+
* canonically ({@link canonicalHash}) so a read compares directly against
|
|
453
|
+
* {@link Evo.head}'s output instead of against whatever spelling the blob's
|
|
454
|
+
* writer happened to use. `checkReferences` ran as part of decoding, so every
|
|
455
|
+
* `parents` entry and the `snapshot` are known to decode and the `unwrap`
|
|
456
|
+
* inside `canonicalHash` is safe. Field order follows the stored blob's
|
|
457
|
+
* (minus `dialect`), which is what a JSON encoding of the result shows.
|
|
458
|
+
* @type {(revision: Revision) => RevisionData}
|
|
459
|
+
*/
|
|
460
|
+
const toRevisionData = ({ subject, parents, snapshot, generation, archived, lock }) => ({
|
|
461
|
+
subject,
|
|
462
|
+
parents: parents.map(canonicalHash),
|
|
463
|
+
snapshot: canonicalHash(snapshot),
|
|
464
|
+
generation,
|
|
465
|
+
archived,
|
|
466
|
+
lock: lock === undefined ? undefined : canonicalLock(lock),
|
|
467
|
+
})
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* Second stage of {@link readRevision}: interprets an already-performed read
|
|
471
|
+
* of `hash`. Kept apart from the read itself so the failures stay
|
|
472
|
+
* distinguishable — "not present in the store" and "present but not a
|
|
473
|
+
* revision" are different answers to a client, and
|
|
474
|
+
* {@link decodeRevisionBlob}, which composes the same two stages internally,
|
|
475
|
+
* deliberately collapses both into `null` for store scanning.
|
|
476
|
+
*
|
|
477
|
+
* A failed read is only reported as *not found* when it is a genuine miss —
|
|
478
|
+
* `isNotFound`, the same ENOENT test `fjs/cas`'s `list` uses to tell an
|
|
479
|
+
* unwritten store from an unreadable one. A `Cas` read can also fail on a
|
|
480
|
+
* blob that exists: a permission or mid-stream I/O error, or content too
|
|
481
|
+
* large to buffer into one `Vec` (`collectRead`). Calling any of those "not
|
|
482
|
+
* found" would deny a stored revision exists, so they are their own message.
|
|
483
|
+
*
|
|
484
|
+
* A blob deleted *during* the read lands here as a miss too, and that is the
|
|
485
|
+
* honest answer rather than a gap in the split. `fileCas` streams in chunks,
|
|
486
|
+
* so a delete between two of them fails a later chunk with ENOENT after
|
|
487
|
+
* earlier ones succeeded — but by the time this result is produced the store
|
|
488
|
+
* genuinely no longer has the blob, and the very next read says "not found"
|
|
489
|
+
* with no race left to observe. `collectRead` reports how a read ended, not
|
|
490
|
+
* how far it got; recovering that difference would mean folding the chunk
|
|
491
|
+
* stream here instead of reusing `collectRead`, for a distinction no client
|
|
492
|
+
* can act on differently.
|
|
493
|
+
* @type {(hash: Hash) => (result: IoResult<Vec>) => Result<RevisionData, string>}
|
|
494
|
+
*/
|
|
495
|
+
const decodeReadRevision = hash => ([tag, value]) => {
|
|
496
|
+
if (tag === 'error') {
|
|
497
|
+
return error(isNotFound(value)
|
|
498
|
+
? `revision not found: ${hash}`
|
|
499
|
+
: `failed to read revision: ${hash}`)
|
|
500
|
+
}
|
|
501
|
+
const revision = decodeRevisionVec(value)
|
|
502
|
+
return revision === null
|
|
503
|
+
? error(`not a revision blob: ${hash}`)
|
|
504
|
+
: ok(toRevisionData(revision))
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
* Reads the revision at `hash`: decoded, validated, and canonicalized
|
|
509
|
+
* ({@link toRevisionData}). The typed counterpart of a raw `cas.read` — the
|
|
510
|
+
* store's generic "bytes by hash" read stays available for arbitrary content
|
|
511
|
+
* (snapshots and everything else that is not a revision), while this is the
|
|
512
|
+
* view for revisions specifically: `add` validates on the way in, this
|
|
513
|
+
* validates on the way out, so no caller re-implements JSON parsing, schema
|
|
514
|
+
* validation, the `dialect` check, or hash canonicalization.
|
|
515
|
+
*
|
|
516
|
+
* Every way to fail is its own message: `hash` is not cBase32, the store has
|
|
517
|
+
* nothing under it, the store has it but could not deliver it, or what it
|
|
518
|
+
* holds is not a `vnd.fjs.revision` (see {@link decodeReadRevision}).
|
|
519
|
+
*
|
|
520
|
+
* @template {Operation} O
|
|
521
|
+
* @param {Cas<O>} cas
|
|
522
|
+
* @returns {(hash: Hash) => Effect<O, Result<RevisionData, string>>}
|
|
523
|
+
*/
|
|
524
|
+
export const readRevision = cas => hash => {
|
|
525
|
+
const hashVec = cBase32ToVec(hash)
|
|
526
|
+
return hashVec === null
|
|
527
|
+
? pure(error(`invalid hash: ${hash}`))
|
|
528
|
+
: eff(collectRead(cas.read(hashVec)))
|
|
529
|
+
.map(decodeReadRevision(hash))
|
|
530
|
+
.value
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* Builds the {@link Evo} API over `cas`, backed by the cache at `cacheKey` (see {@link initEvo}).
|
|
535
|
+
*
|
|
536
|
+
* @template {Operation} O
|
|
537
|
+
* @param {Cas<O>} cas
|
|
538
|
+
* @returns {(cacheKey: Key<Cache>) => Evo<O>}
|
|
539
|
+
*/
|
|
540
|
+
export const evo = cas => cacheKey => ({
|
|
541
|
+
list: archived => {
|
|
542
|
+
const listed = subjectListed(archived)
|
|
543
|
+
return eff(read(cacheKey))
|
|
544
|
+
.step(cache => pure(definedEntries(cache.bySubject)
|
|
545
|
+
.flatMap(([subject, state]) => listed(state) ? [subject] : [])))
|
|
546
|
+
.value
|
|
547
|
+
},
|
|
548
|
+
head: subject => eff(read(cacheKey))
|
|
549
|
+
.step(cache => {
|
|
550
|
+
const state = at(subject)(cache.bySubject)
|
|
551
|
+
return pure(state === null ? [] : headsOf(state))
|
|
552
|
+
})
|
|
553
|
+
.value,
|
|
554
|
+
add: input => addRevision(cas)(cacheKey)(input),
|
|
555
|
+
revision: readRevision(cas),
|
|
556
|
+
})
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @import { Cas } from '../types.ts'
|
|
3
|
+
* @import { Vec } from '../../types/bit_vec/types.ts'
|
|
4
|
+
* @import { Ok } from '../../types/result/types.ts'
|
|
5
|
+
* @import { IoResult } from '../../effects/node/types.ts'
|
|
6
|
+
* @import { List } from '../../effects/list/types.ts'
|
|
7
|
+
* @import { RevisionData } from './types.ts'
|
|
8
|
+
*/
|
|
9
|
+
export declare const proof: {
|
|
10
|
+
buildCacheEmptyStoreYieldsEmptyCache: () => void;
|
|
11
|
+
buildCacheSkipsNonRevisionBlob: () => void;
|
|
12
|
+
decodeRevisionBlobMissingHashIsNull: () => void;
|
|
13
|
+
decodeRevisionBlobNonUtf8IsNull: () => void;
|
|
14
|
+
decodeRevisionBlobInvalidJsonIsNull: () => void;
|
|
15
|
+
decodeRevisionBlobValidRevisionRoundTrips: () => void;
|
|
16
|
+
buildCacheIncludesScannedRevision: () => void;
|
|
17
|
+
buildCacheOrderIndependentWhenChildScannedBeforeParent: () => void;
|
|
18
|
+
buildCacheCanonicalizesNonCanonicalParentHashes: () => void;
|
|
19
|
+
addRevisionBuildsHeadsAcrossChainAndFork: () => void;
|
|
20
|
+
listPartitionsSubjectsByHeadArchivedFlag: () => void;
|
|
21
|
+
listTreatsDisagreeingHeadsAsActive: () => void;
|
|
22
|
+
listIgnoresArchivedRevisionsThatAreNoLongerHeads: () => void;
|
|
23
|
+
listExcludesSubjectWithNoCurrentHeads: () => void;
|
|
24
|
+
addRevisionIdempotentOnDuplicateContent: () => void;
|
|
25
|
+
addRevisionCanonicalizesParentSpellingBeforeSerializing: () => void;
|
|
26
|
+
addRevisionResolvesSubjectFromSingleParent: () => void;
|
|
27
|
+
addComputesGenerationAndResolvesSnapshot: () => void;
|
|
28
|
+
addComputesMergeGenerationFromMaxOfParents: () => void;
|
|
29
|
+
addIgnoresSuppliedGeneration: () => void;
|
|
30
|
+
addRevisionSubjectRequiredForZeroParents: () => void;
|
|
31
|
+
addRevisionNonHashSubjectWithoutSnapshotIsError: () => void;
|
|
32
|
+
addRevisionInvalidParentHashIsError: () => void;
|
|
33
|
+
addRevisionParentNotARevisionIsError: () => void;
|
|
34
|
+
addRevisionValidatesParentsEvenWithExplicitSubject: () => void;
|
|
35
|
+
addRevisionRejectsCrossSubjectParent: () => void;
|
|
36
|
+
addRevisionShortCircuitsOnFirstInvalidParentAmongMultiple: () => void;
|
|
37
|
+
addRevisionInvalidReferencesIsError: () => void;
|
|
38
|
+
addRevisionTooLargeToEncodeIsError: () => void;
|
|
39
|
+
addRevisionWriteFailureIsError: () => void;
|
|
40
|
+
revisionInvalidHashIsError: () => void;
|
|
41
|
+
revisionMissingHashIsError: () => void;
|
|
42
|
+
revisionReadFailureIsNotReportedAsMissing: () => void;
|
|
43
|
+
revisionNonRevisionBlobIsError: () => void;
|
|
44
|
+
revisionCanonicalizesReferenceSpellings: () => void;
|
|
45
|
+
revisionRoundTripsThroughAdd: () => void;
|
|
46
|
+
revisionLockRoundTripsAndCanonicalizes: () => void;
|
|
47
|
+
revisionAbsentAndEmptyLocksRemainDistinct: () => void;
|
|
48
|
+
revisionInvalidLockValueIsRejected: () => void;
|
|
49
|
+
equivalentLockOrdersReuseOneCasAddress: () => void;
|
|
50
|
+
syncRevisionFoldsValidRevisionIntoCache: () => void;
|
|
51
|
+
syncRevisionIgnoresNonRevisionContent: () => void;
|
|
52
|
+
evoHeadUnknownSubjectIsEmpty: () => void;
|
|
53
|
+
evoHeadUnknownPrototypeNamedSubjectIsEmpty: () => void;
|
|
54
|
+
evoAddAndHeadHandlePrototypeNamedSubject: () => void;
|
|
55
|
+
};
|