@colyseus/schema 2.0.21 → 2.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/index.js +9 -1
- package/build/cjs/index.js.map +1 -1
- package/build/esm/index.mjs +4 -1
- package/build/esm/index.mjs.map +1 -1
- package/build/umd/index.js +9 -1
- package/lib/Reflection.js +1 -1
- package/lib/Reflection.js.map +1 -1
- package/lib/types/ArraySchema.js +3 -0
- package/lib/types/ArraySchema.js.map +1 -1
- package/package.json +1 -1
- package/src/Reflection.ts +1 -1
- package/src/types/ArraySchema.ts +4 -0
package/build/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/spec.ts","../../src/changes/ChangeTree.ts","../../src/types/utils.ts","../../src/types/ArraySchema.ts","../../src/types/MapSchema.ts","../../src/types/typeRegistry.ts","../../src/annotations.ts","../../src/encoding/encode.ts","../../src/encoding/decode.ts","../../src/types/CollectionSchema.ts","../../src/types/SetSchema.ts","../../src/filters/index.ts","../../src/changes/ReferenceTracker.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, SuppressedError, Symbol */\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 __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\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 (g && (g = 0, op[0] && (_ = 0)), _) 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 var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\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: false } : 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\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\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\";\nimport { ReferenceTracker } from \"./ReferenceTracker\";\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\nexport class ChangeTree {\n ref: Ref;\n refId: number;\n\n root?: ReferenceTracker;\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?: ReferenceTracker) {\n this.ref = ref;\n this.setParent(parent, root);\n }\n\n setParent(\n parent: Ref,\n root?: ReferenceTracker,\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 { CollectionSchema, DataChange } from \"..\";\nimport { OPERATION } from \"../spec\";\n\nexport function addCallback(\n $callbacks: { [op: number]: Function[] },\n op: OPERATION,\n callback: (item: any, key: any) => void,\n existing?: { forEach(callback: (item: any, key: any) => void): void; }\n) {\n // initialize list of callbacks\n if (!$callbacks[op]) {\n $callbacks[op] = [];\n }\n\n $callbacks[op].push(callback);\n\n //\n // Trigger callback for existing elements\n // - OPERATION.ADD\n // - OPERATION.REPLACE\n //\n existing?.forEach((item, key) => callback(item, key));\n\n return () => spliceOne($callbacks[op], $callbacks[op].indexOf(callback));\n}\n\n\nexport function removeChildRefs(this: CollectionSchema, changes: DataChange[]) {\n const needRemoveRef = (typeof (this.$changes.getType()) !== \"string\");\n\n this.$items.forEach((item: any, key: any) => {\n changes.push({\n refId: this.$changes.refId,\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: item\n });\n\n if (needRemoveRef) {\n this.$changes.root.removeRef(item['$changes'].refId);\n }\n });\n}\n\n\nexport function spliceOne(arr: any[], index: number): boolean {\n // manually splice an array\n if (index === -1 || index >= arr.length) {\n return false;\n }\n\n const len = arr.length - 1;\n\n for (let i = index; i < len; i++) {\n arr[i] = arr[i + 1];\n }\n\n arr.length = len;\n\n return true;\n}","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\nimport { addCallback, removeChildRefs } from \"./utils\";\nimport { DataChange } from \"..\";\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 has: (obj, key) => {\n if (\n typeof (key) !== \"symbol\" &&\n !isNaN(Number(key))\n ) {\n return obj['$items'].has(Number(key))\n }\n return Reflect.has(obj, key)\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 $callbacks: { [operation: number]: Array<(item: V, key: number) => void> };\n public onAdd(callback: (item: V, key: number) => void, triggerAll: boolean = true) {\n return addCallback(\n (this.$callbacks || (this.$callbacks = {})),\n OPERATION.ADD,\n callback,\n (triggerAll)\n ? this.$items\n : undefined\n );\n }\n public onRemove(callback: (item: V, key: number) => void) { return addCallback(this.$callbacks || (this.$callbacks = {}), OPERATION.DELETE, callback); }\n public onChange(callback: (item: V, key: number) => void) { return addCallback(this.$callbacks || (this.$callbacks = {}), OPERATION.REPLACE, callback); }\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 === undefined || value === null) {\n console.error(\"ArraySchema items cannot be null nor undefined; Use `deleteAt(index)` instead.\");\n return;\n }\n\n // skip if the value is the same as cached.\n if (this.$items.get(index) === value) {\n return;\n }\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 }\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(changes?: DataChange[]) {\n // discard previous operations.\n this.$changes.discard(true, true);\n this.$changes.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n if (changes) {\n removeChildRefs.call(this, changes);\n }\n\n // clear items\n this.$items.clear();\n\n this.$changes.operation({ index: 0, op: OPERATION.CLEAR });\n\n // touch all structures until reach root\n this.$changes.touchParents();\n }\n\n /**\n * Combines two or more arrays.\n * @param items Additional items to add to the end of array1.\n */\n // @ts-ignore\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 // @ts-ignore\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 const sliced = new ArraySchema<V>();\n sliced.push(...Array.from(this.$items.values()).slice(start, end));\n return sliced as unknown as V[];\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.prototype.reduce.apply(Array.from(this.$items.values()), arguments);\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.prototype.reduceRight.apply(Array.from(this.$items.values()), arguments);\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 static get [Symbol.species]() {\n return ArraySchema;\n }\n\n // WORKAROUND for compatibility\n // - TypeScript 4 defines @@unscopables as a function\n // - TypeScript 5 defines @@unscopables as an object\n [Symbol.unscopables]: any;\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 // ES2022\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 throw new Error(\"ArraySchema#flat() is not supported.\");\n }\n\n findLast() {\n const arr = Array.from(this.$items.values());\n // @ts-ignore\n return arr.findLast.apply(arr, arguments);\n }\n\n findLastIndex(...args) {\n const arr = Array.from(this.$items.values());\n // @ts-ignore\n return arr.findLastIndex.apply(arr, arguments);\n }\n\n //\n // ES2023\n //\n with(index: number, value: V): V[] {\n const copy = Array.from(this.$items.values());\n copy[index] = value;\n return new ArraySchema(...copy);\n }\n toReversed(): V[] {\n return Array.from(this.$items.values()).reverse();\n }\n toSorted(compareFn?: (a: V, b: V) => number): V[] {\n return Array.from(this.$items.values()).sort(compareFn);\n }\n toSpliced(start: number, deleteCount: number, ...items: V[]): V[];\n toSpliced(start: number, deleteCount?: number): V[];\n // @ts-ignore\n toSpliced(start: unknown, deleteCount?: unknown, ...items?: unknown[]): V[] {\n const copy = Array.from(this.$items.values());\n // @ts-ignore\n return copy.toSpliced.apply(copy, arguments);\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}\n","import { SchemaDecoderCallbacks } from \"../Schema\";\nimport { addCallback, removeChildRefs } from \"./utils\";\nimport { DataChange } from \"..\";\nimport { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\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, K extends string = string> implements Map<K, V>, SchemaDecoderCallbacks {\n protected $changes: ChangeTree = new ChangeTree(this);\n\n protected $items: Map<K, V> = new Map<K, V>();\n protected $indexes: Map<number, K> = new Map<number, K>();\n\n protected $refId: number = 0;\n\n //\n // Decoding callbacks\n //\n public $callbacks: { [operation: number]: Array<(item: V, key: string) => void> };\n public onAdd(callback: (item: V, key: string) => void, triggerAll: boolean = true) {\n return addCallback(\n (this.$callbacks || (this.$callbacks = {})),\n OPERATION.ADD,\n callback,\n (triggerAll)\n ? this.$items\n : undefined\n );\n }\n public onRemove(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = {}), OPERATION.DELETE, callback); }\n public onChange(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = {}), OPERATION.REPLACE, callback); }\n\n static is(type: any) {\n return type['map'] !== undefined;\n }\n\n constructor (initialValues?: Map<K, V> | Record<K, V>) {\n if (initialValues) {\n if (\n initialValues instanceof Map ||\n initialValues instanceof MapSchema\n ) {\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<[K, V]> { return this.$items[Symbol.iterator](); }\n get [Symbol.toStringTag]() { return this.$items[Symbol.toStringTag] }\n\n static get [Symbol.species]() {\n return MapSchema;\n }\n\n set(key: K, 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 // Force \"key\" as string\n // See: https://github.com/colyseus/colyseus/issues/561#issuecomment-1646733468\n key = key.toString() as K;\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 &&\n this.$items.get(key) === value\n ) {\n // if value is the same, avoid re-encoding it.\n return;\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: K): V | undefined {\n return this.$items.get(key);\n }\n\n delete(key: K) {\n //\n // TODO: add a \"purge\" method after .encode() runs, to cleanup removed `$indexes`\n //\n // We don't remove $indexes to allow setting the same key in the same patch\n // (See \"should allow to remove and set an item in the same place\" test)\n //\n // // const index = this.$changes.indexes[key];\n // // this.$indexes.delete(index);\n\n this.$changes.delete(key);\n return this.$items.delete(key);\n }\n\n clear(changes?: DataChange[]) {\n // discard previous operations.\n this.$changes.discard(true, true);\n this.$changes.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n if (changes) {\n removeChildRefs.call(this, changes);\n }\n\n // clear items\n this.$items.clear();\n\n this.$changes.operation({ index: 0, op: OPERATION.CLEAR });\n\n // touch all structures until reach root\n this.$changes.touchParents();\n }\n\n has (key: K) {\n return this.$items.has(key);\n }\n\n forEach(callbackfn: (value: V, key: K, map: Map<K, 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: K) {\n this.$indexes.set(index, key);\n }\n\n protected getIndex(index: number) {\n return this.$indexes.get(index);\n }\n\n protected getByIndex(index: number) {\n return this.$items.get(this.$indexes.get(index));\n }\n\n protected deleteByIndex(index: number) {\n const key = this.$indexes.get(index);\n this.$items.delete(key);\n this.$indexes.delete(index);\n }\n\n toJSON() {\n const map: any = {};\n\n this.forEach((value, key) => {\n map[key] = (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value;\n });\n\n return map;\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): MapSchema<V> {\n let cloned: MapSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new MapSchema(), this);\n\n } else {\n // server-side\n cloned = new MapSchema();\n this.forEach((value, key) => {\n if (value['$changes']) {\n cloned.set(key, value['clone']());\n } else {\n cloned.set(key, value);\n }\n })\n }\n\n return cloned;\n }\n\n}\n","export interface TypeDefinition {\n constructor: any,\n\n // //\n // // TODO: deprecate proxy on next version\n // // the proxy is used for compatibility with versions <1.0.0 of @colyseus/schema\n // //\n // getProxy?: any,\n}\n\nconst registeredTypes: {[identifier: string] : TypeDefinition} = {};\n\nexport function registerType(identifier: string, definition: TypeDefinition) {\n registeredTypes[identifier] = definition;\n}\n\nexport function getType(identifier: string): TypeDefinition {\n return registeredTypes[identifier];\n}\n","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/typeRegistry';\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 hasField(field: string) {\n return this.indexes[field] !== undefined;\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 interface TypeOptions {\n manual?: boolean,\n context?: Context,\n}\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\n static create(options: TypeOptions = {}) {\n return function (definition: DefinitionType) {\n if (!options.context) {\n options.context = new Context();\n }\n return type(definition, options);\n }\n }\n}\n\nexport const globalContext = new Context();\n\n/**\n * [See documentation](https://docs.colyseus.io/state/schema/)\n *\n * Annotate a Schema property to be serializeable.\n * \\@type()'d fields are automatically flagged as \"dirty\" for the next patch.\n *\n * @example Standard usage, with automatic change tracking.\n * ```\n * \\@type(\"string\") propertyName: string;\n * ```\n *\n * @example You can provide the \"manual\" option if you'd like to manually control your patches via .setDirty().\n * ```\n * \\@type(\"string\", { manual: true })\n * ```\n */\nexport function type (\n type: DefinitionType,\n options: TypeOptions = {}\n): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n const context = options.context || globalContext;\n const constructor = target.constructor as typeof Schema;\n constructor._context = context;\n\n if (!type) {\n throw new Error(`${constructor.name}: @type() reference provided for \"${field}\" is undefined. Make sure you don't have any circular dependencies.`);\n }\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 if (options.manual) {\n // do not declare getter/setter descriptor\n definition.descriptors[field] = {\n enumerable: true,\n configurable: true,\n writable: true,\n };\n return;\n }\n\n const fieldCached = `_${field}`;\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 if (this[fieldCached]) {\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): 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 options: TypeOptions = {}\n) {\n if (!options.context) {\n options.context = target._context || options.context || globalContext;\n }\n\n for (let field in fields) {\n type(fields[field], options)(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 } from \"../Schema\";\nimport { addCallback, removeChildRefs } from \"./utils\";\nimport { DataChange } from \"..\";\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 $callbacks: { [operation: number]: Array<(item: V, key: string) => void> };\n public onAdd(callback: (item: V, key: string) => void, triggerAll: boolean = true) {\n return addCallback(\n (this.$callbacks || (this.$callbacks = [])),\n OPERATION.ADD,\n callback,\n (triggerAll)\n ? this.$items\n : undefined\n );\n }\n public onRemove(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = []), OPERATION.DELETE, callback); }\n public onChange(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = []), OPERATION.REPLACE, callback); }\n\n static is(type: any) {\n return type['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(changes?: DataChange[]) {\n // discard previous operations.\n this.$changes.discard(true, true);\n this.$changes.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n if (changes) {\n removeChildRefs.call(this, changes);\n }\n\n // clear items\n this.$items.clear();\n\n this.$changes.operation({ index: 0, op: OPERATION.CLEAR });\n\n // touch all structures until reach root\n this.$changes.touchParents();\n }\n\n has (value: V): boolean {\n 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}\n","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks } from \"../Schema\";\nimport { addCallback, removeChildRefs } from \"./utils\";\nimport { DataChange } from \"..\";\n\nexport class SetSchema<V=any> implements SchemaDecoderCallbacks {\n protected $changes: ChangeTree = new ChangeTree(this);\n\n protected $items: Map<number, V> = new Map<number, V>();\n protected $indexes: Map<number, number> = new Map<number, number>();\n\n protected $refId: number = 0;\n\n //\n // Decoding callbacks\n //\n public $callbacks: { [operation: number]: Array<(item: V, key: string) => void> };\n public onAdd(callback: (item: V, key: string) => void, triggerAll: boolean = true) {\n return addCallback(\n (this.$callbacks || (this.$callbacks = [])),\n OPERATION.ADD,\n callback,\n (triggerAll)\n ? this.$items\n : undefined\n );\n }\n public onRemove(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = []), OPERATION.DELETE, callback); }\n public onChange(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = []), OPERATION.REPLACE, callback); }\n\n static is(type: any) {\n return type['set'] !== undefined;\n }\n\n constructor (initialValues?: Array<V>) {\n if (initialValues) {\n initialValues.forEach((v) => this.add(v));\n }\n }\n\n add(value: V) {\n // immediatelly return false if value already added.\n if (this.has(value)) { return false; }\n\n // set \"index\" for reference.\n const index = this.$refId++;\n\n if ((value['$changes']) !== undefined) {\n (value['$changes'] as ChangeTree).setParent(this, this.$changes.root, index);\n }\n\n const operation = this.$changes.indexes[index]?.op ?? OPERATION.ADD;\n\n this.$changes.indexes[index] = index;\n\n this.$indexes.set(index, index);\n this.$items.set(index, value);\n\n this.$changes.change(index, operation);\n return index;\n }\n\n entries () {\n return this.$items.entries();\n }\n\n delete(item: V) {\n const entries = this.$items.entries();\n\n let index: number;\n let entry: IteratorResult<[number, V]>;\n while (entry = entries.next()) {\n if (entry.done) { break; }\n\n if (item === entry.value[1]) {\n index = entry.value[0];\n break;\n }\n }\n\n if (index === undefined) {\n return false;\n }\n\n this.$changes.delete(index);\n this.$indexes.delete(index);\n\n return this.$items.delete(index);\n }\n\n clear(changes?: DataChange[]) {\n // discard previous operations.\n this.$changes.discard(true, true);\n this.$changes.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n if (changes) {\n removeChildRefs.call(this, changes);\n }\n\n // clear items\n this.$items.clear();\n\n this.$changes.operation({ index: 0, op: OPERATION.CLEAR });\n\n // touch all structures until reach root\n this.$changes.touchParents();\n }\n\n has (value: V): boolean {\n const values = this.$items.values();\n\n let has = false;\n let entry: IteratorResult<V>;\n\n while (entry = values.next()) {\n if (entry.done) { break; }\n if (value === entry.value) {\n has = true;\n break;\n }\n }\n\n return has;\n }\n\n forEach(callbackfn: (value: V, key: number, collection: SetSchema<V>) => void) {\n this.$items.forEach((value, key, _) => callbackfn(value, key, this));\n }\n\n values() {\n return this.$items.values();\n }\n\n get size () {\n return this.$items.size;\n }\n\n protected setIndex(index: number, key: number) {\n this.$indexes.set(index, key);\n }\n\n protected getIndex(index: number) {\n return this.$indexes.get(index);\n }\n\n protected getByIndex(index: number) {\n return this.$items.get(this.$indexes.get(index));\n }\n\n protected deleteByIndex(index: number) {\n const key = this.$indexes.get(index);\n this.$items.delete(key);\n this.$indexes.delete(index);\n }\n\n toArray() {\n return Array.from(this.$items.values());\n }\n\n toJSON() {\n const values: V[] = [];\n\n this.forEach((value, key) => {\n values.push(\n (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value\n );\n });\n\n return values;\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): SetSchema<V> {\n let cloned: SetSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new SetSchema(), this);\n\n } else {\n // server-side\n cloned = new SetSchema();\n this.forEach((value) => {\n if (value['$changes']) {\n cloned.add(value['clone']());\n } else {\n cloned.add(value);\n }\n })\n }\n\n return cloned;\n }\n\n}","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 { Schema } from \"../Schema\";\nimport { Ref } from \"./ChangeTree\";\nimport type { SchemaDefinition } from \"../annotations\";\n\nexport class ReferenceTracker {\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: number) {\n const refCount = this.refCounts[refId];\n if (refCount === undefined) {\n console.warn(`trying to remove reference ${refId} that doesn't exist`);\n return;\n }\n if (refCount === 0) {\n console.warn(`trying to remove reference ${refId} with 0 refCount`);\n return;\n }\n\n this.refCounts[refId] = refCount - 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 //\n // Skip active references.\n //\n if (this.refCounts[refId] > 0) { return; }\n\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 (typeof (ref['_definition'].schema[fieldName]) !== \"string\" &&\n ref[fieldName] &&\n ref[fieldName]['$changes']) {\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 // clear deleted refs.\n this.deletedRefs.clear();\n }\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, Ref, ChangeOperation } from \"./changes/ChangeTree\";\nimport { NonFunctionPropNames, ToJSON } from './types/HelperTypes';\nimport { ClientState } from './filters';\nimport { getType } from './types/typeRegistry';\nimport { ReferenceTracker } from './changes/ReferenceTracker';\nimport { addCallback, spliceOne } from './types/utils';\n\nexport interface DataChange<T=any,F=string> {\n refId: number,\n op: OPERATION,\n field: F;\n dynamicIndex?: number | string;\n value: T;\n previousValue: T;\n}\n\nexport interface SchemaDecoderCallbacks<TValue=any, TKey=any> {\n $callbacks: { [operation: number]: Array<(item: TValue, key: TKey) => void> };\n\n onAdd(callback: (item: any, key: any) => void, ignoreExisting?: boolean): () => void;\n onRemove(callback: (item: any, key: any) => void): () => void;\n onChange(callback: (item: any, key: any) => void): () => void;\n\n clone(decoding?: boolean): SchemaDecoderCallbacks;\n clear(changes?: DataChange[]);\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\n // TODO: refactor. this feature needs to be ported to other languages with potentially different API\n // protected $listeners: { [field: string]: Array<(value: any, previousValue: any) => void> };\n protected $callbacks: { [op: number]: Array<Function> };\n\n public onChange(callback: () => void): () => void {\n return addCallback((this.$callbacks || (this.$callbacks = {})), OPERATION.REPLACE, callback);\n }\n public onRemove(callback: () => void): () => void {\n return addCallback((this.$callbacks || (this.$callbacks = {})), OPERATION.DELETE, callback);\n }\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 ReferenceTracker()),\n enumerable: false,\n writable: true\n },\n\n // $listeners: {\n // value: undefined,\n // enumerable: false,\n // writable: true\n // },\n\n $callbacks: {\n value: undefined,\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] } | ToJSON<this>,\n ) {\n Object.assign(this, props);\n return this;\n }\n\n protected get _definition () { return (this.constructor as typeof Schema)._definition; }\n\n /**\n * (Server-side): Flag a property to be encoded for the next patch.\n * @param instance Schema instance\n * @param property string representing the property name, or number representing the index of the property.\n * @param operation OPERATION to perform (detected automatically)\n */\n public setDirty<K extends NonFunctionPropNames<this>>(property: K | number, operation?: OPERATION) {\n this.$changes.change(property as any, operation);\n }\n\n /**\n * Client-side: listen for changes on property.\n * @param prop the property name\n * @param callback callback to be triggered on property change\n * @param immediate trigger immediatelly if property has been already set.\n */\n public listen<K extends NonFunctionPropNames<this>>(\n prop: K,\n callback: (value: this[K], previousValue: this[K]) => void,\n immediate: boolean = true,\n ) {\n if (!this.$callbacks) { this.$callbacks = {}; }\n if (!this.$callbacks[prop as string]) { this.$callbacks[prop as string] = []; }\n\n this.$callbacks[prop as string].push(callback);\n\n if (immediate && this[prop] !== undefined) {\n callback(this[prop], undefined);\n }\n\n // return un-register callback.\n return () => spliceOne(this.$callbacks[prop as string], this.$callbacks[prop as string].indexOf(callback));\n }\n\n decode(\n bytes: number[],\n it: Iterator = { offset: 0 },\n ref: Ref = this,\n ) {\n const allChanges: DataChange[] = [];\n\n const $root = this.$changes.root;\n const totalBytes = bytes.length;\n\n let refId: number = 0;\n $root.refs.set(refId, this);\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 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 ref = nextRef;\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(allChanges);\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.$callbacks = previousValue.$callbacks;\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['$callbacks'] = previousValue['$callbacks'];\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 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 allChanges.push({\n refId,\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: value,\n });\n }\n }\n }\n\n $root.addRef(refId, value, (valueRef !== previousValue));\n }\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 // ref[`_${fieldName}`] = 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 ref['$changes'].allChanges.add(fieldIndex);\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 (previousValue !== value) {\n allChanges.push({\n refId,\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 toJSON () {\n const schema = this._definition.schema;\n const deprecated = this._definition.deprecated;\n\n const obj: unknown = {};\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 as ToJSON<typeof this>;\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 _triggerChanges(changes: DataChange[]) {\n const uniqueRefIds = new Set<number>();\n const $refs = this.$changes.root.refs;\n\n for (let i = 0; i < changes.length; i++) {\n const change = changes[i];\n const refId = change.refId;\n const ref = $refs.get(refId);\n const $callbacks: Schema['$callbacks'] | SchemaDecoderCallbacks['$callbacks'] = ref['$callbacks'];\n\n //\n // trigger onRemove on child structure.\n //\n if (\n (change.op & OPERATION.DELETE) === OPERATION.DELETE &&\n change.previousValue instanceof Schema\n ) {\n change.previousValue['$callbacks']?.[OPERATION.DELETE]?.forEach(callback => callback());\n }\n\n // no callbacks defined, skip this structure!\n if (!$callbacks) { continue; }\n\n if (ref instanceof Schema) {\n if (!uniqueRefIds.has(refId)) {\n try {\n // trigger onChange\n ($callbacks as Schema['$callbacks'])?.[OPERATION.REPLACE]?.forEach(callback =>\n callback());\n\n } catch (e) {\n Schema.onError(e);\n }\n }\n\n try {\n if ($callbacks.hasOwnProperty(change.field)) {\n $callbacks[change.field]?.forEach((callback) =>\n callback(change.value, change.previousValue));\n }\n\n } catch (e) {\n Schema.onError(e);\n }\n\n } else {\n // is a collection of items\n\n if (change.op === OPERATION.ADD && change.previousValue === undefined) {\n // triger onAdd\n $callbacks[OPERATION.ADD]?.forEach(callback =>\n callback(change.value, change.dynamicIndex ?? change.field));\n\n } else if (change.op === OPERATION.DELETE) {\n //\n // FIXME: `previousValue` should always be available.\n // ADD + DELETE operations are still encoding DELETE operation.\n //\n if (change.previousValue !== undefined) {\n // triger onRemove\n $callbacks[OPERATION.DELETE]?.forEach(callback =>\n callback(change.previousValue, change.dynamicIndex ?? change.field));\n }\n\n } else if (change.op === OPERATION.DELETE_AND_ADD) {\n // triger onRemove\n if (change.previousValue !== undefined) {\n $callbacks[OPERATION.DELETE]?.forEach(callback =>\n callback(change.previousValue, change.dynamicIndex ?? change.field));\n }\n\n // triger onAdd\n $callbacks[OPERATION.ADD]?.forEach(callback =>\n callback(change.value, change.dynamicIndex ?? change.field));\n }\n\n // trigger onChange\n if (change.value !== change.previousValue) {\n $callbacks[OPERATION.REPLACE]?.forEach(callback =>\n callback(change.value, change.dynamicIndex ?? change.field));\n }\n }\n\n uniqueRefIds.add(refId);\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/typeRegistry\";\nimport { Iterator } from \"./encoding/decode\";\n\nconst reflectionContext = { context: 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 } from \"./Schema\";\nexport type { DataChange } from \"./Schema\";\n\nimport { MapSchema } from \"./types/MapSchema\"\nexport { MapSchema };\n\nimport { ArraySchema } 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/typeRegistry\";\nexport { registerType };\n\nregisterType(\"map\", { constructor: MapSchema });\nregisterType(\"array\", { constructor: ArraySchema });\nregisterType(\"set\", { constructor: SetSchema });\nregisterType(\"collection\", { constructor: CollectionSchema, });\n\n// Utils\nexport { dumpChanges } from \"./utils\";\n\n// Encoder / Decoder\nexport type { 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 Context,\n} from \"./annotations\";\n\n// Annotation types\nexport type {\n DefinitionType,\n PrimitiveType,\n Definition,\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/utils.ts","../../src/types/ArraySchema.ts","../../src/types/MapSchema.ts","../../src/types/typeRegistry.ts","../../src/annotations.ts","../../src/encoding/encode.ts","../../src/encoding/decode.ts","../../src/types/CollectionSchema.ts","../../src/types/SetSchema.ts","../../src/filters/index.ts","../../src/changes/ReferenceTracker.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, SuppressedError, Symbol */\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 __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\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 (g && (g = 0, op[0] && (_ = 0)), _) 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 var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\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: false } : 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\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\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\";\nimport { ReferenceTracker } from \"./ReferenceTracker\";\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\nexport class ChangeTree {\n ref: Ref;\n refId: number;\n\n root?: ReferenceTracker;\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?: ReferenceTracker) {\n this.ref = ref;\n this.setParent(parent, root);\n }\n\n setParent(\n parent: Ref,\n root?: ReferenceTracker,\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 { CollectionSchema, DataChange } from \"..\";\nimport { OPERATION } from \"../spec\";\n\nexport function addCallback(\n $callbacks: { [op: number]: Function[] },\n op: OPERATION,\n callback: (item: any, key: any) => void,\n existing?: { forEach(callback: (item: any, key: any) => void): void; }\n) {\n // initialize list of callbacks\n if (!$callbacks[op]) {\n $callbacks[op] = [];\n }\n\n $callbacks[op].push(callback);\n\n //\n // Trigger callback for existing elements\n // - OPERATION.ADD\n // - OPERATION.REPLACE\n //\n existing?.forEach((item, key) => callback(item, key));\n\n return () => spliceOne($callbacks[op], $callbacks[op].indexOf(callback));\n}\n\n\nexport function removeChildRefs(this: CollectionSchema, changes: DataChange[]) {\n const needRemoveRef = (typeof (this.$changes.getType()) !== \"string\");\n\n this.$items.forEach((item: any, key: any) => {\n changes.push({\n refId: this.$changes.refId,\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: item\n });\n\n if (needRemoveRef) {\n this.$changes.root.removeRef(item['$changes'].refId);\n }\n });\n}\n\n\nexport function spliceOne(arr: any[], index: number): boolean {\n // manually splice an array\n if (index === -1 || index >= arr.length) {\n return false;\n }\n\n const len = arr.length - 1;\n\n for (let i = index; i < len; i++) {\n arr[i] = arr[i + 1];\n }\n\n arr.length = len;\n\n return true;\n}","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks, Schema } from \"../Schema\";\nimport { addCallback, removeChildRefs } from \"./utils\";\nimport { DataChange } from \"..\";\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 has: (obj, key) => {\n if (\n typeof (key) !== \"symbol\" &&\n !isNaN(Number(key))\n ) {\n return obj['$items'].has(Number(key))\n }\n return Reflect.has(obj, key)\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 $callbacks: { [operation: number]: Array<(item: V, key: number) => void> };\n public onAdd(callback: (item: V, key: number) => void, triggerAll: boolean = true) {\n return addCallback(\n (this.$callbacks || (this.$callbacks = {})),\n OPERATION.ADD,\n callback,\n (triggerAll)\n ? this.$items\n : undefined\n );\n }\n public onRemove(callback: (item: V, key: number) => void) { return addCallback(this.$callbacks || (this.$callbacks = {}), OPERATION.DELETE, callback); }\n public onChange(callback: (item: V, key: number) => void) { return addCallback(this.$callbacks || (this.$callbacks = {}), OPERATION.REPLACE, callback); }\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 === undefined || value === null) {\n console.error(\"ArraySchema items cannot be null nor undefined; Use `deleteAt(index)` instead.\");\n return;\n }\n\n // skip if the value is the same as cached.\n if (this.$items.get(index) === value) {\n return;\n }\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 }\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(changes?: DataChange[]) {\n // discard previous operations.\n this.$changes.discard(true, true);\n this.$changes.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n if (changes) {\n removeChildRefs.call(this, changes);\n }\n\n // clear items\n this.$items.clear();\n\n this.$changes.operation({ index: 0, op: OPERATION.CLEAR });\n\n // touch all structures until reach root\n this.$changes.touchParents();\n }\n\n /**\n * Combines two or more arrays.\n * @param items Additional items to add to the end of array1.\n */\n // @ts-ignore\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 // @ts-ignore\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 const sliced = new ArraySchema<V>();\n sliced.push(...Array.from(this.$items.values()).slice(start, end));\n return sliced as unknown as V[];\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 for (let i = 0; i < items.length; i++) {\n this.setAt(start + i, items[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.prototype.reduce.apply(Array.from(this.$items.values()), arguments);\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.prototype.reduceRight.apply(Array.from(this.$items.values()), arguments);\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 static get [Symbol.species]() {\n return ArraySchema;\n }\n\n // WORKAROUND for compatibility\n // - TypeScript 4 defines @@unscopables as a function\n // - TypeScript 5 defines @@unscopables as an object\n [Symbol.unscopables]: any;\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 // ES2022\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 throw new Error(\"ArraySchema#flat() is not supported.\");\n }\n\n findLast() {\n const arr = Array.from(this.$items.values());\n // @ts-ignore\n return arr.findLast.apply(arr, arguments);\n }\n\n findLastIndex(...args) {\n const arr = Array.from(this.$items.values());\n // @ts-ignore\n return arr.findLastIndex.apply(arr, arguments);\n }\n\n //\n // ES2023\n //\n with(index: number, value: V): V[] {\n const copy = Array.from(this.$items.values());\n copy[index] = value;\n return new ArraySchema(...copy);\n }\n toReversed(): V[] {\n return Array.from(this.$items.values()).reverse();\n }\n toSorted(compareFn?: (a: V, b: V) => number): V[] {\n return Array.from(this.$items.values()).sort(compareFn);\n }\n toSpliced(start: number, deleteCount: number, ...items: V[]): V[];\n toSpliced(start: number, deleteCount?: number): V[];\n // @ts-ignore\n toSpliced(start: unknown, deleteCount?: unknown, ...items?: unknown[]): V[] {\n const copy = Array.from(this.$items.values());\n // @ts-ignore\n return copy.toSpliced.apply(copy, arguments);\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}\n","import { SchemaDecoderCallbacks } from \"../Schema\";\nimport { addCallback, removeChildRefs } from \"./utils\";\nimport { DataChange } from \"..\";\nimport { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\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, K extends string = string> implements Map<K, V>, SchemaDecoderCallbacks {\n protected $changes: ChangeTree = new ChangeTree(this);\n\n protected $items: Map<K, V> = new Map<K, V>();\n protected $indexes: Map<number, K> = new Map<number, K>();\n\n protected $refId: number = 0;\n\n //\n // Decoding callbacks\n //\n public $callbacks: { [operation: number]: Array<(item: V, key: string) => void> };\n public onAdd(callback: (item: V, key: string) => void, triggerAll: boolean = true) {\n return addCallback(\n (this.$callbacks || (this.$callbacks = {})),\n OPERATION.ADD,\n callback,\n (triggerAll)\n ? this.$items\n : undefined\n );\n }\n public onRemove(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = {}), OPERATION.DELETE, callback); }\n public onChange(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = {}), OPERATION.REPLACE, callback); }\n\n static is(type: any) {\n return type['map'] !== undefined;\n }\n\n constructor (initialValues?: Map<K, V> | Record<K, V>) {\n if (initialValues) {\n if (\n initialValues instanceof Map ||\n initialValues instanceof MapSchema\n ) {\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<[K, V]> { return this.$items[Symbol.iterator](); }\n get [Symbol.toStringTag]() { return this.$items[Symbol.toStringTag] }\n\n static get [Symbol.species]() {\n return MapSchema;\n }\n\n set(key: K, 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 // Force \"key\" as string\n // See: https://github.com/colyseus/colyseus/issues/561#issuecomment-1646733468\n key = key.toString() as K;\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 &&\n this.$items.get(key) === value\n ) {\n // if value is the same, avoid re-encoding it.\n return;\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: K): V | undefined {\n return this.$items.get(key);\n }\n\n delete(key: K) {\n //\n // TODO: add a \"purge\" method after .encode() runs, to cleanup removed `$indexes`\n //\n // We don't remove $indexes to allow setting the same key in the same patch\n // (See \"should allow to remove and set an item in the same place\" test)\n //\n // // const index = this.$changes.indexes[key];\n // // this.$indexes.delete(index);\n\n this.$changes.delete(key);\n return this.$items.delete(key);\n }\n\n clear(changes?: DataChange[]) {\n // discard previous operations.\n this.$changes.discard(true, true);\n this.$changes.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n if (changes) {\n removeChildRefs.call(this, changes);\n }\n\n // clear items\n this.$items.clear();\n\n this.$changes.operation({ index: 0, op: OPERATION.CLEAR });\n\n // touch all structures until reach root\n this.$changes.touchParents();\n }\n\n has (key: K) {\n return this.$items.has(key);\n }\n\n forEach(callbackfn: (value: V, key: K, map: Map<K, 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: K) {\n this.$indexes.set(index, key);\n }\n\n protected getIndex(index: number) {\n return this.$indexes.get(index);\n }\n\n protected getByIndex(index: number) {\n return this.$items.get(this.$indexes.get(index));\n }\n\n protected deleteByIndex(index: number) {\n const key = this.$indexes.get(index);\n this.$items.delete(key);\n this.$indexes.delete(index);\n }\n\n toJSON() {\n const map: any = {};\n\n this.forEach((value, key) => {\n map[key] = (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value;\n });\n\n return map;\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): MapSchema<V> {\n let cloned: MapSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new MapSchema(), this);\n\n } else {\n // server-side\n cloned = new MapSchema();\n this.forEach((value, key) => {\n if (value['$changes']) {\n cloned.set(key, value['clone']());\n } else {\n cloned.set(key, value);\n }\n })\n }\n\n return cloned;\n }\n\n}\n","export interface TypeDefinition {\n constructor: any,\n\n // //\n // // TODO: deprecate proxy on next version\n // // the proxy is used for compatibility with versions <1.0.0 of @colyseus/schema\n // //\n // getProxy?: any,\n}\n\nconst registeredTypes: {[identifier: string] : TypeDefinition} = {};\n\nexport function registerType(identifier: string, definition: TypeDefinition) {\n registeredTypes[identifier] = definition;\n}\n\nexport function getType(identifier: string): TypeDefinition {\n return registeredTypes[identifier];\n}\n","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/typeRegistry';\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 hasField(field: string) {\n return this.indexes[field] !== undefined;\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 interface TypeOptions {\n manual?: boolean,\n context?: Context,\n}\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\n static create(options: TypeOptions = {}) {\n return function (definition: DefinitionType) {\n if (!options.context) {\n options.context = new Context();\n }\n return type(definition, options);\n }\n }\n}\n\nexport const globalContext = new Context();\n\n/**\n * [See documentation](https://docs.colyseus.io/state/schema/)\n *\n * Annotate a Schema property to be serializeable.\n * \\@type()'d fields are automatically flagged as \"dirty\" for the next patch.\n *\n * @example Standard usage, with automatic change tracking.\n * ```\n * \\@type(\"string\") propertyName: string;\n * ```\n *\n * @example You can provide the \"manual\" option if you'd like to manually control your patches via .setDirty().\n * ```\n * \\@type(\"string\", { manual: true })\n * ```\n */\nexport function type (\n type: DefinitionType,\n options: TypeOptions = {}\n): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n const context = options.context || globalContext;\n const constructor = target.constructor as typeof Schema;\n constructor._context = context;\n\n if (!type) {\n throw new Error(`${constructor.name}: @type() reference provided for \"${field}\" is undefined. Make sure you don't have any circular dependencies.`);\n }\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 if (options.manual) {\n // do not declare getter/setter descriptor\n definition.descriptors[field] = {\n enumerable: true,\n configurable: true,\n writable: true,\n };\n return;\n }\n\n const fieldCached = `_${field}`;\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 if (this[fieldCached]) {\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): 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 options: TypeOptions = {}\n) {\n if (!options.context) {\n options.context = target._context || options.context || globalContext;\n }\n\n for (let field in fields) {\n type(fields[field], options)(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 } from \"../Schema\";\nimport { addCallback, removeChildRefs } from \"./utils\";\nimport { DataChange } from \"..\";\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 $callbacks: { [operation: number]: Array<(item: V, key: string) => void> };\n public onAdd(callback: (item: V, key: string) => void, triggerAll: boolean = true) {\n return addCallback(\n (this.$callbacks || (this.$callbacks = [])),\n OPERATION.ADD,\n callback,\n (triggerAll)\n ? this.$items\n : undefined\n );\n }\n public onRemove(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = []), OPERATION.DELETE, callback); }\n public onChange(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = []), OPERATION.REPLACE, callback); }\n\n static is(type: any) {\n return type['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(changes?: DataChange[]) {\n // discard previous operations.\n this.$changes.discard(true, true);\n this.$changes.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n if (changes) {\n removeChildRefs.call(this, changes);\n }\n\n // clear items\n this.$items.clear();\n\n this.$changes.operation({ index: 0, op: OPERATION.CLEAR });\n\n // touch all structures until reach root\n this.$changes.touchParents();\n }\n\n has (value: V): boolean {\n 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}\n","import { ChangeTree } from \"../changes/ChangeTree\";\nimport { OPERATION } from \"../spec\";\nimport { SchemaDecoderCallbacks } from \"../Schema\";\nimport { addCallback, removeChildRefs } from \"./utils\";\nimport { DataChange } from \"..\";\n\nexport class SetSchema<V=any> implements SchemaDecoderCallbacks {\n protected $changes: ChangeTree = new ChangeTree(this);\n\n protected $items: Map<number, V> = new Map<number, V>();\n protected $indexes: Map<number, number> = new Map<number, number>();\n\n protected $refId: number = 0;\n\n //\n // Decoding callbacks\n //\n public $callbacks: { [operation: number]: Array<(item: V, key: string) => void> };\n public onAdd(callback: (item: V, key: string) => void, triggerAll: boolean = true) {\n return addCallback(\n (this.$callbacks || (this.$callbacks = [])),\n OPERATION.ADD,\n callback,\n (triggerAll)\n ? this.$items\n : undefined\n );\n }\n public onRemove(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = []), OPERATION.DELETE, callback); }\n public onChange(callback: (item: V, key: string) => void) { return addCallback(this.$callbacks || (this.$callbacks = []), OPERATION.REPLACE, callback); }\n\n static is(type: any) {\n return type['set'] !== undefined;\n }\n\n constructor (initialValues?: Array<V>) {\n if (initialValues) {\n initialValues.forEach((v) => this.add(v));\n }\n }\n\n add(value: V) {\n // immediatelly return false if value already added.\n if (this.has(value)) { return false; }\n\n // set \"index\" for reference.\n const index = this.$refId++;\n\n if ((value['$changes']) !== undefined) {\n (value['$changes'] as ChangeTree).setParent(this, this.$changes.root, index);\n }\n\n const operation = this.$changes.indexes[index]?.op ?? OPERATION.ADD;\n\n this.$changes.indexes[index] = index;\n\n this.$indexes.set(index, index);\n this.$items.set(index, value);\n\n this.$changes.change(index, operation);\n return index;\n }\n\n entries () {\n return this.$items.entries();\n }\n\n delete(item: V) {\n const entries = this.$items.entries();\n\n let index: number;\n let entry: IteratorResult<[number, V]>;\n while (entry = entries.next()) {\n if (entry.done) { break; }\n\n if (item === entry.value[1]) {\n index = entry.value[0];\n break;\n }\n }\n\n if (index === undefined) {\n return false;\n }\n\n this.$changes.delete(index);\n this.$indexes.delete(index);\n\n return this.$items.delete(index);\n }\n\n clear(changes?: DataChange[]) {\n // discard previous operations.\n this.$changes.discard(true, true);\n this.$changes.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n if (changes) {\n removeChildRefs.call(this, changes);\n }\n\n // clear items\n this.$items.clear();\n\n this.$changes.operation({ index: 0, op: OPERATION.CLEAR });\n\n // touch all structures until reach root\n this.$changes.touchParents();\n }\n\n has (value: V): boolean {\n const values = this.$items.values();\n\n let has = false;\n let entry: IteratorResult<V>;\n\n while (entry = values.next()) {\n if (entry.done) { break; }\n if (value === entry.value) {\n has = true;\n break;\n }\n }\n\n return has;\n }\n\n forEach(callbackfn: (value: V, key: number, collection: SetSchema<V>) => void) {\n this.$items.forEach((value, key, _) => callbackfn(value, key, this));\n }\n\n values() {\n return this.$items.values();\n }\n\n get size () {\n return this.$items.size;\n }\n\n protected setIndex(index: number, key: number) {\n this.$indexes.set(index, key);\n }\n\n protected getIndex(index: number) {\n return this.$indexes.get(index);\n }\n\n protected getByIndex(index: number) {\n return this.$items.get(this.$indexes.get(index));\n }\n\n protected deleteByIndex(index: number) {\n const key = this.$indexes.get(index);\n this.$items.delete(key);\n this.$indexes.delete(index);\n }\n\n toArray() {\n return Array.from(this.$items.values());\n }\n\n toJSON() {\n const values: V[] = [];\n\n this.forEach((value, key) => {\n values.push(\n (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value\n );\n });\n\n return values;\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): SetSchema<V> {\n let cloned: SetSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new SetSchema(), this);\n\n } else {\n // server-side\n cloned = new SetSchema();\n this.forEach((value) => {\n if (value['$changes']) {\n cloned.add(value['clone']());\n } else {\n cloned.add(value);\n }\n })\n }\n\n return cloned;\n }\n\n}","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 { Schema } from \"../Schema\";\nimport { Ref } from \"./ChangeTree\";\nimport type { SchemaDefinition } from \"../annotations\";\n\nexport class ReferenceTracker {\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: number) {\n const refCount = this.refCounts[refId];\n if (refCount === undefined) {\n console.warn(`trying to remove reference ${refId} that doesn't exist`);\n return;\n }\n if (refCount === 0) {\n console.warn(`trying to remove reference ${refId} with 0 refCount`);\n return;\n }\n\n this.refCounts[refId] = refCount - 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 //\n // Skip active references.\n //\n if (this.refCounts[refId] > 0) { return; }\n\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 (typeof (ref['_definition'].schema[fieldName]) !== \"string\" &&\n ref[fieldName] &&\n ref[fieldName]['$changes']) {\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 // clear deleted refs.\n this.deletedRefs.clear();\n }\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, Ref, ChangeOperation } from \"./changes/ChangeTree\";\nimport { NonFunctionPropNames, ToJSON } from './types/HelperTypes';\nimport { ClientState } from './filters';\nimport { getType } from './types/typeRegistry';\nimport { ReferenceTracker } from './changes/ReferenceTracker';\nimport { addCallback, spliceOne } from './types/utils';\n\nexport interface DataChange<T=any,F=string> {\n refId: number,\n op: OPERATION,\n field: F;\n dynamicIndex?: number | string;\n value: T;\n previousValue: T;\n}\n\nexport interface SchemaDecoderCallbacks<TValue=any, TKey=any> {\n $callbacks: { [operation: number]: Array<(item: TValue, key: TKey) => void> };\n\n onAdd(callback: (item: any, key: any) => void, ignoreExisting?: boolean): () => void;\n onRemove(callback: (item: any, key: any) => void): () => void;\n onChange(callback: (item: any, key: any) => void): () => void;\n\n clone(decoding?: boolean): SchemaDecoderCallbacks;\n clear(changes?: DataChange[]);\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\n // TODO: refactor. this feature needs to be ported to other languages with potentially different API\n // protected $listeners: { [field: string]: Array<(value: any, previousValue: any) => void> };\n protected $callbacks: { [op: number]: Array<Function> };\n\n public onChange(callback: () => void): () => void {\n return addCallback((this.$callbacks || (this.$callbacks = {})), OPERATION.REPLACE, callback);\n }\n public onRemove(callback: () => void): () => void {\n return addCallback((this.$callbacks || (this.$callbacks = {})), OPERATION.DELETE, callback);\n }\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 ReferenceTracker()),\n enumerable: false,\n writable: true\n },\n\n // $listeners: {\n // value: undefined,\n // enumerable: false,\n // writable: true\n // },\n\n $callbacks: {\n value: undefined,\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] } | ToJSON<this>,\n ) {\n Object.assign(this, props);\n return this;\n }\n\n protected get _definition () { return (this.constructor as typeof Schema)._definition; }\n\n /**\n * (Server-side): Flag a property to be encoded for the next patch.\n * @param instance Schema instance\n * @param property string representing the property name, or number representing the index of the property.\n * @param operation OPERATION to perform (detected automatically)\n */\n public setDirty<K extends NonFunctionPropNames<this>>(property: K | number, operation?: OPERATION) {\n this.$changes.change(property as any, operation);\n }\n\n /**\n * Client-side: listen for changes on property.\n * @param prop the property name\n * @param callback callback to be triggered on property change\n * @param immediate trigger immediatelly if property has been already set.\n */\n public listen<K extends NonFunctionPropNames<this>>(\n prop: K,\n callback: (value: this[K], previousValue: this[K]) => void,\n immediate: boolean = true,\n ) {\n if (!this.$callbacks) { this.$callbacks = {}; }\n if (!this.$callbacks[prop as string]) { this.$callbacks[prop as string] = []; }\n\n this.$callbacks[prop as string].push(callback);\n\n if (immediate && this[prop] !== undefined) {\n callback(this[prop], undefined);\n }\n\n // return un-register callback.\n return () => spliceOne(this.$callbacks[prop as string], this.$callbacks[prop as string].indexOf(callback));\n }\n\n decode(\n bytes: number[],\n it: Iterator = { offset: 0 },\n ref: Ref = this,\n ) {\n const allChanges: DataChange[] = [];\n\n const $root = this.$changes.root;\n const totalBytes = bytes.length;\n\n let refId: number = 0;\n $root.refs.set(refId, this);\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 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 ref = nextRef;\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(allChanges);\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.$callbacks = previousValue.$callbacks;\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['$callbacks'] = previousValue['$callbacks'];\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 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 allChanges.push({\n refId,\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: value,\n });\n }\n }\n }\n\n $root.addRef(refId, value, (valueRef !== previousValue));\n }\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 // ref[`_${fieldName}`] = 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 ref['$changes'].allChanges.add(fieldIndex);\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 (previousValue !== value) {\n allChanges.push({\n refId,\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 toJSON () {\n const schema = this._definition.schema;\n const deprecated = this._definition.deprecated;\n\n const obj: unknown = {};\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 as ToJSON<typeof this>;\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 _triggerChanges(changes: DataChange[]) {\n const uniqueRefIds = new Set<number>();\n const $refs = this.$changes.root.refs;\n\n for (let i = 0; i < changes.length; i++) {\n const change = changes[i];\n const refId = change.refId;\n const ref = $refs.get(refId);\n const $callbacks: Schema['$callbacks'] | SchemaDecoderCallbacks['$callbacks'] = ref['$callbacks'];\n\n //\n // trigger onRemove on child structure.\n //\n if (\n (change.op & OPERATION.DELETE) === OPERATION.DELETE &&\n change.previousValue instanceof Schema\n ) {\n change.previousValue['$callbacks']?.[OPERATION.DELETE]?.forEach(callback => callback());\n }\n\n // no callbacks defined, skip this structure!\n if (!$callbacks) { continue; }\n\n if (ref instanceof Schema) {\n if (!uniqueRefIds.has(refId)) {\n try {\n // trigger onChange\n ($callbacks as Schema['$callbacks'])?.[OPERATION.REPLACE]?.forEach(callback =>\n callback());\n\n } catch (e) {\n Schema.onError(e);\n }\n }\n\n try {\n if ($callbacks.hasOwnProperty(change.field)) {\n $callbacks[change.field]?.forEach((callback) =>\n callback(change.value, change.previousValue));\n }\n\n } catch (e) {\n Schema.onError(e);\n }\n\n } else {\n // is a collection of items\n\n if (change.op === OPERATION.ADD && change.previousValue === undefined) {\n // triger onAdd\n $callbacks[OPERATION.ADD]?.forEach(callback =>\n callback(change.value, change.dynamicIndex ?? change.field));\n\n } else if (change.op === OPERATION.DELETE) {\n //\n // FIXME: `previousValue` should always be available.\n // ADD + DELETE operations are still encoding DELETE operation.\n //\n if (change.previousValue !== undefined) {\n // triger onRemove\n $callbacks[OPERATION.DELETE]?.forEach(callback =>\n callback(change.previousValue, change.dynamicIndex ?? change.field));\n }\n\n } else if (change.op === OPERATION.DELETE_AND_ADD) {\n // triger onRemove\n if (change.previousValue !== undefined) {\n $callbacks[OPERATION.DELETE]?.forEach(callback =>\n callback(change.previousValue, change.dynamicIndex ?? change.field));\n }\n\n // triger onAdd\n $callbacks[OPERATION.ADD]?.forEach(callback =>\n callback(change.value, change.dynamicIndex ?? change.field));\n }\n\n // trigger onChange\n if (change.value !== change.previousValue) {\n $callbacks[OPERATION.REPLACE]?.forEach(callback =>\n callback(change.value, change.dynamicIndex ?? change.field));\n }\n }\n\n uniqueRefIds.add(refId);\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/typeRegistry\";\nimport { Iterator } from \"./encoding/decode\";\n\nconst reflectionContext = { context: 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 } from \"./Schema\";\nexport type { DataChange } from \"./Schema\";\n\nimport { MapSchema } from \"./types/MapSchema\"\nexport { MapSchema };\n\nimport { ArraySchema } 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/typeRegistry\";\nexport { registerType };\n\nregisterType(\"map\", { constructor: MapSchema });\nregisterType(\"array\", { constructor: ArraySchema });\nregisterType(\"set\", { constructor: SetSchema });\nregisterType(\"collection\", { constructor: CollectionSchema, });\n\n// Utils\nexport { dumpChanges } from \"./utils\";\n\n// Encoder / Decoder\nexport type { 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 Context,\n} from \"./annotations\";\n\n// Annotation types\nexport type {\n DefinitionType,\n PrimitiveType,\n Definition,\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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"}
|