keri-ts 0.3.1 → 0.4.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 +2 -2
- package/esm/cesr/mod.js +2 -0
- package/esm/cesr/src/adapters/async-iterable.js +17 -0
- package/esm/cesr/src/adapters/effection.js +9 -0
- package/esm/cesr/src/annotate/annotator.js +43 -0
- package/esm/cesr/src/annotate/comments.js +40 -0
- package/esm/cesr/src/annotate/denot.js +17 -0
- package/esm/cesr/src/annotate/render.js +336 -0
- package/esm/cesr/src/bench/parser-benchmark.js +134 -0
- package/esm/cesr/src/core/bytes.js +123 -0
- package/esm/cesr/src/core/cbor.js +122 -0
- package/esm/cesr/src/core/errors.js +82 -0
- package/esm/cesr/src/core/parser-attachment-collector.js +153 -0
- package/esm/cesr/src/core/parser-constants.js +74 -0
- package/esm/cesr/src/core/parser-deferred-frames.js +73 -0
- package/esm/cesr/src/core/parser-engine.js +212 -0
- package/esm/cesr/src/core/parser-frame-parser.js +637 -0
- package/esm/cesr/src/core/parser-policy.js +137 -0
- package/esm/cesr/src/core/parser-stream-state.js +62 -0
- package/esm/cesr/src/core/recovery-diagnostics.js +25 -0
- package/esm/cesr/src/core/types.js +1 -0
- package/esm/cesr/src/index.js +76 -0
- package/esm/cesr/src/parser/attachment-fallback-policy.js +142 -0
- package/esm/cesr/src/parser/attachment-parser.js +4 -0
- package/esm/cesr/src/parser/cold-start.js +17 -0
- package/esm/cesr/src/parser/group-dispatch.js +720 -0
- package/esm/cesr/src/primitives/aggor.js +84 -0
- package/esm/cesr/src/primitives/bexter.js +64 -0
- package/esm/cesr/src/primitives/blinder.js +30 -0
- package/esm/cesr/src/primitives/cigar.js +28 -0
- package/esm/cesr/src/primitives/cipher.js +18 -0
- package/esm/cesr/src/primitives/codex.js +74 -0
- package/esm/cesr/src/primitives/compactor.js +10 -0
- package/esm/cesr/src/primitives/counter.js +289 -0
- package/esm/cesr/src/primitives/dater.js +37 -0
- package/esm/cesr/src/primitives/decimer.js +63 -0
- package/esm/cesr/src/primitives/decrypter.js +18 -0
- package/esm/cesr/src/primitives/diger.js +28 -0
- package/esm/cesr/src/primitives/encrypter.js +19 -0
- package/esm/cesr/src/primitives/ilker.js +27 -0
- package/esm/cesr/src/primitives/indexer.js +278 -0
- package/esm/cesr/src/primitives/labeler.js +81 -0
- package/esm/cesr/src/primitives/mapper.js +218 -0
- package/esm/cesr/src/primitives/matter.js +263 -0
- package/esm/cesr/src/primitives/mediar.js +30 -0
- package/esm/cesr/src/primitives/noncer.js +36 -0
- package/esm/cesr/src/primitives/number.js +32 -0
- package/esm/cesr/src/primitives/pather.js +35 -0
- package/esm/cesr/src/primitives/prefixer.js +26 -0
- package/esm/cesr/src/primitives/primitive.js +9 -0
- package/esm/cesr/src/primitives/registry.js +17 -0
- package/esm/cesr/src/primitives/saider.js +28 -0
- package/esm/cesr/src/primitives/salter.js +22 -0
- package/esm/cesr/src/primitives/sealer.js +30 -0
- package/esm/cesr/src/primitives/seqner.js +32 -0
- package/esm/cesr/src/primitives/siger.js +29 -0
- package/esm/cesr/src/primitives/signer.js +23 -0
- package/esm/cesr/src/primitives/structor.js +104 -0
- package/esm/cesr/src/primitives/tagger.js +44 -0
- package/esm/cesr/src/primitives/texter.js +29 -0
- package/esm/cesr/src/primitives/tholder.js +31 -0
- package/esm/cesr/src/primitives/traitor.js +27 -0
- package/esm/cesr/src/primitives/unknown.js +89 -0
- package/esm/cesr/src/primitives/verfer.js +28 -0
- package/esm/cesr/src/primitives/verser.js +61 -0
- package/esm/cesr/src/router/router-stub.js +17 -0
- package/esm/cesr/src/serder/serder.js +239 -0
- package/esm/cesr/src/serder/serdery.js +12 -0
- package/esm/cesr/src/serder/smell.js +57 -0
- package/esm/cesr/src/tables/codex-utils.js +9 -0
- package/esm/cesr/src/tables/counter-codex.js +10 -0
- package/esm/cesr/src/tables/counter-groups.js +46 -0
- package/esm/cesr/src/tables/counter-version-registry.js +201 -0
- package/esm/cesr/src/tables/counter.tables.generated.js +178 -0
- package/esm/cesr/src/tables/indexer.codex.generated.js +64 -0
- package/esm/cesr/src/tables/indexer.tables.generated.js +72 -0
- package/esm/cesr/src/tables/matter.codex.generated.js +399 -0
- package/esm/cesr/src/tables/matter.tables.generated.js +350 -0
- package/esm/cesr/src/tables/table-types.js +1 -0
- package/esm/cesr/src/tables/trait.codex.generated.js +10 -0
- package/esm/cesr/src/tables/versions.js +12 -0
- package/esm/{app → cesr/src}/version.js +2 -2
- package/esm/keri/src/app/cli/aid.js +39 -0
- package/esm/{app → keri/src/app}/cli/annotate-color.js +3 -3
- package/esm/keri/src/app/cli/annotate.js +93 -0
- package/esm/{app → keri/src/app}/cli/benchmark.js +3 -4
- package/esm/{app → keri/src/app}/cli/cli-node.js +2 -2
- package/esm/{app → keri/src/app}/cli/cli.js +13 -8
- package/esm/{app → keri/src/app}/cli/command-definitions.js +109 -14
- package/esm/keri/src/app/cli/command-types.js +1 -0
- package/esm/{app → keri/src/app}/cli/common/existing.js +6 -1
- package/esm/{app → keri/src/app}/cli/common/parsing.js +1 -1
- package/esm/{app → keri/src/app}/cli/export.js +7 -5
- package/esm/{app → keri/src/app}/cli/incept.js +8 -3
- package/esm/{app → keri/src/app}/cli/init.js +4 -0
- package/esm/keri/src/app/cli/list.js +33 -0
- package/esm/{app → keri/src/app}/configing.js +23 -17
- package/esm/{app → keri/src/app}/habbing.js +173 -47
- package/esm/{app → keri/src/app}/keeping.js +47 -8
- package/esm/{app → keri/src/app}/server.js +1 -1
- package/esm/keri/src/app/version.js +9 -0
- package/esm/{core → keri/src/core}/bytes.js +5 -2
- package/esm/{core → keri/src/core}/errors.js +13 -0
- package/esm/{core → keri/src/core}/index.js +1 -0
- package/esm/keri/src/core/logger.js +45 -0
- package/esm/keri/src/core/records.js +1 -0
- package/esm/keri/src/db/basing.js +1446 -0
- package/esm/keri/src/db/core/keys.js +172 -0
- package/esm/keri/src/db/core/lmdber.js +1740 -0
- package/esm/{db → keri/src/db}/core/path-manager.js +44 -36
- package/esm/{db → keri/src/db}/index.js +2 -0
- package/esm/keri/src/db/keeping.js +348 -0
- package/esm/keri/src/db/koming.js +322 -0
- package/esm/keri/src/db/subing.js +1262 -0
- package/esm/{npm → keri/src/npm}/index.js +1 -1
- package/package.json +11 -11
- package/types/_dnt.polyfills.d.ts +5 -0
- package/types/_dnt.polyfills.d.ts.map +1 -1
- package/types/cesr/mod.d.ts +3 -0
- package/types/cesr/mod.d.ts.map +1 -0
- package/types/cesr/src/adapters/async-iterable.d.ts +4 -0
- package/types/cesr/src/adapters/async-iterable.d.ts.map +1 -0
- package/types/cesr/src/adapters/effection.d.ts +8 -0
- package/types/cesr/src/adapters/effection.d.ts.map +1 -0
- package/types/cesr/src/annotate/annotator.d.ts +4 -0
- package/types/cesr/src/annotate/annotator.d.ts.map +1 -0
- package/types/cesr/src/annotate/comments.d.ts +6 -0
- package/types/cesr/src/annotate/comments.d.ts.map +1 -0
- package/types/cesr/src/annotate/denot.d.ts +2 -0
- package/types/cesr/src/annotate/denot.d.ts.map +1 -0
- package/types/cesr/src/annotate/render.d.ts +11 -0
- package/types/cesr/src/annotate/render.d.ts.map +1 -0
- package/types/cesr/src/annotate/types.d.ts +15 -0
- package/types/cesr/src/annotate/types.d.ts.map +1 -0
- package/types/cesr/src/bench/parser-benchmark.d.ts +70 -0
- package/types/cesr/src/bench/parser-benchmark.d.ts.map +1 -0
- package/types/cesr/src/core/bytes.d.ts +40 -0
- package/types/cesr/src/core/bytes.d.ts.map +1 -0
- package/types/cesr/src/core/cbor.d.ts +30 -0
- package/types/cesr/src/core/cbor.d.ts.map +1 -0
- package/types/cesr/src/core/errors.d.ts +44 -0
- package/types/cesr/src/core/errors.d.ts.map +1 -0
- package/types/cesr/src/core/parser-attachment-collector.d.ts +51 -0
- package/types/cesr/src/core/parser-attachment-collector.d.ts.map +1 -0
- package/types/cesr/src/core/parser-constants.d.ts +30 -0
- package/types/cesr/src/core/parser-constants.d.ts.map +1 -0
- package/types/cesr/src/core/parser-deferred-frames.d.ts +38 -0
- package/types/cesr/src/core/parser-deferred-frames.d.ts.map +1 -0
- package/types/cesr/src/core/parser-engine.d.ts +67 -0
- package/types/cesr/src/core/parser-engine.d.ts.map +1 -0
- package/types/cesr/src/core/parser-frame-parser.d.ts +89 -0
- package/types/cesr/src/core/parser-frame-parser.d.ts.map +1 -0
- package/types/cesr/src/core/parser-policy.d.ts +27 -0
- package/types/cesr/src/core/parser-policy.d.ts.map +1 -0
- package/types/cesr/src/core/parser-stream-state.d.ts +30 -0
- package/types/cesr/src/core/parser-stream-state.d.ts.map +1 -0
- package/types/cesr/src/core/recovery-diagnostics.d.ts +59 -0
- package/types/cesr/src/core/recovery-diagnostics.d.ts.map +1 -0
- package/types/cesr/src/core/types.d.ts +77 -0
- package/types/cesr/src/core/types.d.ts.map +1 -0
- package/types/cesr/src/index.d.ts +77 -0
- package/types/cesr/src/index.d.ts.map +1 -0
- package/types/cesr/src/parser/attachment-fallback-policy.d.ts +78 -0
- package/types/cesr/src/parser/attachment-fallback-policy.d.ts.map +1 -0
- package/types/cesr/src/parser/attachment-parser.d.ts +8 -0
- package/types/cesr/src/parser/attachment-parser.d.ts.map +1 -0
- package/types/cesr/src/parser/cold-start.d.ts +3 -0
- package/types/cesr/src/parser/cold-start.d.ts.map +1 -0
- package/types/cesr/src/parser/group-dispatch.d.ts +99 -0
- package/types/cesr/src/parser/group-dispatch.d.ts.map +1 -0
- package/types/cesr/src/primitives/aggor.d.ts +39 -0
- package/types/cesr/src/primitives/aggor.d.ts.map +1 -0
- package/types/cesr/src/primitives/bexter.d.ts +32 -0
- package/types/cesr/src/primitives/bexter.d.ts.map +1 -0
- package/types/cesr/src/primitives/blinder.d.ts +20 -0
- package/types/cesr/src/primitives/blinder.d.ts.map +1 -0
- package/types/cesr/src/primitives/cigar.d.ts +16 -0
- package/types/cesr/src/primitives/cigar.d.ts.map +1 -0
- package/types/cesr/src/primitives/cipher.d.ts +11 -0
- package/types/cesr/src/primitives/cipher.d.ts.map +1 -0
- package/types/cesr/src/primitives/codex.d.ts +54 -0
- package/types/cesr/src/primitives/codex.d.ts.map +1 -0
- package/types/cesr/src/primitives/compactor.d.ts +5 -0
- package/types/cesr/src/primitives/compactor.d.ts.map +1 -0
- package/types/cesr/src/primitives/counter.d.ts +75 -0
- package/types/cesr/src/primitives/counter.d.ts.map +1 -0
- package/types/cesr/src/primitives/dater.d.ts +16 -0
- package/types/cesr/src/primitives/dater.d.ts.map +1 -0
- package/types/cesr/src/primitives/decimer.d.ts +23 -0
- package/types/cesr/src/primitives/decimer.d.ts.map +1 -0
- package/types/cesr/src/primitives/decrypter.d.ts +11 -0
- package/types/cesr/src/primitives/decrypter.d.ts.map +1 -0
- package/types/cesr/src/primitives/diger.d.ts +20 -0
- package/types/cesr/src/primitives/diger.d.ts.map +1 -0
- package/types/cesr/src/primitives/encrypter.d.ts +12 -0
- package/types/cesr/src/primitives/encrypter.d.ts.map +1 -0
- package/types/cesr/src/primitives/ilker.d.ts +17 -0
- package/types/cesr/src/primitives/ilker.d.ts.map +1 -0
- package/types/cesr/src/primitives/indexer.d.ts +63 -0
- package/types/cesr/src/primitives/indexer.d.ts.map +1 -0
- package/types/cesr/src/primitives/labeler.d.ts +32 -0
- package/types/cesr/src/primitives/labeler.d.ts.map +1 -0
- package/types/cesr/src/primitives/mapper.d.ts +69 -0
- package/types/cesr/src/primitives/mapper.d.ts.map +1 -0
- package/types/cesr/src/primitives/matter.d.ts +55 -0
- package/types/cesr/src/primitives/matter.d.ts.map +1 -0
- package/types/cesr/src/primitives/mediar.d.ts +20 -0
- package/types/cesr/src/primitives/mediar.d.ts.map +1 -0
- package/types/cesr/src/primitives/noncer.d.ts +24 -0
- package/types/cesr/src/primitives/noncer.d.ts.map +1 -0
- package/types/cesr/src/primitives/number.d.ts +16 -0
- package/types/cesr/src/primitives/number.d.ts.map +1 -0
- package/types/cesr/src/primitives/pather.d.ts +16 -0
- package/types/cesr/src/primitives/pather.d.ts.map +1 -0
- package/types/cesr/src/primitives/prefixer.d.ts +16 -0
- package/types/cesr/src/primitives/prefixer.d.ts.map +1 -0
- package/types/cesr/src/primitives/primitive.d.ts +25 -0
- package/types/cesr/src/primitives/primitive.d.ts.map +1 -0
- package/types/cesr/src/primitives/registry.d.ts +10 -0
- package/types/cesr/src/primitives/registry.d.ts.map +1 -0
- package/types/cesr/src/primitives/saider.d.ts +16 -0
- package/types/cesr/src/primitives/saider.d.ts.map +1 -0
- package/types/cesr/src/primitives/salter.d.ts +13 -0
- package/types/cesr/src/primitives/salter.d.ts.map +1 -0
- package/types/cesr/src/primitives/sealer.d.ts +20 -0
- package/types/cesr/src/primitives/sealer.d.ts.map +1 -0
- package/types/cesr/src/primitives/seqner.d.ts +16 -0
- package/types/cesr/src/primitives/seqner.d.ts.map +1 -0
- package/types/cesr/src/primitives/siger.d.ts +16 -0
- package/types/cesr/src/primitives/siger.d.ts.map +1 -0
- package/types/cesr/src/primitives/signer.d.ts +14 -0
- package/types/cesr/src/primitives/signer.d.ts.map +1 -0
- package/types/cesr/src/primitives/structor.d.ts +44 -0
- package/types/cesr/src/primitives/structor.d.ts.map +1 -0
- package/types/cesr/src/primitives/tagger.d.ts +17 -0
- package/types/cesr/src/primitives/tagger.d.ts.map +1 -0
- package/types/cesr/src/primitives/texter.d.ts +15 -0
- package/types/cesr/src/primitives/texter.d.ts.map +1 -0
- package/types/cesr/src/primitives/tholder.d.ts +15 -0
- package/types/cesr/src/primitives/tholder.d.ts.map +1 -0
- package/types/cesr/src/primitives/traitor.d.ts +17 -0
- package/types/cesr/src/primitives/traitor.d.ts.map +1 -0
- package/types/cesr/src/primitives/unknown.d.ts +31 -0
- package/types/cesr/src/primitives/unknown.d.ts.map +1 -0
- package/types/cesr/src/primitives/verfer.d.ts +16 -0
- package/types/cesr/src/primitives/verfer.d.ts.map +1 -0
- package/types/cesr/src/primitives/verser.d.ts +24 -0
- package/types/cesr/src/primitives/verser.d.ts.map +1 -0
- package/types/cesr/src/router/router-stub.d.ts +11 -0
- package/types/cesr/src/router/router-stub.d.ts.map +1 -0
- package/types/cesr/src/serder/serder.d.ts +70 -0
- package/types/cesr/src/serder/serder.d.ts.map +1 -0
- package/types/cesr/src/serder/serdery.d.ts +6 -0
- package/types/cesr/src/serder/serdery.d.ts.map +1 -0
- package/types/cesr/src/serder/smell.d.ts +7 -0
- package/types/cesr/src/serder/smell.d.ts.map +1 -0
- package/types/cesr/src/tables/codex-utils.d.ts +4 -0
- package/types/cesr/src/tables/codex-utils.d.ts.map +1 -0
- package/types/cesr/src/tables/counter-codex.d.ts +6 -0
- package/types/cesr/src/tables/counter-codex.d.ts.map +1 -0
- package/types/cesr/src/tables/counter-groups.d.ts +8 -0
- package/types/cesr/src/tables/counter-groups.d.ts.map +1 -0
- package/types/cesr/src/tables/counter-version-registry.d.ts +90 -0
- package/types/cesr/src/tables/counter-version-registry.d.ts.map +1 -0
- package/types/cesr/src/tables/counter.tables.generated.d.ts +92 -0
- package/types/cesr/src/tables/counter.tables.generated.d.ts.map +1 -0
- package/types/cesr/src/tables/indexer.codex.generated.d.ts +127 -0
- package/types/cesr/src/tables/indexer.codex.generated.d.ts.map +1 -0
- package/types/cesr/src/tables/indexer.tables.generated.d.ts +46 -0
- package/types/cesr/src/tables/indexer.tables.generated.d.ts.map +1 -0
- package/types/cesr/src/tables/matter.codex.generated.d.ts +797 -0
- package/types/cesr/src/tables/matter.codex.generated.d.ts.map +1 -0
- package/types/cesr/src/tables/matter.tables.generated.d.ts +228 -0
- package/types/cesr/src/tables/matter.tables.generated.d.ts.map +1 -0
- package/types/cesr/src/tables/table-types.d.ts +26 -0
- package/types/cesr/src/tables/table-types.d.ts.map +1 -0
- package/types/cesr/src/tables/trait.codex.generated.d.ts +19 -0
- package/types/cesr/src/tables/trait.codex.generated.d.ts.map +1 -0
- package/types/cesr/src/tables/versions.d.ts +16 -0
- package/types/cesr/src/tables/versions.d.ts.map +1 -0
- package/types/cesr/src/version.d.ts +8 -0
- package/types/cesr/src/version.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
- package/types/keri/src/app/cli/agent.d.ts.map +1 -0
- package/types/keri/src/app/cli/aid.d.ts +4 -0
- package/types/keri/src/app/cli/aid.d.ts.map +1 -0
- package/types/keri/src/app/cli/annotate-color.d.ts.map +1 -0
- package/types/keri/src/app/cli/annotate.d.ts.map +1 -0
- package/types/keri/src/app/cli/benchmark.d.ts.map +1 -0
- package/types/keri/src/app/cli/cli-node.d.ts +2 -0
- package/types/keri/src/app/cli/cli-node.d.ts.map +1 -0
- package/types/keri/src/app/cli/cli.d.ts.map +1 -0
- package/types/keri/src/app/cli/command-definitions.d.ts.map +1 -0
- package/types/keri/src/app/cli/command-types.d.ts.map +1 -0
- package/types/keri/src/app/cli/common/existing.d.ts +9 -0
- package/types/keri/src/app/cli/common/existing.d.ts.map +1 -0
- package/types/keri/src/app/cli/common/parsing.d.ts.map +1 -0
- package/types/keri/src/app/cli/db-dump.d.ts.map +1 -0
- package/types/keri/src/app/cli/export.d.ts.map +1 -0
- package/types/keri/src/app/cli/incept.d.ts.map +1 -0
- package/types/{app → keri/src/app}/cli/index.d.ts +1 -1
- package/types/keri/src/app/cli/index.d.ts.map +1 -0
- package/types/keri/src/app/cli/init.d.ts.map +1 -0
- package/types/keri/src/app/cli/list.d.ts +4 -0
- package/types/keri/src/app/cli/list.d.ts.map +1 -0
- package/types/{app → keri/src/app}/configing.d.ts +8 -9
- package/types/keri/src/app/configing.d.ts.map +1 -0
- package/types/keri/src/app/habbing.d.ts +167 -0
- package/types/keri/src/app/habbing.d.ts.map +1 -0
- package/types/{app → keri/src/app}/index.d.ts +2 -2
- package/types/keri/src/app/index.d.ts.map +1 -0
- package/types/keri/src/app/keeping.d.ts +133 -0
- package/types/keri/src/app/keeping.d.ts.map +1 -0
- package/types/keri/src/app/server.d.ts.map +1 -0
- package/types/keri/src/app/version.d.ts +8 -0
- package/types/keri/src/app/version.d.ts.map +1 -0
- package/types/keri/src/core/bytes.d.ts.map +1 -0
- package/types/keri/src/core/errors.d.ts +32 -0
- package/types/keri/src/core/errors.d.ts.map +1 -0
- package/types/{core → keri/src/core}/index.d.ts +1 -0
- package/types/keri/src/core/index.d.ts.map +1 -0
- package/types/{core → keri/src/core}/logger.d.ts +4 -0
- package/types/keri/src/core/logger.d.ts.map +1 -0
- package/types/keri/src/core/records.d.ts +255 -0
- package/types/keri/src/core/records.d.ts.map +1 -0
- package/types/keri/src/db/basing.d.ts +262 -0
- package/types/keri/src/db/basing.d.ts.map +1 -0
- package/types/keri/src/db/core/keys.d.ts +95 -0
- package/types/keri/src/db/core/keys.d.ts.map +1 -0
- package/types/keri/src/db/core/lmdber.d.ts +586 -0
- package/types/keri/src/db/core/lmdber.d.ts.map +1 -0
- package/types/{db → keri/src/db}/core/path-manager.d.ts +12 -19
- package/types/keri/src/db/core/path-manager.d.ts.map +1 -0
- package/types/{db → keri/src/db}/index.d.ts +2 -0
- package/types/keri/src/db/index.d.ts.map +1 -0
- package/types/keri/src/db/keeping.d.ts +171 -0
- package/types/keri/src/db/keeping.d.ts.map +1 -0
- package/types/keri/src/db/koming.d.ts +166 -0
- package/types/keri/src/db/koming.d.ts.map +1 -0
- package/types/keri/src/db/subing.d.ts +546 -0
- package/types/keri/src/db/subing.d.ts.map +1 -0
- package/types/{npm → keri/src/npm}/index.d.ts +1 -1
- package/types/keri/src/npm/index.d.ts.map +1 -0
- package/esm/app/cli/annotate.js +0 -57
- package/esm/core/logger.js +0 -20
- package/esm/db/basing.js +0 -241
- package/esm/db/core/lmdber.js +0 -499
- package/esm/db/keeping.js +0 -214
- package/types/app/cli/agent.d.ts.map +0 -1
- package/types/app/cli/annotate-color.d.ts.map +0 -1
- package/types/app/cli/annotate.d.ts.map +0 -1
- package/types/app/cli/benchmark.d.ts.map +0 -1
- package/types/app/cli/cli-node.d.ts +0 -2
- package/types/app/cli/cli-node.d.ts.map +0 -1
- package/types/app/cli/cli.d.ts.map +0 -1
- package/types/app/cli/command-definitions.d.ts.map +0 -1
- package/types/app/cli/command-types.d.ts.map +0 -1
- package/types/app/cli/common/existing.d.ts +0 -4
- package/types/app/cli/common/existing.d.ts.map +0 -1
- package/types/app/cli/common/parsing.d.ts.map +0 -1
- package/types/app/cli/db-dump.d.ts.map +0 -1
- package/types/app/cli/export.d.ts.map +0 -1
- package/types/app/cli/incept.d.ts.map +0 -1
- package/types/app/cli/index.d.ts.map +0 -1
- package/types/app/cli/init.d.ts.map +0 -1
- package/types/app/configing.d.ts.map +0 -1
- package/types/app/habbing.d.ts +0 -107
- package/types/app/habbing.d.ts.map +0 -1
- package/types/app/index.d.ts.map +0 -1
- package/types/app/keeping.d.ts +0 -72
- package/types/app/keeping.d.ts.map +0 -1
- package/types/app/server.d.ts.map +0 -1
- package/types/app/version.d.ts +0 -8
- package/types/app/version.d.ts.map +0 -1
- package/types/core/bytes.d.ts.map +0 -1
- package/types/core/errors.d.ts +0 -19
- package/types/core/errors.d.ts.map +0 -1
- package/types/core/index.d.ts.map +0 -1
- package/types/core/logger.d.ts.map +0 -1
- package/types/db/basing.d.ts +0 -96
- package/types/db/basing.d.ts.map +0 -1
- package/types/db/core/lmdber.d.ts +0 -142
- package/types/db/core/lmdber.d.ts.map +0 -1
- package/types/db/core/path-manager.d.ts.map +0 -1
- package/types/db/index.d.ts.map +0 -1
- package/types/db/keeping.d.ts +0 -73
- package/types/db/keeping.d.ts.map +0 -1
- package/types/npm/index.d.ts.map +0 -1
- package/esm/{app/cli/command-types.js → cesr/src/annotate/types.js} +0 -0
- package/esm/{app → keri/src/app}/cli/agent.js +0 -0
- package/esm/{app → keri/src/app}/cli/db-dump.js +0 -0
- package/esm/{app → keri/src/app}/cli/index.js +1 -1
- package/esm/{app → keri/src/app}/index.js +2 -2
- /package/types/{app → keri/src/app}/cli/agent.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/annotate-color.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/annotate.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/benchmark.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/cli.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/command-definitions.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/command-types.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/common/parsing.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/db-dump.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/export.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/incept.d.ts +0 -0
- /package/types/{app → keri/src/app}/cli/init.d.ts +0 -0
- /package/types/{app → keri/src/app}/server.d.ts +0 -0
- /package/types/{core → keri/src/core}/bytes.d.ts +0 -0
package/README.md
CHANGED
|
@@ -83,5 +83,5 @@ deno task tufa version
|
|
|
83
83
|
|
|
84
84
|
## License
|
|
85
85
|
|
|
86
|
-
Licensed under the Apache License, Version 2.0 (`Apache-2.0`). See the
|
|
87
|
-
|
|
86
|
+
Licensed under the Apache License, Version 2.0 (`Apache-2.0`). See the top-level
|
|
87
|
+
`LICENSE` file in this repository.
|
package/esm/cesr/mod.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createParser } from "../core/parser-engine.js";
|
|
2
|
+
export async function* toAsyncFrames(source, options = {}) {
|
|
3
|
+
const parser = createParser(options);
|
|
4
|
+
for await (const chunk of source) {
|
|
5
|
+
const frames = parser.feed(chunk);
|
|
6
|
+
for (const frame of frames) {
|
|
7
|
+
if (frame.type === "error")
|
|
8
|
+
throw frame.error;
|
|
9
|
+
yield frame.frame;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
for (const frame of parser.flush()) {
|
|
13
|
+
if (frame.type === "error")
|
|
14
|
+
throw frame.error;
|
|
15
|
+
yield frame.frame;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { action } from "effection";
|
|
2
|
+
import { toAsyncFrames } from "./async-iterable.js";
|
|
3
|
+
export function* toEffectionFrames(source, options = {}) {
|
|
4
|
+
const frames = yield* action((resolve) => {
|
|
5
|
+
resolve(toAsyncFrames(source, options));
|
|
6
|
+
return () => { };
|
|
7
|
+
});
|
|
8
|
+
return { frames };
|
|
9
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { b } from "../core/bytes.js";
|
|
2
|
+
import { parseBytes } from "../core/parser-engine.js";
|
|
3
|
+
import { renderAnnotatedFrames, renderWrapperAnnotatedStream } from "./render.js";
|
|
4
|
+
const DEFAULT_OPTIONS = Object.freeze({
|
|
5
|
+
commentMode: "inline",
|
|
6
|
+
indent: 2,
|
|
7
|
+
showOffsets: false,
|
|
8
|
+
showRawHex: false,
|
|
9
|
+
domainHint: "auto",
|
|
10
|
+
pretty: false,
|
|
11
|
+
});
|
|
12
|
+
function resolveOptions(options) {
|
|
13
|
+
return {
|
|
14
|
+
...DEFAULT_OPTIONS,
|
|
15
|
+
...options,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function parsedFramesOrThrow(frames) {
|
|
19
|
+
const parsedFrames = [];
|
|
20
|
+
for (const frame of frames) {
|
|
21
|
+
if (frame.type === "error") {
|
|
22
|
+
throw frame.error;
|
|
23
|
+
}
|
|
24
|
+
parsedFrames.push(frame.frame);
|
|
25
|
+
}
|
|
26
|
+
return parsedFrames;
|
|
27
|
+
}
|
|
28
|
+
export function annotateFrames(input, options) {
|
|
29
|
+
const opts = resolveOptions(options);
|
|
30
|
+
const bytes = typeof input === "string" ? b(input) : input;
|
|
31
|
+
const frames = parsedFramesOrThrow(parseBytes(bytes));
|
|
32
|
+
return renderAnnotatedFrames(frames, opts);
|
|
33
|
+
}
|
|
34
|
+
export function annotate(input, options) {
|
|
35
|
+
const opts = resolveOptions(options);
|
|
36
|
+
const bytes = typeof input === "string" ? b(input) : input;
|
|
37
|
+
const wrapperAnnotated = renderWrapperAnnotatedStream(bytes, opts);
|
|
38
|
+
if (wrapperAnnotated !== null) {
|
|
39
|
+
return wrapperAnnotated;
|
|
40
|
+
}
|
|
41
|
+
const frames = annotateFrames(bytes, opts);
|
|
42
|
+
return frames.map((frame) => frame.lines.join("\n")).join("\n");
|
|
43
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { resolveCounterCodeNameTable } from "../tables/counter-version-registry.js";
|
|
2
|
+
import { COUNTER_CODE_NAMES_V1, COUNTER_CODE_NAMES_V2, } from "../tables/counter.tables.generated.js";
|
|
3
|
+
import { MATTER_CODE_NAMES } from "../tables/matter.tables.generated.js";
|
|
4
|
+
const NATIVE_FIELD_LABELS = Object.freeze({
|
|
5
|
+
v: "version string",
|
|
6
|
+
t: "ilk",
|
|
7
|
+
d: "SAID",
|
|
8
|
+
i: "AID prefix",
|
|
9
|
+
s: "sequence number",
|
|
10
|
+
p: "prior event digest",
|
|
11
|
+
kt: "signing threshold",
|
|
12
|
+
k: "current keys",
|
|
13
|
+
nt: "next threshold",
|
|
14
|
+
n: "next keys digest",
|
|
15
|
+
bt: "witness threshold",
|
|
16
|
+
b: "witness list",
|
|
17
|
+
c: "traits/config",
|
|
18
|
+
a: "anchors/data",
|
|
19
|
+
});
|
|
20
|
+
export function counterCodeName(code) {
|
|
21
|
+
const v2 = COUNTER_CODE_NAMES_V2[code];
|
|
22
|
+
if (v2)
|
|
23
|
+
return v2;
|
|
24
|
+
const v1 = COUNTER_CODE_NAMES_V1[code];
|
|
25
|
+
if (v1)
|
|
26
|
+
return v1;
|
|
27
|
+
return "Counter";
|
|
28
|
+
}
|
|
29
|
+
export function counterCodeNameForVersion(code, version) {
|
|
30
|
+
const table = resolveCounterCodeNameTable(version);
|
|
31
|
+
return table[code] ?? "Counter";
|
|
32
|
+
}
|
|
33
|
+
export function matterCodeName(code) {
|
|
34
|
+
return MATTER_CODE_NAMES[code] ?? "Matter";
|
|
35
|
+
}
|
|
36
|
+
export function nativeLabelName(label) {
|
|
37
|
+
if (!label)
|
|
38
|
+
return null;
|
|
39
|
+
return NATIVE_FIELD_LABELS[label] ?? label;
|
|
40
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const TEXT_ENCODER = new TextEncoder();
|
|
2
|
+
export function denot(annotated) {
|
|
3
|
+
const tokens = [];
|
|
4
|
+
for (const line of annotated.split(/\r?\n/)) {
|
|
5
|
+
const trimmed = line.trim();
|
|
6
|
+
if (!trimmed || trimmed.startsWith("#")) {
|
|
7
|
+
continue;
|
|
8
|
+
}
|
|
9
|
+
const commentIndex = line.indexOf("#");
|
|
10
|
+
const sansComment = (commentIndex >= 0 ? line.slice(0, commentIndex) : line)
|
|
11
|
+
.trim();
|
|
12
|
+
if (!sansComment)
|
|
13
|
+
continue;
|
|
14
|
+
tokens.push(sansComment);
|
|
15
|
+
}
|
|
16
|
+
return TEXT_ENCODER.encode(tokens.join(""));
|
|
17
|
+
}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { b64ToInt, intToB64 } from "../core/bytes.js";
|
|
2
|
+
import { DeserializeError, GroupSizeError, ShortageError, UnknownCodeError, } from "../core/errors.js";
|
|
3
|
+
import { parseBytes } from "../core/parser-engine.js";
|
|
4
|
+
import { sniff } from "../parser/cold-start.js";
|
|
5
|
+
import { parseAttachmentDispatchCompat } from "../parser/group-dispatch.js";
|
|
6
|
+
import { Counter, parseCounter } from "../primitives/counter.js";
|
|
7
|
+
import { Indexer } from "../primitives/indexer.js";
|
|
8
|
+
import { Matter, parseMatter } from "../primitives/matter.js";
|
|
9
|
+
import { isCounterGroupLike, isPrimitiveTuple } from "../primitives/primitive.js";
|
|
10
|
+
import { UnknownPrimitive } from "../primitives/unknown.js";
|
|
11
|
+
import { counterCodeName, counterCodeNameForVersion, matterCodeName, nativeLabelName, } from "./comments.js";
|
|
12
|
+
const TEXT_DECODER = new TextDecoder();
|
|
13
|
+
const OPAQUE_TOKEN_COMMENT = "opaque token";
|
|
14
|
+
const OPAQUE_WRAPPER_PAYLOAD_COMMENT = "opaque wrapper payload";
|
|
15
|
+
const WRAPPER_GROUP_NAMES = new Set([
|
|
16
|
+
"AttachmentGroup",
|
|
17
|
+
"BigAttachmentGroup",
|
|
18
|
+
"BodyWithAttachmentGroup",
|
|
19
|
+
"BigBodyWithAttachmentGroup",
|
|
20
|
+
]);
|
|
21
|
+
const TOP_LEVEL_WRAPPER_GROUP_NAMES = new Set([
|
|
22
|
+
"GenericGroup",
|
|
23
|
+
"BigGenericGroup",
|
|
24
|
+
"BodyWithAttachmentGroup",
|
|
25
|
+
"BigBodyWithAttachmentGroup",
|
|
26
|
+
]);
|
|
27
|
+
function toHex(bytes) {
|
|
28
|
+
return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
29
|
+
}
|
|
30
|
+
function isRecoverableParseError(error) {
|
|
31
|
+
return error instanceof UnknownCodeError
|
|
32
|
+
|| error instanceof DeserializeError
|
|
33
|
+
|| error instanceof ShortageError
|
|
34
|
+
|| error instanceof GroupSizeError;
|
|
35
|
+
}
|
|
36
|
+
function spaces(count) {
|
|
37
|
+
return " ".repeat(Math.max(0, count));
|
|
38
|
+
}
|
|
39
|
+
function asDomain(raw) {
|
|
40
|
+
try {
|
|
41
|
+
const cold = sniff(raw);
|
|
42
|
+
if (cold === "txt" || cold === "bny" || cold === "msg")
|
|
43
|
+
return cold;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (!isRecoverableParseError(error)) {
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
// Fallback handled below.
|
|
50
|
+
}
|
|
51
|
+
return "msg";
|
|
52
|
+
}
|
|
53
|
+
function emitLine(lines, value, comment, indent, options) {
|
|
54
|
+
const pad = spaces(indent);
|
|
55
|
+
if (options.commentMode === "above") {
|
|
56
|
+
lines.push(`${pad}# ${comment}`);
|
|
57
|
+
lines.push(`${pad}${value}`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
lines.push(`${pad}${value} # ${comment}`);
|
|
61
|
+
}
|
|
62
|
+
function parseCounterCompat(input, version, domain) {
|
|
63
|
+
try {
|
|
64
|
+
return parseCounter(input, version, domain);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
if (!isRecoverableParseError(error)) {
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
const alternate = version.major >= 2
|
|
71
|
+
? { major: 1, minor: 0 }
|
|
72
|
+
: { major: 2, minor: 0 };
|
|
73
|
+
return parseCounter(input, alternate, domain);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function decodeVersionCounter(counter) {
|
|
77
|
+
const triplet = counter.qb64.length >= 3
|
|
78
|
+
? counter.qb64.slice(-3)
|
|
79
|
+
: intToB64(counter.count, 3);
|
|
80
|
+
const majorRaw = b64ToInt(triplet[0] ?? "A");
|
|
81
|
+
const minorRaw = b64ToInt(triplet[1] ?? "A");
|
|
82
|
+
return {
|
|
83
|
+
major: majorRaw === 1 ? 1 : 2,
|
|
84
|
+
minor: minorRaw,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function renderGroupItems(lines, items, version, indent, options) {
|
|
88
|
+
for (const item of items) {
|
|
89
|
+
if (isPrimitiveTuple(item)) {
|
|
90
|
+
renderGroupItems(lines, item, version, indent + options.indent, options);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (isCounterGroupLike(item)) {
|
|
94
|
+
emitLine(lines, item.qb64, `${item.name} nested group`, indent, options);
|
|
95
|
+
renderGroupItems(lines, [...item.items], version, indent + options.indent, options);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (item instanceof UnknownPrimitive) {
|
|
99
|
+
const value = item.sourceDomain === "bny"
|
|
100
|
+
? `0x${toHex(item.qb2)}`
|
|
101
|
+
: item.qb64;
|
|
102
|
+
emitLine(lines, value, OPAQUE_WRAPPER_PAYLOAD_COMMENT, indent, options);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (item instanceof Counter) {
|
|
106
|
+
emitLine(lines, item.qb64, `${counterCodeNameForVersion(item.code, version)} counter`, indent, options);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (item instanceof Indexer) {
|
|
110
|
+
emitLine(lines, item.qb64, `Indexer ${item.code}`, indent, options);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (item instanceof Matter) {
|
|
114
|
+
emitLine(lines, item.qb64, matterCodeName(item.code), indent, options);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
emitLine(lines, String(item), OPAQUE_TOKEN_COMMENT, indent, options);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function renderAttachmentGroupRaw(lines, raw, version, indent, options) {
|
|
121
|
+
const domain = asDomain(raw);
|
|
122
|
+
if (domain !== "txt" && domain !== "bny") {
|
|
123
|
+
return 0;
|
|
124
|
+
}
|
|
125
|
+
const parsed = parseAttachmentDispatchCompat(raw, version, domain);
|
|
126
|
+
const counter = parseCounterCompat(raw, version, domain);
|
|
127
|
+
emitLine(lines, counter.qb64, `${parsed.group.name} count=${counter.count}`, indent, options);
|
|
128
|
+
const headerSize = domain === "bny" ? counter.fullSizeB2 : counter.fullSize;
|
|
129
|
+
const payload = raw.slice(headerSize, parsed.consumed);
|
|
130
|
+
if (WRAPPER_GROUP_NAMES.has(parsed.group.name)) {
|
|
131
|
+
// Wrapper groups contain nested groups by convention, but real-world
|
|
132
|
+
// streams may include trailing opaque segments. Keep annotation resilient.
|
|
133
|
+
let offset = 0;
|
|
134
|
+
while (offset < payload.length) {
|
|
135
|
+
const slice = payload.slice(offset);
|
|
136
|
+
const sliceCold = asDomain(slice);
|
|
137
|
+
if (sliceCold === "msg") {
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
if (sliceCold === "txt" && slice[0] !== "-".charCodeAt(0)) {
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
let consumed = 0;
|
|
144
|
+
try {
|
|
145
|
+
consumed = renderAttachmentGroupRaw(lines, slice, version, indent + options.indent, options);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (!isRecoverableParseError(error)) {
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
if (consumed <= 0)
|
|
154
|
+
break;
|
|
155
|
+
offset += consumed;
|
|
156
|
+
}
|
|
157
|
+
if (offset < payload.length) {
|
|
158
|
+
const remainder = payload.slice(offset);
|
|
159
|
+
const unit = domain === "bny" ? 3 : 4;
|
|
160
|
+
for (let i = 0; i < remainder.length; i += unit) {
|
|
161
|
+
const chunk = remainder.slice(i, Math.min(i + unit, remainder.length));
|
|
162
|
+
const rendered = domain === "bny"
|
|
163
|
+
? `0x${toHex(chunk)}`
|
|
164
|
+
: TEXT_DECODER.decode(chunk);
|
|
165
|
+
emitLine(lines, rendered, OPAQUE_WRAPPER_PAYLOAD_COMMENT, indent + options.indent, options);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return parsed.consumed;
|
|
169
|
+
}
|
|
170
|
+
renderGroupItems(lines, parsed.group.items, version, indent + options.indent, options);
|
|
171
|
+
return parsed.consumed;
|
|
172
|
+
}
|
|
173
|
+
function renderNativeBody(lines, frame, options, version) {
|
|
174
|
+
const raw = frame.body.raw;
|
|
175
|
+
const domain = asDomain(raw);
|
|
176
|
+
if (domain !== "txt" && domain !== "bny") {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const counter = parseCounterCompat(raw, version, domain);
|
|
180
|
+
emitLine(lines, counter.qb64, `${counterCodeNameForVersion(counter.code, version)} count=${counter.count}`, 0, options);
|
|
181
|
+
const unit = domain === "bny" ? 3 : 4;
|
|
182
|
+
const headerSize = domain === "bny" ? counter.fullSizeB2 : counter.fullSize;
|
|
183
|
+
const payloadSize = counter.count * unit;
|
|
184
|
+
const end = Math.min(raw.length, headerSize + payloadSize);
|
|
185
|
+
let offset = headerSize;
|
|
186
|
+
while (offset < end) {
|
|
187
|
+
const slice = raw.slice(offset, end);
|
|
188
|
+
try {
|
|
189
|
+
const nestedCounter = parseCounterCompat(slice, version, domain);
|
|
190
|
+
const nestedCounterSize = domain === "bny"
|
|
191
|
+
? nestedCounter.fullSizeB2
|
|
192
|
+
: nestedCounter.fullSize;
|
|
193
|
+
emitLine(lines, nestedCounter.qb64, `${counterCodeNameForVersion(nestedCounter.code, version)} counter`, options.indent, options);
|
|
194
|
+
offset += nestedCounterSize;
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
if (!isRecoverableParseError(error)) {
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const matter = parseMatter(slice, domain);
|
|
203
|
+
const matterSize = domain === "bny" ? matter.fullSizeB2 : matter.fullSize;
|
|
204
|
+
const field = frame.body.native?.fields.find((candidate) => candidate.primitive.qb64 === matter.qb64);
|
|
205
|
+
const label = field ? nativeLabelName(field.label) : null;
|
|
206
|
+
const primitiveComment = matter instanceof Indexer
|
|
207
|
+
? `Indexer ${matter.code}`
|
|
208
|
+
: matterCodeName(matter.code);
|
|
209
|
+
const comment = label ? `${label} (${primitiveComment})` : primitiveComment;
|
|
210
|
+
emitLine(lines, matter.qb64, comment, options.indent, options);
|
|
211
|
+
offset += matterSize;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function renderMessageBody(lines, frame, options) {
|
|
215
|
+
const rawBody = TEXT_DECODER.decode(frame.body.raw);
|
|
216
|
+
const isOpaqueCesrBody = frame.body.kind === "CESR"
|
|
217
|
+
&& frame.body.ked === null;
|
|
218
|
+
if (isOpaqueCesrBody) {
|
|
219
|
+
emitLine(lines, rawBody, `OPAQUE CESR body (non-serder fallback, hex=${toHex(frame.body.raw)})`, 0, options);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
let body = rawBody;
|
|
223
|
+
if (options.pretty && frame.body.kind === "JSON") {
|
|
224
|
+
try {
|
|
225
|
+
body = JSON.stringify(JSON.parse(rawBody), null, 2);
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
if (!(error instanceof SyntaxError)) {
|
|
229
|
+
throw error;
|
|
230
|
+
}
|
|
231
|
+
body = rawBody;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const info = [
|
|
235
|
+
`SERDER`,
|
|
236
|
+
frame.body.proto,
|
|
237
|
+
frame.body.kind,
|
|
238
|
+
frame.body.ilk ? `ilk=${frame.body.ilk}` : null,
|
|
239
|
+
frame.body.said ? `said=${frame.body.said}` : null,
|
|
240
|
+
].filter(Boolean).join(" ");
|
|
241
|
+
emitLine(lines, body, info, 0, options);
|
|
242
|
+
}
|
|
243
|
+
function renderFrame(frame, index, options) {
|
|
244
|
+
const lines = [];
|
|
245
|
+
const version = frame.body.gvrsn ?? frame.body.pvrsn;
|
|
246
|
+
const domain = asDomain(frame.body.raw);
|
|
247
|
+
if (domain === "txt" || domain === "bny") {
|
|
248
|
+
renderNativeBody(lines, frame, options, version);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
renderMessageBody(lines, frame, options);
|
|
252
|
+
}
|
|
253
|
+
for (const group of frame.attachments) {
|
|
254
|
+
renderAttachmentGroupRaw(lines, group.raw, version, 0, options);
|
|
255
|
+
}
|
|
256
|
+
return { index, frame, lines };
|
|
257
|
+
}
|
|
258
|
+
function renderFrameChunk(lines, input, indent, options) {
|
|
259
|
+
const parsed = parseBytes(input);
|
|
260
|
+
const frames = [];
|
|
261
|
+
for (const event of parsed) {
|
|
262
|
+
if (event.type === "error") {
|
|
263
|
+
throw event.error;
|
|
264
|
+
}
|
|
265
|
+
frames.push(event.frame);
|
|
266
|
+
}
|
|
267
|
+
const rendered = renderAnnotatedFrames(frames, options);
|
|
268
|
+
for (const frame of rendered) {
|
|
269
|
+
for (const line of frame.lines) {
|
|
270
|
+
lines.push(`${spaces(indent)}${line}`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
function renderWrapperAwareStream(lines, input, inheritedVersion, indent, options) {
|
|
275
|
+
let offset = 0;
|
|
276
|
+
let activeVersion = inheritedVersion;
|
|
277
|
+
let usedWrapper = false;
|
|
278
|
+
while (offset < input.length) {
|
|
279
|
+
const slice = input.slice(offset);
|
|
280
|
+
const domain = asDomain(slice);
|
|
281
|
+
if (domain !== "txt" && domain !== "bny") {
|
|
282
|
+
if (!usedWrapper)
|
|
283
|
+
return false;
|
|
284
|
+
renderFrameChunk(lines, slice, indent, options);
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
const counter = parseCounterCompat(slice, activeVersion, domain);
|
|
288
|
+
const headerSize = domain === "bny" ? counter.fullSizeB2 : counter.fullSize;
|
|
289
|
+
const name = counterCodeName(counter.code);
|
|
290
|
+
if (name === "KERIACDCGenusVersion") {
|
|
291
|
+
emitLine(lines, counter.qb64, `${name} count=${counter.count}`, indent, options);
|
|
292
|
+
activeVersion = decodeVersionCounter(counter);
|
|
293
|
+
offset += headerSize;
|
|
294
|
+
usedWrapper = true;
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
if (!TOP_LEVEL_WRAPPER_GROUP_NAMES.has(name)) {
|
|
298
|
+
if (!usedWrapper)
|
|
299
|
+
return false;
|
|
300
|
+
renderFrameChunk(lines, slice, indent, options);
|
|
301
|
+
return true;
|
|
302
|
+
}
|
|
303
|
+
const unit = domain === "bny" ? 3 : 4;
|
|
304
|
+
const payloadSize = counter.count * unit;
|
|
305
|
+
const total = headerSize + payloadSize;
|
|
306
|
+
if (slice.length < total) {
|
|
307
|
+
throw new ShortageError(total, slice.length);
|
|
308
|
+
}
|
|
309
|
+
emitLine(lines, counter.qb64, `${name} count=${counter.count}`, indent, options);
|
|
310
|
+
const payload = slice.slice(headerSize, total);
|
|
311
|
+
const nestedHandled = renderWrapperAwareStream(lines, payload, activeVersion, indent + options.indent, options);
|
|
312
|
+
if (!nestedHandled) {
|
|
313
|
+
renderFrameChunk(lines, payload, indent + options.indent, options);
|
|
314
|
+
}
|
|
315
|
+
offset += total;
|
|
316
|
+
usedWrapper = true;
|
|
317
|
+
}
|
|
318
|
+
return usedWrapper;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Render stream-level wrapper groups (GenericGroup/BodyWithAttachmentGroup)
|
|
322
|
+
* so denot round-trips preserve wrapper counters. Returns null when input does
|
|
323
|
+
* not start in a wrapper-oriented domain and caller should use frame rendering.
|
|
324
|
+
*/
|
|
325
|
+
export function renderWrapperAnnotatedStream(input, options) {
|
|
326
|
+
const lines = [];
|
|
327
|
+
const rendered = renderWrapperAwareStream(lines, input, { major: 2, minor: 0 }, 0, options);
|
|
328
|
+
if (!rendered) {
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
return lines.join("\n");
|
|
332
|
+
}
|
|
333
|
+
/** Render parsed CESR frames into line-oriented, human-annotated text blocks. */
|
|
334
|
+
export function renderAnnotatedFrames(frames, options) {
|
|
335
|
+
return frames.map((frame, index) => renderFrame(frame, index + 1, options));
|
|
336
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { createParser } from "../core/parser-engine.js";
|
|
2
|
+
function asPositiveInteger(value, fallback) {
|
|
3
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
4
|
+
return fallback;
|
|
5
|
+
}
|
|
6
|
+
return Math.max(0, Math.trunc(value));
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Normalize chunking to a legal parser-feed size.
|
|
10
|
+
*
|
|
11
|
+
* Boundary rules:
|
|
12
|
+
* - `<= 0` means full-stream feed for each iteration.
|
|
13
|
+
* - values larger than stream size collapse to full-stream feed.
|
|
14
|
+
*/
|
|
15
|
+
function normalizeChunkSize(chunkSize, totalBytes) {
|
|
16
|
+
const normalized = asPositiveInteger(chunkSize, 0);
|
|
17
|
+
if (normalized <= 0 || normalized >= totalBytes) {
|
|
18
|
+
return totalBytes;
|
|
19
|
+
}
|
|
20
|
+
return normalized;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Produce deterministic feed slices for one parse run.
|
|
24
|
+
*
|
|
25
|
+
* Invariant:
|
|
26
|
+
* - slices preserve original stream ordering.
|
|
27
|
+
* - slices are view-backed (`subarray`) to avoid benchmark-side copy noise.
|
|
28
|
+
*/
|
|
29
|
+
function buildChunks(input, chunkSize) {
|
|
30
|
+
if (chunkSize >= input.length) {
|
|
31
|
+
return [input];
|
|
32
|
+
}
|
|
33
|
+
const chunks = [];
|
|
34
|
+
for (let offset = 0; offset < input.length; offset += chunkSize) {
|
|
35
|
+
chunks.push(input.subarray(offset, Math.min(offset + chunkSize, input.length)));
|
|
36
|
+
}
|
|
37
|
+
return chunks;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Count parser frame/error events for one parser emission batch.
|
|
41
|
+
*/
|
|
42
|
+
function countFrames(events) {
|
|
43
|
+
let frameCount = 0;
|
|
44
|
+
let errorCount = 0;
|
|
45
|
+
for (const event of events) {
|
|
46
|
+
if (event.type === "frame") {
|
|
47
|
+
frameCount++;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
errorCount++;
|
|
51
|
+
}
|
|
52
|
+
return { frameCount, errorCount };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Execute one complete parser pass over the provided stream.
|
|
56
|
+
*
|
|
57
|
+
* Boundary contract:
|
|
58
|
+
* - Always feeds configured chunks and then flushes once.
|
|
59
|
+
* - Returns event counts only; callers own timing and aggregation.
|
|
60
|
+
*/
|
|
61
|
+
export function parseCesrStreamOnce(input, options = {}) {
|
|
62
|
+
const chunkSize = normalizeChunkSize(options.chunkSize, input.length);
|
|
63
|
+
const parser = createParser(options.parserOptions);
|
|
64
|
+
let frameCount = 0;
|
|
65
|
+
let errorCount = 0;
|
|
66
|
+
for (const chunk of buildChunks(input, chunkSize)) {
|
|
67
|
+
const summary = countFrames(parser.feed(chunk));
|
|
68
|
+
frameCount += summary.frameCount;
|
|
69
|
+
errorCount += summary.errorCount;
|
|
70
|
+
}
|
|
71
|
+
const flushSummary = countFrames(parser.flush());
|
|
72
|
+
frameCount += flushSummary.frameCount;
|
|
73
|
+
errorCount += flushSummary.errorCount;
|
|
74
|
+
return { frameCount, errorCount };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Benchmark parser throughput across warmup + measured iterations.
|
|
78
|
+
*
|
|
79
|
+
* Invariants:
|
|
80
|
+
* - warmup runs are excluded from final metrics.
|
|
81
|
+
* - when `failOnParseError` is true, any parse error fails fast to prevent
|
|
82
|
+
* silently benchmarking degraded correctness.
|
|
83
|
+
*/
|
|
84
|
+
export function benchmarkCesrParser(input, options = {}) {
|
|
85
|
+
if (input.length === 0) {
|
|
86
|
+
throw new Error("Benchmark input stream must not be empty");
|
|
87
|
+
}
|
|
88
|
+
const iterations = asPositiveInteger(options.iterations, 50);
|
|
89
|
+
if (iterations <= 0) {
|
|
90
|
+
throw new Error("iterations must be greater than 0");
|
|
91
|
+
}
|
|
92
|
+
const warmupIterations = asPositiveInteger(options.warmupIterations, 5);
|
|
93
|
+
const chunkSize = normalizeChunkSize(options.chunkSize, input.length);
|
|
94
|
+
const failOnParseError = options.failOnParseError ?? true;
|
|
95
|
+
for (let i = 0; i < warmupIterations; i++) {
|
|
96
|
+
parseCesrStreamOnce(input, {
|
|
97
|
+
chunkSize,
|
|
98
|
+
parserOptions: options.parserOptions,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
let totalFrames = 0;
|
|
102
|
+
let totalErrors = 0;
|
|
103
|
+
const startMs = performance.now();
|
|
104
|
+
for (let i = 0; i < iterations; i++) {
|
|
105
|
+
const run = parseCesrStreamOnce(input, {
|
|
106
|
+
chunkSize,
|
|
107
|
+
parserOptions: options.parserOptions,
|
|
108
|
+
});
|
|
109
|
+
totalFrames += run.frameCount;
|
|
110
|
+
totalErrors += run.errorCount;
|
|
111
|
+
if (failOnParseError && run.errorCount > 0) {
|
|
112
|
+
throw new Error(`Benchmark run produced parse errors (run=${i + 1}, errorCount=${run.errorCount})`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const elapsedMs = Math.max(performance.now() - startMs, Number.EPSILON);
|
|
116
|
+
const totalBytes = input.length * iterations;
|
|
117
|
+
const throughputBytesPerSec = (totalBytes * 1000) / elapsedMs;
|
|
118
|
+
const throughputMiBPerSec = throughputBytesPerSec / (1024 * 1024);
|
|
119
|
+
const framesPerSec = (totalFrames * 1000) / elapsedMs;
|
|
120
|
+
return {
|
|
121
|
+
iterations,
|
|
122
|
+
warmupIterations,
|
|
123
|
+
chunkSize,
|
|
124
|
+
bytesPerIteration: input.length,
|
|
125
|
+
totalBytes,
|
|
126
|
+
totalFrames,
|
|
127
|
+
totalErrors,
|
|
128
|
+
elapsedMs,
|
|
129
|
+
avgIterationMs: elapsedMs / iterations,
|
|
130
|
+
throughputBytesPerSec,
|
|
131
|
+
throughputMiBPerSec,
|
|
132
|
+
framesPerSec,
|
|
133
|
+
};
|
|
134
|
+
}
|