@superbee/core 0.2.0-pre.3 → 0.2.0-pre.30
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 +1082 -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/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 +103 -2
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply a plan. Every write goes through `mutateDocument`, and every write step carries a guard
|
|
3
|
+
* that core builds itself and runs through `assertCandidate` on the fresh read, so the check and
|
|
4
|
+
* the compare-and-swap commit or refuse together:
|
|
5
|
+
*
|
|
6
|
+
* - `apply-owned-fields`: the ownership guard admits only owned and derived fields (and, in the
|
|
7
|
+
* grouped shape, the record's own `sources` entry), never the body, and requires the identity;
|
|
8
|
+
* a step that carries entry properties or writes a declared list field is written as core field
|
|
9
|
+
* actions (OKF v0.2 only), every other step as a patch, so its bytes and refusals stay those of
|
|
10
|
+
* record-bridge;
|
|
11
|
+
* - `create-signal`: the Signal create guard admits only a new document of the attention Kind,
|
|
12
|
+
* under its path, with a fixed key set and the claim state `todo`;
|
|
13
|
+
* - `collapse-signal`: the Signal update guard admits only an existing attention Kind document,
|
|
14
|
+
* a fixed key set and one appended observation line.
|
|
15
|
+
*
|
|
16
|
+
* Nothing else is ever created, and nothing is ever deleted.
|
|
17
|
+
*/
|
|
18
|
+
import { readBundleOkfVersion } from "../bundle-ops.js";
|
|
19
|
+
import { compareCodePoints } from "../code-point-order.js";
|
|
20
|
+
import { containsCollection, FieldActionError, prepareDocumentFieldAction, } from "../document-field-actions.js";
|
|
21
|
+
import { DocumentNotFoundError, KindConformanceError, mutateDocument, } from "../document-mutation.js";
|
|
22
|
+
import { PreconditionFailed } from "../document-precondition.js";
|
|
23
|
+
import { InvalidInputError } from "../errors.js";
|
|
24
|
+
import { isPresent } from "../kinds.js";
|
|
25
|
+
import { isManagedDocumentMetadataField } from "../managed-document-metadata.js";
|
|
26
|
+
import { okfValuesEqual } from "../okf-authored-values.js";
|
|
27
|
+
import { assertSafeConceptId } from "../paths.js";
|
|
28
|
+
import { isOkfActor } from "../okf-actor.js";
|
|
29
|
+
import { hasSourceIdentity, matchesSourceIdentity } from "../query-filter.js";
|
|
30
|
+
import { VersionConflict } from "../versioning.js";
|
|
31
|
+
import { same } from "./canonical.js";
|
|
32
|
+
import { CORE_VALUE_CODES, OverlayRefusal, REFUSAL_CODES } from "./errors.js";
|
|
33
|
+
import { declaredListFields, NEVER_OWNED, workStateFields } from "./policy.js";
|
|
34
|
+
import { redactUrl } from "./redact.js";
|
|
35
|
+
import { resolveAttentionKind } from "./signal-kind.js";
|
|
36
|
+
import { isPlannedObservation, isPlannedSignalBody, signalLinkTexts } from "./signal-text.js";
|
|
37
|
+
const STEP_OPS = new Set(["apply-owned-fields", "create-signal", "collapse-signal", "signal-duplicate", "record-only"]);
|
|
38
|
+
function record(value) {
|
|
39
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The owned and derived lists may never name a never-owned field, core's managed metadata, or the
|
|
43
|
+
* target's work state (the progress storage fields always; the target Kind's claim fields when known).
|
|
44
|
+
*/
|
|
45
|
+
function assertAdmissibleFields(ownedFields, derivedFields, workState = workStateFields(undefined, [])) {
|
|
46
|
+
for (const [list, name] of [[ownedFields, "owned_fields"], [derivedFields, "deriveFields.fields"]]) {
|
|
47
|
+
if (list.some((field) => typeof field !== "string")) {
|
|
48
|
+
throw new OverlayRefusal(REFUSAL_CODES.POLICY_INVALID, `${name} must be a list of field names`, { list: name });
|
|
49
|
+
}
|
|
50
|
+
const bad = list.filter((field) => NEVER_OWNED.has(field) || isManagedDocumentMetadataField(field) || workState.has(field));
|
|
51
|
+
if (bad.length) {
|
|
52
|
+
throw new OverlayRefusal(REFUSAL_CODES.POLICY_INVALID, `${name} names fields a feed can never own: ${bad.join(", ")}`, { list: name, fields: bad });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* In the grouped shape `sources` may change only by the step's own upsert: the fresh list carries
|
|
58
|
+
* (provider, external id) exactly once, removing that position from both lists leaves two equal
|
|
59
|
+
* lists, and the candidate's entry there is the fresh entry merged with the step's properties and
|
|
60
|
+
* nothing else. A moved, duplicated or added identity entry leaves the remainders unequal.
|
|
61
|
+
*/
|
|
62
|
+
function sourcesUpsertOnly(fresh, next, provider, externalId, properties) {
|
|
63
|
+
if (!Array.isArray(fresh) || !Array.isArray(next))
|
|
64
|
+
return false;
|
|
65
|
+
const identity = { resource: provider, id: externalId };
|
|
66
|
+
const at = fresh.flatMap((row, index) => (matchesSourceIdentity(row, identity) ? [index] : []));
|
|
67
|
+
if (at.length !== 1)
|
|
68
|
+
return false;
|
|
69
|
+
const index = at[0];
|
|
70
|
+
const rest = (rows) => rows.filter((_, i) => i !== index);
|
|
71
|
+
return same(rest(fresh), rest(next)) && same(next[index], { ...fresh[index], ...properties, ...identity });
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The ownership guard: refuse any candidate that differs from the fresh document outside the
|
|
75
|
+
* admitted fields (`FIELD_NOT_OWNED`), whose fresh read lost the provider identity
|
|
76
|
+
* (`OVERLAY_IDENTITY_LOST`), or whose owned field no longer holds the value the plan was decided
|
|
77
|
+
* against (`OVERLAY_DOC_CONFLICT`). Synchronous. Refuses at construction (`POLICY_INVALID`) when
|
|
78
|
+
* a list names a never-owned field or managed metadata.
|
|
79
|
+
*/
|
|
80
|
+
export function ownershipGuard(o) {
|
|
81
|
+
const { ownedFields, provider, externalId, expectedFrom = {}, derivedFields = [], sourceProperties, targetKind } = o;
|
|
82
|
+
assertAdmissibleFields(ownedFields, derivedFields);
|
|
83
|
+
const admitted = new Set([...ownedFields, ...derivedFields]);
|
|
84
|
+
return (existing, candidate) => {
|
|
85
|
+
if (!existing)
|
|
86
|
+
throw new OverlayRefusal(REFUSAL_CODES.OVERLAY_IDENTITY_LOST, "overlay document no longer exists", { external_id: externalId });
|
|
87
|
+
if (targetKind !== undefined && existing.frontmatter.type !== targetKind) {
|
|
88
|
+
throw new OverlayRefusal(REFUSAL_CODES.FIELD_NOT_OWNED, `owned-field writes reach ${targetKind} documents only`, { field: "type", external_id: externalId });
|
|
89
|
+
}
|
|
90
|
+
const before = existing.frontmatter;
|
|
91
|
+
const after = candidate.frontmatter;
|
|
92
|
+
const keys = new Set([...Object.keys(before), ...Object.keys(after)]);
|
|
93
|
+
const touched = [...keys].filter((k) => !same(before[k], after[k]));
|
|
94
|
+
const notOwned = touched.filter((k) => !admitted.has(k)
|
|
95
|
+
&& !(k === "sources" && sourceProperties !== undefined && sourcesUpsertOnly(before.sources, after.sources, provider, externalId, sourceProperties)));
|
|
96
|
+
if (candidate.body !== existing.body)
|
|
97
|
+
notOwned.push("(body)");
|
|
98
|
+
if (notOwned.length)
|
|
99
|
+
throw new OverlayRefusal(REFUSAL_CODES.FIELD_NOT_OWNED, `write would change non-owned fields: ${notOwned.join(", ")}`, { fields: notOwned, external_id: externalId });
|
|
100
|
+
if (!hasSourceIdentity(before.sources, { resource: provider, id: externalId })) {
|
|
101
|
+
throw new OverlayRefusal(REFUSAL_CODES.OVERLAY_IDENTITY_LOST, "document no longer carries the provider identity", { external_id: externalId });
|
|
102
|
+
}
|
|
103
|
+
for (const [f, from] of Object.entries(expectedFrom)) {
|
|
104
|
+
if (!same(before[f], from))
|
|
105
|
+
throw new OverlayRefusal(REFUSAL_CODES.OVERLAY_DOC_CONFLICT, `owned field ${f} changed since planning`, { field: f, external_id: externalId });
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/** Run every guard in order on the same fresh read; the first refusal wins. Synchronous guards stay synchronous. */
|
|
110
|
+
export function composeGuards(...guards) {
|
|
111
|
+
const list = guards.filter((guard) => typeof guard === "function");
|
|
112
|
+
return (existing, candidate) => {
|
|
113
|
+
const run = (from) => {
|
|
114
|
+
for (let i = from; i < list.length; i++) {
|
|
115
|
+
const outcome = list[i](existing, candidate);
|
|
116
|
+
if (outcome && typeof outcome.then === "function")
|
|
117
|
+
return outcome.then(() => run(i + 1));
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
return run(0);
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function notOwned(message, details = {}) {
|
|
124
|
+
return new OverlayRefusal(REFUSAL_CODES.FIELD_NOT_OWNED, message, details);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Signal text that is not this rendering of the Signal's own fields is held, not dropped: a plan
|
|
128
|
+
* the planner made always matches, and a mismatch is refused visibly and planned again next run.
|
|
129
|
+
*/
|
|
130
|
+
function textNotPlanned() {
|
|
131
|
+
return new OverlayRefusal(REFUSAL_CODES.INVALID_INPUT, "Signal text is not the planned rendering of its fields", { reason: "signal-text-not-planned", field: "(body)" });
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The Signal create guard: a new attention Kind document under its path, fixed keys, state `todo`.
|
|
135
|
+
* Exported for this package's tests only; the subpath entry does not re-export it.
|
|
136
|
+
*/
|
|
137
|
+
export function signalCreateGuard(attention, step, run) {
|
|
138
|
+
return (_existing, candidate) => {
|
|
139
|
+
if (!attention.ok)
|
|
140
|
+
throw notOwned(`record-overlay creates documents of an attention Kind only: ${attention.reason}`, { external_id: step.external_id });
|
|
141
|
+
const { name, prefix, stateField } = attention.value;
|
|
142
|
+
if (!step.target.startsWith(prefix))
|
|
143
|
+
throw notOwned(`create-signal target is outside ${prefix}`, { external_id: step.external_id });
|
|
144
|
+
const fm = candidate.frontmatter;
|
|
145
|
+
if (fm.type !== name)
|
|
146
|
+
throw notOwned(`record-overlay may only create ${name} documents`, { external_id: step.external_id });
|
|
147
|
+
const allowed = new Set(["type", "title", stateField, "change_kind", "observed_at", "provider", "external_id", "diff_summary", "priority", "about_doc", "sources", "content_digest", "expires_at"]);
|
|
148
|
+
const outside = Object.keys(fm).filter((key) => !allowed.has(key));
|
|
149
|
+
if (outside.length)
|
|
150
|
+
throw notOwned(`create-signal would write fields outside the attention record: ${outside.join(", ")}`, { fields: outside, external_id: step.external_id });
|
|
151
|
+
if (fm[stateField] !== "todo")
|
|
152
|
+
throw notOwned(`create-signal must create an unclaimed ${name} (${stateField}: todo)`, { field: stateField, external_id: step.external_id });
|
|
153
|
+
if (!Array.isArray(fm.sources) || !fm.sources.every((entry) => record(entry) && typeof entry.resource === "string")) {
|
|
154
|
+
throw notOwned("create-signal sources must be a list of entries naming a resource", { field: "sources", external_id: step.external_id });
|
|
155
|
+
}
|
|
156
|
+
if (fm.provider !== redactUrl(run.provider))
|
|
157
|
+
throw notOwned("create-signal must name the run's provider", { field: "provider", external_id: step.external_id });
|
|
158
|
+
if (fm.external_id !== step.external_id)
|
|
159
|
+
throw notOwned("create-signal must name the step's record", { field: "external_id", external_id: step.external_id });
|
|
160
|
+
const context = { target: step.target, feed: run.feed, targetKind: run.targetKind, links: signalLinkTexts(attention.value.kind, run.targetKind, run.feedKind) };
|
|
161
|
+
if (fm.observed_at !== run.observedAt || !isPlannedSignalBody(candidate.body, fm, step.content_digest, context))
|
|
162
|
+
throw textNotPlanned();
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
const UPDATE_FIELDS = new Set(["change_kind", "priority", "observed_at", "diff_summary", "title", "external_id", "about_doc", "content_digest", "expires_at"]);
|
|
166
|
+
/**
|
|
167
|
+
* The Signal update guard: an existing attention Kind document of this plan's provider, fixed keys,
|
|
168
|
+
* and one appended observation line of this observation.
|
|
169
|
+
* Exported for this package's tests only; the subpath entry does not re-export it.
|
|
170
|
+
*/
|
|
171
|
+
export function signalUpdateGuard(attention, step, observation) {
|
|
172
|
+
return (existing, candidate) => {
|
|
173
|
+
if (!attention.ok)
|
|
174
|
+
throw notOwned(`record-overlay updates documents of an attention Kind only: ${attention.reason}`, { external_id: step.external_id });
|
|
175
|
+
const { name, prefix } = attention.value;
|
|
176
|
+
if (!existing || existing.frontmatter.type !== name || !step.target.startsWith(prefix)) {
|
|
177
|
+
throw notOwned(`collapse-signal target is not a ${name} under ${prefix}`, { external_id: step.external_id });
|
|
178
|
+
}
|
|
179
|
+
const before = existing.frontmatter;
|
|
180
|
+
if (before.provider !== redactUrl(observation.provider))
|
|
181
|
+
throw notOwned("collapse-signal target belongs to another provider", { field: "provider", external_id: step.external_id });
|
|
182
|
+
const after = candidate.frontmatter;
|
|
183
|
+
const changed = [...new Set([...Object.keys(before), ...Object.keys(after)])].filter((k) => !same(before[k], after[k]));
|
|
184
|
+
const outside = changed.filter((k) => !UPDATE_FIELDS.has(k));
|
|
185
|
+
const appended = existing.body.replace(/\n*$/, "\n") + step.observation_line + "\n";
|
|
186
|
+
if (candidate.body !== existing.body && candidate.body !== appended)
|
|
187
|
+
outside.push("(body)");
|
|
188
|
+
if (outside.length)
|
|
189
|
+
throw notOwned(`collapse-signal would change fields outside the attention update: ${outside.join(", ")}`, { fields: outside, external_id: step.external_id });
|
|
190
|
+
if (step.set.observed_at !== observation.observedAt || !isPlannedObservation(step.observation_line, step.set, step.content_digest))
|
|
191
|
+
throw textNotPlanned();
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/** A FIELD_TYPE_VIOLATION refusal: field, type and code only (the value came from the feed and may carry a token). */
|
|
195
|
+
function typeRefusal(kind, violations) {
|
|
196
|
+
return { code: REFUSAL_CODES.FIELD_TYPE_VIOLATION, message: `candidate violates declared field types: ${violations.map((v) => `${v.field} (${v.type})`).join(", ")}`, details: { kind, violations } };
|
|
197
|
+
}
|
|
198
|
+
function toRefusal(err, step, registries) {
|
|
199
|
+
if (err instanceof OverlayRefusal)
|
|
200
|
+
return { code: err.code, message: err.message, details: err.details };
|
|
201
|
+
if (err instanceof KindConformanceError && err.violations.some((v) => CORE_VALUE_CODES.includes(v.code))) {
|
|
202
|
+
// Core refused a value for its declared type or vocabulary: held and value-free, named with
|
|
203
|
+
// whatever else core found by code and field only.
|
|
204
|
+
const kind = registries.map((r) => r?.kinds?.get(err.governs)).find(Boolean);
|
|
205
|
+
const refusal = typeRefusal(err.governs, err.violations.filter((v) => CORE_VALUE_CODES.includes(v.code)).map((v) => ({ field: v.field, type: (v.field !== undefined ? kind?.fields?.types?.[v.field] : undefined) ?? "vocabulary", code: v.code })));
|
|
206
|
+
const also = err.violations.filter((v) => !CORE_VALUE_CODES.includes(v.code)).map((v) => `${v.code}:${v.field ?? ""}`);
|
|
207
|
+
return also.length ? { ...refusal, details: { ...refusal.details, also } } : refusal;
|
|
208
|
+
}
|
|
209
|
+
if (err instanceof VersionConflict)
|
|
210
|
+
return { code: REFUSAL_CODES.STALE_VERSION, message: "document changed after planning (CAS lost)" };
|
|
211
|
+
if (err instanceof PreconditionFailed) {
|
|
212
|
+
const code = step.op === "collapse-signal" ? REFUSAL_CODES.SIGNAL_CLAIMED : REFUSAL_CODES.STALE_VERSION;
|
|
213
|
+
return { code, message: `precondition on ${err.field} no longer holds`, details: { field: err.field } };
|
|
214
|
+
}
|
|
215
|
+
if (err instanceof KindConformanceError) {
|
|
216
|
+
// Codes and fields only: core's sentences can quote a value that came from the feed.
|
|
217
|
+
const violations = err.violations.map((v) => v.code + ":" + (v.field ?? ""));
|
|
218
|
+
return { code: REFUSAL_CODES.KIND_REJECTED, message: `candidate does not satisfy the ${err.governs} kind: ${violations.join(", ")}`, details: { violations } };
|
|
219
|
+
}
|
|
220
|
+
if (err instanceof DocumentNotFoundError)
|
|
221
|
+
return { code: REFUSAL_CODES.OVERLAY_IDENTITY_LOST, message: "document not found" };
|
|
222
|
+
if (err instanceof FieldActionError) {
|
|
223
|
+
// A fixed message and the reason and field only: core's sentences and candidates can echo a provider value.
|
|
224
|
+
return { code: REFUSAL_CODES.INVALID_INPUT, message: "core refused the field actions for this step", details: { reason: err.details.reason, field: err.details.field } };
|
|
225
|
+
}
|
|
226
|
+
if (err instanceof InvalidInputError) {
|
|
227
|
+
// A value core's write policy refuses (an OKF v0.2 field type, a hook's list): held and
|
|
228
|
+
// value-free. The actor, editions and targets were checked before the first write.
|
|
229
|
+
return { code: REFUSAL_CODES.INVALID_INPUT, message: "core refused a value in this step", details: { reason: "invalid-value" } };
|
|
230
|
+
}
|
|
231
|
+
throw err;
|
|
232
|
+
}
|
|
233
|
+
const PROTOTYPE_KEYS = new Set(["__proto__", "constructor", "prototype"]);
|
|
234
|
+
/** JSON data: strings, booleans, null, finite numbers other than -0, lists and plain mappings; `undefined` members only. */
|
|
235
|
+
function jsonData(value, depth = 0) {
|
|
236
|
+
if (depth > 64)
|
|
237
|
+
return false;
|
|
238
|
+
if (value === null || typeof value === "string" || typeof value === "boolean")
|
|
239
|
+
return true;
|
|
240
|
+
if (typeof value === "number")
|
|
241
|
+
return Number.isFinite(value) && !Object.is(value, -0);
|
|
242
|
+
if (Array.isArray(value))
|
|
243
|
+
return value.every((item) => item !== undefined && jsonData(item, depth + 1));
|
|
244
|
+
if (typeof value === "object" && Object.prototype.toString.call(value) === "[object Object]") {
|
|
245
|
+
return Object.entries(value).every(([key, item]) => !PROTOTYPE_KEYS.has(key) && (item === undefined || jsonData(item, depth + 1)));
|
|
246
|
+
}
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
const scalar = (value) => typeof value === "string" || typeof value === "boolean" || (typeof value === "number" && jsonData(value));
|
|
250
|
+
function malformed(index, op) {
|
|
251
|
+
return new OverlayRefusal(REFUSAL_CODES.INVALID_INPUT, `plan step ${index} is not a well-formed ${typeof op === "string" ? op : "plan"} step`, { step: index });
|
|
252
|
+
}
|
|
253
|
+
/** The whole plan is checked before the first write: a malformed plan touches no document. */
|
|
254
|
+
function validatePlan(plan) {
|
|
255
|
+
if (!record(plan) || !Array.isArray(plan.steps))
|
|
256
|
+
throw new OverlayRefusal(REFUSAL_CODES.INVALID_INPUT, "a plan needs a steps list");
|
|
257
|
+
plan.steps.forEach((step, index) => {
|
|
258
|
+
if (!record(step) || typeof step.op !== "string" || !STEP_OPS.has(step.op)) {
|
|
259
|
+
throw new OverlayRefusal(REFUSAL_CODES.INVALID_INPUT, `unknown plan step ${record(step) ? String(step.op) : typeof step}`, { step: index });
|
|
260
|
+
}
|
|
261
|
+
const str = (key) => typeof step[key] === "string" && step[key] !== "";
|
|
262
|
+
const target = () => {
|
|
263
|
+
if (!str("target"))
|
|
264
|
+
return false;
|
|
265
|
+
try {
|
|
266
|
+
assertSafeConceptId(step.target);
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
if (step.op === "apply-owned-fields") {
|
|
274
|
+
const fields = step.fields;
|
|
275
|
+
if (!target() || !str("expected_version") || typeof step.external_id !== "string" || !record(fields) || Object.keys(fields).length === 0
|
|
276
|
+
|| !Object.entries(fields).every(([key, v]) => !PROTOTYPE_KEYS.has(key) && record(v) && (v.to === undefined || jsonData(v.to))))
|
|
277
|
+
throw malformed(index, step.op);
|
|
278
|
+
if (step.sources !== undefined && (!record(step.sources) || Object.entries(step.sources).some(([key, value]) => key === "resource" || key === "id" || PROTOTYPE_KEYS.has(key) || !scalar(value))))
|
|
279
|
+
throw malformed(index, step.op);
|
|
280
|
+
}
|
|
281
|
+
else if (step.op === "create-signal") {
|
|
282
|
+
const candidate = step.candidate;
|
|
283
|
+
if (!target() || !record(candidate) || !record(candidate.frontmatter) || typeof candidate.body !== "string" || !jsonData(candidate.frontmatter))
|
|
284
|
+
throw malformed(index, step.op);
|
|
285
|
+
}
|
|
286
|
+
else if (step.op === "collapse-signal") {
|
|
287
|
+
if (!target() || !str("expected_version") || typeof step.observation_line !== "string" || !record(step.set) || !jsonData(step.set))
|
|
288
|
+
throw malformed(index, step.op);
|
|
289
|
+
}
|
|
290
|
+
else if (step.op === "signal-duplicate") {
|
|
291
|
+
if (!target())
|
|
292
|
+
throw malformed(index, step.op);
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
async function editionOf(bundle) {
|
|
297
|
+
const edition = await readBundleOkfVersion(bundle) ?? "0.1";
|
|
298
|
+
if (edition !== "0.1" && edition !== "0.2") {
|
|
299
|
+
throw new OverlayRefusal(REFUSAL_CODES.INVALID_INPUT, `record-overlay writes OKF 0.1 and 0.2 bundles, not ${edition}`);
|
|
300
|
+
}
|
|
301
|
+
return edition;
|
|
302
|
+
}
|
|
303
|
+
export async function applyRecordOverlay(plan, ctx) {
|
|
304
|
+
const { content, ops, policy, actor, overlays, hooks = {} } = ctx;
|
|
305
|
+
if (!isOkfActor(actor))
|
|
306
|
+
throw new OverlayRefusal(REFUSAL_CODES.INVALID_INPUT, "record-overlay writes need an OKF actor (human:<id>, process:<id> or producer/version)");
|
|
307
|
+
validatePlan(plan);
|
|
308
|
+
const contentEdition = await editionOf(content.bundle);
|
|
309
|
+
const opsEdition = ops.bundle === content.bundle ? contentEdition : await editionOf(ops.bundle);
|
|
310
|
+
const derive = hooks.deriveFields;
|
|
311
|
+
let listFields = new Set();
|
|
312
|
+
// Owned and derived fields matter only to owned-field steps; a plan of Signal steps alone (a
|
|
313
|
+
// presentation feed, a findings run) is not refused for a policy that owns record fields.
|
|
314
|
+
if (plan.steps.some((step) => step.op === "apply-owned-fields")) {
|
|
315
|
+
if (!Array.isArray(policy.owned_fields))
|
|
316
|
+
throw new OverlayRefusal(REFUSAL_CODES.POLICY_INVALID, "owned_fields must be a list of field names", { list: "owned_fields" });
|
|
317
|
+
if (derive !== undefined && (!Array.isArray(derive.fields) || typeof derive.derive !== "function")) {
|
|
318
|
+
throw new OverlayRefusal(REFUSAL_CODES.POLICY_INVALID, "deriveFields needs a fields list and a derive function", { list: "deriveFields.fields" });
|
|
319
|
+
}
|
|
320
|
+
const targetKind = policy.target_kind === undefined ? undefined : content.registry.kinds.get(policy.target_kind);
|
|
321
|
+
assertAdmissibleFields(policy.owned_fields, derive?.fields ?? [], workStateFields(targetKind, [contentEdition]));
|
|
322
|
+
if (typeof policy.provider !== "string" || policy.provider === "")
|
|
323
|
+
throw new OverlayRefusal(REFUSAL_CODES.POLICY_INVALID, "owned-field steps need the policy's provider identity");
|
|
324
|
+
if (targetKind === undefined)
|
|
325
|
+
throw new OverlayRefusal(REFUSAL_CODES.POLICY_INVALID, "owned-field steps need a target Kind declared in the content bundle");
|
|
326
|
+
if (policy.target_kind === (ctx.signals?.kind ?? "Signal"))
|
|
327
|
+
throw new OverlayRefusal(REFUSAL_CODES.POLICY_INVALID, "the target Kind cannot be the attention Kind");
|
|
328
|
+
listFields = new Set(declaredListFields(targetKind));
|
|
329
|
+
}
|
|
330
|
+
const signalSteps = plan.steps.some((step) => step.op === "create-signal" || step.op === "collapse-signal");
|
|
331
|
+
// Signal writes are bound to the provider the caller runs for, never to a field of the plan.
|
|
332
|
+
if (signalSteps && (typeof policy.provider !== "string" || policy.provider === "")) {
|
|
333
|
+
throw new OverlayRefusal(REFUSAL_CODES.POLICY_INVALID, "Signal steps need the run's provider identity");
|
|
334
|
+
}
|
|
335
|
+
const run = { observedAt: plan.observed_at, provider: policy.provider, feed: plan.feed, targetKind: policy.target_kind, feedKind: ctx.signals?.feedKind };
|
|
336
|
+
const attention = signalSteps
|
|
337
|
+
? resolveAttentionKind(ops.registry, opsEdition, ctx.signals?.kind ?? "Signal", policy.target_kind)
|
|
338
|
+
: { ok: false, reason: "no Signal steps" };
|
|
339
|
+
const common = { strict: true, actor, producer: actor, persistActor: true };
|
|
340
|
+
const siteHook = (step, bundle) => {
|
|
341
|
+
const hook = hooks.assertCandidate;
|
|
342
|
+
return hook ? (existing, candidate) => hook(existing, candidate, { step: step.op, bundle }) : undefined;
|
|
343
|
+
};
|
|
344
|
+
const applyOwnedFields = async (step) => {
|
|
345
|
+
const derivedFields = derive?.fields ?? [];
|
|
346
|
+
const admitted = new Set([...policy.owned_fields, ...derivedFields]);
|
|
347
|
+
const expectedFrom = Object.fromEntries(Object.entries(step.fields).map(([f, v]) => [f, v.from]));
|
|
348
|
+
const base = {
|
|
349
|
+
...common, bundle: content.bundle, registry: content.registry, id: step.target, mode: "patch", onAbsent: "fail",
|
|
350
|
+
expectedVersion: step.expected_version,
|
|
351
|
+
assertCandidate: composeGuards(ownershipGuard({ ownedFields: policy.owned_fields, provider: policy.provider, externalId: step.external_id, expectedFrom, derivedFields, sourceProperties: step.sources, targetKind: policy.target_kind }), siteHook(step, "content")),
|
|
352
|
+
};
|
|
353
|
+
// The subpath's own refusals for what core's patch would throw on: a changed field whose old or
|
|
354
|
+
// new value holds a list. Owned, that is INVALID_INPUT (held); not owned, FIELD_NOT_OWNED.
|
|
355
|
+
const assertNoListAssignment = (existing, fields) => {
|
|
356
|
+
const fm = existing.frontmatter;
|
|
357
|
+
for (const [f, to] of fields) {
|
|
358
|
+
if (okfValuesEqual(fm[f], to) || !(containsCollection(fm[f]) || containsCollection(to)))
|
|
359
|
+
continue;
|
|
360
|
+
if (!admitted.has(f))
|
|
361
|
+
throw new OverlayRefusal(REFUSAL_CODES.FIELD_NOT_OWNED, `write would change non-owned fields: ${f}`, { fields: [f], external_id: step.external_id });
|
|
362
|
+
throw new OverlayRefusal(REFUSAL_CODES.INVALID_INPUT, "an owned field holding a list cannot be written as a field value", { reason: "list-valued-field", field: f });
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
const entries = () => Object.entries(step.fields).map(([f, v]) => [f, v.to]);
|
|
366
|
+
// A declared list field is always replaced whole, and only in its normalized form: nonblank strings
|
|
367
|
+
// in code point order without repeats, which is what a connector's mapping emits. Core keeps a list
|
|
368
|
+
// in the order given, so a list in any other order or with repeats is held here, value-free.
|
|
369
|
+
const assertNormalizedList = (f, to) => {
|
|
370
|
+
if (Array.isArray(to) && to.every((member, i) => typeof member === "string" && isPresent(member) && (i === 0 || compareCodePoints(to[i - 1], member) < 0)))
|
|
371
|
+
return;
|
|
372
|
+
throw new OverlayRefusal(REFUSAL_CODES.INVALID_INPUT, "an owned list field must be a list of strings in code point order without repeats", { reason: "list-not-normalized", field: f });
|
|
373
|
+
};
|
|
374
|
+
const writesList = Object.keys(step.fields).some((f) => listFields.has(f));
|
|
375
|
+
if (step.sources !== undefined || writesList) {
|
|
376
|
+
if (step.sources !== undefined && contentEdition !== "0.2") {
|
|
377
|
+
throw new OverlayRefusal(REFUSAL_CODES.INVALID_INPUT, "the grouped sources write needs an OKF v0.2 bundle", { reason: "grouped-shape-needs-v0.2", field: "sources" });
|
|
378
|
+
}
|
|
379
|
+
// On v0.1 a field action restamps `timestamp` inside the candidate, which no feed owns.
|
|
380
|
+
if (contentEdition !== "0.2") {
|
|
381
|
+
throw new OverlayRefusal(REFUSAL_CODES.INVALID_INPUT, "an owned list field is written by field actions, which need an OKF v0.2 bundle", { reason: "grouped-shape-needs-v0.2", field: Object.keys(step.fields).find((f) => listFields.has(f)) });
|
|
382
|
+
}
|
|
383
|
+
// The planner never puts the upsert on a step that removes a field, so a step carrying both was not planned here.
|
|
384
|
+
const removed = step.sources !== undefined ? Object.entries(step.fields).find(([, v]) => v.to === undefined) : undefined;
|
|
385
|
+
if (removed)
|
|
386
|
+
throw new OverlayRefusal(REFUSAL_CODES.INVALID_INPUT, "the grouped sources write cannot remove a field", { reason: "grouped-shape-removes-field", field: removed[0] });
|
|
387
|
+
const properties = step.sources;
|
|
388
|
+
return mutateDocument({
|
|
389
|
+
...base,
|
|
390
|
+
input: (existing) => {
|
|
391
|
+
// Core's field actions refuse on their own terms before any guard runs, so the guard's own
|
|
392
|
+
// screens run first, in its order: the target Kind, unowned fields, then the identity.
|
|
393
|
+
if (existing.frontmatter.type !== policy.target_kind) {
|
|
394
|
+
throw new OverlayRefusal(REFUSAL_CODES.FIELD_NOT_OWNED, `owned-field writes reach ${policy.target_kind} documents only`, { field: "type", external_id: step.external_id });
|
|
395
|
+
}
|
|
396
|
+
const outside = Object.keys(step.fields).filter((f) => !admitted.has(f));
|
|
397
|
+
if (outside.length)
|
|
398
|
+
throw new OverlayRefusal(REFUSAL_CODES.FIELD_NOT_OWNED, `write would change non-owned fields: ${outside.join(", ")}`, { fields: outside, external_id: step.external_id });
|
|
399
|
+
// With the upsert, a missing identity is an added entry, which the guard refuses as `sources`.
|
|
400
|
+
if (properties === undefined && !hasSourceIdentity(existing.frontmatter.sources, { resource: policy.provider, id: step.external_id })) {
|
|
401
|
+
throw new OverlayRefusal(REFUSAL_CODES.OVERLAY_IDENTITY_LOST, "document no longer carries the provider identity", { external_id: step.external_id });
|
|
402
|
+
}
|
|
403
|
+
assertNoListAssignment(existing, entries().filter(([f]) => !listFields.has(f)));
|
|
404
|
+
for (const [f, to] of entries())
|
|
405
|
+
if (listFields.has(f) && to !== undefined)
|
|
406
|
+
assertNormalizedList(f, to);
|
|
407
|
+
if (properties !== undefined) {
|
|
408
|
+
const entry = Array.isArray(existing.frontmatter.sources)
|
|
409
|
+
? existing.frontmatter.sources.filter((row) => matchesSourceIdentity(row, { resource: policy.provider, id: step.external_id }))
|
|
410
|
+
: [];
|
|
411
|
+
if (entry.length === 1) {
|
|
412
|
+
for (const key of Object.keys(properties)) {
|
|
413
|
+
if (containsCollection(entry[0][key])) {
|
|
414
|
+
throw new OverlayRefusal(REFUSAL_CODES.INVALID_INPUT, "a source property holding a list cannot be written as a field value", { reason: "list-valued-source-property", field: "sources" });
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
const actions = entries().map(([field, value]) => (value === undefined ? { action: "unset", field }
|
|
420
|
+
: listFields.has(field) ? { action: "replace-all", field, value: value }
|
|
421
|
+
: { action: "set", field, value }));
|
|
422
|
+
if (properties !== undefined)
|
|
423
|
+
actions.push({ action: "upsert", field: "sources", value: { ...properties, resource: policy.provider, id: step.external_id } });
|
|
424
|
+
if (derive) {
|
|
425
|
+
let preview = existing;
|
|
426
|
+
for (const action of actions) {
|
|
427
|
+
preview = { id: existing.id, ...prepareDocumentFieldAction(preview, action, { registry: content.registry, okfVersion: contentEdition }).candidate };
|
|
428
|
+
}
|
|
429
|
+
const derived = derive.derive(structuredClone(existing), { frontmatter: preview.frontmatter, body: preview.body });
|
|
430
|
+
for (const [field, value] of Object.entries(derived ?? {}))
|
|
431
|
+
actions.push({ action: "set", field, value });
|
|
432
|
+
}
|
|
433
|
+
return { kind: "field-actions", actions };
|
|
434
|
+
},
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
return mutateDocument({
|
|
438
|
+
...base,
|
|
439
|
+
buildCandidate: (existing) => {
|
|
440
|
+
if (!existing)
|
|
441
|
+
throw new DocumentNotFoundError(step.target);
|
|
442
|
+
assertNoListAssignment(existing, entries());
|
|
443
|
+
const fm = { ...existing.frontmatter };
|
|
444
|
+
for (const [f, { to }] of Object.entries(step.fields)) {
|
|
445
|
+
if (to === undefined)
|
|
446
|
+
delete fm[f];
|
|
447
|
+
else
|
|
448
|
+
fm[f] = to;
|
|
449
|
+
}
|
|
450
|
+
let next = { frontmatter: fm, body: existing.body };
|
|
451
|
+
if (derive) {
|
|
452
|
+
const derived = derive.derive(structuredClone(existing), structuredClone(next));
|
|
453
|
+
if (derived && Object.keys(derived).length)
|
|
454
|
+
next = { frontmatter: { ...next.frontmatter, ...derived }, body: next.body };
|
|
455
|
+
}
|
|
456
|
+
return next;
|
|
457
|
+
},
|
|
458
|
+
});
|
|
459
|
+
};
|
|
460
|
+
const results = [];
|
|
461
|
+
for (const step of plan.steps) {
|
|
462
|
+
if (step.op === "record-only" || step.op === "signal-duplicate") {
|
|
463
|
+
// A quiet step's reason (a disappearance after the record's last known end) is kept for the receipt reader.
|
|
464
|
+
results.push({ op: step.op, target: step.target ?? null, external_id: step.external_id, outcome: "skipped", ...("reason" in step && step.reason ? { reason: step.reason } : {}), ...("last_known_end" in step && step.last_known_end ? { last_known_end: step.last_known_end } : {}) });
|
|
465
|
+
continue;
|
|
466
|
+
}
|
|
467
|
+
try {
|
|
468
|
+
let r;
|
|
469
|
+
if (step.op === "apply-owned-fields") {
|
|
470
|
+
r = await applyOwnedFields(step);
|
|
471
|
+
if (r.changed)
|
|
472
|
+
overlays?.replace(r.doc, r.version);
|
|
473
|
+
}
|
|
474
|
+
else if (step.op === "create-signal") {
|
|
475
|
+
r = await mutateDocument({
|
|
476
|
+
...common, bundle: ops.bundle, registry: ops.registry, id: step.target, mode: "patch", onAbsent: "create",
|
|
477
|
+
// A create never overwrites. An existing Signal of this provider is the type precondition
|
|
478
|
+
// the reference reports (retryable); another provider's Signal holding the id, or any
|
|
479
|
+
// other document there, is refused outright.
|
|
480
|
+
buildCandidate: (existing) => {
|
|
481
|
+
if (existing) {
|
|
482
|
+
const fm = existing.frontmatter;
|
|
483
|
+
if (fm.type === undefined)
|
|
484
|
+
throw notOwned("create-signal target already exists", { external_id: step.external_id });
|
|
485
|
+
if (attention.ok && fm.type === attention.value.name && fm.provider !== redactUrl(run.provider)) {
|
|
486
|
+
throw notOwned("create-signal target holds another provider's Signal", { field: "provider", external_id: step.external_id });
|
|
487
|
+
}
|
|
488
|
+
throw new OverlayRefusal(REFUSAL_CODES.STALE_VERSION, "precondition on type no longer holds", { field: "type" });
|
|
489
|
+
}
|
|
490
|
+
return structuredClone(step.candidate);
|
|
491
|
+
},
|
|
492
|
+
assertCandidate: composeGuards(signalCreateGuard(attention, step, run), siteHook(step, "ops")),
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
const claim = attention.ok ? attention.value : undefined;
|
|
497
|
+
r = await mutateDocument({
|
|
498
|
+
...common, bundle: ops.bundle, registry: ops.registry, id: step.target, mode: "patch", onAbsent: "fail",
|
|
499
|
+
expectedVersion: step.expected_version,
|
|
500
|
+
...(claim ? { preconditions: [{ field: claim.stateField, expect: { equals: "todo" } }, { field: claim.ownerField, expect: "absent" }] } : {}),
|
|
501
|
+
buildCandidate: (existing) => {
|
|
502
|
+
const fm = existing.frontmatter;
|
|
503
|
+
// Core's patch refuses a list change before any guard runs; no attention update field holds one.
|
|
504
|
+
const listed = Object.keys(step.set).filter((k) => !okfValuesEqual(fm[k], step.set[k]) && (containsCollection(fm[k]) || containsCollection(step.set[k])));
|
|
505
|
+
if (listed.length)
|
|
506
|
+
throw notOwned(`collapse-signal would change fields outside the attention update: ${listed.join(", ")}`, { fields: listed, external_id: step.external_id });
|
|
507
|
+
return {
|
|
508
|
+
frontmatter: { ...existing.frontmatter, ...step.set },
|
|
509
|
+
body: existing.body.includes(step.observation_line) ? existing.body : existing.body.replace(/\n*$/, "\n") + step.observation_line + "\n",
|
|
510
|
+
};
|
|
511
|
+
},
|
|
512
|
+
assertCandidate: composeGuards(signalUpdateGuard(attention, step, run), siteHook(step, "ops")),
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
results.push({ op: step.op, target: step.target, external_id: step.external_id, outcome: r.changed ? "applied" : "unchanged", version: r.version });
|
|
516
|
+
}
|
|
517
|
+
catch (err) {
|
|
518
|
+
results.push({ op: step.op, target: step.target, external_id: step.external_id, outcome: "refused", ...toRefusal(err, step, [content.registry, ops.registry]) });
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
return {
|
|
522
|
+
feed: plan.feed, provider: plan.provider, observed_at: plan.observed_at, results, refusals: plan.refusals ?? [],
|
|
523
|
+
// Records the caller could not turn into records are part of the run's outcome, not just of the plan.
|
|
524
|
+
diagnostics: plan.diagnostics ?? [],
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
//# sourceMappingURL=apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/record-overlay/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The overlay comparison canon: `JSON.stringify` over a recursive copy whose object keys are sorted
|
|
3
|
+
* by the default string order and whose `undefined` members are dropped, with no other handling.
|
|
4
|
+
*
|
|
5
|
+
* Module-private and deliberately distinct from core's other two canonicalizers
|
|
6
|
+
* (`recipe-lifecycle/stamp.ts`, `site-capabilities.ts`). Overlay write decisions depend on its
|
|
7
|
+
* exact semantics: an absent value and `null` differ, a `Date` is `{}`, a function member is
|
|
8
|
+
* dropped, and a top-level `undefined` stays `undefined`. Merging it with either of the others is a
|
|
9
|
+
* behaviour change for the three-value rule and the ownership guard.
|
|
10
|
+
*/
|
|
11
|
+
export declare function overlayCanonicalJson(value: unknown): string | undefined;
|
|
12
|
+
/** Equality under {@link overlayCanonicalJson}. */
|
|
13
|
+
export declare function same(a: unknown, b: unknown): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Equality for a field the target Kind declares as a list type, which an owning feed treats as a
|
|
16
|
+
* set: two lists are equal when they hold the same members, whatever their order and however often
|
|
17
|
+
* a member repeats, each member compared under {@link overlayCanonicalJson}. Anything that is not
|
|
18
|
+
* a list on both sides compares by {@link same}, so an absent list still differs from `[]`. A
|
|
19
|
+
* separate function so `same()`, and with it every digest and the parity golden, never changes.
|
|
20
|
+
*/
|
|
21
|
+
export declare function sameSet(a: unknown, b: unknown): boolean;
|
|
22
|
+
//# sourceMappingURL=canonical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../src/record-overlay/canonical.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEvE;AAaD,mDAAmD;AACnD,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAMvD"}
|