@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
package/IDPool.js ADDED
@@ -0,0 +1,139 @@
1
+ import { CustomReplicableType, Versions } from "./Main.js";
2
+ import { Messenger } from "./Networking.js";
3
+ import { ReplicableRegistry } from "./Constants/ReplicableRegistry.js";
4
+ import { ValidExpressionTypes } from "./Expressions/TypeRegistry/Registry.js";
5
+ //Safe to load early.
6
+ export var IDPool;
7
+ (function (IDPool) {
8
+ var remote;
9
+ var size = 1000;
10
+ var pool = [];
11
+ //Only present on the server.
12
+ var makeUUID;
13
+ let prototype = { __proto__: String.prototype };
14
+ var clientIDs = new Map();
15
+ //This assumes messenger has been initialised first.
16
+ async function initialise(makeUUIDFunction) {
17
+ makeUUID = makeUUIDFunction;
18
+ //Delay this until the world has finished initialising.
19
+ if (!Messenger.isServer) {
20
+ await Messenger.connect;
21
+ }
22
+ //Request a number of IDs based on the pool size.
23
+ await Private.requestUUIDs(size);
24
+ }
25
+ IDPool.initialise = initialise;
26
+ let UUID;
27
+ (function (UUID) {
28
+ UUID.name = "UUID";
29
+ function isUUID(input, complex = false) {
30
+ if (!complex) {
31
+ return typeof input === "string";
32
+ }
33
+ else {
34
+ return (typeof input === "string" &&
35
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(input)
36
+ //Improved?: /^[A-F0-9]{8}-[A-F0-9]{4}-4[A-F0-9]{3}-[89AB][A-F0-9]{3}-[A-F0-9]{12}$/
37
+ );
38
+ }
39
+ }
40
+ UUID.isUUID = isUUID;
41
+ })(UUID = IDPool.UUID || (IDPool.UUID = {}));
42
+ function useUUID() {
43
+ if (typeof TestingMode !== "undefined" && TestingMode === true) {
44
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
45
+ var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
46
+ return v.toString(16);
47
+ });
48
+ }
49
+ Private.requestUUIDs(1);
50
+ let id = pool.shift();
51
+ id.__proto__ = prototype;
52
+ return id;
53
+ }
54
+ IDPool.useUUID = useUUID;
55
+ /**
56
+ * Verifies the client UUID and removes it from the pool of client UUIDs.
57
+ * @param id
58
+ * @param remoteID
59
+ */
60
+ function verifyClientUUID(id, remoteID) {
61
+ if (typeof TestingMode !== "undefined" && TestingMode === true) {
62
+ return true;
63
+ }
64
+ var array = clientIDs.get(remoteID);
65
+ if (!array) {
66
+ return false;
67
+ }
68
+ var index = array.indexOf(id);
69
+ if (index < 0) {
70
+ return false;
71
+ }
72
+ array.splice(index, 0);
73
+ return true;
74
+ }
75
+ IDPool.verifyClientUUID = verifyClientUUID;
76
+ let Private;
77
+ (function (Private) {
78
+ async function requestUUIDs(amount) {
79
+ //Client is out of ids, ask for more.
80
+ var ids = [];
81
+ if (Messenger.isServer) {
82
+ for (var i = 0; i < amount; i++) {
83
+ ids.push(makeUUID());
84
+ }
85
+ }
86
+ else {
87
+ ids = await remote.retrieveUUIDS(amount);
88
+ }
89
+ pool.push(...ids);
90
+ }
91
+ Private.requestUUIDs = requestUUIDs;
92
+ async function retrieveUUIDS(amount, client) {
93
+ if (!Messenger.isServer) {
94
+ return [];
95
+ }
96
+ else {
97
+ var result = [];
98
+ for (var i = 0; i < amount; i++) {
99
+ result.push(makeUUID());
100
+ }
101
+ if (client) {
102
+ var remoteID = Messenger.getIDForInstance(remote, client);
103
+ var array = clientIDs.get(remoteID);
104
+ if (!array) {
105
+ clientIDs.set(remoteID, (array = []));
106
+ }
107
+ array.push(...result);
108
+ }
109
+ return result;
110
+ }
111
+ }
112
+ Private.retrieveUUIDS = retrieveUUIDS;
113
+ })(Private || (Private = {}));
114
+ remote = Messenger.newRemoteInterface("IDPool", Private);
115
+ CustomReplicableType(Versions.v1_0_0, {
116
+ name: "UUID",
117
+ Create(config) {
118
+ config.data.__proto__ = prototype;
119
+ return config.data;
120
+ },
121
+ DefinitionType: "IDPool.UUID",
122
+ DefinitionIncludes: [[["IDPool"], "./IDPool.js"]],
123
+ DataIsType(val) {
124
+ return UUID.isUUID(val);
125
+ },
126
+ Reference(value) {
127
+ return [value];
128
+ },
129
+ Dereference(value) {
130
+ return value[0];
131
+ },
132
+ prototype: prototype
133
+ }, {
134
+ dataTypeName: "UUID",
135
+ typescriptTypeName: "UUID"
136
+ });
137
+ ReplicableRegistry.RegisterTypeAlias(UUID, "UUID");
138
+ ValidExpressionTypes.AddAliasForType(UUID, "UUID");
139
+ })(IDPool || (IDPool = {}));
package/License.txt ADDED
@@ -0,0 +1 @@
1
+ Not for use, reading, distribution, distributive works, altering or anything else (except by the creator).
package/Main.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import { Versions as Versions_Ext } from "./Constants/Versions.js";
2
+ export * from "./Constants/SerialisationTypes.js";
3
+ export import Versions = Versions_Ext;
4
+ export { Property } from "./Tracking/Property.js";
5
+ export { Accessor } from "./Tracking/Functions.js";
6
+ export { Struct, Type } from "./Tracking/Class.js";
7
+ export { CustomReplicableType } from "./Tracking/Class.js";
8
+ export { Replicable } from "./Replicatable.js";
9
+ export { Expression } from "./Expressions/Expression.js";
10
+ export { GlobalGroup } from "./Tracking/GlobalGroup.js";
11
+ export { Referencer } from "./Transformers/Reference.js";
12
+ export { SourceMap } from "./Constants/SourceMaps.js";
13
+ export { SchemaGenerator } from "./Transformers/SchemaGenerator.js";
package/Main.js ADDED
@@ -0,0 +1,13 @@
1
+ import { Versions as Versions_Ext } from "./Constants/Versions.js";
2
+ export * from "./Constants/SerialisationTypes.js";
3
+ export var Versions = Versions_Ext;
4
+ export { Property } from "./Tracking/Property.js";
5
+ export { Accessor } from "./Tracking/Functions.js";
6
+ export { Struct, Type } from "./Tracking/Class.js";
7
+ export { CustomReplicableType } from "./Tracking/Class.js";
8
+ export { Replicable } from "./Replicatable.js";
9
+ export { Expression } from "./Expressions/Expression.js";
10
+ export { GlobalGroup } from "./Tracking/GlobalGroup.js";
11
+ export { Referencer } from "./Transformers/Reference.js";
12
+ export { SourceMap } from "./Constants/SourceMaps.js";
13
+ export { SchemaGenerator } from "./Transformers/SchemaGenerator.js";
@@ -0,0 +1,60 @@
1
+ import { IDPool } from "./IDPool.js";
2
+ export declare namespace Messenger {
3
+ type UUID = IDPool.UUID;
4
+ export type ReplicatedFunction<T> = T extends (...args: infer A) => infer R ? (...args: A) => Promise<T[]> : never;
5
+ export type ReplicatedClass<T> = {
6
+ [P in keyof T]: ReplicatedFunction<T[P]>;
7
+ };
8
+ export type RemoteFunction<T> = T extends (...args: infer A) => infer R ? (...args: A) => Promise<T> : never;
9
+ export type RemoteClass<T> = {
10
+ [P in keyof T]: RemoteFunction<T[P]>;
11
+ };
12
+ /**
13
+ * Websocket type that works for express-ws and inbuilt browser websockets.
14
+ */
15
+ export type WebSocket = {
16
+ on(event: "message", handler: (data: any) => void): void;
17
+ on(event: "close", handler: (code: number, reason: string) => void): void;
18
+ send(data: any): void;
19
+ } | {
20
+ onmessage?: ((event: {
21
+ data: any;
22
+ }) => void) | null;
23
+ onclose?: ((event: {
24
+ code: number;
25
+ reason: string;
26
+ }) => void) | null;
27
+ send(data: any): void;
28
+ };
29
+ export interface ConnectionDetails<Remote = any> {
30
+ connection: Remote;
31
+ id: UUID;
32
+ tick: number;
33
+ }
34
+ export const isServer: boolean;
35
+ export var isConnected: boolean;
36
+ export var connect: Promise<void>;
37
+ export function initialise(localID: UUID, isTheServer: boolean, time?: number): void;
38
+ export function tick(): void;
39
+ export function sendMessages(): void;
40
+ export function getLocalTime(): number;
41
+ export function onDisconnect(id: UUID, handler: Function): void;
42
+ export function addRemoteConnection(id: UUID, connection: WebSocket): void;
43
+ export function newRemoteInterface<Type extends Object>(name: string, object: any): Type;
44
+ export function getInstanceForID<Type>(remoteInterface: Type, id: UUID): Type | null;
45
+ export function getAllInstancesExceptID<Type>(remoteInterface: Type, id: UUID): Type[] | null;
46
+ export function getAllInstancesExcept<Type>(remoteInterface: Type, remoteInstance: Type): Type[] | null;
47
+ export function getRemoteTime(id: UUID): number | null;
48
+ export function getRemotePing(id: UUID): number | null;
49
+ export function getRemoteAvgPing(id: UUID): number | null;
50
+ export function getIDForInstance<Type>(remoteInterface: Type, remoteInstance: Type): UUID | null;
51
+ export function isRemoteProxy(remote: any): boolean;
52
+ export function getLocalID(): IDPool.UUID;
53
+ /**
54
+ * Will return the local id if on the server. Assumes that only the server connects to clients.
55
+ */
56
+ export function getServerID(): IDPool.UUID;
57
+ export function divertMessages<Type extends object>(remote: Type, newTarget: Type): void;
58
+ export function restoreMessages<Type extends object>(remote: Type): void;
59
+ export {};
60
+ }