@colyseus/schema 4.0.0 → 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.
- package/build/cjs/{index.js → index.cjs} +1 -1
- package/build/cjs/index.cjs.map +1 -0
- package/build/esm/index.mjs.map +1 -1
- package/lib/Metadata.js +54 -58
- package/lib/Metadata.js.map +1 -1
- package/lib/Reflection.js +29 -32
- package/lib/Reflection.js.map +1 -1
- package/lib/Schema.js +41 -45
- package/lib/Schema.js.map +1 -1
- package/lib/annotations.d.ts +1 -1
- package/lib/annotations.js +58 -69
- package/lib/annotations.js.map +1 -1
- package/lib/bench_encode.js +24 -59
- package/lib/bench_encode.js.map +1 -1
- package/lib/benchmark.d.ts +1 -0
- package/lib/benchmark.js +218 -0
- package/lib/benchmark.js.map +1 -0
- package/lib/codegen/api.js +10 -41
- package/lib/codegen/api.js.map +1 -1
- package/lib/codegen/argv.js +1 -3
- package/lib/codegen/argv.js.map +1 -1
- package/lib/codegen/cli.js +4 -9
- package/lib/codegen/cli.js.map +1 -1
- package/lib/codegen/languages/cpp.js +5 -8
- package/lib/codegen/languages/cpp.js.map +1 -1
- package/lib/codegen/languages/csharp.js +5 -8
- package/lib/codegen/languages/csharp.js.map +1 -1
- package/lib/codegen/languages/haxe.js +3 -6
- package/lib/codegen/languages/haxe.js.map +1 -1
- package/lib/codegen/languages/java.js +3 -6
- package/lib/codegen/languages/java.js.map +1 -1
- package/lib/codegen/languages/js.js +4 -7
- package/lib/codegen/languages/js.js.map +1 -1
- package/lib/codegen/languages/lua.js +4 -7
- package/lib/codegen/languages/lua.js.map +1 -1
- package/lib/codegen/languages/ts.js +5 -8
- package/lib/codegen/languages/ts.js.map +1 -1
- package/lib/codegen/parser.js +22 -59
- package/lib/codegen/parser.js.map +1 -1
- package/lib/codegen/types.js +12 -51
- package/lib/codegen/types.js.map +1 -1
- package/lib/decoder/DecodeOperation.js +44 -51
- package/lib/decoder/DecodeOperation.js.map +1 -1
- package/lib/decoder/Decoder.js +24 -28
- package/lib/decoder/Decoder.js.map +1 -1
- package/lib/decoder/ReferenceTracker.js +10 -14
- package/lib/decoder/ReferenceTracker.js.map +1 -1
- package/lib/decoder/strategy/Callbacks.js +39 -43
- package/lib/decoder/strategy/Callbacks.js.map +1 -1
- package/lib/decoder/strategy/RawChanges.js +1 -4
- package/lib/decoder/strategy/RawChanges.js.map +1 -1
- package/lib/decoder/strategy/getDecoderStateCallbacks.js +24 -27
- package/lib/decoder/strategy/getDecoderStateCallbacks.js.map +1 -1
- package/lib/encoder/ChangeTree.js +36 -44
- package/lib/encoder/ChangeTree.js.map +1 -1
- package/lib/encoder/EncodeOperation.js +25 -32
- package/lib/encoder/EncodeOperation.js.map +1 -1
- package/lib/encoder/Encoder.d.ts +5 -5
- package/lib/encoder/Encoder.js +25 -29
- package/lib/encoder/Encoder.js.map +1 -1
- package/lib/encoder/Root.js +17 -21
- package/lib/encoder/Root.js.map +1 -1
- package/lib/encoder/StateView.js +40 -45
- package/lib/encoder/StateView.js.map +1 -1
- package/lib/encoding/assert.js +3 -9
- package/lib/encoding/assert.js.map +1 -1
- package/lib/encoding/decode.js +2 -6
- package/lib/encoding/decode.js.map +1 -1
- package/lib/encoding/encode.js +1 -4
- package/lib/encoding/encode.js.map +1 -1
- package/lib/encoding/spec.js +4 -7
- package/lib/encoding/spec.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +33 -75
- package/lib/index.js.map +1 -1
- package/lib/src/Metadata.d.ts +49 -0
- package/lib/src/Metadata.js +256 -0
- package/lib/src/Metadata.js.map +1 -0
- package/lib/src/Reflection.d.ts +71 -0
- package/lib/src/Reflection.js +179 -0
- package/lib/src/Reflection.js.map +1 -0
- package/lib/src/Schema.d.ts +86 -0
- package/lib/src/Schema.js +352 -0
- package/lib/src/Schema.js.map +1 -0
- package/lib/src/annotations.d.ts +109 -0
- package/lib/src/annotations.js +473 -0
- package/lib/src/annotations.js.map +1 -0
- package/lib/src/bench_encode.d.ts +1 -0
- package/lib/src/bench_encode.js +91 -0
- package/lib/src/bench_encode.js.map +1 -0
- package/lib/src/codegen/api.d.ts +7 -0
- package/lib/src/codegen/api.js +56 -0
- package/lib/src/codegen/api.js.map +1 -0
- package/lib/src/codegen/argv.d.ts +6 -0
- package/lib/src/codegen/argv.js +39 -0
- package/lib/src/codegen/argv.js.map +1 -0
- package/lib/src/codegen/cli.d.ts +1 -0
- package/lib/src/codegen/cli.js +58 -0
- package/lib/src/codegen/cli.js.map +1 -0
- package/lib/src/codegen/languages/cpp.d.ts +3 -0
- package/lib/src/codegen/languages/cpp.js +258 -0
- package/lib/src/codegen/languages/cpp.js.map +1 -0
- package/lib/src/codegen/languages/csharp.d.ts +4 -0
- package/lib/src/codegen/languages/csharp.js +154 -0
- package/lib/src/codegen/languages/csharp.js.map +1 -0
- package/lib/src/codegen/languages/haxe.d.ts +3 -0
- package/lib/src/codegen/languages/haxe.js +100 -0
- package/lib/src/codegen/languages/haxe.js.map +1 -0
- package/lib/src/codegen/languages/java.d.ts +6 -0
- package/lib/src/codegen/languages/java.js +100 -0
- package/lib/src/codegen/languages/java.js.map +1 -0
- package/lib/src/codegen/languages/js.d.ts +3 -0
- package/lib/src/codegen/languages/js.js +101 -0
- package/lib/src/codegen/languages/js.js.map +1 -0
- package/lib/src/codegen/languages/lua.d.ts +3 -0
- package/lib/src/codegen/languages/lua.js +103 -0
- package/lib/src/codegen/languages/lua.js.map +1 -0
- package/lib/src/codegen/languages/ts.d.ts +3 -0
- package/lib/src/codegen/languages/ts.js +116 -0
- package/lib/src/codegen/languages/ts.js.map +1 -0
- package/lib/src/codegen/parser.d.ts +13 -0
- package/lib/src/codegen/parser.js +327 -0
- package/lib/src/codegen/parser.js.map +1 -0
- package/lib/src/codegen/types.d.ts +52 -0
- package/lib/src/codegen/types.js +142 -0
- package/lib/src/codegen/types.js.map +1 -0
- package/lib/src/decoder/DecodeOperation.d.ts +23 -0
- package/lib/src/decoder/DecodeOperation.js +248 -0
- package/lib/src/decoder/DecodeOperation.js.map +1 -0
- package/lib/src/decoder/Decoder.d.ts +21 -0
- package/lib/src/decoder/Decoder.js +114 -0
- package/lib/src/decoder/Decoder.js.map +1 -0
- package/lib/src/decoder/ReferenceTracker.d.ts +25 -0
- package/lib/src/decoder/ReferenceTracker.js +135 -0
- package/lib/src/decoder/ReferenceTracker.js.map +1 -0
- package/lib/src/decoder/strategy/Callbacks.d.ts +154 -0
- package/lib/src/decoder/strategy/Callbacks.js +336 -0
- package/lib/src/decoder/strategy/Callbacks.js.map +1 -0
- package/lib/src/decoder/strategy/RawChanges.d.ts +3 -0
- package/lib/src/decoder/strategy/RawChanges.js +4 -0
- package/lib/src/decoder/strategy/RawChanges.js.map +1 -0
- package/lib/src/decoder/strategy/getDecoderStateCallbacks.d.ts +76 -0
- package/lib/src/decoder/strategy/getDecoderStateCallbacks.js +274 -0
- package/lib/src/decoder/strategy/getDecoderStateCallbacks.js.map +1 -0
- package/lib/src/encoder/ChangeTree.d.ts +135 -0
- package/lib/src/encoder/ChangeTree.js +534 -0
- package/lib/src/encoder/ChangeTree.js.map +1 -0
- package/lib/src/encoder/EncodeOperation.d.ts +22 -0
- package/lib/src/encoder/EncodeOperation.js +132 -0
- package/lib/src/encoder/EncodeOperation.js.map +1 -0
- package/lib/src/encoder/Encoder.d.ts +22 -0
- package/lib/src/encoder/Encoder.js +204 -0
- package/lib/src/encoder/Encoder.js.map +1 -0
- package/lib/src/encoder/Root.d.ts +28 -0
- package/lib/src/encoder/Root.js +229 -0
- package/lib/src/encoder/Root.js.map +1 -0
- package/lib/src/encoder/StateView.d.ts +34 -0
- package/lib/src/encoder/StateView.js +279 -0
- package/lib/src/encoder/StateView.js.map +1 -0
- package/lib/src/encoding/assert.d.ts +10 -0
- package/lib/src/encoding/assert.js +49 -0
- package/lib/src/encoding/assert.js.map +1 -0
- package/lib/src/encoding/decode.d.ts +67 -0
- package/lib/src/encoding/decode.js +217 -0
- package/lib/src/encoding/decode.js.map +1 -0
- package/lib/src/encoding/encode.d.ts +40 -0
- package/lib/src/encoding/encode.js +279 -0
- package/lib/src/encoding/encode.js.map +1 -0
- package/lib/src/encoding/spec.d.ts +24 -0
- package/lib/src/encoding/spec.js +26 -0
- package/lib/src/encoding/spec.js.map +1 -0
- package/lib/src/index.d.ts +32 -0
- package/lib/src/index.js +39 -0
- package/lib/src/index.js.map +1 -0
- package/lib/src/symbol.shim.d.ts +6 -0
- package/lib/src/symbol.shim.js +3 -0
- package/lib/src/symbol.shim.js.map +1 -0
- package/lib/src/types/HelperTypes.d.ts +77 -0
- package/lib/src/types/HelperTypes.js +2 -0
- package/lib/src/types/HelperTypes.js.map +1 -0
- package/lib/src/types/TypeContext.d.ts +31 -0
- package/lib/src/types/TypeContext.js +143 -0
- package/lib/src/types/TypeContext.js.map +1 -0
- package/lib/src/types/custom/ArraySchema.d.ts +270 -0
- package/lib/src/types/custom/ArraySchema.js +733 -0
- package/lib/src/types/custom/ArraySchema.js.map +1 -0
- package/lib/src/types/custom/CollectionSchema.d.ts +51 -0
- package/lib/src/types/custom/CollectionSchema.js +170 -0
- package/lib/src/types/custom/CollectionSchema.js.map +1 -0
- package/lib/src/types/custom/MapSchema.d.ts +51 -0
- package/lib/src/types/custom/MapSchema.js +222 -0
- package/lib/src/types/custom/MapSchema.js.map +1 -0
- package/lib/src/types/custom/SetSchema.d.ts +48 -0
- package/lib/src/types/custom/SetSchema.js +178 -0
- package/lib/src/types/custom/SetSchema.js.map +1 -0
- package/lib/src/types/registry.d.ts +16 -0
- package/lib/src/types/registry.js +30 -0
- package/lib/src/types/registry.js.map +1 -0
- package/lib/src/types/symbols.d.ts +33 -0
- package/lib/src/types/symbols.js +34 -0
- package/lib/src/types/symbols.js.map +1 -0
- package/lib/src/types/utils.d.ts +1 -0
- package/lib/src/types/utils.js +13 -0
- package/lib/src/types/utils.js.map +1 -0
- package/lib/src/utils.d.ts +13 -0
- package/lib/src/utils.js +49 -0
- package/lib/src/utils.js.map +1 -0
- package/lib/src/v3_bench.d.ts +1 -0
- package/lib/src/v3_bench.js +128 -0
- package/lib/src/v3_bench.js.map +1 -0
- package/lib/symbol.shim.js +1 -2
- package/lib/symbol.shim.js.map +1 -1
- package/lib/types/HelperTypes.js +1 -2
- package/lib/types/TypeContext.js +8 -12
- package/lib/types/TypeContext.js.map +1 -1
- package/lib/types/custom/ArraySchema.js +63 -67
- package/lib/types/custom/ArraySchema.js.map +1 -1
- package/lib/types/custom/CollectionSchema.js +27 -31
- package/lib/types/custom/CollectionSchema.js.map +1 -1
- package/lib/types/custom/MapSchema.js +37 -41
- package/lib/types/custom/MapSchema.js.map +1 -1
- package/lib/types/custom/SetSchema.js +28 -32
- package/lib/types/custom/SetSchema.js.map +1 -1
- package/lib/types/registry.js +13 -20
- package/lib/types/registry.js.map +1 -1
- package/lib/types/symbols.js +16 -19
- package/lib/types/symbols.js.map +1 -1
- package/lib/types/utils.js +1 -4
- package/lib/types/utils.js.map +1 -1
- package/lib/utils.js +9 -14
- package/lib/utils.js.map +1 -1
- package/lib/v3_bench.js +17 -19
- package/lib/v3_bench.js.map +1 -1
- package/package.json +9 -7
- package/src/codegen/api.ts +7 -0
- package/src/codegen/parser.ts +2 -2
- package/src/codegen/types.ts +5 -0
- package/src/encoder/Encoder.ts +24 -7
- package/src/index.ts +2 -2
- package/build/cjs/index.js.map +0 -1
- package/src/bench_encode.ts +0 -64
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapSchema.js","sourceRoot":"","sources":["../../../../src/types/custom/MapSchema.ts"],"names":[],"mappings":"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","sourcesContent":["import { $changes, $childType, $decoder, $deleteByIndex, $onEncodeEnd, $encoder, $filter, $getByIndex, $numFields, $refId } from \"../symbols\";\nimport { ChangeTree, IRef } from \"../../encoder/ChangeTree\";\nimport { OPERATION } from \"../../encoding/spec\";\nimport { registerType } from \"../registry\";\nimport { Collection } from \"../HelperTypes\";\nimport { decodeKeyValueOperation } from \"../../decoder/DecodeOperation\";\nimport { encodeKeyValueOperation } from \"../../encoder/EncodeOperation\";\nimport type { StateView } from \"../../encoder/StateView\";\nimport type { Schema } from \"../../Schema\";\nimport { assertInstanceType } from \"../../encoding/assert\";\n\nexport class MapSchema<V=any, K extends string = string> implements Map<K, V>, Collection<K, V, [K, V]>, IRef {\n [$changes]: ChangeTree;\n [$refId]?: number;\n\n protected childType: new () => V;\n protected [$childType]: string | typeof Schema;\n\n protected $items: Map<K, V> = new Map<K, V>();\n protected $indexes: Map<number, K> = new Map<number, K>();\n protected deletedItems: { [index: string]: V } = {};\n\n static [$encoder] = encodeKeyValueOperation;\n static [$decoder] = decodeKeyValueOperation;\n\n /**\n * Determine if a property must be filtered.\n * - If returns false, the property is NOT going to be encoded.\n * - If returns true, the property is going to be encoded.\n *\n * Encoding with \"filters\" happens in two steps:\n * - First, the encoder iterates over all \"not owned\" properties and encodes them.\n * - Then, the encoder iterates over all \"owned\" properties per instance and encodes them.\n */\n static [$filter] (ref: MapSchema, index: number, view: StateView) {\n return (\n !view ||\n typeof (ref[$childType]) === \"string\" ||\n view.isChangeTreeVisible((ref[$getByIndex](index) ?? ref.deletedItems[index])[$changes])\n );\n }\n\n static is(type: any) {\n return type['map'] !== undefined;\n }\n\n constructor (initialValues?: Map<K, V> | Record<K, V>) {\n const changeTree = new ChangeTree(this);\n changeTree.indexes = {};\n\n Object.defineProperty(this, $changes, {\n value: changeTree,\n enumerable: false,\n writable: true,\n });\n\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 Object.defineProperty(this, $childType, {\n value: undefined,\n enumerable: false,\n writable: true,\n configurable: true,\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]() { return MapSchema; }\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 } else if (typeof(value) === \"object\" && this[$childType]) {\n assertInstanceType(value as any, this[$childType] as typeof Schema, this, 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 const changeTree = this[$changes];\n const isRef = (value[$changes]) !== undefined;\n\n let index: number;\n let operation: OPERATION;\n\n // IS REPLACE?\n if (typeof(changeTree.indexes[key]) !== \"undefined\") {\n index = changeTree.indexes[key];\n operation = OPERATION.REPLACE;\n\n const previousValue = this.$items.get(key);\n if (previousValue === value) {\n // if value is the same, avoid re-encoding it.\n return;\n\n } else if (isRef) {\n // if is schema, force ADD operation if value differ from previous one.\n operation = OPERATION.DELETE_AND_ADD;\n\n // remove reference from previous value\n if (previousValue !== undefined) {\n previousValue[$changes].root?.remove(previousValue[$changes]);\n }\n }\n\n if (this.deletedItems[index]) {\n delete this.deletedItems[index];\n }\n\n } else {\n index = changeTree.indexes[$numFields] ?? 0;\n operation = OPERATION.ADD;\n\n this.$indexes.set(index, key);\n changeTree.indexes[key] = index;\n changeTree.indexes[$numFields] = index + 1;\n }\n\n this.$items.set(key, value);\n\n changeTree.change(index, operation);\n\n //\n // set value's parent after the value is set\n // (to avoid encoding \"refId\" operations before parent's \"ADD\" operation)\n //\n if (isRef) {\n value[$changes].setParent(this, changeTree.root, index);\n }\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 if (!this.$items.has(key)) {\n return false;\n }\n\n const index = this[$changes].indexes[key];\n\n this.deletedItems[index] = this[$changes].delete(index);\n\n return this.$items.delete(key);\n }\n\n clear() {\n const changeTree = this[$changes];\n\n // discard previous operations.\n changeTree.discard(true);\n changeTree.indexes = {};\n\n // remove children references\n changeTree.forEachChild((childChangeTree, _) => {\n changeTree.root?.remove(childChangeTree);\n });\n\n // clear previous indexes\n this.$indexes.clear();\n\n // clear items\n this.$items.clear();\n\n changeTree.operation(OPERATION.CLEAR);\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 [$getByIndex](index: number): V | undefined {\n return this.$items.get(this.$indexes.get(index));\n }\n\n [$deleteByIndex](index: number): void {\n const key = this.$indexes.get(index);\n this.$items.delete(key);\n this.$indexes.delete(index);\n }\n\n protected [$onEncodeEnd]() {\n const changeTree = this[$changes];\n\n // - cleanup changeTree.indexes\n // - cleanup $indexes\n for (const indexStr in this.deletedItems) {\n const index = parseInt(indexStr);\n const key = this.$indexes.get(index);\n // TODO: refactor this.\n // it shouldn't be necessary to keep track of indexes both on changeTree and on $indexes\n delete changeTree.indexes[key];\n this.$indexes.delete(index);\n }\n\n this.deletedItems = {};\n }\n\n toJSON() {\n const map: any = {};\n\n this.forEach((value: any, 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 // @ts-ignore\n clone(isDecoding?: boolean): MapSchema<V> {\n let cloned: MapSchema<V>;\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\n this.forEach((value: any, key) => {\n if (value[$changes]) {\n cloned.set(key, value['clone']());\n } else {\n cloned.set(key, value);\n }\n })\n\n }\n\n return cloned;\n }\n\n}\n\nregisterType(\"map\", { constructor: MapSchema });\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { $changes, $childType, $decoder, $deleteByIndex, $encoder, $filter, $getByIndex, $onEncodeEnd, $refId } from "../symbols";
|
|
2
|
+
import { Collection } from "../HelperTypes";
|
|
3
|
+
import { ChangeTree, type IRef } from "../../encoder/ChangeTree";
|
|
4
|
+
import type { StateView } from "../../encoder/StateView";
|
|
5
|
+
import type { Schema } from "../../Schema";
|
|
6
|
+
export declare class SetSchema<V = any> implements Collection<number, V>, IRef {
|
|
7
|
+
[$changes]: ChangeTree;
|
|
8
|
+
[$refId]?: number;
|
|
9
|
+
protected [$childType]: string | typeof Schema;
|
|
10
|
+
protected $items: Map<number, V>;
|
|
11
|
+
protected $indexes: Map<number, number>;
|
|
12
|
+
protected deletedItems: {
|
|
13
|
+
[field: string]: V;
|
|
14
|
+
};
|
|
15
|
+
protected $refId: number;
|
|
16
|
+
static [$encoder]: import("../../encoder/EncodeOperation").EncodeOperation<any>;
|
|
17
|
+
static [$decoder]: import("../../decoder/DecodeOperation").DecodeOperation<any>;
|
|
18
|
+
/**
|
|
19
|
+
* Determine if a property must be filtered.
|
|
20
|
+
* - If returns false, the property is NOT going to be encoded.
|
|
21
|
+
* - If returns true, the property is going to be encoded.
|
|
22
|
+
*
|
|
23
|
+
* Encoding with "filters" happens in two steps:
|
|
24
|
+
* - First, the encoder iterates over all "not owned" properties and encodes them.
|
|
25
|
+
* - Then, the encoder iterates over all "owned" properties per instance and encodes them.
|
|
26
|
+
*/
|
|
27
|
+
static [$filter](ref: SetSchema, index: number, view: StateView): boolean;
|
|
28
|
+
static is(type: any): boolean;
|
|
29
|
+
constructor(initialValues?: Array<V>);
|
|
30
|
+
add(value: V): number | false;
|
|
31
|
+
entries(): MapIterator<[number, V]>;
|
|
32
|
+
delete(item: V): boolean;
|
|
33
|
+
clear(): void;
|
|
34
|
+
has(value: V): boolean;
|
|
35
|
+
forEach(callbackfn: (value: V, key: number, collection: SetSchema<V>) => void): void;
|
|
36
|
+
values(): MapIterator<V>;
|
|
37
|
+
get size(): number;
|
|
38
|
+
/** Iterator */
|
|
39
|
+
[Symbol.iterator](): IterableIterator<V>;
|
|
40
|
+
protected setIndex(index: number, key: number): void;
|
|
41
|
+
protected getIndex(index: number): number;
|
|
42
|
+
[$getByIndex](index: number): any;
|
|
43
|
+
[$deleteByIndex](index: number): void;
|
|
44
|
+
protected [$onEncodeEnd](): void;
|
|
45
|
+
toArray(): V[];
|
|
46
|
+
toJSON(): V[];
|
|
47
|
+
clone(isDecoding?: boolean): SetSchema<V>;
|
|
48
|
+
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
var _a, _b;
|
|
2
|
+
import { OPERATION } from "../../encoding/spec";
|
|
3
|
+
import { registerType } from "../registry";
|
|
4
|
+
import { $changes, $childType, $decoder, $deleteByIndex, $encoder, $filter, $getByIndex, $onEncodeEnd, $refId } from "../symbols";
|
|
5
|
+
import { ChangeTree } from "../../encoder/ChangeTree";
|
|
6
|
+
import { encodeKeyValueOperation } from "../../encoder/EncodeOperation";
|
|
7
|
+
import { decodeKeyValueOperation } from "../../decoder/DecodeOperation";
|
|
8
|
+
export class SetSchema {
|
|
9
|
+
static { this[_a] = encodeKeyValueOperation; }
|
|
10
|
+
static { this[_b] = decodeKeyValueOperation; }
|
|
11
|
+
/**
|
|
12
|
+
* Determine if a property must be filtered.
|
|
13
|
+
* - If returns false, the property is NOT going to be encoded.
|
|
14
|
+
* - If returns true, the property is going to be encoded.
|
|
15
|
+
*
|
|
16
|
+
* Encoding with "filters" happens in two steps:
|
|
17
|
+
* - First, the encoder iterates over all "not owned" properties and encodes them.
|
|
18
|
+
* - Then, the encoder iterates over all "owned" properties per instance and encodes them.
|
|
19
|
+
*/
|
|
20
|
+
static [(_a = $encoder, _b = $decoder, $filter)](ref, index, view) {
|
|
21
|
+
return (!view ||
|
|
22
|
+
typeof (ref[$childType]) === "string" ||
|
|
23
|
+
view.visible.has((ref[$getByIndex](index) ?? ref.deletedItems[index])[$changes]));
|
|
24
|
+
}
|
|
25
|
+
static is(type) {
|
|
26
|
+
return type['set'] !== undefined;
|
|
27
|
+
}
|
|
28
|
+
constructor(initialValues) {
|
|
29
|
+
this.$items = new Map();
|
|
30
|
+
this.$indexes = new Map();
|
|
31
|
+
this.deletedItems = {};
|
|
32
|
+
this.$refId = 0;
|
|
33
|
+
this[$changes] = new ChangeTree(this);
|
|
34
|
+
this[$changes].indexes = {};
|
|
35
|
+
if (initialValues) {
|
|
36
|
+
initialValues.forEach((v) => this.add(v));
|
|
37
|
+
}
|
|
38
|
+
Object.defineProperty(this, $childType, {
|
|
39
|
+
value: undefined,
|
|
40
|
+
enumerable: false,
|
|
41
|
+
writable: true,
|
|
42
|
+
configurable: true,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
add(value) {
|
|
46
|
+
// immediatelly return false if value already added.
|
|
47
|
+
if (this.has(value)) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
// set "index" for reference.
|
|
51
|
+
const index = this.$refId++;
|
|
52
|
+
if ((value[$changes]) !== undefined) {
|
|
53
|
+
value[$changes].setParent(this, this[$changes].root, index);
|
|
54
|
+
}
|
|
55
|
+
const operation = this[$changes].indexes[index]?.op ?? OPERATION.ADD;
|
|
56
|
+
this[$changes].indexes[index] = index;
|
|
57
|
+
this.$indexes.set(index, index);
|
|
58
|
+
this.$items.set(index, value);
|
|
59
|
+
this[$changes].change(index, operation);
|
|
60
|
+
return index;
|
|
61
|
+
}
|
|
62
|
+
entries() {
|
|
63
|
+
return this.$items.entries();
|
|
64
|
+
}
|
|
65
|
+
delete(item) {
|
|
66
|
+
const entries = this.$items.entries();
|
|
67
|
+
let index;
|
|
68
|
+
let entry;
|
|
69
|
+
while (entry = entries.next()) {
|
|
70
|
+
if (entry.done) {
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
if (item === entry.value[1]) {
|
|
74
|
+
index = entry.value[0];
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (index === undefined) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
this.deletedItems[index] = this[$changes].delete(index);
|
|
82
|
+
this.$indexes.delete(index);
|
|
83
|
+
return this.$items.delete(index);
|
|
84
|
+
}
|
|
85
|
+
clear() {
|
|
86
|
+
const changeTree = this[$changes];
|
|
87
|
+
// discard previous operations.
|
|
88
|
+
changeTree.discard(true);
|
|
89
|
+
changeTree.indexes = {};
|
|
90
|
+
// clear previous indexes
|
|
91
|
+
this.$indexes.clear();
|
|
92
|
+
// clear items
|
|
93
|
+
this.$items.clear();
|
|
94
|
+
changeTree.operation(OPERATION.CLEAR);
|
|
95
|
+
}
|
|
96
|
+
has(value) {
|
|
97
|
+
const values = this.$items.values();
|
|
98
|
+
let has = false;
|
|
99
|
+
let entry;
|
|
100
|
+
while (entry = values.next()) {
|
|
101
|
+
if (entry.done) {
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
if (value === entry.value) {
|
|
105
|
+
has = true;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return has;
|
|
110
|
+
}
|
|
111
|
+
forEach(callbackfn) {
|
|
112
|
+
this.$items.forEach((value, key, _) => callbackfn(value, key, this));
|
|
113
|
+
}
|
|
114
|
+
values() {
|
|
115
|
+
return this.$items.values();
|
|
116
|
+
}
|
|
117
|
+
get size() {
|
|
118
|
+
return this.$items.size;
|
|
119
|
+
}
|
|
120
|
+
/** Iterator */
|
|
121
|
+
[Symbol.iterator]() {
|
|
122
|
+
return this.$items.values();
|
|
123
|
+
}
|
|
124
|
+
setIndex(index, key) {
|
|
125
|
+
this.$indexes.set(index, key);
|
|
126
|
+
}
|
|
127
|
+
getIndex(index) {
|
|
128
|
+
return this.$indexes.get(index);
|
|
129
|
+
}
|
|
130
|
+
[$getByIndex](index) {
|
|
131
|
+
return this.$items.get(this.$indexes.get(index));
|
|
132
|
+
}
|
|
133
|
+
[$deleteByIndex](index) {
|
|
134
|
+
const key = this.$indexes.get(index);
|
|
135
|
+
this.$items.delete(key);
|
|
136
|
+
this.$indexes.delete(index);
|
|
137
|
+
}
|
|
138
|
+
[$onEncodeEnd]() {
|
|
139
|
+
this.deletedItems = {};
|
|
140
|
+
}
|
|
141
|
+
toArray() {
|
|
142
|
+
return Array.from(this.$items.values());
|
|
143
|
+
}
|
|
144
|
+
toJSON() {
|
|
145
|
+
const values = [];
|
|
146
|
+
this.forEach((value, key) => {
|
|
147
|
+
values.push((typeof (value['toJSON']) === "function")
|
|
148
|
+
? value['toJSON']()
|
|
149
|
+
: value);
|
|
150
|
+
});
|
|
151
|
+
return values;
|
|
152
|
+
}
|
|
153
|
+
//
|
|
154
|
+
// Decoding utilities
|
|
155
|
+
//
|
|
156
|
+
clone(isDecoding) {
|
|
157
|
+
let cloned;
|
|
158
|
+
if (isDecoding) {
|
|
159
|
+
// client-side
|
|
160
|
+
cloned = Object.assign(new SetSchema(), this);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// server-side
|
|
164
|
+
cloned = new SetSchema();
|
|
165
|
+
this.forEach((value) => {
|
|
166
|
+
if (value[$changes]) {
|
|
167
|
+
cloned.add(value['clone']());
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
cloned.add(value);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
return cloned;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
registerType("set", { constructor: SetSchema });
|
|
178
|
+
//# sourceMappingURL=SetSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SetSchema.js","sourceRoot":"","sources":["../../../../src/types/custom/SetSchema.ts"],"names":[],"mappings":"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","sourcesContent":["import { OPERATION } from \"../../encoding/spec\";\nimport { registerType } from \"../registry\";\nimport { $changes, $childType, $decoder, $deleteByIndex, $encoder, $filter, $getByIndex, $onEncodeEnd, $refId } from \"../symbols\";\nimport { Collection } from \"../HelperTypes\";\nimport { ChangeTree, type IRef } from \"../../encoder/ChangeTree\";\nimport { encodeKeyValueOperation } from \"../../encoder/EncodeOperation\";\nimport { decodeKeyValueOperation } from \"../../decoder/DecodeOperation\";\nimport type { StateView } from \"../../encoder/StateView\";\nimport type { Schema } from \"../../Schema\";\n\nexport class SetSchema<V=any> implements Collection<number, V>, IRef {\n [$changes]: ChangeTree;\n [$refId]?: number;\n\n protected [$childType]: string | typeof Schema;\n\n protected $items: Map<number, V> = new Map<number, V>();\n protected $indexes: Map<number, number> = new Map<number, number>();\n protected deletedItems: { [field: string]: V } = {};\n\n protected $refId: number = 0;\n\n static [$encoder] = encodeKeyValueOperation;\n static [$decoder] = decodeKeyValueOperation;\n\n /**\n * Determine if a property must be filtered.\n * - If returns false, the property is NOT going to be encoded.\n * - If returns true, the property is going to be encoded.\n *\n * Encoding with \"filters\" happens in two steps:\n * - First, the encoder iterates over all \"not owned\" properties and encodes them.\n * - Then, the encoder iterates over all \"owned\" properties per instance and encodes them.\n */\n static [$filter] (ref: SetSchema, index: number, view: StateView) {\n return (\n !view ||\n typeof (ref[$childType]) === \"string\" ||\n view.visible.has((ref[$getByIndex](index) ?? ref.deletedItems[index])[$changes])\n );\n }\n\n static is(type: any) {\n return type['set'] !== undefined;\n }\n\n constructor (initialValues?: Array<V>) {\n this[$changes] = new ChangeTree(this);\n this[$changes].indexes = {};\n\n if (initialValues) {\n initialValues.forEach((v) => this.add(v));\n }\n\n Object.defineProperty(this, $childType, {\n value: undefined,\n enumerable: false,\n writable: true,\n configurable: true,\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].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.deletedItems[index] = this[$changes].delete(index);\n this.$indexes.delete(index);\n\n return this.$items.delete(index);\n }\n\n clear() {\n const changeTree = this[$changes];\n\n // discard previous operations.\n changeTree.discard(true);\n changeTree.indexes = {};\n\n // clear previous indexes\n this.$indexes.clear();\n\n // clear items\n this.$items.clear();\n\n changeTree.operation(OPERATION.CLEAR);\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 /** Iterator */\n [Symbol.iterator](): IterableIterator<V> {\n return this.$items.values();\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 [$getByIndex](index: number): any {\n return this.$items.get(this.$indexes.get(index));\n }\n\n [$deleteByIndex](index: number): void {\n const key = this.$indexes.get(index);\n this.$items.delete(key);\n this.$indexes.delete(index);\n }\n\n protected [$onEncodeEnd]() {\n this.deletedItems = {};\n }\n\n toArray() {\n return Array.from(this.$items.values());\n }\n\n toJSON() {\n const values: V[] = [];\n\n this.forEach((value: any, key: number) => {\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: any) => {\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\nregisterType(\"set\", { constructor: SetSchema });"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BufferLike } from "../encoding/encode";
|
|
2
|
+
import { Iterator } from "../encoding/decode";
|
|
3
|
+
export interface TypeDefinition {
|
|
4
|
+
constructor?: any;
|
|
5
|
+
encode?: (bytes: BufferLike, value: any, it: Iterator) => any;
|
|
6
|
+
decode?: (bytes: BufferLike, it: Iterator) => any;
|
|
7
|
+
}
|
|
8
|
+
export declare const registeredTypes: {
|
|
9
|
+
[identifier: string]: TypeDefinition;
|
|
10
|
+
};
|
|
11
|
+
export declare function registerType(identifier: string, definition: TypeDefinition): void;
|
|
12
|
+
export declare function getIdentifier(klass: any): string;
|
|
13
|
+
export declare function getType(identifier: string): TypeDefinition;
|
|
14
|
+
export declare function defineCustomTypes<T extends {
|
|
15
|
+
[key: string]: TypeDefinition;
|
|
16
|
+
}>(types: T): (t: keyof T) => PropertyDecorator;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type } from "../annotations";
|
|
2
|
+
import { encode } from "../encoding/encode";
|
|
3
|
+
import { decode } from "../encoding/decode";
|
|
4
|
+
export const registeredTypes = {};
|
|
5
|
+
const identifiers = new Map();
|
|
6
|
+
export function registerType(identifier, definition) {
|
|
7
|
+
if (definition.constructor) {
|
|
8
|
+
identifiers.set(definition.constructor, identifier);
|
|
9
|
+
registeredTypes[identifier] = definition;
|
|
10
|
+
}
|
|
11
|
+
if (definition.encode) {
|
|
12
|
+
encode[identifier] = definition.encode;
|
|
13
|
+
}
|
|
14
|
+
if (definition.decode) {
|
|
15
|
+
decode[identifier] = definition.decode;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function getIdentifier(klass) {
|
|
19
|
+
return identifiers.get(klass);
|
|
20
|
+
}
|
|
21
|
+
export function getType(identifier) {
|
|
22
|
+
return registeredTypes[identifier];
|
|
23
|
+
}
|
|
24
|
+
export function defineCustomTypes(types) {
|
|
25
|
+
for (const identifier in types) {
|
|
26
|
+
registerType(identifier, types[identifier]);
|
|
27
|
+
}
|
|
28
|
+
return (t) => type(t);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/types/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAc,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAY,MAAM,oBAAoB,CAAC;AAQtD,MAAM,CAAC,MAAM,eAAe,GAA4C,EAAE,CAAC;AAE3E,MAAM,WAAW,GAAG,IAAI,GAAG,EAAe,CAAC;AAE3C,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,UAA0B;IACvE,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QACzB,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACpD,eAAe,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;IAC7C,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAAE,MAAc,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAAC,CAAC;IAC3E,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAAE,MAAc,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAU;IACpC,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,UAAkB;IACtC,OAAO,eAAe,CAAC,UAAU,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAA4C,KAAQ;IACjF,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;QAC7B,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,CAAmB,CAAC,CAAC;AACrD,CAAC","sourcesContent":["import { DefinitionType, type } from \"../annotations\";\nimport { BufferLike, encode } from \"../encoding/encode\";\nimport { decode, Iterator } from \"../encoding/decode\";\n\nexport interface TypeDefinition {\n constructor?: any,\n encode?: (bytes: BufferLike, value: any, it: Iterator) => any;\n decode?: (bytes: BufferLike, it: Iterator) => any;\n}\n\nexport const registeredTypes: {[identifier: string] : TypeDefinition} = {};\n\nconst identifiers = new Map<any, string>();\n\nexport function registerType(identifier: string, definition: TypeDefinition) {\n if (definition.constructor) {\n identifiers.set(definition.constructor, identifier);\n registeredTypes[identifier] = definition;\n }\n\n if (definition.encode) { (encode as any)[identifier] = definition.encode; }\n if (definition.decode) { (decode as any)[identifier] = definition.decode; }\n}\n\nexport function getIdentifier(klass: any): string {\n return identifiers.get(klass);\n}\n\nexport function getType(identifier: string): TypeDefinition {\n return registeredTypes[identifier];\n}\n\nexport function defineCustomTypes<T extends {[key: string]: TypeDefinition}>(types: T) {\n for (const identifier in types) {\n registerType(identifier, types[identifier]);\n }\n\n return (t: keyof T) => type(t as DefinitionType);\n}"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare const $refId = "~refId";
|
|
2
|
+
export declare const $track = "~track";
|
|
3
|
+
export declare const $encoder = "~encoder";
|
|
4
|
+
export declare const $decoder = "~decoder";
|
|
5
|
+
export declare const $filter = "~filter";
|
|
6
|
+
export declare const $getByIndex = "~getByIndex";
|
|
7
|
+
export declare const $deleteByIndex = "~deleteByIndex";
|
|
8
|
+
/**
|
|
9
|
+
* Used to hold ChangeTree instances whitin the structures
|
|
10
|
+
*/
|
|
11
|
+
export declare const $changes = "~changes";
|
|
12
|
+
/**
|
|
13
|
+
* Used to keep track of the type of the child elements of a collection
|
|
14
|
+
* (MapSchema, ArraySchema, etc.)
|
|
15
|
+
*/
|
|
16
|
+
export declare const $childType = "~childType";
|
|
17
|
+
/**
|
|
18
|
+
* Optional "discard" method for custom types (ArraySchema)
|
|
19
|
+
* (Discards changes for next serialization)
|
|
20
|
+
*/
|
|
21
|
+
export declare const $onEncodeEnd = "~onEncodeEnd";
|
|
22
|
+
/**
|
|
23
|
+
* When decoding, this method is called after the instance is fully decoded
|
|
24
|
+
*/
|
|
25
|
+
export declare const $onDecodeEnd = "~onDecodeEnd";
|
|
26
|
+
/**
|
|
27
|
+
* Metadata
|
|
28
|
+
*/
|
|
29
|
+
export declare const $descriptors = "~descriptors";
|
|
30
|
+
export declare const $numFields = "~__numFields";
|
|
31
|
+
export declare const $refTypeFieldIndexes = "~__refTypeFieldIndexes";
|
|
32
|
+
export declare const $viewFieldIndexes = "~__viewFieldIndexes";
|
|
33
|
+
export declare const $fieldIndexesByViewTag = "$__fieldIndexesByViewTag";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const $refId = "~refId";
|
|
2
|
+
export const $track = "~track";
|
|
3
|
+
export const $encoder = "~encoder";
|
|
4
|
+
export const $decoder = "~decoder";
|
|
5
|
+
export const $filter = "~filter";
|
|
6
|
+
export const $getByIndex = "~getByIndex";
|
|
7
|
+
export const $deleteByIndex = "~deleteByIndex";
|
|
8
|
+
/**
|
|
9
|
+
* Used to hold ChangeTree instances whitin the structures
|
|
10
|
+
*/
|
|
11
|
+
export const $changes = '~changes';
|
|
12
|
+
/**
|
|
13
|
+
* Used to keep track of the type of the child elements of a collection
|
|
14
|
+
* (MapSchema, ArraySchema, etc.)
|
|
15
|
+
*/
|
|
16
|
+
export const $childType = '~childType';
|
|
17
|
+
/**
|
|
18
|
+
* Optional "discard" method for custom types (ArraySchema)
|
|
19
|
+
* (Discards changes for next serialization)
|
|
20
|
+
*/
|
|
21
|
+
export const $onEncodeEnd = '~onEncodeEnd';
|
|
22
|
+
/**
|
|
23
|
+
* When decoding, this method is called after the instance is fully decoded
|
|
24
|
+
*/
|
|
25
|
+
export const $onDecodeEnd = "~onDecodeEnd";
|
|
26
|
+
/**
|
|
27
|
+
* Metadata
|
|
28
|
+
*/
|
|
29
|
+
export const $descriptors = "~descriptors";
|
|
30
|
+
export const $numFields = "~__numFields";
|
|
31
|
+
export const $refTypeFieldIndexes = "~__refTypeFieldIndexes";
|
|
32
|
+
export const $viewFieldIndexes = "~__viewFieldIndexes";
|
|
33
|
+
export const $fieldIndexesByViewTag = "$__fieldIndexesByViewTag";
|
|
34
|
+
//# sourceMappingURL=symbols.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../../src/types/symbols.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC;AAC/B,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC;AAC/B,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AACnC,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AAEnC,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;AAEvC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAC3C,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,CAAC;AACzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AACvD,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC","sourcesContent":["export const $refId = \"~refId\";\nexport const $track = \"~track\";\nexport const $encoder = \"~encoder\";\nexport const $decoder = \"~decoder\";\n\nexport const $filter = \"~filter\";\n\nexport const $getByIndex = \"~getByIndex\";\nexport const $deleteByIndex = \"~deleteByIndex\";\n\n/**\n * Used to hold ChangeTree instances whitin the structures\n */\nexport const $changes = '~changes';\n\n/**\n * Used to keep track of the type of the child elements of a collection\n * (MapSchema, ArraySchema, etc.)\n */\nexport const $childType = '~childType';\n\n/**\n * Optional \"discard\" method for custom types (ArraySchema)\n * (Discards changes for next serialization)\n */\nexport const $onEncodeEnd = '~onEncodeEnd';\n\n/**\n * When decoding, this method is called after the instance is fully decoded\n */\nexport const $onDecodeEnd = \"~onDecodeEnd\";\n\n/**\n * Metadata\n */\nexport const $descriptors = \"~descriptors\";\nexport const $numFields = \"~__numFields\";\nexport const $refTypeFieldIndexes = \"~__refTypeFieldIndexes\";\nexport const $viewFieldIndexes = \"~__viewFieldIndexes\";\nexport const $fieldIndexesByViewTag = \"$__fieldIndexesByViewTag\";"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function spliceOne(arr: any[], index: number): boolean;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function spliceOne(arr, index) {
|
|
2
|
+
// manually splice an array
|
|
3
|
+
if (index === -1 || index >= arr.length) {
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
const len = arr.length - 1;
|
|
7
|
+
for (let i = index; i < len; i++) {
|
|
8
|
+
arr[i] = arr[i + 1];
|
|
9
|
+
}
|
|
10
|
+
arr.length = len;
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/types/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,GAAU,EAAE,KAAa;IAC/C,2BAA2B;IAC3B,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;IAEjB,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["export 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}"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Schema } from "./Schema";
|
|
2
|
+
interface ChangeDump {
|
|
3
|
+
ops: {
|
|
4
|
+
ADD?: number;
|
|
5
|
+
REMOVE?: number;
|
|
6
|
+
REPLACE?: number;
|
|
7
|
+
};
|
|
8
|
+
refs: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function getIndent(level: number): string;
|
|
11
|
+
export declare function dumpChanges(schema: Schema): ChangeDump;
|
|
12
|
+
export declare function getNextPowerOf2(number: number): number;
|
|
13
|
+
export {};
|
package/lib/src/utils.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { OPERATION } from "./encoding/spec";
|
|
2
|
+
import { $changes, $refId } from "./types/symbols";
|
|
3
|
+
export function getIndent(level) {
|
|
4
|
+
return (new Array(level).fill(0)).map((_, i) => (i === level - 1) ? `└─ ` : ` `).join("");
|
|
5
|
+
}
|
|
6
|
+
export function dumpChanges(schema) {
|
|
7
|
+
const $root = schema[$changes].root;
|
|
8
|
+
const dump = {
|
|
9
|
+
ops: {},
|
|
10
|
+
refs: []
|
|
11
|
+
};
|
|
12
|
+
// for (const refId in $root.changes) {
|
|
13
|
+
let current = $root.changes.next;
|
|
14
|
+
while (current) {
|
|
15
|
+
const changeTree = current.changeTree;
|
|
16
|
+
// skip if ChangeTree is undefined
|
|
17
|
+
if (changeTree === undefined) {
|
|
18
|
+
current = current.next;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
const changes = changeTree.indexedOperations;
|
|
22
|
+
dump.refs.push(`refId#${changeTree.ref[$refId]}`);
|
|
23
|
+
for (const index in changes) {
|
|
24
|
+
const op = changes[index];
|
|
25
|
+
const opName = OPERATION[op];
|
|
26
|
+
if (!dump.ops[opName]) {
|
|
27
|
+
dump.ops[opName] = 0;
|
|
28
|
+
}
|
|
29
|
+
dump.ops[OPERATION[op]]++;
|
|
30
|
+
}
|
|
31
|
+
current = current.next;
|
|
32
|
+
}
|
|
33
|
+
return dump;
|
|
34
|
+
}
|
|
35
|
+
export function getNextPowerOf2(number) {
|
|
36
|
+
// If number is already a power of 2, return it
|
|
37
|
+
if ((number & (number - 1)) === 0) {
|
|
38
|
+
return number;
|
|
39
|
+
}
|
|
40
|
+
// Find the position of the most significant bit
|
|
41
|
+
let msbPosition = 0;
|
|
42
|
+
while (number > 0) {
|
|
43
|
+
number >>= 1;
|
|
44
|
+
msbPosition++;
|
|
45
|
+
}
|
|
46
|
+
// Return the next power of 2
|
|
47
|
+
return 1 << msbPosition;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAWnD,MAAM,UAAU,SAAS,CAAC,KAAa;IACnC,OAAO,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3C,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CACpC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;IAEpC,MAAM,IAAI,GAAe;QACrB,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,EAAE;KACX,CAAC;IAEF,uCAAuC;IACvC,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IACjC,OAAO,OAAO,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACtC,kCAAkC;QAClC,IAAI,UAAU,KAAK,SAAS,EAAG,CAAC;YAC5B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YACvB,SAAS;QACb,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,iBAAiB,CAAC;QAE7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAiC,CAAC,EAAE,CAAC;gBAAC,IAAI,CAAC,GAAG,CAAC,MAAiC,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;YACtG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAA4B,CAAC,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc;IAC1C,+CAA+C;IAC/C,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,gDAAgD;IAChD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC;QAChB,MAAM,KAAK,CAAC,CAAC;QACb,WAAW,EAAE,CAAC;IAClB,CAAC;IAED,6BAA6B;IAC7B,OAAO,CAAC,IAAI,WAAW,CAAC;AAC5B,CAAC","sourcesContent":["import type { Schema } from \"./Schema\";\nimport { OPERATION } from \"./encoding/spec\";\nimport { $changes, $refId } from \"./types/symbols\";\n\ninterface ChangeDump {\n ops: {\n ADD?: number;\n REMOVE?: number;\n REPLACE?: number;\n },\n refs: string[],\n}\n\nexport function getIndent(level: number) {\n return (new Array(level).fill(0)).map((_, i) =>\n (i === level - 1) ? `└─ ` : ` `\n ).join(\"\");\n}\n\nexport function dumpChanges(schema: Schema) {\n const $root = schema[$changes].root;\n\n const dump: ChangeDump = {\n ops: {},\n refs: []\n };\n\n // for (const refId in $root.changes) {\n let current = $root.changes.next;\n while (current) {\n const changeTree = current.changeTree;\n // skip if ChangeTree is undefined\n if (changeTree === undefined) {\n current = current.next;\n continue;\n }\n\n const changes = changeTree.indexedOperations;\n\n dump.refs.push(`refId#${changeTree.ref[$refId]}`);\n for (const index in changes) {\n const op = changes[index];\n const opName = OPERATION[op];\n if (!dump.ops[opName as keyof ChangeDump['ops']]) { dump.ops[opName as keyof ChangeDump['ops']] = 0; }\n dump.ops[OPERATION[op] as keyof ChangeDump['ops']]++;\n }\n current = current.next;\n }\n\n return dump;\n}\n\nexport function getNextPowerOf2(number: number) {\n // If number is already a power of 2, return it\n if ((number & (number - 1)) === 0) {\n return number;\n }\n\n // Find the position of the most significant bit\n let msbPosition = 0;\n while (number > 0) {\n number >>= 1;\n msbPosition++;\n }\n\n // Return the next power of 2\n return 1 << msbPosition;\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Schema, type, MapSchema, Encoder, Decoder } from "./index";
|
|
8
|
+
// globalThis.interval = setInterval(() => {}, 1000);
|
|
9
|
+
// class Item extends Schema {
|
|
10
|
+
// @type("string") name: string;
|
|
11
|
+
// }
|
|
12
|
+
// class RootState extends Schema {
|
|
13
|
+
// @type([Item]) items = new ArraySchema<Item>();
|
|
14
|
+
// }
|
|
15
|
+
// const state = new RootState();
|
|
16
|
+
// state.items.push(new Item().assign({ name: "hello" }));
|
|
17
|
+
// console.log("Encoded:", state.encode());
|
|
18
|
+
class Vec3 extends Schema {
|
|
19
|
+
}
|
|
20
|
+
__decorate([
|
|
21
|
+
type("number")
|
|
22
|
+
], Vec3.prototype, "x", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
type("number")
|
|
25
|
+
], Vec3.prototype, "y", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
type("number")
|
|
28
|
+
], Vec3.prototype, "z", void 0);
|
|
29
|
+
class Base extends Schema {
|
|
30
|
+
}
|
|
31
|
+
class Entity extends Schema {
|
|
32
|
+
constructor() {
|
|
33
|
+
super(...arguments);
|
|
34
|
+
this.position = new Vec3().assign({ x: 0, y: 0, z: 0 });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
__decorate([
|
|
38
|
+
type(Vec3)
|
|
39
|
+
], Entity.prototype, "position", void 0);
|
|
40
|
+
class Player extends Entity {
|
|
41
|
+
constructor() {
|
|
42
|
+
super(...arguments);
|
|
43
|
+
this.rotation = new Vec3().assign({ x: 0, y: 0, z: 0 });
|
|
44
|
+
this.secret = "private info only for this player";
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
__decorate([
|
|
48
|
+
type(Vec3)
|
|
49
|
+
], Player.prototype, "rotation", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
type("string")
|
|
52
|
+
], Player.prototype, "secret", void 0);
|
|
53
|
+
class State extends Schema {
|
|
54
|
+
constructor() {
|
|
55
|
+
super(...arguments);
|
|
56
|
+
// @type({ map: Base }) players = new MapSchema<Entity>();
|
|
57
|
+
this.num = 0;
|
|
58
|
+
this.str = "Hello world!";
|
|
59
|
+
// @type(Entity) entity = new Player().assign({
|
|
60
|
+
// position: new Vec3().assign({ x: 1, y: 2, z: 3 }),
|
|
61
|
+
// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),
|
|
62
|
+
// });
|
|
63
|
+
this.entities = new MapSchema();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
__decorate([
|
|
67
|
+
type("number")
|
|
68
|
+
], State.prototype, "num", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
type("string")
|
|
71
|
+
], State.prototype, "str", void 0);
|
|
72
|
+
__decorate([
|
|
73
|
+
type({ map: Entity })
|
|
74
|
+
], State.prototype, "entities", void 0);
|
|
75
|
+
const state = new State();
|
|
76
|
+
state.entities.set("one", new Player().assign({
|
|
77
|
+
position: new Vec3().assign({ x: 1, y: 2, z: 3 }),
|
|
78
|
+
rotation: new Vec3().assign({ x: 1, y: 2, z: 3 }),
|
|
79
|
+
}));
|
|
80
|
+
state.entities.set("two", new Player().assign({
|
|
81
|
+
position: new Vec3().assign({ x: 4, y: 5, z: 6 }),
|
|
82
|
+
rotation: new Vec3().assign({ x: 7, y: 8, z: 9 }),
|
|
83
|
+
}));
|
|
84
|
+
const encoder = new Encoder(state);
|
|
85
|
+
let encoded = encoder.encode();
|
|
86
|
+
console.log(`(${encoded.length})`, [...encoded]);
|
|
87
|
+
globalThis.perform = function () {
|
|
88
|
+
for (let i = 0; i < 500000; i++) {
|
|
89
|
+
encoder.encodeAll();
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
function logTime(label, callback) {
|
|
93
|
+
const time = Date.now();
|
|
94
|
+
for (let i = 0; i < 500000; i++) {
|
|
95
|
+
callback();
|
|
96
|
+
}
|
|
97
|
+
console.log(`${label}:`, Date.now() - time);
|
|
98
|
+
}
|
|
99
|
+
logTime("encode time", () => encoder.encodeAll());
|
|
100
|
+
const decoder = new Decoder(new State());
|
|
101
|
+
logTime("decode time", () => decoder.decode(encoded));
|
|
102
|
+
// const time = Date.now();
|
|
103
|
+
// console.profile();
|
|
104
|
+
// for (let i = 0; i < 300000; i++) {
|
|
105
|
+
// state.encodeAll();
|
|
106
|
+
// }
|
|
107
|
+
// console.profileEnd();
|
|
108
|
+
// console.log("encode time:", Date.now() - time);
|
|
109
|
+
// const decoded = Reflection.decode(Reflection.encode(state));
|
|
110
|
+
// decoded.decode(encoded);
|
|
111
|
+
//
|
|
112
|
+
// console.log(decoded.toJSON());
|
|
113
|
+
//
|
|
114
|
+
// const rotation = state.entity.rotation;
|
|
115
|
+
// rotation.x = 100;
|
|
116
|
+
//
|
|
117
|
+
// encoded = state.encode();
|
|
118
|
+
// console.log({encoded});
|
|
119
|
+
//
|
|
120
|
+
// decoded.decode(encoded);
|
|
121
|
+
// console.log(decoded.toJSON());
|
|
122
|
+
// const time = Date.now();
|
|
123
|
+
// for (let i = 0; i < 300000; i++) {
|
|
124
|
+
// const state = new State();
|
|
125
|
+
// state.encode();
|
|
126
|
+
// }
|
|
127
|
+
// console.log("encode time:", Date.now() - time);
|
|
128
|
+
//# sourceMappingURL=v3_bench.js.map
|