@derive-to/artifacts 0.0.0-stage → 0.6.1
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/LICENSE +202 -0
- package/README.md +197 -2
- package/dist/host/bridge.d.ts +38 -0
- package/dist/host/bridge.d.ts.map +1 -0
- package/dist/host/bridge.js +86 -0
- package/dist/host/bridge.js.map +1 -0
- package/dist/host/client.d.ts +168 -0
- package/dist/host/client.d.ts.map +1 -0
- package/dist/host/client.js +214 -0
- package/dist/host/client.js.map +1 -0
- package/dist/host/emitter.d.ts +7 -0
- package/dist/host/emitter.d.ts.map +1 -0
- package/dist/host/emitter.js +18 -0
- package/dist/host/emitter.js.map +1 -0
- package/dist/host/index.d.ts +7 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +5 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/live.d.ts +18 -0
- package/dist/host/live.d.ts.map +1 -0
- package/dist/host/live.js +32 -0
- package/dist/host/live.js.map +1 -0
- package/dist/host/print.d.ts +3 -0
- package/dist/host/print.d.ts.map +1 -0
- package/dist/host/print.js +57 -0
- package/dist/host/print.js.map +1 -0
- package/dist/host/sse.d.ts +11 -0
- package/dist/host/sse.d.ts.map +1 -0
- package/dist/host/sse.js +57 -0
- package/dist/host/sse.js.map +1 -0
- package/dist/host/view.d.ts +60 -0
- package/dist/host/view.d.ts.map +1 -0
- package/dist/host/view.js +218 -0
- package/dist/host/view.js.map +1 -0
- package/dist/protocol/access.d.ts +39 -0
- package/dist/protocol/access.d.ts.map +1 -0
- package/dist/protocol/access.js +30 -0
- package/dist/protocol/access.js.map +1 -0
- package/dist/protocol/anchors.d.ts +61 -0
- package/dist/protocol/anchors.d.ts.map +1 -0
- package/dist/protocol/anchors.js +41 -0
- package/dist/protocol/anchors.js.map +1 -0
- package/dist/protocol/collection.d.ts +33 -0
- package/dist/protocol/collection.d.ts.map +1 -0
- package/dist/protocol/collection.js +168 -0
- package/dist/protocol/collection.js.map +1 -0
- package/dist/protocol/define.d.ts +9 -0
- package/dist/protocol/define.d.ts.map +1 -0
- package/dist/protocol/define.js +2 -0
- package/dist/protocol/define.js.map +1 -0
- package/dist/protocol/errors.d.ts +55 -0
- package/dist/protocol/errors.d.ts.map +1 -0
- package/dist/protocol/errors.js +54 -0
- package/dist/protocol/errors.js.map +1 -0
- package/dist/protocol/extension.d.ts +44 -0
- package/dist/protocol/extension.d.ts.map +1 -0
- package/dist/protocol/extension.js +37 -0
- package/dist/protocol/extension.js.map +1 -0
- package/dist/protocol/http.d.ts +195 -0
- package/dist/protocol/http.d.ts.map +1 -0
- package/dist/protocol/http.js +72 -0
- package/dist/protocol/http.js.map +1 -0
- package/dist/protocol/index.d.ts +19 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +19 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/inputs.d.ts +62 -0
- package/dist/protocol/inputs.d.ts.map +1 -0
- package/dist/protocol/inputs.js +51 -0
- package/dist/protocol/inputs.js.map +1 -0
- package/dist/protocol/layout.d.ts +33 -0
- package/dist/protocol/layout.d.ts.map +1 -0
- package/dist/protocol/layout.js +45 -0
- package/dist/protocol/layout.js.map +1 -0
- package/dist/protocol/mentions.d.ts +16 -0
- package/dist/protocol/mentions.d.ts.map +1 -0
- package/dist/protocol/mentions.js +35 -0
- package/dist/protocol/mentions.js.map +1 -0
- package/dist/protocol/methods.d.ts +146 -0
- package/dist/protocol/methods.d.ts.map +1 -0
- package/dist/protocol/methods.js +57 -0
- package/dist/protocol/methods.js.map +1 -0
- package/dist/protocol/presentation.d.ts +9 -0
- package/dist/protocol/presentation.d.ts.map +1 -0
- package/dist/protocol/presentation.js +7 -0
- package/dist/protocol/presentation.js.map +1 -0
- package/dist/protocol/quote-match.d.ts +20 -0
- package/dist/protocol/quote-match.d.ts.map +1 -0
- package/dist/protocol/quote-match.js +33 -0
- package/dist/protocol/quote-match.js.map +1 -0
- package/dist/protocol/sharing.d.ts +133 -0
- package/dist/protocol/sharing.d.ts.map +1 -0
- package/dist/protocol/sharing.js +67 -0
- package/dist/protocol/sharing.js.map +1 -0
- package/dist/protocol/slot-map.d.ts +4 -0
- package/dist/protocol/slot-map.d.ts.map +1 -0
- package/dist/protocol/slot-map.js +10 -0
- package/dist/protocol/slot-map.js.map +1 -0
- package/dist/protocol/source-anchors.d.ts +101 -0
- package/dist/protocol/source-anchors.d.ts.map +1 -0
- package/dist/protocol/source-anchors.js +250 -0
- package/dist/protocol/source-anchors.js.map +1 -0
- package/dist/protocol/source-assets.d.ts +15 -0
- package/dist/protocol/source-assets.d.ts.map +1 -0
- package/dist/protocol/source-assets.js +66 -0
- package/dist/protocol/source-assets.js.map +1 -0
- package/dist/protocol/source-cache.d.ts +23 -0
- package/dist/protocol/source-cache.d.ts.map +1 -0
- package/dist/protocol/source-cache.js +52 -0
- package/dist/protocol/source-cache.js.map +1 -0
- package/dist/protocol/source-copy-dom.d.ts +11 -0
- package/dist/protocol/source-copy-dom.d.ts.map +1 -0
- package/dist/protocol/source-copy-dom.js +103 -0
- package/dist/protocol/source-copy-dom.js.map +1 -0
- package/dist/protocol/source-copy-identities.d.ts +19 -0
- package/dist/protocol/source-copy-identities.d.ts.map +1 -0
- package/dist/protocol/source-copy-identities.js +119 -0
- package/dist/protocol/source-copy-identities.js.map +1 -0
- package/dist/protocol/source-deck-elements.d.ts +30 -0
- package/dist/protocol/source-deck-elements.d.ts.map +1 -0
- package/dist/protocol/source-deck-elements.js +67 -0
- package/dist/protocol/source-deck-elements.js.map +1 -0
- package/dist/protocol/source-deck-ops.d.ts +18 -0
- package/dist/protocol/source-deck-ops.d.ts.map +1 -0
- package/dist/protocol/source-deck-ops.js +154 -0
- package/dist/protocol/source-deck-ops.js.map +1 -0
- package/dist/protocol/source-deck.d.ts +20 -0
- package/dist/protocol/source-deck.d.ts.map +1 -0
- package/dist/protocol/source-deck.js +103 -0
- package/dist/protocol/source-deck.js.map +1 -0
- package/dist/protocol/source-edits.d.ts +21 -0
- package/dist/protocol/source-edits.d.ts.map +1 -0
- package/dist/protocol/source-edits.js +126 -0
- package/dist/protocol/source-edits.js.map +1 -0
- package/dist/protocol/source-element-edits.d.ts +24 -0
- package/dist/protocol/source-element-edits.d.ts.map +1 -0
- package/dist/protocol/source-element-edits.js +93 -0
- package/dist/protocol/source-element-edits.js.map +1 -0
- package/dist/protocol/source-element-match.d.ts +4 -0
- package/dist/protocol/source-element-match.d.ts.map +1 -0
- package/dist/protocol/source-element-match.js +40 -0
- package/dist/protocol/source-element-match.js.map +1 -0
- package/dist/protocol/source-element-neighbors.d.ts +8 -0
- package/dist/protocol/source-element-neighbors.d.ts.map +1 -0
- package/dist/protocol/source-element-neighbors.js +39 -0
- package/dist/protocol/source-element-neighbors.js.map +1 -0
- package/dist/protocol/source-element-properties.d.ts +25 -0
- package/dist/protocol/source-element-properties.d.ts.map +1 -0
- package/dist/protocol/source-element-properties.js +71 -0
- package/dist/protocol/source-element-properties.js.map +1 -0
- package/dist/protocol/source-element-scan.d.ts +4 -0
- package/dist/protocol/source-element-scan.d.ts.map +1 -0
- package/dist/protocol/source-element-scan.js +181 -0
- package/dist/protocol/source-element-scan.js.map +1 -0
- package/dist/protocol/source-element-score.d.ts +12 -0
- package/dist/protocol/source-element-score.d.ts.map +1 -0
- package/dist/protocol/source-element-score.js +82 -0
- package/dist/protocol/source-element-score.js.map +1 -0
- package/dist/protocol/source-element-selector.d.ts +19 -0
- package/dist/protocol/source-element-selector.d.ts.map +1 -0
- package/dist/protocol/source-element-selector.js +115 -0
- package/dist/protocol/source-element-selector.js.map +1 -0
- package/dist/protocol/source-element-types.d.ts +79 -0
- package/dist/protocol/source-element-types.d.ts.map +1 -0
- package/dist/protocol/source-element-types.js +2 -0
- package/dist/protocol/source-element-types.js.map +1 -0
- package/dist/protocol/source-elements.d.ts +7 -0
- package/dist/protocol/source-elements.d.ts.map +1 -0
- package/dist/protocol/source-elements.js +6 -0
- package/dist/protocol/source-elements.js.map +1 -0
- package/dist/protocol/source-entities.d.ts +17 -0
- package/dist/protocol/source-entities.d.ts.map +1 -0
- package/dist/protocol/source-entities.js +45 -0
- package/dist/protocol/source-entities.js.map +1 -0
- package/dist/protocol/source-hash.d.ts +4 -0
- package/dist/protocol/source-hash.d.ts.map +1 -0
- package/dist/protocol/source-hash.js +5 -0
- package/dist/protocol/source-hash.js.map +1 -0
- package/dist/protocol/source-head.d.ts +4 -0
- package/dist/protocol/source-head.d.ts.map +1 -0
- package/dist/protocol/source-head.js +79 -0
- package/dist/protocol/source-head.js.map +1 -0
- package/dist/protocol/source-html-attributes.d.ts +20 -0
- package/dist/protocol/source-html-attributes.d.ts.map +1 -0
- package/dist/protocol/source-html-attributes.js +89 -0
- package/dist/protocol/source-html-attributes.js.map +1 -0
- package/dist/protocol/source-html-elements.d.ts +5 -0
- package/dist/protocol/source-html-elements.d.ts.map +1 -0
- package/dist/protocol/source-html-elements.js +144 -0
- package/dist/protocol/source-html-elements.js.map +1 -0
- package/dist/protocol/source-html.d.ts +51 -0
- package/dist/protocol/source-html.d.ts.map +1 -0
- package/dist/protocol/source-html.js +167 -0
- package/dist/protocol/source-html.js.map +1 -0
- package/dist/protocol/source-layout-limits.d.ts +21 -0
- package/dist/protocol/source-layout-limits.d.ts.map +1 -0
- package/dist/protocol/source-layout-limits.js +20 -0
- package/dist/protocol/source-layout-limits.js.map +1 -0
- package/dist/protocol/source-layout.d.ts +29 -0
- package/dist/protocol/source-layout.d.ts.map +1 -0
- package/dist/protocol/source-layout.js +149 -0
- package/dist/protocol/source-layout.js.map +1 -0
- package/dist/protocol/source-markdown-blocks.d.ts +4 -0
- package/dist/protocol/source-markdown-blocks.d.ts.map +1 -0
- package/dist/protocol/source-markdown-blocks.js +175 -0
- package/dist/protocol/source-markdown-blocks.js.map +1 -0
- package/dist/protocol/source-markdown-history.d.ts +26 -0
- package/dist/protocol/source-markdown-history.d.ts.map +1 -0
- package/dist/protocol/source-markdown-history.js +133 -0
- package/dist/protocol/source-markdown-history.js.map +1 -0
- package/dist/protocol/source-markdown-inline.d.ts +20 -0
- package/dist/protocol/source-markdown-inline.d.ts.map +1 -0
- package/dist/protocol/source-markdown-inline.js +155 -0
- package/dist/protocol/source-markdown-inline.js.map +1 -0
- package/dist/protocol/source-markdown-model.d.ts +49 -0
- package/dist/protocol/source-markdown-model.d.ts.map +1 -0
- package/dist/protocol/source-markdown-model.js +28 -0
- package/dist/protocol/source-markdown-model.js.map +1 -0
- package/dist/protocol/source-markdown-op-align.d.ts +5 -0
- package/dist/protocol/source-markdown-op-align.d.ts.map +1 -0
- package/dist/protocol/source-markdown-op-align.js +49 -0
- package/dist/protocol/source-markdown-op-align.js.map +1 -0
- package/dist/protocol/source-markdown-op-blocks.d.ts +4 -0
- package/dist/protocol/source-markdown-op-blocks.d.ts.map +1 -0
- package/dist/protocol/source-markdown-op-blocks.js +198 -0
- package/dist/protocol/source-markdown-op-blocks.js.map +1 -0
- package/dist/protocol/source-markdown-op-context.d.ts +38 -0
- package/dist/protocol/source-markdown-op-context.d.ts.map +1 -0
- package/dist/protocol/source-markdown-op-context.js +44 -0
- package/dist/protocol/source-markdown-op-context.js.map +1 -0
- package/dist/protocol/source-markdown-op-inline.d.ts +8 -0
- package/dist/protocol/source-markdown-op-inline.d.ts.map +1 -0
- package/dist/protocol/source-markdown-op-inline.js +281 -0
- package/dist/protocol/source-markdown-op-inline.js.map +1 -0
- package/dist/protocol/source-markdown-op-reading.d.ts +7 -0
- package/dist/protocol/source-markdown-op-reading.d.ts.map +1 -0
- package/dist/protocol/source-markdown-op-reading.js +93 -0
- package/dist/protocol/source-markdown-op-reading.js.map +1 -0
- package/dist/protocol/source-markdown-ops.d.ts +13 -0
- package/dist/protocol/source-markdown-ops.d.ts.map +1 -0
- package/dist/protocol/source-markdown-ops.js +105 -0
- package/dist/protocol/source-markdown-ops.js.map +1 -0
- package/dist/protocol/source-markdown-projection.d.ts +30 -0
- package/dist/protocol/source-markdown-projection.d.ts.map +1 -0
- package/dist/protocol/source-markdown-projection.js +164 -0
- package/dist/protocol/source-markdown-projection.js.map +1 -0
- package/dist/protocol/source-markdown-types.d.ts +32 -0
- package/dist/protocol/source-markdown-types.d.ts.map +1 -0
- package/dist/protocol/source-markdown-types.js +2 -0
- package/dist/protocol/source-markdown-types.js.map +1 -0
- package/dist/protocol/source-markdown.d.ts +5 -0
- package/dist/protocol/source-markdown.d.ts.map +1 -0
- package/dist/protocol/source-markdown.js +9 -0
- package/dist/protocol/source-markdown.js.map +1 -0
- package/dist/protocol/source-op-apply.d.ts +14 -0
- package/dist/protocol/source-op-apply.d.ts.map +1 -0
- package/dist/protocol/source-op-apply.js +77 -0
- package/dist/protocol/source-op-apply.js.map +1 -0
- package/dist/protocol/source-op-context.d.ts +35 -0
- package/dist/protocol/source-op-context.d.ts.map +1 -0
- package/dist/protocol/source-op-context.js +97 -0
- package/dist/protocol/source-op-context.js.map +1 -0
- package/dist/protocol/source-op-hash.d.ts +36 -0
- package/dist/protocol/source-op-hash.d.ts.map +1 -0
- package/dist/protocol/source-op-hash.js +181 -0
- package/dist/protocol/source-op-hash.js.map +1 -0
- package/dist/protocol/source-op-history.d.ts +10 -0
- package/dist/protocol/source-op-history.d.ts.map +1 -0
- package/dist/protocol/source-op-history.js +85 -0
- package/dist/protocol/source-op-history.js.map +1 -0
- package/dist/protocol/source-op-index.d.ts +19 -0
- package/dist/protocol/source-op-index.d.ts.map +1 -0
- package/dist/protocol/source-op-index.js +53 -0
- package/dist/protocol/source-op-index.js.map +1 -0
- package/dist/protocol/source-op-parse.d.ts +11 -0
- package/dist/protocol/source-op-parse.d.ts.map +1 -0
- package/dist/protocol/source-op-parse.js +138 -0
- package/dist/protocol/source-op-parse.js.map +1 -0
- package/dist/protocol/source-op-preservation.d.ts +11 -0
- package/dist/protocol/source-op-preservation.d.ts.map +1 -0
- package/dist/protocol/source-op-preservation.js +47 -0
- package/dist/protocol/source-op-preservation.js.map +1 -0
- package/dist/protocol/source-op-render.d.ts +17 -0
- package/dist/protocol/source-op-render.d.ts.map +1 -0
- package/dist/protocol/source-op-render.js +116 -0
- package/dist/protocol/source-op-render.js.map +1 -0
- package/dist/protocol/source-op-types.d.ts +51 -0
- package/dist/protocol/source-op-types.d.ts.map +1 -0
- package/dist/protocol/source-op-types.js +2 -0
- package/dist/protocol/source-op-types.js.map +1 -0
- package/dist/protocol/source-quote-selector.d.ts +12 -0
- package/dist/protocol/source-quote-selector.d.ts.map +1 -0
- package/dist/protocol/source-quote-selector.js +29 -0
- package/dist/protocol/source-quote-selector.js.map +1 -0
- package/dist/protocol/source-ranges.d.ts +11 -0
- package/dist/protocol/source-ranges.d.ts.map +1 -0
- package/dist/protocol/source-ranges.js +37 -0
- package/dist/protocol/source-ranges.js.map +1 -0
- package/dist/protocol/source-read-html-navigation.d.ts +12 -0
- package/dist/protocol/source-read-html-navigation.d.ts.map +1 -0
- package/dist/protocol/source-read-html-navigation.js +76 -0
- package/dist/protocol/source-read-html-navigation.js.map +1 -0
- package/dist/protocol/source-read-html-tokens.d.ts +12 -0
- package/dist/protocol/source-read-html-tokens.d.ts.map +1 -0
- package/dist/protocol/source-read-html-tokens.js +58 -0
- package/dist/protocol/source-read-html-tokens.js.map +1 -0
- package/dist/protocol/source-read-landmarks.d.ts +24 -0
- package/dist/protocol/source-read-landmarks.d.ts.map +1 -0
- package/dist/protocol/source-read-landmarks.js +73 -0
- package/dist/protocol/source-read-landmarks.js.map +1 -0
- package/dist/protocol/source-read-markdown-blocks.d.ts +4 -0
- package/dist/protocol/source-read-markdown-blocks.d.ts.map +1 -0
- package/dist/protocol/source-read-markdown-blocks.js +87 -0
- package/dist/protocol/source-read-markdown-blocks.js.map +1 -0
- package/dist/protocol/source-read-markdown-inline.d.ts +4 -0
- package/dist/protocol/source-read-markdown-inline.d.ts.map +1 -0
- package/dist/protocol/source-read-markdown-inline.js +63 -0
- package/dist/protocol/source-read-markdown-inline.js.map +1 -0
- package/dist/protocol/source-read-markdown-state.d.ts +33 -0
- package/dist/protocol/source-read-markdown-state.d.ts.map +1 -0
- package/dist/protocol/source-read-markdown-state.js +79 -0
- package/dist/protocol/source-read-markdown-state.js.map +1 -0
- package/dist/protocol/source-read-markdown-tables.d.ts +4 -0
- package/dist/protocol/source-read-markdown-tables.d.ts.map +1 -0
- package/dist/protocol/source-read-markdown-tables.js +68 -0
- package/dist/protocol/source-read-markdown-tables.js.map +1 -0
- package/dist/protocol/source-read-markdown-text.d.ts +8 -0
- package/dist/protocol/source-read-markdown-text.d.ts.map +1 -0
- package/dist/protocol/source-read-markdown-text.js +42 -0
- package/dist/protocol/source-read-markdown-text.js.map +1 -0
- package/dist/protocol/source-read-markdown.d.ts +9 -0
- package/dist/protocol/source-read-markdown.d.ts.map +1 -0
- package/dist/protocol/source-read-markdown.js +106 -0
- package/dist/protocol/source-read-markdown.js.map +1 -0
- package/dist/protocol/source-read-spine.d.ts +33 -0
- package/dist/protocol/source-read-spine.d.ts.map +1 -0
- package/dist/protocol/source-read-spine.js +94 -0
- package/dist/protocol/source-read-spine.js.map +1 -0
- package/dist/protocol/source-reflow.d.ts +7 -0
- package/dist/protocol/source-reflow.d.ts.map +1 -0
- package/dist/protocol/source-reflow.js +127 -0
- package/dist/protocol/source-reflow.js.map +1 -0
- package/dist/protocol/source-stamp.d.ts +22 -0
- package/dist/protocol/source-stamp.d.ts.map +1 -0
- package/dist/protocol/source-stamp.js +52 -0
- package/dist/protocol/source-stamp.js.map +1 -0
- package/dist/protocol/source-stamped-sync.d.ts +11 -0
- package/dist/protocol/source-stamped-sync.d.ts.map +1 -0
- package/dist/protocol/source-stamped-sync.js +238 -0
- package/dist/protocol/source-stamped-sync.js.map +1 -0
- package/dist/protocol/source-structural-apply.d.ts +5 -0
- package/dist/protocol/source-structural-apply.d.ts.map +1 -0
- package/dist/protocol/source-structural-apply.js +59 -0
- package/dist/protocol/source-structural-apply.js.map +1 -0
- package/dist/protocol/source-structural-backfill-parts.d.ts +25 -0
- package/dist/protocol/source-structural-backfill-parts.d.ts.map +1 -0
- package/dist/protocol/source-structural-backfill-parts.js +85 -0
- package/dist/protocol/source-structural-backfill-parts.js.map +1 -0
- package/dist/protocol/source-structural-backfill-rules.d.ts +9 -0
- package/dist/protocol/source-structural-backfill-rules.d.ts.map +1 -0
- package/dist/protocol/source-structural-backfill-rules.js +94 -0
- package/dist/protocol/source-structural-backfill-rules.js.map +1 -0
- package/dist/protocol/source-structural-backfill.d.ts +7 -0
- package/dist/protocol/source-structural-backfill.d.ts.map +1 -0
- package/dist/protocol/source-structural-backfill.js +79 -0
- package/dist/protocol/source-structural-backfill.js.map +1 -0
- package/dist/protocol/source-structural-gap.d.ts +5 -0
- package/dist/protocol/source-structural-gap.d.ts.map +1 -0
- package/dist/protocol/source-structural-gap.js +21 -0
- package/dist/protocol/source-structural-gap.js.map +1 -0
- package/dist/protocol/source-structural-inspect.d.ts +5 -0
- package/dist/protocol/source-structural-inspect.d.ts.map +1 -0
- package/dist/protocol/source-structural-inspect.js +137 -0
- package/dist/protocol/source-structural-inspect.js.map +1 -0
- package/dist/protocol/source-structural-order.d.ts +22 -0
- package/dist/protocol/source-structural-order.d.ts.map +1 -0
- package/dist/protocol/source-structural-order.js +128 -0
- package/dist/protocol/source-structural-order.js.map +1 -0
- package/dist/protocol/source-structural-size.d.ts +14 -0
- package/dist/protocol/source-structural-size.d.ts.map +1 -0
- package/dist/protocol/source-structural-size.js +99 -0
- package/dist/protocol/source-structural-size.js.map +1 -0
- package/dist/protocol/source-structural-spacing.d.ts +10 -0
- package/dist/protocol/source-structural-spacing.d.ts.map +1 -0
- package/dist/protocol/source-structural-spacing.js +55 -0
- package/dist/protocol/source-structural-spacing.js.map +1 -0
- package/dist/protocol/source-structural-targets.d.ts +8 -0
- package/dist/protocol/source-structural-targets.d.ts.map +1 -0
- package/dist/protocol/source-structural-targets.js +55 -0
- package/dist/protocol/source-structural-targets.js.map +1 -0
- package/dist/protocol/source-structural-types.d.ts +120 -0
- package/dist/protocol/source-structural-types.d.ts.map +1 -0
- package/dist/protocol/source-structural-types.js +3 -0
- package/dist/protocol/source-structural-types.js.map +1 -0
- package/dist/protocol/source-style.d.ts +15 -0
- package/dist/protocol/source-style.d.ts.map +1 -0
- package/dist/protocol/source-style.js +130 -0
- package/dist/protocol/source-style.js.map +1 -0
- package/dist/protocol/source-tags.d.ts +6 -0
- package/dist/protocol/source-tags.d.ts.map +1 -0
- package/dist/protocol/source-tags.js +5 -0
- package/dist/protocol/source-tags.js.map +1 -0
- package/dist/protocol/source-text-index.d.ts +22 -0
- package/dist/protocol/source-text-index.d.ts.map +1 -0
- package/dist/protocol/source-text-index.js +95 -0
- package/dist/protocol/source-text-index.js.map +1 -0
- package/dist/protocol/source-text-range.d.ts +9 -0
- package/dist/protocol/source-text-range.d.ts.map +1 -0
- package/dist/protocol/source-text-range.js +55 -0
- package/dist/protocol/source-text-range.js.map +1 -0
- package/dist/protocol/source-text-segments.d.ts +27 -0
- package/dist/protocol/source-text-segments.d.ts.map +1 -0
- package/dist/protocol/source-text-segments.js +65 -0
- package/dist/protocol/source-text-segments.js.map +1 -0
- package/dist/protocol/source-text.d.ts +9 -0
- package/dist/protocol/source-text.d.ts.map +1 -0
- package/dist/protocol/source-text.js +72 -0
- package/dist/protocol/source-text.js.map +1 -0
- package/dist/protocol/source-video-attributes.d.ts +5 -0
- package/dist/protocol/source-video-attributes.d.ts.map +1 -0
- package/dist/protocol/source-video-attributes.js +29 -0
- package/dist/protocol/source-video-attributes.js.map +1 -0
- package/dist/protocol/source-video-edits.d.ts +4 -0
- package/dist/protocol/source-video-edits.d.ts.map +1 -0
- package/dist/protocol/source-video-edits.js +85 -0
- package/dist/protocol/source-video-edits.js.map +1 -0
- package/dist/protocol/source-video-id.d.ts +4 -0
- package/dist/protocol/source-video-id.d.ts.map +1 -0
- package/dist/protocol/source-video-id.js +9 -0
- package/dist/protocol/source-video-id.js.map +1 -0
- package/dist/protocol/source-video.d.ts +38 -0
- package/dist/protocol/source-video.d.ts.map +1 -0
- package/dist/protocol/source-video.js +116 -0
- package/dist/protocol/source-video.js.map +1 -0
- package/dist/protocol/source.d.ts +47 -0
- package/dist/protocol/source.d.ts.map +1 -0
- package/dist/protocol/source.js +45 -0
- package/dist/protocol/source.js.map +1 -0
- package/dist/protocol/state-apply.d.ts +22 -0
- package/dist/protocol/state-apply.d.ts.map +1 -0
- package/dist/protocol/state-apply.js +13 -0
- package/dist/protocol/state-apply.js.map +1 -0
- package/dist/protocol/state-limits.d.ts +10 -0
- package/dist/protocol/state-limits.d.ts.map +1 -0
- package/dist/protocol/state-limits.js +11 -0
- package/dist/protocol/state-limits.js.map +1 -0
- package/dist/protocol/state.d.ts +60 -0
- package/dist/protocol/state.d.ts.map +1 -0
- package/dist/protocol/state.js +56 -0
- package/dist/protocol/state.js.map +1 -0
- package/dist/protocol/text.d.ts +9 -0
- package/dist/protocol/text.d.ts.map +1 -0
- package/dist/protocol/text.js +72 -0
- package/dist/protocol/text.js.map +1 -0
- package/dist/protocol/tools.d.ts +81 -0
- package/dist/protocol/tools.d.ts.map +1 -0
- package/dist/protocol/tools.js +29 -0
- package/dist/protocol/tools.js.map +1 -0
- package/dist/protocol/viewer.d.ts +21 -0
- package/dist/protocol/viewer.d.ts.map +1 -0
- package/dist/protocol/viewer.js +18 -0
- package/dist/protocol/viewer.js.map +1 -0
- package/dist/react/artifact-list.d.ts +17 -0
- package/dist/react/artifact-list.d.ts.map +1 -0
- package/dist/react/artifact-list.js +121 -0
- package/dist/react/artifact-list.js.map +1 -0
- package/dist/react/comment-body.d.ts +5 -0
- package/dist/react/comment-body.d.ts.map +1 -0
- package/dist/react/comment-body.js +14 -0
- package/dist/react/comment-body.js.map +1 -0
- package/dist/react/comment-input.d.ts +18 -0
- package/dist/react/comment-input.d.ts.map +1 -0
- package/dist/react/comment-input.js +74 -0
- package/dist/react/comment-input.js.map +1 -0
- package/dist/react/composer.d.ts +10 -0
- package/dist/react/composer.d.ts.map +1 -0
- package/dist/react/composer.js +42 -0
- package/dist/react/composer.js.map +1 -0
- package/dist/react/context.d.ts +57 -0
- package/dist/react/context.d.ts.map +1 -0
- package/dist/react/context.js +11 -0
- package/dist/react/context.js.map +1 -0
- package/dist/react/cursors.d.ts +3 -0
- package/dist/react/cursors.d.ts.map +1 -0
- package/dist/react/cursors.js +8 -0
- package/dist/react/cursors.js.map +1 -0
- package/dist/react/edit-controls.d.ts +4 -0
- package/dist/react/edit-controls.d.ts.map +1 -0
- package/dist/react/edit-controls.js +29 -0
- package/dist/react/edit-controls.js.map +1 -0
- package/dist/react/editing-actions.d.ts +44 -0
- package/dist/react/editing-actions.d.ts.map +1 -0
- package/dist/react/editing-actions.js +129 -0
- package/dist/react/editing-actions.js.map +1 -0
- package/dist/react/history.css +79 -0
- package/dist/react/index.d.ts +20 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +19 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/labels.d.ts +124 -0
- package/dist/react/labels.d.ts.map +1 -0
- package/dist/react/labels.js +115 -0
- package/dist/react/labels.js.map +1 -0
- package/dist/react/layout-surface.d.ts +29 -0
- package/dist/react/layout-surface.d.ts.map +1 -0
- package/dist/react/layout-surface.js +111 -0
- package/dist/react/layout-surface.js.map +1 -0
- package/dist/react/mention-list.d.ts +12 -0
- package/dist/react/mention-list.d.ts.map +1 -0
- package/dist/react/mention-list.js +16 -0
- package/dist/react/mention-list.js.map +1 -0
- package/dist/react/native-stage.d.ts +8 -0
- package/dist/react/native-stage.d.ts.map +1 -0
- package/dist/react/native-stage.js +41 -0
- package/dist/react/native-stage.js.map +1 -0
- package/dist/react/overlays.css +43 -0
- package/dist/react/panel.css +488 -0
- package/dist/react/panel.d.ts +26 -0
- package/dist/react/panel.d.ts.map +1 -0
- package/dist/react/panel.js +101 -0
- package/dist/react/panel.js.map +1 -0
- package/dist/react/presence.d.ts +3 -0
- package/dist/react/presence.d.ts.map +1 -0
- package/dist/react/presence.js +23 -0
- package/dist/react/presence.js.map +1 -0
- package/dist/react/present-button.d.ts +3 -0
- package/dist/react/present-button.d.ts.map +1 -0
- package/dist/react/present-button.js +14 -0
- package/dist/react/present-button.js.map +1 -0
- package/dist/react/provider.d.ts +22 -0
- package/dist/react/provider.d.ts.map +1 -0
- package/dist/react/provider.js +163 -0
- package/dist/react/provider.js.map +1 -0
- package/dist/react/rail-layout.d.ts +10 -0
- package/dist/react/rail-layout.d.ts.map +1 -0
- package/dist/react/rail-layout.js +32 -0
- package/dist/react/rail-layout.js.map +1 -0
- package/dist/react/rail.d.ts +10 -0
- package/dist/react/rail.d.ts.map +1 -0
- package/dist/react/rail.js +38 -0
- package/dist/react/rail.js.map +1 -0
- package/dist/react/role-badge.d.ts +17 -0
- package/dist/react/role-badge.d.ts.map +1 -0
- package/dist/react/role-badge.js +26 -0
- package/dist/react/role-badge.js.map +1 -0
- package/dist/react/selection-button.d.ts +3 -0
- package/dist/react/selection-button.d.ts.map +1 -0
- package/dist/react/selection-button.js +14 -0
- package/dist/react/selection-button.js.map +1 -0
- package/dist/react/sharing-panel.d.ts +8 -0
- package/dist/react/sharing-panel.d.ts.map +1 -0
- package/dist/react/sharing-panel.js +105 -0
- package/dist/react/sharing-panel.js.map +1 -0
- package/dist/react/slide-navigator.css +164 -0
- package/dist/react/slide-navigator.d.ts +5 -0
- package/dist/react/slide-navigator.d.ts.map +1 -0
- package/dist/react/slide-navigator.js +120 -0
- package/dist/react/slide-navigator.js.map +1 -0
- package/dist/react/stage.css +84 -0
- package/dist/react/stage.d.ts +13 -0
- package/dist/react/stage.d.ts.map +1 -0
- package/dist/react/stage.js +176 -0
- package/dist/react/stage.js.map +1 -0
- package/dist/react/styles.css +374 -0
- package/dist/react/thread-card.d.ts +8 -0
- package/dist/react/thread-card.d.ts.map +1 -0
- package/dist/react/thread-card.js +75 -0
- package/dist/react/thread-card.js.map +1 -0
- package/dist/react/time.d.ts +7 -0
- package/dist/react/time.d.ts.map +1 -0
- package/dist/react/time.js +19 -0
- package/dist/react/time.js.map +1 -0
- package/dist/react/tokens.css +58 -0
- package/dist/react/use-actions.d.ts +27 -0
- package/dist/react/use-actions.d.ts.map +1 -0
- package/dist/react/use-actions.js +91 -0
- package/dist/react/use-actions.js.map +1 -0
- package/dist/react/use-editing.d.ts +28 -0
- package/dist/react/use-editing.d.ts.map +1 -0
- package/dist/react/use-editing.js +70 -0
- package/dist/react/use-editing.js.map +1 -0
- package/dist/react/use-latest.d.ts +4 -0
- package/dist/react/use-latest.d.ts.map +1 -0
- package/dist/react/use-latest.js +11 -0
- package/dist/react/use-latest.js.map +1 -0
- package/dist/react/use-live.d.ts +58 -0
- package/dist/react/use-live.d.ts.map +1 -0
- package/dist/react/use-live.js +42 -0
- package/dist/react/use-live.js.map +1 -0
- package/dist/react/use-mention-picker.d.ts +18 -0
- package/dist/react/use-mention-picker.d.ts.map +1 -0
- package/dist/react/use-mention-picker.js +66 -0
- package/dist/react/use-mention-picker.js.map +1 -0
- package/dist/react/use-presence-sender.d.ts +4 -0
- package/dist/react/use-presence-sender.d.ts.map +1 -0
- package/dist/react/use-presence-sender.js +27 -0
- package/dist/react/use-presence-sender.js.map +1 -0
- package/dist/react/use-presenting.d.ts +26 -0
- package/dist/react/use-presenting.d.ts.map +1 -0
- package/dist/react/use-presenting.js +118 -0
- package/dist/react/use-presenting.js.map +1 -0
- package/dist/react/use-rail-layout.d.ts +13 -0
- package/dist/react/use-rail-layout.d.ts.map +1 -0
- package/dist/react/use-rail-layout.js +38 -0
- package/dist/react/use-rail-layout.js.map +1 -0
- package/dist/react/use-sharing.d.ts +27 -0
- package/dist/react/use-sharing.d.ts.map +1 -0
- package/dist/react/use-sharing.js +93 -0
- package/dist/react/use-sharing.js.map +1 -0
- package/dist/react/version-history.d.ts +12 -0
- package/dist/react/version-history.d.ts.map +1 -0
- package/dist/react/version-history.js +81 -0
- package/dist/react/version-history.js.map +1 -0
- package/dist/runtime/anchoring.d.ts +17 -0
- package/dist/runtime/anchoring.d.ts.map +1 -0
- package/dist/runtime/anchoring.js +258 -0
- package/dist/runtime/anchoring.js.map +1 -0
- package/dist/runtime/assets.d.ts +6 -0
- package/dist/runtime/assets.js +3 -0
- package/dist/runtime/connection.d.ts +32 -0
- package/dist/runtime/connection.d.ts.map +1 -0
- package/dist/runtime/connection.js +27 -0
- package/dist/runtime/connection.js.map +1 -0
- package/dist/runtime/editing.d.ts +10 -0
- package/dist/runtime/editing.d.ts.map +1 -0
- package/dist/runtime/editing.js +170 -0
- package/dist/runtime/editing.js.map +1 -0
- package/dist/runtime/geometry.d.ts +4 -0
- package/dist/runtime/geometry.d.ts.map +1 -0
- package/dist/runtime/geometry.js +8 -0
- package/dist/runtime/geometry.js.map +1 -0
- package/dist/runtime/highlights.d.ts +2 -0
- package/dist/runtime/highlights.d.ts.map +1 -0
- package/dist/runtime/highlights.js +29 -0
- package/dist/runtime/highlights.js.map +1 -0
- package/dist/runtime/index.d.ts +6 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/layout-handle.d.ts +33 -0
- package/dist/runtime/layout-handle.d.ts.map +1 -0
- package/dist/runtime/layout-handle.js +218 -0
- package/dist/runtime/layout-handle.js.map +1 -0
- package/dist/runtime/layout.d.ts +27 -0
- package/dist/runtime/layout.d.ts.map +1 -0
- package/dist/runtime/layout.js +290 -0
- package/dist/runtime/layout.js.map +1 -0
- package/dist/runtime/presence.d.ts +5 -0
- package/dist/runtime/presence.d.ts.map +1 -0
- package/dist/runtime/presence.js +26 -0
- package/dist/runtime/presence.js.map +1 -0
- package/dist/runtime/runtime.d.ts +31 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.entry.d.ts +9 -0
- package/dist/runtime/runtime.entry.d.ts.map +1 -0
- package/dist/runtime/runtime.entry.js +6 -0
- package/dist/runtime/runtime.entry.js.map +1 -0
- package/dist/runtime/runtime.js +189 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/sandbox/relay.d.ts +2 -0
- package/dist/runtime/sandbox/relay.d.ts.map +1 -0
- package/dist/runtime/sandbox/relay.js +82 -0
- package/dist/runtime/sandbox/relay.js.map +1 -0
- package/dist/runtime/sandbox.entry.d.ts +2 -0
- package/dist/runtime/sandbox.entry.d.ts.map +1 -0
- package/dist/runtime/sandbox.entry.js +3 -0
- package/dist/runtime/sandbox.entry.js.map +1 -0
- package/dist/runtime/shared.d.ts +22 -0
- package/dist/runtime/shared.d.ts.map +1 -0
- package/dist/runtime/shared.js +118 -0
- package/dist/runtime/shared.js.map +1 -0
- package/dist/runtime/slides.d.ts +20 -0
- package/dist/runtime/slides.d.ts.map +1 -0
- package/dist/runtime/slides.js +143 -0
- package/dist/runtime/slides.js.map +1 -0
- package/dist/runtime/source-align.d.ts +12 -0
- package/dist/runtime/source-align.d.ts.map +1 -0
- package/dist/runtime/source-align.js +158 -0
- package/dist/runtime/source-align.js.map +1 -0
- package/dist/runtime/source-attributes.d.ts +34 -0
- package/dist/runtime/source-attributes.d.ts.map +1 -0
- package/dist/runtime/source-attributes.js +51 -0
- package/dist/runtime/source-attributes.js.map +1 -0
- package/dist/runtime/source-copy-origin.d.ts +5 -0
- package/dist/runtime/source-copy-origin.d.ts.map +1 -0
- package/dist/runtime/source-copy-origin.js +28 -0
- package/dist/runtime/source-copy-origin.js.map +1 -0
- package/dist/runtime/source-element-dom-resolve.d.ts +11 -0
- package/dist/runtime/source-element-dom-resolve.d.ts.map +1 -0
- package/dist/runtime/source-element-dom-resolve.js +104 -0
- package/dist/runtime/source-element-dom-resolve.js.map +1 -0
- package/dist/runtime/source-element-dom.d.ts +14 -0
- package/dist/runtime/source-element-dom.d.ts.map +1 -0
- package/dist/runtime/source-element-dom.js +75 -0
- package/dist/runtime/source-element-dom.js.map +1 -0
- package/dist/runtime/source-page.d.ts +32 -0
- package/dist/runtime/source-page.d.ts.map +1 -0
- package/dist/runtime/source-page.js +137 -0
- package/dist/runtime/source-page.js.map +1 -0
- package/dist/runtime/source-patch.d.ts +20 -0
- package/dist/runtime/source-patch.d.ts.map +1 -0
- package/dist/runtime/source-patch.js +94 -0
- package/dist/runtime/source-patch.js.map +1 -0
- package/dist/runtime/source-serialize.d.ts +12 -0
- package/dist/runtime/source-serialize.d.ts.map +1 -0
- package/dist/runtime/source-serialize.js +144 -0
- package/dist/runtime/source-serialize.js.map +1 -0
- package/dist/runtime/source-text-anchor.d.ts +5 -0
- package/dist/runtime/source-text-anchor.d.ts.map +1 -0
- package/dist/runtime/source-text-anchor.js +27 -0
- package/dist/runtime/source-text-anchor.js.map +1 -0
- package/dist/runtime/source-text-dom.d.ts +5 -0
- package/dist/runtime/source-text-dom.d.ts.map +1 -0
- package/dist/runtime/source-text-dom.js +53 -0
- package/dist/runtime/source-text-dom.js.map +1 -0
- package/dist/runtime/source-tokens.d.ts +84 -0
- package/dist/runtime/source-tokens.d.ts.map +1 -0
- package/dist/runtime/source-tokens.js +192 -0
- package/dist/runtime/source-tokens.js.map +1 -0
- package/dist/runtime/source-video-attributes.d.ts +5 -0
- package/dist/runtime/source-video-attributes.d.ts.map +1 -0
- package/dist/runtime/source-video-attributes.js +5 -0
- package/dist/runtime/source-video-attributes.js.map +1 -0
- package/dist/runtime/source-video-controller.d.ts +43 -0
- package/dist/runtime/source-video-controller.d.ts.map +1 -0
- package/dist/runtime/source-video-controller.js +190 -0
- package/dist/runtime/source-video-controller.js.map +1 -0
- package/dist/runtime/source-video-dom.d.ts +3 -0
- package/dist/runtime/source-video-dom.d.ts.map +1 -0
- package/dist/runtime/source-video-dom.js +14 -0
- package/dist/runtime/source-video-dom.js.map +1 -0
- package/dist/runtime/source.d.ts +14 -0
- package/dist/runtime/source.d.ts.map +1 -0
- package/dist/runtime/source.js +13 -0
- package/dist/runtime/source.js.map +1 -0
- package/dist/runtime/state-backend.d.ts +28 -0
- package/dist/runtime/state-backend.d.ts.map +1 -0
- package/dist/runtime/state-backend.js +86 -0
- package/dist/runtime/state-backend.js.map +1 -0
- package/dist/runtime/text-index.d.ts +11 -0
- package/dist/runtime/text-index.d.ts.map +1 -0
- package/dist/runtime/text-index.js +73 -0
- package/dist/runtime/text-index.js.map +1 -0
- package/dist/runtime/theme.d.ts +5 -0
- package/dist/runtime/theme.d.ts.map +1 -0
- package/dist/runtime/theme.js +30 -0
- package/dist/runtime/theme.js.map +1 -0
- package/dist/runtime/viewer.d.ts +5 -0
- package/dist/runtime/viewer.d.ts.map +1 -0
- package/dist/runtime/viewer.entry.d.ts +2 -0
- package/dist/runtime/viewer.entry.d.ts.map +1 -0
- package/dist/runtime/viewer.entry.js +3 -0
- package/dist/runtime/viewer.entry.js.map +1 -0
- package/dist/runtime/viewer.js +62 -0
- package/dist/runtime/viewer.js.map +1 -0
- package/dist/runtime.global.js +142 -0
- package/dist/sandbox.global.js +1 -0
- package/dist/server/adapters/activity.d.ts +4 -0
- package/dist/server/adapters/activity.d.ts.map +1 -0
- package/dist/server/adapters/activity.js +25 -0
- package/dist/server/adapters/activity.js.map +1 -0
- package/dist/server/adapters/kysely/index.d.ts +30 -0
- package/dist/server/adapters/kysely/index.d.ts.map +1 -0
- package/dist/server/adapters/kysely/index.js +31 -0
- package/dist/server/adapters/kysely/index.js.map +1 -0
- package/dist/server/adapters/kysely/schema.d.ts +11 -0
- package/dist/server/adapters/kysely/schema.d.ts.map +1 -0
- package/dist/server/adapters/kysely/schema.js +159 -0
- package/dist/server/adapters/kysely/schema.js.map +1 -0
- package/dist/server/adapters/kysely/sharing.d.ts +5 -0
- package/dist/server/adapters/kysely/sharing.d.ts.map +1 -0
- package/dist/server/adapters/kysely/sharing.js +81 -0
- package/dist/server/adapters/kysely/sharing.js.map +1 -0
- package/dist/server/adapters/kysely/store.d.ts +87 -0
- package/dist/server/adapters/kysely/store.d.ts.map +1 -0
- package/dist/server/adapters/kysely/store.js +328 -0
- package/dist/server/adapters/kysely/store.js.map +1 -0
- package/dist/server/adapters/memory-bus.d.ts +6 -0
- package/dist/server/adapters/memory-bus.d.ts.map +1 -0
- package/dist/server/adapters/memory-bus.js +26 -0
- package/dist/server/adapters/memory-bus.js.map +1 -0
- package/dist/server/adapters/memory-store.d.ts +4 -0
- package/dist/server/adapters/memory-store.d.ts.map +1 -0
- package/dist/server/adapters/memory-store.js +125 -0
- package/dist/server/adapters/memory-store.js.map +1 -0
- package/dist/server/adapters/memory.d.ts +8 -0
- package/dist/server/adapters/memory.d.ts.map +1 -0
- package/dist/server/adapters/memory.js +23 -0
- package/dist/server/adapters/memory.js.map +1 -0
- package/dist/server/adapters/postgres/blobs.d.ts +6 -0
- package/dist/server/adapters/postgres/blobs.d.ts.map +1 -0
- package/dist/server/adapters/postgres/blobs.js +17 -0
- package/dist/server/adapters/postgres/blobs.js.map +1 -0
- package/dist/server/adapters/postgres/bus.d.ts +7 -0
- package/dist/server/adapters/postgres/bus.d.ts.map +1 -0
- package/dist/server/adapters/postgres/bus.js +60 -0
- package/dist/server/adapters/postgres/bus.js.map +1 -0
- package/dist/server/adapters/postgres/client.d.ts +38 -0
- package/dist/server/adapters/postgres/client.d.ts.map +1 -0
- package/dist/server/adapters/postgres/client.js +22 -0
- package/dist/server/adapters/postgres/client.js.map +1 -0
- package/dist/server/adapters/postgres/index.d.ts +29 -0
- package/dist/server/adapters/postgres/index.d.ts.map +1 -0
- package/dist/server/adapters/postgres/index.js +23 -0
- package/dist/server/adapters/postgres/index.js.map +1 -0
- package/dist/server/adapters/postgres/schema.d.ts +10 -0
- package/dist/server/adapters/postgres/schema.d.ts.map +1 -0
- package/dist/server/adapters/postgres/schema.js +111 -0
- package/dist/server/adapters/postgres/schema.js.map +1 -0
- package/dist/server/adapters/postgres/store.d.ts +4 -0
- package/dist/server/adapters/postgres/store.d.ts.map +1 -0
- package/dist/server/adapters/postgres/store.js +189 -0
- package/dist/server/adapters/postgres/store.js.map +1 -0
- package/dist/server/adapters/s3.d.ts +22 -0
- package/dist/server/adapters/s3.d.ts.map +1 -0
- package/dist/server/adapters/s3.js +47 -0
- package/dist/server/adapters/s3.js.map +1 -0
- package/dist/server/adapters/sql-rows.d.ts +26 -0
- package/dist/server/adapters/sql-rows.d.ts.map +1 -0
- package/dist/server/adapters/sql-rows.js +134 -0
- package/dist/server/adapters/sql-rows.js.map +1 -0
- package/dist/server/adapters/sqlite/index.d.ts +9 -0
- package/dist/server/adapters/sqlite/index.d.ts.map +1 -0
- package/dist/server/adapters/sqlite/index.js +30 -0
- package/dist/server/adapters/sqlite/index.js.map +1 -0
- package/dist/server/bin.d.ts +3 -0
- package/dist/server/bin.d.ts.map +1 -0
- package/dist/server/bin.js +7 -0
- package/dist/server/bin.js.map +1 -0
- package/dist/server/cli.d.ts +8 -0
- package/dist/server/cli.d.ts.map +1 -0
- package/dist/server/cli.js +103 -0
- package/dist/server/cli.js.map +1 -0
- package/dist/server/collection-storage.d.ts +55 -0
- package/dist/server/collection-storage.d.ts.map +1 -0
- package/dist/server/collection-storage.js +77 -0
- package/dist/server/collection-storage.js.map +1 -0
- package/dist/server/core/access.d.ts +17 -0
- package/dist/server/core/access.d.ts.map +1 -0
- package/dist/server/core/access.js +61 -0
- package/dist/server/core/access.js.map +1 -0
- package/dist/server/core/artifacts.d.ts +50 -0
- package/dist/server/core/artifacts.d.ts.map +1 -0
- package/dist/server/core/artifacts.js +152 -0
- package/dist/server/core/artifacts.js.map +1 -0
- package/dist/server/core/assets.d.ts +23 -0
- package/dist/server/core/assets.d.ts.map +1 -0
- package/dist/server/core/assets.js +41 -0
- package/dist/server/core/assets.js.map +1 -0
- package/dist/server/core/base64.d.ts +3 -0
- package/dist/server/core/base64.d.ts.map +1 -0
- package/dist/server/core/base64.js +17 -0
- package/dist/server/core/base64.js.map +1 -0
- package/dist/server/core/blobs.d.ts +10 -0
- package/dist/server/core/blobs.d.ts.map +1 -0
- package/dist/server/core/blobs.js +10 -0
- package/dist/server/core/blobs.js.map +1 -0
- package/dist/server/core/errors.d.ts +22 -0
- package/dist/server/core/errors.d.ts.map +1 -0
- package/dist/server/core/errors.js +32 -0
- package/dist/server/core/errors.js.map +1 -0
- package/dist/server/core/export.d.ts +8 -0
- package/dist/server/core/export.d.ts.map +1 -0
- package/dist/server/core/export.js +27 -0
- package/dist/server/core/export.js.map +1 -0
- package/dist/server/core/ids.d.ts +4 -0
- package/dist/server/core/ids.d.ts.map +1 -0
- package/dist/server/core/ids.js +12 -0
- package/dist/server/core/ids.js.map +1 -0
- package/dist/server/core/index.d.ts +36 -0
- package/dist/server/core/index.d.ts.map +1 -0
- package/dist/server/core/index.js +19 -0
- package/dist/server/core/index.js.map +1 -0
- package/dist/server/core/inline-assets.d.ts +6 -0
- package/dist/server/core/inline-assets.d.ts.map +1 -0
- package/dist/server/core/inline-assets.js +43 -0
- package/dist/server/core/inline-assets.js.map +1 -0
- package/dist/server/core/live.d.ts +10 -0
- package/dist/server/core/live.d.ts.map +1 -0
- package/dist/server/core/live.js +73 -0
- package/dist/server/core/live.js.map +1 -0
- package/dist/server/core/source-publication.d.ts +30 -0
- package/dist/server/core/source-publication.d.ts.map +1 -0
- package/dist/server/core/source-publication.js +89 -0
- package/dist/server/core/source-publication.js.map +1 -0
- package/dist/server/core/source.d.ts +16 -0
- package/dist/server/core/source.d.ts.map +1 -0
- package/dist/server/core/source.js +9 -0
- package/dist/server/core/source.js.map +1 -0
- package/dist/server/core/summary.d.ts +12 -0
- package/dist/server/core/summary.d.ts.map +1 -0
- package/dist/server/core/summary.js +40 -0
- package/dist/server/core/summary.js.map +1 -0
- package/dist/server/core/version-reader.d.ts +21 -0
- package/dist/server/core/version-reader.d.ts.map +1 -0
- package/dist/server/core/version-reader.js +49 -0
- package/dist/server/core/version-reader.js.map +1 -0
- package/dist/server/core/views.d.ts +6 -0
- package/dist/server/core/views.d.ts.map +1 -0
- package/dist/server/core/views.js +19 -0
- package/dist/server/core/views.js.map +1 -0
- package/dist/server/hosts.d.ts +13 -0
- package/dist/server/hosts.d.ts.map +1 -0
- package/dist/server/hosts.js +11 -0
- package/dist/server/hosts.js.map +1 -0
- package/dist/server/http/app.d.ts +48 -0
- package/dist/server/http/app.d.ts.map +1 -0
- package/dist/server/http/app.js +82 -0
- package/dist/server/http/app.js.map +1 -0
- package/dist/server/http/body.d.ts +5 -0
- package/dist/server/http/body.d.ts.map +1 -0
- package/dist/server/http/body.js +9 -0
- package/dist/server/http/body.js.map +1 -0
- package/dist/server/http/gates.d.ts +26 -0
- package/dist/server/http/gates.d.ts.map +1 -0
- package/dist/server/http/gates.js +43 -0
- package/dist/server/http/gates.js.map +1 -0
- package/dist/server/http/routes/artifacts.d.ts +5 -0
- package/dist/server/http/routes/artifacts.d.ts.map +1 -0
- package/dist/server/http/routes/artifacts.js +75 -0
- package/dist/server/http/routes/artifacts.js.map +1 -0
- package/dist/server/http/routes/events.d.ts +5 -0
- package/dist/server/http/routes/events.d.ts.map +1 -0
- package/dist/server/http/routes/events.js +26 -0
- package/dist/server/http/routes/events.js.map +1 -0
- package/dist/server/http/routes/mcp.d.ts +17 -0
- package/dist/server/http/routes/mcp.d.ts.map +1 -0
- package/dist/server/http/routes/mcp.js +37 -0
- package/dist/server/http/routes/mcp.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +5 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/kit/broadcasts.d.ts +5 -0
- package/dist/server/kit/broadcasts.d.ts.map +1 -0
- package/dist/server/kit/broadcasts.js +10 -0
- package/dist/server/kit/broadcasts.js.map +1 -0
- package/dist/server/kit/events.d.ts +97 -0
- package/dist/server/kit/events.d.ts.map +1 -0
- package/dist/server/kit/events.js +28 -0
- package/dist/server/kit/events.js.map +1 -0
- package/dist/server/kit/observe.d.ts +20 -0
- package/dist/server/kit/observe.d.ts.map +1 -0
- package/dist/server/kit/observe.js +24 -0
- package/dist/server/kit/observe.js.map +1 -0
- package/dist/server/kit/plugin.d.ts +34 -0
- package/dist/server/kit/plugin.d.ts.map +1 -0
- package/dist/server/kit/plugin.js +4 -0
- package/dist/server/kit/plugin.js.map +1 -0
- package/dist/server/kit/tool.d.ts +60 -0
- package/dist/server/kit/tool.d.ts.map +1 -0
- package/dist/server/kit/tool.js +65 -0
- package/dist/server/kit/tool.js.map +1 -0
- package/dist/server/kit/wire.d.ts +9 -0
- package/dist/server/kit/wire.d.ts.map +1 -0
- package/dist/server/kit/wire.js +14 -0
- package/dist/server/kit/wire.js.map +1 -0
- package/dist/server/kit.d.ts +25 -0
- package/dist/server/kit.d.ts.map +1 -0
- package/dist/server/kit.js +18 -0
- package/dist/server/kit.js.map +1 -0
- package/dist/server/mcp/result.d.ts +5 -0
- package/dist/server/mcp/result.d.ts.map +1 -0
- package/dist/server/mcp/result.js +25 -0
- package/dist/server/mcp/result.js.map +1 -0
- package/dist/server/mcp/schema.d.ts +7 -0
- package/dist/server/mcp/schema.d.ts.map +1 -0
- package/dist/server/mcp/schema.js +27 -0
- package/dist/server/mcp/schema.js.map +1 -0
- package/dist/server/mcp/tools.d.ts +35 -0
- package/dist/server/mcp/tools.d.ts.map +1 -0
- package/dist/server/mcp/tools.js +72 -0
- package/dist/server/mcp/tools.js.map +1 -0
- package/dist/server/mcp/viewer.d.ts +17 -0
- package/dist/server/mcp/viewer.d.ts.map +1 -0
- package/dist/server/mcp/viewer.js +47 -0
- package/dist/server/mcp/viewer.js.map +1 -0
- package/dist/server/plugins/comments/index.d.ts +8 -0
- package/dist/server/plugins/comments/index.d.ts.map +1 -0
- package/dist/server/plugins/comments/index.js +79 -0
- package/dist/server/plugins/comments/index.js.map +1 -0
- package/dist/server/plugins/comments/routes.d.ts +6 -0
- package/dist/server/plugins/comments/routes.d.ts.map +1 -0
- package/dist/server/plugins/comments/routes.js +34 -0
- package/dist/server/plugins/comments/routes.js.map +1 -0
- package/dist/server/plugins/comments/service.d.ts +20 -0
- package/dist/server/plugins/comments/service.d.ts.map +1 -0
- package/dist/server/plugins/comments/service.js +66 -0
- package/dist/server/plugins/comments/service.js.map +1 -0
- package/dist/server/plugins/components/catalog.d.ts +15 -0
- package/dist/server/plugins/components/catalog.d.ts.map +1 -0
- package/dist/server/plugins/components/catalog.js +39 -0
- package/dist/server/plugins/components/catalog.js.map +1 -0
- package/dist/server/plugins/components/index.d.ts +21 -0
- package/dist/server/plugins/components/index.d.ts.map +1 -0
- package/dist/server/plugins/components/index.js +35 -0
- package/dist/server/plugins/components/index.js.map +1 -0
- package/dist/server/plugins/components/tags.d.ts +9 -0
- package/dist/server/plugins/components/tags.d.ts.map +1 -0
- package/dist/server/plugins/components/tags.js +22 -0
- package/dist/server/plugins/components/tags.js.map +1 -0
- package/dist/server/plugins/editing/apply.d.ts +9 -0
- package/dist/server/plugins/editing/apply.d.ts.map +1 -0
- package/dist/server/plugins/editing/apply.js +30 -0
- package/dist/server/plugins/editing/apply.js.map +1 -0
- package/dist/server/plugins/editing/index.d.ts +8 -0
- package/dist/server/plugins/editing/index.d.ts.map +1 -0
- package/dist/server/plugins/editing/index.js +48 -0
- package/dist/server/plugins/editing/index.js.map +1 -0
- package/dist/server/plugins/editing/layout.d.ts +4 -0
- package/dist/server/plugins/editing/layout.d.ts.map +1 -0
- package/dist/server/plugins/editing/layout.js +29 -0
- package/dist/server/plugins/editing/layout.js.map +1 -0
- package/dist/server/plugins/editing/source-text.d.ts +10 -0
- package/dist/server/plugins/editing/source-text.d.ts.map +1 -0
- package/dist/server/plugins/editing/source-text.js +10 -0
- package/dist/server/plugins/editing/source-text.js.map +1 -0
- package/dist/server/plugins/editing/source.d.ts +18 -0
- package/dist/server/plugins/editing/source.d.ts.map +1 -0
- package/dist/server/plugins/editing/source.js +15 -0
- package/dist/server/plugins/editing/source.js.map +1 -0
- package/dist/server/plugins/index.d.ts +25 -0
- package/dist/server/plugins/index.d.ts.map +1 -0
- package/dist/server/plugins/index.js +20 -0
- package/dist/server/plugins/index.js.map +1 -0
- package/dist/server/plugins/mcp-auth.d.ts +12 -0
- package/dist/server/plugins/mcp-auth.d.ts.map +1 -0
- package/dist/server/plugins/mcp-auth.js +27 -0
- package/dist/server/plugins/mcp-auth.js.map +1 -0
- package/dist/server/plugins/mentions.d.ts +10 -0
- package/dist/server/plugins/mentions.d.ts.map +1 -0
- package/dist/server/plugins/mentions.js +28 -0
- package/dist/server/plugins/mentions.js.map +1 -0
- package/dist/server/plugins/moderation.d.ts +17 -0
- package/dist/server/plugins/moderation.d.ts.map +1 -0
- package/dist/server/plugins/moderation.js +17 -0
- package/dist/server/plugins/moderation.js.map +1 -0
- package/dist/server/plugins/notifications.d.ts +22 -0
- package/dist/server/plugins/notifications.d.ts.map +1 -0
- package/dist/server/plugins/notifications.js +43 -0
- package/dist/server/plugins/notifications.js.map +1 -0
- package/dist/server/plugins/presence.d.ts +3 -0
- package/dist/server/plugins/presence.d.ts.map +1 -0
- package/dist/server/plugins/presence.js +23 -0
- package/dist/server/plugins/presence.js.map +1 -0
- package/dist/server/plugins/rate-limit.d.ts +18 -0
- package/dist/server/plugins/rate-limit.d.ts.map +1 -0
- package/dist/server/plugins/rate-limit.js +43 -0
- package/dist/server/plugins/rate-limit.js.map +1 -0
- package/dist/server/plugins/state/index.d.ts +10 -0
- package/dist/server/plugins/state/index.d.ts.map +1 -0
- package/dist/server/plugins/state/index.js +66 -0
- package/dist/server/plugins/state/index.js.map +1 -0
- package/dist/server/plugins/state/service.d.ts +21 -0
- package/dist/server/plugins/state/service.d.ts.map +1 -0
- package/dist/server/plugins/state/service.js +65 -0
- package/dist/server/plugins/state/service.js.map +1 -0
- package/dist/server/plugins/webhook.d.ts +17 -0
- package/dist/server/plugins/webhook.d.ts.map +1 -0
- package/dist/server/plugins/webhook.js +54 -0
- package/dist/server/plugins/webhook.js.map +1 -0
- package/dist/server/ports.d.ts +214 -0
- package/dist/server/ports.d.ts.map +1 -0
- package/dist/server/ports.js +22 -0
- package/dist/server/ports.js.map +1 -0
- package/dist/server/sandbox/assets.d.ts +13 -0
- package/dist/server/sandbox/assets.d.ts.map +1 -0
- package/dist/server/sandbox/assets.js +8 -0
- package/dist/server/sandbox/assets.js.map +1 -0
- package/dist/server/sandbox/csp.d.ts +5 -0
- package/dist/server/sandbox/csp.d.ts.map +1 -0
- package/dist/server/sandbox/csp.js +29 -0
- package/dist/server/sandbox/csp.js.map +1 -0
- package/dist/server/sandbox/inject.d.ts +9 -0
- package/dist/server/sandbox/inject.d.ts.map +1 -0
- package/dist/server/sandbox/inject.js +42 -0
- package/dist/server/sandbox/inject.js.map +1 -0
- package/dist/server/sandbox/server.d.ts +17 -0
- package/dist/server/sandbox/server.d.ts.map +1 -0
- package/dist/server/sandbox/server.js +63 -0
- package/dist/server/sandbox/server.js.map +1 -0
- package/dist/server/sharing/index.d.ts +41 -0
- package/dist/server/sharing/index.d.ts.map +1 -0
- package/dist/server/sharing/index.js +150 -0
- package/dist/server/sharing/index.js.map +1 -0
- package/dist/server/sharing/postgres.d.ts +13 -0
- package/dist/server/sharing/postgres.d.ts.map +1 -0
- package/dist/server/sharing/postgres.js +87 -0
- package/dist/server/sharing/postgres.js.map +1 -0
- package/dist/server/sharing/store.d.ts +23 -0
- package/dist/server/sharing/store.d.ts.map +1 -0
- package/dist/server/sharing/store.js +38 -0
- package/dist/server/sharing/store.js.map +1 -0
- package/dist/server/source.d.ts +8 -0
- package/dist/server/source.d.ts.map +1 -0
- package/dist/server/source.js +6 -0
- package/dist/server/source.js.map +1 -0
- package/dist/server/testing.d.ts +17 -0
- package/dist/server/testing.d.ts.map +1 -0
- package/dist/server/testing.js +287 -0
- package/dist/server/testing.js.map +1 -0
- package/dist/viewer.global.js +150 -0
- package/package.json +204 -3
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { busEventSchema } from "../../ports.js";
|
|
2
|
+
/** NOTIFY carries at most 8000 bytes; envelopes are far smaller, but never risk it. */
|
|
3
|
+
const MAX_PAYLOAD = 7_900;
|
|
4
|
+
/** Live fan-out across every instance through Postgres LISTEN/NOTIFY: one channel, one
|
|
5
|
+
* listener per instance, local dispatch by artifact. Each envelope is parsed once and the
|
|
6
|
+
* same object reaches every local subscriber, so hydration is shared too. */
|
|
7
|
+
export const postgresBusOn = (sql, t, listen, onError = () => { }) => {
|
|
8
|
+
const channels = new Map();
|
|
9
|
+
const dispatch = (payload) => {
|
|
10
|
+
let raw;
|
|
11
|
+
try {
|
|
12
|
+
raw = JSON.parse(payload);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
onError(error);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const parsed = busEventSchema.safeParse(raw);
|
|
19
|
+
if (!parsed.success) {
|
|
20
|
+
onError(new Error(`Ignored a live event that does not parse: ${parsed.error.message}`));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const event = parsed.data;
|
|
24
|
+
for (const listener of channels.get(event.artifactId) ?? [])
|
|
25
|
+
listener(event);
|
|
26
|
+
};
|
|
27
|
+
// LISTEN starts on first use, so building the kit opens no connection. A failed attempt is
|
|
28
|
+
// forgotten, and the next publish or subscribe tries again.
|
|
29
|
+
let listening;
|
|
30
|
+
const ensureListening = () => {
|
|
31
|
+
listening ??= listen(t.channel, dispatch).catch((error) => {
|
|
32
|
+
listening = undefined;
|
|
33
|
+
throw error;
|
|
34
|
+
});
|
|
35
|
+
return listening;
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
publish: async (event) => {
|
|
39
|
+
const payload = JSON.stringify(event);
|
|
40
|
+
if (payload.length > MAX_PAYLOAD)
|
|
41
|
+
throw new Error("Live event is too large for NOTIFY.");
|
|
42
|
+
await ensureListening();
|
|
43
|
+
await sql.query("SELECT pg_notify($1, $2)", [t.channel, payload]);
|
|
44
|
+
},
|
|
45
|
+
subscribe: (artifactId, listener) => {
|
|
46
|
+
// A subscriber cannot wait. A failed LISTEN goes to onError now, and the next publish
|
|
47
|
+
// or subscribe tries again.
|
|
48
|
+
ensureListening().catch(onError);
|
|
49
|
+
const listeners = channels.get(artifactId) ?? new Set();
|
|
50
|
+
listeners.add(listener);
|
|
51
|
+
channels.set(artifactId, listeners);
|
|
52
|
+
return () => {
|
|
53
|
+
listeners.delete(listener);
|
|
54
|
+
if (listeners.size === 0)
|
|
55
|
+
channels.delete(artifactId);
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bus.js","sourceRoot":"","sources":["../../../../src/server/adapters/postgres/bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAGxE,uFAAuF;AACvF,MAAM,WAAW,GAAG,KAAK,CAAA;AAEzB;;8EAE8E;AAC9E,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,GAAc,EACd,CAAS,EACT,MAAiB,EACjB,OAAO,GAA6B,GAAG,EAAE,GAAE,CAAC,EACvC,EAAE;IACP,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0C,CAAA;IAClE,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,EAAE;QACnC,IAAI,GAAY,CAAA;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,CAAA;YACd,OAAM;QACR,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,KAAK,CAAC,6CAA6C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;YACvF,OAAM;QACR,CAAC;QACD,MAAM,KAAK,GAAa,MAAM,CAAC,IAAI,CAAA;QACnC,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;YAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC9E,CAAC,CAAA;IACD,2FAA2F;IAC3F,4DAA4D;IAC5D,IAAI,SAAuC,CAAA;IAC3C,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACjE,SAAS,GAAG,SAAS,CAAA;YACrB,MAAM,KAAK,CAAA;QACb,CAAC,CAAC,CAAA;QACF,OAAO,SAAS,CAAA;IAClB,CAAC,CAAA;IAED,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACvB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACrC,IAAI,OAAO,CAAC,MAAM,GAAG,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;YACxF,MAAM,eAAe,EAAE,CAAA;YACvB,MAAM,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QACnE,CAAC;QACD,SAAS,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;YAClC,sFAAsF;YACtF,4BAA4B;YAC5B,eAAe,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAChC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,GAAG,EAAE,CAAA;YACvD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACvB,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;YACnC,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;gBAC1B,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC;oBAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YACvD,CAAC,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** The only thing the Postgres adapter needs from you: run one parameterized statement
|
|
2
|
+
* (`$1`, `$2`, …) and return its rows. Every write the kit makes is a single atomic
|
|
3
|
+
* statement, so no transaction API is required, and HTTP drivers work as well as pools.
|
|
4
|
+
*
|
|
5
|
+
* pg: { query: (text, params) => pool.query(text, params) }
|
|
6
|
+
* postgres.js: { query: async (text, params) => ({ rows: await sql.unsafe(text, params) }) }
|
|
7
|
+
* PGlite: { query: (text, params) => db.query(text, params) }
|
|
8
|
+
* Neon (HTTP): { query: async (text, params) => ({ rows: await neon(url).query(text, params) }) }
|
|
9
|
+
*/
|
|
10
|
+
export interface SqlClient {
|
|
11
|
+
query(text: string, params?: unknown[]): Promise<{
|
|
12
|
+
rows: Record<string, unknown>[];
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
/** Optional: LISTEN for live events across instances. Return a function that stops.
|
|
16
|
+
*
|
|
17
|
+
* postgres.js: (channel, on) => sql.listen(channel, on).then(({ unlisten }) => unlisten)
|
|
18
|
+
* PGlite: (channel, on) => db.listen(channel, on)
|
|
19
|
+
* pg: see the README recipe (a dedicated client with `LISTEN` and `notification`)
|
|
20
|
+
*/
|
|
21
|
+
export type SqlListen = (channel: string, onPayload: (payload: string) => void) => Promise<() => Promise<void> | void>;
|
|
22
|
+
/** Fully qualified table names for a schema and prefix, validated so they are safe to
|
|
23
|
+
* splice into SQL. */
|
|
24
|
+
export declare const tableNames: (schema: string, prefix: string) => {
|
|
25
|
+
artifacts: string;
|
|
26
|
+
versions: string;
|
|
27
|
+
threads: string;
|
|
28
|
+
comments: string;
|
|
29
|
+
states: string;
|
|
30
|
+
activity: string;
|
|
31
|
+
blobs: string;
|
|
32
|
+
migrations: string;
|
|
33
|
+
/** Index names are schema-local, so they are not qualified. */
|
|
34
|
+
index: (name: string) => string;
|
|
35
|
+
channel: string;
|
|
36
|
+
};
|
|
37
|
+
export type Tables = ReturnType<typeof tableNames>;
|
|
38
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/server/adapters/postgres/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC,CAAA;CACtF;AAED;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,CACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KACjC,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;AAIxC;uBACuB;AACvB,eAAO,MAAM,UAAU,WAAY,MAAM,UAAU,MAAM;IAKrD,SAAS;IACT,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,KAAK;IACL,UAAU;IACV,+DAA+D;IAC/D,KAAK,SAAS,MAAM;IACpB,OAAO;CAEV,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const IDENTIFIER = /^[a-z_][a-z0-9_]{0,40}$/;
|
|
2
|
+
/** Fully qualified table names for a schema and prefix, validated so they are safe to
|
|
3
|
+
* splice into SQL. */
|
|
4
|
+
export const tableNames = (schema, prefix) => {
|
|
5
|
+
if (!IDENTIFIER.test(schema) || !(prefix === "" || IDENTIFIER.test(prefix)))
|
|
6
|
+
throw new Error("schema and prefix must be lowercase SQL identifiers");
|
|
7
|
+
const t = (name) => `"${schema}"."${prefix}${name}"`;
|
|
8
|
+
return {
|
|
9
|
+
artifacts: t("artifacts"),
|
|
10
|
+
versions: t("versions"),
|
|
11
|
+
threads: t("threads"),
|
|
12
|
+
comments: t("comments"),
|
|
13
|
+
states: t("states"),
|
|
14
|
+
activity: t("activity"),
|
|
15
|
+
blobs: t("blobs"),
|
|
16
|
+
migrations: t("migrations"),
|
|
17
|
+
/** Index names are schema-local, so they are not qualified. */
|
|
18
|
+
index: (name) => `"${prefix}${name}"`,
|
|
19
|
+
channel: `${prefix}events`,
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/server/adapters/postgres/client.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,GAAG,yBAAyB,CAAA;AAE5C;uBACuB;AACvB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE;IAC3D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACxE,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,CAAA;IAC5D,OAAO;QACL,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC;QACzB,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC;QACvB,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC;QACrB,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC;QACvB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC;QACnB,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC;QACvB,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC;QACjB,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC;QAC3B,+DAA+D;QAC/D,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,MAAM,GAAG,IAAI,GAAG;QAC7C,OAAO,EAAE,GAAG,MAAM,QAAQ;KAC3B,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { WiredBackend } from "../../ports.js";
|
|
2
|
+
import { type SqlClient, type SqlListen } from "./client.js";
|
|
3
|
+
export type { SqlClient, SqlListen };
|
|
4
|
+
export interface PostgresOptions {
|
|
5
|
+
/** Runs one parameterized statement. See `SqlClient` for one-line recipes per driver. */
|
|
6
|
+
sql: SqlClient;
|
|
7
|
+
/** LISTEN for live events across instances. Without it, live events stay in-process. */
|
|
8
|
+
listen?: SqlListen;
|
|
9
|
+
/** Defaults to "public". */
|
|
10
|
+
schema?: string;
|
|
11
|
+
/** Prefix for every table, so the kit sits beside your own. Defaults to "oa_". */
|
|
12
|
+
prefix?: string;
|
|
13
|
+
/** Live-event failures with no caller to answer to: a failed LISTEN, a payload that does
|
|
14
|
+
* not parse. Pass the same handler as the server's `onError`. */
|
|
15
|
+
onError?: (error: unknown) => void;
|
|
16
|
+
}
|
|
17
|
+
/** Artifacts, files, and live events on the Postgres you already run. No other service and
|
|
18
|
+
* no driver dependency: bring any client with a `query` function. */
|
|
19
|
+
export declare const postgres: (options: PostgresOptions) => WiredBackend & {
|
|
20
|
+
/** Create or upgrade the tables atomically. Run during deployment. */
|
|
21
|
+
migrate: () => Promise<void>;
|
|
22
|
+
/** Read-only schema gate for application startup. */
|
|
23
|
+
assertMigrated: () => Promise<void>;
|
|
24
|
+
/** Atomic migration SQL, including the ledger, for a host deployment runner. */
|
|
25
|
+
migrationSql: () => string;
|
|
26
|
+
/** The schema as SQL, if you run your own migration tool instead. */
|
|
27
|
+
schemaSql: () => string;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/adapters/postgres/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAIlD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAc,MAAM,aAAa,CAAA;AAIxE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;AAEpC,MAAM,WAAW,eAAe;IAC9B,yFAAyF;IACzF,GAAG,EAAE,SAAS,CAAA;IACd,wFAAwF;IACxF,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;sEACkE;IAClE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnC;AAED;sEACsE;AACtE,eAAO,MAAM,QAAQ,YACV,eAAe,KACvB,YAAY,GAAG;IAChB,sEAAsE;IACtE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,qDAAqD;IACrD,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,gFAAgF;IAChF,YAAY,EAAE,MAAM,MAAM,CAAA;IAC1B,qEAAqE;IACrE,SAAS,EAAE,MAAM,MAAM,CAAA;CAcxB,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { memoryBus } from "../memory-bus.js";
|
|
2
|
+
import { postgresBlobsOn } from "./blobs.js";
|
|
3
|
+
import { postgresBusOn } from "./bus.js";
|
|
4
|
+
import { tableNames } from "./client.js";
|
|
5
|
+
import { assertMigrated, migrate, migrationSql } from "./schema.js";
|
|
6
|
+
import { postgresStoreOn } from "./store.js";
|
|
7
|
+
/** Artifacts, files, and live events on the Postgres you already run. No other service and
|
|
8
|
+
* no driver dependency: bring any client with a `query` function. */
|
|
9
|
+
export const postgres = (options) => {
|
|
10
|
+
const tables = tableNames(options.schema ?? "public", options.prefix ?? "oa_");
|
|
11
|
+
return {
|
|
12
|
+
store: postgresStoreOn(options.sql, tables),
|
|
13
|
+
blobs: postgresBlobsOn(options.sql, tables),
|
|
14
|
+
bus: options.listen
|
|
15
|
+
? postgresBusOn(options.sql, tables, options.listen, options.onError)
|
|
16
|
+
: memoryBus(),
|
|
17
|
+
migrate: () => migrate(options.sql, tables),
|
|
18
|
+
assertMigrated: () => assertMigrated(options.sql, tables),
|
|
19
|
+
migrationSql: () => migrationSql(tables),
|
|
20
|
+
schemaSql: () => migrationSql(tables),
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/adapters/postgres/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAkC,UAAU,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAkB5C;sEACsE;AACtE,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,OAAwB,EAUxB,EAAE;IACF,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,IAAI,QAAQ,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAA;IAC9E,OAAO;QACL,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;QAC3C,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;QAC3C,GAAG,EAAE,OAAO,CAAC,MAAM;YACjB,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;YACrE,CAAC,CAAC,SAAS,EAAE;QACf,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;QAC3C,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;QACzD,YAAY,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;QACxC,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;KACtC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SqlClient, Tables } from "./client.js";
|
|
2
|
+
/** One atomic migration statement. The transaction lock serializes all instances, including
|
|
3
|
+
* HTTP clients that cannot pin a connection across multiple calls. DDL and ledger commit
|
|
4
|
+
* together. A failed statement leaves the previous schema and ledger unchanged. */
|
|
5
|
+
export declare const migrationSql: (t: Tables) => string;
|
|
6
|
+
/** Run during deployment, never from an artifact request. */
|
|
7
|
+
export declare const migrate: (sql: SqlClient, t: Tables) => Promise<void>;
|
|
8
|
+
/** Read-only startup gate. An incomplete or newer schema needs an explicit deployment. */
|
|
9
|
+
export declare const assertMigrated: (sql: SqlClient, t: Tables) => Promise<void>;
|
|
10
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/server/adapters/postgres/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAgFpD;;oFAEoF;AACpF,eAAO,MAAM,YAAY,MAAO,MAAM,WAoBrC,CAAA;AAED,6DAA6D;AAC7D,eAAO,MAAM,OAAO,QAAe,SAAS,KAAK,MAAM,kBAEtD,CAAA;AAED,0FAA0F;AAC1F,eAAO,MAAM,cAAc,QAAe,SAAS,KAAK,MAAM,kBAK7D,CAAA"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/** Forward-only migrations. Append; never edit. Each is a list of single statements so any
|
|
2
|
+
* driver can run them, and the migration runner commits them under one transaction lock. */
|
|
3
|
+
const migrations = (t) => [
|
|
4
|
+
[
|
|
5
|
+
`CREATE TABLE IF NOT EXISTS ${t.artifacts} (
|
|
6
|
+
id text PRIMARY KEY,
|
|
7
|
+
title text NOT NULL,
|
|
8
|
+
current_version integer NOT NULL,
|
|
9
|
+
created_at text NOT NULL,
|
|
10
|
+
updated_at text NOT NULL,
|
|
11
|
+
created_by jsonb NOT NULL
|
|
12
|
+
)`,
|
|
13
|
+
`CREATE TABLE IF NOT EXISTS ${t.versions} (
|
|
14
|
+
artifact_id text NOT NULL REFERENCES ${t.artifacts}(id) ON DELETE CASCADE,
|
|
15
|
+
n integer NOT NULL,
|
|
16
|
+
content_hash text NOT NULL,
|
|
17
|
+
size integer NOT NULL,
|
|
18
|
+
csp jsonb NOT NULL,
|
|
19
|
+
created_at text NOT NULL,
|
|
20
|
+
created_by jsonb NOT NULL,
|
|
21
|
+
PRIMARY KEY (artifact_id, n)
|
|
22
|
+
)`,
|
|
23
|
+
`CREATE TABLE IF NOT EXISTS ${t.threads} (
|
|
24
|
+
id text PRIMARY KEY,
|
|
25
|
+
artifact_id text NOT NULL REFERENCES ${t.artifacts}(id) ON DELETE CASCADE,
|
|
26
|
+
state text NOT NULL
|
|
27
|
+
)`,
|
|
28
|
+
`CREATE TABLE IF NOT EXISTS ${t.comments} (
|
|
29
|
+
id text PRIMARY KEY,
|
|
30
|
+
artifact_id text NOT NULL REFERENCES ${t.artifacts}(id) ON DELETE CASCADE,
|
|
31
|
+
thread_id text NOT NULL REFERENCES ${t.threads}(id) ON DELETE CASCADE,
|
|
32
|
+
version integer NOT NULL,
|
|
33
|
+
quote jsonb,
|
|
34
|
+
body text NOT NULL,
|
|
35
|
+
author jsonb NOT NULL,
|
|
36
|
+
created_at text NOT NULL
|
|
37
|
+
)`,
|
|
38
|
+
`CREATE INDEX IF NOT EXISTS ${t.index("comments_by_artifact")} ON ${t.comments} (artifact_id, created_at)`,
|
|
39
|
+
`CREATE TABLE IF NOT EXISTS ${t.states} (
|
|
40
|
+
artifact_id text NOT NULL REFERENCES ${t.artifacts}(id) ON DELETE CASCADE,
|
|
41
|
+
key text NOT NULL,
|
|
42
|
+
items jsonb NOT NULL,
|
|
43
|
+
version integer NOT NULL,
|
|
44
|
+
PRIMARY KEY (artifact_id, key)
|
|
45
|
+
)`,
|
|
46
|
+
`CREATE TABLE IF NOT EXISTS ${t.activity} (
|
|
47
|
+
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
48
|
+
artifact_id text NOT NULL REFERENCES ${t.artifacts}(id) ON DELETE CASCADE,
|
|
49
|
+
key text NOT NULL,
|
|
50
|
+
action text NOT NULL,
|
|
51
|
+
item_id text NOT NULL,
|
|
52
|
+
version integer NOT NULL,
|
|
53
|
+
actor jsonb NOT NULL,
|
|
54
|
+
at text NOT NULL
|
|
55
|
+
)`,
|
|
56
|
+
`CREATE INDEX IF NOT EXISTS ${t.index("activity_by_key")} ON ${t.activity} (artifact_id, key, id DESC)`,
|
|
57
|
+
`CREATE TABLE IF NOT EXISTS ${t.blobs} (
|
|
58
|
+
key text PRIMARY KEY,
|
|
59
|
+
type text NOT NULL,
|
|
60
|
+
bytes bytea NOT NULL
|
|
61
|
+
)`,
|
|
62
|
+
],
|
|
63
|
+
[
|
|
64
|
+
`CREATE INDEX IF NOT EXISTS ${t.index("artifacts_by_recency")} ON ${t.artifacts} (updated_at DESC, id DESC)`,
|
|
65
|
+
],
|
|
66
|
+
[
|
|
67
|
+
`ALTER TABLE ${t.artifacts} ADD COLUMN IF NOT EXISTS space text NOT NULL DEFAULT ''`,
|
|
68
|
+
`CREATE INDEX IF NOT EXISTS ${t.index("artifacts_by_space")} ON ${t.artifacts} (space, updated_at DESC, id DESC)`,
|
|
69
|
+
],
|
|
70
|
+
[
|
|
71
|
+
`ALTER TABLE ${t.artifacts} ADD COLUMN IF NOT EXISTS summary text NOT NULL DEFAULT ''`,
|
|
72
|
+
`ALTER TABLE ${t.artifacts} ADD COLUMN IF NOT EXISTS updated_by jsonb`,
|
|
73
|
+
`CREATE INDEX IF NOT EXISTS ${t.index("threads_by_artifact")} ON ${t.threads} (artifact_id)`,
|
|
74
|
+
],
|
|
75
|
+
[`ALTER TABLE ${t.artifacts} ADD COLUMN IF NOT EXISTS kind text NOT NULL DEFAULT 'page'`],
|
|
76
|
+
[`ALTER TABLE ${t.versions} ADD COLUMN IF NOT EXISTS source_info jsonb`],
|
|
77
|
+
];
|
|
78
|
+
/** One atomic migration statement. The transaction lock serializes all instances, including
|
|
79
|
+
* HTTP clients that cannot pin a connection across multiple calls. DDL and ledger commit
|
|
80
|
+
* together. A failed statement leaves the previous schema and ledger unchanged. */
|
|
81
|
+
export const migrationSql = (t) => {
|
|
82
|
+
const steps = migrations(t).map((statements, index) => `
|
|
83
|
+
IF NOT EXISTS (SELECT 1 FROM ${t.migrations} WHERE version = ${index + 1}) THEN
|
|
84
|
+
${statements.map((statement) => `${statement};`).join("\n ")}
|
|
85
|
+
INSERT INTO ${t.migrations} (version, applied_at)
|
|
86
|
+
VALUES (${index + 1}, to_char(clock_timestamp() AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'));
|
|
87
|
+
END IF;`);
|
|
88
|
+
return `DO $oa_migrate$
|
|
89
|
+
BEGIN
|
|
90
|
+
PERFORM set_config('lock_timeout', '5s', true);
|
|
91
|
+
PERFORM pg_advisory_xact_lock(hashtextextended('${t.migrations}', 0));
|
|
92
|
+
CREATE TABLE IF NOT EXISTS ${t.migrations} (version integer PRIMARY KEY, applied_at text NOT NULL);
|
|
93
|
+
IF EXISTS (SELECT 1 FROM ${t.migrations} WHERE version < 1 OR version > ${steps.length}) THEN
|
|
94
|
+
RAISE EXCEPTION 'Artifact migration ledger contains an unsupported version';
|
|
95
|
+
END IF;
|
|
96
|
+
${steps.join("\n")}
|
|
97
|
+
END
|
|
98
|
+
$oa_migrate$;`;
|
|
99
|
+
};
|
|
100
|
+
/** Run during deployment, never from an artifact request. */
|
|
101
|
+
export const migrate = async (sql, t) => {
|
|
102
|
+
await sql.query(migrationSql(t));
|
|
103
|
+
};
|
|
104
|
+
/** Read-only startup gate. An incomplete or newer schema needs an explicit deployment. */
|
|
105
|
+
export const assertMigrated = async (sql, t) => {
|
|
106
|
+
const { rows } = await sql.query(`SELECT version FROM ${t.migrations} ORDER BY version`);
|
|
107
|
+
const expected = migrations(t).length;
|
|
108
|
+
if (rows.length !== expected || rows.some((row, index) => Number(row["version"]) !== index + 1))
|
|
109
|
+
throw new Error("Artifact schema is incompatible. Run artifact migrations before startup.");
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/server/adapters/postgres/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/server/adapters/postgres/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAA0B,MAAM,gBAAgB,CAAA;AAU3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AA8PpD,eAAO,MAAM,eAAe,QAAS,SAAS,KAAK,MAAM,KAAG,aAM1D,CAAA"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import * as z from "zod/mini";
|
|
2
|
+
import { actorSchema } from "../../../protocol/index.js";
|
|
3
|
+
import { stored, toActivity, toArtifact, toComment, toState, toThread, toVersion, } from "../sql-rows.js";
|
|
4
|
+
const json = (value) => JSON.stringify(value);
|
|
5
|
+
const activityCount = z.object({ artifact_id: z.string(), open: z.number(), total: z.number() });
|
|
6
|
+
const activityPerson = z.object({ artifact_id: z.string(), author: actorSchema });
|
|
7
|
+
const VERSION_COLUMNS = "(artifact_id, n, content_hash, size, csp, created_at, created_by, source_info)";
|
|
8
|
+
const versionValues = (v) => [
|
|
9
|
+
v.artifactId,
|
|
10
|
+
v.n,
|
|
11
|
+
v.contentHash,
|
|
12
|
+
v.size,
|
|
13
|
+
json(v.csp),
|
|
14
|
+
v.createdAt,
|
|
15
|
+
json(v.createdBy),
|
|
16
|
+
v.source ? json(v.source) : null,
|
|
17
|
+
];
|
|
18
|
+
const commentValues = (c) => [
|
|
19
|
+
c.id,
|
|
20
|
+
c.artifactId,
|
|
21
|
+
c.threadId,
|
|
22
|
+
c.version,
|
|
23
|
+
c.quote ? json(c.quote) : null,
|
|
24
|
+
c.body,
|
|
25
|
+
json(c.author),
|
|
26
|
+
c.createdAt,
|
|
27
|
+
];
|
|
28
|
+
const artifactQueries = (sql, t) => ({
|
|
29
|
+
// Artifact and first version together, in one statement.
|
|
30
|
+
createArtifact: async (a, v) => {
|
|
31
|
+
await sql.query(`WITH a AS (
|
|
32
|
+
INSERT INTO ${t.artifacts} (id, title, current_version, created_at, updated_at, created_by, space, summary, updated_by, kind)
|
|
33
|
+
VALUES ($1, $2, $3, $4, $5, $6::jsonb, $14, $15, $16::jsonb, $17) RETURNING id)
|
|
34
|
+
INSERT INTO ${t.versions} ${VERSION_COLUMNS}
|
|
35
|
+
SELECT id, $7, $8, $9, $10::jsonb, $11, $12::jsonb, $13::jsonb FROM a`, [
|
|
36
|
+
a.id,
|
|
37
|
+
a.title,
|
|
38
|
+
a.currentVersion,
|
|
39
|
+
a.createdAt,
|
|
40
|
+
a.updatedAt,
|
|
41
|
+
json(a.createdBy),
|
|
42
|
+
...versionValues(v).slice(1),
|
|
43
|
+
a.space,
|
|
44
|
+
a.summary,
|
|
45
|
+
json(a.updatedBy),
|
|
46
|
+
a.kind,
|
|
47
|
+
]);
|
|
48
|
+
},
|
|
49
|
+
getArtifact: async (id) => {
|
|
50
|
+
const { rows } = await sql.query(`SELECT * FROM ${t.artifacts} WHERE id = $1`, [id]);
|
|
51
|
+
return rows[0] ? toArtifact(rows[0]) : null;
|
|
52
|
+
},
|
|
53
|
+
listArtifacts: async ({ space, limit, after, search, createdBy }) => (await sql.query(`SELECT * FROM ${t.artifacts}
|
|
54
|
+
WHERE space = $4 AND ($1::text IS NULL OR (updated_at, id) < ($1::text, $2::text))
|
|
55
|
+
AND ($5::text IS NULL OR strpos(lower(title), lower($5)) > 0 OR strpos(lower(summary), lower($5)) > 0)
|
|
56
|
+
AND ($6::text IS NULL OR created_by->>'id' = $6)
|
|
57
|
+
ORDER BY updated_at DESC, id DESC LIMIT $3`, [
|
|
58
|
+
after?.updatedAt ?? null,
|
|
59
|
+
after?.id ?? null,
|
|
60
|
+
limit,
|
|
61
|
+
space,
|
|
62
|
+
search || null,
|
|
63
|
+
createdBy ?? null,
|
|
64
|
+
])).rows.map(toArtifact),
|
|
65
|
+
// Compare-and-swap on current_version and the insert, in one statement.
|
|
66
|
+
});
|
|
67
|
+
const versionQueries = (sql, t) => ({
|
|
68
|
+
addVersion: async (v, expected, facts) => {
|
|
69
|
+
if (v.n !== expected + 1)
|
|
70
|
+
return null;
|
|
71
|
+
const { rows } = await sql.query(`WITH moved AS (
|
|
72
|
+
UPDATE ${t.artifacts} SET current_version = $2, updated_at = $6, summary = $10, kind = $11, title = COALESCE($12, title), updated_by = $7::jsonb
|
|
73
|
+
WHERE id = $1 AND current_version = $9 RETURNING id)
|
|
74
|
+
INSERT INTO ${t.versions} ${VERSION_COLUMNS}
|
|
75
|
+
SELECT id, $2, $3, $4, $5::jsonb, $6, $7::jsonb, $8::jsonb FROM moved RETURNING n`, [...versionValues(v), expected, facts.summary, facts.kind, facts.title ?? null]);
|
|
76
|
+
return rows.length === 1 ? v : null;
|
|
77
|
+
},
|
|
78
|
+
replaceVersion: async (v, expectedHash, facts) => {
|
|
79
|
+
const { rows } = await sql.query(`WITH current AS (
|
|
80
|
+
SELECT a.id FROM ${t.artifacts} a JOIN ${t.versions} v ON v.artifact_id = a.id AND v.n = a.current_version
|
|
81
|
+
WHERE a.id = $1 AND a.current_version = $2 AND v.content_hash = $9 FOR UPDATE OF a, v),
|
|
82
|
+
saved AS (
|
|
83
|
+
UPDATE ${t.versions} SET content_hash = $3, size = $4, csp = $5::jsonb, created_at = $6, created_by = $7::jsonb, source_info = $8::jsonb
|
|
84
|
+
WHERE artifact_id IN (SELECT id FROM current) AND n = $2 RETURNING artifact_id),
|
|
85
|
+
moved AS (
|
|
86
|
+
UPDATE ${t.artifacts} SET updated_at = $6, summary = $10, kind = $11, title = COALESCE($12, title), updated_by = $7::jsonb
|
|
87
|
+
WHERE id IN (SELECT artifact_id FROM saved) RETURNING id)
|
|
88
|
+
SELECT id FROM moved`, [...versionValues(v), expectedHash, facts.summary, facts.kind, facts.title ?? null]);
|
|
89
|
+
return rows.length === 1 ? v : null;
|
|
90
|
+
},
|
|
91
|
+
getVersion: async (artifactId, n) => {
|
|
92
|
+
const { rows } = await sql.query(`SELECT * FROM ${t.versions} WHERE artifact_id = $1 AND n = $2`, [artifactId, n]);
|
|
93
|
+
return rows[0] ? toVersion(rows[0]) : null;
|
|
94
|
+
},
|
|
95
|
+
listVersions: async (artifactId) => (await sql.query(`SELECT * FROM ${t.versions} WHERE artifact_id = $1 ORDER BY n`, [
|
|
96
|
+
artifactId,
|
|
97
|
+
])).rows.map(toVersion),
|
|
98
|
+
});
|
|
99
|
+
const insertComment = (t) => `INSERT INTO ${t.comments} (id, artifact_id, thread_id, version, quote, body, author, created_at)
|
|
100
|
+
VALUES ($1, $2, $3, $4, $5::jsonb, $6, $7::jsonb, $8)`;
|
|
101
|
+
const lifecycleQueries = (sql, t) => ({
|
|
102
|
+
renameArtifact: async (id, title) => (await sql.query(`UPDATE ${t.artifacts} SET title = $2 WHERE id = $1 RETURNING id`, [
|
|
103
|
+
id,
|
|
104
|
+
title,
|
|
105
|
+
])).rows.length === 1,
|
|
106
|
+
// Foreign keys cascade to versions, threads, comments, state and activity.
|
|
107
|
+
deleteArtifact: async (id) => (await sql.query(`DELETE FROM ${t.artifacts} WHERE id = $1 RETURNING id`, [id])).rows
|
|
108
|
+
.length === 1,
|
|
109
|
+
});
|
|
110
|
+
const threadQueries = (sql, t) => ({
|
|
111
|
+
createThread: async (thread, first) => {
|
|
112
|
+
await sql.query(`WITH t AS (INSERT INTO ${t.threads} (id, artifact_id, state) VALUES ($3, $2, $9) RETURNING id)
|
|
113
|
+
INSERT INTO ${t.comments} (id, artifact_id, thread_id, version, quote, body, author, created_at)
|
|
114
|
+
SELECT $1, $2, t.id, $4, $5::jsonb, $6, $7::jsonb, $8 FROM t`, [...commentValues({ ...first, threadId: thread.id }), thread.state]);
|
|
115
|
+
},
|
|
116
|
+
addComment: async (comment) => {
|
|
117
|
+
await sql.query(insertComment(t), commentValues(comment));
|
|
118
|
+
},
|
|
119
|
+
setThreadState: async (artifactId, threadId, state) => {
|
|
120
|
+
const { rows } = await sql.query(`UPDATE ${t.threads} SET state = $3 WHERE id = $2 AND artifact_id = $1 RETURNING id`, [artifactId, threadId, state]);
|
|
121
|
+
return rows.length === 1;
|
|
122
|
+
},
|
|
123
|
+
listThreads: async (artifactId) => {
|
|
124
|
+
const [threads, comments] = await Promise.all([
|
|
125
|
+
sql.query(`SELECT * FROM ${t.threads} WHERE artifact_id = $1`, [artifactId]),
|
|
126
|
+
sql.query(`SELECT * FROM ${t.comments} WHERE artifact_id = $1 ORDER BY created_at`, [
|
|
127
|
+
artifactId,
|
|
128
|
+
]),
|
|
129
|
+
]);
|
|
130
|
+
return { threads: threads.rows.map(toThread), comments: comments.rows.map(toComment) };
|
|
131
|
+
},
|
|
132
|
+
// Counts per artifact, and each artifact's five latest distinct commenters.
|
|
133
|
+
threadActivity: async (artifactIds) => {
|
|
134
|
+
if (artifactIds.length === 0)
|
|
135
|
+
return [];
|
|
136
|
+
const ids = [...artifactIds];
|
|
137
|
+
const [counts, people] = await Promise.all([
|
|
138
|
+
sql.query(`SELECT artifact_id, count(*) FILTER (WHERE state = 'open')::int AS open, count(*)::int AS total
|
|
139
|
+
FROM ${t.threads} WHERE artifact_id = ANY($1::text[]) GROUP BY artifact_id`, [ids]),
|
|
140
|
+
sql.query(`SELECT artifact_id, author FROM (
|
|
141
|
+
SELECT artifact_id, author, row_number() OVER (PARTITION BY artifact_id ORDER BY latest DESC) AS rank
|
|
142
|
+
FROM (SELECT artifact_id, author, max(created_at) AS latest FROM ${t.comments}
|
|
143
|
+
WHERE artifact_id = ANY($1::text[]) GROUP BY artifact_id, author) AS distinct_authors
|
|
144
|
+
) AS ranked WHERE rank <= 5 ORDER BY artifact_id, rank`, [ids]),
|
|
145
|
+
]);
|
|
146
|
+
const authors = people.rows.map((row) => stored(activityPerson, row));
|
|
147
|
+
return counts.rows.map((row) => {
|
|
148
|
+
const { artifact_id: artifactId, open, total } = stored(activityCount, row);
|
|
149
|
+
const own = authors.filter((person) => person.artifact_id === artifactId);
|
|
150
|
+
return { artifactId, open, total, people: own.map((person) => person.author) };
|
|
151
|
+
});
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
const stateQueries = (sql, t) => ({
|
|
155
|
+
getState: async (artifactId, key) => {
|
|
156
|
+
const { rows } = await sql.query(`SELECT * FROM ${t.states} WHERE artifact_id = $1 AND key = $2`, [artifactId, key]);
|
|
157
|
+
return rows[0] ? toState(rows[0]) : null;
|
|
158
|
+
},
|
|
159
|
+
countStateKeys: async (artifactId) => {
|
|
160
|
+
const { rows } = await sql.query(`SELECT count(*)::int AS n FROM ${t.states} WHERE artifact_id = $1`, [artifactId]);
|
|
161
|
+
return Number(rows[0]?.["n"] ?? 0);
|
|
162
|
+
},
|
|
163
|
+
// Insert when new, otherwise update only the version that was read.
|
|
164
|
+
putState: async (s, expected) => {
|
|
165
|
+
const { rows } = expected === 0
|
|
166
|
+
? await sql.query(`INSERT INTO ${t.states} (artifact_id, key, items, version) VALUES ($1, $2, $3::jsonb, $4)
|
|
167
|
+
ON CONFLICT DO NOTHING RETURNING version`, [s.artifactId, s.key, json(s.items), s.version])
|
|
168
|
+
: await sql.query(`UPDATE ${t.states} SET items = $3::jsonb, version = $4
|
|
169
|
+
WHERE artifact_id = $1 AND key = $2 AND version = $5 RETURNING version`, [s.artifactId, s.key, json(s.items), s.version, expected]);
|
|
170
|
+
return rows.length === 1;
|
|
171
|
+
},
|
|
172
|
+
// Insert, then prune to the newest `keep`. Pruning is idempotent upkeep, so it needs no
|
|
173
|
+
// transaction with the insert.
|
|
174
|
+
appendActivity: async (a, keep) => {
|
|
175
|
+
await sql.query(`INSERT INTO ${t.activity} (artifact_id, key, action, item_id, version, actor, at)
|
|
176
|
+
VALUES ($1, $2, $3, $4, $5, $6::jsonb, $7)`, [a.artifactId, a.key, a.action, a.itemId, a.version, json(a.actor), a.at]);
|
|
177
|
+
await sql.query(`DELETE FROM ${t.activity} WHERE artifact_id = $1 AND key = $2 AND id NOT IN
|
|
178
|
+
(SELECT id FROM ${t.activity} WHERE artifact_id = $1 AND key = $2 ORDER BY id DESC LIMIT $3)`, [a.artifactId, a.key, keep]);
|
|
179
|
+
},
|
|
180
|
+
listActivity: async (artifactId, key, limit) => (await sql.query(`SELECT * FROM ${t.activity} WHERE artifact_id = $1 AND key = $2 ORDER BY id DESC LIMIT $3`, [artifactId, key, limit])).rows.map(toActivity),
|
|
181
|
+
});
|
|
182
|
+
export const postgresStoreOn = (sql, t) => ({
|
|
183
|
+
...artifactQueries(sql, t),
|
|
184
|
+
...versionQueries(sql, t),
|
|
185
|
+
...lifecycleQueries(sql, t),
|
|
186
|
+
...threadQueries(sql, t),
|
|
187
|
+
...stateQueries(sql, t),
|
|
188
|
+
});
|
|
189
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/server/adapters/postgres/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { BlobStore } from "../ports.js";
|
|
2
|
+
export interface S3BlobsOptions {
|
|
3
|
+
/** e.g. `https://s3.us-east-1.amazonaws.com`, `https://<account>.r2.cloudflarestorage.com`,
|
|
4
|
+
* or `http://localhost:9000` for MinIO. */
|
|
5
|
+
endpoint: string;
|
|
6
|
+
bucket: string;
|
|
7
|
+
accessKeyId: string;
|
|
8
|
+
secretAccessKey: string;
|
|
9
|
+
/** Defaults to "auto", which R2 expects; AWS wants the bucket's region. */
|
|
10
|
+
region?: string;
|
|
11
|
+
/** "path" (`endpoint/bucket/key`, the default, works everywhere) or "virtual"
|
|
12
|
+
* (`bucket.endpoint/key`, AWS's preferred form). */
|
|
13
|
+
style?: "path" | "virtual";
|
|
14
|
+
/** Key prefix inside the bucket. Defaults to "open-artifact/". */
|
|
15
|
+
prefix?: string;
|
|
16
|
+
/** For tests and custom runtimes. Defaults to the global fetch. */
|
|
17
|
+
fetch?: typeof fetch;
|
|
18
|
+
}
|
|
19
|
+
/** Blobs in any S3-compatible bucket (AWS S3, Cloudflare R2, MinIO, Backblaze B2, Tigris,
|
|
20
|
+
* Supabase Storage), signed with SigV4 over `fetch`. No AWS SDK. */
|
|
21
|
+
export declare const s3Blobs: (options: S3BlobsOptions) => BlobStore;
|
|
22
|
+
//# sourceMappingURL=s3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/s3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,WAAW,cAAc;IAC7B;gDAC4C;IAC5C,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;yDACqD;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mEAAmE;IACnE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CACrB;AAED;qEACqE;AACrE,eAAO,MAAM,OAAO,YAAa,cAAc,KAAG,SAwCjD,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { AwsClient } from "aws4fetch";
|
|
2
|
+
/** Blobs in any S3-compatible bucket (AWS S3, Cloudflare R2, MinIO, Backblaze B2, Tigris,
|
|
3
|
+
* Supabase Storage), signed with SigV4 over `fetch`. No AWS SDK. */
|
|
4
|
+
export const s3Blobs = (options) => {
|
|
5
|
+
const client = new AwsClient({
|
|
6
|
+
accessKeyId: options.accessKeyId,
|
|
7
|
+
secretAccessKey: options.secretAccessKey,
|
|
8
|
+
region: options.region ?? "auto",
|
|
9
|
+
service: "s3",
|
|
10
|
+
});
|
|
11
|
+
const endpoint = new URL(options.endpoint);
|
|
12
|
+
const prefix = options.prefix ?? "open-artifact/";
|
|
13
|
+
const send = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
14
|
+
const urlFor = (key) => {
|
|
15
|
+
const path = `${prefix}${key}`.split("/").map(encodeURIComponent).join("/");
|
|
16
|
+
if (options.style === "virtual")
|
|
17
|
+
return `${endpoint.protocol}//${options.bucket}.${endpoint.host}/${path}`;
|
|
18
|
+
return `${endpoint.origin}/${encodeURIComponent(options.bucket)}/${path}`;
|
|
19
|
+
};
|
|
20
|
+
const call = async (key, init) => {
|
|
21
|
+
const request = await client.sign(urlFor(key), init);
|
|
22
|
+
return send(request);
|
|
23
|
+
};
|
|
24
|
+
return {
|
|
25
|
+
put: async (key, blob) => {
|
|
26
|
+
const response = await call(key, {
|
|
27
|
+
method: "PUT",
|
|
28
|
+
body: blob.bytes,
|
|
29
|
+
headers: { "content-type": blob.type },
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok)
|
|
32
|
+
throw new Error(`S3 put failed: HTTP ${response.status}`);
|
|
33
|
+
},
|
|
34
|
+
get: async (key) => {
|
|
35
|
+
const response = await call(key, { method: "GET" });
|
|
36
|
+
if (response.status === 404)
|
|
37
|
+
return null;
|
|
38
|
+
if (!response.ok)
|
|
39
|
+
throw new Error(`S3 get failed: HTTP ${response.status}`);
|
|
40
|
+
return {
|
|
41
|
+
bytes: new Uint8Array(await response.arrayBuffer()),
|
|
42
|
+
type: response.headers.get("content-type") ?? "application/octet-stream",
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=s3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.js","sourceRoot":"","sources":["../../../src/server/adapters/s3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAqBrC;qEACqE;AACrE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,OAAuB,EAAa,EAAE;IAC5D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM;QAChC,OAAO,EAAE,IAAI;KACd,CAAC,CAAA;IACF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAA;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC/D,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3E,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;YAC7B,OAAO,GAAG,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,CAAA;QAC3E,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;IAC3E,CAAC,CAAA;IACD,MAAM,IAAI,GAAG,KAAK,EAAE,GAAW,EAAE,IAAiB,EAAE,EAAE;QACpD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAA;IACtB,CAAC,CAAA;IAED,OAAO;QACL,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE;gBAC/B,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,OAAO,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE;aACvC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QAC7E,CAAC;QACD,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;YACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAA;YACxC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;YAC3E,OAAO;gBACL,KAAK,EAAE,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACnD,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,0BAA0B;aACzE,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
|