@colyseus/schema 1.1.0-alpha.3 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -4
- package/build/cjs/index.js +1200 -1002
- package/build/cjs/index.js.map +1 -1
- package/build/esm/index.mjs +355 -311
- package/build/esm/index.mjs.map +1 -1
- package/build/umd/index.js +376 -335
- package/lib/Reflection.js +23 -13
- package/lib/Reflection.js.map +1 -1
- package/lib/Schema.d.ts +24 -16
- package/lib/Schema.js +123 -165
- package/lib/Schema.js.map +1 -1
- package/lib/annotations.d.ts +23 -5
- package/lib/annotations.js +62 -14
- package/lib/annotations.js.map +1 -1
- package/lib/changes/ChangeTree.d.ts +4 -16
- package/lib/changes/ChangeTree.js +1 -72
- package/lib/changes/ChangeTree.js.map +1 -1
- package/lib/changes/ReferenceTracker.d.ts +14 -0
- package/lib/changes/ReferenceTracker.js +77 -0
- package/lib/changes/ReferenceTracker.js.map +1 -0
- package/lib/codegen/languages/csharp.js +39 -17
- package/lib/codegen/languages/csharp.js.map +1 -1
- package/lib/codegen/languages/ts.js +11 -2
- package/lib/codegen/languages/ts.js.map +1 -1
- package/lib/codegen/parser.js +3 -1
- package/lib/codegen/parser.js.map +1 -1
- package/lib/codegen/types.js +14 -1
- package/lib/codegen/types.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +6 -6
- package/lib/index.js.map +1 -1
- package/lib/types/ArraySchema.d.ts +8 -5
- package/lib/types/ArraySchema.js +22 -19
- package/lib/types/ArraySchema.js.map +1 -1
- package/lib/types/CollectionSchema.d.ts +8 -5
- package/lib/types/CollectionSchema.js +17 -11
- package/lib/types/CollectionSchema.js.map +1 -1
- package/lib/types/MapSchema.d.ts +8 -5
- package/lib/types/MapSchema.js +20 -11
- package/lib/types/MapSchema.js.map +1 -1
- package/lib/types/SetSchema.d.ts +8 -5
- package/lib/types/SetSchema.js +22 -14
- package/lib/types/SetSchema.js.map +1 -1
- package/lib/types/typeRegistry.d.ts +5 -0
- package/lib/types/typeRegistry.js +13 -0
- package/lib/types/typeRegistry.js.map +1 -0
- package/lib/types/utils.d.ts +9 -0
- package/lib/types/utils.js +50 -0
- package/lib/types/utils.js.map +1 -0
- package/package.json +3 -8
package/lib/types/MapSchema.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MapSchema = exports.getMapProxy = void 0;
|
|
4
4
|
var ChangeTree_1 = require("../changes/ChangeTree");
|
|
5
5
|
var spec_1 = require("../spec");
|
|
6
|
-
var
|
|
6
|
+
var utils_1 = require("./utils");
|
|
7
7
|
function getMapProxy(value) {
|
|
8
8
|
value['$proxy'] = true;
|
|
9
9
|
value = new Proxy(value, {
|
|
@@ -55,6 +55,14 @@ var MapSchema = /** @class */ (function () {
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
+
MapSchema.prototype.onAdd = function (callback, triggerAll) {
|
|
59
|
+
if (triggerAll === void 0) { triggerAll = true; }
|
|
60
|
+
return utils_1.addCallback((this.$callbacks || (this.$callbacks = [])), spec_1.OPERATION.ADD, callback, (triggerAll)
|
|
61
|
+
? this.$items
|
|
62
|
+
: undefined);
|
|
63
|
+
};
|
|
64
|
+
MapSchema.prototype.onRemove = function (callback) { return utils_1.addCallback(this.$callbacks || (this.$callbacks = []), spec_1.OPERATION.DELETE, callback); };
|
|
65
|
+
MapSchema.prototype.onChange = function (callback) { return utils_1.addCallback(this.$callbacks || (this.$callbacks = []), spec_1.OPERATION.REPLACE, callback); };
|
|
58
66
|
MapSchema.is = function (type) {
|
|
59
67
|
return type['map'] !== undefined;
|
|
60
68
|
};
|
|
@@ -66,6 +74,9 @@ var MapSchema = /** @class */ (function () {
|
|
|
66
74
|
configurable: true
|
|
67
75
|
});
|
|
68
76
|
MapSchema.prototype.set = function (key, value) {
|
|
77
|
+
if (value === undefined || value === null) {
|
|
78
|
+
throw new Error("MapSchema#set('" + key + "', " + value + "): trying to set " + value + " value on '" + key + "'.");
|
|
79
|
+
}
|
|
69
80
|
// get "index" for this value.
|
|
70
81
|
var hasIndex = typeof (this.$changes.indexes[key]) !== "undefined";
|
|
71
82
|
var index = (hasIndex)
|
|
@@ -109,18 +120,19 @@ var MapSchema = /** @class */ (function () {
|
|
|
109
120
|
this.$changes.delete(key);
|
|
110
121
|
return this.$items.delete(key);
|
|
111
122
|
};
|
|
112
|
-
MapSchema.prototype.clear = function (
|
|
113
|
-
var _this = this;
|
|
123
|
+
MapSchema.prototype.clear = function (changes) {
|
|
114
124
|
// discard previous operations.
|
|
115
125
|
this.$changes.discard(true, true);
|
|
116
126
|
this.$changes.indexes = {};
|
|
117
127
|
// clear previous indexes
|
|
118
128
|
this.$indexes.clear();
|
|
119
|
-
//
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
129
|
+
//
|
|
130
|
+
// When decoding:
|
|
131
|
+
// - enqueue items for DELETE callback.
|
|
132
|
+
// - flag child items for garbage collection.
|
|
133
|
+
//
|
|
134
|
+
if (changes) {
|
|
135
|
+
utils_1.removeChildRefs.call(this, changes);
|
|
124
136
|
}
|
|
125
137
|
// clear items
|
|
126
138
|
this.$items.clear();
|
|
@@ -196,9 +208,6 @@ var MapSchema = /** @class */ (function () {
|
|
|
196
208
|
}
|
|
197
209
|
return cloned;
|
|
198
210
|
};
|
|
199
|
-
MapSchema.prototype.triggerAll = function () {
|
|
200
|
-
Schema_1.Schema.prototype.triggerAll.apply(this);
|
|
201
|
-
};
|
|
202
211
|
return MapSchema;
|
|
203
212
|
}());
|
|
204
213
|
exports.MapSchema = MapSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapSchema.js","sourceRoot":"","sources":["../../src/types/MapSchema.ts"],"names":[],"mappings":";;;AAAA,oDAAmD;AACnD,gCAAoC;AACpC,oCAA2D;AAE3D,SAAgB,WAAW,CAAC,KAAgB;IACxC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IAEvB,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;QACrB,GAAG,EAAE,UAAC,GAAG,EAAE,IAAI;YACX,IACI,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,uBAAuB;gBACrD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,WAAW,EACpC;gBACE,OAAO,GAAG,CAAC,GAAG,CAAC,IAAc,CAAC,CAAC;aAElC;iBAAM;gBACH,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;aACpB;QACL,CAAC;QAED,GAAG,EAAE,UAAC,GAAG,EAAE,IAAI,EAAE,QAAQ;YACrB,IACI,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ;gBAC1B,CACK,IAAe,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACpC,IAAI,KAAK,OAAO;oBAChB,IAAI,KAAK,UAAU;oBACnB,IAAI,KAAK,UAAU,CACtB,EACH;gBACE,GAAG,CAAC,GAAG,CAAC,IAAc,EAAE,QAAQ,CAAC,CAAC;aAErC;iBAAM;gBACH,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;aACxB;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,cAAc,EAAE,UAAC,GAAG,EAAE,IAAI;YACtB,GAAG,CAAC,MAAM,CAAC,IAAc,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACjB,CAAC;AAzCD,kCAyCC;AAED;IAmBI,mBAAa,aAAoC;QAAjD,iBAWC;QA7BS,aAAQ,GAAe,IAAI,uBAAU,CAAC,IAAI,CAAC,CAAC;QAE5C,WAAM,GAAmB,IAAI,GAAG,EAAa,CAAC;QAC9C,aAAQ,GAAwB,IAAI,GAAG,EAAkB,CAAC;QAE1D,WAAM,GAAW,CAAC,CAAC;QAczB,IAAI,aAAa,EAAE;YACf,IAAI,aAAa,YAAY,GAAG,EAAE;gBAC9B,aAAa,CAAC,OAAO,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,KAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAd,CAAc,CAAC,CAAC;aAEnD;iBAAM;gBACH,KAAK,IAAM,CAAC,IAAI,aAAa,EAAE;oBAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjC;aACJ;SACJ;IACL,CAAC;IAfM,YAAE,GAAT,UAAU,IAAS;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IACrC,CAAC;IAeD,eAAe;IACf,oBAAC,MAAM,CAAC,QAAQ,CAAC,GAAjB,cAAqD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,sBAAI,qBAAC,MAAM,CAAC,WAAY;aAAxB,cAA6B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA,CAAC,CAAC;;;OAAA;IAErE,uBAAG,GAAH,UAAI,GAAW,EAAE,KAAQ;QACrB,8BAA8B;QAC9B,IAAM,QAAQ,GAAG,OAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,WAAW,CAAC;QACpE,IAAM,KAAK,GAAG,CAAC,QAAQ,CAAC;YACpB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAEpB,IAAI,SAAS,GAAc,CAAC,QAAQ,CAAC;YACjC,CAAC,CAAC,gBAAS,CAAC,OAAO;YACnB,CAAC,CAAC,gBAAS,CAAC,GAAG,CAAC;QAEpB,IAAM,KAAK,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,SAAS,CAAC;QAChD,IAAI,KAAK,EAAE;YACN,KAAK,CAAC,UAAU,CAAgB,CAAC,SAAS,CACvC,IAAI,EACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAClB,KAAK,CACR,CAAC;SACL;QAED,EAAE;QACF,aAAa;QACb,0DAA0D;QAC1D,EAAE;QACF,IAAI,CAAC,QAAQ,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SAEjC;aAAM,IACH,KAAK,IAAI,uEAAuE;YAChF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAChC;YACE,SAAS,GAAG,gBAAS,CAAC,GAAG,CAAC;SAC7B;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAErC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,uBAAG,GAAH,UAAI,GAAW;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,0BAAM,GAAN,UAAO,GAAW;QACd,EAAE;QACF,iFAAiF;QACjF,EAAE;QACF,2EAA2E;QAC3E,wEAAwE;QACxE,EAAE;QACF,+CAA+C;QAC/C,kCAAkC;QAElC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,yBAAK,GAAL,UAAM,UAAoB;QAA1B,iBAsBC;QArBG,+BAA+B;QAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;QAE3B,yBAAyB;QACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEtB,2CAA2C;QAC3C,IAAI,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,QAAQ,EAAE;YAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,IAAO;gBACxB,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;SACN;QAED,cAAc;QACd,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,gBAAS,CAAC,KAAK,EAAE,CAAC,CAAC;QAE3D,wCAAwC;QACxC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC;IAED,uBAAG,GAAH,UAAK,GAAW;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,2BAAO,GAAP,UAAQ,UAAgE;QACpE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,2BAAO,GAAP;QACI,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,wBAAI,GAAJ;QACI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,0BAAM,GAAN;QACI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;IAED,sBAAI,2BAAI;aAAR;YACI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,CAAC;;;OAAA;IAES,4BAAQ,GAAlB,UAAmB,KAAa,EAAE,GAAW;QACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAES,4BAAQ,GAAlB,UAAmB,KAAa;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAES,8BAAU,GAApB,UAAqB,KAAa;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAES,iCAAa,GAAvB,UAAwB,KAAa;QACjC,IAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,0BAAM,GAAN;QACI,IAAM,GAAG,GAAQ,EAAE,CAAC;QAEpB,IAAI,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG;YACpB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,UAAU,CAAC;gBAChD,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBACnB,CAAC,CAAC,KAAK,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACf,CAAC;IAED,EAAE;IACF,qBAAqB;IACrB,EAAE;IACF,yBAAK,GAAL,UAAM,UAAoB;QACtB,IAAI,MAAiB,CAAC;QAEtB,IAAI,UAAU,EAAE;YACZ,cAAc;YACd,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;SAEjD;aAAM;YACH,cAAc;YACd,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG;gBACpB,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE;oBACnB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;iBACrC;qBAAM;oBACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC1B;YACL,CAAC,CAAC,CAAA;SACL;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,8BAAU,GAAV;QACI,eAAM,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IACL,gBAAC;AAAD,CAAC,AA1MD,IA0MC;AA1MY,8BAAS","sourcesContent":["import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\n\nexport function getMapProxy(value: MapSchema) {\n value['$proxy'] = true;\n\n value = new Proxy(value, {\n get: (obj, prop) => {\n if (\n typeof (prop) !== \"symbol\" && // accessing properties\n typeof (obj[prop]) === \"undefined\"\n ) {\n return obj.get(prop as string);\n\n } else {\n return obj[prop];\n }\n },\n\n set: (obj, prop, setValue) => {\n if (\n typeof (prop) !== \"symbol\" &&\n (\n (prop as string).indexOf(\"$\") === -1 &&\n prop !== \"onAdd\" &&\n prop !== \"onRemove\" &&\n prop !== \"onChange\"\n )\n ) {\n obj.set(prop as string, setValue);\n\n } else {\n obj[prop] = setValue;\n }\n return true;\n },\n\n deleteProperty: (obj, prop) => {\n obj.delete(prop as string);\n return true;\n },\n });\n\n return value;\n}\n\nexport class MapSchema<V=any> implements Map<string, V>, SchemaDecoderCallbacks {\n protected $changes: ChangeTree = new ChangeTree(this);\n\n protected $items: Map<string, V> = new Map<string, V>();\n protected $indexes: Map<number, string> = new Map<number, string>();\n\n protected $refId: number = 0;\n\n //\n // Decoding callbacks\n //\n public onAdd?: (item: V, key: string) => void;\n public onRemove?: (item: V, key: string) => void;\n public onChange?: (item: V, key: string) => void;\n\n static is(type: any) {\n return type['map'] !== undefined;\n }\n\n constructor (initialValues?: Map<string, V> | any) {\n if (initialValues) {\n if (initialValues instanceof Map) {\n initialValues.forEach((v, k) => this.set(k, v));\n\n } else {\n for (const k in initialValues) {\n this.set(k, initialValues[k]);\n }\n }\n }\n }\n\n /** Iterator */\n [Symbol.iterator](): IterableIterator<[string, V]> { return this.$items[Symbol.iterator](); }\n get [Symbol.toStringTag]() { return this.$items[Symbol.toStringTag] }\n\n set(key: string, value: V) {\n // get \"index\" for this value.\n const hasIndex = typeof(this.$changes.indexes[key]) !== \"undefined\";\n const index = (hasIndex)\n ? this.$changes.indexes[key]\n : this.$refId++;\n\n let operation: OPERATION = (hasIndex)\n ? OPERATION.REPLACE\n : OPERATION.ADD;\n\n const isRef = (value['$changes']) !== undefined;\n if (isRef) {\n (value['$changes'] as ChangeTree).setParent(\n this,\n this.$changes.root,\n index\n );\n }\n\n //\n // (encoding)\n // set a unique id to relate directly with this key/value.\n //\n if (!hasIndex) {\n this.$changes.indexes[key] = index;\n this.$indexes.set(index, key);\n\n } else if (\n isRef && // if is schema, force ADD operation if value differ from previous one.\n this.$items.get(key) !== value\n ) {\n operation = OPERATION.ADD;\n }\n\n this.$items.set(key, value);\n\n this.$changes.change(key, operation);\n\n return this;\n }\n\n get(key: string): V | undefined {\n return this.$items.get(key);\n }\n\n delete(key: string) {\n //\n // TODO: add a \"purge\" method after .encode() runs, to cleanup removed `$indexes`\n //\n // We don't remove $indexes to allow setting the same key in the same patch\n // (See \"should allow to remove and set an item in the same place\" test)\n //\n // // const index = this.$changes.indexes[key];\n // // this.$indexes.delete(index);\n\n this.$changes.delete(key);\n return this.$items.delete(key);\n }\n\n clear(isDecoding?: boolean) {\n // discard previous operations.\n this.$changes.discard(true, true);\n this.$changes.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n // flag child items for garbage collection.\n if (isDecoding && typeof (this.$changes.getType()) !== \"string\") {\n this.$items.forEach((item: V) => {\n this.$changes.root.removeRef(item['$changes'].refId);\n });\n }\n\n // clear items\n this.$items.clear();\n\n this.$changes.operation({ index: 0, op: OPERATION.CLEAR });\n\n // touch all structures until reach root\n this.$changes.touchParents();\n }\n\n has (key: string) {\n return this.$items.has(key);\n }\n\n forEach(callbackfn: (value: V, key: string, map: Map<string, V>) => void) {\n this.$items.forEach(callbackfn);\n }\n\n entries () {\n return this.$items.entries();\n }\n\n keys () {\n return this.$items.keys();\n }\n\n values() {\n return this.$items.values();\n }\n\n get size () {\n return this.$items.size;\n }\n\n protected setIndex(index: number, key: string) {\n this.$indexes.set(index, key);\n }\n\n protected getIndex(index: number) {\n return this.$indexes.get(index);\n }\n\n protected getByIndex(index: number) {\n return this.$items.get(this.$indexes.get(index));\n }\n\n protected deleteByIndex(index: number) {\n const key = this.$indexes.get(index);\n this.$items.delete(key);\n this.$indexes.delete(index);\n }\n\n toJSON() {\n const map: any = {};\n\n this.forEach((value, key) => {\n map[key] = (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value;\n });\n\n return map;\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): MapSchema<V> {\n let cloned: MapSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new MapSchema(), this);\n\n } else {\n // server-side\n cloned = new MapSchema();\n this.forEach((value, key) => {\n if (value['$changes']) {\n cloned.set(key, value['clone']());\n } else {\n cloned.set(key, value);\n }\n })\n }\n\n return cloned;\n }\n\n triggerAll (): void {\n Schema.prototype.triggerAll.apply(this);\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"MapSchema.js","sourceRoot":"","sources":["../../src/types/MapSchema.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\nimport { addCallback, removeChildRefs } from \"./utils\";\nimport { DataChange } from \"..\";\n\nexport function getMapProxy(value: MapSchema) {\n value['$proxy'] = true;\n\n value = new Proxy(value, {\n get: (obj, prop) => {\n if (\n typeof (prop) !== \"symbol\" && // accessing properties\n typeof (obj[prop]) === \"undefined\"\n ) {\n return obj.get(prop as string);\n\n } else {\n return obj[prop];\n }\n },\n\n set: (obj, prop, setValue) => {\n if (\n typeof (prop) !== \"symbol\" &&\n (\n (prop as string).indexOf(\"$\") === -1 &&\n prop !== \"onAdd\" &&\n prop !== \"onRemove\" &&\n prop !== \"onChange\"\n )\n ) {\n obj.set(prop as string, setValue);\n\n } else {\n obj[prop] = setValue;\n }\n return true;\n },\n\n deleteProperty: (obj, prop) => {\n obj.delete(prop as string);\n return true;\n },\n });\n\n return value;\n}\n\nexport class MapSchema<V=any> implements Map<string, V>, SchemaDecoderCallbacks {\n protected $changes: ChangeTree = new ChangeTree(this);\n\n protected $items: Map<string, V> = new Map<string, V>();\n protected $indexes: Map<number, string> = new Map<number, string>();\n\n protected $refId: number = 0;\n\n //\n // Decoding callbacks\n //\n public $callbacks: { [operation: number]: Array<(item: V, key: string) => void> };\n public onAdd(callback: (item: V, key: string) => void, triggerAll: boolean = true) {\n return addCallback(\n (this.$callbacks || (this.$callbacks = [])),\n OPERATION.ADD,\n callback,\n (triggerAll)\n ? this.$items\n : undefined\n );\n }\n public onRemove(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = []), OPERATION.DELETE, callback); }\n public onChange(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = []), OPERATION.REPLACE, callback); }\n\n static is(type: any) {\n return type['map'] !== undefined;\n }\n\n constructor (initialValues?: Map<string, V> | any) {\n if (initialValues) {\n if (initialValues instanceof Map) {\n initialValues.forEach((v, k) => this.set(k, v));\n\n } else {\n for (const k in initialValues) {\n this.set(k, initialValues[k]);\n }\n }\n }\n }\n\n /** Iterator */\n [Symbol.iterator](): IterableIterator<[string, V]> { return this.$items[Symbol.iterator](); }\n get [Symbol.toStringTag]() { return this.$items[Symbol.toStringTag] }\n\n set(key: string, value: V) {\n if (value === undefined || value === null) {\n throw new Error(`MapSchema#set('${key}', ${value}): trying to set ${value} value on '${key}'.`);\n }\n\n // get \"index\" for this value.\n const hasIndex = typeof(this.$changes.indexes[key]) !== \"undefined\";\n const index = (hasIndex)\n ? this.$changes.indexes[key]\n : this.$refId++;\n\n let operation: OPERATION = (hasIndex)\n ? OPERATION.REPLACE\n : OPERATION.ADD;\n\n const isRef = (value['$changes']) !== undefined;\n if (isRef) {\n (value['$changes'] as ChangeTree).setParent(\n this,\n this.$changes.root,\n index\n );\n }\n\n //\n // (encoding)\n // set a unique id to relate directly with this key/value.\n //\n if (!hasIndex) {\n this.$changes.indexes[key] = index;\n this.$indexes.set(index, key);\n\n } else if (\n isRef && // if is schema, force ADD operation if value differ from previous one.\n this.$items.get(key) !== value\n ) {\n operation = OPERATION.ADD;\n }\n\n this.$items.set(key, value);\n\n this.$changes.change(key, operation);\n\n return this;\n }\n\n get(key: string): V | undefined {\n return this.$items.get(key);\n }\n\n delete(key: string) {\n //\n // TODO: add a \"purge\" method after .encode() runs, to cleanup removed `$indexes`\n //\n // We don't remove $indexes to allow setting the same key in the same patch\n // (See \"should allow to remove and set an item in the same place\" test)\n //\n // // const index = this.$changes.indexes[key];\n // // this.$indexes.delete(index);\n\n this.$changes.delete(key);\n return this.$items.delete(key);\n }\n\n clear(changes?: DataChange[]) {\n // discard previous operations.\n this.$changes.discard(true, true);\n this.$changes.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n if (changes) {\n removeChildRefs.call(this, changes);\n }\n\n // clear items\n this.$items.clear();\n\n this.$changes.operation({ index: 0, op: OPERATION.CLEAR });\n\n // touch all structures until reach root\n this.$changes.touchParents();\n }\n\n has (key: string) {\n return this.$items.has(key);\n }\n\n forEach(callbackfn: (value: V, key: string, map: Map<string, V>) => void) {\n this.$items.forEach(callbackfn);\n }\n\n entries () {\n return this.$items.entries();\n }\n\n keys () {\n return this.$items.keys();\n }\n\n values() {\n return this.$items.values();\n }\n\n get size () {\n return this.$items.size;\n }\n\n protected setIndex(index: number, key: string) {\n this.$indexes.set(index, key);\n }\n\n protected getIndex(index: number) {\n return this.$indexes.get(index);\n }\n\n protected getByIndex(index: number) {\n return this.$items.get(this.$indexes.get(index));\n }\n\n protected deleteByIndex(index: number) {\n const key = this.$indexes.get(index);\n this.$items.delete(key);\n this.$indexes.delete(index);\n }\n\n toJSON() {\n const map: any = {};\n\n this.forEach((value, key) => {\n map[key] = (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value;\n });\n\n return map;\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): MapSchema<V> {\n let cloned: MapSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new MapSchema(), this);\n\n } else {\n // server-side\n cloned = new MapSchema();\n this.forEach((value, key) => {\n if (value['$changes']) {\n cloned.set(key, value['clone']());\n } else {\n cloned.set(key, value);\n }\n })\n }\n\n return cloned;\n }\n\n}\n"]}
|
package/lib/types/SetSchema.d.ts
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import { ChangeTree } from "../changes/ChangeTree";
|
|
2
2
|
import { SchemaDecoderCallbacks } from "../Schema";
|
|
3
|
+
import { DataChange } from "..";
|
|
3
4
|
export declare class SetSchema<V = any> implements SchemaDecoderCallbacks {
|
|
4
5
|
protected $changes: ChangeTree;
|
|
5
6
|
protected $items: Map<number, V>;
|
|
6
7
|
protected $indexes: Map<number, number>;
|
|
7
8
|
protected $refId: number;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
$callbacks: {
|
|
10
|
+
[operation: number]: Array<(item: V, key: string) => void>;
|
|
11
|
+
};
|
|
12
|
+
onAdd(callback: (item: V, key: string) => void, triggerAll?: boolean): () => boolean;
|
|
13
|
+
onRemove(callback: (item: V, key: string) => void): () => boolean;
|
|
14
|
+
onChange(callback: (item: V, key: string) => void): () => boolean;
|
|
11
15
|
static is(type: any): boolean;
|
|
12
16
|
constructor(initialValues?: Array<V>);
|
|
13
17
|
add(value: V): number | false;
|
|
14
18
|
entries(): IterableIterator<[number, V]>;
|
|
15
19
|
delete(item: V): boolean;
|
|
16
|
-
clear(
|
|
20
|
+
clear(changes?: DataChange[]): void;
|
|
17
21
|
has(value: V): boolean;
|
|
18
22
|
forEach(callbackfn: (value: V, key: number, collection: SetSchema<V>) => void): void;
|
|
19
23
|
values(): IterableIterator<V>;
|
|
@@ -25,5 +29,4 @@ export declare class SetSchema<V = any> implements SchemaDecoderCallbacks {
|
|
|
25
29
|
toArray(): V[];
|
|
26
30
|
toJSON(): V[];
|
|
27
31
|
clone(isDecoding?: boolean): SetSchema<V>;
|
|
28
|
-
triggerAll(): void;
|
|
29
32
|
}
|
package/lib/types/SetSchema.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SetSchema = void 0;
|
|
4
4
|
var ChangeTree_1 = require("../changes/ChangeTree");
|
|
5
5
|
var spec_1 = require("../spec");
|
|
6
|
-
var
|
|
6
|
+
var utils_1 = require("./utils");
|
|
7
7
|
var SetSchema = /** @class */ (function () {
|
|
8
8
|
function SetSchema(initialValues) {
|
|
9
9
|
var _this = this;
|
|
@@ -15,23 +15,33 @@ var SetSchema = /** @class */ (function () {
|
|
|
15
15
|
initialValues.forEach(function (v) { return _this.add(v); });
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
+
SetSchema.prototype.onAdd = function (callback, triggerAll) {
|
|
19
|
+
if (triggerAll === void 0) { triggerAll = true; }
|
|
20
|
+
return utils_1.addCallback((this.$callbacks || (this.$callbacks = [])), spec_1.OPERATION.ADD, callback, (triggerAll)
|
|
21
|
+
? this.$items
|
|
22
|
+
: undefined);
|
|
23
|
+
};
|
|
24
|
+
SetSchema.prototype.onRemove = function (callback) { return utils_1.addCallback(this.$callbacks || (this.$callbacks = []), spec_1.OPERATION.DELETE, callback); };
|
|
25
|
+
SetSchema.prototype.onChange = function (callback) { return utils_1.addCallback(this.$callbacks || (this.$callbacks = []), spec_1.OPERATION.REPLACE, callback); };
|
|
18
26
|
SetSchema.is = function (type) {
|
|
19
27
|
return type['set'] !== undefined;
|
|
20
28
|
};
|
|
21
29
|
SetSchema.prototype.add = function (value) {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
// immediatelly return false if value already added.
|
|
22
32
|
if (this.has(value)) {
|
|
23
33
|
return false;
|
|
24
34
|
}
|
|
25
35
|
// set "index" for reference.
|
|
26
36
|
var index = this.$refId++;
|
|
27
|
-
|
|
28
|
-
if (isRef) {
|
|
37
|
+
if ((value['$changes']) !== undefined) {
|
|
29
38
|
value['$changes'].setParent(this, this.$changes.root, index);
|
|
30
39
|
}
|
|
40
|
+
var operation = (_b = (_a = this.$changes.indexes[index]) === null || _a === void 0 ? void 0 : _a.op) !== null && _b !== void 0 ? _b : spec_1.OPERATION.ADD;
|
|
31
41
|
this.$changes.indexes[index] = index;
|
|
32
42
|
this.$indexes.set(index, index);
|
|
33
43
|
this.$items.set(index, value);
|
|
34
|
-
this.$changes.change(index);
|
|
44
|
+
this.$changes.change(index, operation);
|
|
35
45
|
return index;
|
|
36
46
|
};
|
|
37
47
|
SetSchema.prototype.entries = function () {
|
|
@@ -57,18 +67,19 @@ var SetSchema = /** @class */ (function () {
|
|
|
57
67
|
this.$indexes.delete(index);
|
|
58
68
|
return this.$items.delete(index);
|
|
59
69
|
};
|
|
60
|
-
SetSchema.prototype.clear = function (
|
|
61
|
-
var _this = this;
|
|
70
|
+
SetSchema.prototype.clear = function (changes) {
|
|
62
71
|
// discard previous operations.
|
|
63
72
|
this.$changes.discard(true, true);
|
|
64
73
|
this.$changes.indexes = {};
|
|
65
74
|
// clear previous indexes
|
|
66
75
|
this.$indexes.clear();
|
|
67
|
-
//
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
76
|
+
//
|
|
77
|
+
// When decoding:
|
|
78
|
+
// - enqueue items for DELETE callback.
|
|
79
|
+
// - flag child items for garbage collection.
|
|
80
|
+
//
|
|
81
|
+
if (changes) {
|
|
82
|
+
utils_1.removeChildRefs.call(this, changes);
|
|
72
83
|
}
|
|
73
84
|
// clear items
|
|
74
85
|
this.$items.clear();
|
|
@@ -154,9 +165,6 @@ var SetSchema = /** @class */ (function () {
|
|
|
154
165
|
}
|
|
155
166
|
return cloned;
|
|
156
167
|
};
|
|
157
|
-
SetSchema.prototype.triggerAll = function () {
|
|
158
|
-
Schema_1.Schema.prototype.triggerAll.apply(this);
|
|
159
|
-
};
|
|
160
168
|
return SetSchema;
|
|
161
169
|
}());
|
|
162
170
|
exports.SetSchema = SetSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SetSchema.js","sourceRoot":"","sources":["../../src/types/SetSchema.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\n\nexport class SetSchema<V=any> implements SchemaDecoderCallbacks {\n protected $changes: ChangeTree = new ChangeTree(this);\n\n protected $items: Map<number, V> = new Map<number, V>();\n protected $indexes: Map<number, number> = new Map<number, number>();\n\n protected $refId: number = 0;\n\n //\n // Decoding callbacks\n //\n public onAdd?: (item: V, key: number) => void;\n public onRemove?: (item: V, key: number) => void;\n public onChange?: (item: V, key: number) => void;\n\n static is(type: any) {\n return type['set'] !== undefined;\n }\n\n constructor (initialValues?: Array<V>) {\n if (initialValues) {\n initialValues.forEach((v) => this.add(v));\n }\n }\n\n add(value: V) {\n if (this.has(value)) {\n return false;\n }\n\n // set \"index\" for reference.\n const index = this.$refId++;\n\n const isRef = (value['$changes']) !== undefined;\n if (isRef) {\n (value['$changes'] as ChangeTree).setParent(this, this.$changes.root, index);\n }\n\n this.$changes.indexes[index] = index;\n\n this.$indexes.set(index, index);\n this.$items.set(index, value);\n\n this.$changes.change(index);\n\n return index;\n }\n\n entries () {\n return this.$items.entries();\n }\n\n delete(item: V) {\n const entries = this.$items.entries();\n\n let index: number;\n let entry: IteratorResult<[number, V]>;\n while (entry = entries.next()) {\n if (entry.done) { break; }\n\n if (item === entry.value[1]) {\n index = entry.value[0];\n break;\n }\n }\n\n if (index === undefined) {\n return false;\n }\n\n this.$changes.delete(index);\n this.$indexes.delete(index);\n\n return this.$items.delete(index);\n }\n\n clear(isDecoding?: boolean) {\n // discard previous operations.\n this.$changes.discard(true, true);\n this.$changes.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n // flag child items for garbage collection.\n if (isDecoding && typeof (this.$changes.getType()) !== \"string\") {\n this.$items.forEach((item: V) => {\n this.$changes.root.removeRef(item['$changes'].refId);\n });\n }\n\n // clear items\n this.$items.clear();\n\n this.$changes.operation({ index: 0, op: OPERATION.CLEAR });\n\n // touch all structures until reach root\n this.$changes.touchParents();\n }\n\n has (value: V): boolean {\n const values = this.$items.values();\n\n let has = false;\n let entry: IteratorResult<V>;\n\n while (entry = values.next()) {\n if (entry.done) { break; }\n if (value === entry.value) {\n has = true;\n break;\n }\n }\n\n return has;\n }\n\n forEach(callbackfn: (value: V, key: number, collection: SetSchema<V>) => void) {\n this.$items.forEach((value, key, _) => callbackfn(value, key, this));\n }\n\n values() {\n return this.$items.values();\n }\n\n get size () {\n return this.$items.size;\n }\n\n protected setIndex(index: number, key: number) {\n this.$indexes.set(index, key);\n }\n\n protected getIndex(index: number) {\n return this.$indexes.get(index);\n }\n\n protected getByIndex(index: number) {\n return this.$items.get(this.$indexes.get(index));\n }\n\n protected deleteByIndex(index: number) {\n const key = this.$indexes.get(index);\n this.$items.delete(key);\n this.$indexes.delete(index);\n }\n\n toArray() {\n return Array.from(this.$items.values());\n }\n\n toJSON() {\n const values: V[] = [];\n\n this.forEach((value, key) => {\n values.push(\n (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value\n );\n });\n\n return values;\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): SetSchema<V> {\n let cloned: SetSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new SetSchema(), this);\n\n } else {\n // server-side\n cloned = new SetSchema();\n this.forEach((value) => {\n if (value['$changes']) {\n cloned.add(value['clone']());\n } else {\n cloned.add(value);\n }\n })\n }\n\n return cloned;\n }\n\n triggerAll (): void {\n Schema.prototype.triggerAll.apply(this);\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"SetSchema.js","sourceRoot":"","sources":["../../src/types/SetSchema.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks } from \"../Schema\";\nimport { addCallback, removeChildRefs } from \"./utils\";\nimport { DataChange } from \"..\";\n\nexport class SetSchema<V=any> implements SchemaDecoderCallbacks {\n protected $changes: ChangeTree = new ChangeTree(this);\n\n protected $items: Map<number, V> = new Map<number, V>();\n protected $indexes: Map<number, number> = new Map<number, number>();\n\n protected $refId: number = 0;\n\n //\n // Decoding callbacks\n //\n public $callbacks: { [operation: number]: Array<(item: V, key: string) => void> };\n public onAdd(callback: (item: V, key: string) => void, triggerAll: boolean = true) {\n return addCallback(\n (this.$callbacks || (this.$callbacks = [])),\n OPERATION.ADD,\n callback,\n (triggerAll)\n ? this.$items\n : undefined\n );\n }\n public onRemove(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = []), OPERATION.DELETE, callback); }\n public onChange(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = []), OPERATION.REPLACE, callback); }\n\n static is(type: any) {\n return type['set'] !== undefined;\n }\n\n constructor (initialValues?: Array<V>) {\n if (initialValues) {\n initialValues.forEach((v) => this.add(v));\n }\n }\n\n add(value: V) {\n // immediatelly return false if value already added.\n if (this.has(value)) { return false; }\n\n // set \"index\" for reference.\n const index = this.$refId++;\n\n if ((value['$changes']) !== undefined) {\n (value['$changes'] as ChangeTree).setParent(this, this.$changes.root, index);\n }\n\n const operation = this.$changes.indexes[index]?.op ?? OPERATION.ADD;\n\n this.$changes.indexes[index] = index;\n\n this.$indexes.set(index, index);\n this.$items.set(index, value);\n\n this.$changes.change(index, operation);\n return index;\n }\n\n entries () {\n return this.$items.entries();\n }\n\n delete(item: V) {\n const entries = this.$items.entries();\n\n let index: number;\n let entry: IteratorResult<[number, V]>;\n while (entry = entries.next()) {\n if (entry.done) { break; }\n\n if (item === entry.value[1]) {\n index = entry.value[0];\n break;\n }\n }\n\n if (index === undefined) {\n return false;\n }\n\n this.$changes.delete(index);\n this.$indexes.delete(index);\n\n return this.$items.delete(index);\n }\n\n clear(changes?: DataChange[]) {\n // discard previous operations.\n this.$changes.discard(true, true);\n this.$changes.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n if (changes) {\n removeChildRefs.call(this, changes);\n }\n\n // clear items\n this.$items.clear();\n\n this.$changes.operation({ index: 0, op: OPERATION.CLEAR });\n\n // touch all structures until reach root\n this.$changes.touchParents();\n }\n\n has (value: V): boolean {\n const values = this.$items.values();\n\n let has = false;\n let entry: IteratorResult<V>;\n\n while (entry = values.next()) {\n if (entry.done) { break; }\n if (value === entry.value) {\n has = true;\n break;\n }\n }\n\n return has;\n }\n\n forEach(callbackfn: (value: V, key: number, collection: SetSchema<V>) => void) {\n this.$items.forEach((value, key, _) => callbackfn(value, key, this));\n }\n\n values() {\n return this.$items.values();\n }\n\n get size () {\n return this.$items.size;\n }\n\n protected setIndex(index: number, key: number) {\n this.$indexes.set(index, key);\n }\n\n protected getIndex(index: number) {\n return this.$indexes.get(index);\n }\n\n protected getByIndex(index: number) {\n return this.$items.get(this.$indexes.get(index));\n }\n\n protected deleteByIndex(index: number) {\n const key = this.$indexes.get(index);\n this.$items.delete(key);\n this.$indexes.delete(index);\n }\n\n toArray() {\n return Array.from(this.$items.values());\n }\n\n toJSON() {\n const values: V[] = [];\n\n this.forEach((value, key) => {\n values.push(\n (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value\n );\n });\n\n return values;\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): SetSchema<V> {\n let cloned: SetSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new SetSchema(), this);\n\n } else {\n // server-side\n cloned = new SetSchema();\n this.forEach((value) => {\n if (value['$changes']) {\n cloned.add(value['clone']());\n } else {\n cloned.add(value);\n }\n })\n }\n\n return cloned;\n }\n\n}"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getType = exports.registerType = void 0;
|
|
4
|
+
var registeredTypes = {};
|
|
5
|
+
function registerType(identifier, definition) {
|
|
6
|
+
registeredTypes[identifier] = definition;
|
|
7
|
+
}
|
|
8
|
+
exports.registerType = registerType;
|
|
9
|
+
function getType(identifier) {
|
|
10
|
+
return registeredTypes[identifier];
|
|
11
|
+
}
|
|
12
|
+
exports.getType = getType;
|
|
13
|
+
//# sourceMappingURL=typeRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeRegistry.js","sourceRoot":"","sources":["../../src/types/typeRegistry.ts"],"names":[],"mappings":";;;AAUA,IAAM,eAAe,GAA4C,EAAE,CAAC;AAEpE,SAAgB,YAAY,CAAC,UAAkB,EAAE,UAA0B;IACvE,eAAe,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AAC7C,CAAC;AAFD,oCAEC;AAED,SAAgB,OAAO,CAAC,UAAkB;IACtC,OAAO,eAAe,CAAC,UAAU,CAAC,CAAC;AACvC,CAAC;AAFD,0BAEC","sourcesContent":["export interface TypeDefinition {\n constructor: any,\n\n // //\n // // TODO: deprecate proxy on next version\n // // the proxy is used for compatibility with versions <1.0.0 of @colyseus/schema\n // //\n // getProxy?: any,\n}\n\nconst registeredTypes: {[identifier: string] : TypeDefinition} = {};\n\nexport function registerType(identifier: string, definition: TypeDefinition) {\n registeredTypes[identifier] = definition;\n}\n\nexport function getType(identifier: string): TypeDefinition {\n return registeredTypes[identifier];\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CollectionSchema, DataChange } from "..";
|
|
2
|
+
import { OPERATION } from "../spec";
|
|
3
|
+
export declare function addCallback($callbacks: {
|
|
4
|
+
[op: number]: Function[];
|
|
5
|
+
}, op: OPERATION, callback: (item: any, key: any) => void, existing?: {
|
|
6
|
+
forEach(callback: (item: any, key: any) => void): void;
|
|
7
|
+
}): () => boolean;
|
|
8
|
+
export declare function removeChildRefs(this: CollectionSchema, changes: DataChange[]): void;
|
|
9
|
+
export declare function spliceOne(arr: any[], index: number): boolean;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.spliceOne = exports.removeChildRefs = exports.addCallback = void 0;
|
|
4
|
+
var spec_1 = require("../spec");
|
|
5
|
+
function addCallback($callbacks, op, callback, existing) {
|
|
6
|
+
// initialize list of callbacks
|
|
7
|
+
if (!$callbacks[op]) {
|
|
8
|
+
$callbacks[op] = [];
|
|
9
|
+
}
|
|
10
|
+
$callbacks[op].push(callback);
|
|
11
|
+
//
|
|
12
|
+
// Trigger callback for existing elements
|
|
13
|
+
// - OPERATION.ADD
|
|
14
|
+
// - OPERATION.REPLACE
|
|
15
|
+
//
|
|
16
|
+
existing === null || existing === void 0 ? void 0 : existing.forEach(function (item, key) { return callback(item, key); });
|
|
17
|
+
return function () { return spliceOne($callbacks[op], $callbacks[op].indexOf(callback)); };
|
|
18
|
+
}
|
|
19
|
+
exports.addCallback = addCallback;
|
|
20
|
+
function removeChildRefs(changes) {
|
|
21
|
+
var _this = this;
|
|
22
|
+
var needRemoveRef = (typeof (this.$changes.getType()) !== "string");
|
|
23
|
+
this.$items.forEach(function (item, key) {
|
|
24
|
+
changes.push({
|
|
25
|
+
refId: _this.$changes.refId,
|
|
26
|
+
op: spec_1.OPERATION.DELETE,
|
|
27
|
+
field: key,
|
|
28
|
+
value: undefined,
|
|
29
|
+
previousValue: item
|
|
30
|
+
});
|
|
31
|
+
if (needRemoveRef) {
|
|
32
|
+
_this.$changes.root.removeRef(item['$changes'].refId);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
exports.removeChildRefs = removeChildRefs;
|
|
37
|
+
function spliceOne(arr, index) {
|
|
38
|
+
// manually splice an array
|
|
39
|
+
if (index === -1 || index >= arr.length) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
var len = arr.length - 1;
|
|
43
|
+
for (var i = index; i < len; i++) {
|
|
44
|
+
arr[i] = arr[i + 1];
|
|
45
|
+
}
|
|
46
|
+
arr.length = len;
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
exports.spliceOne = spliceOne;
|
|
50
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/types/utils.ts"],"names":[],"mappings":";;;AACA,gCAAoC;AAEpC,SAAgB,WAAW,CACvB,UAAwC,EACxC,EAAa,EACb,QAAuC,EACvC,QAAsE;IAEtE,+BAA+B;IAC/B,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;QACjB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;KACvB;IAED,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE9B,EAAE;IACF,yCAAyC;IACzC,kBAAkB;IAClB,sBAAsB;IACtB,EAAE;IACF,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,CAAC,UAAC,IAAI,EAAE,GAAG,IAAK,OAAA,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAnB,CAAmB,CAAC,CAAC;IAEtD,OAAO,cAAM,OAAA,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAA3D,CAA2D,CAAC;AAC7E,CAAC;AArBD,kCAqBC;AAGD,SAAgB,eAAe,CAAyB,OAAqB;IAA7E,iBAgBC;IAfG,IAAM,aAAa,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC;IAEtE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,IAAS,EAAE,GAAQ;QACpC,OAAO,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,KAAI,CAAC,QAAQ,CAAC,KAAK;YAC1B,EAAE,EAAE,gBAAS,CAAC,MAAM;YACpB,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,SAAS;YAChB,aAAa,EAAE,IAAI;SACtB,CAAC,CAAC;QAEH,IAAI,aAAa,EAAE;YACf,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;SACxD;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAhBD,0CAgBC;AAGD,SAAgB,SAAS,CAAC,GAAU,EAAE,KAAa;IAC/C,2BAA2B;IAC3B,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE;QACrC,OAAO,KAAK,CAAC;KAChB;IAED,IAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACvB;IAED,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;IAEjB,OAAO,IAAI,CAAC;AAChB,CAAC;AAfD,8BAeC","sourcesContent":["import { CollectionSchema, DataChange } from \"..\";\nimport { OPERATION } from \"../spec\";\n\nexport function addCallback(\n $callbacks: { [op: number]: Function[] },\n op: OPERATION,\n callback: (item: any, key: any) => void,\n existing?: { forEach(callback: (item: any, key: any) => void): void; }\n) {\n // initialize list of callbacks\n if (!$callbacks[op]) {\n $callbacks[op] = [];\n }\n\n $callbacks[op].push(callback);\n\n //\n // Trigger callback for existing elements\n // - OPERATION.ADD\n // - OPERATION.REPLACE\n //\n existing?.forEach((item, key) => callback(item, key));\n\n return () => spliceOne($callbacks[op], $callbacks[op].indexOf(callback));\n}\n\n\nexport function removeChildRefs(this: CollectionSchema, changes: DataChange[]) {\n const needRemoveRef = (typeof (this.$changes.getType()) !== \"string\");\n\n this.$items.forEach((item: any, key: any) => {\n changes.push({\n refId: this.$changes.refId,\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: item\n });\n\n if (needRemoveRef) {\n this.$changes.root.removeRef(item['$changes'].refId);\n }\n });\n}\n\n\nexport function spliceOne(arr: any[], index: number): boolean {\n // manually splice an array\n if (index === -1 || index >= arr.length) {\n return false;\n }\n\n const len = arr.length - 1;\n\n for (let i = index; i < len; i++) {\n arr[i] = arr[i + 1];\n }\n\n arr.length = len;\n\n return true;\n}"]}
|
package/package.json
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@colyseus/schema",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "Binary state serializer with delta encoding for games",
|
|
5
5
|
"bin": {
|
|
6
6
|
"schema-codegen": "./bin/schema-codegen"
|
|
7
7
|
},
|
|
8
8
|
"scripts": {
|
|
9
9
|
"build": "tsc && rollup -c rollup.config.js",
|
|
10
|
-
"build-dist-dts": "dts-bundle-generator --config dts-generator.json",
|
|
11
|
-
|
|
12
10
|
"watch": "tsc -w",
|
|
13
|
-
|
|
14
11
|
"test": "mocha --require ts-node/register test/*Test.ts test/**/*Test.ts",
|
|
15
12
|
"coverage": "nyc mocha --require ts-node/register --require source-map-support/register --recursive test/**Test.ts",
|
|
16
|
-
|
|
17
13
|
"generate-test-1": "bin/schema-codegen test-external/PrimitiveTypes.ts --namespace SchemaTest.PrimitiveTypes --output ../colyseus-unity3d/Assets/Editor/ColyseusTests/Schema/PrimitiveTypes",
|
|
18
14
|
"generate-test-2": "bin/schema-codegen test-external/ChildSchemaTypes.ts --namespace SchemaTest.ChildSchemaTypes --output ../colyseus-unity3d/Assets/Editor/ColyseusTests/Schema/ChildSchemaTypes",
|
|
19
15
|
"generate-test-3": "bin/schema-codegen test-external/ArraySchemaTypes.ts --namespace SchemaTest.ArraySchemaTypes --output ../colyseus-unity3d/Assets/Editor/ColyseusTests/Schema/ArraySchemaTypes",
|
|
@@ -25,8 +21,7 @@
|
|
|
25
21
|
"generate-test-9": "bin/schema-codegen test-external/InstanceSharingTypes.ts --namespace SchemaTest.InstanceSharing --output ../colyseus-unity3d/Assets/Editor/ColyseusTests/Schema/InstanceSharingTypes",
|
|
26
22
|
"generate-test-10": "bin/schema-codegen test-external/Callbacks.ts --namespace SchemaTest.Callbacks --output ../colyseus-unity3d/Assets/Editor/ColyseusTests/Schema/Callbacks",
|
|
27
23
|
"generate-test-11": "bin/schema-codegen test-external/MapSchemaMoveNullifyType.ts --namespace SchemaTest.MapSchemaMoveNullifyType --output ../colyseus-unity3d/Assets/Editor/ColyseusTests/Schema/MapSchemaMoveNullifyType",
|
|
28
|
-
|
|
29
|
-
"prepublishOnly": "tsc"
|
|
24
|
+
"prepublishOnly": "npm run build"
|
|
30
25
|
},
|
|
31
26
|
"files": [
|
|
32
27
|
"lib",
|
|
@@ -60,13 +55,13 @@
|
|
|
60
55
|
"devDependencies": {
|
|
61
56
|
"@msgpack/msgpack": "^1.9.1",
|
|
62
57
|
"@rollup/plugin-typescript": "^8.2.0",
|
|
58
|
+
"@types/benchmark": "^2.1.0",
|
|
63
59
|
"@types/glob": "^7.1.1",
|
|
64
60
|
"@types/mocha": "^5.2.5",
|
|
65
61
|
"@types/node": "^14.0.13",
|
|
66
62
|
"@types/rimraf": "^2.0.3",
|
|
67
63
|
"@types/sinon": "^7.0.3",
|
|
68
64
|
"benchmark": "^2.1.4",
|
|
69
|
-
"dts-bundle-generator": "^5.7.0",
|
|
70
65
|
"flatbuffers": "^1.10.2",
|
|
71
66
|
"fossil-delta": "^1.0.2",
|
|
72
67
|
"glob": "^7.1.5",
|