functionalscript 0.43.0 → 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.d.mts +42 -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 -222
- package/fjs/cas/evo/module.f.js +0 -454
- package/fjs/cas/evo/proof.f.d.ts +0 -43
- package/fjs/cas/evo/proof.f.js +0 -653
- 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 -86
- package/fjs/media/revision/module.f.js +0 -131
- package/fjs/media/revision/proof.f.d.ts +0 -31
- package/fjs/media/revision/proof.f.js +0 -140
- 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/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
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A minimal, checked eDSL for constructing and serializing Nix expressions.
|
|
3
|
-
*
|
|
4
|
-
* The tree deliberately models syntax rather than evaluated Nix values. String
|
|
5
|
-
* expressions are escaped double-quoted strings; the other supported forms are
|
|
6
|
-
* represented by tagged tuples.
|
|
7
|
-
*
|
|
8
|
-
* @module
|
|
9
|
-
*/
|
|
10
|
-
import { toArray } from '../../types/list/module.f.js';
|
|
11
|
-
import { concat } from '../../types/string/module.f.js';
|
|
12
|
-
import { includes } from '../../types/array/module.f.js';
|
|
13
|
-
import { digitRange, latinCapitalLetterRange, latinSmallLetterRange, range, } from '../../text/ascii/module.f.js';
|
|
14
|
-
import { fromRange, get, merge } from '../../types/range_set/module.f.js';
|
|
15
|
-
const reservedWords = [
|
|
16
|
-
'assert',
|
|
17
|
-
'else',
|
|
18
|
-
'if',
|
|
19
|
-
'in',
|
|
20
|
-
'inherit',
|
|
21
|
-
'let',
|
|
22
|
-
'or',
|
|
23
|
-
'rec',
|
|
24
|
-
'then',
|
|
25
|
-
'with',
|
|
26
|
-
];
|
|
27
|
-
const isReservedWord = includes(reservedWords);
|
|
28
|
-
const letters = merge(fromRange(latinCapitalLetterRange))(fromRange(latinSmallLetterRange));
|
|
29
|
-
const identifierInitial = toArray(merge(letters)(fromRange(range('_'))));
|
|
30
|
-
const getIdentifierInitial = get(identifierInitial);
|
|
31
|
-
const isIdentifierInitial = (character) => getIdentifierInitial(character.charCodeAt(0));
|
|
32
|
-
const identifierTrailing = toArray(merge(merge(identifierInitial)(fromRange(digitRange)))(merge(fromRange(range("'")))(fromRange(range('-')))));
|
|
33
|
-
const getIdentifierTrailing = get(identifierTrailing);
|
|
34
|
-
const isIdentifierTrailing = (character) => getIdentifierTrailing(character.charCodeAt(0));
|
|
35
|
-
const isIdentifier = (value) => {
|
|
36
|
-
const [initial, ...trailing] = value;
|
|
37
|
-
return initial !== undefined
|
|
38
|
-
&& isIdentifierInitial(initial)
|
|
39
|
-
&& trailing.every(isIdentifierTrailing)
|
|
40
|
-
&& !isReservedWord(value);
|
|
41
|
-
};
|
|
42
|
-
const indent = (level) => ' '.repeat(level);
|
|
43
|
-
const escapeQuoted = (value) => value
|
|
44
|
-
.replaceAll('\\', '\\\\')
|
|
45
|
-
.replaceAll('"', '\\"')
|
|
46
|
-
.replaceAll('${', '\\${')
|
|
47
|
-
.replaceAll('\n', '\\n')
|
|
48
|
-
.replaceAll('\r', '\\r')
|
|
49
|
-
.replaceAll('\t', '\\t');
|
|
50
|
-
const quoted = (value) => `"${escapeQuoted(value)}"`;
|
|
51
|
-
const attributeName = (value) => isIdentifier(value) ? value : quoted(value);
|
|
52
|
-
const attributePath = (path) => path.map(attributeName).join('.');
|
|
53
|
-
const escapeIndented = (value) => value
|
|
54
|
-
.replaceAll("''", "'''")
|
|
55
|
-
.replaceAll('${', "''${");
|
|
56
|
-
const protectLeadingWhitespace = (line) => {
|
|
57
|
-
const contentStart = [...line, 'x'].findIndex(character => character !== ' ' && character !== '\t');
|
|
58
|
-
const leading = line.slice(0, contentStart)
|
|
59
|
-
.replaceAll(' ', "''\\ ")
|
|
60
|
-
.replaceAll('\t', "''\\t");
|
|
61
|
-
return `${leading}${line.slice(contentStart)}`;
|
|
62
|
-
};
|
|
63
|
-
const serializeReference = ([, name, ...selection]) => isIdentifier(name)
|
|
64
|
-
? [name, ...selection.map(attributeName)].join('.')
|
|
65
|
-
: undefined;
|
|
66
|
-
const serializeReferenceChunks = (reference) => {
|
|
67
|
-
const serialized = serializeReference(reference);
|
|
68
|
-
return serialized === undefined ? undefined : [serialized];
|
|
69
|
-
};
|
|
70
|
-
const serializePattern = ([, ...names]) => names.every((name, index) => isIdentifier(name) && names.indexOf(name) === index)
|
|
71
|
-
? `{ ${[...names, '...'].join(', ')} }`
|
|
72
|
-
: undefined;
|
|
73
|
-
const joinChunks = (chunks, separator) => chunks.flatMap((chunk, index) => index === 0 ? chunk : [separator, ...chunk]);
|
|
74
|
-
const isPathPrefix = (prefix, path) => prefix.length <= path.length
|
|
75
|
-
&& prefix.every((name, index) => name === path[index]);
|
|
76
|
-
const pathsConflict = (a, b) => isPathPrefix(a, b) || isPathPrefix(b, a);
|
|
77
|
-
const bindingsCompatible = (bindings) => bindings.every(([, path], index) => bindings.slice(0, index).every(([, previous]) => !pathsConflict(path, previous)));
|
|
78
|
-
const serializeBindings = (bindings, level) => {
|
|
79
|
-
if (!bindingsCompatible(bindings)) {
|
|
80
|
-
return undefined;
|
|
81
|
-
}
|
|
82
|
-
const serialized = bindings.map(([, path, value]) => {
|
|
83
|
-
const expression = serialize(value, level);
|
|
84
|
-
return expression === undefined
|
|
85
|
-
? undefined
|
|
86
|
-
: [indent(level), attributePath(path), ' = ', ...expression, ';'];
|
|
87
|
-
});
|
|
88
|
-
const defined = serialized.flatMap(value => value === undefined ? [] : [value]);
|
|
89
|
-
return defined.length !== serialized.length
|
|
90
|
-
? undefined
|
|
91
|
-
: joinChunks(defined, '\n');
|
|
92
|
-
};
|
|
93
|
-
const serializeSet = ([, ...bindings], level) => {
|
|
94
|
-
if (bindings.length === 0) {
|
|
95
|
-
return ['{}'];
|
|
96
|
-
}
|
|
97
|
-
const body = serializeBindings(bindings, level + 1);
|
|
98
|
-
return body === undefined ? undefined : ['{\n', ...body, '\n', indent(level), '}'];
|
|
99
|
-
};
|
|
100
|
-
const serializeList = ([, ...references]) => {
|
|
101
|
-
const items = references.map(serializeReference);
|
|
102
|
-
const definedItems = items.flatMap(item => item === undefined ? [] : [item]);
|
|
103
|
-
return items.includes(undefined)
|
|
104
|
-
? undefined
|
|
105
|
-
: items.length === 0
|
|
106
|
-
? ['[ ]']
|
|
107
|
-
: ['[ ', ...definedItems.flatMap((item, index) => index === 0 ? [item] : [' ', item]), ' ]'];
|
|
108
|
-
};
|
|
109
|
-
const serializeApplication = ([, fn, ...args], level) => {
|
|
110
|
-
const serializedFn = serializeReference(fn);
|
|
111
|
-
const serializedArgs = args.map(argument => argument[0] === 'ref'
|
|
112
|
-
? serializeReferenceChunks(argument)
|
|
113
|
-
: serializeSet(argument, level));
|
|
114
|
-
const definedArgs = serializedArgs.flatMap(argument => argument === undefined ? [] : [argument]);
|
|
115
|
-
return serializedFn === undefined || definedArgs.length !== serializedArgs.length
|
|
116
|
-
? undefined
|
|
117
|
-
: [serializedFn, ...definedArgs.flatMap(argument => [' ', ...argument])];
|
|
118
|
-
};
|
|
119
|
-
const serializeLambda = ([, pattern, body], level) => {
|
|
120
|
-
const serializedPattern = serializePattern(pattern);
|
|
121
|
-
const serializedBody = serialize(body, level);
|
|
122
|
-
return serializedPattern === undefined || serializedBody === undefined
|
|
123
|
-
? undefined
|
|
124
|
-
: [serializedPattern, ': ', ...serializedBody];
|
|
125
|
-
};
|
|
126
|
-
const serializeLet = ([, bindings, body], level) => {
|
|
127
|
-
const serializedBindings = serializeBindings(bindings, level + 1);
|
|
128
|
-
const serializedBody = serialize(body, level);
|
|
129
|
-
return serializedBindings === undefined || serializedBody === undefined
|
|
130
|
-
? undefined
|
|
131
|
-
: ['let\n', ...serializedBindings, '\n', indent(level), 'in\n', indent(level), ...serializedBody];
|
|
132
|
-
};
|
|
133
|
-
const serialize = (expression, level) => {
|
|
134
|
-
if (typeof expression === 'string') {
|
|
135
|
-
return [quoted(expression)];
|
|
136
|
-
}
|
|
137
|
-
switch (expression[0]) {
|
|
138
|
-
case 'ref': {
|
|
139
|
-
return serializeReferenceChunks(expression);
|
|
140
|
-
}
|
|
141
|
-
case 'set': return serializeSet(expression, level);
|
|
142
|
-
case 'list': return serializeList(expression);
|
|
143
|
-
case 'apply': return serializeApplication(expression, level);
|
|
144
|
-
case 'lambda': return serializeLambda(expression, level);
|
|
145
|
-
case 'let': return serializeLet(expression, level);
|
|
146
|
-
case 'indented-string': {
|
|
147
|
-
const [, value] = expression;
|
|
148
|
-
const contentIndent = indent(level + 1);
|
|
149
|
-
const content = escapeIndented(value)
|
|
150
|
-
.split('\n')
|
|
151
|
-
.map(protectLeadingWhitespace)
|
|
152
|
-
.map(line => `${contentIndent}${line}`)
|
|
153
|
-
.join('\n');
|
|
154
|
-
return ["''\n", content, '\n', indent(level), "''"];
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
/** Serializes an expression into composable chunks, or rejects an invalid identifier. */
|
|
159
|
-
export const nix = (expression) => {
|
|
160
|
-
return serialize(expression, 0);
|
|
161
|
-
};
|
|
162
|
-
/** Serializes an expression with exactly one trailing newline on success. */
|
|
163
|
-
export const nixToString = (expression) => {
|
|
164
|
-
const chunks = nix(expression);
|
|
165
|
-
return chunks === undefined ? undefined : `${concat(chunks)}\n`;
|
|
166
|
-
};
|
package/fjs/media/nix/proof.f.js
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { assert, assertEq } from '../../asserts/module.f.js';
|
|
2
|
-
import { toArray } from '../../types/list/module.f.js';
|
|
3
|
-
import { nix, nixToString } from './module.f.js';
|
|
4
|
-
const nodeFlake = (nodePackage, shellHook) => ['set',
|
|
5
|
-
['=', ['inputs', 'nixpkgs', 'url'], 'github:NixOS/nixpkgs/<commit>'],
|
|
6
|
-
['=', ['outputs'], ['lambda',
|
|
7
|
-
['open-set-pattern', 'nixpkgs'],
|
|
8
|
-
['set',
|
|
9
|
-
['=', ['devShells', 'aarch64-linux', 'default'],
|
|
10
|
-
['let', [
|
|
11
|
-
['=', ['pkgs'], ['apply',
|
|
12
|
-
['ref', 'import'],
|
|
13
|
-
['ref', 'nixpkgs'],
|
|
14
|
-
['set', ['=', ['system'], 'aarch64-linux']]
|
|
15
|
-
]]
|
|
16
|
-
], ['apply',
|
|
17
|
-
['ref', 'pkgs', 'mkShell'],
|
|
18
|
-
['set',
|
|
19
|
-
['=', ['packages'], ['list', ['ref', 'pkgs', nodePackage]]],
|
|
20
|
-
...(shellHook ? [[
|
|
21
|
-
'=',
|
|
22
|
-
['shellHook'],
|
|
23
|
-
['indented-string', `export NPM_CONFIG_PREFIX="$HOME/.npm-global"
|
|
24
|
-
export PATH="$NPM_CONFIG_PREFIX/bin:$PATH"
|
|
25
|
-
mkdir -p "$NPM_CONFIG_PREFIX"`]
|
|
26
|
-
]] : [])
|
|
27
|
-
]
|
|
28
|
-
]]
|
|
29
|
-
]
|
|
30
|
-
]
|
|
31
|
-
]]
|
|
32
|
-
];
|
|
33
|
-
const node24 = `{
|
|
34
|
-
inputs.nixpkgs.url = "github:NixOS/nixpkgs/<commit>";
|
|
35
|
-
outputs = { nixpkgs, ... }: {
|
|
36
|
-
devShells.aarch64-linux.default = let
|
|
37
|
-
pkgs = import nixpkgs {
|
|
38
|
-
system = "aarch64-linux";
|
|
39
|
-
};
|
|
40
|
-
in
|
|
41
|
-
pkgs.mkShell {
|
|
42
|
-
packages = [ pkgs.nodejs_24 ];
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
`;
|
|
47
|
-
const node22 = `{
|
|
48
|
-
inputs.nixpkgs.url = "github:NixOS/nixpkgs/<commit>";
|
|
49
|
-
outputs = { nixpkgs, ... }: {
|
|
50
|
-
devShells.aarch64-linux.default = let
|
|
51
|
-
pkgs = import nixpkgs {
|
|
52
|
-
system = "aarch64-linux";
|
|
53
|
-
};
|
|
54
|
-
in
|
|
55
|
-
pkgs.mkShell {
|
|
56
|
-
packages = [ pkgs.nodejs_22 ];
|
|
57
|
-
shellHook = ''
|
|
58
|
-
export NPM_CONFIG_PREFIX="$HOME/.npm-global"
|
|
59
|
-
export PATH="$NPM_CONFIG_PREFIX/bin:$PATH"
|
|
60
|
-
mkdir -p "$NPM_CONFIG_PREFIX"
|
|
61
|
-
'';
|
|
62
|
-
};
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
`;
|
|
66
|
-
export const proof = {
|
|
67
|
-
strings: () => {
|
|
68
|
-
assertEq(nixToString('"\\${\n\r\t'), `"\\"\\\\\\\${\\n\\r\\t"\n`);
|
|
69
|
-
},
|
|
70
|
-
reference: () => {
|
|
71
|
-
assertEq(nixToString(['ref', 'pkgs', 'a.b', 'or']), 'pkgs."a.b"."or"\n');
|
|
72
|
-
assertEq(nixToString(['ref', "a-b'9"]), "a-b'9\n");
|
|
73
|
-
assertEq(nixToString(['ref', '_AZ']), '_AZ\n');
|
|
74
|
-
},
|
|
75
|
-
emptySetAndList: () => {
|
|
76
|
-
assertEq(nixToString(['set']), '{}\n');
|
|
77
|
-
assertEq(nixToString(['list']), '[ ]\n');
|
|
78
|
-
},
|
|
79
|
-
multiReferenceList: () => {
|
|
80
|
-
assertEq(nixToString(['list', ['ref', 'pkgs', 'nodejs_22'], ['ref', 'pkgs', 'nodejs_24']]), '[ pkgs.nodejs_22 pkgs.nodejs_24 ]\n');
|
|
81
|
-
},
|
|
82
|
-
compatiblePaths: () => {
|
|
83
|
-
assertEq(nixToString(['set', ['=', ['x', 'y'], 'a'], ['=', ['x', 'z'], 'b']]), '{\n x.y = "a";\n x.z = "b";\n}\n');
|
|
84
|
-
},
|
|
85
|
-
chunks: () => {
|
|
86
|
-
const chunks = nix(['list', ['ref', 'pkgs', 'nodejs_24']]);
|
|
87
|
-
assert(chunks !== undefined);
|
|
88
|
-
const [open, reference, close, extra] = toArray(chunks);
|
|
89
|
-
assertEq(open, '[ ');
|
|
90
|
-
assertEq(reference, 'pkgs.nodejs_24');
|
|
91
|
-
assertEq(close, ' ]');
|
|
92
|
-
assertEq(extra, undefined);
|
|
93
|
-
},
|
|
94
|
-
indentedStringEscaping: () => {
|
|
95
|
-
assertEq(nixToString(['indented-string', "a '' ${b}"]), "''\n a ''' ''${b}\n''\n");
|
|
96
|
-
assertEq(nixToString(['indented-string', ' a\n\t b\n ']), "''\n ''\\ ''\\ a\n ''\\t''\\ b\n ''\\ ''\\ \n''\n");
|
|
97
|
-
},
|
|
98
|
-
emptyPattern: () => {
|
|
99
|
-
assertEq(nixToString(['lambda', ['open-set-pattern'], ['set']]), '{ ... }: {}\n');
|
|
100
|
-
},
|
|
101
|
-
node24: () => {
|
|
102
|
-
assertEq(nixToString(nodeFlake('nodejs_24', false)), node24);
|
|
103
|
-
},
|
|
104
|
-
node22: () => {
|
|
105
|
-
assertEq(nixToString(nodeFlake('nodejs_22', true)), node22);
|
|
106
|
-
},
|
|
107
|
-
invalid: {
|
|
108
|
-
reference: () => assertEq(nixToString(['ref', 'not valid']), undefined),
|
|
109
|
-
reservedReference: () => assertEq(nixToString(['ref', 'let']), undefined),
|
|
110
|
-
emptyReference: () => assertEq(nixToString(['ref', '']), undefined),
|
|
111
|
-
digitReference: () => assertEq(nixToString(['ref', '1abc']), undefined),
|
|
112
|
-
nonAsciiReference: () => assertEq(nixToString(['ref', 'é']), undefined),
|
|
113
|
-
pattern: () => assertEq(nixToString(['lambda', ['open-set-pattern', 'if'], ['set']]), undefined),
|
|
114
|
-
duplicatePattern: () => assertEq(nixToString(['lambda', ['open-set-pattern', 'x', 'x'], ['set']]), undefined),
|
|
115
|
-
duplicateBinding: () => assertEq(nixToString(['set', ['=', ['x'], 'a'], ['=', ['x'], 'b']]), undefined),
|
|
116
|
-
parentThenChildBinding: () => assertEq(nixToString(['set', ['=', ['x'], 'a'], ['=', ['x', 'y'], 'b']]), undefined),
|
|
117
|
-
childThenParentBinding: () => assertEq(nixToString(['set', ['=', ['x', 'y'], 'a'], ['=', ['x'], 'b']]), undefined),
|
|
118
|
-
duplicateLetBinding: () => assertEq(nixToString(['let', [['=', ['x'], 'a'], ['=', ['x'], 'b']], ['ref', 'x']]), undefined),
|
|
119
|
-
bindingValue: () => assertEq(nixToString(['set', ['=', ['ok'], ['ref', 'bad name']]]), undefined),
|
|
120
|
-
listItem: () => assertEq(nixToString(['list', ['ref', 'valid'], ['ref', 'bad name']]), undefined),
|
|
121
|
-
applicationFunction: () => assertEq(nixToString(['apply', ['ref', 'with']]), undefined),
|
|
122
|
-
applicationArgument: () => assertEq(nixToString(['apply', ['ref', 'f'], ['ref', 'bad name']]), undefined),
|
|
123
|
-
lambdaBody: () => assertEq(nixToString(['lambda', ['open-set-pattern', 'good'], ['ref', 'bad name']]), undefined),
|
|
124
|
-
letBinding: () => assertEq(nixToString(['let', [['=', ['x'], ['ref', 'bad name']]], ['ref', 'x']]), undefined),
|
|
125
|
-
letBody: () => assertEq(nixToString(['let', [], ['ref', 'bad name']]), undefined),
|
|
126
|
-
}
|
|
127
|
-
};
|
package/fjs/media/proof.f.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { type DialectEntry } from './module.f.ts';
|
|
2
|
-
export declare const proof: {
|
|
3
|
-
validRevision: () => void;
|
|
4
|
-
keyOrderIndependent: () => void;
|
|
5
|
-
invalidRevisionFallsThrough: () => void;
|
|
6
|
-
nonHashSnapshotFallsThrough: () => void;
|
|
7
|
-
secondDialect: () => void;
|
|
8
|
-
nonVndDialectName: () => void;
|
|
9
|
-
firstMatchWins: () => void;
|
|
10
|
-
noDialects: () => void;
|
|
11
|
-
ordinaryJsonFallsThrough: () => void;
|
|
12
|
-
plainTextFallsThrough: () => void;
|
|
13
|
-
binaryFallsThrough: () => void;
|
|
14
|
-
largeNonJsonWithinBound: () => void;
|
|
15
|
-
throw: {
|
|
16
|
-
thunkDialectMember: () => DialectEntry;
|
|
17
|
-
noDialectMember: () => DialectEntry;
|
|
18
|
-
};
|
|
19
|
-
};
|
package/fjs/media/proof.f.js
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { assertEq } from '../asserts/module.f.js';
|
|
2
|
-
import { msb, u8ListToVec, repeat, vec8 } from '../types/bit_vec/module.f.js';
|
|
3
|
-
import { detect, dialectEntry } from './module.f.js';
|
|
4
|
-
import { dialect, revisionDialect } from './revision/module.f.js';
|
|
5
|
-
import { number, string } from '../types/rtti/module.f.js';
|
|
6
|
-
// All test strings here are ASCII, so char code === UTF-8 byte value.
|
|
7
|
-
const utf8Bytes = (s) => u8ListToVec(msb)([...s].map(c => c.charCodeAt(0)));
|
|
8
|
-
const revisionJson = `{"dialect":"${dialect}","subject":"8","parents":[],"snapshot":"8","generation":0}`;
|
|
9
|
-
const dialects = [revisionDialect];
|
|
10
|
-
const detectRevision = detect(dialects);
|
|
11
|
-
/**
|
|
12
|
-
* A second dialect following the same `vnd.fjs.<name>` convention, registered
|
|
13
|
-
* with no refinement: structure alone decides the match.
|
|
14
|
-
*/
|
|
15
|
-
const noteSchema = {
|
|
16
|
-
dialect: 'vnd.fjs.note',
|
|
17
|
-
text: string,
|
|
18
|
-
};
|
|
19
|
-
const noteDialect = dialectEntry(noteSchema);
|
|
20
|
-
/** A dialect name outside `vnd.fjs.*` — registerable, and detected as itself. */
|
|
21
|
-
const gadgetSchema = {
|
|
22
|
-
dialect: 'application.gadget',
|
|
23
|
-
size: number,
|
|
24
|
-
};
|
|
25
|
-
const gadgetDialect = dialectEntry(gadgetSchema);
|
|
26
|
-
/**
|
|
27
|
-
* `DialectEntry` is deliberately not opaque, so overlapping entries — which a
|
|
28
|
-
* self-discriminating schema can't produce on its own — can be stated directly.
|
|
29
|
-
*/
|
|
30
|
-
const anyEntry = (name) => ({ dialect: name, match: () => true });
|
|
31
|
-
export const proof = {
|
|
32
|
-
// A valid revision blob is recognized and reported under its derived media type.
|
|
33
|
-
validRevision: () => {
|
|
34
|
-
const m = detectRevision(utf8Bytes(revisionJson));
|
|
35
|
-
assertEq(m.type, 'text');
|
|
36
|
-
assertEq(m.mime_type, 'application/vnd.fjs.revision+json');
|
|
37
|
-
},
|
|
38
|
-
// Key order carries no meaning: a valid revision whose `dialect` key is
|
|
39
|
-
// not first must still be detected.
|
|
40
|
-
keyOrderIndependent: () => {
|
|
41
|
-
const text = `{"parents":[],"subject":"8","dialect":"${dialect}","snapshot":"8","generation":0}`;
|
|
42
|
-
const m = detectRevision(utf8Bytes(text));
|
|
43
|
-
assertEq(m.mime_type, 'application/vnd.fjs.revision+json');
|
|
44
|
-
},
|
|
45
|
-
// A revision missing a required field (here `snapshot` and `generation`)
|
|
46
|
-
// fails validation and falls through to the ordinary text/plain
|
|
47
|
-
// classification.
|
|
48
|
-
invalidRevisionFallsThrough: () => {
|
|
49
|
-
const text = `{"dialect":"${dialect}","subject":"8","parents":["8","r"]}`;
|
|
50
|
-
const m = detectRevision(utf8Bytes(text));
|
|
51
|
-
assertEq(m.type, 'text');
|
|
52
|
-
assertEq(m.mime_type, 'text/plain');
|
|
53
|
-
},
|
|
54
|
-
// The `extraValidate` path: structurally a revision, but `snapshot` is not
|
|
55
|
-
// a cbase32 hash, so `revisionDialect`'s refinement rejects it and the
|
|
56
|
-
// verdict stays `text/plain` — exactly what `decodeText` would say.
|
|
57
|
-
nonHashSnapshotFallsThrough: () => {
|
|
58
|
-
const text = `{"dialect":"${dialect}","subject":"8","parents":[],"snapshot":"not a hash","generation":0}`;
|
|
59
|
-
const m = detectRevision(utf8Bytes(text));
|
|
60
|
-
assertEq(m.type, 'text');
|
|
61
|
-
assertEq(m.mime_type, 'text/plain');
|
|
62
|
-
},
|
|
63
|
-
// A second dialect, registered by the caller, is recognized alongside the
|
|
64
|
-
// first — and an entry with no refinement matches on structure alone.
|
|
65
|
-
secondDialect: () => {
|
|
66
|
-
const d = detect([revisionDialect, noteDialect]);
|
|
67
|
-
assertEq(d(utf8Bytes('{"dialect":"vnd.fjs.note","text":"hi"}')).mime_type, 'application/vnd.fjs.note+json');
|
|
68
|
-
assertEq(d(utf8Bytes(revisionJson)).mime_type, 'application/vnd.fjs.revision+json');
|
|
69
|
-
// Same tag, wrong shape: no entry matches.
|
|
70
|
-
assertEq(d(utf8Bytes('{"dialect":"vnd.fjs.note","text":42}')).mime_type, 'text/plain');
|
|
71
|
-
},
|
|
72
|
-
// The name is neither grammar-checked nor allowlisted: a dialect outside
|
|
73
|
-
// `vnd.fjs.*` yields its own derived media type.
|
|
74
|
-
nonVndDialectName: () => {
|
|
75
|
-
const m = detect([gadgetDialect])(utf8Bytes('{"dialect":"application.gadget","size":3}'));
|
|
76
|
-
assertEq(m.mime_type, 'application/application.gadget+json');
|
|
77
|
-
},
|
|
78
|
-
// Entries are tried in order and the first match wins.
|
|
79
|
-
firstMatchWins: () => {
|
|
80
|
-
const bytes = utf8Bytes('{}');
|
|
81
|
-
assertEq(detect([anyEntry('vnd.fjs.a'), anyEntry('vnd.fjs.b')])(bytes).mime_type, 'application/vnd.fjs.a+json');
|
|
82
|
-
assertEq(detect([anyEntry('vnd.fjs.b'), anyEntry('vnd.fjs.a')])(bytes).mime_type, 'application/vnd.fjs.b+json');
|
|
83
|
-
},
|
|
84
|
-
// An empty registry recognizes nothing; every blob keeps the
|
|
85
|
-
// `fjs/media/type` verdict.
|
|
86
|
-
noDialects: () => {
|
|
87
|
-
const m = detect([])(utf8Bytes(revisionJson));
|
|
88
|
-
assertEq(m.type, 'text');
|
|
89
|
-
assertEq(m.mime_type, 'text/plain');
|
|
90
|
-
},
|
|
91
|
-
// Ordinary JSON with no `dialect` field at all falls through unchanged.
|
|
92
|
-
ordinaryJsonFallsThrough: () => {
|
|
93
|
-
const m = detectRevision(utf8Bytes('{"hello":"world"}'));
|
|
94
|
-
assertEq(m.type, 'text');
|
|
95
|
-
assertEq(m.mime_type, 'text/plain');
|
|
96
|
-
},
|
|
97
|
-
// Plain (non-JSON) text is unaffected: the parse fails and the
|
|
98
|
-
// `fjs/media/type` verdict stands.
|
|
99
|
-
plainTextFallsThrough: () => {
|
|
100
|
-
const m = detectRevision(utf8Bytes('hello'));
|
|
101
|
-
assertEq(m.type, 'text');
|
|
102
|
-
assertEq(m.mime_type, 'text/plain');
|
|
103
|
-
},
|
|
104
|
-
// Binary content (magic-byte hit) is unaffected by dialect detection.
|
|
105
|
-
binaryFallsThrough: () => {
|
|
106
|
-
const m = detectRevision(u8ListToVec(msb)([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]));
|
|
107
|
-
assertEq(m.type, 'base64');
|
|
108
|
-
assertEq(m.mime_type, 'image/png');
|
|
109
|
-
},
|
|
110
|
-
// A large blob is still bounded by the single-`Vec` `maxLength` cap; this
|
|
111
|
-
// only exercises that dialect detection doesn't change size handling for
|
|
112
|
-
// non-JSON content within that bound.
|
|
113
|
-
largeNonJsonWithinBound: () => {
|
|
114
|
-
const a = repeat(1000n)(vec8(0x61n)); // 1,000 bytes of 'a'
|
|
115
|
-
const m = detectRevision(a);
|
|
116
|
-
assertEq(m.type, 'text');
|
|
117
|
-
assertEq(m.mime_type, 'text/plain');
|
|
118
|
-
},
|
|
119
|
-
throw: {
|
|
120
|
-
// The `dialect` member must be a direct string const. A thunk-form one
|
|
121
|
-
// is a valid rtti schema but is not registerable, and `dialectEntry`
|
|
122
|
-
// says so at registration rather than per blob.
|
|
123
|
-
thunkDialectMember: () => dialectEntry({ dialect: string }),
|
|
124
|
-
// A schema with no `dialect` member at all is likewise refused.
|
|
125
|
-
noDialectMember: () => dialectEntry({ text: string }),
|
|
126
|
-
},
|
|
127
|
-
};
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { type ValidationError } from '../../types/rtti/validate/module.f.ts';
|
|
2
|
-
import type { Ts } from '../../types/rtti/ts/module.f.ts';
|
|
3
|
-
import { type Unknown } from '../json/module.f.ts';
|
|
4
|
-
import { type Result } from '../../types/result/module.f.ts';
|
|
5
|
-
import { type DialectEntry } from '../module.f.ts';
|
|
6
|
-
/**
|
|
7
|
-
* Format tag: names the dialect of this BLOB. The media type it is served
|
|
8
|
-
* with is derived mechanically: `application/` + `dialect` + `+json`.
|
|
9
|
-
*/
|
|
10
|
-
export declare const dialect: 'vnd.fjs.revision';
|
|
11
|
-
/** The media type derived from {@link dialect}: `application/vnd.fjs.revision+json`. */
|
|
12
|
-
export declare const mediaType: "application/vnd.fjs.revision+json";
|
|
13
|
-
/**
|
|
14
|
-
* rtti schema for the snapshot-reference type: a cbase32 CAS hash string.
|
|
15
|
-
*
|
|
16
|
-
* This is `string` at the rtti (structural) level — rtti schemas can't
|
|
17
|
-
* express string-content refinements — so cbase32 decodability, and the
|
|
18
|
-
* rejection of `https://` bridge URLs and any other location-addressed
|
|
19
|
-
* reference form, is enforced by {@link isHash} / {@link validate} below,
|
|
20
|
-
* not by this schema on its own.
|
|
21
|
-
*/
|
|
22
|
-
export declare const hash: import("../../types/rtti/module.f.ts").String;
|
|
23
|
-
/**
|
|
24
|
-
* rtti schema for a `revision` BLOB. See the README for the full semantics of
|
|
25
|
-
* each field; `dialect` is the type discriminant, matched here as an exact
|
|
26
|
-
* literal so structural validation alone rejects any other dialect's blob.
|
|
27
|
-
*/
|
|
28
|
-
export declare const revisionSchema: {
|
|
29
|
-
readonly dialect: "vnd.fjs.revision";
|
|
30
|
-
readonly subject: import("../../types/rtti/module.f.ts").String;
|
|
31
|
-
readonly parents: import("../../types/rtti/module.f.ts").Type1<"array", import("../../types/rtti/module.f.ts").String>;
|
|
32
|
-
readonly snapshot: import("../../types/rtti/module.f.ts").String;
|
|
33
|
-
readonly generation: import("../../types/rtti/module.f.ts").Number;
|
|
34
|
-
readonly archived: import("../../types/rtti/module.f.ts").Or<readonly [true, undefined]>;
|
|
35
|
-
};
|
|
36
|
-
/** The TypeScript type derived from {@link revisionSchema} — the single source of truth. */
|
|
37
|
-
export type Revision = Ts<typeof revisionSchema>;
|
|
38
|
-
/** True when `s` decodes as a cbase32 CAS hash (rejects `https://` and any other non-cbase32 string). */
|
|
39
|
-
export declare const isHash: (s: string) => boolean;
|
|
40
|
-
/** Either a structural validation error or a semantic (hash / generation) error message. */
|
|
41
|
-
export type RevisionError = ValidationError | string;
|
|
42
|
-
/**
|
|
43
|
-
* Checks the semantic refinements the structural schema can't express on an
|
|
44
|
-
* already shape-valid revision: every `parents` entry and the `snapshot` must
|
|
45
|
-
* decode as a cbase32 hash ({@link isHash}), and `generation` must be a
|
|
46
|
-
* non-negative *safe* integer. `subject` is not checked — it is an identity
|
|
47
|
-
* string, never a snapshot reference, so any string is valid.
|
|
48
|
-
*
|
|
49
|
-
* `generation` uses `Number.isSafeInteger`, not `Number.isInteger`: a value at
|
|
50
|
-
* or above `2 ** 53` passes `isInteger` but is no longer uniquely
|
|
51
|
-
* representable, so `1 + max(parents' generations)` — how a writer derives the
|
|
52
|
-
* next generation — can round back to the parent's value and fail to advance.
|
|
53
|
-
* Rejecting unsafe integers keeps stored generations exact.
|
|
54
|
-
*
|
|
55
|
-
* Both `snapshot` and `generation` are required by the schema, so no absence
|
|
56
|
-
* ever has to be resolved here: a revision states its content and its
|
|
57
|
-
* generation explicitly, and is fully interpretable in isolation (see the
|
|
58
|
-
* README). The former snapshot-resolution algorithm (subject-as-fallback,
|
|
59
|
-
* single-parent inheritance, multi-parent rejection) is gone.
|
|
60
|
-
*
|
|
61
|
-
* Exported separately from {@link validate} for callers that assemble a
|
|
62
|
-
* `Revision` themselves from already-typed fields (e.g. `fjs/cas/evo`'s
|
|
63
|
-
* `addRevision`): the shape is then guaranteed by TypeScript already, so only
|
|
64
|
-
* these semantic (string-only error) checks are worth re-running — routing
|
|
65
|
-
* through the combined structural-plus-semantic `validate` would add an
|
|
66
|
-
* unreachable structural-error branch on the caller's side.
|
|
67
|
-
*/
|
|
68
|
-
export declare const checkReferences: (r: Revision) => Result<Revision, string>;
|
|
69
|
-
/**
|
|
70
|
-
* Validates an already-parsed JSON value as a `revision` BLOB: structural
|
|
71
|
-
* (rtti) validation followed by the hash / generation semantic checks.
|
|
72
|
-
*/
|
|
73
|
-
export declare const validate: (value: Unknown) => Result<Revision, RevisionError>;
|
|
74
|
-
/**
|
|
75
|
-
* Decodes `text` as a `revision` BLOB: JSON-parses it, then validates it per
|
|
76
|
-
* {@link validate}. Detection is semantic, not syntactic — any JSON that
|
|
77
|
-
* satisfies the schema is a revision, regardless of key order or whitespace.
|
|
78
|
-
*/
|
|
79
|
-
export declare const decodeText: (text: string) => Result<Revision, RevisionError>;
|
|
80
|
-
/**
|
|
81
|
-
* This dialect as a registry entry for `fjs/media`'s `detect`. It carries the
|
|
82
|
-
* semantic checks too, so a blob is detected as `vnd.fjs.revision` exactly when
|
|
83
|
-
* {@link decodeText} would accept it — a structurally valid revision whose
|
|
84
|
-
* `snapshot` is not a cbase32 hash is not one.
|
|
85
|
-
*/
|
|
86
|
-
export declare const revisionDialect: DialectEntry;
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `vnd.fjs.revision` — one step in the evolution of a mutable object on top
|
|
3
|
-
* of an immutable content-addressable store.
|
|
4
|
-
*
|
|
5
|
-
* A revision BLOB links back to its parent revision(s) (a DAG, not just a
|
|
6
|
-
* chain, so concurrent edits can merge) and carries the full materialized
|
|
7
|
-
* content of that step — never an incremental diff (see the versioning rule
|
|
8
|
-
* in the README). This module is the pure format only: the rtti schema, the
|
|
9
|
-
* `dialect` tag, and decode/validate. No store access, no effects — head
|
|
10
|
-
* resolution, materialization, and reverse indexes are a separate, deferred
|
|
11
|
-
* concern.
|
|
12
|
-
*
|
|
13
|
-
* See `README.md` for the full spec.
|
|
14
|
-
*
|
|
15
|
-
* @module
|
|
16
|
-
*/
|
|
17
|
-
import { array, number, option, string } from '../../types/rtti/module.f.js';
|
|
18
|
-
import { validate as rttiValidate } from '../../types/rtti/validate/module.f.js';
|
|
19
|
-
import { parse as parseJson } from '../json/module.f.js';
|
|
20
|
-
import { cBase32ToVec } from '../../basen/cbase32/module.f.js';
|
|
21
|
-
import { error, ok } from '../../types/result/module.f.js';
|
|
22
|
-
import { dialectEntry } from '../module.f.js';
|
|
23
|
-
/**
|
|
24
|
-
* Format tag: names the dialect of this BLOB. The media type it is served
|
|
25
|
-
* with is derived mechanically: `application/` + `dialect` + `+json`.
|
|
26
|
-
*/
|
|
27
|
-
export const dialect = 'vnd.fjs.revision';
|
|
28
|
-
/** The media type derived from {@link dialect}: `application/vnd.fjs.revision+json`. */
|
|
29
|
-
export const mediaType = `application/${dialect}+json`;
|
|
30
|
-
/**
|
|
31
|
-
* rtti schema for the snapshot-reference type: a cbase32 CAS hash string.
|
|
32
|
-
*
|
|
33
|
-
* This is `string` at the rtti (structural) level — rtti schemas can't
|
|
34
|
-
* express string-content refinements — so cbase32 decodability, and the
|
|
35
|
-
* rejection of `https://` bridge URLs and any other location-addressed
|
|
36
|
-
* reference form, is enforced by {@link isHash} / {@link validate} below,
|
|
37
|
-
* not by this schema on its own.
|
|
38
|
-
*/
|
|
39
|
-
export const hash = string;
|
|
40
|
-
/**
|
|
41
|
-
* rtti schema for a `revision` BLOB. See the README for the full semantics of
|
|
42
|
-
* each field; `dialect` is the type discriminant, matched here as an exact
|
|
43
|
-
* literal so structural validation alone rejects any other dialect's blob.
|
|
44
|
-
*/
|
|
45
|
-
export const revisionSchema = {
|
|
46
|
-
dialect,
|
|
47
|
-
subject: string,
|
|
48
|
-
parents: array(hash),
|
|
49
|
-
snapshot: hash,
|
|
50
|
-
generation: number,
|
|
51
|
-
archived: option(true),
|
|
52
|
-
};
|
|
53
|
-
/** Structural-only validator: checks the shape, not the hash / generation semantics. */
|
|
54
|
-
const validateShape = rttiValidate(revisionSchema);
|
|
55
|
-
/** True when `s` decodes as a cbase32 CAS hash (rejects `https://` and any other non-cbase32 string). */
|
|
56
|
-
export const isHash = (s) => cBase32ToVec(s) !== null;
|
|
57
|
-
/**
|
|
58
|
-
* Checks the semantic refinements the structural schema can't express on an
|
|
59
|
-
* already shape-valid revision: every `parents` entry and the `snapshot` must
|
|
60
|
-
* decode as a cbase32 hash ({@link isHash}), and `generation` must be a
|
|
61
|
-
* non-negative *safe* integer. `subject` is not checked — it is an identity
|
|
62
|
-
* string, never a snapshot reference, so any string is valid.
|
|
63
|
-
*
|
|
64
|
-
* `generation` uses `Number.isSafeInteger`, not `Number.isInteger`: a value at
|
|
65
|
-
* or above `2 ** 53` passes `isInteger` but is no longer uniquely
|
|
66
|
-
* representable, so `1 + max(parents' generations)` — how a writer derives the
|
|
67
|
-
* next generation — can round back to the parent's value and fail to advance.
|
|
68
|
-
* Rejecting unsafe integers keeps stored generations exact.
|
|
69
|
-
*
|
|
70
|
-
* Both `snapshot` and `generation` are required by the schema, so no absence
|
|
71
|
-
* ever has to be resolved here: a revision states its content and its
|
|
72
|
-
* generation explicitly, and is fully interpretable in isolation (see the
|
|
73
|
-
* README). The former snapshot-resolution algorithm (subject-as-fallback,
|
|
74
|
-
* single-parent inheritance, multi-parent rejection) is gone.
|
|
75
|
-
*
|
|
76
|
-
* Exported separately from {@link validate} for callers that assemble a
|
|
77
|
-
* `Revision` themselves from already-typed fields (e.g. `fjs/cas/evo`'s
|
|
78
|
-
* `addRevision`): the shape is then guaranteed by TypeScript already, so only
|
|
79
|
-
* these semantic (string-only error) checks are worth re-running — routing
|
|
80
|
-
* through the combined structural-plus-semantic `validate` would add an
|
|
81
|
-
* unreachable structural-error branch on the caller's side.
|
|
82
|
-
*/
|
|
83
|
-
export const checkReferences = (r) => {
|
|
84
|
-
for (const p of r.parents) {
|
|
85
|
-
if (!isHash(p)) {
|
|
86
|
-
return error(`parent is not a valid hash: ${p}`);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
if (!isHash(r.snapshot)) {
|
|
90
|
-
return error(`snapshot is not a valid hash: ${r.snapshot}`);
|
|
91
|
-
}
|
|
92
|
-
if (!Number.isSafeInteger(r.generation) || r.generation < 0) {
|
|
93
|
-
return error(`generation must be a non-negative safe integer: ${r.generation}`);
|
|
94
|
-
}
|
|
95
|
-
return ok(r);
|
|
96
|
-
};
|
|
97
|
-
/**
|
|
98
|
-
* Validates an already-parsed JSON value as a `revision` BLOB: structural
|
|
99
|
-
* (rtti) validation followed by the hash / generation semantic checks.
|
|
100
|
-
*/
|
|
101
|
-
export const validate = (value) => {
|
|
102
|
-
const [t, v] = validateShape(value);
|
|
103
|
-
if (t === 'error') {
|
|
104
|
-
return error(v);
|
|
105
|
-
}
|
|
106
|
-
return checkReferences(v);
|
|
107
|
-
};
|
|
108
|
-
/**
|
|
109
|
-
* Decodes `text` as a `revision` BLOB: JSON-parses it, then validates it per
|
|
110
|
-
* {@link validate}. Detection is semantic, not syntactic — any JSON that
|
|
111
|
-
* satisfies the schema is a revision, regardless of key order or whitespace.
|
|
112
|
-
*/
|
|
113
|
-
export const decodeText = (text) => {
|
|
114
|
-
const [t, v] = parseJson(text);
|
|
115
|
-
if (t === 'error') {
|
|
116
|
-
return error(v);
|
|
117
|
-
}
|
|
118
|
-
return validate(v);
|
|
119
|
-
};
|
|
120
|
-
/** {@link checkReferences} as the `boolean` refinement a {@link DialectEntry} takes. */
|
|
121
|
-
const isValidRevision = (r) => {
|
|
122
|
-
const [tag] = checkReferences(r);
|
|
123
|
-
return tag === 'ok';
|
|
124
|
-
};
|
|
125
|
-
/**
|
|
126
|
-
* This dialect as a registry entry for `fjs/media`'s `detect`. It carries the
|
|
127
|
-
* semantic checks too, so a blob is detected as `vnd.fjs.revision` exactly when
|
|
128
|
-
* {@link decodeText} would accept it — a structurally valid revision whose
|
|
129
|
-
* `snapshot` is not a cbase32 hash is not one.
|
|
130
|
-
*/
|
|
131
|
-
export const revisionDialect = dialectEntry(revisionSchema, isValidRevision);
|