@superbee/core 0.2.0-pre.3 → 0.2.0-pre.31
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 +1084 -0
- package/dist/artifact-contract.d.ts +90 -0
- package/dist/artifact-contract.d.ts.map +1 -0
- package/dist/artifact-contract.js +205 -0
- package/dist/artifact-contract.js.map +1 -0
- package/dist/backend.d.ts +19 -1
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +83 -36
- package/dist/backend.js.map +1 -1
- package/dist/blob-contract.d.ts +80 -0
- package/dist/blob-contract.d.ts.map +1 -0
- package/dist/blob-contract.js +131 -0
- package/dist/blob-contract.js.map +1 -0
- package/dist/blob-journal.d.ts +302 -0
- package/dist/blob-journal.d.ts.map +1 -0
- package/dist/blob-journal.js +540 -0
- package/dist/blob-journal.js.map +1 -0
- package/dist/body-replace-guards.d.ts +52 -0
- package/dist/body-replace-guards.d.ts.map +1 -0
- package/dist/body-replace-guards.js +176 -0
- package/dist/body-replace-guards.js.map +1 -0
- package/dist/builtin-recipes/content.d.ts +93 -0
- package/dist/builtin-recipes/content.d.ts.map +1 -0
- package/dist/builtin-recipes/content.js +288 -0
- package/dist/builtin-recipes/content.js.map +1 -0
- package/dist/builtin-recipes.d.ts +10 -0
- package/dist/builtin-recipes.d.ts.map +1 -0
- package/dist/builtin-recipes.js +97 -0
- package/dist/builtin-recipes.js.map +1 -0
- package/dist/bundle-health/index.d.ts +14 -0
- package/dist/bundle-health/index.d.ts.map +1 -0
- package/dist/bundle-health/index.js +12 -0
- package/dist/bundle-health/index.js.map +1 -0
- package/dist/bundle-health/kind-findings.d.ts +44 -0
- package/dist/bundle-health/kind-findings.d.ts.map +1 -0
- package/dist/bundle-health/kind-findings.js +68 -0
- package/dist/bundle-health/kind-findings.js.map +1 -0
- package/dist/bundle-health/legacy-page.d.ts +39 -0
- package/dist/bundle-health/legacy-page.d.ts.map +1 -0
- package/dist/bundle-health/legacy-page.js +50 -0
- package/dist/bundle-health/legacy-page.js.map +1 -0
- package/dist/bundle-health/report.d.ts +202 -0
- package/dist/bundle-health/report.d.ts.map +1 -0
- package/dist/bundle-health/report.js +438 -0
- package/dist/bundle-health/report.js.map +1 -0
- package/dist/bundle-ops.d.ts +1 -1
- package/dist/bundle-ops.d.ts.map +1 -1
- package/dist/bundle-ops.js +2 -2
- package/dist/bundle-ops.js.map +1 -1
- package/dist/bundle.d.ts +2 -1
- package/dist/bundle.d.ts.map +1 -1
- package/dist/bundle.js +3 -3
- package/dist/bundle.js.map +1 -1
- package/dist/code-point-order.d.ts +8 -0
- package/dist/code-point-order.d.ts.map +1 -0
- package/dist/code-point-order.js +20 -0
- package/dist/code-point-order.js.map +1 -0
- package/dist/connector-request.d.ts +87 -0
- package/dist/connector-request.d.ts.map +1 -0
- package/dist/connector-request.js +370 -0
- package/dist/connector-request.js.map +1 -0
- package/dist/connectors.d.ts +262 -0
- package/dist/connectors.d.ts.map +1 -0
- package/dist/connectors.js +1179 -0
- package/dist/connectors.js.map +1 -0
- package/dist/cross-bundle.d.ts +135 -0
- package/dist/cross-bundle.d.ts.map +1 -0
- package/dist/cross-bundle.js +186 -0
- package/dist/cross-bundle.js.map +1 -0
- package/dist/dependencies.d.ts +94 -0
- package/dist/dependencies.d.ts.map +1 -0
- package/dist/dependencies.js +180 -0
- package/dist/dependencies.js.map +1 -0
- package/dist/document-codec.d.ts +5 -1
- package/dist/document-codec.d.ts.map +1 -1
- package/dist/document-codec.js +7 -4
- package/dist/document-codec.js.map +1 -1
- package/dist/document-field-actions.d.ts +31 -1
- package/dist/document-field-actions.d.ts.map +1 -1
- package/dist/document-field-actions.js +137 -34
- package/dist/document-field-actions.js.map +1 -1
- package/dist/document-mutation.d.ts +22 -10
- package/dist/document-mutation.d.ts.map +1 -1
- package/dist/document-mutation.js +61 -27
- package/dist/document-mutation.js.map +1 -1
- package/dist/document-write-policy.d.ts.map +1 -1
- package/dist/document-write-policy.js +4 -2
- package/dist/document-write-policy.js.map +1 -1
- package/dist/domain-model.d.ts +73 -0
- package/dist/domain-model.d.ts.map +1 -0
- package/dist/domain-model.js +169 -0
- package/dist/domain-model.js.map +1 -0
- package/dist/engine.d.ts +16 -8
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +42 -4
- package/dist/engine.js.map +1 -1
- package/dist/file-journaled-backend-internal.d.ts +21 -0
- package/dist/file-journaled-backend-internal.d.ts.map +1 -0
- package/dist/file-journaled-backend-internal.js +12 -0
- package/dist/file-journaled-backend-internal.js.map +1 -0
- package/dist/file-journaled-backend.d.ts +160 -0
- package/dist/file-journaled-backend.d.ts.map +1 -0
- package/dist/file-journaled-backend.js +1345 -0
- package/dist/file-journaled-backend.js.map +1 -0
- package/dist/filesystem-host.d.ts +15 -0
- package/dist/filesystem-host.d.ts.map +1 -0
- package/dist/filesystem-host.js +20 -0
- package/dist/filesystem-host.js.map +1 -0
- package/dist/filesystem-identity.d.ts +86 -4
- package/dist/filesystem-identity.d.ts.map +1 -1
- package/dist/filesystem-identity.js +338 -102
- package/dist/filesystem-identity.js.map +1 -1
- package/dist/filesystem-lock.d.ts +16 -3
- package/dist/filesystem-lock.d.ts.map +1 -1
- package/dist/filesystem-lock.js +323 -77
- package/dist/filesystem-lock.js.map +1 -1
- package/dist/filesystem-push-role.d.ts +77 -0
- package/dist/filesystem-push-role.d.ts.map +1 -0
- package/dist/filesystem-push-role.js +165 -0
- package/dist/filesystem-push-role.js.map +1 -0
- package/dist/filesystem.d.ts +17 -0
- package/dist/filesystem.d.ts.map +1 -0
- package/dist/filesystem.js +18 -0
- package/dist/filesystem.js.map +1 -0
- package/dist/governed-body-write.d.ts +106 -0
- package/dist/governed-body-write.d.ts.map +1 -0
- package/dist/governed-body-write.js +251 -0
- package/dist/governed-body-write.js.map +1 -0
- package/dist/host-policy-snapshot.d.ts +9 -0
- package/dist/host-policy-snapshot.d.ts.map +1 -0
- package/dist/host-policy-snapshot.js +33 -0
- package/dist/host-policy-snapshot.js.map +1 -0
- package/dist/host-text.d.ts +31 -0
- package/dist/host-text.d.ts.map +1 -0
- package/dist/host-text.js +77 -0
- package/dist/host-text.js.map +1 -0
- package/dist/hosted-client/binding.d.ts +7 -0
- package/dist/hosted-client/binding.d.ts.map +1 -0
- package/dist/hosted-client/binding.js +10 -0
- package/dist/hosted-client/binding.js.map +1 -0
- package/dist/hosted-client/blob-delivery.d.ts +67 -0
- package/dist/hosted-client/blob-delivery.d.ts.map +1 -0
- package/dist/hosted-client/blob-delivery.js +169 -0
- package/dist/hosted-client/blob-delivery.js.map +1 -0
- package/dist/hosted-client/blob-write.d.ts +386 -0
- package/dist/hosted-client/blob-write.d.ts.map +1 -0
- package/dist/hosted-client/blob-write.js +770 -0
- package/dist/hosted-client/blob-write.js.map +1 -0
- package/dist/hosted-client/bundle-listing.d.ts +46 -0
- package/dist/hosted-client/bundle-listing.d.ts.map +1 -0
- package/dist/hosted-client/bundle-listing.js +36 -0
- package/dist/hosted-client/bundle-listing.js.map +1 -0
- package/dist/hosted-client/client.d.ts +219 -0
- package/dist/hosted-client/client.d.ts.map +1 -0
- package/dist/hosted-client/client.js +309 -0
- package/dist/hosted-client/client.js.map +1 -0
- package/dist/hosted-client/directory.d.ts +46 -0
- package/dist/hosted-client/directory.d.ts.map +1 -0
- package/dist/hosted-client/directory.js +74 -0
- package/dist/hosted-client/directory.js.map +1 -0
- package/dist/hosted-client/errors.d.ts +26 -0
- package/dist/hosted-client/errors.d.ts.map +1 -0
- package/dist/hosted-client/errors.js +35 -0
- package/dist/hosted-client/errors.js.map +1 -0
- package/dist/hosted-client/inbox.d.ts +320 -0
- package/dist/hosted-client/inbox.d.ts.map +1 -0
- package/dist/hosted-client/inbox.js +379 -0
- package/dist/hosted-client/inbox.js.map +1 -0
- package/dist/hosted-client/index.d.ts +30 -0
- package/dist/hosted-client/index.d.ts.map +1 -0
- package/dist/hosted-client/index.js +32 -0
- package/dist/hosted-client/index.js.map +1 -0
- package/dist/hosted-client/journal.d.ts +103 -0
- package/dist/hosted-client/journal.d.ts.map +1 -0
- package/dist/hosted-client/journal.js +464 -0
- package/dist/hosted-client/journal.js.map +1 -0
- package/dist/hosted-client/node.d.ts +74 -0
- package/dist/hosted-client/node.d.ts.map +1 -0
- package/dist/hosted-client/node.js +219 -0
- package/dist/hosted-client/node.js.map +1 -0
- package/dist/hosted-client/reference.d.ts +12 -0
- package/dist/hosted-client/reference.d.ts.map +1 -0
- package/dist/hosted-client/reference.js +29 -0
- package/dist/hosted-client/reference.js.map +1 -0
- package/dist/hosted-client/write.d.ts +217 -0
- package/dist/hosted-client/write.d.ts.map +1 -0
- package/dist/hosted-client/write.js +418 -0
- package/dist/hosted-client/write.js.map +1 -0
- package/dist/hosted-transport/answer-rows.d.ts +243 -0
- package/dist/hosted-transport/answer-rows.d.ts.map +1 -0
- package/dist/hosted-transport/answer-rows.js +454 -0
- package/dist/hosted-transport/answer-rows.js.map +1 -0
- package/dist/hosted-transport/blob-reads.d.ts +35 -0
- package/dist/hosted-transport/blob-reads.d.ts.map +1 -0
- package/dist/hosted-transport/blob-reads.js +179 -0
- package/dist/hosted-transport/blob-reads.js.map +1 -0
- package/dist/hosted-transport/blob-write.d.ts +34 -0
- package/dist/hosted-transport/blob-write.d.ts.map +1 -0
- package/dist/hosted-transport/blob-write.js +115 -0
- package/dist/hosted-transport/blob-write.js.map +1 -0
- package/dist/hosted-transport/carrier.d.ts +151 -0
- package/dist/hosted-transport/carrier.d.ts.map +1 -0
- package/dist/hosted-transport/carrier.js +260 -0
- package/dist/hosted-transport/carrier.js.map +1 -0
- package/dist/hosted-transport/history-pages.d.ts +55 -0
- package/dist/hosted-transport/history-pages.d.ts.map +1 -0
- package/dist/hosted-transport/history-pages.js +69 -0
- package/dist/hosted-transport/history-pages.js.map +1 -0
- package/dist/hosted-transport/index.d.ts +18 -0
- package/dist/hosted-transport/index.d.ts.map +1 -0
- package/dist/hosted-transport/index.js +18 -0
- package/dist/hosted-transport/index.js.map +1 -0
- package/dist/hosted-transport/operations.d.ts +85 -0
- package/dist/hosted-transport/operations.d.ts.map +1 -0
- package/dist/hosted-transport/operations.js +128 -0
- package/dist/hosted-transport/operations.js.map +1 -0
- package/dist/hosted-transport/paged-reads.d.ts +87 -0
- package/dist/hosted-transport/paged-reads.d.ts.map +1 -0
- package/dist/hosted-transport/paged-reads.js +238 -0
- package/dist/hosted-transport/paged-reads.js.map +1 -0
- package/dist/hosted-transport/read-adapter.d.ts +256 -0
- package/dist/hosted-transport/read-adapter.d.ts.map +1 -0
- package/dist/hosted-transport/read-adapter.js +568 -0
- package/dist/hosted-transport/read-adapter.js.map +1 -0
- package/dist/hosted-transport/root-write.d.ts +114 -0
- package/dist/hosted-transport/root-write.d.ts.map +1 -0
- package/dist/hosted-transport/root-write.js +171 -0
- package/dist/hosted-transport/root-write.js.map +1 -0
- package/dist/hosted-transport/whole-document-transport.d.ts +204 -0
- package/dist/hosted-transport/whole-document-transport.d.ts.map +1 -0
- package/dist/hosted-transport/whole-document-transport.js +447 -0
- package/dist/hosted-transport/whole-document-transport.js.map +1 -0
- package/dist/index.d.ts +34 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -8
- package/dist/index.js.map +1 -1
- package/dist/indexeddb-backend.d.ts +28 -37
- package/dist/indexeddb-backend.d.ts.map +1 -1
- package/dist/indexeddb-backend.js +467 -113
- package/dist/indexeddb-backend.js.map +1 -1
- package/dist/journaled-backend.d.ts +232 -15
- package/dist/journaled-backend.d.ts.map +1 -1
- package/dist/journaled-backend.js +254 -55
- package/dist/journaled-backend.js.map +1 -1
- package/dist/kind-authoring.d.ts +170 -0
- package/dist/kind-authoring.d.ts.map +1 -0
- package/dist/kind-authoring.js +451 -0
- package/dist/kind-authoring.js.map +1 -0
- package/dist/kind-conformance-error.d.ts +15 -0
- package/dist/kind-conformance-error.d.ts.map +1 -0
- package/dist/kind-conformance-error.js +20 -0
- package/dist/kind-conformance-error.js.map +1 -0
- package/dist/kind-coverage.d.ts +99 -0
- package/dist/kind-coverage.d.ts.map +1 -0
- package/dist/kind-coverage.js +186 -0
- package/dist/kind-coverage.js.map +1 -0
- package/dist/kind-field-mutation.d.ts +4 -0
- package/dist/kind-field-mutation.d.ts.map +1 -1
- package/dist/kind-field-mutation.js +28 -3
- package/dist/kind-field-mutation.js.map +1 -1
- package/dist/kinds-load.js +4 -4
- package/dist/kinds-load.js.map +1 -1
- package/dist/kinds.d.ts +65 -2
- package/dist/kinds.d.ts.map +1 -1
- package/dist/kinds.js +341 -21
- package/dist/kinds.js.map +1 -1
- package/dist/link-types.d.ts +26 -0
- package/dist/link-types.d.ts.map +1 -0
- package/dist/link-types.js +57 -0
- package/dist/link-types.js.map +1 -0
- package/dist/links.d.ts +21 -3
- package/dist/links.d.ts.map +1 -1
- package/dist/links.js +213 -14
- package/dist/links.js.map +1 -1
- package/dist/managed-document-metadata.d.ts +2 -0
- package/dist/managed-document-metadata.d.ts.map +1 -0
- package/dist/managed-document-metadata.js +9 -0
- package/dist/managed-document-metadata.js.map +1 -0
- package/dist/memory-backend.d.ts.map +1 -1
- package/dist/memory-backend.js +6 -2
- package/dist/memory-backend.js.map +1 -1
- package/dist/paths.d.ts +16 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +25 -0
- package/dist/paths.js.map +1 -1
- package/dist/platform.d.ts +13 -2
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +16 -0
- package/dist/platform.js.map +1 -1
- package/dist/portable-export.d.ts +119 -0
- package/dist/portable-export.d.ts.map +1 -0
- package/dist/portable-export.js +501 -0
- package/dist/portable-export.js.map +1 -0
- package/dist/publication-filesystem.d.ts +1 -1
- package/dist/publication-filesystem.d.ts.map +1 -1
- package/dist/publication-filesystem.js +1 -1
- package/dist/publication-filesystem.js.map +1 -1
- package/dist/qualified-links.d.ts +67 -0
- package/dist/qualified-links.d.ts.map +1 -0
- package/dist/qualified-links.js +117 -0
- package/dist/qualified-links.js.map +1 -0
- package/dist/query-filter.d.ts +16 -2
- package/dist/query-filter.d.ts.map +1 -1
- package/dist/query-filter.js +40 -1
- package/dist/query-filter.js.map +1 -1
- package/dist/query-order.d.ts +22 -0
- package/dist/query-order.d.ts.map +1 -0
- package/dist/query-order.js +42 -0
- package/dist/query-order.js.map +1 -0
- package/dist/recipe-lifecycle/errors.d.ts +96 -0
- package/dist/recipe-lifecycle/errors.d.ts.map +1 -0
- package/dist/recipe-lifecycle/errors.js +122 -0
- package/dist/recipe-lifecycle/errors.js.map +1 -0
- package/dist/recipe-lifecycle/evolution.d.ts +112 -0
- package/dist/recipe-lifecycle/evolution.d.ts.map +1 -0
- package/dist/recipe-lifecycle/evolution.js +941 -0
- package/dist/recipe-lifecycle/evolution.js.map +1 -0
- package/dist/recipe-lifecycle/index.d.ts +30 -0
- package/dist/recipe-lifecycle/index.d.ts.map +1 -0
- package/dist/recipe-lifecycle/index.js +26 -0
- package/dist/recipe-lifecycle/index.js.map +1 -0
- package/dist/recipe-lifecycle/install.d.ts +155 -0
- package/dist/recipe-lifecycle/install.d.ts.map +1 -0
- package/dist/recipe-lifecycle/install.js +594 -0
- package/dist/recipe-lifecycle/install.js.map +1 -0
- package/dist/recipe-lifecycle/legacy-aliases.d.ts +16 -0
- package/dist/recipe-lifecycle/legacy-aliases.d.ts.map +1 -0
- package/dist/recipe-lifecycle/legacy-aliases.js +51 -0
- package/dist/recipe-lifecycle/legacy-aliases.js.map +1 -0
- package/dist/recipe-lifecycle/stamp.d.ts +151 -0
- package/dist/recipe-lifecycle/stamp.d.ts.map +1 -0
- package/dist/recipe-lifecycle/stamp.js +364 -0
- package/dist/recipe-lifecycle/stamp.js.map +1 -0
- package/dist/recipe-set-preflight.d.ts +139 -0
- package/dist/recipe-set-preflight.d.ts.map +1 -0
- package/dist/recipe-set-preflight.js +536 -0
- package/dist/recipe-set-preflight.js.map +1 -0
- package/dist/recipes.d.ts +29 -1
- package/dist/recipes.d.ts.map +1 -1
- package/dist/recipes.js +137 -1
- package/dist/recipes.js.map +1 -1
- package/dist/record-overlay/apply.d.ts +43 -0
- package/dist/record-overlay/apply.d.ts.map +1 -0
- package/dist/record-overlay/apply.js +527 -0
- package/dist/record-overlay/apply.js.map +1 -0
- package/dist/record-overlay/canonical.d.ts +22 -0
- package/dist/record-overlay/canonical.d.ts.map +1 -0
- package/dist/record-overlay/canonical.js +47 -0
- package/dist/record-overlay/canonical.js.map +1 -0
- package/dist/record-overlay/digest.d.ts +4 -0
- package/dist/record-overlay/digest.d.ts.map +1 -0
- package/dist/record-overlay/digest.js +11 -0
- package/dist/record-overlay/digest.js.map +1 -0
- package/dist/record-overlay/errors.d.ts +44 -0
- package/dist/record-overlay/errors.d.ts.map +1 -0
- package/dist/record-overlay/errors.js +55 -0
- package/dist/record-overlay/errors.js.map +1 -0
- package/dist/record-overlay/findings.d.ts +5 -0
- package/dist/record-overlay/findings.d.ts.map +1 -0
- package/dist/record-overlay/findings.js +83 -0
- package/dist/record-overlay/findings.js.map +1 -0
- package/dist/record-overlay/index.d.ts +23 -0
- package/dist/record-overlay/index.d.ts.map +1 -0
- package/dist/record-overlay/index.js +21 -0
- package/dist/record-overlay/index.js.map +1 -0
- package/dist/record-overlay/plan.d.ts +12 -0
- package/dist/record-overlay/plan.d.ts.map +1 -0
- package/dist/record-overlay/plan.js +285 -0
- package/dist/record-overlay/plan.js.map +1 -0
- package/dist/record-overlay/policy.d.ts +69 -0
- package/dist/record-overlay/policy.d.ts.map +1 -0
- package/dist/record-overlay/policy.js +228 -0
- package/dist/record-overlay/policy.js.map +1 -0
- package/dist/record-overlay/redact.d.ts +3 -0
- package/dist/record-overlay/redact.d.ts.map +1 -0
- package/dist/record-overlay/redact.js +27 -0
- package/dist/record-overlay/redact.js.map +1 -0
- package/dist/record-overlay/signal-kind.d.ts +30 -0
- package/dist/record-overlay/signal-kind.d.ts.map +1 -0
- package/dist/record-overlay/signal-kind.js +38 -0
- package/dist/record-overlay/signal-kind.js.map +1 -0
- package/dist/record-overlay/signal-text.d.ts +45 -0
- package/dist/record-overlay/signal-text.d.ts.map +1 -0
- package/dist/record-overlay/signal-text.js +116 -0
- package/dist/record-overlay/signal-text.js.map +1 -0
- package/dist/record-overlay/source-index.d.ts +19 -0
- package/dist/record-overlay/source-index.d.ts.map +1 -0
- package/dist/record-overlay/source-index.js +102 -0
- package/dist/record-overlay/source-index.js.map +1 -0
- package/dist/record-overlay/types.d.ts +291 -0
- package/dist/record-overlay/types.d.ts.map +1 -0
- package/dist/record-overlay/types.js +2 -0
- package/dist/record-overlay/types.js.map +1 -0
- package/dist/remote-backend.d.ts +67 -67
- package/dist/remote-backend.d.ts.map +1 -1
- package/dist/remote-backend.js +168 -201
- package/dist/remote-backend.js.map +1 -1
- package/dist/remote-document-codec.d.ts +2 -1
- package/dist/remote-document-codec.d.ts.map +1 -1
- package/dist/remote-document-codec.js +3 -2
- package/dist/remote-document-codec.js.map +1 -1
- package/dist/remote-error.d.ts +38 -0
- package/dist/remote-error.d.ts.map +1 -0
- package/dist/remote-error.js +59 -0
- package/dist/remote-error.js.map +1 -0
- package/dist/remote-operations.d.ts +0 -40
- package/dist/remote-operations.d.ts.map +1 -1
- package/dist/remote-operations.js +26 -6
- package/dist/remote-operations.js.map +1 -1
- package/dist/remote-parsers.d.ts +86 -0
- package/dist/remote-parsers.d.ts.map +1 -0
- package/dist/remote-parsers.js +181 -0
- package/dist/remote-parsers.js.map +1 -0
- package/dist/remote.d.ts +5 -2
- package/dist/remote.d.ts.map +1 -1
- package/dist/remote.js +5 -1
- package/dist/remote.js.map +1 -1
- package/dist/search/backend-source.d.ts +6 -0
- package/dist/search/backend-source.d.ts.map +1 -0
- package/dist/search/backend-source.js +33 -0
- package/dist/search/backend-source.js.map +1 -0
- package/dist/search/contract.d.ts +151 -0
- package/dist/search/contract.d.ts.map +1 -0
- package/dist/search/contract.js +78 -0
- package/dist/search/contract.js.map +1 -0
- package/dist/search/errors.d.ts +30 -0
- package/dist/search/errors.d.ts.map +1 -0
- package/dist/search/errors.js +50 -0
- package/dist/search/errors.js.map +1 -0
- package/dist/search/identity.d.ts +12 -0
- package/dist/search/identity.d.ts.map +1 -0
- package/dist/search/identity.js +90 -0
- package/dist/search/identity.js.map +1 -0
- package/dist/search/index.d.ts +16 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +15 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/memory-source.d.ts +36 -0
- package/dist/search/memory-source.d.ts.map +1 -0
- package/dist/search/memory-source.js +235 -0
- package/dist/search/memory-source.js.map +1 -0
- package/dist/search/rank.d.ts +34 -0
- package/dist/search/rank.d.ts.map +1 -0
- package/dist/search/rank.js +129 -0
- package/dist/search/rank.js.map +1 -0
- package/dist/search/row-text.d.ts +38 -0
- package/dist/search/row-text.d.ts.map +1 -0
- package/dist/search/row-text.js +88 -0
- package/dist/search/row-text.js.map +1 -0
- package/dist/search/search.d.ts +28 -0
- package/dist/search/search.d.ts.map +1 -0
- package/dist/search/search.js +257 -0
- package/dist/search/search.js.map +1 -0
- package/dist/search/source.d.ts +67 -0
- package/dist/search/source.d.ts.map +1 -0
- package/dist/search/source.js +2 -0
- package/dist/search/source.js.map +1 -0
- package/dist/search/text.d.ts +47 -0
- package/dist/search/text.d.ts.map +1 -0
- package/dist/search/text.js +150 -0
- package/dist/search/text.js.map +1 -0
- package/dist/site-capabilities.d.ts +345 -0
- package/dist/site-capabilities.d.ts.map +1 -0
- package/dist/site-capabilities.js +724 -0
- package/dist/site-capabilities.js.map +1 -0
- package/dist/source-engine/guard.d.ts +78 -0
- package/dist/source-engine/guard.d.ts.map +1 -0
- package/dist/source-engine/guard.js +423 -0
- package/dist/source-engine/guard.js.map +1 -0
- package/dist/source-engine/index.d.ts +26 -0
- package/dist/source-engine/index.d.ts.map +1 -0
- package/dist/source-engine/index.js +21 -0
- package/dist/source-engine/index.js.map +1 -0
- package/dist/source-engine/machine-state.d.ts +74 -0
- package/dist/source-engine/machine-state.d.ts.map +1 -0
- package/dist/source-engine/machine-state.js +48 -0
- package/dist/source-engine/machine-state.js.map +1 -0
- package/dist/source-engine/observe.d.ts +18 -0
- package/dist/source-engine/observe.d.ts.map +1 -0
- package/dist/source-engine/observe.js +620 -0
- package/dist/source-engine/observe.js.map +1 -0
- package/dist/source-engine/overlay.d.ts +49 -0
- package/dist/source-engine/overlay.d.ts.map +1 -0
- package/dist/source-engine/overlay.js +114 -0
- package/dist/source-engine/overlay.js.map +1 -0
- package/dist/source-engine/robots.d.ts +53 -0
- package/dist/source-engine/robots.d.ts.map +1 -0
- package/dist/source-engine/robots.js +158 -0
- package/dist/source-engine/robots.js.map +1 -0
- package/dist/source-engine/types.d.ts +287 -0
- package/dist/source-engine/types.d.ts.map +1 -0
- package/dist/source-engine/types.js +2 -0
- package/dist/source-engine/types.js.map +1 -0
- package/dist/source-harness/conformance.d.ts +16 -0
- package/dist/source-harness/conformance.d.ts.map +1 -0
- package/dist/source-harness/conformance.js +266 -0
- package/dist/source-harness/conformance.js.map +1 -0
- package/dist/source-harness/fixture.d.ts +95 -0
- package/dist/source-harness/fixture.d.ts.map +1 -0
- package/dist/source-harness/fixture.js +273 -0
- package/dist/source-harness/fixture.js.map +1 -0
- package/dist/source-harness/index.d.ts +22 -0
- package/dist/source-harness/index.d.ts.map +1 -0
- package/dist/source-harness/index.js +19 -0
- package/dist/source-harness/index.js.map +1 -0
- package/dist/source-harness/peer.d.ts +74 -0
- package/dist/source-harness/peer.d.ts.map +1 -0
- package/dist/source-harness/peer.js +106 -0
- package/dist/source-harness/peer.js.map +1 -0
- package/dist/source-profiles/index.d.ts +31 -0
- package/dist/source-profiles/index.d.ts.map +1 -0
- package/dist/source-profiles/index.js +206 -0
- package/dist/source-profiles/index.js.map +1 -0
- package/dist/source-profiles/link-header.d.ts +6 -0
- package/dist/source-profiles/link-header.d.ts.map +1 -0
- package/dist/source-profiles/link-header.js +131 -0
- package/dist/source-profiles/link-header.js.map +1 -0
- package/dist/storage.d.ts +6 -2
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +4 -1
- package/dist/storage.js.map +1 -1
- package/dist/types.d.ts +38 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -10
- package/dist/types.js.map +1 -1
- package/dist/uncertain-write.d.ts +161 -19
- package/dist/uncertain-write.d.ts.map +1 -1
- package/dist/uncertain-write.js +90 -31
- package/dist/uncertain-write.js.map +1 -1
- package/dist/versioning.d.ts +9 -4
- package/dist/versioning.d.ts.map +1 -1
- package/dist/versioning.js +9 -4
- package/dist/versioning.js.map +1 -1
- package/dist/write-identity.d.ts +5 -0
- package/dist/write-identity.d.ts.map +1 -0
- package/dist/write-identity.js +9 -0
- package/dist/write-identity.js.map +1 -0
- package/package.json +107 -2
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
// The portable export archive a hosted bundle's `/sync/v1/export` answers: an ordinary OKF bundle
|
|
2
|
+
// directory in one store-only zip, with `superbee-export.json` at the root naming the source and
|
|
3
|
+
// the byte length and SHA-256 of every entry (superbee-hosted `docs/portable-bundle-export-design.md`).
|
|
4
|
+
//
|
|
5
|
+
// Verification never writes. Explicit materialization reads the archive whole before placing files:
|
|
6
|
+
// the end record must be there (an export the host stopped after its first byte ends without one),
|
|
7
|
+
// every entry must be stored, uncompressed and laid end to end with nothing hidden between them,
|
|
8
|
+
// every CRC and every manifest digest must match, the entries must be exactly the manifest's, and
|
|
9
|
+
// every path must be one a bundle can hold. A path that could escape the folder, land in a
|
|
10
|
+
// dot-folder (`.git` among them), or meet another path under case folding is refused, so the files
|
|
11
|
+
// placed from a verified archive are exactly the bundle's and nothing else.
|
|
12
|
+
import { createHash } from "node:crypto";
|
|
13
|
+
import { mkdir, mkdtemp, realpath, rm, writeFile } from "node:fs/promises";
|
|
14
|
+
import path from "node:path";
|
|
15
|
+
import { assertSafeBlobKey, assertSafeConceptId, assertSafeReservedDir, assertSafeReservedFilename, isReservedFile, pathFromConceptId, } from "./paths.js";
|
|
16
|
+
export const EXPORT_MANIFEST = "superbee-export.json";
|
|
17
|
+
export const EXPORT_FORMAT = "superbee-export/1";
|
|
18
|
+
/** The host's own bounds (20,000 objects, 64 MiB stored), plus room for headers and the manifest. */
|
|
19
|
+
export const MAX_EXPORT_ENTRIES = 20_001;
|
|
20
|
+
export const MAX_EXPORT_BYTES = 128 * 1024 * 1024;
|
|
21
|
+
const LOCAL = 0x04034b50;
|
|
22
|
+
const CENTRAL = 0x02014b50;
|
|
23
|
+
const END = 0x06054b50;
|
|
24
|
+
const UTF8_NAMES = 0x0800;
|
|
25
|
+
export class ExportArchiveError extends Error {
|
|
26
|
+
name = "ExportArchiveError";
|
|
27
|
+
problem;
|
|
28
|
+
constructor(problem, message) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.problem = problem;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const CRC_TABLE = (() => {
|
|
34
|
+
const table = new Uint32Array(256);
|
|
35
|
+
for (let n = 0; n < 256; n += 1) {
|
|
36
|
+
let c = n;
|
|
37
|
+
for (let k = 0; k < 8; k += 1)
|
|
38
|
+
c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
39
|
+
table[n] = c >>> 0;
|
|
40
|
+
}
|
|
41
|
+
return table;
|
|
42
|
+
})();
|
|
43
|
+
export function crc32(bytes) {
|
|
44
|
+
let crc = 0xffffffff;
|
|
45
|
+
for (let i = 0; i < bytes.length; i += 1)
|
|
46
|
+
crc = CRC_TABLE[(crc ^ bytes[i]) & 0xff] ^ (crc >>> 8);
|
|
47
|
+
return (crc ^ 0xffffffff) >>> 0;
|
|
48
|
+
}
|
|
49
|
+
const sha256Hex = (bytes) => createHash("sha256").update(bytes).digest("hex");
|
|
50
|
+
const utf8 = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true });
|
|
51
|
+
function malformed(message) {
|
|
52
|
+
return new ExportArchiveError("malformed", message);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The entries of a store-only zip, strictly: one end record at the very end, a central directory
|
|
56
|
+
* that ends where it starts it, and local records laid end to end from offset zero, each stored,
|
|
57
|
+
* uncompressed, with no data descriptor and a matching CRC.
|
|
58
|
+
*/
|
|
59
|
+
export function readStoredZip(archive) {
|
|
60
|
+
if (archive.byteLength > MAX_EXPORT_BYTES)
|
|
61
|
+
throw malformed("the archive is larger than an export carries");
|
|
62
|
+
const view = new DataView(archive.buffer, archive.byteOffset, archive.byteLength);
|
|
63
|
+
const end = archive.byteLength - 22;
|
|
64
|
+
if (end < 0 || view.getUint32(end, true) !== END) {
|
|
65
|
+
throw new ExportArchiveError("incomplete", "the export ended before its central directory: the host stopped it part way");
|
|
66
|
+
}
|
|
67
|
+
if (view.getUint16(end + 4, true) !== 0 || view.getUint16(end + 6, true) !== 0)
|
|
68
|
+
throw malformed("a multi-disk archive");
|
|
69
|
+
const count = view.getUint16(end + 8, true);
|
|
70
|
+
if (count !== view.getUint16(end + 10, true))
|
|
71
|
+
throw malformed("the end record's counts disagree");
|
|
72
|
+
const directorySize = view.getUint32(end + 12, true);
|
|
73
|
+
const directoryOffset = view.getUint32(end + 16, true);
|
|
74
|
+
if (view.getUint16(end + 20, true) !== 0)
|
|
75
|
+
throw malformed("an archive comment");
|
|
76
|
+
if (directoryOffset + directorySize !== end)
|
|
77
|
+
throw malformed("the central directory does not end at the end record");
|
|
78
|
+
if (count > MAX_EXPORT_ENTRIES)
|
|
79
|
+
throw malformed("more entries than an export carries");
|
|
80
|
+
const entries = [];
|
|
81
|
+
let central = directoryOffset;
|
|
82
|
+
let expectedLocal = 0;
|
|
83
|
+
for (let index = 0; index < count; index += 1) {
|
|
84
|
+
if (central + 46 > end || view.getUint32(central, true) !== CENTRAL)
|
|
85
|
+
throw malformed("a truncated central directory");
|
|
86
|
+
const flags = view.getUint16(central + 8, true);
|
|
87
|
+
const method = view.getUint16(central + 10, true);
|
|
88
|
+
const crc = view.getUint32(central + 16, true);
|
|
89
|
+
const compressed = view.getUint32(central + 20, true);
|
|
90
|
+
const size = view.getUint32(central + 24, true);
|
|
91
|
+
const nameLength = view.getUint16(central + 28, true);
|
|
92
|
+
const extraLength = view.getUint16(central + 30, true);
|
|
93
|
+
const commentLength = view.getUint16(central + 32, true);
|
|
94
|
+
const localOffset = view.getUint32(central + 42, true);
|
|
95
|
+
if ((flags & ~UTF8_NAMES) !== 0)
|
|
96
|
+
throw malformed("an entry with flags a stored export never sets");
|
|
97
|
+
if (extraLength !== 0 || commentLength !== 0)
|
|
98
|
+
throw malformed("an entry with extra fields or a comment");
|
|
99
|
+
if (method !== 0 || compressed !== size)
|
|
100
|
+
throw malformed("a compressed entry");
|
|
101
|
+
const nameEnd = central + 46 + nameLength;
|
|
102
|
+
if (nameEnd + extraLength + commentLength > end)
|
|
103
|
+
throw malformed("a truncated central directory");
|
|
104
|
+
const nameBytes = archive.subarray(central + 46, nameEnd);
|
|
105
|
+
central = nameEnd + extraLength + commentLength;
|
|
106
|
+
if (localOffset !== expectedLocal)
|
|
107
|
+
throw malformed("entries that are not laid end to end");
|
|
108
|
+
if (localOffset + 30 > directoryOffset || view.getUint32(localOffset, true) !== LOCAL)
|
|
109
|
+
throw malformed("a missing local header");
|
|
110
|
+
const localFlags = view.getUint16(localOffset + 6, true);
|
|
111
|
+
const localMethod = view.getUint16(localOffset + 8, true);
|
|
112
|
+
const localNameLength = view.getUint16(localOffset + 26, true);
|
|
113
|
+
const localExtraLength = view.getUint16(localOffset + 28, true);
|
|
114
|
+
if (localFlags !== flags ||
|
|
115
|
+
localMethod !== 0 ||
|
|
116
|
+
view.getUint32(localOffset + 14, true) !== crc ||
|
|
117
|
+
view.getUint32(localOffset + 18, true) !== size ||
|
|
118
|
+
view.getUint32(localOffset + 22, true) !== size ||
|
|
119
|
+
localNameLength !== nameLength ||
|
|
120
|
+
localExtraLength !== 0) {
|
|
121
|
+
throw malformed("a local header that disagrees with the central directory");
|
|
122
|
+
}
|
|
123
|
+
const dataStart = localOffset + 30 + localNameLength + localExtraLength;
|
|
124
|
+
const dataEnd = dataStart + size;
|
|
125
|
+
if (dataEnd > directoryOffset)
|
|
126
|
+
throw malformed("an entry that runs into the central directory");
|
|
127
|
+
const localName = archive.subarray(localOffset + 30, localOffset + 30 + localNameLength);
|
|
128
|
+
if (Buffer.compare(Buffer.from(localName), Buffer.from(nameBytes)) !== 0)
|
|
129
|
+
throw malformed("a local name that disagrees with the central directory");
|
|
130
|
+
const data = archive.subarray(dataStart, dataEnd);
|
|
131
|
+
if (crc32(data) !== crc)
|
|
132
|
+
throw malformed("an entry whose CRC does not match its bytes");
|
|
133
|
+
let name;
|
|
134
|
+
try {
|
|
135
|
+
name = utf8.decode(nameBytes);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
throw malformed("an entry name that is not UTF-8");
|
|
139
|
+
}
|
|
140
|
+
entries.push({ name, data });
|
|
141
|
+
expectedLocal = dataEnd;
|
|
142
|
+
}
|
|
143
|
+
if (central !== end)
|
|
144
|
+
throw malformed("the central directory holds more than its entries");
|
|
145
|
+
if (expectedLocal !== directoryOffset)
|
|
146
|
+
throw malformed("bytes between the last entry and the central directory");
|
|
147
|
+
return entries;
|
|
148
|
+
}
|
|
149
|
+
const WINDOWS_DEVICE_NAMES = new Set(["CON", "PRN", "AUX", "NUL", ...Array.from({ length: 9 }, (_, i) => `COM${i + 1}`), ...Array.from({ length: 9 }, (_, i) => `LPT${i + 1}`)]);
|
|
150
|
+
/** One spelling per path under NFC and case folding: two entries that fold together would overwrite one another. */
|
|
151
|
+
const fold = (segment) => segment.normalize("NFC").toLowerCase();
|
|
152
|
+
/** What an archive path is in a bundle, or an `unsafe_path` refusal. The core guards decide. */
|
|
153
|
+
export function classifyEntryPath(entryPath) {
|
|
154
|
+
const unsafe = (why) => new ExportArchiveError("unsafe_path", `the archive holds a path a bundle cannot keep (${why}): ${JSON.stringify(entryPath.slice(0, 200))}`);
|
|
155
|
+
if (entryPath === "" || entryPath.length > 4096)
|
|
156
|
+
throw unsafe("empty or too long");
|
|
157
|
+
const segments = entryPath.split("/");
|
|
158
|
+
for (const segment of segments) {
|
|
159
|
+
// Dot-folders are invisible to the bundle walk, and `.git` among them would be Git's own.
|
|
160
|
+
if (segment.startsWith("."))
|
|
161
|
+
throw unsafe("a dot-prefixed segment");
|
|
162
|
+
if (segment.endsWith(".") || segment.endsWith(" "))
|
|
163
|
+
throw unsafe("a segment ending in a dot or a space");
|
|
164
|
+
if (WINDOWS_DEVICE_NAMES.has(segment.split(".")[0].toUpperCase()))
|
|
165
|
+
throw unsafe("a reserved device name");
|
|
166
|
+
}
|
|
167
|
+
try {
|
|
168
|
+
if (isReservedFile(entryPath)) {
|
|
169
|
+
const name = segments.at(-1);
|
|
170
|
+
assertSafeReservedFilename(name);
|
|
171
|
+
assertSafeReservedDir(segments.slice(0, -1).join("/"));
|
|
172
|
+
return "reserved";
|
|
173
|
+
}
|
|
174
|
+
if (entryPath.endsWith(".md")) {
|
|
175
|
+
const id = entryPath.slice(0, -3);
|
|
176
|
+
assertSafeConceptId(id);
|
|
177
|
+
if (pathFromConceptId(id) !== entryPath)
|
|
178
|
+
throw new Error("not canonical");
|
|
179
|
+
return "document";
|
|
180
|
+
}
|
|
181
|
+
assertSafeBlobKey(entryPath);
|
|
182
|
+
return "blob";
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
throw unsafe(error instanceof Error ? error.message : String(error));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* The first two paths that one folder cannot hold apart: the same file under folding, a file where
|
|
190
|
+
* a folder must be, or one folder spelled two ways (a case-insensitive disk would merge them, and
|
|
191
|
+
* the files in it would no longer be at the paths their ids name).
|
|
192
|
+
*/
|
|
193
|
+
export function findEntryCollision(paths) {
|
|
194
|
+
const files = new Map();
|
|
195
|
+
/** Folded folder path to its spelling and the entry that first needed it. */
|
|
196
|
+
const dirs = new Map();
|
|
197
|
+
for (const entryPath of paths) {
|
|
198
|
+
const segments = entryPath.split("/");
|
|
199
|
+
const key = segments.map(fold).join("/");
|
|
200
|
+
const file = files.get(key) ?? dirs.get(key)?.by;
|
|
201
|
+
if (file !== undefined)
|
|
202
|
+
return [file, entryPath];
|
|
203
|
+
files.set(key, entryPath);
|
|
204
|
+
for (let depth = 1; depth < segments.length; depth += 1) {
|
|
205
|
+
const spelling = segments.slice(0, depth).join("/");
|
|
206
|
+
const dirKey = segments.slice(0, depth).map(fold).join("/");
|
|
207
|
+
const asFile = files.get(dirKey);
|
|
208
|
+
if (asFile !== undefined)
|
|
209
|
+
return [asFile, entryPath];
|
|
210
|
+
const seen = dirs.get(dirKey);
|
|
211
|
+
if (seen === undefined)
|
|
212
|
+
dirs.set(dirKey, { spelling, by: entryPath });
|
|
213
|
+
else if (seen.spelling !== spelling)
|
|
214
|
+
return [seen.by, entryPath];
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
function isRecord(value) {
|
|
220
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Verify a whole export archive for `bundleId` and return its entries. Any failure is an
|
|
224
|
+
* {@link ExportArchiveError}; nothing is returned for an archive that is not complete and exact.
|
|
225
|
+
*/
|
|
226
|
+
export function verifyExport(archive, bundleId, options = {}) {
|
|
227
|
+
const raw = readStoredZip(archive);
|
|
228
|
+
const manifests = raw.filter((entry) => entry.name === EXPORT_MANIFEST);
|
|
229
|
+
if (manifests.length !== 1)
|
|
230
|
+
throw new ExportArchiveError("manifest_mismatch", `the archive holds ${manifests.length} manifests`);
|
|
231
|
+
let manifest;
|
|
232
|
+
try {
|
|
233
|
+
manifest = JSON.parse(utf8.decode(manifests[0].data));
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
throw new ExportArchiveError("manifest_mismatch", "the manifest is not JSON");
|
|
237
|
+
}
|
|
238
|
+
if (!isRecord(manifest))
|
|
239
|
+
throw new ExportArchiveError("manifest_mismatch", "the manifest is not an object");
|
|
240
|
+
if (manifest.format !== EXPORT_FORMAT) {
|
|
241
|
+
throw new ExportArchiveError("unsupported_format", `the export format is ${JSON.stringify(manifest.format)}; this reader accepts ${EXPORT_FORMAT}`);
|
|
242
|
+
}
|
|
243
|
+
const source = manifest.source;
|
|
244
|
+
const counts = manifest.counts;
|
|
245
|
+
const listed = manifest.entries;
|
|
246
|
+
if (!isRecord(source) ||
|
|
247
|
+
typeof source.tenantId !== "string" ||
|
|
248
|
+
typeof source.bundleId !== "string" ||
|
|
249
|
+
!Number.isSafeInteger(source.revision) ||
|
|
250
|
+
!(source.okfEdition === null || typeof source.okfEdition === "string") ||
|
|
251
|
+
typeof manifest.exportedAt !== "string" ||
|
|
252
|
+
!isRecord(counts) ||
|
|
253
|
+
![counts.documents, counts.reserved, counts.blobs].every((n) => Number.isSafeInteger(n) && n >= 0) ||
|
|
254
|
+
!Array.isArray(listed)) {
|
|
255
|
+
throw new ExportArchiveError("manifest_mismatch", "the manifest is missing a field");
|
|
256
|
+
}
|
|
257
|
+
if (source.bundleId !== bundleId)
|
|
258
|
+
throw new ExportArchiveError("wrong_bundle", `the export is of '${source.bundleId}', not '${bundleId}'`);
|
|
259
|
+
// A page states its place in the whole; the whole archive states none.
|
|
260
|
+
let page;
|
|
261
|
+
if (options.paged) {
|
|
262
|
+
const raw = manifest.page;
|
|
263
|
+
const count = (n) => Number.isSafeInteger(n) && n >= 0;
|
|
264
|
+
if (!isRecord(raw) || !count(raw.from) || !count(raw.count) || !count(raw.total) || (raw.next !== undefined && (typeof raw.next !== "string" || raw.next === ""))) {
|
|
265
|
+
throw new ExportArchiveError("manifest_mismatch", "the page's manifest does not state its page");
|
|
266
|
+
}
|
|
267
|
+
if (raw.from + raw.count > raw.total || (raw.next === undefined) !== (raw.from + raw.count === raw.total) || (raw.next !== undefined && raw.count === 0)) {
|
|
268
|
+
throw new ExportArchiveError("manifest_mismatch", "the page's manifest states a page outside the bundle");
|
|
269
|
+
}
|
|
270
|
+
page = {
|
|
271
|
+
from: raw.from,
|
|
272
|
+
count: raw.count,
|
|
273
|
+
total: raw.total,
|
|
274
|
+
...(raw.next !== undefined ? { next: raw.next } : {}),
|
|
275
|
+
counts: { documents: counts.documents, reserved: counts.reserved, blobs: counts.blobs },
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
else if (manifest.page !== undefined) {
|
|
279
|
+
throw new ExportArchiveError("manifest_mismatch", "the archive is one page, not the whole bundle");
|
|
280
|
+
}
|
|
281
|
+
const digests = new Map();
|
|
282
|
+
for (const row of listed) {
|
|
283
|
+
if (!isRecord(row) || typeof row.path !== "string" || !Number.isSafeInteger(row.bytes) || typeof row.sha256 !== "string" || !/^[0-9a-f]{64}$/.test(row.sha256)) {
|
|
284
|
+
throw new ExportArchiveError("manifest_mismatch", "a manifest entry is malformed");
|
|
285
|
+
}
|
|
286
|
+
if (digests.has(row.path))
|
|
287
|
+
throw new ExportArchiveError("manifest_mismatch", `the manifest lists ${row.path} twice`);
|
|
288
|
+
digests.set(row.path, { bytes: row.bytes, sha256: row.sha256 });
|
|
289
|
+
}
|
|
290
|
+
const entries = [];
|
|
291
|
+
const tally = { documents: 0, reserved: 0, blobs: 0 };
|
|
292
|
+
let bytes = 0;
|
|
293
|
+
const seen = new Set();
|
|
294
|
+
for (const entry of raw) {
|
|
295
|
+
if (entry.name === EXPORT_MANIFEST)
|
|
296
|
+
continue;
|
|
297
|
+
if (seen.has(entry.name))
|
|
298
|
+
throw new ExportArchiveError("manifest_mismatch", `the archive holds ${entry.name} twice`);
|
|
299
|
+
seen.add(entry.name);
|
|
300
|
+
const kind = classifyEntryPath(entry.name);
|
|
301
|
+
const digest = digests.get(entry.name);
|
|
302
|
+
if (!digest)
|
|
303
|
+
throw new ExportArchiveError("manifest_mismatch", `the archive holds ${entry.name}, which the manifest does not list`);
|
|
304
|
+
if (digest.bytes !== entry.data.byteLength || digest.sha256 !== sha256Hex(entry.data)) {
|
|
305
|
+
throw new ExportArchiveError("manifest_mismatch", `${entry.name} does not match its manifest digest`);
|
|
306
|
+
}
|
|
307
|
+
tally[kind === "document" ? "documents" : kind === "reserved" ? "reserved" : "blobs"] += 1;
|
|
308
|
+
bytes += entry.data.byteLength;
|
|
309
|
+
entries.push({ path: entry.name, kind, bytes: entry.data });
|
|
310
|
+
}
|
|
311
|
+
for (const listedPath of digests.keys()) {
|
|
312
|
+
if (!seen.has(listedPath))
|
|
313
|
+
throw new ExportArchiveError("manifest_mismatch", `the manifest lists ${listedPath}, which the archive does not hold`);
|
|
314
|
+
}
|
|
315
|
+
if (page) {
|
|
316
|
+
// A page's `counts` are the whole bundle's: the page holds its own count, and the pages are
|
|
317
|
+
// checked against `counts` once joined (`joinExportPages`).
|
|
318
|
+
if (entries.length !== page.count)
|
|
319
|
+
throw new ExportArchiveError("manifest_mismatch", "the page holds a different number of entries than it states");
|
|
320
|
+
}
|
|
321
|
+
else if (tally.documents !== counts.documents || tally.reserved !== counts.reserved || tally.blobs !== counts.blobs) {
|
|
322
|
+
throw new ExportArchiveError("manifest_mismatch", "the manifest's counts do not match the archive");
|
|
323
|
+
}
|
|
324
|
+
const collision = findEntryCollision(entries.map((entry) => entry.path));
|
|
325
|
+
if (collision) {
|
|
326
|
+
throw new ExportArchiveError("unsafe_path", `the archive holds paths one folder cannot keep apart: ${JSON.stringify(collision[0])} and ${JSON.stringify(collision[1])}`);
|
|
327
|
+
}
|
|
328
|
+
return rememberVerified({
|
|
329
|
+
source: { tenantId: source.tenantId, bundleId: source.bundleId, revision: source.revision, okfEdition: source.okfEdition },
|
|
330
|
+
exportedAt: manifest.exportedAt,
|
|
331
|
+
counts: tally,
|
|
332
|
+
entries,
|
|
333
|
+
bytes,
|
|
334
|
+
...(page ? { page } : {}),
|
|
335
|
+
}, [{ sha256: sha256Hex(manifests[0].data), bytes: manifests[0].data.byteLength }], archive.byteLength);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* The pages of one paged export, checked as each arrives and joined once the last has: every page
|
|
339
|
+
* must name the first page's source (one revision, one edition), state the same whole (its total,
|
|
340
|
+
* at most an export's entries, and its counts), start where the one before ended, and only the
|
|
341
|
+
* last may name no next page. So a host that repeats or skips a page is refused at that page, and
|
|
342
|
+
* a run of pages is at most `total` long. Joined, the pages must hold every object once, add up to
|
|
343
|
+
* the bundle's counts, and keep every path apart from the others in one folder.
|
|
344
|
+
*/
|
|
345
|
+
export class ExportPageChain {
|
|
346
|
+
#pages = [];
|
|
347
|
+
#from = 0;
|
|
348
|
+
#ended = false;
|
|
349
|
+
#archiveBytes = 0;
|
|
350
|
+
/** Adds the next page; answers its next cursor, or undefined once the export is whole. */
|
|
351
|
+
add(verified) {
|
|
352
|
+
exportProvenance(verified);
|
|
353
|
+
const state = verifiedStates.get(verified);
|
|
354
|
+
const accepted = state.snapshot;
|
|
355
|
+
const page = accepted.page;
|
|
356
|
+
const first = this.#pages[0] ?? accepted;
|
|
357
|
+
if (!page || !first.page || this.#ended)
|
|
358
|
+
throw new ExportArchiveError("manifest_mismatch", "a paged export answered a page outside its run");
|
|
359
|
+
const counts = first.page.counts;
|
|
360
|
+
if (accepted.source.tenantId !== first.source.tenantId ||
|
|
361
|
+
accepted.source.bundleId !== first.source.bundleId ||
|
|
362
|
+
accepted.source.revision !== first.source.revision ||
|
|
363
|
+
accepted.source.okfEdition !== first.source.okfEdition ||
|
|
364
|
+
page.counts.documents !== counts.documents ||
|
|
365
|
+
page.counts.reserved !== counts.reserved ||
|
|
366
|
+
page.counts.blobs !== counts.blobs ||
|
|
367
|
+
page.total !== first.page.total ||
|
|
368
|
+
page.total !== counts.documents + counts.reserved + counts.blobs ||
|
|
369
|
+
page.total > MAX_EXPORT_ENTRIES - 1) {
|
|
370
|
+
throw new ExportArchiveError("manifest_mismatch", "the pages do not describe one export of one revision");
|
|
371
|
+
}
|
|
372
|
+
if (page.from !== this.#from)
|
|
373
|
+
throw new ExportArchiveError("manifest_mismatch", "the pages leave a gap or overlap");
|
|
374
|
+
// Charge exact ZIP bytes, including headers and manifests, before retaining another page.
|
|
375
|
+
if (state.archiveBytes > MAX_EXPORT_BYTES - this.#archiveBytes)
|
|
376
|
+
throw malformed("the pages are larger than an export carries");
|
|
377
|
+
this.#archiveBytes += state.archiveBytes;
|
|
378
|
+
this.#pages.push(accepted);
|
|
379
|
+
this.#from += page.count;
|
|
380
|
+
if (page.next === undefined)
|
|
381
|
+
this.#ended = true;
|
|
382
|
+
return page.next;
|
|
383
|
+
}
|
|
384
|
+
/** The whole bundle, as one archive would have carried it. */
|
|
385
|
+
joined() {
|
|
386
|
+
const first = this.#pages[0];
|
|
387
|
+
if (!first?.page || !this.#ended)
|
|
388
|
+
throw new ExportArchiveError("manifest_mismatch", "the pages end before the last");
|
|
389
|
+
const { counts } = first.page;
|
|
390
|
+
const entries = [];
|
|
391
|
+
const tally = { documents: 0, reserved: 0, blobs: 0 };
|
|
392
|
+
let bytes = 0;
|
|
393
|
+
for (const verified of this.#pages) {
|
|
394
|
+
for (const entry of verified.entries) {
|
|
395
|
+
entries.push({ ...entry, bytes: Uint8Array.from(entry.bytes) });
|
|
396
|
+
tally[entry.kind === "document" ? "documents" : entry.kind === "reserved" ? "reserved" : "blobs"] += 1;
|
|
397
|
+
bytes += entry.bytes.byteLength;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
if (this.#from !== first.page.total || entries.length !== first.page.total)
|
|
401
|
+
throw new ExportArchiveError("manifest_mismatch", "the pages do not add up to the bundle");
|
|
402
|
+
if (tally.documents !== counts.documents || tally.reserved !== counts.reserved || tally.blobs !== counts.blobs) {
|
|
403
|
+
throw new ExportArchiveError("manifest_mismatch", "the manifest's counts do not match the pages");
|
|
404
|
+
}
|
|
405
|
+
const seen = new Set();
|
|
406
|
+
for (const entry of entries) {
|
|
407
|
+
if (seen.has(entry.path))
|
|
408
|
+
throw new ExportArchiveError("manifest_mismatch", `the pages hold ${entry.path} twice`);
|
|
409
|
+
seen.add(entry.path);
|
|
410
|
+
}
|
|
411
|
+
const collision = findEntryCollision(entries.map((entry) => entry.path));
|
|
412
|
+
if (collision) {
|
|
413
|
+
throw new ExportArchiveError("unsafe_path", `the archive holds paths one folder cannot keep apart: ${JSON.stringify(collision[0])} and ${JSON.stringify(collision[1])}`);
|
|
414
|
+
}
|
|
415
|
+
return rememberVerified({ source: { ...first.source }, exportedAt: first.exportedAt, counts: tally, entries, bytes }, this.#pages.flatMap((verified) => exportProvenance(verified).manifests), this.#archiveBytes);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
/** Join the verified pages of one paged export ({@link ExportPageChain}). */
|
|
419
|
+
export function joinExportPages(pages) {
|
|
420
|
+
const chain = new ExportPageChain();
|
|
421
|
+
for (const page of pages)
|
|
422
|
+
chain.add(page);
|
|
423
|
+
return chain.joined();
|
|
424
|
+
}
|
|
425
|
+
const verifiedStates = new WeakMap();
|
|
426
|
+
function inventoryOf(verified) {
|
|
427
|
+
return verified.entries.map((entry) => ({
|
|
428
|
+
path: entry.path,
|
|
429
|
+
kind: entry.kind,
|
|
430
|
+
bytes: entry.bytes.byteLength,
|
|
431
|
+
sha256: sha256Hex(entry.bytes),
|
|
432
|
+
})).sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
|
|
433
|
+
}
|
|
434
|
+
function fingerprintOf(verified) {
|
|
435
|
+
return JSON.stringify({ source: verified.source, exportedAt: verified.exportedAt,
|
|
436
|
+
counts: verified.counts, bytes: verified.bytes, page: verified.page,
|
|
437
|
+
entries: verified.entries.map((entry) => ({ path: entry.path, kind: entry.kind,
|
|
438
|
+
bytes: entry.bytes.byteLength, sha256: sha256Hex(entry.bytes) })),
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
function rememberVerified(verified, manifests, archiveBytes) {
|
|
442
|
+
const snapshot = {
|
|
443
|
+
source: { ...verified.source }, exportedAt: verified.exportedAt, counts: { ...verified.counts },
|
|
444
|
+
entries: verified.entries.map((entry) => ({ ...entry, bytes: Uint8Array.from(entry.bytes) })), bytes: verified.bytes,
|
|
445
|
+
...(verified.page ? { page: { ...verified.page, counts: { ...verified.page.counts } } } : {}),
|
|
446
|
+
};
|
|
447
|
+
const state = {
|
|
448
|
+
snapshot, archiveBytes,
|
|
449
|
+
fingerprint: fingerprintOf(verified),
|
|
450
|
+
provenance: {
|
|
451
|
+
source: { ...verified.source }, exportedAt: verified.exportedAt,
|
|
452
|
+
manifests: manifests.map((manifest) => ({ ...manifest })),
|
|
453
|
+
inventorySha256: sha256Hex(new TextEncoder().encode(JSON.stringify(inventoryOf(verified)))),
|
|
454
|
+
},
|
|
455
|
+
};
|
|
456
|
+
verifiedStates.set(verified, state);
|
|
457
|
+
verifiedStates.set(snapshot, state);
|
|
458
|
+
return verified;
|
|
459
|
+
}
|
|
460
|
+
/** Evidence for an accepted handle; refuses forged or subsequently mutated values. */
|
|
461
|
+
export function exportProvenance(verified) {
|
|
462
|
+
const state = verifiedStates.get(verified);
|
|
463
|
+
if (!state || state.fingerprint !== fingerprintOf(verified)) {
|
|
464
|
+
throw new ExportArchiveError("manifest_mismatch", "the verified export handle is absent or changed");
|
|
465
|
+
}
|
|
466
|
+
return { ...state.provenance, source: { ...state.provenance.source },
|
|
467
|
+
manifests: state.provenance.manifests.map((manifest) => ({ ...manifest })),
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Materialize a complete verified export in a fresh private child of an existing caller-owned
|
|
472
|
+
* parent. Returns only after every file is written. The caller owns cleanup of the returned
|
|
473
|
+
* directory and must keep that parent private while using the result. No target is overwritten,
|
|
474
|
+
* no transport metadata is written, and failure removes only this call's newly created child.
|
|
475
|
+
*/
|
|
476
|
+
export async function materializeExport(verified, parentDirectory) {
|
|
477
|
+
exportProvenance(verified);
|
|
478
|
+
const accepted = verifiedStates.get(verified).snapshot;
|
|
479
|
+
if (accepted.page)
|
|
480
|
+
throw new ExportArchiveError("manifest_mismatch", "one page is not a complete export");
|
|
481
|
+
if (![null, "0.1", "0.2"].includes(accepted.source.okfEdition)) {
|
|
482
|
+
throw new ExportArchiveError("unsupported_format", "the exported OKF edition is not supported");
|
|
483
|
+
}
|
|
484
|
+
// Snapshot before the first await: caller mutation cannot change the files written below.
|
|
485
|
+
const entries = accepted.entries;
|
|
486
|
+
const parent = await realpath(parentDirectory);
|
|
487
|
+
const folder = await mkdtemp(path.join(parent, ".superbee-verified-export-"));
|
|
488
|
+
try {
|
|
489
|
+
for (const entry of entries) {
|
|
490
|
+
const file = path.join(folder, ...entry.path.split("/"));
|
|
491
|
+
await mkdir(path.dirname(file), { recursive: true });
|
|
492
|
+
await writeFile(file, entry.bytes, { flag: "wx", mode: 0o600 });
|
|
493
|
+
}
|
|
494
|
+
return folder;
|
|
495
|
+
}
|
|
496
|
+
catch (error) {
|
|
497
|
+
await rm(folder, { recursive: true, force: true });
|
|
498
|
+
throw error;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
//# sourceMappingURL=portable-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-export.js","sourceRoot":"","sources":["../src/portable-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Publication-only filesystem capture helpers. This subpath deliberately does not widen the
|
|
3
3
|
* stable StorageBackend seam or the main `@superbee/core` export surface.
|
|
4
4
|
*/
|
|
5
|
-
export { listFilesystemReservedObjects, readRawFilesystemDocument, readRawFilesystemReserved, } from "./backend.js";
|
|
5
|
+
export { listFilesystemReservedObjects, openRawFilesystemDocumentPass, readRawFilesystemDocument, readRawFilesystemReserved, } from "./backend.js";
|
|
6
6
|
//# sourceMappingURL=publication-filesystem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publication-filesystem.d.ts","sourceRoot":"","sources":["../src/publication-filesystem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"publication-filesystem.d.ts","sourceRoot":"","sources":["../src/publication-filesystem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,cAAc,CAAC"}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Publication-only filesystem capture helpers. This subpath deliberately does not widen the
|
|
3
3
|
* stable StorageBackend seam or the main `@superbee/core` export surface.
|
|
4
4
|
*/
|
|
5
|
-
export { listFilesystemReservedObjects, readRawFilesystemDocument, readRawFilesystemReserved, } from "./backend.js";
|
|
5
|
+
export { listFilesystemReservedObjects, openRawFilesystemDocumentPass, readRawFilesystemDocument, readRawFilesystemReserved, } from "./backend.js";
|
|
6
6
|
//# sourceMappingURL=publication-filesystem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publication-filesystem.js","sourceRoot":"","sources":["../src/publication-filesystem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"publication-filesystem.js","sourceRoot":"","sources":["../src/publication-filesystem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qualified (cross-bundle) links: `[text](okf://<alias>/<path>.md[#fragment])`.
|
|
3
|
+
*
|
|
4
|
+
* `alias` is declared in the linking bundle's `docs/dependencies`; `path` is a concept id plus
|
|
5
|
+
* `.md`, relative to the TARGET bundle's root and used literally (never resolved against the
|
|
6
|
+
* linking file). The display text is the link's type, as for local typed links.
|
|
7
|
+
*
|
|
8
|
+
* The local link resolver ({@link parseLinksFromDoc}) treats `okf://` as external and ignores it,
|
|
9
|
+
* so local edges, backlinks and the renderer are unchanged; this module is the one parser for the
|
|
10
|
+
* qualified form. Pure and browser-safe.
|
|
11
|
+
*/
|
|
12
|
+
import type { ConceptId, Link, OkfDocument } from "./types.js";
|
|
13
|
+
export declare const QUALIFIED_HREF_PREFIX = "okf://";
|
|
14
|
+
/** A target in another bundle: the declared alias and the concept id inside that bundle. */
|
|
15
|
+
export interface QualifiedRef {
|
|
16
|
+
alias: string;
|
|
17
|
+
id: ConceptId;
|
|
18
|
+
}
|
|
19
|
+
export type ParsedQualifiedHref = {
|
|
20
|
+
ok: true;
|
|
21
|
+
ref: QualifiedRef;
|
|
22
|
+
fragment?: string;
|
|
23
|
+
} | {
|
|
24
|
+
ok: false;
|
|
25
|
+
detail: string;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* True when the href uses the `okf:` scheme in any letter case. A true answer means "this is a
|
|
29
|
+
* cross-bundle link"; {@link parseQualifiedHref} then says whether it is well formed (a malformed
|
|
30
|
+
* one is reported as `invalid_ref`, never silently ignored).
|
|
31
|
+
*/
|
|
32
|
+
export declare function isQualifiedHref(href: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Parse an `okf://` href. Refused (`ok: false`, read as `invalid_ref`): another scheme or a
|
|
35
|
+
* non-lower-case `okf://`, an alias outside `^[a-z][a-z0-9-]{0,62}$`, a leading `/` in the path,
|
|
36
|
+
* an empty, `.`, `..` or dot-prefixed segment, a query, a `%`, a non-`.md` target, `index.md` or
|
|
37
|
+
* `log.md` in any letter case, and any id the storage seam would refuse. The fragment is returned but plays no part in resolution.
|
|
38
|
+
*/
|
|
39
|
+
export declare function parseQualifiedHref(href: string): ParsedQualifiedHref;
|
|
40
|
+
/** Emit `okf://<alias>/<id>.md[#fragment]`. Throws {@link InvalidInputError} for a ref that would not parse back. */
|
|
41
|
+
export declare function qualifiedHref(ref: QualifiedRef, fragment?: string): string;
|
|
42
|
+
/** One `okf:` link as written in a document body. `ref` is null when the href is malformed. */
|
|
43
|
+
export interface QualifiedLink {
|
|
44
|
+
from: ConceptId;
|
|
45
|
+
text: string;
|
|
46
|
+
href: string;
|
|
47
|
+
ref: QualifiedRef | null;
|
|
48
|
+
/** Why the href is malformed; present exactly when `ref` is null. */
|
|
49
|
+
detail?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Every `okf:` link in a document body, in document order, malformed ones included. A link inside
|
|
53
|
+
* an inline code span or a fenced or indented code block is example text, not a link.
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseQualifiedLinks(doc: OkfDocument): QualifiedLink[];
|
|
56
|
+
/** A well-formed qualified link as an edge: `to` is the id in the target bundle, `bundle` its alias. */
|
|
57
|
+
export declare function qualifiedLinkEdge(link: QualifiedLink): Link | null;
|
|
58
|
+
/**
|
|
59
|
+
* Read a Kind link target (`links: {pours: "beers:Beer"}`). The target is qualified when the text
|
|
60
|
+
* before the first `:` matches the alias grammar; anything else (`Beer`, `Some: Thing`) is a local
|
|
61
|
+
* Kind name and returns null, as does a qualified target with no Kind (`beers:`).
|
|
62
|
+
*/
|
|
63
|
+
export declare function parseQualifiedKindTarget(target: string): {
|
|
64
|
+
alias: string;
|
|
65
|
+
kind: string;
|
|
66
|
+
} | null;
|
|
67
|
+
//# sourceMappingURL=qualified-links.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualified-links.d.ts","sourceRoot":"","sources":["../src/qualified-links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAE9C,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,SAAS,CAAC;CACf;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CA+BpE;AAED,qHAAqH;AACrH,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAS1E;AAED,+FAA+F;AAC/F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;IACzB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,EAAE,CAYrE;AAED,wGAAwG;AACxG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI,CAGlE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAO/F"}
|