@colyseus/schema 1.0.27 → 1.0.28

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.
Files changed (43) hide show
  1. package/build/cjs/index.js +13 -9
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/index.mjs +110 -81
  4. package/build/esm/index.mjs.map +1 -1
  5. package/build/umd/index.js +13 -9
  6. package/decoders/cpp/usage_array_schema_types.cpp +40 -0
  7. package/decoders/cpp/usage_child_schema_types.cpp +24 -0
  8. package/decoders/cpp/usage_inherited_types.cpp +34 -0
  9. package/decoders/cpp/usage_map_schema_types.cpp +35 -0
  10. package/decoders/cpp/usage_primitive_types.cpp +41 -0
  11. package/lib/Reflection.js +11 -11
  12. package/lib/Reflection.js.map +1 -1
  13. package/lib/Schema.js +2 -2
  14. package/lib/Schema.js.map +1 -1
  15. package/lib/annotations.js +12 -8
  16. package/lib/annotations.js.map +1 -1
  17. package/lib/codegen/api.js +1 -1
  18. package/lib/codegen/api.js.map +1 -1
  19. package/lib/codegen/cli.js +2 -2
  20. package/lib/codegen/cli.js.map +1 -1
  21. package/lib/codegen/languages/cpp.js +3 -3
  22. package/lib/codegen/languages/cpp.js.map +1 -1
  23. package/lib/codegen/languages/csharp.js +12 -8
  24. package/lib/codegen/languages/csharp.js.map +1 -1
  25. package/lib/codegen/languages/haxe.js +1 -1
  26. package/lib/codegen/languages/haxe.js.map +1 -1
  27. package/lib/codegen/languages/java.js +1 -1
  28. package/lib/codegen/languages/java.js.map +1 -1
  29. package/lib/codegen/languages/js.js +2 -2
  30. package/lib/codegen/languages/js.js.map +1 -1
  31. package/lib/codegen/languages/lua.js +2 -2
  32. package/lib/codegen/languages/lua.js.map +1 -1
  33. package/lib/codegen/languages/ts.js +14 -10
  34. package/lib/codegen/languages/ts.js.map +1 -1
  35. package/lib/codegen/parser.js +1 -1
  36. package/lib/codegen/parser.js.map +1 -1
  37. package/lib/events/EventEmitter.js +10 -6
  38. package/lib/events/EventEmitter.js.map +1 -1
  39. package/lib/index.js +4 -4
  40. package/lib/index.js.map +1 -1
  41. package/lib/types/ArraySchema.js +12 -8
  42. package/lib/types/ArraySchema.js.map +1 -1
  43. package/package.json +1 -4
@@ -40,10 +40,14 @@ function __decorate(decorators, target, key, desc) {
40
40
  return c > 3 && r && Object.defineProperty(target, key, r), r;
41
41
  }
42
42
 
43
- function __spreadArray(to, from) {
44
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
45
- to[j] = from[i];
46
- return to;
43
+ function __spreadArray(to, from, pack) {
44
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
45
+ if (ar || !(i in from)) {
46
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
47
+ ar[i] = from[i];
48
+ }
49
+ }
50
+ return to.concat(ar || Array.prototype.slice.call(from));
47
51
  }
48
52
 
49
53
  // export const SWITCH_TO_STRUCTURE = 193; (easily collides with DELETE_AND_ADD + fieldIndex = 2)
@@ -545,7 +549,7 @@ var ArraySchema = /** @class */ (function () {
545
549
  for (var _i = 0; _i < arguments.length; _i++) {
546
550
  items[_i] = arguments[_i];
547
551
  }
548
- return new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], (_a = Array.from(this.$items.values())).concat.apply(_a, items))))();
552
+ return new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], (_a = Array.from(this.$items.values())).concat.apply(_a, items), false)))();
549
553
  };
550
554
  /**
551
555
  * Adds all the elements of an array separated by the specified separator string.
@@ -585,7 +589,7 @@ var ArraySchema = /** @class */ (function () {
585
589
  * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.
586
590
  */
587
591
  ArraySchema.prototype.slice = function (start, end) {
588
- return new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], Array.from(this.$items.values()).slice(start, end))))();
592
+ return new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], Array.from(this.$items.values()).slice(start, end), false)))();
589
593
  };
590
594
  /**
591
595
  * Sorts an array.
@@ -869,12 +873,12 @@ var ArraySchema = /** @class */ (function () {
869
873
  ArraySchema.prototype.clone = function (isDecoding) {
870
874
  var cloned;
871
875
  if (isDecoding) {
872
- cloned = new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], Array.from(this.$items.values()))))();
876
+ cloned = new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], Array.from(this.$items.values()), false)))();
873
877
  }
874
878
  else {
875
879
  cloned = new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], this.map(function (item) { return ((item['$changes'])
876
880
  ? item.clone()
877
- : item); }))))();
881
+ : item); }), false)))();
878
882
  }
879
883
  return cloned;
880
884
  };
@@ -1256,7 +1260,7 @@ function type(type, context) {
1256
1260
  value !== null) {
1257
1261
  // automaticallty transform Array into ArraySchema
1258
1262
  if (isArray && !(value instanceof ArraySchema)) {
1259
- value = new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], value)))();
1263
+ value = new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], value, false)))();
1260
1264
  }
1261
1265
  // automaticallty transform Map into MapSchema
1262
1266
  if (isMap && !(value instanceof MapSchema)) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/spec.ts","../../src/changes/ChangeTree.ts","../../src/types/ArraySchema.ts","../../src/types/MapSchema.ts","../../src/types/index.ts","../../src/annotations.ts","../../src/encoding/encode.ts","../../src/encoding/decode.ts","../../src/types/CollectionSchema.ts","../../src/types/SetSchema.ts","../../src/events/EventEmitter.ts","../../src/filters/index.ts","../../src/Schema.ts","../../src/utils.ts","../../src/Reflection.ts","../../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","// export const SWITCH_TO_STRUCTURE = 193; (easily collides with DELETE_AND_ADD + fieldIndex = 2)\nexport const SWITCH_TO_STRUCTURE = 255; // (decoding collides with DELETE_AND_ADD + fieldIndex = 63)\nexport const TYPE_ID = 213;\n\n/**\n * Encoding Schema field operations.\n */\nexport enum OPERATION {\n // add new structure/primitive\n ADD = 128,\n\n // replace structure/primitive\n REPLACE = 0,\n\n // delete field\n DELETE = 64,\n\n // DELETE field, followed by an ADD\n DELETE_AND_ADD = 192, // 11100000\n\n // TOUCH is used to determine hierarchy of nested Schema structures during serialization.\n // touches are NOT encoded.\n TOUCH = 1, // 00000000\n\n // MapSchema Operations\n CLEAR = 10,\n}\n\n// export enum OPERATION {\n// // add new structure/primitive\n// // (128)\n// ADD = 128, // 10000000,\n\n// // replace structure/primitive\n// REPLACE = 1,// 00000001\n\n// // delete field\n// DELETE = 192, // 11000000\n\n// // DELETE field, followed by an ADD\n// DELETE_AND_ADD = 224, // 11100000\n\n// // TOUCH is used to determine hierarchy of nested Schema structures during serialization.\n// // touches are NOT encoded.\n// TOUCH = 0, // 00000000\n\n// // MapSchema Operations\n// CLEAR = 10,\n// }","import { OPERATION } from \"../spec\";\nimport { Schema } from \"../Schema\";\nimport { SchemaDefinition, FilterChildrenCallback } from \"../annotations\";\n\nimport { MapSchema } from \"../types/MapSchema\";\nimport { ArraySchema } from \"../types/ArraySchema\";\nimport { CollectionSchema } from \"../types/CollectionSchema\";\nimport { SetSchema } from \"../types/SetSchema\";\n\nexport type Ref = Schema\n | ArraySchema\n | MapSchema\n | CollectionSchema\n | SetSchema;\n\nexport interface ChangeOperation {\n op: OPERATION,\n index: number,\n}\n\n//\n// FieldCache is used for @filter()\n//\nexport interface FieldCache {\n beginIndex: number;\n endIndex: number;\n}\n\n\n//\n// Root holds all schema references by unique id\n//\nexport class Root {\n //\n // Relation of refId => Schema structure\n // For direct access of structures during decoding time.\n //\n public refs = new Map<number, Ref>();\n public refCounts: {[refId: number]: number} = {};\n public deletedRefs = new Set<number>();\n\n protected nextUniqueId: number = 0;\n\n getNextUniqueId() {\n return this.nextUniqueId++;\n }\n\n // for decoding\n addRef(refId: number, ref: Ref, incrementCount: boolean = true) {\n this.refs.set(refId, ref);\n\n if (incrementCount) {\n this.refCounts[refId] = (this.refCounts[refId] || 0) + 1;\n }\n }\n\n // for decoding\n removeRef(refId) {\n this.refCounts[refId] = this.refCounts[refId] - 1;\n this.deletedRefs.add(refId);\n }\n\n clearRefs() {\n this.refs.clear();\n this.deletedRefs.clear();\n this.refCounts = {};\n }\n\n // for decoding\n garbageCollectDeletedRefs() {\n this.deletedRefs.forEach((refId) => {\n if (this.refCounts[refId] <= 0) {\n const ref = this.refs.get(refId);\n\n //\n // Ensure child schema instances have their references removed as well.\n //\n if (ref instanceof Schema) {\n for (const fieldName in ref['_definition'].schema) {\n if (\n typeof (ref['_definition'].schema[fieldName]) !== \"string\" &&\n ref[fieldName] &&\n ref[fieldName]['$changes']\n ) {\n this.removeRef(ref[fieldName]['$changes'].refId);\n }\n }\n\n } else {\n const definition: SchemaDefinition = ref['$changes'].parent._definition;\n const type = definition.schema[definition.fieldsByIndex[ref['$changes'].parentIndex]];\n\n if (typeof (Object.values(type)[0]) === \"function\") {\n Array.from(ref.values())\n .forEach((child) => this.removeRef(child['$changes'].refId));\n }\n }\n\n this.refs.delete(refId);\n delete this.refCounts[refId];\n }\n });\n\n // clear deleted refs.\n this.deletedRefs.clear();\n }\n}\n\nexport class ChangeTree {\n ref: Ref;\n refId: number;\n\n root?: Root;\n\n parent?: Ref;\n parentIndex?: number;\n\n indexes: {[index: string]: any};\n\n changed: boolean = false;\n changes = new Map<number, ChangeOperation>();\n allChanges = new Set<number>();\n\n // cached indexes for filtering\n caches: {[field: number]: number[]} = {};\n\n currentCustomOperation: number = 0;\n\n constructor(ref: Ref, parent?: Ref, root?: Root) {\n this.ref = ref;\n this.setParent(parent, root);\n }\n\n setParent(\n parent: Ref,\n root?: Root,\n parentIndex?: number,\n ) {\n if (!this.indexes) {\n this.indexes = (this.ref instanceof Schema)\n ? this.ref['_definition'].indexes\n : {};\n }\n\n this.parent = parent;\n this.parentIndex = parentIndex;\n\n // avoid setting parents with empty `root`\n if (!root) { return; }\n this.root = root;\n\n //\n // assign same parent on child structures\n //\n if (this.ref instanceof Schema) {\n const definition: SchemaDefinition = this.ref['_definition'];\n\n for (let field in definition.schema) {\n const value = this.ref[field];\n\n if (value && value['$changes']) {\n const parentIndex = definition.indexes[field];\n\n (value['$changes'] as ChangeTree).setParent(\n this.ref,\n root,\n parentIndex,\n );\n }\n }\n\n } else if (typeof (this.ref) === \"object\") {\n this.ref.forEach((value, key) => {\n if (value instanceof Schema) {\n const changeTreee = value['$changes'];\n const parentIndex = this.ref['$changes'].indexes[key];\n\n changeTreee.setParent(\n this.ref,\n this.root,\n parentIndex,\n );\n }\n });\n }\n }\n\n operation(op: ChangeOperation) {\n this.changes.set(--this.currentCustomOperation, op);\n }\n\n change(fieldName: string | number, operation: OPERATION = OPERATION.ADD) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n this.assertValidIndex(index, fieldName);\n\n const previousChange = this.changes.get(index);\n\n if (\n !previousChange ||\n previousChange.op === OPERATION.DELETE ||\n previousChange.op === OPERATION.TOUCH // (mazmorra.io's BattleAction issue)\n ) {\n this.changes.set(index, {\n op: (!previousChange)\n ? operation\n : (previousChange.op === OPERATION.DELETE)\n ? OPERATION.DELETE_AND_ADD\n : operation,\n // : OPERATION.REPLACE,\n index\n });\n }\n\n this.allChanges.add(index);\n\n this.changed = true;\n this.touchParents();\n }\n\n touch(fieldName: string | number) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n this.assertValidIndex(index, fieldName);\n\n if (!this.changes.has(index)) {\n this.changes.set(index, { op: OPERATION.TOUCH, index });\n }\n\n this.allChanges.add(index);\n\n // ensure touch is placed until the $root is found.\n this.touchParents();\n }\n\n touchParents() {\n if (this.parent) {\n (this.parent['$changes'] as ChangeTree).touch(this.parentIndex);\n }\n }\n\n getType(index?: number) {\n if (this.ref['_definition']) {\n const definition = (this.ref as Schema)['_definition'];\n return definition.schema[ definition.fieldsByIndex[index] ];\n\n } else {\n const definition = (this.parent as Schema)['_definition'];\n const parentType = definition.schema[ definition.fieldsByIndex[this.parentIndex] ];\n\n //\n // Get the child type from parent structure.\n // - [\"string\"] => \"string\"\n // - { map: \"string\" } => \"string\"\n // - { set: \"string\" } => \"string\"\n //\n return Object.values(parentType)[0];\n }\n }\n\n getChildrenFilter(): FilterChildrenCallback {\n const childFilters = (this.parent as Schema)['_definition'].childFilters;\n return childFilters && childFilters[this.parentIndex];\n }\n\n //\n // used during `.encode()`\n //\n getValue(index: number) {\n return this.ref['getByIndex'](index);\n }\n\n delete(fieldName: string | number) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n if (index === undefined) {\n console.warn(`@colyseus/schema ${this.ref.constructor.name}: trying to delete non-existing index: ${fieldName} (${index})`);\n return;\n }\n\n const previousValue = this.getValue(index);\n // console.log(\"$changes.delete =>\", { fieldName, index, previousValue });\n\n this.changes.set(index, { op: OPERATION.DELETE, index });\n\n this.allChanges.delete(index);\n\n // delete cache\n delete this.caches[index];\n\n // remove `root` reference\n if (previousValue && previousValue['$changes']) {\n previousValue['$changes'].parent = undefined;\n }\n\n this.changed = true;\n this.touchParents();\n }\n\n discard(changed: boolean = false, discardAll: boolean = false) {\n //\n // Map, Array, etc:\n // Remove cached key to ensure ADD operations is unsed instead of\n // REPLACE in case same key is used on next patches.\n //\n // TODO: refactor this. this is not relevant for Collection and Set.\n //\n if (!(this.ref instanceof Schema)) {\n this.changes.forEach((change) => {\n if (change.op === OPERATION.DELETE) {\n const index = this.ref['getIndex'](change.index)\n delete this.indexes[index];\n }\n });\n }\n\n this.changes.clear();\n this.changed = changed;\n\n if (discardAll) {\n this.allChanges.clear();\n }\n\n // re-set `currentCustomOperation`\n this.currentCustomOperation = 0;\n }\n\n /**\n * Recursively discard all changes from this, and child structures.\n */\n discardAll() {\n this.changes.forEach((change) => {\n const value = this.getValue(change.index);\n\n if (value && value['$changes']) {\n value['$changes'].discardAll();\n }\n });\n\n this.discard();\n }\n\n // cache(field: number, beginIndex: number, endIndex: number) {\n cache(field: number, cachedBytes: number[]) {\n this.caches[field] = cachedBytes;\n }\n\n clone() {\n return new ChangeTree(this.ref, this.parent, this.root);\n }\n\n ensureRefId() {\n // skip if refId is already set.\n if (this.refId !== undefined) {\n return;\n }\n\n this.refId = this.root.getNextUniqueId();\n }\n\n protected assertValidIndex(index: number, fieldName: string | number) {\n if (index === undefined) {\n throw new Error(`ChangeTree: missing index for field \"${fieldName}\"`);\n }\n }\n\n}\n","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\n\n//\n// Notes:\n// -----\n//\n// - The tsconfig.json of @colyseus/schema uses ES2018.\n// - ES2019 introduces `flatMap` / `flat`, which is not currently relevant, and caused other issues.\n//\n\nconst DEFAULT_SORT = (a: any, b: any) => {\n const A = a.toString();\n const B = b.toString();\n if (A < B) return -1;\n else if (A > B) return 1;\n else return 0\n}\n\nexport function getArrayProxy(value: ArraySchema) {\n value['$proxy'] = true;\n\n //\n // compatibility with @colyseus/schema 0.5.x\n // - allow `map[\"key\"]`\n // - allow `map[\"key\"] = \"xxx\"`\n // - allow `delete map[\"key\"]`\n //\n value = new Proxy(value, {\n get: (obj, prop) => {\n if (\n typeof (prop) !== \"symbol\" &&\n !isNaN(prop as any) // https://stackoverflow.com/a/175787/892698\n ) {\n return obj.at(prop as unknown as number);\n\n } else {\n return obj[prop];\n }\n },\n\n set: (obj, prop, setValue) => {\n if (\n typeof (prop) !== \"symbol\" &&\n !isNaN(prop as any)\n ) {\n const indexes = Array.from(obj['$items'].keys());\n const key = parseInt(indexes[prop] || prop);\n if (setValue === undefined || setValue === null) {\n obj.deleteAt(key);\n\n } else {\n obj.setAt(key, setValue);\n }\n\n } else {\n obj[prop] = setValue;\n }\n\n return true;\n },\n\n deleteProperty: (obj, prop) => {\n if (typeof (prop) === \"number\") {\n obj.deleteAt(prop);\n\n } else {\n delete obj[prop];\n }\n\n return true;\n },\n });\n\n return value;\n}\n\nexport class ArraySchema<V=any> implements Array<V>, 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: number]: V;\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 (\n // type format: [\"string\"]\n Array.isArray(type) || \n\n // type format: { array: \"string\" }\n (type['array'] !== undefined)\n );\n }\n\n constructor (...items: V[]) {\n this.push.apply(this, items);\n }\n\n set length (value: number) {\n if (value === 0) {\n this.clear();\n\n } else {\n this.splice(value, this.length - value);\n }\n }\n\n get length() {\n return this.$items.size;\n }\n\n push(...values: V[]) {\n let lastIndex: number;\n\n values.forEach(value => {\n // set \"index\" for reference.\n lastIndex = this.$refId++;\n\n this.setAt(lastIndex, value);\n });\n\n return lastIndex;\n }\n\n /**\n * Removes the last element from an array and returns it.\n */\n pop(): V | undefined {\n const key = Array.from(this.$indexes.values()).pop();\n if (key === undefined) { return undefined; }\n\n this.$changes.delete(key);\n this.$indexes.delete(key);\n\n const value = this.$items.get(key);\n this.$items.delete(key);\n\n return value;\n }\n\n at(index: number) {\n //\n // FIXME: this should be O(1)\n //\n const key = Array.from(this.$items.keys())[index];\n return this.$items.get(key);\n }\n\n setAt(index: number, value: V) {\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 }\n\n deleteAt(index: number) {\n const key = Array.from(this.$items.keys())[index];\n if (key === undefined) { return false; }\n return this.$deleteAt(key);\n }\n\n protected $deleteAt(index) {\n // delete at internal index\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 /**\n * Combines two or more arrays.\n * @param items Additional items to add to the end of array1.\n */\n concat(...items: (V | ConcatArray<V>)[]): ArraySchema<V> {\n return new ArraySchema(...Array.from(this.$items.values()).concat(...items));\n }\n\n /**\n * Adds all the elements of an array separated by the specified separator string.\n * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.\n */\n join(separator?: string): string {\n return Array.from(this.$items.values()).join(separator);\n }\n\n /**\n * Reverses the elements in an Array.\n */\n reverse(): ArraySchema<V> {\n const indexes = Array.from(this.$items.keys());\n const reversedItems = Array.from(this.$items.values()).reverse();\n\n reversedItems.forEach((item, i) => {\n this.setAt(indexes[i], item);\n });\n\n return this;\n }\n\n /**\n * Removes the first element from an array and returns it.\n */\n shift(): V | undefined {\n const indexes = Array.from(this.$items.keys());\n\n const shiftAt = indexes.shift();\n if (shiftAt === undefined) { return undefined; }\n\n const value = this.$items.get(shiftAt);\n this.$deleteAt(shiftAt);\n\n return value;\n }\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array.\n * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n */\n slice(start?: number, end?: number): V[] {\n return new ArraySchema(...Array.from(this.$items.values()).slice(start, end));\n }\n\n /**\n * Sorts an array.\n * @param compareFn Function used to determine the order of the elements. It is expected to return\n * a negative value if first argument is less than second argument, zero if they're equal and a positive\n * value otherwise. If omitted, the elements are sorted in ascending, ASCII character order.\n * ```ts\n * [11,2,22,1].sort((a, b) => a - b)\n * ```\n */\n sort(compareFn: (a: V, b: V) => number = DEFAULT_SORT): this {\n const indexes = Array.from(this.$items.keys());\n const sortedItems = Array.from(this.$items.values()).sort(compareFn);\n\n sortedItems.forEach((item, i) => {\n this.setAt(indexes[i], item);\n });\n\n return this;\n }\n\n /**\n * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @param items Elements to insert into the array in place of the deleted elements.\n */\n splice(\n start: number,\n deleteCount: number = this.length - start,\n ...items: V[]\n ): V[] {\n const indexes = Array.from(this.$items.keys());\n const removedItems: V[] = [];\n\n for (let i = start; i < start + deleteCount; i++) {\n removedItems.push(this.$items.get(indexes[i]));\n this.$deleteAt(indexes[i]);\n }\n\n return removedItems;\n }\n\n /**\n * Inserts new elements at the start of an array.\n * @param items Elements to insert at the start of the Array.\n */\n unshift(...items: V[]): number {\n const length = this.length;\n const addedLength = items.length;\n\n // const indexes = Array.from(this.$items.keys());\n const previousValues = Array.from(this.$items.values());\n\n items.forEach((item, i) => {\n this.setAt(i, item);\n });\n\n previousValues.forEach((previousValue, i) => {\n this.setAt(addedLength + i, previousValue);\n });\n\n return length + addedLength;\n }\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n indexOf(searchElement: V, fromIndex?: number): number {\n return Array.from(this.$items.values()).indexOf(searchElement, fromIndex);\n }\n\n /**\n * Returns the index of the last occurrence of a specified value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.\n */\n lastIndexOf(searchElement: V, fromIndex: number = this.length - 1): number {\n return Array.from(this.$items.values()).lastIndexOf(searchElement, fromIndex);\n }\n\n /**\n * Determines whether all the members of an array satisfy the specified test.\n * @param callbackfn A function that accepts up to three arguments. The every method calls\n * the callbackfn function for each element in the array until the callbackfn returns a value\n * which is coercible to the Boolean value false, or until the end of the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n * If thisArg is omitted, undefined is used as the this value.\n */\n every(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean {\n return Array.from(this.$items.values()).every(callbackfn, thisArg);\n }\n\n /**\n * Determines whether the specified callback function returns true for any element of an array.\n * @param callbackfn A function that accepts up to three arguments. The some method calls\n * the callbackfn function for each element in the array until the callbackfn returns a value\n * which is coercible to the Boolean value true, or until the end of the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n * If thisArg is omitted, undefined is used as the this value.\n */\n some(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean {\n return Array.from(this.$items.values()).some(callbackfn, thisArg);\n }\n\n /**\n * Performs the specified action for each element in an array.\n * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n forEach(callbackfn: (value: V, index: number, array: V[]) => void, thisArg?: any): void {\n Array.from(this.$items.values()).forEach(callbackfn, thisArg);\n }\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n map<U>(callbackfn: (value: V, index: number, array: V[]) => U, thisArg?: any): U[] {\n return Array.from(this.$items.values()).map(callbackfn, thisArg);\n }\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n filter(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any)\n filter<S extends V>(callbackfn: (value: V, index: number, array: V[]) => value is S, thisArg?: any): V[] {\n return Array.from(this.$items.values()).filter(callbackfn, thisArg);\n }\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n reduce<U=V>(callbackfn: (previousValue: U, currentValue: V, currentIndex: number, array: V[]) => U, initialValue?: U): U {\n return Array.from(this.$items.values()).reduce(callbackfn, initialValue);\n }\n\n /**\n * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n reduceRight<U=V>(callbackfn: (previousValue: U, currentValue: V, currentIndex: number, array: V[]) => U, initialValue?: U): U {\n return Array.from(this.$items.values()).reduceRight(callbackfn, initialValue);\n }\n\n /**\n * Returns the value of the first element in the array where predicate is true, and undefined\n * otherwise.\n * @param predicate find calls predicate once for each element of the array, in ascending\n * order, until it finds one where predicate returns true. If such an element is found, find\n * immediately returns that element value. Otherwise, find returns undefined.\n * @param thisArg If provided, it will be used as the this value for each invocation of\n * predicate. If it is not provided, undefined is used instead.\n */\n find(predicate: (value: V, index: number, obj: V[]) => boolean, thisArg?: any): V | undefined {\n return Array.from(this.$items.values()).find(predicate, thisArg);\n }\n\n /**\n * Returns the index of the first element in the array where predicate is true, and -1\n * otherwise.\n * @param predicate find calls predicate once for each element of the array, in ascending\n * order, until it finds one where predicate returns true. If such an element is found,\n * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n * @param thisArg If provided, it will be used as the this value for each invocation of\n * predicate. If it is not provided, undefined is used instead.\n */\n findIndex(predicate: (value: V, index: number, obj: V[]) => unknown, thisArg?: any): number {\n return Array.from(this.$items.values()).findIndex(predicate, thisArg);\n }\n\n /**\n * Returns the this object after filling the section identified by start and end with value\n * @param value value to fill array section with\n * @param start index to start filling the array at. If start is negative, it is treated as\n * length+start where length is the length of the array.\n * @param end index to stop filling the array at. If end is negative, it is treated as\n * length+end.\n */\n fill(value: V, start?: number, end?: number): this {\n //\n // TODO\n //\n throw new Error(\"ArraySchema#fill() not implemented\");\n // this.$items.fill(value, start, end);\n\n return this;\n }\n\n /**\n * Returns the this object after copying a section of the array identified by start and end\n * to the same array starting at position target\n * @param target If target is negative, it is treated as length+target where length is the\n * length of the array.\n * @param start If start is negative, it is treated as length+start. If end is negative, it\n * is treated as length+end.\n * @param end If not specified, length of the this object is used as its default value.\n */\n copyWithin(target: number, start: number, end?: number): this {\n //\n // TODO\n //\n throw new Error(\"ArraySchema#copyWithin() not implemented\");\n return this;\n }\n\n /**\n * Returns a string representation of an array.\n */\n toString(): string { return this.$items.toString(); }\n\n /**\n * Returns a string representation of an array. The elements are converted to string using their toLocalString methods.\n */\n toLocaleString(): string { return this.$items.toLocaleString() };\n\n /** Iterator */\n [Symbol.iterator](): IterableIterator<V> {\n return Array.from(this.$items.values())[Symbol.iterator]();\n }\n\n [Symbol.unscopables]() {\n return this.$items[Symbol.unscopables]();\n }\n\n /**\n * Returns an iterable of key, value pairs for every entry in the array\n */\n entries(): IterableIterator<[number, V]> { return this.$items.entries(); }\n\n /**\n * Returns an iterable of keys in the array\n */\n keys(): IterableIterator<number> { return this.$items.keys(); }\n\n /**\n * Returns an iterable of values in the array\n */\n values(): IterableIterator<V> { return this.$items.values(); }\n\n /**\n * Determines whether an array includes a certain element, returning true or false as appropriate.\n * @param searchElement The element to search for.\n * @param fromIndex The position in this array at which to begin searching for searchElement.\n */\n includes(searchElement: V, fromIndex?: number): boolean {\n return Array.from(this.$items.values()).includes(searchElement, fromIndex);\n }\n\n /**\n * Calls a defined callback function on each element of an array. Then, flattens the result into\n * a new array.\n * This is identical to a map followed by flat with depth 1.\n *\n * @param callback A function that accepts up to three arguments. The flatMap method calls the\n * callback function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callback function. If\n * thisArg is omitted, undefined is used as the this value.\n */\n // @ts-ignore\n flatMap<U, This = undefined>(callback: (this: This, value: V, index: number, array: V[]) => U | ReadonlyArray<U>, thisArg?: This): U[] {\n // @ts-ignore\n throw new Error(\"ArraySchema#flatMap() is not supported.\");\n }\n\n /**\n * Returns a new array with all sub-array elements concatenated into it recursively up to the\n * specified depth.\n *\n * @param depth The maximum recursion depth\n */\n // @ts-ignore\n flat<A, D extends number = 1>(this: A, depth?: D): any {\n // @ts-ignore\n throw new Error(\"ArraySchema#flat() is not supported.\");\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 return this.toArray().map((value) => {\n return (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value;\n });\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): ArraySchema<V> {\n let cloned: ArraySchema;\n\n if (isDecoding) {\n cloned = new ArraySchema(...Array.from(this.$items.values()));\n\n } else {\n cloned = new ArraySchema(...this.map(item => (\n (item['$changes'])\n ? (item as any as Schema).clone()\n : item\n )));\n }\n\n return cloned;\n };\n\n triggerAll (): void {\n Schema.prototype.triggerAll.apply(this);\n }\n}\n","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 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(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}\n","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}","import { ChangeTree } from './changes/ChangeTree';\nimport { Schema } from './Schema';\nimport { ArraySchema, getArrayProxy } from './types/ArraySchema';\nimport { MapSchema, getMapProxy } from './types/MapSchema';\nimport { getType } from './types';\n\n/**\n * Data types\n */\nexport type PrimitiveType =\n \"string\" |\n \"number\" |\n \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"float32\" |\n \"float64\" |\n typeof Schema;\n\nexport type DefinitionType = PrimitiveType\n | PrimitiveType[]\n | { array: PrimitiveType }\n | { map: PrimitiveType }\n | { collection: PrimitiveType }\n | { set: PrimitiveType };\n\nexport type Definition = { [field: string]: DefinitionType };\nexport type FilterCallback<\n T extends Schema = any,\n V = any,\n R extends Schema = any\n> = (\n ((this: T, client: ClientWithSessionId, value: V) => boolean) |\n ((this: T, client: ClientWithSessionId, value: V, root: R) => boolean)\n);\n\nexport type FilterChildrenCallback<\n T extends Schema = any,\n K = any,\n V = any,\n R extends Schema = any\n> = (\n ((this: T, client: ClientWithSessionId, key: K, value: V) => boolean) |\n ((this: T, client: ClientWithSessionId, key: K, value: V, root: R) => boolean)\n)\n\nexport class SchemaDefinition {\n schema: Definition;\n\n //\n // TODO: use a \"field\" structure combining all these properties per-field.\n //\n\n indexes: { [field: string]: number } = {};\n fieldsByIndex: { [index: number]: string } = {};\n\n filters: { [field: string]: FilterCallback };\n indexesWithFilters: number[];\n childFilters: { [field: string]: FilterChildrenCallback }; // childFilters are used on Map, Array, Set items.\n\n deprecated: { [field: string]: boolean } = {};\n descriptors: PropertyDescriptorMap & ThisType<any> = {};\n\n static create(parent?: SchemaDefinition) {\n const definition = new SchemaDefinition();\n\n // support inheritance\n definition.schema = Object.assign({}, parent && parent.schema || {});\n definition.indexes = Object.assign({}, parent && parent.indexes || {});\n definition.fieldsByIndex = Object.assign({}, parent && parent.fieldsByIndex || {});\n definition.descriptors = Object.assign({}, parent && parent.descriptors || {});\n definition.deprecated = Object.assign({}, parent && parent.deprecated || {});\n\n return definition;\n }\n\n addField(field: string, type: DefinitionType) {\n const index = this.getNextFieldIndex();\n this.fieldsByIndex[index] = field;\n this.indexes[field] = index;\n this.schema[field] = (Array.isArray(type))\n ? { array: type[0] }\n : type;\n }\n\n addFilter(field: string, cb: FilterCallback) {\n if (!this.filters) {\n this.filters = {};\n this.indexesWithFilters = [];\n }\n this.filters[this.indexes[field]] = cb;\n this.indexesWithFilters.push(this.indexes[field]);\n return true;\n }\n\n addChildrenFilter(field: string, cb: FilterChildrenCallback) {\n const index = this.indexes[field];\n const type = this.schema[field];\n\n if (getType(Object.keys(type)[0])) {\n if (!this.childFilters) { this.childFilters = {}; }\n\n this.childFilters[index] = cb;\n return true;\n\n } else {\n console.warn(`@filterChildren: field '${field}' can't have children. Ignoring filter.`);\n }\n }\n\n getChildrenFilter(field: string) {\n return this.childFilters && this.childFilters[this.indexes[field]];\n }\n\n getNextFieldIndex() {\n return Object.keys(this.schema || {}).length;\n }\n}\n\nexport function hasFilter(klass: typeof Schema) {\n return klass._context && klass._context.useFilters;\n}\n\n// Colyseus integration\nexport type ClientWithSessionId = { sessionId: string } & any;\n\nexport class Context {\n types: {[id: number]: typeof Schema} = {};\n schemas = new Map<typeof Schema, number>();\n useFilters = false;\n\n has(schema: typeof Schema) {\n return this.schemas.has(schema);\n }\n\n get(typeid: number) {\n return this.types[typeid];\n }\n\n add(schema: typeof Schema, typeid: number = this.schemas.size) {\n // FIXME: move this to somewhere else?\n // support inheritance\n schema._definition = SchemaDefinition.create(schema._definition);\n\n schema._typeid = typeid;\n this.types[typeid] = schema;\n this.schemas.set(schema, typeid);\n }\n\n static create(context: Context = new Context) {\n return function (definition: DefinitionType) {\n return type(definition, context);\n }\n }\n}\n\nexport const globalContext = new Context();\n\n/**\n * `@type()` decorator for proxies\n */\nexport function type (type: DefinitionType, context: Context = globalContext): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n if (!type) {\n throw new Error(\"Type not found. Ensure your `@type` annotations are correct and that you don't have any circular dependencies.\");\n }\n\n const constructor = target.constructor as typeof Schema;\n constructor._context = context;\n\n /*\n * static schema\n */\n if (!context.has(constructor)) {\n context.add(constructor);\n }\n\n const definition = constructor._definition;\n definition.addField(field, type);\n\n /**\n * skip if descriptor already exists for this field (`@deprecated()`)\n */\n if (definition.descriptors[field]) {\n if (definition.deprecated[field]) {\n // do not create accessors for deprecated properties.\n return;\n\n } else {\n // trying to define same property multiple times across inheritance.\n // https://github.com/colyseus/colyseus-unity3d/issues/131#issuecomment-814308572\n try {\n throw new Error(`@colyseus/schema: Duplicate '${field}' definition on '${constructor.name}'.\\nCheck @type() annotation`);\n\n } catch (e) {\n const definitionAtLine = e.stack.split(\"\\n\")[4].trim();\n throw new Error(`${e.message} ${definitionAtLine}`);\n }\n }\n }\n\n const isArray = ArraySchema.is(type);\n const isMap = !isArray && MapSchema.is(type);\n\n // TODO: refactor me.\n // Allow abstract intermediary classes with no fields to be serialized\n // (See \"should support an inheritance with a Schema type without fields\" test)\n if (typeof (type) !== \"string\" && !Schema.is(type)) {\n const childType = Object.values(type)[0];\n if (typeof (childType) !== \"string\" && !context.has(childType)) {\n context.add(childType);\n }\n }\n\n const fieldCached = `_${field}`;\n\n definition.descriptors[fieldCached] = {\n enumerable: false,\n configurable: false,\n writable: true,\n };\n\n definition.descriptors[field] = {\n get: function () {\n return this[fieldCached];\n },\n\n set: function (this: Schema, value: any) {\n /**\n * Create Proxy for array or map items\n */\n\n // skip if value is the same as cached.\n if (value === this[fieldCached]) {\n return;\n }\n\n if (\n value !== undefined &&\n value !== null\n ) {\n // automaticallty transform Array into ArraySchema\n if (isArray && !(value instanceof ArraySchema)) {\n value = new ArraySchema(...value);\n }\n\n // automaticallty transform Map into MapSchema\n if (isMap && !(value instanceof MapSchema)) {\n value = new MapSchema(value);\n }\n\n // try to turn provided structure into a Proxy\n if (value['$proxy'] === undefined) {\n if (isMap) {\n value = getMapProxy(value);\n\n } else if (isArray) {\n value = getArrayProxy(value);\n }\n }\n\n // flag the change for encoding.\n this.$changes.change(field);\n\n //\n // call setParent() recursively for this and its child\n // structures.\n //\n if (value['$changes']) {\n (value['$changes'] as ChangeTree).setParent(\n this,\n this.$changes.root,\n this._definition.indexes[field],\n );\n }\n\n } else {\n //\n // Setting a field to `null` or `undefined` will delete it.\n //\n this.$changes.delete(field);\n }\n\n this[fieldCached] = value;\n },\n\n enumerable: true,\n configurable: true\n };\n }\n}\n\n/**\n * `@filter()` decorator for defining data filters per client\n */\n\nexport function filter<T extends Schema, V, R extends Schema>(cb: FilterCallback<T, V, R>): PropertyDecorator {\n return function (target: any, field: string) {\n const constructor = target.constructor as typeof Schema;\n const definition = constructor._definition;\n\n if (definition.addFilter(field, cb)) {\n constructor._context.useFilters = true;\n }\n }\n}\n\nexport function filterChildren<T extends Schema, K, V, R extends Schema>(cb: FilterChildrenCallback<T, K, V, R>): PropertyDecorator {\n return function (target: any, field: string) {\n const constructor = target.constructor as typeof Schema;\n const definition = constructor._definition;\n if (definition.addChildrenFilter(field, cb)) {\n constructor._context.useFilters = true;\n }\n }\n}\n\n\n/**\n * `@deprecated()` flag a field as deprecated.\n * The previous `@type()` annotation should remain along with this one.\n */\n\nexport function deprecated(throws: boolean = true, context: Context = globalContext): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n const constructor = target.constructor as typeof Schema;\n const definition = constructor._definition;\n\n definition.deprecated[field] = true;\n\n if (throws) {\n definition.descriptors[field] = {\n get: function () { throw new Error(`${field} is deprecated.`); },\n set: function (this: Schema, value: any) { /* throw new Error(`${field} is deprecated.`); */ },\n enumerable: false,\n configurable: true\n };\n }\n }\n}\n\nexport function defineTypes(\n target: typeof Schema,\n fields: { [property: string]: DefinitionType },\n context: Context = target._context || globalContext\n) {\n for (let field in fields) {\n type(fields[field], context)(target.prototype, field);\n }\n return target;\n}\n","/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\n\nfunction utf8Length(str) {\n var c = 0, length = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n\nexport function utf8Write(view, offset, str) {\n var c = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n view[offset++] = c;\n }\n else if (c < 0x800) {\n view[offset++] = 0xc0 | (c >> 6);\n view[offset++] = 0x80 | (c & 0x3f);\n }\n else if (c < 0xd800 || c >= 0xe000) {\n view[offset++] = 0xe0 | (c >> 12);\n view[offset++] = 0x80 | (c >> 6 & 0x3f);\n view[offset++] = 0x80 | (c & 0x3f);\n }\n else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n view[offset++] = 0xf0 | (c >> 18);\n view[offset++] = 0x80 | (c >> 12 & 0x3f);\n view[offset++] = 0x80 | (c >> 6 & 0x3f);\n view[offset++] = 0x80 | (c & 0x3f);\n }\n }\n}\n\nexport function int8(bytes, value) {\n bytes.push(value & 255);\n};\n\nexport function uint8(bytes, value) {\n bytes.push(value & 255);\n};\n\nexport function int16(bytes, value) {\n bytes.push(value & 255);\n bytes.push((value >> 8) & 255);\n};\n\nexport function uint16(bytes, value) {\n bytes.push(value & 255);\n bytes.push((value >> 8) & 255);\n};\n\nexport function int32(bytes, value) {\n bytes.push(value & 255);\n bytes.push((value >> 8) & 255);\n bytes.push((value >> 16) & 255);\n bytes.push((value >> 24) & 255);\n};\n\nexport function uint32(bytes, value) {\n const b4 = value >> 24;\n const b3 = value >> 16;\n const b2 = value >> 8;\n const b1 = value;\n bytes.push(b1 & 255);\n bytes.push(b2 & 255);\n bytes.push(b3 & 255);\n bytes.push(b4 & 255);\n};\n\nexport function int64(bytes, value) {\n const high = Math.floor(value / Math.pow(2, 32));\n const low = value >>> 0;\n uint32(bytes, low);\n uint32(bytes, high);\n};\n\nexport function uint64(bytes, value) {\n const high = (value / Math.pow(2, 32)) >> 0;\n const low = value >>> 0;\n uint32(bytes, low);\n uint32(bytes, high);\n};\n\nexport function float32(bytes, value) {\n writeFloat32(bytes, value);\n}\n\nexport function float64(bytes, value) {\n writeFloat64(bytes, value);\n}\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _int32 = new Int32Array(2);\nconst _float32 = new Float32Array(_int32.buffer);\nconst _float64 = new Float64Array(_int32.buffer);\n\nexport function writeFloat32(bytes, value) {\n _float32[0] = value;\n int32(bytes, _int32[0]);\n};\n\nexport function writeFloat64(bytes, value) {\n _float64[0] = value;\n int32(bytes, _int32[_isLittleEndian ? 0 : 1]);\n int32(bytes, _int32[_isLittleEndian ? 1 : 0]);\n};\n\nexport function boolean(bytes, value) {\n return uint8(bytes, value ? 1 : 0);\n};\n\nexport function string(bytes, value) {\n // encode `null` strings as empty.\n if (!value) { value = \"\"; }\n\n let length = utf8Length(value);\n let size = 0;\n\n // fixstr\n if (length < 0x20) {\n bytes.push(length | 0xa0);\n size = 1;\n }\n // str 8\n else if (length < 0x100) {\n bytes.push(0xd9);\n uint8(bytes, length);\n size = 2;\n }\n // str 16\n else if (length < 0x10000) {\n bytes.push(0xda);\n uint16(bytes, length);\n size = 3;\n }\n // str 32\n else if (length < 0x100000000) {\n bytes.push(0xdb);\n uint32(bytes, length);\n size = 5;\n } else {\n throw new Error('String too long');\n }\n\n utf8Write(bytes, bytes.length, value);\n\n return size + length;\n}\n\nexport function number(bytes, value) {\n if (isNaN(value)) {\n return number(bytes, 0);\n\n } else if (!isFinite(value)) {\n return number(bytes, (value > 0) ? Number.MAX_SAFE_INTEGER : -Number.MAX_SAFE_INTEGER);\n\n } else if (value !== (value|0)) {\n bytes.push(0xcb);\n writeFloat64(bytes, value);\n return 9;\n\n // TODO: encode float 32?\n // is it possible to differentiate between float32 / float64 here?\n\n // // float 32\n // bytes.push(0xca);\n // writeFloat32(bytes, value);\n // return 5;\n }\n\n if (value >= 0) {\n // positive fixnum\n if (value < 0x80) {\n uint8(bytes, value);\n return 1;\n }\n\n // uint 8\n if (value < 0x100) {\n bytes.push(0xcc);\n uint8(bytes, value);\n return 2;\n }\n\n // uint 16\n if (value < 0x10000) {\n bytes.push(0xcd);\n uint16(bytes, value);\n return 3;\n }\n\n // uint 32\n if (value < 0x100000000) {\n bytes.push(0xce);\n uint32(bytes, value);\n return 5;\n }\n\n // uint 64\n bytes.push(0xcf);\n uint64(bytes, value);\n return 9;\n\n } else {\n\n // negative fixnum\n if (value >= -0x20) {\n bytes.push(0xe0 | (value + 0x20));\n return 1;\n }\n\n // int 8\n if (value >= -0x80) {\n bytes.push(0xd0);\n int8(bytes, value);\n return 2;\n }\n\n // int 16\n if (value >= -0x8000) {\n bytes.push(0xd1);\n int16(bytes, value);\n return 3;\n }\n\n // int 32\n if (value >= -0x80000000) {\n bytes.push(0xd2);\n int32(bytes, value);\n return 5;\n }\n\n // int 64\n bytes.push(0xd3);\n int64(bytes, value);\n return 9;\n }\n}","/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\nimport { SWITCH_TO_STRUCTURE } from \"../spec\";\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\nexport interface Iterator { offset: number; }\n\nfunction utf8Read(bytes, offset, length) {\n var string = '', chr = 0;\n for (var i = offset, end = offset + length; i < end; i++) {\n var byte = bytes[i];\n if ((byte & 0x80) === 0x00) {\n string += String.fromCharCode(byte);\n continue;\n }\n if ((byte & 0xe0) === 0xc0) {\n string += String.fromCharCode(\n ((byte & 0x1f) << 6) |\n (bytes[++i] & 0x3f)\n );\n continue;\n }\n if ((byte & 0xf0) === 0xe0) {\n string += String.fromCharCode(\n ((byte & 0x0f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0)\n );\n continue;\n }\n if ((byte & 0xf8) === 0xf0) {\n chr = ((byte & 0x07) << 18) |\n ((bytes[++i] & 0x3f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0);\n if (chr >= 0x010000) { // surrogate pair\n chr -= 0x010000;\n string += String.fromCharCode((chr >>> 10) + 0xD800, (chr & 0x3FF) + 0xDC00);\n } else {\n string += String.fromCharCode(chr);\n }\n continue;\n }\n\n console.error('Invalid byte ' + byte.toString(16));\n // (do not throw error to avoid server/client from crashing due to hack attemps)\n // throw new Error('Invalid byte ' + byte.toString(16));\n }\n return string;\n}\n\nexport function int8 (bytes: number[], it: Iterator) {\n return uint8(bytes, it) << 24 >> 24;\n};\n\nexport function uint8 (bytes: number[], it: Iterator) {\n return bytes[it.offset++];\n};\n\nexport function int16 (bytes: number[], it: Iterator) {\n return uint16(bytes, it) << 16 >> 16;\n};\n\nexport function uint16 (bytes: number[], it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8;\n};\n\nexport function int32 (bytes: number[], it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8 | bytes[it.offset++] << 16 | bytes[it.offset++] << 24;\n};\n\nexport function uint32 (bytes: number[], it: Iterator) {\n return int32(bytes, it) >>> 0;\n};\n\nexport function float32(bytes: number[], it: Iterator) {\n return readFloat32(bytes, it);\n}\n\nexport function float64(bytes: number[], it: Iterator) {\n return readFloat64(bytes, it);\n}\n\nexport function int64(bytes: number[], it: Iterator) {\n const low = uint32(bytes, it);\n const high = int32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\nexport function uint64(bytes: number[], it: Iterator) {\n const low = uint32(bytes, it);\n const high = uint32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _int32 = new Int32Array(2);\nconst _float32 = new Float32Array(_int32.buffer);\nconst _float64 = new Float64Array(_int32.buffer);\n\nexport function readFloat32 (bytes: number[], it: Iterator) {\n _int32[0] = int32(bytes, it);\n return _float32[0];\n};\n\nexport function readFloat64 (bytes: number[], it: Iterator) {\n _int32[_isLittleEndian ? 0 : 1] = int32(bytes, it);\n _int32[_isLittleEndian ? 1 : 0] = int32(bytes, it);\n return _float64[0];\n};\n\nexport function boolean (bytes: number[], it: Iterator) {\n return uint8(bytes, it) > 0;\n};\n\nexport function string (bytes, it: Iterator) {\n const prefix = bytes[it.offset++];\n let length: number;\n\n if (prefix < 0xc0) {\n // fixstr\n length = prefix & 0x1f;\n\n } else if (prefix === 0xd9) {\n length = uint8(bytes, it);\n\n } else if (prefix === 0xda) {\n length = uint16(bytes, it);\n\n } else if (prefix === 0xdb) {\n length = uint32(bytes, it);\n }\n\n const value = utf8Read(bytes, it.offset, length);\n it.offset += length;\n\n return value;\n}\n\nexport function stringCheck(bytes, it: Iterator) {\n const prefix = bytes[it.offset];\n return (\n // fixstr\n (prefix < 0xc0 && prefix > 0xa0) ||\n // str 8\n prefix === 0xd9 ||\n // str 16\n prefix === 0xda ||\n // str 32\n prefix === 0xdb\n );\n}\n\nexport function number (bytes, it: Iterator) {\n const prefix = bytes[it.offset++];\n\n if (prefix < 0x80) {\n // positive fixint\n return prefix;\n\n } else if (prefix === 0xca) {\n // float 32\n return readFloat32(bytes, it);\n\n } else if (prefix === 0xcb) {\n // float 64\n return readFloat64(bytes, it);\n\n } else if (prefix === 0xcc) {\n // uint 8\n return uint8(bytes, it);\n\n } else if (prefix === 0xcd) {\n // uint 16\n return uint16(bytes, it);\n\n } else if (prefix === 0xce) {\n // uint 32\n return uint32(bytes, it);\n\n } else if (prefix === 0xcf) {\n // uint 64\n return uint64(bytes, it);\n\n } else if (prefix === 0xd0) {\n // int 8\n return int8(bytes, it);\n\n } else if (prefix === 0xd1) {\n // int 16\n return int16(bytes, it);\n\n } else if (prefix === 0xd2) {\n // int 32\n return int32(bytes, it);\n\n } else if (prefix === 0xd3) {\n // int 64\n return int64(bytes, it);\n\n } else if (prefix > 0xdf) {\n // negative fixint\n return (0xff - prefix + 1) * -1\n }\n};\n\nexport function numberCheck (bytes, it: Iterator) {\n const prefix = bytes[it.offset];\n // positive fixint - 0x00 - 0x7f\n // float 32 - 0xca\n // float 64 - 0xcb\n // uint 8 - 0xcc\n // uint 16 - 0xcd\n // uint 32 - 0xce\n // uint 64 - 0xcf\n // int 8 - 0xd0\n // int 16 - 0xd1\n // int 32 - 0xd2\n // int 64 - 0xd3\n return (\n prefix < 0x80 ||\n (prefix >= 0xca && prefix <= 0xd3)\n );\n}\n\nexport function arrayCheck (bytes, it: Iterator) {\n return bytes[it.offset] < 0xa0;\n\n // const prefix = bytes[it.offset] ;\n\n // if (prefix < 0xa0) {\n // return prefix;\n\n // // array\n // } else if (prefix === 0xdc) {\n // it.offset += 2;\n\n // } else if (0xdd) {\n // it.offset += 4;\n // }\n\n // return prefix;\n}\n\nexport function switchStructureCheck(bytes, it: Iterator) {\n return (\n // previous byte should be `SWITCH_TO_STRUCTURE`\n bytes[it.offset - 1] === SWITCH_TO_STRUCTURE &&\n // next byte should be a number\n (bytes[it.offset] < 0x80 || (bytes[it.offset] >= 0xca && bytes[it.offset] <= 0xd3))\n );\n}","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\n\ntype K = number; // TODO: allow to specify K generic on MapSchema.\n\nexport class CollectionSchema<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['collection'] !== 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 // 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 at(index: number): V | undefined {\n const key = Array.from(this.$items.keys())[index];\n return this.$items.get(key);\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: K;\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 return Array.from(this.$items.values()).some((v) => v === value);\n }\n\n forEach(callbackfn: (value: V, key: K, collection: CollectionSchema<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): CollectionSchema<V> {\n let cloned: CollectionSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new CollectionSchema(), this);\n\n } else {\n // server-side\n cloned = new CollectionSchema();\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}\n","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 // 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(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}","/**\n * Extracted from https://www.npmjs.com/package/strong-events\n */\n\ntype ExtractFunctionParameters<T extends (...args: any[]) => any> = T extends (...args: infer P) => any ? P : never;\n\nexport class EventEmitter_<CallbackSignature extends (...args: any[]) => any> {\n handlers: Array<CallbackSignature> = [];\n\n register(cb: CallbackSignature, once: boolean = false) {\n this.handlers.push(cb);\n return this;\n }\n\n invoke(...args: ExtractFunctionParameters<CallbackSignature>) {\n this.handlers.forEach((handler) => handler(...args));\n }\n\n invokeAsync(...args: ExtractFunctionParameters<CallbackSignature>) {\n return Promise.all(this.handlers.map((handler) => handler(...args)));\n }\n\n remove (cb: CallbackSignature) {\n const index = this.handlers.indexOf(cb);\n this.handlers[index] = this.handlers[this.handlers.length - 1];\n this.handlers.pop();\n }\n\n clear() {\n this.handlers = [];\n }\n}\n","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { ClientWithSessionId } from \"../annotations\";\n\nexport class ClientState {\n refIds = new WeakSet<ChangeTree>();\n containerIndexes = new WeakMap<ChangeTree, Set<number>>();\n // containerIndexes = new Map<ChangeTree, Set<number>>();\n\n addRefId(changeTree: ChangeTree) {\n if (!this.refIds.has(changeTree)) {\n this.refIds.add(changeTree);\n this.containerIndexes.set(changeTree, new Set());\n }\n }\n\n static get(client: ClientWithSessionId) {\n if (client.$filterState === undefined) {\n client.$filterState = new ClientState();\n }\n\n return client.$filterState as ClientState;\n }\n}\n","import { SWITCH_TO_STRUCTURE, TYPE_ID, OPERATION } from './spec';\nimport { ClientWithSessionId, PrimitiveType, Context, SchemaDefinition, DefinitionType } from \"./annotations\";\n\nimport * as encode from \"./encoding/encode\";\nimport * as decode from \"./encoding/decode\";\nimport type { Iterator } from \"./encoding/decode\"; // dts-bundle-generator\n\nimport { ArraySchema } from \"./types/ArraySchema\";\nimport { MapSchema } from \"./types/MapSchema\";\nimport { CollectionSchema } from './types/CollectionSchema';\nimport { SetSchema } from './types/SetSchema';\n\nimport { ChangeTree, Root, Ref, ChangeOperation } from \"./changes/ChangeTree\";\nimport { NonFunctionPropNames } from './types/HelperTypes';\nimport { EventEmitter_ } from './events/EventEmitter';\nimport { ClientState } from './filters';\nimport { getType } from './types';\n\nexport interface DataChange<T=any> {\n op: OPERATION,\n field: string;\n dynamicIndex?: number | string;\n value: T;\n previousValue: T;\n}\n\nexport interface SchemaDecoderCallbacks {\n onAdd?: (item: any, key: any) => void;\n onRemove?: (item: any, key: any) => void;\n onChange?: (item: any, key: any) => void;\n clone(decoding?: boolean): SchemaDecoderCallbacks;\n clear(decoding?: boolean);\n decode?(byte, it: Iterator);\n}\n\nclass EncodeSchemaError extends Error {}\n\nfunction assertType(value: any, type: string, klass: Schema, field: string | number) {\n let typeofTarget: string;\n let allowNull: boolean = false;\n\n switch (type) {\n case \"number\":\n case \"int8\":\n case \"uint8\":\n case \"int16\":\n case \"uint16\":\n case \"int32\":\n case \"uint32\":\n case \"int64\":\n case \"uint64\":\n case \"float32\":\n case \"float64\":\n typeofTarget = \"number\";\n if (isNaN(value)) {\n console.log(`trying to encode \"NaN\" in ${klass.constructor.name}#${field}`);\n }\n break;\n case \"string\":\n typeofTarget = \"string\";\n allowNull = true;\n break;\n case \"boolean\":\n // boolean is always encoded as true/false based on truthiness\n return;\n }\n\n if (typeof (value) !== typeofTarget && (!allowNull || (allowNull && value !== null))) {\n let foundValue = `'${JSON.stringify(value)}'${(value && value.constructor && ` (${value.constructor.name})`) || ''}`;\n throw new EncodeSchemaError(`a '${typeofTarget}' was expected, but ${foundValue} was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nfunction assertInstanceType(\n value: Schema,\n type: typeof Schema\n | typeof ArraySchema\n | typeof MapSchema\n | typeof CollectionSchema\n | typeof SetSchema,\n klass: Schema,\n field: string | number,\n) {\n if (!(value instanceof type)) {\n throw new EncodeSchemaError(`a '${type.name}' was expected, but '${(value as any).constructor.name}' was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nfunction encodePrimitiveType(\n type: PrimitiveType,\n bytes: number[],\n value: any,\n klass: Schema,\n field: string | number,\n) {\n assertType(value, type as string, klass, field);\n\n const encodeFunc = encode[type as string];\n\n if (encodeFunc) {\n encodeFunc(bytes, value);\n\n } else {\n throw new EncodeSchemaError(`a '${type}' was expected, but ${value} was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nfunction decodePrimitiveType (type: string, bytes: number[], it: Iterator) {\n return decode[type as string](bytes, it);\n}\n\n/**\n * Schema encoder / decoder\n */\nexport abstract class Schema {\n static _typeid: number;\n static _context: Context;\n\n static _definition: SchemaDefinition = SchemaDefinition.create();\n\n static onError(e) {\n console.error(e);\n }\n\n static is(type: DefinitionType) {\n return (\n type['_definition'] &&\n type['_definition'].schema !== undefined\n );\n }\n\n protected $changes: ChangeTree;\n // protected $root: ChangeSet;\n\n // TODO: refactor. this feature needs to be ported to other languages with potentially different API\n protected $listeners: { [field: string]: EventEmitter_<(a: any, b: any) => void> };\n\n public onChange?(changes: DataChange[]);\n public onRemove?();\n\n // allow inherited classes to have a constructor\n constructor(...args: any[]) {\n // fix enumerability of fields for end-user\n Object.defineProperties(this, {\n $changes: {\n value: new ChangeTree(this, undefined, new Root()),\n enumerable: false,\n writable: true\n },\n\n $listeners: {\n value: {},\n enumerable: false,\n writable: true\n },\n });\n\n const descriptors = this._definition.descriptors;\n if (descriptors) {\n Object.defineProperties(this, descriptors);\n }\n\n //\n // Assign initial values\n //\n if (args[0]) {\n this.assign(args[0]);\n }\n }\n\n public assign(\n props: { [prop in NonFunctionPropNames<this>]?: this[prop] }\n ) {\n Object.assign(this, props);\n return this;\n }\n\n protected get _definition () { return (this.constructor as typeof Schema)._definition; }\n\n public listen <K extends NonFunctionPropNames<this>>(attr: K, callback: (value: this[K], previousValue: this[K]) => void) {\n if (!this.$listeners[attr as string]) {\n this.$listeners[attr as string] = new EventEmitter_();\n }\n this.$listeners[attr as string].register(callback);\n\n // return un-register callback.\n return () =>\n this.$listeners[attr as string].remove(callback);\n }\n\n decode(\n bytes: number[],\n it: Iterator = { offset: 0 },\n ref: Ref = this,\n allChanges: Map<number, DataChange[]> = new Map<number, DataChange[]>(),\n ) {\n const $root = this.$changes.root;\n const totalBytes = bytes.length;\n\n let refId: number = 0;\n let changes: DataChange[] = [];\n\n $root.refs.set(refId, this);\n allChanges.set(refId, changes);\n\n while (it.offset < totalBytes) {\n let byte = bytes[it.offset++];\n\n if (byte == SWITCH_TO_STRUCTURE) {\n refId = decode.number(bytes, it);\n\n const nextRef = $root.refs.get(refId) as Schema;\n\n //\n // Trying to access a reference that haven't been decoded yet.\n //\n if (!nextRef) { throw new Error(`\"refId\" not found: ${refId}`); }\n\n ref = nextRef;\n\n // create empty list of changes for this refId.\n changes = [];\n allChanges.set(refId, changes);\n\n continue;\n }\n\n const changeTree: ChangeTree = ref['$changes'];\n const isSchema = (ref['_definition'] !== undefined);\n\n const operation = (isSchema)\n ? (byte >> 6) << 6 // \"compressed\" index + operation\n : byte; // \"uncompressed\" index + operation (array/map items)\n\n if (operation === OPERATION.CLEAR) {\n //\n // TODO: refactor me!\n // The `.clear()` method is calling `$root.removeRef(refId)` for\n // each item inside this collection\n //\n (ref as SchemaDecoderCallbacks).clear(true);\n continue;\n }\n\n const fieldIndex = (isSchema)\n ? byte % (operation || 255) // if \"REPLACE\" operation (0), use 255\n : decode.number(bytes, it);\n\n const fieldName = (isSchema)\n ? (ref['_definition'].fieldsByIndex[fieldIndex])\n : \"\";\n\n let type = changeTree.getType(fieldIndex);\n let value: any;\n let previousValue: any;\n\n let dynamicIndex: number | string;\n\n if (!isSchema) {\n previousValue = ref['getByIndex'](fieldIndex);\n\n if ((operation & OPERATION.ADD) === OPERATION.ADD) { // ADD or DELETE_AND_ADD\n dynamicIndex = (ref instanceof MapSchema)\n ? decode.string(bytes, it)\n : fieldIndex;\n ref['setIndex'](fieldIndex, dynamicIndex);\n\n } else {\n // here\n dynamicIndex = ref['getIndex'](fieldIndex);\n }\n\n } else {\n previousValue = ref[`_${fieldName}`];\n }\n\n //\n // Delete operations\n //\n if ((operation & OPERATION.DELETE) === OPERATION.DELETE)\n {\n if (operation !== OPERATION.DELETE_AND_ADD) {\n ref['deleteByIndex'](fieldIndex);\n }\n\n // Flag `refId` for garbage collection.\n if (previousValue && previousValue['$changes']) {\n $root.removeRef(previousValue['$changes'].refId);\n }\n\n value = null;\n }\n\n if (fieldName === undefined) {\n console.warn(\"@colyseus/schema: definition mismatch\");\n\n //\n // keep skipping next bytes until reaches a known structure\n // by local decoder.\n //\n const nextIterator: Iterator = { offset: it.offset };\n while (it.offset < totalBytes) {\n if (decode.switchStructureCheck(bytes, it)) {\n nextIterator.offset = it.offset + 1;\n if ($root.refs.has(decode.number(bytes, nextIterator))) {\n break;\n }\n }\n\n it.offset++;\n }\n\n continue;\n\n } else if (operation === OPERATION.DELETE) {\n //\n // FIXME: refactor me.\n // Don't do anything.\n //\n\n } else if (Schema.is(type)) {\n const refId = decode.number(bytes, it);\n value = $root.refs.get(refId);\n\n if (operation !== OPERATION.REPLACE) {\n const childType = this.getSchemaType(bytes, it, type);\n\n if (!value) {\n value = this.createTypeInstance(childType);\n value.$changes.refId = refId;\n\n if (previousValue) {\n value.onChange = previousValue.onChange;\n value.onRemove = previousValue.onRemove;\n value.$listeners = previousValue.$listeners;\n\n if (\n previousValue['$changes'].refId &&\n refId !== previousValue['$changes'].refId\n ) {\n $root.removeRef(previousValue['$changes'].refId);\n }\n }\n }\n\n $root.addRef(refId, value, (value !== previousValue));\n }\n } else if (typeof(type) === \"string\") {\n //\n // primitive value (number, string, boolean, etc)\n //\n value = decodePrimitiveType(type as string, bytes, it);\n\n } else {\n const typeDef = getType(Object.keys(type)[0]);\n const refId = decode.number(bytes, it);\n\n const valueRef: SchemaDecoderCallbacks = ($root.refs.has(refId))\n ? previousValue || $root.refs.get(refId)\n : new typeDef.constructor();\n\n value = valueRef.clone(true);\n value.$changes.refId = refId;\n\n // preserve schema callbacks\n if (previousValue) {\n value.onAdd = previousValue.onAdd;\n value.onRemove = previousValue.onRemove;\n value.onChange = previousValue.onChange;\n\n if (\n previousValue['$changes'].refId &&\n refId !== previousValue['$changes'].refId\n ) {\n $root.removeRef(previousValue['$changes'].refId);\n\n //\n // Trigger onRemove if structure has been replaced.\n //\n const deletes: DataChange[] = [];\n const entries: IterableIterator<[any, any]> = previousValue.entries();\n let iter: IteratorResult<[any, any]>;\n while ((iter = entries.next()) && !iter.done) {\n const [key, value] = iter.value;\n deletes.push({\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: value,\n });\n }\n\n allChanges.set(previousValue['$changes'].refId, deletes);\n }\n }\n\n $root.addRef(refId, value, (valueRef !== previousValue));\n\n //\n // TODO: deprecate proxies on next version.\n // get proxy to target value.\n //\n if (typeDef.getProxy) {\n value = typeDef.getProxy(value);\n }\n }\n\n let hasChange = (previousValue !== value);\n\n if (\n value !== null &&\n value !== undefined\n ) {\n if (value['$changes']) {\n value['$changes'].setParent(\n changeTree.ref,\n changeTree.root,\n fieldIndex,\n );\n }\n\n if (ref instanceof Schema) {\n ref[fieldName] = value;\n\n //\n // FIXME: use `_field` instead of `field`.\n //\n // `field` is going to use the setter of the PropertyDescriptor\n // and create a proxy for array/map. This is only useful for\n // backwards-compatibility with @colyseus/schema@0.5.x\n //\n // // ref[_field] = value;\n\n } else if (ref instanceof MapSchema) {\n // const key = ref['$indexes'].get(field);\n const key = dynamicIndex as string;\n\n // ref.set(key, value);\n ref['$items'].set(key, value);\n\n } else if (ref instanceof ArraySchema) {\n // const key = ref['$indexes'][field];\n // console.log(\"SETTING FOR ArraySchema =>\", { field, key, value });\n // ref[key] = value;\n ref.setAt(fieldIndex, value);\n\n } else if (ref instanceof CollectionSchema) {\n const index = ref.add(value);\n ref['setIndex'](fieldIndex, index);\n\n } else if (ref instanceof SetSchema) {\n const index = ref.add(value);\n if (index !== false) {\n ref['setIndex'](fieldIndex, index);\n }\n }\n }\n\n if (\n hasChange\n // &&\n // (\n // this.onChange || ref.$listeners[field]\n // )\n ) {\n changes.push({\n op: operation,\n field: fieldName,\n dynamicIndex,\n value,\n previousValue,\n });\n }\n }\n\n this._triggerChanges(allChanges);\n\n // drop references of unused schemas\n $root.garbageCollectDeletedRefs();\n\n return allChanges;\n }\n\n encode(\n encodeAll = false,\n bytes: number[] = [],\n useFilters: boolean = false,\n ) {\n const rootChangeTree = this.$changes;\n const refIdsVisited = new WeakSet<ChangeTree>();\n\n const changeTrees: ChangeTree[] = [rootChangeTree];\n let numChangeTrees = 1;\n\n for (let i = 0; i < numChangeTrees; i++) {\n const changeTree = changeTrees[i];\n const ref = changeTree.ref;\n const isSchema = (ref instanceof Schema);\n\n // Generate unique refId for the ChangeTree.\n changeTree.ensureRefId();\n\n // mark this ChangeTree as visited.\n refIdsVisited.add(changeTree);\n\n // root `refId` is skipped.\n if (\n changeTree !== rootChangeTree &&\n (changeTree.changed || encodeAll)\n ) {\n encode.uint8(bytes, SWITCH_TO_STRUCTURE);\n encode.number(bytes, changeTree.refId);\n }\n\n const changes: ChangeOperation[] | number[] = (encodeAll)\n ? Array.from(changeTree.allChanges)\n : Array.from(changeTree.changes.values());\n\n for (let j = 0, cl = changes.length; j < cl; j++) {\n const operation: ChangeOperation = (encodeAll)\n ? { op: OPERATION.ADD, index: changes[j] as number }\n : changes[j] as ChangeOperation;\n\n const fieldIndex = operation.index;\n\n const field = (isSchema)\n ? ref['_definition'].fieldsByIndex && ref['_definition'].fieldsByIndex[fieldIndex]\n : fieldIndex;\n\n // cache begin index if `useFilters`\n const beginIndex = bytes.length;\n\n // encode field index + operation\n if (operation.op !== OPERATION.TOUCH) {\n if (isSchema) {\n //\n // Compress `fieldIndex` + `operation` into a single byte.\n // This adds a limitaion of 64 fields per Schema structure\n //\n encode.uint8(bytes, (fieldIndex | operation.op));\n\n } else {\n encode.uint8(bytes, operation.op);\n\n // custom operations\n if (operation.op === OPERATION.CLEAR) {\n continue;\n }\n\n // indexed operations\n encode.number(bytes, fieldIndex);\n }\n }\n\n //\n // encode \"alias\" for dynamic fields (maps)\n //\n if (\n !isSchema &&\n (operation.op & OPERATION.ADD) == OPERATION.ADD // ADD or DELETE_AND_ADD\n ) {\n if (ref instanceof MapSchema) {\n //\n // MapSchema dynamic key\n //\n const dynamicIndex = changeTree.ref['$indexes'].get(fieldIndex);\n encode.string(bytes, dynamicIndex);\n }\n }\n\n if (operation.op === OPERATION.DELETE) {\n //\n // TODO: delete from filter cache data.\n //\n // if (useFilters) {\n // delete changeTree.caches[fieldIndex];\n // }\n continue;\n }\n\n // const type = changeTree.childType || ref._schema[field];\n const type = changeTree.getType(fieldIndex);\n\n // const type = changeTree.getType(fieldIndex);\n const value = changeTree.getValue(fieldIndex);\n\n // Enqueue ChangeTree to be visited\n if (\n value &&\n value['$changes'] &&\n !refIdsVisited.has(value['$changes'])\n ) {\n changeTrees.push(value['$changes']);\n value['$changes'].ensureRefId();\n numChangeTrees++;\n }\n\n if (operation.op === OPERATION.TOUCH) {\n continue;\n }\n\n if (Schema.is(type)) {\n assertInstanceType(value, type as typeof Schema, ref as Schema, field);\n\n //\n // Encode refId for this instance.\n // The actual instance is going to be encoded on next `changeTree` iteration.\n //\n encode.number(bytes, value.$changes.refId);\n\n // Try to encode inherited TYPE_ID if it's an ADD operation.\n if ((operation.op & OPERATION.ADD) === OPERATION.ADD) {\n this.tryEncodeTypeId(bytes, type as typeof Schema, value.constructor as typeof Schema);\n }\n\n } else if (typeof(type) === \"string\") {\n //\n // Primitive values\n //\n encodePrimitiveType(type as PrimitiveType, bytes, value, ref as Schema, field);\n\n } else {\n //\n // Custom type (MapSchema, ArraySchema, etc)\n //\n const definition = getType(Object.keys(type)[0]);\n\n //\n // ensure a ArraySchema has been provided\n //\n assertInstanceType(ref[`_${field}`], definition.constructor, ref as Schema, field);\n\n //\n // Encode refId for this instance.\n // The actual instance is going to be encoded on next `changeTree` iteration.\n //\n encode.number(bytes, value.$changes.refId);\n }\n\n if (useFilters) {\n // cache begin / end index\n changeTree.cache(fieldIndex as number, bytes.slice(beginIndex));\n }\n }\n\n if (!encodeAll && !useFilters) {\n changeTree.discard();\n }\n }\n\n return bytes;\n }\n\n encodeAll (useFilters?: boolean) {\n return this.encode(true, [], useFilters);\n }\n\n applyFilters(client: ClientWithSessionId, encodeAll: boolean = false) {\n const root = this;\n const refIdsDissallowed = new Set<number>();\n\n const $filterState = ClientState.get(client);\n\n const changeTrees = [this.$changes];\n let numChangeTrees = 1;\n\n let filteredBytes: number[] = [];\n\n for (let i = 0; i < numChangeTrees; i++) {\n const changeTree = changeTrees[i];\n\n if (refIdsDissallowed.has(changeTree.refId)) {\n // console.log(\"REFID IS NOT ALLOWED. SKIP.\", { refId: changeTree.refId })\n continue;\n }\n\n const ref = changeTree.ref as Ref;\n const isSchema: boolean = ref instanceof Schema;\n\n encode.uint8(filteredBytes, SWITCH_TO_STRUCTURE);\n encode.number(filteredBytes, changeTree.refId);\n\n const clientHasRefId = $filterState.refIds.has(changeTree);\n const isEncodeAll = (encodeAll || !clientHasRefId);\n\n // console.log(\"REF:\", ref.constructor.name);\n // console.log(\"Encode all?\", isEncodeAll);\n\n //\n // include `changeTree` on list of known refIds by this client.\n //\n $filterState.addRefId(changeTree);\n\n const containerIndexes = $filterState.containerIndexes.get(changeTree)\n const changes = (isEncodeAll)\n ? Array.from(changeTree.allChanges)\n : Array.from(changeTree.changes.values());\n\n //\n // WORKAROUND: tries to re-evaluate previously not included @filter() attributes\n // - see \"DELETE a field of Schema\" test case.\n //\n if (\n !encodeAll &&\n isSchema &&\n (ref as Schema)._definition.indexesWithFilters\n ) {\n const indexesWithFilters = (ref as Schema)._definition.indexesWithFilters;\n indexesWithFilters.forEach(indexWithFilter => {\n if (\n !containerIndexes.has(indexWithFilter) &&\n changeTree.allChanges.has(indexWithFilter)\n ) {\n if (isEncodeAll) {\n changes.push(indexWithFilter as any);\n\n } else {\n changes.push({ op: OPERATION.ADD, index: indexWithFilter, } as any);\n }\n }\n });\n }\n\n for (let j = 0, cl = changes.length; j < cl; j++) {\n const change: ChangeOperation = (isEncodeAll)\n ? { op: OPERATION.ADD, index: changes[j] as number }\n : changes[j] as ChangeOperation;\n\n // custom operations\n if (change.op === OPERATION.CLEAR) {\n encode.uint8(filteredBytes, change.op);\n continue;\n }\n\n const fieldIndex = change.index;\n\n //\n // Deleting fields: encode the operation + field index\n //\n if (change.op === OPERATION.DELETE) {\n //\n // DELETE operations also need to go through filtering.\n //\n // TODO: cache the previous value so we can access the value (primitive or `refId`)\n // (check against `$filterState.refIds`)\n //\n\n if (isSchema) {\n encode.uint8(filteredBytes, change.op | fieldIndex);\n\n } else {\n encode.uint8(filteredBytes, change.op);\n encode.number(filteredBytes, fieldIndex);\n\n }\n continue;\n }\n\n // indexed operation\n const value = changeTree.getValue(fieldIndex);\n const type = changeTree.getType(fieldIndex);\n\n if (isSchema) {\n // Is a Schema!\n const filter = (\n (ref as Schema)._definition.filters &&\n (ref as Schema)._definition.filters[fieldIndex]\n );\n\n if (filter && !filter.call(ref, client, value, root)) {\n if (value && value['$changes']) {\n refIdsDissallowed.add(value['$changes'].refId);;\n }\n continue;\n }\n\n } else {\n // Is a collection! (map, array, etc.)\n const parent = changeTree.parent as Ref;\n const filter = changeTree.getChildrenFilter();\n\n if (filter && !filter.call(parent, client, ref['$indexes'].get(fieldIndex), value, root)) {\n if (value && value['$changes']) {\n refIdsDissallowed.add(value['$changes'].refId);\n }\n continue;\n }\n }\n\n // visit child ChangeTree on further iteration.\n if (value['$changes']) {\n changeTrees.push(value['$changes']);\n numChangeTrees++;\n }\n\n //\n // Copy cached bytes\n //\n if (change.op !== OPERATION.TOUCH) {\n\n //\n // TODO: refactor me!\n //\n\n if (change.op === OPERATION.ADD || isSchema) {\n //\n // use cached bytes directly if is from Schema type.\n //\n filteredBytes.push.apply(filteredBytes, changeTree.caches[fieldIndex] ?? []);\n containerIndexes.add(fieldIndex);\n\n } else {\n if (containerIndexes.has(fieldIndex)) {\n //\n // use cached bytes if already has the field\n //\n filteredBytes.push.apply(filteredBytes, changeTree.caches[fieldIndex] ?? []);\n\n } else {\n //\n // force ADD operation if field is not known by this client.\n //\n containerIndexes.add(fieldIndex);\n\n encode.uint8(filteredBytes, OPERATION.ADD);\n encode.number(filteredBytes, fieldIndex);\n\n if (ref instanceof MapSchema) {\n //\n // MapSchema dynamic key\n //\n const dynamicIndex = changeTree.ref['$indexes'].get(fieldIndex);\n encode.string(filteredBytes, dynamicIndex);\n }\n\n if (value['$changes']) {\n encode.number(filteredBytes, value['$changes'].refId);\n\n } else {\n // \"encodePrimitiveType\" without type checking.\n // the type checking has been done on the first .encode() call.\n encode[type as string](filteredBytes, value);\n }\n }\n }\n\n } else if (value['$changes'] && !isSchema) {\n //\n // TODO:\n // - track ADD/REPLACE/DELETE instances on `$filterState`\n // - do NOT always encode dynamicIndex for MapSchema.\n // (If client already has that key, only the first index is necessary.)\n //\n\n encode.uint8(filteredBytes, OPERATION.ADD);\n encode.number(filteredBytes, fieldIndex);\n\n if (ref instanceof MapSchema) {\n //\n // MapSchema dynamic key\n //\n const dynamicIndex = changeTree.ref['$indexes'].get(fieldIndex);\n encode.string(filteredBytes, dynamicIndex);\n }\n\n encode.number(filteredBytes, value['$changes'].refId);\n }\n\n };\n }\n\n return filteredBytes;\n }\n\n clone (): this {\n const cloned = new ((this as any).constructor);\n const schema = this._definition.schema;\n for (let field in schema) {\n if (\n typeof (this[field]) === \"object\" &&\n typeof (this[field].clone) === \"function\"\n ) {\n // deep clone\n cloned[field] = this[field].clone();\n\n } else {\n // primitive values\n cloned[field] = this[field];\n }\n }\n return cloned;\n }\n\n triggerAll() {\n // skip if haven't received any remote refs yet.\n if (this.$changes.root.refs.size === 0) { return; }\n\n const allChanges = new Map<number, DataChange[]>();\n Schema.prototype._triggerAllFillChanges.call(this, this, allChanges);\n\n try {\n Schema.prototype._triggerChanges.call(this, allChanges);\n\n } catch (e) {\n Schema.onError(e);\n }\n }\n\n toJSON () {\n const schema = this._definition.schema;\n const deprecated = this._definition.deprecated;\n\n const obj = {}\n for (let field in schema) {\n if (!deprecated[field] && this[field] !== null && typeof (this[field]) !== \"undefined\") {\n obj[field] = (typeof (this[field]['toJSON']) === \"function\")\n ? this[field]['toJSON']()\n : this[`_${field}`];\n }\n }\n return obj;\n }\n\n discardAllChanges() {\n this.$changes.discardAll();\n }\n\n protected getByIndex(index: number) {\n return this[this._definition.fieldsByIndex[index]];\n }\n\n protected deleteByIndex(index: number) {\n this[this._definition.fieldsByIndex[index]] = undefined;\n }\n\n private tryEncodeTypeId (bytes: number[], type: typeof Schema, targetType: typeof Schema) {\n if (type._typeid !== targetType._typeid) {\n encode.uint8(bytes, TYPE_ID);\n encode.number(bytes, targetType._typeid);\n }\n }\n\n private getSchemaType(bytes: number[], it: Iterator, defaultType: typeof Schema): typeof Schema {\n let type: typeof Schema;\n\n if (bytes[it.offset] === TYPE_ID) {\n it.offset++;\n type = (this.constructor as typeof Schema)._context.get(decode.number(bytes, it));\n }\n\n return type || defaultType;\n }\n\n private createTypeInstance (type: typeof Schema): Schema {\n let instance: Schema = new (type as any)();\n\n // assign root on $changes\n instance.$changes.root = this.$changes.root;\n\n return instance;\n }\n\n private _triggerAllFillChanges(ref: Ref, allChanges: Map<number, DataChange[]>) {\n if (allChanges.has(ref['$changes'].refId)) { return; }\n\n const changes: DataChange[] = [];\n allChanges.set(ref['$changes'].refId || 0, changes);\n\n if (ref instanceof Schema) {\n const schema = ref._definition.schema;\n\n for (let fieldName in schema) {\n const _field = `_${fieldName}`;\n const value = ref[_field];\n\n if (value !== undefined) {\n changes.push({\n op: OPERATION.ADD,\n field: fieldName,\n value,\n previousValue: undefined\n });\n\n if (value['$changes'] !== undefined) {\n Schema.prototype._triggerAllFillChanges.call(this, value, allChanges);\n }\n\n }\n }\n\n } else {\n const entries: IterableIterator<[any, any]> = ref.entries();\n let iter: IteratorResult<[any, any]>;\n\n while ((iter = entries.next()) && !iter.done) {\n const [key, value] = iter.value;\n\n changes.push({\n op: OPERATION.ADD,\n field: key,\n dynamicIndex: key,\n value: value,\n previousValue: undefined,\n });\n\n if (value['$changes'] !== undefined) {\n Schema.prototype._triggerAllFillChanges.call(this, value, allChanges);\n }\n }\n }\n }\n\n private _triggerChanges(allChanges: Map<number, DataChange[]>) {\n allChanges.forEach((changes, refId) => {\n if (changes.length > 0) {\n const ref = this.$changes.root.refs.get(refId);\n const isSchema = ref instanceof Schema;\n\n for (let i = 0; i < changes.length; i++) {\n const change = changes[i];\n const listener = ref['$listeners'] && ref['$listeners'][change.field];\n\n if (!isSchema) {\n if (change.op === OPERATION.ADD && change.previousValue === undefined) {\n (ref as SchemaDecoderCallbacks).onAdd?.(change.value, change.dynamicIndex ?? change.field);\n\n } else if (change.op === OPERATION.DELETE) {\n //\n // FIXME: `previousValue` should always be avaiiable.\n // ADD + DELETE operations are still encoding DELETE operation.\n //\n if (change.previousValue !== undefined) {\n (ref as SchemaDecoderCallbacks).onRemove?.(change.previousValue, change.dynamicIndex ?? change.field);\n }\n\n } else if (change.op === OPERATION.DELETE_AND_ADD) {\n if (change.previousValue !== undefined) {\n (ref as SchemaDecoderCallbacks).onRemove?.(change.previousValue, change.dynamicIndex);\n }\n (ref as SchemaDecoderCallbacks).onAdd?.(change.value, change.dynamicIndex);\n\n } else if (\n change.op === OPERATION.REPLACE ||\n change.value !== change.previousValue\n ) {\n (ref as SchemaDecoderCallbacks).onChange?.(change.value, change.dynamicIndex);\n }\n }\n\n //\n // trigger onRemove on child structure.\n //\n if (\n (change.op & OPERATION.DELETE) === OPERATION.DELETE &&\n change.previousValue instanceof Schema &&\n change.previousValue.onRemove\n ) {\n change.previousValue.onRemove();\n }\n\n if (listener) {\n try {\n listener.invoke(change.value, change.previousValue);\n } catch (e) {\n Schema.onError(e);\n }\n }\n }\n\n if (isSchema) {\n if (ref.onChange) {\n try {\n (ref as Schema).onChange(changes);\n } catch (e) {\n Schema.onError(e);\n }\n }\n }\n\n }\n\n });\n }\n}\n","import { Schema } from \"./\";\nimport { ChangeTree } from \"./changes/ChangeTree\";\n\nexport function dumpChanges(schema: Schema) {\n const changeTrees: ChangeTree[] = [schema['$changes']];\n let numChangeTrees = 1;\n\n const dump = {};\n let currentStructure = dump;\n\n for (let i = 0; i < numChangeTrees; i++) {\n const changeTree = changeTrees[i];\n\n changeTree.changes.forEach((change) => {\n const ref = changeTree.ref;\n const fieldIndex = change.index;\n\n const field = ((ref as Schema)['_definition'])\n ? ref['_definition'].fieldsByIndex[fieldIndex]\n : ref['$indexes'].get(fieldIndex);\n\n currentStructure[field] = changeTree.getValue(fieldIndex);\n });\n\n }\n\n return dump;\n}","import { type, PrimitiveType, Context, DefinitionType } from \"./annotations\";\nimport { Schema } from \"./Schema\";\nimport { ArraySchema } from \"./types/ArraySchema\";\nimport { getType } from \"./types\";\nimport { Iterator } from \"./encoding/decode\";\n\nconst reflectionContext = new Context();\n\n/**\n * Reflection\n */\nexport class ReflectionField extends Schema {\n @type(\"string\", reflectionContext)\n name: string;\n\n @type(\"string\", reflectionContext)\n type: string;\n\n @type(\"number\", reflectionContext)\n referencedType: number;\n}\n\nexport class ReflectionType extends Schema {\n @type(\"number\", reflectionContext)\n id: number;\n\n @type([ ReflectionField ], reflectionContext)\n fields: ArraySchema<ReflectionField> = new ArraySchema<ReflectionField>();\n}\n\nexport class Reflection extends Schema {\n @type([ ReflectionType ], reflectionContext)\n types: ArraySchema<ReflectionType> = new ArraySchema<ReflectionType>();\n\n @type(\"number\", reflectionContext)\n rootType: number;\n\n static encode (instance: Schema) {\n const rootSchemaType = instance.constructor as typeof Schema;\n\n const reflection = new Reflection();\n reflection.rootType = rootSchemaType._typeid;\n\n const buildType = (currentType: ReflectionType, schema: any) => {\n for (let fieldName in schema) {\n const field = new ReflectionField();\n field.name = fieldName;\n\n let fieldType: string;\n\n if (typeof (schema[fieldName]) === \"string\") {\n fieldType = schema[fieldName];\n\n } else {\n const type = schema[fieldName];\n let childTypeSchema: typeof Schema;\n\n //\n // TODO: refactor below.\n //\n if (Schema.is(type)) {\n fieldType = \"ref\";\n childTypeSchema = schema[fieldName];\n\n } else {\n fieldType = Object.keys(type)[0];\n\n if (typeof(type[fieldType]) === \"string\") {\n fieldType += \":\" + type[fieldType]; // array:string\n\n } else {\n childTypeSchema = type[fieldType];\n }\n }\n\n field.referencedType = (childTypeSchema)\n ? childTypeSchema._typeid\n : -1;\n }\n\n field.type = fieldType;\n currentType.fields.push(field);\n }\n\n reflection.types.push(currentType);\n }\n\n const types = rootSchemaType._context.types;\n for (let typeid in types) {\n const type = new ReflectionType();\n type.id = Number(typeid);\n buildType(type, types[typeid]._definition.schema);\n }\n\n return reflection.encodeAll();\n }\n\n static decode<T extends Schema = Schema>(bytes: number[], it?: Iterator): T {\n const context = new Context();\n\n const reflection = new Reflection();\n reflection.decode(bytes, it);\n\n const schemaTypes = reflection.types.reduce((types, reflectionType) => {\n const schema: typeof Schema = class _ extends Schema {};\n const typeid = reflectionType.id;\n types[typeid] = schema\n context.add(schema, typeid);\n return types;\n }, {});\n\n reflection.types.forEach((reflectionType) => {\n const schemaType = schemaTypes[reflectionType.id];\n\n reflectionType.fields.forEach(field => {\n if (field.referencedType !== undefined) {\n let fieldType = field.type;\n let refType = schemaTypes[field.referencedType];\n\n // map or array of primitive type (-1)\n if (!refType) {\n const typeInfo = field.type.split(\":\");\n fieldType = typeInfo[0];\n refType = typeInfo[1];\n }\n\n if (fieldType === \"ref\") {\n type(refType, context)(schemaType.prototype, field.name);\n\n } else {\n type({ [fieldType]: refType } as DefinitionType, context)(schemaType.prototype, field.name);\n }\n\n } else {\n type(field.type as PrimitiveType, context)(schemaType.prototype, field.name);\n }\n });\n })\n\n const rootType: any = schemaTypes[reflection.rootType];\n const rootInstance = new rootType();\n\n /**\n * auto-initialize referenced types on root type\n * to allow registering listeners immediatelly on client-side\n */\n for (let fieldName in rootType._definition.schema) {\n const fieldType = rootType._definition.schema[fieldName];\n\n if (typeof(fieldType) !== \"string\") {\n rootInstance[fieldName] = (typeof (fieldType) === \"function\")\n ? new (fieldType as any)() // is a schema reference\n : new (getType(Object.keys(fieldType)[0])).constructor(); // is a \"collection\"\n }\n }\n\n return rootInstance;\n }\n}","export { Schema, DataChange } from \"./Schema\";\n\nimport { MapSchema, getMapProxy } from \"./types/MapSchema\"\nexport { MapSchema };\n\nimport { ArraySchema, getArrayProxy } from \"./types/ArraySchema\";\nexport { ArraySchema };\n\nimport { CollectionSchema } from \"./types/CollectionSchema\";\nexport { CollectionSchema };\n\nimport { SetSchema } from \"./types/SetSchema\";\nexport { SetSchema };\n\nimport { registerType } from \"./types\";\nexport { registerType };\n\nregisterType(\"map\", { constructor: MapSchema, getProxy: getMapProxy });\nregisterType(\"array\", { constructor: ArraySchema, getProxy: getArrayProxy });\nregisterType(\"set\", { constructor: SetSchema });\nregisterType(\"collection\", { constructor: CollectionSchema, });\n\n// Utils\nexport { dumpChanges } from \"./utils\";\n\n// Encoder / Decoder\nexport { Iterator } from \"./encoding/decode\";\nimport * as encode from \"./encoding/encode\";\nimport * as decode from \"./encoding/decode\";\nexport { encode, decode };\n\n// Reflection\nexport {\n Reflection,\n ReflectionType,\n ReflectionField,\n} from \"./Reflection\";\n\nexport {\n // Annotations\n type,\n deprecated,\n filter,\n filterChildren,\n defineTypes,\n hasFilter,\n\n // Internals\n SchemaDefinition,\n\n // Types\n Context,\n PrimitiveType,\n Definition,\n DefinitionType,\n FilterCallback,\n} from \"./annotations\";\n\nexport { OPERATION } from \"./spec\";"],"names":["OPERATION","int8","uint8","int16","uint16","int32","uint32","int64","uint64","float32","float64","_int32","_float32","_float64","boolean","string","number","decode.number","decode.string","decode.switchStructureCheck","encode.uint8","encode.number","encode.string"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/spec.ts","../../src/changes/ChangeTree.ts","../../src/types/ArraySchema.ts","../../src/types/MapSchema.ts","../../src/types/index.ts","../../src/annotations.ts","../../src/encoding/encode.ts","../../src/encoding/decode.ts","../../src/types/CollectionSchema.ts","../../src/types/SetSchema.ts","../../src/events/EventEmitter.ts","../../src/filters/index.ts","../../src/Schema.ts","../../src/utils.ts","../../src/Reflection.ts","../../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","// export const SWITCH_TO_STRUCTURE = 193; (easily collides with DELETE_AND_ADD + fieldIndex = 2)\nexport const SWITCH_TO_STRUCTURE = 255; // (decoding collides with DELETE_AND_ADD + fieldIndex = 63)\nexport const TYPE_ID = 213;\n\n/**\n * Encoding Schema field operations.\n */\nexport enum OPERATION {\n // add new structure/primitive\n ADD = 128,\n\n // replace structure/primitive\n REPLACE = 0,\n\n // delete field\n DELETE = 64,\n\n // DELETE field, followed by an ADD\n DELETE_AND_ADD = 192, // 11100000\n\n // TOUCH is used to determine hierarchy of nested Schema structures during serialization.\n // touches are NOT encoded.\n TOUCH = 1, // 00000000\n\n // MapSchema Operations\n CLEAR = 10,\n}\n\n// export enum OPERATION {\n// // add new structure/primitive\n// // (128)\n// ADD = 128, // 10000000,\n\n// // replace structure/primitive\n// REPLACE = 1,// 00000001\n\n// // delete field\n// DELETE = 192, // 11000000\n\n// // DELETE field, followed by an ADD\n// DELETE_AND_ADD = 224, // 11100000\n\n// // TOUCH is used to determine hierarchy of nested Schema structures during serialization.\n// // touches are NOT encoded.\n// TOUCH = 0, // 00000000\n\n// // MapSchema Operations\n// CLEAR = 10,\n// }","import { OPERATION } from \"../spec\";\nimport { Schema } from \"../Schema\";\nimport { SchemaDefinition, FilterChildrenCallback } from \"../annotations\";\n\nimport { MapSchema } from \"../types/MapSchema\";\nimport { ArraySchema } from \"../types/ArraySchema\";\nimport { CollectionSchema } from \"../types/CollectionSchema\";\nimport { SetSchema } from \"../types/SetSchema\";\n\nexport type Ref = Schema\n | ArraySchema\n | MapSchema\n | CollectionSchema\n | SetSchema;\n\nexport interface ChangeOperation {\n op: OPERATION,\n index: number,\n}\n\n//\n// FieldCache is used for @filter()\n//\nexport interface FieldCache {\n beginIndex: number;\n endIndex: number;\n}\n\n\n//\n// Root holds all schema references by unique id\n//\nexport class Root {\n //\n // Relation of refId => Schema structure\n // For direct access of structures during decoding time.\n //\n public refs = new Map<number, Ref>();\n public refCounts: {[refId: number]: number} = {};\n public deletedRefs = new Set<number>();\n\n protected nextUniqueId: number = 0;\n\n getNextUniqueId() {\n return this.nextUniqueId++;\n }\n\n // for decoding\n addRef(refId: number, ref: Ref, incrementCount: boolean = true) {\n this.refs.set(refId, ref);\n\n if (incrementCount) {\n this.refCounts[refId] = (this.refCounts[refId] || 0) + 1;\n }\n }\n\n // for decoding\n removeRef(refId) {\n this.refCounts[refId] = this.refCounts[refId] - 1;\n this.deletedRefs.add(refId);\n }\n\n clearRefs() {\n this.refs.clear();\n this.deletedRefs.clear();\n this.refCounts = {};\n }\n\n // for decoding\n garbageCollectDeletedRefs() {\n this.deletedRefs.forEach((refId) => {\n if (this.refCounts[refId] <= 0) {\n const ref = this.refs.get(refId);\n\n //\n // Ensure child schema instances have their references removed as well.\n //\n if (ref instanceof Schema) {\n for (const fieldName in ref['_definition'].schema) {\n if (\n typeof (ref['_definition'].schema[fieldName]) !== \"string\" &&\n ref[fieldName] &&\n ref[fieldName]['$changes']\n ) {\n this.removeRef(ref[fieldName]['$changes'].refId);\n }\n }\n\n } else {\n const definition: SchemaDefinition = ref['$changes'].parent._definition;\n const type = definition.schema[definition.fieldsByIndex[ref['$changes'].parentIndex]];\n\n if (typeof (Object.values(type)[0]) === \"function\") {\n Array.from(ref.values())\n .forEach((child) => this.removeRef(child['$changes'].refId));\n }\n }\n\n this.refs.delete(refId);\n delete this.refCounts[refId];\n }\n });\n\n // clear deleted refs.\n this.deletedRefs.clear();\n }\n}\n\nexport class ChangeTree {\n ref: Ref;\n refId: number;\n\n root?: Root;\n\n parent?: Ref;\n parentIndex?: number;\n\n indexes: {[index: string]: any};\n\n changed: boolean = false;\n changes = new Map<number, ChangeOperation>();\n allChanges = new Set<number>();\n\n // cached indexes for filtering\n caches: {[field: number]: number[]} = {};\n\n currentCustomOperation: number = 0;\n\n constructor(ref: Ref, parent?: Ref, root?: Root) {\n this.ref = ref;\n this.setParent(parent, root);\n }\n\n setParent(\n parent: Ref,\n root?: Root,\n parentIndex?: number,\n ) {\n if (!this.indexes) {\n this.indexes = (this.ref instanceof Schema)\n ? this.ref['_definition'].indexes\n : {};\n }\n\n this.parent = parent;\n this.parentIndex = parentIndex;\n\n // avoid setting parents with empty `root`\n if (!root) { return; }\n this.root = root;\n\n //\n // assign same parent on child structures\n //\n if (this.ref instanceof Schema) {\n const definition: SchemaDefinition = this.ref['_definition'];\n\n for (let field in definition.schema) {\n const value = this.ref[field];\n\n if (value && value['$changes']) {\n const parentIndex = definition.indexes[field];\n\n (value['$changes'] as ChangeTree).setParent(\n this.ref,\n root,\n parentIndex,\n );\n }\n }\n\n } else if (typeof (this.ref) === \"object\") {\n this.ref.forEach((value, key) => {\n if (value instanceof Schema) {\n const changeTreee = value['$changes'];\n const parentIndex = this.ref['$changes'].indexes[key];\n\n changeTreee.setParent(\n this.ref,\n this.root,\n parentIndex,\n );\n }\n });\n }\n }\n\n operation(op: ChangeOperation) {\n this.changes.set(--this.currentCustomOperation, op);\n }\n\n change(fieldName: string | number, operation: OPERATION = OPERATION.ADD) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n this.assertValidIndex(index, fieldName);\n\n const previousChange = this.changes.get(index);\n\n if (\n !previousChange ||\n previousChange.op === OPERATION.DELETE ||\n previousChange.op === OPERATION.TOUCH // (mazmorra.io's BattleAction issue)\n ) {\n this.changes.set(index, {\n op: (!previousChange)\n ? operation\n : (previousChange.op === OPERATION.DELETE)\n ? OPERATION.DELETE_AND_ADD\n : operation,\n // : OPERATION.REPLACE,\n index\n });\n }\n\n this.allChanges.add(index);\n\n this.changed = true;\n this.touchParents();\n }\n\n touch(fieldName: string | number) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n this.assertValidIndex(index, fieldName);\n\n if (!this.changes.has(index)) {\n this.changes.set(index, { op: OPERATION.TOUCH, index });\n }\n\n this.allChanges.add(index);\n\n // ensure touch is placed until the $root is found.\n this.touchParents();\n }\n\n touchParents() {\n if (this.parent) {\n (this.parent['$changes'] as ChangeTree).touch(this.parentIndex);\n }\n }\n\n getType(index?: number) {\n if (this.ref['_definition']) {\n const definition = (this.ref as Schema)['_definition'];\n return definition.schema[ definition.fieldsByIndex[index] ];\n\n } else {\n const definition = (this.parent as Schema)['_definition'];\n const parentType = definition.schema[ definition.fieldsByIndex[this.parentIndex] ];\n\n //\n // Get the child type from parent structure.\n // - [\"string\"] => \"string\"\n // - { map: \"string\" } => \"string\"\n // - { set: \"string\" } => \"string\"\n //\n return Object.values(parentType)[0];\n }\n }\n\n getChildrenFilter(): FilterChildrenCallback {\n const childFilters = (this.parent as Schema)['_definition'].childFilters;\n return childFilters && childFilters[this.parentIndex];\n }\n\n //\n // used during `.encode()`\n //\n getValue(index: number) {\n return this.ref['getByIndex'](index);\n }\n\n delete(fieldName: string | number) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n if (index === undefined) {\n console.warn(`@colyseus/schema ${this.ref.constructor.name}: trying to delete non-existing index: ${fieldName} (${index})`);\n return;\n }\n\n const previousValue = this.getValue(index);\n // console.log(\"$changes.delete =>\", { fieldName, index, previousValue });\n\n this.changes.set(index, { op: OPERATION.DELETE, index });\n\n this.allChanges.delete(index);\n\n // delete cache\n delete this.caches[index];\n\n // remove `root` reference\n if (previousValue && previousValue['$changes']) {\n previousValue['$changes'].parent = undefined;\n }\n\n this.changed = true;\n this.touchParents();\n }\n\n discard(changed: boolean = false, discardAll: boolean = false) {\n //\n // Map, Array, etc:\n // Remove cached key to ensure ADD operations is unsed instead of\n // REPLACE in case same key is used on next patches.\n //\n // TODO: refactor this. this is not relevant for Collection and Set.\n //\n if (!(this.ref instanceof Schema)) {\n this.changes.forEach((change) => {\n if (change.op === OPERATION.DELETE) {\n const index = this.ref['getIndex'](change.index)\n delete this.indexes[index];\n }\n });\n }\n\n this.changes.clear();\n this.changed = changed;\n\n if (discardAll) {\n this.allChanges.clear();\n }\n\n // re-set `currentCustomOperation`\n this.currentCustomOperation = 0;\n }\n\n /**\n * Recursively discard all changes from this, and child structures.\n */\n discardAll() {\n this.changes.forEach((change) => {\n const value = this.getValue(change.index);\n\n if (value && value['$changes']) {\n value['$changes'].discardAll();\n }\n });\n\n this.discard();\n }\n\n // cache(field: number, beginIndex: number, endIndex: number) {\n cache(field: number, cachedBytes: number[]) {\n this.caches[field] = cachedBytes;\n }\n\n clone() {\n return new ChangeTree(this.ref, this.parent, this.root);\n }\n\n ensureRefId() {\n // skip if refId is already set.\n if (this.refId !== undefined) {\n return;\n }\n\n this.refId = this.root.getNextUniqueId();\n }\n\n protected assertValidIndex(index: number, fieldName: string | number) {\n if (index === undefined) {\n throw new Error(`ChangeTree: missing index for field \"${fieldName}\"`);\n }\n }\n\n}\n","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\n\n//\n// Notes:\n// -----\n//\n// - The tsconfig.json of @colyseus/schema uses ES2018.\n// - ES2019 introduces `flatMap` / `flat`, which is not currently relevant, and caused other issues.\n//\n\nconst DEFAULT_SORT = (a: any, b: any) => {\n const A = a.toString();\n const B = b.toString();\n if (A < B) return -1;\n else if (A > B) return 1;\n else return 0\n}\n\nexport function getArrayProxy(value: ArraySchema) {\n value['$proxy'] = true;\n\n //\n // compatibility with @colyseus/schema 0.5.x\n // - allow `map[\"key\"]`\n // - allow `map[\"key\"] = \"xxx\"`\n // - allow `delete map[\"key\"]`\n //\n value = new Proxy(value, {\n get: (obj, prop) => {\n if (\n typeof (prop) !== \"symbol\" &&\n !isNaN(prop as any) // https://stackoverflow.com/a/175787/892698\n ) {\n return obj.at(prop as unknown as number);\n\n } else {\n return obj[prop];\n }\n },\n\n set: (obj, prop, setValue) => {\n if (\n typeof (prop) !== \"symbol\" &&\n !isNaN(prop as any)\n ) {\n const indexes = Array.from(obj['$items'].keys());\n const key = parseInt(indexes[prop] || prop);\n if (setValue === undefined || setValue === null) {\n obj.deleteAt(key);\n\n } else {\n obj.setAt(key, setValue);\n }\n\n } else {\n obj[prop] = setValue;\n }\n\n return true;\n },\n\n deleteProperty: (obj, prop) => {\n if (typeof (prop) === \"number\") {\n obj.deleteAt(prop);\n\n } else {\n delete obj[prop];\n }\n\n return true;\n },\n });\n\n return value;\n}\n\nexport class ArraySchema<V=any> implements Array<V>, 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: number]: V;\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 (\n // type format: [\"string\"]\n Array.isArray(type) || \n\n // type format: { array: \"string\" }\n (type['array'] !== undefined)\n );\n }\n\n constructor (...items: V[]) {\n this.push.apply(this, items);\n }\n\n set length (value: number) {\n if (value === 0) {\n this.clear();\n\n } else {\n this.splice(value, this.length - value);\n }\n }\n\n get length() {\n return this.$items.size;\n }\n\n push(...values: V[]) {\n let lastIndex: number;\n\n values.forEach(value => {\n // set \"index\" for reference.\n lastIndex = this.$refId++;\n\n this.setAt(lastIndex, value);\n });\n\n return lastIndex;\n }\n\n /**\n * Removes the last element from an array and returns it.\n */\n pop(): V | undefined {\n const key = Array.from(this.$indexes.values()).pop();\n if (key === undefined) { return undefined; }\n\n this.$changes.delete(key);\n this.$indexes.delete(key);\n\n const value = this.$items.get(key);\n this.$items.delete(key);\n\n return value;\n }\n\n at(index: number) {\n //\n // FIXME: this should be O(1)\n //\n const key = Array.from(this.$items.keys())[index];\n return this.$items.get(key);\n }\n\n setAt(index: number, value: V) {\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 }\n\n deleteAt(index: number) {\n const key = Array.from(this.$items.keys())[index];\n if (key === undefined) { return false; }\n return this.$deleteAt(key);\n }\n\n protected $deleteAt(index) {\n // delete at internal index\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 /**\n * Combines two or more arrays.\n * @param items Additional items to add to the end of array1.\n */\n concat(...items: (V | ConcatArray<V>)[]): ArraySchema<V> {\n return new ArraySchema(...Array.from(this.$items.values()).concat(...items));\n }\n\n /**\n * Adds all the elements of an array separated by the specified separator string.\n * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.\n */\n join(separator?: string): string {\n return Array.from(this.$items.values()).join(separator);\n }\n\n /**\n * Reverses the elements in an Array.\n */\n reverse(): ArraySchema<V> {\n const indexes = Array.from(this.$items.keys());\n const reversedItems = Array.from(this.$items.values()).reverse();\n\n reversedItems.forEach((item, i) => {\n this.setAt(indexes[i], item);\n });\n\n return this;\n }\n\n /**\n * Removes the first element from an array and returns it.\n */\n shift(): V | undefined {\n const indexes = Array.from(this.$items.keys());\n\n const shiftAt = indexes.shift();\n if (shiftAt === undefined) { return undefined; }\n\n const value = this.$items.get(shiftAt);\n this.$deleteAt(shiftAt);\n\n return value;\n }\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array.\n * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n */\n slice(start?: number, end?: number): V[] {\n return new ArraySchema(...Array.from(this.$items.values()).slice(start, end));\n }\n\n /**\n * Sorts an array.\n * @param compareFn Function used to determine the order of the elements. It is expected to return\n * a negative value if first argument is less than second argument, zero if they're equal and a positive\n * value otherwise. If omitted, the elements are sorted in ascending, ASCII character order.\n * ```ts\n * [11,2,22,1].sort((a, b) => a - b)\n * ```\n */\n sort(compareFn: (a: V, b: V) => number = DEFAULT_SORT): this {\n const indexes = Array.from(this.$items.keys());\n const sortedItems = Array.from(this.$items.values()).sort(compareFn);\n\n sortedItems.forEach((item, i) => {\n this.setAt(indexes[i], item);\n });\n\n return this;\n }\n\n /**\n * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @param items Elements to insert into the array in place of the deleted elements.\n */\n splice(\n start: number,\n deleteCount: number = this.length - start,\n ...items: V[]\n ): V[] {\n const indexes = Array.from(this.$items.keys());\n const removedItems: V[] = [];\n\n for (let i = start; i < start + deleteCount; i++) {\n removedItems.push(this.$items.get(indexes[i]));\n this.$deleteAt(indexes[i]);\n }\n\n return removedItems;\n }\n\n /**\n * Inserts new elements at the start of an array.\n * @param items Elements to insert at the start of the Array.\n */\n unshift(...items: V[]): number {\n const length = this.length;\n const addedLength = items.length;\n\n // const indexes = Array.from(this.$items.keys());\n const previousValues = Array.from(this.$items.values());\n\n items.forEach((item, i) => {\n this.setAt(i, item);\n });\n\n previousValues.forEach((previousValue, i) => {\n this.setAt(addedLength + i, previousValue);\n });\n\n return length + addedLength;\n }\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n indexOf(searchElement: V, fromIndex?: number): number {\n return Array.from(this.$items.values()).indexOf(searchElement, fromIndex);\n }\n\n /**\n * Returns the index of the last occurrence of a specified value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.\n */\n lastIndexOf(searchElement: V, fromIndex: number = this.length - 1): number {\n return Array.from(this.$items.values()).lastIndexOf(searchElement, fromIndex);\n }\n\n /**\n * Determines whether all the members of an array satisfy the specified test.\n * @param callbackfn A function that accepts up to three arguments. The every method calls\n * the callbackfn function for each element in the array until the callbackfn returns a value\n * which is coercible to the Boolean value false, or until the end of the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n * If thisArg is omitted, undefined is used as the this value.\n */\n every(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean {\n return Array.from(this.$items.values()).every(callbackfn, thisArg);\n }\n\n /**\n * Determines whether the specified callback function returns true for any element of an array.\n * @param callbackfn A function that accepts up to three arguments. The some method calls\n * the callbackfn function for each element in the array until the callbackfn returns a value\n * which is coercible to the Boolean value true, or until the end of the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n * If thisArg is omitted, undefined is used as the this value.\n */\n some(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean {\n return Array.from(this.$items.values()).some(callbackfn, thisArg);\n }\n\n /**\n * Performs the specified action for each element in an array.\n * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n forEach(callbackfn: (value: V, index: number, array: V[]) => void, thisArg?: any): void {\n Array.from(this.$items.values()).forEach(callbackfn, thisArg);\n }\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n map<U>(callbackfn: (value: V, index: number, array: V[]) => U, thisArg?: any): U[] {\n return Array.from(this.$items.values()).map(callbackfn, thisArg);\n }\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n filter(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any)\n filter<S extends V>(callbackfn: (value: V, index: number, array: V[]) => value is S, thisArg?: any): V[] {\n return Array.from(this.$items.values()).filter(callbackfn, thisArg);\n }\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n reduce<U=V>(callbackfn: (previousValue: U, currentValue: V, currentIndex: number, array: V[]) => U, initialValue?: U): U {\n return Array.from(this.$items.values()).reduce(callbackfn, initialValue);\n }\n\n /**\n * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n reduceRight<U=V>(callbackfn: (previousValue: U, currentValue: V, currentIndex: number, array: V[]) => U, initialValue?: U): U {\n return Array.from(this.$items.values()).reduceRight(callbackfn, initialValue);\n }\n\n /**\n * Returns the value of the first element in the array where predicate is true, and undefined\n * otherwise.\n * @param predicate find calls predicate once for each element of the array, in ascending\n * order, until it finds one where predicate returns true. If such an element is found, find\n * immediately returns that element value. Otherwise, find returns undefined.\n * @param thisArg If provided, it will be used as the this value for each invocation of\n * predicate. If it is not provided, undefined is used instead.\n */\n find(predicate: (value: V, index: number, obj: V[]) => boolean, thisArg?: any): V | undefined {\n return Array.from(this.$items.values()).find(predicate, thisArg);\n }\n\n /**\n * Returns the index of the first element in the array where predicate is true, and -1\n * otherwise.\n * @param predicate find calls predicate once for each element of the array, in ascending\n * order, until it finds one where predicate returns true. If such an element is found,\n * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n * @param thisArg If provided, it will be used as the this value for each invocation of\n * predicate. If it is not provided, undefined is used instead.\n */\n findIndex(predicate: (value: V, index: number, obj: V[]) => unknown, thisArg?: any): number {\n return Array.from(this.$items.values()).findIndex(predicate, thisArg);\n }\n\n /**\n * Returns the this object after filling the section identified by start and end with value\n * @param value value to fill array section with\n * @param start index to start filling the array at. If start is negative, it is treated as\n * length+start where length is the length of the array.\n * @param end index to stop filling the array at. If end is negative, it is treated as\n * length+end.\n */\n fill(value: V, start?: number, end?: number): this {\n //\n // TODO\n //\n throw new Error(\"ArraySchema#fill() not implemented\");\n // this.$items.fill(value, start, end);\n\n return this;\n }\n\n /**\n * Returns the this object after copying a section of the array identified by start and end\n * to the same array starting at position target\n * @param target If target is negative, it is treated as length+target where length is the\n * length of the array.\n * @param start If start is negative, it is treated as length+start. If end is negative, it\n * is treated as length+end.\n * @param end If not specified, length of the this object is used as its default value.\n */\n copyWithin(target: number, start: number, end?: number): this {\n //\n // TODO\n //\n throw new Error(\"ArraySchema#copyWithin() not implemented\");\n return this;\n }\n\n /**\n * Returns a string representation of an array.\n */\n toString(): string { return this.$items.toString(); }\n\n /**\n * Returns a string representation of an array. The elements are converted to string using their toLocalString methods.\n */\n toLocaleString(): string { return this.$items.toLocaleString() };\n\n /** Iterator */\n [Symbol.iterator](): IterableIterator<V> {\n return Array.from(this.$items.values())[Symbol.iterator]();\n }\n\n [Symbol.unscopables]() {\n return this.$items[Symbol.unscopables]();\n }\n\n /**\n * Returns an iterable of key, value pairs for every entry in the array\n */\n entries(): IterableIterator<[number, V]> { return this.$items.entries(); }\n\n /**\n * Returns an iterable of keys in the array\n */\n keys(): IterableIterator<number> { return this.$items.keys(); }\n\n /**\n * Returns an iterable of values in the array\n */\n values(): IterableIterator<V> { return this.$items.values(); }\n\n /**\n * Determines whether an array includes a certain element, returning true or false as appropriate.\n * @param searchElement The element to search for.\n * @param fromIndex The position in this array at which to begin searching for searchElement.\n */\n includes(searchElement: V, fromIndex?: number): boolean {\n return Array.from(this.$items.values()).includes(searchElement, fromIndex);\n }\n\n /**\n * Calls a defined callback function on each element of an array. Then, flattens the result into\n * a new array.\n * This is identical to a map followed by flat with depth 1.\n *\n * @param callback A function that accepts up to three arguments. The flatMap method calls the\n * callback function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callback function. If\n * thisArg is omitted, undefined is used as the this value.\n */\n // @ts-ignore\n flatMap<U, This = undefined>(callback: (this: This, value: V, index: number, array: V[]) => U | ReadonlyArray<U>, thisArg?: This): U[] {\n // @ts-ignore\n throw new Error(\"ArraySchema#flatMap() is not supported.\");\n }\n\n /**\n * Returns a new array with all sub-array elements concatenated into it recursively up to the\n * specified depth.\n *\n * @param depth The maximum recursion depth\n */\n // @ts-ignore\n flat<A, D extends number = 1>(this: A, depth?: D): any {\n // @ts-ignore\n throw new Error(\"ArraySchema#flat() is not supported.\");\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 return this.toArray().map((value) => {\n return (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value;\n });\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): ArraySchema<V> {\n let cloned: ArraySchema;\n\n if (isDecoding) {\n cloned = new ArraySchema(...Array.from(this.$items.values()));\n\n } else {\n cloned = new ArraySchema(...this.map(item => (\n (item['$changes'])\n ? (item as any as Schema).clone()\n : item\n )));\n }\n\n return cloned;\n };\n\n triggerAll (): void {\n Schema.prototype.triggerAll.apply(this);\n }\n}\n","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 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(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}\n","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}","import { ChangeTree } from './changes/ChangeTree';\nimport { Schema } from './Schema';\nimport { ArraySchema, getArrayProxy } from './types/ArraySchema';\nimport { MapSchema, getMapProxy } from './types/MapSchema';\nimport { getType } from './types';\n\n/**\n * Data types\n */\nexport type PrimitiveType =\n \"string\" |\n \"number\" |\n \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"float32\" |\n \"float64\" |\n typeof Schema;\n\nexport type DefinitionType = PrimitiveType\n | PrimitiveType[]\n | { array: PrimitiveType }\n | { map: PrimitiveType }\n | { collection: PrimitiveType }\n | { set: PrimitiveType };\n\nexport type Definition = { [field: string]: DefinitionType };\nexport type FilterCallback<\n T extends Schema = any,\n V = any,\n R extends Schema = any\n> = (\n ((this: T, client: ClientWithSessionId, value: V) => boolean) |\n ((this: T, client: ClientWithSessionId, value: V, root: R) => boolean)\n);\n\nexport type FilterChildrenCallback<\n T extends Schema = any,\n K = any,\n V = any,\n R extends Schema = any\n> = (\n ((this: T, client: ClientWithSessionId, key: K, value: V) => boolean) |\n ((this: T, client: ClientWithSessionId, key: K, value: V, root: R) => boolean)\n)\n\nexport class SchemaDefinition {\n schema: Definition;\n\n //\n // TODO: use a \"field\" structure combining all these properties per-field.\n //\n\n indexes: { [field: string]: number } = {};\n fieldsByIndex: { [index: number]: string } = {};\n\n filters: { [field: string]: FilterCallback };\n indexesWithFilters: number[];\n childFilters: { [field: string]: FilterChildrenCallback }; // childFilters are used on Map, Array, Set items.\n\n deprecated: { [field: string]: boolean } = {};\n descriptors: PropertyDescriptorMap & ThisType<any> = {};\n\n static create(parent?: SchemaDefinition) {\n const definition = new SchemaDefinition();\n\n // support inheritance\n definition.schema = Object.assign({}, parent && parent.schema || {});\n definition.indexes = Object.assign({}, parent && parent.indexes || {});\n definition.fieldsByIndex = Object.assign({}, parent && parent.fieldsByIndex || {});\n definition.descriptors = Object.assign({}, parent && parent.descriptors || {});\n definition.deprecated = Object.assign({}, parent && parent.deprecated || {});\n\n return definition;\n }\n\n addField(field: string, type: DefinitionType) {\n const index = this.getNextFieldIndex();\n this.fieldsByIndex[index] = field;\n this.indexes[field] = index;\n this.schema[field] = (Array.isArray(type))\n ? { array: type[0] }\n : type;\n }\n\n addFilter(field: string, cb: FilterCallback) {\n if (!this.filters) {\n this.filters = {};\n this.indexesWithFilters = [];\n }\n this.filters[this.indexes[field]] = cb;\n this.indexesWithFilters.push(this.indexes[field]);\n return true;\n }\n\n addChildrenFilter(field: string, cb: FilterChildrenCallback) {\n const index = this.indexes[field];\n const type = this.schema[field];\n\n if (getType(Object.keys(type)[0])) {\n if (!this.childFilters) { this.childFilters = {}; }\n\n this.childFilters[index] = cb;\n return true;\n\n } else {\n console.warn(`@filterChildren: field '${field}' can't have children. Ignoring filter.`);\n }\n }\n\n getChildrenFilter(field: string) {\n return this.childFilters && this.childFilters[this.indexes[field]];\n }\n\n getNextFieldIndex() {\n return Object.keys(this.schema || {}).length;\n }\n}\n\nexport function hasFilter(klass: typeof Schema) {\n return klass._context && klass._context.useFilters;\n}\n\n// Colyseus integration\nexport type ClientWithSessionId = { sessionId: string } & any;\n\nexport class Context {\n types: {[id: number]: typeof Schema} = {};\n schemas = new Map<typeof Schema, number>();\n useFilters = false;\n\n has(schema: typeof Schema) {\n return this.schemas.has(schema);\n }\n\n get(typeid: number) {\n return this.types[typeid];\n }\n\n add(schema: typeof Schema, typeid: number = this.schemas.size) {\n // FIXME: move this to somewhere else?\n // support inheritance\n schema._definition = SchemaDefinition.create(schema._definition);\n\n schema._typeid = typeid;\n this.types[typeid] = schema;\n this.schemas.set(schema, typeid);\n }\n\n static create(context: Context = new Context) {\n return function (definition: DefinitionType) {\n return type(definition, context);\n }\n }\n}\n\nexport const globalContext = new Context();\n\n/**\n * `@type()` decorator for proxies\n */\nexport function type (type: DefinitionType, context: Context = globalContext): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n if (!type) {\n throw new Error(\"Type not found. Ensure your `@type` annotations are correct and that you don't have any circular dependencies.\");\n }\n\n const constructor = target.constructor as typeof Schema;\n constructor._context = context;\n\n /*\n * static schema\n */\n if (!context.has(constructor)) {\n context.add(constructor);\n }\n\n const definition = constructor._definition;\n definition.addField(field, type);\n\n /**\n * skip if descriptor already exists for this field (`@deprecated()`)\n */\n if (definition.descriptors[field]) {\n if (definition.deprecated[field]) {\n // do not create accessors for deprecated properties.\n return;\n\n } else {\n // trying to define same property multiple times across inheritance.\n // https://github.com/colyseus/colyseus-unity3d/issues/131#issuecomment-814308572\n try {\n throw new Error(`@colyseus/schema: Duplicate '${field}' definition on '${constructor.name}'.\\nCheck @type() annotation`);\n\n } catch (e) {\n const definitionAtLine = e.stack.split(\"\\n\")[4].trim();\n throw new Error(`${e.message} ${definitionAtLine}`);\n }\n }\n }\n\n const isArray = ArraySchema.is(type);\n const isMap = !isArray && MapSchema.is(type);\n\n // TODO: refactor me.\n // Allow abstract intermediary classes with no fields to be serialized\n // (See \"should support an inheritance with a Schema type without fields\" test)\n if (typeof (type) !== \"string\" && !Schema.is(type)) {\n const childType = Object.values(type)[0];\n if (typeof (childType) !== \"string\" && !context.has(childType)) {\n context.add(childType);\n }\n }\n\n const fieldCached = `_${field}`;\n\n definition.descriptors[fieldCached] = {\n enumerable: false,\n configurable: false,\n writable: true,\n };\n\n definition.descriptors[field] = {\n get: function () {\n return this[fieldCached];\n },\n\n set: function (this: Schema, value: any) {\n /**\n * Create Proxy for array or map items\n */\n\n // skip if value is the same as cached.\n if (value === this[fieldCached]) {\n return;\n }\n\n if (\n value !== undefined &&\n value !== null\n ) {\n // automaticallty transform Array into ArraySchema\n if (isArray && !(value instanceof ArraySchema)) {\n value = new ArraySchema(...value);\n }\n\n // automaticallty transform Map into MapSchema\n if (isMap && !(value instanceof MapSchema)) {\n value = new MapSchema(value);\n }\n\n // try to turn provided structure into a Proxy\n if (value['$proxy'] === undefined) {\n if (isMap) {\n value = getMapProxy(value);\n\n } else if (isArray) {\n value = getArrayProxy(value);\n }\n }\n\n // flag the change for encoding.\n this.$changes.change(field);\n\n //\n // call setParent() recursively for this and its child\n // structures.\n //\n if (value['$changes']) {\n (value['$changes'] as ChangeTree).setParent(\n this,\n this.$changes.root,\n this._definition.indexes[field],\n );\n }\n\n } else {\n //\n // Setting a field to `null` or `undefined` will delete it.\n //\n this.$changes.delete(field);\n }\n\n this[fieldCached] = value;\n },\n\n enumerable: true,\n configurable: true\n };\n }\n}\n\n/**\n * `@filter()` decorator for defining data filters per client\n */\n\nexport function filter<T extends Schema, V, R extends Schema>(cb: FilterCallback<T, V, R>): PropertyDecorator {\n return function (target: any, field: string) {\n const constructor = target.constructor as typeof Schema;\n const definition = constructor._definition;\n\n if (definition.addFilter(field, cb)) {\n constructor._context.useFilters = true;\n }\n }\n}\n\nexport function filterChildren<T extends Schema, K, V, R extends Schema>(cb: FilterChildrenCallback<T, K, V, R>): PropertyDecorator {\n return function (target: any, field: string) {\n const constructor = target.constructor as typeof Schema;\n const definition = constructor._definition;\n if (definition.addChildrenFilter(field, cb)) {\n constructor._context.useFilters = true;\n }\n }\n}\n\n\n/**\n * `@deprecated()` flag a field as deprecated.\n * The previous `@type()` annotation should remain along with this one.\n */\n\nexport function deprecated(throws: boolean = true, context: Context = globalContext): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n const constructor = target.constructor as typeof Schema;\n const definition = constructor._definition;\n\n definition.deprecated[field] = true;\n\n if (throws) {\n definition.descriptors[field] = {\n get: function () { throw new Error(`${field} is deprecated.`); },\n set: function (this: Schema, value: any) { /* throw new Error(`${field} is deprecated.`); */ },\n enumerable: false,\n configurable: true\n };\n }\n }\n}\n\nexport function defineTypes(\n target: typeof Schema,\n fields: { [property: string]: DefinitionType },\n context: Context = target._context || globalContext\n) {\n for (let field in fields) {\n type(fields[field], context)(target.prototype, field);\n }\n return target;\n}\n","/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\n\nfunction utf8Length(str) {\n var c = 0, length = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n\nexport function utf8Write(view, offset, str) {\n var c = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n view[offset++] = c;\n }\n else if (c < 0x800) {\n view[offset++] = 0xc0 | (c >> 6);\n view[offset++] = 0x80 | (c & 0x3f);\n }\n else if (c < 0xd800 || c >= 0xe000) {\n view[offset++] = 0xe0 | (c >> 12);\n view[offset++] = 0x80 | (c >> 6 & 0x3f);\n view[offset++] = 0x80 | (c & 0x3f);\n }\n else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n view[offset++] = 0xf0 | (c >> 18);\n view[offset++] = 0x80 | (c >> 12 & 0x3f);\n view[offset++] = 0x80 | (c >> 6 & 0x3f);\n view[offset++] = 0x80 | (c & 0x3f);\n }\n }\n}\n\nexport function int8(bytes, value) {\n bytes.push(value & 255);\n};\n\nexport function uint8(bytes, value) {\n bytes.push(value & 255);\n};\n\nexport function int16(bytes, value) {\n bytes.push(value & 255);\n bytes.push((value >> 8) & 255);\n};\n\nexport function uint16(bytes, value) {\n bytes.push(value & 255);\n bytes.push((value >> 8) & 255);\n};\n\nexport function int32(bytes, value) {\n bytes.push(value & 255);\n bytes.push((value >> 8) & 255);\n bytes.push((value >> 16) & 255);\n bytes.push((value >> 24) & 255);\n};\n\nexport function uint32(bytes, value) {\n const b4 = value >> 24;\n const b3 = value >> 16;\n const b2 = value >> 8;\n const b1 = value;\n bytes.push(b1 & 255);\n bytes.push(b2 & 255);\n bytes.push(b3 & 255);\n bytes.push(b4 & 255);\n};\n\nexport function int64(bytes, value) {\n const high = Math.floor(value / Math.pow(2, 32));\n const low = value >>> 0;\n uint32(bytes, low);\n uint32(bytes, high);\n};\n\nexport function uint64(bytes, value) {\n const high = (value / Math.pow(2, 32)) >> 0;\n const low = value >>> 0;\n uint32(bytes, low);\n uint32(bytes, high);\n};\n\nexport function float32(bytes, value) {\n writeFloat32(bytes, value);\n}\n\nexport function float64(bytes, value) {\n writeFloat64(bytes, value);\n}\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _int32 = new Int32Array(2);\nconst _float32 = new Float32Array(_int32.buffer);\nconst _float64 = new Float64Array(_int32.buffer);\n\nexport function writeFloat32(bytes, value) {\n _float32[0] = value;\n int32(bytes, _int32[0]);\n};\n\nexport function writeFloat64(bytes, value) {\n _float64[0] = value;\n int32(bytes, _int32[_isLittleEndian ? 0 : 1]);\n int32(bytes, _int32[_isLittleEndian ? 1 : 0]);\n};\n\nexport function boolean(bytes, value) {\n return uint8(bytes, value ? 1 : 0);\n};\n\nexport function string(bytes, value) {\n // encode `null` strings as empty.\n if (!value) { value = \"\"; }\n\n let length = utf8Length(value);\n let size = 0;\n\n // fixstr\n if (length < 0x20) {\n bytes.push(length | 0xa0);\n size = 1;\n }\n // str 8\n else if (length < 0x100) {\n bytes.push(0xd9);\n uint8(bytes, length);\n size = 2;\n }\n // str 16\n else if (length < 0x10000) {\n bytes.push(0xda);\n uint16(bytes, length);\n size = 3;\n }\n // str 32\n else if (length < 0x100000000) {\n bytes.push(0xdb);\n uint32(bytes, length);\n size = 5;\n } else {\n throw new Error('String too long');\n }\n\n utf8Write(bytes, bytes.length, value);\n\n return size + length;\n}\n\nexport function number(bytes, value) {\n if (isNaN(value)) {\n return number(bytes, 0);\n\n } else if (!isFinite(value)) {\n return number(bytes, (value > 0) ? Number.MAX_SAFE_INTEGER : -Number.MAX_SAFE_INTEGER);\n\n } else if (value !== (value|0)) {\n bytes.push(0xcb);\n writeFloat64(bytes, value);\n return 9;\n\n // TODO: encode float 32?\n // is it possible to differentiate between float32 / float64 here?\n\n // // float 32\n // bytes.push(0xca);\n // writeFloat32(bytes, value);\n // return 5;\n }\n\n if (value >= 0) {\n // positive fixnum\n if (value < 0x80) {\n uint8(bytes, value);\n return 1;\n }\n\n // uint 8\n if (value < 0x100) {\n bytes.push(0xcc);\n uint8(bytes, value);\n return 2;\n }\n\n // uint 16\n if (value < 0x10000) {\n bytes.push(0xcd);\n uint16(bytes, value);\n return 3;\n }\n\n // uint 32\n if (value < 0x100000000) {\n bytes.push(0xce);\n uint32(bytes, value);\n return 5;\n }\n\n // uint 64\n bytes.push(0xcf);\n uint64(bytes, value);\n return 9;\n\n } else {\n\n // negative fixnum\n if (value >= -0x20) {\n bytes.push(0xe0 | (value + 0x20));\n return 1;\n }\n\n // int 8\n if (value >= -0x80) {\n bytes.push(0xd0);\n int8(bytes, value);\n return 2;\n }\n\n // int 16\n if (value >= -0x8000) {\n bytes.push(0xd1);\n int16(bytes, value);\n return 3;\n }\n\n // int 32\n if (value >= -0x80000000) {\n bytes.push(0xd2);\n int32(bytes, value);\n return 5;\n }\n\n // int 64\n bytes.push(0xd3);\n int64(bytes, value);\n return 9;\n }\n}","/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\nimport { SWITCH_TO_STRUCTURE } from \"../spec\";\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\nexport interface Iterator { offset: number; }\n\nfunction utf8Read(bytes, offset, length) {\n var string = '', chr = 0;\n for (var i = offset, end = offset + length; i < end; i++) {\n var byte = bytes[i];\n if ((byte & 0x80) === 0x00) {\n string += String.fromCharCode(byte);\n continue;\n }\n if ((byte & 0xe0) === 0xc0) {\n string += String.fromCharCode(\n ((byte & 0x1f) << 6) |\n (bytes[++i] & 0x3f)\n );\n continue;\n }\n if ((byte & 0xf0) === 0xe0) {\n string += String.fromCharCode(\n ((byte & 0x0f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0)\n );\n continue;\n }\n if ((byte & 0xf8) === 0xf0) {\n chr = ((byte & 0x07) << 18) |\n ((bytes[++i] & 0x3f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0);\n if (chr >= 0x010000) { // surrogate pair\n chr -= 0x010000;\n string += String.fromCharCode((chr >>> 10) + 0xD800, (chr & 0x3FF) + 0xDC00);\n } else {\n string += String.fromCharCode(chr);\n }\n continue;\n }\n\n console.error('Invalid byte ' + byte.toString(16));\n // (do not throw error to avoid server/client from crashing due to hack attemps)\n // throw new Error('Invalid byte ' + byte.toString(16));\n }\n return string;\n}\n\nexport function int8 (bytes: number[], it: Iterator) {\n return uint8(bytes, it) << 24 >> 24;\n};\n\nexport function uint8 (bytes: number[], it: Iterator) {\n return bytes[it.offset++];\n};\n\nexport function int16 (bytes: number[], it: Iterator) {\n return uint16(bytes, it) << 16 >> 16;\n};\n\nexport function uint16 (bytes: number[], it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8;\n};\n\nexport function int32 (bytes: number[], it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8 | bytes[it.offset++] << 16 | bytes[it.offset++] << 24;\n};\n\nexport function uint32 (bytes: number[], it: Iterator) {\n return int32(bytes, it) >>> 0;\n};\n\nexport function float32(bytes: number[], it: Iterator) {\n return readFloat32(bytes, it);\n}\n\nexport function float64(bytes: number[], it: Iterator) {\n return readFloat64(bytes, it);\n}\n\nexport function int64(bytes: number[], it: Iterator) {\n const low = uint32(bytes, it);\n const high = int32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\nexport function uint64(bytes: number[], it: Iterator) {\n const low = uint32(bytes, it);\n const high = uint32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _int32 = new Int32Array(2);\nconst _float32 = new Float32Array(_int32.buffer);\nconst _float64 = new Float64Array(_int32.buffer);\n\nexport function readFloat32 (bytes: number[], it: Iterator) {\n _int32[0] = int32(bytes, it);\n return _float32[0];\n};\n\nexport function readFloat64 (bytes: number[], it: Iterator) {\n _int32[_isLittleEndian ? 0 : 1] = int32(bytes, it);\n _int32[_isLittleEndian ? 1 : 0] = int32(bytes, it);\n return _float64[0];\n};\n\nexport function boolean (bytes: number[], it: Iterator) {\n return uint8(bytes, it) > 0;\n};\n\nexport function string (bytes, it: Iterator) {\n const prefix = bytes[it.offset++];\n let length: number;\n\n if (prefix < 0xc0) {\n // fixstr\n length = prefix & 0x1f;\n\n } else if (prefix === 0xd9) {\n length = uint8(bytes, it);\n\n } else if (prefix === 0xda) {\n length = uint16(bytes, it);\n\n } else if (prefix === 0xdb) {\n length = uint32(bytes, it);\n }\n\n const value = utf8Read(bytes, it.offset, length);\n it.offset += length;\n\n return value;\n}\n\nexport function stringCheck(bytes, it: Iterator) {\n const prefix = bytes[it.offset];\n return (\n // fixstr\n (prefix < 0xc0 && prefix > 0xa0) ||\n // str 8\n prefix === 0xd9 ||\n // str 16\n prefix === 0xda ||\n // str 32\n prefix === 0xdb\n );\n}\n\nexport function number (bytes, it: Iterator) {\n const prefix = bytes[it.offset++];\n\n if (prefix < 0x80) {\n // positive fixint\n return prefix;\n\n } else if (prefix === 0xca) {\n // float 32\n return readFloat32(bytes, it);\n\n } else if (prefix === 0xcb) {\n // float 64\n return readFloat64(bytes, it);\n\n } else if (prefix === 0xcc) {\n // uint 8\n return uint8(bytes, it);\n\n } else if (prefix === 0xcd) {\n // uint 16\n return uint16(bytes, it);\n\n } else if (prefix === 0xce) {\n // uint 32\n return uint32(bytes, it);\n\n } else if (prefix === 0xcf) {\n // uint 64\n return uint64(bytes, it);\n\n } else if (prefix === 0xd0) {\n // int 8\n return int8(bytes, it);\n\n } else if (prefix === 0xd1) {\n // int 16\n return int16(bytes, it);\n\n } else if (prefix === 0xd2) {\n // int 32\n return int32(bytes, it);\n\n } else if (prefix === 0xd3) {\n // int 64\n return int64(bytes, it);\n\n } else if (prefix > 0xdf) {\n // negative fixint\n return (0xff - prefix + 1) * -1\n }\n};\n\nexport function numberCheck (bytes, it: Iterator) {\n const prefix = bytes[it.offset];\n // positive fixint - 0x00 - 0x7f\n // float 32 - 0xca\n // float 64 - 0xcb\n // uint 8 - 0xcc\n // uint 16 - 0xcd\n // uint 32 - 0xce\n // uint 64 - 0xcf\n // int 8 - 0xd0\n // int 16 - 0xd1\n // int 32 - 0xd2\n // int 64 - 0xd3\n return (\n prefix < 0x80 ||\n (prefix >= 0xca && prefix <= 0xd3)\n );\n}\n\nexport function arrayCheck (bytes, it: Iterator) {\n return bytes[it.offset] < 0xa0;\n\n // const prefix = bytes[it.offset] ;\n\n // if (prefix < 0xa0) {\n // return prefix;\n\n // // array\n // } else if (prefix === 0xdc) {\n // it.offset += 2;\n\n // } else if (0xdd) {\n // it.offset += 4;\n // }\n\n // return prefix;\n}\n\nexport function switchStructureCheck(bytes, it: Iterator) {\n return (\n // previous byte should be `SWITCH_TO_STRUCTURE`\n bytes[it.offset - 1] === SWITCH_TO_STRUCTURE &&\n // next byte should be a number\n (bytes[it.offset] < 0x80 || (bytes[it.offset] >= 0xca && bytes[it.offset] <= 0xd3))\n );\n}","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\n\ntype K = number; // TODO: allow to specify K generic on MapSchema.\n\nexport class CollectionSchema<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['collection'] !== 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 // 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 at(index: number): V | undefined {\n const key = Array.from(this.$items.keys())[index];\n return this.$items.get(key);\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: K;\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 return Array.from(this.$items.values()).some((v) => v === value);\n }\n\n forEach(callbackfn: (value: V, key: K, collection: CollectionSchema<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): CollectionSchema<V> {\n let cloned: CollectionSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new CollectionSchema(), this);\n\n } else {\n // server-side\n cloned = new CollectionSchema();\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}\n","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 // 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(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}","/**\n * Extracted from https://www.npmjs.com/package/strong-events\n */\n\ntype ExtractFunctionParameters<T extends (...args: any[]) => any> = T extends (...args: infer P) => any ? P : never;\n\nexport class EventEmitter_<CallbackSignature extends (...args: any[]) => any> {\n handlers: Array<CallbackSignature> = [];\n\n register(cb: CallbackSignature, once: boolean = false) {\n this.handlers.push(cb);\n return this;\n }\n\n invoke(...args: ExtractFunctionParameters<CallbackSignature>) {\n this.handlers.forEach((handler) => handler(...args));\n }\n\n invokeAsync(...args: ExtractFunctionParameters<CallbackSignature>) {\n return Promise.all(this.handlers.map((handler) => handler(...args)));\n }\n\n remove (cb: CallbackSignature) {\n const index = this.handlers.indexOf(cb);\n this.handlers[index] = this.handlers[this.handlers.length - 1];\n this.handlers.pop();\n }\n\n clear() {\n this.handlers = [];\n }\n}\n","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { ClientWithSessionId } from \"../annotations\";\n\nexport class ClientState {\n refIds = new WeakSet<ChangeTree>();\n containerIndexes = new WeakMap<ChangeTree, Set<number>>();\n // containerIndexes = new Map<ChangeTree, Set<number>>();\n\n addRefId(changeTree: ChangeTree) {\n if (!this.refIds.has(changeTree)) {\n this.refIds.add(changeTree);\n this.containerIndexes.set(changeTree, new Set());\n }\n }\n\n static get(client: ClientWithSessionId) {\n if (client.$filterState === undefined) {\n client.$filterState = new ClientState();\n }\n\n return client.$filterState as ClientState;\n }\n}\n","import { SWITCH_TO_STRUCTURE, TYPE_ID, OPERATION } from './spec';\nimport { ClientWithSessionId, PrimitiveType, Context, SchemaDefinition, DefinitionType } from \"./annotations\";\n\nimport * as encode from \"./encoding/encode\";\nimport * as decode from \"./encoding/decode\";\nimport type { Iterator } from \"./encoding/decode\"; // dts-bundle-generator\n\nimport { ArraySchema } from \"./types/ArraySchema\";\nimport { MapSchema } from \"./types/MapSchema\";\nimport { CollectionSchema } from './types/CollectionSchema';\nimport { SetSchema } from './types/SetSchema';\n\nimport { ChangeTree, Root, Ref, ChangeOperation } from \"./changes/ChangeTree\";\nimport { NonFunctionPropNames } from './types/HelperTypes';\nimport { EventEmitter_ } from './events/EventEmitter';\nimport { ClientState } from './filters';\nimport { getType } from './types';\n\nexport interface DataChange<T=any> {\n op: OPERATION,\n field: string;\n dynamicIndex?: number | string;\n value: T;\n previousValue: T;\n}\n\nexport interface SchemaDecoderCallbacks {\n onAdd?: (item: any, key: any) => void;\n onRemove?: (item: any, key: any) => void;\n onChange?: (item: any, key: any) => void;\n clone(decoding?: boolean): SchemaDecoderCallbacks;\n clear(decoding?: boolean);\n decode?(byte, it: Iterator);\n}\n\nclass EncodeSchemaError extends Error {}\n\nfunction assertType(value: any, type: string, klass: Schema, field: string | number) {\n let typeofTarget: string;\n let allowNull: boolean = false;\n\n switch (type) {\n case \"number\":\n case \"int8\":\n case \"uint8\":\n case \"int16\":\n case \"uint16\":\n case \"int32\":\n case \"uint32\":\n case \"int64\":\n case \"uint64\":\n case \"float32\":\n case \"float64\":\n typeofTarget = \"number\";\n if (isNaN(value)) {\n console.log(`trying to encode \"NaN\" in ${klass.constructor.name}#${field}`);\n }\n break;\n case \"string\":\n typeofTarget = \"string\";\n allowNull = true;\n break;\n case \"boolean\":\n // boolean is always encoded as true/false based on truthiness\n return;\n }\n\n if (typeof (value) !== typeofTarget && (!allowNull || (allowNull && value !== null))) {\n let foundValue = `'${JSON.stringify(value)}'${(value && value.constructor && ` (${value.constructor.name})`) || ''}`;\n throw new EncodeSchemaError(`a '${typeofTarget}' was expected, but ${foundValue} was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nfunction assertInstanceType(\n value: Schema,\n type: typeof Schema\n | typeof ArraySchema\n | typeof MapSchema\n | typeof CollectionSchema\n | typeof SetSchema,\n klass: Schema,\n field: string | number,\n) {\n if (!(value instanceof type)) {\n throw new EncodeSchemaError(`a '${type.name}' was expected, but '${(value as any).constructor.name}' was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nfunction encodePrimitiveType(\n type: PrimitiveType,\n bytes: number[],\n value: any,\n klass: Schema,\n field: string | number,\n) {\n assertType(value, type as string, klass, field);\n\n const encodeFunc = encode[type as string];\n\n if (encodeFunc) {\n encodeFunc(bytes, value);\n\n } else {\n throw new EncodeSchemaError(`a '${type}' was expected, but ${value} was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nfunction decodePrimitiveType (type: string, bytes: number[], it: Iterator) {\n return decode[type as string](bytes, it);\n}\n\n/**\n * Schema encoder / decoder\n */\nexport abstract class Schema {\n static _typeid: number;\n static _context: Context;\n\n static _definition: SchemaDefinition = SchemaDefinition.create();\n\n static onError(e) {\n console.error(e);\n }\n\n static is(type: DefinitionType) {\n return (\n type['_definition'] &&\n type['_definition'].schema !== undefined\n );\n }\n\n protected $changes: ChangeTree;\n // protected $root: ChangeSet;\n\n // TODO: refactor. this feature needs to be ported to other languages with potentially different API\n protected $listeners: { [field: string]: EventEmitter_<(a: any, b: any) => void> };\n\n public onChange?(changes: DataChange[]);\n public onRemove?();\n\n // allow inherited classes to have a constructor\n constructor(...args: any[]) {\n // fix enumerability of fields for end-user\n Object.defineProperties(this, {\n $changes: {\n value: new ChangeTree(this, undefined, new Root()),\n enumerable: false,\n writable: true\n },\n\n $listeners: {\n value: {},\n enumerable: false,\n writable: true\n },\n });\n\n const descriptors = this._definition.descriptors;\n if (descriptors) {\n Object.defineProperties(this, descriptors);\n }\n\n //\n // Assign initial values\n //\n if (args[0]) {\n this.assign(args[0]);\n }\n }\n\n public assign(\n props: { [prop in NonFunctionPropNames<this>]?: this[prop] }\n ) {\n Object.assign(this, props);\n return this;\n }\n\n protected get _definition () { return (this.constructor as typeof Schema)._definition; }\n\n public listen <K extends NonFunctionPropNames<this>>(attr: K, callback: (value: this[K], previousValue: this[K]) => void) {\n if (!this.$listeners[attr as string]) {\n this.$listeners[attr as string] = new EventEmitter_();\n }\n this.$listeners[attr as string].register(callback);\n\n // return un-register callback.\n return () =>\n this.$listeners[attr as string].remove(callback);\n }\n\n decode(\n bytes: number[],\n it: Iterator = { offset: 0 },\n ref: Ref = this,\n allChanges: Map<number, DataChange[]> = new Map<number, DataChange[]>(),\n ) {\n const $root = this.$changes.root;\n const totalBytes = bytes.length;\n\n let refId: number = 0;\n let changes: DataChange[] = [];\n\n $root.refs.set(refId, this);\n allChanges.set(refId, changes);\n\n while (it.offset < totalBytes) {\n let byte = bytes[it.offset++];\n\n if (byte == SWITCH_TO_STRUCTURE) {\n refId = decode.number(bytes, it);\n\n const nextRef = $root.refs.get(refId) as Schema;\n\n //\n // Trying to access a reference that haven't been decoded yet.\n //\n if (!nextRef) { throw new Error(`\"refId\" not found: ${refId}`); }\n\n ref = nextRef;\n\n // create empty list of changes for this refId.\n changes = [];\n allChanges.set(refId, changes);\n\n continue;\n }\n\n const changeTree: ChangeTree = ref['$changes'];\n const isSchema = (ref['_definition'] !== undefined);\n\n const operation = (isSchema)\n ? (byte >> 6) << 6 // \"compressed\" index + operation\n : byte; // \"uncompressed\" index + operation (array/map items)\n\n if (operation === OPERATION.CLEAR) {\n //\n // TODO: refactor me!\n // The `.clear()` method is calling `$root.removeRef(refId)` for\n // each item inside this collection\n //\n (ref as SchemaDecoderCallbacks).clear(true);\n continue;\n }\n\n const fieldIndex = (isSchema)\n ? byte % (operation || 255) // if \"REPLACE\" operation (0), use 255\n : decode.number(bytes, it);\n\n const fieldName = (isSchema)\n ? (ref['_definition'].fieldsByIndex[fieldIndex])\n : \"\";\n\n let type = changeTree.getType(fieldIndex);\n let value: any;\n let previousValue: any;\n\n let dynamicIndex: number | string;\n\n if (!isSchema) {\n previousValue = ref['getByIndex'](fieldIndex);\n\n if ((operation & OPERATION.ADD) === OPERATION.ADD) { // ADD or DELETE_AND_ADD\n dynamicIndex = (ref instanceof MapSchema)\n ? decode.string(bytes, it)\n : fieldIndex;\n ref['setIndex'](fieldIndex, dynamicIndex);\n\n } else {\n // here\n dynamicIndex = ref['getIndex'](fieldIndex);\n }\n\n } else {\n previousValue = ref[`_${fieldName}`];\n }\n\n //\n // Delete operations\n //\n if ((operation & OPERATION.DELETE) === OPERATION.DELETE)\n {\n if (operation !== OPERATION.DELETE_AND_ADD) {\n ref['deleteByIndex'](fieldIndex);\n }\n\n // Flag `refId` for garbage collection.\n if (previousValue && previousValue['$changes']) {\n $root.removeRef(previousValue['$changes'].refId);\n }\n\n value = null;\n }\n\n if (fieldName === undefined) {\n console.warn(\"@colyseus/schema: definition mismatch\");\n\n //\n // keep skipping next bytes until reaches a known structure\n // by local decoder.\n //\n const nextIterator: Iterator = { offset: it.offset };\n while (it.offset < totalBytes) {\n if (decode.switchStructureCheck(bytes, it)) {\n nextIterator.offset = it.offset + 1;\n if ($root.refs.has(decode.number(bytes, nextIterator))) {\n break;\n }\n }\n\n it.offset++;\n }\n\n continue;\n\n } else if (operation === OPERATION.DELETE) {\n //\n // FIXME: refactor me.\n // Don't do anything.\n //\n\n } else if (Schema.is(type)) {\n const refId = decode.number(bytes, it);\n value = $root.refs.get(refId);\n\n if (operation !== OPERATION.REPLACE) {\n const childType = this.getSchemaType(bytes, it, type);\n\n if (!value) {\n value = this.createTypeInstance(childType);\n value.$changes.refId = refId;\n\n if (previousValue) {\n value.onChange = previousValue.onChange;\n value.onRemove = previousValue.onRemove;\n value.$listeners = previousValue.$listeners;\n\n if (\n previousValue['$changes'].refId &&\n refId !== previousValue['$changes'].refId\n ) {\n $root.removeRef(previousValue['$changes'].refId);\n }\n }\n }\n\n $root.addRef(refId, value, (value !== previousValue));\n }\n } else if (typeof(type) === \"string\") {\n //\n // primitive value (number, string, boolean, etc)\n //\n value = decodePrimitiveType(type as string, bytes, it);\n\n } else {\n const typeDef = getType(Object.keys(type)[0]);\n const refId = decode.number(bytes, it);\n\n const valueRef: SchemaDecoderCallbacks = ($root.refs.has(refId))\n ? previousValue || $root.refs.get(refId)\n : new typeDef.constructor();\n\n value = valueRef.clone(true);\n value.$changes.refId = refId;\n\n // preserve schema callbacks\n if (previousValue) {\n value.onAdd = previousValue.onAdd;\n value.onRemove = previousValue.onRemove;\n value.onChange = previousValue.onChange;\n\n if (\n previousValue['$changes'].refId &&\n refId !== previousValue['$changes'].refId\n ) {\n $root.removeRef(previousValue['$changes'].refId);\n\n //\n // Trigger onRemove if structure has been replaced.\n //\n const deletes: DataChange[] = [];\n const entries: IterableIterator<[any, any]> = previousValue.entries();\n let iter: IteratorResult<[any, any]>;\n while ((iter = entries.next()) && !iter.done) {\n const [key, value] = iter.value;\n deletes.push({\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: value,\n });\n }\n\n allChanges.set(previousValue['$changes'].refId, deletes);\n }\n }\n\n $root.addRef(refId, value, (valueRef !== previousValue));\n\n //\n // TODO: deprecate proxies on next version.\n // get proxy to target value.\n //\n if (typeDef.getProxy) {\n value = typeDef.getProxy(value);\n }\n }\n\n let hasChange = (previousValue !== value);\n\n if (\n value !== null &&\n value !== undefined\n ) {\n if (value['$changes']) {\n value['$changes'].setParent(\n changeTree.ref,\n changeTree.root,\n fieldIndex,\n );\n }\n\n if (ref instanceof Schema) {\n ref[fieldName] = value;\n\n //\n // FIXME: use `_field` instead of `field`.\n //\n // `field` is going to use the setter of the PropertyDescriptor\n // and create a proxy for array/map. This is only useful for\n // backwards-compatibility with @colyseus/schema@0.5.x\n //\n // // ref[_field] = value;\n\n } else if (ref instanceof MapSchema) {\n // const key = ref['$indexes'].get(field);\n const key = dynamicIndex as string;\n\n // ref.set(key, value);\n ref['$items'].set(key, value);\n\n } else if (ref instanceof ArraySchema) {\n // const key = ref['$indexes'][field];\n // console.log(\"SETTING FOR ArraySchema =>\", { field, key, value });\n // ref[key] = value;\n ref.setAt(fieldIndex, value);\n\n } else if (ref instanceof CollectionSchema) {\n const index = ref.add(value);\n ref['setIndex'](fieldIndex, index);\n\n } else if (ref instanceof SetSchema) {\n const index = ref.add(value);\n if (index !== false) {\n ref['setIndex'](fieldIndex, index);\n }\n }\n }\n\n if (\n hasChange\n // &&\n // (\n // this.onChange || ref.$listeners[field]\n // )\n ) {\n changes.push({\n op: operation,\n field: fieldName,\n dynamicIndex,\n value,\n previousValue,\n });\n }\n }\n\n this._triggerChanges(allChanges);\n\n // drop references of unused schemas\n $root.garbageCollectDeletedRefs();\n\n return allChanges;\n }\n\n encode(\n encodeAll = false,\n bytes: number[] = [],\n useFilters: boolean = false,\n ) {\n const rootChangeTree = this.$changes;\n const refIdsVisited = new WeakSet<ChangeTree>();\n\n const changeTrees: ChangeTree[] = [rootChangeTree];\n let numChangeTrees = 1;\n\n for (let i = 0; i < numChangeTrees; i++) {\n const changeTree = changeTrees[i];\n const ref = changeTree.ref;\n const isSchema = (ref instanceof Schema);\n\n // Generate unique refId for the ChangeTree.\n changeTree.ensureRefId();\n\n // mark this ChangeTree as visited.\n refIdsVisited.add(changeTree);\n\n // root `refId` is skipped.\n if (\n changeTree !== rootChangeTree &&\n (changeTree.changed || encodeAll)\n ) {\n encode.uint8(bytes, SWITCH_TO_STRUCTURE);\n encode.number(bytes, changeTree.refId);\n }\n\n const changes: ChangeOperation[] | number[] = (encodeAll)\n ? Array.from(changeTree.allChanges)\n : Array.from(changeTree.changes.values());\n\n for (let j = 0, cl = changes.length; j < cl; j++) {\n const operation: ChangeOperation = (encodeAll)\n ? { op: OPERATION.ADD, index: changes[j] as number }\n : changes[j] as ChangeOperation;\n\n const fieldIndex = operation.index;\n\n const field = (isSchema)\n ? ref['_definition'].fieldsByIndex && ref['_definition'].fieldsByIndex[fieldIndex]\n : fieldIndex;\n\n // cache begin index if `useFilters`\n const beginIndex = bytes.length;\n\n // encode field index + operation\n if (operation.op !== OPERATION.TOUCH) {\n if (isSchema) {\n //\n // Compress `fieldIndex` + `operation` into a single byte.\n // This adds a limitaion of 64 fields per Schema structure\n //\n encode.uint8(bytes, (fieldIndex | operation.op));\n\n } else {\n encode.uint8(bytes, operation.op);\n\n // custom operations\n if (operation.op === OPERATION.CLEAR) {\n continue;\n }\n\n // indexed operations\n encode.number(bytes, fieldIndex);\n }\n }\n\n //\n // encode \"alias\" for dynamic fields (maps)\n //\n if (\n !isSchema &&\n (operation.op & OPERATION.ADD) == OPERATION.ADD // ADD or DELETE_AND_ADD\n ) {\n if (ref instanceof MapSchema) {\n //\n // MapSchema dynamic key\n //\n const dynamicIndex = changeTree.ref['$indexes'].get(fieldIndex);\n encode.string(bytes, dynamicIndex);\n }\n }\n\n if (operation.op === OPERATION.DELETE) {\n //\n // TODO: delete from filter cache data.\n //\n // if (useFilters) {\n // delete changeTree.caches[fieldIndex];\n // }\n continue;\n }\n\n // const type = changeTree.childType || ref._schema[field];\n const type = changeTree.getType(fieldIndex);\n\n // const type = changeTree.getType(fieldIndex);\n const value = changeTree.getValue(fieldIndex);\n\n // Enqueue ChangeTree to be visited\n if (\n value &&\n value['$changes'] &&\n !refIdsVisited.has(value['$changes'])\n ) {\n changeTrees.push(value['$changes']);\n value['$changes'].ensureRefId();\n numChangeTrees++;\n }\n\n if (operation.op === OPERATION.TOUCH) {\n continue;\n }\n\n if (Schema.is(type)) {\n assertInstanceType(value, type as typeof Schema, ref as Schema, field);\n\n //\n // Encode refId for this instance.\n // The actual instance is going to be encoded on next `changeTree` iteration.\n //\n encode.number(bytes, value.$changes.refId);\n\n // Try to encode inherited TYPE_ID if it's an ADD operation.\n if ((operation.op & OPERATION.ADD) === OPERATION.ADD) {\n this.tryEncodeTypeId(bytes, type as typeof Schema, value.constructor as typeof Schema);\n }\n\n } else if (typeof(type) === \"string\") {\n //\n // Primitive values\n //\n encodePrimitiveType(type as PrimitiveType, bytes, value, ref as Schema, field);\n\n } else {\n //\n // Custom type (MapSchema, ArraySchema, etc)\n //\n const definition = getType(Object.keys(type)[0]);\n\n //\n // ensure a ArraySchema has been provided\n //\n assertInstanceType(ref[`_${field}`], definition.constructor, ref as Schema, field);\n\n //\n // Encode refId for this instance.\n // The actual instance is going to be encoded on next `changeTree` iteration.\n //\n encode.number(bytes, value.$changes.refId);\n }\n\n if (useFilters) {\n // cache begin / end index\n changeTree.cache(fieldIndex as number, bytes.slice(beginIndex));\n }\n }\n\n if (!encodeAll && !useFilters) {\n changeTree.discard();\n }\n }\n\n return bytes;\n }\n\n encodeAll (useFilters?: boolean) {\n return this.encode(true, [], useFilters);\n }\n\n applyFilters(client: ClientWithSessionId, encodeAll: boolean = false) {\n const root = this;\n const refIdsDissallowed = new Set<number>();\n\n const $filterState = ClientState.get(client);\n\n const changeTrees = [this.$changes];\n let numChangeTrees = 1;\n\n let filteredBytes: number[] = [];\n\n for (let i = 0; i < numChangeTrees; i++) {\n const changeTree = changeTrees[i];\n\n if (refIdsDissallowed.has(changeTree.refId)) {\n // console.log(\"REFID IS NOT ALLOWED. SKIP.\", { refId: changeTree.refId })\n continue;\n }\n\n const ref = changeTree.ref as Ref;\n const isSchema: boolean = ref instanceof Schema;\n\n encode.uint8(filteredBytes, SWITCH_TO_STRUCTURE);\n encode.number(filteredBytes, changeTree.refId);\n\n const clientHasRefId = $filterState.refIds.has(changeTree);\n const isEncodeAll = (encodeAll || !clientHasRefId);\n\n // console.log(\"REF:\", ref.constructor.name);\n // console.log(\"Encode all?\", isEncodeAll);\n\n //\n // include `changeTree` on list of known refIds by this client.\n //\n $filterState.addRefId(changeTree);\n\n const containerIndexes = $filterState.containerIndexes.get(changeTree)\n const changes = (isEncodeAll)\n ? Array.from(changeTree.allChanges)\n : Array.from(changeTree.changes.values());\n\n //\n // WORKAROUND: tries to re-evaluate previously not included @filter() attributes\n // - see \"DELETE a field of Schema\" test case.\n //\n if (\n !encodeAll &&\n isSchema &&\n (ref as Schema)._definition.indexesWithFilters\n ) {\n const indexesWithFilters = (ref as Schema)._definition.indexesWithFilters;\n indexesWithFilters.forEach(indexWithFilter => {\n if (\n !containerIndexes.has(indexWithFilter) &&\n changeTree.allChanges.has(indexWithFilter)\n ) {\n if (isEncodeAll) {\n changes.push(indexWithFilter as any);\n\n } else {\n changes.push({ op: OPERATION.ADD, index: indexWithFilter, } as any);\n }\n }\n });\n }\n\n for (let j = 0, cl = changes.length; j < cl; j++) {\n const change: ChangeOperation = (isEncodeAll)\n ? { op: OPERATION.ADD, index: changes[j] as number }\n : changes[j] as ChangeOperation;\n\n // custom operations\n if (change.op === OPERATION.CLEAR) {\n encode.uint8(filteredBytes, change.op);\n continue;\n }\n\n const fieldIndex = change.index;\n\n //\n // Deleting fields: encode the operation + field index\n //\n if (change.op === OPERATION.DELETE) {\n //\n // DELETE operations also need to go through filtering.\n //\n // TODO: cache the previous value so we can access the value (primitive or `refId`)\n // (check against `$filterState.refIds`)\n //\n\n if (isSchema) {\n encode.uint8(filteredBytes, change.op | fieldIndex);\n\n } else {\n encode.uint8(filteredBytes, change.op);\n encode.number(filteredBytes, fieldIndex);\n\n }\n continue;\n }\n\n // indexed operation\n const value = changeTree.getValue(fieldIndex);\n const type = changeTree.getType(fieldIndex);\n\n if (isSchema) {\n // Is a Schema!\n const filter = (\n (ref as Schema)._definition.filters &&\n (ref as Schema)._definition.filters[fieldIndex]\n );\n\n if (filter && !filter.call(ref, client, value, root)) {\n if (value && value['$changes']) {\n refIdsDissallowed.add(value['$changes'].refId);;\n }\n continue;\n }\n\n } else {\n // Is a collection! (map, array, etc.)\n const parent = changeTree.parent as Ref;\n const filter = changeTree.getChildrenFilter();\n\n if (filter && !filter.call(parent, client, ref['$indexes'].get(fieldIndex), value, root)) {\n if (value && value['$changes']) {\n refIdsDissallowed.add(value['$changes'].refId);\n }\n continue;\n }\n }\n\n // visit child ChangeTree on further iteration.\n if (value['$changes']) {\n changeTrees.push(value['$changes']);\n numChangeTrees++;\n }\n\n //\n // Copy cached bytes\n //\n if (change.op !== OPERATION.TOUCH) {\n\n //\n // TODO: refactor me!\n //\n\n if (change.op === OPERATION.ADD || isSchema) {\n //\n // use cached bytes directly if is from Schema type.\n //\n filteredBytes.push.apply(filteredBytes, changeTree.caches[fieldIndex] ?? []);\n containerIndexes.add(fieldIndex);\n\n } else {\n if (containerIndexes.has(fieldIndex)) {\n //\n // use cached bytes if already has the field\n //\n filteredBytes.push.apply(filteredBytes, changeTree.caches[fieldIndex] ?? []);\n\n } else {\n //\n // force ADD operation if field is not known by this client.\n //\n containerIndexes.add(fieldIndex);\n\n encode.uint8(filteredBytes, OPERATION.ADD);\n encode.number(filteredBytes, fieldIndex);\n\n if (ref instanceof MapSchema) {\n //\n // MapSchema dynamic key\n //\n const dynamicIndex = changeTree.ref['$indexes'].get(fieldIndex);\n encode.string(filteredBytes, dynamicIndex);\n }\n\n if (value['$changes']) {\n encode.number(filteredBytes, value['$changes'].refId);\n\n } else {\n // \"encodePrimitiveType\" without type checking.\n // the type checking has been done on the first .encode() call.\n encode[type as string](filteredBytes, value);\n }\n }\n }\n\n } else if (value['$changes'] && !isSchema) {\n //\n // TODO:\n // - track ADD/REPLACE/DELETE instances on `$filterState`\n // - do NOT always encode dynamicIndex for MapSchema.\n // (If client already has that key, only the first index is necessary.)\n //\n\n encode.uint8(filteredBytes, OPERATION.ADD);\n encode.number(filteredBytes, fieldIndex);\n\n if (ref instanceof MapSchema) {\n //\n // MapSchema dynamic key\n //\n const dynamicIndex = changeTree.ref['$indexes'].get(fieldIndex);\n encode.string(filteredBytes, dynamicIndex);\n }\n\n encode.number(filteredBytes, value['$changes'].refId);\n }\n\n };\n }\n\n return filteredBytes;\n }\n\n clone (): this {\n const cloned = new ((this as any).constructor);\n const schema = this._definition.schema;\n for (let field in schema) {\n if (\n typeof (this[field]) === \"object\" &&\n typeof (this[field].clone) === \"function\"\n ) {\n // deep clone\n cloned[field] = this[field].clone();\n\n } else {\n // primitive values\n cloned[field] = this[field];\n }\n }\n return cloned;\n }\n\n triggerAll() {\n // skip if haven't received any remote refs yet.\n if (this.$changes.root.refs.size === 0) { return; }\n\n const allChanges = new Map<number, DataChange[]>();\n Schema.prototype._triggerAllFillChanges.call(this, this, allChanges);\n\n try {\n Schema.prototype._triggerChanges.call(this, allChanges);\n\n } catch (e) {\n Schema.onError(e);\n }\n }\n\n toJSON () {\n const schema = this._definition.schema;\n const deprecated = this._definition.deprecated;\n\n const obj = {}\n for (let field in schema) {\n if (!deprecated[field] && this[field] !== null && typeof (this[field]) !== \"undefined\") {\n obj[field] = (typeof (this[field]['toJSON']) === \"function\")\n ? this[field]['toJSON']()\n : this[`_${field}`];\n }\n }\n return obj;\n }\n\n discardAllChanges() {\n this.$changes.discardAll();\n }\n\n protected getByIndex(index: number) {\n return this[this._definition.fieldsByIndex[index]];\n }\n\n protected deleteByIndex(index: number) {\n this[this._definition.fieldsByIndex[index]] = undefined;\n }\n\n private tryEncodeTypeId (bytes: number[], type: typeof Schema, targetType: typeof Schema) {\n if (type._typeid !== targetType._typeid) {\n encode.uint8(bytes, TYPE_ID);\n encode.number(bytes, targetType._typeid);\n }\n }\n\n private getSchemaType(bytes: number[], it: Iterator, defaultType: typeof Schema): typeof Schema {\n let type: typeof Schema;\n\n if (bytes[it.offset] === TYPE_ID) {\n it.offset++;\n type = (this.constructor as typeof Schema)._context.get(decode.number(bytes, it));\n }\n\n return type || defaultType;\n }\n\n private createTypeInstance (type: typeof Schema): Schema {\n let instance: Schema = new (type as any)();\n\n // assign root on $changes\n instance.$changes.root = this.$changes.root;\n\n return instance;\n }\n\n private _triggerAllFillChanges(ref: Ref, allChanges: Map<number, DataChange[]>) {\n if (allChanges.has(ref['$changes'].refId)) { return; }\n\n const changes: DataChange[] = [];\n allChanges.set(ref['$changes'].refId || 0, changes);\n\n if (ref instanceof Schema) {\n const schema = ref._definition.schema;\n\n for (let fieldName in schema) {\n const _field = `_${fieldName}`;\n const value = ref[_field];\n\n if (value !== undefined) {\n changes.push({\n op: OPERATION.ADD,\n field: fieldName,\n value,\n previousValue: undefined\n });\n\n if (value['$changes'] !== undefined) {\n Schema.prototype._triggerAllFillChanges.call(this, value, allChanges);\n }\n\n }\n }\n\n } else {\n const entries: IterableIterator<[any, any]> = ref.entries();\n let iter: IteratorResult<[any, any]>;\n\n while ((iter = entries.next()) && !iter.done) {\n const [key, value] = iter.value;\n\n changes.push({\n op: OPERATION.ADD,\n field: key,\n dynamicIndex: key,\n value: value,\n previousValue: undefined,\n });\n\n if (value['$changes'] !== undefined) {\n Schema.prototype._triggerAllFillChanges.call(this, value, allChanges);\n }\n }\n }\n }\n\n private _triggerChanges(allChanges: Map<number, DataChange[]>) {\n allChanges.forEach((changes, refId) => {\n if (changes.length > 0) {\n const ref = this.$changes.root.refs.get(refId);\n const isSchema = ref instanceof Schema;\n\n for (let i = 0; i < changes.length; i++) {\n const change = changes[i];\n const listener = ref['$listeners'] && ref['$listeners'][change.field];\n\n if (!isSchema) {\n if (change.op === OPERATION.ADD && change.previousValue === undefined) {\n (ref as SchemaDecoderCallbacks).onAdd?.(change.value, change.dynamicIndex ?? change.field);\n\n } else if (change.op === OPERATION.DELETE) {\n //\n // FIXME: `previousValue` should always be avaiiable.\n // ADD + DELETE operations are still encoding DELETE operation.\n //\n if (change.previousValue !== undefined) {\n (ref as SchemaDecoderCallbacks).onRemove?.(change.previousValue, change.dynamicIndex ?? change.field);\n }\n\n } else if (change.op === OPERATION.DELETE_AND_ADD) {\n if (change.previousValue !== undefined) {\n (ref as SchemaDecoderCallbacks).onRemove?.(change.previousValue, change.dynamicIndex);\n }\n (ref as SchemaDecoderCallbacks).onAdd?.(change.value, change.dynamicIndex);\n\n } else if (\n change.op === OPERATION.REPLACE ||\n change.value !== change.previousValue\n ) {\n (ref as SchemaDecoderCallbacks).onChange?.(change.value, change.dynamicIndex);\n }\n }\n\n //\n // trigger onRemove on child structure.\n //\n if (\n (change.op & OPERATION.DELETE) === OPERATION.DELETE &&\n change.previousValue instanceof Schema &&\n change.previousValue.onRemove\n ) {\n change.previousValue.onRemove();\n }\n\n if (listener) {\n try {\n listener.invoke(change.value, change.previousValue);\n } catch (e) {\n Schema.onError(e);\n }\n }\n }\n\n if (isSchema) {\n if (ref.onChange) {\n try {\n (ref as Schema).onChange(changes);\n } catch (e) {\n Schema.onError(e);\n }\n }\n }\n\n }\n\n });\n }\n}\n","import { Schema } from \"./\";\nimport { ChangeTree } from \"./changes/ChangeTree\";\n\nexport function dumpChanges(schema: Schema) {\n const changeTrees: ChangeTree[] = [schema['$changes']];\n let numChangeTrees = 1;\n\n const dump = {};\n let currentStructure = dump;\n\n for (let i = 0; i < numChangeTrees; i++) {\n const changeTree = changeTrees[i];\n\n changeTree.changes.forEach((change) => {\n const ref = changeTree.ref;\n const fieldIndex = change.index;\n\n const field = ((ref as Schema)['_definition'])\n ? ref['_definition'].fieldsByIndex[fieldIndex]\n : ref['$indexes'].get(fieldIndex);\n\n currentStructure[field] = changeTree.getValue(fieldIndex);\n });\n\n }\n\n return dump;\n}","import { type, PrimitiveType, Context, DefinitionType } from \"./annotations\";\nimport { Schema } from \"./Schema\";\nimport { ArraySchema } from \"./types/ArraySchema\";\nimport { getType } from \"./types\";\nimport { Iterator } from \"./encoding/decode\";\n\nconst reflectionContext = new Context();\n\n/**\n * Reflection\n */\nexport class ReflectionField extends Schema {\n @type(\"string\", reflectionContext)\n name: string;\n\n @type(\"string\", reflectionContext)\n type: string;\n\n @type(\"number\", reflectionContext)\n referencedType: number;\n}\n\nexport class ReflectionType extends Schema {\n @type(\"number\", reflectionContext)\n id: number;\n\n @type([ ReflectionField ], reflectionContext)\n fields: ArraySchema<ReflectionField> = new ArraySchema<ReflectionField>();\n}\n\nexport class Reflection extends Schema {\n @type([ ReflectionType ], reflectionContext)\n types: ArraySchema<ReflectionType> = new ArraySchema<ReflectionType>();\n\n @type(\"number\", reflectionContext)\n rootType: number;\n\n static encode (instance: Schema) {\n const rootSchemaType = instance.constructor as typeof Schema;\n\n const reflection = new Reflection();\n reflection.rootType = rootSchemaType._typeid;\n\n const buildType = (currentType: ReflectionType, schema: any) => {\n for (let fieldName in schema) {\n const field = new ReflectionField();\n field.name = fieldName;\n\n let fieldType: string;\n\n if (typeof (schema[fieldName]) === \"string\") {\n fieldType = schema[fieldName];\n\n } else {\n const type = schema[fieldName];\n let childTypeSchema: typeof Schema;\n\n //\n // TODO: refactor below.\n //\n if (Schema.is(type)) {\n fieldType = \"ref\";\n childTypeSchema = schema[fieldName];\n\n } else {\n fieldType = Object.keys(type)[0];\n\n if (typeof(type[fieldType]) === \"string\") {\n fieldType += \":\" + type[fieldType]; // array:string\n\n } else {\n childTypeSchema = type[fieldType];\n }\n }\n\n field.referencedType = (childTypeSchema)\n ? childTypeSchema._typeid\n : -1;\n }\n\n field.type = fieldType;\n currentType.fields.push(field);\n }\n\n reflection.types.push(currentType);\n }\n\n const types = rootSchemaType._context.types;\n for (let typeid in types) {\n const type = new ReflectionType();\n type.id = Number(typeid);\n buildType(type, types[typeid]._definition.schema);\n }\n\n return reflection.encodeAll();\n }\n\n static decode<T extends Schema = Schema>(bytes: number[], it?: Iterator): T {\n const context = new Context();\n\n const reflection = new Reflection();\n reflection.decode(bytes, it);\n\n const schemaTypes = reflection.types.reduce((types, reflectionType) => {\n const schema: typeof Schema = class _ extends Schema {};\n const typeid = reflectionType.id;\n types[typeid] = schema\n context.add(schema, typeid);\n return types;\n }, {});\n\n reflection.types.forEach((reflectionType) => {\n const schemaType = schemaTypes[reflectionType.id];\n\n reflectionType.fields.forEach(field => {\n if (field.referencedType !== undefined) {\n let fieldType = field.type;\n let refType = schemaTypes[field.referencedType];\n\n // map or array of primitive type (-1)\n if (!refType) {\n const typeInfo = field.type.split(\":\");\n fieldType = typeInfo[0];\n refType = typeInfo[1];\n }\n\n if (fieldType === \"ref\") {\n type(refType, context)(schemaType.prototype, field.name);\n\n } else {\n type({ [fieldType]: refType } as DefinitionType, context)(schemaType.prototype, field.name);\n }\n\n } else {\n type(field.type as PrimitiveType, context)(schemaType.prototype, field.name);\n }\n });\n })\n\n const rootType: any = schemaTypes[reflection.rootType];\n const rootInstance = new rootType();\n\n /**\n * auto-initialize referenced types on root type\n * to allow registering listeners immediatelly on client-side\n */\n for (let fieldName in rootType._definition.schema) {\n const fieldType = rootType._definition.schema[fieldName];\n\n if (typeof(fieldType) !== \"string\") {\n rootInstance[fieldName] = (typeof (fieldType) === \"function\")\n ? new (fieldType as any)() // is a schema reference\n : new (getType(Object.keys(fieldType)[0])).constructor(); // is a \"collection\"\n }\n }\n\n return rootInstance;\n }\n}","export { Schema, DataChange } from \"./Schema\";\n\nimport { MapSchema, getMapProxy } from \"./types/MapSchema\"\nexport { MapSchema };\n\nimport { ArraySchema, getArrayProxy } from \"./types/ArraySchema\";\nexport { ArraySchema };\n\nimport { CollectionSchema } from \"./types/CollectionSchema\";\nexport { CollectionSchema };\n\nimport { SetSchema } from \"./types/SetSchema\";\nexport { SetSchema };\n\nimport { registerType } from \"./types\";\nexport { registerType };\n\nregisterType(\"map\", { constructor: MapSchema, getProxy: getMapProxy });\nregisterType(\"array\", { constructor: ArraySchema, getProxy: getArrayProxy });\nregisterType(\"set\", { constructor: SetSchema });\nregisterType(\"collection\", { constructor: CollectionSchema, });\n\n// Utils\nexport { dumpChanges } from \"./utils\";\n\n// Encoder / Decoder\nexport { Iterator } from \"./encoding/decode\";\nimport * as encode from \"./encoding/encode\";\nimport * as decode from \"./encoding/decode\";\nexport { encode, decode };\n\n// Reflection\nexport {\n Reflection,\n ReflectionType,\n ReflectionField,\n} from \"./Reflection\";\n\nexport {\n // Annotations\n type,\n deprecated,\n filter,\n filterChildren,\n defineTypes,\n hasFilter,\n\n // Internals\n SchemaDefinition,\n\n // Types\n Context,\n PrimitiveType,\n Definition,\n DefinitionType,\n FilterCallback,\n} from \"./annotations\";\n\nexport { OPERATION } from \"./spec\";"],"names":["OPERATION","int8","uint8","int16","uint16","int32","uint32","int64","uint64","float32","float64","_int32","_float32","_float64","boolean","string","number","decode.number","decode.string","decode.switchStructureCheck","encode.uint8","encode.number","encode.string"],"mappings":"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"}
@@ -41,16 +41,14 @@ var OPERATION;
41
41
  // Root holds all schema references by unique id
42
42
  //
43
43
  class Root {
44
- constructor() {
45
- //
46
- // Relation of refId => Schema structure
47
- // For direct access of structures during decoding time.
48
- //
49
- this.refs = new Map();
50
- this.refCounts = {};
51
- this.deletedRefs = new Set();
52
- this.nextUniqueId = 0;
53
- }
44
+ //
45
+ // Relation of refId => Schema structure
46
+ // For direct access of structures during decoding time.
47
+ //
48
+ refs = new Map();
49
+ refCounts = {};
50
+ deletedRefs = new Set();
51
+ nextUniqueId = 0;
54
52
  getNextUniqueId() {
55
53
  return this.nextUniqueId++;
56
54
  }
@@ -105,13 +103,19 @@ class Root {
105
103
  }
106
104
  }
107
105
  class ChangeTree {
106
+ ref;
107
+ refId;
108
+ root;
109
+ parent;
110
+ parentIndex;
111
+ indexes;
112
+ changed = false;
113
+ changes = new Map();
114
+ allChanges = new Set();
115
+ // cached indexes for filtering
116
+ caches = {};
117
+ currentCustomOperation = 0;
108
118
  constructor(ref, parent, root) {
109
- this.changed = false;
110
- this.changes = new Map();
111
- this.allChanges = new Set();
112
- // cached indexes for filtering
113
- this.caches = {};
114
- this.currentCustomOperation = 0;
115
119
  this.ref = ref;
116
120
  this.setParent(parent, root);
117
121
  }
@@ -366,13 +370,16 @@ function getArrayProxy(value) {
366
370
  return value;
367
371
  }
368
372
  class ArraySchema {
369
- constructor(...items) {
370
- this.$changes = new ChangeTree(this);
371
- this.$items = new Map();
372
- this.$indexes = new Map();
373
- this.$refId = 0;
374
- this.push.apply(this, items);
375
- }
373
+ $changes = new ChangeTree(this);
374
+ $items = new Map();
375
+ $indexes = new Map();
376
+ $refId = 0;
377
+ //
378
+ // Decoding callbacks
379
+ //
380
+ onAdd;
381
+ onRemove;
382
+ onChange;
376
383
  static is(type) {
377
384
  return (
378
385
  // type format: ["string"]
@@ -380,6 +387,9 @@ class ArraySchema {
380
387
  // type format: { array: "string" }
381
388
  (type['array'] !== undefined));
382
389
  }
390
+ constructor(...items) {
391
+ this.push.apply(this, items);
392
+ }
383
393
  set length(value) {
384
394
  if (value === 0) {
385
395
  this.clear();
@@ -826,11 +836,20 @@ function getMapProxy(value) {
826
836
  return value;
827
837
  }
828
838
  class MapSchema {
839
+ $changes = new ChangeTree(this);
840
+ $items = new Map();
841
+ $indexes = new Map();
842
+ $refId = 0;
843
+ //
844
+ // Decoding callbacks
845
+ //
846
+ onAdd;
847
+ onRemove;
848
+ onChange;
849
+ static is(type) {
850
+ return type['map'] !== undefined;
851
+ }
829
852
  constructor(initialValues) {
830
- this.$changes = new ChangeTree(this);
831
- this.$items = new Map();
832
- this.$indexes = new Map();
833
- this.$refId = 0;
834
853
  if (initialValues) {
835
854
  if (initialValues instanceof Map) {
836
855
  initialValues.forEach((v, k) => this.set(k, v));
@@ -842,9 +861,6 @@ class MapSchema {
842
861
  }
843
862
  }
844
863
  }
845
- static is(type) {
846
- return type['map'] !== undefined;
847
- }
848
864
  /** Iterator */
849
865
  [Symbol.iterator]() { return this.$items[Symbol.iterator](); }
850
866
  get [Symbol.toStringTag]() { return this.$items[Symbol.toStringTag]; }
@@ -991,15 +1007,17 @@ function getType(identifier) {
991
1007
  }
992
1008
 
993
1009
  class SchemaDefinition {
994
- constructor() {
995
- //
996
- // TODO: use a "field" structure combining all these properties per-field.
997
- //
998
- this.indexes = {};
999
- this.fieldsByIndex = {};
1000
- this.deprecated = {};
1001
- this.descriptors = {};
1002
- }
1010
+ schema;
1011
+ //
1012
+ // TODO: use a "field" structure combining all these properties per-field.
1013
+ //
1014
+ indexes = {};
1015
+ fieldsByIndex = {};
1016
+ filters;
1017
+ indexesWithFilters;
1018
+ childFilters; // childFilters are used on Map, Array, Set items.
1019
+ deprecated = {};
1020
+ descriptors = {};
1003
1021
  static create(parent) {
1004
1022
  const definition = new SchemaDefinition();
1005
1023
  // support inheritance
@@ -1052,11 +1070,9 @@ function hasFilter(klass) {
1052
1070
  return klass._context && klass._context.useFilters;
1053
1071
  }
1054
1072
  class Context {
1055
- constructor() {
1056
- this.types = {};
1057
- this.schemas = new Map();
1058
- this.useFilters = false;
1059
- }
1073
+ types = {};
1074
+ schemas = new Map();
1075
+ useFilters = false;
1060
1076
  has(schema) {
1061
1077
  return this.schemas.has(schema);
1062
1078
  }
@@ -1757,18 +1773,24 @@ var decode = /*#__PURE__*/Object.freeze({
1757
1773
  });
1758
1774
 
1759
1775
  class CollectionSchema {
1776
+ $changes = new ChangeTree(this);
1777
+ $items = new Map();
1778
+ $indexes = new Map();
1779
+ $refId = 0;
1780
+ //
1781
+ // Decoding callbacks
1782
+ //
1783
+ onAdd;
1784
+ onRemove;
1785
+ onChange;
1786
+ static is(type) {
1787
+ return type['collection'] !== undefined;
1788
+ }
1760
1789
  constructor(initialValues) {
1761
- this.$changes = new ChangeTree(this);
1762
- this.$items = new Map();
1763
- this.$indexes = new Map();
1764
- this.$refId = 0;
1765
1790
  if (initialValues) {
1766
1791
  initialValues.forEach((v) => this.add(v));
1767
1792
  }
1768
1793
  }
1769
- static is(type) {
1770
- return type['collection'] !== undefined;
1771
- }
1772
1794
  add(value) {
1773
1795
  // set "index" for reference.
1774
1796
  const index = this.$refId++;
@@ -1894,18 +1916,24 @@ class CollectionSchema {
1894
1916
  }
1895
1917
 
1896
1918
  class SetSchema {
1919
+ $changes = new ChangeTree(this);
1920
+ $items = new Map();
1921
+ $indexes = new Map();
1922
+ $refId = 0;
1923
+ //
1924
+ // Decoding callbacks
1925
+ //
1926
+ onAdd;
1927
+ onRemove;
1928
+ onChange;
1929
+ static is(type) {
1930
+ return type['set'] !== undefined;
1931
+ }
1897
1932
  constructor(initialValues) {
1898
- this.$changes = new ChangeTree(this);
1899
- this.$items = new Map();
1900
- this.$indexes = new Map();
1901
- this.$refId = 0;
1902
1933
  if (initialValues) {
1903
1934
  initialValues.forEach((v) => this.add(v));
1904
1935
  }
1905
1936
  }
1906
- static is(type) {
1907
- return type['set'] !== undefined;
1908
- }
1909
1937
  add(value) {
1910
1938
  // immediatelly return false if value already added.
1911
1939
  if (this.has(value)) {
@@ -2046,9 +2074,7 @@ class SetSchema {
2046
2074
  * Extracted from https://www.npmjs.com/package/strong-events
2047
2075
  */
2048
2076
  class EventEmitter_ {
2049
- constructor() {
2050
- this.handlers = [];
2051
- }
2077
+ handlers = [];
2052
2078
  register(cb, once = false) {
2053
2079
  this.handlers.push(cb);
2054
2080
  return this;
@@ -2070,10 +2096,8 @@ class EventEmitter_ {
2070
2096
  }
2071
2097
 
2072
2098
  class ClientState {
2073
- constructor() {
2074
- this.refIds = new WeakSet();
2075
- this.containerIndexes = new WeakMap();
2076
- }
2099
+ refIds = new WeakSet();
2100
+ containerIndexes = new WeakMap();
2077
2101
  // containerIndexes = new Map<ChangeTree, Set<number>>();
2078
2102
  addRefId(changeTree) {
2079
2103
  if (!this.refIds.has(changeTree)) {
@@ -2146,6 +2170,20 @@ function decodePrimitiveType(type, bytes, it) {
2146
2170
  * Schema encoder / decoder
2147
2171
  */
2148
2172
  class Schema {
2173
+ static _typeid;
2174
+ static _context;
2175
+ static _definition = SchemaDefinition.create();
2176
+ static onError(e) {
2177
+ console.error(e);
2178
+ }
2179
+ static is(type) {
2180
+ return (type['_definition'] &&
2181
+ type['_definition'].schema !== undefined);
2182
+ }
2183
+ $changes;
2184
+ // protected $root: ChangeSet;
2185
+ // TODO: refactor. this feature needs to be ported to other languages with potentially different API
2186
+ $listeners;
2149
2187
  // allow inherited classes to have a constructor
2150
2188
  constructor(...args) {
2151
2189
  // fix enumerability of fields for end-user
@@ -2172,13 +2210,6 @@ class Schema {
2172
2210
  this.assign(args[0]);
2173
2211
  }
2174
2212
  }
2175
- static onError(e) {
2176
- console.error(e);
2177
- }
2178
- static is(type) {
2179
- return (type['_definition'] &&
2180
- type['_definition'].schema !== undefined);
2181
- }
2182
2213
  assign(props) {
2183
2214
  Object.assign(this, props);
2184
2215
  return this;
@@ -2907,7 +2938,6 @@ class Schema {
2907
2938
  });
2908
2939
  }
2909
2940
  }
2910
- Schema._definition = SchemaDefinition.create();
2911
2941
 
2912
2942
  function dumpChanges(schema) {
2913
2943
  const changeTrees = [schema['$changes']];
@@ -2955,6 +2985,9 @@ const reflectionContext = new Context();
2955
2985
  * Reflection
2956
2986
  */
2957
2987
  class ReflectionField extends Schema {
2988
+ name;
2989
+ type;
2990
+ referencedType;
2958
2991
  }
2959
2992
  __decorate([
2960
2993
  type("string", reflectionContext)
@@ -2966,10 +2999,8 @@ __decorate([
2966
2999
  type("number", reflectionContext)
2967
3000
  ], ReflectionField.prototype, "referencedType", void 0);
2968
3001
  class ReflectionType extends Schema {
2969
- constructor() {
2970
- super(...arguments);
2971
- this.fields = new ArraySchema();
2972
- }
3002
+ id;
3003
+ fields = new ArraySchema();
2973
3004
  }
2974
3005
  __decorate([
2975
3006
  type("number", reflectionContext)
@@ -2978,10 +3009,8 @@ __decorate([
2978
3009
  type([ReflectionField], reflectionContext)
2979
3010
  ], ReflectionType.prototype, "fields", void 0);
2980
3011
  class Reflection extends Schema {
2981
- constructor() {
2982
- super(...arguments);
2983
- this.types = new ArraySchema();
2984
- }
3012
+ types = new ArraySchema();
3013
+ rootType;
2985
3014
  static encode(instance) {
2986
3015
  const rootSchemaType = instance.constructor;
2987
3016
  const reflection = new Reflection();
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/spec.ts","../../src/changes/ChangeTree.ts","../../src/types/ArraySchema.ts","../../src/types/MapSchema.ts","../../src/types/index.ts","../../src/annotations.ts","../../src/encoding/encode.ts","../../src/encoding/decode.ts","../../src/types/CollectionSchema.ts","../../src/types/SetSchema.ts","../../src/events/EventEmitter.ts","../../src/filters/index.ts","../../src/Schema.ts","../../src/utils.ts","../../node_modules/tslib/tslib.es6.js","../../src/Reflection.ts","../../src/index.ts"],"sourcesContent":["// export const SWITCH_TO_STRUCTURE = 193; (easily collides with DELETE_AND_ADD + fieldIndex = 2)\nexport const SWITCH_TO_STRUCTURE = 255; // (decoding collides with DELETE_AND_ADD + fieldIndex = 63)\nexport const TYPE_ID = 213;\n\n/**\n * Encoding Schema field operations.\n */\nexport enum OPERATION {\n // add new structure/primitive\n ADD = 128,\n\n // replace structure/primitive\n REPLACE = 0,\n\n // delete field\n DELETE = 64,\n\n // DELETE field, followed by an ADD\n DELETE_AND_ADD = 192, // 11100000\n\n // TOUCH is used to determine hierarchy of nested Schema structures during serialization.\n // touches are NOT encoded.\n TOUCH = 1, // 00000000\n\n // MapSchema Operations\n CLEAR = 10,\n}\n\n// export enum OPERATION {\n// // add new structure/primitive\n// // (128)\n// ADD = 128, // 10000000,\n\n// // replace structure/primitive\n// REPLACE = 1,// 00000001\n\n// // delete field\n// DELETE = 192, // 11000000\n\n// // DELETE field, followed by an ADD\n// DELETE_AND_ADD = 224, // 11100000\n\n// // TOUCH is used to determine hierarchy of nested Schema structures during serialization.\n// // touches are NOT encoded.\n// TOUCH = 0, // 00000000\n\n// // MapSchema Operations\n// CLEAR = 10,\n// }","import { OPERATION } from \"../spec\";\nimport { Schema } from \"../Schema\";\nimport { SchemaDefinition, FilterChildrenCallback } from \"../annotations\";\n\nimport { MapSchema } from \"../types/MapSchema\";\nimport { ArraySchema } from \"../types/ArraySchema\";\nimport { CollectionSchema } from \"../types/CollectionSchema\";\nimport { SetSchema } from \"../types/SetSchema\";\n\nexport type Ref = Schema\n | ArraySchema\n | MapSchema\n | CollectionSchema\n | SetSchema;\n\nexport interface ChangeOperation {\n op: OPERATION,\n index: number,\n}\n\n//\n// FieldCache is used for @filter()\n//\nexport interface FieldCache {\n beginIndex: number;\n endIndex: number;\n}\n\n\n//\n// Root holds all schema references by unique id\n//\nexport class Root {\n //\n // Relation of refId => Schema structure\n // For direct access of structures during decoding time.\n //\n public refs = new Map<number, Ref>();\n public refCounts: {[refId: number]: number} = {};\n public deletedRefs = new Set<number>();\n\n protected nextUniqueId: number = 0;\n\n getNextUniqueId() {\n return this.nextUniqueId++;\n }\n\n // for decoding\n addRef(refId: number, ref: Ref, incrementCount: boolean = true) {\n this.refs.set(refId, ref);\n\n if (incrementCount) {\n this.refCounts[refId] = (this.refCounts[refId] || 0) + 1;\n }\n }\n\n // for decoding\n removeRef(refId) {\n this.refCounts[refId] = this.refCounts[refId] - 1;\n this.deletedRefs.add(refId);\n }\n\n clearRefs() {\n this.refs.clear();\n this.deletedRefs.clear();\n this.refCounts = {};\n }\n\n // for decoding\n garbageCollectDeletedRefs() {\n this.deletedRefs.forEach((refId) => {\n if (this.refCounts[refId] <= 0) {\n const ref = this.refs.get(refId);\n\n //\n // Ensure child schema instances have their references removed as well.\n //\n if (ref instanceof Schema) {\n for (const fieldName in ref['_definition'].schema) {\n if (\n typeof (ref['_definition'].schema[fieldName]) !== \"string\" &&\n ref[fieldName] &&\n ref[fieldName]['$changes']\n ) {\n this.removeRef(ref[fieldName]['$changes'].refId);\n }\n }\n\n } else {\n const definition: SchemaDefinition = ref['$changes'].parent._definition;\n const type = definition.schema[definition.fieldsByIndex[ref['$changes'].parentIndex]];\n\n if (typeof (Object.values(type)[0]) === \"function\") {\n Array.from(ref.values())\n .forEach((child) => this.removeRef(child['$changes'].refId));\n }\n }\n\n this.refs.delete(refId);\n delete this.refCounts[refId];\n }\n });\n\n // clear deleted refs.\n this.deletedRefs.clear();\n }\n}\n\nexport class ChangeTree {\n ref: Ref;\n refId: number;\n\n root?: Root;\n\n parent?: Ref;\n parentIndex?: number;\n\n indexes: {[index: string]: any};\n\n changed: boolean = false;\n changes = new Map<number, ChangeOperation>();\n allChanges = new Set<number>();\n\n // cached indexes for filtering\n caches: {[field: number]: number[]} = {};\n\n currentCustomOperation: number = 0;\n\n constructor(ref: Ref, parent?: Ref, root?: Root) {\n this.ref = ref;\n this.setParent(parent, root);\n }\n\n setParent(\n parent: Ref,\n root?: Root,\n parentIndex?: number,\n ) {\n if (!this.indexes) {\n this.indexes = (this.ref instanceof Schema)\n ? this.ref['_definition'].indexes\n : {};\n }\n\n this.parent = parent;\n this.parentIndex = parentIndex;\n\n // avoid setting parents with empty `root`\n if (!root) { return; }\n this.root = root;\n\n //\n // assign same parent on child structures\n //\n if (this.ref instanceof Schema) {\n const definition: SchemaDefinition = this.ref['_definition'];\n\n for (let field in definition.schema) {\n const value = this.ref[field];\n\n if (value && value['$changes']) {\n const parentIndex = definition.indexes[field];\n\n (value['$changes'] as ChangeTree).setParent(\n this.ref,\n root,\n parentIndex,\n );\n }\n }\n\n } else if (typeof (this.ref) === \"object\") {\n this.ref.forEach((value, key) => {\n if (value instanceof Schema) {\n const changeTreee = value['$changes'];\n const parentIndex = this.ref['$changes'].indexes[key];\n\n changeTreee.setParent(\n this.ref,\n this.root,\n parentIndex,\n );\n }\n });\n }\n }\n\n operation(op: ChangeOperation) {\n this.changes.set(--this.currentCustomOperation, op);\n }\n\n change(fieldName: string | number, operation: OPERATION = OPERATION.ADD) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n this.assertValidIndex(index, fieldName);\n\n const previousChange = this.changes.get(index);\n\n if (\n !previousChange ||\n previousChange.op === OPERATION.DELETE ||\n previousChange.op === OPERATION.TOUCH // (mazmorra.io's BattleAction issue)\n ) {\n this.changes.set(index, {\n op: (!previousChange)\n ? operation\n : (previousChange.op === OPERATION.DELETE)\n ? OPERATION.DELETE_AND_ADD\n : operation,\n // : OPERATION.REPLACE,\n index\n });\n }\n\n this.allChanges.add(index);\n\n this.changed = true;\n this.touchParents();\n }\n\n touch(fieldName: string | number) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n this.assertValidIndex(index, fieldName);\n\n if (!this.changes.has(index)) {\n this.changes.set(index, { op: OPERATION.TOUCH, index });\n }\n\n this.allChanges.add(index);\n\n // ensure touch is placed until the $root is found.\n this.touchParents();\n }\n\n touchParents() {\n if (this.parent) {\n (this.parent['$changes'] as ChangeTree).touch(this.parentIndex);\n }\n }\n\n getType(index?: number) {\n if (this.ref['_definition']) {\n const definition = (this.ref as Schema)['_definition'];\n return definition.schema[ definition.fieldsByIndex[index] ];\n\n } else {\n const definition = (this.parent as Schema)['_definition'];\n const parentType = definition.schema[ definition.fieldsByIndex[this.parentIndex] ];\n\n //\n // Get the child type from parent structure.\n // - [\"string\"] => \"string\"\n // - { map: \"string\" } => \"string\"\n // - { set: \"string\" } => \"string\"\n //\n return Object.values(parentType)[0];\n }\n }\n\n getChildrenFilter(): FilterChildrenCallback {\n const childFilters = (this.parent as Schema)['_definition'].childFilters;\n return childFilters && childFilters[this.parentIndex];\n }\n\n //\n // used during `.encode()`\n //\n getValue(index: number) {\n return this.ref['getByIndex'](index);\n }\n\n delete(fieldName: string | number) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n if (index === undefined) {\n console.warn(`@colyseus/schema ${this.ref.constructor.name}: trying to delete non-existing index: ${fieldName} (${index})`);\n return;\n }\n\n const previousValue = this.getValue(index);\n // console.log(\"$changes.delete =>\", { fieldName, index, previousValue });\n\n this.changes.set(index, { op: OPERATION.DELETE, index });\n\n this.allChanges.delete(index);\n\n // delete cache\n delete this.caches[index];\n\n // remove `root` reference\n if (previousValue && previousValue['$changes']) {\n previousValue['$changes'].parent = undefined;\n }\n\n this.changed = true;\n this.touchParents();\n }\n\n discard(changed: boolean = false, discardAll: boolean = false) {\n //\n // Map, Array, etc:\n // Remove cached key to ensure ADD operations is unsed instead of\n // REPLACE in case same key is used on next patches.\n //\n // TODO: refactor this. this is not relevant for Collection and Set.\n //\n if (!(this.ref instanceof Schema)) {\n this.changes.forEach((change) => {\n if (change.op === OPERATION.DELETE) {\n const index = this.ref['getIndex'](change.index)\n delete this.indexes[index];\n }\n });\n }\n\n this.changes.clear();\n this.changed = changed;\n\n if (discardAll) {\n this.allChanges.clear();\n }\n\n // re-set `currentCustomOperation`\n this.currentCustomOperation = 0;\n }\n\n /**\n * Recursively discard all changes from this, and child structures.\n */\n discardAll() {\n this.changes.forEach((change) => {\n const value = this.getValue(change.index);\n\n if (value && value['$changes']) {\n value['$changes'].discardAll();\n }\n });\n\n this.discard();\n }\n\n // cache(field: number, beginIndex: number, endIndex: number) {\n cache(field: number, cachedBytes: number[]) {\n this.caches[field] = cachedBytes;\n }\n\n clone() {\n return new ChangeTree(this.ref, this.parent, this.root);\n }\n\n ensureRefId() {\n // skip if refId is already set.\n if (this.refId !== undefined) {\n return;\n }\n\n this.refId = this.root.getNextUniqueId();\n }\n\n protected assertValidIndex(index: number, fieldName: string | number) {\n if (index === undefined) {\n throw new Error(`ChangeTree: missing index for field \"${fieldName}\"`);\n }\n }\n\n}\n","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\n\n//\n// Notes:\n// -----\n//\n// - The tsconfig.json of @colyseus/schema uses ES2018.\n// - ES2019 introduces `flatMap` / `flat`, which is not currently relevant, and caused other issues.\n//\n\nconst DEFAULT_SORT = (a: any, b: any) => {\n const A = a.toString();\n const B = b.toString();\n if (A < B) return -1;\n else if (A > B) return 1;\n else return 0\n}\n\nexport function getArrayProxy(value: ArraySchema) {\n value['$proxy'] = true;\n\n //\n // compatibility with @colyseus/schema 0.5.x\n // - allow `map[\"key\"]`\n // - allow `map[\"key\"] = \"xxx\"`\n // - allow `delete map[\"key\"]`\n //\n value = new Proxy(value, {\n get: (obj, prop) => {\n if (\n typeof (prop) !== \"symbol\" &&\n !isNaN(prop as any) // https://stackoverflow.com/a/175787/892698\n ) {\n return obj.at(prop as unknown as number);\n\n } else {\n return obj[prop];\n }\n },\n\n set: (obj, prop, setValue) => {\n if (\n typeof (prop) !== \"symbol\" &&\n !isNaN(prop as any)\n ) {\n const indexes = Array.from(obj['$items'].keys());\n const key = parseInt(indexes[prop] || prop);\n if (setValue === undefined || setValue === null) {\n obj.deleteAt(key);\n\n } else {\n obj.setAt(key, setValue);\n }\n\n } else {\n obj[prop] = setValue;\n }\n\n return true;\n },\n\n deleteProperty: (obj, prop) => {\n if (typeof (prop) === \"number\") {\n obj.deleteAt(prop);\n\n } else {\n delete obj[prop];\n }\n\n return true;\n },\n });\n\n return value;\n}\n\nexport class ArraySchema<V=any> implements Array<V>, 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: number]: V;\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 (\n // type format: [\"string\"]\n Array.isArray(type) || \n\n // type format: { array: \"string\" }\n (type['array'] !== undefined)\n );\n }\n\n constructor (...items: V[]) {\n this.push.apply(this, items);\n }\n\n set length (value: number) {\n if (value === 0) {\n this.clear();\n\n } else {\n this.splice(value, this.length - value);\n }\n }\n\n get length() {\n return this.$items.size;\n }\n\n push(...values: V[]) {\n let lastIndex: number;\n\n values.forEach(value => {\n // set \"index\" for reference.\n lastIndex = this.$refId++;\n\n this.setAt(lastIndex, value);\n });\n\n return lastIndex;\n }\n\n /**\n * Removes the last element from an array and returns it.\n */\n pop(): V | undefined {\n const key = Array.from(this.$indexes.values()).pop();\n if (key === undefined) { return undefined; }\n\n this.$changes.delete(key);\n this.$indexes.delete(key);\n\n const value = this.$items.get(key);\n this.$items.delete(key);\n\n return value;\n }\n\n at(index: number) {\n //\n // FIXME: this should be O(1)\n //\n const key = Array.from(this.$items.keys())[index];\n return this.$items.get(key);\n }\n\n setAt(index: number, value: V) {\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 }\n\n deleteAt(index: number) {\n const key = Array.from(this.$items.keys())[index];\n if (key === undefined) { return false; }\n return this.$deleteAt(key);\n }\n\n protected $deleteAt(index) {\n // delete at internal index\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 /**\n * Combines two or more arrays.\n * @param items Additional items to add to the end of array1.\n */\n concat(...items: (V | ConcatArray<V>)[]): ArraySchema<V> {\n return new ArraySchema(...Array.from(this.$items.values()).concat(...items));\n }\n\n /**\n * Adds all the elements of an array separated by the specified separator string.\n * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.\n */\n join(separator?: string): string {\n return Array.from(this.$items.values()).join(separator);\n }\n\n /**\n * Reverses the elements in an Array.\n */\n reverse(): ArraySchema<V> {\n const indexes = Array.from(this.$items.keys());\n const reversedItems = Array.from(this.$items.values()).reverse();\n\n reversedItems.forEach((item, i) => {\n this.setAt(indexes[i], item);\n });\n\n return this;\n }\n\n /**\n * Removes the first element from an array and returns it.\n */\n shift(): V | undefined {\n const indexes = Array.from(this.$items.keys());\n\n const shiftAt = indexes.shift();\n if (shiftAt === undefined) { return undefined; }\n\n const value = this.$items.get(shiftAt);\n this.$deleteAt(shiftAt);\n\n return value;\n }\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array.\n * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n */\n slice(start?: number, end?: number): V[] {\n return new ArraySchema(...Array.from(this.$items.values()).slice(start, end));\n }\n\n /**\n * Sorts an array.\n * @param compareFn Function used to determine the order of the elements. It is expected to return\n * a negative value if first argument is less than second argument, zero if they're equal and a positive\n * value otherwise. If omitted, the elements are sorted in ascending, ASCII character order.\n * ```ts\n * [11,2,22,1].sort((a, b) => a - b)\n * ```\n */\n sort(compareFn: (a: V, b: V) => number = DEFAULT_SORT): this {\n const indexes = Array.from(this.$items.keys());\n const sortedItems = Array.from(this.$items.values()).sort(compareFn);\n\n sortedItems.forEach((item, i) => {\n this.setAt(indexes[i], item);\n });\n\n return this;\n }\n\n /**\n * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @param items Elements to insert into the array in place of the deleted elements.\n */\n splice(\n start: number,\n deleteCount: number = this.length - start,\n ...items: V[]\n ): V[] {\n const indexes = Array.from(this.$items.keys());\n const removedItems: V[] = [];\n\n for (let i = start; i < start + deleteCount; i++) {\n removedItems.push(this.$items.get(indexes[i]));\n this.$deleteAt(indexes[i]);\n }\n\n return removedItems;\n }\n\n /**\n * Inserts new elements at the start of an array.\n * @param items Elements to insert at the start of the Array.\n */\n unshift(...items: V[]): number {\n const length = this.length;\n const addedLength = items.length;\n\n // const indexes = Array.from(this.$items.keys());\n const previousValues = Array.from(this.$items.values());\n\n items.forEach((item, i) => {\n this.setAt(i, item);\n });\n\n previousValues.forEach((previousValue, i) => {\n this.setAt(addedLength + i, previousValue);\n });\n\n return length + addedLength;\n }\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n indexOf(searchElement: V, fromIndex?: number): number {\n return Array.from(this.$items.values()).indexOf(searchElement, fromIndex);\n }\n\n /**\n * Returns the index of the last occurrence of a specified value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.\n */\n lastIndexOf(searchElement: V, fromIndex: number = this.length - 1): number {\n return Array.from(this.$items.values()).lastIndexOf(searchElement, fromIndex);\n }\n\n /**\n * Determines whether all the members of an array satisfy the specified test.\n * @param callbackfn A function that accepts up to three arguments. The every method calls\n * the callbackfn function for each element in the array until the callbackfn returns a value\n * which is coercible to the Boolean value false, or until the end of the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n * If thisArg is omitted, undefined is used as the this value.\n */\n every(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean {\n return Array.from(this.$items.values()).every(callbackfn, thisArg);\n }\n\n /**\n * Determines whether the specified callback function returns true for any element of an array.\n * @param callbackfn A function that accepts up to three arguments. The some method calls\n * the callbackfn function for each element in the array until the callbackfn returns a value\n * which is coercible to the Boolean value true, or until the end of the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n * If thisArg is omitted, undefined is used as the this value.\n */\n some(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean {\n return Array.from(this.$items.values()).some(callbackfn, thisArg);\n }\n\n /**\n * Performs the specified action for each element in an array.\n * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n forEach(callbackfn: (value: V, index: number, array: V[]) => void, thisArg?: any): void {\n Array.from(this.$items.values()).forEach(callbackfn, thisArg);\n }\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n map<U>(callbackfn: (value: V, index: number, array: V[]) => U, thisArg?: any): U[] {\n return Array.from(this.$items.values()).map(callbackfn, thisArg);\n }\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n filter(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any)\n filter<S extends V>(callbackfn: (value: V, index: number, array: V[]) => value is S, thisArg?: any): V[] {\n return Array.from(this.$items.values()).filter(callbackfn, thisArg);\n }\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n reduce<U=V>(callbackfn: (previousValue: U, currentValue: V, currentIndex: number, array: V[]) => U, initialValue?: U): U {\n return Array.from(this.$items.values()).reduce(callbackfn, initialValue);\n }\n\n /**\n * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n reduceRight<U=V>(callbackfn: (previousValue: U, currentValue: V, currentIndex: number, array: V[]) => U, initialValue?: U): U {\n return Array.from(this.$items.values()).reduceRight(callbackfn, initialValue);\n }\n\n /**\n * Returns the value of the first element in the array where predicate is true, and undefined\n * otherwise.\n * @param predicate find calls predicate once for each element of the array, in ascending\n * order, until it finds one where predicate returns true. If such an element is found, find\n * immediately returns that element value. Otherwise, find returns undefined.\n * @param thisArg If provided, it will be used as the this value for each invocation of\n * predicate. If it is not provided, undefined is used instead.\n */\n find(predicate: (value: V, index: number, obj: V[]) => boolean, thisArg?: any): V | undefined {\n return Array.from(this.$items.values()).find(predicate, thisArg);\n }\n\n /**\n * Returns the index of the first element in the array where predicate is true, and -1\n * otherwise.\n * @param predicate find calls predicate once for each element of the array, in ascending\n * order, until it finds one where predicate returns true. If such an element is found,\n * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n * @param thisArg If provided, it will be used as the this value for each invocation of\n * predicate. If it is not provided, undefined is used instead.\n */\n findIndex(predicate: (value: V, index: number, obj: V[]) => unknown, thisArg?: any): number {\n return Array.from(this.$items.values()).findIndex(predicate, thisArg);\n }\n\n /**\n * Returns the this object after filling the section identified by start and end with value\n * @param value value to fill array section with\n * @param start index to start filling the array at. If start is negative, it is treated as\n * length+start where length is the length of the array.\n * @param end index to stop filling the array at. If end is negative, it is treated as\n * length+end.\n */\n fill(value: V, start?: number, end?: number): this {\n //\n // TODO\n //\n throw new Error(\"ArraySchema#fill() not implemented\");\n // this.$items.fill(value, start, end);\n\n return this;\n }\n\n /**\n * Returns the this object after copying a section of the array identified by start and end\n * to the same array starting at position target\n * @param target If target is negative, it is treated as length+target where length is the\n * length of the array.\n * @param start If start is negative, it is treated as length+start. If end is negative, it\n * is treated as length+end.\n * @param end If not specified, length of the this object is used as its default value.\n */\n copyWithin(target: number, start: number, end?: number): this {\n //\n // TODO\n //\n throw new Error(\"ArraySchema#copyWithin() not implemented\");\n return this;\n }\n\n /**\n * Returns a string representation of an array.\n */\n toString(): string { return this.$items.toString(); }\n\n /**\n * Returns a string representation of an array. The elements are converted to string using their toLocalString methods.\n */\n toLocaleString(): string { return this.$items.toLocaleString() };\n\n /** Iterator */\n [Symbol.iterator](): IterableIterator<V> {\n return Array.from(this.$items.values())[Symbol.iterator]();\n }\n\n [Symbol.unscopables]() {\n return this.$items[Symbol.unscopables]();\n }\n\n /**\n * Returns an iterable of key, value pairs for every entry in the array\n */\n entries(): IterableIterator<[number, V]> { return this.$items.entries(); }\n\n /**\n * Returns an iterable of keys in the array\n */\n keys(): IterableIterator<number> { return this.$items.keys(); }\n\n /**\n * Returns an iterable of values in the array\n */\n values(): IterableIterator<V> { return this.$items.values(); }\n\n /**\n * Determines whether an array includes a certain element, returning true or false as appropriate.\n * @param searchElement The element to search for.\n * @param fromIndex The position in this array at which to begin searching for searchElement.\n */\n includes(searchElement: V, fromIndex?: number): boolean {\n return Array.from(this.$items.values()).includes(searchElement, fromIndex);\n }\n\n /**\n * Calls a defined callback function on each element of an array. Then, flattens the result into\n * a new array.\n * This is identical to a map followed by flat with depth 1.\n *\n * @param callback A function that accepts up to three arguments. The flatMap method calls the\n * callback function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callback function. If\n * thisArg is omitted, undefined is used as the this value.\n */\n // @ts-ignore\n flatMap<U, This = undefined>(callback: (this: This, value: V, index: number, array: V[]) => U | ReadonlyArray<U>, thisArg?: This): U[] {\n // @ts-ignore\n throw new Error(\"ArraySchema#flatMap() is not supported.\");\n }\n\n /**\n * Returns a new array with all sub-array elements concatenated into it recursively up to the\n * specified depth.\n *\n * @param depth The maximum recursion depth\n */\n // @ts-ignore\n flat<A, D extends number = 1>(this: A, depth?: D): any {\n // @ts-ignore\n throw new Error(\"ArraySchema#flat() is not supported.\");\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 return this.toArray().map((value) => {\n return (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value;\n });\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): ArraySchema<V> {\n let cloned: ArraySchema;\n\n if (isDecoding) {\n cloned = new ArraySchema(...Array.from(this.$items.values()));\n\n } else {\n cloned = new ArraySchema(...this.map(item => (\n (item['$changes'])\n ? (item as any as Schema).clone()\n : item\n )));\n }\n\n return cloned;\n };\n\n triggerAll (): void {\n Schema.prototype.triggerAll.apply(this);\n }\n}\n","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 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(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}\n","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}","import { ChangeTree } from './changes/ChangeTree';\nimport { Schema } from './Schema';\nimport { ArraySchema, getArrayProxy } from './types/ArraySchema';\nimport { MapSchema, getMapProxy } from './types/MapSchema';\nimport { getType } from './types';\n\n/**\n * Data types\n */\nexport type PrimitiveType =\n \"string\" |\n \"number\" |\n \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"float32\" |\n \"float64\" |\n typeof Schema;\n\nexport type DefinitionType = PrimitiveType\n | PrimitiveType[]\n | { array: PrimitiveType }\n | { map: PrimitiveType }\n | { collection: PrimitiveType }\n | { set: PrimitiveType };\n\nexport type Definition = { [field: string]: DefinitionType };\nexport type FilterCallback<\n T extends Schema = any,\n V = any,\n R extends Schema = any\n> = (\n ((this: T, client: ClientWithSessionId, value: V) => boolean) |\n ((this: T, client: ClientWithSessionId, value: V, root: R) => boolean)\n);\n\nexport type FilterChildrenCallback<\n T extends Schema = any,\n K = any,\n V = any,\n R extends Schema = any\n> = (\n ((this: T, client: ClientWithSessionId, key: K, value: V) => boolean) |\n ((this: T, client: ClientWithSessionId, key: K, value: V, root: R) => boolean)\n)\n\nexport class SchemaDefinition {\n schema: Definition;\n\n //\n // TODO: use a \"field\" structure combining all these properties per-field.\n //\n\n indexes: { [field: string]: number } = {};\n fieldsByIndex: { [index: number]: string } = {};\n\n filters: { [field: string]: FilterCallback };\n indexesWithFilters: number[];\n childFilters: { [field: string]: FilterChildrenCallback }; // childFilters are used on Map, Array, Set items.\n\n deprecated: { [field: string]: boolean } = {};\n descriptors: PropertyDescriptorMap & ThisType<any> = {};\n\n static create(parent?: SchemaDefinition) {\n const definition = new SchemaDefinition();\n\n // support inheritance\n definition.schema = Object.assign({}, parent && parent.schema || {});\n definition.indexes = Object.assign({}, parent && parent.indexes || {});\n definition.fieldsByIndex = Object.assign({}, parent && parent.fieldsByIndex || {});\n definition.descriptors = Object.assign({}, parent && parent.descriptors || {});\n definition.deprecated = Object.assign({}, parent && parent.deprecated || {});\n\n return definition;\n }\n\n addField(field: string, type: DefinitionType) {\n const index = this.getNextFieldIndex();\n this.fieldsByIndex[index] = field;\n this.indexes[field] = index;\n this.schema[field] = (Array.isArray(type))\n ? { array: type[0] }\n : type;\n }\n\n addFilter(field: string, cb: FilterCallback) {\n if (!this.filters) {\n this.filters = {};\n this.indexesWithFilters = [];\n }\n this.filters[this.indexes[field]] = cb;\n this.indexesWithFilters.push(this.indexes[field]);\n return true;\n }\n\n addChildrenFilter(field: string, cb: FilterChildrenCallback) {\n const index = this.indexes[field];\n const type = this.schema[field];\n\n if (getType(Object.keys(type)[0])) {\n if (!this.childFilters) { this.childFilters = {}; }\n\n this.childFilters[index] = cb;\n return true;\n\n } else {\n console.warn(`@filterChildren: field '${field}' can't have children. Ignoring filter.`);\n }\n }\n\n getChildrenFilter(field: string) {\n return this.childFilters && this.childFilters[this.indexes[field]];\n }\n\n getNextFieldIndex() {\n return Object.keys(this.schema || {}).length;\n }\n}\n\nexport function hasFilter(klass: typeof Schema) {\n return klass._context && klass._context.useFilters;\n}\n\n// Colyseus integration\nexport type ClientWithSessionId = { sessionId: string } & any;\n\nexport class Context {\n types: {[id: number]: typeof Schema} = {};\n schemas = new Map<typeof Schema, number>();\n useFilters = false;\n\n has(schema: typeof Schema) {\n return this.schemas.has(schema);\n }\n\n get(typeid: number) {\n return this.types[typeid];\n }\n\n add(schema: typeof Schema, typeid: number = this.schemas.size) {\n // FIXME: move this to somewhere else?\n // support inheritance\n schema._definition = SchemaDefinition.create(schema._definition);\n\n schema._typeid = typeid;\n this.types[typeid] = schema;\n this.schemas.set(schema, typeid);\n }\n\n static create(context: Context = new Context) {\n return function (definition: DefinitionType) {\n return type(definition, context);\n }\n }\n}\n\nexport const globalContext = new Context();\n\n/**\n * `@type()` decorator for proxies\n */\nexport function type (type: DefinitionType, context: Context = globalContext): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n if (!type) {\n throw new Error(\"Type not found. Ensure your `@type` annotations are correct and that you don't have any circular dependencies.\");\n }\n\n const constructor = target.constructor as typeof Schema;\n constructor._context = context;\n\n /*\n * static schema\n */\n if (!context.has(constructor)) {\n context.add(constructor);\n }\n\n const definition = constructor._definition;\n definition.addField(field, type);\n\n /**\n * skip if descriptor already exists for this field (`@deprecated()`)\n */\n if (definition.descriptors[field]) {\n if (definition.deprecated[field]) {\n // do not create accessors for deprecated properties.\n return;\n\n } else {\n // trying to define same property multiple times across inheritance.\n // https://github.com/colyseus/colyseus-unity3d/issues/131#issuecomment-814308572\n try {\n throw new Error(`@colyseus/schema: Duplicate '${field}' definition on '${constructor.name}'.\\nCheck @type() annotation`);\n\n } catch (e) {\n const definitionAtLine = e.stack.split(\"\\n\")[4].trim();\n throw new Error(`${e.message} ${definitionAtLine}`);\n }\n }\n }\n\n const isArray = ArraySchema.is(type);\n const isMap = !isArray && MapSchema.is(type);\n\n // TODO: refactor me.\n // Allow abstract intermediary classes with no fields to be serialized\n // (See \"should support an inheritance with a Schema type without fields\" test)\n if (typeof (type) !== \"string\" && !Schema.is(type)) {\n const childType = Object.values(type)[0];\n if (typeof (childType) !== \"string\" && !context.has(childType)) {\n context.add(childType);\n }\n }\n\n const fieldCached = `_${field}`;\n\n definition.descriptors[fieldCached] = {\n enumerable: false,\n configurable: false,\n writable: true,\n };\n\n definition.descriptors[field] = {\n get: function () {\n return this[fieldCached];\n },\n\n set: function (this: Schema, value: any) {\n /**\n * Create Proxy for array or map items\n */\n\n // skip if value is the same as cached.\n if (value === this[fieldCached]) {\n return;\n }\n\n if (\n value !== undefined &&\n value !== null\n ) {\n // automaticallty transform Array into ArraySchema\n if (isArray && !(value instanceof ArraySchema)) {\n value = new ArraySchema(...value);\n }\n\n // automaticallty transform Map into MapSchema\n if (isMap && !(value instanceof MapSchema)) {\n value = new MapSchema(value);\n }\n\n // try to turn provided structure into a Proxy\n if (value['$proxy'] === undefined) {\n if (isMap) {\n value = getMapProxy(value);\n\n } else if (isArray) {\n value = getArrayProxy(value);\n }\n }\n\n // flag the change for encoding.\n this.$changes.change(field);\n\n //\n // call setParent() recursively for this and its child\n // structures.\n //\n if (value['$changes']) {\n (value['$changes'] as ChangeTree).setParent(\n this,\n this.$changes.root,\n this._definition.indexes[field],\n );\n }\n\n } else {\n //\n // Setting a field to `null` or `undefined` will delete it.\n //\n this.$changes.delete(field);\n }\n\n this[fieldCached] = value;\n },\n\n enumerable: true,\n configurable: true\n };\n }\n}\n\n/**\n * `@filter()` decorator for defining data filters per client\n */\n\nexport function filter<T extends Schema, V, R extends Schema>(cb: FilterCallback<T, V, R>): PropertyDecorator {\n return function (target: any, field: string) {\n const constructor = target.constructor as typeof Schema;\n const definition = constructor._definition;\n\n if (definition.addFilter(field, cb)) {\n constructor._context.useFilters = true;\n }\n }\n}\n\nexport function filterChildren<T extends Schema, K, V, R extends Schema>(cb: FilterChildrenCallback<T, K, V, R>): PropertyDecorator {\n return function (target: any, field: string) {\n const constructor = target.constructor as typeof Schema;\n const definition = constructor._definition;\n if (definition.addChildrenFilter(field, cb)) {\n constructor._context.useFilters = true;\n }\n }\n}\n\n\n/**\n * `@deprecated()` flag a field as deprecated.\n * The previous `@type()` annotation should remain along with this one.\n */\n\nexport function deprecated(throws: boolean = true, context: Context = globalContext): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n const constructor = target.constructor as typeof Schema;\n const definition = constructor._definition;\n\n definition.deprecated[field] = true;\n\n if (throws) {\n definition.descriptors[field] = {\n get: function () { throw new Error(`${field} is deprecated.`); },\n set: function (this: Schema, value: any) { /* throw new Error(`${field} is deprecated.`); */ },\n enumerable: false,\n configurable: true\n };\n }\n }\n}\n\nexport function defineTypes(\n target: typeof Schema,\n fields: { [property: string]: DefinitionType },\n context: Context = target._context || globalContext\n) {\n for (let field in fields) {\n type(fields[field], context)(target.prototype, field);\n }\n return target;\n}\n","/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\n\nfunction utf8Length(str) {\n var c = 0, length = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n\nexport function utf8Write(view, offset, str) {\n var c = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n view[offset++] = c;\n }\n else if (c < 0x800) {\n view[offset++] = 0xc0 | (c >> 6);\n view[offset++] = 0x80 | (c & 0x3f);\n }\n else if (c < 0xd800 || c >= 0xe000) {\n view[offset++] = 0xe0 | (c >> 12);\n view[offset++] = 0x80 | (c >> 6 & 0x3f);\n view[offset++] = 0x80 | (c & 0x3f);\n }\n else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n view[offset++] = 0xf0 | (c >> 18);\n view[offset++] = 0x80 | (c >> 12 & 0x3f);\n view[offset++] = 0x80 | (c >> 6 & 0x3f);\n view[offset++] = 0x80 | (c & 0x3f);\n }\n }\n}\n\nexport function int8(bytes, value) {\n bytes.push(value & 255);\n};\n\nexport function uint8(bytes, value) {\n bytes.push(value & 255);\n};\n\nexport function int16(bytes, value) {\n bytes.push(value & 255);\n bytes.push((value >> 8) & 255);\n};\n\nexport function uint16(bytes, value) {\n bytes.push(value & 255);\n bytes.push((value >> 8) & 255);\n};\n\nexport function int32(bytes, value) {\n bytes.push(value & 255);\n bytes.push((value >> 8) & 255);\n bytes.push((value >> 16) & 255);\n bytes.push((value >> 24) & 255);\n};\n\nexport function uint32(bytes, value) {\n const b4 = value >> 24;\n const b3 = value >> 16;\n const b2 = value >> 8;\n const b1 = value;\n bytes.push(b1 & 255);\n bytes.push(b2 & 255);\n bytes.push(b3 & 255);\n bytes.push(b4 & 255);\n};\n\nexport function int64(bytes, value) {\n const high = Math.floor(value / Math.pow(2, 32));\n const low = value >>> 0;\n uint32(bytes, low);\n uint32(bytes, high);\n};\n\nexport function uint64(bytes, value) {\n const high = (value / Math.pow(2, 32)) >> 0;\n const low = value >>> 0;\n uint32(bytes, low);\n uint32(bytes, high);\n};\n\nexport function float32(bytes, value) {\n writeFloat32(bytes, value);\n}\n\nexport function float64(bytes, value) {\n writeFloat64(bytes, value);\n}\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _int32 = new Int32Array(2);\nconst _float32 = new Float32Array(_int32.buffer);\nconst _float64 = new Float64Array(_int32.buffer);\n\nexport function writeFloat32(bytes, value) {\n _float32[0] = value;\n int32(bytes, _int32[0]);\n};\n\nexport function writeFloat64(bytes, value) {\n _float64[0] = value;\n int32(bytes, _int32[_isLittleEndian ? 0 : 1]);\n int32(bytes, _int32[_isLittleEndian ? 1 : 0]);\n};\n\nexport function boolean(bytes, value) {\n return uint8(bytes, value ? 1 : 0);\n};\n\nexport function string(bytes, value) {\n // encode `null` strings as empty.\n if (!value) { value = \"\"; }\n\n let length = utf8Length(value);\n let size = 0;\n\n // fixstr\n if (length < 0x20) {\n bytes.push(length | 0xa0);\n size = 1;\n }\n // str 8\n else if (length < 0x100) {\n bytes.push(0xd9);\n uint8(bytes, length);\n size = 2;\n }\n // str 16\n else if (length < 0x10000) {\n bytes.push(0xda);\n uint16(bytes, length);\n size = 3;\n }\n // str 32\n else if (length < 0x100000000) {\n bytes.push(0xdb);\n uint32(bytes, length);\n size = 5;\n } else {\n throw new Error('String too long');\n }\n\n utf8Write(bytes, bytes.length, value);\n\n return size + length;\n}\n\nexport function number(bytes, value) {\n if (isNaN(value)) {\n return number(bytes, 0);\n\n } else if (!isFinite(value)) {\n return number(bytes, (value > 0) ? Number.MAX_SAFE_INTEGER : -Number.MAX_SAFE_INTEGER);\n\n } else if (value !== (value|0)) {\n bytes.push(0xcb);\n writeFloat64(bytes, value);\n return 9;\n\n // TODO: encode float 32?\n // is it possible to differentiate between float32 / float64 here?\n\n // // float 32\n // bytes.push(0xca);\n // writeFloat32(bytes, value);\n // return 5;\n }\n\n if (value >= 0) {\n // positive fixnum\n if (value < 0x80) {\n uint8(bytes, value);\n return 1;\n }\n\n // uint 8\n if (value < 0x100) {\n bytes.push(0xcc);\n uint8(bytes, value);\n return 2;\n }\n\n // uint 16\n if (value < 0x10000) {\n bytes.push(0xcd);\n uint16(bytes, value);\n return 3;\n }\n\n // uint 32\n if (value < 0x100000000) {\n bytes.push(0xce);\n uint32(bytes, value);\n return 5;\n }\n\n // uint 64\n bytes.push(0xcf);\n uint64(bytes, value);\n return 9;\n\n } else {\n\n // negative fixnum\n if (value >= -0x20) {\n bytes.push(0xe0 | (value + 0x20));\n return 1;\n }\n\n // int 8\n if (value >= -0x80) {\n bytes.push(0xd0);\n int8(bytes, value);\n return 2;\n }\n\n // int 16\n if (value >= -0x8000) {\n bytes.push(0xd1);\n int16(bytes, value);\n return 3;\n }\n\n // int 32\n if (value >= -0x80000000) {\n bytes.push(0xd2);\n int32(bytes, value);\n return 5;\n }\n\n // int 64\n bytes.push(0xd3);\n int64(bytes, value);\n return 9;\n }\n}","/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\nimport { SWITCH_TO_STRUCTURE } from \"../spec\";\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\nexport interface Iterator { offset: number; }\n\nfunction utf8Read(bytes, offset, length) {\n var string = '', chr = 0;\n for (var i = offset, end = offset + length; i < end; i++) {\n var byte = bytes[i];\n if ((byte & 0x80) === 0x00) {\n string += String.fromCharCode(byte);\n continue;\n }\n if ((byte & 0xe0) === 0xc0) {\n string += String.fromCharCode(\n ((byte & 0x1f) << 6) |\n (bytes[++i] & 0x3f)\n );\n continue;\n }\n if ((byte & 0xf0) === 0xe0) {\n string += String.fromCharCode(\n ((byte & 0x0f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0)\n );\n continue;\n }\n if ((byte & 0xf8) === 0xf0) {\n chr = ((byte & 0x07) << 18) |\n ((bytes[++i] & 0x3f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0);\n if (chr >= 0x010000) { // surrogate pair\n chr -= 0x010000;\n string += String.fromCharCode((chr >>> 10) + 0xD800, (chr & 0x3FF) + 0xDC00);\n } else {\n string += String.fromCharCode(chr);\n }\n continue;\n }\n\n console.error('Invalid byte ' + byte.toString(16));\n // (do not throw error to avoid server/client from crashing due to hack attemps)\n // throw new Error('Invalid byte ' + byte.toString(16));\n }\n return string;\n}\n\nexport function int8 (bytes: number[], it: Iterator) {\n return uint8(bytes, it) << 24 >> 24;\n};\n\nexport function uint8 (bytes: number[], it: Iterator) {\n return bytes[it.offset++];\n};\n\nexport function int16 (bytes: number[], it: Iterator) {\n return uint16(bytes, it) << 16 >> 16;\n};\n\nexport function uint16 (bytes: number[], it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8;\n};\n\nexport function int32 (bytes: number[], it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8 | bytes[it.offset++] << 16 | bytes[it.offset++] << 24;\n};\n\nexport function uint32 (bytes: number[], it: Iterator) {\n return int32(bytes, it) >>> 0;\n};\n\nexport function float32(bytes: number[], it: Iterator) {\n return readFloat32(bytes, it);\n}\n\nexport function float64(bytes: number[], it: Iterator) {\n return readFloat64(bytes, it);\n}\n\nexport function int64(bytes: number[], it: Iterator) {\n const low = uint32(bytes, it);\n const high = int32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\nexport function uint64(bytes: number[], it: Iterator) {\n const low = uint32(bytes, it);\n const high = uint32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _int32 = new Int32Array(2);\nconst _float32 = new Float32Array(_int32.buffer);\nconst _float64 = new Float64Array(_int32.buffer);\n\nexport function readFloat32 (bytes: number[], it: Iterator) {\n _int32[0] = int32(bytes, it);\n return _float32[0];\n};\n\nexport function readFloat64 (bytes: number[], it: Iterator) {\n _int32[_isLittleEndian ? 0 : 1] = int32(bytes, it);\n _int32[_isLittleEndian ? 1 : 0] = int32(bytes, it);\n return _float64[0];\n};\n\nexport function boolean (bytes: number[], it: Iterator) {\n return uint8(bytes, it) > 0;\n};\n\nexport function string (bytes, it: Iterator) {\n const prefix = bytes[it.offset++];\n let length: number;\n\n if (prefix < 0xc0) {\n // fixstr\n length = prefix & 0x1f;\n\n } else if (prefix === 0xd9) {\n length = uint8(bytes, it);\n\n } else if (prefix === 0xda) {\n length = uint16(bytes, it);\n\n } else if (prefix === 0xdb) {\n length = uint32(bytes, it);\n }\n\n const value = utf8Read(bytes, it.offset, length);\n it.offset += length;\n\n return value;\n}\n\nexport function stringCheck(bytes, it: Iterator) {\n const prefix = bytes[it.offset];\n return (\n // fixstr\n (prefix < 0xc0 && prefix > 0xa0) ||\n // str 8\n prefix === 0xd9 ||\n // str 16\n prefix === 0xda ||\n // str 32\n prefix === 0xdb\n );\n}\n\nexport function number (bytes, it: Iterator) {\n const prefix = bytes[it.offset++];\n\n if (prefix < 0x80) {\n // positive fixint\n return prefix;\n\n } else if (prefix === 0xca) {\n // float 32\n return readFloat32(bytes, it);\n\n } else if (prefix === 0xcb) {\n // float 64\n return readFloat64(bytes, it);\n\n } else if (prefix === 0xcc) {\n // uint 8\n return uint8(bytes, it);\n\n } else if (prefix === 0xcd) {\n // uint 16\n return uint16(bytes, it);\n\n } else if (prefix === 0xce) {\n // uint 32\n return uint32(bytes, it);\n\n } else if (prefix === 0xcf) {\n // uint 64\n return uint64(bytes, it);\n\n } else if (prefix === 0xd0) {\n // int 8\n return int8(bytes, it);\n\n } else if (prefix === 0xd1) {\n // int 16\n return int16(bytes, it);\n\n } else if (prefix === 0xd2) {\n // int 32\n return int32(bytes, it);\n\n } else if (prefix === 0xd3) {\n // int 64\n return int64(bytes, it);\n\n } else if (prefix > 0xdf) {\n // negative fixint\n return (0xff - prefix + 1) * -1\n }\n};\n\nexport function numberCheck (bytes, it: Iterator) {\n const prefix = bytes[it.offset];\n // positive fixint - 0x00 - 0x7f\n // float 32 - 0xca\n // float 64 - 0xcb\n // uint 8 - 0xcc\n // uint 16 - 0xcd\n // uint 32 - 0xce\n // uint 64 - 0xcf\n // int 8 - 0xd0\n // int 16 - 0xd1\n // int 32 - 0xd2\n // int 64 - 0xd3\n return (\n prefix < 0x80 ||\n (prefix >= 0xca && prefix <= 0xd3)\n );\n}\n\nexport function arrayCheck (bytes, it: Iterator) {\n return bytes[it.offset] < 0xa0;\n\n // const prefix = bytes[it.offset] ;\n\n // if (prefix < 0xa0) {\n // return prefix;\n\n // // array\n // } else if (prefix === 0xdc) {\n // it.offset += 2;\n\n // } else if (0xdd) {\n // it.offset += 4;\n // }\n\n // return prefix;\n}\n\nexport function switchStructureCheck(bytes, it: Iterator) {\n return (\n // previous byte should be `SWITCH_TO_STRUCTURE`\n bytes[it.offset - 1] === SWITCH_TO_STRUCTURE &&\n // next byte should be a number\n (bytes[it.offset] < 0x80 || (bytes[it.offset] >= 0xca && bytes[it.offset] <= 0xd3))\n );\n}","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\n\ntype K = number; // TODO: allow to specify K generic on MapSchema.\n\nexport class CollectionSchema<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['collection'] !== 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 // 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 at(index: number): V | undefined {\n const key = Array.from(this.$items.keys())[index];\n return this.$items.get(key);\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: K;\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 return Array.from(this.$items.values()).some((v) => v === value);\n }\n\n forEach(callbackfn: (value: V, key: K, collection: CollectionSchema<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): CollectionSchema<V> {\n let cloned: CollectionSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new CollectionSchema(), this);\n\n } else {\n // server-side\n cloned = new CollectionSchema();\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}\n","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 // 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(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}","/**\n * Extracted from https://www.npmjs.com/package/strong-events\n */\n\ntype ExtractFunctionParameters<T extends (...args: any[]) => any> = T extends (...args: infer P) => any ? P : never;\n\nexport class EventEmitter_<CallbackSignature extends (...args: any[]) => any> {\n handlers: Array<CallbackSignature> = [];\n\n register(cb: CallbackSignature, once: boolean = false) {\n this.handlers.push(cb);\n return this;\n }\n\n invoke(...args: ExtractFunctionParameters<CallbackSignature>) {\n this.handlers.forEach((handler) => handler(...args));\n }\n\n invokeAsync(...args: ExtractFunctionParameters<CallbackSignature>) {\n return Promise.all(this.handlers.map((handler) => handler(...args)));\n }\n\n remove (cb: CallbackSignature) {\n const index = this.handlers.indexOf(cb);\n this.handlers[index] = this.handlers[this.handlers.length - 1];\n this.handlers.pop();\n }\n\n clear() {\n this.handlers = [];\n }\n}\n","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { ClientWithSessionId } from \"../annotations\";\n\nexport class ClientState {\n refIds = new WeakSet<ChangeTree>();\n containerIndexes = new WeakMap<ChangeTree, Set<number>>();\n // containerIndexes = new Map<ChangeTree, Set<number>>();\n\n addRefId(changeTree: ChangeTree) {\n if (!this.refIds.has(changeTree)) {\n this.refIds.add(changeTree);\n this.containerIndexes.set(changeTree, new Set());\n }\n }\n\n static get(client: ClientWithSessionId) {\n if (client.$filterState === undefined) {\n client.$filterState = new ClientState();\n }\n\n return client.$filterState as ClientState;\n }\n}\n","import { SWITCH_TO_STRUCTURE, TYPE_ID, OPERATION } from './spec';\nimport { ClientWithSessionId, PrimitiveType, Context, SchemaDefinition, DefinitionType } from \"./annotations\";\n\nimport * as encode from \"./encoding/encode\";\nimport * as decode from \"./encoding/decode\";\nimport type { Iterator } from \"./encoding/decode\"; // dts-bundle-generator\n\nimport { ArraySchema } from \"./types/ArraySchema\";\nimport { MapSchema } from \"./types/MapSchema\";\nimport { CollectionSchema } from './types/CollectionSchema';\nimport { SetSchema } from './types/SetSchema';\n\nimport { ChangeTree, Root, Ref, ChangeOperation } from \"./changes/ChangeTree\";\nimport { NonFunctionPropNames } from './types/HelperTypes';\nimport { EventEmitter_ } from './events/EventEmitter';\nimport { ClientState } from './filters';\nimport { getType } from './types';\n\nexport interface DataChange<T=any> {\n op: OPERATION,\n field: string;\n dynamicIndex?: number | string;\n value: T;\n previousValue: T;\n}\n\nexport interface SchemaDecoderCallbacks {\n onAdd?: (item: any, key: any) => void;\n onRemove?: (item: any, key: any) => void;\n onChange?: (item: any, key: any) => void;\n clone(decoding?: boolean): SchemaDecoderCallbacks;\n clear(decoding?: boolean);\n decode?(byte, it: Iterator);\n}\n\nclass EncodeSchemaError extends Error {}\n\nfunction assertType(value: any, type: string, klass: Schema, field: string | number) {\n let typeofTarget: string;\n let allowNull: boolean = false;\n\n switch (type) {\n case \"number\":\n case \"int8\":\n case \"uint8\":\n case \"int16\":\n case \"uint16\":\n case \"int32\":\n case \"uint32\":\n case \"int64\":\n case \"uint64\":\n case \"float32\":\n case \"float64\":\n typeofTarget = \"number\";\n if (isNaN(value)) {\n console.log(`trying to encode \"NaN\" in ${klass.constructor.name}#${field}`);\n }\n break;\n case \"string\":\n typeofTarget = \"string\";\n allowNull = true;\n break;\n case \"boolean\":\n // boolean is always encoded as true/false based on truthiness\n return;\n }\n\n if (typeof (value) !== typeofTarget && (!allowNull || (allowNull && value !== null))) {\n let foundValue = `'${JSON.stringify(value)}'${(value && value.constructor && ` (${value.constructor.name})`) || ''}`;\n throw new EncodeSchemaError(`a '${typeofTarget}' was expected, but ${foundValue} was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nfunction assertInstanceType(\n value: Schema,\n type: typeof Schema\n | typeof ArraySchema\n | typeof MapSchema\n | typeof CollectionSchema\n | typeof SetSchema,\n klass: Schema,\n field: string | number,\n) {\n if (!(value instanceof type)) {\n throw new EncodeSchemaError(`a '${type.name}' was expected, but '${(value as any).constructor.name}' was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nfunction encodePrimitiveType(\n type: PrimitiveType,\n bytes: number[],\n value: any,\n klass: Schema,\n field: string | number,\n) {\n assertType(value, type as string, klass, field);\n\n const encodeFunc = encode[type as string];\n\n if (encodeFunc) {\n encodeFunc(bytes, value);\n\n } else {\n throw new EncodeSchemaError(`a '${type}' was expected, but ${value} was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nfunction decodePrimitiveType (type: string, bytes: number[], it: Iterator) {\n return decode[type as string](bytes, it);\n}\n\n/**\n * Schema encoder / decoder\n */\nexport abstract class Schema {\n static _typeid: number;\n static _context: Context;\n\n static _definition: SchemaDefinition = SchemaDefinition.create();\n\n static onError(e) {\n console.error(e);\n }\n\n static is(type: DefinitionType) {\n return (\n type['_definition'] &&\n type['_definition'].schema !== undefined\n );\n }\n\n protected $changes: ChangeTree;\n // protected $root: ChangeSet;\n\n // TODO: refactor. this feature needs to be ported to other languages with potentially different API\n protected $listeners: { [field: string]: EventEmitter_<(a: any, b: any) => void> };\n\n public onChange?(changes: DataChange[]);\n public onRemove?();\n\n // allow inherited classes to have a constructor\n constructor(...args: any[]) {\n // fix enumerability of fields for end-user\n Object.defineProperties(this, {\n $changes: {\n value: new ChangeTree(this, undefined, new Root()),\n enumerable: false,\n writable: true\n },\n\n $listeners: {\n value: {},\n enumerable: false,\n writable: true\n },\n });\n\n const descriptors = this._definition.descriptors;\n if (descriptors) {\n Object.defineProperties(this, descriptors);\n }\n\n //\n // Assign initial values\n //\n if (args[0]) {\n this.assign(args[0]);\n }\n }\n\n public assign(\n props: { [prop in NonFunctionPropNames<this>]?: this[prop] }\n ) {\n Object.assign(this, props);\n return this;\n }\n\n protected get _definition () { return (this.constructor as typeof Schema)._definition; }\n\n public listen <K extends NonFunctionPropNames<this>>(attr: K, callback: (value: this[K], previousValue: this[K]) => void) {\n if (!this.$listeners[attr as string]) {\n this.$listeners[attr as string] = new EventEmitter_();\n }\n this.$listeners[attr as string].register(callback);\n\n // return un-register callback.\n return () =>\n this.$listeners[attr as string].remove(callback);\n }\n\n decode(\n bytes: number[],\n it: Iterator = { offset: 0 },\n ref: Ref = this,\n allChanges: Map<number, DataChange[]> = new Map<number, DataChange[]>(),\n ) {\n const $root = this.$changes.root;\n const totalBytes = bytes.length;\n\n let refId: number = 0;\n let changes: DataChange[] = [];\n\n $root.refs.set(refId, this);\n allChanges.set(refId, changes);\n\n while (it.offset < totalBytes) {\n let byte = bytes[it.offset++];\n\n if (byte == SWITCH_TO_STRUCTURE) {\n refId = decode.number(bytes, it);\n\n const nextRef = $root.refs.get(refId) as Schema;\n\n //\n // Trying to access a reference that haven't been decoded yet.\n //\n if (!nextRef) { throw new Error(`\"refId\" not found: ${refId}`); }\n\n ref = nextRef;\n\n // create empty list of changes for this refId.\n changes = [];\n allChanges.set(refId, changes);\n\n continue;\n }\n\n const changeTree: ChangeTree = ref['$changes'];\n const isSchema = (ref['_definition'] !== undefined);\n\n const operation = (isSchema)\n ? (byte >> 6) << 6 // \"compressed\" index + operation\n : byte; // \"uncompressed\" index + operation (array/map items)\n\n if (operation === OPERATION.CLEAR) {\n //\n // TODO: refactor me!\n // The `.clear()` method is calling `$root.removeRef(refId)` for\n // each item inside this collection\n //\n (ref as SchemaDecoderCallbacks).clear(true);\n continue;\n }\n\n const fieldIndex = (isSchema)\n ? byte % (operation || 255) // if \"REPLACE\" operation (0), use 255\n : decode.number(bytes, it);\n\n const fieldName = (isSchema)\n ? (ref['_definition'].fieldsByIndex[fieldIndex])\n : \"\";\n\n let type = changeTree.getType(fieldIndex);\n let value: any;\n let previousValue: any;\n\n let dynamicIndex: number | string;\n\n if (!isSchema) {\n previousValue = ref['getByIndex'](fieldIndex);\n\n if ((operation & OPERATION.ADD) === OPERATION.ADD) { // ADD or DELETE_AND_ADD\n dynamicIndex = (ref instanceof MapSchema)\n ? decode.string(bytes, it)\n : fieldIndex;\n ref['setIndex'](fieldIndex, dynamicIndex);\n\n } else {\n // here\n dynamicIndex = ref['getIndex'](fieldIndex);\n }\n\n } else {\n previousValue = ref[`_${fieldName}`];\n }\n\n //\n // Delete operations\n //\n if ((operation & OPERATION.DELETE) === OPERATION.DELETE)\n {\n if (operation !== OPERATION.DELETE_AND_ADD) {\n ref['deleteByIndex'](fieldIndex);\n }\n\n // Flag `refId` for garbage collection.\n if (previousValue && previousValue['$changes']) {\n $root.removeRef(previousValue['$changes'].refId);\n }\n\n value = null;\n }\n\n if (fieldName === undefined) {\n console.warn(\"@colyseus/schema: definition mismatch\");\n\n //\n // keep skipping next bytes until reaches a known structure\n // by local decoder.\n //\n const nextIterator: Iterator = { offset: it.offset };\n while (it.offset < totalBytes) {\n if (decode.switchStructureCheck(bytes, it)) {\n nextIterator.offset = it.offset + 1;\n if ($root.refs.has(decode.number(bytes, nextIterator))) {\n break;\n }\n }\n\n it.offset++;\n }\n\n continue;\n\n } else if (operation === OPERATION.DELETE) {\n //\n // FIXME: refactor me.\n // Don't do anything.\n //\n\n } else if (Schema.is(type)) {\n const refId = decode.number(bytes, it);\n value = $root.refs.get(refId);\n\n if (operation !== OPERATION.REPLACE) {\n const childType = this.getSchemaType(bytes, it, type);\n\n if (!value) {\n value = this.createTypeInstance(childType);\n value.$changes.refId = refId;\n\n if (previousValue) {\n value.onChange = previousValue.onChange;\n value.onRemove = previousValue.onRemove;\n value.$listeners = previousValue.$listeners;\n\n if (\n previousValue['$changes'].refId &&\n refId !== previousValue['$changes'].refId\n ) {\n $root.removeRef(previousValue['$changes'].refId);\n }\n }\n }\n\n $root.addRef(refId, value, (value !== previousValue));\n }\n } else if (typeof(type) === \"string\") {\n //\n // primitive value (number, string, boolean, etc)\n //\n value = decodePrimitiveType(type as string, bytes, it);\n\n } else {\n const typeDef = getType(Object.keys(type)[0]);\n const refId = decode.number(bytes, it);\n\n const valueRef: SchemaDecoderCallbacks = ($root.refs.has(refId))\n ? previousValue || $root.refs.get(refId)\n : new typeDef.constructor();\n\n value = valueRef.clone(true);\n value.$changes.refId = refId;\n\n // preserve schema callbacks\n if (previousValue) {\n value.onAdd = previousValue.onAdd;\n value.onRemove = previousValue.onRemove;\n value.onChange = previousValue.onChange;\n\n if (\n previousValue['$changes'].refId &&\n refId !== previousValue['$changes'].refId\n ) {\n $root.removeRef(previousValue['$changes'].refId);\n\n //\n // Trigger onRemove if structure has been replaced.\n //\n const deletes: DataChange[] = [];\n const entries: IterableIterator<[any, any]> = previousValue.entries();\n let iter: IteratorResult<[any, any]>;\n while ((iter = entries.next()) && !iter.done) {\n const [key, value] = iter.value;\n deletes.push({\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: value,\n });\n }\n\n allChanges.set(previousValue['$changes'].refId, deletes);\n }\n }\n\n $root.addRef(refId, value, (valueRef !== previousValue));\n\n //\n // TODO: deprecate proxies on next version.\n // get proxy to target value.\n //\n if (typeDef.getProxy) {\n value = typeDef.getProxy(value);\n }\n }\n\n let hasChange = (previousValue !== value);\n\n if (\n value !== null &&\n value !== undefined\n ) {\n if (value['$changes']) {\n value['$changes'].setParent(\n changeTree.ref,\n changeTree.root,\n fieldIndex,\n );\n }\n\n if (ref instanceof Schema) {\n ref[fieldName] = value;\n\n //\n // FIXME: use `_field` instead of `field`.\n //\n // `field` is going to use the setter of the PropertyDescriptor\n // and create a proxy for array/map. This is only useful for\n // backwards-compatibility with @colyseus/schema@0.5.x\n //\n // // ref[_field] = value;\n\n } else if (ref instanceof MapSchema) {\n // const key = ref['$indexes'].get(field);\n const key = dynamicIndex as string;\n\n // ref.set(key, value);\n ref['$items'].set(key, value);\n\n } else if (ref instanceof ArraySchema) {\n // const key = ref['$indexes'][field];\n // console.log(\"SETTING FOR ArraySchema =>\", { field, key, value });\n // ref[key] = value;\n ref.setAt(fieldIndex, value);\n\n } else if (ref instanceof CollectionSchema) {\n const index = ref.add(value);\n ref['setIndex'](fieldIndex, index);\n\n } else if (ref instanceof SetSchema) {\n const index = ref.add(value);\n if (index !== false) {\n ref['setIndex'](fieldIndex, index);\n }\n }\n }\n\n if (\n hasChange\n // &&\n // (\n // this.onChange || ref.$listeners[field]\n // )\n ) {\n changes.push({\n op: operation,\n field: fieldName,\n dynamicIndex,\n value,\n previousValue,\n });\n }\n }\n\n this._triggerChanges(allChanges);\n\n // drop references of unused schemas\n $root.garbageCollectDeletedRefs();\n\n return allChanges;\n }\n\n encode(\n encodeAll = false,\n bytes: number[] = [],\n useFilters: boolean = false,\n ) {\n const rootChangeTree = this.$changes;\n const refIdsVisited = new WeakSet<ChangeTree>();\n\n const changeTrees: ChangeTree[] = [rootChangeTree];\n let numChangeTrees = 1;\n\n for (let i = 0; i < numChangeTrees; i++) {\n const changeTree = changeTrees[i];\n const ref = changeTree.ref;\n const isSchema = (ref instanceof Schema);\n\n // Generate unique refId for the ChangeTree.\n changeTree.ensureRefId();\n\n // mark this ChangeTree as visited.\n refIdsVisited.add(changeTree);\n\n // root `refId` is skipped.\n if (\n changeTree !== rootChangeTree &&\n (changeTree.changed || encodeAll)\n ) {\n encode.uint8(bytes, SWITCH_TO_STRUCTURE);\n encode.number(bytes, changeTree.refId);\n }\n\n const changes: ChangeOperation[] | number[] = (encodeAll)\n ? Array.from(changeTree.allChanges)\n : Array.from(changeTree.changes.values());\n\n for (let j = 0, cl = changes.length; j < cl; j++) {\n const operation: ChangeOperation = (encodeAll)\n ? { op: OPERATION.ADD, index: changes[j] as number }\n : changes[j] as ChangeOperation;\n\n const fieldIndex = operation.index;\n\n const field = (isSchema)\n ? ref['_definition'].fieldsByIndex && ref['_definition'].fieldsByIndex[fieldIndex]\n : fieldIndex;\n\n // cache begin index if `useFilters`\n const beginIndex = bytes.length;\n\n // encode field index + operation\n if (operation.op !== OPERATION.TOUCH) {\n if (isSchema) {\n //\n // Compress `fieldIndex` + `operation` into a single byte.\n // This adds a limitaion of 64 fields per Schema structure\n //\n encode.uint8(bytes, (fieldIndex | operation.op));\n\n } else {\n encode.uint8(bytes, operation.op);\n\n // custom operations\n if (operation.op === OPERATION.CLEAR) {\n continue;\n }\n\n // indexed operations\n encode.number(bytes, fieldIndex);\n }\n }\n\n //\n // encode \"alias\" for dynamic fields (maps)\n //\n if (\n !isSchema &&\n (operation.op & OPERATION.ADD) == OPERATION.ADD // ADD or DELETE_AND_ADD\n ) {\n if (ref instanceof MapSchema) {\n //\n // MapSchema dynamic key\n //\n const dynamicIndex = changeTree.ref['$indexes'].get(fieldIndex);\n encode.string(bytes, dynamicIndex);\n }\n }\n\n if (operation.op === OPERATION.DELETE) {\n //\n // TODO: delete from filter cache data.\n //\n // if (useFilters) {\n // delete changeTree.caches[fieldIndex];\n // }\n continue;\n }\n\n // const type = changeTree.childType || ref._schema[field];\n const type = changeTree.getType(fieldIndex);\n\n // const type = changeTree.getType(fieldIndex);\n const value = changeTree.getValue(fieldIndex);\n\n // Enqueue ChangeTree to be visited\n if (\n value &&\n value['$changes'] &&\n !refIdsVisited.has(value['$changes'])\n ) {\n changeTrees.push(value['$changes']);\n value['$changes'].ensureRefId();\n numChangeTrees++;\n }\n\n if (operation.op === OPERATION.TOUCH) {\n continue;\n }\n\n if (Schema.is(type)) {\n assertInstanceType(value, type as typeof Schema, ref as Schema, field);\n\n //\n // Encode refId for this instance.\n // The actual instance is going to be encoded on next `changeTree` iteration.\n //\n encode.number(bytes, value.$changes.refId);\n\n // Try to encode inherited TYPE_ID if it's an ADD operation.\n if ((operation.op & OPERATION.ADD) === OPERATION.ADD) {\n this.tryEncodeTypeId(bytes, type as typeof Schema, value.constructor as typeof Schema);\n }\n\n } else if (typeof(type) === \"string\") {\n //\n // Primitive values\n //\n encodePrimitiveType(type as PrimitiveType, bytes, value, ref as Schema, field);\n\n } else {\n //\n // Custom type (MapSchema, ArraySchema, etc)\n //\n const definition = getType(Object.keys(type)[0]);\n\n //\n // ensure a ArraySchema has been provided\n //\n assertInstanceType(ref[`_${field}`], definition.constructor, ref as Schema, field);\n\n //\n // Encode refId for this instance.\n // The actual instance is going to be encoded on next `changeTree` iteration.\n //\n encode.number(bytes, value.$changes.refId);\n }\n\n if (useFilters) {\n // cache begin / end index\n changeTree.cache(fieldIndex as number, bytes.slice(beginIndex));\n }\n }\n\n if (!encodeAll && !useFilters) {\n changeTree.discard();\n }\n }\n\n return bytes;\n }\n\n encodeAll (useFilters?: boolean) {\n return this.encode(true, [], useFilters);\n }\n\n applyFilters(client: ClientWithSessionId, encodeAll: boolean = false) {\n const root = this;\n const refIdsDissallowed = new Set<number>();\n\n const $filterState = ClientState.get(client);\n\n const changeTrees = [this.$changes];\n let numChangeTrees = 1;\n\n let filteredBytes: number[] = [];\n\n for (let i = 0; i < numChangeTrees; i++) {\n const changeTree = changeTrees[i];\n\n if (refIdsDissallowed.has(changeTree.refId)) {\n // console.log(\"REFID IS NOT ALLOWED. SKIP.\", { refId: changeTree.refId })\n continue;\n }\n\n const ref = changeTree.ref as Ref;\n const isSchema: boolean = ref instanceof Schema;\n\n encode.uint8(filteredBytes, SWITCH_TO_STRUCTURE);\n encode.number(filteredBytes, changeTree.refId);\n\n const clientHasRefId = $filterState.refIds.has(changeTree);\n const isEncodeAll = (encodeAll || !clientHasRefId);\n\n // console.log(\"REF:\", ref.constructor.name);\n // console.log(\"Encode all?\", isEncodeAll);\n\n //\n // include `changeTree` on list of known refIds by this client.\n //\n $filterState.addRefId(changeTree);\n\n const containerIndexes = $filterState.containerIndexes.get(changeTree)\n const changes = (isEncodeAll)\n ? Array.from(changeTree.allChanges)\n : Array.from(changeTree.changes.values());\n\n //\n // WORKAROUND: tries to re-evaluate previously not included @filter() attributes\n // - see \"DELETE a field of Schema\" test case.\n //\n if (\n !encodeAll &&\n isSchema &&\n (ref as Schema)._definition.indexesWithFilters\n ) {\n const indexesWithFilters = (ref as Schema)._definition.indexesWithFilters;\n indexesWithFilters.forEach(indexWithFilter => {\n if (\n !containerIndexes.has(indexWithFilter) &&\n changeTree.allChanges.has(indexWithFilter)\n ) {\n if (isEncodeAll) {\n changes.push(indexWithFilter as any);\n\n } else {\n changes.push({ op: OPERATION.ADD, index: indexWithFilter, } as any);\n }\n }\n });\n }\n\n for (let j = 0, cl = changes.length; j < cl; j++) {\n const change: ChangeOperation = (isEncodeAll)\n ? { op: OPERATION.ADD, index: changes[j] as number }\n : changes[j] as ChangeOperation;\n\n // custom operations\n if (change.op === OPERATION.CLEAR) {\n encode.uint8(filteredBytes, change.op);\n continue;\n }\n\n const fieldIndex = change.index;\n\n //\n // Deleting fields: encode the operation + field index\n //\n if (change.op === OPERATION.DELETE) {\n //\n // DELETE operations also need to go through filtering.\n //\n // TODO: cache the previous value so we can access the value (primitive or `refId`)\n // (check against `$filterState.refIds`)\n //\n\n if (isSchema) {\n encode.uint8(filteredBytes, change.op | fieldIndex);\n\n } else {\n encode.uint8(filteredBytes, change.op);\n encode.number(filteredBytes, fieldIndex);\n\n }\n continue;\n }\n\n // indexed operation\n const value = changeTree.getValue(fieldIndex);\n const type = changeTree.getType(fieldIndex);\n\n if (isSchema) {\n // Is a Schema!\n const filter = (\n (ref as Schema)._definition.filters &&\n (ref as Schema)._definition.filters[fieldIndex]\n );\n\n if (filter && !filter.call(ref, client, value, root)) {\n if (value && value['$changes']) {\n refIdsDissallowed.add(value['$changes'].refId);;\n }\n continue;\n }\n\n } else {\n // Is a collection! (map, array, etc.)\n const parent = changeTree.parent as Ref;\n const filter = changeTree.getChildrenFilter();\n\n if (filter && !filter.call(parent, client, ref['$indexes'].get(fieldIndex), value, root)) {\n if (value && value['$changes']) {\n refIdsDissallowed.add(value['$changes'].refId);\n }\n continue;\n }\n }\n\n // visit child ChangeTree on further iteration.\n if (value['$changes']) {\n changeTrees.push(value['$changes']);\n numChangeTrees++;\n }\n\n //\n // Copy cached bytes\n //\n if (change.op !== OPERATION.TOUCH) {\n\n //\n // TODO: refactor me!\n //\n\n if (change.op === OPERATION.ADD || isSchema) {\n //\n // use cached bytes directly if is from Schema type.\n //\n filteredBytes.push.apply(filteredBytes, changeTree.caches[fieldIndex] ?? []);\n containerIndexes.add(fieldIndex);\n\n } else {\n if (containerIndexes.has(fieldIndex)) {\n //\n // use cached bytes if already has the field\n //\n filteredBytes.push.apply(filteredBytes, changeTree.caches[fieldIndex] ?? []);\n\n } else {\n //\n // force ADD operation if field is not known by this client.\n //\n containerIndexes.add(fieldIndex);\n\n encode.uint8(filteredBytes, OPERATION.ADD);\n encode.number(filteredBytes, fieldIndex);\n\n if (ref instanceof MapSchema) {\n //\n // MapSchema dynamic key\n //\n const dynamicIndex = changeTree.ref['$indexes'].get(fieldIndex);\n encode.string(filteredBytes, dynamicIndex);\n }\n\n if (value['$changes']) {\n encode.number(filteredBytes, value['$changes'].refId);\n\n } else {\n // \"encodePrimitiveType\" without type checking.\n // the type checking has been done on the first .encode() call.\n encode[type as string](filteredBytes, value);\n }\n }\n }\n\n } else if (value['$changes'] && !isSchema) {\n //\n // TODO:\n // - track ADD/REPLACE/DELETE instances on `$filterState`\n // - do NOT always encode dynamicIndex for MapSchema.\n // (If client already has that key, only the first index is necessary.)\n //\n\n encode.uint8(filteredBytes, OPERATION.ADD);\n encode.number(filteredBytes, fieldIndex);\n\n if (ref instanceof MapSchema) {\n //\n // MapSchema dynamic key\n //\n const dynamicIndex = changeTree.ref['$indexes'].get(fieldIndex);\n encode.string(filteredBytes, dynamicIndex);\n }\n\n encode.number(filteredBytes, value['$changes'].refId);\n }\n\n };\n }\n\n return filteredBytes;\n }\n\n clone (): this {\n const cloned = new ((this as any).constructor);\n const schema = this._definition.schema;\n for (let field in schema) {\n if (\n typeof (this[field]) === \"object\" &&\n typeof (this[field].clone) === \"function\"\n ) {\n // deep clone\n cloned[field] = this[field].clone();\n\n } else {\n // primitive values\n cloned[field] = this[field];\n }\n }\n return cloned;\n }\n\n triggerAll() {\n // skip if haven't received any remote refs yet.\n if (this.$changes.root.refs.size === 0) { return; }\n\n const allChanges = new Map<number, DataChange[]>();\n Schema.prototype._triggerAllFillChanges.call(this, this, allChanges);\n\n try {\n Schema.prototype._triggerChanges.call(this, allChanges);\n\n } catch (e) {\n Schema.onError(e);\n }\n }\n\n toJSON () {\n const schema = this._definition.schema;\n const deprecated = this._definition.deprecated;\n\n const obj = {}\n for (let field in schema) {\n if (!deprecated[field] && this[field] !== null && typeof (this[field]) !== \"undefined\") {\n obj[field] = (typeof (this[field]['toJSON']) === \"function\")\n ? this[field]['toJSON']()\n : this[`_${field}`];\n }\n }\n return obj;\n }\n\n discardAllChanges() {\n this.$changes.discardAll();\n }\n\n protected getByIndex(index: number) {\n return this[this._definition.fieldsByIndex[index]];\n }\n\n protected deleteByIndex(index: number) {\n this[this._definition.fieldsByIndex[index]] = undefined;\n }\n\n private tryEncodeTypeId (bytes: number[], type: typeof Schema, targetType: typeof Schema) {\n if (type._typeid !== targetType._typeid) {\n encode.uint8(bytes, TYPE_ID);\n encode.number(bytes, targetType._typeid);\n }\n }\n\n private getSchemaType(bytes: number[], it: Iterator, defaultType: typeof Schema): typeof Schema {\n let type: typeof Schema;\n\n if (bytes[it.offset] === TYPE_ID) {\n it.offset++;\n type = (this.constructor as typeof Schema)._context.get(decode.number(bytes, it));\n }\n\n return type || defaultType;\n }\n\n private createTypeInstance (type: typeof Schema): Schema {\n let instance: Schema = new (type as any)();\n\n // assign root on $changes\n instance.$changes.root = this.$changes.root;\n\n return instance;\n }\n\n private _triggerAllFillChanges(ref: Ref, allChanges: Map<number, DataChange[]>) {\n if (allChanges.has(ref['$changes'].refId)) { return; }\n\n const changes: DataChange[] = [];\n allChanges.set(ref['$changes'].refId || 0, changes);\n\n if (ref instanceof Schema) {\n const schema = ref._definition.schema;\n\n for (let fieldName in schema) {\n const _field = `_${fieldName}`;\n const value = ref[_field];\n\n if (value !== undefined) {\n changes.push({\n op: OPERATION.ADD,\n field: fieldName,\n value,\n previousValue: undefined\n });\n\n if (value['$changes'] !== undefined) {\n Schema.prototype._triggerAllFillChanges.call(this, value, allChanges);\n }\n\n }\n }\n\n } else {\n const entries: IterableIterator<[any, any]> = ref.entries();\n let iter: IteratorResult<[any, any]>;\n\n while ((iter = entries.next()) && !iter.done) {\n const [key, value] = iter.value;\n\n changes.push({\n op: OPERATION.ADD,\n field: key,\n dynamicIndex: key,\n value: value,\n previousValue: undefined,\n });\n\n if (value['$changes'] !== undefined) {\n Schema.prototype._triggerAllFillChanges.call(this, value, allChanges);\n }\n }\n }\n }\n\n private _triggerChanges(allChanges: Map<number, DataChange[]>) {\n allChanges.forEach((changes, refId) => {\n if (changes.length > 0) {\n const ref = this.$changes.root.refs.get(refId);\n const isSchema = ref instanceof Schema;\n\n for (let i = 0; i < changes.length; i++) {\n const change = changes[i];\n const listener = ref['$listeners'] && ref['$listeners'][change.field];\n\n if (!isSchema) {\n if (change.op === OPERATION.ADD && change.previousValue === undefined) {\n (ref as SchemaDecoderCallbacks).onAdd?.(change.value, change.dynamicIndex ?? change.field);\n\n } else if (change.op === OPERATION.DELETE) {\n //\n // FIXME: `previousValue` should always be avaiiable.\n // ADD + DELETE operations are still encoding DELETE operation.\n //\n if (change.previousValue !== undefined) {\n (ref as SchemaDecoderCallbacks).onRemove?.(change.previousValue, change.dynamicIndex ?? change.field);\n }\n\n } else if (change.op === OPERATION.DELETE_AND_ADD) {\n if (change.previousValue !== undefined) {\n (ref as SchemaDecoderCallbacks).onRemove?.(change.previousValue, change.dynamicIndex);\n }\n (ref as SchemaDecoderCallbacks).onAdd?.(change.value, change.dynamicIndex);\n\n } else if (\n change.op === OPERATION.REPLACE ||\n change.value !== change.previousValue\n ) {\n (ref as SchemaDecoderCallbacks).onChange?.(change.value, change.dynamicIndex);\n }\n }\n\n //\n // trigger onRemove on child structure.\n //\n if (\n (change.op & OPERATION.DELETE) === OPERATION.DELETE &&\n change.previousValue instanceof Schema &&\n change.previousValue.onRemove\n ) {\n change.previousValue.onRemove();\n }\n\n if (listener) {\n try {\n listener.invoke(change.value, change.previousValue);\n } catch (e) {\n Schema.onError(e);\n }\n }\n }\n\n if (isSchema) {\n if (ref.onChange) {\n try {\n (ref as Schema).onChange(changes);\n } catch (e) {\n Schema.onError(e);\n }\n }\n }\n\n }\n\n });\n }\n}\n","import { Schema } from \"./\";\nimport { ChangeTree } from \"./changes/ChangeTree\";\n\nexport function dumpChanges(schema: Schema) {\n const changeTrees: ChangeTree[] = [schema['$changes']];\n let numChangeTrees = 1;\n\n const dump = {};\n let currentStructure = dump;\n\n for (let i = 0; i < numChangeTrees; i++) {\n const changeTree = changeTrees[i];\n\n changeTree.changes.forEach((change) => {\n const ref = changeTree.ref;\n const fieldIndex = change.index;\n\n const field = ((ref as Schema)['_definition'])\n ? ref['_definition'].fieldsByIndex[fieldIndex]\n : ref['$indexes'].get(fieldIndex);\n\n currentStructure[field] = changeTree.getValue(fieldIndex);\n });\n\n }\n\n return dump;\n}","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { type, PrimitiveType, Context, DefinitionType } from \"./annotations\";\nimport { Schema } from \"./Schema\";\nimport { ArraySchema } from \"./types/ArraySchema\";\nimport { getType } from \"./types\";\nimport { Iterator } from \"./encoding/decode\";\n\nconst reflectionContext = new Context();\n\n/**\n * Reflection\n */\nexport class ReflectionField extends Schema {\n @type(\"string\", reflectionContext)\n name: string;\n\n @type(\"string\", reflectionContext)\n type: string;\n\n @type(\"number\", reflectionContext)\n referencedType: number;\n}\n\nexport class ReflectionType extends Schema {\n @type(\"number\", reflectionContext)\n id: number;\n\n @type([ ReflectionField ], reflectionContext)\n fields: ArraySchema<ReflectionField> = new ArraySchema<ReflectionField>();\n}\n\nexport class Reflection extends Schema {\n @type([ ReflectionType ], reflectionContext)\n types: ArraySchema<ReflectionType> = new ArraySchema<ReflectionType>();\n\n @type(\"number\", reflectionContext)\n rootType: number;\n\n static encode (instance: Schema) {\n const rootSchemaType = instance.constructor as typeof Schema;\n\n const reflection = new Reflection();\n reflection.rootType = rootSchemaType._typeid;\n\n const buildType = (currentType: ReflectionType, schema: any) => {\n for (let fieldName in schema) {\n const field = new ReflectionField();\n field.name = fieldName;\n\n let fieldType: string;\n\n if (typeof (schema[fieldName]) === \"string\") {\n fieldType = schema[fieldName];\n\n } else {\n const type = schema[fieldName];\n let childTypeSchema: typeof Schema;\n\n //\n // TODO: refactor below.\n //\n if (Schema.is(type)) {\n fieldType = \"ref\";\n childTypeSchema = schema[fieldName];\n\n } else {\n fieldType = Object.keys(type)[0];\n\n if (typeof(type[fieldType]) === \"string\") {\n fieldType += \":\" + type[fieldType]; // array:string\n\n } else {\n childTypeSchema = type[fieldType];\n }\n }\n\n field.referencedType = (childTypeSchema)\n ? childTypeSchema._typeid\n : -1;\n }\n\n field.type = fieldType;\n currentType.fields.push(field);\n }\n\n reflection.types.push(currentType);\n }\n\n const types = rootSchemaType._context.types;\n for (let typeid in types) {\n const type = new ReflectionType();\n type.id = Number(typeid);\n buildType(type, types[typeid]._definition.schema);\n }\n\n return reflection.encodeAll();\n }\n\n static decode<T extends Schema = Schema>(bytes: number[], it?: Iterator): T {\n const context = new Context();\n\n const reflection = new Reflection();\n reflection.decode(bytes, it);\n\n const schemaTypes = reflection.types.reduce((types, reflectionType) => {\n const schema: typeof Schema = class _ extends Schema {};\n const typeid = reflectionType.id;\n types[typeid] = schema\n context.add(schema, typeid);\n return types;\n }, {});\n\n reflection.types.forEach((reflectionType) => {\n const schemaType = schemaTypes[reflectionType.id];\n\n reflectionType.fields.forEach(field => {\n if (field.referencedType !== undefined) {\n let fieldType = field.type;\n let refType = schemaTypes[field.referencedType];\n\n // map or array of primitive type (-1)\n if (!refType) {\n const typeInfo = field.type.split(\":\");\n fieldType = typeInfo[0];\n refType = typeInfo[1];\n }\n\n if (fieldType === \"ref\") {\n type(refType, context)(schemaType.prototype, field.name);\n\n } else {\n type({ [fieldType]: refType } as DefinitionType, context)(schemaType.prototype, field.name);\n }\n\n } else {\n type(field.type as PrimitiveType, context)(schemaType.prototype, field.name);\n }\n });\n })\n\n const rootType: any = schemaTypes[reflection.rootType];\n const rootInstance = new rootType();\n\n /**\n * auto-initialize referenced types on root type\n * to allow registering listeners immediatelly on client-side\n */\n for (let fieldName in rootType._definition.schema) {\n const fieldType = rootType._definition.schema[fieldName];\n\n if (typeof(fieldType) !== \"string\") {\n rootInstance[fieldName] = (typeof (fieldType) === \"function\")\n ? new (fieldType as any)() // is a schema reference\n : new (getType(Object.keys(fieldType)[0])).constructor(); // is a \"collection\"\n }\n }\n\n return rootInstance;\n }\n}","export { Schema, DataChange } from \"./Schema\";\n\nimport { MapSchema, getMapProxy } from \"./types/MapSchema\"\nexport { MapSchema };\n\nimport { ArraySchema, getArrayProxy } from \"./types/ArraySchema\";\nexport { ArraySchema };\n\nimport { CollectionSchema } from \"./types/CollectionSchema\";\nexport { CollectionSchema };\n\nimport { SetSchema } from \"./types/SetSchema\";\nexport { SetSchema };\n\nimport { registerType } from \"./types\";\nexport { registerType };\n\nregisterType(\"map\", { constructor: MapSchema, getProxy: getMapProxy });\nregisterType(\"array\", { constructor: ArraySchema, getProxy: getArrayProxy });\nregisterType(\"set\", { constructor: SetSchema });\nregisterType(\"collection\", { constructor: CollectionSchema, });\n\n// Utils\nexport { dumpChanges } from \"./utils\";\n\n// Encoder / Decoder\nexport { Iterator } from \"./encoding/decode\";\nimport * as encode from \"./encoding/encode\";\nimport * as decode from \"./encoding/decode\";\nexport { encode, decode };\n\n// Reflection\nexport {\n Reflection,\n ReflectionType,\n ReflectionField,\n} from \"./Reflection\";\n\nexport {\n // Annotations\n type,\n deprecated,\n filter,\n filterChildren,\n defineTypes,\n hasFilter,\n\n // Internals\n SchemaDefinition,\n\n // Types\n Context,\n PrimitiveType,\n Definition,\n DefinitionType,\n FilterCallback,\n} from \"./annotations\";\n\nexport { OPERATION } from \"./spec\";"],"names":["int8","uint8","int16","uint16","int32","uint32","int64","uint64","float32","float64","_int32","_float32","_float64","boolean","string","number","decode.number","decode.string","decode.switchStructureCheck","encode.uint8","encode.number","encode.string"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/spec.ts","../../src/changes/ChangeTree.ts","../../src/types/ArraySchema.ts","../../src/types/MapSchema.ts","../../src/types/index.ts","../../src/annotations.ts","../../src/encoding/encode.ts","../../src/encoding/decode.ts","../../src/types/CollectionSchema.ts","../../src/types/SetSchema.ts","../../src/events/EventEmitter.ts","../../src/filters/index.ts","../../src/Schema.ts","../../src/utils.ts","../../node_modules/tslib/tslib.es6.js","../../src/Reflection.ts","../../src/index.ts"],"sourcesContent":["// export const SWITCH_TO_STRUCTURE = 193; (easily collides with DELETE_AND_ADD + fieldIndex = 2)\nexport const SWITCH_TO_STRUCTURE = 255; // (decoding collides with DELETE_AND_ADD + fieldIndex = 63)\nexport const TYPE_ID = 213;\n\n/**\n * Encoding Schema field operations.\n */\nexport enum OPERATION {\n // add new structure/primitive\n ADD = 128,\n\n // replace structure/primitive\n REPLACE = 0,\n\n // delete field\n DELETE = 64,\n\n // DELETE field, followed by an ADD\n DELETE_AND_ADD = 192, // 11100000\n\n // TOUCH is used to determine hierarchy of nested Schema structures during serialization.\n // touches are NOT encoded.\n TOUCH = 1, // 00000000\n\n // MapSchema Operations\n CLEAR = 10,\n}\n\n// export enum OPERATION {\n// // add new structure/primitive\n// // (128)\n// ADD = 128, // 10000000,\n\n// // replace structure/primitive\n// REPLACE = 1,// 00000001\n\n// // delete field\n// DELETE = 192, // 11000000\n\n// // DELETE field, followed by an ADD\n// DELETE_AND_ADD = 224, // 11100000\n\n// // TOUCH is used to determine hierarchy of nested Schema structures during serialization.\n// // touches are NOT encoded.\n// TOUCH = 0, // 00000000\n\n// // MapSchema Operations\n// CLEAR = 10,\n// }","import { OPERATION } from \"../spec\";\nimport { Schema } from \"../Schema\";\nimport { SchemaDefinition, FilterChildrenCallback } from \"../annotations\";\n\nimport { MapSchema } from \"../types/MapSchema\";\nimport { ArraySchema } from \"../types/ArraySchema\";\nimport { CollectionSchema } from \"../types/CollectionSchema\";\nimport { SetSchema } from \"../types/SetSchema\";\n\nexport type Ref = Schema\n | ArraySchema\n | MapSchema\n | CollectionSchema\n | SetSchema;\n\nexport interface ChangeOperation {\n op: OPERATION,\n index: number,\n}\n\n//\n// FieldCache is used for @filter()\n//\nexport interface FieldCache {\n beginIndex: number;\n endIndex: number;\n}\n\n\n//\n// Root holds all schema references by unique id\n//\nexport class Root {\n //\n // Relation of refId => Schema structure\n // For direct access of structures during decoding time.\n //\n public refs = new Map<number, Ref>();\n public refCounts: {[refId: number]: number} = {};\n public deletedRefs = new Set<number>();\n\n protected nextUniqueId: number = 0;\n\n getNextUniqueId() {\n return this.nextUniqueId++;\n }\n\n // for decoding\n addRef(refId: number, ref: Ref, incrementCount: boolean = true) {\n this.refs.set(refId, ref);\n\n if (incrementCount) {\n this.refCounts[refId] = (this.refCounts[refId] || 0) + 1;\n }\n }\n\n // for decoding\n removeRef(refId) {\n this.refCounts[refId] = this.refCounts[refId] - 1;\n this.deletedRefs.add(refId);\n }\n\n clearRefs() {\n this.refs.clear();\n this.deletedRefs.clear();\n this.refCounts = {};\n }\n\n // for decoding\n garbageCollectDeletedRefs() {\n this.deletedRefs.forEach((refId) => {\n if (this.refCounts[refId] <= 0) {\n const ref = this.refs.get(refId);\n\n //\n // Ensure child schema instances have their references removed as well.\n //\n if (ref instanceof Schema) {\n for (const fieldName in ref['_definition'].schema) {\n if (\n typeof (ref['_definition'].schema[fieldName]) !== \"string\" &&\n ref[fieldName] &&\n ref[fieldName]['$changes']\n ) {\n this.removeRef(ref[fieldName]['$changes'].refId);\n }\n }\n\n } else {\n const definition: SchemaDefinition = ref['$changes'].parent._definition;\n const type = definition.schema[definition.fieldsByIndex[ref['$changes'].parentIndex]];\n\n if (typeof (Object.values(type)[0]) === \"function\") {\n Array.from(ref.values())\n .forEach((child) => this.removeRef(child['$changes'].refId));\n }\n }\n\n this.refs.delete(refId);\n delete this.refCounts[refId];\n }\n });\n\n // clear deleted refs.\n this.deletedRefs.clear();\n }\n}\n\nexport class ChangeTree {\n ref: Ref;\n refId: number;\n\n root?: Root;\n\n parent?: Ref;\n parentIndex?: number;\n\n indexes: {[index: string]: any};\n\n changed: boolean = false;\n changes = new Map<number, ChangeOperation>();\n allChanges = new Set<number>();\n\n // cached indexes for filtering\n caches: {[field: number]: number[]} = {};\n\n currentCustomOperation: number = 0;\n\n constructor(ref: Ref, parent?: Ref, root?: Root) {\n this.ref = ref;\n this.setParent(parent, root);\n }\n\n setParent(\n parent: Ref,\n root?: Root,\n parentIndex?: number,\n ) {\n if (!this.indexes) {\n this.indexes = (this.ref instanceof Schema)\n ? this.ref['_definition'].indexes\n : {};\n }\n\n this.parent = parent;\n this.parentIndex = parentIndex;\n\n // avoid setting parents with empty `root`\n if (!root) { return; }\n this.root = root;\n\n //\n // assign same parent on child structures\n //\n if (this.ref instanceof Schema) {\n const definition: SchemaDefinition = this.ref['_definition'];\n\n for (let field in definition.schema) {\n const value = this.ref[field];\n\n if (value && value['$changes']) {\n const parentIndex = definition.indexes[field];\n\n (value['$changes'] as ChangeTree).setParent(\n this.ref,\n root,\n parentIndex,\n );\n }\n }\n\n } else if (typeof (this.ref) === \"object\") {\n this.ref.forEach((value, key) => {\n if (value instanceof Schema) {\n const changeTreee = value['$changes'];\n const parentIndex = this.ref['$changes'].indexes[key];\n\n changeTreee.setParent(\n this.ref,\n this.root,\n parentIndex,\n );\n }\n });\n }\n }\n\n operation(op: ChangeOperation) {\n this.changes.set(--this.currentCustomOperation, op);\n }\n\n change(fieldName: string | number, operation: OPERATION = OPERATION.ADD) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n this.assertValidIndex(index, fieldName);\n\n const previousChange = this.changes.get(index);\n\n if (\n !previousChange ||\n previousChange.op === OPERATION.DELETE ||\n previousChange.op === OPERATION.TOUCH // (mazmorra.io's BattleAction issue)\n ) {\n this.changes.set(index, {\n op: (!previousChange)\n ? operation\n : (previousChange.op === OPERATION.DELETE)\n ? OPERATION.DELETE_AND_ADD\n : operation,\n // : OPERATION.REPLACE,\n index\n });\n }\n\n this.allChanges.add(index);\n\n this.changed = true;\n this.touchParents();\n }\n\n touch(fieldName: string | number) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n this.assertValidIndex(index, fieldName);\n\n if (!this.changes.has(index)) {\n this.changes.set(index, { op: OPERATION.TOUCH, index });\n }\n\n this.allChanges.add(index);\n\n // ensure touch is placed until the $root is found.\n this.touchParents();\n }\n\n touchParents() {\n if (this.parent) {\n (this.parent['$changes'] as ChangeTree).touch(this.parentIndex);\n }\n }\n\n getType(index?: number) {\n if (this.ref['_definition']) {\n const definition = (this.ref as Schema)['_definition'];\n return definition.schema[ definition.fieldsByIndex[index] ];\n\n } else {\n const definition = (this.parent as Schema)['_definition'];\n const parentType = definition.schema[ definition.fieldsByIndex[this.parentIndex] ];\n\n //\n // Get the child type from parent structure.\n // - [\"string\"] => \"string\"\n // - { map: \"string\" } => \"string\"\n // - { set: \"string\" } => \"string\"\n //\n return Object.values(parentType)[0];\n }\n }\n\n getChildrenFilter(): FilterChildrenCallback {\n const childFilters = (this.parent as Schema)['_definition'].childFilters;\n return childFilters && childFilters[this.parentIndex];\n }\n\n //\n // used during `.encode()`\n //\n getValue(index: number) {\n return this.ref['getByIndex'](index);\n }\n\n delete(fieldName: string | number) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n if (index === undefined) {\n console.warn(`@colyseus/schema ${this.ref.constructor.name}: trying to delete non-existing index: ${fieldName} (${index})`);\n return;\n }\n\n const previousValue = this.getValue(index);\n // console.log(\"$changes.delete =>\", { fieldName, index, previousValue });\n\n this.changes.set(index, { op: OPERATION.DELETE, index });\n\n this.allChanges.delete(index);\n\n // delete cache\n delete this.caches[index];\n\n // remove `root` reference\n if (previousValue && previousValue['$changes']) {\n previousValue['$changes'].parent = undefined;\n }\n\n this.changed = true;\n this.touchParents();\n }\n\n discard(changed: boolean = false, discardAll: boolean = false) {\n //\n // Map, Array, etc:\n // Remove cached key to ensure ADD operations is unsed instead of\n // REPLACE in case same key is used on next patches.\n //\n // TODO: refactor this. this is not relevant for Collection and Set.\n //\n if (!(this.ref instanceof Schema)) {\n this.changes.forEach((change) => {\n if (change.op === OPERATION.DELETE) {\n const index = this.ref['getIndex'](change.index)\n delete this.indexes[index];\n }\n });\n }\n\n this.changes.clear();\n this.changed = changed;\n\n if (discardAll) {\n this.allChanges.clear();\n }\n\n // re-set `currentCustomOperation`\n this.currentCustomOperation = 0;\n }\n\n /**\n * Recursively discard all changes from this, and child structures.\n */\n discardAll() {\n this.changes.forEach((change) => {\n const value = this.getValue(change.index);\n\n if (value && value['$changes']) {\n value['$changes'].discardAll();\n }\n });\n\n this.discard();\n }\n\n // cache(field: number, beginIndex: number, endIndex: number) {\n cache(field: number, cachedBytes: number[]) {\n this.caches[field] = cachedBytes;\n }\n\n clone() {\n return new ChangeTree(this.ref, this.parent, this.root);\n }\n\n ensureRefId() {\n // skip if refId is already set.\n if (this.refId !== undefined) {\n return;\n }\n\n this.refId = this.root.getNextUniqueId();\n }\n\n protected assertValidIndex(index: number, fieldName: string | number) {\n if (index === undefined) {\n throw new Error(`ChangeTree: missing index for field \"${fieldName}\"`);\n }\n }\n\n}\n","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\n\n//\n// Notes:\n// -----\n//\n// - The tsconfig.json of @colyseus/schema uses ES2018.\n// - ES2019 introduces `flatMap` / `flat`, which is not currently relevant, and caused other issues.\n//\n\nconst DEFAULT_SORT = (a: any, b: any) => {\n const A = a.toString();\n const B = b.toString();\n if (A < B) return -1;\n else if (A > B) return 1;\n else return 0\n}\n\nexport function getArrayProxy(value: ArraySchema) {\n value['$proxy'] = true;\n\n //\n // compatibility with @colyseus/schema 0.5.x\n // - allow `map[\"key\"]`\n // - allow `map[\"key\"] = \"xxx\"`\n // - allow `delete map[\"key\"]`\n //\n value = new Proxy(value, {\n get: (obj, prop) => {\n if (\n typeof (prop) !== \"symbol\" &&\n !isNaN(prop as any) // https://stackoverflow.com/a/175787/892698\n ) {\n return obj.at(prop as unknown as number);\n\n } else {\n return obj[prop];\n }\n },\n\n set: (obj, prop, setValue) => {\n if (\n typeof (prop) !== \"symbol\" &&\n !isNaN(prop as any)\n ) {\n const indexes = Array.from(obj['$items'].keys());\n const key = parseInt(indexes[prop] || prop);\n if (setValue === undefined || setValue === null) {\n obj.deleteAt(key);\n\n } else {\n obj.setAt(key, setValue);\n }\n\n } else {\n obj[prop] = setValue;\n }\n\n return true;\n },\n\n deleteProperty: (obj, prop) => {\n if (typeof (prop) === \"number\") {\n obj.deleteAt(prop);\n\n } else {\n delete obj[prop];\n }\n\n return true;\n },\n });\n\n return value;\n}\n\nexport class ArraySchema<V=any> implements Array<V>, 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: number]: V;\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 (\n // type format: [\"string\"]\n Array.isArray(type) || \n\n // type format: { array: \"string\" }\n (type['array'] !== undefined)\n );\n }\n\n constructor (...items: V[]) {\n this.push.apply(this, items);\n }\n\n set length (value: number) {\n if (value === 0) {\n this.clear();\n\n } else {\n this.splice(value, this.length - value);\n }\n }\n\n get length() {\n return this.$items.size;\n }\n\n push(...values: V[]) {\n let lastIndex: number;\n\n values.forEach(value => {\n // set \"index\" for reference.\n lastIndex = this.$refId++;\n\n this.setAt(lastIndex, value);\n });\n\n return lastIndex;\n }\n\n /**\n * Removes the last element from an array and returns it.\n */\n pop(): V | undefined {\n const key = Array.from(this.$indexes.values()).pop();\n if (key === undefined) { return undefined; }\n\n this.$changes.delete(key);\n this.$indexes.delete(key);\n\n const value = this.$items.get(key);\n this.$items.delete(key);\n\n return value;\n }\n\n at(index: number) {\n //\n // FIXME: this should be O(1)\n //\n const key = Array.from(this.$items.keys())[index];\n return this.$items.get(key);\n }\n\n setAt(index: number, value: V) {\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 }\n\n deleteAt(index: number) {\n const key = Array.from(this.$items.keys())[index];\n if (key === undefined) { return false; }\n return this.$deleteAt(key);\n }\n\n protected $deleteAt(index) {\n // delete at internal index\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 /**\n * Combines two or more arrays.\n * @param items Additional items to add to the end of array1.\n */\n concat(...items: (V | ConcatArray<V>)[]): ArraySchema<V> {\n return new ArraySchema(...Array.from(this.$items.values()).concat(...items));\n }\n\n /**\n * Adds all the elements of an array separated by the specified separator string.\n * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.\n */\n join(separator?: string): string {\n return Array.from(this.$items.values()).join(separator);\n }\n\n /**\n * Reverses the elements in an Array.\n */\n reverse(): ArraySchema<V> {\n const indexes = Array.from(this.$items.keys());\n const reversedItems = Array.from(this.$items.values()).reverse();\n\n reversedItems.forEach((item, i) => {\n this.setAt(indexes[i], item);\n });\n\n return this;\n }\n\n /**\n * Removes the first element from an array and returns it.\n */\n shift(): V | undefined {\n const indexes = Array.from(this.$items.keys());\n\n const shiftAt = indexes.shift();\n if (shiftAt === undefined) { return undefined; }\n\n const value = this.$items.get(shiftAt);\n this.$deleteAt(shiftAt);\n\n return value;\n }\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array.\n * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n */\n slice(start?: number, end?: number): V[] {\n return new ArraySchema(...Array.from(this.$items.values()).slice(start, end));\n }\n\n /**\n * Sorts an array.\n * @param compareFn Function used to determine the order of the elements. It is expected to return\n * a negative value if first argument is less than second argument, zero if they're equal and a positive\n * value otherwise. If omitted, the elements are sorted in ascending, ASCII character order.\n * ```ts\n * [11,2,22,1].sort((a, b) => a - b)\n * ```\n */\n sort(compareFn: (a: V, b: V) => number = DEFAULT_SORT): this {\n const indexes = Array.from(this.$items.keys());\n const sortedItems = Array.from(this.$items.values()).sort(compareFn);\n\n sortedItems.forEach((item, i) => {\n this.setAt(indexes[i], item);\n });\n\n return this;\n }\n\n /**\n * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @param items Elements to insert into the array in place of the deleted elements.\n */\n splice(\n start: number,\n deleteCount: number = this.length - start,\n ...items: V[]\n ): V[] {\n const indexes = Array.from(this.$items.keys());\n const removedItems: V[] = [];\n\n for (let i = start; i < start + deleteCount; i++) {\n removedItems.push(this.$items.get(indexes[i]));\n this.$deleteAt(indexes[i]);\n }\n\n return removedItems;\n }\n\n /**\n * Inserts new elements at the start of an array.\n * @param items Elements to insert at the start of the Array.\n */\n unshift(...items: V[]): number {\n const length = this.length;\n const addedLength = items.length;\n\n // const indexes = Array.from(this.$items.keys());\n const previousValues = Array.from(this.$items.values());\n\n items.forEach((item, i) => {\n this.setAt(i, item);\n });\n\n previousValues.forEach((previousValue, i) => {\n this.setAt(addedLength + i, previousValue);\n });\n\n return length + addedLength;\n }\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n indexOf(searchElement: V, fromIndex?: number): number {\n return Array.from(this.$items.values()).indexOf(searchElement, fromIndex);\n }\n\n /**\n * Returns the index of the last occurrence of a specified value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.\n */\n lastIndexOf(searchElement: V, fromIndex: number = this.length - 1): number {\n return Array.from(this.$items.values()).lastIndexOf(searchElement, fromIndex);\n }\n\n /**\n * Determines whether all the members of an array satisfy the specified test.\n * @param callbackfn A function that accepts up to three arguments. The every method calls\n * the callbackfn function for each element in the array until the callbackfn returns a value\n * which is coercible to the Boolean value false, or until the end of the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n * If thisArg is omitted, undefined is used as the this value.\n */\n every(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean {\n return Array.from(this.$items.values()).every(callbackfn, thisArg);\n }\n\n /**\n * Determines whether the specified callback function returns true for any element of an array.\n * @param callbackfn A function that accepts up to three arguments. The some method calls\n * the callbackfn function for each element in the array until the callbackfn returns a value\n * which is coercible to the Boolean value true, or until the end of the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n * If thisArg is omitted, undefined is used as the this value.\n */\n some(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean {\n return Array.from(this.$items.values()).some(callbackfn, thisArg);\n }\n\n /**\n * Performs the specified action for each element in an array.\n * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n forEach(callbackfn: (value: V, index: number, array: V[]) => void, thisArg?: any): void {\n Array.from(this.$items.values()).forEach(callbackfn, thisArg);\n }\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n map<U>(callbackfn: (value: V, index: number, array: V[]) => U, thisArg?: any): U[] {\n return Array.from(this.$items.values()).map(callbackfn, thisArg);\n }\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n filter(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any)\n filter<S extends V>(callbackfn: (value: V, index: number, array: V[]) => value is S, thisArg?: any): V[] {\n return Array.from(this.$items.values()).filter(callbackfn, thisArg);\n }\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n reduce<U=V>(callbackfn: (previousValue: U, currentValue: V, currentIndex: number, array: V[]) => U, initialValue?: U): U {\n return Array.from(this.$items.values()).reduce(callbackfn, initialValue);\n }\n\n /**\n * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n reduceRight<U=V>(callbackfn: (previousValue: U, currentValue: V, currentIndex: number, array: V[]) => U, initialValue?: U): U {\n return Array.from(this.$items.values()).reduceRight(callbackfn, initialValue);\n }\n\n /**\n * Returns the value of the first element in the array where predicate is true, and undefined\n * otherwise.\n * @param predicate find calls predicate once for each element of the array, in ascending\n * order, until it finds one where predicate returns true. If such an element is found, find\n * immediately returns that element value. Otherwise, find returns undefined.\n * @param thisArg If provided, it will be used as the this value for each invocation of\n * predicate. If it is not provided, undefined is used instead.\n */\n find(predicate: (value: V, index: number, obj: V[]) => boolean, thisArg?: any): V | undefined {\n return Array.from(this.$items.values()).find(predicate, thisArg);\n }\n\n /**\n * Returns the index of the first element in the array where predicate is true, and -1\n * otherwise.\n * @param predicate find calls predicate once for each element of the array, in ascending\n * order, until it finds one where predicate returns true. If such an element is found,\n * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n * @param thisArg If provided, it will be used as the this value for each invocation of\n * predicate. If it is not provided, undefined is used instead.\n */\n findIndex(predicate: (value: V, index: number, obj: V[]) => unknown, thisArg?: any): number {\n return Array.from(this.$items.values()).findIndex(predicate, thisArg);\n }\n\n /**\n * Returns the this object after filling the section identified by start and end with value\n * @param value value to fill array section with\n * @param start index to start filling the array at. If start is negative, it is treated as\n * length+start where length is the length of the array.\n * @param end index to stop filling the array at. If end is negative, it is treated as\n * length+end.\n */\n fill(value: V, start?: number, end?: number): this {\n //\n // TODO\n //\n throw new Error(\"ArraySchema#fill() not implemented\");\n // this.$items.fill(value, start, end);\n\n return this;\n }\n\n /**\n * Returns the this object after copying a section of the array identified by start and end\n * to the same array starting at position target\n * @param target If target is negative, it is treated as length+target where length is the\n * length of the array.\n * @param start If start is negative, it is treated as length+start. If end is negative, it\n * is treated as length+end.\n * @param end If not specified, length of the this object is used as its default value.\n */\n copyWithin(target: number, start: number, end?: number): this {\n //\n // TODO\n //\n throw new Error(\"ArraySchema#copyWithin() not implemented\");\n return this;\n }\n\n /**\n * Returns a string representation of an array.\n */\n toString(): string { return this.$items.toString(); }\n\n /**\n * Returns a string representation of an array. The elements are converted to string using their toLocalString methods.\n */\n toLocaleString(): string { return this.$items.toLocaleString() };\n\n /** Iterator */\n [Symbol.iterator](): IterableIterator<V> {\n return Array.from(this.$items.values())[Symbol.iterator]();\n }\n\n [Symbol.unscopables]() {\n return this.$items[Symbol.unscopables]();\n }\n\n /**\n * Returns an iterable of key, value pairs for every entry in the array\n */\n entries(): IterableIterator<[number, V]> { return this.$items.entries(); }\n\n /**\n * Returns an iterable of keys in the array\n */\n keys(): IterableIterator<number> { return this.$items.keys(); }\n\n /**\n * Returns an iterable of values in the array\n */\n values(): IterableIterator<V> { return this.$items.values(); }\n\n /**\n * Determines whether an array includes a certain element, returning true or false as appropriate.\n * @param searchElement The element to search for.\n * @param fromIndex The position in this array at which to begin searching for searchElement.\n */\n includes(searchElement: V, fromIndex?: number): boolean {\n return Array.from(this.$items.values()).includes(searchElement, fromIndex);\n }\n\n /**\n * Calls a defined callback function on each element of an array. Then, flattens the result into\n * a new array.\n * This is identical to a map followed by flat with depth 1.\n *\n * @param callback A function that accepts up to three arguments. The flatMap method calls the\n * callback function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callback function. If\n * thisArg is omitted, undefined is used as the this value.\n */\n // @ts-ignore\n flatMap<U, This = undefined>(callback: (this: This, value: V, index: number, array: V[]) => U | ReadonlyArray<U>, thisArg?: This): U[] {\n // @ts-ignore\n throw new Error(\"ArraySchema#flatMap() is not supported.\");\n }\n\n /**\n * Returns a new array with all sub-array elements concatenated into it recursively up to the\n * specified depth.\n *\n * @param depth The maximum recursion depth\n */\n // @ts-ignore\n flat<A, D extends number = 1>(this: A, depth?: D): any {\n // @ts-ignore\n throw new Error(\"ArraySchema#flat() is not supported.\");\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 return this.toArray().map((value) => {\n return (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value;\n });\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): ArraySchema<V> {\n let cloned: ArraySchema;\n\n if (isDecoding) {\n cloned = new ArraySchema(...Array.from(this.$items.values()));\n\n } else {\n cloned = new ArraySchema(...this.map(item => (\n (item['$changes'])\n ? (item as any as Schema).clone()\n : item\n )));\n }\n\n return cloned;\n };\n\n triggerAll (): void {\n Schema.prototype.triggerAll.apply(this);\n }\n}\n","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 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(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}\n","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}","import { ChangeTree } from './changes/ChangeTree';\nimport { Schema } from './Schema';\nimport { ArraySchema, getArrayProxy } from './types/ArraySchema';\nimport { MapSchema, getMapProxy } from './types/MapSchema';\nimport { getType } from './types';\n\n/**\n * Data types\n */\nexport type PrimitiveType =\n \"string\" |\n \"number\" |\n \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"float32\" |\n \"float64\" |\n typeof Schema;\n\nexport type DefinitionType = PrimitiveType\n | PrimitiveType[]\n | { array: PrimitiveType }\n | { map: PrimitiveType }\n | { collection: PrimitiveType }\n | { set: PrimitiveType };\n\nexport type Definition = { [field: string]: DefinitionType };\nexport type FilterCallback<\n T extends Schema = any,\n V = any,\n R extends Schema = any\n> = (\n ((this: T, client: ClientWithSessionId, value: V) => boolean) |\n ((this: T, client: ClientWithSessionId, value: V, root: R) => boolean)\n);\n\nexport type FilterChildrenCallback<\n T extends Schema = any,\n K = any,\n V = any,\n R extends Schema = any\n> = (\n ((this: T, client: ClientWithSessionId, key: K, value: V) => boolean) |\n ((this: T, client: ClientWithSessionId, key: K, value: V, root: R) => boolean)\n)\n\nexport class SchemaDefinition {\n schema: Definition;\n\n //\n // TODO: use a \"field\" structure combining all these properties per-field.\n //\n\n indexes: { [field: string]: number } = {};\n fieldsByIndex: { [index: number]: string } = {};\n\n filters: { [field: string]: FilterCallback };\n indexesWithFilters: number[];\n childFilters: { [field: string]: FilterChildrenCallback }; // childFilters are used on Map, Array, Set items.\n\n deprecated: { [field: string]: boolean } = {};\n descriptors: PropertyDescriptorMap & ThisType<any> = {};\n\n static create(parent?: SchemaDefinition) {\n const definition = new SchemaDefinition();\n\n // support inheritance\n definition.schema = Object.assign({}, parent && parent.schema || {});\n definition.indexes = Object.assign({}, parent && parent.indexes || {});\n definition.fieldsByIndex = Object.assign({}, parent && parent.fieldsByIndex || {});\n definition.descriptors = Object.assign({}, parent && parent.descriptors || {});\n definition.deprecated = Object.assign({}, parent && parent.deprecated || {});\n\n return definition;\n }\n\n addField(field: string, type: DefinitionType) {\n const index = this.getNextFieldIndex();\n this.fieldsByIndex[index] = field;\n this.indexes[field] = index;\n this.schema[field] = (Array.isArray(type))\n ? { array: type[0] }\n : type;\n }\n\n addFilter(field: string, cb: FilterCallback) {\n if (!this.filters) {\n this.filters = {};\n this.indexesWithFilters = [];\n }\n this.filters[this.indexes[field]] = cb;\n this.indexesWithFilters.push(this.indexes[field]);\n return true;\n }\n\n addChildrenFilter(field: string, cb: FilterChildrenCallback) {\n const index = this.indexes[field];\n const type = this.schema[field];\n\n if (getType(Object.keys(type)[0])) {\n if (!this.childFilters) { this.childFilters = {}; }\n\n this.childFilters[index] = cb;\n return true;\n\n } else {\n console.warn(`@filterChildren: field '${field}' can't have children. Ignoring filter.`);\n }\n }\n\n getChildrenFilter(field: string) {\n return this.childFilters && this.childFilters[this.indexes[field]];\n }\n\n getNextFieldIndex() {\n return Object.keys(this.schema || {}).length;\n }\n}\n\nexport function hasFilter(klass: typeof Schema) {\n return klass._context && klass._context.useFilters;\n}\n\n// Colyseus integration\nexport type ClientWithSessionId = { sessionId: string } & any;\n\nexport class Context {\n types: {[id: number]: typeof Schema} = {};\n schemas = new Map<typeof Schema, number>();\n useFilters = false;\n\n has(schema: typeof Schema) {\n return this.schemas.has(schema);\n }\n\n get(typeid: number) {\n return this.types[typeid];\n }\n\n add(schema: typeof Schema, typeid: number = this.schemas.size) {\n // FIXME: move this to somewhere else?\n // support inheritance\n schema._definition = SchemaDefinition.create(schema._definition);\n\n schema._typeid = typeid;\n this.types[typeid] = schema;\n this.schemas.set(schema, typeid);\n }\n\n static create(context: Context = new Context) {\n return function (definition: DefinitionType) {\n return type(definition, context);\n }\n }\n}\n\nexport const globalContext = new Context();\n\n/**\n * `@type()` decorator for proxies\n */\nexport function type (type: DefinitionType, context: Context = globalContext): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n if (!type) {\n throw new Error(\"Type not found. Ensure your `@type` annotations are correct and that you don't have any circular dependencies.\");\n }\n\n const constructor = target.constructor as typeof Schema;\n constructor._context = context;\n\n /*\n * static schema\n */\n if (!context.has(constructor)) {\n context.add(constructor);\n }\n\n const definition = constructor._definition;\n definition.addField(field, type);\n\n /**\n * skip if descriptor already exists for this field (`@deprecated()`)\n */\n if (definition.descriptors[field]) {\n if (definition.deprecated[field]) {\n // do not create accessors for deprecated properties.\n return;\n\n } else {\n // trying to define same property multiple times across inheritance.\n // https://github.com/colyseus/colyseus-unity3d/issues/131#issuecomment-814308572\n try {\n throw new Error(`@colyseus/schema: Duplicate '${field}' definition on '${constructor.name}'.\\nCheck @type() annotation`);\n\n } catch (e) {\n const definitionAtLine = e.stack.split(\"\\n\")[4].trim();\n throw new Error(`${e.message} ${definitionAtLine}`);\n }\n }\n }\n\n const isArray = ArraySchema.is(type);\n const isMap = !isArray && MapSchema.is(type);\n\n // TODO: refactor me.\n // Allow abstract intermediary classes with no fields to be serialized\n // (See \"should support an inheritance with a Schema type without fields\" test)\n if (typeof (type) !== \"string\" && !Schema.is(type)) {\n const childType = Object.values(type)[0];\n if (typeof (childType) !== \"string\" && !context.has(childType)) {\n context.add(childType);\n }\n }\n\n const fieldCached = `_${field}`;\n\n definition.descriptors[fieldCached] = {\n enumerable: false,\n configurable: false,\n writable: true,\n };\n\n definition.descriptors[field] = {\n get: function () {\n return this[fieldCached];\n },\n\n set: function (this: Schema, value: any) {\n /**\n * Create Proxy for array or map items\n */\n\n // skip if value is the same as cached.\n if (value === this[fieldCached]) {\n return;\n }\n\n if (\n value !== undefined &&\n value !== null\n ) {\n // automaticallty transform Array into ArraySchema\n if (isArray && !(value instanceof ArraySchema)) {\n value = new ArraySchema(...value);\n }\n\n // automaticallty transform Map into MapSchema\n if (isMap && !(value instanceof MapSchema)) {\n value = new MapSchema(value);\n }\n\n // try to turn provided structure into a Proxy\n if (value['$proxy'] === undefined) {\n if (isMap) {\n value = getMapProxy(value);\n\n } else if (isArray) {\n value = getArrayProxy(value);\n }\n }\n\n // flag the change for encoding.\n this.$changes.change(field);\n\n //\n // call setParent() recursively for this and its child\n // structures.\n //\n if (value['$changes']) {\n (value['$changes'] as ChangeTree).setParent(\n this,\n this.$changes.root,\n this._definition.indexes[field],\n );\n }\n\n } else {\n //\n // Setting a field to `null` or `undefined` will delete it.\n //\n this.$changes.delete(field);\n }\n\n this[fieldCached] = value;\n },\n\n enumerable: true,\n configurable: true\n };\n }\n}\n\n/**\n * `@filter()` decorator for defining data filters per client\n */\n\nexport function filter<T extends Schema, V, R extends Schema>(cb: FilterCallback<T, V, R>): PropertyDecorator {\n return function (target: any, field: string) {\n const constructor = target.constructor as typeof Schema;\n const definition = constructor._definition;\n\n if (definition.addFilter(field, cb)) {\n constructor._context.useFilters = true;\n }\n }\n}\n\nexport function filterChildren<T extends Schema, K, V, R extends Schema>(cb: FilterChildrenCallback<T, K, V, R>): PropertyDecorator {\n return function (target: any, field: string) {\n const constructor = target.constructor as typeof Schema;\n const definition = constructor._definition;\n if (definition.addChildrenFilter(field, cb)) {\n constructor._context.useFilters = true;\n }\n }\n}\n\n\n/**\n * `@deprecated()` flag a field as deprecated.\n * The previous `@type()` annotation should remain along with this one.\n */\n\nexport function deprecated(throws: boolean = true, context: Context = globalContext): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n const constructor = target.constructor as typeof Schema;\n const definition = constructor._definition;\n\n definition.deprecated[field] = true;\n\n if (throws) {\n definition.descriptors[field] = {\n get: function () { throw new Error(`${field} is deprecated.`); },\n set: function (this: Schema, value: any) { /* throw new Error(`${field} is deprecated.`); */ },\n enumerable: false,\n configurable: true\n };\n }\n }\n}\n\nexport function defineTypes(\n target: typeof Schema,\n fields: { [property: string]: DefinitionType },\n context: Context = target._context || globalContext\n) {\n for (let field in fields) {\n type(fields[field], context)(target.prototype, field);\n }\n return target;\n}\n","/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\n\nfunction utf8Length(str) {\n var c = 0, length = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n\nexport function utf8Write(view, offset, str) {\n var c = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n view[offset++] = c;\n }\n else if (c < 0x800) {\n view[offset++] = 0xc0 | (c >> 6);\n view[offset++] = 0x80 | (c & 0x3f);\n }\n else if (c < 0xd800 || c >= 0xe000) {\n view[offset++] = 0xe0 | (c >> 12);\n view[offset++] = 0x80 | (c >> 6 & 0x3f);\n view[offset++] = 0x80 | (c & 0x3f);\n }\n else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n view[offset++] = 0xf0 | (c >> 18);\n view[offset++] = 0x80 | (c >> 12 & 0x3f);\n view[offset++] = 0x80 | (c >> 6 & 0x3f);\n view[offset++] = 0x80 | (c & 0x3f);\n }\n }\n}\n\nexport function int8(bytes, value) {\n bytes.push(value & 255);\n};\n\nexport function uint8(bytes, value) {\n bytes.push(value & 255);\n};\n\nexport function int16(bytes, value) {\n bytes.push(value & 255);\n bytes.push((value >> 8) & 255);\n};\n\nexport function uint16(bytes, value) {\n bytes.push(value & 255);\n bytes.push((value >> 8) & 255);\n};\n\nexport function int32(bytes, value) {\n bytes.push(value & 255);\n bytes.push((value >> 8) & 255);\n bytes.push((value >> 16) & 255);\n bytes.push((value >> 24) & 255);\n};\n\nexport function uint32(bytes, value) {\n const b4 = value >> 24;\n const b3 = value >> 16;\n const b2 = value >> 8;\n const b1 = value;\n bytes.push(b1 & 255);\n bytes.push(b2 & 255);\n bytes.push(b3 & 255);\n bytes.push(b4 & 255);\n};\n\nexport function int64(bytes, value) {\n const high = Math.floor(value / Math.pow(2, 32));\n const low = value >>> 0;\n uint32(bytes, low);\n uint32(bytes, high);\n};\n\nexport function uint64(bytes, value) {\n const high = (value / Math.pow(2, 32)) >> 0;\n const low = value >>> 0;\n uint32(bytes, low);\n uint32(bytes, high);\n};\n\nexport function float32(bytes, value) {\n writeFloat32(bytes, value);\n}\n\nexport function float64(bytes, value) {\n writeFloat64(bytes, value);\n}\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _int32 = new Int32Array(2);\nconst _float32 = new Float32Array(_int32.buffer);\nconst _float64 = new Float64Array(_int32.buffer);\n\nexport function writeFloat32(bytes, value) {\n _float32[0] = value;\n int32(bytes, _int32[0]);\n};\n\nexport function writeFloat64(bytes, value) {\n _float64[0] = value;\n int32(bytes, _int32[_isLittleEndian ? 0 : 1]);\n int32(bytes, _int32[_isLittleEndian ? 1 : 0]);\n};\n\nexport function boolean(bytes, value) {\n return uint8(bytes, value ? 1 : 0);\n};\n\nexport function string(bytes, value) {\n // encode `null` strings as empty.\n if (!value) { value = \"\"; }\n\n let length = utf8Length(value);\n let size = 0;\n\n // fixstr\n if (length < 0x20) {\n bytes.push(length | 0xa0);\n size = 1;\n }\n // str 8\n else if (length < 0x100) {\n bytes.push(0xd9);\n uint8(bytes, length);\n size = 2;\n }\n // str 16\n else if (length < 0x10000) {\n bytes.push(0xda);\n uint16(bytes, length);\n size = 3;\n }\n // str 32\n else if (length < 0x100000000) {\n bytes.push(0xdb);\n uint32(bytes, length);\n size = 5;\n } else {\n throw new Error('String too long');\n }\n\n utf8Write(bytes, bytes.length, value);\n\n return size + length;\n}\n\nexport function number(bytes, value) {\n if (isNaN(value)) {\n return number(bytes, 0);\n\n } else if (!isFinite(value)) {\n return number(bytes, (value > 0) ? Number.MAX_SAFE_INTEGER : -Number.MAX_SAFE_INTEGER);\n\n } else if (value !== (value|0)) {\n bytes.push(0xcb);\n writeFloat64(bytes, value);\n return 9;\n\n // TODO: encode float 32?\n // is it possible to differentiate between float32 / float64 here?\n\n // // float 32\n // bytes.push(0xca);\n // writeFloat32(bytes, value);\n // return 5;\n }\n\n if (value >= 0) {\n // positive fixnum\n if (value < 0x80) {\n uint8(bytes, value);\n return 1;\n }\n\n // uint 8\n if (value < 0x100) {\n bytes.push(0xcc);\n uint8(bytes, value);\n return 2;\n }\n\n // uint 16\n if (value < 0x10000) {\n bytes.push(0xcd);\n uint16(bytes, value);\n return 3;\n }\n\n // uint 32\n if (value < 0x100000000) {\n bytes.push(0xce);\n uint32(bytes, value);\n return 5;\n }\n\n // uint 64\n bytes.push(0xcf);\n uint64(bytes, value);\n return 9;\n\n } else {\n\n // negative fixnum\n if (value >= -0x20) {\n bytes.push(0xe0 | (value + 0x20));\n return 1;\n }\n\n // int 8\n if (value >= -0x80) {\n bytes.push(0xd0);\n int8(bytes, value);\n return 2;\n }\n\n // int 16\n if (value >= -0x8000) {\n bytes.push(0xd1);\n int16(bytes, value);\n return 3;\n }\n\n // int 32\n if (value >= -0x80000000) {\n bytes.push(0xd2);\n int32(bytes, value);\n return 5;\n }\n\n // int 64\n bytes.push(0xd3);\n int64(bytes, value);\n return 9;\n }\n}","/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\nimport { SWITCH_TO_STRUCTURE } from \"../spec\";\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\nexport interface Iterator { offset: number; }\n\nfunction utf8Read(bytes, offset, length) {\n var string = '', chr = 0;\n for (var i = offset, end = offset + length; i < end; i++) {\n var byte = bytes[i];\n if ((byte & 0x80) === 0x00) {\n string += String.fromCharCode(byte);\n continue;\n }\n if ((byte & 0xe0) === 0xc0) {\n string += String.fromCharCode(\n ((byte & 0x1f) << 6) |\n (bytes[++i] & 0x3f)\n );\n continue;\n }\n if ((byte & 0xf0) === 0xe0) {\n string += String.fromCharCode(\n ((byte & 0x0f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0)\n );\n continue;\n }\n if ((byte & 0xf8) === 0xf0) {\n chr = ((byte & 0x07) << 18) |\n ((bytes[++i] & 0x3f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0);\n if (chr >= 0x010000) { // surrogate pair\n chr -= 0x010000;\n string += String.fromCharCode((chr >>> 10) + 0xD800, (chr & 0x3FF) + 0xDC00);\n } else {\n string += String.fromCharCode(chr);\n }\n continue;\n }\n\n console.error('Invalid byte ' + byte.toString(16));\n // (do not throw error to avoid server/client from crashing due to hack attemps)\n // throw new Error('Invalid byte ' + byte.toString(16));\n }\n return string;\n}\n\nexport function int8 (bytes: number[], it: Iterator) {\n return uint8(bytes, it) << 24 >> 24;\n};\n\nexport function uint8 (bytes: number[], it: Iterator) {\n return bytes[it.offset++];\n};\n\nexport function int16 (bytes: number[], it: Iterator) {\n return uint16(bytes, it) << 16 >> 16;\n};\n\nexport function uint16 (bytes: number[], it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8;\n};\n\nexport function int32 (bytes: number[], it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8 | bytes[it.offset++] << 16 | bytes[it.offset++] << 24;\n};\n\nexport function uint32 (bytes: number[], it: Iterator) {\n return int32(bytes, it) >>> 0;\n};\n\nexport function float32(bytes: number[], it: Iterator) {\n return readFloat32(bytes, it);\n}\n\nexport function float64(bytes: number[], it: Iterator) {\n return readFloat64(bytes, it);\n}\n\nexport function int64(bytes: number[], it: Iterator) {\n const low = uint32(bytes, it);\n const high = int32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\nexport function uint64(bytes: number[], it: Iterator) {\n const low = uint32(bytes, it);\n const high = uint32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _int32 = new Int32Array(2);\nconst _float32 = new Float32Array(_int32.buffer);\nconst _float64 = new Float64Array(_int32.buffer);\n\nexport function readFloat32 (bytes: number[], it: Iterator) {\n _int32[0] = int32(bytes, it);\n return _float32[0];\n};\n\nexport function readFloat64 (bytes: number[], it: Iterator) {\n _int32[_isLittleEndian ? 0 : 1] = int32(bytes, it);\n _int32[_isLittleEndian ? 1 : 0] = int32(bytes, it);\n return _float64[0];\n};\n\nexport function boolean (bytes: number[], it: Iterator) {\n return uint8(bytes, it) > 0;\n};\n\nexport function string (bytes, it: Iterator) {\n const prefix = bytes[it.offset++];\n let length: number;\n\n if (prefix < 0xc0) {\n // fixstr\n length = prefix & 0x1f;\n\n } else if (prefix === 0xd9) {\n length = uint8(bytes, it);\n\n } else if (prefix === 0xda) {\n length = uint16(bytes, it);\n\n } else if (prefix === 0xdb) {\n length = uint32(bytes, it);\n }\n\n const value = utf8Read(bytes, it.offset, length);\n it.offset += length;\n\n return value;\n}\n\nexport function stringCheck(bytes, it: Iterator) {\n const prefix = bytes[it.offset];\n return (\n // fixstr\n (prefix < 0xc0 && prefix > 0xa0) ||\n // str 8\n prefix === 0xd9 ||\n // str 16\n prefix === 0xda ||\n // str 32\n prefix === 0xdb\n );\n}\n\nexport function number (bytes, it: Iterator) {\n const prefix = bytes[it.offset++];\n\n if (prefix < 0x80) {\n // positive fixint\n return prefix;\n\n } else if (prefix === 0xca) {\n // float 32\n return readFloat32(bytes, it);\n\n } else if (prefix === 0xcb) {\n // float 64\n return readFloat64(bytes, it);\n\n } else if (prefix === 0xcc) {\n // uint 8\n return uint8(bytes, it);\n\n } else if (prefix === 0xcd) {\n // uint 16\n return uint16(bytes, it);\n\n } else if (prefix === 0xce) {\n // uint 32\n return uint32(bytes, it);\n\n } else if (prefix === 0xcf) {\n // uint 64\n return uint64(bytes, it);\n\n } else if (prefix === 0xd0) {\n // int 8\n return int8(bytes, it);\n\n } else if (prefix === 0xd1) {\n // int 16\n return int16(bytes, it);\n\n } else if (prefix === 0xd2) {\n // int 32\n return int32(bytes, it);\n\n } else if (prefix === 0xd3) {\n // int 64\n return int64(bytes, it);\n\n } else if (prefix > 0xdf) {\n // negative fixint\n return (0xff - prefix + 1) * -1\n }\n};\n\nexport function numberCheck (bytes, it: Iterator) {\n const prefix = bytes[it.offset];\n // positive fixint - 0x00 - 0x7f\n // float 32 - 0xca\n // float 64 - 0xcb\n // uint 8 - 0xcc\n // uint 16 - 0xcd\n // uint 32 - 0xce\n // uint 64 - 0xcf\n // int 8 - 0xd0\n // int 16 - 0xd1\n // int 32 - 0xd2\n // int 64 - 0xd3\n return (\n prefix < 0x80 ||\n (prefix >= 0xca && prefix <= 0xd3)\n );\n}\n\nexport function arrayCheck (bytes, it: Iterator) {\n return bytes[it.offset] < 0xa0;\n\n // const prefix = bytes[it.offset] ;\n\n // if (prefix < 0xa0) {\n // return prefix;\n\n // // array\n // } else if (prefix === 0xdc) {\n // it.offset += 2;\n\n // } else if (0xdd) {\n // it.offset += 4;\n // }\n\n // return prefix;\n}\n\nexport function switchStructureCheck(bytes, it: Iterator) {\n return (\n // previous byte should be `SWITCH_TO_STRUCTURE`\n bytes[it.offset - 1] === SWITCH_TO_STRUCTURE &&\n // next byte should be a number\n (bytes[it.offset] < 0x80 || (bytes[it.offset] >= 0xca && bytes[it.offset] <= 0xd3))\n );\n}","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\n\ntype K = number; // TODO: allow to specify K generic on MapSchema.\n\nexport class CollectionSchema<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['collection'] !== 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 // 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 at(index: number): V | undefined {\n const key = Array.from(this.$items.keys())[index];\n return this.$items.get(key);\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: K;\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 return Array.from(this.$items.values()).some((v) => v === value);\n }\n\n forEach(callbackfn: (value: V, key: K, collection: CollectionSchema<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): CollectionSchema<V> {\n let cloned: CollectionSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new CollectionSchema(), this);\n\n } else {\n // server-side\n cloned = new CollectionSchema();\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}\n","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 // 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(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}","/**\n * Extracted from https://www.npmjs.com/package/strong-events\n */\n\ntype ExtractFunctionParameters<T extends (...args: any[]) => any> = T extends (...args: infer P) => any ? P : never;\n\nexport class EventEmitter_<CallbackSignature extends (...args: any[]) => any> {\n handlers: Array<CallbackSignature> = [];\n\n register(cb: CallbackSignature, once: boolean = false) {\n this.handlers.push(cb);\n return this;\n }\n\n invoke(...args: ExtractFunctionParameters<CallbackSignature>) {\n this.handlers.forEach((handler) => handler(...args));\n }\n\n invokeAsync(...args: ExtractFunctionParameters<CallbackSignature>) {\n return Promise.all(this.handlers.map((handler) => handler(...args)));\n }\n\n remove (cb: CallbackSignature) {\n const index = this.handlers.indexOf(cb);\n this.handlers[index] = this.handlers[this.handlers.length - 1];\n this.handlers.pop();\n }\n\n clear() {\n this.handlers = [];\n }\n}\n","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { ClientWithSessionId } from \"../annotations\";\n\nexport class ClientState {\n refIds = new WeakSet<ChangeTree>();\n containerIndexes = new WeakMap<ChangeTree, Set<number>>();\n // containerIndexes = new Map<ChangeTree, Set<number>>();\n\n addRefId(changeTree: ChangeTree) {\n if (!this.refIds.has(changeTree)) {\n this.refIds.add(changeTree);\n this.containerIndexes.set(changeTree, new Set());\n }\n }\n\n static get(client: ClientWithSessionId) {\n if (client.$filterState === undefined) {\n client.$filterState = new ClientState();\n }\n\n return client.$filterState as ClientState;\n }\n}\n","import { SWITCH_TO_STRUCTURE, TYPE_ID, OPERATION } from './spec';\nimport { ClientWithSessionId, PrimitiveType, Context, SchemaDefinition, DefinitionType } from \"./annotations\";\n\nimport * as encode from \"./encoding/encode\";\nimport * as decode from \"./encoding/decode\";\nimport type { Iterator } from \"./encoding/decode\"; // dts-bundle-generator\n\nimport { ArraySchema } from \"./types/ArraySchema\";\nimport { MapSchema } from \"./types/MapSchema\";\nimport { CollectionSchema } from './types/CollectionSchema';\nimport { SetSchema } from './types/SetSchema';\n\nimport { ChangeTree, Root, Ref, ChangeOperation } from \"./changes/ChangeTree\";\nimport { NonFunctionPropNames } from './types/HelperTypes';\nimport { EventEmitter_ } from './events/EventEmitter';\nimport { ClientState } from './filters';\nimport { getType } from './types';\n\nexport interface DataChange<T=any> {\n op: OPERATION,\n field: string;\n dynamicIndex?: number | string;\n value: T;\n previousValue: T;\n}\n\nexport interface SchemaDecoderCallbacks {\n onAdd?: (item: any, key: any) => void;\n onRemove?: (item: any, key: any) => void;\n onChange?: (item: any, key: any) => void;\n clone(decoding?: boolean): SchemaDecoderCallbacks;\n clear(decoding?: boolean);\n decode?(byte, it: Iterator);\n}\n\nclass EncodeSchemaError extends Error {}\n\nfunction assertType(value: any, type: string, klass: Schema, field: string | number) {\n let typeofTarget: string;\n let allowNull: boolean = false;\n\n switch (type) {\n case \"number\":\n case \"int8\":\n case \"uint8\":\n case \"int16\":\n case \"uint16\":\n case \"int32\":\n case \"uint32\":\n case \"int64\":\n case \"uint64\":\n case \"float32\":\n case \"float64\":\n typeofTarget = \"number\";\n if (isNaN(value)) {\n console.log(`trying to encode \"NaN\" in ${klass.constructor.name}#${field}`);\n }\n break;\n case \"string\":\n typeofTarget = \"string\";\n allowNull = true;\n break;\n case \"boolean\":\n // boolean is always encoded as true/false based on truthiness\n return;\n }\n\n if (typeof (value) !== typeofTarget && (!allowNull || (allowNull && value !== null))) {\n let foundValue = `'${JSON.stringify(value)}'${(value && value.constructor && ` (${value.constructor.name})`) || ''}`;\n throw new EncodeSchemaError(`a '${typeofTarget}' was expected, but ${foundValue} was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nfunction assertInstanceType(\n value: Schema,\n type: typeof Schema\n | typeof ArraySchema\n | typeof MapSchema\n | typeof CollectionSchema\n | typeof SetSchema,\n klass: Schema,\n field: string | number,\n) {\n if (!(value instanceof type)) {\n throw new EncodeSchemaError(`a '${type.name}' was expected, but '${(value as any).constructor.name}' was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nfunction encodePrimitiveType(\n type: PrimitiveType,\n bytes: number[],\n value: any,\n klass: Schema,\n field: string | number,\n) {\n assertType(value, type as string, klass, field);\n\n const encodeFunc = encode[type as string];\n\n if (encodeFunc) {\n encodeFunc(bytes, value);\n\n } else {\n throw new EncodeSchemaError(`a '${type}' was expected, but ${value} was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nfunction decodePrimitiveType (type: string, bytes: number[], it: Iterator) {\n return decode[type as string](bytes, it);\n}\n\n/**\n * Schema encoder / decoder\n */\nexport abstract class Schema {\n static _typeid: number;\n static _context: Context;\n\n static _definition: SchemaDefinition = SchemaDefinition.create();\n\n static onError(e) {\n console.error(e);\n }\n\n static is(type: DefinitionType) {\n return (\n type['_definition'] &&\n type['_definition'].schema !== undefined\n );\n }\n\n protected $changes: ChangeTree;\n // protected $root: ChangeSet;\n\n // TODO: refactor. this feature needs to be ported to other languages with potentially different API\n protected $listeners: { [field: string]: EventEmitter_<(a: any, b: any) => void> };\n\n public onChange?(changes: DataChange[]);\n public onRemove?();\n\n // allow inherited classes to have a constructor\n constructor(...args: any[]) {\n // fix enumerability of fields for end-user\n Object.defineProperties(this, {\n $changes: {\n value: new ChangeTree(this, undefined, new Root()),\n enumerable: false,\n writable: true\n },\n\n $listeners: {\n value: {},\n enumerable: false,\n writable: true\n },\n });\n\n const descriptors = this._definition.descriptors;\n if (descriptors) {\n Object.defineProperties(this, descriptors);\n }\n\n //\n // Assign initial values\n //\n if (args[0]) {\n this.assign(args[0]);\n }\n }\n\n public assign(\n props: { [prop in NonFunctionPropNames<this>]?: this[prop] }\n ) {\n Object.assign(this, props);\n return this;\n }\n\n protected get _definition () { return (this.constructor as typeof Schema)._definition; }\n\n public listen <K extends NonFunctionPropNames<this>>(attr: K, callback: (value: this[K], previousValue: this[K]) => void) {\n if (!this.$listeners[attr as string]) {\n this.$listeners[attr as string] = new EventEmitter_();\n }\n this.$listeners[attr as string].register(callback);\n\n // return un-register callback.\n return () =>\n this.$listeners[attr as string].remove(callback);\n }\n\n decode(\n bytes: number[],\n it: Iterator = { offset: 0 },\n ref: Ref = this,\n allChanges: Map<number, DataChange[]> = new Map<number, DataChange[]>(),\n ) {\n const $root = this.$changes.root;\n const totalBytes = bytes.length;\n\n let refId: number = 0;\n let changes: DataChange[] = [];\n\n $root.refs.set(refId, this);\n allChanges.set(refId, changes);\n\n while (it.offset < totalBytes) {\n let byte = bytes[it.offset++];\n\n if (byte == SWITCH_TO_STRUCTURE) {\n refId = decode.number(bytes, it);\n\n const nextRef = $root.refs.get(refId) as Schema;\n\n //\n // Trying to access a reference that haven't been decoded yet.\n //\n if (!nextRef) { throw new Error(`\"refId\" not found: ${refId}`); }\n\n ref = nextRef;\n\n // create empty list of changes for this refId.\n changes = [];\n allChanges.set(refId, changes);\n\n continue;\n }\n\n const changeTree: ChangeTree = ref['$changes'];\n const isSchema = (ref['_definition'] !== undefined);\n\n const operation = (isSchema)\n ? (byte >> 6) << 6 // \"compressed\" index + operation\n : byte; // \"uncompressed\" index + operation (array/map items)\n\n if (operation === OPERATION.CLEAR) {\n //\n // TODO: refactor me!\n // The `.clear()` method is calling `$root.removeRef(refId)` for\n // each item inside this collection\n //\n (ref as SchemaDecoderCallbacks).clear(true);\n continue;\n }\n\n const fieldIndex = (isSchema)\n ? byte % (operation || 255) // if \"REPLACE\" operation (0), use 255\n : decode.number(bytes, it);\n\n const fieldName = (isSchema)\n ? (ref['_definition'].fieldsByIndex[fieldIndex])\n : \"\";\n\n let type = changeTree.getType(fieldIndex);\n let value: any;\n let previousValue: any;\n\n let dynamicIndex: number | string;\n\n if (!isSchema) {\n previousValue = ref['getByIndex'](fieldIndex);\n\n if ((operation & OPERATION.ADD) === OPERATION.ADD) { // ADD or DELETE_AND_ADD\n dynamicIndex = (ref instanceof MapSchema)\n ? decode.string(bytes, it)\n : fieldIndex;\n ref['setIndex'](fieldIndex, dynamicIndex);\n\n } else {\n // here\n dynamicIndex = ref['getIndex'](fieldIndex);\n }\n\n } else {\n previousValue = ref[`_${fieldName}`];\n }\n\n //\n // Delete operations\n //\n if ((operation & OPERATION.DELETE) === OPERATION.DELETE)\n {\n if (operation !== OPERATION.DELETE_AND_ADD) {\n ref['deleteByIndex'](fieldIndex);\n }\n\n // Flag `refId` for garbage collection.\n if (previousValue && previousValue['$changes']) {\n $root.removeRef(previousValue['$changes'].refId);\n }\n\n value = null;\n }\n\n if (fieldName === undefined) {\n console.warn(\"@colyseus/schema: definition mismatch\");\n\n //\n // keep skipping next bytes until reaches a known structure\n // by local decoder.\n //\n const nextIterator: Iterator = { offset: it.offset };\n while (it.offset < totalBytes) {\n if (decode.switchStructureCheck(bytes, it)) {\n nextIterator.offset = it.offset + 1;\n if ($root.refs.has(decode.number(bytes, nextIterator))) {\n break;\n }\n }\n\n it.offset++;\n }\n\n continue;\n\n } else if (operation === OPERATION.DELETE) {\n //\n // FIXME: refactor me.\n // Don't do anything.\n //\n\n } else if (Schema.is(type)) {\n const refId = decode.number(bytes, it);\n value = $root.refs.get(refId);\n\n if (operation !== OPERATION.REPLACE) {\n const childType = this.getSchemaType(bytes, it, type);\n\n if (!value) {\n value = this.createTypeInstance(childType);\n value.$changes.refId = refId;\n\n if (previousValue) {\n value.onChange = previousValue.onChange;\n value.onRemove = previousValue.onRemove;\n value.$listeners = previousValue.$listeners;\n\n if (\n previousValue['$changes'].refId &&\n refId !== previousValue['$changes'].refId\n ) {\n $root.removeRef(previousValue['$changes'].refId);\n }\n }\n }\n\n $root.addRef(refId, value, (value !== previousValue));\n }\n } else if (typeof(type) === \"string\") {\n //\n // primitive value (number, string, boolean, etc)\n //\n value = decodePrimitiveType(type as string, bytes, it);\n\n } else {\n const typeDef = getType(Object.keys(type)[0]);\n const refId = decode.number(bytes, it);\n\n const valueRef: SchemaDecoderCallbacks = ($root.refs.has(refId))\n ? previousValue || $root.refs.get(refId)\n : new typeDef.constructor();\n\n value = valueRef.clone(true);\n value.$changes.refId = refId;\n\n // preserve schema callbacks\n if (previousValue) {\n value.onAdd = previousValue.onAdd;\n value.onRemove = previousValue.onRemove;\n value.onChange = previousValue.onChange;\n\n if (\n previousValue['$changes'].refId &&\n refId !== previousValue['$changes'].refId\n ) {\n $root.removeRef(previousValue['$changes'].refId);\n\n //\n // Trigger onRemove if structure has been replaced.\n //\n const deletes: DataChange[] = [];\n const entries: IterableIterator<[any, any]> = previousValue.entries();\n let iter: IteratorResult<[any, any]>;\n while ((iter = entries.next()) && !iter.done) {\n const [key, value] = iter.value;\n deletes.push({\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: value,\n });\n }\n\n allChanges.set(previousValue['$changes'].refId, deletes);\n }\n }\n\n $root.addRef(refId, value, (valueRef !== previousValue));\n\n //\n // TODO: deprecate proxies on next version.\n // get proxy to target value.\n //\n if (typeDef.getProxy) {\n value = typeDef.getProxy(value);\n }\n }\n\n let hasChange = (previousValue !== value);\n\n if (\n value !== null &&\n value !== undefined\n ) {\n if (value['$changes']) {\n value['$changes'].setParent(\n changeTree.ref,\n changeTree.root,\n fieldIndex,\n );\n }\n\n if (ref instanceof Schema) {\n ref[fieldName] = value;\n\n //\n // FIXME: use `_field` instead of `field`.\n //\n // `field` is going to use the setter of the PropertyDescriptor\n // and create a proxy for array/map. This is only useful for\n // backwards-compatibility with @colyseus/schema@0.5.x\n //\n // // ref[_field] = value;\n\n } else if (ref instanceof MapSchema) {\n // const key = ref['$indexes'].get(field);\n const key = dynamicIndex as string;\n\n // ref.set(key, value);\n ref['$items'].set(key, value);\n\n } else if (ref instanceof ArraySchema) {\n // const key = ref['$indexes'][field];\n // console.log(\"SETTING FOR ArraySchema =>\", { field, key, value });\n // ref[key] = value;\n ref.setAt(fieldIndex, value);\n\n } else if (ref instanceof CollectionSchema) {\n const index = ref.add(value);\n ref['setIndex'](fieldIndex, index);\n\n } else if (ref instanceof SetSchema) {\n const index = ref.add(value);\n if (index !== false) {\n ref['setIndex'](fieldIndex, index);\n }\n }\n }\n\n if (\n hasChange\n // &&\n // (\n // this.onChange || ref.$listeners[field]\n // )\n ) {\n changes.push({\n op: operation,\n field: fieldName,\n dynamicIndex,\n value,\n previousValue,\n });\n }\n }\n\n this._triggerChanges(allChanges);\n\n // drop references of unused schemas\n $root.garbageCollectDeletedRefs();\n\n return allChanges;\n }\n\n encode(\n encodeAll = false,\n bytes: number[] = [],\n useFilters: boolean = false,\n ) {\n const rootChangeTree = this.$changes;\n const refIdsVisited = new WeakSet<ChangeTree>();\n\n const changeTrees: ChangeTree[] = [rootChangeTree];\n let numChangeTrees = 1;\n\n for (let i = 0; i < numChangeTrees; i++) {\n const changeTree = changeTrees[i];\n const ref = changeTree.ref;\n const isSchema = (ref instanceof Schema);\n\n // Generate unique refId for the ChangeTree.\n changeTree.ensureRefId();\n\n // mark this ChangeTree as visited.\n refIdsVisited.add(changeTree);\n\n // root `refId` is skipped.\n if (\n changeTree !== rootChangeTree &&\n (changeTree.changed || encodeAll)\n ) {\n encode.uint8(bytes, SWITCH_TO_STRUCTURE);\n encode.number(bytes, changeTree.refId);\n }\n\n const changes: ChangeOperation[] | number[] = (encodeAll)\n ? Array.from(changeTree.allChanges)\n : Array.from(changeTree.changes.values());\n\n for (let j = 0, cl = changes.length; j < cl; j++) {\n const operation: ChangeOperation = (encodeAll)\n ? { op: OPERATION.ADD, index: changes[j] as number }\n : changes[j] as ChangeOperation;\n\n const fieldIndex = operation.index;\n\n const field = (isSchema)\n ? ref['_definition'].fieldsByIndex && ref['_definition'].fieldsByIndex[fieldIndex]\n : fieldIndex;\n\n // cache begin index if `useFilters`\n const beginIndex = bytes.length;\n\n // encode field index + operation\n if (operation.op !== OPERATION.TOUCH) {\n if (isSchema) {\n //\n // Compress `fieldIndex` + `operation` into a single byte.\n // This adds a limitaion of 64 fields per Schema structure\n //\n encode.uint8(bytes, (fieldIndex | operation.op));\n\n } else {\n encode.uint8(bytes, operation.op);\n\n // custom operations\n if (operation.op === OPERATION.CLEAR) {\n continue;\n }\n\n // indexed operations\n encode.number(bytes, fieldIndex);\n }\n }\n\n //\n // encode \"alias\" for dynamic fields (maps)\n //\n if (\n !isSchema &&\n (operation.op & OPERATION.ADD) == OPERATION.ADD // ADD or DELETE_AND_ADD\n ) {\n if (ref instanceof MapSchema) {\n //\n // MapSchema dynamic key\n //\n const dynamicIndex = changeTree.ref['$indexes'].get(fieldIndex);\n encode.string(bytes, dynamicIndex);\n }\n }\n\n if (operation.op === OPERATION.DELETE) {\n //\n // TODO: delete from filter cache data.\n //\n // if (useFilters) {\n // delete changeTree.caches[fieldIndex];\n // }\n continue;\n }\n\n // const type = changeTree.childType || ref._schema[field];\n const type = changeTree.getType(fieldIndex);\n\n // const type = changeTree.getType(fieldIndex);\n const value = changeTree.getValue(fieldIndex);\n\n // Enqueue ChangeTree to be visited\n if (\n value &&\n value['$changes'] &&\n !refIdsVisited.has(value['$changes'])\n ) {\n changeTrees.push(value['$changes']);\n value['$changes'].ensureRefId();\n numChangeTrees++;\n }\n\n if (operation.op === OPERATION.TOUCH) {\n continue;\n }\n\n if (Schema.is(type)) {\n assertInstanceType(value, type as typeof Schema, ref as Schema, field);\n\n //\n // Encode refId for this instance.\n // The actual instance is going to be encoded on next `changeTree` iteration.\n //\n encode.number(bytes, value.$changes.refId);\n\n // Try to encode inherited TYPE_ID if it's an ADD operation.\n if ((operation.op & OPERATION.ADD) === OPERATION.ADD) {\n this.tryEncodeTypeId(bytes, type as typeof Schema, value.constructor as typeof Schema);\n }\n\n } else if (typeof(type) === \"string\") {\n //\n // Primitive values\n //\n encodePrimitiveType(type as PrimitiveType, bytes, value, ref as Schema, field);\n\n } else {\n //\n // Custom type (MapSchema, ArraySchema, etc)\n //\n const definition = getType(Object.keys(type)[0]);\n\n //\n // ensure a ArraySchema has been provided\n //\n assertInstanceType(ref[`_${field}`], definition.constructor, ref as Schema, field);\n\n //\n // Encode refId for this instance.\n // The actual instance is going to be encoded on next `changeTree` iteration.\n //\n encode.number(bytes, value.$changes.refId);\n }\n\n if (useFilters) {\n // cache begin / end index\n changeTree.cache(fieldIndex as number, bytes.slice(beginIndex));\n }\n }\n\n if (!encodeAll && !useFilters) {\n changeTree.discard();\n }\n }\n\n return bytes;\n }\n\n encodeAll (useFilters?: boolean) {\n return this.encode(true, [], useFilters);\n }\n\n applyFilters(client: ClientWithSessionId, encodeAll: boolean = false) {\n const root = this;\n const refIdsDissallowed = new Set<number>();\n\n const $filterState = ClientState.get(client);\n\n const changeTrees = [this.$changes];\n let numChangeTrees = 1;\n\n let filteredBytes: number[] = [];\n\n for (let i = 0; i < numChangeTrees; i++) {\n const changeTree = changeTrees[i];\n\n if (refIdsDissallowed.has(changeTree.refId)) {\n // console.log(\"REFID IS NOT ALLOWED. SKIP.\", { refId: changeTree.refId })\n continue;\n }\n\n const ref = changeTree.ref as Ref;\n const isSchema: boolean = ref instanceof Schema;\n\n encode.uint8(filteredBytes, SWITCH_TO_STRUCTURE);\n encode.number(filteredBytes, changeTree.refId);\n\n const clientHasRefId = $filterState.refIds.has(changeTree);\n const isEncodeAll = (encodeAll || !clientHasRefId);\n\n // console.log(\"REF:\", ref.constructor.name);\n // console.log(\"Encode all?\", isEncodeAll);\n\n //\n // include `changeTree` on list of known refIds by this client.\n //\n $filterState.addRefId(changeTree);\n\n const containerIndexes = $filterState.containerIndexes.get(changeTree)\n const changes = (isEncodeAll)\n ? Array.from(changeTree.allChanges)\n : Array.from(changeTree.changes.values());\n\n //\n // WORKAROUND: tries to re-evaluate previously not included @filter() attributes\n // - see \"DELETE a field of Schema\" test case.\n //\n if (\n !encodeAll &&\n isSchema &&\n (ref as Schema)._definition.indexesWithFilters\n ) {\n const indexesWithFilters = (ref as Schema)._definition.indexesWithFilters;\n indexesWithFilters.forEach(indexWithFilter => {\n if (\n !containerIndexes.has(indexWithFilter) &&\n changeTree.allChanges.has(indexWithFilter)\n ) {\n if (isEncodeAll) {\n changes.push(indexWithFilter as any);\n\n } else {\n changes.push({ op: OPERATION.ADD, index: indexWithFilter, } as any);\n }\n }\n });\n }\n\n for (let j = 0, cl = changes.length; j < cl; j++) {\n const change: ChangeOperation = (isEncodeAll)\n ? { op: OPERATION.ADD, index: changes[j] as number }\n : changes[j] as ChangeOperation;\n\n // custom operations\n if (change.op === OPERATION.CLEAR) {\n encode.uint8(filteredBytes, change.op);\n continue;\n }\n\n const fieldIndex = change.index;\n\n //\n // Deleting fields: encode the operation + field index\n //\n if (change.op === OPERATION.DELETE) {\n //\n // DELETE operations also need to go through filtering.\n //\n // TODO: cache the previous value so we can access the value (primitive or `refId`)\n // (check against `$filterState.refIds`)\n //\n\n if (isSchema) {\n encode.uint8(filteredBytes, change.op | fieldIndex);\n\n } else {\n encode.uint8(filteredBytes, change.op);\n encode.number(filteredBytes, fieldIndex);\n\n }\n continue;\n }\n\n // indexed operation\n const value = changeTree.getValue(fieldIndex);\n const type = changeTree.getType(fieldIndex);\n\n if (isSchema) {\n // Is a Schema!\n const filter = (\n (ref as Schema)._definition.filters &&\n (ref as Schema)._definition.filters[fieldIndex]\n );\n\n if (filter && !filter.call(ref, client, value, root)) {\n if (value && value['$changes']) {\n refIdsDissallowed.add(value['$changes'].refId);;\n }\n continue;\n }\n\n } else {\n // Is a collection! (map, array, etc.)\n const parent = changeTree.parent as Ref;\n const filter = changeTree.getChildrenFilter();\n\n if (filter && !filter.call(parent, client, ref['$indexes'].get(fieldIndex), value, root)) {\n if (value && value['$changes']) {\n refIdsDissallowed.add(value['$changes'].refId);\n }\n continue;\n }\n }\n\n // visit child ChangeTree on further iteration.\n if (value['$changes']) {\n changeTrees.push(value['$changes']);\n numChangeTrees++;\n }\n\n //\n // Copy cached bytes\n //\n if (change.op !== OPERATION.TOUCH) {\n\n //\n // TODO: refactor me!\n //\n\n if (change.op === OPERATION.ADD || isSchema) {\n //\n // use cached bytes directly if is from Schema type.\n //\n filteredBytes.push.apply(filteredBytes, changeTree.caches[fieldIndex] ?? []);\n containerIndexes.add(fieldIndex);\n\n } else {\n if (containerIndexes.has(fieldIndex)) {\n //\n // use cached bytes if already has the field\n //\n filteredBytes.push.apply(filteredBytes, changeTree.caches[fieldIndex] ?? []);\n\n } else {\n //\n // force ADD operation if field is not known by this client.\n //\n containerIndexes.add(fieldIndex);\n\n encode.uint8(filteredBytes, OPERATION.ADD);\n encode.number(filteredBytes, fieldIndex);\n\n if (ref instanceof MapSchema) {\n //\n // MapSchema dynamic key\n //\n const dynamicIndex = changeTree.ref['$indexes'].get(fieldIndex);\n encode.string(filteredBytes, dynamicIndex);\n }\n\n if (value['$changes']) {\n encode.number(filteredBytes, value['$changes'].refId);\n\n } else {\n // \"encodePrimitiveType\" without type checking.\n // the type checking has been done on the first .encode() call.\n encode[type as string](filteredBytes, value);\n }\n }\n }\n\n } else if (value['$changes'] && !isSchema) {\n //\n // TODO:\n // - track ADD/REPLACE/DELETE instances on `$filterState`\n // - do NOT always encode dynamicIndex for MapSchema.\n // (If client already has that key, only the first index is necessary.)\n //\n\n encode.uint8(filteredBytes, OPERATION.ADD);\n encode.number(filteredBytes, fieldIndex);\n\n if (ref instanceof MapSchema) {\n //\n // MapSchema dynamic key\n //\n const dynamicIndex = changeTree.ref['$indexes'].get(fieldIndex);\n encode.string(filteredBytes, dynamicIndex);\n }\n\n encode.number(filteredBytes, value['$changes'].refId);\n }\n\n };\n }\n\n return filteredBytes;\n }\n\n clone (): this {\n const cloned = new ((this as any).constructor);\n const schema = this._definition.schema;\n for (let field in schema) {\n if (\n typeof (this[field]) === \"object\" &&\n typeof (this[field].clone) === \"function\"\n ) {\n // deep clone\n cloned[field] = this[field].clone();\n\n } else {\n // primitive values\n cloned[field] = this[field];\n }\n }\n return cloned;\n }\n\n triggerAll() {\n // skip if haven't received any remote refs yet.\n if (this.$changes.root.refs.size === 0) { return; }\n\n const allChanges = new Map<number, DataChange[]>();\n Schema.prototype._triggerAllFillChanges.call(this, this, allChanges);\n\n try {\n Schema.prototype._triggerChanges.call(this, allChanges);\n\n } catch (e) {\n Schema.onError(e);\n }\n }\n\n toJSON () {\n const schema = this._definition.schema;\n const deprecated = this._definition.deprecated;\n\n const obj = {}\n for (let field in schema) {\n if (!deprecated[field] && this[field] !== null && typeof (this[field]) !== \"undefined\") {\n obj[field] = (typeof (this[field]['toJSON']) === \"function\")\n ? this[field]['toJSON']()\n : this[`_${field}`];\n }\n }\n return obj;\n }\n\n discardAllChanges() {\n this.$changes.discardAll();\n }\n\n protected getByIndex(index: number) {\n return this[this._definition.fieldsByIndex[index]];\n }\n\n protected deleteByIndex(index: number) {\n this[this._definition.fieldsByIndex[index]] = undefined;\n }\n\n private tryEncodeTypeId (bytes: number[], type: typeof Schema, targetType: typeof Schema) {\n if (type._typeid !== targetType._typeid) {\n encode.uint8(bytes, TYPE_ID);\n encode.number(bytes, targetType._typeid);\n }\n }\n\n private getSchemaType(bytes: number[], it: Iterator, defaultType: typeof Schema): typeof Schema {\n let type: typeof Schema;\n\n if (bytes[it.offset] === TYPE_ID) {\n it.offset++;\n type = (this.constructor as typeof Schema)._context.get(decode.number(bytes, it));\n }\n\n return type || defaultType;\n }\n\n private createTypeInstance (type: typeof Schema): Schema {\n let instance: Schema = new (type as any)();\n\n // assign root on $changes\n instance.$changes.root = this.$changes.root;\n\n return instance;\n }\n\n private _triggerAllFillChanges(ref: Ref, allChanges: Map<number, DataChange[]>) {\n if (allChanges.has(ref['$changes'].refId)) { return; }\n\n const changes: DataChange[] = [];\n allChanges.set(ref['$changes'].refId || 0, changes);\n\n if (ref instanceof Schema) {\n const schema = ref._definition.schema;\n\n for (let fieldName in schema) {\n const _field = `_${fieldName}`;\n const value = ref[_field];\n\n if (value !== undefined) {\n changes.push({\n op: OPERATION.ADD,\n field: fieldName,\n value,\n previousValue: undefined\n });\n\n if (value['$changes'] !== undefined) {\n Schema.prototype._triggerAllFillChanges.call(this, value, allChanges);\n }\n\n }\n }\n\n } else {\n const entries: IterableIterator<[any, any]> = ref.entries();\n let iter: IteratorResult<[any, any]>;\n\n while ((iter = entries.next()) && !iter.done) {\n const [key, value] = iter.value;\n\n changes.push({\n op: OPERATION.ADD,\n field: key,\n dynamicIndex: key,\n value: value,\n previousValue: undefined,\n });\n\n if (value['$changes'] !== undefined) {\n Schema.prototype._triggerAllFillChanges.call(this, value, allChanges);\n }\n }\n }\n }\n\n private _triggerChanges(allChanges: Map<number, DataChange[]>) {\n allChanges.forEach((changes, refId) => {\n if (changes.length > 0) {\n const ref = this.$changes.root.refs.get(refId);\n const isSchema = ref instanceof Schema;\n\n for (let i = 0; i < changes.length; i++) {\n const change = changes[i];\n const listener = ref['$listeners'] && ref['$listeners'][change.field];\n\n if (!isSchema) {\n if (change.op === OPERATION.ADD && change.previousValue === undefined) {\n (ref as SchemaDecoderCallbacks).onAdd?.(change.value, change.dynamicIndex ?? change.field);\n\n } else if (change.op === OPERATION.DELETE) {\n //\n // FIXME: `previousValue` should always be avaiiable.\n // ADD + DELETE operations are still encoding DELETE operation.\n //\n if (change.previousValue !== undefined) {\n (ref as SchemaDecoderCallbacks).onRemove?.(change.previousValue, change.dynamicIndex ?? change.field);\n }\n\n } else if (change.op === OPERATION.DELETE_AND_ADD) {\n if (change.previousValue !== undefined) {\n (ref as SchemaDecoderCallbacks).onRemove?.(change.previousValue, change.dynamicIndex);\n }\n (ref as SchemaDecoderCallbacks).onAdd?.(change.value, change.dynamicIndex);\n\n } else if (\n change.op === OPERATION.REPLACE ||\n change.value !== change.previousValue\n ) {\n (ref as SchemaDecoderCallbacks).onChange?.(change.value, change.dynamicIndex);\n }\n }\n\n //\n // trigger onRemove on child structure.\n //\n if (\n (change.op & OPERATION.DELETE) === OPERATION.DELETE &&\n change.previousValue instanceof Schema &&\n change.previousValue.onRemove\n ) {\n change.previousValue.onRemove();\n }\n\n if (listener) {\n try {\n listener.invoke(change.value, change.previousValue);\n } catch (e) {\n Schema.onError(e);\n }\n }\n }\n\n if (isSchema) {\n if (ref.onChange) {\n try {\n (ref as Schema).onChange(changes);\n } catch (e) {\n Schema.onError(e);\n }\n }\n }\n\n }\n\n });\n }\n}\n","import { Schema } from \"./\";\nimport { ChangeTree } from \"./changes/ChangeTree\";\n\nexport function dumpChanges(schema: Schema) {\n const changeTrees: ChangeTree[] = [schema['$changes']];\n let numChangeTrees = 1;\n\n const dump = {};\n let currentStructure = dump;\n\n for (let i = 0; i < numChangeTrees; i++) {\n const changeTree = changeTrees[i];\n\n changeTree.changes.forEach((change) => {\n const ref = changeTree.ref;\n const fieldIndex = change.index;\n\n const field = ((ref as Schema)['_definition'])\n ? ref['_definition'].fieldsByIndex[fieldIndex]\n : ref['$indexes'].get(fieldIndex);\n\n currentStructure[field] = changeTree.getValue(fieldIndex);\n });\n\n }\n\n return dump;\n}","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { type, PrimitiveType, Context, DefinitionType } from \"./annotations\";\nimport { Schema } from \"./Schema\";\nimport { ArraySchema } from \"./types/ArraySchema\";\nimport { getType } from \"./types\";\nimport { Iterator } from \"./encoding/decode\";\n\nconst reflectionContext = new Context();\n\n/**\n * Reflection\n */\nexport class ReflectionField extends Schema {\n @type(\"string\", reflectionContext)\n name: string;\n\n @type(\"string\", reflectionContext)\n type: string;\n\n @type(\"number\", reflectionContext)\n referencedType: number;\n}\n\nexport class ReflectionType extends Schema {\n @type(\"number\", reflectionContext)\n id: number;\n\n @type([ ReflectionField ], reflectionContext)\n fields: ArraySchema<ReflectionField> = new ArraySchema<ReflectionField>();\n}\n\nexport class Reflection extends Schema {\n @type([ ReflectionType ], reflectionContext)\n types: ArraySchema<ReflectionType> = new ArraySchema<ReflectionType>();\n\n @type(\"number\", reflectionContext)\n rootType: number;\n\n static encode (instance: Schema) {\n const rootSchemaType = instance.constructor as typeof Schema;\n\n const reflection = new Reflection();\n reflection.rootType = rootSchemaType._typeid;\n\n const buildType = (currentType: ReflectionType, schema: any) => {\n for (let fieldName in schema) {\n const field = new ReflectionField();\n field.name = fieldName;\n\n let fieldType: string;\n\n if (typeof (schema[fieldName]) === \"string\") {\n fieldType = schema[fieldName];\n\n } else {\n const type = schema[fieldName];\n let childTypeSchema: typeof Schema;\n\n //\n // TODO: refactor below.\n //\n if (Schema.is(type)) {\n fieldType = \"ref\";\n childTypeSchema = schema[fieldName];\n\n } else {\n fieldType = Object.keys(type)[0];\n\n if (typeof(type[fieldType]) === \"string\") {\n fieldType += \":\" + type[fieldType]; // array:string\n\n } else {\n childTypeSchema = type[fieldType];\n }\n }\n\n field.referencedType = (childTypeSchema)\n ? childTypeSchema._typeid\n : -1;\n }\n\n field.type = fieldType;\n currentType.fields.push(field);\n }\n\n reflection.types.push(currentType);\n }\n\n const types = rootSchemaType._context.types;\n for (let typeid in types) {\n const type = new ReflectionType();\n type.id = Number(typeid);\n buildType(type, types[typeid]._definition.schema);\n }\n\n return reflection.encodeAll();\n }\n\n static decode<T extends Schema = Schema>(bytes: number[], it?: Iterator): T {\n const context = new Context();\n\n const reflection = new Reflection();\n reflection.decode(bytes, it);\n\n const schemaTypes = reflection.types.reduce((types, reflectionType) => {\n const schema: typeof Schema = class _ extends Schema {};\n const typeid = reflectionType.id;\n types[typeid] = schema\n context.add(schema, typeid);\n return types;\n }, {});\n\n reflection.types.forEach((reflectionType) => {\n const schemaType = schemaTypes[reflectionType.id];\n\n reflectionType.fields.forEach(field => {\n if (field.referencedType !== undefined) {\n let fieldType = field.type;\n let refType = schemaTypes[field.referencedType];\n\n // map or array of primitive type (-1)\n if (!refType) {\n const typeInfo = field.type.split(\":\");\n fieldType = typeInfo[0];\n refType = typeInfo[1];\n }\n\n if (fieldType === \"ref\") {\n type(refType, context)(schemaType.prototype, field.name);\n\n } else {\n type({ [fieldType]: refType } as DefinitionType, context)(schemaType.prototype, field.name);\n }\n\n } else {\n type(field.type as PrimitiveType, context)(schemaType.prototype, field.name);\n }\n });\n })\n\n const rootType: any = schemaTypes[reflection.rootType];\n const rootInstance = new rootType();\n\n /**\n * auto-initialize referenced types on root type\n * to allow registering listeners immediatelly on client-side\n */\n for (let fieldName in rootType._definition.schema) {\n const fieldType = rootType._definition.schema[fieldName];\n\n if (typeof(fieldType) !== \"string\") {\n rootInstance[fieldName] = (typeof (fieldType) === \"function\")\n ? new (fieldType as any)() // is a schema reference\n : new (getType(Object.keys(fieldType)[0])).constructor(); // is a \"collection\"\n }\n }\n\n return rootInstance;\n }\n}","export { Schema, DataChange } from \"./Schema\";\n\nimport { MapSchema, getMapProxy } from \"./types/MapSchema\"\nexport { MapSchema };\n\nimport { ArraySchema, getArrayProxy } from \"./types/ArraySchema\";\nexport { ArraySchema };\n\nimport { CollectionSchema } from \"./types/CollectionSchema\";\nexport { CollectionSchema };\n\nimport { SetSchema } from \"./types/SetSchema\";\nexport { SetSchema };\n\nimport { registerType } from \"./types\";\nexport { registerType };\n\nregisterType(\"map\", { constructor: MapSchema, getProxy: getMapProxy });\nregisterType(\"array\", { constructor: ArraySchema, getProxy: getArrayProxy });\nregisterType(\"set\", { constructor: SetSchema });\nregisterType(\"collection\", { constructor: CollectionSchema, });\n\n// Utils\nexport { dumpChanges } from \"./utils\";\n\n// Encoder / Decoder\nexport { Iterator } from \"./encoding/decode\";\nimport * as encode from \"./encoding/encode\";\nimport * as decode from \"./encoding/decode\";\nexport { encode, decode };\n\n// Reflection\nexport {\n Reflection,\n ReflectionType,\n ReflectionField,\n} from \"./Reflection\";\n\nexport {\n // Annotations\n type,\n deprecated,\n filter,\n filterChildren,\n defineTypes,\n hasFilter,\n\n // Internals\n SchemaDefinition,\n\n // Types\n Context,\n PrimitiveType,\n Definition,\n DefinitionType,\n FilterCallback,\n} from \"./annotations\";\n\nexport { OPERATION } from \"./spec\";"],"names":["int8","uint8","int16","uint16","int32","uint32","int64","uint64","float32","float64","_int32","_float32","_float64","boolean","string","number","decode.number","decode.string","decode.switchStructureCheck","encode.uint8","encode.number","encode.string"],"mappings":"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"}
@@ -42,10 +42,14 @@
42
42
  return c > 3 && r && Object.defineProperty(target, key, r), r;
43
43
  }
44
44
 
45
- function __spreadArray(to, from) {
46
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
47
- to[j] = from[i];
48
- return to;
45
+ function __spreadArray(to, from, pack) {
46
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
47
+ if (ar || !(i in from)) {
48
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
49
+ ar[i] = from[i];
50
+ }
51
+ }
52
+ return to.concat(ar || Array.prototype.slice.call(from));
49
53
  }
50
54
 
51
55
  // export const SWITCH_TO_STRUCTURE = 193; (easily collides with DELETE_AND_ADD + fieldIndex = 2)
@@ -547,7 +551,7 @@
547
551
  for (var _i = 0; _i < arguments.length; _i++) {
548
552
  items[_i] = arguments[_i];
549
553
  }
550
- return new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], (_a = Array.from(this.$items.values())).concat.apply(_a, items))))();
554
+ return new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], (_a = Array.from(this.$items.values())).concat.apply(_a, items), false)))();
551
555
  };
552
556
  /**
553
557
  * Adds all the elements of an array separated by the specified separator string.
@@ -587,7 +591,7 @@
587
591
  * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.
588
592
  */
589
593
  ArraySchema.prototype.slice = function (start, end) {
590
- return new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], Array.from(this.$items.values()).slice(start, end))))();
594
+ return new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], Array.from(this.$items.values()).slice(start, end), false)))();
591
595
  };
592
596
  /**
593
597
  * Sorts an array.
@@ -871,12 +875,12 @@
871
875
  ArraySchema.prototype.clone = function (isDecoding) {
872
876
  var cloned;
873
877
  if (isDecoding) {
874
- cloned = new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], Array.from(this.$items.values()))))();
878
+ cloned = new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], Array.from(this.$items.values()), false)))();
875
879
  }
876
880
  else {
877
881
  cloned = new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], this.map(function (item) { return ((item['$changes'])
878
882
  ? item.clone()
879
- : item); }))))();
883
+ : item); }), false)))();
880
884
  }
881
885
  return cloned;
882
886
  };
@@ -1258,7 +1262,7 @@
1258
1262
  value !== null) {
1259
1263
  // automaticallty transform Array into ArraySchema
1260
1264
  if (isArray && !(value instanceof ArraySchema)) {
1261
- value = new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], value)))();
1265
+ value = new (ArraySchema.bind.apply(ArraySchema, __spreadArray([void 0], value, false)))();
1262
1266
  }
1263
1267
  // automaticallty transform Map into MapSchema
1264
1268
  if (isMap && !(value instanceof MapSchema)) {
@@ -0,0 +1,40 @@
1
+ #include <iostream>
2
+ #include "schema.h"
3
+ #include "ArraySchemaTypes.hpp"
4
+
5
+ int main()
6
+ {
7
+ const unsigned char encodedState[] = { 0, 2, 2, 0, 0, 100, 1, 208, 156, 193, 1, 0, 100, 1, 208, 156, 193, 1, 4, 4, 0, 0, 1, 10, 2, 20, 3, 30, 2, 3, 3, 0, 163, 111, 110, 101, 1, 163, 116, 119, 111, 2, 165, 116, 104, 114, 101, 101, 3, 3, 3, 0, 232, 3, 0, 0, 1, 208, 7, 0, 0, 2, 72, 244, 255, 255 };
8
+
9
+ ArraySchemaTypes *p = new ArraySchemaTypes();
10
+ std::cerr << "============ about to decode\n";
11
+ p->decode(encodedState, sizeof(encodedState) / sizeof(unsigned char));
12
+ std::cerr << "============ decoded ================================================================ \n";
13
+
14
+ std::cout << "state.arrayOfNumbers.size() " << p->arrayOfNumbers->size() << std::endl;
15
+ std::cout << "state.arrayOfNumbers[0] " << p->arrayOfNumbers->at(0) << std::endl;
16
+ std::cout << "state.arrayOfNumbers[1] " << p->arrayOfNumbers->at(1) << std::endl;
17
+ std::cout << "state.arrayOfNumbers[2] " << p->arrayOfNumbers->at(2) << std::endl;
18
+ std::cout << "state.arrayOfNumbers[3] " << p->arrayOfNumbers->at(3) << std::endl;
19
+
20
+ std::cout << "state.arrayOfSchemas.size() " << p->arrayOfSchemas->size() << std::endl;
21
+ std::cout << "state.arrayOfSchemas[0].x " << p->arrayOfSchemas->at(0)->x << std::endl;
22
+ std::cout << "state.arrayOfSchemas[0].y " << p->arrayOfSchemas->at(0)->y << std::endl;
23
+ std::cout << "state.arrayOfSchemas[1].x " << p->arrayOfSchemas->at(1)->x << std::endl;
24
+ std::cout << "state.arrayOfSchemas[1].y " << p->arrayOfSchemas->at(1)->y << std::endl;
25
+
26
+ std::cout << "state.arrayOfStrings.size() " << p->arrayOfStrings->size() << std::endl;
27
+ std::cout << "state.arrayOfStrings[0] " << p->arrayOfStrings->at(0) << std::endl;
28
+ std::cout << "state.arrayOfStrings[1] " << p->arrayOfStrings->at(1) << std::endl;
29
+ std::cout << "state.arrayOfStrings[2] " << p->arrayOfStrings->at(2) << std::endl;
30
+
31
+ std::cout << "state.arrayOfInt32.size() " << p->arrayOfInt32->size() << std::endl;
32
+ std::cout << "state.arrayOfInt32[0] " << p->arrayOfInt32->at(0) << std::endl;
33
+ std::cout << "state.arrayOfInt32[1] " << p->arrayOfInt32->at(1) << std::endl;
34
+ std::cout << "state.arrayOfInt32[2] " << p->arrayOfInt32->at(2) << std::endl;
35
+
36
+ std::cout << std::endl;
37
+
38
+ delete p;
39
+ return 0;
40
+ }