@bikky/replication 1.0.1
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/Constants/Errors.d.ts +27 -0
- package/Constants/Errors.js +75 -0
- package/Constants/Logging.d.ts +17 -0
- package/Constants/Logging.js +97 -0
- package/Constants/ReplicableRegistry.d.ts +37 -0
- package/Constants/ReplicableRegistry.js +234 -0
- package/Constants/SerialisationTypes.d.ts +82 -0
- package/Constants/SerialisationTypes.js +160 -0
- package/Constants/SourceMaps.d.ts +10 -0
- package/Constants/SourceMaps.js +12 -0
- package/Constants/TraversalStep.d.ts +5 -0
- package/Constants/TraversalStep.js +2 -0
- package/Constants/Versions.d.ts +15 -0
- package/Constants/Versions.js +63 -0
- package/Expressions/Compiler/BuiltinGrammar.d.ts +234 -0
- package/Expressions/Compiler/BuiltinGrammar.js +446 -0
- package/Expressions/Compiler/ExpressionGrammar.d.ts +89 -0
- package/Expressions/Compiler/ExpressionGrammar.js +70 -0
- package/Expressions/Compiler/Parser.d.ts +56 -0
- package/Expressions/Compiler/Parser.js +314 -0
- package/Expressions/Compiler/Tokenizer.d.ts +52 -0
- package/Expressions/Compiler/Tokenizer.js +222 -0
- package/Expressions/Compiler/__tests__/Replicable.Expressions.Parser.test.d.ts +1 -0
- package/Expressions/Compiler/__tests__/Replicable.Expressions.Parser.test.js +516 -0
- package/Expressions/Compiler/__tests__/Replicable.Expressions.Tokenizer.test.d.ts +1 -0
- package/Expressions/Compiler/__tests__/Replicable.Expressions.Tokenizer.test.js +68 -0
- package/Expressions/CreateEvaluator.d.ts +4 -0
- package/Expressions/CreateEvaluator.js +85 -0
- package/Expressions/EvaluatorChain.d.ts +19 -0
- package/Expressions/EvaluatorChain.js +137 -0
- package/Expressions/EvaluatorSteps.d.ts +19 -0
- package/Expressions/EvaluatorSteps.js +12 -0
- package/Expressions/EvaluatorString.d.ts +21 -0
- package/Expressions/EvaluatorString.js +26 -0
- package/Expressions/Expression.d.ts +36 -0
- package/Expressions/Expression.js +147 -0
- package/Expressions/Traverser.d.ts +28 -0
- package/Expressions/Traverser.js +348 -0
- package/Expressions/TypeRegistry/Accessors.d.ts +26 -0
- package/Expressions/TypeRegistry/Accessors.js +58 -0
- package/Expressions/TypeRegistry/ChainCollections.d.ts +51 -0
- package/Expressions/TypeRegistry/ChainCollections.js +134 -0
- package/Expressions/TypeRegistry/ChainTypes.d.ts +23 -0
- package/Expressions/TypeRegistry/ChainTypes.js +46 -0
- package/Expressions/TypeRegistry/CustomAPI.d.ts +36 -0
- package/Expressions/TypeRegistry/CustomAPI.js +181 -0
- package/Expressions/TypeRegistry/Primitive.d.ts +19 -0
- package/Expressions/TypeRegistry/Primitive.js +47 -0
- package/Expressions/TypeRegistry/Registry.d.ts +27 -0
- package/Expressions/TypeRegistry/Registry.js +270 -0
- package/Expressions/TypeRegistry/ReplAPI.d.ts +41 -0
- package/Expressions/TypeRegistry/ReplAPI.js +220 -0
- package/Expressions/TypeRegistry/Scope.d.ts +24 -0
- package/Expressions/TypeRegistry/Scope.js +44 -0
- package/Expressions/TypeRegistry/Types.d.ts +23 -0
- package/Expressions/TypeRegistry/Types.js +1 -0
- package/Expressions/TypeRegistry/__tests__/Replicable.Expressions.Accessors.test.d.ts +1 -0
- package/Expressions/TypeRegistry/__tests__/Replicable.Expressions.Accessors.test.js +31 -0
- package/Expressions/__tests__/ExpressionExamples.d.ts +28 -0
- package/Expressions/__tests__/ExpressionExamples.js +50 -0
- package/Expressions/__tests__/Replicable.Expressions.Expressions.test.d.ts +1 -0
- package/Expressions/__tests__/Replicable.Expressions.Expressions.test.js +166 -0
- package/IDPool.d.ts +18 -0
- package/IDPool.data.d.ts +17 -0
- package/IDPool.js +139 -0
- package/License.txt +1 -0
- package/Main.d.ts +13 -0
- package/Main.js +13 -0
- package/Networking.d.ts +60 -0
- package/Networking.js +626 -0
- package/Replicatable.d.ts +66 -0
- package/Replicatable.js +123 -0
- package/Tracking/Buffable.d.ts +68 -0
- package/Tracking/Buffable.js +194 -0
- package/Tracking/Class.d.ts +97 -0
- package/Tracking/Class.js +221 -0
- package/Tracking/Functions.d.ts +14 -0
- package/Tracking/Functions.js +27 -0
- package/Tracking/GlobalGroup.d.ts +5 -0
- package/Tracking/GlobalGroup.js +39 -0
- package/Tracking/Property.d.ts +95 -0
- package/Tracking/Property.js +125 -0
- package/Tracking/Types.d.ts +33 -0
- package/Tracking/Types.js +1 -0
- package/Tracking/__tests__/Replicable.Tracking.Decorator.test.d.ts +1 -0
- package/Tracking/__tests__/Replicable.Tracking.Decorator.test.js +151 -0
- package/Tracking/__tests__/Replicable.Tracking.Deserialisation.test.d.ts +1 -0
- package/Tracking/__tests__/Replicable.Tracking.Deserialisation.test.js +253 -0
- package/Tracking/__tests__/Replicable.Tracking.MixinSchemaGeneration.test.d.ts +1 -0
- package/Tracking/__tests__/Replicable.Tracking.MixinSchemaGeneration.test.js +135 -0
- package/Tracking/__tests__/Replicable.Tracking.Struct.test.d.ts +1 -0
- package/Tracking/__tests__/Replicable.Tracking.Struct.test.js +66 -0
- package/Tracking/__tests__/Replicable.Tracking.Type.test.d.ts +1 -0
- package/Tracking/__tests__/Replicable.Tracking.Type.test.js +67 -0
- package/Transformers/Configurer.d.ts +39 -0
- package/Transformers/Configurer.js +415 -0
- package/Transformers/Constructor.d.ts +12 -0
- package/Transformers/Constructor.js +44 -0
- package/Transformers/Definitions.d.ts +102 -0
- package/Transformers/Definitions.js +626 -0
- package/Transformers/Loader.d.ts +45 -0
- package/Transformers/Loader.js +350 -0
- package/Transformers/Progress.d.ts +32 -0
- package/Transformers/Progress.js +429 -0
- package/Transformers/Reference.d.ts +37 -0
- package/Transformers/Reference.js +212 -0
- package/Transformers/SchemaGenerator.d.ts +102 -0
- package/Transformers/SchemaGenerator.js +564 -0
- package/Transformers/Serialiser.d.ts +31 -0
- package/Transformers/Serialiser.js +366 -0
- package/Transformers/Utils.d.ts +33 -0
- package/Transformers/Utils.js +287 -0
- package/Transformers/__tests__/Examples.d.ts +168 -0
- package/Transformers/__tests__/Examples.js +263 -0
- package/Transformers/__tests__/Replicable.Transformers.Definitions.test.d.ts +1 -0
- package/Transformers/__tests__/Replicable.Transformers.Definitions.test.js +457 -0
- package/Transformers/__tests__/Replicable.Transformers.Loader.test.d.ts +1 -0
- package/Transformers/__tests__/Replicable.Transformers.Loader.test.js +339 -0
- package/Transformers/__tests__/Replicable.Transformers.Progress.test.d.ts +1 -0
- package/Transformers/__tests__/Replicable.Transformers.Progress.test.js +256 -0
- package/Transformers/__tests__/Replicable.Transformers.Reference.test.d.ts +1 -0
- package/Transformers/__tests__/Replicable.Transformers.Reference.test.js +167 -0
- package/Transformers/__tests__/Replicable.Transformers.SchemaGenerator.test.d.ts +1 -0
- package/Transformers/__tests__/Replicable.Transformers.SchemaGenerator.test.js +400 -0
- package/Transformers/__tests__/Replicable.Transformers.SchemaGeneratorOutput.test.d.ts +1 -0
- package/Transformers/__tests__/Replicable.Transformers.SchemaGeneratorOutput.test.js +441 -0
- package/Transformers/__tests__/Replicable.Transformers.Serialiser.test.d.ts +1 -0
- package/Transformers/__tests__/Replicable.Transformers.Serialiser.test.js +320 -0
- package/Transformers/__tests__/Replicable.Transformers.Utils.test.d.ts +1 -0
- package/Transformers/__tests__/Replicable.Transformers.Utils.test.js +534 -0
- package/__tests__/Replicable.Expressions.test.d.ts +1 -0
- package/__tests__/Replicable.Expressions.test.js +166 -0
- package/__tests__/Replicable.IDPool.test.d.ts +1 -0
- package/__tests__/Replicable.IDPool.test.js +11 -0
- package/__tests__/Replicable.ReplicableRegistry.test.d.ts +1 -0
- package/__tests__/Replicable.ReplicableRegistry.test.js +154 -0
- package/__tests__/Replicable.Serialisation.test.d.ts +1 -0
- package/__tests__/Replicable.Serialisation.test.js +283 -0
- package/package.json +14 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { describeObject, getPrimitiveClass, isPrimitiveType, isPrimitiveValue, PropertyTypes, TypeSymbol } from "../Constants/SerialisationTypes.js";
|
|
2
|
+
import { Pointer } from "./Reference.js";
|
|
3
|
+
import { ReplicableRegistry } from "../Constants/ReplicableRegistry.js";
|
|
4
|
+
import { Expression } from "../Expressions/Expression.js";
|
|
5
|
+
import { EvaluationChain } from "../Expressions/EvaluatorChain.js";
|
|
6
|
+
import { EvaluationString } from "../Expressions/EvaluatorString.js";
|
|
7
|
+
import { MinVersion } from "../Constants/Versions.js";
|
|
8
|
+
export var Utils;
|
|
9
|
+
(function (Utils) {
|
|
10
|
+
// export interface PropertyDecoratorExtendedInfo {
|
|
11
|
+
// type: ReplicableClass | Primitive;
|
|
12
|
+
// modifier: "Class" | "Definition" | "Serialised" | "Reference";
|
|
13
|
+
// category: PropertyTypes;
|
|
14
|
+
// restrictedTo?: (string | number)[];
|
|
15
|
+
// keyType?: (typeof String | typeof Number | typeof Expression)[];
|
|
16
|
+
// propertyName: string;
|
|
17
|
+
// ownerName: string;
|
|
18
|
+
// load: boolean | string;
|
|
19
|
+
// }
|
|
20
|
+
//
|
|
21
|
+
// export interface PropertyDecoratorExtendedInfoData extends Omit<PropertyDecoratorExtendedInfo, "type"> {
|
|
22
|
+
// type: ReplicableClass | Primitive | string;
|
|
23
|
+
// }
|
|
24
|
+
let PrintUtils;
|
|
25
|
+
(function (PrintUtils) {
|
|
26
|
+
/**
|
|
27
|
+
* Turns a given config into a modifier string ignoring the types, for easier comparison and error reporting.
|
|
28
|
+
* @param config The configuration to get the visual aid for.
|
|
29
|
+
* @private
|
|
30
|
+
*/
|
|
31
|
+
function ConfigVisualModifierAid(config) {
|
|
32
|
+
if (config.outputArray == 2)
|
|
33
|
+
return "1[][]";
|
|
34
|
+
if (config.outputArray == 1)
|
|
35
|
+
return "1[]";
|
|
36
|
+
if (config.outputMap)
|
|
37
|
+
return "Map<string, 1>";
|
|
38
|
+
if (config.outputDict)
|
|
39
|
+
return "{[key: string]: 1 }";
|
|
40
|
+
return "1";
|
|
41
|
+
}
|
|
42
|
+
PrintUtils.ConfigVisualModifierAid = ConfigVisualModifierAid;
|
|
43
|
+
function DefVisualModifierAid(def) {
|
|
44
|
+
let dictKey = ("dictKey" in def && def.dictKey) || def.type.map((e) => "dictKey" in e && e.dictKey).reduce((a, b) => a || b) || undefined;
|
|
45
|
+
let mapKey = ("mapKey" in def && def.mapKey) || def.type.map((e) => "mapKey" in e && e.mapKey).reduce((a, b) => a || b) || undefined;
|
|
46
|
+
let array = ("array" in def && def.array) || def.type.map((e) => "array" in e && e.array).reduce((a, b) => a || b) || undefined;
|
|
47
|
+
if (dictKey) {
|
|
48
|
+
return "{[key: string]: 1 }";
|
|
49
|
+
}
|
|
50
|
+
else if (mapKey) {
|
|
51
|
+
return "Map<string, 1>";
|
|
52
|
+
}
|
|
53
|
+
else if (array == 2) {
|
|
54
|
+
return "1[][]";
|
|
55
|
+
}
|
|
56
|
+
else if (array == 1 || array == true) {
|
|
57
|
+
return "1[]";
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
return "1";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
PrintUtils.DefVisualModifierAid = DefVisualModifierAid;
|
|
64
|
+
function CategoryVisualModifierAid(category) {
|
|
65
|
+
let result = "";
|
|
66
|
+
if (PropertyTypes.isType(category, PropertyTypes.Solo))
|
|
67
|
+
result += " 1";
|
|
68
|
+
if (PropertyTypes.isType(category, PropertyTypes.Array2))
|
|
69
|
+
result += " 1[][]";
|
|
70
|
+
if (PropertyTypes.isType(category, PropertyTypes.Array))
|
|
71
|
+
result += " 1[]";
|
|
72
|
+
if (PropertyTypes.isType(category, PropertyTypes.Map))
|
|
73
|
+
result += " Map<string, 1>";
|
|
74
|
+
if (PropertyTypes.isType(category, PropertyTypes.Dictionary))
|
|
75
|
+
result += " {[key: string]: 1 }";
|
|
76
|
+
result = result.slice(1);
|
|
77
|
+
result.replace(/ /g, " | ");
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
PrintUtils.CategoryVisualModifierAid = CategoryVisualModifierAid;
|
|
81
|
+
function ReplPrimOrRawToName(val) {
|
|
82
|
+
if (isPrimitiveType(val)) {
|
|
83
|
+
return describeObject(val);
|
|
84
|
+
}
|
|
85
|
+
if (isPrimitiveValue(val)) {
|
|
86
|
+
return describeObject(getPrimitiveClass(val));
|
|
87
|
+
}
|
|
88
|
+
if ("opts" in val && "typescriptTypeName" in val.opts) {
|
|
89
|
+
return val.opts.typescriptTypeName;
|
|
90
|
+
}
|
|
91
|
+
return describeObject(val);
|
|
92
|
+
}
|
|
93
|
+
PrintUtils.ReplPrimOrRawToName = ReplPrimOrRawToName;
|
|
94
|
+
function ValVisualAidBestGuess(val) {
|
|
95
|
+
let typesString = [];
|
|
96
|
+
let modString = "";
|
|
97
|
+
let gatherTypes = (e) => {
|
|
98
|
+
let newTypeName = ReplPrimOrRawToName(e);
|
|
99
|
+
if (!typesString.includes(newTypeName)) {
|
|
100
|
+
typesString.push(newTypeName);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
if (Array.isArray(val)) {
|
|
104
|
+
if (val.every((e) => Array.isArray(e))) {
|
|
105
|
+
val.forEach((e) => e.forEach(gatherTypes));
|
|
106
|
+
modString = "1[][]";
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
val.forEach(gatherTypes);
|
|
110
|
+
modString = "1[]";
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else if (val !== null && typeof val === "object" && val.__proto__ === Object.prototype && !("Class" in val)) {
|
|
114
|
+
modString = "{[key: string]: 1 }";
|
|
115
|
+
Object.values(val).forEach(gatherTypes);
|
|
116
|
+
}
|
|
117
|
+
else if (val instanceof Map) {
|
|
118
|
+
modString = "Map<string, 1>";
|
|
119
|
+
Array.from(val.values()).forEach(gatherTypes);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
gatherTypes(val);
|
|
123
|
+
modString = "1";
|
|
124
|
+
}
|
|
125
|
+
if (typesString.length == 1) {
|
|
126
|
+
return modString.replace("1", typesString.join(" | "));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
return modString.replace("1", "(" + typesString.join(" | ") + ")");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
PrintUtils.ValVisualAidBestGuess = ValVisualAidBestGuess;
|
|
133
|
+
})(PrintUtils = Utils.PrintUtils || (Utils.PrintUtils = {}));
|
|
134
|
+
let ExpressionUtils;
|
|
135
|
+
(function (ExpressionUtils) {
|
|
136
|
+
function MakePropExpressionConfig(version, def, startType) {
|
|
137
|
+
if (def.expression === false)
|
|
138
|
+
return;
|
|
139
|
+
let exprArray = def.type.flatMap((e) => "array" in e && e.array).reduce((a, b) => {
|
|
140
|
+
if (a !== b) {
|
|
141
|
+
throw new Error(`Error, ${def.property} has inconsistent type categories `
|
|
142
|
+
+ `(array & not array, etc).\nExpressions don't support this currently.`);
|
|
143
|
+
}
|
|
144
|
+
return a;
|
|
145
|
+
});
|
|
146
|
+
//TODO: Do we care if the key types don't match? It will work fine at runtime.
|
|
147
|
+
let exprMap = def.type.flatMap((e) => "mapKey" in e).reduce((a, b) => {
|
|
148
|
+
if (a !== b) {
|
|
149
|
+
throw new Error(`Error, ${def.property} has inconsistent type categories `
|
|
150
|
+
+ `(map & not map, etc).\nExpressions don't support this currently.`);
|
|
151
|
+
}
|
|
152
|
+
return a;
|
|
153
|
+
});
|
|
154
|
+
//TODO: Do we care if the key types don't match? It will work fine at runtime.
|
|
155
|
+
let exprDict = def.type.flatMap((e) => "dictKey" in e).reduce((a, b) => {
|
|
156
|
+
if (a !== b) {
|
|
157
|
+
throw new Error(`Error, ${def.property} has inconsistent type categories `
|
|
158
|
+
+ `(dict & not dict, etc).\nExpressions don't support this currently.`);
|
|
159
|
+
}
|
|
160
|
+
return a;
|
|
161
|
+
});
|
|
162
|
+
return {
|
|
163
|
+
version: MinVersion(version, def.version),
|
|
164
|
+
cacheable: false,
|
|
165
|
+
outputTypes: def.type.flatMap((e) => e.type),
|
|
166
|
+
//TODO: Probably should have a way to override this *shrug*
|
|
167
|
+
startType: startType !== null && startType !== void 0 ? startType : Expression.getLatestSetScope(),
|
|
168
|
+
outputMap: exprMap,
|
|
169
|
+
outputDict: exprDict,
|
|
170
|
+
duringLoad: false,
|
|
171
|
+
outputArray: exprArray == 2 ? 2 : exprArray ? 1 : 0
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
ExpressionUtils.MakePropExpressionConfig = MakePropExpressionConfig;
|
|
175
|
+
function DoesExpressionMatchPropType(expr, propType) {
|
|
176
|
+
if (expr instanceof Expression) {
|
|
177
|
+
expr = expr.expression;
|
|
178
|
+
}
|
|
179
|
+
let outputTypes = propType.expressionForProperty[expr.config.version].outputTypes;
|
|
180
|
+
if (expr instanceof EvaluationString) {
|
|
181
|
+
return outputTypes.some((e) => e == String);
|
|
182
|
+
}
|
|
183
|
+
//Every type output by the expression must match at least one of the types in the property.
|
|
184
|
+
return expr.outputTypes.every((type) => {
|
|
185
|
+
return outputTypes.some((e) => e == type);
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
ExpressionUtils.DoesExpressionMatchPropType = DoesExpressionMatchPropType;
|
|
189
|
+
})(ExpressionUtils = Utils.ExpressionUtils || (Utils.ExpressionUtils = {}));
|
|
190
|
+
let CompareUtils;
|
|
191
|
+
(function (CompareUtils) {
|
|
192
|
+
function CompareValWithSerialisedVal(val, serialised, debuginfo) {
|
|
193
|
+
if (Array.isArray(val)) {
|
|
194
|
+
if (!Array.isArray(serialised))
|
|
195
|
+
return false;
|
|
196
|
+
if (val.length !== serialised.length)
|
|
197
|
+
return false;
|
|
198
|
+
for (let i = 0; i < val.length; i++) {
|
|
199
|
+
if (!(i in serialised))
|
|
200
|
+
return false;
|
|
201
|
+
if (!CompareValWithSerialisedVal(val[i], serialised[i][1], `${debuginfo}[${i}]`))
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
if (val instanceof Map) {
|
|
207
|
+
for (let [name, value] of val.entries()) {
|
|
208
|
+
if (!(name in serialised))
|
|
209
|
+
return false;
|
|
210
|
+
if (!CompareValWithSerialisedVal(value, serialised[name][1], `${debuginfo}.${name}`))
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
if (isPrimitiveValue(val)) {
|
|
216
|
+
return val === serialised;
|
|
217
|
+
}
|
|
218
|
+
//TODO: Should we test expression properly? We're assuming the rawText never gets replicated.
|
|
219
|
+
if (val instanceof Expression || val instanceof EvaluationChain || val instanceof EvaluationString) {
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
if (val instanceof Pointer) {
|
|
223
|
+
return JSON.stringify(val.ref) === JSON.stringify(serialised);
|
|
224
|
+
}
|
|
225
|
+
if (val instanceof Object) {
|
|
226
|
+
for (let [name, value] of Object.entries(val)) {
|
|
227
|
+
if (!(name in serialised))
|
|
228
|
+
return false;
|
|
229
|
+
if (!CompareValWithSerialisedVal(value, serialised[name][1], `${debuginfo}.${name}`))
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
return CompareRepl(val[TypeSymbol], val, serialised);
|
|
235
|
+
}
|
|
236
|
+
CompareUtils.CompareValWithSerialisedVal = CompareValWithSerialisedVal;
|
|
237
|
+
function CompareRepl(type, object, serialised) {
|
|
238
|
+
let props = type.finalised_properties.get(type.opts.version);
|
|
239
|
+
for (let [name, def] of Object.entries(props)) {
|
|
240
|
+
if ("removed" in def || "doesntExist" in def)
|
|
241
|
+
continue;
|
|
242
|
+
if (def.serialisation.present != true)
|
|
243
|
+
continue;
|
|
244
|
+
if (def.serialisation.inline && object[name] instanceof Pointer) {
|
|
245
|
+
let subType = object[name].val[TypeSymbol];
|
|
246
|
+
if (!CompareRepl(subType, object[name].val, serialised[name][1])) {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
else if (object[name] instanceof Pointer) {
|
|
251
|
+
if (!CompareValWithSerialisedVal(object[name], serialised[name], `${describeObject(object)}.${name}`)) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else if (!CompareValWithSerialisedVal(object[name], serialised[name][1], `${describeObject(object)}.${name}`)) {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
CompareUtils.CompareRepl = CompareRepl;
|
|
262
|
+
function Compare(a, b) {
|
|
263
|
+
let sTypeDef = ReplicableRegistry.__GetReplicableForDataName(b[0]);
|
|
264
|
+
let typeDef = a[TypeSymbol];
|
|
265
|
+
if (sTypeDef != typeDef) {
|
|
266
|
+
//Items are of different types, so inherently fails.
|
|
267
|
+
return false;
|
|
268
|
+
}
|
|
269
|
+
return CompareRepl(typeDef, a, b[1]);
|
|
270
|
+
}
|
|
271
|
+
CompareUtils.Compare = Compare;
|
|
272
|
+
function CompareReferences(a, b) {
|
|
273
|
+
if (!Array.isArray(a))
|
|
274
|
+
return a === b;
|
|
275
|
+
if (!Array.isArray(b))
|
|
276
|
+
return false;
|
|
277
|
+
if (a.length !== b.length)
|
|
278
|
+
return false;
|
|
279
|
+
for (let i = 0; i < a.length; i++) {
|
|
280
|
+
if (a[i] !== b[i])
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
285
|
+
CompareUtils.CompareReferences = CompareReferences;
|
|
286
|
+
})(CompareUtils = Utils.CompareUtils || (Utils.CompareUtils = {}));
|
|
287
|
+
})(Utils || (Utils = {}));
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { Pointer } from "../Reference.js";
|
|
2
|
+
export declare namespace TestPropertyDecorators {
|
|
3
|
+
class TransformersTheLotClass {
|
|
4
|
+
val: string;
|
|
5
|
+
val2: number;
|
|
6
|
+
val3: Map<string, number>;
|
|
7
|
+
val4: {
|
|
8
|
+
[name: number]: string;
|
|
9
|
+
};
|
|
10
|
+
val5: string[];
|
|
11
|
+
val6: number[][];
|
|
12
|
+
val7: TransformersBasicStruct;
|
|
13
|
+
val8: string | number | null;
|
|
14
|
+
val9: Pointer<TransformersBasicClass>;
|
|
15
|
+
val10: Pointer<TransformersBasicClass>;
|
|
16
|
+
val11?: string;
|
|
17
|
+
val13: number[][];
|
|
18
|
+
val14: number;
|
|
19
|
+
}
|
|
20
|
+
namespace TransformersTheLotClass {
|
|
21
|
+
function MakeExampleObj(): TransformersTheLotClass;
|
|
22
|
+
}
|
|
23
|
+
class TransformersBasicStruct {
|
|
24
|
+
val: string;
|
|
25
|
+
}
|
|
26
|
+
class TransformersBasicClass {
|
|
27
|
+
val: string;
|
|
28
|
+
}
|
|
29
|
+
class TransformersBasicChild extends TestPropertyDecorators.TransformersTheLotClass {
|
|
30
|
+
valX: string;
|
|
31
|
+
}
|
|
32
|
+
class VariedSerialisationStruct {
|
|
33
|
+
ser: Pointer<TransformersBasicClass>;
|
|
34
|
+
ser2: Pointer<TransformersBasicClass>;
|
|
35
|
+
ser4: any;
|
|
36
|
+
ser5: any;
|
|
37
|
+
ser7: TransformersBasicStruct;
|
|
38
|
+
ser9: any;
|
|
39
|
+
ser10: any;
|
|
40
|
+
}
|
|
41
|
+
namespace VariedSerialisationStruct {
|
|
42
|
+
function MakeExampleObj(): VariedSerialisationStruct;
|
|
43
|
+
}
|
|
44
|
+
const TransformersTheLotData: {
|
|
45
|
+
Class: string;
|
|
46
|
+
Val: string;
|
|
47
|
+
Val2: number;
|
|
48
|
+
Val3: {
|
|
49
|
+
hello: number;
|
|
50
|
+
};
|
|
51
|
+
Val4: {
|
|
52
|
+
1: string;
|
|
53
|
+
};
|
|
54
|
+
Val5: string[];
|
|
55
|
+
Val6: number[][];
|
|
56
|
+
Val7: {
|
|
57
|
+
Class: string;
|
|
58
|
+
Val: string;
|
|
59
|
+
};
|
|
60
|
+
Val8: string;
|
|
61
|
+
Val9: {
|
|
62
|
+
Class: string;
|
|
63
|
+
Val: string;
|
|
64
|
+
};
|
|
65
|
+
Val10: {
|
|
66
|
+
Class: string;
|
|
67
|
+
Val: string;
|
|
68
|
+
};
|
|
69
|
+
Val11: string;
|
|
70
|
+
Val13: number[][];
|
|
71
|
+
};
|
|
72
|
+
const TransformersTheLotExpression: {
|
|
73
|
+
Class: string;
|
|
74
|
+
Val: string;
|
|
75
|
+
Val2: string;
|
|
76
|
+
Val3: string;
|
|
77
|
+
Val4: string;
|
|
78
|
+
Val5: string;
|
|
79
|
+
Val6: string;
|
|
80
|
+
Val7: string;
|
|
81
|
+
Val8: string;
|
|
82
|
+
Val9: string;
|
|
83
|
+
Val10: string;
|
|
84
|
+
Val11: string;
|
|
85
|
+
Val13: number[][];
|
|
86
|
+
};
|
|
87
|
+
const TransformersTheLotInnerExpression: {
|
|
88
|
+
Class: string;
|
|
89
|
+
Val: string;
|
|
90
|
+
Val2: string;
|
|
91
|
+
Val3: {
|
|
92
|
+
hello: string;
|
|
93
|
+
};
|
|
94
|
+
Val4: {
|
|
95
|
+
1: string;
|
|
96
|
+
};
|
|
97
|
+
Val5: string[];
|
|
98
|
+
Val6: string[][];
|
|
99
|
+
Val7: {
|
|
100
|
+
Class: string;
|
|
101
|
+
Val: string;
|
|
102
|
+
};
|
|
103
|
+
Val8: string;
|
|
104
|
+
Val9: {
|
|
105
|
+
Class: string;
|
|
106
|
+
Val: string;
|
|
107
|
+
};
|
|
108
|
+
Val10: {
|
|
109
|
+
Class: string;
|
|
110
|
+
Val: string;
|
|
111
|
+
};
|
|
112
|
+
Val11: string;
|
|
113
|
+
Val13: number[][];
|
|
114
|
+
};
|
|
115
|
+
const TransformersBasicChildData: {
|
|
116
|
+
Class: string;
|
|
117
|
+
ValX: string;
|
|
118
|
+
Val: string;
|
|
119
|
+
Val2: number;
|
|
120
|
+
Val3: {
|
|
121
|
+
hello: number;
|
|
122
|
+
};
|
|
123
|
+
Val4: {
|
|
124
|
+
1: string;
|
|
125
|
+
};
|
|
126
|
+
Val5: string[];
|
|
127
|
+
Val6: number[][];
|
|
128
|
+
Val7: {
|
|
129
|
+
Class: string;
|
|
130
|
+
Val: string;
|
|
131
|
+
};
|
|
132
|
+
Val8: string;
|
|
133
|
+
Val9: {
|
|
134
|
+
Class: string;
|
|
135
|
+
Val: string;
|
|
136
|
+
};
|
|
137
|
+
Val10: {
|
|
138
|
+
Class: string;
|
|
139
|
+
Val: string;
|
|
140
|
+
};
|
|
141
|
+
Val11: string;
|
|
142
|
+
Val13: number[][];
|
|
143
|
+
};
|
|
144
|
+
const InvalidTransformersTheLotData: {
|
|
145
|
+
Class: string;
|
|
146
|
+
Val2: string;
|
|
147
|
+
Val3: string;
|
|
148
|
+
Val4: number;
|
|
149
|
+
Val5: string[][];
|
|
150
|
+
Val6: number[];
|
|
151
|
+
Val7: {
|
|
152
|
+
Class: string;
|
|
153
|
+
Val: string;
|
|
154
|
+
};
|
|
155
|
+
Val8: number[][];
|
|
156
|
+
Val9: {
|
|
157
|
+
Class: string;
|
|
158
|
+
Val: number;
|
|
159
|
+
};
|
|
160
|
+
Val10: number[];
|
|
161
|
+
Val11: {
|
|
162
|
+
1: string;
|
|
163
|
+
};
|
|
164
|
+
Val12: number;
|
|
165
|
+
Val13: string;
|
|
166
|
+
Val14: string;
|
|
167
|
+
};
|
|
168
|
+
}
|