jitar 0.1.1 → 0.1.2

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 (180) hide show
  1. package/dist/core/Implementation.js +7 -0
  2. package/dist/core/errors/UnknownParameter.d.ts +3 -0
  3. package/dist/core/errors/UnknownParameter.js +6 -0
  4. package/dist/runtime/LocalRepository.d.ts +1 -1
  5. package/dist/runtime/LocalRepository.js +13 -4
  6. package/dist/server/configuration/RepositoryConfiguration.d.ts +1 -0
  7. package/dist/server/configuration/RepositoryConfiguration.js +7 -1
  8. package/dist/server/configuration/StandaloneConfiguration.d.ts +1 -0
  9. package/dist/server/configuration/StandaloneConfiguration.js +6 -0
  10. package/dist/server/utils/LocalFileManager.d.ts +1 -0
  11. package/dist/server/utils/LocalFileManager.js +19 -11
  12. package/dist/server/utils/RuntimeConfigurator.js +9 -4
  13. package/package.json +4 -1
  14. package/.eslintignore +0 -3
  15. package/.eslintrc +0 -16
  16. package/jest.config.js +0 -20
  17. package/src/client.ts +0 -18
  18. package/src/core/ErrorManager.ts +0 -18
  19. package/src/core/Implementation.ts +0 -53
  20. package/src/core/Procedure.ts +0 -98
  21. package/src/core/Segment.ts +0 -62
  22. package/src/core/SegmentBuilder.ts +0 -55
  23. package/src/core/Version.ts +0 -68
  24. package/src/core/definitions/AccessLevel.ts +0 -3
  25. package/src/core/errors/ImplementationNotFound.ts +0 -12
  26. package/src/core/errors/InvalidVersionNumber.ts +0 -12
  27. package/src/core/errors/MissingParameterValue.ts +0 -12
  28. package/src/core/errors/NotImplemented.ts +0 -12
  29. package/src/core/errors/ProcedureNotFound.ts +0 -12
  30. package/src/core/interfaces/Runner.ts +0 -7
  31. package/src/core/reflection/ParameterParser.ts +0 -74
  32. package/src/core/reflection/ReflectionHelper.ts +0 -118
  33. package/src/core/reflection/models/ReflectionField.ts +0 -22
  34. package/src/core/reflection/models/ReflectionParameter.ts +0 -18
  35. package/src/core/types/Component.ts +0 -8
  36. package/src/core/types/FlexObject.ts +0 -4
  37. package/src/core/types/Module.ts +0 -6
  38. package/src/core/types/SegmentImplementation.ts +0 -9
  39. package/src/core/types/SegmentModule.ts +0 -9
  40. package/src/core/types/SegmentProcedure.ts +0 -11
  41. package/src/core/utils/FqnBuilder.ts +0 -11
  42. package/src/hooks.ts +0 -2
  43. package/src/lib.ts +0 -7
  44. package/src/runtime/ClientId.ts +0 -18
  45. package/src/runtime/Gateway.ts +0 -18
  46. package/src/runtime/LocalGateway.ts +0 -93
  47. package/src/runtime/LocalNode.ts +0 -130
  48. package/src/runtime/LocalRepository.ts +0 -154
  49. package/src/runtime/Node.ts +0 -15
  50. package/src/runtime/NodeBalancer.ts +0 -61
  51. package/src/runtime/NodeMonitor.ts +0 -63
  52. package/src/runtime/Proxy.ts +0 -60
  53. package/src/runtime/Remote.ts +0 -157
  54. package/src/runtime/RemoteGateway.ts +0 -40
  55. package/src/runtime/RemoteNode.ts +0 -49
  56. package/src/runtime/RemoteRepository.ts +0 -60
  57. package/src/runtime/Repository.ts +0 -20
  58. package/src/runtime/Runtime.ts +0 -47
  59. package/src/runtime/caching/CacheBuilder.ts +0 -424
  60. package/src/runtime/caching/ImportRewriter.ts +0 -76
  61. package/src/runtime/caching/RemoteBuilder.ts +0 -51
  62. package/src/runtime/caching/SourceAppender.ts +0 -57
  63. package/src/runtime/caching/definitions/Keywords.ts +0 -3
  64. package/src/runtime/caching/errors/InvalidSegmentFilename.ts +0 -8
  65. package/src/runtime/caching/errors/MissingModuleExport.ts +0 -8
  66. package/src/runtime/caching/errors/SegmentFileNotLoaded.ts +0 -8
  67. package/src/runtime/caching/errors/SegmentModuleNotLoaded.ts +0 -8
  68. package/src/runtime/caching/models/ApplicationModule.ts +0 -30
  69. package/src/runtime/caching/models/Implementation.ts +0 -41
  70. package/src/runtime/caching/models/Procedure.ts +0 -26
  71. package/src/runtime/caching/models/Segment.ts +0 -28
  72. package/src/runtime/caching/models/SegmentModule.ts +0 -26
  73. package/src/runtime/caching/types/SegmentFile.ts +0 -6
  74. package/src/runtime/caching/types/SegmentImportProperties.ts +0 -9
  75. package/src/runtime/caching/types/SegmentImports.ts +0 -6
  76. package/src/runtime/errors/ClientNotFound.ts +0 -12
  77. package/src/runtime/errors/FileNotFound.ts +0 -12
  78. package/src/runtime/errors/InvalidClientId.ts +0 -12
  79. package/src/runtime/errors/InvalidJitarHooks.ts +0 -12
  80. package/src/runtime/errors/InvalidSegmentFile.ts +0 -12
  81. package/src/runtime/errors/ModuleNotLoaded.ts +0 -12
  82. package/src/runtime/errors/NoNodeAvailable.ts +0 -12
  83. package/src/runtime/errors/RepositoryNotAvaiable.ts +0 -12
  84. package/src/runtime/errors/RuntimeNotAvailable.ts +0 -12
  85. package/src/runtime/errors/SegmentNotFound.ts +0 -12
  86. package/src/runtime/hooks/dependencies.ts +0 -19
  87. package/src/runtime/hooks/runtime.ts +0 -25
  88. package/src/runtime/interfaces/FileManager.ts +0 -19
  89. package/src/runtime/interfaces/HealthCheck.ts +0 -5
  90. package/src/runtime/interfaces/ProcedureContainer.ts +0 -9
  91. package/src/runtime/models/File.ts +0 -22
  92. package/src/runtime/serialization/ArraySerializer.ts +0 -27
  93. package/src/runtime/serialization/ClassSerializer.ts +0 -133
  94. package/src/runtime/serialization/MapSerializer.ts +0 -60
  95. package/src/runtime/serialization/ObjectSerializer.ts +0 -42
  96. package/src/runtime/serialization/SetSerializer.ts +0 -42
  97. package/src/runtime/serialization/ValueSerializer.ts +0 -81
  98. package/src/runtime/serialization/errors/ClassNotFound.ts +0 -12
  99. package/src/runtime/serialization/errors/InvalidClass.ts +0 -12
  100. package/src/runtime/serialization/errors/InvalidPropertyType.ts +0 -12
  101. package/src/runtime/serialization/interfaces/Serializer.ts +0 -10
  102. package/src/runtime/serialization/types/SerializableObject.ts +0 -6
  103. package/src/runtime/serialization/types/Serialized.ts +0 -8
  104. package/src/runtime/serialization/types/SerializedClass.ts +0 -13
  105. package/src/runtime/serialization/types/SerializedMap.ts +0 -13
  106. package/src/runtime/serialization/types/SerializedObject.ts +0 -4
  107. package/src/runtime/serialization/types/SerializedSet.ts +0 -9
  108. package/src/runtime/types/JitarHooks.ts +0 -10
  109. package/src/runtime/types/ModuleImporter.ts +0 -6
  110. package/src/runtime/utils/ModuleAnalyser.ts +0 -60
  111. package/src/runtime/utils/ModuleLoader.ts +0 -51
  112. package/src/runtime/utils/UrlRewriter.ts +0 -59
  113. package/src/server/JitarServer.ts +0 -161
  114. package/src/server/configuration/GatewayConfiguration.ts +0 -9
  115. package/src/server/configuration/NodeConfiguration.ts +0 -15
  116. package/src/server/configuration/ProxyConfiguration.ts +0 -16
  117. package/src/server/configuration/RepositoryConfiguration.ts +0 -17
  118. package/src/server/configuration/RuntimeConfiguration.ts +0 -30
  119. package/src/server/configuration/ServerOptions.ts +0 -14
  120. package/src/server/configuration/StandaloneConfiguration.ts +0 -21
  121. package/src/server/controllers/AssetsController.ts +0 -59
  122. package/src/server/controllers/HealthController.ts +0 -41
  123. package/src/server/controllers/JitarController.ts +0 -18
  124. package/src/server/controllers/ModulesController.ts +0 -77
  125. package/src/server/controllers/NodesController.ts +0 -58
  126. package/src/server/controllers/ProceduresController.ts +0 -31
  127. package/src/server/controllers/ProxyController.ts +0 -38
  128. package/src/server/controllers/RPCController.ts +0 -173
  129. package/src/server/definitions/RuntimeDefaults.ts +0 -10
  130. package/src/server/errors/MissingConfigurationValue.ts +0 -8
  131. package/src/server/errors/RuntimeNotAvaiable.ts +0 -8
  132. package/src/server/errors/UnknownRuntimeMode.ts +0 -8
  133. package/src/server/models/HealthDto.ts +0 -11
  134. package/src/server/models/NodeDto.ts +0 -11
  135. package/src/server/utils/DataConverter.ts +0 -15
  136. package/src/server/utils/LocalFileManager.ts +0 -122
  137. package/src/server/utils/RuntimeConfigurationLoader.ts +0 -19
  138. package/src/server/utils/RuntimeConfigurator.ts +0 -207
  139. package/src/server/utils/ServerOptionsReader.ts +0 -17
  140. package/src/server.ts +0 -16
  141. package/test/_fixtures/core/Implementation.fixture.ts +0 -33
  142. package/test/_fixtures/core/Procedure.fixture.ts +0 -33
  143. package/test/_fixtures/core/Segment.fixture.ts +0 -36
  144. package/test/_fixtures/core/SegmentBuilder.fixture.ts +0 -45
  145. package/test/_fixtures/core/Version.fixture.ts +0 -18
  146. package/test/_fixtures/core/reflection/ReflectionHelper.fixture.ts +0 -56
  147. package/test/_fixtures/runtime/LocalGateway.fixture.ts +0 -24
  148. package/test/_fixtures/runtime/LocalNode.fixture.ts +0 -16
  149. package/test/_fixtures/runtime/LocalRepository.fixture.ts +0 -73
  150. package/test/_fixtures/runtime/NodeBalancer.fixture.ts +0 -19
  151. package/test/_fixtures/runtime/NodeMonitor.fixture.ts +0 -34
  152. package/test/_fixtures/runtime/RemoteNode.fixture.ts +0 -8
  153. package/test/_fixtures/runtime/caching/ImportRewriter.fixture.ts +0 -81
  154. package/test/_fixtures/runtime/caching/RemoteBuilder.fixture.ts +0 -50
  155. package/test/_fixtures/runtime/caching/SourceAppender.fixture.ts +0 -35
  156. package/test/_fixtures/runtime/segments.ts +0 -78
  157. package/test/_fixtures/runtime/serialization/ValueSerializer.fixture.ts +0 -134
  158. package/test/_fixtures/runtime/utils/ModuleAnaliser.fixture.ts +0 -26
  159. package/test/core/Implementation.spec.ts +0 -89
  160. package/test/core/Procedure.spec.ts +0 -108
  161. package/test/core/Segment.spec.ts +0 -74
  162. package/test/core/SegmentBuilder.spec.ts +0 -39
  163. package/test/core/Version.spec.ts +0 -103
  164. package/test/core/errors/ErrorManager.spec.ts +0 -32
  165. package/test/core/reflection/ReflectionHelper.spec.ts +0 -128
  166. package/test/core/utils/FqnBuilder.spec.ts +0 -22
  167. package/test/runtime/ClientId.spec.ts +0 -43
  168. package/test/runtime/LocalGateway.spec.ts +0 -40
  169. package/test/runtime/LocalNode.spec.ts +0 -87
  170. package/test/runtime/LocalRepository.spec.ts +0 -50
  171. package/test/runtime/NodeBalancer.spec.ts +0 -39
  172. package/test/runtime/NodeMonitor.spec.ts +0 -31
  173. package/test/runtime/RemoteNode.spec.ts +0 -43
  174. package/test/runtime/caching/ImportRewriter.spec.ts +0 -68
  175. package/test/runtime/caching/RemoteBuilder.spec.ts +0 -21
  176. package/test/runtime/caching/SourceAppender.spec.ts +0 -31
  177. package/test/runtime/serialization/ValueSerializer.spec.ts +0 -203
  178. package/test/runtime/utils/ModuleAnalyser.spec.ts +0 -54
  179. package/test/runtime/utils/UrlRewriter.spec.ts +0 -57
  180. package/tsconfig.json +0 -23
@@ -1,3 +0,0 @@
1
-
2
- export const PRIVATE = 'private';
3
- export const PUBLIC = 'public';
@@ -1,12 +0,0 @@
1
-
2
- import Component from '../types/Component.js';
3
-
4
- export default class ImplementationNotFound extends Error
5
- {
6
- constructor(fqn: string, version: string)
7
- {
8
- super(`No implementation found for procedure '${fqn}' with version '${version}'`);
9
- }
10
- }
11
-
12
- (ImplementationNotFound as Component).source = '/jitar/core/errors/ImplementationNotFound.js';
@@ -1,12 +0,0 @@
1
-
2
- import Component from '../types/Component.js';
3
-
4
- export default class InvalidVersionNumber extends Error
5
- {
6
- constructor(number: string)
7
- {
8
- super(`Invalid version number '${number}'`);
9
- }
10
- }
11
-
12
- (InvalidVersionNumber as Component).source = '/jitar/core/errors/InvalidVersionNumber.js';
@@ -1,12 +0,0 @@
1
-
2
- import Component from '../types/Component.js';
3
-
4
- export default class MissingParameterValue extends Error
5
- {
6
- constructor(parameterName: string)
7
- {
8
- super(`Missing value for parameter '${parameterName}'`);
9
- }
10
- }
11
-
12
- (MissingParameterValue as Component).source = '/jitar/core/errors/MissingParameterValue.js';
@@ -1,12 +0,0 @@
1
-
2
- import Component from '../types/Component.js';
3
-
4
- export default class NotImplemented extends Error
5
- {
6
- constructor()
7
- {
8
- super('Not implemented');
9
- }
10
- }
11
-
12
- (NotImplemented as Component).source = '/jitar/core/errors/NotImplemented.js';
@@ -1,12 +0,0 @@
1
-
2
- import Component from '../types/Component.js';
3
-
4
- export default class ProcedureNotFound extends Error
5
- {
6
- constructor(fqn: string)
7
- {
8
- super(`Procedure '${fqn}' not found`);
9
- }
10
- }
11
-
12
- (ProcedureNotFound as Component).source = '/jitar/core/errors/ProcedureNotFound.js';
@@ -1,7 +0,0 @@
1
-
2
- import Version from '../Version.js';
3
-
4
- export default interface Runner
5
- {
6
- run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
7
- }
@@ -1,74 +0,0 @@
1
-
2
- import ReflectionParameter from './models/ReflectionParameter.js';
3
-
4
- const STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
5
-
6
- export default class ParameterParser
7
- {
8
- static parse(code: string, functionIndicator: string): ReflectionParameter[]
9
- {
10
- const pureCode = this.#removeComments(code);
11
- const parameterString = this.#extractParameterString(pureCode, functionIndicator);
12
- const parameterList = this.#parseParamaterString(parameterString);
13
-
14
- return parameterList.map(parameter => this.#extractParameter(parameter));
15
- }
16
-
17
- static #removeComments(code: string): string
18
- {
19
- return code.replace(STRIP_COMMENTS, '');
20
- }
21
-
22
- static #extractParameterString(code: string, functionIndicator: string): string
23
- {
24
- const indicatorPosition = code.indexOf(functionIndicator);
25
-
26
- const bodyStart = code.indexOf('{', indicatorPosition);
27
- const definition = code.substring(indicatorPosition, bodyStart).trim();
28
-
29
- const startPosition = definition.indexOf('(') + 1;
30
- const endPosition = definition.lastIndexOf(')', startPosition);
31
-
32
- return definition.slice(startPosition, endPosition);
33
- }
34
-
35
- static #parseParamaterString(parameterString: string): string[]
36
- {
37
- const parameters: string[] = [];
38
-
39
- let level = 0;
40
- let buffer = '';
41
-
42
- for (let character of parameterString)
43
- {
44
- switch (character)
45
- {
46
- case '(': level++; break;
47
- case ')': level--; break;
48
- case ',':
49
- if (level === 0)
50
- {
51
- parameters.push(buffer);
52
- character = '';
53
- buffer = '';
54
- }
55
- }
56
-
57
- buffer += character;
58
- }
59
-
60
- if (buffer !== '')
61
- {
62
- parameters.push(buffer);
63
- }
64
-
65
- return parameters;
66
- }
67
-
68
- static #extractParameter(parameter: string): ReflectionParameter
69
- {
70
- const [name, defaultValue] = parameter.split('=').map(part => part.trim());
71
-
72
- return new ReflectionParameter(name, defaultValue);
73
- }
74
- }
@@ -1,118 +0,0 @@
1
-
2
- import ReflectionField from './models/ReflectionField.js';
3
- import ReflectionParameter from './models/ReflectionParameter.js';
4
- import ParameterParser from './ParameterParser.js';
5
-
6
- const CONSTRUCTOR_NAME = 'constructor';
7
- const FUNCTION_NAME = 'function';
8
-
9
- export default class ReflectionHelper
10
- {
11
- static createInstance(clazz: Function, args: unknown[] = []): object
12
- {
13
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
- return new (clazz as any)(...args);
15
- }
16
-
17
- static isClassObject(object: object): boolean
18
- {
19
- return object.constructor.toString().startsWith('class');
20
- }
21
-
22
- static getObjectClass(object: object): Function
23
- {
24
- return object.constructor;
25
- }
26
-
27
- static getParentClass(clazz: Function): Function
28
- {
29
- return Object.getPrototypeOf(clazz);
30
- }
31
-
32
- static getFields(clazz: Function): ReflectionField[]
33
- {
34
- const object = this.createInstance(clazz);
35
- const publicFields = this.#getPublicFields(object);
36
- const propertyFields = this.#getPropertyFields(clazz);
37
-
38
- return [...publicFields, ...propertyFields];
39
- }
40
-
41
- static getObjectFields(object: object): ReflectionField[]
42
- {
43
- const clazz = this.getObjectClass(object);
44
- const publicFields = this.#getPublicFields(object);
45
- const propertyFields = this.#getPropertyFields(clazz);
46
-
47
- return [...publicFields, ...propertyFields];
48
- }
49
-
50
- static #getPublicFields(object: object): ReflectionField[]
51
- {
52
- const fieldNames = Object.getOwnPropertyNames(object);
53
-
54
- return fieldNames.map(fieldName => new ReflectionField(fieldName, true, true));
55
- }
56
-
57
- static #getPropertyFields(clazz: Function): ReflectionField[]
58
- {
59
- const methods = Object.getOwnPropertyDescriptors(clazz.prototype);
60
-
61
- const fields = [];
62
-
63
- for (const name in methods)
64
- {
65
- const description = methods[name];
66
-
67
- const hasGetter = description.get !== undefined;
68
- const hasSetter = description.set !== undefined;
69
-
70
- if (hasGetter === false && hasSetter === false)
71
- {
72
- // This is not a property.
73
-
74
- continue;
75
- }
76
-
77
- fields.push(new ReflectionField(name, hasGetter, hasSetter));
78
- }
79
-
80
- const parentClazz = this.getParentClass(clazz);
81
-
82
- if (parentClazz.name !== '')
83
- {
84
- const parentFields = this.#getPropertyFields(parentClazz);
85
-
86
- return [...fields, ...parentFields];
87
- }
88
-
89
- return fields;
90
- }
91
-
92
- static getConstructorParameters(clazz: Function): ReflectionParameter[]
93
- {
94
- const code = clazz.toString();
95
- const hasConstructor = code.includes(CONSTRUCTOR_NAME);
96
-
97
- if (hasConstructor === false)
98
- {
99
- const parentClazz = this.getParentClass(clazz);
100
-
101
- if (parentClazz.name === '')
102
- {
103
- return [];
104
- }
105
-
106
- return this.getConstructorParameters(parentClazz);
107
- }
108
-
109
- return ParameterParser.parse(code, CONSTRUCTOR_NAME);
110
- }
111
-
112
- static getFunctionParameters(funktion: Function): ReflectionParameter[]
113
- {
114
- const code = funktion.toString();
115
-
116
- return ParameterParser.parse(code, FUNCTION_NAME);
117
- }
118
- }
@@ -1,22 +0,0 @@
1
-
2
- export default class ReflectionField
3
- {
4
- #name: string;
5
- #canGet: boolean;
6
- #canSet: boolean;
7
-
8
- constructor(name: string, canGet: boolean, canSet: boolean)
9
- {
10
- this.#name = name;
11
- this.#canGet = canGet;
12
- this.#canSet = canSet;
13
- }
14
-
15
- get name() { return this.#name; }
16
-
17
- get canGet() { return this.#canGet; }
18
-
19
- get canSet() { return this.#canSet; }
20
-
21
- get canGetAndSet() { return this.#canGet && this.#canSet; }
22
- }
@@ -1,18 +0,0 @@
1
-
2
- export default class ReflectionParameter
3
- {
4
- #name: string;
5
- #defaultValue?: string;
6
-
7
- constructor(name: string, defaultValue?: string)
8
- {
9
- this.#name = name;
10
- this.#defaultValue = defaultValue;
11
- }
12
-
13
- get name() { return this.#name; }
14
-
15
- get defaultValue() { return this.#defaultValue; }
16
-
17
- get isOptional() { return this.#defaultValue !== undefined; }
18
- }
@@ -1,8 +0,0 @@
1
-
2
- type Component =
3
- {
4
- name: string;
5
- source?: string;
6
- }
7
-
8
- export default Component;
@@ -1,4 +0,0 @@
1
-
2
- type FlexObject = { [key: string]: unknown };
3
-
4
- export default FlexObject;
@@ -1,6 +0,0 @@
1
-
2
- import FlexObject from './FlexObject.js';
3
-
4
- type Module = FlexObject;
5
-
6
- export default Module;
@@ -1,9 +0,0 @@
1
-
2
- type SegmentImplementation =
3
- {
4
- access: string;
5
- version: string;
6
- executable: Function;
7
- }
8
-
9
- export default SegmentImplementation;
@@ -1,9 +0,0 @@
1
-
2
- import SegmentProcedure from './SegmentProcedure.js';
3
-
4
- type SegmentModule =
5
- {
6
- procedures: SegmentProcedure[]
7
- };
8
-
9
- export default SegmentModule;
@@ -1,11 +0,0 @@
1
-
2
- import SegmentImplementation from './SegmentImplementation.js';
3
-
4
- type SegmentProcedure =
5
- {
6
- module: string;
7
- name: string;
8
- implementations: SegmentImplementation[];
9
- }
10
-
11
- export default SegmentProcedure;
@@ -1,11 +0,0 @@
1
-
2
- export default class FqnBuilder
3
- {
4
- static build(module: string, name: string): string
5
- {
6
- // Fully qualified name, used to identify procedures
7
- // Format: module/name (e.g. greetings/sayHello)
8
-
9
- return module !== '' ? `${module}/${name}` : name;
10
- }
11
- }
package/src/hooks.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from './runtime/hooks/dependencies.js';
2
- export * from './runtime/hooks/runtime.js';
package/src/lib.ts DELETED
@@ -1,7 +0,0 @@
1
- // Interfaces
2
- export { default as HealthCheck } from './runtime/interfaces/HealthCheck.js';
3
-
4
- // Hooks
5
- export * from './client.js';
6
- export * from './server.js';
7
- export * from './hooks.js';
@@ -1,18 +0,0 @@
1
-
2
- const CLIENT_ID_PREFIX = 'CLIENT_';
3
- const CLIENT_ID_REGEX = /^CLIENT_\d+$/;
4
-
5
- let lastClientId = 0;
6
-
7
- export default class ClientId
8
- {
9
- static generate(): string
10
- {
11
- return `${CLIENT_ID_PREFIX}${lastClientId++}`;
12
- }
13
-
14
- static validate(clientId: string): boolean
15
- {
16
- return CLIENT_ID_REGEX.test(clientId);
17
- }
18
- }
@@ -1,18 +0,0 @@
1
-
2
- import Version from '../core/Version.js';
3
-
4
- import ProcedureContainer from './interfaces/ProcedureContainer.js';
5
-
6
- import Node from './Node.js';
7
- import Runtime from './Runtime.js';
8
-
9
- export default abstract class Gateway extends Runtime implements ProcedureContainer
10
- {
11
- abstract getProcedureNames(): string[];
12
-
13
- abstract hasProcedure(name: string): boolean;
14
-
15
- abstract addNode(node: Node): Promise<void>;
16
-
17
- abstract run(name: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
18
- }
@@ -1,93 +0,0 @@
1
-
2
- import ProcedureNotFound from '../core/errors/ProcedureNotFound.js';
3
- import Version from '../core/Version.js';
4
-
5
- import Gateway from './Gateway.js';
6
- import Node from './Node.js';
7
- import NodeBalancer from './NodeBalancer.js';
8
-
9
- export default class LocalGateway extends Gateway
10
- {
11
- #nodes: Set<Node> = new Set();
12
- #balancers: Map<string, NodeBalancer> = new Map();
13
-
14
- get nodes()
15
- {
16
- return [...this.#nodes.values()];
17
- }
18
-
19
- getProcedureNames(): string[]
20
- {
21
- const procedureNames = this.nodes.map(node => node.getProcedureNames());
22
- const uniqueNames = new Set(procedureNames.flat());
23
-
24
- return [...uniqueNames.values()];
25
- }
26
-
27
- hasProcedure(fqn: string): boolean
28
- {
29
- const procedureNames = this.getProcedureNames();
30
-
31
- return procedureNames.includes(fqn);
32
- }
33
-
34
- async addNode(node: Node): Promise<void>
35
- {
36
- this.#nodes.add(node);
37
-
38
- for (const name of node.getProcedureNames())
39
- {
40
- const balancer = this.#getOrCreateBalancer(name);
41
-
42
- balancer.addNode(node);
43
- }
44
- }
45
-
46
- removeNode(node: Node): void
47
- {
48
- this.#nodes.delete(node);
49
-
50
- for (const name of node.getProcedureNames())
51
- {
52
- const balancer = this.#getBalancer(name);
53
-
54
- if (balancer === undefined)
55
- {
56
- continue;
57
- }
58
-
59
- balancer.removeNode(node);
60
- }
61
- }
62
-
63
- #getBalancer(fqn: string): NodeBalancer | undefined
64
- {
65
- return this.#balancers.get(fqn);
66
- }
67
-
68
- #getOrCreateBalancer(fqn: string): NodeBalancer
69
- {
70
- let balancer = this.#getBalancer(fqn);
71
-
72
- if (balancer === undefined)
73
- {
74
- balancer = new NodeBalancer();
75
-
76
- this.#balancers.set(fqn, balancer);
77
- }
78
-
79
- return balancer;
80
- }
81
-
82
- async run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>
83
- {
84
- const balancer = this.#getBalancer(fqn);
85
-
86
- if (balancer === undefined)
87
- {
88
- throw new ProcedureNotFound(fqn);
89
- }
90
-
91
- return balancer.run(fqn, version, args);
92
- }
93
- }
@@ -1,130 +0,0 @@
1
-
2
- import ProcedureNotFound from '../core/errors/ProcedureNotFound.js';
3
- import Segment from '../core/Segment.js';
4
- import SegmentBuilder from '../core/SegmentBuilder.js';
5
- import Version from '../core/Version.js';
6
- import Module from '../core/types/Module.js';
7
- import SegmentModule from '../core/types/SegmentModule.js';
8
-
9
- import RepositoryNotAvailable from './errors/RepositoryNotAvaiable.js';
10
- import Gateway from './Gateway.js';
11
- import LocalGateway from './LocalGateway.js';
12
- import Node from './Node.js';
13
- import Repository from './Repository.js';
14
- import ModuleLoader from './utils/ModuleLoader.js';
15
- import UrlRewriter from './utils/UrlRewriter.js';
16
-
17
- export default class LocalNode extends Node
18
- {
19
- #segments: Map<string, Segment> = new Map();
20
- #gateway?: Gateway;
21
- #repository?: Repository;
22
- #clientId = '';
23
-
24
- getProcedureNames(): string[]
25
- {
26
- const names: Set<string> = new Set();
27
-
28
- for (const segment of this.#segments.values())
29
- {
30
- // We only expose the public procedures
31
- // to protect access to private procedures
32
-
33
- const procedures = segment.getPublicProcedures();
34
-
35
- procedures.forEach(procedure => names.add(procedure.fqn));
36
- }
37
-
38
- return [...names.values()];
39
- }
40
-
41
- async loadSegment(name: string): Promise<void>
42
- {
43
- const segmentFile = `${name}.segment.local.js`;
44
- const module = await this.import(segmentFile) as SegmentModule;
45
- const segment = SegmentBuilder.build(name, module);
46
-
47
- this.addSegment(segment);
48
- }
49
-
50
- addSegment(segment: Segment): void
51
- {
52
- this.#segments.set(segment.id, segment);
53
- }
54
-
55
- getSegment(id: string): Segment | undefined
56
- {
57
- return this.#segments.get(id);
58
- }
59
-
60
- hasProcedure(fqn: string): boolean
61
- {
62
- const procedureNames = this.getProcedureNames();
63
-
64
- return procedureNames.includes(fqn);
65
- }
66
-
67
- #getProcedureSegment(fqn: string): Segment | undefined
68
- {
69
- for (const segment of this.#segments.values())
70
- {
71
- if (segment.hasProcedure(fqn))
72
- {
73
- return segment;
74
- }
75
- }
76
-
77
- return undefined;
78
- }
79
-
80
- async setGateway(gateway: Gateway): Promise<void>
81
- {
82
- if (gateway instanceof LocalGateway || this.url !== undefined)
83
- {
84
- await gateway.addNode(this);
85
- }
86
-
87
- this.#gateway = gateway;
88
- }
89
-
90
- async setRepository(repository: Repository, segmentNames: string[]): Promise<void>
91
- {
92
- this.#clientId = await repository.registerClient(segmentNames);
93
-
94
- await repository.setRuntime(this);
95
-
96
- const moduleLocation = await repository.getModuleLocation(this.#clientId);
97
-
98
- ModuleLoader.setBaseUrl(moduleLocation);
99
-
100
- this.#repository = repository;
101
- }
102
-
103
- async import(url: string, base?: string): Promise<Module>
104
- {
105
- if (this.#repository === undefined)
106
- {
107
- throw new RepositoryNotAvailable();
108
- }
109
-
110
- if (base !== undefined)
111
- {
112
- url = UrlRewriter.addBase(url, base);
113
- }
114
-
115
- return this.#repository.importModule(this.#clientId, url);
116
- }
117
-
118
- async run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>
119
- {
120
- const segment = this.#getProcedureSegment(fqn);
121
- const runner = segment ?? this.#gateway;
122
-
123
- if (runner === undefined)
124
- {
125
- throw new ProcedureNotFound(fqn);
126
- }
127
-
128
- return runner.run(fqn, version, args);
129
- }
130
- }