@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,151 @@
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
+ //<reference path="@bikky/compiler/Libraries/GlobalTypes.d.ts">
8
+ import { WaitableMap } from "@bikky/smart-collections";
9
+ import { beforeAll, expect, test } from "vitest";
10
+ import { ReplicableRegistry } from "../../Constants/ReplicableRegistry.js";
11
+ import { AddVersion, Versions } from "../../Constants/Versions.js";
12
+ import { Replicable } from "../../Replicatable.js";
13
+ import { Property } from "../Property.js";
14
+ import { Type, Struct, ReplicableClass } from "../Class.js";
15
+ import { Progress } from "../../Transformers/Progress.js";
16
+ let version = "version";
17
+ beforeAll(() => {
18
+ AddVersion(version, Versions.v1_0_0);
19
+ });
20
+ test("@Struct registers itself in the registry with all aliases.", async () => {
21
+ Progress.ClearCaches();
22
+ let TestStruct = class TestStruct {
23
+ };
24
+ TestStruct = __decorate([
25
+ Struct(version, { dataTypeName: "Test_Struct" })
26
+ ], TestStruct);
27
+ Progress.FinishedAllLoading();
28
+ let def = ReplicableRegistry.__GetReplicablesFor(TestStruct)[0];
29
+ expect(def, "Get replicable from class.").not.toBeUndefined();
30
+ expect(def).toBeInstanceOf(ReplicableClass);
31
+ let result = ReplicableRegistry.__GetReplicableForDataName("Test_Struct");
32
+ expect(result, "Get replicable from data name.").toBe(def);
33
+ result = ReplicableRegistry.__GetReplicablesFor("TestStruct")[0];
34
+ expect(result, "Get replicable from class name.").toBe(def);
35
+ result = (await Progress.AwaitReplicableFor(TestStruct))[0];
36
+ expect(result, "Get replicable from class async.").toBe(def);
37
+ // result = await ReplicableRegistry.__awaitReplicableFor("Test_Struct");
38
+ // expect(result, "Get replicable from data name async.").toBe(def);
39
+ // result = await ReplicableRegistry.__awaitReplicableFor("TestStruct");
40
+ // expect(result, "Get replicable from class name async.").toBe(def);
41
+ });
42
+ test("Manually add property to @Struct.", async () => {
43
+ Progress.ClearCaches();
44
+ let TestStruct = class TestStruct {
45
+ };
46
+ TestStruct = __decorate([
47
+ Struct(version)
48
+ ], TestStruct);
49
+ setTimeout(Progress.FinishedAllLoading, 1);
50
+ let def = (await Progress.AwaitReplicableFor(TestStruct))[0];
51
+ expect([...Object.values(def.properties.all(version))]).toHaveLength(0);
52
+ def.addProperty(version, "prop", { type: [{ type: [String] }] });
53
+ expect([...Object.values(def.properties.all(version))]).toHaveLength(1);
54
+ });
55
+ test("@Struct with @Property.", async () => {
56
+ Progress.ClearCaches();
57
+ let TestStruct = class TestStruct {
58
+ };
59
+ __decorate([
60
+ Property(version, String)
61
+ ], TestStruct.prototype, "prop", void 0);
62
+ TestStruct = __decorate([
63
+ Struct(version)
64
+ ], TestStruct);
65
+ setTimeout(Progress.FinishedAllLoading, 1);
66
+ let def = (await Progress.AwaitReplicableFor(TestStruct))[0];
67
+ await new Promise((res) => setTimeout(res, 10));
68
+ expect([...Object.values(def.finalised_properties.get(version))]).toHaveLength(1);
69
+ });
70
+ let Type_Decorator_Untyped = Type;
71
+ test("@Type.", async () => {
72
+ Progress.ClearCaches();
73
+ let TestClass = class TestClass {
74
+ };
75
+ TestClass = __decorate([
76
+ Type_Decorator_Untyped(version)
77
+ ], TestClass);
78
+ let TestType = TestClass;
79
+ TestType.Reference = function (value) {
80
+ return ["First"];
81
+ };
82
+ TestType.Dereference = function (value) {
83
+ return null;
84
+ };
85
+ // TestType.IsType = function(value: any): value is TestObject {
86
+ // return value instanceof TestType;
87
+ // }
88
+ setTimeout(Progress.FinishedAllLoading, 1);
89
+ let def = (await Progress.AwaitReplicableFor(TestType))[0];
90
+ expect(def).not.toBeUndefined();
91
+ expect(def.opts.dataTypeName).toBe("TestClass");
92
+ expect(def.classConstructor).toBe(TestType);
93
+ });
94
+ test("@Type with @Property.", async () => {
95
+ Progress.ClearCaches();
96
+ let TestClass = class TestClass {
97
+ };
98
+ __decorate([
99
+ Property(version, String)
100
+ ], TestClass.prototype, "prop", void 0);
101
+ TestClass = __decorate([
102
+ Type_Decorator_Untyped(version)
103
+ ], TestClass);
104
+ let TestType = TestClass;
105
+ TestType.Reference = function (value) {
106
+ return ["First"];
107
+ };
108
+ TestType.Dereference = function (value) {
109
+ return {};
110
+ };
111
+ // TestType.IsType = function(value: any): value is TestObject {
112
+ // return value instanceof TestType;
113
+ // }
114
+ setTimeout(Progress.FinishedAllLoading, 1);
115
+ let def = (await Progress.AwaitReplicableFor(TestType))[0];
116
+ expect([...Object.values(def.finalised_properties.get(version))]).toHaveLength(1);
117
+ });
118
+ test("waitmap resolves correctly", async () => {
119
+ let map = new WaitableMap();
120
+ let promise = map.get("test");
121
+ setTimeout(() => {
122
+ map.resolve("test", "Hello World!");
123
+ }, 10);
124
+ let result = await promise;
125
+ expect(result).toBe("Hello World!");
126
+ });
127
+ test("waitmap resolves correctly with object keys", async () => {
128
+ let map = new WaitableMap();
129
+ let promise = map.get(String);
130
+ setTimeout(() => {
131
+ map.resolve(String, "Hello World!");
132
+ }, 10);
133
+ let result = await promise;
134
+ expect(result).toBe("Hello World!");
135
+ });
136
+ test("@Struct with @Property initialisation.", () => {
137
+ Progress.ClearCaches();
138
+ let TestClass = class TestClass {
139
+ };
140
+ __decorate([
141
+ Property(version, String)
142
+ ], TestClass.prototype, "prop", void 0);
143
+ TestClass = __decorate([
144
+ Struct(version)
145
+ ], TestClass);
146
+ Progress.FinishedAllLoading();
147
+ let result = Replicable.Create(TestClass, { data: { Class: TestClass.name, Prop: "Hello World!" } });
148
+ expect(result).not.toBeUndefined();
149
+ expect(result).instanceOf(TestClass);
150
+ expect(result.prop).toBe("Hello World!");
151
+ });
@@ -0,0 +1,253 @@
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 { MixableClass } from "@bikky/compiler/Libraries/MixinCode.mjs";
8
+ import { beforeAll, expect, test } from "vitest";
9
+ import { AddVersion, Versions } from "../../Constants/Versions.js";
10
+ import { Replicable } from "../../Replicatable.js";
11
+ import { Struct } from "../Class.js";
12
+ import { Property } from "../Property.js";
13
+ import { Progress } from "../../Transformers/Progress.js";
14
+ let version = "version";
15
+ beforeAll(() => {
16
+ AddVersion(version, Versions.v1_0_0);
17
+ });
18
+ test("Deserialise Class", () => {
19
+ Progress.ClearCaches();
20
+ let Deserialise_Test_1 = class Deserialise_Test_1 {
21
+ };
22
+ Deserialise_Test_1 = __decorate([
23
+ Struct(version)
24
+ ], Deserialise_Test_1);
25
+ Progress.FinishedAllLoading();
26
+ let testObject = new Deserialise_Test_1();
27
+ testObject = Replicable.Deserialise(testObject, [Deserialise_Test_1.name, { version }]);
28
+ expect(testObject).not.toBeUndefined();
29
+ });
30
+ test("Deserialise Class with String prop", () => {
31
+ Progress.ClearCaches();
32
+ let Deserialise_Test_2 = class Deserialise_Test_2 {
33
+ };
34
+ __decorate([
35
+ Property(version, String)
36
+ ], Deserialise_Test_2.prototype, "prop", void 0);
37
+ Deserialise_Test_2 = __decorate([
38
+ Struct(version)
39
+ ], Deserialise_Test_2);
40
+ Progress.FinishedAllLoading();
41
+ let testObject = new Deserialise_Test_2();
42
+ testObject = Replicable.Deserialise(testObject, [Deserialise_Test_2.name, { prop: ["Primitive", "Hello"], version }]);
43
+ expect(testObject).not.toBeUndefined();
44
+ expect(testObject.prop).toBe("Hello");
45
+ });
46
+ test("Deserialise Class with String | Number prop", () => {
47
+ Progress.ClearCaches();
48
+ let Deserialise_Test_3 = class Deserialise_Test_3 {
49
+ };
50
+ __decorate([
51
+ Property(version, [String, Number])
52
+ ], Deserialise_Test_3.prototype, "prop", void 0);
53
+ Deserialise_Test_3 = __decorate([
54
+ Struct(version)
55
+ ], Deserialise_Test_3);
56
+ Progress.FinishedAllLoading();
57
+ let testObject = new Deserialise_Test_3();
58
+ testObject = Replicable.Deserialise(testObject, [Deserialise_Test_3.name, { prop: ["Primitive", "Hello"], version }]);
59
+ expect(testObject).not.toBeUndefined();
60
+ expect(testObject.prop).toBe("Hello");
61
+ });
62
+ test("Deserialise Class with Dict prop", () => {
63
+ Progress.ClearCaches();
64
+ let Deserialise_Test_3b = class Deserialise_Test_3b {
65
+ };
66
+ __decorate([
67
+ Property(version, { type: String, dictKey: String })
68
+ ], Deserialise_Test_3b.prototype, "prop", void 0);
69
+ Deserialise_Test_3b = __decorate([
70
+ Struct(version)
71
+ ], Deserialise_Test_3b);
72
+ Progress.FinishedAllLoading();
73
+ let testObject = new Deserialise_Test_3b();
74
+ testObject = Replicable.Deserialise(testObject, [Deserialise_Test_3b.name, { prop: ["Dict", { hello: ["Primitive", "world"] }], version }]);
75
+ expect(testObject).not.toBeUndefined();
76
+ expect(testObject.prop).toHaveProperty("hello", "world");
77
+ });
78
+ test("Deserialise Class with Map prop", () => {
79
+ Progress.ClearCaches();
80
+ let Deserialise_Test_4 = class Deserialise_Test_4 {
81
+ };
82
+ __decorate([
83
+ Property(version, { type: String, mapKey: String })
84
+ ], Deserialise_Test_4.prototype, "prop", void 0);
85
+ Deserialise_Test_4 = __decorate([
86
+ Struct(version)
87
+ ], Deserialise_Test_4);
88
+ Progress.FinishedAllLoading();
89
+ let testObject = new Deserialise_Test_4();
90
+ testObject = Replicable.Deserialise(testObject, [Deserialise_Test_4.name, { prop: ["Map", { hello: ["Primitive", "world"] }], version }]);
91
+ expect(testObject).not.toBeUndefined();
92
+ expect(testObject.prop).toStrictEqual(new Map([["hello", "world"]]));
93
+ });
94
+ test("Deserialise Class with Array prop", () => {
95
+ Progress.ClearCaches();
96
+ let Deserialise_Test_4 = class Deserialise_Test_4 {
97
+ };
98
+ __decorate([
99
+ Property(version, { type: String, array: true })
100
+ ], Deserialise_Test_4.prototype, "prop", void 0);
101
+ Deserialise_Test_4 = __decorate([
102
+ Struct(version)
103
+ ], Deserialise_Test_4);
104
+ Progress.FinishedAllLoading();
105
+ let testObject = new Deserialise_Test_4();
106
+ testObject = Replicable.Deserialise(testObject, [Deserialise_Test_4.name, { prop: ["Array", [["Primitive", "hello"], ["Primitive", "world"]]], version }]);
107
+ expect(testObject).not.toBeUndefined();
108
+ expect(testObject).toHaveProperty("prop");
109
+ expect(testObject.prop).toHaveLength(2);
110
+ expect(testObject.prop[0]).toBe("hello");
111
+ expect(testObject.prop[1]).toBe("world");
112
+ });
113
+ test("Deserialise Class with two props", () => {
114
+ Progress.ClearCaches();
115
+ let Deserialise_Test_2 = class Deserialise_Test_2 {
116
+ };
117
+ __decorate([
118
+ Property(version, String)
119
+ ], Deserialise_Test_2.prototype, "propOne", void 0);
120
+ __decorate([
121
+ Property(version, String)
122
+ ], Deserialise_Test_2.prototype, "propTwo", void 0);
123
+ Deserialise_Test_2 = __decorate([
124
+ Struct(version)
125
+ ], Deserialise_Test_2);
126
+ Progress.FinishedAllLoading();
127
+ let testObject = new Deserialise_Test_2();
128
+ testObject = Replicable.Deserialise(testObject, [Deserialise_Test_2.name, { propOne: ["Primitive", "hello"], propTwo: ["Primitive", "world"], version }]);
129
+ expect(testObject).not.toBeUndefined();
130
+ expect(testObject).toHaveProperty("propOne");
131
+ expect(testObject).toHaveProperty("propTwo");
132
+ expect(testObject.propOne).toBe("hello");
133
+ expect(testObject.propTwo).toBe("world");
134
+ });
135
+ test("Deserialise Class with class prop", () => {
136
+ Progress.ClearCaches();
137
+ let Deserialised_Subtest_6 = class Deserialised_Subtest_6 {
138
+ };
139
+ __decorate([
140
+ Property(version, String)
141
+ ], Deserialised_Subtest_6.prototype, "propOne", void 0);
142
+ __decorate([
143
+ Property(version, String)
144
+ ], Deserialised_Subtest_6.prototype, "propTwo", void 0);
145
+ Deserialised_Subtest_6 = __decorate([
146
+ Struct(version)
147
+ ], Deserialised_Subtest_6);
148
+ let Deserialise_Test_6 = class Deserialise_Test_6 {
149
+ constructor() {
150
+ this.prop = new Deserialised_Subtest_6();
151
+ }
152
+ };
153
+ __decorate([
154
+ Property(version, Deserialised_Subtest_6)
155
+ ], Deserialise_Test_6.prototype, "prop", void 0);
156
+ Deserialise_Test_6 = __decorate([
157
+ Struct(version)
158
+ ], Deserialise_Test_6);
159
+ Progress.FinishedAllLoading();
160
+ let testObject = new Deserialise_Test_6();
161
+ testObject = Replicable.Deserialise(testObject, [Deserialise_Test_6.name,
162
+ {
163
+ prop: [Deserialised_Subtest_6.name, {
164
+ propOne: ["Primitive", "Hello"],
165
+ propTwo: ["Primitive", "World"],
166
+ version
167
+ }],
168
+ version
169
+ }]);
170
+ expect(testObject).not.toBeUndefined();
171
+ expect(testObject).toHaveProperty("prop");
172
+ expect(testObject.prop).not.toBeUndefined();
173
+ expect(testObject.prop).toHaveProperty("propOne");
174
+ expect(testObject.prop).toHaveProperty("propTwo");
175
+ expect(testObject.prop.propOne).toBe("Hello");
176
+ expect(testObject.prop.propTwo).toBe("World");
177
+ });
178
+ test("Deserialise Child class with parent and child props", () => {
179
+ Progress.ClearCaches();
180
+ let Deserialised_ParentTest_7 = class Deserialised_ParentTest_7 {
181
+ };
182
+ __decorate([
183
+ Property(version, String)
184
+ ], Deserialised_ParentTest_7.prototype, "propOne", void 0);
185
+ Deserialised_ParentTest_7 = __decorate([
186
+ Struct(version)
187
+ ], Deserialised_ParentTest_7);
188
+ let Deserialise_ChildTest_7 = class Deserialise_ChildTest_7 extends Deserialised_ParentTest_7 {
189
+ };
190
+ __decorate([
191
+ Property(version, String)
192
+ ], Deserialise_ChildTest_7.prototype, "propTwo", void 0);
193
+ Deserialise_ChildTest_7 = __decorate([
194
+ Struct(version)
195
+ ], Deserialise_ChildTest_7);
196
+ Progress.FinishedAllLoading();
197
+ let testObject = new Deserialise_ChildTest_7();
198
+ testObject = Replicable.Deserialise(testObject, [Deserialise_ChildTest_7.name,
199
+ {
200
+ propOne: ["Primitive", "Hello"],
201
+ propTwo: ["Primitive", "World"],
202
+ version
203
+ }]);
204
+ expect(testObject).not.toBeUndefined();
205
+ expect(testObject).toHaveProperty("propOne");
206
+ expect(testObject).toHaveProperty("propTwo");
207
+ expect(testObject.propOne).toBe("Hello");
208
+ expect(testObject.propTwo).toBe("World");
209
+ });
210
+ test("Deserialise Child mixin with parent and child prop", () => {
211
+ Progress.ClearCaches();
212
+ let Deserialised_ParentTest_7 = class Deserialised_ParentTest_7 {
213
+ };
214
+ __decorate([
215
+ Property(version, String)
216
+ ], Deserialised_ParentTest_7.prototype, "propOne", void 0);
217
+ Deserialised_ParentTest_7 = __decorate([
218
+ Struct(version)
219
+ ], Deserialised_ParentTest_7);
220
+ let Deserialise_ChildTest_7 = class Deserialise_ChildTest_7 extends MixableClass(Deserialised_ParentTest_7) {
221
+ };
222
+ __decorate([
223
+ Property(version, String)
224
+ ], Deserialise_ChildTest_7.prototype, "propTwo", void 0);
225
+ Deserialise_ChildTest_7 = __decorate([
226
+ Struct(version)
227
+ ], Deserialise_ChildTest_7);
228
+ const mixedClass = makeMixer(Deserialise_ChildTest_7, Deserialised_ParentTest_7)(Deserialised_ParentTest_7);
229
+ let Deserialise_FinalTest_7 = class Deserialise_FinalTest_7 extends mixedClass {
230
+ };
231
+ __decorate([
232
+ Property(version, String)
233
+ ], Deserialise_FinalTest_7.prototype, "propThree", void 0);
234
+ Deserialise_FinalTest_7 = __decorate([
235
+ Struct(version)
236
+ ], Deserialise_FinalTest_7);
237
+ Progress.FinishedAllLoading();
238
+ let testObject = new Deserialise_FinalTest_7();
239
+ testObject = Replicable.Deserialise(testObject, [Deserialise_FinalTest_7.name,
240
+ {
241
+ propOne: ["Primitive", "Hello"],
242
+ propTwo: ["Primitive", "World"],
243
+ propThree: ["Primitive", "!"],
244
+ version
245
+ }]);
246
+ expect(testObject).not.toBeUndefined();
247
+ expect(testObject).toHaveProperty("propOne");
248
+ expect(testObject).toHaveProperty("propTwo");
249
+ expect(testObject).toHaveProperty("propThree");
250
+ expect(testObject.propOne).toBe("Hello");
251
+ expect(testObject.propTwo).toBe("World");
252
+ expect(testObject.propThree).toBe("!");
253
+ });
@@ -0,0 +1,135 @@
1
+ import { BikPath } from "@bikky/path";
2
+ import { fn } from "@vitest/spy";
3
+ import { fileURLToPath } from "url";
4
+ import { expect, test } from "vitest";
5
+ import { ReplicableRegistry } from "../../Constants/ReplicableRegistry.js";
6
+ import { SchemaGenerator, Struct, Versions } from "../../Main.js";
7
+ import { Progress } from "../../Transformers/Progress.js";
8
+ let thisFile = BikPath.normalise(fileURLToPath(import.meta.url).replace(".test.ts", ".gen.js"));
9
+ Progress.ClearCaches();
10
+ //Load some precompiled javascript with mixins.
11
+ let [A, B, C, D, E, Final] = new Function("Struct", "Versions", `
12
+ "use strict";
13
+
14
+ class A {
15
+ method(input) {
16
+ input.splice(input.indexOf(0), 1);
17
+ return input;
18
+ }
19
+ method2(input) {
20
+ input.splice(input.indexOf(0), 1);
21
+ return input;
22
+ }
23
+ method3(input) {
24
+ input.splice(input.indexOf(0), 1);
25
+ return input;
26
+ }
27
+ }
28
+ Struct(Versions.v1_0_0)(A);
29
+
30
+
31
+ var Super_0 = Symbol("super_B");
32
+ class B extends Mixable((A)) {
33
+ method(input) {
34
+ input.splice(input.indexOf(1), 1);
35
+ return this[Super_0].method ? (this[Super_0].method.call(this, input)) : (input);
36
+ }
37
+ }
38
+ B.Super = Super_0;
39
+ Struct(Versions.v1_0_0)(B);
40
+ (function (B) {
41
+ B.mix = makeMixer(B, A);
42
+ })(B || (B = {}));
43
+
44
+
45
+ var Super_1 = Symbol("super_C");
46
+ class C extends Mixable((A)) {
47
+ method(input) {
48
+ input.splice(input.indexOf(2), 1);
49
+ return this[Super_1].method ? (this[Super_1].method.call(this, input)) : (input);
50
+ }
51
+ method2(input) {
52
+ input.splice(input.indexOf(2), 1);
53
+ return this[Super_1].method2 ? (this[Super_1].method2.call(this, input)) : (input);
54
+ }
55
+ method3(input) {
56
+ input.splice(input.indexOf(2), 1);
57
+ return this[Super_1].method3 ? (this[Super_1].method3.call(this, input)) : (input);
58
+ }
59
+ }
60
+ C.Super = Super_1;
61
+ Struct(Versions.v1_0_0)(C);
62
+ (function (C) {
63
+ C.mix = makeMixer(C, A);
64
+ })(C || (C = {}));
65
+
66
+
67
+ var Super_2 = Symbol("super_D");
68
+ class D extends Mixable((A)) {
69
+ method(input) {
70
+ input.splice(input.indexOf(3), 1);
71
+ return this[Super_2].method ? (this[Super_2].method.call(this, input)) : (input);
72
+ }
73
+ }
74
+ D.Super = Super_2;
75
+ Struct(Versions.v1_0_0)(D);
76
+ (function (D) {
77
+ D.mix = makeMixer(D, A);
78
+ })(D || (D = {}));
79
+
80
+
81
+ var Super_3 = Symbol("super_E");
82
+ class E extends Mixable((A)) {
83
+ method(input) {
84
+ input.splice(input.indexOf(4), 1);
85
+ return this[Super_3].method ? (this[Super_3].method.call(this, input)) : (input);
86
+ }
87
+ }
88
+ Struct(Versions.v1_0_0)(E);
89
+ E.Super = Super_3;
90
+ (function (E) {
91
+ E.mix = makeMixer(E, A);
92
+ })(E || (E = {}));
93
+
94
+
95
+ class Final extends E.mix(D.mix(C.mix(B.mix(A)))) {
96
+ method(input) {
97
+ input.push(6);
98
+ return super.method(input);
99
+ }
100
+ method2(input) {
101
+ input.push(6);
102
+ return super.method2(input);
103
+ }
104
+ }
105
+ Struct(Versions.v1_0_0)(Final);
106
+
107
+ return [A, B, C, D, E, Final];
108
+ //# sourceMappingURL=${thisFile}
109
+ //# sourceURL=${thisFile}
110
+ `)(Struct, Versions);
111
+ Progress.FinishedAllLoading();
112
+ test("Test that a class that inherits from multiple mixins will initialise correctly.", async () => {
113
+ console.log(thisFile);
114
+ let details = ReplicableRegistry.__GetReplicablesFor(Final)[0];
115
+ expect([B, C, D, E]
116
+ .every((e) => details.parents
117
+ .some((f) => f.classConstructor == e))).toBe(true);
118
+ expect(details.parents.some((e) => e.classConstructor == A)).toBe(false);
119
+ await ReplicableRegistry.Initialise();
120
+ let options = {
121
+ open: fn((file) => {
122
+ expect(file).toBe(thisFile.replace(".gen.js", ".gen.data.d.ts"));
123
+ return true;
124
+ }),
125
+ write: fn((file, text) => {
126
+ expect(text).toContain(`
127
+ export interface FinalDefinition extends Omit<BDefinition, "Class">, Omit<CDefinition, "Class">, Omit<DDefinition, "Class">, Omit<EDefinition, "Class"> {
128
+ `.trim());
129
+ return true;
130
+ })
131
+ };
132
+ SchemaGenerator.GenerateAllInterfaceTypes(Versions.v1_0_0, options);
133
+ expect(options.open).toBeCalledTimes(1);
134
+ expect(options.write).toBeCalledTimes(1);
135
+ });
@@ -0,0 +1,66 @@
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
+ //<reference path="@bikky/compiler/Libraries/GlobalTypes.d.ts">
8
+ import { beforeEach, expect, test } from "vitest";
9
+ import { ReplicableRegistry } from "../../Constants/ReplicableRegistry.js";
10
+ import { AddVersion, ClearVersions, Versions } from "../../Constants/Versions.js";
11
+ import { Replicable } from "../../Replicatable.js";
12
+ import { Struct } from "../Class.js";
13
+ import { Property } from "../Property.js";
14
+ import { Progress } from "../../Transformers/Progress.js";
15
+ let version = "version";
16
+ beforeEach(() => {
17
+ ClearVersions();
18
+ AddVersion(version, Versions.v1_0_0);
19
+ });
20
+ test("@Struct with @Property.", async () => {
21
+ Progress.ClearCaches();
22
+ let TestStruct = class TestStruct {
23
+ };
24
+ __decorate([
25
+ Property(version, String)
26
+ ], TestStruct.prototype, "prop", void 0);
27
+ TestStruct = __decorate([
28
+ Struct(version)
29
+ ], TestStruct);
30
+ Progress.FinishedAllLoading();
31
+ let def = await Progress.AwaitReplicableFor(TestStruct);
32
+ await new Promise((res) => setTimeout(res, 10));
33
+ expect([...Object.values(def[0].finalised_properties.get(version))]).toHaveLength(1);
34
+ });
35
+ test("Create @Struct with @Property.", async () => {
36
+ Progress.ClearCaches();
37
+ let TestStruct = class TestStruct {
38
+ };
39
+ __decorate([
40
+ Property(version, String)
41
+ ], TestStruct.prototype, "prop", void 0);
42
+ TestStruct = __decorate([
43
+ Struct(version)
44
+ ], TestStruct);
45
+ Progress.FinishedAllLoading();
46
+ await ReplicableRegistry.Initialise();
47
+ let val = Replicable.Create(TestStruct, { data: { Class: TestStruct.name, Prop: "Test" } });
48
+ expect(val.prop).toBe("Test");
49
+ });
50
+ test("Create @Struct with @Property with constructor.", async () => {
51
+ Progress.ClearCaches();
52
+ let TestStruct = class TestStruct {
53
+ constructor() {
54
+ }
55
+ };
56
+ __decorate([
57
+ Property(version, String)
58
+ ], TestStruct.prototype, "prop", void 0);
59
+ TestStruct = __decorate([
60
+ Struct(version)
61
+ ], TestStruct);
62
+ Progress.FinishedAllLoading();
63
+ await ReplicableRegistry.Initialise();
64
+ let val = Replicable.Create(TestStruct, { data: { Class: TestStruct.name, Prop: "Test" } });
65
+ expect(val.prop).toBe("Test");
66
+ });
@@ -0,0 +1,67 @@
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
+ //<reference path="@bikky/compiler/Libraries/GlobalTypes.d.ts">
8
+ import { beforeEach, expect, test } from "vitest";
9
+ import { AddVersion, ClearVersions, Versions } from "../../Constants/Versions.js";
10
+ import { Type } from "../Class.js";
11
+ import { Property } from "../Property.js";
12
+ import { Progress } from "../../Transformers/Progress.js";
13
+ //TODO: Test isChildTypeOfThisType works with mixins properly.
14
+ //TODO: Test getOriginalValue works. Atm it's just a reference to the value - should it be a deep copy?
15
+ let version = "version";
16
+ let Type_Decorator_Untyped = Type;
17
+ beforeEach(() => {
18
+ ClearVersions();
19
+ AddVersion(version, Versions.v1_0_0);
20
+ });
21
+ test("@Type.", async () => {
22
+ Progress.ClearCaches();
23
+ let TestClass = class TestClass {
24
+ };
25
+ TestClass = __decorate([
26
+ Type_Decorator_Untyped(version)
27
+ ], TestClass);
28
+ let TestType = TestClass;
29
+ TestType.Reference = function (value) {
30
+ return ["First"];
31
+ };
32
+ TestType.Dereference = function (value) {
33
+ return null;
34
+ };
35
+ // TestType.IsType = function(value: any): value is TestObject {
36
+ // return value instanceof TestType;
37
+ // }
38
+ Progress.FinishedAllLoading();
39
+ let def = (await Progress.AwaitReplicableFor(TestType))[0];
40
+ expect(def).not.toBeUndefined();
41
+ expect(def.opts.dataTypeName).toBe("TestClass");
42
+ expect(def.classConstructor).toBe(TestType);
43
+ });
44
+ test("@Type with @Property.", async () => {
45
+ Progress.ClearCaches();
46
+ let TestClass = class TestClass {
47
+ };
48
+ __decorate([
49
+ Property(version, String)
50
+ ], TestClass.prototype, "prop", void 0);
51
+ TestClass = __decorate([
52
+ Type_Decorator_Untyped(version)
53
+ ], TestClass);
54
+ let TestType = TestClass;
55
+ TestType.Reference = function (value) {
56
+ return ["First"];
57
+ };
58
+ TestType.Dereference = function (value) {
59
+ return {};
60
+ };
61
+ // TestType.IsType = function(value: any): value is TestObject {
62
+ // return value instanceof TestType;
63
+ // }
64
+ setTimeout(Progress.FinishedAllLoading, 1);
65
+ let def = (await Progress.AwaitReplicableFor(TestType))[0];
66
+ expect([...Object.values(def.finalised_properties.get(version))]).toHaveLength(1);
67
+ });