@nice2dev/ui-graphics 1.3.15 → 1.3.17
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/CHANGELOG.md +13 -0
- package/dist/cjs/animation/AnimatedPerson.js +470 -143
- package/dist/cjs/animation/AnimationEditor.js +289 -101
- package/dist/cjs/animation/Audience.js +83 -61
- package/dist/cjs/animation/BodyRenderer.js +69 -28
- package/dist/cjs/animation/animationHelper.js +281 -288
- package/dist/cjs/animation/characterTypes.js +200 -203
- package/dist/cjs/animation/choreoDSL.js +205 -219
- package/dist/cjs/animation/choreography.js +4 -32
- package/dist/cjs/animation/karaokeIntegration.js +68 -77
- package/dist/cjs/animation/lottieExport.js +108 -114
- package/dist/cjs/animation/motionPath.js +225 -248
- package/dist/cjs/animation/physics.js +227 -254
- package/dist/cjs/animation/rig/RigPlayer.js +53 -56
- package/dist/cjs/animation/rig/RiggedBody.js +71 -26
- package/dist/cjs/animation/rig/choreoRigBridge.js +72 -77
- package/dist/cjs/animation/rig/ik.js +13 -18
- package/dist/cjs/animation/rig/poseOps.js +34 -41
- package/dist/cjs/animation/rig/presets.js +64 -72
- package/dist/cjs/animation/rig/rigMath.js +25 -32
- package/dist/cjs/animation/rig/rigTypes.js +59 -63
- package/dist/cjs/animation/shapes/arms.js +31 -13
- package/dist/cjs/animation/shapes/eyes.js +129 -47
- package/dist/cjs/animation/shapes/hair.js +72 -45
- package/dist/cjs/animation/shapes/heads.js +131 -57
- package/dist/cjs/animation/shapes/headwear.js +47 -38
- package/dist/cjs/animation/shapes/legs.js +31 -13
- package/dist/cjs/animation/shapes/mouths.js +120 -44
- package/dist/cjs/animation/shapes/noses.js +80 -25
- package/dist/cjs/animation/shapes/outfits.js +101 -39
- package/dist/cjs/animation/shapes/torsos.js +15 -11
- package/dist/cjs/animation/spineExport.js +103 -121
- package/dist/cjs/core/LocalUI.js +108 -43
- package/dist/cjs/core/NiceBrushEngine.js +758 -552
- package/dist/cjs/core/collaboration.js +249 -251
- package/dist/cjs/core/colorBlindness.js +100 -115
- package/dist/cjs/core/dragDrop.js +155 -158
- package/dist/cjs/core/editorAsk.js +51 -41
- package/dist/cjs/core/fixes.js +140 -171
- package/dist/cjs/core/gridGuides.js +166 -201
- package/dist/cjs/core/historyVisual.js +156 -135
- package/dist/cjs/core/i18n.js +13 -14
- package/dist/cjs/core/integrations.js +238 -249
- package/dist/cjs/core/minimap.js +149 -151
- package/dist/cjs/core/plugins.js +98 -113
- package/dist/cjs/core/rtl.js +71 -83
- package/dist/cjs/core/shortcuts.js +196 -225
- package/dist/cjs/core/theme.js +142 -149
- package/dist/cjs/core/yjsCollaboration.js +232 -293
- package/dist/cjs/design/design-tools.js +12 -22
- package/dist/cjs/font/NiceFontEditor.js +877 -316
- package/dist/cjs/font/fontFormatUtils.js +388 -448
- package/dist/cjs/game/GameAsset2dEditor.js +1201 -392
- package/dist/cjs/game/GameAsset2dEditor.module.css.js +146 -5
- package/dist/cjs/game/gameAssetTypes.js +7 -16
- package/dist/cjs/game/gameAssetUtils.js +390 -413
- package/dist/cjs/game/useGameAssetEditor.js +820 -763
- package/dist/cjs/index.js +81 -84
- package/dist/cjs/nice2dev-ui-graphics.css +1 -1
- package/dist/cjs/node_modules/lib0/array.js +8 -70
- package/dist/cjs/node_modules/lib0/binary.js +3 -20
- package/dist/cjs/node_modules/lib0/broadcastchannel.js +24 -86
- package/dist/cjs/node_modules/lib0/buffer.js +15 -82
- package/dist/cjs/node_modules/lib0/conditions.js +3 -16
- package/dist/cjs/node_modules/lib0/decoding.js +108 -287
- package/dist/cjs/node_modules/lib0/dom.js +14 -44
- package/dist/cjs/node_modules/lib0/encoding.js +68 -418
- package/dist/cjs/node_modules/lib0/environment.js +26 -92
- package/dist/cjs/node_modules/lib0/error.js +5 -29
- package/dist/cjs/node_modules/lib0/function.js +27 -66
- package/dist/cjs/node_modules/lib0/iterator.js +8 -33
- package/dist/cjs/node_modules/lib0/logging.common.js +12 -22
- package/dist/cjs/node_modules/lib0/logging.js +32 -71
- package/dist/cjs/node_modules/lib0/map.js +16 -86
- package/dist/cjs/node_modules/lib0/math.js +3 -32
- package/dist/cjs/node_modules/lib0/number.js +4 -15
- package/dist/cjs/node_modules/lib0/object.js +14 -88
- package/dist/cjs/node_modules/lib0/observable.js +38 -78
- package/dist/cjs/node_modules/lib0/pair.js +3 -20
- package/dist/cjs/node_modules/lib0/prng.js +8 -77
- package/dist/cjs/node_modules/lib0/promise.js +6 -30
- package/dist/cjs/node_modules/lib0/random.js +8 -23
- package/dist/cjs/node_modules/lib0/schema.js +313 -687
- package/dist/cjs/node_modules/lib0/set.js +3 -10
- package/dist/cjs/node_modules/lib0/storage.js +20 -55
- package/dist/cjs/node_modules/lib0/string.js +17 -72
- package/dist/cjs/node_modules/lib0/symbol.js +2 -12
- package/dist/cjs/node_modules/lib0/time.js +2 -15
- package/dist/cjs/node_modules/lib0/trait/equality.js +3 -28
- package/dist/cjs/node_modules/lib0/url.js +4 -18
- package/dist/cjs/node_modules/lib0/webcrypto.js +2 -5
- package/dist/cjs/node_modules/y-protocols/auth.js +5 -19
- package/dist/cjs/node_modules/y-protocols/awareness.js +53 -116
- package/dist/cjs/node_modules/y-protocols/sync.js +16 -103
- package/dist/cjs/node_modules/y-websocket/src/y-websocket.js +77 -219
- package/dist/cjs/node_modules/yjs/dist/yjs.js +2128 -4868
- package/dist/cjs/photo/FilterThumb.js +37 -25
- package/dist/cjs/photo/NiceAITools.js +679 -467
- package/dist/cjs/photo/PhotoEditor.js +34 -20
- package/dist/cjs/photo/PhotoEditor.module.css.js +296 -5
- package/dist/cjs/photo/PhotoEditorCanvas.js +250 -91
- package/dist/cjs/photo/PhotoEditorLeftPanel.js +1086 -224
- package/dist/cjs/photo/PhotoEditorToolbar.js +135 -19
- package/dist/cjs/photo/photoEditorActions.js +89 -72
- package/dist/cjs/photo/photoEditorTypes.js +29 -32
- package/dist/cjs/photo/photoFilters.js +959 -985
- package/dist/cjs/photo/photoOverlays.js +899 -945
- package/dist/cjs/photo/photoSelection.js +427 -499
- package/dist/cjs/photo/usePhotoEditor.js +739 -741
- package/dist/cjs/pixel/HSVPicker.js +191 -175
- package/dist/cjs/pixel/PixelEditor.js +159 -48
- package/dist/cjs/pixel/PixelEditor.module.css.js +209 -5
- package/dist/cjs/pixel/PixelEditorCanvas.js +29 -16
- package/dist/cjs/pixel/PixelEditorMenuBar.js +160 -162
- package/dist/cjs/pixel/PixelEditorRightPanel.js +377 -45
- package/dist/cjs/pixel/PixelEditorStatusBar.js +47 -20
- package/dist/cjs/pixel/PixelEditorTimeline.js +106 -23
- package/dist/cjs/pixel/PixelEditorToolbar.js +99 -21
- package/dist/cjs/pixel/SpriteGeneratorPanel.js +483 -303
- package/dist/cjs/pixel/animalGeneratorPresets.js +776 -601
- package/dist/cjs/pixel/asepriteFormat.js +511 -560
- package/dist/cjs/pixel/buildingGeneratorPresets.js +693 -520
- package/dist/cjs/pixel/characterGeneratorPresets.js +644 -544
- package/dist/cjs/pixel/pixel-pro.js +52 -63
- package/dist/cjs/pixel/pixelEditorExports.js +388 -428
- package/dist/cjs/pixel/pixelEditorTypes.js +91 -108
- package/dist/cjs/pixel/pixelEditorUtils.js +519 -561
- package/dist/cjs/pixel/spriteGeneratorCore.js +206 -257
- package/dist/cjs/pixel/usePixelEditor.js +1321 -1343
- package/dist/cjs/texture/Nice3DTexturePainter.js +707 -440
- package/dist/cjs/ui/NiceUIDesigner.js +954 -527
- package/dist/cjs/vector/NiceSvgToCode.js +586 -446
- package/dist/cjs/vector/VectorEditor.js +290 -117
- package/dist/cjs/vector/VectorEditor.module.css.js +86 -5
- package/dist/cjs/vector/VectorEditorMenuBar.js +333 -275
- package/dist/cjs/vector/VectorEditorRightPanel.js +1094 -371
- package/dist/cjs/vector/VectorEditorShapeRenderer.js +198 -60
- package/dist/cjs/vector/VectorEditorStatusBar.js +39 -13
- package/dist/cjs/vector/useVectorEditor.js +848 -889
- package/dist/cjs/vector/vectorAnimation.js +110 -137
- package/dist/cjs/vector/vectorBooleanOps.js +398 -485
- package/dist/cjs/vector/vectorEditorExport.js +201 -203
- package/dist/cjs/vector/vectorEditorImport.js +173 -189
- package/dist/cjs/vector/vectorEditorTypes.js +42 -49
- package/dist/cjs/vector/vectorGradients.js +151 -174
- package/dist/cjs/vector/vectorIconExport.js +52 -59
- package/dist/cjs/vector/vectorIconImport.js +169 -219
- package/dist/esm/animation/AnimatedPerson.js +470 -141
- package/dist/esm/animation/AnimationEditor.js +290 -100
- package/dist/esm/animation/Audience.js +83 -59
- package/dist/esm/animation/BodyRenderer.js +71 -25
- package/dist/esm/animation/animationHelper.js +284 -287
- package/dist/esm/animation/characterTypes.js +204 -202
- package/dist/esm/animation/choreoDSL.js +212 -218
- package/dist/esm/animation/choreography.js +8 -31
- package/dist/esm/animation/karaokeIntegration.js +74 -76
- package/dist/esm/animation/lottieExport.js +112 -113
- package/dist/esm/animation/motionPath.js +235 -247
- package/dist/esm/animation/physics.js +235 -253
- package/dist/esm/animation/rig/RigPlayer.js +53 -54
- package/dist/esm/animation/rig/RiggedBody.js +71 -24
- package/dist/esm/animation/rig/choreoRigBridge.js +74 -76
- package/dist/esm/animation/rig/ik.js +14 -17
- package/dist/esm/animation/rig/poseOps.js +37 -40
- package/dist/esm/animation/rig/presets.js +70 -71
- package/dist/esm/animation/rig/rigMath.js +28 -31
- package/dist/esm/animation/rig/rigTypes.js +62 -62
- package/dist/esm/animation/shapes/arms.js +32 -12
- package/dist/esm/animation/shapes/eyes.js +135 -46
- package/dist/esm/animation/shapes/hair.js +80 -44
- package/dist/esm/animation/shapes/heads.js +140 -56
- package/dist/esm/animation/shapes/headwear.js +54 -37
- package/dist/esm/animation/shapes/legs.js +32 -12
- package/dist/esm/animation/shapes/mouths.js +127 -43
- package/dist/esm/animation/shapes/noses.js +87 -24
- package/dist/esm/animation/shapes/outfits.js +106 -38
- package/dist/esm/animation/shapes/torsos.js +16 -10
- package/dist/esm/animation/spineExport.js +106 -120
- package/dist/esm/core/LocalUI.js +111 -42
- package/dist/esm/core/NiceBrushEngine.js +761 -551
- package/dist/esm/core/collaboration.js +255 -250
- package/dist/esm/core/colorBlindness.js +106 -114
- package/dist/esm/core/dragDrop.js +157 -157
- package/dist/esm/core/editorAsk.js +53 -40
- package/dist/esm/core/fixes.js +145 -170
- package/dist/esm/core/gridGuides.js +178 -200
- package/dist/esm/core/historyVisual.js +158 -134
- package/dist/esm/core/i18n.js +15 -13
- package/dist/esm/core/integrations.js +244 -248
- package/dist/esm/core/minimap.js +151 -150
- package/dist/esm/core/plugins.js +102 -112
- package/dist/esm/core/rtl.js +77 -82
- package/dist/esm/core/shortcuts.js +200 -224
- package/dist/esm/core/theme.js +150 -148
- package/dist/esm/core/yjsCollaboration.js +240 -292
- package/dist/esm/design/design-tools.js +13 -21
- package/dist/esm/font/NiceFontEditor.js +880 -315
- package/dist/esm/font/fontFormatUtils.js +394 -447
- package/dist/esm/game/GameAsset2dEditor.js +1202 -391
- package/dist/esm/game/GameAsset2dEditor.module.css.js +146 -3
- package/dist/esm/game/gameAssetTypes.js +8 -15
- package/dist/esm/game/gameAssetUtils.js +408 -412
- package/dist/esm/game/useGameAssetEditor.js +821 -762
- package/dist/esm/index.js +332 -69
- package/dist/esm/nice2dev-ui-graphics.css +1 -1
- package/dist/esm/node_modules/lib0/array.js +15 -69
- package/dist/esm/node_modules/lib0/binary.js +14 -19
- package/dist/esm/node_modules/lib0/broadcastchannel.js +27 -85
- package/dist/esm/node_modules/lib0/buffer.js +20 -80
- package/dist/esm/node_modules/lib0/conditions.js +4 -15
- package/dist/esm/node_modules/lib0/decoding.js +128 -286
- package/dist/esm/node_modules/lib0/dom.js +20 -43
- package/dist/esm/node_modules/lib0/encoding.js +90 -415
- package/dist/esm/node_modules/lib0/environment.js +33 -91
- package/dist/esm/node_modules/lib0/error.js +8 -28
- package/dist/esm/node_modules/lib0/function.js +31 -65
- package/dist/esm/node_modules/lib0/iterator.js +11 -32
- package/dist/esm/node_modules/lib0/logging.common.js +22 -21
- package/dist/esm/node_modules/lib0/logging.js +44 -70
- package/dist/esm/node_modules/lib0/map.js +21 -85
- package/dist/esm/node_modules/lib0/math.js +9 -31
- package/dist/esm/node_modules/lib0/number.js +7 -14
- package/dist/esm/node_modules/lib0/object.js +26 -87
- package/dist/esm/node_modules/lib0/observable.js +40 -77
- package/dist/esm/node_modules/lib0/pair.js +5 -19
- package/dist/esm/node_modules/lib0/prng.js +15 -76
- package/dist/esm/node_modules/lib0/promise.js +7 -29
- package/dist/esm/node_modules/lib0/random.js +10 -22
- package/dist/esm/node_modules/lib0/schema.js +367 -686
- package/dist/esm/node_modules/lib0/set.js +4 -9
- package/dist/esm/node_modules/lib0/storage.js +23 -54
- package/dist/esm/node_modules/lib0/string.js +26 -71
- package/dist/esm/node_modules/lib0/symbol.js +3 -11
- package/dist/esm/node_modules/lib0/time.js +3 -14
- package/dist/esm/node_modules/lib0/trait/equality.js +5 -27
- package/dist/esm/node_modules/lib0/url.js +5 -17
- package/dist/esm/node_modules/lib0/webcrypto.js +3 -4
- package/dist/esm/node_modules/y-protocols/auth.js +7 -18
- package/dist/esm/node_modules/y-protocols/awareness.js +58 -115
- package/dist/esm/node_modules/y-protocols/sync.js +26 -102
- package/dist/esm/node_modules/y-websocket/src/y-websocket.js +82 -218
- package/dist/esm/node_modules/yjs/dist/yjs.js +2263 -4899
- package/dist/esm/photo/FilterThumb.js +37 -23
- package/dist/esm/photo/NiceAITools.js +685 -466
- package/dist/esm/photo/PhotoEditor.js +34 -18
- package/dist/esm/photo/PhotoEditor.module.css.js +296 -3
- package/dist/esm/photo/PhotoEditorCanvas.js +250 -89
- package/dist/esm/photo/PhotoEditorLeftPanel.js +1086 -222
- package/dist/esm/photo/PhotoEditorToolbar.js +135 -17
- package/dist/esm/photo/photoEditorActions.js +93 -71
- package/dist/esm/photo/photoEditorTypes.js +32 -31
- package/dist/esm/photo/photoFilters.js +967 -984
- package/dist/esm/photo/photoOverlays.js +913 -944
- package/dist/esm/photo/photoSelection.js +438 -498
- package/dist/esm/photo/usePhotoEditor.js +740 -740
- package/dist/esm/pixel/HSVPicker.js +192 -174
- package/dist/esm/pixel/PixelEditor.js +160 -47
- package/dist/esm/pixel/PixelEditor.module.css.js +209 -3
- package/dist/esm/pixel/PixelEditorCanvas.js +29 -14
- package/dist/esm/pixel/PixelEditorMenuBar.js +160 -160
- package/dist/esm/pixel/PixelEditorRightPanel.js +377 -43
- package/dist/esm/pixel/PixelEditorStatusBar.js +47 -18
- package/dist/esm/pixel/PixelEditorTimeline.js +106 -21
- package/dist/esm/pixel/PixelEditorToolbar.js +99 -19
- package/dist/esm/pixel/SpriteGeneratorPanel.js +483 -301
- package/dist/esm/pixel/animalGeneratorPresets.js +782 -600
- package/dist/esm/pixel/asepriteFormat.js +517 -559
- package/dist/esm/pixel/buildingGeneratorPresets.js +699 -519
- package/dist/esm/pixel/characterGeneratorPresets.js +650 -543
- package/dist/esm/pixel/pixel-pro.js +53 -62
- package/dist/esm/pixel/pixelEditorExports.js +397 -427
- package/dist/esm/pixel/pixelEditorTypes.js +103 -107
- package/dist/esm/pixel/pixelEditorUtils.js +551 -560
- package/dist/esm/pixel/spriteGeneratorCore.js +223 -256
- package/dist/esm/pixel/usePixelEditor.js +1322 -1342
- package/dist/esm/texture/Nice3DTexturePainter.js +709 -439
- package/dist/esm/ui/NiceUIDesigner.js +957 -526
- package/dist/esm/vector/NiceSvgToCode.js +589 -445
- package/dist/esm/vector/VectorEditor.js +291 -116
- package/dist/esm/vector/VectorEditor.module.css.js +86 -3
- package/dist/esm/vector/VectorEditorMenuBar.js +333 -273
- package/dist/esm/vector/VectorEditorRightPanel.js +1094 -369
- package/dist/esm/vector/VectorEditorShapeRenderer.js +199 -59
- package/dist/esm/vector/VectorEditorStatusBar.js +39 -11
- package/dist/esm/vector/useVectorEditor.js +849 -888
- package/dist/esm/vector/vectorAnimation.js +115 -136
- package/dist/esm/vector/vectorBooleanOps.js +401 -484
- package/dist/esm/vector/vectorEditorExport.js +207 -202
- package/dist/esm/vector/vectorEditorImport.js +174 -188
- package/dist/esm/vector/vectorEditorTypes.js +50 -48
- package/dist/esm/vector/vectorGradients.js +158 -173
- package/dist/esm/vector/vectorIconExport.js +53 -58
- package/dist/esm/vector/vectorIconImport.js +171 -218
- package/package.json +9 -15
|
@@ -1,38 +1,20 @@
|
|
|
1
|
-
import { publish, subscribe, unsubscribe } from
|
|
2
|
-
import { getUnixTime } from
|
|
3
|
-
import { writeVarUint, toUint8Array, length, writeVarUint8Array, createEncoder } from
|
|
4
|
-
import { readVarUint, createDecoder, readVarUint8Array } from
|
|
5
|
-
import { writeSyncStep1, writeUpdate, writeSyncStep2, readSyncMessage, messageYjsSyncStep2 } from
|
|
6
|
-
import { readAuthMessage } from
|
|
7
|
-
import { Awareness, encodeAwarenessUpdate, removeAwarenessStates, applyAwarenessUpdate } from
|
|
8
|
-
import { ObservableV2 } from
|
|
9
|
-
import { min, pow } from
|
|
10
|
-
import { encodeQueryParams } from
|
|
11
|
-
import { isNode } from
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @module provider/websocket
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
import { publish, subscribe, unsubscribe } from "../../lib0/broadcastchannel.js";
|
|
2
|
+
import { getUnixTime } from "../../lib0/time.js";
|
|
3
|
+
import { writeVarUint, toUint8Array, length, writeVarUint8Array, createEncoder } from "../../lib0/encoding.js";
|
|
4
|
+
import { readVarUint, createDecoder, readVarUint8Array } from "../../lib0/decoding.js";
|
|
5
|
+
import { writeSyncStep1, writeUpdate, writeSyncStep2, readSyncMessage, messageYjsSyncStep2 } from "../../y-protocols/sync.js";
|
|
6
|
+
import { readAuthMessage } from "../../y-protocols/auth.js";
|
|
7
|
+
import { Awareness, encodeAwarenessUpdate, removeAwarenessStates, applyAwarenessUpdate } from "../../y-protocols/awareness.js";
|
|
8
|
+
import { ObservableV2 } from "../../lib0/observable.js";
|
|
9
|
+
import { min, pow } from "../../lib0/math.js";
|
|
10
|
+
import { encodeQueryParams } from "../../lib0/url.js";
|
|
11
|
+
import { isNode } from "../../lib0/environment.js";
|
|
18
12
|
const messageSync = 0;
|
|
19
13
|
const messageQueryAwareness = 3;
|
|
20
14
|
const messageAwareness = 1;
|
|
21
15
|
const messageAuth = 2;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* encoder, decoder, provider, emitSynced, messageType
|
|
25
|
-
* @type {Array<function(encoding.Encoder, decoding.Decoder, WebsocketProvider, boolean, number):void>}
|
|
26
|
-
*/
|
|
27
16
|
const messageHandlers = [];
|
|
28
|
-
|
|
29
|
-
messageHandlers[messageSync] = (
|
|
30
|
-
encoder,
|
|
31
|
-
decoder,
|
|
32
|
-
provider,
|
|
33
|
-
emitSynced,
|
|
34
|
-
_messageType
|
|
35
|
-
) => {
|
|
17
|
+
messageHandlers[messageSync] = (encoder, decoder, provider, emitSynced, _messageType) => {
|
|
36
18
|
writeVarUint(encoder, messageSync);
|
|
37
19
|
const syncMessageType = readSyncMessage(
|
|
38
20
|
decoder,
|
|
@@ -40,21 +22,11 @@ messageHandlers[messageSync] = (
|
|
|
40
22
|
provider.doc,
|
|
41
23
|
provider
|
|
42
24
|
);
|
|
43
|
-
if (
|
|
44
|
-
emitSynced && syncMessageType === messageYjsSyncStep2 &&
|
|
45
|
-
!provider.synced
|
|
46
|
-
) {
|
|
25
|
+
if (emitSynced && syncMessageType === messageYjsSyncStep2 && !provider.synced) {
|
|
47
26
|
provider.synced = true;
|
|
48
27
|
}
|
|
49
28
|
};
|
|
50
|
-
|
|
51
|
-
messageHandlers[messageQueryAwareness] = (
|
|
52
|
-
encoder,
|
|
53
|
-
_decoder,
|
|
54
|
-
provider,
|
|
55
|
-
_emitSynced,
|
|
56
|
-
_messageType
|
|
57
|
-
) => {
|
|
29
|
+
messageHandlers[messageQueryAwareness] = (encoder, _decoder, provider, _emitSynced, _messageType) => {
|
|
58
30
|
writeVarUint(encoder, messageAwareness);
|
|
59
31
|
writeVarUint8Array(
|
|
60
32
|
encoder,
|
|
@@ -64,97 +36,60 @@ messageHandlers[messageQueryAwareness] = (
|
|
|
64
36
|
)
|
|
65
37
|
);
|
|
66
38
|
};
|
|
67
|
-
|
|
68
|
-
messageHandlers[messageAwareness] = (
|
|
69
|
-
_encoder,
|
|
70
|
-
decoder,
|
|
71
|
-
provider,
|
|
72
|
-
_emitSynced,
|
|
73
|
-
_messageType
|
|
74
|
-
) => {
|
|
39
|
+
messageHandlers[messageAwareness] = (_encoder, decoder, provider, _emitSynced, _messageType) => {
|
|
75
40
|
applyAwarenessUpdate(
|
|
76
41
|
provider.awareness,
|
|
77
42
|
readVarUint8Array(decoder),
|
|
78
43
|
provider
|
|
79
44
|
);
|
|
80
45
|
};
|
|
81
|
-
|
|
82
|
-
messageHandlers[messageAuth] = (
|
|
83
|
-
_encoder,
|
|
84
|
-
decoder,
|
|
85
|
-
provider,
|
|
86
|
-
_emitSynced,
|
|
87
|
-
_messageType
|
|
88
|
-
) => {
|
|
46
|
+
messageHandlers[messageAuth] = (_encoder, decoder, provider, _emitSynced, _messageType) => {
|
|
89
47
|
readAuthMessage(
|
|
90
48
|
decoder,
|
|
91
49
|
provider.doc,
|
|
92
50
|
(_ydoc, reason) => permissionDeniedHandler(provider, reason)
|
|
93
51
|
);
|
|
94
52
|
};
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* @param {WebsocketProvider} provider
|
|
101
|
-
* @param {string} reason
|
|
102
|
-
*/
|
|
103
|
-
const permissionDeniedHandler = (provider, reason) =>
|
|
104
|
-
console.warn(`Permission denied to access ${provider.url}.\n${reason}`);
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* @param {WebsocketProvider} provider
|
|
108
|
-
* @param {Uint8Array} buf
|
|
109
|
-
* @param {boolean} emitSynced
|
|
110
|
-
* @return {encoding.Encoder}
|
|
111
|
-
*/
|
|
53
|
+
const messageReconnectTimeout = 3e4;
|
|
54
|
+
const permissionDeniedHandler = (provider, reason) => console.warn(`Permission denied to access ${provider.url}.
|
|
55
|
+
${reason}`);
|
|
112
56
|
const readMessage = (provider, buf, emitSynced) => {
|
|
113
57
|
const decoder = createDecoder(buf);
|
|
114
58
|
const encoder = createEncoder();
|
|
115
59
|
const messageType = readVarUint(decoder);
|
|
116
60
|
const messageHandler = provider.messageHandlers[messageType];
|
|
117
|
-
if (
|
|
61
|
+
if (
|
|
62
|
+
/** @type {any} */
|
|
63
|
+
messageHandler
|
|
64
|
+
) {
|
|
118
65
|
messageHandler(encoder, decoder, provider, emitSynced, messageType);
|
|
119
66
|
} else {
|
|
120
|
-
console.error(
|
|
67
|
+
console.error("Unable to compute message");
|
|
121
68
|
}
|
|
122
|
-
return encoder
|
|
69
|
+
return encoder;
|
|
123
70
|
};
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Outsource this function so that a new websocket connection is created immediately.
|
|
127
|
-
* I suspect that the `ws.onclose` event is not always fired if there are network issues.
|
|
128
|
-
*
|
|
129
|
-
* @param {WebsocketProvider} provider
|
|
130
|
-
* @param {WebSocket} ws
|
|
131
|
-
* @param {CloseEvent | null} event
|
|
132
|
-
*/
|
|
133
71
|
const closeWebsocketConnection = (provider, ws, event) => {
|
|
134
72
|
if (ws === provider.ws) {
|
|
135
|
-
provider.emit(
|
|
73
|
+
provider.emit("connection-close", [event, provider]);
|
|
136
74
|
provider.ws = null;
|
|
137
75
|
ws.close();
|
|
138
76
|
provider.wsconnecting = false;
|
|
139
77
|
if (provider.wsconnected) {
|
|
140
78
|
provider.wsconnected = false;
|
|
141
79
|
provider.synced = false;
|
|
142
|
-
// update awareness (all users except local left)
|
|
143
80
|
removeAwarenessStates(
|
|
144
81
|
provider.awareness,
|
|
145
|
-
Array.from(provider.awareness.getStates().keys()).filter(
|
|
146
|
-
client !== provider.doc.clientID
|
|
82
|
+
Array.from(provider.awareness.getStates().keys()).filter(
|
|
83
|
+
(client) => client !== provider.doc.clientID
|
|
147
84
|
),
|
|
148
85
|
provider
|
|
149
86
|
);
|
|
150
|
-
provider.emit(
|
|
151
|
-
status:
|
|
87
|
+
provider.emit("status", [{
|
|
88
|
+
status: "disconnected"
|
|
152
89
|
}]);
|
|
153
90
|
} else {
|
|
154
91
|
provider.wsUnsuccessfulReconnects++;
|
|
155
92
|
}
|
|
156
|
-
// Start with no reconnect timeout and increase timeout by
|
|
157
|
-
// using exponential backoff starting with 100ms
|
|
158
93
|
setTimeout(
|
|
159
94
|
setupWS,
|
|
160
95
|
min(
|
|
@@ -165,19 +100,14 @@ const closeWebsocketConnection = (provider, ws, event) => {
|
|
|
165
100
|
);
|
|
166
101
|
}
|
|
167
102
|
};
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* @param {WebsocketProvider} provider
|
|
171
|
-
*/
|
|
172
103
|
const setupWS = (provider) => {
|
|
173
104
|
if (provider.shouldConnect && provider.ws === null) {
|
|
174
105
|
const websocket = new provider._WS(provider.url, provider.protocols);
|
|
175
|
-
websocket.binaryType =
|
|
106
|
+
websocket.binaryType = "arraybuffer";
|
|
176
107
|
provider.ws = websocket;
|
|
177
108
|
provider.wsconnecting = true;
|
|
178
109
|
provider.wsconnected = false;
|
|
179
110
|
provider.synced = false;
|
|
180
|
-
|
|
181
111
|
websocket.onmessage = (event) => {
|
|
182
112
|
provider.wsLastMessageReceived = getUnixTime();
|
|
183
113
|
const encoder = readMessage(provider, new Uint8Array(event.data), true);
|
|
@@ -186,7 +116,7 @@ const setupWS = (provider) => {
|
|
|
186
116
|
}
|
|
187
117
|
};
|
|
188
118
|
websocket.onerror = (event) => {
|
|
189
|
-
provider.emit(
|
|
119
|
+
provider.emit("connection-error", [event, provider]);
|
|
190
120
|
};
|
|
191
121
|
websocket.onclose = (event) => {
|
|
192
122
|
closeWebsocketConnection(provider, websocket, event);
|
|
@@ -196,15 +126,13 @@ const setupWS = (provider) => {
|
|
|
196
126
|
provider.wsconnecting = false;
|
|
197
127
|
provider.wsconnected = true;
|
|
198
128
|
provider.wsUnsuccessfulReconnects = 0;
|
|
199
|
-
provider.emit(
|
|
200
|
-
status:
|
|
129
|
+
provider.emit("status", [{
|
|
130
|
+
status: "connected"
|
|
201
131
|
}]);
|
|
202
|
-
// always send sync step 1 when connected
|
|
203
132
|
const encoder = createEncoder();
|
|
204
133
|
writeVarUint(encoder, messageSync);
|
|
205
134
|
writeSyncStep1(encoder, provider.doc);
|
|
206
135
|
websocket.send(toUint8Array(encoder));
|
|
207
|
-
// broadcast local awareness state
|
|
208
136
|
if (provider.awareness.getLocalState() !== null) {
|
|
209
137
|
const encoderAwarenessState = createEncoder();
|
|
210
138
|
writeVarUint(encoderAwarenessState, messageAwareness);
|
|
@@ -217,16 +145,11 @@ const setupWS = (provider) => {
|
|
|
217
145
|
websocket.send(toUint8Array(encoderAwarenessState));
|
|
218
146
|
}
|
|
219
147
|
};
|
|
220
|
-
provider.emit(
|
|
221
|
-
status:
|
|
148
|
+
provider.emit("status", [{
|
|
149
|
+
status: "connecting"
|
|
222
150
|
}]);
|
|
223
151
|
}
|
|
224
152
|
};
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* @param {WebsocketProvider} provider
|
|
228
|
-
* @param {ArrayBuffer} buf
|
|
229
|
-
*/
|
|
230
153
|
const broadcastMessage = (provider, buf) => {
|
|
231
154
|
const ws = provider.ws;
|
|
232
155
|
if (provider.wsconnected && ws && ws.readyState === ws.OPEN) {
|
|
@@ -236,20 +159,6 @@ const broadcastMessage = (provider, buf) => {
|
|
|
236
159
|
publish(provider.bcChannel, buf, provider);
|
|
237
160
|
}
|
|
238
161
|
};
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* Websocket Provider for Yjs. Creates a websocket connection to sync the shared document.
|
|
242
|
-
* The document name is attached to the provided url. I.e. the following example
|
|
243
|
-
* creates a websocket connection to http://localhost:1234/my-document-name
|
|
244
|
-
*
|
|
245
|
-
* @example
|
|
246
|
-
* import * as Y from 'yjs'
|
|
247
|
-
* import { WebsocketProvider } from 'y-websocket'
|
|
248
|
-
* const doc = new Y.Doc()
|
|
249
|
-
* const provider = new WebsocketProvider('http://localhost:1234', 'my-document-name', doc)
|
|
250
|
-
*
|
|
251
|
-
* @extends {ObservableV2<{ 'connection-close': (event: CloseEvent | null, provider: WebsocketProvider) => any, 'status': (event: { status: 'connected' | 'disconnected' | 'connecting' }) => any, 'connection-error': (event: Event, provider: WebsocketProvider) => any, 'sync': (state: boolean) => any }>}
|
|
252
|
-
*/
|
|
253
162
|
class WebsocketProvider extends ObservableV2 {
|
|
254
163
|
/**
|
|
255
164
|
* @param {string} serverUrl
|
|
@@ -265,7 +174,7 @@ class WebsocketProvider extends ObservableV2 {
|
|
|
265
174
|
* @param {number} [opts.maxBackoffTime] Maximum amount of time to wait before trying to reconnect (we try to reconnect using exponential backoff)
|
|
266
175
|
* @param {boolean} [opts.disableBc] Disable cross-tab BroadcastChannel communication
|
|
267
176
|
*/
|
|
268
|
-
constructor
|
|
177
|
+
constructor(serverUrl, roomname, doc, {
|
|
269
178
|
connect = true,
|
|
270
179
|
awareness = new Awareness(doc),
|
|
271
180
|
params = {},
|
|
@@ -276,18 +185,12 @@ class WebsocketProvider extends ObservableV2 {
|
|
|
276
185
|
disableBc = false
|
|
277
186
|
} = {}) {
|
|
278
187
|
super();
|
|
279
|
-
|
|
280
|
-
while (serverUrl[serverUrl.length - 1] === '/') {
|
|
188
|
+
while (serverUrl[serverUrl.length - 1] === "/") {
|
|
281
189
|
serverUrl = serverUrl.slice(0, serverUrl.length - 1);
|
|
282
190
|
}
|
|
283
191
|
this.serverUrl = serverUrl;
|
|
284
|
-
this.bcChannel = serverUrl +
|
|
192
|
+
this.bcChannel = serverUrl + "/" + roomname;
|
|
285
193
|
this.maxBackoffTime = maxBackoffTime;
|
|
286
|
-
/**
|
|
287
|
-
* The specified url parameters. This can be safely updated. The changed parameters will be used
|
|
288
|
-
* when a new connection is established.
|
|
289
|
-
* @type {Object<string,string>}
|
|
290
|
-
*/
|
|
291
194
|
this.params = params;
|
|
292
195
|
this.protocols = protocols;
|
|
293
196
|
this.roomname = roomname;
|
|
@@ -300,41 +203,22 @@ class WebsocketProvider extends ObservableV2 {
|
|
|
300
203
|
this.disableBc = disableBc;
|
|
301
204
|
this.wsUnsuccessfulReconnects = 0;
|
|
302
205
|
this.messageHandlers = messageHandlers.slice();
|
|
303
|
-
/**
|
|
304
|
-
* @type {boolean}
|
|
305
|
-
*/
|
|
306
206
|
this._synced = false;
|
|
307
|
-
/**
|
|
308
|
-
* @type {WebSocket?}
|
|
309
|
-
*/
|
|
310
207
|
this.ws = null;
|
|
311
208
|
this.wsLastMessageReceived = 0;
|
|
312
|
-
/**
|
|
313
|
-
* Whether to connect to other peers or not
|
|
314
|
-
* @type {boolean}
|
|
315
|
-
*/
|
|
316
209
|
this.shouldConnect = connect;
|
|
317
|
-
|
|
318
|
-
/**
|
|
319
|
-
* @type {number}
|
|
320
|
-
*/
|
|
321
210
|
this._resyncInterval = 0;
|
|
322
211
|
if (resyncInterval > 0) {
|
|
323
|
-
this._resyncInterval = /** @type {any} */
|
|
212
|
+
this._resyncInterval = /** @type {any} */
|
|
213
|
+
setInterval(() => {
|
|
324
214
|
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
325
|
-
// resend sync step 1
|
|
326
215
|
const encoder = createEncoder();
|
|
327
216
|
writeVarUint(encoder, messageSync);
|
|
328
217
|
writeSyncStep1(encoder, doc);
|
|
329
218
|
this.ws.send(toUint8Array(encoder));
|
|
330
219
|
}
|
|
331
|
-
}, resyncInterval)
|
|
220
|
+
}, resyncInterval);
|
|
332
221
|
}
|
|
333
|
-
|
|
334
|
-
/**
|
|
335
|
-
* @param {ArrayBuffer} data
|
|
336
|
-
* @param {any} origin
|
|
337
|
-
*/
|
|
338
222
|
this._bcSubscriber = (data, origin) => {
|
|
339
223
|
if (origin !== this) {
|
|
340
224
|
const encoder = readMessage(this, new Uint8Array(data), false);
|
|
@@ -343,11 +227,6 @@ class WebsocketProvider extends ObservableV2 {
|
|
|
343
227
|
}
|
|
344
228
|
}
|
|
345
229
|
};
|
|
346
|
-
/**
|
|
347
|
-
* Listens to Yjs updates and sends them to remote peers (ws and broadcastchannel)
|
|
348
|
-
* @param {Uint8Array} update
|
|
349
|
-
* @param {any} origin
|
|
350
|
-
*/
|
|
351
230
|
this._updateHandler = (update, origin) => {
|
|
352
231
|
if (origin !== this) {
|
|
353
232
|
const encoder = createEncoder();
|
|
@@ -356,11 +235,7 @@ class WebsocketProvider extends ObservableV2 {
|
|
|
356
235
|
broadcastMessage(this, toUint8Array(encoder));
|
|
357
236
|
}
|
|
358
237
|
};
|
|
359
|
-
this.doc.on(
|
|
360
|
-
/**
|
|
361
|
-
* @param {any} changed
|
|
362
|
-
* @param {any} _origin
|
|
363
|
-
*/
|
|
238
|
+
this.doc.on("update", this._updateHandler);
|
|
364
239
|
this._awarenessUpdateHandler = ({ added, updated, removed }, _origin) => {
|
|
365
240
|
const changedClients = added.concat(updated).concat(removed);
|
|
366
241
|
const encoder = createEncoder();
|
|
@@ -375,85 +250,74 @@ class WebsocketProvider extends ObservableV2 {
|
|
|
375
250
|
removeAwarenessStates(
|
|
376
251
|
this.awareness,
|
|
377
252
|
[doc.clientID],
|
|
378
|
-
|
|
253
|
+
"app closed"
|
|
379
254
|
);
|
|
380
255
|
};
|
|
381
|
-
if (isNode && typeof process !==
|
|
382
|
-
process.on(
|
|
256
|
+
if (isNode && typeof process !== "undefined") {
|
|
257
|
+
process.on("exit", this._exitHandler);
|
|
383
258
|
}
|
|
384
|
-
awareness.on(
|
|
385
|
-
this._checkInterval = /** @type {any} */
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
259
|
+
awareness.on("update", this._awarenessUpdateHandler);
|
|
260
|
+
this._checkInterval = /** @type {any} */
|
|
261
|
+
setInterval(() => {
|
|
262
|
+
if (this.wsconnected && messageReconnectTimeout < getUnixTime() - this.wsLastMessageReceived) {
|
|
263
|
+
closeWebsocketConnection(
|
|
264
|
+
this,
|
|
265
|
+
/** @type {WebSocket} */
|
|
266
|
+
this.ws,
|
|
267
|
+
null
|
|
268
|
+
);
|
|
394
269
|
}
|
|
395
|
-
}, messageReconnectTimeout / 10)
|
|
270
|
+
}, messageReconnectTimeout / 10);
|
|
396
271
|
if (connect) {
|
|
397
272
|
this.connect();
|
|
398
273
|
}
|
|
399
274
|
}
|
|
400
|
-
|
|
401
|
-
get url () {
|
|
275
|
+
get url() {
|
|
402
276
|
const encodedParams = encodeQueryParams(this.params);
|
|
403
|
-
return this.serverUrl +
|
|
404
|
-
(encodedParams.length === 0 ? '' : '?' + encodedParams)
|
|
277
|
+
return this.serverUrl + "/" + this.roomname + (encodedParams.length === 0 ? "" : "?" + encodedParams);
|
|
405
278
|
}
|
|
406
|
-
|
|
407
279
|
/**
|
|
408
280
|
* @type {boolean}
|
|
409
281
|
*/
|
|
410
|
-
get synced
|
|
411
|
-
return this._synced
|
|
282
|
+
get synced() {
|
|
283
|
+
return this._synced;
|
|
412
284
|
}
|
|
413
|
-
|
|
414
|
-
set synced (state) {
|
|
285
|
+
set synced(state) {
|
|
415
286
|
if (this._synced !== state) {
|
|
416
287
|
this._synced = state;
|
|
417
|
-
|
|
418
|
-
this.emit(
|
|
419
|
-
this.emit('sync', [state]);
|
|
288
|
+
this.emit("synced", [state]);
|
|
289
|
+
this.emit("sync", [state]);
|
|
420
290
|
}
|
|
421
291
|
}
|
|
422
|
-
|
|
423
|
-
destroy () {
|
|
292
|
+
destroy() {
|
|
424
293
|
if (this._resyncInterval !== 0) {
|
|
425
294
|
clearInterval(this._resyncInterval);
|
|
426
295
|
}
|
|
427
296
|
clearInterval(this._checkInterval);
|
|
428
297
|
this.disconnect();
|
|
429
|
-
if (isNode && typeof process !==
|
|
430
|
-
process.off(
|
|
298
|
+
if (isNode && typeof process !== "undefined") {
|
|
299
|
+
process.off("exit", this._exitHandler);
|
|
431
300
|
}
|
|
432
|
-
this.awareness.off(
|
|
433
|
-
this.doc.off(
|
|
301
|
+
this.awareness.off("update", this._awarenessUpdateHandler);
|
|
302
|
+
this.doc.off("update", this._updateHandler);
|
|
434
303
|
super.destroy();
|
|
435
304
|
}
|
|
436
|
-
|
|
437
|
-
connectBc () {
|
|
305
|
+
connectBc() {
|
|
438
306
|
if (this.disableBc) {
|
|
439
|
-
return
|
|
307
|
+
return;
|
|
440
308
|
}
|
|
441
309
|
if (!this.bcconnected) {
|
|
442
310
|
subscribe(this.bcChannel, this._bcSubscriber);
|
|
443
311
|
this.bcconnected = true;
|
|
444
312
|
}
|
|
445
|
-
// send sync step1 to bc
|
|
446
|
-
// write sync step 1
|
|
447
313
|
const encoderSync = createEncoder();
|
|
448
314
|
writeVarUint(encoderSync, messageSync);
|
|
449
315
|
writeSyncStep1(encoderSync, this.doc);
|
|
450
316
|
publish(this.bcChannel, toUint8Array(encoderSync), this);
|
|
451
|
-
// broadcast local state
|
|
452
317
|
const encoderState = createEncoder();
|
|
453
318
|
writeVarUint(encoderState, messageSync);
|
|
454
319
|
writeSyncStep2(encoderState, this.doc);
|
|
455
320
|
publish(this.bcChannel, toUint8Array(encoderState), this);
|
|
456
|
-
// write queryAwareness
|
|
457
321
|
const encoderAwarenessQuery = createEncoder();
|
|
458
322
|
writeVarUint(encoderAwarenessQuery, messageQueryAwareness);
|
|
459
323
|
publish(
|
|
@@ -461,7 +325,6 @@ class WebsocketProvider extends ObservableV2 {
|
|
|
461
325
|
toUint8Array(encoderAwarenessQuery),
|
|
462
326
|
this
|
|
463
327
|
);
|
|
464
|
-
// broadcast local awareness state
|
|
465
328
|
const encoderAwarenessState = createEncoder();
|
|
466
329
|
writeVarUint(encoderAwarenessState, messageAwareness);
|
|
467
330
|
writeVarUint8Array(
|
|
@@ -476,16 +339,14 @@ class WebsocketProvider extends ObservableV2 {
|
|
|
476
339
|
this
|
|
477
340
|
);
|
|
478
341
|
}
|
|
479
|
-
|
|
480
|
-
disconnectBc () {
|
|
481
|
-
// broadcast message with local awareness state set to null (indicating disconnect)
|
|
342
|
+
disconnectBc() {
|
|
482
343
|
const encoder = createEncoder();
|
|
483
344
|
writeVarUint(encoder, messageAwareness);
|
|
484
345
|
writeVarUint8Array(
|
|
485
346
|
encoder,
|
|
486
347
|
encodeAwarenessUpdate(this.awareness, [
|
|
487
348
|
this.doc.clientID
|
|
488
|
-
], new Map())
|
|
349
|
+
], /* @__PURE__ */ new Map())
|
|
489
350
|
);
|
|
490
351
|
broadcastMessage(this, toUint8Array(encoder));
|
|
491
352
|
if (this.bcconnected) {
|
|
@@ -493,16 +354,14 @@ class WebsocketProvider extends ObservableV2 {
|
|
|
493
354
|
this.bcconnected = false;
|
|
494
355
|
}
|
|
495
356
|
}
|
|
496
|
-
|
|
497
|
-
disconnect () {
|
|
357
|
+
disconnect() {
|
|
498
358
|
this.shouldConnect = false;
|
|
499
359
|
this.disconnectBc();
|
|
500
360
|
if (this.ws !== null) {
|
|
501
361
|
closeWebsocketConnection(this, this.ws, null);
|
|
502
362
|
}
|
|
503
363
|
}
|
|
504
|
-
|
|
505
|
-
connect () {
|
|
364
|
+
connect() {
|
|
506
365
|
this.shouldConnect = true;
|
|
507
366
|
if (!this.wsconnected && this.ws === null) {
|
|
508
367
|
setupWS(this);
|
|
@@ -510,5 +369,10 @@ class WebsocketProvider extends ObservableV2 {
|
|
|
510
369
|
}
|
|
511
370
|
}
|
|
512
371
|
}
|
|
513
|
-
|
|
514
|
-
|
|
372
|
+
export {
|
|
373
|
+
WebsocketProvider,
|
|
374
|
+
messageAuth,
|
|
375
|
+
messageAwareness,
|
|
376
|
+
messageQueryAwareness,
|
|
377
|
+
messageSync
|
|
378
|
+
};
|