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,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript counterparts of the JSON data model: `Primitive`, `Unknown`,
|
|
3
|
+
* `Object`, and `Array`.
|
|
4
|
+
*
|
|
5
|
+
* `Unknown` is written by hand rather than derived, so that the recursion
|
|
6
|
+
* reads directly, and is then pinned against the rtti schemas in the sibling
|
|
7
|
+
* [`./rtti/module.f.mjs`](./rtti/module.f.mjs) with
|
|
8
|
+
* `Assert<Equal<Unknown, Ts<typeof unknown>>>`. The pin is what keeps the two
|
|
9
|
+
* descriptions of the same data model from drifting apart.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import type { Entry as ObjectEntry } from '../../types/object/types.ts';
|
|
14
|
+
import type { Ts } from '../../types/rtti/ts/types.ts';
|
|
15
|
+
import type { primitive } from './rtti/module.f.mjs';
|
|
16
|
+
import type { List } from '../../types/list/types.ts';
|
|
17
|
+
export type Primitive = Ts<typeof primitive>;
|
|
18
|
+
export type Unknown = Object | Array | Primitive;
|
|
19
|
+
export type Object = {
|
|
20
|
+
readonly [k in string]?: Unknown;
|
|
21
|
+
};
|
|
22
|
+
export type Array = readonly Unknown[];
|
|
23
|
+
export type Entry = ObjectEntry<Unknown>;
|
|
24
|
+
export type _Entries = List<Entry>;
|
|
25
|
+
export type _MapEntries = (entries: _Entries) => _Entries;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript counterparts of the JSON data model: `Primitive`, `Unknown`,
|
|
3
|
+
* `Object`, and `Array`.
|
|
4
|
+
*
|
|
5
|
+
* `Unknown` is written by hand rather than derived, so that the recursion
|
|
6
|
+
* reads directly, and is then pinned against the rtti schemas in the sibling
|
|
7
|
+
* [`./rtti/module.f.mjs`](./rtti/module.f.mjs) with
|
|
8
|
+
* `Assert<Equal<Unknown, Ts<typeof unknown>>>`. The pin is what keeps the two
|
|
9
|
+
* descriptions of the same data model from drifting apart.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Media-type detection entry point: dialect-tagged JSON recognition layered
|
|
3
|
+
* on top of the byte-signature / UTF-8 detector.
|
|
4
|
+
*
|
|
5
|
+
* `fjs/media/type` classifies raw bytes (magic-byte signatures, UTF-8
|
|
6
|
+
* text-vs-binary) with no notion of a JSON dialect. `detect` here adds one
|
|
7
|
+
* more classification step in front of it: when the whole blob is
|
|
8
|
+
* whole-blob-valid UTF-8 text (as `fjs/media/type` already determined), parse
|
|
9
|
+
* it as JSON and match the parsed value against the dialects the caller
|
|
10
|
+
* registered. A match reports that dialect's derived media type; anything that
|
|
11
|
+
* isn't valid JSON, or matches no registered dialect, falls through to the
|
|
12
|
+
* `fjs/media/type` verdict unchanged.
|
|
13
|
+
*
|
|
14
|
+
* The dialect set is a **parameter**, not an import: `detect(dialects)(bytes)`.
|
|
15
|
+
* This module therefore knows no dialect of its own — `fjs/media/revision`
|
|
16
|
+
* exports its own {@link DialectEntry} (`revisionDialect`), and a caller passes
|
|
17
|
+
* the list it wants recognized. Any format following the `vnd.fjs.<name>`
|
|
18
|
+
* convention (see `fjs/media/revision/README.md`), in this repo or downstream,
|
|
19
|
+
* is registerable the same way.
|
|
20
|
+
*
|
|
21
|
+
* Detection is semantic, not syntactic: any JSON that satisfies a dialect's
|
|
22
|
+
* schema is recognized regardless of key order, whitespace, or any other
|
|
23
|
+
* serialization detail — there is no byte-level shortcut such as a
|
|
24
|
+
* `{"dialect":` prefix check. The text is parsed **once**, and each entry's
|
|
25
|
+
* `match` runs on the same parsed value, so N dialects cost N schema walks
|
|
26
|
+
* rather than N parses.
|
|
27
|
+
*
|
|
28
|
+
* A reported `mime_type` is a claim about a blob's *shape*, not a promise that
|
|
29
|
+
* decoding it succeeds: how strict detection is, is the dialect's own call (see
|
|
30
|
+
* {@link dialectEntry}'s `extraValidate`). Never route a decode decision
|
|
31
|
+
* through this verdict — a caller that intends to decode calls its dialect's
|
|
32
|
+
* decoder, which stays the authority.
|
|
33
|
+
*
|
|
34
|
+
* This only classifies an already-buffered `Vec` (`detectVec`'s single-`Vec`
|
|
35
|
+
* form), because dialect validation needs the whole parsed value. A single
|
|
36
|
+
* `Vec` already caps at `maxLength` bits (128 KiB — the same bound as the
|
|
37
|
+
* existing inline-content cap), so dialect detection is naturally
|
|
38
|
+
* size-bounded. The unbounded streaming detector (`fjs/media/type`
|
|
39
|
+
* `detectStream`) is untouched and stays a pure byte-signature/UTF-8
|
|
40
|
+
* classifier with no dialect awareness.
|
|
41
|
+
*
|
|
42
|
+
* @module
|
|
43
|
+
*
|
|
44
|
+
* @import { Vec } from '../types/bit_vec/types.ts'
|
|
45
|
+
* @import { DetectMeta } from './type/types.ts'
|
|
46
|
+
* @import { Struct } from '../types/rtti/types.ts'
|
|
47
|
+
* @import { Ts, Unknown } from '../types/rtti/ts/types.ts'
|
|
48
|
+
* @import { Validate } from '../types/rtti/common/types.ts'
|
|
49
|
+
* @import { DialectEntry } from './types.ts'
|
|
50
|
+
*/
|
|
51
|
+
import type { Vec } from '../types/bit_vec/types.ts';
|
|
52
|
+
import type { DetectMeta } from './type/types.ts';
|
|
53
|
+
import type { Struct } from '../types/rtti/types.ts';
|
|
54
|
+
import type { Ts } from '../types/rtti/ts/types.ts';
|
|
55
|
+
import type { DialectEntry } from './types.ts';
|
|
56
|
+
/**
|
|
57
|
+
* Registers a dialect for detection: its rtti schema, plus whatever rtti can't
|
|
58
|
+
* say about it.
|
|
59
|
+
*
|
|
60
|
+
* The dialect name is read out of the schema's own `dialect` member — that
|
|
61
|
+
* member is a string const in a dialect schema, which is what makes the schema
|
|
62
|
+
* self-discriminating, so a separate name alongside it would be a second copy
|
|
63
|
+
* that can disagree with the first. It follows that no registration can claim
|
|
64
|
+
* one dialect while validating another's blobs. The media type is likewise
|
|
65
|
+
* derived rather than supplied: `application/${dialect}+json`, the mechanical
|
|
66
|
+
* derivation `fjs/media/revision/README.md` documents.
|
|
67
|
+
*
|
|
68
|
+
* `extraValidate` runs *after* structural validation, on the dialect's own
|
|
69
|
+
* decoded type, and closes the gap rtti leaves — "this string is
|
|
70
|
+
* cbase32-decodable", "this number is a non-negative safe integer". It returns
|
|
71
|
+
* `boolean`, so it has no error channel and nothing to report but yes or no,
|
|
72
|
+
* and it never sees the raw bytes: parsing and the schema walk stay with the
|
|
73
|
+
* detector. Omitting it gets classification (what a blob claims to be and
|
|
74
|
+
* structurally looks like); supplying it gets detection as strict as the
|
|
75
|
+
* dialect's own decoder.
|
|
76
|
+
*
|
|
77
|
+
* **The name is neither grammar-checked nor allowlisted.** A schema saying
|
|
78
|
+
* `dialect: 'foo'` yields `application/foo+json`, and that is intended:
|
|
79
|
+
* `vnd.fjs.*` is this repo's convention for its *own* formats, not a constraint
|
|
80
|
+
* on what a caller may detect — another vendor's `vnd.*` blob, or a widely used
|
|
81
|
+
* name not under `vnd.` at all, is a legitimate thing to register. The name is
|
|
82
|
+
* not attacker-controlled either: it comes from a schema a programmer wrote and
|
|
83
|
+
* passed here, never from the blob being classified, so no untrusted string
|
|
84
|
+
* reaches `mime_type` along this path. (A detector that read the name *out of*
|
|
85
|
+
* a blob would need the RFC 6838 grammar check and an allowlist; this one does
|
|
86
|
+
* not.) Registering a name that is not a valid RFC 6838 restricted-name yields
|
|
87
|
+
* a malformed media type in the registrant's own results, and nowhere else.
|
|
88
|
+
*
|
|
89
|
+
* The constraint is `Struct` — every member must be a real rtti `Type`, which
|
|
90
|
+
* is what rejects a member like `() => 42` at compile time (rtti would read it
|
|
91
|
+
* as a thunk and `match` would *throw* on the first blob rather than return
|
|
92
|
+
* `false`). TypeScript cannot also require a direct string `dialect` member
|
|
93
|
+
* under that constraint, so that half is asserted here instead: loudly, once,
|
|
94
|
+
* when the entry is constructed. A thunk-form `dialect`
|
|
95
|
+
* (`() => ['const', 'x']`) is a perfectly valid rtti schema, it just is not
|
|
96
|
+
* registerable — write the string directly, as `revisionSchema` does.
|
|
97
|
+
*
|
|
98
|
+
* @template {Struct} T
|
|
99
|
+
* @param {T} type
|
|
100
|
+
* @param {(_: Ts<T>) => boolean} [extraValidate]
|
|
101
|
+
* @returns {DialectEntry}
|
|
102
|
+
*/
|
|
103
|
+
export declare const dialectEntry: <T extends Struct>(type: T, extraValidate?: (_: Ts<T>) => boolean) => DialectEntry;
|
|
104
|
+
/**
|
|
105
|
+
* Classifies a whole buffered `Vec` against `dialects`, returning the same
|
|
106
|
+
* three-way `{ length, mime_type, type }` shape as `fjs/media/type`
|
|
107
|
+
* `detectVec`, but with dialect-tagged JSON recognized ahead of the plain
|
|
108
|
+
* `text/plain` fallback. The first entry whose `match` accepts the parsed value
|
|
109
|
+
* wins; entries that overlap are the registrant's own business, since matching
|
|
110
|
+
* `dialect` as an exact literal already makes structural validation reject
|
|
111
|
+
* every other dialect's blob.
|
|
112
|
+
*
|
|
113
|
+
* @param {readonly DialectEntry[]} dialects
|
|
114
|
+
* @returns {(bytes: Vec) => DetectMeta}
|
|
115
|
+
*/
|
|
116
|
+
export declare const detect: (dialects: readonly DialectEntry[]) => (bytes: Vec) => DetectMeta;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Media-type detection entry point: dialect-tagged JSON recognition layered
|
|
3
|
+
* on top of the byte-signature / UTF-8 detector.
|
|
4
|
+
*
|
|
5
|
+
* `fjs/media/type` classifies raw bytes (magic-byte signatures, UTF-8
|
|
6
|
+
* text-vs-binary) with no notion of a JSON dialect. `detect` here adds one
|
|
7
|
+
* more classification step in front of it: when the whole blob is
|
|
8
|
+
* whole-blob-valid UTF-8 text (as `fjs/media/type` already determined), parse
|
|
9
|
+
* it as JSON and match the parsed value against the dialects the caller
|
|
10
|
+
* registered. A match reports that dialect's derived media type; anything that
|
|
11
|
+
* isn't valid JSON, or matches no registered dialect, falls through to the
|
|
12
|
+
* `fjs/media/type` verdict unchanged.
|
|
13
|
+
*
|
|
14
|
+
* The dialect set is a **parameter**, not an import: `detect(dialects)(bytes)`.
|
|
15
|
+
* This module therefore knows no dialect of its own — `fjs/media/revision`
|
|
16
|
+
* exports its own {@link DialectEntry} (`revisionDialect`), and a caller passes
|
|
17
|
+
* the list it wants recognized. Any format following the `vnd.fjs.<name>`
|
|
18
|
+
* convention (see `fjs/media/revision/README.md`), in this repo or downstream,
|
|
19
|
+
* is registerable the same way.
|
|
20
|
+
*
|
|
21
|
+
* Detection is semantic, not syntactic: any JSON that satisfies a dialect's
|
|
22
|
+
* schema is recognized regardless of key order, whitespace, or any other
|
|
23
|
+
* serialization detail — there is no byte-level shortcut such as a
|
|
24
|
+
* `{"dialect":` prefix check. The text is parsed **once**, and each entry's
|
|
25
|
+
* `match` runs on the same parsed value, so N dialects cost N schema walks
|
|
26
|
+
* rather than N parses.
|
|
27
|
+
*
|
|
28
|
+
* A reported `mime_type` is a claim about a blob's *shape*, not a promise that
|
|
29
|
+
* decoding it succeeds: how strict detection is, is the dialect's own call (see
|
|
30
|
+
* {@link dialectEntry}'s `extraValidate`). Never route a decode decision
|
|
31
|
+
* through this verdict — a caller that intends to decode calls its dialect's
|
|
32
|
+
* decoder, which stays the authority.
|
|
33
|
+
*
|
|
34
|
+
* This only classifies an already-buffered `Vec` (`detectVec`'s single-`Vec`
|
|
35
|
+
* form), because dialect validation needs the whole parsed value. A single
|
|
36
|
+
* `Vec` already caps at `maxLength` bits (128 KiB — the same bound as the
|
|
37
|
+
* existing inline-content cap), so dialect detection is naturally
|
|
38
|
+
* size-bounded. The unbounded streaming detector (`fjs/media/type`
|
|
39
|
+
* `detectStream`) is untouched and stays a pure byte-signature/UTF-8
|
|
40
|
+
* classifier with no dialect awareness.
|
|
41
|
+
*
|
|
42
|
+
* @module
|
|
43
|
+
*
|
|
44
|
+
* @import { Vec } from '../types/bit_vec/types.ts'
|
|
45
|
+
* @import { DetectMeta } from './type/types.ts'
|
|
46
|
+
* @import { Struct } from '../types/rtti/types.ts'
|
|
47
|
+
* @import { Ts, Unknown } from '../types/rtti/ts/types.ts'
|
|
48
|
+
* @import { Validate } from '../types/rtti/common/types.ts'
|
|
49
|
+
* @import { DialectEntry } from './types.ts'
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
import { fromVec } from '../text/utf8/module.f.mjs'
|
|
53
|
+
import { detectVec } from './type/module.f.mjs'
|
|
54
|
+
import { parse } from './json/module.f.mjs'
|
|
55
|
+
import { assert, assertNotNullish } from '../asserts/module.f.mjs'
|
|
56
|
+
import { validate } from '../types/rtti/validate/module.f.mjs'
|
|
57
|
+
|
|
58
|
+
/** The default refinement: structural validation alone decides the match. */
|
|
59
|
+
const always = () => true
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Structural validation followed by the dialect's own refinement.
|
|
63
|
+
* @template {Struct} T
|
|
64
|
+
* @param {Validate<T>} v
|
|
65
|
+
* @returns {(extraValidate: (_: Ts<T>) => boolean) => (u: Unknown) => boolean}
|
|
66
|
+
*/
|
|
67
|
+
const matchWith = v => extraValidate => u => {
|
|
68
|
+
const [tag, value] = v(u)
|
|
69
|
+
return tag === 'ok' && extraValidate(value)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Registers a dialect for detection: its rtti schema, plus whatever rtti can't
|
|
74
|
+
* say about it.
|
|
75
|
+
*
|
|
76
|
+
* The dialect name is read out of the schema's own `dialect` member — that
|
|
77
|
+
* member is a string const in a dialect schema, which is what makes the schema
|
|
78
|
+
* self-discriminating, so a separate name alongside it would be a second copy
|
|
79
|
+
* that can disagree with the first. It follows that no registration can claim
|
|
80
|
+
* one dialect while validating another's blobs. The media type is likewise
|
|
81
|
+
* derived rather than supplied: `application/${dialect}+json`, the mechanical
|
|
82
|
+
* derivation `fjs/media/revision/README.md` documents.
|
|
83
|
+
*
|
|
84
|
+
* `extraValidate` runs *after* structural validation, on the dialect's own
|
|
85
|
+
* decoded type, and closes the gap rtti leaves — "this string is
|
|
86
|
+
* cbase32-decodable", "this number is a non-negative safe integer". It returns
|
|
87
|
+
* `boolean`, so it has no error channel and nothing to report but yes or no,
|
|
88
|
+
* and it never sees the raw bytes: parsing and the schema walk stay with the
|
|
89
|
+
* detector. Omitting it gets classification (what a blob claims to be and
|
|
90
|
+
* structurally looks like); supplying it gets detection as strict as the
|
|
91
|
+
* dialect's own decoder.
|
|
92
|
+
*
|
|
93
|
+
* **The name is neither grammar-checked nor allowlisted.** A schema saying
|
|
94
|
+
* `dialect: 'foo'` yields `application/foo+json`, and that is intended:
|
|
95
|
+
* `vnd.fjs.*` is this repo's convention for its *own* formats, not a constraint
|
|
96
|
+
* on what a caller may detect — another vendor's `vnd.*` blob, or a widely used
|
|
97
|
+
* name not under `vnd.` at all, is a legitimate thing to register. The name is
|
|
98
|
+
* not attacker-controlled either: it comes from a schema a programmer wrote and
|
|
99
|
+
* passed here, never from the blob being classified, so no untrusted string
|
|
100
|
+
* reaches `mime_type` along this path. (A detector that read the name *out of*
|
|
101
|
+
* a blob would need the RFC 6838 grammar check and an allowlist; this one does
|
|
102
|
+
* not.) Registering a name that is not a valid RFC 6838 restricted-name yields
|
|
103
|
+
* a malformed media type in the registrant's own results, and nowhere else.
|
|
104
|
+
*
|
|
105
|
+
* The constraint is `Struct` — every member must be a real rtti `Type`, which
|
|
106
|
+
* is what rejects a member like `() => 42` at compile time (rtti would read it
|
|
107
|
+
* as a thunk and `match` would *throw* on the first blob rather than return
|
|
108
|
+
* `false`). TypeScript cannot also require a direct string `dialect` member
|
|
109
|
+
* under that constraint, so that half is asserted here instead: loudly, once,
|
|
110
|
+
* when the entry is constructed. A thunk-form `dialect`
|
|
111
|
+
* (`() => ['const', 'x']`) is a perfectly valid rtti schema, it just is not
|
|
112
|
+
* registerable — write the string directly, as `revisionSchema` does.
|
|
113
|
+
*
|
|
114
|
+
* @template {Struct} T
|
|
115
|
+
* @param {T} type
|
|
116
|
+
* @param {(_: Ts<T>) => boolean} [extraValidate]
|
|
117
|
+
* @returns {DialectEntry}
|
|
118
|
+
*/
|
|
119
|
+
export const dialectEntry = (type, extraValidate = always) => {
|
|
120
|
+
const { dialect } = type
|
|
121
|
+
assert(typeof dialect === 'string', 'dialectEntry: schema has no direct string `dialect` member')
|
|
122
|
+
return { dialect, match: matchWith(validate(type))(extraValidate) }
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Classifies a whole buffered `Vec` against `dialects`, returning the same
|
|
127
|
+
* three-way `{ length, mime_type, type }` shape as `fjs/media/type`
|
|
128
|
+
* `detectVec`, but with dialect-tagged JSON recognized ahead of the plain
|
|
129
|
+
* `text/plain` fallback. The first entry whose `match` accepts the parsed value
|
|
130
|
+
* wins; entries that overlap are the registrant's own business, since matching
|
|
131
|
+
* `dialect` as an exact literal already makes structural validation reject
|
|
132
|
+
* every other dialect's blob.
|
|
133
|
+
*
|
|
134
|
+
* @param {readonly DialectEntry[]} dialects
|
|
135
|
+
* @returns {(bytes: Vec) => DetectMeta}
|
|
136
|
+
*/
|
|
137
|
+
export const detect = dialects => bytes => {
|
|
138
|
+
const base = detectVec(bytes)
|
|
139
|
+
// Only whole-blob-valid UTF-8 text can possibly be JSON; a magic-byte hit
|
|
140
|
+
// or binary fallback is never a dialect match.
|
|
141
|
+
if (base.type !== 'text') { return base }
|
|
142
|
+
// `detectVec`'s `type: 'text'` verdict already means `bytes` is byte-aligned,
|
|
143
|
+
// whole-blob-valid UTF-8 — the same two conditions `fromVec` checks, via the
|
|
144
|
+
// same decoder — so `fromVec` cannot return `null` here.
|
|
145
|
+
const text = assertNotNullish(fromVec(bytes), 'detect: type text implies fromVec succeeds')
|
|
146
|
+
const [tag, value] = parse(text)
|
|
147
|
+
if (tag === 'error') { return base }
|
|
148
|
+
const matched = dialects.find(({ match }) => match(value))
|
|
149
|
+
return matched === undefined
|
|
150
|
+
? base
|
|
151
|
+
: { ...base, mime_type: `application/${matched.dialect}+json` }
|
|
152
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { List as ChunkList } from '../../types/list/types.ts';
|
|
2
|
+
import type { Expression } from './types.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Serializes an expression into composable chunks, or rejects an invalid identifier.
|
|
5
|
+
*
|
|
6
|
+
* @type {(expression: Expression) => ChunkList<string> | undefined}
|
|
7
|
+
*/
|
|
8
|
+
export declare const nix: (expression: Expression) => ChunkList<string> | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Serializes an expression with exactly one trailing newline on success.
|
|
11
|
+
*
|
|
12
|
+
* @type {(expression: Expression) => string | undefined}
|
|
13
|
+
*/
|
|
14
|
+
export declare const nixToString: (expression: Expression) => string | undefined;
|
|
@@ -0,0 +1,261 @@
|
|
|
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. See `./types.ts` for the `Expression`
|
|
7
|
+
* type-level API.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
/** @import { List as ChunkList } from '../../types/list/types.ts' */
|
|
12
|
+
import { toArray } from '../../types/list/module.f.mjs'
|
|
13
|
+
import { concat } from '../../types/string/module.f.mjs'
|
|
14
|
+
import { includes } from '../../types/array/module.f.mjs'
|
|
15
|
+
import {
|
|
16
|
+
digitRange,
|
|
17
|
+
latinCapitalLetterRange,
|
|
18
|
+
latinSmallLetterRange,
|
|
19
|
+
range,
|
|
20
|
+
} from '../../text/ascii/module.f.mjs'
|
|
21
|
+
import { fromRange, get, merge } from '../../types/range_set/module.f.mjs'
|
|
22
|
+
/** @import { Expression, _AttributePath, _Binding, _Reference, _AttributeSet, _NixList, _Application, _OpenSetPattern, _Lambda, _Let, _Chunks } from './types.ts' */
|
|
23
|
+
|
|
24
|
+
const reservedWords = /** @type {const} */ ([
|
|
25
|
+
'assert',
|
|
26
|
+
'else',
|
|
27
|
+
'if',
|
|
28
|
+
'in',
|
|
29
|
+
'inherit',
|
|
30
|
+
'let',
|
|
31
|
+
'or',
|
|
32
|
+
'rec',
|
|
33
|
+
'then',
|
|
34
|
+
'with',
|
|
35
|
+
])
|
|
36
|
+
|
|
37
|
+
const isReservedWord = includes(reservedWords)
|
|
38
|
+
|
|
39
|
+
const letters = merge
|
|
40
|
+
(fromRange(latinCapitalLetterRange))
|
|
41
|
+
(fromRange(latinSmallLetterRange))
|
|
42
|
+
|
|
43
|
+
const identifierInitial = toArray(merge
|
|
44
|
+
(letters)
|
|
45
|
+
(fromRange(range('_'))))
|
|
46
|
+
|
|
47
|
+
const getIdentifierInitial = get(identifierInitial)
|
|
48
|
+
|
|
49
|
+
/** @type {(character: string) => boolean} */
|
|
50
|
+
const isIdentifierInitial = character =>
|
|
51
|
+
getIdentifierInitial(character.charCodeAt(0))
|
|
52
|
+
|
|
53
|
+
const identifierTrailing = toArray(merge
|
|
54
|
+
(merge
|
|
55
|
+
(identifierInitial)
|
|
56
|
+
(fromRange(digitRange)))
|
|
57
|
+
(merge
|
|
58
|
+
(fromRange(range("'")))
|
|
59
|
+
(fromRange(range('-')))))
|
|
60
|
+
|
|
61
|
+
const getIdentifierTrailing = get(identifierTrailing)
|
|
62
|
+
|
|
63
|
+
/** @type {(character: string) => boolean} */
|
|
64
|
+
const isIdentifierTrailing = character =>
|
|
65
|
+
getIdentifierTrailing(character.charCodeAt(0))
|
|
66
|
+
|
|
67
|
+
/** @type {(value: string) => boolean} */
|
|
68
|
+
const isIdentifier = value => {
|
|
69
|
+
const [initial, ...trailing] = value
|
|
70
|
+
return initial !== undefined
|
|
71
|
+
&& isIdentifierInitial(initial)
|
|
72
|
+
&& trailing.every(isIdentifierTrailing)
|
|
73
|
+
&& !isReservedWord(value)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** @type {(level: number) => string} */
|
|
77
|
+
const indent = level => ' '.repeat(level)
|
|
78
|
+
|
|
79
|
+
/** @type {(value: string) => string} */
|
|
80
|
+
const escapeQuoted = value => value
|
|
81
|
+
.replaceAll('\\', '\\\\')
|
|
82
|
+
.replaceAll('"', '\\"')
|
|
83
|
+
.replaceAll('${', '\\${')
|
|
84
|
+
.replaceAll('\n', '\\n')
|
|
85
|
+
.replaceAll('\r', '\\r')
|
|
86
|
+
.replaceAll('\t', '\\t')
|
|
87
|
+
|
|
88
|
+
/** @type {(value: string) => string} */
|
|
89
|
+
const quoted = value => `"${escapeQuoted(value)}"`
|
|
90
|
+
|
|
91
|
+
/** @type {(value: string) => string} */
|
|
92
|
+
const attributeName = value =>
|
|
93
|
+
isIdentifier(value) ? value : quoted(value)
|
|
94
|
+
|
|
95
|
+
/** @type {(path: _AttributePath) => string} */
|
|
96
|
+
const attributePath = path =>
|
|
97
|
+
path.map(attributeName).join('.')
|
|
98
|
+
|
|
99
|
+
/** @type {(value: string) => string} */
|
|
100
|
+
const escapeIndented = value => value
|
|
101
|
+
.replaceAll("''", "'''")
|
|
102
|
+
.replaceAll('${', "''${")
|
|
103
|
+
|
|
104
|
+
/** @type {(line: string) => string} */
|
|
105
|
+
const protectLeadingWhitespace = line => {
|
|
106
|
+
const contentStart = [...line, 'x'].findIndex(character => character !== ' ' && character !== '\t')
|
|
107
|
+
const leading = line.slice(0, contentStart)
|
|
108
|
+
.replaceAll(' ', "''\\ ")
|
|
109
|
+
.replaceAll('\t', "''\\t")
|
|
110
|
+
return `${leading}${line.slice(contentStart)}`
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** @type {(reference: _Reference) => string | undefined} */
|
|
114
|
+
const serializeReference = ([, name, ...selection]) =>
|
|
115
|
+
isIdentifier(name)
|
|
116
|
+
? [name, ...selection.map(attributeName)].join('.')
|
|
117
|
+
: undefined
|
|
118
|
+
|
|
119
|
+
/** @type {(reference: _Reference) => _Chunks | undefined} */
|
|
120
|
+
const serializeReferenceChunks = reference => {
|
|
121
|
+
const serialized = serializeReference(reference)
|
|
122
|
+
return serialized === undefined ? undefined : [serialized]
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** @type {(pattern: _OpenSetPattern) => string | undefined} */
|
|
126
|
+
const serializePattern = ([, ...names]) =>
|
|
127
|
+
names.every((name, index) => isIdentifier(name) && names.indexOf(name) === index)
|
|
128
|
+
? `{ ${[...names, '...'].join(', ')} }`
|
|
129
|
+
: undefined
|
|
130
|
+
|
|
131
|
+
/** @type {(chunks: readonly _Chunks[], separator: string) => _Chunks} */
|
|
132
|
+
const joinChunks = (chunks, separator) =>
|
|
133
|
+
chunks.flatMap((chunk, index) => index === 0 ? chunk : [separator, ...chunk])
|
|
134
|
+
|
|
135
|
+
/** @type {(prefix: _AttributePath, path: _AttributePath) => boolean} */
|
|
136
|
+
const isPathPrefix = (prefix, path) =>
|
|
137
|
+
prefix.length <= path.length
|
|
138
|
+
&& prefix.every((name, index) => name === path[index])
|
|
139
|
+
|
|
140
|
+
/** @type {(a: _AttributePath, b: _AttributePath) => boolean} */
|
|
141
|
+
const pathsConflict = (a, b) =>
|
|
142
|
+
isPathPrefix(a, b) || isPathPrefix(b, a)
|
|
143
|
+
|
|
144
|
+
/** @type {(bindings: readonly _Binding[]) => boolean} */
|
|
145
|
+
const bindingsCompatible = bindings =>
|
|
146
|
+
bindings.every(([, path], index) =>
|
|
147
|
+
bindings.slice(0, index).every(([, previous]) => !pathsConflict(path, previous)))
|
|
148
|
+
|
|
149
|
+
/** @type {(bindings: readonly _Binding[], level: number) => _Chunks | undefined} */
|
|
150
|
+
const serializeBindings = (bindings, level) => {
|
|
151
|
+
if (!bindingsCompatible(bindings)) {
|
|
152
|
+
return undefined
|
|
153
|
+
}
|
|
154
|
+
const serialized = bindings.map(([, path, value]) => {
|
|
155
|
+
const expression = serialize(value, level)
|
|
156
|
+
return expression === undefined
|
|
157
|
+
? undefined
|
|
158
|
+
: [indent(level), attributePath(path), ' = ', ...expression, ';']
|
|
159
|
+
})
|
|
160
|
+
const defined = serialized.flatMap(value => value === undefined ? [] : [value])
|
|
161
|
+
return defined.length !== serialized.length
|
|
162
|
+
? undefined
|
|
163
|
+
: joinChunks(defined, '\n')
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** @type {(set: _AttributeSet, level: number) => _Chunks | undefined} */
|
|
167
|
+
const serializeSet = ([, ...bindings], level) => {
|
|
168
|
+
if (bindings.length === 0) {
|
|
169
|
+
return ['{}']
|
|
170
|
+
}
|
|
171
|
+
const body = serializeBindings(bindings, level + 1)
|
|
172
|
+
return body === undefined ? undefined : ['{\n', ...body, '\n', indent(level), '}']
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/** @type {(list: _NixList) => _Chunks | undefined} */
|
|
176
|
+
const serializeList = ([, ...references]) => {
|
|
177
|
+
const items = references.map(serializeReference)
|
|
178
|
+
const definedItems = items.flatMap(item => item === undefined ? [] : [item])
|
|
179
|
+
return items.includes(undefined)
|
|
180
|
+
? undefined
|
|
181
|
+
: items.length === 0
|
|
182
|
+
? ['[ ]']
|
|
183
|
+
: ['[ ', ...definedItems.flatMap((item, index) => index === 0 ? [item] : [' ', item]), ' ]']
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/** @type {(application: _Application, level: number) => _Chunks | undefined} */
|
|
187
|
+
const serializeApplication = ([, fn, ...args], level) => {
|
|
188
|
+
const serializedFn = serializeReference(fn)
|
|
189
|
+
const serializedArgs = args.map(argument =>
|
|
190
|
+
argument[0] === 'ref'
|
|
191
|
+
? serializeReferenceChunks(argument)
|
|
192
|
+
: serializeSet(argument, level))
|
|
193
|
+
const definedArgs = serializedArgs.flatMap(argument => argument === undefined ? [] : [argument])
|
|
194
|
+
return serializedFn === undefined || definedArgs.length !== serializedArgs.length
|
|
195
|
+
? undefined
|
|
196
|
+
: [serializedFn, ...definedArgs.flatMap(argument => [' ', ...argument])]
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/** @type {(lambda: _Lambda, level: number) => _Chunks | undefined} */
|
|
200
|
+
const serializeLambda = ([, pattern, body], level) => {
|
|
201
|
+
const serializedPattern = serializePattern(pattern)
|
|
202
|
+
const serializedBody = serialize(body, level)
|
|
203
|
+
return serializedPattern === undefined || serializedBody === undefined
|
|
204
|
+
? undefined
|
|
205
|
+
: [serializedPattern, ': ', ...serializedBody]
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** @type {(let_: _Let, level: number) => _Chunks | undefined} */
|
|
209
|
+
const serializeLet = ([, bindings, body], level) => {
|
|
210
|
+
const serializedBindings = serializeBindings(bindings, level + 1)
|
|
211
|
+
const serializedBody = serialize(body, level)
|
|
212
|
+
return serializedBindings === undefined || serializedBody === undefined
|
|
213
|
+
? undefined
|
|
214
|
+
: ['let\n', ...serializedBindings, '\n', indent(level), 'in\n', indent(level), ...serializedBody]
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/** @type {(expression: Expression, level: number) => _Chunks | undefined} */
|
|
218
|
+
const serialize = (expression, level) => {
|
|
219
|
+
if (typeof expression === 'string') {
|
|
220
|
+
return [quoted(expression)]
|
|
221
|
+
}
|
|
222
|
+
switch (expression[0]) {
|
|
223
|
+
case 'ref': {
|
|
224
|
+
return serializeReferenceChunks(expression)
|
|
225
|
+
}
|
|
226
|
+
case 'set': return serializeSet(expression, level)
|
|
227
|
+
case 'list': return serializeList(expression)
|
|
228
|
+
case 'apply': return serializeApplication(expression, level)
|
|
229
|
+
case 'lambda': return serializeLambda(expression, level)
|
|
230
|
+
case 'let': return serializeLet(expression, level)
|
|
231
|
+
case 'indented-string': {
|
|
232
|
+
const [, value] = expression
|
|
233
|
+
const contentIndent = indent(level + 1)
|
|
234
|
+
const content = escapeIndented(value)
|
|
235
|
+
.split('\n')
|
|
236
|
+
.map(protectLeadingWhitespace)
|
|
237
|
+
.map(line => `${contentIndent}${line}`)
|
|
238
|
+
.join('\n')
|
|
239
|
+
return ["''\n", content, '\n', indent(level), "''"]
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Serializes an expression into composable chunks, or rejects an invalid identifier.
|
|
246
|
+
*
|
|
247
|
+
* @type {(expression: Expression) => ChunkList<string> | undefined}
|
|
248
|
+
*/
|
|
249
|
+
export const nix = expression => {
|
|
250
|
+
return serialize(expression, 0)
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Serializes an expression with exactly one trailing newline on success.
|
|
255
|
+
*
|
|
256
|
+
* @type {(expression: Expression) => string | undefined}
|
|
257
|
+
*/
|
|
258
|
+
export const nixToString = expression => {
|
|
259
|
+
const chunks = nix(expression)
|
|
260
|
+
return chunks === undefined ? undefined : `${concat(chunks)}\n`
|
|
261
|
+
}
|