jitar 0.3.1 → 0.3.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.
- package/CHANGELOG.md +5 -0
- package/LICENCE +23 -0
- package/dist/client.d.ts +3 -0
- package/dist/client.js +24 -0
- package/dist/core/Context.d.ts +5 -0
- package/dist/core/Context.js +7 -0
- package/dist/core/ErrorManager.d.ts +3 -0
- package/dist/core/ErrorManager.js +11 -0
- package/dist/core/Implementation.d.ts +10 -0
- package/dist/core/Implementation.js +44 -0
- package/dist/core/Procedure.d.ts +13 -0
- package/dist/core/Procedure.js +58 -0
- package/dist/core/Segment.d.ts +13 -0
- package/dist/core/Segment.js +36 -0
- package/dist/core/SegmentBuilder.d.ts +6 -0
- package/dist/core/SegmentBuilder.js +32 -0
- package/dist/core/Version.d.ts +13 -0
- package/dist/core/Version.js +50 -0
- package/dist/core/definitions/AccessLevel.d.ts +2 -0
- package/dist/core/definitions/AccessLevel.js +2 -0
- package/dist/core/errors/BadRequest.d.ts +3 -0
- package/dist/core/errors/BadRequest.js +6 -0
- package/dist/core/errors/Forbidden.d.ts +3 -0
- package/dist/core/errors/Forbidden.js +6 -0
- package/dist/core/errors/ImplementationNotFound.d.ts +4 -0
- package/dist/core/errors/ImplementationNotFound.js +7 -0
- package/dist/core/errors/InvalidVersionNumber.d.ts +4 -0
- package/dist/core/errors/InvalidVersionNumber.js +7 -0
- package/dist/core/errors/MissingParameterValue.d.ts +4 -0
- package/dist/core/errors/MissingParameterValue.js +7 -0
- package/dist/core/errors/NotFound.d.ts +3 -0
- package/dist/core/errors/NotFound.js +6 -0
- package/dist/core/errors/NotImplemented.d.ts +3 -0
- package/dist/core/errors/NotImplemented.js +6 -0
- package/dist/core/errors/PaymentRequired.d.ts +3 -0
- package/dist/core/errors/PaymentRequired.js +6 -0
- package/dist/core/errors/ProcedureNotFound.d.ts +4 -0
- package/dist/core/errors/ProcedureNotFound.js +7 -0
- package/dist/core/errors/Teapot.d.ts +3 -0
- package/dist/core/errors/Teapot.js +6 -0
- package/dist/core/errors/Unauthorized.d.ts +3 -0
- package/dist/core/errors/Unauthorized.js +6 -0
- package/dist/core/errors/UnknownParameter.d.ts +4 -0
- package/dist/core/errors/UnknownParameter.js +7 -0
- package/dist/core/interfaces/Runner.d.ts +4 -0
- package/dist/core/interfaces/Runner.js +1 -0
- package/dist/core/reflection/ParameterParser.d.ts +5 -0
- package/dist/core/reflection/ParameterParser.js +51 -0
- package/dist/core/reflection/ReflectionHelper.d.ts +13 -0
- package/dist/core/reflection/ReflectionHelper.js +69 -0
- package/dist/core/reflection/models/ReflectionField.d.ts +8 -0
- package/dist/core/reflection/models/ReflectionField.js +14 -0
- package/dist/core/reflection/models/ReflectionParameter.d.ts +7 -0
- package/dist/core/reflection/models/ReflectionParameter.js +11 -0
- package/dist/core/types/Component.d.ts +5 -0
- package/dist/core/types/Component.js +1 -0
- package/dist/core/types/FlexObject.d.ts +4 -0
- package/dist/core/types/FlexObject.js +1 -0
- package/dist/core/types/Module.d.ts +3 -0
- package/dist/core/types/Module.js +1 -0
- package/dist/core/types/SegmentImplementation.d.ts +6 -0
- package/dist/core/types/SegmentImplementation.js +1 -0
- package/dist/core/types/SegmentModule.d.ts +5 -0
- package/dist/core/types/SegmentModule.js +1 -0
- package/dist/core/types/SegmentProcedure.d.ts +7 -0
- package/dist/core/types/SegmentProcedure.js +1 -0
- package/dist/core/utils/FqnBuilder.d.ts +3 -0
- package/dist/core/utils/FqnBuilder.js +5 -0
- package/dist/hooks.d.ts +2 -0
- package/dist/hooks.js +2 -0
- package/dist/lib.d.ts +35 -0
- package/dist/lib.js +30 -0
- package/dist/runtime/ClientId.d.ts +4 -0
- package/dist/runtime/ClientId.js +11 -0
- package/dist/runtime/Gateway.d.ts +5 -0
- package/dist/runtime/Gateway.js +3 -0
- package/dist/runtime/LocalGateway.d.ts +14 -0
- package/dist/runtime/LocalGateway.js +61 -0
- package/dist/runtime/LocalNode.d.ts +18 -0
- package/dist/runtime/LocalNode.js +75 -0
- package/dist/runtime/LocalRepository.d.ts +17 -0
- package/dist/runtime/LocalRepository.js +94 -0
- package/dist/runtime/Node.d.ts +3 -0
- package/dist/runtime/Node.js +3 -0
- package/dist/runtime/NodeBalancer.d.ts +9 -0
- package/dist/runtime/NodeBalancer.js +34 -0
- package/dist/runtime/NodeMonitor.d.ts +7 -0
- package/dist/runtime/NodeMonitor.js +38 -0
- package/dist/runtime/ProcedureRunner.d.ts +9 -0
- package/dist/runtime/ProcedureRunner.js +11 -0
- package/dist/runtime/ProcedureRuntime.d.ts +13 -0
- package/dist/runtime/ProcedureRuntime.js +25 -0
- package/dist/runtime/Proxy.d.ts +18 -0
- package/dist/runtime/Proxy.js +33 -0
- package/dist/runtime/Remote.d.ts +15 -0
- package/dist/runtime/Remote.js +102 -0
- package/dist/runtime/RemoteGateway.d.ts +11 -0
- package/dist/runtime/RemoteGateway.js +22 -0
- package/dist/runtime/RemoteNode.d.ts +12 -0
- package/dist/runtime/RemoteNode.js +29 -0
- package/dist/runtime/RemoteRepository.d.ts +14 -0
- package/dist/runtime/RemoteRepository.js +34 -0
- package/dist/runtime/Repository.d.ts +11 -0
- package/dist/runtime/Repository.js +3 -0
- package/dist/runtime/Runtime.d.ts +9 -0
- package/dist/runtime/Runtime.js +27 -0
- package/dist/runtime/caching/CacheBuilder.d.ts +6 -0
- package/dist/runtime/caching/CacheBuilder.js +249 -0
- package/dist/runtime/caching/ImportRewriter.d.ts +4 -0
- package/dist/runtime/caching/ImportRewriter.js +49 -0
- package/dist/runtime/caching/RemoteBuilder.d.ts +5 -0
- package/dist/runtime/caching/RemoteBuilder.js +31 -0
- package/dist/runtime/caching/SourceAppender.d.ts +5 -0
- package/dist/runtime/caching/SourceAppender.js +30 -0
- package/dist/runtime/caching/definitions/Keywords.d.ts +2 -0
- package/dist/runtime/caching/definitions/Keywords.js +2 -0
- package/dist/runtime/caching/errors/InvalidSegmentFilename.d.ts +3 -0
- package/dist/runtime/caching/errors/InvalidSegmentFilename.js +5 -0
- package/dist/runtime/caching/errors/MissingModuleExport.d.ts +3 -0
- package/dist/runtime/caching/errors/MissingModuleExport.js +5 -0
- package/dist/runtime/caching/errors/SegmentFileNotLoaded.d.ts +3 -0
- package/dist/runtime/caching/errors/SegmentFileNotLoaded.js +5 -0
- package/dist/runtime/caching/errors/SegmentModuleNotLoaded.d.ts +3 -0
- package/dist/runtime/caching/errors/SegmentModuleNotLoaded.js +5 -0
- package/dist/runtime/caching/models/ApplicationModule.d.ts +9 -0
- package/dist/runtime/caching/models/ApplicationModule.js +19 -0
- package/dist/runtime/caching/models/Implementation.d.ts +12 -0
- package/dist/runtime/caching/models/Implementation.js +27 -0
- package/dist/runtime/caching/models/Procedure.d.ts +9 -0
- package/dist/runtime/caching/models/Procedure.js +15 -0
- package/dist/runtime/caching/models/Segment.d.ts +10 -0
- package/dist/runtime/caching/models/Segment.js +16 -0
- package/dist/runtime/caching/models/SegmentModule.d.ts +10 -0
- package/dist/runtime/caching/models/SegmentModule.js +14 -0
- package/dist/runtime/caching/types/SegmentFile.d.ts +5 -0
- package/dist/runtime/caching/types/SegmentFile.js +1 -0
- package/dist/runtime/caching/types/SegmentImportProperties.d.ts +6 -0
- package/dist/runtime/caching/types/SegmentImportProperties.js +1 -0
- package/dist/runtime/caching/types/SegmentImports.d.ts +5 -0
- package/dist/runtime/caching/types/SegmentImports.js +1 -0
- package/dist/runtime/errors/ClientNotFound.d.ts +3 -0
- package/dist/runtime/errors/ClientNotFound.js +6 -0
- package/dist/runtime/errors/FileNotFound.d.ts +3 -0
- package/dist/runtime/errors/FileNotFound.js +6 -0
- package/dist/runtime/errors/InvalidClientId.d.ts +3 -0
- package/dist/runtime/errors/InvalidClientId.js +6 -0
- package/dist/runtime/errors/InvalidJitarHooks.d.ts +3 -0
- package/dist/runtime/errors/InvalidJitarHooks.js +6 -0
- package/dist/runtime/errors/InvalidSegmentFile.d.ts +3 -0
- package/dist/runtime/errors/InvalidSegmentFile.js +6 -0
- package/dist/runtime/errors/ModuleNotLoaded.d.ts +3 -0
- package/dist/runtime/errors/ModuleNotLoaded.js +6 -0
- package/dist/runtime/errors/NoNodeAvailable.d.ts +3 -0
- package/dist/runtime/errors/NoNodeAvailable.js +6 -0
- package/dist/runtime/errors/RepositoryNotAvaiable.d.ts +3 -0
- package/dist/runtime/errors/RepositoryNotAvaiable.js +6 -0
- package/dist/runtime/errors/RuntimeNotAvailable.d.ts +3 -0
- package/dist/runtime/errors/RuntimeNotAvailable.js +6 -0
- package/dist/runtime/errors/SegmentNotFound.d.ts +3 -0
- package/dist/runtime/errors/SegmentNotFound.js +6 -0
- package/dist/runtime/hooks/dependencies.d.ts +2 -0
- package/dist/runtime/hooks/dependencies.js +9 -0
- package/dist/runtime/hooks/runtime.d.ts +3 -0
- package/dist/runtime/hooks/runtime.js +16 -0
- package/dist/runtime/interfaces/FileManager.d.ts +11 -0
- package/dist/runtime/interfaces/FileManager.js +1 -0
- package/dist/runtime/interfaces/HealthCheck.d.ts +3 -0
- package/dist/runtime/interfaces/HealthCheck.js +1 -0
- package/dist/runtime/interfaces/Middleware.d.ts +5 -0
- package/dist/runtime/interfaces/Middleware.js +1 -0
- package/dist/runtime/middleware/CorsMiddleware.d.ts +8 -0
- package/dist/runtime/middleware/CorsMiddleware.js +19 -0
- package/dist/runtime/models/File.d.ts +9 -0
- package/dist/runtime/models/File.js +14 -0
- package/dist/runtime/serialization/ArrayBufferSerializer.d.ts +10 -0
- package/dist/runtime/serialization/ArrayBufferSerializer.js +54 -0
- package/dist/runtime/serialization/ArraySerializer.d.ts +7 -0
- package/dist/runtime/serialization/ArraySerializer.js +15 -0
- package/dist/runtime/serialization/ClassSerializer.d.ts +10 -0
- package/dist/runtime/serialization/ClassSerializer.js +74 -0
- package/dist/runtime/serialization/DateSerializer.d.ts +9 -0
- package/dist/runtime/serialization/DateSerializer.js +21 -0
- package/dist/runtime/serialization/MapSerializer.d.ts +9 -0
- package/dist/runtime/serialization/MapSerializer.js +35 -0
- package/dist/runtime/serialization/ObjectSerializer.d.ts +9 -0
- package/dist/runtime/serialization/ObjectSerializer.js +21 -0
- package/dist/runtime/serialization/SetSerializer.d.ts +9 -0
- package/dist/runtime/serialization/SetSerializer.js +23 -0
- package/dist/runtime/serialization/ValueSerializer.d.ts +8 -0
- package/dist/runtime/serialization/ValueSerializer.js +69 -0
- package/dist/runtime/serialization/errors/ClassNotFound.d.ts +3 -0
- package/dist/runtime/serialization/errors/ClassNotFound.js +6 -0
- package/dist/runtime/serialization/errors/InvalidClass.d.ts +3 -0
- package/dist/runtime/serialization/errors/InvalidClass.js +6 -0
- package/dist/runtime/serialization/errors/InvalidPropertyType.d.ts +4 -0
- package/dist/runtime/serialization/errors/InvalidPropertyType.js +7 -0
- package/dist/runtime/serialization/interfaces/Serializer.d.ts +4 -0
- package/dist/runtime/serialization/interfaces/Serializer.js +1 -0
- package/dist/runtime/serialization/types/SerializableObject.d.ts +3 -0
- package/dist/runtime/serialization/types/SerializableObject.js +1 -0
- package/dist/runtime/serialization/types/Serialized.d.ts +5 -0
- package/dist/runtime/serialization/types/Serialized.js +1 -0
- package/dist/runtime/serialization/types/SerializedArrayBuffer.d.ts +6 -0
- package/dist/runtime/serialization/types/SerializedArrayBuffer.js +1 -0
- package/dist/runtime/serialization/types/SerializedClass.d.ts +8 -0
- package/dist/runtime/serialization/types/SerializedClass.js +1 -0
- package/dist/runtime/serialization/types/SerializedDate.d.ts +5 -0
- package/dist/runtime/serialization/types/SerializedDate.js +1 -0
- package/dist/runtime/serialization/types/SerializedMap.d.ts +8 -0
- package/dist/runtime/serialization/types/SerializedMap.js +1 -0
- package/dist/runtime/serialization/types/SerializedObject.d.ts +4 -0
- package/dist/runtime/serialization/types/SerializedObject.js +1 -0
- package/dist/runtime/serialization/types/SerializedSet.d.ts +5 -0
- package/dist/runtime/serialization/types/SerializedSet.js +1 -0
- package/dist/runtime/serialization/types/TypedArray.d.ts +2 -0
- package/dist/runtime/serialization/types/TypedArray.js +1 -0
- package/dist/runtime/types/JitarHooks.d.ts +6 -0
- package/dist/runtime/types/JitarHooks.js +1 -0
- package/dist/runtime/types/ModuleImporter.d.ts +3 -0
- package/dist/runtime/types/ModuleImporter.js +1 -0
- package/dist/runtime/types/NextHandler.d.ts +2 -0
- package/dist/runtime/types/NextHandler.js +1 -0
- package/dist/runtime/utils/ModuleAnalyser.d.ts +7 -0
- package/dist/runtime/utils/ModuleAnalyser.js +34 -0
- package/dist/runtime/utils/ModuleLoader.d.ts +8 -0
- package/dist/runtime/utils/ModuleLoader.js +30 -0
- package/dist/runtime/utils/UrlRewriter.d.ts +4 -0
- package/dist/runtime/utils/UrlRewriter.js +36 -0
- package/package.json +7 -7
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import BadRequest from '../../../core/errors/BadRequest.js';
|
|
2
|
+
export default class InvalidPropertyType extends BadRequest {
|
|
3
|
+
constructor(typeName, propertyName, expectedType) {
|
|
4
|
+
super(`The ${typeName} property '${propertyName}' has an invalid type (expected '${expectedType}')`);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
InvalidPropertyType.source = '/jitar/runtime/serialization/errors/InvalidPropertyType.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import Module from '../../core/types/Module.js';
|
|
2
|
+
export default class ModuleAnalyser {
|
|
3
|
+
#private;
|
|
4
|
+
static filterObjects(module: Module): Map<string, Object>;
|
|
5
|
+
static filterFunctions(module: Module): Map<string, Function>;
|
|
6
|
+
static filterClasses(module: Module): Map<string, Function>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export default class ModuleAnalyser {
|
|
2
|
+
static filterObjects(module) {
|
|
3
|
+
return this.#filterexported(module, Object);
|
|
4
|
+
}
|
|
5
|
+
static filterFunctions(module) {
|
|
6
|
+
const functions = this.#filterexported(module, Function);
|
|
7
|
+
return this.#filterFunctionTypes(functions, false);
|
|
8
|
+
}
|
|
9
|
+
static filterClasses(module) {
|
|
10
|
+
const functions = this.#filterexported(module, Function);
|
|
11
|
+
return this.#filterFunctionTypes(functions, true);
|
|
12
|
+
}
|
|
13
|
+
static #filterexported(module, type) {
|
|
14
|
+
const keys = Object.keys(module);
|
|
15
|
+
const filtered = new Map();
|
|
16
|
+
for (const key of keys) {
|
|
17
|
+
const exported = module[key];
|
|
18
|
+
if (exported instanceof type) {
|
|
19
|
+
filtered.set(key, exported);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return filtered;
|
|
23
|
+
}
|
|
24
|
+
static #filterFunctionTypes(functions, filterClasses) {
|
|
25
|
+
const filtered = new Map();
|
|
26
|
+
for (const [key, value] of functions) {
|
|
27
|
+
const code = value.toString();
|
|
28
|
+
if (code.startsWith('class') === filterClasses) {
|
|
29
|
+
filtered.set(key, value);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return filtered;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import Module from '../../core/types/Module.js';
|
|
2
|
+
import ModuleImporter from '../types/ModuleImporter.js';
|
|
3
|
+
export default class ModuleLoader {
|
|
4
|
+
static setBaseUrl(baseUrl: string): void;
|
|
5
|
+
static setImporter(importer: ModuleImporter): void;
|
|
6
|
+
static load(url: string): Promise<Module>;
|
|
7
|
+
static import(specifier: string): Promise<import("../../core/types/FlexObject.js").default>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import ModuleNotLoaded from '../errors/ModuleNotLoaded.js';
|
|
2
|
+
import UrlRewriter from './UrlRewriter.js';
|
|
3
|
+
let _baseUrl;
|
|
4
|
+
let _import = async (name) => { return import(name); };
|
|
5
|
+
export default class ModuleLoader {
|
|
6
|
+
static setBaseUrl(baseUrl) {
|
|
7
|
+
_baseUrl = baseUrl;
|
|
8
|
+
}
|
|
9
|
+
static setImporter(importer) {
|
|
10
|
+
_import = importer;
|
|
11
|
+
}
|
|
12
|
+
static async load(url) {
|
|
13
|
+
if (url.startsWith('/jitar')) {
|
|
14
|
+
url = `../..${url}`;
|
|
15
|
+
}
|
|
16
|
+
if (_baseUrl !== undefined && url.startsWith(_baseUrl) === false) {
|
|
17
|
+
url = UrlRewriter.addBase(url, _baseUrl);
|
|
18
|
+
}
|
|
19
|
+
return this.import(url);
|
|
20
|
+
}
|
|
21
|
+
static async import(specifier) {
|
|
22
|
+
try {
|
|
23
|
+
return await _import(specifier);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
27
|
+
throw new ModuleNotLoaded(specifier, message);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export default class UrlRewriter {
|
|
2
|
+
static addBase(url, base) {
|
|
3
|
+
url = this.#ensureStartsWithoutSlash(url);
|
|
4
|
+
base = this.#assureEndWithSlash(base);
|
|
5
|
+
return this.#translateRelativeParts(`${base}${url}`);
|
|
6
|
+
}
|
|
7
|
+
static #ensureStartsWithoutSlash(url) {
|
|
8
|
+
if (url.startsWith('/')) {
|
|
9
|
+
return url.substring(1);
|
|
10
|
+
}
|
|
11
|
+
return url;
|
|
12
|
+
}
|
|
13
|
+
static #assureEndWithSlash(base) {
|
|
14
|
+
if (base.endsWith('/')) {
|
|
15
|
+
return base;
|
|
16
|
+
}
|
|
17
|
+
return `${base}/`;
|
|
18
|
+
}
|
|
19
|
+
static #translateRelativeParts(url) {
|
|
20
|
+
const parts = url.split('/');
|
|
21
|
+
const translated = [];
|
|
22
|
+
translated.push(parts[0]);
|
|
23
|
+
for (let index = 1; index < parts.length; index++) {
|
|
24
|
+
const part = parts[index].trim();
|
|
25
|
+
if (part === '.' || part === '') {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
else if (part === '..') {
|
|
29
|
+
translated.pop();
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
translated.push(part);
|
|
33
|
+
}
|
|
34
|
+
return translated.join('/');
|
|
35
|
+
}
|
|
36
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jitar",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "Distributed runtime for JavaScript and TypeScript to chop monolithic applications into micros.",
|
|
5
5
|
"author": "Masking Technology <info@masking.tech> (https://jitar.dev)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -20,13 +20,12 @@
|
|
|
20
20
|
"clean": "rm -rf dist build",
|
|
21
21
|
"release": "npm run clean && npm run build && npm publish"
|
|
22
22
|
},
|
|
23
|
-
"dependencies": {},
|
|
24
23
|
"devDependencies": {
|
|
24
|
+
"@types/jest": "^29.4.0",
|
|
25
25
|
"@typescript-eslint/eslint-plugin": "^5.51.0",
|
|
26
26
|
"@typescript-eslint/parser": "^5.51.0",
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"jest": "^29.4.1",
|
|
27
|
+
"eslint": "^8.34.0",
|
|
28
|
+
"jest": "^29.4.2",
|
|
30
29
|
"ts-jest": "^29.0.5"
|
|
31
30
|
},
|
|
32
31
|
"engines": {
|
|
@@ -49,5 +48,6 @@
|
|
|
49
48
|
"monolith",
|
|
50
49
|
"full stack",
|
|
51
50
|
"web applications"
|
|
52
|
-
]
|
|
53
|
-
|
|
51
|
+
],
|
|
52
|
+
"gitHead": "26a6275ac9afbc971ca891f7dcae739a7f317cd4"
|
|
53
|
+
}
|