@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,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* Utility module to work with sets.
|
|
5
|
-
*
|
|
6
|
-
* @module set
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
const create = () => new Set();
|
|
10
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const create = () => /* @__PURE__ */ new Set();
|
|
11
4
|
exports.create = create;
|
|
@@ -1,78 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/* eslint-env browser */
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Isomorphic variable storage.
|
|
7
|
-
*
|
|
8
|
-
* Uses LocalStorage in the browser and falls back to in-memory storage.
|
|
9
|
-
*
|
|
10
|
-
* @module storage
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
/* c8 ignore start */
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
14
3
|
class VarStoragePolyfill {
|
|
15
|
-
constructor
|
|
16
|
-
this.map = new Map();
|
|
4
|
+
constructor() {
|
|
5
|
+
this.map = /* @__PURE__ */ new Map();
|
|
17
6
|
}
|
|
18
|
-
|
|
19
7
|
/**
|
|
20
8
|
* @param {string} key
|
|
21
9
|
* @param {any} newValue
|
|
22
10
|
*/
|
|
23
|
-
setItem
|
|
11
|
+
setItem(key, newValue) {
|
|
24
12
|
this.map.set(key, newValue);
|
|
25
13
|
}
|
|
26
|
-
|
|
27
14
|
/**
|
|
28
15
|
* @param {string} key
|
|
29
16
|
*/
|
|
30
|
-
getItem
|
|
31
|
-
return this.map.get(key)
|
|
17
|
+
getItem(key) {
|
|
18
|
+
return this.map.get(key);
|
|
32
19
|
}
|
|
33
20
|
}
|
|
34
|
-
/* c8 ignore stop */
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* @type {any}
|
|
38
|
-
*/
|
|
39
21
|
let _localStorage = new VarStoragePolyfill();
|
|
40
22
|
let usePolyfill = true;
|
|
41
|
-
|
|
42
|
-
/* c8 ignore start */
|
|
43
23
|
try {
|
|
44
|
-
|
|
45
|
-
if (typeof localStorage !== 'undefined' && localStorage) {
|
|
24
|
+
if (typeof window !== "undefined" && typeof localStorage !== "undefined" && localStorage) {
|
|
46
25
|
_localStorage = localStorage;
|
|
47
26
|
usePolyfill = false;
|
|
48
27
|
}
|
|
49
|
-
} catch (e) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* This is basically localStorage in browser, or a polyfill in nodejs
|
|
54
|
-
*/
|
|
55
|
-
/* c8 ignore next */
|
|
28
|
+
} catch (e) {
|
|
29
|
+
}
|
|
56
30
|
const varStorage = _localStorage;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* A polyfill for `removeEventListener('storage', event => {..})` that does nothing if the polyfill is being used.
|
|
69
|
-
*
|
|
70
|
-
* @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler
|
|
71
|
-
* @function
|
|
72
|
-
*/
|
|
73
|
-
/* c8 ignore next */
|
|
74
|
-
const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler));
|
|
75
|
-
|
|
31
|
+
const onChange = (eventHandler) => usePolyfill || addEventListener(
|
|
32
|
+
"storage",
|
|
33
|
+
/** @type {any} */
|
|
34
|
+
eventHandler
|
|
35
|
+
);
|
|
36
|
+
const offChange = (eventHandler) => usePolyfill || removeEventListener(
|
|
37
|
+
"storage",
|
|
38
|
+
/** @type {any} */
|
|
39
|
+
eventHandler
|
|
40
|
+
);
|
|
76
41
|
exports.offChange = offChange;
|
|
77
42
|
exports.onChange = onChange;
|
|
78
43
|
exports.varStorage = varStorage;
|
|
@@ -1,88 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Utility module to work with strings.
|
|
7
|
-
*
|
|
8
|
-
* @module string
|
|
9
|
-
*/
|
|
10
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const array = require("./array.js");
|
|
11
4
|
const fromCharCode = String.fromCharCode;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @param {string} s
|
|
15
|
-
* @return {string}
|
|
16
|
-
*/
|
|
17
|
-
const toLowerCase = s => s.toLowerCase();
|
|
18
|
-
|
|
5
|
+
const toLowerCase = (s) => s.toLowerCase();
|
|
19
6
|
const trimLeftRegex = /^\s*/g;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* @param {string} s
|
|
23
|
-
* @return {string}
|
|
24
|
-
*/
|
|
25
|
-
const trimLeft = s => s.replace(trimLeftRegex, '');
|
|
26
|
-
|
|
7
|
+
const trimLeft = (s) => s.replace(trimLeftRegex, "");
|
|
27
8
|
const fromCamelCaseRegex = /([A-Z])/g;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
* @param {string} s
|
|
31
|
-
* @param {string} separator
|
|
32
|
-
* @return {string}
|
|
33
|
-
*/
|
|
34
|
-
const fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, match => `${separator}${toLowerCase(match)}`));
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* @param {string} str
|
|
38
|
-
* @return {Uint8Array<ArrayBuffer>}
|
|
39
|
-
*/
|
|
40
|
-
const _encodeUtf8Polyfill = str => {
|
|
9
|
+
const fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, (match) => `${separator}${toLowerCase(match)}`));
|
|
10
|
+
const _encodeUtf8Polyfill = (str) => {
|
|
41
11
|
const encodedString = unescape(encodeURIComponent(str));
|
|
42
12
|
const len = encodedString.length;
|
|
43
13
|
const buf = new Uint8Array(len);
|
|
44
14
|
for (let i = 0; i < len; i++) {
|
|
45
|
-
buf[i] = /** @type {number} */
|
|
15
|
+
buf[i] = /** @type {number} */
|
|
16
|
+
encodedString.codePointAt(i);
|
|
46
17
|
}
|
|
47
|
-
return buf
|
|
18
|
+
return buf;
|
|
48
19
|
};
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
* @param {string} str
|
|
55
|
-
* @return {Uint8Array<ArrayBuffer>}
|
|
56
|
-
*/
|
|
57
|
-
const _encodeUtf8Native = str => utf8TextEncoder.encode(str);
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* @param {string} str
|
|
61
|
-
* @return {Uint8Array}
|
|
62
|
-
*/
|
|
63
|
-
/* c8 ignore next */
|
|
20
|
+
const utf8TextEncoder = (
|
|
21
|
+
/** @type {TextEncoder} */
|
|
22
|
+
typeof TextEncoder !== "undefined" ? new TextEncoder() : null
|
|
23
|
+
);
|
|
24
|
+
const _encodeUtf8Native = (str) => utf8TextEncoder.encode(str);
|
|
64
25
|
const encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill;
|
|
65
|
-
|
|
66
|
-
/* c8 ignore next */
|
|
67
|
-
exports.utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true });
|
|
68
|
-
|
|
69
|
-
/* c8 ignore start */
|
|
26
|
+
exports.utf8TextDecoder = typeof TextDecoder === "undefined" ? null : new TextDecoder("utf-8", { fatal: true, ignoreBOM: true });
|
|
70
27
|
if (exports.utf8TextDecoder && exports.utf8TextDecoder.decode(new Uint8Array()).length === 1) {
|
|
71
|
-
// Safari doesn't handle BOM correctly.
|
|
72
|
-
// This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.
|
|
73
|
-
// utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and
|
|
74
|
-
// utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call
|
|
75
|
-
// Another issue is that from then on no BOM chars are recognized anymore
|
|
76
|
-
/* c8 ignore next */
|
|
77
28
|
exports.utf8TextDecoder = null;
|
|
78
29
|
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* @param {string} source
|
|
82
|
-
* @param {number} n
|
|
83
|
-
*/
|
|
84
|
-
const repeat = (source, n) => array.unfold(n, () => source).join('');
|
|
85
|
-
|
|
30
|
+
const repeat = (source, n) => array.unfold(n, () => source).join("");
|
|
86
31
|
exports._encodeUtf8Native = _encodeUtf8Native;
|
|
87
32
|
exports._encodeUtf8Polyfill = _encodeUtf8Polyfill;
|
|
88
33
|
exports.encodeUtf8 = encodeUtf8;
|
|
@@ -1,14 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Utility module to work with EcmaScript Symbols.
|
|
5
|
-
*
|
|
6
|
-
* @module symbol
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Return fresh symbol.
|
|
11
|
-
*/
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
12
3
|
const create = Symbol;
|
|
13
|
-
|
|
14
4
|
exports.create = create;
|
|
@@ -1,17 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Utility module to work with time.
|
|
5
|
-
*
|
|
6
|
-
* @module time
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Return current unix time.
|
|
12
|
-
*
|
|
13
|
-
* @return {number}
|
|
14
|
-
*/
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
15
3
|
const getUnixTime = Date.now;
|
|
16
|
-
|
|
17
4
|
exports.getUnixTime = getUnixTime;
|
|
@@ -1,31 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const EqualityTraitSymbol = Symbol(
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @typedef {{ [EqualityTraitSymbol]:(other:EqualityTrait)=>boolean }} EqualityTrait
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
*
|
|
11
|
-
* Utility function to compare any two objects.
|
|
12
|
-
*
|
|
13
|
-
* Note that it is expected that the first parameter is more specific than the latter one.
|
|
14
|
-
*
|
|
15
|
-
* @example js
|
|
16
|
-
* class X { [traits.EqualityTraitSymbol] (other) { return other === this } }
|
|
17
|
-
* class X2 { [traits.EqualityTraitSymbol] (other) { return other === this }, x2 () { return 2 } }
|
|
18
|
-
* // this is fine
|
|
19
|
-
* traits.equals(new X2(), new X())
|
|
20
|
-
* // this is not, because the left type is less specific than the right one
|
|
21
|
-
* traits.equals(new X(), new X2())
|
|
22
|
-
*
|
|
23
|
-
* @template {EqualityTrait} T
|
|
24
|
-
* @param {NoInfer<T>} a
|
|
25
|
-
* @param {T} b
|
|
26
|
-
* @return {boolean}
|
|
27
|
-
*/
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const EqualityTraitSymbol = Symbol("Equality");
|
|
28
4
|
const equals = (a, b) => a === b || !!a?.[EqualityTraitSymbol]?.(b) || false;
|
|
29
|
-
|
|
30
5
|
exports.EqualityTraitSymbol = EqualityTraitSymbol;
|
|
31
6
|
exports.equals = equals;
|
|
@@ -1,19 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Utility module to work with urls.
|
|
7
|
-
*
|
|
8
|
-
* @module url
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @param {Object<string,string>} params
|
|
14
|
-
* @return {string}
|
|
15
|
-
*/
|
|
16
|
-
const encodeQueryParams = params =>
|
|
17
|
-
object.map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&');
|
|
18
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const object = require("./object.js");
|
|
4
|
+
const encodeQueryParams = (params) => object.map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join("&");
|
|
19
5
|
exports.encodeQueryParams = encodeQueryParams;
|
|
@@ -1,26 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const decoding = require("../lib0/decoding.js");
|
|
5
4
|
const messagePermissionDenied = 0;
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @callback PermissionDeniedHandler
|
|
9
|
-
* @param {any} y
|
|
10
|
-
* @param {string} reason
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
* @param {decoding.Decoder} decoder
|
|
16
|
-
* @param {Y.Doc} y
|
|
17
|
-
* @param {PermissionDeniedHandler} permissionDeniedHandler
|
|
18
|
-
*/
|
|
19
5
|
const readAuthMessage = (decoder, y, permissionDeniedHandler) => {
|
|
20
6
|
switch (decoding.readVarUint(decoder)) {
|
|
21
|
-
case messagePermissionDenied:
|
|
7
|
+
case messagePermissionDenied:
|
|
8
|
+
permissionDeniedHandler(y, decoding.readVarString(decoder));
|
|
22
9
|
}
|
|
23
10
|
};
|
|
24
|
-
|
|
25
11
|
exports.messagePermissionDenied = messagePermissionDenied;
|
|
26
12
|
exports.readAuthMessage = readAuthMessage;
|
|
@@ -1,72 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @module awareness-protocol
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const outdatedTimeout = 30000;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @typedef {Object} MetaClientState
|
|
19
|
-
* @property {number} MetaClientState.clock
|
|
20
|
-
* @property {number} MetaClientState.lastUpdated unix timestamp
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information
|
|
25
|
-
* (cursor, username, status, ..). Each client can update its own local state and listen to state changes of
|
|
26
|
-
* remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.
|
|
27
|
-
*
|
|
28
|
-
* Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override
|
|
29
|
-
* its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is
|
|
30
|
-
* applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that
|
|
31
|
-
* a remote client is offline, it may propagate a message with
|
|
32
|
-
* `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a
|
|
33
|
-
* message is received, and the known clock of that client equals the received clock, it will override the state with `null`.
|
|
34
|
-
*
|
|
35
|
-
* Before a client disconnects, it should propagate a `null` state with an updated clock.
|
|
36
|
-
*
|
|
37
|
-
* Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.
|
|
38
|
-
*
|
|
39
|
-
* @extends {Observable<string>}
|
|
40
|
-
*/
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const encoding = require("../lib0/encoding.js");
|
|
4
|
+
const decoding = require("../lib0/decoding.js");
|
|
5
|
+
const time = require("../lib0/time.js");
|
|
6
|
+
const math = require("../lib0/math.js");
|
|
7
|
+
const observable = require("../lib0/observable.js");
|
|
8
|
+
const _function = require("../lib0/function.js");
|
|
9
|
+
const outdatedTimeout = 3e4;
|
|
41
10
|
class Awareness extends observable.Observable {
|
|
42
11
|
/**
|
|
43
12
|
* @param {Y.Doc} doc
|
|
44
13
|
*/
|
|
45
|
-
constructor
|
|
14
|
+
constructor(doc) {
|
|
46
15
|
super();
|
|
47
16
|
this.doc = doc;
|
|
48
|
-
/**
|
|
49
|
-
* @type {number}
|
|
50
|
-
*/
|
|
51
17
|
this.clientID = doc.clientID;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
this.states = new Map();
|
|
57
|
-
/**
|
|
58
|
-
* @type {Map<number, MetaClientState>}
|
|
59
|
-
*/
|
|
60
|
-
this.meta = new Map();
|
|
61
|
-
this._checkInterval = /** @type {any} */ (setInterval(() => {
|
|
18
|
+
this.states = /* @__PURE__ */ new Map();
|
|
19
|
+
this.meta = /* @__PURE__ */ new Map();
|
|
20
|
+
this._checkInterval = /** @type {any} */
|
|
21
|
+
setInterval(() => {
|
|
62
22
|
const now = time.getUnixTime();
|
|
63
|
-
if (this.getLocalState() !== null &&
|
|
64
|
-
|
|
23
|
+
if (this.getLocalState() !== null && outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */
|
|
24
|
+
this.meta.get(this.clientID).lastUpdated) {
|
|
65
25
|
this.setLocalState(this.getLocalState());
|
|
66
26
|
}
|
|
67
|
-
/**
|
|
68
|
-
* @type {Array<number>}
|
|
69
|
-
*/
|
|
70
27
|
const remove = [];
|
|
71
28
|
this.meta.forEach((meta, clientid) => {
|
|
72
29
|
if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {
|
|
@@ -74,36 +31,33 @@ class Awareness extends observable.Observable {
|
|
|
74
31
|
}
|
|
75
32
|
});
|
|
76
33
|
if (remove.length > 0) {
|
|
77
|
-
removeAwarenessStates(this, remove,
|
|
34
|
+
removeAwarenessStates(this, remove, "timeout");
|
|
78
35
|
}
|
|
79
|
-
}, math.floor(outdatedTimeout / 10))
|
|
80
|
-
doc.on(
|
|
36
|
+
}, math.floor(outdatedTimeout / 10));
|
|
37
|
+
doc.on("destroy", () => {
|
|
81
38
|
this.destroy();
|
|
82
39
|
});
|
|
83
40
|
this.setLocalState({});
|
|
84
41
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
this.emit('destroy', [this]);
|
|
42
|
+
destroy() {
|
|
43
|
+
this.emit("destroy", [this]);
|
|
88
44
|
this.setLocalState(null);
|
|
89
45
|
super.destroy();
|
|
90
46
|
clearInterval(this._checkInterval);
|
|
91
47
|
}
|
|
92
|
-
|
|
93
48
|
/**
|
|
94
49
|
* @return {Object<string,any>|null}
|
|
95
50
|
*/
|
|
96
|
-
getLocalState
|
|
97
|
-
return this.states.get(this.clientID) || null
|
|
51
|
+
getLocalState() {
|
|
52
|
+
return this.states.get(this.clientID) || null;
|
|
98
53
|
}
|
|
99
|
-
|
|
100
54
|
/**
|
|
101
55
|
* @param {Object<string,any>|null} state
|
|
102
56
|
*/
|
|
103
|
-
setLocalState
|
|
57
|
+
setLocalState(state) {
|
|
104
58
|
const clientID = this.clientID;
|
|
105
59
|
const currLocalMeta = this.meta.get(clientID);
|
|
106
|
-
const clock = currLocalMeta ===
|
|
60
|
+
const clock = currLocalMeta === void 0 ? 0 : currLocalMeta.clock + 1;
|
|
107
61
|
const prevState = this.states.get(clientID);
|
|
108
62
|
if (state === null) {
|
|
109
63
|
this.states.delete(clientID);
|
|
@@ -131,16 +85,15 @@ class Awareness extends observable.Observable {
|
|
|
131
85
|
}
|
|
132
86
|
}
|
|
133
87
|
if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {
|
|
134
|
-
this.emit(
|
|
88
|
+
this.emit("change", [{ added, updated: filteredUpdated, removed }, "local"]);
|
|
135
89
|
}
|
|
136
|
-
this.emit(
|
|
90
|
+
this.emit("update", [{ added, updated, removed }, "local"]);
|
|
137
91
|
}
|
|
138
|
-
|
|
139
92
|
/**
|
|
140
93
|
* @param {string} field
|
|
141
94
|
* @param {any} value
|
|
142
95
|
*/
|
|
143
|
-
setLocalStateField
|
|
96
|
+
setLocalStateField(field, value) {
|
|
144
97
|
const state = this.getLocalState();
|
|
145
98
|
if (state !== null) {
|
|
146
99
|
this.setLocalState({
|
|
@@ -149,23 +102,13 @@ class Awareness extends observable.Observable {
|
|
|
149
102
|
});
|
|
150
103
|
}
|
|
151
104
|
}
|
|
152
|
-
|
|
153
105
|
/**
|
|
154
106
|
* @return {Map<number,Object<string,any>>}
|
|
155
107
|
*/
|
|
156
|
-
getStates
|
|
157
|
-
return this.states
|
|
108
|
+
getStates() {
|
|
109
|
+
return this.states;
|
|
158
110
|
}
|
|
159
111
|
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Mark (remote) clients as inactive and remove them from the list of active peers.
|
|
163
|
-
* This change will be propagated to remote clients.
|
|
164
|
-
*
|
|
165
|
-
* @param {Awareness} awareness
|
|
166
|
-
* @param {Array<number>} clients
|
|
167
|
-
* @param {any} origin
|
|
168
|
-
*/
|
|
169
112
|
const removeAwarenessStates = (awareness, clients, origin) => {
|
|
170
113
|
const removed = [];
|
|
171
114
|
for (let i = 0; i < clients.length; i++) {
|
|
@@ -173,7 +116,10 @@ const removeAwarenessStates = (awareness, clients, origin) => {
|
|
|
173
116
|
if (awareness.states.has(clientID)) {
|
|
174
117
|
awareness.states.delete(clientID);
|
|
175
118
|
if (clientID === awareness.clientID) {
|
|
176
|
-
const curMeta =
|
|
119
|
+
const curMeta = (
|
|
120
|
+
/** @type {MetaClientState} */
|
|
121
|
+
awareness.meta.get(clientID)
|
|
122
|
+
);
|
|
177
123
|
awareness.meta.set(clientID, {
|
|
178
124
|
clock: curMeta.clock + 1,
|
|
179
125
|
lastUpdated: time.getUnixTime()
|
|
@@ -183,16 +129,10 @@ const removeAwarenessStates = (awareness, clients, origin) => {
|
|
|
183
129
|
}
|
|
184
130
|
}
|
|
185
131
|
if (removed.length > 0) {
|
|
186
|
-
awareness.emit(
|
|
187
|
-
awareness.emit(
|
|
132
|
+
awareness.emit("change", [{ added: [], updated: [], removed }, origin]);
|
|
133
|
+
awareness.emit("update", [{ added: [], updated: [], removed }, origin]);
|
|
188
134
|
}
|
|
189
135
|
};
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* @param {Awareness} awareness
|
|
193
|
-
* @param {Array<number>} clients
|
|
194
|
-
* @return {Uint8Array}
|
|
195
|
-
*/
|
|
196
136
|
const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {
|
|
197
137
|
const len = clients.length;
|
|
198
138
|
const encoder = encoding.createEncoder();
|
|
@@ -200,19 +140,16 @@ const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) =>
|
|
|
200
140
|
for (let i = 0; i < len; i++) {
|
|
201
141
|
const clientID = clients[i];
|
|
202
142
|
const state = states.get(clientID) || null;
|
|
203
|
-
const clock =
|
|
143
|
+
const clock = (
|
|
144
|
+
/** @type {MetaClientState} */
|
|
145
|
+
awareness.meta.get(clientID).clock
|
|
146
|
+
);
|
|
204
147
|
encoding.writeVarUint(encoder, clientID);
|
|
205
148
|
encoding.writeVarUint(encoder, clock);
|
|
206
149
|
encoding.writeVarString(encoder, JSON.stringify(state));
|
|
207
150
|
}
|
|
208
|
-
return encoding.toUint8Array(encoder)
|
|
151
|
+
return encoding.toUint8Array(encoder);
|
|
209
152
|
};
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* @param {Awareness} awareness
|
|
213
|
-
* @param {Uint8Array} update
|
|
214
|
-
* @param {any} origin This will be added to the emitted change event
|
|
215
|
-
*/
|
|
216
153
|
const applyAwarenessUpdate = (awareness, update, origin) => {
|
|
217
154
|
const decoder = decoding.createDecoder(update);
|
|
218
155
|
const timestamp = time.getUnixTime();
|
|
@@ -227,13 +164,10 @@ const applyAwarenessUpdate = (awareness, update, origin) => {
|
|
|
227
164
|
const state = JSON.parse(decoding.readVarString(decoder));
|
|
228
165
|
const clientMeta = awareness.meta.get(clientID);
|
|
229
166
|
const prevState = awareness.states.get(clientID);
|
|
230
|
-
const currClock = clientMeta ===
|
|
231
|
-
if (currClock < clock ||
|
|
167
|
+
const currClock = clientMeta === void 0 ? 0 : clientMeta.clock;
|
|
168
|
+
if (currClock < clock || currClock === clock && state === null && awareness.states.has(clientID)) {
|
|
232
169
|
if (state === null) {
|
|
233
|
-
// never let a remote client remove this local state
|
|
234
170
|
if (clientID === awareness.clientID && awareness.getLocalState() != null) {
|
|
235
|
-
// remote client removed the local state. Do not remote state. Broadcast a message indicating
|
|
236
|
-
// that this client still exists by increasing the clock
|
|
237
171
|
clock++;
|
|
238
172
|
} else {
|
|
239
173
|
awareness.states.delete(clientID);
|
|
@@ -245,9 +179,9 @@ const applyAwarenessUpdate = (awareness, update, origin) => {
|
|
|
245
179
|
clock,
|
|
246
180
|
lastUpdated: timestamp
|
|
247
181
|
});
|
|
248
|
-
if (clientMeta ===
|
|
182
|
+
if (clientMeta === void 0 && state !== null) {
|
|
249
183
|
added.push(clientID);
|
|
250
|
-
} else if (clientMeta !==
|
|
184
|
+
} else if (clientMeta !== void 0 && state === null) {
|
|
251
185
|
removed.push(clientID);
|
|
252
186
|
} else if (state !== null) {
|
|
253
187
|
if (!_function.equalityDeep(state, prevState)) {
|
|
@@ -258,17 +192,20 @@ const applyAwarenessUpdate = (awareness, update, origin) => {
|
|
|
258
192
|
}
|
|
259
193
|
}
|
|
260
194
|
if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {
|
|
261
|
-
awareness.emit(
|
|
262
|
-
added,
|
|
195
|
+
awareness.emit("change", [{
|
|
196
|
+
added,
|
|
197
|
+
updated: filteredUpdated,
|
|
198
|
+
removed
|
|
263
199
|
}, origin]);
|
|
264
200
|
}
|
|
265
201
|
if (added.length > 0 || updated.length > 0 || removed.length > 0) {
|
|
266
|
-
awareness.emit(
|
|
267
|
-
added,
|
|
202
|
+
awareness.emit("update", [{
|
|
203
|
+
added,
|
|
204
|
+
updated,
|
|
205
|
+
removed
|
|
268
206
|
}, origin]);
|
|
269
207
|
}
|
|
270
208
|
};
|
|
271
|
-
|
|
272
209
|
exports.Awareness = Awareness;
|
|
273
210
|
exports.applyAwarenessUpdate = applyAwarenessUpdate;
|
|
274
211
|
exports.encodeAwarenessUpdate = encodeAwarenessUpdate;
|