jitar 0.1.1 → 0.1.3

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 (183) hide show
  1. package/dist/client.d.ts +1 -0
  2. package/dist/client.js +12 -0
  3. package/dist/core/Implementation.js +7 -0
  4. package/dist/core/errors/UnknownParameter.d.ts +3 -0
  5. package/dist/core/errors/UnknownParameter.js +6 -0
  6. package/dist/runtime/LocalRepository.d.ts +1 -1
  7. package/dist/runtime/LocalRepository.js +13 -4
  8. package/dist/server/configuration/RepositoryConfiguration.d.ts +1 -0
  9. package/dist/server/configuration/RepositoryConfiguration.js +7 -1
  10. package/dist/server/configuration/StandaloneConfiguration.d.ts +1 -0
  11. package/dist/server/configuration/StandaloneConfiguration.js +6 -0
  12. package/dist/server/controllers/RPCController.js +20 -3
  13. package/dist/server/utils/LocalFileManager.d.ts +1 -0
  14. package/dist/server/utils/LocalFileManager.js +19 -11
  15. package/dist/server/utils/RuntimeConfigurator.js +9 -4
  16. package/package.json +6 -2
  17. package/.eslintignore +0 -3
  18. package/.eslintrc +0 -16
  19. package/jest.config.js +0 -20
  20. package/src/client.ts +0 -18
  21. package/src/core/ErrorManager.ts +0 -18
  22. package/src/core/Implementation.ts +0 -53
  23. package/src/core/Procedure.ts +0 -98
  24. package/src/core/Segment.ts +0 -62
  25. package/src/core/SegmentBuilder.ts +0 -55
  26. package/src/core/Version.ts +0 -68
  27. package/src/core/definitions/AccessLevel.ts +0 -3
  28. package/src/core/errors/ImplementationNotFound.ts +0 -12
  29. package/src/core/errors/InvalidVersionNumber.ts +0 -12
  30. package/src/core/errors/MissingParameterValue.ts +0 -12
  31. package/src/core/errors/NotImplemented.ts +0 -12
  32. package/src/core/errors/ProcedureNotFound.ts +0 -12
  33. package/src/core/interfaces/Runner.ts +0 -7
  34. package/src/core/reflection/ParameterParser.ts +0 -74
  35. package/src/core/reflection/ReflectionHelper.ts +0 -118
  36. package/src/core/reflection/models/ReflectionField.ts +0 -22
  37. package/src/core/reflection/models/ReflectionParameter.ts +0 -18
  38. package/src/core/types/Component.ts +0 -8
  39. package/src/core/types/FlexObject.ts +0 -4
  40. package/src/core/types/Module.ts +0 -6
  41. package/src/core/types/SegmentImplementation.ts +0 -9
  42. package/src/core/types/SegmentModule.ts +0 -9
  43. package/src/core/types/SegmentProcedure.ts +0 -11
  44. package/src/core/utils/FqnBuilder.ts +0 -11
  45. package/src/hooks.ts +0 -2
  46. package/src/lib.ts +0 -7
  47. package/src/runtime/ClientId.ts +0 -18
  48. package/src/runtime/Gateway.ts +0 -18
  49. package/src/runtime/LocalGateway.ts +0 -93
  50. package/src/runtime/LocalNode.ts +0 -130
  51. package/src/runtime/LocalRepository.ts +0 -154
  52. package/src/runtime/Node.ts +0 -15
  53. package/src/runtime/NodeBalancer.ts +0 -61
  54. package/src/runtime/NodeMonitor.ts +0 -63
  55. package/src/runtime/Proxy.ts +0 -60
  56. package/src/runtime/Remote.ts +0 -157
  57. package/src/runtime/RemoteGateway.ts +0 -40
  58. package/src/runtime/RemoteNode.ts +0 -49
  59. package/src/runtime/RemoteRepository.ts +0 -60
  60. package/src/runtime/Repository.ts +0 -20
  61. package/src/runtime/Runtime.ts +0 -47
  62. package/src/runtime/caching/CacheBuilder.ts +0 -424
  63. package/src/runtime/caching/ImportRewriter.ts +0 -76
  64. package/src/runtime/caching/RemoteBuilder.ts +0 -51
  65. package/src/runtime/caching/SourceAppender.ts +0 -57
  66. package/src/runtime/caching/definitions/Keywords.ts +0 -3
  67. package/src/runtime/caching/errors/InvalidSegmentFilename.ts +0 -8
  68. package/src/runtime/caching/errors/MissingModuleExport.ts +0 -8
  69. package/src/runtime/caching/errors/SegmentFileNotLoaded.ts +0 -8
  70. package/src/runtime/caching/errors/SegmentModuleNotLoaded.ts +0 -8
  71. package/src/runtime/caching/models/ApplicationModule.ts +0 -30
  72. package/src/runtime/caching/models/Implementation.ts +0 -41
  73. package/src/runtime/caching/models/Procedure.ts +0 -26
  74. package/src/runtime/caching/models/Segment.ts +0 -28
  75. package/src/runtime/caching/models/SegmentModule.ts +0 -26
  76. package/src/runtime/caching/types/SegmentFile.ts +0 -6
  77. package/src/runtime/caching/types/SegmentImportProperties.ts +0 -9
  78. package/src/runtime/caching/types/SegmentImports.ts +0 -6
  79. package/src/runtime/errors/ClientNotFound.ts +0 -12
  80. package/src/runtime/errors/FileNotFound.ts +0 -12
  81. package/src/runtime/errors/InvalidClientId.ts +0 -12
  82. package/src/runtime/errors/InvalidJitarHooks.ts +0 -12
  83. package/src/runtime/errors/InvalidSegmentFile.ts +0 -12
  84. package/src/runtime/errors/ModuleNotLoaded.ts +0 -12
  85. package/src/runtime/errors/NoNodeAvailable.ts +0 -12
  86. package/src/runtime/errors/RepositoryNotAvaiable.ts +0 -12
  87. package/src/runtime/errors/RuntimeNotAvailable.ts +0 -12
  88. package/src/runtime/errors/SegmentNotFound.ts +0 -12
  89. package/src/runtime/hooks/dependencies.ts +0 -19
  90. package/src/runtime/hooks/runtime.ts +0 -25
  91. package/src/runtime/interfaces/FileManager.ts +0 -19
  92. package/src/runtime/interfaces/HealthCheck.ts +0 -5
  93. package/src/runtime/interfaces/ProcedureContainer.ts +0 -9
  94. package/src/runtime/models/File.ts +0 -22
  95. package/src/runtime/serialization/ArraySerializer.ts +0 -27
  96. package/src/runtime/serialization/ClassSerializer.ts +0 -133
  97. package/src/runtime/serialization/MapSerializer.ts +0 -60
  98. package/src/runtime/serialization/ObjectSerializer.ts +0 -42
  99. package/src/runtime/serialization/SetSerializer.ts +0 -42
  100. package/src/runtime/serialization/ValueSerializer.ts +0 -81
  101. package/src/runtime/serialization/errors/ClassNotFound.ts +0 -12
  102. package/src/runtime/serialization/errors/InvalidClass.ts +0 -12
  103. package/src/runtime/serialization/errors/InvalidPropertyType.ts +0 -12
  104. package/src/runtime/serialization/interfaces/Serializer.ts +0 -10
  105. package/src/runtime/serialization/types/SerializableObject.ts +0 -6
  106. package/src/runtime/serialization/types/Serialized.ts +0 -8
  107. package/src/runtime/serialization/types/SerializedClass.ts +0 -13
  108. package/src/runtime/serialization/types/SerializedMap.ts +0 -13
  109. package/src/runtime/serialization/types/SerializedObject.ts +0 -4
  110. package/src/runtime/serialization/types/SerializedSet.ts +0 -9
  111. package/src/runtime/types/JitarHooks.ts +0 -10
  112. package/src/runtime/types/ModuleImporter.ts +0 -6
  113. package/src/runtime/utils/ModuleAnalyser.ts +0 -60
  114. package/src/runtime/utils/ModuleLoader.ts +0 -51
  115. package/src/runtime/utils/UrlRewriter.ts +0 -59
  116. package/src/server/JitarServer.ts +0 -161
  117. package/src/server/configuration/GatewayConfiguration.ts +0 -9
  118. package/src/server/configuration/NodeConfiguration.ts +0 -15
  119. package/src/server/configuration/ProxyConfiguration.ts +0 -16
  120. package/src/server/configuration/RepositoryConfiguration.ts +0 -17
  121. package/src/server/configuration/RuntimeConfiguration.ts +0 -30
  122. package/src/server/configuration/ServerOptions.ts +0 -14
  123. package/src/server/configuration/StandaloneConfiguration.ts +0 -21
  124. package/src/server/controllers/AssetsController.ts +0 -59
  125. package/src/server/controllers/HealthController.ts +0 -41
  126. package/src/server/controllers/JitarController.ts +0 -18
  127. package/src/server/controllers/ModulesController.ts +0 -77
  128. package/src/server/controllers/NodesController.ts +0 -58
  129. package/src/server/controllers/ProceduresController.ts +0 -31
  130. package/src/server/controllers/ProxyController.ts +0 -38
  131. package/src/server/controllers/RPCController.ts +0 -173
  132. package/src/server/definitions/RuntimeDefaults.ts +0 -10
  133. package/src/server/errors/MissingConfigurationValue.ts +0 -8
  134. package/src/server/errors/RuntimeNotAvaiable.ts +0 -8
  135. package/src/server/errors/UnknownRuntimeMode.ts +0 -8
  136. package/src/server/models/HealthDto.ts +0 -11
  137. package/src/server/models/NodeDto.ts +0 -11
  138. package/src/server/utils/DataConverter.ts +0 -15
  139. package/src/server/utils/LocalFileManager.ts +0 -122
  140. package/src/server/utils/RuntimeConfigurationLoader.ts +0 -19
  141. package/src/server/utils/RuntimeConfigurator.ts +0 -207
  142. package/src/server/utils/ServerOptionsReader.ts +0 -17
  143. package/src/server.ts +0 -16
  144. package/test/_fixtures/core/Implementation.fixture.ts +0 -33
  145. package/test/_fixtures/core/Procedure.fixture.ts +0 -33
  146. package/test/_fixtures/core/Segment.fixture.ts +0 -36
  147. package/test/_fixtures/core/SegmentBuilder.fixture.ts +0 -45
  148. package/test/_fixtures/core/Version.fixture.ts +0 -18
  149. package/test/_fixtures/core/reflection/ReflectionHelper.fixture.ts +0 -56
  150. package/test/_fixtures/runtime/LocalGateway.fixture.ts +0 -24
  151. package/test/_fixtures/runtime/LocalNode.fixture.ts +0 -16
  152. package/test/_fixtures/runtime/LocalRepository.fixture.ts +0 -73
  153. package/test/_fixtures/runtime/NodeBalancer.fixture.ts +0 -19
  154. package/test/_fixtures/runtime/NodeMonitor.fixture.ts +0 -34
  155. package/test/_fixtures/runtime/RemoteNode.fixture.ts +0 -8
  156. package/test/_fixtures/runtime/caching/ImportRewriter.fixture.ts +0 -81
  157. package/test/_fixtures/runtime/caching/RemoteBuilder.fixture.ts +0 -50
  158. package/test/_fixtures/runtime/caching/SourceAppender.fixture.ts +0 -35
  159. package/test/_fixtures/runtime/segments.ts +0 -78
  160. package/test/_fixtures/runtime/serialization/ValueSerializer.fixture.ts +0 -134
  161. package/test/_fixtures/runtime/utils/ModuleAnaliser.fixture.ts +0 -26
  162. package/test/core/Implementation.spec.ts +0 -89
  163. package/test/core/Procedure.spec.ts +0 -108
  164. package/test/core/Segment.spec.ts +0 -74
  165. package/test/core/SegmentBuilder.spec.ts +0 -39
  166. package/test/core/Version.spec.ts +0 -103
  167. package/test/core/errors/ErrorManager.spec.ts +0 -32
  168. package/test/core/reflection/ReflectionHelper.spec.ts +0 -128
  169. package/test/core/utils/FqnBuilder.spec.ts +0 -22
  170. package/test/runtime/ClientId.spec.ts +0 -43
  171. package/test/runtime/LocalGateway.spec.ts +0 -40
  172. package/test/runtime/LocalNode.spec.ts +0 -87
  173. package/test/runtime/LocalRepository.spec.ts +0 -50
  174. package/test/runtime/NodeBalancer.spec.ts +0 -39
  175. package/test/runtime/NodeMonitor.spec.ts +0 -31
  176. package/test/runtime/RemoteNode.spec.ts +0 -43
  177. package/test/runtime/caching/ImportRewriter.spec.ts +0 -68
  178. package/test/runtime/caching/RemoteBuilder.spec.ts +0 -21
  179. package/test/runtime/caching/SourceAppender.spec.ts +0 -31
  180. package/test/runtime/serialization/ValueSerializer.spec.ts +0 -203
  181. package/test/runtime/utils/ModuleAnalyser.spec.ts +0 -54
  182. package/test/runtime/utils/UrlRewriter.spec.ts +0 -57
  183. package/tsconfig.json +0 -23
@@ -1,173 +0,0 @@
1
-
2
- import { Controller, Get, Post } from '@overnightjs/core';
3
- import { Request, Response } from 'express';
4
- import { Logger } from 'tslog';
5
-
6
- import Version from '../../core/Version.js';
7
-
8
- import ProcedureContainer from '../../runtime/interfaces/ProcedureContainer.js';
9
- import ValueSerializer from '../../runtime/serialization/ValueSerializer.js';
10
-
11
- const RPC_PARAMETERS = ['version', 'serialize'];
12
-
13
- @Controller('rpc')
14
- export default class RPCController
15
- {
16
- #runtime: ProcedureContainer;
17
- #logger: Logger;
18
- #useSerializer: boolean;
19
-
20
- constructor(runtime: ProcedureContainer, logger: Logger, useSerializer: boolean)
21
- {
22
- this.#runtime = runtime;
23
- this.#logger = logger;
24
- this.#useSerializer = useSerializer;
25
-
26
- this.#showProcedureInfo();
27
- }
28
-
29
- #showProcedureInfo()
30
- {
31
- const procedureNames = this.#runtime.getProcedureNames();
32
-
33
- if (procedureNames.length === 0)
34
- {
35
- return;
36
- }
37
-
38
- procedureNames.sort();
39
-
40
- this.#logger.info('Registered RPC entries', procedureNames);
41
- }
42
-
43
- @Get('*')
44
- async runGet(request: Request, response: Response): Promise<Response>
45
- {
46
- const fqn = this.#extractFqn(request);
47
- const version = this.#extractVersion(request);
48
- const args = this.#extractQueryArguments(request);
49
- const serialize = this.#extractSerialize(request);
50
-
51
- return this.#run(fqn, version, args, response, serialize);
52
- }
53
-
54
- @Post('*')
55
- async runPost(request: Request, response: Response): Promise<Response>
56
- {
57
- const fqn = this.#extractFqn(request);
58
- const version = this.#extractVersion(request);
59
- const args = await this.#extractBodyArguments(request);
60
- const serialize = this.#extractSerialize(request);
61
-
62
- return this.#run(fqn, version, args, response, serialize);
63
- }
64
-
65
- #extractFqn(request: Request): string
66
- {
67
- return request.path.substring(1);
68
- }
69
-
70
- #extractVersion(request: Request): Version
71
- {
72
- return request.query.version !== undefined
73
- ? Version.parse(request.query.version.toString())
74
- : Version.DEFAULT;
75
- }
76
-
77
- #extractSerialize(request: Request): boolean
78
- {
79
- return request.query.serialize === 'true';
80
- }
81
-
82
- #extractQueryArguments(request: Request): Map<string, unknown>
83
- {
84
- const args = new Map<string, unknown>();
85
-
86
- for (const [key, value] of Object.entries(request.query))
87
- {
88
- if (RPC_PARAMETERS.includes(key))
89
- {
90
- // We need to filter out the PRC parameters,
91
- // because they are not a proceure argument.
92
-
93
- continue;
94
- }
95
-
96
- args.set(key, value);
97
- }
98
-
99
- return args;
100
- }
101
-
102
- async #extractBodyArguments(request: Request): Promise<Map<string, unknown>>
103
- {
104
- const args = this.#useSerializer
105
- ? await ValueSerializer.deserialize(request.body) as unknown
106
- : request.body;
107
-
108
- return new Map<string, unknown>(Object.entries(args));
109
- }
110
-
111
- async #run(fqn: string, version: Version, args: Map<string, unknown>, response: Response, serialize: boolean): Promise<Response>
112
- {
113
- if (this.#runtime.hasProcedure(fqn) === false)
114
- {
115
- return response.status(404).send(`Procedure not found -> ${fqn}`);
116
- }
117
-
118
- try
119
- {
120
- const result = await this.#runtime.run(fqn, version, args);
121
-
122
- this.#logger.info(`Ran procedure -> ${fqn} (${version.toString()})`);
123
-
124
- return this.#createResultResponse(result, response, this.#useSerializer && serialize);
125
- }
126
- catch (error: unknown)
127
- {
128
- // When using the RPC API we need to return a human readable error message by default.
129
- // Only when a serialized result is requested we can return the error object (used by the remote).
130
-
131
- const message = error instanceof Error ? error.message : String(error);
132
- const errorData = serialize ? error : message;
133
-
134
- this.#logger.error(`Failed to run procedure -> ${fqn} (${version.toString()}) | ${message}`);
135
-
136
- return this.#createErrorResponse(errorData, response, serialize);
137
- }
138
- }
139
-
140
- #createResultResponse(result: unknown, response: Response, serialize: boolean): Response
141
- {
142
- const content = this.#createResponseContent(result, serialize);
143
- const contentType = this.#createResponseContentType(content);
144
-
145
- response.setHeader('Content-Type', contentType);
146
-
147
- return response.status(200).send(content);
148
- }
149
-
150
- #createErrorResponse(errorData: unknown, response: Response, serialize: boolean): Response
151
- {
152
- const content = this.#createResponseContent(errorData, serialize);
153
- const contentType = this.#createResponseContentType(content);
154
-
155
- response.setHeader('Content-Type', contentType);
156
-
157
- return response.status(500).send(content);
158
- }
159
-
160
- #createResponseContent(data: unknown, serialize: boolean): unknown
161
- {
162
- return serialize
163
- ? ValueSerializer.serialize(data)
164
- : data;
165
- }
166
-
167
- #createResponseContentType(content: unknown): string
168
- {
169
- return typeof content === 'object'
170
- ? 'application/json'
171
- : 'text/plain';
172
- }
173
- }
@@ -1,10 +0,0 @@
1
-
2
- enum RuntimeDefaults
3
- {
4
- URL = 'http://localhost:3000',
5
- SOURCE = './src',
6
- CACHE = './cache',
7
- INDEX = 'index.html'
8
- }
9
-
10
- export default RuntimeDefaults;
@@ -1,8 +0,0 @@
1
-
2
- export default class MissingConfigurationValue extends Error
3
- {
4
- constructor(propertyName: string)
5
- {
6
- super(`Missing configuration value for '${propertyName}'`);
7
- }
8
- }
@@ -1,8 +0,0 @@
1
-
2
- export default class RuntimeNotAvaiable extends Error
3
- {
4
- constructor()
5
- {
6
- super('Runtime is not available');
7
- }
8
- }
@@ -1,8 +0,0 @@
1
-
2
- export default class UnknownRuntimeMode extends Error
3
- {
4
- constructor()
5
- {
6
- super(`Unknown runtime mode`);
7
- }
8
- }
@@ -1,11 +0,0 @@
1
-
2
- import { IsBoolean } from 'class-validator';
3
-
4
- export default class HealthDto
5
- {
6
- @IsBoolean()
7
- healthy = false;
8
-
9
- @IsBoolean({ each: true })
10
- checks: Map<string, boolean> = new Map();
11
- }
@@ -1,11 +0,0 @@
1
-
2
- import { ArrayNotEmpty, IsUrl } from 'class-validator';
3
-
4
- export default class NodeDto
5
- {
6
- @IsUrl()
7
- url = '';
8
-
9
- @ArrayNotEmpty()
10
- procedureNames: string[] = [];
11
- }
@@ -1,15 +0,0 @@
1
-
2
- import { ClassConstructor, plainToClass } from 'class-transformer';
3
- import { validateOrReject } from 'class-validator';
4
-
5
- export default class DataConverter
6
- {
7
- static async convert<Type extends Object>(targetClass: ClassConstructor<Type>, dataObject: object): Promise<Type>
8
- {
9
- const createdObject: Type = plainToClass(targetClass, dataObject);
10
-
11
- await validateOrReject(createdObject);
12
-
13
- return createdObject;
14
- }
15
- }
@@ -1,122 +0,0 @@
1
-
2
- import fs from 'fs-extra';
3
- import glob from 'glob-promise';
4
- import mime from 'mime-types';
5
- import path from 'path';
6
-
7
- import FileNotFound from '../../runtime/errors/FileNotFound.js';
8
- import FileManager from '../../runtime/interfaces/FileManager.js';
9
- import File from '../../runtime/models/File.js';
10
-
11
- export default class LocalFileManager implements FileManager
12
- {
13
- #location: string;
14
-
15
- constructor(location: string)
16
- {
17
- this.#location = location;
18
- }
19
-
20
- getRootLocation(): string
21
- {
22
- return path.resolve(this.#location);
23
- }
24
-
25
- getAbsoluteLocation(filename: string): string
26
- {
27
- const location = filename.startsWith('/') ? filename : path.join(this.#location, filename);
28
-
29
- return path.resolve(location);
30
- }
31
-
32
- getRelativeLocation(filename: string): string
33
- {
34
- return path.relative(this.#location, filename);
35
- }
36
-
37
- async getType(filename: string): Promise<string>
38
- {
39
- const location = this.getAbsoluteLocation(filename);
40
-
41
- return mime.lookup(location) || 'application/octet-stream';
42
- }
43
-
44
- async getContent(filename: string): Promise<Buffer>
45
- {
46
- const location = this.getAbsoluteLocation(filename);
47
-
48
- if (fs.existsSync(location) === false)
49
- {
50
- // Do NOT use the location in the error message,
51
- // as it may contain sensitive information.
52
- throw new FileNotFound(filename);
53
- }
54
-
55
- return fs.readFile(location);
56
- }
57
-
58
- async load(filename: string): Promise<File>
59
- {
60
- const type = await this.getType(filename);
61
- const content = await this.getContent(filename);
62
-
63
- return new File(filename, type, content);
64
- }
65
-
66
- async store(filename: string, content: string): Promise<void>
67
- {
68
- const location = this.getAbsoluteLocation(filename);
69
- const directory = path.dirname(location);
70
-
71
- await fs.mkdir(directory, { recursive: true });
72
-
73
- return fs.writeFile(location, content);
74
- }
75
-
76
- async copy(source: string, destination: string): Promise<void>
77
- {
78
- const sourceLocation = this.getAbsoluteLocation(source);
79
- const destinationLocation = this.getAbsoluteLocation(destination);
80
-
81
- return fs.copy(sourceLocation, destinationLocation, { overwrite: true });
82
- }
83
-
84
- async remove(filename: string): Promise<void>
85
- {
86
- const location = this.getAbsoluteLocation(filename);
87
-
88
- return fs.remove(location);
89
- }
90
-
91
- async getModuleFileNames(): Promise<string[]>
92
- {
93
- const location = this.getAbsoluteLocation('./');
94
- const filenames = await glob(`${location}/**/*.js`);
95
-
96
- return filenames;
97
- }
98
-
99
- async getSegmentFiles(): Promise<string[]>
100
- {
101
- const location = this.getAbsoluteLocation('./');
102
- const filenames = await glob(`${location}/**/*.segment.json`);
103
-
104
- return filenames;
105
- }
106
-
107
- async getNodeSegmentFiles(): Promise<string[]>
108
- {
109
- const location = this.getAbsoluteLocation('./');
110
- const filenames = await glob(`${location}/**/*.segment.local.js`);
111
-
112
- return filenames;
113
- }
114
-
115
- async getRepositorySegmentFiles(): Promise<string[]>
116
- {
117
- const location = this.getAbsoluteLocation('./');
118
- const filenames = await glob(`${location}/**/*.segment.repository.js`);
119
-
120
- return filenames;
121
- }
122
- }
@@ -1,19 +0,0 @@
1
-
2
- import { readFileSync } from 'fs';
3
-
4
- import RuntimeConfiguration from '../configuration/RuntimeConfiguration.js';
5
-
6
- import DataConverter from './DataConverter.js';
7
-
8
- export default class RuntimeConfigurationLoader
9
- {
10
- static async load(filename: string): Promise<RuntimeConfiguration>
11
- {
12
- const plainContents = readFileSync(filename, 'utf-8');
13
- const parsedContents = JSON.parse(plainContents);
14
-
15
- const configuration = await DataConverter.convert<RuntimeConfiguration>(RuntimeConfiguration, parsedContents);
16
-
17
- return configuration;
18
- }
19
- }
@@ -1,207 +0,0 @@
1
-
2
- import CacheBuilder from '../../runtime/caching/CacheBuilder.js';
3
- import Gateway from '../../runtime/Gateway.js';
4
- import LocalGateway from '../../runtime/LocalGateway.js';
5
- import LocalNode from '../../runtime/LocalNode.js';
6
- import LocalRepository from '../../runtime/LocalRepository.js';
7
- import Node from '../../runtime/Node.js';
8
- import NodeMonitor from '../../runtime/NodeMonitor.js';
9
- import Proxy from '../../runtime/Proxy.js';
10
- import RemoteGateway from '../../runtime/RemoteGateway.js';
11
- import RemoteNode from '../../runtime/RemoteNode.js';
12
- import RemoteRepository from '../../runtime/RemoteRepository.js';
13
- import Repository from '../../runtime/Repository.js';
14
- import Runtime from '../../runtime/Runtime.js';
15
-
16
- import LocalFileManager from './LocalFileManager.js';
17
-
18
- import RuntimeConfiguration from '../configuration/RuntimeConfiguration.js';
19
- import StandaloneConfiguration from '../configuration/StandaloneConfiguration.js';
20
- import RepositoryConfiguration from '../configuration/RepositoryConfiguration.js';
21
- import GatewayConfiguration from '../configuration/GatewayConfiguration.js';
22
- import NodeConfiguration from '../configuration/NodeConfiguration.js';
23
- import ProxyConfiguration from '../configuration/ProxyConfiguration.js';
24
-
25
- import RuntimeDefaults from '../definitions/RuntimeDefaults.js';
26
-
27
- import MissingConfigurationValue from '../errors/MissingConfigurationValue.js';
28
- import UnknownRuntimeMode from '../errors/UnknownRuntimeMode.js';
29
-
30
- export default class RuntimeConfigurator
31
- {
32
- static async configure(configuration: RuntimeConfiguration): Promise<Runtime>
33
- {
34
- const url = configuration.url ?? RuntimeDefaults.URL;
35
-
36
- if (configuration.standalone !== undefined) return this.#configureStandAlone(url, configuration.standalone);
37
- if (configuration.repository !== undefined) return this.#configureRepository(url, configuration.repository);
38
- if (configuration.gateway !== undefined) return this.#configureGateway(url, configuration.gateway);
39
- if (configuration.node !== undefined) return this.#configureNode(url, configuration.node);
40
- if (configuration.proxy !== undefined) return this.#configureProxy(url, configuration.proxy);
41
-
42
- throw new UnknownRuntimeMode();
43
- }
44
-
45
- static async #configureStandAlone(url: string, configuration: StandaloneConfiguration): Promise<Proxy>
46
- {
47
- const sourceLocation = configuration.source ?? RuntimeDefaults.SOURCE;
48
- const cacheLocation = configuration.cache ?? RuntimeDefaults.CACHE;
49
-
50
- await this.#buildCache(sourceLocation, cacheLocation);
51
-
52
- const segmentNames = configuration.segments === undefined
53
- ? await this.#getSegmentNames(cacheLocation)
54
- : configuration.segments;
55
-
56
- const repository = await this.#buildRepository(url, cacheLocation);
57
- const node = await this.#buildNode(url, segmentNames, repository);
58
-
59
- return this.#buildProxy(url, repository, node);
60
- }
61
-
62
- static async #configureRepository(url: string, configuration: RepositoryConfiguration): Promise<LocalRepository>
63
- {
64
- const sourceLocation = configuration.source ?? RuntimeDefaults.SOURCE;
65
- const cacheLocation = configuration.cache ?? RuntimeDefaults.CACHE;
66
-
67
- await this.#buildCache(sourceLocation, cacheLocation);
68
- return this.#buildRepository(url, cacheLocation);
69
- }
70
-
71
- static async #configureGateway(url: string, configuration: GatewayConfiguration): Promise<LocalGateway>
72
- {
73
- return this.#buildGateway(url, configuration.monitor);
74
- }
75
-
76
- static async #configureNode(url: string, configuration: NodeConfiguration): Promise<LocalNode>
77
- {
78
- const segmentNames = configuration.segments ?? [];
79
-
80
- const repository = configuration.repository !== undefined
81
- ? new RemoteRepository(configuration.repository)
82
- : undefined;
83
-
84
- const gateway = configuration.gateway !== undefined
85
- ? new RemoteGateway(configuration.gateway)
86
- : undefined;
87
-
88
- return this.#buildNode(url, segmentNames, repository, gateway);
89
- }
90
-
91
- static async #configureProxy(url: string, configuration: ProxyConfiguration): Promise<Proxy>
92
- {
93
- if (configuration.repository === undefined)
94
- {
95
- throw new MissingConfigurationValue('proxy.repository');
96
- }
97
-
98
- const repository = new RemoteRepository(configuration.repository);
99
-
100
- const gateway = configuration.gateway !== undefined
101
- ? new RemoteGateway(configuration.gateway)
102
- : undefined;
103
-
104
- const node = configuration.node !== undefined
105
- ? new RemoteNode(configuration.node, [])
106
- : undefined;
107
-
108
- const runner = gateway ?? node;
109
-
110
- if (runner === undefined)
111
- {
112
- throw new MissingConfigurationValue('proxy.gateway or proxy.node');
113
- }
114
-
115
- return this.#buildProxy(url, repository, runner);
116
- }
117
-
118
- static async #buildCache(sourceLocation: string, cacheLocation: string): Promise<LocalFileManager>
119
- {
120
- const rootManager = new LocalFileManager('./');
121
- await rootManager.remove(cacheLocation);
122
- await rootManager.copy(sourceLocation, cacheLocation);
123
-
124
- const sourceManager = new LocalFileManager(sourceLocation);
125
- const cacheManager = new LocalFileManager(cacheLocation);
126
-
127
- const segmentFiles = await rootManager.getSegmentFiles();
128
- const moduleFiles = await sourceManager.getModuleFileNames();
129
-
130
- const cacheBuilder = new CacheBuilder(sourceManager, cacheManager);
131
- await cacheBuilder.build(segmentFiles, moduleFiles);
132
-
133
- return cacheManager;
134
- }
135
-
136
- static async #getSegmentNames(cacheLocation: string): Promise<string[]>
137
- {
138
- const fileManager = new LocalFileManager(cacheLocation);
139
- const segmentFilenames = await fileManager.getNodeSegmentFiles();
140
-
141
- return segmentFilenames.map(filename => this.#extractSegmentName(filename));
142
- }
143
-
144
- static #extractSegmentName(filename: string): string
145
- {
146
- const name = filename.split('/').pop() ?? '';
147
- const endIndex = name.indexOf('.segment');
148
-
149
- return name.substring(0, endIndex);
150
- }
151
-
152
- static async #buildRepository(url: string | undefined, cacheLocation: string): Promise<LocalRepository>
153
- {
154
- const fileManager = new LocalFileManager(cacheLocation);
155
- const repository = new LocalRepository(fileManager, url);
156
-
157
- const segmentFilenames = await fileManager.getRepositorySegmentFiles();
158
- const segmentNames = segmentFilenames.map(filename => this.#extractSegmentName(filename));
159
-
160
- for (const name of segmentNames)
161
- {
162
- await repository.loadSegment(name);
163
- }
164
-
165
- return repository;
166
- }
167
-
168
- static async #buildGateway(url?: string, monitorInterval?: number): Promise<LocalGateway>
169
- {
170
- const gateway = new LocalGateway(url);
171
- const monitor = new NodeMonitor(gateway, monitorInterval);
172
-
173
- monitor.start();
174
-
175
- return gateway;
176
- }
177
-
178
- static async #buildNode(url: string | undefined, segmentNames: string[], repository?: Repository, gateway?: Gateway): Promise<LocalNode>
179
- {
180
- const node = new LocalNode(url);
181
-
182
- if (repository !== undefined)
183
- {
184
- await node.setRepository(repository, segmentNames);
185
- }
186
-
187
- for (const segmentName of segmentNames)
188
- {
189
- await node.loadSegment(segmentName);
190
- }
191
-
192
- // All segments have to be loaded before a node
193
- // can be registered at the gateway
194
-
195
- if (gateway !== undefined)
196
- {
197
- node.setGateway(gateway);
198
- }
199
-
200
- return node;
201
- }
202
-
203
- static async #buildProxy(url: string | undefined, repository: Repository, runner: Gateway | Node): Promise<Proxy>
204
- {
205
- return new Proxy(repository, runner, url);
206
- }
207
- }
@@ -1,17 +0,0 @@
1
-
2
- import yargs from 'yargs';
3
-
4
- import ServerOptions from '../configuration/ServerOptions.js';
5
-
6
- import DataConverter from './DataConverter.js';
7
-
8
- export default class ServerOptionsReader
9
- {
10
- static async read(): Promise<ServerOptions>
11
- {
12
- const args: object = yargs(process.argv).argv
13
- const options = await DataConverter.convert<ServerOptions>(ServerOptions, args);
14
-
15
- return options;
16
- }
17
- }
package/src/server.ts DELETED
@@ -1,16 +0,0 @@
1
-
2
- import ModuleImporter from './runtime/types/ModuleImporter.js';
3
- import ModuleLoader from './runtime/utils/ModuleLoader.js';
4
-
5
- import JitarServer from './server/JitarServer.js';
6
-
7
- export async function startServer(moduleImporter: ModuleImporter): Promise<JitarServer>
8
- {
9
- ModuleLoader.setImporter(moduleImporter);
10
-
11
- const server = new JitarServer();
12
-
13
- await server.start();
14
-
15
- return server;
16
- }
@@ -1,33 +0,0 @@
1
-
2
- import * as AccessLevel from '../../../src/core/definitions/AccessLevel';
3
- import Implementation from '../../../src/core/Implementation';
4
- import Version from '../../../src/core/Version';
5
- import ReflectionHelper from '../../../src/core/reflection/ReflectionHelper';
6
-
7
- function getPrivate(): string
8
- {
9
- return 'private';
10
- }
11
-
12
- function getPublic(): string
13
- {
14
- return 'public';
15
- }
16
-
17
- function getParameters(mandatory: string, optional = 'default')
18
- {
19
- return `${mandatory} ${optional}`;
20
- }
21
-
22
- const parameters = ReflectionHelper.getFunctionParameters(getParameters);
23
-
24
- const privateImplementation = new Implementation(Version.DEFAULT, AccessLevel.PRIVATE, [], getPrivate);
25
- const publicImplementation = new Implementation(Version.DEFAULT, AccessLevel.PUBLIC, [], getPublic);
26
- const parameterImplementation = new Implementation(Version.DEFAULT, AccessLevel.PUBLIC, parameters, getParameters);
27
-
28
- export
29
- {
30
- privateImplementation,
31
- publicImplementation,
32
- parameterImplementation
33
- }