@colyseus/schema 4.0.1 → 4.0.3
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/{lib → build}/Metadata.d.ts +2 -2
- package/{lib → build}/Reflection.d.ts +13 -13
- package/{lib → build}/Schema.d.ts +10 -10
- package/{lib → build}/annotations.d.ts +10 -10
- package/build/codegen/languages/cpp.d.ts +3 -0
- package/build/codegen/languages/csharp.d.ts +4 -0
- package/build/codegen/languages/haxe.d.ts +3 -0
- package/{lib → build}/codegen/languages/java.d.ts +2 -2
- package/build/codegen/languages/js.d.ts +3 -0
- package/build/codegen/languages/lua.d.ts +3 -0
- package/build/codegen/languages/ts.d.ts +3 -0
- package/{lib → build}/codegen/parser.d.ts +1 -1
- package/{lib → build}/decoder/DecodeOperation.d.ts +5 -5
- package/{lib → build}/decoder/Decoder.d.ts +7 -7
- package/{lib → build}/decoder/ReferenceTracker.d.ts +1 -1
- package/{lib → build}/decoder/strategy/Callbacks.d.ts +11 -11
- package/{lib → build}/decoder/strategy/RawChanges.d.ts +2 -2
- package/{lib → build}/decoder/strategy/getDecoderStateCallbacks.d.ts +3 -3
- package/{lib → build}/encoder/ChangeTree.d.ts +11 -11
- package/{lib → build}/encoder/EncodeOperation.d.ts +5 -5
- package/{lib → build}/encoder/Encoder.d.ts +6 -6
- package/{lib → build}/encoder/Root.d.ts +2 -2
- package/{lib → build}/encoder/StateView.d.ts +1 -1
- package/{lib → build}/encoding/assert.d.ts +6 -6
- package/{lib → build}/encoding/decode.d.ts +1 -1
- package/{lib → build}/encoding/encode.d.ts +1 -1
- package/build/{cjs/index.js → index.cjs} +1 -1
- package/build/index.cjs.map +1 -0
- package/build/index.d.ts +32 -0
- package/build/index.mjs.map +1 -0
- package/{lib → build}/types/HelperTypes.d.ts +6 -6
- package/{lib → build}/types/TypeContext.d.ts +1 -1
- package/{lib → build}/types/custom/ArraySchema.d.ts +8 -8
- package/{lib → build}/types/custom/CollectionSchema.d.ts +7 -7
- package/{lib → build}/types/custom/MapSchema.d.ts +7 -7
- package/{lib → build}/types/custom/SetSchema.d.ts +7 -7
- package/{lib → build}/types/registry.d.ts +2 -2
- package/{lib → build}/utils.d.ts +1 -1
- package/package.json +15 -14
- package/src/Metadata.ts +5 -5
- package/src/Reflection.ts +7 -7
- package/src/Schema.ts +11 -11
- package/src/annotations.ts +13 -13
- package/src/codegen/api.ts +10 -3
- package/src/codegen/cli.ts +2 -2
- package/src/codegen/languages/cpp.ts +2 -2
- package/src/codegen/languages/csharp.ts +3 -3
- package/src/codegen/languages/haxe.ts +2 -2
- package/src/codegen/languages/java.ts +2 -2
- package/src/codegen/languages/js.ts +2 -2
- package/src/codegen/languages/lua.ts +2 -2
- package/src/codegen/languages/ts.ts +2 -2
- package/src/codegen/parser.ts +7 -2
- package/src/codegen/types.ts +5 -0
- package/src/decoder/DecodeOperation.ts +14 -14
- package/src/decoder/Decoder.ts +11 -11
- package/src/decoder/ReferenceTracker.ts +8 -8
- package/src/decoder/strategy/Callbacks.ts +12 -12
- package/src/decoder/strategy/RawChanges.ts +2 -2
- package/src/decoder/strategy/getDecoderStateCallbacks.ts +10 -10
- package/src/encoder/ChangeTree.ts +13 -13
- package/src/encoder/EncodeOperation.ts +9 -9
- package/src/encoder/Encoder.ts +10 -10
- package/src/encoder/Root.ts +4 -4
- package/src/encoder/StateView.ts +7 -7
- package/src/encoding/assert.ts +6 -6
- package/src/encoding/decode.ts +1 -1
- package/src/encoding/encode.ts +1 -1
- package/src/index.ts +27 -27
- package/src/types/HelperTypes.ts +6 -6
- package/src/types/TypeContext.ts +3 -3
- package/src/types/custom/ArraySchema.ts +11 -11
- package/src/types/custom/CollectionSchema.ts +9 -9
- package/src/types/custom/MapSchema.ts +10 -10
- package/src/types/custom/SetSchema.ts +9 -9
- package/src/types/registry.ts +3 -3
- package/src/utils.ts +3 -3
- package/src/v3_bench.ts +1 -1
- package/build/cjs/index.js.map +0 -1
- package/build/esm/index.mjs.map +0 -1
- package/lib/Metadata.js +0 -260
- package/lib/Metadata.js.map +0 -1
- package/lib/Reflection.js +0 -182
- package/lib/Reflection.js.map +0 -1
- package/lib/Schema.js +0 -356
- package/lib/Schema.js.map +0 -1
- package/lib/annotations.js +0 -484
- package/lib/annotations.js.map +0 -1
- package/lib/bench_encode.d.ts +0 -1
- package/lib/bench_encode.js +0 -126
- package/lib/bench_encode.js.map +0 -1
- package/lib/codegen/api.js +0 -87
- package/lib/codegen/api.js.map +0 -1
- package/lib/codegen/argv.js +0 -41
- package/lib/codegen/argv.js.map +0 -1
- package/lib/codegen/cli.js +0 -63
- package/lib/codegen/cli.js.map +0 -1
- package/lib/codegen/languages/cpp.d.ts +0 -3
- package/lib/codegen/languages/cpp.js +0 -261
- package/lib/codegen/languages/cpp.js.map +0 -1
- package/lib/codegen/languages/csharp.d.ts +0 -4
- package/lib/codegen/languages/csharp.js +0 -157
- package/lib/codegen/languages/csharp.js.map +0 -1
- package/lib/codegen/languages/haxe.d.ts +0 -3
- package/lib/codegen/languages/haxe.js +0 -103
- package/lib/codegen/languages/haxe.js.map +0 -1
- package/lib/codegen/languages/java.js +0 -103
- package/lib/codegen/languages/java.js.map +0 -1
- package/lib/codegen/languages/js.d.ts +0 -3
- package/lib/codegen/languages/js.js +0 -104
- package/lib/codegen/languages/js.js.map +0 -1
- package/lib/codegen/languages/lua.d.ts +0 -3
- package/lib/codegen/languages/lua.js +0 -106
- package/lib/codegen/languages/lua.js.map +0 -1
- package/lib/codegen/languages/ts.d.ts +0 -3
- package/lib/codegen/languages/ts.js +0 -119
- package/lib/codegen/languages/ts.js.map +0 -1
- package/lib/codegen/parser.js +0 -364
- package/lib/codegen/parser.js.map +0 -1
- package/lib/codegen/types.js +0 -181
- package/lib/codegen/types.js.map +0 -1
- package/lib/decoder/DecodeOperation.js +0 -255
- package/lib/decoder/DecodeOperation.js.map +0 -1
- package/lib/decoder/Decoder.js +0 -118
- package/lib/decoder/Decoder.js.map +0 -1
- package/lib/decoder/ReferenceTracker.js +0 -139
- package/lib/decoder/ReferenceTracker.js.map +0 -1
- package/lib/decoder/strategy/Callbacks.js +0 -340
- package/lib/decoder/strategy/Callbacks.js.map +0 -1
- package/lib/decoder/strategy/RawChanges.js +0 -7
- package/lib/decoder/strategy/RawChanges.js.map +0 -1
- package/lib/decoder/strategy/getDecoderStateCallbacks.js +0 -277
- package/lib/decoder/strategy/getDecoderStateCallbacks.js.map +0 -1
- package/lib/encoder/ChangeTree.js +0 -542
- package/lib/encoder/ChangeTree.js.map +0 -1
- package/lib/encoder/EncodeOperation.js +0 -139
- package/lib/encoder/EncodeOperation.js.map +0 -1
- package/lib/encoder/Encoder.js +0 -208
- package/lib/encoder/Encoder.js.map +0 -1
- package/lib/encoder/Root.js +0 -233
- package/lib/encoder/Root.js.map +0 -1
- package/lib/encoder/StateView.js +0 -284
- package/lib/encoder/StateView.js.map +0 -1
- package/lib/encoding/assert.js +0 -55
- package/lib/encoding/assert.js.map +0 -1
- package/lib/encoding/decode.js +0 -221
- package/lib/encoding/decode.js.map +0 -1
- package/lib/encoding/encode.js +0 -282
- package/lib/encoding/encode.js.map +0 -1
- package/lib/encoding/spec.js +0 -29
- package/lib/encoding/spec.js.map +0 -1
- package/lib/index.d.ts +0 -32
- package/lib/index.js +0 -81
- package/lib/index.js.map +0 -1
- package/lib/symbol.shim.js +0 -4
- package/lib/symbol.shim.js.map +0 -1
- package/lib/types/HelperTypes.js +0 -3
- package/lib/types/HelperTypes.js.map +0 -1
- package/lib/types/TypeContext.js +0 -147
- package/lib/types/TypeContext.js.map +0 -1
- package/lib/types/custom/ArraySchema.js +0 -737
- package/lib/types/custom/ArraySchema.js.map +0 -1
- package/lib/types/custom/CollectionSchema.js +0 -174
- package/lib/types/custom/CollectionSchema.js.map +0 -1
- package/lib/types/custom/MapSchema.js +0 -226
- package/lib/types/custom/MapSchema.js.map +0 -1
- package/lib/types/custom/SetSchema.js +0 -182
- package/lib/types/custom/SetSchema.js.map +0 -1
- package/lib/types/registry.js +0 -37
- package/lib/types/registry.js.map +0 -1
- package/lib/types/symbols.js +0 -37
- package/lib/types/symbols.js.map +0 -1
- package/lib/types/utils.js +0 -16
- package/lib/types/utils.js.map +0 -1
- package/lib/utils.js +0 -54
- package/lib/utils.js.map +0 -1
- package/lib/v3_bench.js +0 -130
- package/lib/v3_bench.js.map +0 -1
- package/src/bench_encode.ts +0 -64
- /package/{lib → build}/codegen/api.d.ts +0 -0
- /package/{lib → build}/codegen/argv.d.ts +0 -0
- /package/{lib → build}/codegen/cli.d.ts +0 -0
- /package/{lib → build}/codegen/types.d.ts +0 -0
- /package/{lib → build}/encoding/spec.d.ts +0 -0
- /package/build/{umd/index.js → index.js} +0 -0
- /package/build/{esm/index.mjs → index.mjs} +0 -0
- /package/{lib → build}/symbol.shim.d.ts +0 -0
- /package/{lib → build}/types/symbols.d.ts +0 -0
- /package/{lib → build}/types/utils.d.ts +0 -0
- /package/{lib → build}/v3_bench.d.ts +0 -0
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var _a, _b;
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.SetSchema = void 0;
|
|
5
|
-
const spec_1 = require("../../encoding/spec");
|
|
6
|
-
const registry_1 = require("../registry");
|
|
7
|
-
const symbols_1 = require("../symbols");
|
|
8
|
-
const ChangeTree_1 = require("../../encoder/ChangeTree");
|
|
9
|
-
const EncodeOperation_1 = require("../../encoder/EncodeOperation");
|
|
10
|
-
const DecodeOperation_1 = require("../../decoder/DecodeOperation");
|
|
11
|
-
class SetSchema {
|
|
12
|
-
static { this[_a] = EncodeOperation_1.encodeKeyValueOperation; }
|
|
13
|
-
static { this[_b] = DecodeOperation_1.decodeKeyValueOperation; }
|
|
14
|
-
/**
|
|
15
|
-
* Determine if a property must be filtered.
|
|
16
|
-
* - If returns false, the property is NOT going to be encoded.
|
|
17
|
-
* - If returns true, the property is going to be encoded.
|
|
18
|
-
*
|
|
19
|
-
* Encoding with "filters" happens in two steps:
|
|
20
|
-
* - First, the encoder iterates over all "not owned" properties and encodes them.
|
|
21
|
-
* - Then, the encoder iterates over all "owned" properties per instance and encodes them.
|
|
22
|
-
*/
|
|
23
|
-
static [(_a = symbols_1.$encoder, _b = symbols_1.$decoder, symbols_1.$filter)](ref, index, view) {
|
|
24
|
-
return (!view ||
|
|
25
|
-
typeof (ref[symbols_1.$childType]) === "string" ||
|
|
26
|
-
view.visible.has((ref[symbols_1.$getByIndex](index) ?? ref.deletedItems[index])[symbols_1.$changes]));
|
|
27
|
-
}
|
|
28
|
-
static is(type) {
|
|
29
|
-
return type['set'] !== undefined;
|
|
30
|
-
}
|
|
31
|
-
constructor(initialValues) {
|
|
32
|
-
this.$items = new Map();
|
|
33
|
-
this.$indexes = new Map();
|
|
34
|
-
this.deletedItems = {};
|
|
35
|
-
this.$refId = 0;
|
|
36
|
-
this[symbols_1.$changes] = new ChangeTree_1.ChangeTree(this);
|
|
37
|
-
this[symbols_1.$changes].indexes = {};
|
|
38
|
-
if (initialValues) {
|
|
39
|
-
initialValues.forEach((v) => this.add(v));
|
|
40
|
-
}
|
|
41
|
-
Object.defineProperty(this, symbols_1.$childType, {
|
|
42
|
-
value: undefined,
|
|
43
|
-
enumerable: false,
|
|
44
|
-
writable: true,
|
|
45
|
-
configurable: true,
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
add(value) {
|
|
49
|
-
// immediatelly return false if value already added.
|
|
50
|
-
if (this.has(value)) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
// set "index" for reference.
|
|
54
|
-
const index = this.$refId++;
|
|
55
|
-
if ((value[symbols_1.$changes]) !== undefined) {
|
|
56
|
-
value[symbols_1.$changes].setParent(this, this[symbols_1.$changes].root, index);
|
|
57
|
-
}
|
|
58
|
-
const operation = this[symbols_1.$changes].indexes[index]?.op ?? spec_1.OPERATION.ADD;
|
|
59
|
-
this[symbols_1.$changes].indexes[index] = index;
|
|
60
|
-
this.$indexes.set(index, index);
|
|
61
|
-
this.$items.set(index, value);
|
|
62
|
-
this[symbols_1.$changes].change(index, operation);
|
|
63
|
-
return index;
|
|
64
|
-
}
|
|
65
|
-
entries() {
|
|
66
|
-
return this.$items.entries();
|
|
67
|
-
}
|
|
68
|
-
delete(item) {
|
|
69
|
-
const entries = this.$items.entries();
|
|
70
|
-
let index;
|
|
71
|
-
let entry;
|
|
72
|
-
while (entry = entries.next()) {
|
|
73
|
-
if (entry.done) {
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
if (item === entry.value[1]) {
|
|
77
|
-
index = entry.value[0];
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
if (index === undefined) {
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
this.deletedItems[index] = this[symbols_1.$changes].delete(index);
|
|
85
|
-
this.$indexes.delete(index);
|
|
86
|
-
return this.$items.delete(index);
|
|
87
|
-
}
|
|
88
|
-
clear() {
|
|
89
|
-
const changeTree = this[symbols_1.$changes];
|
|
90
|
-
// discard previous operations.
|
|
91
|
-
changeTree.discard(true);
|
|
92
|
-
changeTree.indexes = {};
|
|
93
|
-
// clear previous indexes
|
|
94
|
-
this.$indexes.clear();
|
|
95
|
-
// clear items
|
|
96
|
-
this.$items.clear();
|
|
97
|
-
changeTree.operation(spec_1.OPERATION.CLEAR);
|
|
98
|
-
}
|
|
99
|
-
has(value) {
|
|
100
|
-
const values = this.$items.values();
|
|
101
|
-
let has = false;
|
|
102
|
-
let entry;
|
|
103
|
-
while (entry = values.next()) {
|
|
104
|
-
if (entry.done) {
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
if (value === entry.value) {
|
|
108
|
-
has = true;
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
return has;
|
|
113
|
-
}
|
|
114
|
-
forEach(callbackfn) {
|
|
115
|
-
this.$items.forEach((value, key, _) => callbackfn(value, key, this));
|
|
116
|
-
}
|
|
117
|
-
values() {
|
|
118
|
-
return this.$items.values();
|
|
119
|
-
}
|
|
120
|
-
get size() {
|
|
121
|
-
return this.$items.size;
|
|
122
|
-
}
|
|
123
|
-
/** Iterator */
|
|
124
|
-
[Symbol.iterator]() {
|
|
125
|
-
return this.$items.values();
|
|
126
|
-
}
|
|
127
|
-
setIndex(index, key) {
|
|
128
|
-
this.$indexes.set(index, key);
|
|
129
|
-
}
|
|
130
|
-
getIndex(index) {
|
|
131
|
-
return this.$indexes.get(index);
|
|
132
|
-
}
|
|
133
|
-
[symbols_1.$getByIndex](index) {
|
|
134
|
-
return this.$items.get(this.$indexes.get(index));
|
|
135
|
-
}
|
|
136
|
-
[symbols_1.$deleteByIndex](index) {
|
|
137
|
-
const key = this.$indexes.get(index);
|
|
138
|
-
this.$items.delete(key);
|
|
139
|
-
this.$indexes.delete(index);
|
|
140
|
-
}
|
|
141
|
-
[symbols_1.$onEncodeEnd]() {
|
|
142
|
-
this.deletedItems = {};
|
|
143
|
-
}
|
|
144
|
-
toArray() {
|
|
145
|
-
return Array.from(this.$items.values());
|
|
146
|
-
}
|
|
147
|
-
toJSON() {
|
|
148
|
-
const values = [];
|
|
149
|
-
this.forEach((value, key) => {
|
|
150
|
-
values.push((typeof (value['toJSON']) === "function")
|
|
151
|
-
? value['toJSON']()
|
|
152
|
-
: value);
|
|
153
|
-
});
|
|
154
|
-
return values;
|
|
155
|
-
}
|
|
156
|
-
//
|
|
157
|
-
// Decoding utilities
|
|
158
|
-
//
|
|
159
|
-
clone(isDecoding) {
|
|
160
|
-
let cloned;
|
|
161
|
-
if (isDecoding) {
|
|
162
|
-
// client-side
|
|
163
|
-
cloned = Object.assign(new SetSchema(), this);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
// server-side
|
|
167
|
-
cloned = new SetSchema();
|
|
168
|
-
this.forEach((value) => {
|
|
169
|
-
if (value[symbols_1.$changes]) {
|
|
170
|
-
cloned.add(value['clone']());
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
cloned.add(value);
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
return cloned;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
exports.SetSchema = SetSchema;
|
|
181
|
-
(0, registry_1.registerType)("set", { constructor: SetSchema });
|
|
182
|
-
//# sourceMappingURL=SetSchema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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 });"]}
|
package/lib/types/registry.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registeredTypes = void 0;
|
|
4
|
-
exports.registerType = registerType;
|
|
5
|
-
exports.getIdentifier = getIdentifier;
|
|
6
|
-
exports.getType = getType;
|
|
7
|
-
exports.defineCustomTypes = defineCustomTypes;
|
|
8
|
-
const annotations_1 = require("../annotations");
|
|
9
|
-
const encode_1 = require("../encoding/encode");
|
|
10
|
-
const decode_1 = require("../encoding/decode");
|
|
11
|
-
exports.registeredTypes = {};
|
|
12
|
-
const identifiers = new Map();
|
|
13
|
-
function registerType(identifier, definition) {
|
|
14
|
-
if (definition.constructor) {
|
|
15
|
-
identifiers.set(definition.constructor, identifier);
|
|
16
|
-
exports.registeredTypes[identifier] = definition;
|
|
17
|
-
}
|
|
18
|
-
if (definition.encode) {
|
|
19
|
-
encode_1.encode[identifier] = definition.encode;
|
|
20
|
-
}
|
|
21
|
-
if (definition.decode) {
|
|
22
|
-
decode_1.decode[identifier] = definition.decode;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
function getIdentifier(klass) {
|
|
26
|
-
return identifiers.get(klass);
|
|
27
|
-
}
|
|
28
|
-
function getType(identifier) {
|
|
29
|
-
return exports.registeredTypes[identifier];
|
|
30
|
-
}
|
|
31
|
-
function defineCustomTypes(types) {
|
|
32
|
-
for (const identifier in types) {
|
|
33
|
-
registerType(identifier, types[identifier]);
|
|
34
|
-
}
|
|
35
|
-
return (t) => (0, annotations_1.type)(t);
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/types/registry.ts"],"names":[],"mappings":";;;AAcA,oCAQC;AAED,sCAEC;AAED,0BAEC;AAED,8CAMC;AAtCD,gDAAsD;AACtD,+CAAwD;AACxD,+CAAsD;AAQzC,QAAA,eAAe,GAA4C,EAAE,CAAC;AAE3E,MAAM,WAAW,GAAG,IAAI,GAAG,EAAe,CAAC;AAE3C,SAAgB,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,uBAAe,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;IAC7C,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAAE,eAAc,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAAC,CAAC;IAC3E,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAAE,eAAc,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAAC,CAAC;AAC/E,CAAC;AAED,SAAgB,aAAa,CAAC,KAAU;IACpC,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,OAAO,CAAC,UAAkB;IACtC,OAAO,uBAAe,CAAC,UAAU,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,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,IAAA,kBAAI,EAAC,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}"]}
|
package/lib/types/symbols.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.$fieldIndexesByViewTag = exports.$viewFieldIndexes = exports.$refTypeFieldIndexes = exports.$numFields = exports.$descriptors = exports.$onDecodeEnd = exports.$onEncodeEnd = exports.$childType = exports.$changes = exports.$deleteByIndex = exports.$getByIndex = exports.$filter = exports.$decoder = exports.$encoder = exports.$track = exports.$refId = void 0;
|
|
4
|
-
exports.$refId = "~refId";
|
|
5
|
-
exports.$track = "~track";
|
|
6
|
-
exports.$encoder = "~encoder";
|
|
7
|
-
exports.$decoder = "~decoder";
|
|
8
|
-
exports.$filter = "~filter";
|
|
9
|
-
exports.$getByIndex = "~getByIndex";
|
|
10
|
-
exports.$deleteByIndex = "~deleteByIndex";
|
|
11
|
-
/**
|
|
12
|
-
* Used to hold ChangeTree instances whitin the structures
|
|
13
|
-
*/
|
|
14
|
-
exports.$changes = '~changes';
|
|
15
|
-
/**
|
|
16
|
-
* Used to keep track of the type of the child elements of a collection
|
|
17
|
-
* (MapSchema, ArraySchema, etc.)
|
|
18
|
-
*/
|
|
19
|
-
exports.$childType = '~childType';
|
|
20
|
-
/**
|
|
21
|
-
* Optional "discard" method for custom types (ArraySchema)
|
|
22
|
-
* (Discards changes for next serialization)
|
|
23
|
-
*/
|
|
24
|
-
exports.$onEncodeEnd = '~onEncodeEnd';
|
|
25
|
-
/**
|
|
26
|
-
* When decoding, this method is called after the instance is fully decoded
|
|
27
|
-
*/
|
|
28
|
-
exports.$onDecodeEnd = "~onDecodeEnd";
|
|
29
|
-
/**
|
|
30
|
-
* Metadata
|
|
31
|
-
*/
|
|
32
|
-
exports.$descriptors = "~descriptors";
|
|
33
|
-
exports.$numFields = "~__numFields";
|
|
34
|
-
exports.$refTypeFieldIndexes = "~__refTypeFieldIndexes";
|
|
35
|
-
exports.$viewFieldIndexes = "~__viewFieldIndexes";
|
|
36
|
-
exports.$fieldIndexesByViewTag = "$__fieldIndexesByViewTag";
|
|
37
|
-
//# sourceMappingURL=symbols.js.map
|
package/lib/types/symbols.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/types/symbols.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG,QAAQ,CAAC;AAClB,QAAA,MAAM,GAAG,QAAQ,CAAC;AAClB,QAAA,QAAQ,GAAG,UAAU,CAAC;AACtB,QAAA,QAAQ,GAAG,UAAU,CAAC;AAEtB,QAAA,OAAO,GAAG,SAAS,CAAC;AAEpB,QAAA,WAAW,GAAG,aAAa,CAAC;AAC5B,QAAA,cAAc,GAAG,gBAAgB,CAAC;AAE/C;;GAEG;AACU,QAAA,QAAQ,GAAG,UAAU,CAAC;AAEnC;;;GAGG;AACU,QAAA,UAAU,GAAG,YAAY,CAAC;AAEvC;;;GAGG;AACU,QAAA,YAAY,GAAG,cAAc,CAAC;AAE3C;;GAEG;AACU,QAAA,YAAY,GAAG,cAAc,CAAC;AAE3C;;GAEG;AACU,QAAA,YAAY,GAAG,cAAc,CAAC;AAC9B,QAAA,UAAU,GAAG,cAAc,CAAC;AAC5B,QAAA,oBAAoB,GAAG,wBAAwB,CAAC;AAChD,QAAA,iBAAiB,GAAG,qBAAqB,CAAC;AAC1C,QAAA,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\";"]}
|
package/lib/types/utils.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.spliceOne = spliceOne;
|
|
4
|
-
function spliceOne(arr, index) {
|
|
5
|
-
// manually splice an array
|
|
6
|
-
if (index === -1 || index >= arr.length) {
|
|
7
|
-
return false;
|
|
8
|
-
}
|
|
9
|
-
const len = arr.length - 1;
|
|
10
|
-
for (let i = index; i < len; i++) {
|
|
11
|
-
arr[i] = arr[i + 1];
|
|
12
|
-
}
|
|
13
|
-
arr.length = len;
|
|
14
|
-
return true;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=utils.js.map
|
package/lib/types/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/types/utils.ts"],"names":[],"mappings":";;AAAA,8BAeC;AAfD,SAAgB,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}"]}
|
package/lib/utils.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getIndent = getIndent;
|
|
4
|
-
exports.dumpChanges = dumpChanges;
|
|
5
|
-
exports.getNextPowerOf2 = getNextPowerOf2;
|
|
6
|
-
const spec_1 = require("./encoding/spec");
|
|
7
|
-
const symbols_1 = require("./types/symbols");
|
|
8
|
-
function getIndent(level) {
|
|
9
|
-
return (new Array(level).fill(0)).map((_, i) => (i === level - 1) ? `└─ ` : ` `).join("");
|
|
10
|
-
}
|
|
11
|
-
function dumpChanges(schema) {
|
|
12
|
-
const $root = schema[symbols_1.$changes].root;
|
|
13
|
-
const dump = {
|
|
14
|
-
ops: {},
|
|
15
|
-
refs: []
|
|
16
|
-
};
|
|
17
|
-
// for (const refId in $root.changes) {
|
|
18
|
-
let current = $root.changes.next;
|
|
19
|
-
while (current) {
|
|
20
|
-
const changeTree = current.changeTree;
|
|
21
|
-
// skip if ChangeTree is undefined
|
|
22
|
-
if (changeTree === undefined) {
|
|
23
|
-
current = current.next;
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
const changes = changeTree.indexedOperations;
|
|
27
|
-
dump.refs.push(`refId#${changeTree.ref[symbols_1.$refId]}`);
|
|
28
|
-
for (const index in changes) {
|
|
29
|
-
const op = changes[index];
|
|
30
|
-
const opName = spec_1.OPERATION[op];
|
|
31
|
-
if (!dump.ops[opName]) {
|
|
32
|
-
dump.ops[opName] = 0;
|
|
33
|
-
}
|
|
34
|
-
dump.ops[spec_1.OPERATION[op]]++;
|
|
35
|
-
}
|
|
36
|
-
current = current.next;
|
|
37
|
-
}
|
|
38
|
-
return dump;
|
|
39
|
-
}
|
|
40
|
-
function getNextPowerOf2(number) {
|
|
41
|
-
// If number is already a power of 2, return it
|
|
42
|
-
if ((number & (number - 1)) === 0) {
|
|
43
|
-
return number;
|
|
44
|
-
}
|
|
45
|
-
// Find the position of the most significant bit
|
|
46
|
-
let msbPosition = 0;
|
|
47
|
-
while (number > 0) {
|
|
48
|
-
number >>= 1;
|
|
49
|
-
msbPosition++;
|
|
50
|
-
}
|
|
51
|
-
// Return the next power of 2
|
|
52
|
-
return 1 << msbPosition;
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=utils.js.map
|
package/lib/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;AAaA,8BAIC;AAED,kCA+BC;AAED,0CAeC;AAlED,0CAA4C;AAC5C,6CAAmD;AAWnD,SAAgB,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,SAAgB,WAAW,CAAC,MAAc;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAQ,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,gBAAM,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,gBAAS,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,gBAAS,CAAC,EAAE,CAA4B,CAAC,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,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}"]}
|
package/lib/v3_bench.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
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;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
const index_1 = require("./index");
|
|
10
|
-
// globalThis.interval = setInterval(() => {}, 1000);
|
|
11
|
-
// class Item extends Schema {
|
|
12
|
-
// @type("string") name: string;
|
|
13
|
-
// }
|
|
14
|
-
// class RootState extends Schema {
|
|
15
|
-
// @type([Item]) items = new ArraySchema<Item>();
|
|
16
|
-
// }
|
|
17
|
-
// const state = new RootState();
|
|
18
|
-
// state.items.push(new Item().assign({ name: "hello" }));
|
|
19
|
-
// console.log("Encoded:", state.encode());
|
|
20
|
-
class Vec3 extends index_1.Schema {
|
|
21
|
-
}
|
|
22
|
-
__decorate([
|
|
23
|
-
(0, index_1.type)("number")
|
|
24
|
-
], Vec3.prototype, "x", void 0);
|
|
25
|
-
__decorate([
|
|
26
|
-
(0, index_1.type)("number")
|
|
27
|
-
], Vec3.prototype, "y", void 0);
|
|
28
|
-
__decorate([
|
|
29
|
-
(0, index_1.type)("number")
|
|
30
|
-
], Vec3.prototype, "z", void 0);
|
|
31
|
-
class Base extends index_1.Schema {
|
|
32
|
-
}
|
|
33
|
-
class Entity extends index_1.Schema {
|
|
34
|
-
constructor() {
|
|
35
|
-
super(...arguments);
|
|
36
|
-
this.position = new Vec3().assign({ x: 0, y: 0, z: 0 });
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
__decorate([
|
|
40
|
-
(0, index_1.type)(Vec3)
|
|
41
|
-
], Entity.prototype, "position", void 0);
|
|
42
|
-
class Player extends Entity {
|
|
43
|
-
constructor() {
|
|
44
|
-
super(...arguments);
|
|
45
|
-
this.rotation = new Vec3().assign({ x: 0, y: 0, z: 0 });
|
|
46
|
-
this.secret = "private info only for this player";
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
__decorate([
|
|
50
|
-
(0, index_1.type)(Vec3)
|
|
51
|
-
], Player.prototype, "rotation", void 0);
|
|
52
|
-
__decorate([
|
|
53
|
-
(0, index_1.type)("string")
|
|
54
|
-
], Player.prototype, "secret", void 0);
|
|
55
|
-
class State extends index_1.Schema {
|
|
56
|
-
constructor() {
|
|
57
|
-
super(...arguments);
|
|
58
|
-
// @type({ map: Base }) players = new MapSchema<Entity>();
|
|
59
|
-
this.num = 0;
|
|
60
|
-
this.str = "Hello world!";
|
|
61
|
-
// @type(Entity) entity = new Player().assign({
|
|
62
|
-
// position: new Vec3().assign({ x: 1, y: 2, z: 3 }),
|
|
63
|
-
// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),
|
|
64
|
-
// });
|
|
65
|
-
this.entities = new index_1.MapSchema();
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
__decorate([
|
|
69
|
-
(0, index_1.type)("number")
|
|
70
|
-
], State.prototype, "num", void 0);
|
|
71
|
-
__decorate([
|
|
72
|
-
(0, index_1.type)("string")
|
|
73
|
-
], State.prototype, "str", void 0);
|
|
74
|
-
__decorate([
|
|
75
|
-
(0, index_1.type)({ map: Entity })
|
|
76
|
-
], State.prototype, "entities", void 0);
|
|
77
|
-
const state = new State();
|
|
78
|
-
state.entities.set("one", new Player().assign({
|
|
79
|
-
position: new Vec3().assign({ x: 1, y: 2, z: 3 }),
|
|
80
|
-
rotation: new Vec3().assign({ x: 1, y: 2, z: 3 }),
|
|
81
|
-
}));
|
|
82
|
-
state.entities.set("two", new Player().assign({
|
|
83
|
-
position: new Vec3().assign({ x: 4, y: 5, z: 6 }),
|
|
84
|
-
rotation: new Vec3().assign({ x: 7, y: 8, z: 9 }),
|
|
85
|
-
}));
|
|
86
|
-
const encoder = new index_1.Encoder(state);
|
|
87
|
-
let encoded = encoder.encode();
|
|
88
|
-
console.log(`(${encoded.length})`, [...encoded]);
|
|
89
|
-
globalThis.perform = function () {
|
|
90
|
-
for (let i = 0; i < 500000; i++) {
|
|
91
|
-
encoder.encodeAll();
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
function logTime(label, callback) {
|
|
95
|
-
const time = Date.now();
|
|
96
|
-
for (let i = 0; i < 500000; i++) {
|
|
97
|
-
callback();
|
|
98
|
-
}
|
|
99
|
-
console.log(`${label}:`, Date.now() - time);
|
|
100
|
-
}
|
|
101
|
-
logTime("encode time", () => encoder.encodeAll());
|
|
102
|
-
const decoder = new index_1.Decoder(new State());
|
|
103
|
-
logTime("decode time", () => decoder.decode(encoded));
|
|
104
|
-
// const time = Date.now();
|
|
105
|
-
// console.profile();
|
|
106
|
-
// for (let i = 0; i < 300000; i++) {
|
|
107
|
-
// state.encodeAll();
|
|
108
|
-
// }
|
|
109
|
-
// console.profileEnd();
|
|
110
|
-
// console.log("encode time:", Date.now() - time);
|
|
111
|
-
// const decoded = Reflection.decode(Reflection.encode(state));
|
|
112
|
-
// decoded.decode(encoded);
|
|
113
|
-
//
|
|
114
|
-
// console.log(decoded.toJSON());
|
|
115
|
-
//
|
|
116
|
-
// const rotation = state.entity.rotation;
|
|
117
|
-
// rotation.x = 100;
|
|
118
|
-
//
|
|
119
|
-
// encoded = state.encode();
|
|
120
|
-
// console.log({encoded});
|
|
121
|
-
//
|
|
122
|
-
// decoded.decode(encoded);
|
|
123
|
-
// console.log(decoded.toJSON());
|
|
124
|
-
// const time = Date.now();
|
|
125
|
-
// for (let i = 0; i < 300000; i++) {
|
|
126
|
-
// const state = new State();
|
|
127
|
-
// state.encode();
|
|
128
|
-
// }
|
|
129
|
-
// console.log("encode time:", Date.now() - time);
|
|
130
|
-
//# sourceMappingURL=v3_bench.js.map
|
package/lib/v3_bench.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"]}
|
package/src/bench_encode.ts
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { nanoid } from "nanoid";
|
|
2
|
-
import { Schema, type, MapSchema, ArraySchema, Encoder } from ".";
|
|
3
|
-
import * as benchmark from "benchmark";
|
|
4
|
-
|
|
5
|
-
const suite = new benchmark.Suite();
|
|
6
|
-
|
|
7
|
-
class AttributeNew extends Schema {
|
|
8
|
-
@type("string") name: string;
|
|
9
|
-
@type("number") value: number;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
class ItemNew extends Schema {
|
|
13
|
-
@type("number") price: number;
|
|
14
|
-
@type([ AttributeNew ]) attributes = new ArraySchema<AttributeNew>();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
class PositionNew extends Schema {
|
|
18
|
-
@type("number") x: number;
|
|
19
|
-
@type("number") y: number;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
class PlayerNew extends Schema {
|
|
23
|
-
@type(PositionNew) position = new PositionNew();
|
|
24
|
-
@type({ map: ItemNew }) items = new MapSchema<ItemNew>();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
class StateNew extends Schema {
|
|
28
|
-
@type({ map: PlayerNew }) players = new MapSchema<PlayerNew>();
|
|
29
|
-
@type("string") currentTurn: string;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const state = new StateNew();
|
|
33
|
-
|
|
34
|
-
for (let i = 0; i < 50; i++) {
|
|
35
|
-
const player = new PlayerNew();
|
|
36
|
-
state.players.set(`p-${nanoid()}`, player);
|
|
37
|
-
|
|
38
|
-
player.position.x = (i + 1) * 100;
|
|
39
|
-
player.position.y = (i + 1) * 100;
|
|
40
|
-
for (let j = 0; j < 10; j++) {
|
|
41
|
-
const item = new ItemNew();
|
|
42
|
-
item.price = (i + 1) * 50;
|
|
43
|
-
for (let k = 0; k < 5; k++) {
|
|
44
|
-
const attr = new AttributeNew();
|
|
45
|
-
attr.name = `Attribute ${k}`;
|
|
46
|
-
attr.value = k;
|
|
47
|
-
item.attributes.push(attr);
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
player.items.set(`item-${j}`, item);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
Encoder.BUFFER_SIZE = 1024 * 128;
|
|
55
|
-
const encoder = new Encoder(state);
|
|
56
|
-
|
|
57
|
-
// measure time to .encodeAll()
|
|
58
|
-
|
|
59
|
-
const now = Date.now();
|
|
60
|
-
for (let i = 0; i < 1000; i++) {
|
|
61
|
-
encoder.encodeAll();
|
|
62
|
-
}
|
|
63
|
-
console.log(Date.now() - now);
|
|
64
|
-
console.log(Array.from(encoder.encodeAll()).join(","));
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|