@nice2dev/ui-graphics 1.3.15 → 1.3.16
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 +9 -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,40 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* @module provider/websocket
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const broadcastchannel = require("../../lib0/broadcastchannel.js");
|
|
4
|
+
const time = require("../../lib0/time.js");
|
|
5
|
+
const encoding = require("../../lib0/encoding.js");
|
|
6
|
+
const decoding = require("../../lib0/decoding.js");
|
|
7
|
+
const sync = require("../../y-protocols/sync.js");
|
|
8
|
+
const auth = require("../../y-protocols/auth.js");
|
|
9
|
+
const awareness = require("../../y-protocols/awareness.js");
|
|
10
|
+
const observable = require("../../lib0/observable.js");
|
|
11
|
+
const math = require("../../lib0/math.js");
|
|
12
|
+
const url = require("../../lib0/url.js");
|
|
13
|
+
const environment = require("../../lib0/environment.js");
|
|
20
14
|
const messageSync = 0;
|
|
21
15
|
const messageQueryAwareness = 3;
|
|
22
16
|
const messageAwareness = 1;
|
|
23
17
|
const messageAuth = 2;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* encoder, decoder, provider, emitSynced, messageType
|
|
27
|
-
* @type {Array<function(encoding.Encoder, decoding.Decoder, WebsocketProvider, boolean, number):void>}
|
|
28
|
-
*/
|
|
29
18
|
const messageHandlers = [];
|
|
30
|
-
|
|
31
|
-
messageHandlers[messageSync] = (
|
|
32
|
-
encoder,
|
|
33
|
-
decoder,
|
|
34
|
-
provider,
|
|
35
|
-
emitSynced,
|
|
36
|
-
_messageType
|
|
37
|
-
) => {
|
|
19
|
+
messageHandlers[messageSync] = (encoder, decoder, provider, emitSynced, _messageType) => {
|
|
38
20
|
encoding.writeVarUint(encoder, messageSync);
|
|
39
21
|
const syncMessageType = sync.readSyncMessage(
|
|
40
22
|
decoder,
|
|
@@ -42,21 +24,11 @@ messageHandlers[messageSync] = (
|
|
|
42
24
|
provider.doc,
|
|
43
25
|
provider
|
|
44
26
|
);
|
|
45
|
-
if (
|
|
46
|
-
emitSynced && syncMessageType === sync.messageYjsSyncStep2 &&
|
|
47
|
-
!provider.synced
|
|
48
|
-
) {
|
|
27
|
+
if (emitSynced && syncMessageType === sync.messageYjsSyncStep2 && !provider.synced) {
|
|
49
28
|
provider.synced = true;
|
|
50
29
|
}
|
|
51
30
|
};
|
|
52
|
-
|
|
53
|
-
messageHandlers[messageQueryAwareness] = (
|
|
54
|
-
encoder,
|
|
55
|
-
_decoder,
|
|
56
|
-
provider,
|
|
57
|
-
_emitSynced,
|
|
58
|
-
_messageType
|
|
59
|
-
) => {
|
|
31
|
+
messageHandlers[messageQueryAwareness] = (encoder, _decoder, provider, _emitSynced, _messageType) => {
|
|
60
32
|
encoding.writeVarUint(encoder, messageAwareness);
|
|
61
33
|
encoding.writeVarUint8Array(
|
|
62
34
|
encoder,
|
|
@@ -66,97 +38,60 @@ messageHandlers[messageQueryAwareness] = (
|
|
|
66
38
|
)
|
|
67
39
|
);
|
|
68
40
|
};
|
|
69
|
-
|
|
70
|
-
messageHandlers[messageAwareness] = (
|
|
71
|
-
_encoder,
|
|
72
|
-
decoder,
|
|
73
|
-
provider,
|
|
74
|
-
_emitSynced,
|
|
75
|
-
_messageType
|
|
76
|
-
) => {
|
|
41
|
+
messageHandlers[messageAwareness] = (_encoder, decoder, provider, _emitSynced, _messageType) => {
|
|
77
42
|
awareness.applyAwarenessUpdate(
|
|
78
43
|
provider.awareness,
|
|
79
44
|
decoding.readVarUint8Array(decoder),
|
|
80
45
|
provider
|
|
81
46
|
);
|
|
82
47
|
};
|
|
83
|
-
|
|
84
|
-
messageHandlers[messageAuth] = (
|
|
85
|
-
_encoder,
|
|
86
|
-
decoder,
|
|
87
|
-
provider,
|
|
88
|
-
_emitSynced,
|
|
89
|
-
_messageType
|
|
90
|
-
) => {
|
|
48
|
+
messageHandlers[messageAuth] = (_encoder, decoder, provider, _emitSynced, _messageType) => {
|
|
91
49
|
auth.readAuthMessage(
|
|
92
50
|
decoder,
|
|
93
51
|
provider.doc,
|
|
94
52
|
(_ydoc, reason) => permissionDeniedHandler(provider, reason)
|
|
95
53
|
);
|
|
96
54
|
};
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* @param {WebsocketProvider} provider
|
|
103
|
-
* @param {string} reason
|
|
104
|
-
*/
|
|
105
|
-
const permissionDeniedHandler = (provider, reason) =>
|
|
106
|
-
console.warn(`Permission denied to access ${provider.url}.\n${reason}`);
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* @param {WebsocketProvider} provider
|
|
110
|
-
* @param {Uint8Array} buf
|
|
111
|
-
* @param {boolean} emitSynced
|
|
112
|
-
* @return {encoding.Encoder}
|
|
113
|
-
*/
|
|
55
|
+
const messageReconnectTimeout = 3e4;
|
|
56
|
+
const permissionDeniedHandler = (provider, reason) => console.warn(`Permission denied to access ${provider.url}.
|
|
57
|
+
${reason}`);
|
|
114
58
|
const readMessage = (provider, buf, emitSynced) => {
|
|
115
59
|
const decoder = decoding.createDecoder(buf);
|
|
116
60
|
const encoder = encoding.createEncoder();
|
|
117
61
|
const messageType = decoding.readVarUint(decoder);
|
|
118
62
|
const messageHandler = provider.messageHandlers[messageType];
|
|
119
|
-
if (
|
|
63
|
+
if (
|
|
64
|
+
/** @type {any} */
|
|
65
|
+
messageHandler
|
|
66
|
+
) {
|
|
120
67
|
messageHandler(encoder, decoder, provider, emitSynced, messageType);
|
|
121
68
|
} else {
|
|
122
|
-
console.error(
|
|
69
|
+
console.error("Unable to compute message");
|
|
123
70
|
}
|
|
124
|
-
return encoder
|
|
71
|
+
return encoder;
|
|
125
72
|
};
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Outsource this function so that a new websocket connection is created immediately.
|
|
129
|
-
* I suspect that the `ws.onclose` event is not always fired if there are network issues.
|
|
130
|
-
*
|
|
131
|
-
* @param {WebsocketProvider} provider
|
|
132
|
-
* @param {WebSocket} ws
|
|
133
|
-
* @param {CloseEvent | null} event
|
|
134
|
-
*/
|
|
135
73
|
const closeWebsocketConnection = (provider, ws, event) => {
|
|
136
74
|
if (ws === provider.ws) {
|
|
137
|
-
provider.emit(
|
|
75
|
+
provider.emit("connection-close", [event, provider]);
|
|
138
76
|
provider.ws = null;
|
|
139
77
|
ws.close();
|
|
140
78
|
provider.wsconnecting = false;
|
|
141
79
|
if (provider.wsconnected) {
|
|
142
80
|
provider.wsconnected = false;
|
|
143
81
|
provider.synced = false;
|
|
144
|
-
// update awareness (all users except local left)
|
|
145
82
|
awareness.removeAwarenessStates(
|
|
146
83
|
provider.awareness,
|
|
147
|
-
Array.from(provider.awareness.getStates().keys()).filter(
|
|
148
|
-
client !== provider.doc.clientID
|
|
84
|
+
Array.from(provider.awareness.getStates().keys()).filter(
|
|
85
|
+
(client) => client !== provider.doc.clientID
|
|
149
86
|
),
|
|
150
87
|
provider
|
|
151
88
|
);
|
|
152
|
-
provider.emit(
|
|
153
|
-
status:
|
|
89
|
+
provider.emit("status", [{
|
|
90
|
+
status: "disconnected"
|
|
154
91
|
}]);
|
|
155
92
|
} else {
|
|
156
93
|
provider.wsUnsuccessfulReconnects++;
|
|
157
94
|
}
|
|
158
|
-
// Start with no reconnect timeout and increase timeout by
|
|
159
|
-
// using exponential backoff starting with 100ms
|
|
160
95
|
setTimeout(
|
|
161
96
|
setupWS,
|
|
162
97
|
math.min(
|
|
@@ -167,19 +102,14 @@ const closeWebsocketConnection = (provider, ws, event) => {
|
|
|
167
102
|
);
|
|
168
103
|
}
|
|
169
104
|
};
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* @param {WebsocketProvider} provider
|
|
173
|
-
*/
|
|
174
105
|
const setupWS = (provider) => {
|
|
175
106
|
if (provider.shouldConnect && provider.ws === null) {
|
|
176
107
|
const websocket = new provider._WS(provider.url, provider.protocols);
|
|
177
|
-
websocket.binaryType =
|
|
108
|
+
websocket.binaryType = "arraybuffer";
|
|
178
109
|
provider.ws = websocket;
|
|
179
110
|
provider.wsconnecting = true;
|
|
180
111
|
provider.wsconnected = false;
|
|
181
112
|
provider.synced = false;
|
|
182
|
-
|
|
183
113
|
websocket.onmessage = (event) => {
|
|
184
114
|
provider.wsLastMessageReceived = time.getUnixTime();
|
|
185
115
|
const encoder = readMessage(provider, new Uint8Array(event.data), true);
|
|
@@ -188,7 +118,7 @@ const setupWS = (provider) => {
|
|
|
188
118
|
}
|
|
189
119
|
};
|
|
190
120
|
websocket.onerror = (event) => {
|
|
191
|
-
provider.emit(
|
|
121
|
+
provider.emit("connection-error", [event, provider]);
|
|
192
122
|
};
|
|
193
123
|
websocket.onclose = (event) => {
|
|
194
124
|
closeWebsocketConnection(provider, websocket, event);
|
|
@@ -198,15 +128,13 @@ const setupWS = (provider) => {
|
|
|
198
128
|
provider.wsconnecting = false;
|
|
199
129
|
provider.wsconnected = true;
|
|
200
130
|
provider.wsUnsuccessfulReconnects = 0;
|
|
201
|
-
provider.emit(
|
|
202
|
-
status:
|
|
131
|
+
provider.emit("status", [{
|
|
132
|
+
status: "connected"
|
|
203
133
|
}]);
|
|
204
|
-
// always send sync step 1 when connected
|
|
205
134
|
const encoder = encoding.createEncoder();
|
|
206
135
|
encoding.writeVarUint(encoder, messageSync);
|
|
207
136
|
sync.writeSyncStep1(encoder, provider.doc);
|
|
208
137
|
websocket.send(encoding.toUint8Array(encoder));
|
|
209
|
-
// broadcast local awareness state
|
|
210
138
|
if (provider.awareness.getLocalState() !== null) {
|
|
211
139
|
const encoderAwarenessState = encoding.createEncoder();
|
|
212
140
|
encoding.writeVarUint(encoderAwarenessState, messageAwareness);
|
|
@@ -219,16 +147,11 @@ const setupWS = (provider) => {
|
|
|
219
147
|
websocket.send(encoding.toUint8Array(encoderAwarenessState));
|
|
220
148
|
}
|
|
221
149
|
};
|
|
222
|
-
provider.emit(
|
|
223
|
-
status:
|
|
150
|
+
provider.emit("status", [{
|
|
151
|
+
status: "connecting"
|
|
224
152
|
}]);
|
|
225
153
|
}
|
|
226
154
|
};
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* @param {WebsocketProvider} provider
|
|
230
|
-
* @param {ArrayBuffer} buf
|
|
231
|
-
*/
|
|
232
155
|
const broadcastMessage = (provider, buf) => {
|
|
233
156
|
const ws = provider.ws;
|
|
234
157
|
if (provider.wsconnected && ws && ws.readyState === ws.OPEN) {
|
|
@@ -238,20 +161,6 @@ const broadcastMessage = (provider, buf) => {
|
|
|
238
161
|
broadcastchannel.publish(provider.bcChannel, buf, provider);
|
|
239
162
|
}
|
|
240
163
|
};
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* Websocket Provider for Yjs. Creates a websocket connection to sync the shared document.
|
|
244
|
-
* The document name is attached to the provided url. I.e. the following example
|
|
245
|
-
* creates a websocket connection to http://localhost:1234/my-document-name
|
|
246
|
-
*
|
|
247
|
-
* @example
|
|
248
|
-
* import * as Y from 'yjs'
|
|
249
|
-
* import { WebsocketProvider } from 'y-websocket'
|
|
250
|
-
* const doc = new Y.Doc()
|
|
251
|
-
* const provider = new WebsocketProvider('http://localhost:1234', 'my-document-name', doc)
|
|
252
|
-
*
|
|
253
|
-
* @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 }>}
|
|
254
|
-
*/
|
|
255
164
|
class WebsocketProvider extends observable.ObservableV2 {
|
|
256
165
|
/**
|
|
257
166
|
* @param {string} serverUrl
|
|
@@ -267,7 +176,7 @@ class WebsocketProvider extends observable.ObservableV2 {
|
|
|
267
176
|
* @param {number} [opts.maxBackoffTime] Maximum amount of time to wait before trying to reconnect (we try to reconnect using exponential backoff)
|
|
268
177
|
* @param {boolean} [opts.disableBc] Disable cross-tab BroadcastChannel communication
|
|
269
178
|
*/
|
|
270
|
-
constructor
|
|
179
|
+
constructor(serverUrl, roomname, doc, {
|
|
271
180
|
connect = true,
|
|
272
181
|
awareness: awareness$1 = new awareness.Awareness(doc),
|
|
273
182
|
params = {},
|
|
@@ -278,18 +187,12 @@ class WebsocketProvider extends observable.ObservableV2 {
|
|
|
278
187
|
disableBc = false
|
|
279
188
|
} = {}) {
|
|
280
189
|
super();
|
|
281
|
-
|
|
282
|
-
while (serverUrl[serverUrl.length - 1] === '/') {
|
|
190
|
+
while (serverUrl[serverUrl.length - 1] === "/") {
|
|
283
191
|
serverUrl = serverUrl.slice(0, serverUrl.length - 1);
|
|
284
192
|
}
|
|
285
193
|
this.serverUrl = serverUrl;
|
|
286
|
-
this.bcChannel = serverUrl +
|
|
194
|
+
this.bcChannel = serverUrl + "/" + roomname;
|
|
287
195
|
this.maxBackoffTime = maxBackoffTime;
|
|
288
|
-
/**
|
|
289
|
-
* The specified url parameters. This can be safely updated. The changed parameters will be used
|
|
290
|
-
* when a new connection is established.
|
|
291
|
-
* @type {Object<string,string>}
|
|
292
|
-
*/
|
|
293
196
|
this.params = params;
|
|
294
197
|
this.protocols = protocols;
|
|
295
198
|
this.roomname = roomname;
|
|
@@ -302,41 +205,22 @@ class WebsocketProvider extends observable.ObservableV2 {
|
|
|
302
205
|
this.disableBc = disableBc;
|
|
303
206
|
this.wsUnsuccessfulReconnects = 0;
|
|
304
207
|
this.messageHandlers = messageHandlers.slice();
|
|
305
|
-
/**
|
|
306
|
-
* @type {boolean}
|
|
307
|
-
*/
|
|
308
208
|
this._synced = false;
|
|
309
|
-
/**
|
|
310
|
-
* @type {WebSocket?}
|
|
311
|
-
*/
|
|
312
209
|
this.ws = null;
|
|
313
210
|
this.wsLastMessageReceived = 0;
|
|
314
|
-
/**
|
|
315
|
-
* Whether to connect to other peers or not
|
|
316
|
-
* @type {boolean}
|
|
317
|
-
*/
|
|
318
211
|
this.shouldConnect = connect;
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* @type {number}
|
|
322
|
-
*/
|
|
323
212
|
this._resyncInterval = 0;
|
|
324
213
|
if (resyncInterval > 0) {
|
|
325
|
-
this._resyncInterval = /** @type {any} */
|
|
214
|
+
this._resyncInterval = /** @type {any} */
|
|
215
|
+
setInterval(() => {
|
|
326
216
|
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
327
|
-
// resend sync step 1
|
|
328
217
|
const encoder = encoding.createEncoder();
|
|
329
218
|
encoding.writeVarUint(encoder, messageSync);
|
|
330
219
|
sync.writeSyncStep1(encoder, doc);
|
|
331
220
|
this.ws.send(encoding.toUint8Array(encoder));
|
|
332
221
|
}
|
|
333
|
-
}, resyncInterval)
|
|
222
|
+
}, resyncInterval);
|
|
334
223
|
}
|
|
335
|
-
|
|
336
|
-
/**
|
|
337
|
-
* @param {ArrayBuffer} data
|
|
338
|
-
* @param {any} origin
|
|
339
|
-
*/
|
|
340
224
|
this._bcSubscriber = (data, origin) => {
|
|
341
225
|
if (origin !== this) {
|
|
342
226
|
const encoder = readMessage(this, new Uint8Array(data), false);
|
|
@@ -345,11 +229,6 @@ class WebsocketProvider extends observable.ObservableV2 {
|
|
|
345
229
|
}
|
|
346
230
|
}
|
|
347
231
|
};
|
|
348
|
-
/**
|
|
349
|
-
* Listens to Yjs updates and sends them to remote peers (ws and broadcastchannel)
|
|
350
|
-
* @param {Uint8Array} update
|
|
351
|
-
* @param {any} origin
|
|
352
|
-
*/
|
|
353
232
|
this._updateHandler = (update, origin) => {
|
|
354
233
|
if (origin !== this) {
|
|
355
234
|
const encoder = encoding.createEncoder();
|
|
@@ -358,11 +237,7 @@ class WebsocketProvider extends observable.ObservableV2 {
|
|
|
358
237
|
broadcastMessage(this, encoding.toUint8Array(encoder));
|
|
359
238
|
}
|
|
360
239
|
};
|
|
361
|
-
this.doc.on(
|
|
362
|
-
/**
|
|
363
|
-
* @param {any} changed
|
|
364
|
-
* @param {any} _origin
|
|
365
|
-
*/
|
|
240
|
+
this.doc.on("update", this._updateHandler);
|
|
366
241
|
this._awarenessUpdateHandler = ({ added, updated, removed }, _origin) => {
|
|
367
242
|
const changedClients = added.concat(updated).concat(removed);
|
|
368
243
|
const encoder = encoding.createEncoder();
|
|
@@ -377,85 +252,74 @@ class WebsocketProvider extends observable.ObservableV2 {
|
|
|
377
252
|
awareness.removeAwarenessStates(
|
|
378
253
|
this.awareness,
|
|
379
254
|
[doc.clientID],
|
|
380
|
-
|
|
255
|
+
"app closed"
|
|
381
256
|
);
|
|
382
257
|
};
|
|
383
|
-
if (environment.isNode && typeof process !==
|
|
384
|
-
process.on(
|
|
258
|
+
if (environment.isNode && typeof process !== "undefined") {
|
|
259
|
+
process.on("exit", this._exitHandler);
|
|
385
260
|
}
|
|
386
|
-
awareness$1.on(
|
|
387
|
-
this._checkInterval = /** @type {any} */
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
261
|
+
awareness$1.on("update", this._awarenessUpdateHandler);
|
|
262
|
+
this._checkInterval = /** @type {any} */
|
|
263
|
+
setInterval(() => {
|
|
264
|
+
if (this.wsconnected && messageReconnectTimeout < time.getUnixTime() - this.wsLastMessageReceived) {
|
|
265
|
+
closeWebsocketConnection(
|
|
266
|
+
this,
|
|
267
|
+
/** @type {WebSocket} */
|
|
268
|
+
this.ws,
|
|
269
|
+
null
|
|
270
|
+
);
|
|
396
271
|
}
|
|
397
|
-
}, messageReconnectTimeout / 10)
|
|
272
|
+
}, messageReconnectTimeout / 10);
|
|
398
273
|
if (connect) {
|
|
399
274
|
this.connect();
|
|
400
275
|
}
|
|
401
276
|
}
|
|
402
|
-
|
|
403
|
-
get url () {
|
|
277
|
+
get url() {
|
|
404
278
|
const encodedParams = url.encodeQueryParams(this.params);
|
|
405
|
-
return this.serverUrl +
|
|
406
|
-
(encodedParams.length === 0 ? '' : '?' + encodedParams)
|
|
279
|
+
return this.serverUrl + "/" + this.roomname + (encodedParams.length === 0 ? "" : "?" + encodedParams);
|
|
407
280
|
}
|
|
408
|
-
|
|
409
281
|
/**
|
|
410
282
|
* @type {boolean}
|
|
411
283
|
*/
|
|
412
|
-
get synced
|
|
413
|
-
return this._synced
|
|
284
|
+
get synced() {
|
|
285
|
+
return this._synced;
|
|
414
286
|
}
|
|
415
|
-
|
|
416
|
-
set synced (state) {
|
|
287
|
+
set synced(state) {
|
|
417
288
|
if (this._synced !== state) {
|
|
418
289
|
this._synced = state;
|
|
419
|
-
|
|
420
|
-
this.emit(
|
|
421
|
-
this.emit('sync', [state]);
|
|
290
|
+
this.emit("synced", [state]);
|
|
291
|
+
this.emit("sync", [state]);
|
|
422
292
|
}
|
|
423
293
|
}
|
|
424
|
-
|
|
425
|
-
destroy () {
|
|
294
|
+
destroy() {
|
|
426
295
|
if (this._resyncInterval !== 0) {
|
|
427
296
|
clearInterval(this._resyncInterval);
|
|
428
297
|
}
|
|
429
298
|
clearInterval(this._checkInterval);
|
|
430
299
|
this.disconnect();
|
|
431
|
-
if (environment.isNode && typeof process !==
|
|
432
|
-
process.off(
|
|
300
|
+
if (environment.isNode && typeof process !== "undefined") {
|
|
301
|
+
process.off("exit", this._exitHandler);
|
|
433
302
|
}
|
|
434
|
-
this.awareness.off(
|
|
435
|
-
this.doc.off(
|
|
303
|
+
this.awareness.off("update", this._awarenessUpdateHandler);
|
|
304
|
+
this.doc.off("update", this._updateHandler);
|
|
436
305
|
super.destroy();
|
|
437
306
|
}
|
|
438
|
-
|
|
439
|
-
connectBc () {
|
|
307
|
+
connectBc() {
|
|
440
308
|
if (this.disableBc) {
|
|
441
|
-
return
|
|
309
|
+
return;
|
|
442
310
|
}
|
|
443
311
|
if (!this.bcconnected) {
|
|
444
312
|
broadcastchannel.subscribe(this.bcChannel, this._bcSubscriber);
|
|
445
313
|
this.bcconnected = true;
|
|
446
314
|
}
|
|
447
|
-
// send sync step1 to bc
|
|
448
|
-
// write sync step 1
|
|
449
315
|
const encoderSync = encoding.createEncoder();
|
|
450
316
|
encoding.writeVarUint(encoderSync, messageSync);
|
|
451
317
|
sync.writeSyncStep1(encoderSync, this.doc);
|
|
452
318
|
broadcastchannel.publish(this.bcChannel, encoding.toUint8Array(encoderSync), this);
|
|
453
|
-
// broadcast local state
|
|
454
319
|
const encoderState = encoding.createEncoder();
|
|
455
320
|
encoding.writeVarUint(encoderState, messageSync);
|
|
456
321
|
sync.writeSyncStep2(encoderState, this.doc);
|
|
457
322
|
broadcastchannel.publish(this.bcChannel, encoding.toUint8Array(encoderState), this);
|
|
458
|
-
// write queryAwareness
|
|
459
323
|
const encoderAwarenessQuery = encoding.createEncoder();
|
|
460
324
|
encoding.writeVarUint(encoderAwarenessQuery, messageQueryAwareness);
|
|
461
325
|
broadcastchannel.publish(
|
|
@@ -463,7 +327,6 @@ class WebsocketProvider extends observable.ObservableV2 {
|
|
|
463
327
|
encoding.toUint8Array(encoderAwarenessQuery),
|
|
464
328
|
this
|
|
465
329
|
);
|
|
466
|
-
// broadcast local awareness state
|
|
467
330
|
const encoderAwarenessState = encoding.createEncoder();
|
|
468
331
|
encoding.writeVarUint(encoderAwarenessState, messageAwareness);
|
|
469
332
|
encoding.writeVarUint8Array(
|
|
@@ -478,16 +341,14 @@ class WebsocketProvider extends observable.ObservableV2 {
|
|
|
478
341
|
this
|
|
479
342
|
);
|
|
480
343
|
}
|
|
481
|
-
|
|
482
|
-
disconnectBc () {
|
|
483
|
-
// broadcast message with local awareness state set to null (indicating disconnect)
|
|
344
|
+
disconnectBc() {
|
|
484
345
|
const encoder = encoding.createEncoder();
|
|
485
346
|
encoding.writeVarUint(encoder, messageAwareness);
|
|
486
347
|
encoding.writeVarUint8Array(
|
|
487
348
|
encoder,
|
|
488
349
|
awareness.encodeAwarenessUpdate(this.awareness, [
|
|
489
350
|
this.doc.clientID
|
|
490
|
-
], new Map())
|
|
351
|
+
], /* @__PURE__ */ new Map())
|
|
491
352
|
);
|
|
492
353
|
broadcastMessage(this, encoding.toUint8Array(encoder));
|
|
493
354
|
if (this.bcconnected) {
|
|
@@ -495,16 +356,14 @@ class WebsocketProvider extends observable.ObservableV2 {
|
|
|
495
356
|
this.bcconnected = false;
|
|
496
357
|
}
|
|
497
358
|
}
|
|
498
|
-
|
|
499
|
-
disconnect () {
|
|
359
|
+
disconnect() {
|
|
500
360
|
this.shouldConnect = false;
|
|
501
361
|
this.disconnectBc();
|
|
502
362
|
if (this.ws !== null) {
|
|
503
363
|
closeWebsocketConnection(this, this.ws, null);
|
|
504
364
|
}
|
|
505
365
|
}
|
|
506
|
-
|
|
507
|
-
connect () {
|
|
366
|
+
connect() {
|
|
508
367
|
this.shouldConnect = true;
|
|
509
368
|
if (!this.wsconnected && this.ws === null) {
|
|
510
369
|
setupWS(this);
|
|
@@ -512,7 +371,6 @@ class WebsocketProvider extends observable.ObservableV2 {
|
|
|
512
371
|
}
|
|
513
372
|
}
|
|
514
373
|
}
|
|
515
|
-
|
|
516
374
|
exports.WebsocketProvider = WebsocketProvider;
|
|
517
375
|
exports.messageAuth = messageAuth;
|
|
518
376
|
exports.messageAwareness = messageAwareness;
|