edytor 1.0.0-rc.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -25
- package/dist/block/block.svelte.d.ts +10 -85
- package/dist/block/block.svelte.js +47 -141
- package/dist/block/colors.d.ts +0 -9
- package/dist/block/colors.js +1 -18
- package/dist/block/contentRange.d.ts +5 -1
- package/dist/block/contentRange.js +15 -16
- package/dist/block/inlineBlock.svelte.d.ts +8 -10
- package/dist/block/inlineBlock.svelte.js +14 -22
- package/dist/clipboard/createClipboardFragment.js +22 -64
- package/dist/clipboard/fragmentData.js +17 -42
- package/dist/clipboard/htmlFlow.d.ts +6 -1
- package/dist/clipboard/htmlFlow.js +26 -13
- package/dist/clipboard/insertClipboardFragment.js +5 -4
- package/dist/clipboard/moveText.js +16 -8
- package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
- package/dist/clipboard/serializeClipboardFragment.js +32 -28
- package/dist/cloudflare/DocumentRoom.d.ts +22 -17
- package/dist/cloudflare/DocumentRoom.js +10 -5
- package/dist/cloudflare/index.d.ts +1 -1
- package/dist/cloudflare/index.js +1 -1
- package/dist/cloudflare/move.d.ts +1 -18
- package/dist/cloudflare/move.js +2 -48
- package/dist/cloudflare/room/admission.d.ts +1 -60
- package/dist/cloudflare/room/admission.js +25 -29
- package/dist/cloudflare/room/comments.d.ts +1 -3
- package/dist/cloudflare/room/comments.js +6 -6
- package/dist/cloudflare/room/context.d.ts +20 -82
- package/dist/cloudflare/room/context.js +8 -8
- package/dist/cloudflare/room/forged.d.ts +1 -1
- package/dist/cloudflare/room/forged.js +2 -12
- package/dist/cloudflare/room/frames.d.ts +1 -1
- package/dist/cloudflare/room/frames.js +1 -1
- package/dist/cloudflare/room/history.d.ts +1 -25
- package/dist/cloudflare/room/history.js +39 -54
- package/dist/cloudflare/room/moves.d.ts +1 -13
- package/dist/cloudflare/room/moves.js +33 -57
- package/dist/cloudflare/room/presence.d.ts +1 -11
- package/dist/cloudflare/room/presence.js +4 -4
- package/dist/cloudflare/room/purge.d.ts +1 -2
- package/dist/cloudflare/room/purge.js +2 -2
- package/dist/cloudflare/room/replicas.d.ts +1 -7
- package/dist/cloudflare/room/replicas.js +2 -2
- package/dist/cloudflare/room/storage.d.ts +9 -30
- package/dist/cloudflare/room/storage.js +52 -104
- package/dist/cloudflare/room/updates.d.ts +4 -4
- package/dist/cloudflare/room/updates.js +17 -24
- package/dist/cloudflare/room/validation.d.ts +1 -5
- package/dist/cloudflare/room/validation.js +16 -37
- package/dist/collaboration/RemoteSelections.svelte +13 -17
- package/dist/collaboration/comments/client.d.ts +2 -2
- package/dist/collaboration/comments/client.js +1 -1
- package/dist/collaboration/history/index.d.ts +5 -5
- package/dist/collaboration/history/index.js +5 -5
- package/dist/collaboration/history/panel.svelte.d.ts +91 -0
- package/dist/collaboration/history/panel.svelte.js +223 -0
- package/dist/collaboration/providers.d.ts +12 -3
- package/dist/collaboration/providers.js +5 -4
- package/dist/components/Block.svelte +160 -119
- package/dist/components/Block.svelte.d.ts +8 -3
- package/dist/components/Content.svelte +91 -44
- package/dist/components/CustomMark.svelte +46 -0
- package/dist/components/CustomMark.svelte.d.ts +11 -0
- package/dist/components/Edytor.svelte +80 -95
- package/dist/components/Edytor.svelte.d.ts +8 -12
- package/dist/components/InlineBlock.svelte +4 -9
- package/dist/components/Mark.svelte +46 -35
- package/dist/components/Mark.svelte.d.ts +7 -0
- package/dist/components/Ranges.svelte +96 -0
- package/dist/components/Ranges.svelte.d.ts +19 -0
- package/dist/components/Suggestion.svelte +3 -2
- package/dist/components/Text.svelte +48 -14
- package/dist/components/Text.svelte.d.ts +1 -1
- package/dist/crdt/admission.d.ts +2 -9
- package/dist/crdt/admission.js +3 -9
- package/dist/crdt/attribution/attribution.d.ts +11 -72
- package/dist/crdt/attribution/attribution.js +5 -52
- package/dist/crdt/attribution/block.d.ts +0 -78
- package/dist/crdt/attribution/block.js +1 -144
- package/dist/crdt/data.d.ts +8 -13
- package/dist/crdt/data.js +30 -70
- package/dist/crdt/doc/anchors.js +4 -4
- package/dist/crdt/doc/content.d.ts +5 -1
- package/dist/crdt/doc/content.js +3 -1
- package/dist/crdt/doc/delete.d.ts +1 -0
- package/dist/crdt/doc/funnel.d.ts +0 -23
- package/dist/crdt/doc/funnel.js +34 -85
- package/dist/crdt/doc/gate.d.ts +8 -9
- package/dist/crdt/doc/gate.js +7 -17
- package/dist/crdt/doc/history.d.ts +87 -14
- package/dist/crdt/doc/history.js +334 -149
- package/dist/crdt/doc/layout.d.ts +0 -1
- package/dist/crdt/doc/layout.js +2 -3
- package/dist/crdt/doc/meta.d.ts +4 -4
- package/dist/crdt/doc/meta.js +10 -21
- package/dist/crdt/doc/moves.d.ts +4 -4
- package/dist/crdt/doc/moves.js +5 -5
- package/dist/crdt/doc/plan.d.ts +2 -0
- package/dist/crdt/doc/plan.js +2 -0
- package/dist/crdt/doc/reads.d.ts +1 -5
- package/dist/crdt/doc/reads.js +38 -49
- package/dist/crdt/doc/seed.d.ts +15 -6
- package/dist/crdt/doc/seed.js +27 -26
- package/dist/crdt/doc/split-merge.d.ts +1 -3
- package/dist/crdt/doc/split-merge.js +4 -5
- package/dist/crdt/doc/steps.d.ts +3 -7
- package/dist/crdt/doc/steps.js +20 -9
- package/dist/crdt/doc/types.d.ts +0 -10
- package/dist/crdt/document.d.ts +24 -115
- package/dist/crdt/document.js +207 -305
- package/dist/crdt/edytor-doc.d.ts +671 -90
- package/dist/crdt/edytor-doc.js +73 -149
- package/dist/crdt/engine-api.d.ts +15 -47
- package/dist/crdt/engine.d.ts +7 -17
- package/dist/crdt/engine.js +9 -19
- package/dist/crdt/flow.d.ts +9 -37
- package/dist/crdt/flow.js +260 -238
- package/dist/crdt/index.d.ts +26 -85
- package/dist/crdt/index.js +21 -47
- package/dist/crdt/operations.d.ts +24 -33
- package/dist/crdt/operations.js +7 -17
- package/dist/crdt/placement/display.d.ts +0 -2
- package/dist/crdt/placement/display.js +0 -15
- package/dist/crdt/placement/model.d.ts +160 -12
- package/dist/crdt/placement/model.js +413 -414
- package/dist/crdt/placement/rank.d.ts +1 -5
- package/dist/crdt/placement/rank.js +28 -38
- package/dist/crdt/protocol.d.ts +4 -5
- package/dist/crdt/protocol.js +3 -4
- package/dist/crdt/protocols/awareness.d.ts +3 -7
- package/dist/crdt/protocols/awareness.js +17 -33
- package/dist/crdt/protocols/envelope.d.ts +9 -29
- package/dist/crdt/protocols/envelope.js +8 -25
- package/dist/crdt/protocols/sync.d.ts +15 -30
- package/dist/crdt/protocols/sync.js +27 -89
- package/dist/crdt/providers/bound.d.ts +3 -1
- package/dist/crdt/providers/bound.js +3 -1
- package/dist/crdt/providers/container.d.ts +11 -17
- package/dist/crdt/providers/container.js +39 -27
- package/dist/crdt/providers/index.d.ts +34 -6
- package/dist/crdt/providers/index.js +106 -111
- package/dist/crdt/providers/indexeddb.d.ts +2 -12
- package/dist/crdt/providers/indexeddb.js +29 -90
- package/dist/crdt/providers/room.d.ts +58 -2
- package/dist/crdt/providers/room.js +38 -21
- package/dist/crdt/providers/websocket.d.ts +1 -1
- package/dist/crdt/providers/websocket.js +3 -4
- package/dist/crdt/purge.d.ts +2 -2
- package/dist/crdt/purge.js +69 -6
- package/dist/crdt/rangeDelete.d.ts +4 -42
- package/dist/crdt/rangeDelete.js +7 -6
- package/dist/crdt/restore.d.ts +21 -1
- package/dist/crdt/restore.js +54 -59
- package/dist/crdt/schema.d.ts +2 -2
- package/dist/crdt/schema.js +4 -5
- package/dist/crdt/semantics.d.ts +10 -15
- package/dist/crdt/semantics.js +22 -21
- package/dist/crdt/storage.d.ts +7 -13
- package/dist/crdt/storage.js +10 -24
- package/dist/crdt/structs.d.ts +42 -47
- package/dist/crdt/structs.js +76 -67
- package/dist/crdt/tables.d.ts +9 -0
- package/dist/crdt/tables.js +20 -0
- package/dist/crdt/text/delete-index.d.ts +0 -13
- package/dist/crdt/text/delete-index.js +7 -14
- package/dist/crdt/text/deletes.d.ts +9 -22
- package/dist/crdt/text/deletes.js +11 -74
- package/dist/crdt/text/index/cache.js +3 -3
- package/dist/crdt/text/index/fold.d.ts +1 -2
- package/dist/crdt/text/index/fold.js +15 -10
- package/dist/crdt/text/index/layout.d.ts +0 -10
- package/dist/crdt/text/index/layout.js +6 -20
- package/dist/crdt/text/index/records.js +2 -1
- package/dist/crdt/text/index/report.js +5 -6
- package/dist/crdt/text/index/shared.d.ts +11 -4
- package/dist/crdt/text/index/shared.js +8 -7
- package/dist/crdt/text/index/state.d.ts +3 -33
- package/dist/crdt/text/index/state.js +2 -4
- package/dist/crdt/text/model.d.ts +82 -2
- package/dist/crdt/text/model.js +344 -354
- package/dist/crdt/text/rows.d.ts +0 -2
- package/dist/crdt/text/rows.js +0 -11
- package/dist/crdt/text/runs.d.ts +6 -3
- package/dist/crdt/text/runs.js +132 -137
- package/dist/crdt/text/streams.d.ts +1 -1
- package/dist/crdt/text/streams.js +1 -1
- package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
- package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
- package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
- package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
- package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
- package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
- package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
- package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
- package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
- package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
- package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
- package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
- package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
- package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
- package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
- package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
- package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
- package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
- package/dist/crdt/vendor/yjs/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/src/index.js +11 -25
- package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
- package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
- package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
- package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
- package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
- package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
- package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
- package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
- package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
- package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
- package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
- package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
- package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
- package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
- package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
- package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
- package/dist/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
- package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
- package/dist/dnd/pragmatic.d.ts +4 -22
- package/dist/dnd/pragmatic.js +7 -26
- package/dist/dnd/track.d.ts +14 -0
- package/dist/dnd/track.js +55 -0
- package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
- package/dist/edytor.svelte.d.ts +34 -64
- package/dist/edytor.svelte.js +118 -180
- package/dist/events/beforeInputCommands.d.ts +6 -11
- package/dist/events/beforeInputCommands.js +189 -184
- package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
- package/dist/events/beforeInputDeleteCommands.js +153 -204
- package/dist/events/domTextOffset.d.ts +9 -9
- package/dist/events/domTextOffset.js +20 -48
- package/dist/events/events.utils.d.ts +0 -2
- package/dist/events/events.utils.js +0 -4
- package/dist/events/nativeInteractiveControl.d.ts +13 -13
- package/dist/events/nativeInteractiveControl.js +28 -56
- package/dist/events/onBeforeInput.d.ts +6 -1
- package/dist/events/onBeforeInput.js +207 -331
- package/dist/events/onCopy.js +1 -5
- package/dist/events/onDrop.d.ts +7 -1
- package/dist/events/onDrop.js +33 -72
- package/dist/events/onFocus.d.ts +9 -4
- package/dist/events/onFocus.js +92 -72
- package/dist/events/onInput.d.ts +8 -4
- package/dist/events/onInput.js +34 -147
- package/dist/events/onKeyDown.js +55 -122
- package/dist/events/onPaste.d.ts +13 -1
- package/dist/events/onPaste.js +46 -76
- package/dist/index.d.ts +10 -13
- package/dist/index.js +3 -3
- package/dist/kinds.d.ts +4 -6
- package/dist/kinds.js +28 -27
- package/dist/labels.d.ts +91 -314
- package/dist/labels.js +180 -396
- package/dist/plugins/Chrome.svelte +29 -0
- package/dist/plugins/Chrome.svelte.d.ts +32 -0
- package/dist/plugins/Control.svelte +23 -0
- package/dist/plugins/Control.svelte.d.ts +30 -0
- package/dist/plugins/anchored.svelte.d.ts +47 -0
- package/dist/plugins/anchored.svelte.js +73 -0
- package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
- package/dist/plugins/arrowMove/arrowMove.js +9 -5
- package/dist/plugins/bands.svelte.d.ts +57 -0
- package/dist/plugins/bands.svelte.js +95 -0
- package/dist/plugins/blockHandles/BlockHandle.svelte +14 -151
- package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
- package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
- package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
- package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
- package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
- package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
- package/dist/plugins/blockHandles/dragPreview.js +20 -17
- package/dist/plugins/blockHandles/dropIndicator.js +52 -60
- package/dist/plugins/blockHandles/geometry.d.ts +46 -1
- package/dist/plugins/blockHandles/geometry.js +51 -4
- package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
- package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
- package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
- package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
- package/dist/plugins/brand.d.ts +8 -0
- package/dist/plugins/brand.js +8 -0
- package/dist/plugins/chrome.d.ts +79 -0
- package/dist/plugins/chrome.js +87 -0
- package/dist/plugins/code/CodeHeader.svelte +12 -58
- package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
- package/dist/plugins/code/CodePlugin.svelte +75 -56
- package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
- package/dist/plugins/code/LanguageMenu.svelte +25 -0
- package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
- package/dist/plugins/code/code.css +5 -100
- package/dist/plugins/code/header.svelte.d.ts +47 -0
- package/dist/plugins/code/header.svelte.js +141 -0
- package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
- package/dist/plugins/code/languageMenu.svelte.js +199 -0
- package/dist/plugins/code/languages.d.ts +21 -10
- package/dist/plugins/code/languages.js +39 -126
- package/dist/plugins/columns/ColumnResize.svelte +13 -25
- package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
- package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
- package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
- package/dist/plugins/columns/columns.css +7 -26
- package/dist/plugins/columns/resize.svelte.d.ts +14 -51
- package/dist/plugins/columns/resize.svelte.js +70 -164
- package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
- package/dist/plugins/comments/CommentsController.svelte.js +14 -25
- package/dist/plugins/comments/CommentsSidebar.svelte +82 -430
- package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
- package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
- package/dist/plugins/comments/commentsPlugin.js +12 -10
- package/dist/plugins/equation/EquationEditor.svelte +18 -129
- package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
- package/dist/plugins/equation/EquationPlugin.svelte +123 -168
- package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
- package/dist/plugins/equation/EquationView.svelte +20 -11
- package/dist/plugins/equation/equation.svelte.d.ts +74 -36
- package/dist/plugins/equation/equation.svelte.js +74 -66
- package/dist/plugins/equation/importUrl.d.ts +6 -0
- package/dist/plugins/equation/importUrl.js +6 -0
- package/dist/plugins/equation/katex.d.ts +8 -0
- package/dist/plugins/equation/katex.js +77 -0
- package/dist/plugins/find/FindController.svelte.d.ts +8 -13
- package/dist/plugins/find/FindController.svelte.js +34 -55
- package/dist/plugins/find/findPlugin.d.ts +4 -8
- package/dist/plugins/find/findPlugin.js +29 -9
- package/dist/plugins/image/ImageChrome.svelte +5 -151
- package/dist/plugins/image/ImagePlugin.svelte +49 -117
- package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
- package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
- package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
- package/dist/plugins/image/controls.svelte.d.ts +6 -57
- package/dist/plugins/image/controls.svelte.js +51 -174
- package/dist/plugins/image/image.d.ts +0 -5
- package/dist/plugins/image/image.js +0 -3
- package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
- package/dist/plugins/image/toolbar.svelte.js +145 -0
- package/dist/plugins/index.d.ts +39 -24
- package/dist/plugins/index.js +30 -22
- package/dist/plugins/list.svelte.d.ts +128 -0
- package/dist/plugins/list.svelte.js +217 -0
- package/dist/plugins/markdownShortcuts.d.ts +1 -1
- package/dist/plugins/markdownShortcuts.js +6 -5
- package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
- package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
- package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
- package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
- package/dist/plugins/marquee/marquee.d.ts +33 -0
- package/dist/plugins/marquee/marquee.js +89 -0
- package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
- package/dist/plugins/marquee/marqueePlugin.js +68 -0
- package/dist/plugins/media/AudioPlugin.svelte +3 -88
- package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
- package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
- package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
- package/dist/plugins/media/EmbedPlugin.svelte +93 -77
- package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
- package/dist/plugins/media/EmptySlot.svelte +44 -0
- package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
- package/dist/plugins/media/FilePlugin.svelte +35 -111
- package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
- package/dist/plugins/media/MediaEmpty.svelte +55 -112
- package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
- package/dist/plugins/media/SourceBlock.svelte +164 -0
- package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
- package/dist/plugins/media/VideoPlugin.svelte +4 -97
- package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
- package/dist/plugins/media/empty.svelte.d.ts +69 -0
- package/dist/plugins/media/empty.svelte.js +111 -0
- package/dist/plugins/media/media.d.ts +93 -30
- package/dist/plugins/media/media.js +79 -86
- package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
- package/dist/plugins/media/urlPaste.svelte.js +46 -75
- package/dist/plugins/mention/MentionPlugin.svelte +47 -124
- package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
- package/dist/plugins/page/PageLink.svelte +54 -38
- package/dist/plugins/page/PagePlugin.svelte +20 -18
- package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
- package/dist/plugins/page/page.d.ts +35 -9
- package/dist/plugins/page/page.js +3 -4
- package/dist/plugins/pageLink/PageLinkPlugin.svelte +52 -108
- package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
- package/dist/plugins/planned.d.ts +10 -0
- package/dist/plugins/planned.js +12 -0
- package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
- package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
- package/dist/plugins/richtext/EmptyBody.svelte +25 -0
- package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextControl.svelte +39 -0
- package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
- package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
- package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
- package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
- package/dist/plugins/richtext/body.d.ts +9 -0
- package/dist/plugins/richtext/body.js +16 -0
- package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
- package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
- package/dist/plugins/richtext/callouts.d.ts +15 -0
- package/dist/plugins/richtext/callouts.js +23 -0
- package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
- package/dist/plugins/richtext/controls.svelte.js +126 -0
- package/dist/plugins/richtext/richTextOperations.js +37 -28
- package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +18 -11
- package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
- package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
- package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
- package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
- package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
- package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
- package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
- package/dist/plugins/table/TableChrome.svelte +96 -127
- package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
- package/dist/plugins/table/TablePlugin.svelte +116 -171
- package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
- package/dist/plugins/table/chrome.svelte.d.ts +110 -117
- package/dist/plugins/table/chrome.svelte.js +643 -289
- package/dist/plugins/table/ops.d.ts +47 -0
- package/dist/plugins/table/ops.js +233 -0
- package/dist/plugins/table/table.css +55 -134
- package/dist/plugins/table/table.d.ts +26 -7
- package/dist/plugins/table/table.js +23 -49
- package/dist/plugins/toc/TableOfContents.svelte +32 -38
- package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
- package/dist/plugins/toc/TocPlugin.svelte +22 -22
- package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
- package/dist/plugins/toc/toc.d.ts +41 -10
- package/dist/plugins/toc/toc.js +2 -3
- package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +29 -66
- package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
- package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
- package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
- package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
- package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
- package/dist/plugins/triggers/place.d.ts +0 -9
- package/dist/plugins/triggers/place.js +1 -17
- package/dist/plugins/triggers/triggers.d.ts +31 -9
- package/dist/plugins/triggers/triggers.js +82 -62
- package/dist/plugins/uploads.svelte.d.ts +38 -20
- package/dist/plugins/uploads.svelte.js +39 -32
- package/dist/plugins.d.ts +167 -60
- package/dist/selection/domSelection.d.ts +13 -4
- package/dist/selection/domSelection.js +110 -183
- package/dist/selection/pointer.svelte.d.ts +12 -10
- package/dist/selection/pointer.svelte.js +154 -71
- package/dist/selection/replaceSelection.d.ts +21 -22
- package/dist/selection/replaceSelection.js +60 -69
- package/dist/selection/selection.svelte.d.ts +5 -73
- package/dist/selection/selection.svelte.js +263 -542
- package/dist/selection/selection.utils.d.ts +34 -11
- package/dist/selection/selection.utils.js +128 -247
- package/dist/selection/visibility.d.ts +11 -8
- package/dist/selection/visibility.js +23 -8
- package/dist/session/announcer.svelte.d.ts +2 -1
- package/dist/session/announcer.svelte.js +7 -3
- package/dist/session/attempt.d.ts +33 -39
- package/dist/session/attempt.js +61 -53
- package/dist/session/bindings.js +108 -139
- package/dist/session/commands.d.ts +47 -22
- package/dist/session/commands.js +206 -208
- package/dist/session/composition.svelte.d.ts +2 -4
- package/dist/session/composition.svelte.js +55 -65
- package/dist/session/editing/text.d.ts +6 -0
- package/dist/session/editing/text.js +17 -3
- package/dist/session/handles.d.ts +10 -1
- package/dist/session/handles.js +28 -0
- package/dist/session/history.d.ts +0 -4
- package/dist/session/history.js +15 -21
- package/dist/session/inputRules.js +75 -84
- package/dist/session/keymap.d.ts +1 -6
- package/dist/session/keymap.js +17 -20
- package/dist/session/moves.d.ts +10 -10
- package/dist/session/moves.js +31 -59
- package/dist/session/navigation.d.ts +18 -3
- package/dist/session/navigation.js +194 -153
- package/dist/session/ports.d.ts +7 -0
- package/dist/session/selection.d.ts +4 -3
- package/dist/session/selection.js +8 -0
- package/dist/session/suggestions.svelte.d.ts +1 -1
- package/dist/session/suggestions.svelte.js +64 -47
- package/dist/session/virtual.d.ts +3 -3
- package/dist/session/virtual.js +18 -40
- package/dist/surface/attributes.d.ts +1 -0
- package/dist/surface/attributes.js +3 -26
- package/dist/surface/cells.d.ts +5 -0
- package/dist/surface/cells.js +5 -0
- package/dist/surface/lines.d.ts +32 -0
- package/dist/surface/lines.js +43 -0
- package/dist/surface/observer.svelte.d.ts +3 -20
- package/dist/surface/observer.svelte.js +73 -77
- package/dist/surface/overlay.d.ts +48 -6
- package/dist/surface/overlay.js +133 -23
- package/dist/surface/pin.svelte.d.ts +5 -0
- package/dist/surface/pin.svelte.js +5 -0
- package/dist/surface/projector.svelte.d.ts +4 -6
- package/dist/surface/projector.svelte.js +42 -69
- package/dist/text/text.svelte.d.ts +14 -40
- package/dist/text/text.svelte.js +35 -51
- package/dist/text/wordBoundary.d.ts +19 -0
- package/dist/text/wordBoundary.js +29 -44
- package/dist/themes/notion.css +315 -126
- package/dist/utils/json.d.ts +3 -1
- package/dist/utils/json.js +52 -51
- package/dist/utils/listen.d.ts +8 -0
- package/dist/utils/listen.js +19 -0
- package/package.json +4 -5
- package/dist/block/block.utils.d.ts +0 -340
- package/dist/block/block.utils.js +0 -356
- package/dist/collaboration/history/HistoryPanel.svelte +0 -525
- package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
- package/dist/collaboration/history/panel.d.ts +0 -43
- package/dist/collaboration/history/panel.js +0 -3
- package/dist/components/SuggestionRanges.svelte +0 -58
- package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
- package/dist/crdt/doc/table.d.ts +0 -21
- package/dist/crdt/doc/table.js +0 -288
- package/dist/crdt/migration/generation.d.ts +0 -58
- package/dist/crdt/migration/generation.js +0 -70
- package/dist/crdt/migration/legacy-schema.d.ts +0 -61
- package/dist/crdt/migration/legacy-schema.js +0 -151
- package/dist/crdt/migration/migrate.d.ts +0 -56
- package/dist/crdt/migration/migrate.js +0 -227
- package/dist/crdt/nodes.d.ts +0 -121
- package/dist/crdt/nodes.js +0 -56
- package/dist/crdt/text/index/checks.d.ts +0 -15
- package/dist/crdt/text/index/checks.js +0 -156
- package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
- package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
- package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
- package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
- package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
- package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
- package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
- package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
- package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
- package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
- package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
- package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
- package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
- package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
- package/dist/edytor.utils.d.ts +0 -50
- package/dist/edytor.utils.js +0 -67
- package/dist/plugins/blockMenu/BlockMenu.svelte +0 -447
- package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
- package/dist/plugins/find/FindBar.svelte +0 -170
- package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
- package/dist/plugins/find/FindHighlights.svelte +0 -75
- package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
- package/dist/plugins/icons.d.ts +0 -2
- package/dist/plugins/icons.js +0 -63
- package/dist/plugins/image/ImageEmpty.svelte +0 -116
- package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
- package/dist/plugins/keepInView.d.ts +0 -4
- package/dist/plugins/keepInView.js +0 -6
- package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
- package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
- package/dist/plugins/richtext/labels.d.ts +0 -5
- package/dist/plugins/richtext/labels.js +0 -3
- package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
- package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
- package/dist/plugins/toolbar/LinkCard.svelte +0 -118
- package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
- package/dist/plugins/toolbar/Toolbar.svelte +0 -400
- package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
- package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
- package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
- package/dist/session/props.d.ts +0 -28
- package/dist/session/props.js +0 -162
- package/dist/text/deltas.d.ts +0 -22
- package/dist/text/deltas.js +0 -46
- package/dist/text/text.utils.d.ts +0 -45
- package/dist/text/text.utils.js +0 -199
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import type { EngineApi, YDoc } from '../engine-api.js';
|
|
2
|
-
import { type JSONDoc } from '../../utils/json.js';
|
|
3
|
-
/** The name of the migration lock of logical document `name`. */
|
|
4
|
-
export declare const migrationBcRoom: (name: string) => string;
|
|
5
|
-
export type MigrationStatus = 'none' | 'pending' | 'active' | 'failed' | 'rolledback';
|
|
6
|
-
/** Durable progress. `pending` is never stored: it is the lock, reported by `status()`. */
|
|
7
|
-
export type MigrationRecord = {
|
|
8
|
-
v: 1;
|
|
9
|
-
status: MigrationStatus;
|
|
10
|
-
migratedAt?: number;
|
|
11
|
-
rolledbackAt?: number;
|
|
12
|
-
sourceRows?: number;
|
|
13
|
-
sourceBytes?: number;
|
|
14
|
-
error?: string;
|
|
15
|
-
};
|
|
16
|
-
export type MigrationPhase = 'claim' | 'read' | 'materialize' | 'rebuild' | 'verify' | 'persist';
|
|
17
|
-
export type MigrateResult = {
|
|
18
|
-
/** `active` also covers `already-active` and `nothing-to-migrate`. */
|
|
19
|
-
status: 'active' | 'busy' | 'failed' | 'rolledback';
|
|
20
|
-
alreadyActive?: boolean;
|
|
21
|
-
empty?: boolean;
|
|
22
|
-
/** The migrated v14 doc (present when this call ran the import). */
|
|
23
|
-
doc?: YDoc;
|
|
24
|
-
/**
|
|
25
|
-
* The migrated state (present when this call ran the import) — restore it
|
|
26
|
-
* through the document admission path: `loadDocument(result.update)`
|
|
27
|
-
* lands a `hydrated` document through the gate every load crosses.
|
|
28
|
-
* The appended row is its diff against what the generation held (the
|
|
29
|
-
* whole state for a first import).
|
|
30
|
-
*/
|
|
31
|
-
update?: Uint8Array;
|
|
32
|
-
/** The materialized logical JSON with its ids (present when this call ran the import). */
|
|
33
|
-
json?: JSONDoc;
|
|
34
|
-
sourceRows?: number;
|
|
35
|
-
error?: string;
|
|
36
|
-
};
|
|
37
|
-
export type MigrateOptions = {
|
|
38
|
-
/** Legacy database name — defaults to the logical `name` (the v13 layout). */
|
|
39
|
-
sourceName?: string;
|
|
40
|
-
/** Re-run even when already `active` or `rolledback` — restores the legacy ids in place. */
|
|
41
|
-
force?: boolean;
|
|
42
|
-
/** `false`: return `busy` instead of queueing behind another tab's attempt. */
|
|
43
|
-
wait?: boolean;
|
|
44
|
-
/** Phase observer — invoked BEFORE each phase; throwing simulates a crash. */
|
|
45
|
-
onPhase?: (phase: MigrationPhase) => void | Promise<void>;
|
|
46
|
-
};
|
|
47
|
-
export type Migration = ReturnType<typeof bindMigration>;
|
|
48
|
-
/**
|
|
49
|
-
* Bind the migration path to the vendored v14 engine module.
|
|
50
|
-
*/
|
|
51
|
-
export declare const bindMigration: (Y: EngineApi) => {
|
|
52
|
-
migrate: (name: string, options?: MigrateOptions) => Promise<MigrateResult>;
|
|
53
|
-
rollback: (name: string) => Promise<void>;
|
|
54
|
-
status: (name: string) => Promise<MigrationRecord>;
|
|
55
|
-
waitForSettled: (name: string) => Promise<MigrationRecord>;
|
|
56
|
-
};
|
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Non-destructive v13 → v14 persistence migration.
|
|
3
|
-
*
|
|
4
|
-
* - READS every row of the legacy `<name>` database's `updates` store (the
|
|
5
|
-
* v13 y-indexeddb layout) in one readonly transaction, and materializes the
|
|
6
|
-
* logical JSON a v13 editor produced (`legacy-schema.ts`).
|
|
7
|
-
* - WRITES the import into the generation `edytor-v14-g5:<name>`: the row is
|
|
8
|
-
* APPENDED and the `active` record written in ONE transaction, so a
|
|
9
|
-
* completed import is visible iff both committed. The store is append-only
|
|
10
|
-
* for this writer as for the provider; the legacy database is never
|
|
11
|
-
* written, so rollback stays available.
|
|
12
|
-
* - A first import is a fresh identity appended beside whatever a live
|
|
13
|
-
* provider already stored. `force` is a replace-edit instead: it
|
|
14
|
-
* hydrates the generation, restores every legacy id in place
|
|
15
|
-
* (restore-definition — delete marks cleared, type, data, placement and
|
|
16
|
-
* content rewritten, every other block deleted) and appends that diff, so
|
|
17
|
-
* a forced re-migration reproduces the legacy ids and two devices forcing
|
|
18
|
-
* independently converge on one copy.
|
|
19
|
-
*
|
|
20
|
-
* CRDT identity, history and undo do not survive a first import (it is a
|
|
21
|
-
* JSON-level import); logical `b_*`/`i_*` ids do, and verification compares
|
|
22
|
-
* them.
|
|
23
|
-
*
|
|
24
|
-
* Attempt vs progress: the attempt is a `navigator.locks` lock named
|
|
25
|
-
* {@link migrationBcRoom} — crash-released, so no lease, owner or poll
|
|
26
|
-
* exists; where the platform has none (Node 22) an in-process mutex stands
|
|
27
|
-
* in. Progress is only the durable record, which is never `pending`:
|
|
28
|
-
* `status()` reports `pending` while the lock is held, and `wait: false`
|
|
29
|
-
* asks for the lock `ifAvailable` and returns `busy`.
|
|
30
|
-
*/
|
|
31
|
-
import * as idb from 'lib0-v14/indexeddb';
|
|
32
|
-
import * as f from 'lib0-v14/function';
|
|
33
|
-
import { asEngineDoc } from '../structs.js';
|
|
34
|
-
import { bindEdytorDoc } from '../edytor-doc.js';
|
|
35
|
-
import { bindLegacyReader } from './legacy-schema.js';
|
|
36
|
-
import { keepingReplaced } from '../incarnations.js';
|
|
37
|
-
import { generationDbName } from '../protocols/envelope.js';
|
|
38
|
-
import { CUSTOM, decodeRow, encodeRow, readRow, openContainer, openIfExists, UPDATES, verifyOrStamp } from '../providers/container.js';
|
|
39
|
-
import { jsonBlockToSpec, sanitizeWireJson } from '../../utils/json.js';
|
|
40
|
-
const MIGRATION_KEY = 'migration';
|
|
41
|
-
/** The name of the migration lock of logical document `name`. */
|
|
42
|
-
export const migrationBcRoom = (name) => `edytor-v14-migration:${name}`;
|
|
43
|
-
/** Where `navigator.locks` is absent, an in-process mutex (exclusive only) with its surface. */
|
|
44
|
-
const tails = new Map();
|
|
45
|
-
const inProcess = {
|
|
46
|
-
request: (name, { ifAvailable }, fn) => {
|
|
47
|
-
if (ifAvailable && tails.has(name))
|
|
48
|
-
return Promise.resolve(fn(null));
|
|
49
|
-
const run = (tails.get(name) ?? Promise.resolve()).then(() => fn({ name }));
|
|
50
|
-
const tail = run.then(f.nop, f.nop);
|
|
51
|
-
tails.set(name, tail);
|
|
52
|
-
void tail.then(() => tails.get(name) === tail && tails.delete(name));
|
|
53
|
-
return run;
|
|
54
|
-
},
|
|
55
|
-
query: async () => ({ held: [...tails.keys()].map((name) => ({ name })) })
|
|
56
|
-
};
|
|
57
|
-
const locks = () => globalThis.navigator?.locks ?? inProcess;
|
|
58
|
-
const readRecord = async (db) => (await idb.rtop(idb.transact(db, [CUSTOM], 'readonly')[0].get(MIGRATION_KEY))) ?? { v: 1, status: 'none' };
|
|
59
|
-
/**
|
|
60
|
-
* The legacy rows, in ONE readonly transaction — the fence: a live v13
|
|
61
|
-
* writer's rows land entirely before or after this snapshot (later rows are
|
|
62
|
-
* the `force` path's). Never creates the legacy database.
|
|
63
|
-
*/
|
|
64
|
-
const readLegacyRows = async (sourceName) => {
|
|
65
|
-
const db = await openIfExists(sourceName);
|
|
66
|
-
try {
|
|
67
|
-
if (!db?.objectStoreNames.contains(UPDATES))
|
|
68
|
-
return [];
|
|
69
|
-
return (await idb.getAll(idb.transact(db, [UPDATES], 'readonly')[0])).map(decodeRow);
|
|
70
|
-
}
|
|
71
|
-
finally {
|
|
72
|
-
db?.close();
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
/**
|
|
76
|
-
* Give id-less legacy blocks and atoms a deterministic `mig-<path>` id — the
|
|
77
|
-
* one id policy: the import is built from, and verified against, this JSON.
|
|
78
|
-
*/
|
|
79
|
-
const withFallbackIds = (b, path) => {
|
|
80
|
-
const out = { ...b, id: b.id ?? `mig-${path}` };
|
|
81
|
-
if (b.content && b.content.length > 0) {
|
|
82
|
-
out.content = b.content.map((item, i) => 'text' in item ? item : { ...item, id: item.id ?? `mig-${path}-i${i}` });
|
|
83
|
-
}
|
|
84
|
-
if (b.children && b.children.length > 0) {
|
|
85
|
-
out.children = b.children.map((c, i) => withFallbackIds(c, `${path}.${i}`));
|
|
86
|
-
}
|
|
87
|
-
return out;
|
|
88
|
-
};
|
|
89
|
-
/**
|
|
90
|
-
* Bind the migration path to the vendored v14 engine module.
|
|
91
|
-
*/
|
|
92
|
-
export const bindMigration = (Y) => {
|
|
93
|
-
const reader = bindLegacyReader(Y);
|
|
94
|
-
const edytorDoc = bindEdytorDoc(Y);
|
|
95
|
-
/** The durable record — NON-CREATING: probing never leaves a database behind. */
|
|
96
|
-
const stored = async (name) => {
|
|
97
|
-
const db = await openIfExists(generationDbName(name));
|
|
98
|
-
try {
|
|
99
|
-
return db?.objectStoreNames.contains(CUSTOM)
|
|
100
|
-
? await readRecord(db)
|
|
101
|
-
: { v: 1, status: 'none' };
|
|
102
|
-
}
|
|
103
|
-
finally {
|
|
104
|
-
db?.close();
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
/** `pending` while a tab holds the attempt (a waiter's shared hold is not one); the durable record otherwise. */
|
|
108
|
-
const status = async (name) => {
|
|
109
|
-
const { held = [] } = await locks().query();
|
|
110
|
-
return held.some((lock) => lock.name === migrationBcRoom(name) && lock.mode !== 'shared')
|
|
111
|
-
? { v: 1, status: 'pending' }
|
|
112
|
-
: stored(name);
|
|
113
|
-
};
|
|
114
|
-
/** Resolve with the durable record once no tab holds the attempt. */
|
|
115
|
-
const waitForSettled = (name) => locks().request(migrationBcRoom(name), { mode: 'shared' }, () => stored(name));
|
|
116
|
-
/** One attempt, run while holding the lock. */
|
|
117
|
-
const attempt = async (name, { sourceName = name, force = false, onPhase }) => {
|
|
118
|
-
await onPhase?.('claim');
|
|
119
|
-
const db = await openContainer(generationDbName(name));
|
|
120
|
-
try {
|
|
121
|
-
const record = await readRecord(db);
|
|
122
|
-
if (!force && record.status === 'active')
|
|
123
|
-
return { status: 'active', alreadyActive: true };
|
|
124
|
-
if (!force && record.status === 'rolledback')
|
|
125
|
-
return { status: 'rolledback' };
|
|
126
|
-
/** Progress, atomically: the appended row (if any) and the record. */
|
|
127
|
-
const commit = async (next, row) => {
|
|
128
|
-
const [updates, custom] = idb.transact(db, [UPDATES, CUSTOM]);
|
|
129
|
-
try {
|
|
130
|
-
await verifyOrStamp(name, updates, custom);
|
|
131
|
-
if (row)
|
|
132
|
-
await idb.addAutoKey(updates, encodeRow(row));
|
|
133
|
-
await idb.rtop(custom.put({ v: 1, ...next }, MIGRATION_KEY));
|
|
134
|
-
}
|
|
135
|
-
catch (error) {
|
|
136
|
-
try {
|
|
137
|
-
updates.transaction.abort();
|
|
138
|
-
}
|
|
139
|
-
catch {
|
|
140
|
-
// Already finished — the failed request aborted it.
|
|
141
|
-
}
|
|
142
|
-
throw error;
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
const failed = async (error) => {
|
|
146
|
-
await commit({ status: 'failed', error, migratedAt: Date.now() });
|
|
147
|
-
return { status: 'failed', error };
|
|
148
|
-
};
|
|
149
|
-
await onPhase?.('read');
|
|
150
|
-
const rows = await readLegacyRows(sourceName);
|
|
151
|
-
const sourceRows = rows.length;
|
|
152
|
-
if (sourceRows === 0) {
|
|
153
|
-
await onPhase?.('persist');
|
|
154
|
-
await commit({ status: 'active', migratedAt: Date.now(), sourceRows, sourceBytes: 0 });
|
|
155
|
-
return { status: 'active', empty: true, sourceRows };
|
|
156
|
-
}
|
|
157
|
-
await onPhase?.('materialize');
|
|
158
|
-
let legacy;
|
|
159
|
-
try {
|
|
160
|
-
// Throws PendingLegacyUpdatesError when rows carry structs whose
|
|
161
|
-
// deps never landed — a truncated document must not activate.
|
|
162
|
-
// Every string becomes well-formed UTF-16 (F2-M1), as the wire
|
|
163
|
-
// would deliver it, so verify compares normalized JSON.
|
|
164
|
-
legacy = sanitizeWireJson(reader.readLegacyJSON(rows));
|
|
165
|
-
}
|
|
166
|
-
catch (error) {
|
|
167
|
-
return failed(`legacy decode failed: ${error.message}`);
|
|
168
|
-
}
|
|
169
|
-
const json = { children: legacy.children.map((b, i) => withFallbackIds(b, `${i}`)) };
|
|
170
|
-
await onPhase?.('rebuild');
|
|
171
|
-
const doc = keepingReplaced(new Y.Doc());
|
|
172
|
-
if (force) {
|
|
173
|
-
const [updates, custom] = idb.transact(db, [UPDATES, CUSTOM]);
|
|
174
|
-
await verifyOrStamp(name, updates, custom);
|
|
175
|
-
// Rows first (one transaction), then inflate: a snapshot row is v2, maybe gzip.
|
|
176
|
-
for (const row of await idb.getAll(updates)) {
|
|
177
|
-
const update = await readRow(row);
|
|
178
|
-
if (update instanceof Uint8Array)
|
|
179
|
-
Y.applyUpdate(doc, update);
|
|
180
|
-
else
|
|
181
|
-
Y.applyUpdateV2(doc, update.v2);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
const base = Y.encodeStateVector(doc);
|
|
185
|
-
edytorDoc.restore(asEngineDoc(doc), json.children.map((b) => jsonBlockToSpec(b)));
|
|
186
|
-
const update = Y.encodeStateAsUpdate(doc);
|
|
187
|
-
await onPhase?.('verify');
|
|
188
|
-
const check = keepingReplaced(new Y.Doc());
|
|
189
|
-
Y.applyUpdate(check, update);
|
|
190
|
-
if (!f.equalityDeep(edytorDoc.create(asEngineDoc(check)).toJSON(), json)) {
|
|
191
|
-
return failed('verification failed: migrated document does not reproduce the legacy logical JSON');
|
|
192
|
-
}
|
|
193
|
-
await onPhase?.('persist');
|
|
194
|
-
const sourceBytes = rows.reduce((n, r) => n + r.byteLength, 0);
|
|
195
|
-
await commit({ status: 'active', migratedAt: Date.now(), sourceRows, sourceBytes }, Y.encodeStateAsUpdate(doc, base));
|
|
196
|
-
return { status: 'active', doc, update, json, sourceRows };
|
|
197
|
-
}
|
|
198
|
-
finally {
|
|
199
|
-
db.close();
|
|
200
|
-
}
|
|
201
|
-
};
|
|
202
|
-
/**
|
|
203
|
-
* Run the migration for logical document `name`: `active` already →
|
|
204
|
-
* `{alreadyActive: true}`; `rolledback` → `{status: 'rolledback'}` unless
|
|
205
|
-
* `force`; another tab mid-attempt → queue behind it (`wait: false` →
|
|
206
|
-
* `busy`); otherwise import, verify and commit.
|
|
207
|
-
*/
|
|
208
|
-
const migrate = (name, options = {}) => locks().request(migrationBcRoom(name), { ifAvailable: options.wait === false }, (lock) => lock === null ? { status: 'busy' } : attempt(name, options));
|
|
209
|
-
/**
|
|
210
|
-
* Roll back: mark the generation `rolledback` and clear its rows. The
|
|
211
|
-
* legacy database is untouched, so a v13 stack works again on its own
|
|
212
|
-
* data; a later `migrate` needs `force` — rollback is an operator decision.
|
|
213
|
-
*/
|
|
214
|
-
const rollback = async (name) => {
|
|
215
|
-
const db = await openContainer(generationDbName(name));
|
|
216
|
-
try {
|
|
217
|
-
const [updates, custom] = idb.transact(db, [UPDATES, CUSTOM]);
|
|
218
|
-
const record = { v: 1, status: 'rolledback', rolledbackAt: Date.now() };
|
|
219
|
-
await idb.rtop(custom.put(record, MIGRATION_KEY));
|
|
220
|
-
await idb.rtop(updates.clear());
|
|
221
|
-
}
|
|
222
|
-
finally {
|
|
223
|
-
db.close();
|
|
224
|
-
}
|
|
225
|
-
};
|
|
226
|
-
return { migrate, rollback, status, waitForSettled };
|
|
227
|
-
};
|
package/dist/crdt/nodes.d.ts
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Typed node surface — `document.block(id)` handles over the semantic
|
|
3
|
-
* model. Each handle is a thin dead-safe wrapper: ops delegate to the
|
|
4
|
-
* facade's ownership-aware operations and return its {@link OpResult}
|
|
5
|
-
* (`refused` on absent/merged ids).
|
|
6
|
-
*
|
|
7
|
-
* Handles are transaction-aware: `childIds()` etc. reflect mutations made
|
|
8
|
-
* earlier in the same transaction.
|
|
9
|
-
* What is COMMIT-BOUND is PUBLICATION: the change report and
|
|
10
|
-
* `onChange` fire once per completed transaction with the final coherent
|
|
11
|
-
* state — a mid-transaction read never publishes a partial snapshot, and
|
|
12
|
-
* a change-then-revert transaction publishes nothing.
|
|
13
|
-
*
|
|
14
|
-
* Snapshot isolation: item `marks`/`data` payloads on `items`,
|
|
15
|
-
* `project()`, `runs` and `DocChange` content are canonical deep-frozen
|
|
16
|
-
* objects — mutating a returned snapshot throws (strict mode) or lands on
|
|
17
|
-
* a frozen shared instance, never on live engine state.
|
|
18
|
-
*
|
|
19
|
-
* The read half is deliberately narrow — the consumed set: identity
|
|
20
|
-
* (`id`, `document`), the per-block attribution record, the two content views
|
|
21
|
-
* (transaction-aware `items`, commit-synced `runs`), `length` and
|
|
22
|
-
* `childIds`. Richer structure reads (positions, paths, roles, anchors)
|
|
23
|
-
* live on the facade (`positionOf`/`pathOf`/`isVoid`/`anchorAt`/…).
|
|
24
|
-
*/
|
|
25
|
-
import type { BlockId, BlockSpec, ContentItem, InlineSpec, SplitTail } from './placement/model.js';
|
|
26
|
-
import type { ContentRun } from './text/runs.js';
|
|
27
|
-
import type { EdytorDoc, OpResult } from './edytor-doc.js';
|
|
28
|
-
import type { DocumentOperations, DocumentWrites } from './operations.js';
|
|
29
|
-
import type { BlockAttribution } from './attribution/block.js';
|
|
30
|
-
/** A node argument: another block handle, a raw block id, or `null` for the root list. */
|
|
31
|
-
export type NodeRef = DocBlock | BlockId | null;
|
|
32
|
-
/**
|
|
33
|
-
* Typed handle over one document block. Handles are dead-safe: constructing
|
|
34
|
-
* one for an absent/merged id is legal — ops are `refused` (the underlying
|
|
35
|
-
* facade ops guard the same way).
|
|
36
|
-
*
|
|
37
|
-
* Read members are getters — every access re-derives from current doc state,
|
|
38
|
-
* so a handle obtained before a mutation sees the mutation afterwards
|
|
39
|
-
* (including within the same transaction).
|
|
40
|
-
*/
|
|
41
|
-
export type DocBlock = {
|
|
42
|
-
/** Stable caller-assigned block id. */
|
|
43
|
-
readonly id: BlockId;
|
|
44
|
-
/** The owning document — cross-node and document-level ops live here. */
|
|
45
|
-
readonly document: DocumentOperations;
|
|
46
|
-
/**
|
|
47
|
-
* Compact per-block attribution (`{createdBy, contributors,
|
|
48
|
-
* lastChangedBy}` as durable actor ids), or `undefined` for
|
|
49
|
-
* system/foreign blocks carrying no record. Read live per access.
|
|
50
|
-
*/
|
|
51
|
-
readonly attribution: BlockAttribution | undefined;
|
|
52
|
-
/**
|
|
53
|
-
* Resolved content items of this block's display ({kind:'text'} runs and
|
|
54
|
-
* {kind:'inline'} atoms in display order, unmerged across streams).
|
|
55
|
-
* Reflects writes made earlier in the same transaction.
|
|
56
|
-
*/
|
|
57
|
-
readonly items: readonly ContentItem[];
|
|
58
|
-
/** Display length in atoms (UTF-16 text units + 1 per inline atom). */
|
|
59
|
-
readonly length: number;
|
|
60
|
-
/**
|
|
61
|
-
* The maintained run view for this block — frozen, structurally shared
|
|
62
|
-
* run arrays refreshed at transaction commit. Rendering and `DocChange`
|
|
63
|
-
* payloads consume this; command code should use {@link items} (the
|
|
64
|
-
* transaction-aware view) when reading mid-transaction.
|
|
65
|
-
*/
|
|
66
|
-
readonly runs: readonly ContentRun[];
|
|
67
|
-
/** Ordered visible child ids. */
|
|
68
|
-
childIds(): BlockId[];
|
|
69
|
-
insertText(offset: number, text: string, marks?: Record<string, unknown>): OpResult;
|
|
70
|
-
deleteText(offset: number, length: number): OpResult;
|
|
71
|
-
/** Multi-mark format over `[offset, offset+length)`; `null` values unset. */
|
|
72
|
-
format(offset: number, length: number, marks: Record<string, unknown>): OpResult;
|
|
73
|
-
setMark(offset: number, length: number, name: string, value: unknown): OpResult;
|
|
74
|
-
unsetMark(offset: number, length: number, name: string): OpResult;
|
|
75
|
-
/** Remove every mark present anywhere in the range. */
|
|
76
|
-
clearMarks(offset: number, length: number): OpResult;
|
|
77
|
-
insertInline(offset: number, spec: InlineSpec): OpResult;
|
|
78
|
-
removeInline(inlineId: string): OpResult;
|
|
79
|
-
setInlineData(inlineId: string, data: Record<string, unknown>): OpResult;
|
|
80
|
-
/** Insert a fresh-identity child spec; `ids`: the new block. */
|
|
81
|
-
insertChild(index: number, spec: BlockSpec): OpResult;
|
|
82
|
-
/** Relocate this block — identity preserved; island/void rules apply. */
|
|
83
|
-
moveTo(dest: {
|
|
84
|
-
parent: NodeRef;
|
|
85
|
-
index: number;
|
|
86
|
-
}): OpResult;
|
|
87
|
-
/** Move to the last position under `parent`. */
|
|
88
|
-
nestUnder(parent: DocBlock | BlockId): OpResult;
|
|
89
|
-
/** Move beside the parent (index = parent index + 1). */
|
|
90
|
-
unNest(): OpResult;
|
|
91
|
-
/** Split content at display `offset` into a new sibling `newId`; `ids`: the new block. */
|
|
92
|
-
split(offset: number, newId: BlockId, tail?: SplitTail): OpResult;
|
|
93
|
-
/** Baseline merge into the previous block in document order (a list's first item lifts out instead); `ids`: the survivor. */
|
|
94
|
-
mergeBackward(): OpResult;
|
|
95
|
-
/** Baseline merge pulling the next block in document order into this (a list passes its first item). */
|
|
96
|
-
mergeForward(): OpResult;
|
|
97
|
-
/** Engine merge primitive — `other`'s content+children claim into this. */
|
|
98
|
-
mergeFrom(other: DocBlock | BlockId): OpResult;
|
|
99
|
-
/** Delete (per-writer marks on this block and what it displays); the children take its slot unless `keepChildren: false`. */
|
|
100
|
-
delete(opts?: {
|
|
101
|
-
keepChildren?: boolean;
|
|
102
|
-
}): OpResult;
|
|
103
|
-
setType(type: string): OpResult;
|
|
104
|
-
setData(data: Record<string, unknown>): OpResult;
|
|
105
|
-
/** Baseline `setBlock` — type/data update in place; content/children replace (all-or-nothing). */
|
|
106
|
-
set(value: Parameters<DocumentWrites['setBlock']>[1]): OpResult;
|
|
107
|
-
/**
|
|
108
|
-
* Fresh-identity copy of this subtree right after it; `freshId` names each
|
|
109
|
-
* copied block and inline atom (an unanswered atom id is minted, an
|
|
110
|
-
* unanswered block id refuses); `ids`: the copy.
|
|
111
|
-
*/
|
|
112
|
-
duplicate(freshId: (oldId: string, kind: 'block' | 'inline') => string): OpResult;
|
|
113
|
-
};
|
|
114
|
-
/**
|
|
115
|
-
* Build the `document.block(id)` node surface over an existing facade —
|
|
116
|
-
* one cached handle per id (the facade normalized it at ingress), all
|
|
117
|
-
* delegating to the facade's semantic ops.
|
|
118
|
-
*/
|
|
119
|
-
export declare const bindNodes: (doc: EdytorDoc) => {
|
|
120
|
-
block: (id: BlockId) => DocBlock;
|
|
121
|
-
};
|
package/dist/crdt/nodes.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
const idOf = (ref) => ref == null ? null : typeof ref === 'string' ? ref : ref.id;
|
|
2
|
-
/**
|
|
3
|
-
* Build the `document.block(id)` node surface over an existing facade —
|
|
4
|
-
* one cached handle per id (the facade normalized it at ingress), all
|
|
5
|
-
* delegating to the facade's semantic ops.
|
|
6
|
-
*/
|
|
7
|
-
export const bindNodes = (doc) => {
|
|
8
|
-
const cache = new Map();
|
|
9
|
-
const block = (id) => {
|
|
10
|
-
const cached = cache.get(id);
|
|
11
|
-
if (cached)
|
|
12
|
-
return cached;
|
|
13
|
-
const handle = {
|
|
14
|
-
id,
|
|
15
|
-
document: doc,
|
|
16
|
-
get attribution() {
|
|
17
|
-
return doc.blockAttribution(id);
|
|
18
|
-
},
|
|
19
|
-
get items() {
|
|
20
|
-
return doc.contentItems(id);
|
|
21
|
-
},
|
|
22
|
-
get length() {
|
|
23
|
-
return doc.displayLength(id);
|
|
24
|
-
},
|
|
25
|
-
get runs() {
|
|
26
|
-
return doc.runs(id);
|
|
27
|
-
},
|
|
28
|
-
childIds: () => doc.childrenIds(id),
|
|
29
|
-
insertText: (offset, text, marks) => doc.insertText(id, offset, text, marks),
|
|
30
|
-
deleteText: (offset, length) => doc.deleteText(id, offset, length),
|
|
31
|
-
format: (offset, length, marks) => doc.formatRange(id, offset, length, marks),
|
|
32
|
-
setMark: (offset, length, name, value) => doc.setMark(id, offset, length, name, value),
|
|
33
|
-
unsetMark: (offset, length, name) => doc.unsetMark(id, offset, length, name),
|
|
34
|
-
clearMarks: (offset, length) => doc.clearMarks(id, offset, length),
|
|
35
|
-
insertInline: (offset, spec) => doc.insertInline(id, offset, spec),
|
|
36
|
-
removeInline: (inlineId) => doc.removeInline(id, inlineId),
|
|
37
|
-
setInlineData: (inlineId, data) => doc.setInlineData(id, inlineId, data),
|
|
38
|
-
insertChild: (index, spec) => doc.insertBlock({ parent: id, index }, spec),
|
|
39
|
-
moveTo: (dest) => doc.moveBlock(id, { parent: idOf(dest.parent), index: dest.index }),
|
|
40
|
-
nestUnder: (parent) => doc.nestBlock(id, idOf(parent)),
|
|
41
|
-
unNest: () => doc.unNestBlock(id),
|
|
42
|
-
split: (offset, newId, tail) => doc.splitBlock(id, offset, newId, tail),
|
|
43
|
-
mergeBackward: () => doc.mergeBackward(id),
|
|
44
|
-
mergeForward: () => doc.mergeForward(id),
|
|
45
|
-
mergeFrom: (other) => doc.mergeBlocks(idOf(other), id),
|
|
46
|
-
delete: (opts) => doc.deleteBlock(id, opts),
|
|
47
|
-
setType: (type) => doc.setBlockType(id, type),
|
|
48
|
-
setData: (data) => doc.setBlockData(id, data),
|
|
49
|
-
set: (value) => doc.setBlock(id, value),
|
|
50
|
-
duplicate: (freshId) => doc.duplicateBlock(id, freshId)
|
|
51
|
-
};
|
|
52
|
-
cache.set(id, handle);
|
|
53
|
-
return handle;
|
|
54
|
-
};
|
|
55
|
-
return { block };
|
|
56
|
-
};
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { IndexAnchored } from './anchored.js';
|
|
2
|
-
import type { IndexCache } from './cache.js';
|
|
3
|
-
import type { IndexClaims } from './claims.js';
|
|
4
|
-
import type { IndexFold } from './fold.js';
|
|
5
|
-
import type { IndexLayout } from './layout.js';
|
|
6
|
-
import type { IndexPlacement } from './placement.js';
|
|
7
|
-
import type { IndexReporter } from './report.js';
|
|
8
|
-
import type { IndexState, Published } from './state.js';
|
|
9
|
-
import type { IndexStreams } from './streams.js';
|
|
10
|
-
/** The self-checks of one doc's index, over every part they compare. */
|
|
11
|
-
export declare const indexSelfChecks: (ix: IndexState & IndexClaims & IndexStreams & IndexAnchored & IndexLayout & IndexPlacement & IndexCache & IndexFold & IndexReporter) => {
|
|
12
|
-
check: () => void;
|
|
13
|
-
checkPublished: (pub: Published) => void;
|
|
14
|
-
};
|
|
15
|
-
export type IndexSelfChecks = ReturnType<typeof indexSelfChecks>;
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The index's self-checks (`indexChecks`, on in the test lanes): after every
|
|
3
|
-
* fold each fact the index maintains incrementally equals its rebuild from
|
|
4
|
-
* the replicated state, and after every report the published tree equals a
|
|
5
|
-
* fresh walk; the first difference throws.
|
|
6
|
-
*/
|
|
7
|
-
import { sameIds } from '../../../utils/json.js';
|
|
8
|
-
import { childrenIndex, displayIndex, resolvePlacements } from '../../placement/model.js';
|
|
9
|
-
import { DEAD, claimGraph, cmpStamp, delimiters, placeText, scanText } from '../model.js';
|
|
10
|
-
import { sameRow } from '../rows.js';
|
|
11
|
-
import { keyOf } from './shared.js';
|
|
12
|
-
/** The self-checks of one doc's index, over every part they compare. */
|
|
13
|
-
export const indexSelfChecks = (ix) => {
|
|
14
|
-
const { blocks, displaysMap, rows, streamIx, placementsMap, following, cache, dirty, ownerOf, streamOf, sameClaims, targetOf, dissolve, ranker, ownShim, own0, noteFollowing, ensurePlacements, computeFresh, unfolded, reachable } = ix;
|
|
15
|
-
/** {@link indexChecks}: every incrementally maintained fact equals its rebuild. */
|
|
16
|
-
const check = () => {
|
|
17
|
-
// A queued transaction whose writes this fold has not seen yet
|
|
18
|
-
// (a follow-up a cleanup started): the index lags it until its
|
|
19
|
-
// own fold, so there is nothing to compare yet.
|
|
20
|
-
if (unfolded())
|
|
21
|
-
return;
|
|
22
|
-
const fail = (what) => {
|
|
23
|
-
throw new Error(`[edytor index] ${what} differs from its rebuild`);
|
|
24
|
-
};
|
|
25
|
-
const scans = new Map();
|
|
26
|
-
for (const rec of blocks.values())
|
|
27
|
-
if (rec.content)
|
|
28
|
-
scans.set(rec.id, scanText(rec.id, rec.content));
|
|
29
|
-
for (const home of rows.keys())
|
|
30
|
-
if (!scans.has(home))
|
|
31
|
-
fail(`row ${home}`);
|
|
32
|
-
for (const [home, scan] of scans) {
|
|
33
|
-
const row = rows.get(home);
|
|
34
|
-
if (row === undefined || row.text !== scan.text || !sameRow(row, scan))
|
|
35
|
-
fail(`row ${home}`);
|
|
36
|
-
}
|
|
37
|
-
const want = delimiters(blocks, scans.values());
|
|
38
|
-
if (want.size !== ix.delim.size || [...want].some(([b, k]) => ix.delim.get(b) !== k))
|
|
39
|
-
fail('delimiters');
|
|
40
|
-
const streamSig = (st) => st && `${st.home}:${st.start}-${st.end}/${st.inert.join(',')}`;
|
|
41
|
-
const placed = new Set();
|
|
42
|
-
for (const [home, scan] of scans)
|
|
43
|
-
for (const st of placeText(scan, want)) {
|
|
44
|
-
placed.add(st.block);
|
|
45
|
-
if (streamSig(streamOf(st.block)) !== streamSig(st))
|
|
46
|
-
fail(`stream of ${st.block} in ${home}`);
|
|
47
|
-
}
|
|
48
|
-
for (const b of streamIx.keys())
|
|
49
|
-
if (!placed.has(b))
|
|
50
|
-
fail(`stream of ${b}`);
|
|
51
|
-
// The anchored claims (`merge.claim.anchor`): each record's effective claims, from scratch.
|
|
52
|
-
{
|
|
53
|
-
const moved = new Map();
|
|
54
|
-
const stays = new Map();
|
|
55
|
-
for (const [h, rec] of blocks) {
|
|
56
|
-
const list = rec.listClaims ?? rec.claims;
|
|
57
|
-
const own = [];
|
|
58
|
-
for (const c of list) {
|
|
59
|
-
const [t] = targetOf(h, c);
|
|
60
|
-
if (t === h)
|
|
61
|
-
own.push(c);
|
|
62
|
-
else {
|
|
63
|
-
let into = moved.get(t);
|
|
64
|
-
if (into === undefined)
|
|
65
|
-
moved.set(t, (into = []));
|
|
66
|
-
into.push({ ...c, holder: h });
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
stays.set(h, own);
|
|
70
|
-
}
|
|
71
|
-
for (const [b, rec] of blocks) {
|
|
72
|
-
const extra = (moved.get(b) ?? []).sort((x, y) => cmpStamp(x.stamp, y.stamp));
|
|
73
|
-
if (!sameClaims(rec.claims, [...stays.get(b), ...extra]))
|
|
74
|
-
fail(`claims of ${b}`);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
for (const [b, c] of cache) {
|
|
78
|
-
if (dirty.has(b))
|
|
79
|
-
continue;
|
|
80
|
-
const fresh = computeFresh(b).fresh;
|
|
81
|
-
if (keyOf(fresh) !== keyOf(c.runs))
|
|
82
|
-
fail(`runs of ${b}`);
|
|
83
|
-
}
|
|
84
|
-
// The claim graph, placements, children index and layout rules.
|
|
85
|
-
ensurePlacements();
|
|
86
|
-
const graph = claimGraph(blocks);
|
|
87
|
-
for (const b of blocks.keys()) {
|
|
88
|
-
if (ownerOf(b) !== (graph.owners.get(b) ?? DEAD))
|
|
89
|
-
fail(`owner of ${b}`);
|
|
90
|
-
if (ownShim.top(b) !== graph.top.get(b))
|
|
91
|
-
fail(`top of ${b}`);
|
|
92
|
-
}
|
|
93
|
-
const shown = displayIndex(blocks, ownerOf);
|
|
94
|
-
for (const [o, list] of shown)
|
|
95
|
-
if (list.length !== (displaysMap.get(o)?.size ?? 0) ||
|
|
96
|
-
list.some((b) => !displaysMap.get(o).has(b)))
|
|
97
|
-
fail(`displays of ${o}`);
|
|
98
|
-
for (const o of displaysMap.keys())
|
|
99
|
-
if (!shown.has(o))
|
|
100
|
-
fail(`displays of ${o}`);
|
|
101
|
-
const resolved = resolvePlacements(blocks, ownerOf);
|
|
102
|
-
if (resolved.size !== placementsMap.size)
|
|
103
|
-
fail('placements');
|
|
104
|
-
for (const [b, pl] of resolved) {
|
|
105
|
-
const mine = placementsMap.get(b);
|
|
106
|
-
if (mine?.parent !== pl.parent || mine.rank !== pl.rank)
|
|
107
|
-
fail(`placement of ${b}`);
|
|
108
|
-
}
|
|
109
|
-
const same = (x, y) => x.size === y.size && [...x].every(([p, l]) => keyOf(l) === keyOf(y.get(p) ?? null));
|
|
110
|
-
// The text orders decided afresh: a stale one shows as a slot mismatch.
|
|
111
|
-
ranker.forget();
|
|
112
|
-
const k0 = childrenIndex(placementsMap, own0);
|
|
113
|
-
if (!same(k0, ix.kids0))
|
|
114
|
-
fail('children index (before the layout rules)');
|
|
115
|
-
const out = dissolve(k0);
|
|
116
|
-
if (out.size !== ix.dissolved.size || [...out].some((b) => !ix.dissolved.has(b)))
|
|
117
|
-
fail('dissolved');
|
|
118
|
-
if (!same(childrenIndex(placementsMap, ownShim), ix.kidsMap))
|
|
119
|
-
fail('children index');
|
|
120
|
-
for (const [p, l] of ix.kidsMap)
|
|
121
|
-
for (const { id, rank, reset } of l) {
|
|
122
|
-
const slot = ix.slots.get(id);
|
|
123
|
-
if (slot?.parent !== p || slot.rank !== rank || slot.reset !== reset)
|
|
124
|
-
fail(`slot of ${id}`);
|
|
125
|
-
}
|
|
126
|
-
const follow = new Set(following);
|
|
127
|
-
for (const id of ix.slots.keys())
|
|
128
|
-
noteFollowing(id);
|
|
129
|
-
if (follow.size !== following.size || [...follow].some((b) => !following.has(b)))
|
|
130
|
-
fail('following');
|
|
131
|
-
};
|
|
132
|
-
/** {@link indexChecks}: the published tree the report advanced equals a fresh walk. */
|
|
133
|
-
const checkPublished = (pub) => {
|
|
134
|
-
// Payloads from the published nodes: the check reads no runs.
|
|
135
|
-
const want = reachable(pub.nodes);
|
|
136
|
-
const fail = (what) => {
|
|
137
|
-
throw new Error(`[edytor index] published ${what} differs from its rebuild`);
|
|
138
|
-
};
|
|
139
|
-
if (want.order.size !== pub.order.size)
|
|
140
|
-
fail('lists');
|
|
141
|
-
for (const [p, ids] of want.order)
|
|
142
|
-
if (!sameIds(ids, pub.order.get(p) ?? []))
|
|
143
|
-
fail(`list of ${p}`);
|
|
144
|
-
if (want.nodes.size !== pub.nodes.size)
|
|
145
|
-
fail('blocks');
|
|
146
|
-
for (const [id, n] of want.nodes) {
|
|
147
|
-
const m = pub.nodes.get(id);
|
|
148
|
-
if (m?.parent !== n.parent || m.index !== n.index)
|
|
149
|
-
fail(`slot of ${id}`);
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
return {
|
|
153
|
-
check,
|
|
154
|
-
checkPublished
|
|
155
|
-
};
|
|
156
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* General event handler implementation.
|
|
3
|
-
*
|
|
4
|
-
* @template ARG0, ARG1
|
|
5
|
-
*
|
|
6
|
-
* @private
|
|
7
|
-
*/
|
|
8
|
-
export class EventHandler<ARG0, ARG1> {
|
|
9
|
-
/**
|
|
10
|
-
* @type {Array<function(ARG0, ARG1):void>}
|
|
11
|
-
*/
|
|
12
|
-
l: Array<(arg0: ARG0, arg1: ARG1) => void>;
|
|
13
|
-
}
|
|
14
|
-
export function createEventHandler<ARG0, ARG1>(): EventHandler<ARG0, ARG1>;
|
|
15
|
-
export function addEventHandlerListener<ARG0, ARG1>(eventHandler: EventHandler<ARG0, ARG1>, f: (arg0: ARG0, arg1: ARG1) => void): number;
|
|
16
|
-
export function removeEventHandlerListener<ARG0, ARG1>(eventHandler: EventHandler<ARG0, ARG1>, f: (arg0: ARG0, arg1: ARG1) => void): void;
|
|
17
|
-
export function callEventHandlerListeners<ARG0, ARG1>(eventHandler: EventHandler<ARG0, ARG1>, arg0: ARG0, arg1: ARG1): void;
|