@colyseus/schema 4.0.2 → 4.0.4
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/src → 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/src → build}/decoder/Decoder.d.ts +7 -7
- package/{lib → build}/decoder/ReferenceTracker.d.ts +1 -1
- package/{lib → build}/decoder/strategy/Callbacks.d.ts +18 -43
- 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/src → build}/encoder/Root.d.ts +2 -2
- package/{lib/src → build}/encoder/StateView.d.ts +1 -1
- package/{lib/src → build}/encoding/assert.d.ts +6 -6
- package/{lib/src → build}/encoding/decode.d.ts +1 -1
- package/{lib/src → build}/encoding/encode.d.ts +1 -1
- package/build/{cjs/index.cjs → index.cjs} +8 -34
- package/build/index.cjs.map +1 -0
- package/build/index.d.ts +32 -0
- package/build/{umd/index.js → index.js} +8 -34
- package/build/{esm/index.mjs → index.mjs} +8 -34
- 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/src → build}/types/custom/ArraySchema.d.ts +8 -8
- package/{lib/src → build}/types/custom/CollectionSchema.d.ts +7 -7
- package/{lib → build}/types/custom/MapSchema.d.ts +7 -7
- package/{lib/src → build}/types/custom/SetSchema.d.ts +7 -7
- package/{lib/src → build}/types/registry.d.ts +2 -2
- package/{lib → build}/utils.d.ts +1 -1
- package/package.json +9 -10
- 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 +3 -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 +6 -1
- 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 +27 -53
- 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.cjs.map +0 -1
- package/build/esm/index.mjs.map +0 -1
- package/lib/Metadata.js +0 -256
- package/lib/Metadata.js.map +0 -1
- package/lib/Reflection.js +0 -179
- package/lib/Reflection.js.map +0 -1
- package/lib/Schema.js +0 -352
- package/lib/Schema.js.map +0 -1
- package/lib/annotations.d.ts +0 -109
- package/lib/annotations.js +0 -473
- package/lib/annotations.js.map +0 -1
- package/lib/bench_encode.d.ts +0 -1
- package/lib/bench_encode.js +0 -91
- package/lib/bench_encode.js.map +0 -1
- package/lib/benchmark.d.ts +0 -1
- package/lib/benchmark.js +0 -218
- package/lib/benchmark.js.map +0 -1
- package/lib/codegen/api.js +0 -56
- package/lib/codegen/api.js.map +0 -1
- package/lib/codegen/argv.js +0 -39
- package/lib/codegen/argv.js.map +0 -1
- package/lib/codegen/cli.js +0 -58
- package/lib/codegen/cli.js.map +0 -1
- package/lib/codegen/languages/cpp.d.ts +0 -3
- package/lib/codegen/languages/cpp.js +0 -258
- 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 -154
- 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 -100
- package/lib/codegen/languages/haxe.js.map +0 -1
- package/lib/codegen/languages/java.js +0 -100
- 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 -101
- 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 -103
- 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 -116
- package/lib/codegen/languages/ts.js.map +0 -1
- package/lib/codegen/parser.js +0 -327
- package/lib/codegen/parser.js.map +0 -1
- package/lib/codegen/types.js +0 -142
- package/lib/codegen/types.js.map +0 -1
- package/lib/decoder/DecodeOperation.js +0 -248
- package/lib/decoder/DecodeOperation.js.map +0 -1
- package/lib/decoder/Decoder.d.ts +0 -21
- package/lib/decoder/Decoder.js +0 -114
- package/lib/decoder/Decoder.js.map +0 -1
- package/lib/decoder/ReferenceTracker.js +0 -135
- package/lib/decoder/ReferenceTracker.js.map +0 -1
- package/lib/decoder/strategy/Callbacks.js +0 -336
- package/lib/decoder/strategy/Callbacks.js.map +0 -1
- package/lib/decoder/strategy/RawChanges.js +0 -4
- package/lib/decoder/strategy/RawChanges.js.map +0 -1
- package/lib/decoder/strategy/getDecoderStateCallbacks.js +0 -274
- package/lib/decoder/strategy/getDecoderStateCallbacks.js.map +0 -1
- package/lib/encoder/ChangeTree.js +0 -534
- package/lib/encoder/ChangeTree.js.map +0 -1
- package/lib/encoder/EncodeOperation.js +0 -132
- package/lib/encoder/EncodeOperation.js.map +0 -1
- package/lib/encoder/Encoder.js +0 -204
- package/lib/encoder/Encoder.js.map +0 -1
- package/lib/encoder/Root.d.ts +0 -28
- package/lib/encoder/Root.js +0 -229
- package/lib/encoder/Root.js.map +0 -1
- package/lib/encoder/StateView.d.ts +0 -34
- package/lib/encoder/StateView.js +0 -279
- package/lib/encoder/StateView.js.map +0 -1
- package/lib/encoding/assert.d.ts +0 -10
- package/lib/encoding/assert.js +0 -49
- package/lib/encoding/assert.js.map +0 -1
- package/lib/encoding/decode.d.ts +0 -67
- package/lib/encoding/decode.js +0 -217
- package/lib/encoding/decode.js.map +0 -1
- package/lib/encoding/encode.d.ts +0 -40
- package/lib/encoding/encode.js +0 -279
- package/lib/encoding/encode.js.map +0 -1
- package/lib/encoding/spec.js +0 -26
- package/lib/encoding/spec.js.map +0 -1
- package/lib/index.d.ts +0 -32
- package/lib/index.js +0 -39
- package/lib/index.js.map +0 -1
- package/lib/src/Metadata.d.ts +0 -49
- package/lib/src/Metadata.js +0 -256
- package/lib/src/Metadata.js.map +0 -1
- package/lib/src/Reflection.d.ts +0 -71
- package/lib/src/Reflection.js +0 -179
- package/lib/src/Reflection.js.map +0 -1
- package/lib/src/Schema.d.ts +0 -86
- package/lib/src/Schema.js +0 -352
- package/lib/src/Schema.js.map +0 -1
- package/lib/src/annotations.js +0 -473
- package/lib/src/annotations.js.map +0 -1
- package/lib/src/bench_encode.d.ts +0 -1
- package/lib/src/bench_encode.js +0 -91
- package/lib/src/bench_encode.js.map +0 -1
- package/lib/src/codegen/api.d.ts +0 -7
- package/lib/src/codegen/api.js +0 -56
- package/lib/src/codegen/api.js.map +0 -1
- package/lib/src/codegen/argv.d.ts +0 -6
- package/lib/src/codegen/argv.js +0 -39
- package/lib/src/codegen/argv.js.map +0 -1
- package/lib/src/codegen/cli.d.ts +0 -1
- package/lib/src/codegen/cli.js +0 -58
- package/lib/src/codegen/cli.js.map +0 -1
- package/lib/src/codegen/languages/cpp.d.ts +0 -3
- package/lib/src/codegen/languages/cpp.js +0 -258
- package/lib/src/codegen/languages/cpp.js.map +0 -1
- package/lib/src/codegen/languages/csharp.d.ts +0 -4
- package/lib/src/codegen/languages/csharp.js +0 -154
- package/lib/src/codegen/languages/csharp.js.map +0 -1
- package/lib/src/codegen/languages/haxe.d.ts +0 -3
- package/lib/src/codegen/languages/haxe.js +0 -100
- package/lib/src/codegen/languages/haxe.js.map +0 -1
- package/lib/src/codegen/languages/java.d.ts +0 -6
- package/lib/src/codegen/languages/java.js +0 -100
- package/lib/src/codegen/languages/java.js.map +0 -1
- package/lib/src/codegen/languages/js.d.ts +0 -3
- package/lib/src/codegen/languages/js.js +0 -101
- package/lib/src/codegen/languages/js.js.map +0 -1
- package/lib/src/codegen/languages/lua.d.ts +0 -3
- package/lib/src/codegen/languages/lua.js +0 -103
- package/lib/src/codegen/languages/lua.js.map +0 -1
- package/lib/src/codegen/languages/ts.d.ts +0 -3
- package/lib/src/codegen/languages/ts.js +0 -116
- package/lib/src/codegen/languages/ts.js.map +0 -1
- package/lib/src/codegen/parser.d.ts +0 -13
- package/lib/src/codegen/parser.js +0 -327
- package/lib/src/codegen/parser.js.map +0 -1
- package/lib/src/codegen/types.d.ts +0 -52
- package/lib/src/codegen/types.js +0 -142
- package/lib/src/codegen/types.js.map +0 -1
- package/lib/src/decoder/DecodeOperation.d.ts +0 -23
- package/lib/src/decoder/DecodeOperation.js +0 -248
- package/lib/src/decoder/DecodeOperation.js.map +0 -1
- package/lib/src/decoder/Decoder.js +0 -114
- package/lib/src/decoder/Decoder.js.map +0 -1
- package/lib/src/decoder/ReferenceTracker.d.ts +0 -25
- package/lib/src/decoder/ReferenceTracker.js +0 -135
- package/lib/src/decoder/ReferenceTracker.js.map +0 -1
- package/lib/src/decoder/strategy/Callbacks.d.ts +0 -154
- package/lib/src/decoder/strategy/Callbacks.js +0 -336
- package/lib/src/decoder/strategy/Callbacks.js.map +0 -1
- package/lib/src/decoder/strategy/RawChanges.d.ts +0 -3
- package/lib/src/decoder/strategy/RawChanges.js +0 -4
- package/lib/src/decoder/strategy/RawChanges.js.map +0 -1
- package/lib/src/decoder/strategy/getDecoderStateCallbacks.d.ts +0 -76
- package/lib/src/decoder/strategy/getDecoderStateCallbacks.js +0 -274
- package/lib/src/decoder/strategy/getDecoderStateCallbacks.js.map +0 -1
- package/lib/src/encoder/ChangeTree.d.ts +0 -135
- package/lib/src/encoder/ChangeTree.js +0 -534
- package/lib/src/encoder/ChangeTree.js.map +0 -1
- package/lib/src/encoder/EncodeOperation.d.ts +0 -22
- package/lib/src/encoder/EncodeOperation.js +0 -132
- package/lib/src/encoder/EncodeOperation.js.map +0 -1
- package/lib/src/encoder/Encoder.d.ts +0 -22
- package/lib/src/encoder/Encoder.js +0 -204
- package/lib/src/encoder/Encoder.js.map +0 -1
- package/lib/src/encoder/Root.js +0 -229
- package/lib/src/encoder/Root.js.map +0 -1
- package/lib/src/encoder/StateView.js +0 -279
- package/lib/src/encoder/StateView.js.map +0 -1
- package/lib/src/encoding/assert.js +0 -49
- package/lib/src/encoding/assert.js.map +0 -1
- package/lib/src/encoding/decode.js +0 -217
- package/lib/src/encoding/decode.js.map +0 -1
- package/lib/src/encoding/encode.js +0 -279
- package/lib/src/encoding/encode.js.map +0 -1
- package/lib/src/encoding/spec.d.ts +0 -24
- package/lib/src/encoding/spec.js +0 -26
- package/lib/src/encoding/spec.js.map +0 -1
- package/lib/src/index.d.ts +0 -32
- package/lib/src/index.js +0 -39
- package/lib/src/index.js.map +0 -1
- package/lib/src/symbol.shim.js +0 -3
- package/lib/src/symbol.shim.js.map +0 -1
- package/lib/src/types/HelperTypes.d.ts +0 -77
- package/lib/src/types/HelperTypes.js +0 -2
- package/lib/src/types/HelperTypes.js.map +0 -1
- package/lib/src/types/TypeContext.d.ts +0 -31
- package/lib/src/types/TypeContext.js +0 -143
- package/lib/src/types/TypeContext.js.map +0 -1
- package/lib/src/types/custom/ArraySchema.js +0 -733
- package/lib/src/types/custom/ArraySchema.js.map +0 -1
- package/lib/src/types/custom/CollectionSchema.js +0 -170
- package/lib/src/types/custom/CollectionSchema.js.map +0 -1
- package/lib/src/types/custom/MapSchema.d.ts +0 -51
- package/lib/src/types/custom/MapSchema.js +0 -222
- package/lib/src/types/custom/MapSchema.js.map +0 -1
- package/lib/src/types/custom/SetSchema.js +0 -178
- package/lib/src/types/custom/SetSchema.js.map +0 -1
- package/lib/src/types/registry.js +0 -30
- package/lib/src/types/registry.js.map +0 -1
- package/lib/src/types/symbols.js +0 -34
- package/lib/src/types/symbols.js.map +0 -1
- package/lib/src/types/utils.js +0 -13
- package/lib/src/types/utils.js.map +0 -1
- package/lib/src/utils.d.ts +0 -13
- package/lib/src/utils.js +0 -49
- package/lib/src/utils.js.map +0 -1
- package/lib/src/v3_bench.js +0 -128
- package/lib/src/v3_bench.js.map +0 -1
- package/lib/symbol.shim.d.ts +0 -6
- package/lib/symbol.shim.js +0 -3
- package/lib/symbol.shim.js.map +0 -1
- package/lib/types/HelperTypes.js +0 -2
- package/lib/types/HelperTypes.js.map +0 -1
- package/lib/types/TypeContext.js +0 -143
- package/lib/types/TypeContext.js.map +0 -1
- package/lib/types/custom/ArraySchema.d.ts +0 -270
- package/lib/types/custom/ArraySchema.js +0 -733
- package/lib/types/custom/ArraySchema.js.map +0 -1
- package/lib/types/custom/CollectionSchema.d.ts +0 -51
- package/lib/types/custom/CollectionSchema.js +0 -170
- package/lib/types/custom/CollectionSchema.js.map +0 -1
- package/lib/types/custom/MapSchema.js +0 -222
- package/lib/types/custom/MapSchema.js.map +0 -1
- package/lib/types/custom/SetSchema.d.ts +0 -48
- package/lib/types/custom/SetSchema.js +0 -178
- package/lib/types/custom/SetSchema.js.map +0 -1
- package/lib/types/registry.d.ts +0 -16
- package/lib/types/registry.js +0 -30
- package/lib/types/registry.js.map +0 -1
- package/lib/types/symbols.d.ts +0 -33
- package/lib/types/symbols.js +0 -34
- package/lib/types/symbols.js.map +0 -1
- package/lib/types/utils.d.ts +0 -1
- package/lib/types/utils.js +0 -13
- package/lib/types/utils.js.map +0 -1
- package/lib/utils.js +0 -49
- package/lib/utils.js.map +0 -1
- package/lib/v3_bench.d.ts +0 -1
- package/lib/v3_bench.js +0 -128
- package/lib/v3_bench.js.map +0 -1
- /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/{lib/src → build}/symbol.shim.d.ts +0 -0
- /package/{lib/src → build}/types/symbols.d.ts +0 -0
- /package/{lib/src → build}/types/utils.d.ts +0 -0
- /package/{lib/src → build}/v3_bench.d.ts +0 -0
package/lib/annotations.js
DELETED
|
@@ -1,473 +0,0 @@
|
|
|
1
|
-
import "./symbol.shim";
|
|
2
|
-
import { Schema } from './Schema';
|
|
3
|
-
import { ArraySchema } from './types/custom/ArraySchema';
|
|
4
|
-
import { MapSchema } from './types/custom/MapSchema';
|
|
5
|
-
import { getNormalizedType, Metadata } from "./Metadata";
|
|
6
|
-
import { $changes, $childType, $descriptors, $numFields, $track } from "./types/symbols";
|
|
7
|
-
import { getType } from "./types/registry";
|
|
8
|
-
import { OPERATION } from "./encoding/spec";
|
|
9
|
-
import { TypeContext } from "./types/TypeContext";
|
|
10
|
-
import { assertInstanceType, assertType } from "./encoding/assert";
|
|
11
|
-
import { CollectionSchema } from "./types/custom/CollectionSchema";
|
|
12
|
-
import { SetSchema } from "./types/custom/SetSchema";
|
|
13
|
-
export const DEFAULT_VIEW_TAG = -1;
|
|
14
|
-
export function entity(constructor) {
|
|
15
|
-
TypeContext.register(constructor);
|
|
16
|
-
return constructor;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* [See documentation](https://docs.colyseus.io/state/schema/)
|
|
20
|
-
*
|
|
21
|
-
* Annotate a Schema property to be serializeable.
|
|
22
|
-
* \@type()'d fields are automatically flagged as "dirty" for the next patch.
|
|
23
|
-
*
|
|
24
|
-
* @example Standard usage, with automatic change tracking.
|
|
25
|
-
* ```
|
|
26
|
-
* \@type("string") propertyName: string;
|
|
27
|
-
* ```
|
|
28
|
-
*
|
|
29
|
-
* @example You can provide the "manual" option if you'd like to manually control your patches via .setDirty().
|
|
30
|
-
* ```
|
|
31
|
-
* \@type("string", { manual: true })
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
// export function type(type: DefinitionType, options?: TypeOptions) {
|
|
35
|
-
// return function ({ get, set }, context: ClassAccessorDecoratorContext): ClassAccessorDecoratorResult<Schema, any> {
|
|
36
|
-
// if (context.kind !== "accessor") {
|
|
37
|
-
// throw new Error("@type() is only supported for class accessor properties");
|
|
38
|
-
// }
|
|
39
|
-
// const field = context.name.toString();
|
|
40
|
-
// //
|
|
41
|
-
// // detect index for this field, considering inheritance
|
|
42
|
-
// //
|
|
43
|
-
// const parent = Object.getPrototypeOf(context.metadata);
|
|
44
|
-
// let fieldIndex: number = context.metadata[$numFields] // current structure already has fields defined
|
|
45
|
-
// ?? (parent && parent[$numFields]) // parent structure has fields defined
|
|
46
|
-
// ?? -1; // no fields defined
|
|
47
|
-
// fieldIndex++;
|
|
48
|
-
// if (
|
|
49
|
-
// !parent && // the parent already initializes the `$changes` property
|
|
50
|
-
// !Metadata.hasFields(context.metadata)
|
|
51
|
-
// ) {
|
|
52
|
-
// context.addInitializer(function (this: Ref) {
|
|
53
|
-
// Object.defineProperty(this, $changes, {
|
|
54
|
-
// value: new ChangeTree(this),
|
|
55
|
-
// enumerable: false,
|
|
56
|
-
// writable: true
|
|
57
|
-
// });
|
|
58
|
-
// });
|
|
59
|
-
// }
|
|
60
|
-
// Metadata.addField(context.metadata, fieldIndex, field, type);
|
|
61
|
-
// const isArray = ArraySchema.is(type);
|
|
62
|
-
// const isMap = !isArray && MapSchema.is(type);
|
|
63
|
-
// // if (options && options.manual) {
|
|
64
|
-
// // // do not declare getter/setter descriptor
|
|
65
|
-
// // definition.descriptors[field] = {
|
|
66
|
-
// // enumerable: true,
|
|
67
|
-
// // configurable: true,
|
|
68
|
-
// // writable: true,
|
|
69
|
-
// // };
|
|
70
|
-
// // return;
|
|
71
|
-
// // }
|
|
72
|
-
// return {
|
|
73
|
-
// init(value) {
|
|
74
|
-
// // TODO: may need to convert ArraySchema/MapSchema here
|
|
75
|
-
// // do not flag change if value is undefined.
|
|
76
|
-
// if (value !== undefined) {
|
|
77
|
-
// this[$changes].change(fieldIndex);
|
|
78
|
-
// // automaticallty transform Array into ArraySchema
|
|
79
|
-
// if (isArray) {
|
|
80
|
-
// if (!(value instanceof ArraySchema)) {
|
|
81
|
-
// value = new ArraySchema(...value);
|
|
82
|
-
// }
|
|
83
|
-
// value[$childType] = Object.values(type)[0];
|
|
84
|
-
// }
|
|
85
|
-
// // automaticallty transform Map into MapSchema
|
|
86
|
-
// if (isMap) {
|
|
87
|
-
// if (!(value instanceof MapSchema)) {
|
|
88
|
-
// value = new MapSchema(value);
|
|
89
|
-
// }
|
|
90
|
-
// value[$childType] = Object.values(type)[0];
|
|
91
|
-
// }
|
|
92
|
-
// // try to turn provided structure into a Proxy
|
|
93
|
-
// if (value['$proxy'] === undefined) {
|
|
94
|
-
// if (isMap) {
|
|
95
|
-
// value = getMapProxy(value);
|
|
96
|
-
// }
|
|
97
|
-
// }
|
|
98
|
-
// }
|
|
99
|
-
// return value;
|
|
100
|
-
// },
|
|
101
|
-
// get() {
|
|
102
|
-
// return get.call(this);
|
|
103
|
-
// },
|
|
104
|
-
// set(value: any) {
|
|
105
|
-
// /**
|
|
106
|
-
// * Create Proxy for array or map items
|
|
107
|
-
// */
|
|
108
|
-
// // skip if value is the same as cached.
|
|
109
|
-
// if (value === get.call(this)) {
|
|
110
|
-
// return;
|
|
111
|
-
// }
|
|
112
|
-
// if (
|
|
113
|
-
// value !== undefined &&
|
|
114
|
-
// value !== null
|
|
115
|
-
// ) {
|
|
116
|
-
// // automaticallty transform Array into ArraySchema
|
|
117
|
-
// if (isArray) {
|
|
118
|
-
// if (!(value instanceof ArraySchema)) {
|
|
119
|
-
// value = new ArraySchema(...value);
|
|
120
|
-
// }
|
|
121
|
-
// value[$childType] = Object.values(type)[0];
|
|
122
|
-
// }
|
|
123
|
-
// // automaticallty transform Map into MapSchema
|
|
124
|
-
// if (isMap) {
|
|
125
|
-
// if (!(value instanceof MapSchema)) {
|
|
126
|
-
// value = new MapSchema(value);
|
|
127
|
-
// }
|
|
128
|
-
// value[$childType] = Object.values(type)[0];
|
|
129
|
-
// }
|
|
130
|
-
// // try to turn provided structure into a Proxy
|
|
131
|
-
// if (value['$proxy'] === undefined) {
|
|
132
|
-
// if (isMap) {
|
|
133
|
-
// value = getMapProxy(value);
|
|
134
|
-
// }
|
|
135
|
-
// }
|
|
136
|
-
// // flag the change for encoding.
|
|
137
|
-
// this[$changes].change(fieldIndex);
|
|
138
|
-
// //
|
|
139
|
-
// // call setParent() recursively for this and its child
|
|
140
|
-
// // structures.
|
|
141
|
-
// //
|
|
142
|
-
// if (value[$changes]) {
|
|
143
|
-
// value[$changes].setParent(
|
|
144
|
-
// this,
|
|
145
|
-
// this[$changes].root,
|
|
146
|
-
// Metadata.getIndex(context.metadata, field),
|
|
147
|
-
// );
|
|
148
|
-
// }
|
|
149
|
-
// } else if (get.call(this)) {
|
|
150
|
-
// //
|
|
151
|
-
// // Setting a field to `null` or `undefined` will delete it.
|
|
152
|
-
// //
|
|
153
|
-
// this[$changes].delete(field);
|
|
154
|
-
// }
|
|
155
|
-
// set.call(this, value);
|
|
156
|
-
// },
|
|
157
|
-
// };
|
|
158
|
-
// }
|
|
159
|
-
// }
|
|
160
|
-
export function view(tag = DEFAULT_VIEW_TAG) {
|
|
161
|
-
return function (target, fieldName) {
|
|
162
|
-
const constructor = target.constructor;
|
|
163
|
-
const parentClass = Object.getPrototypeOf(constructor);
|
|
164
|
-
const parentMetadata = parentClass[Symbol.metadata];
|
|
165
|
-
// TODO: use Metadata.initialize()
|
|
166
|
-
const metadata = (constructor[Symbol.metadata] ??= Object.assign({}, constructor[Symbol.metadata], parentMetadata ?? Object.create(null)));
|
|
167
|
-
// const fieldIndex = metadata[fieldName];
|
|
168
|
-
// if (!metadata[fieldIndex]) {
|
|
169
|
-
// //
|
|
170
|
-
// // detect index for this field, considering inheritance
|
|
171
|
-
// //
|
|
172
|
-
// metadata[fieldIndex] = {
|
|
173
|
-
// type: undefined,
|
|
174
|
-
// index: (metadata[$numFields] // current structure already has fields defined
|
|
175
|
-
// ?? (parentMetadata && parentMetadata[$numFields]) // parent structure has fields defined
|
|
176
|
-
// ?? -1) + 1 // no fields defined
|
|
177
|
-
// }
|
|
178
|
-
// }
|
|
179
|
-
Metadata.setTag(metadata, fieldName, tag);
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
export function unreliable(target, field) {
|
|
183
|
-
//
|
|
184
|
-
// FIXME: the following block of code is repeated across `@type()`, `@deprecated()` and `@unreliable()` decorators.
|
|
185
|
-
//
|
|
186
|
-
const constructor = target.constructor;
|
|
187
|
-
const parentClass = Object.getPrototypeOf(constructor);
|
|
188
|
-
const parentMetadata = parentClass[Symbol.metadata];
|
|
189
|
-
// TODO: use Metadata.initialize()
|
|
190
|
-
const metadata = (constructor[Symbol.metadata] ??= Object.assign({}, constructor[Symbol.metadata], parentMetadata ?? Object.create(null)));
|
|
191
|
-
// if (!metadata[field]) {
|
|
192
|
-
// //
|
|
193
|
-
// // detect index for this field, considering inheritance
|
|
194
|
-
// //
|
|
195
|
-
// metadata[field] = {
|
|
196
|
-
// type: undefined,
|
|
197
|
-
// index: (metadata[$numFields] // current structure already has fields defined
|
|
198
|
-
// ?? (parentMetadata && parentMetadata[$numFields]) // parent structure has fields defined
|
|
199
|
-
// ?? -1) + 1 // no fields defined
|
|
200
|
-
// }
|
|
201
|
-
// }
|
|
202
|
-
// add owned flag to the field
|
|
203
|
-
metadata[metadata[field]].unreliable = true;
|
|
204
|
-
}
|
|
205
|
-
export function type(type, options) {
|
|
206
|
-
return function (target, field) {
|
|
207
|
-
const constructor = target.constructor;
|
|
208
|
-
if (!type) {
|
|
209
|
-
throw new Error(`${constructor.name}: @type() reference provided for "${field}" is undefined. Make sure you don't have any circular dependencies.`);
|
|
210
|
-
}
|
|
211
|
-
// Normalize type (enum/collection/etc)
|
|
212
|
-
type = getNormalizedType(type);
|
|
213
|
-
// for inheritance support
|
|
214
|
-
TypeContext.register(constructor);
|
|
215
|
-
const parentClass = Object.getPrototypeOf(constructor);
|
|
216
|
-
const parentMetadata = parentClass[Symbol.metadata];
|
|
217
|
-
const metadata = Metadata.initialize(constructor);
|
|
218
|
-
let fieldIndex = metadata[field];
|
|
219
|
-
/**
|
|
220
|
-
* skip if descriptor already exists for this field (`@deprecated()`)
|
|
221
|
-
*/
|
|
222
|
-
if (metadata[fieldIndex] !== undefined) {
|
|
223
|
-
if (metadata[fieldIndex].deprecated) {
|
|
224
|
-
// do not create accessors for deprecated properties.
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
else if (metadata[fieldIndex].type !== undefined) {
|
|
228
|
-
// trying to define same property multiple times across inheritance.
|
|
229
|
-
// https://github.com/colyseus/colyseus-unity3d/issues/131#issuecomment-814308572
|
|
230
|
-
try {
|
|
231
|
-
throw new Error(`@colyseus/schema: Duplicate '${field}' definition on '${constructor.name}'.\nCheck @type() annotation`);
|
|
232
|
-
}
|
|
233
|
-
catch (e) {
|
|
234
|
-
const definitionAtLine = e.stack.split("\n")[4].trim();
|
|
235
|
-
throw new Error(`${e.message} ${definitionAtLine}`);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
//
|
|
241
|
-
// detect index for this field, considering inheritance
|
|
242
|
-
//
|
|
243
|
-
fieldIndex = metadata[$numFields] // current structure already has fields defined
|
|
244
|
-
?? (parentMetadata && parentMetadata[$numFields]) // parent structure has fields defined
|
|
245
|
-
?? -1; // no fields defined
|
|
246
|
-
fieldIndex++;
|
|
247
|
-
}
|
|
248
|
-
if (options && options.manual) {
|
|
249
|
-
Metadata.addField(metadata, fieldIndex, field, type, {
|
|
250
|
-
// do not declare getter/setter descriptor
|
|
251
|
-
enumerable: true,
|
|
252
|
-
configurable: true,
|
|
253
|
-
writable: true,
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
const complexTypeKlass = typeof (Object.keys(type)[0]) === "string" && getType(Object.keys(type)[0]);
|
|
258
|
-
const childType = (complexTypeKlass)
|
|
259
|
-
? Object.values(type)[0]
|
|
260
|
-
: type;
|
|
261
|
-
Metadata.addField(metadata, fieldIndex, field, type, getPropertyDescriptor(`_${field}`, fieldIndex, childType, complexTypeKlass));
|
|
262
|
-
}
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
export function getPropertyDescriptor(fieldCached, fieldIndex, type, complexTypeKlass) {
|
|
266
|
-
return {
|
|
267
|
-
get: function () { return this[fieldCached]; },
|
|
268
|
-
set: function (value) {
|
|
269
|
-
const previousValue = this[fieldCached] ?? undefined;
|
|
270
|
-
// skip if value is the same as cached.
|
|
271
|
-
if (value === previousValue) {
|
|
272
|
-
return;
|
|
273
|
-
}
|
|
274
|
-
if (value !== undefined &&
|
|
275
|
-
value !== null) {
|
|
276
|
-
if (complexTypeKlass) {
|
|
277
|
-
// automaticallty transform Array into ArraySchema
|
|
278
|
-
if (complexTypeKlass.constructor === ArraySchema && !(value instanceof ArraySchema)) {
|
|
279
|
-
value = new ArraySchema(...value);
|
|
280
|
-
}
|
|
281
|
-
// automaticallty transform Map into MapSchema
|
|
282
|
-
if (complexTypeKlass.constructor === MapSchema && !(value instanceof MapSchema)) {
|
|
283
|
-
value = new MapSchema(value);
|
|
284
|
-
}
|
|
285
|
-
// // automaticallty transform Array into SetSchema
|
|
286
|
-
// if (complexTypeKlass.constructor === SetSchema && !(value instanceof SetSchema)) {
|
|
287
|
-
// value = new SetSchema(value);
|
|
288
|
-
// }
|
|
289
|
-
value[$childType] = type;
|
|
290
|
-
}
|
|
291
|
-
else if (typeof (type) !== "string") {
|
|
292
|
-
assertInstanceType(value, type, this, fieldCached.substring(1));
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
assertType(value, type, this, fieldCached.substring(1));
|
|
296
|
-
}
|
|
297
|
-
const changeTree = this[$changes];
|
|
298
|
-
//
|
|
299
|
-
// Replacing existing "ref", remove it from root.
|
|
300
|
-
//
|
|
301
|
-
if (previousValue !== undefined && previousValue[$changes]) {
|
|
302
|
-
changeTree.root?.remove(previousValue[$changes]);
|
|
303
|
-
this.constructor[$track](changeTree, fieldIndex, OPERATION.DELETE_AND_ADD);
|
|
304
|
-
}
|
|
305
|
-
else {
|
|
306
|
-
this.constructor[$track](changeTree, fieldIndex, OPERATION.ADD);
|
|
307
|
-
}
|
|
308
|
-
//
|
|
309
|
-
// call setParent() recursively for this and its child
|
|
310
|
-
// structures.
|
|
311
|
-
//
|
|
312
|
-
value[$changes]?.setParent(this, changeTree.root, fieldIndex);
|
|
313
|
-
}
|
|
314
|
-
else if (previousValue !== undefined) {
|
|
315
|
-
//
|
|
316
|
-
// Setting a field to `null` or `undefined` will delete it.
|
|
317
|
-
//
|
|
318
|
-
this[$changes].delete(fieldIndex);
|
|
319
|
-
}
|
|
320
|
-
this[fieldCached] = value;
|
|
321
|
-
},
|
|
322
|
-
enumerable: true,
|
|
323
|
-
configurable: true
|
|
324
|
-
};
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* `@deprecated()` flag a field as deprecated.
|
|
328
|
-
* The previous `@type()` annotation should remain along with this one.
|
|
329
|
-
*/
|
|
330
|
-
export function deprecated(throws = true) {
|
|
331
|
-
return function (klass, field) {
|
|
332
|
-
//
|
|
333
|
-
// FIXME: the following block of code is repeated across `@type()`, `@deprecated()` and `@unreliable()` decorators.
|
|
334
|
-
//
|
|
335
|
-
const constructor = klass.constructor;
|
|
336
|
-
const parentClass = Object.getPrototypeOf(constructor);
|
|
337
|
-
const parentMetadata = parentClass[Symbol.metadata];
|
|
338
|
-
const metadata = (constructor[Symbol.metadata] ??= Object.assign({}, constructor[Symbol.metadata], parentMetadata ?? Object.create(null)));
|
|
339
|
-
const fieldIndex = metadata[field];
|
|
340
|
-
// if (!metadata[field]) {
|
|
341
|
-
// //
|
|
342
|
-
// // detect index for this field, considering inheritance
|
|
343
|
-
// //
|
|
344
|
-
// metadata[field] = {
|
|
345
|
-
// type: undefined,
|
|
346
|
-
// index: (metadata[$numFields] // current structure already has fields defined
|
|
347
|
-
// ?? (parentMetadata && parentMetadata[$numFields]) // parent structure has fields defined
|
|
348
|
-
// ?? -1) + 1 // no fields defined
|
|
349
|
-
// }
|
|
350
|
-
// }
|
|
351
|
-
metadata[fieldIndex].deprecated = true;
|
|
352
|
-
if (throws) {
|
|
353
|
-
metadata[$descriptors] ??= {};
|
|
354
|
-
metadata[$descriptors][field] = {
|
|
355
|
-
get: function () { throw new Error(`${field} is deprecated.`); },
|
|
356
|
-
set: function (value) { },
|
|
357
|
-
enumerable: false,
|
|
358
|
-
configurable: true
|
|
359
|
-
};
|
|
360
|
-
}
|
|
361
|
-
// flag metadata[field] as non-enumerable
|
|
362
|
-
Object.defineProperty(metadata, fieldIndex, {
|
|
363
|
-
value: metadata[fieldIndex],
|
|
364
|
-
enumerable: false,
|
|
365
|
-
configurable: true
|
|
366
|
-
});
|
|
367
|
-
};
|
|
368
|
-
}
|
|
369
|
-
export function defineTypes(target, fields, options) {
|
|
370
|
-
for (let field in fields) {
|
|
371
|
-
type(fields[field], options)(target.prototype, field);
|
|
372
|
-
}
|
|
373
|
-
return target;
|
|
374
|
-
}
|
|
375
|
-
export function schema(fieldsAndMethods, name, inherits = Schema) {
|
|
376
|
-
const fields = {};
|
|
377
|
-
const methods = {};
|
|
378
|
-
const defaultValues = {};
|
|
379
|
-
const viewTagFields = {};
|
|
380
|
-
for (let fieldName in fieldsAndMethods) {
|
|
381
|
-
const value = fieldsAndMethods[fieldName];
|
|
382
|
-
if (typeof (value) === "object") {
|
|
383
|
-
if (value['view'] !== undefined) {
|
|
384
|
-
viewTagFields[fieldName] = (typeof (value['view']) === "boolean")
|
|
385
|
-
? DEFAULT_VIEW_TAG
|
|
386
|
-
: value['view'];
|
|
387
|
-
}
|
|
388
|
-
// allow to define a field as not synced
|
|
389
|
-
if (value['sync'] !== false) {
|
|
390
|
-
fields[fieldName] = getNormalizedType(value);
|
|
391
|
-
}
|
|
392
|
-
// If no explicit default provided, handle automatic instantiation for collection types
|
|
393
|
-
if (!Object.prototype.hasOwnProperty.call(value, 'default')) {
|
|
394
|
-
// TODO: remove Array.isArray() check. Use ['array'] !== undefined only.
|
|
395
|
-
if (Array.isArray(value) || value['array'] !== undefined) {
|
|
396
|
-
// Collection: Array → new ArraySchema()
|
|
397
|
-
defaultValues[fieldName] = new ArraySchema();
|
|
398
|
-
}
|
|
399
|
-
else if (value['map'] !== undefined) {
|
|
400
|
-
// Collection: Map → new MapSchema()
|
|
401
|
-
defaultValues[fieldName] = new MapSchema();
|
|
402
|
-
}
|
|
403
|
-
else if (value['collection'] !== undefined) {
|
|
404
|
-
// Collection: Collection → new CollectionSchema()
|
|
405
|
-
defaultValues[fieldName] = new CollectionSchema();
|
|
406
|
-
}
|
|
407
|
-
else if (value['set'] !== undefined) {
|
|
408
|
-
// Collection: Set → new SetSchema()
|
|
409
|
-
defaultValues[fieldName] = new SetSchema();
|
|
410
|
-
}
|
|
411
|
-
else if (value['type'] !== undefined && Schema.is(value['type'])) {
|
|
412
|
-
// Direct Schema type: Type → new Type()
|
|
413
|
-
defaultValues[fieldName] = new value['type']();
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
else {
|
|
417
|
-
defaultValues[fieldName] = value['default'];
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
else if (typeof (value) === "function") {
|
|
421
|
-
if (Schema.is(value)) {
|
|
422
|
-
// Direct Schema type: Type → new Type()
|
|
423
|
-
defaultValues[fieldName] = new value();
|
|
424
|
-
fields[fieldName] = getNormalizedType(value);
|
|
425
|
-
}
|
|
426
|
-
else {
|
|
427
|
-
methods[fieldName] = value;
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
else {
|
|
431
|
-
fields[fieldName] = getNormalizedType(value);
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
const getDefaultValues = () => {
|
|
435
|
-
const defaults = {};
|
|
436
|
-
// use current class default values
|
|
437
|
-
for (const fieldName in defaultValues) {
|
|
438
|
-
const defaultValue = defaultValues[fieldName];
|
|
439
|
-
if (defaultValue && typeof defaultValue.clone === 'function') {
|
|
440
|
-
// complex, cloneable values, e.g. Schema, ArraySchema, MapSchema, CollectionSchema, SetSchema
|
|
441
|
-
defaults[fieldName] = defaultValue.clone();
|
|
442
|
-
}
|
|
443
|
-
else {
|
|
444
|
-
// primitives and non-cloneable values
|
|
445
|
-
defaults[fieldName] = defaultValue;
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
return defaults;
|
|
449
|
-
};
|
|
450
|
-
/** @codegen-ignore */
|
|
451
|
-
const klass = Metadata.setFields(class extends inherits {
|
|
452
|
-
constructor(...args) {
|
|
453
|
-
super(Object.assign({}, getDefaultValues(), args[0] || {}));
|
|
454
|
-
// call initialize method
|
|
455
|
-
if (methods.initialize && typeof methods.initialize === 'function') {
|
|
456
|
-
methods.initialize.apply(this, args);
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
}, fields);
|
|
460
|
-
// Store the getDefaultValues function on the class for inheritance
|
|
461
|
-
klass._getDefaultValues = getDefaultValues;
|
|
462
|
-
// Add methods to the prototype
|
|
463
|
-
Object.assign(klass.prototype, methods);
|
|
464
|
-
for (let fieldName in viewTagFields) {
|
|
465
|
-
view(viewTagFields[fieldName])(klass.prototype, fieldName);
|
|
466
|
-
}
|
|
467
|
-
if (name) {
|
|
468
|
-
Object.defineProperty(klass, "name", { value: name });
|
|
469
|
-
}
|
|
470
|
-
klass.extends = (fields, name) => schema(fields, name, klass);
|
|
471
|
-
return klass;
|
|
472
|
-
}
|
|
473
|
-
//# sourceMappingURL=annotations.js.map
|
package/lib/annotations.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"annotations.js","sourceRoot":"","sources":["../src/annotations.ts"],"names":[],"mappings":"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","sourcesContent":["import \"./symbol.shim\";\nimport { Schema } from './Schema';\nimport { ArraySchema } from './types/custom/ArraySchema';\nimport { MapSchema } from './types/custom/MapSchema';\nimport { getNormalizedType, Metadata } from \"./Metadata\";\nimport { $changes, $childType, $descriptors, $numFields, $track } from \"./types/symbols\";\nimport { TypeDefinition, getType } from \"./types/registry\";\nimport { OPERATION } from \"./encoding/spec\";\nimport { TypeContext } from \"./types/TypeContext\";\nimport { assertInstanceType, assertType } from \"./encoding/assert\";\nimport type { InferValueType, InferSchemaInstanceType, AssignableProps, IsNever } from \"./types/HelperTypes\";\nimport { CollectionSchema } from \"./types/custom/CollectionSchema\";\nimport { SetSchema } from \"./types/custom/SetSchema\";\n\nexport type RawPrimitiveType = \"string\" |\n \"number\" |\n \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"float32\" |\n \"float64\" |\n \"bigint64\" |\n \"biguint64\";\n\nexport type PrimitiveType = RawPrimitiveType | typeof Schema | object;\n\n// TODO: infer \"default\" value type correctly.\nexport type DefinitionType<T extends PrimitiveType = PrimitiveType> = T\n | T[]\n | { type: T, default?: InferValueType<T>, view?: boolean | number, sync?: boolean }\n | { array: T, default?: ArraySchema<InferValueType<T>>, view?: boolean | number, sync?: boolean }\n | { map: T, default?: MapSchema<InferValueType<T>>, view?: boolean | number, sync?: boolean }\n | { collection: T, default?: CollectionSchema<InferValueType<T>>, view?: boolean | number, sync?: boolean }\n | { set: T, default?: SetSchema<InferValueType<T>>, view?: boolean | number, sync?: boolean };\n\nexport type Definition = { [field: string]: DefinitionType };\n\nexport interface TypeOptions {\n manual?: boolean,\n}\n\nexport const DEFAULT_VIEW_TAG = -1;\n\nexport function entity(constructor: any): any {\n TypeContext.register(constructor as typeof Schema);\n return constructor;\n}\n\n/**\n * [See documentation](https://docs.colyseus.io/state/schema/)\n *\n * Annotate a Schema property to be serializeable.\n * \\@type()'d fields are automatically flagged as \"dirty\" for the next patch.\n *\n * @example Standard usage, with automatic change tracking.\n * ```\n * \\@type(\"string\") propertyName: string;\n * ```\n *\n * @example You can provide the \"manual\" option if you'd like to manually control your patches via .setDirty().\n * ```\n * \\@type(\"string\", { manual: true })\n * ```\n */\n// export function type(type: DefinitionType, options?: TypeOptions) {\n// return function ({ get, set }, context: ClassAccessorDecoratorContext): ClassAccessorDecoratorResult<Schema, any> {\n// if (context.kind !== \"accessor\") {\n// throw new Error(\"@type() is only supported for class accessor properties\");\n// }\n\n// const field = context.name.toString();\n\n// //\n// // detect index for this field, considering inheritance\n// //\n// const parent = Object.getPrototypeOf(context.metadata);\n// let fieldIndex: number = context.metadata[$numFields] // current structure already has fields defined\n// ?? (parent && parent[$numFields]) // parent structure has fields defined\n// ?? -1; // no fields defined\n// fieldIndex++;\n\n// if (\n// !parent && // the parent already initializes the `$changes` property\n// !Metadata.hasFields(context.metadata)\n// ) {\n// context.addInitializer(function (this: Ref) {\n// Object.defineProperty(this, $changes, {\n// value: new ChangeTree(this),\n// enumerable: false,\n// writable: true\n// });\n// });\n// }\n\n// Metadata.addField(context.metadata, fieldIndex, field, type);\n\n// const isArray = ArraySchema.is(type);\n// const isMap = !isArray && MapSchema.is(type);\n\n// // if (options && options.manual) {\n// // // do not declare getter/setter descriptor\n// // definition.descriptors[field] = {\n// // enumerable: true,\n// // configurable: true,\n// // writable: true,\n// // };\n// // return;\n// // }\n\n// return {\n// init(value) {\n// // TODO: may need to convert ArraySchema/MapSchema here\n\n// // do not flag change if value is undefined.\n// if (value !== undefined) {\n// this[$changes].change(fieldIndex);\n\n// // automaticallty transform Array into ArraySchema\n// if (isArray) {\n// if (!(value instanceof ArraySchema)) {\n// value = new ArraySchema(...value);\n// }\n// value[$childType] = Object.values(type)[0];\n// }\n\n// // automaticallty transform Map into MapSchema\n// if (isMap) {\n// if (!(value instanceof MapSchema)) {\n// value = new MapSchema(value);\n// }\n// value[$childType] = Object.values(type)[0];\n// }\n\n// // try to turn provided structure into a Proxy\n// if (value['$proxy'] === undefined) {\n// if (isMap) {\n// value = getMapProxy(value);\n// }\n// }\n\n// }\n\n// return value;\n// },\n\n// get() {\n// return get.call(this);\n// },\n\n// set(value: any) {\n// /**\n// * Create Proxy for array or map items\n// */\n\n// // skip if value is the same as cached.\n// if (value === get.call(this)) {\n// return;\n// }\n\n// if (\n// value !== undefined &&\n// value !== null\n// ) {\n// // automaticallty transform Array into ArraySchema\n// if (isArray) {\n// if (!(value instanceof ArraySchema)) {\n// value = new ArraySchema(...value);\n// }\n// value[$childType] = Object.values(type)[0];\n// }\n\n// // automaticallty transform Map into MapSchema\n// if (isMap) {\n// if (!(value instanceof MapSchema)) {\n// value = new MapSchema(value);\n// }\n// value[$childType] = Object.values(type)[0];\n// }\n\n// // try to turn provided structure into a Proxy\n// if (value['$proxy'] === undefined) {\n// if (isMap) {\n// value = getMapProxy(value);\n// }\n// }\n\n// // flag the change for encoding.\n// this[$changes].change(fieldIndex);\n\n// //\n// // call setParent() recursively for this and its child\n// // structures.\n// //\n// if (value[$changes]) {\n// value[$changes].setParent(\n// this,\n// this[$changes].root,\n// Metadata.getIndex(context.metadata, field),\n// );\n// }\n\n// } else if (get.call(this)) {\n// //\n// // Setting a field to `null` or `undefined` will delete it.\n// //\n// this[$changes].delete(field);\n// }\n\n// set.call(this, value);\n// },\n// };\n// }\n// }\n\nexport function view<T> (tag: number = DEFAULT_VIEW_TAG) {\n return function(target: T, fieldName: string) {\n const constructor = target.constructor as typeof Schema;\n\n const parentClass = Object.getPrototypeOf(constructor);\n const parentMetadata = parentClass[Symbol.metadata];\n\n // TODO: use Metadata.initialize()\n const metadata: Metadata = (constructor[Symbol.metadata] ??= Object.assign({}, constructor[Symbol.metadata], parentMetadata ?? Object.create(null)));\n // const fieldIndex = metadata[fieldName];\n\n // if (!metadata[fieldIndex]) {\n // //\n // // detect index for this field, considering inheritance\n // //\n // metadata[fieldIndex] = {\n // type: undefined,\n // index: (metadata[$numFields] // current structure already has fields defined\n // ?? (parentMetadata && parentMetadata[$numFields]) // parent structure has fields defined\n // ?? -1) + 1 // no fields defined\n // }\n // }\n\n Metadata.setTag(metadata, fieldName, tag);\n }\n}\n\nexport function unreliable<T> (target: T, field: string) {\n //\n // FIXME: the following block of code is repeated across `@type()`, `@deprecated()` and `@unreliable()` decorators.\n //\n const constructor = target.constructor as typeof Schema;\n\n const parentClass = Object.getPrototypeOf(constructor);\n const parentMetadata = parentClass[Symbol.metadata];\n\n // TODO: use Metadata.initialize()\n const metadata: Metadata = (constructor[Symbol.metadata] ??= Object.assign({}, constructor[Symbol.metadata], parentMetadata ?? Object.create(null)));\n\n // if (!metadata[field]) {\n // //\n // // detect index for this field, considering inheritance\n // //\n // metadata[field] = {\n // type: undefined,\n // index: (metadata[$numFields] // current structure already has fields defined\n // ?? (parentMetadata && parentMetadata[$numFields]) // parent structure has fields defined\n // ?? -1) + 1 // no fields defined\n // }\n // }\n\n // add owned flag to the field\n metadata[metadata[field]].unreliable = true;\n}\n\nexport function type (\n type: DefinitionType,\n options?: TypeOptions\n): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n const constructor = target.constructor as typeof Schema;\n\n if (!type) {\n throw new Error(`${constructor.name}: @type() reference provided for \"${field}\" is undefined. Make sure you don't have any circular dependencies.`);\n }\n\n // Normalize type (enum/collection/etc)\n type = getNormalizedType(type);\n\n // for inheritance support\n TypeContext.register(constructor);\n\n const parentClass = Object.getPrototypeOf(constructor);\n const parentMetadata = parentClass[Symbol.metadata];\n const metadata = Metadata.initialize(constructor);\n\n let fieldIndex: number = metadata[field];\n\n /**\n * skip if descriptor already exists for this field (`@deprecated()`)\n */\n if (metadata[fieldIndex] !== undefined) {\n if (metadata[fieldIndex].deprecated) {\n // do not create accessors for deprecated properties.\n return;\n\n } else if (metadata[fieldIndex].type !== undefined) {\n // trying to define same property multiple times across inheritance.\n // https://github.com/colyseus/colyseus-unity3d/issues/131#issuecomment-814308572\n try {\n throw new Error(`@colyseus/schema: Duplicate '${field}' definition on '${constructor.name}'.\\nCheck @type() annotation`);\n\n } catch (e) {\n const definitionAtLine = e.stack.split(\"\\n\")[4].trim();\n throw new Error(`${e.message} ${definitionAtLine}`);\n }\n }\n\n } else {\n //\n // detect index for this field, considering inheritance\n //\n fieldIndex = metadata[$numFields] // current structure already has fields defined\n ?? (parentMetadata && parentMetadata[$numFields]) // parent structure has fields defined\n ?? -1; // no fields defined\n fieldIndex++;\n }\n\n if (options && options.manual) {\n Metadata.addField(\n metadata,\n fieldIndex,\n field,\n type,\n {\n // do not declare getter/setter descriptor\n enumerable: true,\n configurable: true,\n writable: true,\n }\n );\n\n } else {\n const complexTypeKlass = typeof(Object.keys(type)[0]) === \"string\" && getType(Object.keys(type)[0]);\n\n const childType = (complexTypeKlass)\n ? Object.values(type)[0]\n : type;\n\n Metadata.addField(\n metadata,\n fieldIndex,\n field,\n type,\n getPropertyDescriptor(`_${field}`, fieldIndex, childType, complexTypeKlass)\n );\n }\n }\n}\n\nexport function getPropertyDescriptor(\n fieldCached: string,\n fieldIndex: number,\n type: DefinitionType,\n complexTypeKlass: TypeDefinition,\n) {\n return {\n get: function (this: Schema) { return this[fieldCached as keyof Schema]; },\n set: function (this: Schema, value: any) {\n const previousValue = this[fieldCached as keyof Schema] ?? undefined;\n\n // skip if value is the same as cached.\n if (value === previousValue) { return; }\n\n if (\n value !== undefined &&\n value !== null\n ) {\n if (complexTypeKlass) {\n // automaticallty transform Array into ArraySchema\n if (complexTypeKlass.constructor === ArraySchema && !(value instanceof ArraySchema)) {\n value = new ArraySchema(...value);\n }\n\n // automaticallty transform Map into MapSchema\n if (complexTypeKlass.constructor === MapSchema && !(value instanceof MapSchema)) {\n value = new MapSchema(value);\n }\n\n // // automaticallty transform Array into SetSchema\n // if (complexTypeKlass.constructor === SetSchema && !(value instanceof SetSchema)) {\n // value = new SetSchema(value);\n // }\n\n value[$childType] = type;\n\n } else if (typeof (type) !== \"string\") {\n assertInstanceType(value, type as typeof Schema, this, fieldCached.substring(1));\n\n } else {\n assertType(value, type, this, fieldCached.substring(1));\n }\n\n const changeTree = this[$changes];\n\n //\n // Replacing existing \"ref\", remove it from root.\n //\n if (previousValue !== undefined && previousValue[$changes]) {\n changeTree.root?.remove(previousValue[$changes]);\n (this.constructor as typeof Schema)[$track](changeTree, fieldIndex, OPERATION.DELETE_AND_ADD);\n\n } else {\n (this.constructor as typeof Schema)[$track](changeTree, fieldIndex, OPERATION.ADD);\n }\n\n //\n // call setParent() recursively for this and its child\n // structures.\n //\n value[$changes]?.setParent(this, changeTree.root, fieldIndex);\n\n } else if (previousValue !== undefined) {\n //\n // Setting a field to `null` or `undefined` will delete it.\n //\n this[$changes].delete(fieldIndex);\n }\n\n this[fieldCached as keyof Schema] = value;\n },\n\n enumerable: true,\n configurable: true\n };\n}\n\n/**\n * `@deprecated()` flag a field as deprecated.\n * The previous `@type()` annotation should remain along with this one.\n */\n\nexport function deprecated(throws: boolean = true): PropertyDecorator {\n return function (klass: typeof Schema, field: string) {\n //\n // FIXME: the following block of code is repeated across `@type()`, `@deprecated()` and `@unreliable()` decorators.\n //\n const constructor = klass.constructor as typeof Schema;\n\n const parentClass = Object.getPrototypeOf(constructor);\n const parentMetadata = parentClass[Symbol.metadata];\n const metadata: Metadata = (constructor[Symbol.metadata] ??= Object.assign({}, constructor[Symbol.metadata], parentMetadata ?? Object.create(null)));\n const fieldIndex = metadata[field];\n\n // if (!metadata[field]) {\n // //\n // // detect index for this field, considering inheritance\n // //\n // metadata[field] = {\n // type: undefined,\n // index: (metadata[$numFields] // current structure already has fields defined\n // ?? (parentMetadata && parentMetadata[$numFields]) // parent structure has fields defined\n // ?? -1) + 1 // no fields defined\n // }\n // }\n\n metadata[fieldIndex].deprecated = true;\n\n if (throws) {\n metadata[$descriptors] ??= {};\n metadata[$descriptors][field] = {\n get: function () { throw new Error(`${field} is deprecated.`); },\n set: function (this: Schema, value: any) { /* throw new Error(`${field} is deprecated.`); */ },\n enumerable: false,\n configurable: true\n };\n }\n\n // flag metadata[field] as non-enumerable\n Object.defineProperty(metadata, fieldIndex, {\n value: metadata[fieldIndex],\n enumerable: false,\n configurable: true\n });\n }\n}\n\nexport function defineTypes(\n target: typeof Schema,\n fields: Definition,\n options?: TypeOptions\n) {\n for (let field in fields) {\n type(fields[field], options)(target.prototype, field);\n }\n return target;\n}\n\n// Helper type to extract InitProps from initialize method\n// Supports both single object parameter and multiple parameters\n// If no initialize method is specified, use AssignableProps for field initialization\ntype ExtractInitProps<T> = T extends { initialize: (...args: infer P) => void }\n ? P extends readonly []\n ? never\n : P extends readonly [infer First]\n ? First extends object\n ? First\n : P\n : P\n : T extends Definition\n ? AssignableProps<InferSchemaInstanceType<T>>\n : never;\n\n// Helper type to determine if InitProps should be required\ntype IsInitPropsRequired<T> = T extends { initialize: (props: any) => void }\n ? true\n : T extends { initialize: (...args: infer P) => void }\n ? P extends readonly []\n ? false\n : true\n : false;\n\nexport interface SchemaWithExtends<T extends Definition, P extends typeof Schema, > {\n extends: <T2 extends Definition = Definition>(\n fields: T2 & ThisType<InferSchemaInstanceType<T & T2>>,\n name?: string\n ) => SchemaWithExtendsConstructor<T & T2, ExtractInitProps<T2>, P>;\n}\n\n/**\n * Get the type of the schema defined via `schema({...})` method.\n *\n * @example\n * const Entity = schema({\n * x: \"number\",\n * y: \"number\",\n * });\n * type Entity = SchemaType<typeof Entity>;\n */\nexport type SchemaType<T extends {'~type': any}> = T['~type'];\n\nexport interface SchemaWithExtendsConstructor<\n T extends Definition,\n InitProps,\n P extends typeof Schema\n> extends SchemaWithExtends<T, P> {\n '~type': InferSchemaInstanceType<T>;\n new (...args: [InitProps] extends [never] ? [] : InitProps extends readonly any[] ? InitProps : IsInitPropsRequired<T> extends true ? [InitProps] : [InitProps?]): InferSchemaInstanceType<T> & InstanceType<P>;\n prototype: InferSchemaInstanceType<T> & InstanceType<P> & {\n initialize(...args: [InitProps] extends [never] ? [] : InitProps extends readonly any[] ? InitProps : [InitProps]): void;\n };\n}\n\nexport function schema<\n T extends Record<string, DefinitionType>,\n P extends typeof Schema = typeof Schema\n>(\n fieldsAndMethods: T & ThisType<InferSchemaInstanceType<T>>,\n name?: string,\n inherits: P = Schema as P\n): SchemaWithExtendsConstructor<T, ExtractInitProps<T>, P> {\n const fields: any = {};\n const methods: any = {};\n\n const defaultValues: any = {};\n const viewTagFields: any = {};\n\n for (let fieldName in fieldsAndMethods) {\n const value: any = fieldsAndMethods[fieldName] as DefinitionType;\n if (typeof (value) === \"object\") {\n if (value['view'] !== undefined) {\n viewTagFields[fieldName] = (typeof (value['view']) === \"boolean\")\n ? DEFAULT_VIEW_TAG\n : value['view'];\n }\n\n // allow to define a field as not synced\n if (value['sync'] !== false) {\n fields[fieldName] = getNormalizedType(value);\n }\n\n // If no explicit default provided, handle automatic instantiation for collection types\n if (!Object.prototype.hasOwnProperty.call(value, 'default')) {\n // TODO: remove Array.isArray() check. Use ['array'] !== undefined only.\n if (Array.isArray(value) || value['array'] !== undefined) {\n // Collection: Array → new ArraySchema()\n defaultValues[fieldName] = new ArraySchema();\n\n } else if (value['map'] !== undefined) {\n // Collection: Map → new MapSchema()\n defaultValues[fieldName] = new MapSchema();\n\n } else if (value['collection'] !== undefined) {\n // Collection: Collection → new CollectionSchema()\n defaultValues[fieldName] = new CollectionSchema();\n\n } else if (value['set'] !== undefined) {\n // Collection: Set → new SetSchema()\n defaultValues[fieldName] = new SetSchema();\n\n } else if (value['type'] !== undefined && Schema.is(value['type'])) {\n // Direct Schema type: Type → new Type()\n defaultValues[fieldName] = new value['type']();\n }\n } else {\n defaultValues[fieldName] = value['default'];\n }\n\n\n } else if (typeof (value) === \"function\") {\n if (Schema.is(value)) {\n // Direct Schema type: Type → new Type()\n defaultValues[fieldName] = new value();\n fields[fieldName] = getNormalizedType(value);\n } else {\n methods[fieldName] = value;\n }\n\n } else {\n fields[fieldName] = getNormalizedType(value);\n }\n }\n\n const getDefaultValues = () => {\n const defaults: any = {};\n\n // use current class default values\n for (const fieldName in defaultValues) {\n const defaultValue = defaultValues[fieldName];\n if (defaultValue && typeof defaultValue.clone === 'function') {\n // complex, cloneable values, e.g. Schema, ArraySchema, MapSchema, CollectionSchema, SetSchema\n defaults[fieldName] = defaultValue.clone();\n } else {\n // primitives and non-cloneable values\n defaults[fieldName] = defaultValue;\n }\n }\n return defaults;\n };\n\n /** @codegen-ignore */\n const klass = Metadata.setFields<any>(class extends (inherits as any) {\n constructor(...args: any[]) {\n super(Object.assign({}, getDefaultValues(), args[0] || {}));\n\n // call initialize method\n if (methods.initialize && typeof methods.initialize === 'function') {\n methods.initialize.apply(this, args);\n }\n }\n }, fields) as SchemaWithExtendsConstructor<T, ExtractInitProps<T>, P>;\n\n // Store the getDefaultValues function on the class for inheritance\n (klass as any)._getDefaultValues = getDefaultValues;\n\n // Add methods to the prototype\n Object.assign(klass.prototype, methods);\n\n for (let fieldName in viewTagFields) {\n view(viewTagFields[fieldName])(klass.prototype, fieldName);\n }\n\n if (name) {\n Object.defineProperty(klass, \"name\", { value: name });\n }\n\n klass.extends = <T2 extends Definition = Definition>(fields: T2, name?: string) =>\n schema<T2>(fields, name, klass as any) as SchemaWithExtendsConstructor<T & T2, ExtractInitProps<T2>, P>;\n\n return klass;\n}\n"]}
|
package/lib/bench_encode.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/lib/bench_encode.js
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
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 { nanoid } from "nanoid";
|
|
8
|
-
import { Schema, type, MapSchema, ArraySchema, Encoder } from ".";
|
|
9
|
-
import * as benchmark from "benchmark";
|
|
10
|
-
const suite = new benchmark.Suite();
|
|
11
|
-
class AttributeNew extends Schema {
|
|
12
|
-
}
|
|
13
|
-
__decorate([
|
|
14
|
-
type("string")
|
|
15
|
-
], AttributeNew.prototype, "name", void 0);
|
|
16
|
-
__decorate([
|
|
17
|
-
type("number")
|
|
18
|
-
], AttributeNew.prototype, "value", void 0);
|
|
19
|
-
class ItemNew extends Schema {
|
|
20
|
-
constructor() {
|
|
21
|
-
super(...arguments);
|
|
22
|
-
this.attributes = new ArraySchema();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
__decorate([
|
|
26
|
-
type("number")
|
|
27
|
-
], ItemNew.prototype, "price", void 0);
|
|
28
|
-
__decorate([
|
|
29
|
-
type([AttributeNew])
|
|
30
|
-
], ItemNew.prototype, "attributes", void 0);
|
|
31
|
-
class PositionNew extends Schema {
|
|
32
|
-
}
|
|
33
|
-
__decorate([
|
|
34
|
-
type("number")
|
|
35
|
-
], PositionNew.prototype, "x", void 0);
|
|
36
|
-
__decorate([
|
|
37
|
-
type("number")
|
|
38
|
-
], PositionNew.prototype, "y", void 0);
|
|
39
|
-
class PlayerNew extends Schema {
|
|
40
|
-
constructor() {
|
|
41
|
-
super(...arguments);
|
|
42
|
-
this.position = new PositionNew();
|
|
43
|
-
this.items = new MapSchema();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
__decorate([
|
|
47
|
-
type(PositionNew)
|
|
48
|
-
], PlayerNew.prototype, "position", void 0);
|
|
49
|
-
__decorate([
|
|
50
|
-
type({ map: ItemNew })
|
|
51
|
-
], PlayerNew.prototype, "items", void 0);
|
|
52
|
-
class StateNew extends Schema {
|
|
53
|
-
constructor() {
|
|
54
|
-
super(...arguments);
|
|
55
|
-
this.players = new MapSchema();
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
__decorate([
|
|
59
|
-
type({ map: PlayerNew })
|
|
60
|
-
], StateNew.prototype, "players", void 0);
|
|
61
|
-
__decorate([
|
|
62
|
-
type("string")
|
|
63
|
-
], StateNew.prototype, "currentTurn", void 0);
|
|
64
|
-
const state = new StateNew();
|
|
65
|
-
for (let i = 0; i < 50; i++) {
|
|
66
|
-
const player = new PlayerNew();
|
|
67
|
-
state.players.set(`p-${nanoid()}`, player);
|
|
68
|
-
player.position.x = (i + 1) * 100;
|
|
69
|
-
player.position.y = (i + 1) * 100;
|
|
70
|
-
for (let j = 0; j < 10; j++) {
|
|
71
|
-
const item = new ItemNew();
|
|
72
|
-
item.price = (i + 1) * 50;
|
|
73
|
-
for (let k = 0; k < 5; k++) {
|
|
74
|
-
const attr = new AttributeNew();
|
|
75
|
-
attr.name = `Attribute ${k}`;
|
|
76
|
-
attr.value = k;
|
|
77
|
-
item.attributes.push(attr);
|
|
78
|
-
}
|
|
79
|
-
player.items.set(`item-${j}`, item);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
Encoder.BUFFER_SIZE = 1024 * 128;
|
|
83
|
-
const encoder = new Encoder(state);
|
|
84
|
-
// measure time to .encodeAll()
|
|
85
|
-
const now = Date.now();
|
|
86
|
-
for (let i = 0; i < 1000; i++) {
|
|
87
|
-
encoder.encodeAll();
|
|
88
|
-
}
|
|
89
|
-
console.log(Date.now() - now);
|
|
90
|
-
console.log(Array.from(encoder.encodeAll()).join(","));
|
|
91
|
-
//# sourceMappingURL=bench_encode.js.map
|