@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,160 @@
|
|
|
1
|
+
export function getClassOfObject(obj) {
|
|
2
|
+
return obj.__proto__.constructor;
|
|
3
|
+
}
|
|
4
|
+
export function generateDataName(name) {
|
|
5
|
+
//I'd love to put spaces in front of each capital letter, but it's really hard to do
|
|
6
|
+
// that with a matching type.
|
|
7
|
+
// return name[0].toUpperCase() + name.substring(1).replace(/(?!\b)([A-Z])/gm, " $1");
|
|
8
|
+
return (name[0].toUpperCase() + name.substring(1)).replace(/\./g, "");
|
|
9
|
+
}
|
|
10
|
+
export function describeObject(type) {
|
|
11
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
12
|
+
if (type === null)
|
|
13
|
+
return "null";
|
|
14
|
+
if (typeof type === "undefined")
|
|
15
|
+
return "undefined";
|
|
16
|
+
if (typeof type === "string")
|
|
17
|
+
return type;
|
|
18
|
+
if (typeof type === "function" && !type.prototype)
|
|
19
|
+
return `Function(${type.name})`;
|
|
20
|
+
if (type.prototype) {
|
|
21
|
+
return (_d = (_b = (_a = type.prototype.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : (_c = type.constructor) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : type.name;
|
|
22
|
+
}
|
|
23
|
+
if (typeof type !== "object") {
|
|
24
|
+
return typeof type;
|
|
25
|
+
}
|
|
26
|
+
if (((_e = type.constructor) === null || _e === void 0 ? void 0 : _e.name) == "ReplicableClass")
|
|
27
|
+
return `{ ReplicableClass: ${describeObject(type.classConstructor)} }`;
|
|
28
|
+
if (type.__proto__ && type.__proto__ !== Object.prototype) {
|
|
29
|
+
return (_j = (_g = (_f = type.__proto__.constructor) === null || _f === void 0 ? void 0 : _f.name) !== null && _g !== void 0 ? _g : (_h = type.__proto__) === null || _h === void 0 ? void 0 : _h.name) !== null && _j !== void 0 ? _j : type.name;
|
|
30
|
+
}
|
|
31
|
+
//Kindof a bad hack, but we're avoiding a circular reference.
|
|
32
|
+
if ("name" in type)
|
|
33
|
+
return `{ Object ${type.name} }`;
|
|
34
|
+
if ("debugName" in type)
|
|
35
|
+
return `${type.debugName}`;
|
|
36
|
+
if (Array.isArray(type))
|
|
37
|
+
return `[${type.map(describeObject).join(", ")}]`;
|
|
38
|
+
return JSON.stringify(type, (key, value) => {
|
|
39
|
+
//Key is always "" for the parent object
|
|
40
|
+
if (key == "")
|
|
41
|
+
return value;
|
|
42
|
+
if (isPrimitiveValue(value))
|
|
43
|
+
return value;
|
|
44
|
+
return describeObject(value);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
export function describeObjects(types, brackets = true) {
|
|
48
|
+
if (types.length == 1)
|
|
49
|
+
return describeObject(types[0]);
|
|
50
|
+
if (brackets)
|
|
51
|
+
return `(${describeObjects(types, false)})`;
|
|
52
|
+
return types.map((e) => describeObject(e)).join(" | ");
|
|
53
|
+
}
|
|
54
|
+
//Stores the type on the class'/object's prototype.
|
|
55
|
+
export const TypeSymbol = Symbol("ReplicableType");
|
|
56
|
+
//Stores the loaded data on the object.
|
|
57
|
+
export const DataSymbol = Symbol("ReplicableData");
|
|
58
|
+
export var ClassCategory;
|
|
59
|
+
(function (ClassCategory) {
|
|
60
|
+
//First four are mutually exclusive
|
|
61
|
+
ClassCategory[ClassCategory["Primitive"] = 0] = "Primitive";
|
|
62
|
+
ClassCategory[ClassCategory["Struct"] = 1] = "Struct";
|
|
63
|
+
// Inlined for properties it means that the property should be inlined when serialising
|
|
64
|
+
// rather than sending a reference.
|
|
65
|
+
ClassCategory[ClassCategory["Inlined"] = 2] = "Inlined";
|
|
66
|
+
ClassCategory[ClassCategory["Pointer"] = 4] = "Pointer";
|
|
67
|
+
// For classes it means that the class is treated like a struct at runtime (no pointer) but treated as a
|
|
68
|
+
// class when serialising (passed by reference).
|
|
69
|
+
// Opposite of inlined.
|
|
70
|
+
ClassCategory[ClassCategory["Custom"] = 8] = "Custom";
|
|
71
|
+
})(ClassCategory || (ClassCategory = {}));
|
|
72
|
+
(function (ClassCategory) {
|
|
73
|
+
function isType(type, category) {
|
|
74
|
+
return (type & category) == category;
|
|
75
|
+
}
|
|
76
|
+
ClassCategory.isType = isType;
|
|
77
|
+
function isTypeOr(type, ...categories) {
|
|
78
|
+
return categories.some((c) => isType(type, c));
|
|
79
|
+
}
|
|
80
|
+
ClassCategory.isTypeOr = isTypeOr;
|
|
81
|
+
function isTypeAnd(type, ...categories) {
|
|
82
|
+
return categories.every((c) => isType(type, c));
|
|
83
|
+
}
|
|
84
|
+
ClassCategory.isTypeAnd = isTypeAnd;
|
|
85
|
+
})(ClassCategory || (ClassCategory = {}));
|
|
86
|
+
export var PropertyTypes;
|
|
87
|
+
(function (PropertyTypes) {
|
|
88
|
+
PropertyTypes[PropertyTypes["AsIs"] = 0] = "AsIs";
|
|
89
|
+
PropertyTypes[PropertyTypes["Definition"] = 1] = "Definition";
|
|
90
|
+
PropertyTypes[PropertyTypes["Serialised"] = 2] = "Serialised";
|
|
91
|
+
PropertyTypes[PropertyTypes["ForceInline"] = 3] = "ForceInline";
|
|
92
|
+
//The rest are all modifiers.
|
|
93
|
+
PropertyTypes[PropertyTypes["Expression"] = 4] = "Expression";
|
|
94
|
+
PropertyTypes[PropertyTypes["Array"] = 8] = "Array";
|
|
95
|
+
PropertyTypes[PropertyTypes["Array2"] = 16] = "Array2";
|
|
96
|
+
PropertyTypes[PropertyTypes["Dictionary"] = 32] = "Dictionary";
|
|
97
|
+
PropertyTypes[PropertyTypes["Map"] = 64] = "Map";
|
|
98
|
+
PropertyTypes[PropertyTypes["Solo"] = 128] = "Solo";
|
|
99
|
+
})(PropertyTypes || (PropertyTypes = {}));
|
|
100
|
+
(function (PropertyTypes) {
|
|
101
|
+
function isType(type, category) {
|
|
102
|
+
return (type & category) == category;
|
|
103
|
+
}
|
|
104
|
+
PropertyTypes.isType = isType;
|
|
105
|
+
function isTypeOr(type, ...categories) {
|
|
106
|
+
return categories.some((c) => isType(type, c));
|
|
107
|
+
}
|
|
108
|
+
PropertyTypes.isTypeOr = isTypeOr;
|
|
109
|
+
function isTypeAnd(type, ...categories) {
|
|
110
|
+
return categories.every((c) => isType(type, c));
|
|
111
|
+
}
|
|
112
|
+
PropertyTypes.isTypeAnd = isTypeAnd;
|
|
113
|
+
function ModOnly(type) {
|
|
114
|
+
return type & ~0b00000111;
|
|
115
|
+
}
|
|
116
|
+
PropertyTypes.ModOnly = ModOnly;
|
|
117
|
+
function allAreType(category, ...types) {
|
|
118
|
+
return types.every((c) => isType(c, category));
|
|
119
|
+
}
|
|
120
|
+
PropertyTypes.allAreType = allAreType;
|
|
121
|
+
})(PropertyTypes || (PropertyTypes = {}));
|
|
122
|
+
export function isPrimitiveType(type) {
|
|
123
|
+
return type === String || type === Number || type === Boolean || type === null || type === undefined;
|
|
124
|
+
}
|
|
125
|
+
export function primitiveTypeName(type) {
|
|
126
|
+
return type === null ? "null" : typeof type === "undefined" ? "undefined" : type.name.toLowerCase();
|
|
127
|
+
}
|
|
128
|
+
export function GetTypeName(type) {
|
|
129
|
+
return isPrimitiveType(type) ? primitiveTypeName(type) : type.opts.typescriptTypeName;
|
|
130
|
+
}
|
|
131
|
+
export function isPrimitiveValue(object) {
|
|
132
|
+
return (typeof object !== "object" && typeof object !== "function") || object === null;
|
|
133
|
+
}
|
|
134
|
+
export function getPrimitiveClass(object) {
|
|
135
|
+
switch (typeof object) {
|
|
136
|
+
case "string": return String;
|
|
137
|
+
case "number": return Number;
|
|
138
|
+
case "boolean": return Boolean;
|
|
139
|
+
case "undefined": return undefined;
|
|
140
|
+
case "object": {
|
|
141
|
+
if (object === null) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
throw new Error(`Object ${describeObject(object)} is not a known primitive type!`);
|
|
147
|
+
}
|
|
148
|
+
export function ValueIsPrimitiveType(type, value) {
|
|
149
|
+
if (type === undefined)
|
|
150
|
+
return typeof value === "undefined";
|
|
151
|
+
if (type === null)
|
|
152
|
+
return value === null;
|
|
153
|
+
if (type === String)
|
|
154
|
+
return typeof value === "string";
|
|
155
|
+
if (type === Number)
|
|
156
|
+
return typeof value === "number";
|
|
157
|
+
if (type === Boolean)
|
|
158
|
+
return typeof value === "boolean";
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Versions } from "./Versions.js";
|
|
2
|
+
export interface SourceMap {
|
|
3
|
+
SourceFile: string;
|
|
4
|
+
Version: Versions | string;
|
|
5
|
+
}
|
|
6
|
+
export type ImportDetails = Omit<SourceMap, "SourceFile"> & Partial<SourceMap>;
|
|
7
|
+
export declare namespace SourceMap {
|
|
8
|
+
function get<O extends object = any>(object: O): SourceMap | undefined;
|
|
9
|
+
function add<O extends object = any>(object: O, data: SourceMap): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
let cache = new WeakMap();
|
|
2
|
+
export var SourceMap;
|
|
3
|
+
(function (SourceMap) {
|
|
4
|
+
function get(object) {
|
|
5
|
+
return cache.get(object);
|
|
6
|
+
}
|
|
7
|
+
SourceMap.get = get;
|
|
8
|
+
function add(object, data) {
|
|
9
|
+
cache.set(object, data);
|
|
10
|
+
}
|
|
11
|
+
SourceMap.add = add;
|
|
12
|
+
})(SourceMap || (SourceMap = {}));
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare enum Versions {
|
|
2
|
+
v1_0_0 = "1.0.0",
|
|
3
|
+
MAX = "1.0.0"
|
|
4
|
+
}
|
|
5
|
+
export declare function MinVersion(...versions: (Versions | string)[]): Versions;
|
|
6
|
+
/**
|
|
7
|
+
* This function is only for testing!
|
|
8
|
+
*/
|
|
9
|
+
export declare function ClearVersions(): void;
|
|
10
|
+
export declare function AddVersion(version: string | Versions, parent: string | Versions): void;
|
|
11
|
+
export declare function GetVersionIndex(version: string): number;
|
|
12
|
+
export declare function GetVersionIndex<T = typeof Versions>(version: T[keyof T]): number;
|
|
13
|
+
export declare function GetAllVersions(): string[];
|
|
14
|
+
export declare function GetAllVersionsAfter(version: string): string[];
|
|
15
|
+
export declare function GetVersionController(): any;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { TreeMap } from "@bikky/smart-collections";
|
|
2
|
+
export var Versions;
|
|
3
|
+
(function (Versions) {
|
|
4
|
+
Versions["v1_0_0"] = "1.0.0";
|
|
5
|
+
Versions["MAX"] = "1.0.0";
|
|
6
|
+
})(Versions || (Versions = {}));
|
|
7
|
+
const VersionApplicationOrder = [Versions.v1_0_0];
|
|
8
|
+
const VersionHierarchy = new TreeMap(Versions.v1_0_0);
|
|
9
|
+
Object.defineProperty(Versions, "MAX", {
|
|
10
|
+
get() {
|
|
11
|
+
return VersionApplicationOrder[VersionApplicationOrder.length - 1];
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
export function MinVersion(...versions) {
|
|
15
|
+
let min = [];
|
|
16
|
+
let minStr = "";
|
|
17
|
+
for (let version of versions) {
|
|
18
|
+
let nums = version.split(/\./g).map((e) => parseInt(e));
|
|
19
|
+
for (let i = 0; i < nums.length; i++) {
|
|
20
|
+
if (typeof min[i] === "undefined") {
|
|
21
|
+
min = nums;
|
|
22
|
+
minStr = version;
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
if (nums[i] < min[i]) {
|
|
26
|
+
min = nums;
|
|
27
|
+
minStr = version;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return minStr;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* This function is only for testing!
|
|
36
|
+
*/
|
|
37
|
+
export function ClearVersions() {
|
|
38
|
+
if (typeof TestingMode === "boolean" && TestingMode) {
|
|
39
|
+
VersionHierarchy.clear();
|
|
40
|
+
VersionApplicationOrder.length = 0;
|
|
41
|
+
VersionApplicationOrder[0] = VersionHierarchy.getBase();
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
throw new Error("This function is only for testing!");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function AddVersion(version, parent) {
|
|
48
|
+
VersionApplicationOrder.push(version.toString());
|
|
49
|
+
VersionHierarchy.addChild(version, parent);
|
|
50
|
+
}
|
|
51
|
+
export function GetVersionIndex(version) {
|
|
52
|
+
return VersionApplicationOrder.indexOf(version);
|
|
53
|
+
}
|
|
54
|
+
export function GetAllVersions() {
|
|
55
|
+
return [...VersionApplicationOrder];
|
|
56
|
+
}
|
|
57
|
+
export function GetAllVersionsAfter(version) {
|
|
58
|
+
let index = GetVersionIndex(version);
|
|
59
|
+
return VersionApplicationOrder.slice(index + 1);
|
|
60
|
+
}
|
|
61
|
+
export function GetVersionController() {
|
|
62
|
+
return VersionHierarchy;
|
|
63
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { EAST_Token, ExpressionGrammar } from "./ExpressionGrammar.js";
|
|
2
|
+
import { Token } from "./Tokenizer.js";
|
|
3
|
+
export declare namespace ExpressionAST {
|
|
4
|
+
import Node = ExpressionGrammar.EAST_Complex_Node;
|
|
5
|
+
import NodeType = ExpressionGrammar.NodeType;
|
|
6
|
+
type ControlFlowLoopNodes = BreakNode | ContinueNode;
|
|
7
|
+
export function IsLoopNode(node: Node): node is ForNode | WhileNode;
|
|
8
|
+
export function IsControlFlowNode(node: Node): node is ContinueNode | BreakNode;
|
|
9
|
+
export interface ContinueNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
10
|
+
type: NodeType.CONTINUE;
|
|
11
|
+
values: undefined;
|
|
12
|
+
}
|
|
13
|
+
export function IsContinueNode(node: Node): node is ContinueNode;
|
|
14
|
+
export interface BreakNode extends Node {
|
|
15
|
+
type: NodeType.BREAK;
|
|
16
|
+
values: undefined;
|
|
17
|
+
}
|
|
18
|
+
export function IsBreakNode(node: Node): node is BreakNode;
|
|
19
|
+
export interface WhileNode extends Node {
|
|
20
|
+
type: NodeType.WHILE_LOOP;
|
|
21
|
+
values: {
|
|
22
|
+
test: ExpressionNode;
|
|
23
|
+
body: BlockNode<ControlFlowLoopNodes> | StatementNode;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function IsWhileNode(node: Node): node is WhileNode;
|
|
27
|
+
export interface ForNode extends Node {
|
|
28
|
+
type: NodeType.FOR_LOOP;
|
|
29
|
+
values: {
|
|
30
|
+
initialiser: ExpressionNode;
|
|
31
|
+
test: ExpressionNode;
|
|
32
|
+
incrementer: ExpressionNode;
|
|
33
|
+
body: BlockNode<ControlFlowLoopNodes> | StatementNode;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function IsForNode(node: Node): node is ForNode;
|
|
37
|
+
export interface StatementNode extends Node {
|
|
38
|
+
type: NodeType.STATEMENT;
|
|
39
|
+
values: {
|
|
40
|
+
expression: ExpressionNode["values"]["expression"];
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function IsStatementNode(node: Node): node is StatementNode;
|
|
44
|
+
export interface ExpressionNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
45
|
+
type: NodeType.EXPRESSION;
|
|
46
|
+
values: {
|
|
47
|
+
expression: ArrayAccessSequenceNode | FunctionCallNode | MemberAccessNode | BinaryExpressionNode | ParenthetisedExpressionNode | UnaryExpressionNode | ForceCastNode | CastNode | AssignmentNode | EAST_Token | LiteralNode;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function IsExpressionNode(node: Node): node is ExpressionNode;
|
|
51
|
+
export interface MemberAccessNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
52
|
+
type: NodeType.MEMBER_ACCESS;
|
|
53
|
+
values: {
|
|
54
|
+
context: ParenthetisedExpressionNode | EAST_Token | ForceCastNode | CastNode | ArrayAccessSequenceNode | FunctionCallNode;
|
|
55
|
+
memberName: MemberAccessNode | CastNode | EAST_Token;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function IsMemberAccessNode(node: Node | Token): node is MemberAccessNode;
|
|
59
|
+
export interface ArrayAccessorNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
60
|
+
type: NodeType.ARRAY_ACCESSOR;
|
|
61
|
+
values: {
|
|
62
|
+
index: LiteralNode | ExpressionNode;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export function IsArrayAccessorNode(node: Node): node is ArrayAccessorNode;
|
|
66
|
+
export interface ArrayAccessSequenceNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
67
|
+
type: NodeType.ARRAY_ACCESS_SEQUENCE;
|
|
68
|
+
values: {
|
|
69
|
+
identifier: EAST_Token | ExpressionNode;
|
|
70
|
+
accessor: ArrayAccessorNode[];
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export function IsArrayAccessSequenceNode(node: Node): node is ArrayAccessSequenceNode;
|
|
74
|
+
export interface ParenthetisedExpressionNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
75
|
+
type: NodeType.PARENTHETISED_EXPRESSION;
|
|
76
|
+
values: ExpressionNode["values"];
|
|
77
|
+
}
|
|
78
|
+
export function IsParenthetisedExpressionNode(node: Node): node is ParenthetisedExpressionNode;
|
|
79
|
+
export interface BinaryExpressionNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
80
|
+
type: NodeType.BINARY_EXPRESSION;
|
|
81
|
+
values: {
|
|
82
|
+
lhs: ArrayAccessSequenceNode | FunctionCallNode | ParenthetisedExpressionNode | UnaryExpressionNode | LiteralNode | EAST_Token;
|
|
83
|
+
operator: EAST_Token;
|
|
84
|
+
rhs: ExpressionNode;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export function IsBinaryExpressionNode(node: Node): node is BinaryExpressionNode;
|
|
88
|
+
export interface UnaryExpressionNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
89
|
+
type: NodeType.UNARY_EXPRESSION;
|
|
90
|
+
values: {
|
|
91
|
+
operator: EAST_Token;
|
|
92
|
+
value: ExpressionNode;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
export function IsUnaryExpressionNode(node: Node): node is UnaryExpressionNode;
|
|
96
|
+
export interface LiteralNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
97
|
+
type: NodeType.LITERAL;
|
|
98
|
+
values: {
|
|
99
|
+
value: EAST_Token;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export function IsLiteralNode(node: Node): node is LiteralNode;
|
|
103
|
+
export interface AssignmentNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
104
|
+
type: NodeType.ASSIGNMENT;
|
|
105
|
+
values: {
|
|
106
|
+
lhs: EAST_Token;
|
|
107
|
+
rhs: ExpressionNode;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export function IsAssignmentNode(node: Node): node is AssignmentNode;
|
|
111
|
+
export interface StructNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
112
|
+
type: NodeType.STRUCT;
|
|
113
|
+
values: {
|
|
114
|
+
name: EAST_Token;
|
|
115
|
+
members: PropertySignatureNode[];
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
export function IsStructNode(node: Node): node is StructNode;
|
|
119
|
+
export function IsIdentifierDeclarationNode(node: Node): node is PropertySignatureNode | DeclarationNode;
|
|
120
|
+
export interface DeclarationTypeQualifierListNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
121
|
+
type: NodeType.DECLARATION_TYPE_QUALIFIER_LIST;
|
|
122
|
+
values: {
|
|
123
|
+
qualifiers: EAST_Token[];
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export function IsDeclarationTypeQualifierListNode(node: Node): node is DeclarationEntryNode;
|
|
127
|
+
export interface DeclarationTypeNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
128
|
+
type: NodeType.DECLARATION_TYPE;
|
|
129
|
+
values: DeclarationTypeQualifierListNode["values"] & {
|
|
130
|
+
type: EAST_Token;
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
export function IsDeclarationTypeNode(node: Node): node is DeclarationTypeNode;
|
|
134
|
+
export interface PropertySignatureNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
135
|
+
type: NodeType.PROPERTY_SIGNATURE;
|
|
136
|
+
values: DeclarationTypeNode["values"] & {
|
|
137
|
+
identifier: EAST_Token;
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
export function IsPropertySignatureNode(node: Node): node is PropertySignatureNode;
|
|
141
|
+
export interface DeclarationEntryNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
142
|
+
type: NodeType.DECLARATION_ENTRY;
|
|
143
|
+
values: {
|
|
144
|
+
name: EAST_Token;
|
|
145
|
+
initialiser?: ExpressionNode;
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
export function IsDeclarationEntryNode(node: Node): node is DeclarationEntryNode;
|
|
149
|
+
export interface DeclarationNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
150
|
+
type: NodeType.DECLARATION;
|
|
151
|
+
values: DeclarationTypeNode["values"] & {
|
|
152
|
+
declarations: DeclarationEntryNode[];
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
export function IsDeclarationNode(node: Node): node is DeclarationNode;
|
|
156
|
+
export interface FileNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
157
|
+
type: NodeType.FILE;
|
|
158
|
+
text: string;
|
|
159
|
+
sourceLocation: string;
|
|
160
|
+
version: string;
|
|
161
|
+
values: {
|
|
162
|
+
lines: (CommentNode | PreprocessorCommandNode | FunctionDeclarationNode | DeclarationNode | ExpressionNode)[];
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
export function IsFileNode(node: Node): node is FileNode;
|
|
166
|
+
export interface BlockNode<Extensions extends ExpressionGrammar.EAST_Complex_Node | never> extends ExpressionGrammar.EAST_Complex_Node {
|
|
167
|
+
type: NodeType.BLOCK;
|
|
168
|
+
values: {
|
|
169
|
+
lines: (Extensions | CommentNode | DeclarationNode | StatementNode)[];
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
export function IsBlockNode(node: Node): node is BlockNode<ExpressionGrammar.EAST_Complex_Node>;
|
|
173
|
+
export interface ReturnNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
174
|
+
type: NodeType.RETURN;
|
|
175
|
+
values: ExpressionNode["values"];
|
|
176
|
+
}
|
|
177
|
+
export function IsReturnNode(node: Node): node is ReturnNode;
|
|
178
|
+
export interface CommentNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
179
|
+
type: NodeType.COMMENT;
|
|
180
|
+
values: {
|
|
181
|
+
comment: EAST_Token[];
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
export function IsCommentNode(node: Node): node is CommentNode;
|
|
185
|
+
export interface PreprocessorCommandNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
186
|
+
type: NodeType.PREPROCESSOR_COMMAND;
|
|
187
|
+
values: {
|
|
188
|
+
command: EAST_Token;
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
export function IsPreprocessorCommandNode(node: Node): node is PreprocessorCommandNode;
|
|
192
|
+
export interface FunctionParameterNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
193
|
+
type: NodeType.FUNCTION_PARAMETER;
|
|
194
|
+
values: DeclarationTypeNode["values"] & {
|
|
195
|
+
identifier: EAST_Token;
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
export function IsFunctionParameterNode(node: Node): node is FunctionParameterNode;
|
|
199
|
+
export interface FunctionDeclarationNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
200
|
+
type: NodeType.FUNCTION_DECLARATION;
|
|
201
|
+
values: {
|
|
202
|
+
returnType: EAST_Token;
|
|
203
|
+
name: EAST_Token;
|
|
204
|
+
parameters: FunctionParameterNode[];
|
|
205
|
+
body: BlockNode<ReturnNode>;
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
export function IsFunctionDeclarationNode(node: Node): node is FunctionDeclarationNode;
|
|
209
|
+
export interface FunctionCallNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
210
|
+
type: NodeType.FUNCTION_CALL;
|
|
211
|
+
values: {
|
|
212
|
+
name: EAST_Token | ExpressionNode;
|
|
213
|
+
arguments: ExpressionNode[];
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
export function IsFunctionCallNode(node: Node): node is FunctionCallNode;
|
|
217
|
+
export interface CastNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
218
|
+
type: NodeType.CAST;
|
|
219
|
+
values: {
|
|
220
|
+
expression: ArrayAccessSequenceNode | FunctionCallNode | ParenthetisedExpressionNode | EAST_Token | LiteralNode;
|
|
221
|
+
castType: EAST_Token;
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
export function IsCastNode(node: Node): node is CastNode;
|
|
225
|
+
export interface ForceCastNode extends ExpressionGrammar.EAST_Complex_Node {
|
|
226
|
+
type: NodeType.FORCE_CAST;
|
|
227
|
+
values: {
|
|
228
|
+
expression: ArrayAccessSequenceNode | FunctionCallNode | ParenthetisedExpressionNode | EAST_Token | LiteralNode | MemberAccessNode;
|
|
229
|
+
castType: EAST_Token;
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
export function IsForceCastNode(node: Node): node is ForceCastNode;
|
|
233
|
+
export {};
|
|
234
|
+
}
|