mock-config-server 3.0.1 → 3.1.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/LICENSE +21 -21
- package/README.md +614 -502
- package/dist/bin/bin.js +8 -3
- package/dist/bin/build.js +51 -45
- package/dist/bin/cli.js +37 -44
- package/dist/bin/helpers/index.js +36 -17
- package/dist/bin/helpers/resolveConfigFile.js +20 -17
- package/dist/bin/helpers/resolveConfigFilePath.js +12 -35
- package/dist/bin/helpers/resolveExportsFromSourceCode.js +11 -8
- package/dist/bin/resolveConfigFilePath/resolveConfigFilePath.js +12 -35
- package/dist/bin/run.js +17 -12
- package/dist/bin/validateMockServerConfig/helpers/index.js +25 -16
- package/dist/bin/validateMockServerConfig/helpers/isCheckModeValid/index.js +14 -15
- package/dist/bin/validateMockServerConfig/helpers/isCheckModeValid/isCheckModeValid.js +8 -6
- package/dist/bin/validateMockServerConfig/helpers/isDescriptorValueValid/index.js +14 -15
- package/dist/bin/validateMockServerConfig/helpers/isDescriptorValueValid/isDescriptorValueValid.js +15 -18
- package/dist/bin/validateMockServerConfig/validateBaseUrl/validateBaseUrl.js +12 -9
- package/dist/bin/validateMockServerConfig/validateCors/validateCors.js +75 -73
- package/dist/bin/validateMockServerConfig/validateDatabaseConfig/validateDatabaseConfig.d.ts +1 -0
- package/dist/bin/validateMockServerConfig/validateDatabaseConfig/validateDatabaseConfig.js +45 -0
- package/dist/bin/validateMockServerConfig/validateGraphqlConfig/validateGraphqlConfig.js +47 -43
- package/dist/bin/validateMockServerConfig/validateGraphqlConfig/validateRoutes/validateRoutes.js +90 -83
- package/dist/bin/validateMockServerConfig/validateInterceptors/validateInterceptors.js +22 -16
- package/dist/bin/validateMockServerConfig/validateMockServerConfig.js +29 -27
- package/dist/bin/validateMockServerConfig/validatePort/validatePort.js +9 -6
- package/dist/bin/validateMockServerConfig/validateRestConfig/validateRestConfig.js +52 -47
- package/dist/bin/validateMockServerConfig/validateRestConfig/validateRoutes/validateRoutes.js +94 -87
- package/dist/bin/validateMockServerConfig/validateStaticPath/validateStaticPath.js +43 -34
- package/dist/index.js +14 -15
- package/dist/src/core/database/createDatabaseRoutes/createDatabaseRoutes.d.ts +3 -0
- package/dist/src/core/database/createDatabaseRoutes/createDatabaseRoutes.js +33 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/array/createNewId/createNewId.d.ts +4 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/array/createNewId/createNewId.js +16 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/array/findIndexById/findIndexById.d.ts +4 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/array/findIndexById/findIndexById.js +8 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/array/index.d.ts +3 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/array/index.js +38 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/array/isIndex/isIndex.d.ts +1 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/array/isIndex/isIndex.js +8 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/createNestedDatabaseRoutes/createNestedDatabaseRoutes.d.ts +4 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/createNestedDatabaseRoutes/createNestedDatabaseRoutes.js +88 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes.d.ts +2 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes.js +12 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/createShallowDatabaseRoutes/createShallowDatabaseRoutes.d.ts +4 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/createShallowDatabaseRoutes/createShallowDatabaseRoutes.js +38 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/index.d.ts +5 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/index.js +60 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/splitDatabaseByNesting/splitDatabaseByNesting.d.ts +5 -0
- package/dist/src/core/database/createDatabaseRoutes/helpers/splitDatabaseByNesting/splitDatabaseByNesting.js +30 -0
- package/dist/src/core/database/createDatabaseRoutes/storages/File/FileStorage.d.ts +11 -0
- package/dist/src/core/database/createDatabaseRoutes/storages/File/FileStorage.js +64 -0
- package/dist/src/core/database/createDatabaseRoutes/storages/File/FileWriter.d.ts +11 -0
- package/dist/src/core/database/createDatabaseRoutes/storages/File/FileWriter.js +58 -0
- package/dist/src/core/database/createDatabaseRoutes/storages/Memory/MemoryStorage.d.ts +10 -0
- package/dist/src/core/database/createDatabaseRoutes/storages/Memory/MemoryStorage.js +54 -0
- package/dist/src/core/database/createDatabaseRoutes/storages/index.d.ts +2 -0
- package/dist/src/core/database/createDatabaseRoutes/storages/index.js +27 -0
- package/dist/src/core/database/index.d.ts +1 -0
- package/dist/src/core/database/index.js +16 -0
- package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.js +96 -83
- package/dist/src/core/graphql/createGraphQLRoutes/helpers/index.js +14 -15
- package/dist/src/core/graphql/createGraphQLRoutes/helpers/prepareGraphQLRequestConfigs/prepareGraphQLRequestConfigs.js +36 -30
- package/dist/src/core/graphql/index.js +14 -15
- package/dist/src/core/middlewares/cookieParseMiddleware/cookieParseMiddleware.js +15 -13
- package/dist/src/core/middlewares/cookieParseMiddleware/helpers/index.js +14 -15
- package/dist/src/core/middlewares/cookieParseMiddleware/helpers/parseCookie/parseCookie.js +16 -14
- package/dist/src/core/middlewares/corsMiddleware/corsMiddleware.js +48 -41
- package/dist/src/core/middlewares/corsMiddleware/helpers/getAllowedOrigins/getAllowedOrigins.js +13 -10
- package/dist/src/core/middlewares/corsMiddleware/helpers/index.js +14 -15
- package/dist/src/core/middlewares/destroyerMiddleware/destroyerMiddleware.js +21 -18
- package/dist/src/core/middlewares/errorMiddleware/errorMiddleware.js +18 -15
- package/dist/src/core/middlewares/index.js +92 -23
- package/dist/src/core/middlewares/noCorsMiddleware/noCorsMiddleware.js +21 -21
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/getGraphqlUrlSuggestions/getGraphqlUrlSuggestions.js +24 -16
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/getLevenshteinDistance/getLevenshteinDistance.js +78 -74
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/getRestUrlSuggestions.js +36 -31
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/getActualRestUrlMeaningfulString/getActualRestUrlMeaningfulString.js +6 -5
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/getPatternRestUrlMeaningfulString/getPatternRestUrlMeaningfulString.js +6 -3
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/index.js +25 -16
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/index.js +36 -17
- package/dist/src/core/middlewares/notFoundMiddleware/notFoundMiddleware.js +63 -48
- package/dist/src/core/middlewares/requestInterceptorMiddleware/requestInterceptorMiddleware.js +13 -7
- package/dist/src/core/middlewares/staticMiddleware/staticMiddleware.js +26 -25
- package/dist/src/core/rest/createRestRoutes/createRestRoutes.js +71 -56
- package/dist/src/core/rest/createRestRoutes/helpers/index.js +14 -15
- package/dist/src/core/rest/createRestRoutes/helpers/prepareRestRequestConfigs/prepareRestRequestConfigs.js +38 -32
- package/dist/src/core/rest/index.js +14 -15
- package/dist/src/index.js +36 -17
- package/dist/src/server/createMockServer/createMockServer.js +74 -53
- package/dist/src/server/index.js +25 -16
- package/dist/src/server/startMockServer/startMockServer.js +20 -17
- package/dist/src/static/views/assets/icons/scheme-dark.svg +3 -3
- package/dist/src/static/views/assets/icons/scheme-light.svg +3 -3
- package/dist/src/static/views/assets/styles/global.css +88 -88
- package/dist/src/static/views/components/header/index.css +55 -55
- package/dist/src/static/views/components/header/index.ejs +39 -39
- package/dist/src/static/views/components/header/index.js +1 -1
- package/dist/src/static/views/features/scheme/dark.css +12 -12
- package/dist/src/static/views/features/scheme/index.ejs +3 -3
- package/dist/src/static/views/features/scheme/index.js +31 -31
- package/dist/src/static/views/features/scheme/light.css +12 -12
- package/dist/src/static/views/features/tab/index.css +30 -30
- package/dist/src/static/views/features/tab/index.ejs +1 -1
- package/dist/src/static/views/features/tab/index.js +12 -12
- package/dist/src/static/views/pages/404/index.css +10 -10
- package/dist/src/static/views/pages/404/index.ejs +84 -84
- package/dist/src/utils/constants/appPath.js +6 -2
- package/dist/src/utils/constants/checkModes.js +21 -30
- package/dist/src/utils/constants/default.js +15 -11
- package/dist/src/utils/constants/index.js +36 -17
- package/dist/src/utils/helpers/asyncHandler.js +6 -3
- package/dist/src/utils/helpers/config/index.js +14 -15
- package/dist/src/utils/helpers/config/resolveEntityValues/resolveEntityValues.js +109 -122
- package/dist/src/utils/helpers/entities/convertToEntityDescriptor/convertToEntityDescriptor.js +10 -6
- package/dist/src/utils/helpers/entities/index.js +25 -16
- package/dist/src/utils/helpers/entities/isEntityDescriptor/isEntityDescriptor.js +7 -4
- package/dist/src/utils/helpers/graphql/getGraphQLInput/getGraphQLInput.js +28 -18
- package/dist/src/utils/helpers/graphql/index.js +36 -17
- package/dist/src/utils/helpers/graphql/parseGraphQLRequest/parseGraphQLRequest.js +11 -9
- package/dist/src/utils/helpers/graphql/parseQuery/parseQuery.js +20 -17
- package/dist/src/utils/helpers/index.js +114 -25
- package/dist/src/utils/helpers/interceptors/callRequestInterceptor/callRequestInterceptor.js +22 -16
- package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.js +56 -48
- package/dist/src/utils/helpers/interceptors/helpers/setDelay.js +8 -5
- package/dist/src/utils/helpers/interceptors/index.js +25 -16
- package/dist/src/utils/helpers/isPlainObject/isPlainObject.js +6 -6
- package/dist/src/utils/helpers/isPrimitive/isPrimitive.js +6 -3
- package/dist/src/utils/helpers/isRegExp/isRegExp.js +6 -3
- package/dist/src/utils/helpers/sleep.js +7 -4
- package/dist/src/utils/helpers/url/convertWin32PathToUnix/convertWin32PathToUnix.js +6 -6
- package/dist/src/utils/helpers/url/getUrlParts/getUrlParts.js +7 -4
- package/dist/src/utils/helpers/url/index.js +47 -18
- package/dist/src/utils/helpers/url/removeLeadingAndTrailingSlashes/removeLeadingAndTrailingSlashes.js +6 -3
- package/dist/src/utils/helpers/url/urlJoin/urlJoin.js +11 -10
- package/dist/src/utils/types/checkModes.js +1 -2
- package/dist/src/utils/types/database.d.ts +6 -0
- package/dist/src/utils/types/database.js +1 -0
- package/dist/src/utils/types/graphql.js +1 -2
- package/dist/src/utils/types/index.d.ts +1 -0
- package/dist/src/utils/types/index.js +80 -20
- package/dist/src/utils/types/interceptors.js +1 -2
- package/dist/src/utils/types/rest.js +1 -2
- package/dist/src/utils/types/server.d.ts +5 -0
- package/dist/src/utils/types/server.js +1 -2
- package/dist/src/utils/types/values.js +1 -2
- package/package.json +130 -113
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createNestedDatabaseRoutes = void 0;
|
|
7
|
+
var _array = require("../array");
|
|
8
|
+
const createNestedDatabaseRoutes = (router, database, storage) => {
|
|
9
|
+
Object.keys(database).forEach(key => {
|
|
10
|
+
const collectionPath = `/${key}`;
|
|
11
|
+
const itemPath = `/${key}/:id`;
|
|
12
|
+
router.route(collectionPath).get((_request, response) => {
|
|
13
|
+
// ✅ important:
|
|
14
|
+
// set 'Cache-Control' header for explicit browsers response revalidate
|
|
15
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
|
|
16
|
+
response.set('Cache-control', 'max-age=0, must-revalidate');
|
|
17
|
+
response.json(storage.read(key));
|
|
18
|
+
});
|
|
19
|
+
router.route(collectionPath).post((request, response) => {
|
|
20
|
+
const collection = storage.read(key);
|
|
21
|
+
const newResourceId = (0, _array.createNewId)(collection);
|
|
22
|
+
const newResource = {
|
|
23
|
+
...request.body,
|
|
24
|
+
id: newResourceId
|
|
25
|
+
};
|
|
26
|
+
storage.write([key, collection.length], newResource);
|
|
27
|
+
response.set('Location', `${request.url}/${newResourceId}`);
|
|
28
|
+
response.status(201).json(newResource);
|
|
29
|
+
});
|
|
30
|
+
router.route(itemPath).get((request, response) => {
|
|
31
|
+
const currentResourceCollection = storage.read(key);
|
|
32
|
+
const currentResourceIndex = (0, _array.findIndexById)(currentResourceCollection, request.params.id);
|
|
33
|
+
if (currentResourceIndex === -1) {
|
|
34
|
+
response.status(404).end();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// ✅ important:
|
|
39
|
+
// set 'Cache-Control' header for explicit browsers response revalidate
|
|
40
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
|
|
41
|
+
response.set('Cache-control', 'max-age=0, must-revalidate');
|
|
42
|
+
response.json(storage.read([key, currentResourceIndex]));
|
|
43
|
+
});
|
|
44
|
+
router.route(itemPath).put((request, response) => {
|
|
45
|
+
const currentResourceCollection = storage.read(key);
|
|
46
|
+
const currentResourceIndex = (0, _array.findIndexById)(currentResourceCollection, request.params.id);
|
|
47
|
+
if (currentResourceIndex === -1) {
|
|
48
|
+
response.status(404).end();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const currentResource = storage.read([key, currentResourceIndex]);
|
|
52
|
+
const updatedResource = {
|
|
53
|
+
...request.body,
|
|
54
|
+
id: currentResource.id
|
|
55
|
+
};
|
|
56
|
+
storage.write([key, currentResourceIndex], updatedResource);
|
|
57
|
+
response.json(updatedResource);
|
|
58
|
+
});
|
|
59
|
+
router.route(itemPath).patch((request, response) => {
|
|
60
|
+
const currentResourceCollection = storage.read(key);
|
|
61
|
+
const currentResourceIndex = (0, _array.findIndexById)(currentResourceCollection, request.params.id);
|
|
62
|
+
if (currentResourceIndex === -1) {
|
|
63
|
+
response.status(404).end();
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const currentResource = storage.read([key, currentResourceIndex]);
|
|
67
|
+
const updatedResource = {
|
|
68
|
+
...currentResource,
|
|
69
|
+
...request.body,
|
|
70
|
+
id: currentResource.id
|
|
71
|
+
};
|
|
72
|
+
storage.write([key, currentResourceIndex], updatedResource);
|
|
73
|
+
response.json(updatedResource);
|
|
74
|
+
});
|
|
75
|
+
router.route(itemPath).delete((request, response) => {
|
|
76
|
+
const currentResourceCollection = storage.read(key);
|
|
77
|
+
const currentResourceIndex = (0, _array.findIndexById)(currentResourceCollection, request.params.id);
|
|
78
|
+
if (currentResourceIndex === -1) {
|
|
79
|
+
response.status(404).end();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
storage.delete([key, currentResourceIndex]);
|
|
83
|
+
response.status(204).end();
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
return router;
|
|
87
|
+
};
|
|
88
|
+
exports.createNestedDatabaseRoutes = createNestedDatabaseRoutes;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createRewrittenDatabaseRoutes = void 0;
|
|
7
|
+
var _expressUrlrewrite = _interopRequireDefault(require("express-urlrewrite"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
const createRewrittenDatabaseRoutes = (router, rewrittenRoutes) => Object.entries(rewrittenRoutes).forEach(([key, value]) => {
|
|
10
|
+
router.use((0, _expressUrlrewrite.default)(key, value));
|
|
11
|
+
});
|
|
12
|
+
exports.createRewrittenDatabaseRoutes = createRewrittenDatabaseRoutes;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IRouter } from 'express';
|
|
2
|
+
import type { ShallowDatabase } from '../../../../../utils/types';
|
|
3
|
+
import type { MemoryStorage } from '../../storages';
|
|
4
|
+
export declare const createShallowDatabaseRoutes: (router: IRouter, database: ShallowDatabase, storage: MemoryStorage<ShallowDatabase>) => IRouter;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createShallowDatabaseRoutes = void 0;
|
|
7
|
+
const createShallowDatabaseRoutes = (router, database, storage) => {
|
|
8
|
+
Object.keys(database).forEach(key => {
|
|
9
|
+
const path = `/${key}`;
|
|
10
|
+
router.route(path).get((_request, response) => {
|
|
11
|
+
// ✅ important:
|
|
12
|
+
// set 'Cache-Control' header for explicit browsers response revalidate
|
|
13
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
|
|
14
|
+
response.set('Cache-control', 'max-age=0, must-revalidate');
|
|
15
|
+
response.json(storage.read(key));
|
|
16
|
+
});
|
|
17
|
+
router.route(path).post((request, response) => {
|
|
18
|
+
storage.write(key, request.body);
|
|
19
|
+
response.set('Location', request.url);
|
|
20
|
+
response.status(201).json(request.body);
|
|
21
|
+
});
|
|
22
|
+
router.route(path).put((request, response) => {
|
|
23
|
+
storage.write(key, request.body);
|
|
24
|
+
response.json(request.body);
|
|
25
|
+
});
|
|
26
|
+
router.route(path).patch((request, response) => {
|
|
27
|
+
const currentResource = storage.read(key);
|
|
28
|
+
const updatedResource = {
|
|
29
|
+
...currentResource,
|
|
30
|
+
...request.body
|
|
31
|
+
};
|
|
32
|
+
storage.write(key, updatedResource);
|
|
33
|
+
response.json(updatedResource);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
return router;
|
|
37
|
+
};
|
|
38
|
+
exports.createShallowDatabaseRoutes = createShallowDatabaseRoutes;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './array';
|
|
2
|
+
export * from './createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes';
|
|
3
|
+
export * from './createNestedDatabaseRoutes/createNestedDatabaseRoutes';
|
|
4
|
+
export * from './createShallowDatabaseRoutes/createShallowDatabaseRoutes';
|
|
5
|
+
export * from './splitDatabaseByNesting/splitDatabaseByNesting';
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _array = require("./array");
|
|
7
|
+
Object.keys(_array).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _array[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _array[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _createRewrittenDatabaseRoutes = require("./createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes");
|
|
18
|
+
Object.keys(_createRewrittenDatabaseRoutes).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _createRewrittenDatabaseRoutes[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _createRewrittenDatabaseRoutes[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
var _createNestedDatabaseRoutes = require("./createNestedDatabaseRoutes/createNestedDatabaseRoutes");
|
|
29
|
+
Object.keys(_createNestedDatabaseRoutes).forEach(function (key) {
|
|
30
|
+
if (key === "default" || key === "__esModule") return;
|
|
31
|
+
if (key in exports && exports[key] === _createNestedDatabaseRoutes[key]) return;
|
|
32
|
+
Object.defineProperty(exports, key, {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () {
|
|
35
|
+
return _createNestedDatabaseRoutes[key];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
var _createShallowDatabaseRoutes = require("./createShallowDatabaseRoutes/createShallowDatabaseRoutes");
|
|
40
|
+
Object.keys(_createShallowDatabaseRoutes).forEach(function (key) {
|
|
41
|
+
if (key === "default" || key === "__esModule") return;
|
|
42
|
+
if (key in exports && exports[key] === _createShallowDatabaseRoutes[key]) return;
|
|
43
|
+
Object.defineProperty(exports, key, {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () {
|
|
46
|
+
return _createShallowDatabaseRoutes[key];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
var _splitDatabaseByNesting = require("./splitDatabaseByNesting/splitDatabaseByNesting");
|
|
51
|
+
Object.keys(_splitDatabaseByNesting).forEach(function (key) {
|
|
52
|
+
if (key === "default" || key === "__esModule") return;
|
|
53
|
+
if (key in exports && exports[key] === _splitDatabaseByNesting[key]) return;
|
|
54
|
+
Object.defineProperty(exports, key, {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _splitDatabaseByNesting[key];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.splitDatabaseByNesting = void 0;
|
|
7
|
+
var _helpers = require("../../../../../utils/helpers");
|
|
8
|
+
const isAllArrayElementsHaveValidTypeId = array => array.every(element => (0, _helpers.isPlainObject)(element) && (typeof element.id === 'number' || typeof element.id === 'string'));
|
|
9
|
+
const isAllArrayElementsHaveUniqueId = array => {
|
|
10
|
+
const uniqueIdsCount = new Set(array.map(({
|
|
11
|
+
id
|
|
12
|
+
}) => id)).size;
|
|
13
|
+
return array.length === uniqueIdsCount;
|
|
14
|
+
};
|
|
15
|
+
const splitDatabaseByNesting = data => {
|
|
16
|
+
const shallowDatabase = {};
|
|
17
|
+
const nestedDatabase = {};
|
|
18
|
+
Object.entries(data).forEach(([databaseEntityKey, databaseEntityValue]) => {
|
|
19
|
+
if (Array.isArray(databaseEntityValue) && isAllArrayElementsHaveValidTypeId(databaseEntityValue) && isAllArrayElementsHaveUniqueId(databaseEntityValue)) {
|
|
20
|
+
nestedDatabase[databaseEntityKey] = databaseEntityValue;
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
shallowDatabase[databaseEntityKey] = databaseEntityValue;
|
|
24
|
+
});
|
|
25
|
+
return {
|
|
26
|
+
shallowDatabase,
|
|
27
|
+
nestedDatabase
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
exports.splitDatabaseByNesting = splitDatabaseByNesting;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type Index = string | number;
|
|
2
|
+
type Object = Record<Index, any>;
|
|
3
|
+
export declare class FileStorage<T extends Object = Object> {
|
|
4
|
+
private readonly fileWriter;
|
|
5
|
+
private readonly data;
|
|
6
|
+
constructor(fileName: string);
|
|
7
|
+
read(key?: Index | Index[]): any;
|
|
8
|
+
write(key: Index | Index[], value: unknown): void;
|
|
9
|
+
delete(key: Index | Index[]): void;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.FileStorage = void 0;
|
|
7
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
|
9
|
+
var _constants = require("../../../../../utils/constants");
|
|
10
|
+
var _helpers = require("../../helpers");
|
|
11
|
+
var _FileWriter = require("./FileWriter");
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
14
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
15
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
16
|
+
class FileStorage {
|
|
17
|
+
constructor(fileName) {
|
|
18
|
+
_defineProperty(this, "fileWriter", void 0);
|
|
19
|
+
_defineProperty(this, "data", void 0);
|
|
20
|
+
const filePath = _path.default.resolve(_constants.APP_PATH, fileName);
|
|
21
|
+
this.fileWriter = new _FileWriter.FileWriter(filePath);
|
|
22
|
+
this.data = JSON.parse(_fs.default.readFileSync(filePath, 'utf-8'));
|
|
23
|
+
}
|
|
24
|
+
read(key) {
|
|
25
|
+
if (!key) return this.data;
|
|
26
|
+
const keys = Array.isArray(key) ? key : [key];
|
|
27
|
+
let readable = this.data;
|
|
28
|
+
for (const currentKey of keys) {
|
|
29
|
+
readable = readable[currentKey];
|
|
30
|
+
}
|
|
31
|
+
return readable;
|
|
32
|
+
}
|
|
33
|
+
write(key, value) {
|
|
34
|
+
const keys = Array.isArray(key) ? key : [key];
|
|
35
|
+
let writable = this.data;
|
|
36
|
+
let index = 0;
|
|
37
|
+
// ✅ important:
|
|
38
|
+
// stop iterate one element before end of keys for get access to writable object property
|
|
39
|
+
while (index < keys.length - 1) {
|
|
40
|
+
writable = writable[keys[index]];
|
|
41
|
+
index += 1;
|
|
42
|
+
}
|
|
43
|
+
writable[keys[index]] = value;
|
|
44
|
+
this.fileWriter.write(JSON.stringify(this.data));
|
|
45
|
+
}
|
|
46
|
+
delete(key) {
|
|
47
|
+
const keys = Array.isArray(key) ? key : [key];
|
|
48
|
+
let deletable = this.data;
|
|
49
|
+
let index = 0;
|
|
50
|
+
// ✅ important:
|
|
51
|
+
// stop iterate one element before end of key for get access to deletable object property
|
|
52
|
+
while (index < keys.length - 1) {
|
|
53
|
+
deletable = deletable[keys[index]];
|
|
54
|
+
index += 1;
|
|
55
|
+
}
|
|
56
|
+
if (Array.isArray(deletable) && (0, _helpers.isIndex)(keys[index])) {
|
|
57
|
+
deletable.splice(keys[index], 1);
|
|
58
|
+
} else {
|
|
59
|
+
delete deletable[keys[index]];
|
|
60
|
+
}
|
|
61
|
+
this.fileWriter.write(JSON.stringify(this.data));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.FileStorage = FileStorage;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare class FileWriter {
|
|
2
|
+
private readonly filePath;
|
|
3
|
+
private nextData;
|
|
4
|
+
private nextDataPromise;
|
|
5
|
+
private nextDataResolve;
|
|
6
|
+
private writeIsLocked;
|
|
7
|
+
constructor(filePath: string);
|
|
8
|
+
private lockedWrite;
|
|
9
|
+
private unlockedWrite;
|
|
10
|
+
write(data: string): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.FileWriter = void 0;
|
|
7
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
10
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
11
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
12
|
+
class FileWriter {
|
|
13
|
+
constructor(filePath) {
|
|
14
|
+
_defineProperty(this, "filePath", void 0);
|
|
15
|
+
_defineProperty(this, "nextData", null);
|
|
16
|
+
_defineProperty(this, "nextDataPromise", null);
|
|
17
|
+
_defineProperty(this, "nextDataResolve", null);
|
|
18
|
+
_defineProperty(this, "writeIsLocked", false);
|
|
19
|
+
this.filePath = filePath;
|
|
20
|
+
}
|
|
21
|
+
lockedWrite(data) {
|
|
22
|
+
var _this$nextDataPromise;
|
|
23
|
+
this.nextData = data;
|
|
24
|
+
this.nextDataPromise = (_this$nextDataPromise = this.nextDataPromise) !== null && _this$nextDataPromise !== void 0 ? _this$nextDataPromise : new Promise(resolve => {
|
|
25
|
+
this.nextDataResolve = resolve;
|
|
26
|
+
});
|
|
27
|
+
return new Promise(resolve => {
|
|
28
|
+
var _this$nextDataPromise2;
|
|
29
|
+
(_this$nextDataPromise2 = this.nextDataPromise) === null || _this$nextDataPromise2 === void 0 ? void 0 : _this$nextDataPromise2.then(() => {
|
|
30
|
+
resolve();
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
async unlockedWrite(data, recursionLevel = 0) {
|
|
35
|
+
this.writeIsLocked = true;
|
|
36
|
+
await _fs.default.promises.writeFile(this.filePath, data, 'utf-8');
|
|
37
|
+
this.writeIsLocked = false;
|
|
38
|
+
|
|
39
|
+
// ✅ important:
|
|
40
|
+
// copy content of this.nextData into new variable
|
|
41
|
+
// for avoid infinite recursion of 'unlockedWrite'
|
|
42
|
+
const passedData = this.nextData;
|
|
43
|
+
this.nextData = null;
|
|
44
|
+
if (passedData) {
|
|
45
|
+
await this.unlockedWrite(passedData, recursionLevel + 1);
|
|
46
|
+
if (recursionLevel === 0) {
|
|
47
|
+
var _this$nextDataResolve;
|
|
48
|
+
(_this$nextDataResolve = this.nextDataResolve) === null || _this$nextDataResolve === void 0 ? void 0 : _this$nextDataResolve.call(this);
|
|
49
|
+
this.nextDataPromise = null;
|
|
50
|
+
this.nextDataResolve = null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
write(data) {
|
|
55
|
+
return this.writeIsLocked ? this.lockedWrite(data) : this.unlockedWrite(data);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.FileWriter = FileWriter;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type Index = string | number;
|
|
2
|
+
type Object = Record<Index, any>;
|
|
3
|
+
export declare class MemoryStorage<T extends Object = Object> {
|
|
4
|
+
private readonly data;
|
|
5
|
+
constructor(initialData: T);
|
|
6
|
+
read(key?: Index | Index[]): any;
|
|
7
|
+
write(key: Index | Index[], value: unknown): void;
|
|
8
|
+
delete(key: Index | Index[]): void;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MemoryStorage = void 0;
|
|
7
|
+
var _helpers = require("../../helpers");
|
|
8
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
9
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
10
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
11
|
+
class MemoryStorage {
|
|
12
|
+
constructor(initialData) {
|
|
13
|
+
_defineProperty(this, "data", void 0);
|
|
14
|
+
this.data = initialData;
|
|
15
|
+
}
|
|
16
|
+
read(key) {
|
|
17
|
+
if (!key) return this.data;
|
|
18
|
+
const keys = Array.isArray(key) ? key : [key];
|
|
19
|
+
let readable = this.data;
|
|
20
|
+
for (const currentKey of keys) {
|
|
21
|
+
readable = readable[currentKey];
|
|
22
|
+
}
|
|
23
|
+
return readable;
|
|
24
|
+
}
|
|
25
|
+
write(key, value) {
|
|
26
|
+
const keys = Array.isArray(key) ? key : [key];
|
|
27
|
+
let writable = this.data;
|
|
28
|
+
let index = 0;
|
|
29
|
+
// ✅ important:
|
|
30
|
+
// stop iterate one element before end of keys for get access to writable object property
|
|
31
|
+
while (index < keys.length - 1) {
|
|
32
|
+
writable = writable[keys[index]];
|
|
33
|
+
index += 1;
|
|
34
|
+
}
|
|
35
|
+
writable[keys[index]] = value;
|
|
36
|
+
}
|
|
37
|
+
delete(key) {
|
|
38
|
+
const keys = Array.isArray(key) ? key : [key];
|
|
39
|
+
let deletable = this.data;
|
|
40
|
+
let index = 0;
|
|
41
|
+
// ✅ important:
|
|
42
|
+
// stop iterate one element before end of key for get access to deletable object property
|
|
43
|
+
while (index < keys.length - 1) {
|
|
44
|
+
deletable = deletable[keys[index]];
|
|
45
|
+
index += 1;
|
|
46
|
+
}
|
|
47
|
+
if (Array.isArray(deletable) && (0, _helpers.isIndex)(keys[index])) {
|
|
48
|
+
deletable.splice(keys[index], 1);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
delete deletable[keys[index]];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.MemoryStorage = MemoryStorage;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _FileStorage = require("./File/FileStorage");
|
|
7
|
+
Object.keys(_FileStorage).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _FileStorage[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _FileStorage[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _MemoryStorage = require("./Memory/MemoryStorage");
|
|
18
|
+
Object.keys(_MemoryStorage).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _MemoryStorage[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _MemoryStorage[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './createDatabaseRoutes/createDatabaseRoutes';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _createDatabaseRoutes = require("./createDatabaseRoutes/createDatabaseRoutes");
|
|
7
|
+
Object.keys(_createDatabaseRoutes).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _createDatabaseRoutes[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _createDatabaseRoutes[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|