@colyseus/schema 4.0.3 → 4.0.5
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/build/Schema.d.ts +7 -0
- package/build/decoder/strategy/Callbacks.d.ts +7 -32
- package/build/index.cjs +21 -38
- package/build/index.cjs.map +1 -1
- package/build/index.js +21 -38
- package/build/index.mjs +21 -38
- package/build/index.mjs.map +1 -1
- package/package.json +20 -21
- package/src/Schema.ts +10 -0
- package/src/decoder/strategy/Callbacks.ts +17 -43
- package/src/decoder/strategy/getDecoderStateCallbacks.ts +2 -2
package/build/index.js
CHANGED
|
@@ -3672,6 +3672,15 @@
|
|
|
3672
3672
|
static is(type) {
|
|
3673
3673
|
return typeof (type[Symbol.metadata]) === "object";
|
|
3674
3674
|
}
|
|
3675
|
+
/**
|
|
3676
|
+
* Check if a value is an instance of Schema.
|
|
3677
|
+
* This method uses duck-typing to avoid issues with multiple @colyseus/schema versions.
|
|
3678
|
+
* @param obj Value to check
|
|
3679
|
+
* @returns true if the value is a Schema instance
|
|
3680
|
+
*/
|
|
3681
|
+
static isSchema(obj) {
|
|
3682
|
+
return typeof obj?.assign === "function";
|
|
3683
|
+
}
|
|
3675
3684
|
/**
|
|
3676
3685
|
* Track property changes
|
|
3677
3686
|
*/
|
|
@@ -4876,13 +4885,13 @@
|
|
|
4876
4885
|
// trigger onRemove on child structure.
|
|
4877
4886
|
//
|
|
4878
4887
|
if ((change.op & exports.OPERATION.DELETE) === exports.OPERATION.DELETE &&
|
|
4879
|
-
change.previousValue
|
|
4888
|
+
Schema.isSchema(change.previousValue)) {
|
|
4880
4889
|
const deleteCallbacks = callbacks[change.previousValue[$refId]]?.[exports.OPERATION.DELETE];
|
|
4881
4890
|
for (let i = deleteCallbacks?.length - 1; i >= 0; i--) {
|
|
4882
4891
|
deleteCallbacks[i]();
|
|
4883
4892
|
}
|
|
4884
4893
|
}
|
|
4885
|
-
if (ref
|
|
4894
|
+
if (Schema.isSchema(ref)) {
|
|
4886
4895
|
//
|
|
4887
4896
|
// Handle schema instance
|
|
4888
4897
|
//
|
|
@@ -5126,32 +5135,6 @@
|
|
|
5126
5135
|
decoder.triggerChanges = callback;
|
|
5127
5136
|
}
|
|
5128
5137
|
|
|
5129
|
-
/**
|
|
5130
|
-
* State Callbacks handler
|
|
5131
|
-
*
|
|
5132
|
-
* Usage:
|
|
5133
|
-
* ```ts
|
|
5134
|
-
* const $ = Callbacks.get(decoder);
|
|
5135
|
-
*
|
|
5136
|
-
* // Listen to property changes
|
|
5137
|
-
* $.listen("currentTurn", (currentValue, previousValue) => { ... });
|
|
5138
|
-
*
|
|
5139
|
-
* // Listen to collection additions
|
|
5140
|
-
* $.onAdd("entities", (sessionId, entity) => {
|
|
5141
|
-
* // Nested property listening
|
|
5142
|
-
* $.listen(entity, "hp", (currentHp, previousHp) => { ... });
|
|
5143
|
-
* });
|
|
5144
|
-
*
|
|
5145
|
-
* // Listen to collection removals
|
|
5146
|
-
* $.onRemove("entities", (sessionId, entity) => { ... });
|
|
5147
|
-
*
|
|
5148
|
-
* // Listen to any property change on an instance
|
|
5149
|
-
* $.onChange(entity, () => { ... });
|
|
5150
|
-
*
|
|
5151
|
-
* // Bind properties to another object
|
|
5152
|
-
* $.bindTo(player, playerVisual);
|
|
5153
|
-
* ```
|
|
5154
|
-
*/
|
|
5155
5138
|
class StateCallbackStrategy {
|
|
5156
5139
|
decoder;
|
|
5157
5140
|
uniqueRefIds = new Set();
|
|
@@ -5190,7 +5173,7 @@
|
|
|
5190
5173
|
immediate = immediate && this.isTriggering === false;
|
|
5191
5174
|
if (operation === exports.OPERATION.ADD && immediate) {
|
|
5192
5175
|
collection.forEach((value, key) => {
|
|
5193
|
-
handler(
|
|
5176
|
+
handler(value, key);
|
|
5194
5177
|
});
|
|
5195
5178
|
}
|
|
5196
5179
|
return this.addCallback(collection[$refId], operation, handler);
|
|
@@ -5292,7 +5275,7 @@
|
|
|
5292
5275
|
// trigger onRemove on child structure.
|
|
5293
5276
|
//
|
|
5294
5277
|
if ((change.op & exports.OPERATION.DELETE) === exports.OPERATION.DELETE &&
|
|
5295
|
-
change.previousValue
|
|
5278
|
+
Schema.isSchema(change.previousValue)) {
|
|
5296
5279
|
const childRefId = change.previousValue[$refId];
|
|
5297
5280
|
const deleteCallbacks = this.callbacks[childRefId]?.[exports.OPERATION.DELETE];
|
|
5298
5281
|
if (deleteCallbacks) {
|
|
@@ -5301,7 +5284,7 @@
|
|
|
5301
5284
|
}
|
|
5302
5285
|
}
|
|
5303
5286
|
}
|
|
5304
|
-
if (ref
|
|
5287
|
+
if (Schema.isSchema(ref)) {
|
|
5305
5288
|
//
|
|
5306
5289
|
// Handle Schema instance
|
|
5307
5290
|
//
|
|
@@ -5346,11 +5329,11 @@
|
|
|
5346
5329
|
// FIXME: `previousValue` should always be available.
|
|
5347
5330
|
//
|
|
5348
5331
|
if (change.previousValue !== undefined) {
|
|
5349
|
-
// trigger onRemove (
|
|
5332
|
+
// trigger onRemove (value, key)
|
|
5350
5333
|
const deleteCallbacks = $callbacks[exports.OPERATION.DELETE];
|
|
5351
5334
|
if (deleteCallbacks) {
|
|
5352
5335
|
for (let j = deleteCallbacks.length - 1; j >= 0; j--) {
|
|
5353
|
-
deleteCallbacks[j](
|
|
5336
|
+
deleteCallbacks[j](change.previousValue, dynamicIndex);
|
|
5354
5337
|
}
|
|
5355
5338
|
}
|
|
5356
5339
|
}
|
|
@@ -5360,7 +5343,7 @@
|
|
|
5360
5343
|
if (addCallbacks) {
|
|
5361
5344
|
this.isTriggering = true;
|
|
5362
5345
|
for (let j = addCallbacks.length - 1; j >= 0; j--) {
|
|
5363
|
-
addCallbacks[j](
|
|
5346
|
+
addCallbacks[j](change.value, dynamicIndex);
|
|
5364
5347
|
}
|
|
5365
5348
|
this.isTriggering = false;
|
|
5366
5349
|
}
|
|
@@ -5368,12 +5351,12 @@
|
|
|
5368
5351
|
}
|
|
5369
5352
|
else if ((change.op & exports.OPERATION.ADD) === exports.OPERATION.ADD &&
|
|
5370
5353
|
change.previousValue !== change.value) {
|
|
5371
|
-
// trigger onAdd (
|
|
5354
|
+
// trigger onAdd (value, key)
|
|
5372
5355
|
const addCallbacks = $callbacks[exports.OPERATION.ADD];
|
|
5373
5356
|
if (addCallbacks) {
|
|
5374
5357
|
this.isTriggering = true;
|
|
5375
5358
|
for (let j = addCallbacks.length - 1; j >= 0; j--) {
|
|
5376
|
-
addCallbacks[j](
|
|
5359
|
+
addCallbacks[j](change.value, dynamicIndex);
|
|
5377
5360
|
}
|
|
5378
5361
|
this.isTriggering = false;
|
|
5379
5362
|
}
|
|
@@ -5407,13 +5390,13 @@
|
|
|
5407
5390
|
* callbacks.listen("currentTurn", (currentValue, previousValue) => { ... });
|
|
5408
5391
|
*
|
|
5409
5392
|
* // Listen to collection additions
|
|
5410
|
-
* callbacks.onAdd("entities", (
|
|
5393
|
+
* callbacks.onAdd("entities", (entity, sessionId) => {
|
|
5411
5394
|
* // Nested property listening
|
|
5412
5395
|
* callbacks.listen(entity, "hp", (currentHp, previousHp) => { ... });
|
|
5413
5396
|
* });
|
|
5414
5397
|
*
|
|
5415
5398
|
* // Listen to collection removals
|
|
5416
|
-
* callbacks.onRemove("entities", (
|
|
5399
|
+
* callbacks.onRemove("entities", (entity, sessionId) => { ... });
|
|
5417
5400
|
*
|
|
5418
5401
|
* // Listen to any property change on an instance
|
|
5419
5402
|
* callbacks.onChange(entity, () => { ... });
|
package/build/index.mjs
CHANGED
|
@@ -3666,6 +3666,15 @@ class Schema {
|
|
|
3666
3666
|
static is(type) {
|
|
3667
3667
|
return typeof (type[Symbol.metadata]) === "object";
|
|
3668
3668
|
}
|
|
3669
|
+
/**
|
|
3670
|
+
* Check if a value is an instance of Schema.
|
|
3671
|
+
* This method uses duck-typing to avoid issues with multiple @colyseus/schema versions.
|
|
3672
|
+
* @param obj Value to check
|
|
3673
|
+
* @returns true if the value is a Schema instance
|
|
3674
|
+
*/
|
|
3675
|
+
static isSchema(obj) {
|
|
3676
|
+
return typeof obj?.assign === "function";
|
|
3677
|
+
}
|
|
3669
3678
|
/**
|
|
3670
3679
|
* Track property changes
|
|
3671
3680
|
*/
|
|
@@ -4870,13 +4879,13 @@ function getDecoderStateCallbacks(decoder) {
|
|
|
4870
4879
|
// trigger onRemove on child structure.
|
|
4871
4880
|
//
|
|
4872
4881
|
if ((change.op & OPERATION.DELETE) === OPERATION.DELETE &&
|
|
4873
|
-
change.previousValue
|
|
4882
|
+
Schema.isSchema(change.previousValue)) {
|
|
4874
4883
|
const deleteCallbacks = callbacks[change.previousValue[$refId]]?.[OPERATION.DELETE];
|
|
4875
4884
|
for (let i = deleteCallbacks?.length - 1; i >= 0; i--) {
|
|
4876
4885
|
deleteCallbacks[i]();
|
|
4877
4886
|
}
|
|
4878
4887
|
}
|
|
4879
|
-
if (ref
|
|
4888
|
+
if (Schema.isSchema(ref)) {
|
|
4880
4889
|
//
|
|
4881
4890
|
// Handle schema instance
|
|
4882
4891
|
//
|
|
@@ -5120,32 +5129,6 @@ function getRawChangesCallback(decoder, callback) {
|
|
|
5120
5129
|
decoder.triggerChanges = callback;
|
|
5121
5130
|
}
|
|
5122
5131
|
|
|
5123
|
-
/**
|
|
5124
|
-
* State Callbacks handler
|
|
5125
|
-
*
|
|
5126
|
-
* Usage:
|
|
5127
|
-
* ```ts
|
|
5128
|
-
* const $ = Callbacks.get(decoder);
|
|
5129
|
-
*
|
|
5130
|
-
* // Listen to property changes
|
|
5131
|
-
* $.listen("currentTurn", (currentValue, previousValue) => { ... });
|
|
5132
|
-
*
|
|
5133
|
-
* // Listen to collection additions
|
|
5134
|
-
* $.onAdd("entities", (sessionId, entity) => {
|
|
5135
|
-
* // Nested property listening
|
|
5136
|
-
* $.listen(entity, "hp", (currentHp, previousHp) => { ... });
|
|
5137
|
-
* });
|
|
5138
|
-
*
|
|
5139
|
-
* // Listen to collection removals
|
|
5140
|
-
* $.onRemove("entities", (sessionId, entity) => { ... });
|
|
5141
|
-
*
|
|
5142
|
-
* // Listen to any property change on an instance
|
|
5143
|
-
* $.onChange(entity, () => { ... });
|
|
5144
|
-
*
|
|
5145
|
-
* // Bind properties to another object
|
|
5146
|
-
* $.bindTo(player, playerVisual);
|
|
5147
|
-
* ```
|
|
5148
|
-
*/
|
|
5149
5132
|
class StateCallbackStrategy {
|
|
5150
5133
|
decoder;
|
|
5151
5134
|
uniqueRefIds = new Set();
|
|
@@ -5184,7 +5167,7 @@ class StateCallbackStrategy {
|
|
|
5184
5167
|
immediate = immediate && this.isTriggering === false;
|
|
5185
5168
|
if (operation === OPERATION.ADD && immediate) {
|
|
5186
5169
|
collection.forEach((value, key) => {
|
|
5187
|
-
handler(
|
|
5170
|
+
handler(value, key);
|
|
5188
5171
|
});
|
|
5189
5172
|
}
|
|
5190
5173
|
return this.addCallback(collection[$refId], operation, handler);
|
|
@@ -5286,7 +5269,7 @@ class StateCallbackStrategy {
|
|
|
5286
5269
|
// trigger onRemove on child structure.
|
|
5287
5270
|
//
|
|
5288
5271
|
if ((change.op & OPERATION.DELETE) === OPERATION.DELETE &&
|
|
5289
|
-
change.previousValue
|
|
5272
|
+
Schema.isSchema(change.previousValue)) {
|
|
5290
5273
|
const childRefId = change.previousValue[$refId];
|
|
5291
5274
|
const deleteCallbacks = this.callbacks[childRefId]?.[OPERATION.DELETE];
|
|
5292
5275
|
if (deleteCallbacks) {
|
|
@@ -5295,7 +5278,7 @@ class StateCallbackStrategy {
|
|
|
5295
5278
|
}
|
|
5296
5279
|
}
|
|
5297
5280
|
}
|
|
5298
|
-
if (ref
|
|
5281
|
+
if (Schema.isSchema(ref)) {
|
|
5299
5282
|
//
|
|
5300
5283
|
// Handle Schema instance
|
|
5301
5284
|
//
|
|
@@ -5340,11 +5323,11 @@ class StateCallbackStrategy {
|
|
|
5340
5323
|
// FIXME: `previousValue` should always be available.
|
|
5341
5324
|
//
|
|
5342
5325
|
if (change.previousValue !== undefined) {
|
|
5343
|
-
// trigger onRemove (
|
|
5326
|
+
// trigger onRemove (value, key)
|
|
5344
5327
|
const deleteCallbacks = $callbacks[OPERATION.DELETE];
|
|
5345
5328
|
if (deleteCallbacks) {
|
|
5346
5329
|
for (let j = deleteCallbacks.length - 1; j >= 0; j--) {
|
|
5347
|
-
deleteCallbacks[j](
|
|
5330
|
+
deleteCallbacks[j](change.previousValue, dynamicIndex);
|
|
5348
5331
|
}
|
|
5349
5332
|
}
|
|
5350
5333
|
}
|
|
@@ -5354,7 +5337,7 @@ class StateCallbackStrategy {
|
|
|
5354
5337
|
if (addCallbacks) {
|
|
5355
5338
|
this.isTriggering = true;
|
|
5356
5339
|
for (let j = addCallbacks.length - 1; j >= 0; j--) {
|
|
5357
|
-
addCallbacks[j](
|
|
5340
|
+
addCallbacks[j](change.value, dynamicIndex);
|
|
5358
5341
|
}
|
|
5359
5342
|
this.isTriggering = false;
|
|
5360
5343
|
}
|
|
@@ -5362,12 +5345,12 @@ class StateCallbackStrategy {
|
|
|
5362
5345
|
}
|
|
5363
5346
|
else if ((change.op & OPERATION.ADD) === OPERATION.ADD &&
|
|
5364
5347
|
change.previousValue !== change.value) {
|
|
5365
|
-
// trigger onAdd (
|
|
5348
|
+
// trigger onAdd (value, key)
|
|
5366
5349
|
const addCallbacks = $callbacks[OPERATION.ADD];
|
|
5367
5350
|
if (addCallbacks) {
|
|
5368
5351
|
this.isTriggering = true;
|
|
5369
5352
|
for (let j = addCallbacks.length - 1; j >= 0; j--) {
|
|
5370
|
-
addCallbacks[j](
|
|
5353
|
+
addCallbacks[j](change.value, dynamicIndex);
|
|
5371
5354
|
}
|
|
5372
5355
|
this.isTriggering = false;
|
|
5373
5356
|
}
|
|
@@ -5401,13 +5384,13 @@ const Callbacks = {
|
|
|
5401
5384
|
* callbacks.listen("currentTurn", (currentValue, previousValue) => { ... });
|
|
5402
5385
|
*
|
|
5403
5386
|
* // Listen to collection additions
|
|
5404
|
-
* callbacks.onAdd("entities", (
|
|
5387
|
+
* callbacks.onAdd("entities", (entity, sessionId) => {
|
|
5405
5388
|
* // Nested property listening
|
|
5406
5389
|
* callbacks.listen(entity, "hp", (currentHp, previousHp) => { ... });
|
|
5407
5390
|
* });
|
|
5408
5391
|
*
|
|
5409
5392
|
* // Listen to collection removals
|
|
5410
|
-
* callbacks.onRemove("entities", (
|
|
5393
|
+
* callbacks.onRemove("entities", (entity, sessionId) => { ... });
|
|
5411
5394
|
*
|
|
5412
5395
|
* // Listen to any property change on an instance
|
|
5413
5396
|
* callbacks.onChange(entity, () => { ... });
|