@colyseus/schema 4.0.1 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/build/cjs/{index.js → index.cjs} +1 -1
  2. package/build/cjs/index.cjs.map +1 -0
  3. package/build/esm/index.mjs.map +1 -1
  4. package/lib/Metadata.js +54 -58
  5. package/lib/Metadata.js.map +1 -1
  6. package/lib/Reflection.js +29 -32
  7. package/lib/Reflection.js.map +1 -1
  8. package/lib/Schema.js +41 -45
  9. package/lib/Schema.js.map +1 -1
  10. package/lib/annotations.d.ts +1 -1
  11. package/lib/annotations.js +58 -69
  12. package/lib/annotations.js.map +1 -1
  13. package/lib/bench_encode.js +24 -59
  14. package/lib/bench_encode.js.map +1 -1
  15. package/lib/benchmark.d.ts +1 -0
  16. package/lib/benchmark.js +218 -0
  17. package/lib/benchmark.js.map +1 -0
  18. package/lib/codegen/api.js +10 -41
  19. package/lib/codegen/api.js.map +1 -1
  20. package/lib/codegen/argv.js +1 -3
  21. package/lib/codegen/argv.js.map +1 -1
  22. package/lib/codegen/cli.js +4 -9
  23. package/lib/codegen/cli.js.map +1 -1
  24. package/lib/codegen/languages/cpp.js +5 -8
  25. package/lib/codegen/languages/cpp.js.map +1 -1
  26. package/lib/codegen/languages/csharp.js +5 -8
  27. package/lib/codegen/languages/csharp.js.map +1 -1
  28. package/lib/codegen/languages/haxe.js +3 -6
  29. package/lib/codegen/languages/haxe.js.map +1 -1
  30. package/lib/codegen/languages/java.js +3 -6
  31. package/lib/codegen/languages/java.js.map +1 -1
  32. package/lib/codegen/languages/js.js +4 -7
  33. package/lib/codegen/languages/js.js.map +1 -1
  34. package/lib/codegen/languages/lua.js +4 -7
  35. package/lib/codegen/languages/lua.js.map +1 -1
  36. package/lib/codegen/languages/ts.js +5 -8
  37. package/lib/codegen/languages/ts.js.map +1 -1
  38. package/lib/codegen/parser.js +22 -59
  39. package/lib/codegen/parser.js.map +1 -1
  40. package/lib/codegen/types.js +12 -51
  41. package/lib/codegen/types.js.map +1 -1
  42. package/lib/decoder/DecodeOperation.js +44 -51
  43. package/lib/decoder/DecodeOperation.js.map +1 -1
  44. package/lib/decoder/Decoder.js +24 -28
  45. package/lib/decoder/Decoder.js.map +1 -1
  46. package/lib/decoder/ReferenceTracker.js +10 -14
  47. package/lib/decoder/ReferenceTracker.js.map +1 -1
  48. package/lib/decoder/strategy/Callbacks.js +39 -43
  49. package/lib/decoder/strategy/Callbacks.js.map +1 -1
  50. package/lib/decoder/strategy/RawChanges.js +1 -4
  51. package/lib/decoder/strategy/RawChanges.js.map +1 -1
  52. package/lib/decoder/strategy/getDecoderStateCallbacks.js +24 -27
  53. package/lib/decoder/strategy/getDecoderStateCallbacks.js.map +1 -1
  54. package/lib/encoder/ChangeTree.js +36 -44
  55. package/lib/encoder/ChangeTree.js.map +1 -1
  56. package/lib/encoder/EncodeOperation.js +25 -32
  57. package/lib/encoder/EncodeOperation.js.map +1 -1
  58. package/lib/encoder/Encoder.js +25 -29
  59. package/lib/encoder/Encoder.js.map +1 -1
  60. package/lib/encoder/Root.js +17 -21
  61. package/lib/encoder/Root.js.map +1 -1
  62. package/lib/encoder/StateView.js +40 -45
  63. package/lib/encoder/StateView.js.map +1 -1
  64. package/lib/encoding/assert.js +3 -9
  65. package/lib/encoding/assert.js.map +1 -1
  66. package/lib/encoding/decode.js +2 -6
  67. package/lib/encoding/decode.js.map +1 -1
  68. package/lib/encoding/encode.js +1 -4
  69. package/lib/encoding/encode.js.map +1 -1
  70. package/lib/encoding/spec.js +4 -7
  71. package/lib/encoding/spec.js.map +1 -1
  72. package/lib/index.d.ts +2 -2
  73. package/lib/index.js +33 -75
  74. package/lib/index.js.map +1 -1
  75. package/lib/src/Metadata.d.ts +49 -0
  76. package/lib/src/Metadata.js +256 -0
  77. package/lib/src/Metadata.js.map +1 -0
  78. package/lib/src/Reflection.d.ts +71 -0
  79. package/lib/src/Reflection.js +179 -0
  80. package/lib/src/Reflection.js.map +1 -0
  81. package/lib/src/Schema.d.ts +86 -0
  82. package/lib/src/Schema.js +352 -0
  83. package/lib/src/Schema.js.map +1 -0
  84. package/lib/src/annotations.d.ts +109 -0
  85. package/lib/src/annotations.js +473 -0
  86. package/lib/src/annotations.js.map +1 -0
  87. package/lib/src/bench_encode.d.ts +1 -0
  88. package/lib/src/bench_encode.js +91 -0
  89. package/lib/src/bench_encode.js.map +1 -0
  90. package/lib/src/codegen/api.d.ts +7 -0
  91. package/lib/src/codegen/api.js +56 -0
  92. package/lib/src/codegen/api.js.map +1 -0
  93. package/lib/src/codegen/argv.d.ts +6 -0
  94. package/lib/src/codegen/argv.js +39 -0
  95. package/lib/src/codegen/argv.js.map +1 -0
  96. package/lib/src/codegen/cli.d.ts +1 -0
  97. package/lib/src/codegen/cli.js +58 -0
  98. package/lib/src/codegen/cli.js.map +1 -0
  99. package/lib/src/codegen/languages/cpp.d.ts +3 -0
  100. package/lib/src/codegen/languages/cpp.js +258 -0
  101. package/lib/src/codegen/languages/cpp.js.map +1 -0
  102. package/lib/src/codegen/languages/csharp.d.ts +4 -0
  103. package/lib/src/codegen/languages/csharp.js +154 -0
  104. package/lib/src/codegen/languages/csharp.js.map +1 -0
  105. package/lib/src/codegen/languages/haxe.d.ts +3 -0
  106. package/lib/src/codegen/languages/haxe.js +100 -0
  107. package/lib/src/codegen/languages/haxe.js.map +1 -0
  108. package/lib/src/codegen/languages/java.d.ts +6 -0
  109. package/lib/src/codegen/languages/java.js +100 -0
  110. package/lib/src/codegen/languages/java.js.map +1 -0
  111. package/lib/src/codegen/languages/js.d.ts +3 -0
  112. package/lib/src/codegen/languages/js.js +101 -0
  113. package/lib/src/codegen/languages/js.js.map +1 -0
  114. package/lib/src/codegen/languages/lua.d.ts +3 -0
  115. package/lib/src/codegen/languages/lua.js +103 -0
  116. package/lib/src/codegen/languages/lua.js.map +1 -0
  117. package/lib/src/codegen/languages/ts.d.ts +3 -0
  118. package/lib/src/codegen/languages/ts.js +116 -0
  119. package/lib/src/codegen/languages/ts.js.map +1 -0
  120. package/lib/src/codegen/parser.d.ts +13 -0
  121. package/lib/src/codegen/parser.js +327 -0
  122. package/lib/src/codegen/parser.js.map +1 -0
  123. package/lib/src/codegen/types.d.ts +52 -0
  124. package/lib/src/codegen/types.js +142 -0
  125. package/lib/src/codegen/types.js.map +1 -0
  126. package/lib/src/decoder/DecodeOperation.d.ts +23 -0
  127. package/lib/src/decoder/DecodeOperation.js +248 -0
  128. package/lib/src/decoder/DecodeOperation.js.map +1 -0
  129. package/lib/src/decoder/Decoder.d.ts +21 -0
  130. package/lib/src/decoder/Decoder.js +114 -0
  131. package/lib/src/decoder/Decoder.js.map +1 -0
  132. package/lib/src/decoder/ReferenceTracker.d.ts +25 -0
  133. package/lib/src/decoder/ReferenceTracker.js +135 -0
  134. package/lib/src/decoder/ReferenceTracker.js.map +1 -0
  135. package/lib/src/decoder/strategy/Callbacks.d.ts +154 -0
  136. package/lib/src/decoder/strategy/Callbacks.js +336 -0
  137. package/lib/src/decoder/strategy/Callbacks.js.map +1 -0
  138. package/lib/src/decoder/strategy/RawChanges.d.ts +3 -0
  139. package/lib/src/decoder/strategy/RawChanges.js +4 -0
  140. package/lib/src/decoder/strategy/RawChanges.js.map +1 -0
  141. package/lib/src/decoder/strategy/getDecoderStateCallbacks.d.ts +76 -0
  142. package/lib/src/decoder/strategy/getDecoderStateCallbacks.js +274 -0
  143. package/lib/src/decoder/strategy/getDecoderStateCallbacks.js.map +1 -0
  144. package/lib/src/encoder/ChangeTree.d.ts +135 -0
  145. package/lib/src/encoder/ChangeTree.js +534 -0
  146. package/lib/src/encoder/ChangeTree.js.map +1 -0
  147. package/lib/src/encoder/EncodeOperation.d.ts +22 -0
  148. package/lib/src/encoder/EncodeOperation.js +132 -0
  149. package/lib/src/encoder/EncodeOperation.js.map +1 -0
  150. package/lib/src/encoder/Encoder.d.ts +22 -0
  151. package/lib/src/encoder/Encoder.js +204 -0
  152. package/lib/src/encoder/Encoder.js.map +1 -0
  153. package/lib/src/encoder/Root.d.ts +28 -0
  154. package/lib/src/encoder/Root.js +229 -0
  155. package/lib/src/encoder/Root.js.map +1 -0
  156. package/lib/src/encoder/StateView.d.ts +34 -0
  157. package/lib/src/encoder/StateView.js +279 -0
  158. package/lib/src/encoder/StateView.js.map +1 -0
  159. package/lib/src/encoding/assert.d.ts +10 -0
  160. package/lib/src/encoding/assert.js +49 -0
  161. package/lib/src/encoding/assert.js.map +1 -0
  162. package/lib/src/encoding/decode.d.ts +67 -0
  163. package/lib/src/encoding/decode.js +217 -0
  164. package/lib/src/encoding/decode.js.map +1 -0
  165. package/lib/src/encoding/encode.d.ts +40 -0
  166. package/lib/src/encoding/encode.js +279 -0
  167. package/lib/src/encoding/encode.js.map +1 -0
  168. package/lib/src/encoding/spec.d.ts +24 -0
  169. package/lib/src/encoding/spec.js +26 -0
  170. package/lib/src/encoding/spec.js.map +1 -0
  171. package/lib/src/index.d.ts +32 -0
  172. package/lib/src/index.js +39 -0
  173. package/lib/src/index.js.map +1 -0
  174. package/lib/src/symbol.shim.d.ts +6 -0
  175. package/lib/src/symbol.shim.js +3 -0
  176. package/lib/src/symbol.shim.js.map +1 -0
  177. package/lib/src/types/HelperTypes.d.ts +77 -0
  178. package/lib/src/types/HelperTypes.js +2 -0
  179. package/lib/src/types/HelperTypes.js.map +1 -0
  180. package/lib/src/types/TypeContext.d.ts +31 -0
  181. package/lib/src/types/TypeContext.js +143 -0
  182. package/lib/src/types/TypeContext.js.map +1 -0
  183. package/lib/src/types/custom/ArraySchema.d.ts +270 -0
  184. package/lib/src/types/custom/ArraySchema.js +733 -0
  185. package/lib/src/types/custom/ArraySchema.js.map +1 -0
  186. package/lib/src/types/custom/CollectionSchema.d.ts +51 -0
  187. package/lib/src/types/custom/CollectionSchema.js +170 -0
  188. package/lib/src/types/custom/CollectionSchema.js.map +1 -0
  189. package/lib/src/types/custom/MapSchema.d.ts +51 -0
  190. package/lib/src/types/custom/MapSchema.js +222 -0
  191. package/lib/src/types/custom/MapSchema.js.map +1 -0
  192. package/lib/src/types/custom/SetSchema.d.ts +48 -0
  193. package/lib/src/types/custom/SetSchema.js +178 -0
  194. package/lib/src/types/custom/SetSchema.js.map +1 -0
  195. package/lib/src/types/registry.d.ts +16 -0
  196. package/lib/src/types/registry.js +30 -0
  197. package/lib/src/types/registry.js.map +1 -0
  198. package/lib/src/types/symbols.d.ts +33 -0
  199. package/lib/src/types/symbols.js +34 -0
  200. package/lib/src/types/symbols.js.map +1 -0
  201. package/lib/src/types/utils.d.ts +1 -0
  202. package/lib/src/types/utils.js +13 -0
  203. package/lib/src/types/utils.js.map +1 -0
  204. package/lib/src/utils.d.ts +13 -0
  205. package/lib/src/utils.js +49 -0
  206. package/lib/src/utils.js.map +1 -0
  207. package/lib/src/v3_bench.d.ts +1 -0
  208. package/lib/src/v3_bench.js +128 -0
  209. package/lib/src/v3_bench.js.map +1 -0
  210. package/lib/symbol.shim.js +1 -2
  211. package/lib/symbol.shim.js.map +1 -1
  212. package/lib/types/HelperTypes.js +1 -2
  213. package/lib/types/TypeContext.js +8 -12
  214. package/lib/types/TypeContext.js.map +1 -1
  215. package/lib/types/custom/ArraySchema.js +63 -67
  216. package/lib/types/custom/ArraySchema.js.map +1 -1
  217. package/lib/types/custom/CollectionSchema.js +27 -31
  218. package/lib/types/custom/CollectionSchema.js.map +1 -1
  219. package/lib/types/custom/MapSchema.js +37 -41
  220. package/lib/types/custom/MapSchema.js.map +1 -1
  221. package/lib/types/custom/SetSchema.js +28 -32
  222. package/lib/types/custom/SetSchema.js.map +1 -1
  223. package/lib/types/registry.js +13 -20
  224. package/lib/types/registry.js.map +1 -1
  225. package/lib/types/symbols.js +16 -19
  226. package/lib/types/symbols.js.map +1 -1
  227. package/lib/types/utils.js +1 -4
  228. package/lib/types/utils.js.map +1 -1
  229. package/lib/utils.js +9 -14
  230. package/lib/utils.js.map +1 -1
  231. package/lib/v3_bench.js +17 -19
  232. package/lib/v3_bench.js.map +1 -1
  233. package/package.json +9 -7
  234. package/src/codegen/api.ts +7 -0
  235. package/src/codegen/parser.ts +2 -2
  236. package/src/codegen/types.ts +5 -0
  237. package/src/index.ts +2 -2
  238. package/build/cjs/index.js.map +0 -1
  239. package/src/bench_encode.ts +0 -64
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3_bench.js","sourceRoot":"","sources":["../../src/v3_bench.ts"],"names":[],"mappings":"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","sourcesContent":["import { Schema, type, MapSchema, ArraySchema, Reflection, Encoder, Decoder } from \"./index\";\n\n// globalThis.interval = setInterval(() => {}, 1000);\n\n// class Item extends Schema {\n// @type(\"string\") name: string;\n// }\n\n// class RootState extends Schema {\n// @type([Item]) items = new ArraySchema<Item>();\n// }\n// const state = new RootState();\n// state.items.push(new Item().assign({ name: \"hello\" }));\n\n// console.log(\"Encoded:\", state.encode());\n\nclass Vec3 extends Schema {\n @type(\"number\") x: number;\n @type(\"number\") y: number;\n @type(\"number\") z: number;\n}\n\nclass Base extends Schema {}\n\nclass Entity extends Schema {\n @type(Vec3) position = new Vec3().assign({ x: 0, y: 0, z: 0 });\n}\n\nclass Player extends Entity {\n @type(Vec3) rotation = new Vec3().assign({ x: 0, y: 0, z: 0 });\n @type(\"string\") secret: string = \"private info only for this player\";\n}\n\nclass State extends Schema {\n // @type({ map: Base }) players = new MapSchema<Entity>();\n @type(\"number\") num: number = 0;\n @type(\"string\") str = \"Hello world!\";\n // @type(Entity) entity = new Player().assign({\n // position: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n // rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n // });\n @type({ map: Entity }) entities = new MapSchema();\n}\n\nconst state = new State();\n\nstate.entities.set(\"one\", new Player().assign({\n position: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n rotation: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n}));\n\nstate.entities.set(\"two\", new Player().assign({\n position: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n rotation: new Vec3().assign({ x: 7, y: 8, z: 9 }),\n}));\n\nconst encoder = new Encoder(state);\nlet encoded = encoder.encode();\nconsole.log(`(${encoded.length})`, [...encoded]);\n\n(globalThis as any).perform = function(): void {\n for (let i = 0; i < 500000; i++) {\n encoder.encodeAll();\n }\n}\n\nfunction logTime(label: string, callback: Function) {\n const time = Date.now();\n for (let i = 0; i < 500000; i++) {\n callback();\n }\n console.log(`${label}:`, Date.now() - time);\n}\nlogTime(\"encode time\", () => encoder.encodeAll());\n\nconst decoder = new Decoder(new State());\nlogTime(\"decode time\", () => decoder.decode(encoded));\n\n// const time = Date.now();\n// console.profile();\n// for (let i = 0; i < 300000; i++) {\n// state.encodeAll();\n// }\n// console.profileEnd();\n// console.log(\"encode time:\", Date.now() - time);\n\n// const decoded = Reflection.decode(Reflection.encode(state));\n// decoded.decode(encoded);\n//\n// console.log(decoded.toJSON());\n//\n// const rotation = state.entity.rotation;\n// rotation.x = 100;\n//\n// encoded = state.encode();\n// console.log({encoded});\n//\n// decoded.decode(encoded);\n// console.log(decoded.toJSON());\n\n// const time = Date.now();\n// for (let i = 0; i < 300000; i++) {\n// const state = new State();\n// state.encode();\n// }\n// console.log(\"encode time:\", Date.now() - time);\n\n"]}
@@ -1,4 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
1
  Symbol.metadata ??= Symbol.for("Symbol.metadata");
2
+ export {};
4
3
  //# sourceMappingURL=symbol.shim.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"symbol.shim.js","sourceRoot":"","sources":["../src/symbol.shim.ts"],"names":[],"mappings":";;AAWC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC","sourcesContent":["\n//\n// Must have Symbol.metadata defined for metadata support on decorators:\n// https://github.com/microsoft/TypeScript/issues/55453#issuecomment-1687496648\n//\nexport {};\ndeclare global {\n interface SymbolConstructor {\n readonly metadata: unique symbol;\n }\n}\n(Symbol as any).metadata ??= Symbol.for(\"Symbol.metadata\");"]}
1
+ {"version":3,"file":"symbol.shim.js","sourceRoot":"","sources":["../src/symbol.shim.ts"],"names":[],"mappings":"AAWC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC","sourcesContent":["\n//\n// Must have Symbol.metadata defined for metadata support on decorators:\n// https://github.com/microsoft/TypeScript/issues/55453#issuecomment-1687496648\n//\nexport {};\ndeclare global {\n interface SymbolConstructor {\n readonly metadata: unique symbol;\n }\n}\n(Symbol as any).metadata ??= Symbol.for(\"Symbol.metadata\");"]}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=HelperTypes.js.map
@@ -1,10 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TypeContext = void 0;
4
- const Metadata_1 = require("../Metadata");
5
- const Schema_1 = require("../Schema");
6
- const symbols_1 = require("./symbols");
7
- class TypeContext {
1
+ import { Metadata } from "../Metadata";
2
+ import { Schema } from "../Schema";
3
+ import { $viewFieldIndexes } from "./symbols";
4
+ export class TypeContext {
8
5
  /**
9
6
  * For inheritance support
10
7
  * Keeps track of which classes extends which. (parent -> children)
@@ -13,7 +10,7 @@ class TypeContext {
13
10
  static { this.cachedContexts = new Map(); }
14
11
  static register(target) {
15
12
  const parent = Object.getPrototypeOf(target);
16
- if (parent !== Schema_1.Schema) {
13
+ if (parent !== Schema) {
17
14
  let inherits = TypeContext.inheritedTypes.get(parent);
18
15
  if (!inherits) {
19
16
  inherits = new Set();
@@ -55,7 +52,7 @@ class TypeContext {
55
52
  // Workaround to allow using an empty Schema (with no `@type()` fields)
56
53
  //
57
54
  if (schema[Symbol.metadata] === undefined) {
58
- Metadata_1.Metadata.initialize(schema);
55
+ Metadata.initialize(schema);
59
56
  }
60
57
  this.schemas.set(schema, typeid);
61
58
  return true;
@@ -78,14 +75,14 @@ class TypeContext {
78
75
  // add parent classes
79
76
  let parent = klass;
80
77
  while ((parent = Object.getPrototypeOf(parent)) &&
81
- parent !== Schema_1.Schema && // stop at root (Schema)
78
+ parent !== Schema && // stop at root (Schema)
82
79
  parent !== Function.prototype // stop at root (non-Schema)
83
80
  ) {
84
81
  this.discoverTypes(parent);
85
82
  }
86
83
  const metadata = (klass[Symbol.metadata] ??= {});
87
84
  // if any schema/field has filters, mark "context" as having filters.
88
- if (metadata[symbols_1.$viewFieldIndexes]) {
85
+ if (metadata[$viewFieldIndexes]) {
89
86
  this.hasFilters = true;
90
87
  }
91
88
  for (const fieldIndex in metadata) {
@@ -143,5 +140,4 @@ class TypeContext {
143
140
  `\tparentFiltered:${parentFiltered}`;
144
141
  }
145
142
  }
146
- exports.TypeContext = TypeContext;
147
143
  //# sourceMappingURL=TypeContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TypeContext.js","sourceRoot":"","sources":["../../src/types/TypeContext.ts"],"names":[],"mappings":"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","sourcesContent":["import { Metadata } from \"../Metadata\";\nimport { Schema } from \"../Schema\";\nimport { $viewFieldIndexes } from \"./symbols\";\n\nexport class TypeContext {\n types: { [id: number]: typeof Schema; } = {};\n schemas = new Map<typeof Schema, number>();\n\n hasFilters: boolean = false;\n parentFiltered: {[typeIdAndParentIndex: string]: boolean} = {};\n\n /**\n * For inheritance support\n * Keeps track of which classes extends which. (parent -> children)\n */\n static inheritedTypes = new Map<typeof Schema, Set<typeof Schema>>();\n static cachedContexts = new Map<typeof Schema, TypeContext>();\n\n static register(target: typeof Schema) {\n const parent = Object.getPrototypeOf(target);\n if (parent !== Schema) {\n let inherits = TypeContext.inheritedTypes.get(parent);\n if (!inherits) {\n inherits = new Set<typeof Schema>();\n TypeContext.inheritedTypes.set(parent, inherits);\n }\n inherits.add(target);\n }\n }\n\n static cache (rootClass: typeof Schema) {\n let context = TypeContext.cachedContexts.get(rootClass);\n if (!context) {\n context = new TypeContext(rootClass);\n TypeContext.cachedContexts.set(rootClass, context);\n }\n return context;\n }\n\n constructor(rootClass?: typeof Schema) {\n if (rootClass) {\n this.discoverTypes(rootClass);\n }\n }\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 = this.schemas.size) {\n // skip if already registered\n if (this.schemas.has(schema)) {\n return false;\n }\n\n this.types[typeid] = schema;\n\n //\n // Workaround to allow using an empty Schema (with no `@type()` fields)\n //\n if (schema[Symbol.metadata] === undefined) {\n Metadata.initialize(schema);\n }\n\n this.schemas.set(schema, typeid);\n return true;\n }\n\n getTypeId(klass: typeof Schema) {\n return this.schemas.get(klass);\n }\n\n private discoverTypes(klass: typeof Schema, parentType?: typeof Schema, parentIndex?: number, parentHasViewTag?: boolean) {\n if (parentHasViewTag) {\n this.registerFilteredByParent(klass, parentType, parentIndex);\n }\n\n // skip if already registered\n if (!this.add(klass)) { return; }\n\n // add classes inherited from this base class\n TypeContext.inheritedTypes.get(klass)?.forEach((child) => {\n this.discoverTypes(child, parentType, parentIndex, parentHasViewTag);\n });\n\n // add parent classes\n let parent: any = klass;\n while (\n (parent = Object.getPrototypeOf(parent)) &&\n parent !== Schema && // stop at root (Schema)\n parent !== Function.prototype // stop at root (non-Schema)\n ) {\n this.discoverTypes(parent);\n }\n\n const metadata: Metadata = (klass[Symbol.metadata] ??= {} as Metadata);\n\n // if any schema/field has filters, mark \"context\" as having filters.\n if (metadata[$viewFieldIndexes]) {\n this.hasFilters = true;\n }\n\n for (const fieldIndex in metadata) {\n const index = fieldIndex as any as number;\n\n const fieldType = metadata[index].type;\n const fieldHasViewTag = (metadata[index].tag !== undefined);\n\n if (typeof (fieldType) === \"string\") {\n continue;\n }\n\n if (typeof (fieldType) === \"function\") {\n this.discoverTypes(fieldType as typeof Schema, klass, index, parentHasViewTag || fieldHasViewTag);\n\n } else {\n const type = Object.values(fieldType)[0];\n\n // skip primitive types\n if (typeof (type) === \"string\") {\n continue;\n }\n\n this.discoverTypes(type as typeof Schema, klass, index, parentHasViewTag || fieldHasViewTag);\n }\n }\n }\n\n /**\n * Keep track of which classes have filters applied.\n * Format: `${typeid}-${parentTypeid}-${parentIndex}`\n */\n private registerFilteredByParent(schema: typeof Schema, parentType?: typeof Schema, parentIndex?: number) {\n const typeid = this.schemas.get(schema) ?? this.schemas.size;\n\n let key = `${typeid}`;\n if (parentType) { key += `-${this.schemas.get(parentType)}`; }\n\n key += `-${parentIndex}`;\n this.parentFiltered[key] = true;\n }\n\n debug() {\n let parentFiltered = \"\";\n\n for (const key in this.parentFiltered) {\n const keys: number[] = key.split(\"-\").map(Number);\n const fieldIndex = keys.pop();\n\n parentFiltered += `\\n\\t\\t`;\n parentFiltered += `${key}: ${keys.reverse().map((id, i) => {\n const klass = this.types[id];\n const metadata: Metadata = klass[Symbol.metadata];\n let txt = klass.name;\n if (i === 0) { txt += `[${metadata[fieldIndex].name}]`; }\n return `${txt}`;\n }).join(\" -> \")}`;\n }\n\n return `TypeContext ->\\n` +\n `\\tSchema types: ${this.schemas.size}\\n` +\n `\\thasFilters: ${this.hasFilters}\\n` +\n `\\tparentFiltered:${parentFiltered}`;\n }\n\n}\n"]}
1
+ {"version":3,"file":"TypeContext.js","sourceRoot":"","sources":["../../src/types/TypeContext.ts"],"names":[],"mappings":"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","sourcesContent":["import { Metadata } from \"../Metadata\";\nimport { Schema } from \"../Schema\";\nimport { $viewFieldIndexes } from \"./symbols\";\n\nexport class TypeContext {\n types: { [id: number]: typeof Schema; } = {};\n schemas = new Map<typeof Schema, number>();\n\n hasFilters: boolean = false;\n parentFiltered: {[typeIdAndParentIndex: string]: boolean} = {};\n\n /**\n * For inheritance support\n * Keeps track of which classes extends which. (parent -> children)\n */\n static inheritedTypes = new Map<typeof Schema, Set<typeof Schema>>();\n static cachedContexts = new Map<typeof Schema, TypeContext>();\n\n static register(target: typeof Schema) {\n const parent = Object.getPrototypeOf(target);\n if (parent !== Schema) {\n let inherits = TypeContext.inheritedTypes.get(parent);\n if (!inherits) {\n inherits = new Set<typeof Schema>();\n TypeContext.inheritedTypes.set(parent, inherits);\n }\n inherits.add(target);\n }\n }\n\n static cache (rootClass: typeof Schema) {\n let context = TypeContext.cachedContexts.get(rootClass);\n if (!context) {\n context = new TypeContext(rootClass);\n TypeContext.cachedContexts.set(rootClass, context);\n }\n return context;\n }\n\n constructor(rootClass?: typeof Schema) {\n if (rootClass) {\n this.discoverTypes(rootClass);\n }\n }\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 = this.schemas.size) {\n // skip if already registered\n if (this.schemas.has(schema)) {\n return false;\n }\n\n this.types[typeid] = schema;\n\n //\n // Workaround to allow using an empty Schema (with no `@type()` fields)\n //\n if (schema[Symbol.metadata] === undefined) {\n Metadata.initialize(schema);\n }\n\n this.schemas.set(schema, typeid);\n return true;\n }\n\n getTypeId(klass: typeof Schema) {\n return this.schemas.get(klass);\n }\n\n private discoverTypes(klass: typeof Schema, parentType?: typeof Schema, parentIndex?: number, parentHasViewTag?: boolean) {\n if (parentHasViewTag) {\n this.registerFilteredByParent(klass, parentType, parentIndex);\n }\n\n // skip if already registered\n if (!this.add(klass)) { return; }\n\n // add classes inherited from this base class\n TypeContext.inheritedTypes.get(klass)?.forEach((child) => {\n this.discoverTypes(child, parentType, parentIndex, parentHasViewTag);\n });\n\n // add parent classes\n let parent: any = klass;\n while (\n (parent = Object.getPrototypeOf(parent)) &&\n parent !== Schema && // stop at root (Schema)\n parent !== Function.prototype // stop at root (non-Schema)\n ) {\n this.discoverTypes(parent);\n }\n\n const metadata: Metadata = (klass[Symbol.metadata] ??= {} as Metadata);\n\n // if any schema/field has filters, mark \"context\" as having filters.\n if (metadata[$viewFieldIndexes]) {\n this.hasFilters = true;\n }\n\n for (const fieldIndex in metadata) {\n const index = fieldIndex as any as number;\n\n const fieldType = metadata[index].type;\n const fieldHasViewTag = (metadata[index].tag !== undefined);\n\n if (typeof (fieldType) === \"string\") {\n continue;\n }\n\n if (typeof (fieldType) === \"function\") {\n this.discoverTypes(fieldType as typeof Schema, klass, index, parentHasViewTag || fieldHasViewTag);\n\n } else {\n const type = Object.values(fieldType)[0];\n\n // skip primitive types\n if (typeof (type) === \"string\") {\n continue;\n }\n\n this.discoverTypes(type as typeof Schema, klass, index, parentHasViewTag || fieldHasViewTag);\n }\n }\n }\n\n /**\n * Keep track of which classes have filters applied.\n * Format: `${typeid}-${parentTypeid}-${parentIndex}`\n */\n private registerFilteredByParent(schema: typeof Schema, parentType?: typeof Schema, parentIndex?: number) {\n const typeid = this.schemas.get(schema) ?? this.schemas.size;\n\n let key = `${typeid}`;\n if (parentType) { key += `-${this.schemas.get(parentType)}`; }\n\n key += `-${parentIndex}`;\n this.parentFiltered[key] = true;\n }\n\n debug() {\n let parentFiltered = \"\";\n\n for (const key in this.parentFiltered) {\n const keys: number[] = key.split(\"-\").map(Number);\n const fieldIndex = keys.pop();\n\n parentFiltered += `\\n\\t\\t`;\n parentFiltered += `${key}: ${keys.reverse().map((id, i) => {\n const klass = this.types[id];\n const metadata: Metadata = klass[Symbol.metadata];\n let txt = klass.name;\n if (i === 0) { txt += `[${metadata[fieldIndex].name}]`; }\n return `${txt}`;\n }).join(\" -> \")}`;\n }\n\n return `TypeContext ->\\n` +\n `\\tSchema types: ${this.schemas.size}\\n` +\n `\\thasFilters: ${this.hasFilters}\\n` +\n `\\tparentFiltered:${parentFiltered}`;\n }\n\n}\n"]}
@@ -1,14 +1,11 @@
1
- "use strict";
2
1
  var _a, _b;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.ArraySchema = void 0;
5
- const symbols_1 = require("../symbols");
6
- const ChangeTree_1 = require("../../encoder/ChangeTree");
7
- const spec_1 = require("../../encoding/spec");
8
- const registry_1 = require("../registry");
9
- const EncodeOperation_1 = require("../../encoder/EncodeOperation");
10
- const DecodeOperation_1 = require("../../decoder/DecodeOperation");
11
- const assert_1 = require("../../encoding/assert");
2
+ import { $changes, $childType, $decoder, $deleteByIndex, $onEncodeEnd, $encoder, $filter, $getByIndex, $onDecodeEnd, $refId } from "../symbols";
3
+ import { ChangeTree, setOperationAtIndex } from "../../encoder/ChangeTree";
4
+ import { OPERATION } from "../../encoding/spec";
5
+ import { registerType } from "../registry";
6
+ import { encodeArray } from "../../encoder/EncodeOperation";
7
+ import { decodeArray } from "../../decoder/DecodeOperation";
8
+ import { assertInstanceType } from "../../encoding/assert";
12
9
  const DEFAULT_SORT = (a, b) => {
13
10
  const A = a.toString();
14
11
  const B = b.toString();
@@ -19,9 +16,9 @@ const DEFAULT_SORT = (a, b) => {
19
16
  else
20
17
  return 0;
21
18
  };
22
- class ArraySchema {
23
- static { this[_a] = EncodeOperation_1.encodeArray; }
24
- static { this[_b] = DecodeOperation_1.decodeArray; }
19
+ export class ArraySchema {
20
+ static { this[_a] = encodeArray; }
21
+ static { this[_b] = decodeArray; }
25
22
  /**
26
23
  * Determine if a property must be filtered.
27
24
  * - If returns false, the property is NOT going to be encoded.
@@ -31,10 +28,10 @@ class ArraySchema {
31
28
  * - First, the encoder iterates over all "not owned" properties and encodes them.
32
29
  * - Then, the encoder iterates over all "owned" properties per instance and encodes them.
33
30
  */
34
- static [(_a = symbols_1.$encoder, _b = symbols_1.$decoder, symbols_1.$filter)](ref, index, view) {
31
+ static [(_a = $encoder, _b = $decoder, $filter)](ref, index, view) {
35
32
  return (!view ||
36
- typeof (ref[symbols_1.$childType]) === "string" ||
37
- view.isChangeTreeVisible(ref['tmpItems'][index]?.[symbols_1.$changes]));
33
+ typeof (ref[$childType]) === "string" ||
34
+ view.isChangeTreeVisible(ref['tmpItems'][index]?.[$changes]));
38
35
  }
39
36
  static is(type) {
40
37
  return (
@@ -51,7 +48,7 @@ class ArraySchema {
51
48
  this.tmpItems = [];
52
49
  this.deletedIndexes = {};
53
50
  this.isMovingItems = false;
54
- Object.defineProperty(this, symbols_1.$childType, {
51
+ Object.defineProperty(this, $childType, {
55
52
  value: undefined,
56
53
  enumerable: false,
57
54
  writable: true,
@@ -75,34 +72,34 @@ class ArraySchema {
75
72
  obj.$deleteAt(key);
76
73
  }
77
74
  else {
78
- if (setValue[symbols_1.$changes]) {
79
- (0, assert_1.assertInstanceType)(setValue, obj[symbols_1.$childType], obj, key);
75
+ if (setValue[$changes]) {
76
+ assertInstanceType(setValue, obj[$childType], obj, key);
80
77
  const previousValue = obj.items[key];
81
78
  if (!obj.isMovingItems) {
82
79
  obj.$changeAt(Number(key), setValue);
83
80
  }
84
81
  else {
85
82
  if (previousValue !== undefined) {
86
- if (setValue[symbols_1.$changes].isNew) {
87
- obj[symbols_1.$changes].indexedOperation(Number(key), spec_1.OPERATION.MOVE_AND_ADD);
83
+ if (setValue[$changes].isNew) {
84
+ obj[$changes].indexedOperation(Number(key), OPERATION.MOVE_AND_ADD);
88
85
  }
89
86
  else {
90
- if ((obj[symbols_1.$changes].getChange(Number(key)) & spec_1.OPERATION.DELETE) === spec_1.OPERATION.DELETE) {
91
- obj[symbols_1.$changes].indexedOperation(Number(key), spec_1.OPERATION.DELETE_AND_MOVE);
87
+ if ((obj[$changes].getChange(Number(key)) & OPERATION.DELETE) === OPERATION.DELETE) {
88
+ obj[$changes].indexedOperation(Number(key), OPERATION.DELETE_AND_MOVE);
92
89
  }
93
90
  else {
94
- obj[symbols_1.$changes].indexedOperation(Number(key), spec_1.OPERATION.MOVE);
91
+ obj[$changes].indexedOperation(Number(key), OPERATION.MOVE);
95
92
  }
96
93
  }
97
94
  }
98
- else if (setValue[symbols_1.$changes].isNew) {
99
- obj[symbols_1.$changes].indexedOperation(Number(key), spec_1.OPERATION.ADD);
95
+ else if (setValue[$changes].isNew) {
96
+ obj[$changes].indexedOperation(Number(key), OPERATION.ADD);
100
97
  }
101
- setValue[symbols_1.$changes].setParent(this, obj[symbols_1.$changes].root, key);
98
+ setValue[$changes].setParent(this, obj[$changes].root, key);
102
99
  }
103
100
  if (previousValue !== undefined) {
104
101
  // remove root reference from previous value
105
- previousValue[symbols_1.$changes].root?.remove(previousValue[symbols_1.$changes]);
102
+ previousValue[$changes].root?.remove(previousValue[$changes]);
106
103
  }
107
104
  }
108
105
  else {
@@ -133,8 +130,8 @@ class ArraySchema {
133
130
  return Reflect.has(obj, key);
134
131
  }
135
132
  });
136
- Object.defineProperty(this, symbols_1.$changes, {
137
- value: new ChangeTree_1.ChangeTree(proxy),
133
+ Object.defineProperty(this, $changes, {
134
+ value: new ChangeTree(proxy),
138
135
  enumerable: false,
139
136
  writable: true,
140
137
  });
@@ -159,25 +156,25 @@ class ArraySchema {
159
156
  }
160
157
  push(...values) {
161
158
  let length = this.tmpItems.length;
162
- const changeTree = this[symbols_1.$changes];
159
+ const changeTree = this[$changes];
163
160
  for (let i = 0, l = values.length; i < l; i++, length++) {
164
161
  const value = values[i];
165
162
  if (value === undefined || value === null) {
166
163
  // skip null values
167
164
  return;
168
165
  }
169
- else if (typeof (value) === "object" && this[symbols_1.$childType]) {
170
- (0, assert_1.assertInstanceType)(value, this[symbols_1.$childType], this, i);
166
+ else if (typeof (value) === "object" && this[$childType]) {
167
+ assertInstanceType(value, this[$childType], this, i);
171
168
  // TODO: move value[$changes]?.setParent() to this block.
172
169
  }
173
- changeTree.indexedOperation(length, spec_1.OPERATION.ADD, this.items.length);
170
+ changeTree.indexedOperation(length, OPERATION.ADD, this.items.length);
174
171
  this.items.push(value);
175
172
  this.tmpItems.push(value);
176
173
  //
177
174
  // set value's parent after the value is set
178
175
  // (to avoid encoding "refId" operations before parent's "ADD" operation)
179
176
  //
180
- value[symbols_1.$changes]?.setParent(this, changeTree.root, length);
177
+ value[$changes]?.setParent(this, changeTree.root, length);
181
178
  }
182
179
  return length;
183
180
  }
@@ -197,7 +194,7 @@ class ArraySchema {
197
194
  if (index < 0) {
198
195
  return undefined;
199
196
  }
200
- this[symbols_1.$changes].delete(index, undefined, this.items.length - 1);
197
+ this[$changes].delete(index, undefined, this.items.length - 1);
201
198
  this.deletedIndexes[index] = true;
202
199
  return this.items.pop();
203
200
  }
@@ -219,30 +216,30 @@ class ArraySchema {
219
216
  }
220
217
  const operation = (this.items[index] !== undefined)
221
218
  ? typeof (value) === "object"
222
- ? spec_1.OPERATION.DELETE_AND_ADD // schema child
223
- : spec_1.OPERATION.REPLACE // primitive
224
- : spec_1.OPERATION.ADD;
225
- const changeTree = this[symbols_1.$changes];
219
+ ? OPERATION.DELETE_AND_ADD // schema child
220
+ : OPERATION.REPLACE // primitive
221
+ : OPERATION.ADD;
222
+ const changeTree = this[$changes];
226
223
  changeTree.change(index, operation);
227
224
  //
228
225
  // set value's parent after the value is set
229
226
  // (to avoid encoding "refId" operations before parent's "ADD" operation)
230
227
  //
231
- value[symbols_1.$changes]?.setParent(this, changeTree.root, index);
228
+ value[$changes]?.setParent(this, changeTree.root, index);
232
229
  }
233
230
  // encoding only
234
231
  $deleteAt(index, operation) {
235
- this[symbols_1.$changes].delete(index, operation);
232
+ this[$changes].delete(index, operation);
236
233
  }
237
234
  // decoding only
238
235
  $setAt(index, value, operation) {
239
236
  if (index === 0 &&
240
- operation === spec_1.OPERATION.ADD &&
237
+ operation === OPERATION.ADD &&
241
238
  this.items[index] !== undefined) {
242
239
  // handle decoding unshift
243
240
  this.items.unshift(value);
244
241
  }
245
- else if (operation === spec_1.OPERATION.DELETE_AND_MOVE) {
242
+ else if (operation === OPERATION.DELETE_AND_MOVE) {
246
243
  this.items.splice(index, 1);
247
244
  this.items[index] = value;
248
245
  }
@@ -256,13 +253,13 @@ class ArraySchema {
256
253
  return;
257
254
  }
258
255
  // discard previous operations.
259
- const changeTree = this[symbols_1.$changes];
256
+ const changeTree = this[$changes];
260
257
  // remove children references
261
258
  changeTree.forEachChild((childChangeTree, _) => {
262
259
  changeTree.root?.remove(childChangeTree);
263
260
  });
264
261
  changeTree.discard(true);
265
- changeTree.operation(spec_1.OPERATION.CLEAR);
262
+ changeTree.operation(OPERATION.CLEAR);
266
263
  this.items.length = 0;
267
264
  this.tmpItems.length = 0;
268
265
  }
@@ -286,7 +283,7 @@ class ArraySchema {
286
283
  */
287
284
  // @ts-ignore
288
285
  reverse() {
289
- this[symbols_1.$changes].operation(spec_1.OPERATION.REVERSE);
286
+ this[$changes].operation(OPERATION.REVERSE);
290
287
  this.items.reverse();
291
288
  this.tmpItems.reverse();
292
289
  return this;
@@ -298,10 +295,10 @@ class ArraySchema {
298
295
  if (this.items.length === 0) {
299
296
  return undefined;
300
297
  }
301
- const changeTree = this[symbols_1.$changes];
298
+ const changeTree = this[$changes];
302
299
  const index = this.tmpItems.findIndex(item => item === this.items[0]);
303
300
  const allChangesIndex = this.items.findIndex(item => item === this.items[0]);
304
- changeTree.delete(index, spec_1.OPERATION.DELETE, allChangesIndex);
301
+ changeTree.delete(index, OPERATION.DELETE, allChangesIndex);
305
302
  changeTree.shiftAllChangeIndexes(-1, allChangesIndex);
306
303
  this.deletedIndexes[index] = true;
307
304
  return this.items.shift();
@@ -327,10 +324,10 @@ class ArraySchema {
327
324
  */
328
325
  sort(compareFn = DEFAULT_SORT) {
329
326
  this.isMovingItems = true;
330
- const changeTree = this[symbols_1.$changes];
327
+ const changeTree = this[$changes];
331
328
  const sortedItems = this.items.sort(compareFn);
332
329
  // wouldn't OPERATION.MOVE make more sense here?
333
- sortedItems.forEach((_, i) => changeTree.change(i, spec_1.OPERATION.REPLACE));
330
+ sortedItems.forEach((_, i) => changeTree.change(i, OPERATION.REPLACE));
334
331
  this.tmpItems.sort(compareFn);
335
332
  this.isMovingItems = false;
336
333
  return this;
@@ -342,7 +339,7 @@ class ArraySchema {
342
339
  * @param insertItems Elements to insert into the array in place of the deleted elements.
343
340
  */
344
341
  splice(start, deleteCount, ...insertItems) {
345
- const changeTree = this[symbols_1.$changes];
342
+ const changeTree = this[$changes];
346
343
  const itemsLength = this.items.length;
347
344
  const tmpItemsLength = this.tmpItems.length;
348
345
  const insertCount = insertItems.length;
@@ -363,7 +360,7 @@ class ArraySchema {
363
360
  //
364
361
  for (let i = start; i < start + deleteCount; i++) {
365
362
  const index = indexes[i];
366
- changeTree.delete(index, spec_1.OPERATION.DELETE);
363
+ changeTree.delete(index, OPERATION.DELETE);
367
364
  this.deletedIndexes[index] = true;
368
365
  }
369
366
  }
@@ -380,10 +377,10 @@ class ArraySchema {
380
377
  for (let i = 0; i < insertCount; i++) {
381
378
  const addIndex = (indexes[start] ?? itemsLength) + i;
382
379
  changeTree.indexedOperation(addIndex, (this.deletedIndexes[addIndex])
383
- ? spec_1.OPERATION.DELETE_AND_ADD
384
- : spec_1.OPERATION.ADD);
380
+ ? OPERATION.DELETE_AND_ADD
381
+ : OPERATION.ADD);
385
382
  // set value's parent/root
386
- insertItems[i][symbols_1.$changes]?.setParent(this, changeTree.root, addIndex);
383
+ insertItems[i][$changes]?.setParent(this, changeTree.root, addIndex);
387
384
  }
388
385
  }
389
386
  //
@@ -410,21 +407,21 @@ class ArraySchema {
410
407
  * @param items Elements to insert at the start of the Array.
411
408
  */
412
409
  unshift(...items) {
413
- const changeTree = this[symbols_1.$changes];
410
+ const changeTree = this[$changes];
414
411
  // shift indexes
415
412
  changeTree.shiftChangeIndexes(items.length);
416
413
  // new index
417
414
  if (changeTree.isFiltered) {
418
- (0, ChangeTree_1.setOperationAtIndex)(changeTree.filteredChanges, this.items.length);
415
+ setOperationAtIndex(changeTree.filteredChanges, this.items.length);
419
416
  // changeTree.filteredChanges[this.items.length] = OPERATION.ADD;
420
417
  }
421
418
  else {
422
- (0, ChangeTree_1.setOperationAtIndex)(changeTree.allChanges, this.items.length);
419
+ setOperationAtIndex(changeTree.allChanges, this.items.length);
423
420
  // changeTree.allChanges[this.items.length] = OPERATION.ADD;
424
421
  }
425
422
  // FIXME: should we use OPERATION.MOVE here instead?
426
423
  items.forEach((_, index) => {
427
- changeTree.change(index, spec_1.OPERATION.ADD);
424
+ changeTree.change(index, OPERATION.ADD);
428
425
  });
429
426
  this.tmpItems.unshift(...items);
430
427
  return this.items.unshift(...items);
@@ -679,7 +676,7 @@ class ArraySchema {
679
676
  this.isMovingItems = false;
680
677
  return this;
681
678
  }
682
- [(Symbol.unscopables, symbols_1.$getByIndex)](index, isEncodeAll = false) {
679
+ [(Symbol.unscopables, $getByIndex)](index, isEncodeAll = false) {
683
680
  //
684
681
  // TODO: avoid unecessary `this.tmpItems` check during decoding.
685
682
  //
@@ -692,15 +689,15 @@ class ArraySchema {
692
689
  ? this.items[index]
693
690
  : this.tmpItems[index] || this.items[index];
694
691
  }
695
- [symbols_1.$deleteByIndex](index) {
692
+ [$deleteByIndex](index) {
696
693
  this.items[index] = undefined;
697
694
  this.tmpItems[index] = undefined; // TODO: do not try to get "tmpItems" at decoding time.
698
695
  }
699
- [symbols_1.$onEncodeEnd]() {
696
+ [$onEncodeEnd]() {
700
697
  this.tmpItems = this.items.slice();
701
698
  this.deletedIndexes = {};
702
699
  }
703
- [symbols_1.$onDecodeEnd]() {
700
+ [$onDecodeEnd]() {
704
701
  this.items = this.items.filter((item) => item !== undefined);
705
702
  this.tmpItems = this.items.slice(); // TODO: do no use "tmpItems" at decoding time.
706
703
  }
@@ -724,7 +721,7 @@ class ArraySchema {
724
721
  cloned.push(...this.items);
725
722
  }
726
723
  else {
727
- cloned = new ArraySchema(...this.map(item => ((item[symbols_1.$changes])
724
+ cloned = new ArraySchema(...this.map(item => ((item[$changes])
728
725
  ? item.clone()
729
726
  : item)));
730
727
  }
@@ -732,6 +729,5 @@ class ArraySchema {
732
729
  }
733
730
  ;
734
731
  }
735
- exports.ArraySchema = ArraySchema;
736
- (0, registry_1.registerType)("array", { constructor: ArraySchema });
732
+ registerType("array", { constructor: ArraySchema });
737
733
  //# sourceMappingURL=ArraySchema.js.map