@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.
Files changed (140) hide show
  1. package/Constants/Errors.d.ts +27 -0
  2. package/Constants/Errors.js +75 -0
  3. package/Constants/Logging.d.ts +17 -0
  4. package/Constants/Logging.js +97 -0
  5. package/Constants/ReplicableRegistry.d.ts +37 -0
  6. package/Constants/ReplicableRegistry.js +234 -0
  7. package/Constants/SerialisationTypes.d.ts +82 -0
  8. package/Constants/SerialisationTypes.js +160 -0
  9. package/Constants/SourceMaps.d.ts +10 -0
  10. package/Constants/SourceMaps.js +12 -0
  11. package/Constants/TraversalStep.d.ts +5 -0
  12. package/Constants/TraversalStep.js +2 -0
  13. package/Constants/Versions.d.ts +15 -0
  14. package/Constants/Versions.js +63 -0
  15. package/Expressions/Compiler/BuiltinGrammar.d.ts +234 -0
  16. package/Expressions/Compiler/BuiltinGrammar.js +446 -0
  17. package/Expressions/Compiler/ExpressionGrammar.d.ts +89 -0
  18. package/Expressions/Compiler/ExpressionGrammar.js +70 -0
  19. package/Expressions/Compiler/Parser.d.ts +56 -0
  20. package/Expressions/Compiler/Parser.js +314 -0
  21. package/Expressions/Compiler/Tokenizer.d.ts +52 -0
  22. package/Expressions/Compiler/Tokenizer.js +222 -0
  23. package/Expressions/Compiler/__tests__/Replicable.Expressions.Parser.test.d.ts +1 -0
  24. package/Expressions/Compiler/__tests__/Replicable.Expressions.Parser.test.js +516 -0
  25. package/Expressions/Compiler/__tests__/Replicable.Expressions.Tokenizer.test.d.ts +1 -0
  26. package/Expressions/Compiler/__tests__/Replicable.Expressions.Tokenizer.test.js +68 -0
  27. package/Expressions/CreateEvaluator.d.ts +4 -0
  28. package/Expressions/CreateEvaluator.js +85 -0
  29. package/Expressions/EvaluatorChain.d.ts +19 -0
  30. package/Expressions/EvaluatorChain.js +137 -0
  31. package/Expressions/EvaluatorSteps.d.ts +19 -0
  32. package/Expressions/EvaluatorSteps.js +12 -0
  33. package/Expressions/EvaluatorString.d.ts +21 -0
  34. package/Expressions/EvaluatorString.js +26 -0
  35. package/Expressions/Expression.d.ts +36 -0
  36. package/Expressions/Expression.js +147 -0
  37. package/Expressions/Traverser.d.ts +28 -0
  38. package/Expressions/Traverser.js +348 -0
  39. package/Expressions/TypeRegistry/Accessors.d.ts +26 -0
  40. package/Expressions/TypeRegistry/Accessors.js +58 -0
  41. package/Expressions/TypeRegistry/ChainCollections.d.ts +51 -0
  42. package/Expressions/TypeRegistry/ChainCollections.js +134 -0
  43. package/Expressions/TypeRegistry/ChainTypes.d.ts +23 -0
  44. package/Expressions/TypeRegistry/ChainTypes.js +46 -0
  45. package/Expressions/TypeRegistry/CustomAPI.d.ts +36 -0
  46. package/Expressions/TypeRegistry/CustomAPI.js +181 -0
  47. package/Expressions/TypeRegistry/Primitive.d.ts +19 -0
  48. package/Expressions/TypeRegistry/Primitive.js +47 -0
  49. package/Expressions/TypeRegistry/Registry.d.ts +27 -0
  50. package/Expressions/TypeRegistry/Registry.js +270 -0
  51. package/Expressions/TypeRegistry/ReplAPI.d.ts +41 -0
  52. package/Expressions/TypeRegistry/ReplAPI.js +220 -0
  53. package/Expressions/TypeRegistry/Scope.d.ts +24 -0
  54. package/Expressions/TypeRegistry/Scope.js +44 -0
  55. package/Expressions/TypeRegistry/Types.d.ts +23 -0
  56. package/Expressions/TypeRegistry/Types.js +1 -0
  57. package/Expressions/TypeRegistry/__tests__/Replicable.Expressions.Accessors.test.d.ts +1 -0
  58. package/Expressions/TypeRegistry/__tests__/Replicable.Expressions.Accessors.test.js +31 -0
  59. package/Expressions/__tests__/ExpressionExamples.d.ts +28 -0
  60. package/Expressions/__tests__/ExpressionExamples.js +50 -0
  61. package/Expressions/__tests__/Replicable.Expressions.Expressions.test.d.ts +1 -0
  62. package/Expressions/__tests__/Replicable.Expressions.Expressions.test.js +166 -0
  63. package/IDPool.d.ts +18 -0
  64. package/IDPool.data.d.ts +17 -0
  65. package/IDPool.js +139 -0
  66. package/License.txt +1 -0
  67. package/Main.d.ts +13 -0
  68. package/Main.js +13 -0
  69. package/Networking.d.ts +60 -0
  70. package/Networking.js +626 -0
  71. package/Replicatable.d.ts +66 -0
  72. package/Replicatable.js +123 -0
  73. package/Tracking/Buffable.d.ts +68 -0
  74. package/Tracking/Buffable.js +194 -0
  75. package/Tracking/Class.d.ts +97 -0
  76. package/Tracking/Class.js +221 -0
  77. package/Tracking/Functions.d.ts +14 -0
  78. package/Tracking/Functions.js +27 -0
  79. package/Tracking/GlobalGroup.d.ts +5 -0
  80. package/Tracking/GlobalGroup.js +39 -0
  81. package/Tracking/Property.d.ts +95 -0
  82. package/Tracking/Property.js +125 -0
  83. package/Tracking/Types.d.ts +33 -0
  84. package/Tracking/Types.js +1 -0
  85. package/Tracking/__tests__/Replicable.Tracking.Decorator.test.d.ts +1 -0
  86. package/Tracking/__tests__/Replicable.Tracking.Decorator.test.js +151 -0
  87. package/Tracking/__tests__/Replicable.Tracking.Deserialisation.test.d.ts +1 -0
  88. package/Tracking/__tests__/Replicable.Tracking.Deserialisation.test.js +253 -0
  89. package/Tracking/__tests__/Replicable.Tracking.MixinSchemaGeneration.test.d.ts +1 -0
  90. package/Tracking/__tests__/Replicable.Tracking.MixinSchemaGeneration.test.js +135 -0
  91. package/Tracking/__tests__/Replicable.Tracking.Struct.test.d.ts +1 -0
  92. package/Tracking/__tests__/Replicable.Tracking.Struct.test.js +66 -0
  93. package/Tracking/__tests__/Replicable.Tracking.Type.test.d.ts +1 -0
  94. package/Tracking/__tests__/Replicable.Tracking.Type.test.js +67 -0
  95. package/Transformers/Configurer.d.ts +39 -0
  96. package/Transformers/Configurer.js +415 -0
  97. package/Transformers/Constructor.d.ts +12 -0
  98. package/Transformers/Constructor.js +44 -0
  99. package/Transformers/Definitions.d.ts +102 -0
  100. package/Transformers/Definitions.js +626 -0
  101. package/Transformers/Loader.d.ts +45 -0
  102. package/Transformers/Loader.js +350 -0
  103. package/Transformers/Progress.d.ts +32 -0
  104. package/Transformers/Progress.js +429 -0
  105. package/Transformers/Reference.d.ts +37 -0
  106. package/Transformers/Reference.js +212 -0
  107. package/Transformers/SchemaGenerator.d.ts +102 -0
  108. package/Transformers/SchemaGenerator.js +564 -0
  109. package/Transformers/Serialiser.d.ts +31 -0
  110. package/Transformers/Serialiser.js +366 -0
  111. package/Transformers/Utils.d.ts +33 -0
  112. package/Transformers/Utils.js +287 -0
  113. package/Transformers/__tests__/Examples.d.ts +168 -0
  114. package/Transformers/__tests__/Examples.js +263 -0
  115. package/Transformers/__tests__/Replicable.Transformers.Definitions.test.d.ts +1 -0
  116. package/Transformers/__tests__/Replicable.Transformers.Definitions.test.js +457 -0
  117. package/Transformers/__tests__/Replicable.Transformers.Loader.test.d.ts +1 -0
  118. package/Transformers/__tests__/Replicable.Transformers.Loader.test.js +339 -0
  119. package/Transformers/__tests__/Replicable.Transformers.Progress.test.d.ts +1 -0
  120. package/Transformers/__tests__/Replicable.Transformers.Progress.test.js +256 -0
  121. package/Transformers/__tests__/Replicable.Transformers.Reference.test.d.ts +1 -0
  122. package/Transformers/__tests__/Replicable.Transformers.Reference.test.js +167 -0
  123. package/Transformers/__tests__/Replicable.Transformers.SchemaGenerator.test.d.ts +1 -0
  124. package/Transformers/__tests__/Replicable.Transformers.SchemaGenerator.test.js +400 -0
  125. package/Transformers/__tests__/Replicable.Transformers.SchemaGeneratorOutput.test.d.ts +1 -0
  126. package/Transformers/__tests__/Replicable.Transformers.SchemaGeneratorOutput.test.js +441 -0
  127. package/Transformers/__tests__/Replicable.Transformers.Serialiser.test.d.ts +1 -0
  128. package/Transformers/__tests__/Replicable.Transformers.Serialiser.test.js +320 -0
  129. package/Transformers/__tests__/Replicable.Transformers.Utils.test.d.ts +1 -0
  130. package/Transformers/__tests__/Replicable.Transformers.Utils.test.js +534 -0
  131. package/__tests__/Replicable.Expressions.test.d.ts +1 -0
  132. package/__tests__/Replicable.Expressions.test.js +166 -0
  133. package/__tests__/Replicable.IDPool.test.d.ts +1 -0
  134. package/__tests__/Replicable.IDPool.test.js +11 -0
  135. package/__tests__/Replicable.ReplicableRegistry.test.d.ts +1 -0
  136. package/__tests__/Replicable.ReplicableRegistry.test.js +154 -0
  137. package/__tests__/Replicable.Serialisation.test.d.ts +1 -0
  138. package/__tests__/Replicable.Serialisation.test.js +283 -0
  139. package/package.json +14 -0
  140. package/tsconfig.json +19 -0
@@ -0,0 +1,320 @@
1
+ import { fn } from "@vitest/spy";
2
+ import { afterAll, beforeAll, describe, expect, test } from "vitest";
3
+ import { BikPath } from "@bikky/path";
4
+ import { Serialiser } from "../Serialiser.js";
5
+ import { Versions } from "../../Constants/Versions.js";
6
+ import { Expression, PropertyTypes } from "../../Main.js";
7
+ import { ReplicableRegistry } from "../../Constants/ReplicableRegistry.js";
8
+ import { TestPropertyDecorators } from "./Examples.js";
9
+ import { ExpressionScopes } from "../../Expressions/TypeRegistry/Registry.js";
10
+ import { Constructor } from "../Constructor.js";
11
+ import { Pointer } from "../Reference.js";
12
+ import "../Loader.js";
13
+ var TransformersTheLotClass = TestPropertyDecorators.TransformersTheLotClass;
14
+ var TransformersBasicStruct = TestPropertyDecorators.TransformersBasicStruct;
15
+ var TransformersBasicClass = TestPropertyDecorators.TransformersBasicClass;
16
+ //TODO: Test serialising & deserialising custom types that are represented by strings in code (e.g. UUID).
17
+ describe("Serialiser", () => {
18
+ const ReplType = ReplicableRegistry.__GetReplicablesFor(TransformersTheLotClass)[0];
19
+ const StructType = ReplicableRegistry.__GetReplicablesFor(TransformersBasicStruct)[0];
20
+ const ClassType = ReplicableRegistry.__GetReplicablesFor(TransformersBasicClass)[0];
21
+ ExpressionScopes.addLocalVariable(TransformersTheLotClass.name, "thisEntity", [TransformersTheLotClass]);
22
+ Expression.setCurrentStartScopeType(TransformersTheLotClass.name);
23
+ Expression.setCurrentScope(TransformersTheLotClass, { thisEntity: TestPropertyDecorators.TransformersTheLotClass.MakeExampleObj() });
24
+ let def = ReplType.getPropDefinition(Versions.v1_0_0, "val");
25
+ let exprConfig = def.expressionForProperty[Versions.v1_0_0];
26
+ const Expr = new Expression({ text: "${thisEntity.Val}", sourceFile: BikPath.getCurrentFilepath() }, exprConfig);
27
+ let def2 = ReplType.getPropDefinition(Versions.v1_0_0, "val2");
28
+ let def3 = ReplType.getPropDefinition(Versions.v1_0_0, "val3");
29
+ let def4 = ReplType.getPropDefinition(Versions.v1_0_0, "val4");
30
+ let def5 = ReplType.getPropDefinition(Versions.v1_0_0, "val5");
31
+ let def6 = ReplType.getPropDefinition(Versions.v1_0_0, "val6");
32
+ let def7 = ReplType.getPropDefinition(Versions.v1_0_0, "val7");
33
+ let def9 = ReplType.getPropDefinition(Versions.v1_0_0, "val9");
34
+ let def10 = ReplType.getPropDefinition(Versions.v1_0_0, "val10");
35
+ let example = TestPropertyDecorators.TransformersTheLotClass.MakeExampleObj();
36
+ example.val14 = 4;
37
+ let variedExample = TestPropertyDecorators.VariedSerialisationStruct.MakeExampleObj();
38
+ let source = {
39
+ Version: Versions.v1_0_0,
40
+ SourceFile: BikPath.getCurrentFilepath()
41
+ };
42
+ function getRepls(def) {
43
+ return def.types.flatMap((e) => e.types);
44
+ }
45
+ const VSerType = ReplicableRegistry.__GetReplicablesFor(TestPropertyDecorators.VariedSerialisationStruct)[0];
46
+ let vDef = VSerType.getPropDefinition(Versions.v1_0_0, "ser");
47
+ describe.sequential("1. SerialiseProp", () => {
48
+ let original = Serialiser.SerialiseSingle;
49
+ Serialiser.SerialiseSingle = ((info, conf, val, mods) => "transformed:" + val);
50
+ let info = {
51
+ ownerRepl: ReplType,
52
+ source: { Version: Versions.v1_0_0, SourceFile: BikPath.getCurrentFilepath() },
53
+ };
54
+ afterAll(() => {
55
+ Serialiser.SerialiseSingle = original;
56
+ });
57
+ test("Serialise simple property", () => {
58
+ expect(Serialiser.SerialiseProp(info, def, 1)).toStrictEqual("transformed:1");
59
+ });
60
+ test("Serialise expression property", () => {
61
+ expect(Serialiser.SerialiseProp(info, def, Expr)).toStrictEqual(["Expression", "${thisEntity.Val}"]);
62
+ });
63
+ test("Serialise optional property", () => {
64
+ expect(Serialiser.SerialiseProp(info, def2, undefined)).toStrictEqual("transformed:undefined");
65
+ expect(Serialiser.SerialiseProp(info, def2, 1)).toStrictEqual("transformed:1");
66
+ });
67
+ test("Serialise Dict property", () => {
68
+ expect(Serialiser.SerialiseProp(info, def4, { a: 1 })).toStrictEqual(["Dict", { a: "transformed:1" }]);
69
+ });
70
+ test("Serialise Map property", () => {
71
+ expect(Serialiser.SerialiseProp(info, def3, new Map([["a", 1]]))).toStrictEqual(["Map", { a: "transformed:1" }]);
72
+ });
73
+ test("Serialise Array property", () => {
74
+ expect(Serialiser.SerialiseProp(info, def5, [1])).toStrictEqual(["Array", ["transformed:1"]]);
75
+ });
76
+ test("Serialise Double Array property", () => {
77
+ expect(Serialiser.SerialiseProp(info, def6, [[1]])).toStrictEqual(["Array2", [["transformed:1"]]]);
78
+ });
79
+ });
80
+ describe.sequential("2. DeserialiseProp", () => {
81
+ let original = Serialiser.DeserialiseSingle;
82
+ Serialiser.DeserialiseSingle = ((info, conf, target, val, mods) => Array.isArray(val) ? "transformed:" + val[1] : "transformed:" + val);
83
+ let info = {
84
+ ownerRepl: ReplType,
85
+ source: { Version: Versions.v1_0_0, SourceFile: BikPath.getCurrentFilepath() },
86
+ };
87
+ afterAll(() => {
88
+ Serialiser.DeserialiseSingle = original;
89
+ });
90
+ let target = {};
91
+ test("Deserialise simple property", () => {
92
+ expect(Serialiser.DeserialiseProp(info, def, target, ["Primitive", 1])).toStrictEqual("transformed:1");
93
+ });
94
+ test.skip("Deserialise expression property", () => {
95
+ expect(Serialiser.DeserialiseProp(info, def, target, ["Expression", "${thisEntity.Val}"])).toStrictEqual("something");
96
+ });
97
+ test("Deserialise optional property", () => {
98
+ expect(Serialiser.DeserialiseProp(info, def2, target, ["Primitive", undefined])).toStrictEqual("transformed:undefined");
99
+ expect(Serialiser.DeserialiseProp(info, def2, target, ["Primitive", 1])).toStrictEqual("transformed:1");
100
+ });
101
+ test("Deserialise Dict property", () => {
102
+ expect(Serialiser.DeserialiseProp(info, def4, target, ["Dict", { a: 1 }])).toStrictEqual({ a: "transformed:1" });
103
+ });
104
+ test("Deserialise Map property", () => {
105
+ expect(Serialiser.DeserialiseProp(info, def3, target, ["Map", { a: 1 }])).toStrictEqual(new Map([["a", "transformed:1"]]));
106
+ });
107
+ test("Deserialise Array property", () => {
108
+ expect(Serialiser.DeserialiseProp(info, def5, target, ["Array", [1]])).toStrictEqual(["transformed:1"]);
109
+ });
110
+ test("Deserialise Double Array property", () => {
111
+ expect(Serialiser.DeserialiseProp(info, def6, target, ["Array2", [[1]]])).toStrictEqual([["transformed:1"]]);
112
+ });
113
+ });
114
+ describe.sequential("3. SerialiseSingle", () => {
115
+ let originalSerialise = Serialiser.Serialise;
116
+ let spy = fn((val) => ["Repl", val]);
117
+ beforeAll(() => {
118
+ Serialiser.Serialise = spy;
119
+ });
120
+ let info = {
121
+ ownerRepl: ReplType,
122
+ source: { Version: Versions.v1_0_0, SourceFile: BikPath.getCurrentFilepath() },
123
+ };
124
+ afterAll(() => {
125
+ Serialiser.Serialise = originalSerialise;
126
+ });
127
+ test("Serialise single primitive", () => {
128
+ spy.mockClear();
129
+ expect(Serialiser.SerialiseSingle(info, def, "1", PropertyTypes.Solo)).toStrictEqual(["Primitive", "1"]);
130
+ expect(spy).not.toBeCalled();
131
+ spy.mockClear();
132
+ expect(() => Serialiser.SerialiseSingle(info, def, 1, PropertyTypes.Solo)).toThrowError(`${TransformersTheLotClass.name}.val is not a valid type for serialisation.`);
133
+ expect(spy).not.toBeCalled();
134
+ spy.mockClear();
135
+ });
136
+ test("Serialise single repl", () => {
137
+ spy.mockClear();
138
+ expect(Serialiser.SerialiseSingle(info, def7, example.val7, PropertyTypes.Solo))
139
+ .toStrictEqual(["Repl", example.val7]);
140
+ expect(spy).toBeCalledWith(example.val7);
141
+ spy.mockClear();
142
+ });
143
+ test("Serialise single repl with pointer", () => {
144
+ spy.mockClear();
145
+ expect(Serialiser.SerialiseSingle(info, def10, example.val10, PropertyTypes.Solo))
146
+ .toStrictEqual([TransformersBasicClass.name, example.val10.val.val]);
147
+ // We get the ref from the pointer so don't need to serialise.
148
+ expect(spy).not.toBeCalled();
149
+ spy.mockClear();
150
+ });
151
+ test("Serialise inline repl", () => {
152
+ spy.mockClear();
153
+ expect(Serialiser.SerialiseSingle(info, def9, example.val9, PropertyTypes.Solo | PropertyTypes.ForceInline))
154
+ .toStrictEqual(["Repl", example.val9.val]);
155
+ expect(spy).toBeCalledWith(example.val9.val);
156
+ spy.mockClear();
157
+ });
158
+ });
159
+ describe.sequential("4. DeserialiseSingle", () => {
160
+ const ClearObj = new TransformersTheLotClass();
161
+ const Config = {
162
+ source: { Version: Versions.v1_0_0, SourceFile: BikPath.getCurrentFilepath() },
163
+ owner: ClearObj
164
+ };
165
+ let info = {
166
+ ownerRepl: ReplType,
167
+ source: { Version: Versions.v1_0_0, SourceFile: BikPath.getCurrentFilepath() },
168
+ owner: ClearObj
169
+ };
170
+ let originalDeserialise = Serialiser.Deserialise;
171
+ let sSpyResult = undefined;
172
+ let sSpy = fn((object, val) => sSpyResult !== null && sSpyResult !== void 0 ? sSpyResult : ["Deserialised", val[1]]);
173
+ let originalConstruct = Constructor.Construct;
174
+ let cSpyResult = undefined;
175
+ let cSpy = fn((type, source, owner, args) => cSpyResult !== null && cSpyResult !== void 0 ? cSpyResult : ["Constructed", args[1]]);
176
+ beforeAll(() => {
177
+ Serialiser.Deserialise = sSpy;
178
+ Constructor.Construct = cSpy;
179
+ });
180
+ test.sequential("Deserialise simple primitive", () => {
181
+ sSpy.mockClear();
182
+ cSpy.mockClear();
183
+ expect(Serialiser.DeserialiseSingle(info, def, ClearObj.val, ["Primitive", "1"], PropertyTypes.Solo)).toStrictEqual("1");
184
+ expect(sSpy).not.toBeCalled();
185
+ expect(cSpy).not.toBeCalled();
186
+ sSpy.mockClear();
187
+ cSpy.mockClear();
188
+ });
189
+ test.sequential("Deserialise struct repl - construct", () => {
190
+ sSpy.mockClear();
191
+ cSpy.mockClear();
192
+ expect(Serialiser.DeserialiseSingle(info, def7, ClearObj.val7, [TransformersBasicStruct.name, { val: ["Primitive", example.val7.val] }], PropertyTypes.Solo))
193
+ .toStrictEqual(["Constructed", { val: ["Primitive", example.val7.val] }]);
194
+ expect(sSpy).not.toBeCalled();
195
+ expect(cSpy).toBeCalledWith(StructType, Config.source, Config.owner, [TransformersBasicStruct.name, { val: ["Primitive", example.val7.val] }]);
196
+ sSpy.mockClear();
197
+ cSpy.mockClear();
198
+ });
199
+ test.sequential("Deserialise struct repl - deserialise", () => {
200
+ ClearObj.val7 = new TransformersBasicStruct();
201
+ sSpy.mockClear();
202
+ cSpy.mockClear();
203
+ expect(Serialiser.DeserialiseSingle(info, def7, ClearObj.val7, [TransformersBasicStruct.name, { val: ["Primitive", example.val7.val] }], PropertyTypes.Solo))
204
+ .toStrictEqual(["Deserialised", { val: ["Primitive", example.val7.val] }]);
205
+ expect(sSpy).toBeCalledWith(ClearObj.val7, [TransformersBasicStruct.name, { val: ["Primitive", example.val7.val] }]);
206
+ expect(cSpy).not.toBeCalled();
207
+ sSpy.mockClear();
208
+ cSpy.mockClear();
209
+ });
210
+ test.sequential("Deserialise class repl - reference", () => {
211
+ sSpy.mockClear();
212
+ cSpy.mockClear();
213
+ let test = new TransformersBasicClass();
214
+ test.val = example.val10.val.val;
215
+ expect(Serialiser.DeserialiseSingle(info, def10, ClearObj.val10, [TransformersBasicClass.name, example.val10.val.val], PropertyTypes.Solo))
216
+ .toStrictEqual(new Pointer(test));
217
+ expect(sSpy).not.toBeCalled();
218
+ expect(cSpy).not.toBeCalled();
219
+ sSpy.mockClear();
220
+ cSpy.mockClear();
221
+ });
222
+ test.sequential("Deserialise inline class repl - construct", () => {
223
+ cSpyResult = new TransformersBasicClass();
224
+ cSpyResult.val = example.val10.val.val;
225
+ sSpy.mockClear();
226
+ cSpy.mockClear();
227
+ expect(Serialiser.DeserialiseSingle(info, def9, ClearObj.val9, [TransformersBasicClass.name, { val: ["Primitive", example.val9.val] }], PropertyTypes.Solo))
228
+ .toStrictEqual(new Pointer(cSpyResult));
229
+ expect(sSpy).not.toBeCalled();
230
+ expect(cSpy).toBeCalledWith(ClassType, Config.source, Config.owner, [TransformersBasicClass.name, { val: ["Primitive", example.val9.val] }]);
231
+ sSpy.mockClear();
232
+ cSpy.mockClear();
233
+ });
234
+ test.sequential("Deserialise inline class repl - deserialise", () => {
235
+ sSpyResult = new TransformersBasicClass();
236
+ sSpyResult.val = example.val10.val.val;
237
+ ClearObj.val9 = new Pointer(new TransformersBasicClass());
238
+ sSpy.mockClear();
239
+ cSpy.mockClear();
240
+ expect(Serialiser.DeserialiseSingle(info, def9, ClearObj.val9, [TransformersBasicClass.name, { val: ["Primitive", example.val9.val] }], PropertyTypes.Solo))
241
+ .toStrictEqual(new Pointer(sSpyResult));
242
+ expect(sSpy).toBeCalledWith(ClearObj.val9.val, [TransformersBasicClass.name, { val: ["Primitive", example.val9.val] }]);
243
+ expect(cSpy).not.toBeCalled();
244
+ sSpy.mockClear();
245
+ cSpy.mockClear();
246
+ });
247
+ afterAll(() => {
248
+ Serialiser.Deserialise = originalDeserialise;
249
+ Constructor.Construct = originalConstruct;
250
+ });
251
+ });
252
+ describe.sequential("5. SerialiseRepl", () => {
253
+ test("Serialise the lot", () => {
254
+ expect(Serialiser.SerialiseRepl(ReplType, source, example)).toStrictEqual([TransformersTheLotClass.name, {
255
+ val: ["Primitive", example.val],
256
+ val2: ["Primitive", example.val2],
257
+ val3: ["Map", { hello: ["Primitive", 1] }],
258
+ val4: ["Dict", { 1: ["Primitive", "world"] }],
259
+ val5: ["Array", [["Primitive", "hello"]]],
260
+ val6: ["Array2", [[["Primitive", 1], ["Primitive", 2]]]],
261
+ val7: [TransformersBasicStruct.name, { val: ["Primitive", example.val7.val], version: Versions.MAX }],
262
+ val8: ["Primitive", "hello"],
263
+ val9: [TransformersBasicClass.name, { val: ["Primitive", example.val9.val.val], version: Versions.MAX }],
264
+ val10: [TransformersBasicClass.name, example.val10.val.val],
265
+ val13: ["Array2", [[["Primitive", 1], ["Primitive", 2]]]],
266
+ val14: ["Primitive", example.val14],
267
+ version: Versions.MAX,
268
+ }]);
269
+ });
270
+ test("Serialise varied", () => {
271
+ expect(Serialiser.SerialiseRepl(VSerType, source, variedExample)).toStrictEqual([TestPropertyDecorators.VariedSerialisationStruct.name, {
272
+ ser: [TransformersBasicClass.name, { val: ["Primitive", variedExample.ser.val.val], version: Versions.MAX }],
273
+ ser2: [TransformersBasicClass.name, variedExample.ser2.val.val],
274
+ // ser3: variedExample.ser3,
275
+ ser4: variedExample.ser4,
276
+ ser5: [TransformersBasicClass.name, variedExample.ser5],
277
+ ser7: [TransformersBasicStruct.name, { val: ["Primitive", variedExample.ser7.val], version: Versions.MAX }],
278
+ ser9: variedExample.ser9,
279
+ ser10: [TransformersBasicStruct.name, variedExample.ser10],
280
+ version: Versions.MAX,
281
+ }]);
282
+ });
283
+ });
284
+ describe.sequential("6. Combo SerialiseRepl and DeserialiseRepl", () => {
285
+ let example = TestPropertyDecorators.TransformersTheLotClass.MakeExampleObj();
286
+ example.val14 = 4;
287
+ delete example.val11;
288
+ let variedExample = TestPropertyDecorators.VariedSerialisationStruct.MakeExampleObj();
289
+ test("Serialise and Deserialise the lot", () => {
290
+ let serialised = Serialiser.SerialiseRepl(ReplType, source, example);
291
+ let target = new TransformersTheLotClass();
292
+ let deserialised = Serialiser.DeserialiseRepl(ReplType, source, target, serialised);
293
+ expect(deserialised).toStrictEqual(example);
294
+ });
295
+ test("Serialise and Deserialise varied", () => {
296
+ let serialised = Serialiser.SerialiseRepl(VSerType, source, variedExample);
297
+ let target = new TestPropertyDecorators.VariedSerialisationStruct();
298
+ let deserialised = Serialiser.DeserialiseRepl(VSerType, source, target, serialised);
299
+ expect(deserialised).toStrictEqual(variedExample);
300
+ });
301
+ });
302
+ describe.sequential("7. Combo Serialise and Deserialise", () => {
303
+ let example = TestPropertyDecorators.TransformersTheLotClass.MakeExampleObj();
304
+ example.val14 = 4;
305
+ delete example.val11;
306
+ let variedExample = TestPropertyDecorators.VariedSerialisationStruct.MakeExampleObj();
307
+ test("Serialise and Deserialise the lot", () => {
308
+ let serialised = Serialiser.Serialise(example);
309
+ let target = new TransformersTheLotClass();
310
+ let deserialised = Serialiser.Deserialise(target, serialised);
311
+ expect(deserialised).toStrictEqual(example);
312
+ });
313
+ test("Serialise and Deserialise varied", () => {
314
+ let serialised = Serialiser.Serialise(variedExample);
315
+ let target = new TestPropertyDecorators.VariedSerialisationStruct();
316
+ let deserialised = Serialiser.Deserialise(target, serialised);
317
+ expect(deserialised).toStrictEqual(variedExample);
318
+ });
319
+ });
320
+ });