mock-config-server 3.4.1 → 3.6.0
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/README.md +2 -0
- package/dist/bin/bin.js +3 -6
- package/dist/bin/build.js +52 -50
- package/dist/bin/cli.js +50 -43
- package/dist/bin/helpers/createTemplate.js +29 -21
- package/dist/bin/helpers/getMostSpecificPathFromError.js +34 -30
- package/dist/bin/helpers/getValidationMessageFromPath.js +11 -8
- package/dist/bin/helpers/index.js +21 -79
- package/dist/bin/helpers/isOnlyRequestedDataResolvingPropertyExists.js +13 -6
- package/dist/bin/helpers/resolveConfigFile.js +22 -19
- package/dist/bin/helpers/resolveConfigFilePath.js +19 -12
- package/dist/bin/helpers/resolveExportsFromSourceCode.js +13 -10
- package/dist/bin/init.js +114 -97
- package/dist/bin/run.js +42 -43
- package/dist/bin/validateMockServerConfig/baseUrlSchema/baseUrlSchema.js +9 -5
- package/dist/bin/validateMockServerConfig/corsSchema/corsSchema.d.ts +2 -2
- package/dist/bin/validateMockServerConfig/corsSchema/corsSchema.js +32 -14
- package/dist/bin/validateMockServerConfig/databaseConfigSchema/databaseConfigSchema.js +19 -9
- package/dist/bin/validateMockServerConfig/graphqlConfigSchema/graphqlConfigSchema.d.ts +82 -72
- package/dist/bin/validateMockServerConfig/graphqlConfigSchema/graphqlConfigSchema.js +38 -22
- package/dist/bin/validateMockServerConfig/graphqlConfigSchema/routeConfigSchema/routeConfigSchema.d.ts +25 -21
- package/dist/bin/validateMockServerConfig/graphqlConfigSchema/routeConfigSchema/routeConfigSchema.js +36 -28
- package/dist/bin/validateMockServerConfig/interceptorsSchema/interceptorsSchema.js +12 -8
- package/dist/bin/validateMockServerConfig/portSchema/portSchema.js +9 -5
- package/dist/bin/validateMockServerConfig/queueSchema/queueSchema.d.ts +2 -2
- package/dist/bin/validateMockServerConfig/queueSchema/queueSchema.js +18 -9
- package/dist/bin/validateMockServerConfig/restConfigSchema/restConfigSchema.d.ts +270 -240
- package/dist/bin/validateMockServerConfig/restConfigSchema/restConfigSchema.js +33 -19
- package/dist/bin/validateMockServerConfig/restConfigSchema/routeConfigSchema/routeConfigSchema.d.ts +33 -28
- package/dist/bin/validateMockServerConfig/restConfigSchema/routeConfigSchema/routeConfigSchema.js +60 -48
- package/dist/bin/validateMockServerConfig/settingsSchema/settingsSchema.js +13 -9
- package/dist/bin/validateMockServerConfig/staticPathSchema/staticPathSchema.js +19 -9
- package/dist/bin/validateMockServerConfig/utils/checkModeSchema/checkModeSchema.js +27 -9
- package/dist/bin/validateMockServerConfig/utils/entitiesSchema/entitiesSchema.d.ts +4 -8
- package/dist/bin/validateMockServerConfig/utils/entitiesSchema/entitiesSchema.js +117 -60
- package/dist/bin/validateMockServerConfig/utils/index.js +20 -68
- package/dist/bin/validateMockServerConfig/utils/jsonSchema/jsonSchema.js +30 -10
- package/dist/bin/validateMockServerConfig/utils/plainObjectSchema/plainObjectSchema.js +9 -8
- package/dist/bin/validateMockServerConfig/utils/requiredPropertiesSchema/requiredPropertiesSchema.d.ts +1 -1
- package/dist/bin/validateMockServerConfig/utils/requiredPropertiesSchema/requiredPropertiesSchema.js +10 -7
- package/dist/bin/validateMockServerConfig/utils/sharedSchema/sharedSchema.js +18 -6
- package/dist/bin/validateMockServerConfig/validateApiMockServerConfig.js +43 -40
- package/dist/bin/validateMockServerConfig/validateMockServerConfig.js +38 -35
- package/dist/index.js +15 -13
- package/dist/src/core/database/createDatabaseRoutes/createDatabaseRoutes.js +25 -28
- package/dist/src/core/database/createDatabaseRoutes/helpers/array/createNewId/createNewId.js +14 -11
- package/dist/src/core/database/createDatabaseRoutes/helpers/array/findIndexById/findIndexById.js +8 -5
- package/dist/src/core/database/createDatabaseRoutes/helpers/array/index.js +17 -35
- package/dist/src/core/database/createDatabaseRoutes/helpers/array/isIndex/isIndex.js +8 -5
- package/dist/src/core/database/createDatabaseRoutes/helpers/createNestedDatabaseRoutes/createNestedDatabaseRoutes.js +159 -143
- package/dist/src/core/database/createDatabaseRoutes/helpers/createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes.js +15 -8
- package/dist/src/core/database/createDatabaseRoutes/helpers/createShallowDatabaseRoutes/createShallowDatabaseRoutes.js +90 -94
- package/dist/src/core/database/createDatabaseRoutes/helpers/filter/filter.js +49 -46
- package/dist/src/core/database/createDatabaseRoutes/helpers/index.js +19 -57
- package/dist/src/core/database/createDatabaseRoutes/helpers/pagination/pagination.js +32 -31
- package/dist/src/core/database/createDatabaseRoutes/helpers/search/search.js +34 -24
- package/dist/src/core/database/createDatabaseRoutes/helpers/sort/sort.js +37 -33
- package/dist/src/core/database/createDatabaseRoutes/helpers/splitDatabaseByNesting/splitDatabaseByNesting.js +26 -25
- package/dist/src/core/database/createDatabaseRoutes/storages/File/FileStorage.js +65 -50
- package/dist/src/core/database/createDatabaseRoutes/storages/File/FileWriter.js +55 -48
- package/dist/src/core/database/createDatabaseRoutes/storages/Memory/MemoryStorage.js +51 -41
- package/dist/src/core/database/createDatabaseRoutes/storages/index.js +16 -24
- package/dist/src/core/database/index.js +15 -13
- package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.js +131 -140
- package/dist/src/core/graphql/createGraphQLRoutes/helpers/index.js +15 -13
- package/dist/src/core/graphql/createGraphQLRoutes/helpers/prepareGraphQLRequestConfigs/prepareGraphQLRequestConfigs.js +36 -41
- package/dist/src/core/graphql/index.js +15 -13
- package/dist/src/core/middlewares/cookieParseMiddleware/cookieParseMiddleware.js +16 -13
- package/dist/src/core/middlewares/cookieParseMiddleware/helpers/index.js +15 -13
- package/dist/src/core/middlewares/cookieParseMiddleware/helpers/parseCookie/parseCookie.js +18 -15
- package/dist/src/core/middlewares/corsMiddleware/corsMiddleware.js +50 -47
- package/dist/src/core/middlewares/corsMiddleware/helpers/getAllowedOrigins/getAllowedOrigins.js +17 -12
- package/dist/src/core/middlewares/corsMiddleware/helpers/index.js +15 -13
- package/dist/src/core/middlewares/destroyerMiddleware/destroyerMiddleware.js +23 -20
- package/dist/src/core/middlewares/errorMiddleware/errorMiddleware.js +23 -17
- package/dist/src/core/middlewares/index.js +23 -91
- package/dist/src/core/middlewares/noCorsMiddleware/noCorsMiddleware.js +22 -19
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/getGraphqlUrlSuggestions/getGraphqlUrlSuggestions.js +21 -23
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/getLevenshteinDistance/getLevenshteinDistance.js +80 -80
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/getRestUrlSuggestions.js +34 -34
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/getActualRestUrlMeaningfulString/getActualRestUrlMeaningfulString.js +8 -5
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/getPatternRestUrlMeaningfulString/getPatternRestUrlMeaningfulString.js +8 -5
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/index.js +16 -24
- package/dist/src/core/middlewares/notFoundMiddleware/helpers/index.js +17 -35
- package/dist/src/core/middlewares/notFoundMiddleware/notFoundMiddleware.js +58 -60
- package/dist/src/core/middlewares/requestInterceptorMiddleware/requestInterceptorMiddleware.js +16 -17
- package/dist/src/core/middlewares/staticMiddleware/staticMiddleware.js +32 -25
- package/dist/src/core/rest/createRestRoutes/createRestRoutes.js +125 -130
- package/dist/src/core/rest/createRestRoutes/helpers/index.js +15 -13
- package/dist/src/core/rest/createRestRoutes/helpers/prepareRestRequestConfigs/prepareRestRequestConfigs.js +37 -43
- package/dist/src/core/rest/index.js +15 -13
- package/dist/src/index.js +16 -24
- package/dist/src/server/createDatabaseMockServer/createDatabaseMockServer.js +56 -53
- package/dist/src/server/createGraphQLMockServer/createGraphQLMockServer.js +64 -62
- package/dist/src/server/createMockServer/createMockServer.js +94 -91
- package/dist/src/server/createRestMockServer/createRestMockServer.js +64 -62
- package/dist/src/server/index.js +23 -91
- package/dist/src/server/startDatabaseMockServer/startDatabaseMockServer.js +25 -19
- package/dist/src/server/startGraphQLMockServer/startGraphQLMockServer.js +25 -19
- package/dist/src/server/startMockServer/startMockServer.js +25 -19
- package/dist/src/server/startRestMockServer/startRestMockServer.js +25 -19
- package/dist/src/utils/constants/appPath.js +8 -4
- package/dist/src/utils/constants/checkModes.js +74 -11
- package/dist/src/utils/constants/default.js +18 -14
- package/dist/src/utils/constants/index.js +17 -35
- package/dist/src/utils/helpers/asyncHandler.js +8 -5
- package/dist/src/utils/helpers/config/index.js +15 -13
- package/dist/src/utils/helpers/config/resolveEntityValues/resolveEntityValues.js +103 -110
- package/dist/src/utils/helpers/entities/convertToEntityDescriptor/convertToEntityDescriptor.js +12 -9
- package/dist/src/utils/helpers/entities/index.js +16 -24
- package/dist/src/utils/helpers/entities/isEntityDescriptor/isEntityDescriptor.js +9 -6
- package/dist/src/utils/helpers/files/index.js +15 -13
- package/dist/src/utils/helpers/files/isFilePathValid/isFilePathValid.js +22 -15
- package/dist/src/utils/helpers/graphql/getGraphQLInput/getGraphQLInput.js +25 -29
- package/dist/src/utils/helpers/graphql/index.js +17 -35
- package/dist/src/utils/helpers/graphql/parseGraphQLRequest/parseGraphQLRequest.js +13 -10
- package/dist/src/utils/helpers/graphql/parseQuery/parseQuery.js +23 -19
- package/dist/src/utils/helpers/index.js +26 -124
- package/dist/src/utils/helpers/interceptors/callRequestInterceptor/callRequestInterceptor.js +21 -21
- package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.js +62 -64
- package/dist/src/utils/helpers/interceptors/helpers/setDelay.js +10 -7
- package/dist/src/utils/helpers/interceptors/index.js +16 -24
- package/dist/src/utils/helpers/isPlainObject/isPlainObject.js +8 -5
- package/dist/src/utils/helpers/isPrimitive/isPrimitive.js +8 -5
- package/dist/src/utils/helpers/isRegExp/isRegExp.js +8 -5
- package/dist/src/utils/helpers/sleep.js +9 -6
- package/dist/src/utils/helpers/tests/createTmpDir.js +16 -9
- package/dist/src/utils/helpers/tests/index.js +15 -13
- package/dist/src/utils/helpers/url/convertWin32PathToUnix/convertWin32PathToUnix.js +8 -5
- package/dist/src/utils/helpers/url/getUrlParts/getUrlParts.js +9 -6
- package/dist/src/utils/helpers/url/index.js +18 -46
- package/dist/src/utils/helpers/url/removeLeadingAndTrailingSlashes/removeLeadingAndTrailingSlashes.js +8 -5
- package/dist/src/utils/helpers/url/urlJoin/urlJoin.js +18 -11
- package/dist/src/utils/types/checkModes.js +4 -1
- package/dist/src/utils/types/database.js +4 -1
- package/dist/src/utils/types/entities.js +4 -1
- package/dist/src/utils/types/graphql.d.ts +1 -1
- package/dist/src/utils/types/graphql.js +4 -1
- package/dist/src/utils/types/index.js +24 -102
- package/dist/src/utils/types/interceptors.js +4 -1
- package/dist/src/utils/types/rest.d.ts +1 -1
- package/dist/src/utils/types/rest.js +4 -1
- package/dist/src/utils/types/server.js +4 -1
- package/dist/src/utils/types/utils.js +4 -1
- package/dist/src/utils/types/values.js +4 -1
- package/package.json +26 -29
- package/dist/bin/templates/.eslintrc.js +0 -14
- package/dist/bin/templates/tsconfig.json +0 -11
|
@@ -1,60 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return _createNestedDatabaseRoutes[key];
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
var _createRewrittenDatabaseRoutes = require("./createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes");
|
|
29
|
-
Object.keys(_createRewrittenDatabaseRoutes).forEach(function (key) {
|
|
30
|
-
if (key === "default" || key === "__esModule") return;
|
|
31
|
-
if (key in exports && exports[key] === _createRewrittenDatabaseRoutes[key]) return;
|
|
32
|
-
Object.defineProperty(exports, key, {
|
|
33
|
-
enumerable: true,
|
|
34
|
-
get: function () {
|
|
35
|
-
return _createRewrittenDatabaseRoutes[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
|
-
});
|
|
5
|
+
_export_star(require("./array"), exports);
|
|
6
|
+
_export_star(require("./createNestedDatabaseRoutes/createNestedDatabaseRoutes"), exports);
|
|
7
|
+
_export_star(require("./createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes"), exports);
|
|
8
|
+
_export_star(require("./createShallowDatabaseRoutes/createShallowDatabaseRoutes"), exports);
|
|
9
|
+
_export_star(require("./splitDatabaseByNesting/splitDatabaseByNesting"), exports);
|
|
10
|
+
function _export_star(from, to) {
|
|
11
|
+
Object.keys(from).forEach(function(k) {
|
|
12
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
13
|
+
Object.defineProperty(to, k, {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function() {
|
|
16
|
+
return from[k];
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
return from;
|
|
22
|
+
}
|
|
@@ -1,36 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "pagination", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return pagination;
|
|
9
|
+
}
|
|
5
10
|
});
|
|
6
|
-
exports.pagination = void 0;
|
|
7
11
|
const DEFAULT_LIMIT = 10;
|
|
8
|
-
const pagination = (array, queries)
|
|
9
|
-
|
|
10
|
-
_page
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
results
|
|
34
|
-
};
|
|
12
|
+
const pagination = (array, queries)=>{
|
|
13
|
+
const { _page } = queries;
|
|
14
|
+
if (!_page || +_page <= 0) return array;
|
|
15
|
+
const page = +_page;
|
|
16
|
+
const limit = queries._limit && +queries._limit > 0 ? +queries._limit : DEFAULT_LIMIT;
|
|
17
|
+
const pages = Math.ceil(array.length / limit);
|
|
18
|
+
if (page > pages) return array;
|
|
19
|
+
const start = page * limit - limit;
|
|
20
|
+
const end = page * limit;
|
|
21
|
+
const results = array.slice(start, end);
|
|
22
|
+
const next = page + 1 <= pages ? page + 1 : null;
|
|
23
|
+
const prev = page - 1 !== 0 ? page - 1 : null;
|
|
24
|
+
const last = pages > 0 ? pages : null;
|
|
25
|
+
return {
|
|
26
|
+
_link: {
|
|
27
|
+
count: array.length,
|
|
28
|
+
pages,
|
|
29
|
+
first: 1,
|
|
30
|
+
current: page,
|
|
31
|
+
next,
|
|
32
|
+
prev,
|
|
33
|
+
last
|
|
34
|
+
},
|
|
35
|
+
results
|
|
36
|
+
};
|
|
35
37
|
};
|
|
36
|
-
exports.pagination = pagination;
|
|
@@ -1,29 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
search: function() {
|
|
13
|
+
return search;
|
|
14
|
+
},
|
|
15
|
+
searchInNestedObjects: function() {
|
|
16
|
+
return searchInNestedObjects;
|
|
15
17
|
}
|
|
16
|
-
}
|
|
17
|
-
return false;
|
|
18
|
-
};
|
|
19
|
-
exports.searchInNestedObjects = searchInNestedObjects;
|
|
20
|
-
const search = (array, searchText) => array.filter(element => {
|
|
21
|
-
if (typeof searchText === 'string') {
|
|
22
|
-
return searchInNestedObjects(element, searchText);
|
|
23
|
-
}
|
|
24
|
-
if (Array.isArray(searchText)) {
|
|
25
|
-
return searchText.some(text => searchInNestedObjects(element, text));
|
|
26
|
-
}
|
|
27
|
-
throw new Error('search technical error');
|
|
28
18
|
});
|
|
29
|
-
|
|
19
|
+
const searchInNestedObjects = (obj, searchText)=>{
|
|
20
|
+
for(const key in obj){
|
|
21
|
+
if (typeof obj[key] === 'object' && obj[key] !== null) {
|
|
22
|
+
if (searchInNestedObjects(obj[key], searchText)) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
} else if (String(obj[key]).includes(searchText)) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
};
|
|
31
|
+
const search = (array, searchText)=>array.filter((element)=>{
|
|
32
|
+
if (typeof searchText === 'string') {
|
|
33
|
+
return searchInNestedObjects(element, searchText);
|
|
34
|
+
}
|
|
35
|
+
if (Array.isArray(searchText)) {
|
|
36
|
+
return searchText.some((text)=>searchInNestedObjects(element, text));
|
|
37
|
+
}
|
|
38
|
+
throw new Error('search technical error');
|
|
39
|
+
});
|
|
@@ -1,41 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
5
|
+
Object.defineProperty(exports, "sort", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return sort;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _flat = require("flat");
|
|
8
12
|
const DEFAULT_ORDER = 'asc';
|
|
9
|
-
const getOrder = order
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
const getOrder = (order)=>{
|
|
14
|
+
if (order === 'asc' || order === 'desc') return order;
|
|
15
|
+
return DEFAULT_ORDER;
|
|
12
16
|
};
|
|
13
|
-
const sortArray = (array, key, order)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
});
|
|
22
|
-
const sort = (array, queries) => {
|
|
23
|
-
const {
|
|
24
|
-
_sort,
|
|
25
|
-
_order = DEFAULT_ORDER
|
|
26
|
-
} = queries;
|
|
27
|
-
if (!_sort) return array;
|
|
28
|
-
const result = [...array];
|
|
29
|
-
if (Array.isArray(_sort)) {
|
|
30
|
-
const orders = Array.isArray(_order) ? _order : [_order];
|
|
31
|
-
_sort.forEach((key, index) => {
|
|
32
|
-
const order = getOrder(orders[index]);
|
|
33
|
-
sortArray(result, key, order);
|
|
17
|
+
const sortArray = (array, key, order)=>array.sort((a, b)=>{
|
|
18
|
+
const flattenedA = (0, _flat.flatten)(a);
|
|
19
|
+
const flattenedB = (0, _flat.flatten)(b);
|
|
20
|
+
if (!flattenedA[key] || !flattenedB[key]) return 0;
|
|
21
|
+
if (typeof flattenedA[key] === 'string' && typeof flattenedB[key] === 'string') {
|
|
22
|
+
return order === 'asc' ? flattenedA[key].localeCompare(flattenedB[key]) : flattenedB[key].localeCompare(flattenedA[key]);
|
|
23
|
+
}
|
|
24
|
+
return order === 'asc' ? Number(flattenedA[key]) - Number(flattenedB[key]) : Number(flattenedB[key]) - Number(flattenedA[key]);
|
|
34
25
|
});
|
|
26
|
+
const sort = (array, queries)=>{
|
|
27
|
+
const { _sort, _order = DEFAULT_ORDER } = queries;
|
|
28
|
+
if (!_sort) return array;
|
|
29
|
+
const result = [
|
|
30
|
+
...array
|
|
31
|
+
];
|
|
32
|
+
if (Array.isArray(_sort)) {
|
|
33
|
+
const orders = Array.isArray(_order) ? _order : [
|
|
34
|
+
_order
|
|
35
|
+
];
|
|
36
|
+
_sort.forEach((key, index)=>{
|
|
37
|
+
const order = getOrder(orders[index]);
|
|
38
|
+
sortArray(result, key, order);
|
|
39
|
+
});
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
const order = getOrder(Array.isArray(_order) ? _order[0] : _order);
|
|
43
|
+
sortArray(result, _sort, order);
|
|
35
44
|
return result;
|
|
36
|
-
}
|
|
37
|
-
const order = getOrder(Array.isArray(_order) ? _order[0] : _order);
|
|
38
|
-
sortArray(result, _sort, order);
|
|
39
|
-
return result;
|
|
40
45
|
};
|
|
41
|
-
exports.sort = sort;
|
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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;
|
|
5
|
+
Object.defineProperty(exports, "splitDatabaseByNesting", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return splitDatabaseByNesting;
|
|
22
9
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
10
|
+
});
|
|
11
|
+
const _helpers = require("../../../../../utils/helpers");
|
|
12
|
+
const isAllArrayElementsHaveValidTypeId = (array)=>array.every((element)=>(0, _helpers.isPlainObject)(element) && (typeof element.id === 'number' || typeof element.id === 'string'));
|
|
13
|
+
const isAllArrayElementsHaveUniqueId = (array)=>{
|
|
14
|
+
const uniqueIdsCount = new Set(array.map(({ id })=>id)).size;
|
|
15
|
+
return array.length === uniqueIdsCount;
|
|
16
|
+
};
|
|
17
|
+
const splitDatabaseByNesting = (data)=>{
|
|
18
|
+
const shallowDatabase = {};
|
|
19
|
+
const nestedDatabase = {};
|
|
20
|
+
Object.entries(data).forEach(([databaseEntityKey, databaseEntityValue])=>{
|
|
21
|
+
if (Array.isArray(databaseEntityValue) && isAllArrayElementsHaveValidTypeId(databaseEntityValue) && isAllArrayElementsHaveUniqueId(databaseEntityValue)) {
|
|
22
|
+
nestedDatabase[databaseEntityKey] = databaseEntityValue;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
shallowDatabase[databaseEntityKey] = databaseEntityValue;
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
shallowDatabase,
|
|
29
|
+
nestedDatabase
|
|
30
|
+
};
|
|
29
31
|
};
|
|
30
|
-
exports.splitDatabaseByNesting = splitDatabaseByNesting;
|
|
@@ -1,59 +1,74 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
Object.defineProperty(exports, "FileStorage", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return FileStorage;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
12
|
+
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
13
|
+
const _constants = require("../../../../../utils/constants");
|
|
14
|
+
const _helpers = require("../../helpers");
|
|
15
|
+
const _FileWriter = require("./FileWriter");
|
|
16
|
+
function _interop_require_default(obj) {
|
|
17
|
+
return obj && obj.__esModule ? obj : {
|
|
18
|
+
default: obj
|
|
19
|
+
};
|
|
20
|
+
}
|
|
13
21
|
class FileStorage {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (!key) return this.data;
|
|
21
|
-
const keys = Array.isArray(key) ? key : [key];
|
|
22
|
-
let readable = this.data;
|
|
23
|
-
for (const currentKey of keys) {
|
|
24
|
-
readable = readable[currentKey];
|
|
22
|
+
fileWriter;
|
|
23
|
+
data;
|
|
24
|
+
constructor(fileName){
|
|
25
|
+
const filePath = _path.default.resolve(_constants.APP_PATH, fileName);
|
|
26
|
+
this.fileWriter = new _FileWriter.FileWriter(filePath);
|
|
27
|
+
this.data = JSON.parse(_fs.default.readFileSync(filePath, 'utf-8'));
|
|
25
28
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
index += 1;
|
|
29
|
+
read(key) {
|
|
30
|
+
if (!key) return this.data;
|
|
31
|
+
const keys = Array.isArray(key) ? key : [
|
|
32
|
+
key
|
|
33
|
+
];
|
|
34
|
+
let readable = this.data;
|
|
35
|
+
for (const currentKey of keys){
|
|
36
|
+
readable = readable[currentKey];
|
|
37
|
+
}
|
|
38
|
+
return readable;
|
|
37
39
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
40
|
+
write(key, value) {
|
|
41
|
+
const keys = Array.isArray(key) ? key : [
|
|
42
|
+
key
|
|
43
|
+
];
|
|
44
|
+
let writable = this.data;
|
|
45
|
+
let index = 0;
|
|
46
|
+
// ✅ important:
|
|
47
|
+
// stop iterate one element before end of keys for get access to writable object property
|
|
48
|
+
while(index < keys.length - 1){
|
|
49
|
+
writable = writable[keys[index]];
|
|
50
|
+
index += 1;
|
|
51
|
+
}
|
|
52
|
+
writable[keys[index]] = value;
|
|
53
|
+
this.fileWriter.write(JSON.stringify(this.data));
|
|
50
54
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
delete(key) {
|
|
56
|
+
const keys = Array.isArray(key) ? key : [
|
|
57
|
+
key
|
|
58
|
+
];
|
|
59
|
+
let deletable = this.data;
|
|
60
|
+
let index = 0;
|
|
61
|
+
// ✅ important:
|
|
62
|
+
// stop iterate one element before end of key for get access to deletable object property
|
|
63
|
+
while(index < keys.length - 1){
|
|
64
|
+
deletable = deletable[keys[index]];
|
|
65
|
+
index += 1;
|
|
66
|
+
}
|
|
67
|
+
if (Array.isArray(deletable) && (0, _helpers.isIndex)(keys[index])) {
|
|
68
|
+
deletable.splice(keys[index], 1);
|
|
69
|
+
} else {
|
|
70
|
+
delete deletable[keys[index]];
|
|
71
|
+
}
|
|
72
|
+
this.fileWriter.write(JSON.stringify(this.data));
|
|
55
73
|
}
|
|
56
|
-
this.fileWriter.write(JSON.stringify(this.data));
|
|
57
|
-
}
|
|
58
74
|
}
|
|
59
|
-
exports.FileStorage = FileStorage;
|
|
@@ -1,54 +1,61 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
function
|
|
5
|
+
Object.defineProperty(exports, "FileWriter", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return FileWriter;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
12
|
+
function _interop_require_default(obj) {
|
|
13
|
+
return obj && obj.__esModule ? obj : {
|
|
14
|
+
default: obj
|
|
15
|
+
};
|
|
16
|
+
}
|
|
9
17
|
class FileWriter {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
18
|
+
filePath;
|
|
19
|
+
nextData = null;
|
|
20
|
+
nextDataPromise = null;
|
|
21
|
+
nextDataResolve = null;
|
|
22
|
+
writeIsLocked = false;
|
|
23
|
+
constructor(filePath){
|
|
24
|
+
this.filePath = filePath;
|
|
25
|
+
}
|
|
26
|
+
lockedWrite(data) {
|
|
27
|
+
this.nextData = data;
|
|
28
|
+
var _this_nextDataPromise;
|
|
29
|
+
this.nextDataPromise = (_this_nextDataPromise = this.nextDataPromise) !== null && _this_nextDataPromise !== void 0 ? _this_nextDataPromise : new Promise((resolve)=>{
|
|
30
|
+
this.nextDataResolve = resolve;
|
|
31
|
+
});
|
|
32
|
+
return new Promise((resolve)=>{
|
|
33
|
+
var _this_nextDataPromise;
|
|
34
|
+
(_this_nextDataPromise = this.nextDataPromise) === null || _this_nextDataPromise === void 0 ? void 0 : _this_nextDataPromise.then(()=>{
|
|
35
|
+
resolve();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
async unlockedWrite(data, recursionLevel = 0) {
|
|
40
|
+
this.writeIsLocked = true;
|
|
41
|
+
await _fs.default.promises.writeFile(this.filePath, data, 'utf-8');
|
|
42
|
+
this.writeIsLocked = false;
|
|
43
|
+
// ✅ important:
|
|
44
|
+
// copy content of this.nextData into new variable
|
|
45
|
+
// for avoid infinite recursion of 'unlockedWrite'
|
|
46
|
+
const passedData = this.nextData;
|
|
47
|
+
this.nextData = null;
|
|
48
|
+
if (passedData) {
|
|
49
|
+
await this.unlockedWrite(passedData, recursionLevel + 1);
|
|
50
|
+
if (recursionLevel === 0) {
|
|
51
|
+
var _this_nextDataResolve, _this;
|
|
52
|
+
(_this_nextDataResolve = (_this = this).nextDataResolve) === null || _this_nextDataResolve === void 0 ? void 0 : _this_nextDataResolve.call(_this);
|
|
53
|
+
this.nextDataPromise = null;
|
|
54
|
+
this.nextDataResolve = null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
write(data) {
|
|
59
|
+
return this.writeIsLocked ? this.lockedWrite(data) : this.unlockedWrite(data);
|
|
48
60
|
}
|
|
49
|
-
}
|
|
50
|
-
write(data) {
|
|
51
|
-
return this.writeIsLocked ? this.lockedWrite(data) : this.unlockedWrite(data);
|
|
52
|
-
}
|
|
53
61
|
}
|
|
54
|
-
exports.FileWriter = FileWriter;
|