mock-config-server 3.4.0 → 3.5.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/dist/bin/bin.js +5 -8
- 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 -37
- package/dist/bin/templates/js/full/mock-server.config.js +16 -16
- package/dist/bin/templates/js/graphql/mock-server.config.js +9 -9
- package/dist/bin/templates/js/rest/mock-server.config.js +9 -9
- package/dist/bin/templates/ts/full/mock-requests/graphql/index.ts +2 -2
- package/dist/bin/templates/ts/full/mock-requests/graphql/user.ts +37 -37
- package/dist/bin/templates/ts/full/mock-requests/graphql/users.ts +14 -14
- package/dist/bin/templates/ts/full/mock-requests/rest/index.ts +2 -2
- package/dist/bin/templates/ts/full/mock-requests/rest/user.ts +37 -37
- package/dist/bin/templates/ts/full/mock-requests/rest/users.ts +14 -14
- package/dist/bin/templates/ts/full/mock-server.config.ts +18 -18
- package/dist/bin/templates/ts/graphql/mock-requests/index.ts +2 -2
- package/dist/bin/templates/ts/graphql/mock-requests/user.ts +37 -37
- package/dist/bin/templates/ts/graphql/mock-requests/users.ts +14 -14
- package/dist/bin/templates/ts/graphql/mock-server.config.ts +11 -11
- package/dist/bin/templates/ts/rest/mock-requests/index.ts +2 -2
- package/dist/bin/templates/ts/rest/mock-requests/user.ts +37 -37
- package/dist/bin/templates/ts/rest/mock-requests/users.ts +14 -14
- package/dist/bin/templates/ts/rest/mock-server.config.ts +11 -11
- package/dist/bin/validateMockServerConfig/baseUrlSchema/baseUrlSchema.js +9 -5
- package/dist/bin/validateMockServerConfig/corsSchema/corsSchema.js +32 -14
- package/dist/bin/validateMockServerConfig/databaseConfigSchema/databaseConfigSchema.js +19 -9
- package/dist/bin/validateMockServerConfig/graphqlConfigSchema/graphqlConfigSchema.js +38 -22
- package/dist/bin/validateMockServerConfig/graphqlConfigSchema/routeConfigSchema/routeConfigSchema.js +38 -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.js +18 -9
- package/dist/bin/validateMockServerConfig/restConfigSchema/restConfigSchema.js +33 -19
- package/dist/bin/validateMockServerConfig/restConfigSchema/routeConfigSchema/routeConfigSchema.js +62 -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.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.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 +157 -143
- package/dist/src/core/database/createDatabaseRoutes/helpers/createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes.js +15 -8
- package/dist/src/core/database/createDatabaseRoutes/helpers/createShallowDatabaseRoutes/createShallowDatabaseRoutes.js +88 -94
- package/dist/src/core/database/createDatabaseRoutes/helpers/filter/filter.js +44 -47
- 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 +38 -34
- 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 +126 -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 +120 -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.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.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 +8 -9
- package/dist/bin/templates/.eslintrc.js +0 -14
- package/dist/bin/templates/tsconfig.json +0 -11
|
@@ -1,148 +1,162 @@
|
|
|
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
|
-
const
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
5
|
+
Object.defineProperty(exports, "createNestedDatabaseRoutes", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return createNestedDatabaseRoutes;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _array = require("../array");
|
|
12
|
+
const _filter = require("../filter/filter");
|
|
13
|
+
const _pagination = require("../pagination/pagination");
|
|
14
|
+
const _search = require("../search/search");
|
|
15
|
+
const _sort = require("../sort/sort");
|
|
16
|
+
const createNestedDatabaseRoutes = (router, database, storage)=>{
|
|
17
|
+
Object.keys(database).forEach((key)=>{
|
|
18
|
+
const collectionPath = `/${key}`;
|
|
19
|
+
const itemPath = `/${key}/:id`;
|
|
20
|
+
router.route(collectionPath).get((request, response)=>{
|
|
21
|
+
let data = storage.read(key);
|
|
22
|
+
if (!Array.isArray(data) || !request.query) {
|
|
23
|
+
// ✅ important:
|
|
24
|
+
// set 'Cache-Control' header for explicit browsers response revalidate
|
|
25
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
|
|
26
|
+
response.set("Cache-control", "max-age=0, must-revalidate");
|
|
27
|
+
return response.json(data);
|
|
28
|
+
}
|
|
29
|
+
const { _page, _limit, _begin, _end, _sort: _sort1, _order, _q, ...filters } = request.query;
|
|
30
|
+
if (Object.keys(filters).length) {
|
|
31
|
+
data = (0, _filter.filter)(data, filters);
|
|
32
|
+
}
|
|
33
|
+
if (_q) {
|
|
34
|
+
data = (0, _search.search)(data, request.query._q);
|
|
35
|
+
}
|
|
36
|
+
if (_page) {
|
|
37
|
+
data = (0, _pagination.pagination)(data, request.query);
|
|
38
|
+
if (data._link) {
|
|
39
|
+
const links = {};
|
|
40
|
+
const fullUrl = `${request.protocol}://${request.get("host")}${request.originalUrl}`;
|
|
41
|
+
if (data._link.first) {
|
|
42
|
+
links.first = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.first}`);
|
|
43
|
+
}
|
|
44
|
+
if (data._link.prev) {
|
|
45
|
+
links.prev = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.prev}`);
|
|
46
|
+
}
|
|
47
|
+
if (data._link.next) {
|
|
48
|
+
links.next = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.next}`);
|
|
49
|
+
}
|
|
50
|
+
if (data._link.last) {
|
|
51
|
+
links.last = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.last}`);
|
|
52
|
+
}
|
|
53
|
+
data._link = {
|
|
54
|
+
...data._link,
|
|
55
|
+
...links
|
|
56
|
+
};
|
|
57
|
+
response.links(links);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (_sort1) {
|
|
61
|
+
data = (0, _sort.sort)(data, request.query);
|
|
62
|
+
}
|
|
63
|
+
if (_begin || _end) {
|
|
64
|
+
var _request_query__begin;
|
|
65
|
+
data = data.slice((_request_query__begin = request.query._begin) !== null && _request_query__begin !== void 0 ? _request_query__begin : 0, request.query._end);
|
|
66
|
+
response.set("X-Total-Count", data.length);
|
|
67
|
+
}
|
|
68
|
+
// ✅ important:
|
|
69
|
+
// set 'Cache-Control' header for explicit browsers response revalidate
|
|
70
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
|
|
71
|
+
response.set("Cache-control", "no-cache");
|
|
72
|
+
response.json(data);
|
|
73
|
+
});
|
|
74
|
+
router.route(collectionPath).post((request, response)=>{
|
|
75
|
+
const collection = storage.read(key);
|
|
76
|
+
const newResourceId = (0, _array.createNewId)(collection);
|
|
77
|
+
const newResource = {
|
|
78
|
+
...request.body,
|
|
79
|
+
id: newResourceId
|
|
80
|
+
};
|
|
81
|
+
storage.write([
|
|
82
|
+
key,
|
|
83
|
+
collection.length
|
|
84
|
+
], newResource);
|
|
85
|
+
response.set("Location", `${request.url}/${newResourceId}`);
|
|
86
|
+
response.status(201).json(newResource);
|
|
87
|
+
});
|
|
88
|
+
router.route(itemPath).get((request, response)=>{
|
|
89
|
+
const currentResourceCollection = storage.read(key);
|
|
90
|
+
const currentResourceIndex = (0, _array.findIndexById)(currentResourceCollection, request.params.id);
|
|
91
|
+
if (currentResourceIndex === -1) {
|
|
92
|
+
response.status(404).end();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// ✅ important:
|
|
96
|
+
// set 'Cache-Control' header for explicit browsers response revalidate
|
|
97
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
|
|
98
|
+
response.set("Cache-control", "no-cache");
|
|
99
|
+
response.json(storage.read([
|
|
100
|
+
key,
|
|
101
|
+
currentResourceIndex
|
|
102
|
+
]));
|
|
103
|
+
});
|
|
104
|
+
router.route(itemPath).put((request, response)=>{
|
|
105
|
+
const currentResourceCollection = storage.read(key);
|
|
106
|
+
const currentResourceIndex = (0, _array.findIndexById)(currentResourceCollection, request.params.id);
|
|
107
|
+
if (currentResourceIndex === -1) {
|
|
108
|
+
response.status(404).end();
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const currentResource = storage.read([
|
|
112
|
+
key,
|
|
113
|
+
currentResourceIndex
|
|
114
|
+
]);
|
|
115
|
+
const updatedResource = {
|
|
116
|
+
...request.body,
|
|
117
|
+
id: currentResource.id
|
|
118
|
+
};
|
|
119
|
+
storage.write([
|
|
120
|
+
key,
|
|
121
|
+
currentResourceIndex
|
|
122
|
+
], updatedResource);
|
|
123
|
+
response.json(updatedResource);
|
|
124
|
+
});
|
|
125
|
+
router.route(itemPath).patch((request, response)=>{
|
|
126
|
+
const currentResourceCollection = storage.read(key);
|
|
127
|
+
const currentResourceIndex = (0, _array.findIndexById)(currentResourceCollection, request.params.id);
|
|
128
|
+
if (currentResourceIndex === -1) {
|
|
129
|
+
response.status(404).end();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const currentResource = storage.read([
|
|
133
|
+
key,
|
|
134
|
+
currentResourceIndex
|
|
135
|
+
]);
|
|
136
|
+
const updatedResource = {
|
|
137
|
+
...currentResource,
|
|
138
|
+
...request.body,
|
|
139
|
+
id: currentResource.id
|
|
140
|
+
};
|
|
141
|
+
storage.write([
|
|
142
|
+
key,
|
|
143
|
+
currentResourceIndex
|
|
144
|
+
], updatedResource);
|
|
145
|
+
response.json(updatedResource);
|
|
146
|
+
});
|
|
147
|
+
router.route(itemPath).delete((request, response)=>{
|
|
148
|
+
const currentResourceCollection = storage.read(key);
|
|
149
|
+
const currentResourceIndex = (0, _array.findIndexById)(currentResourceCollection, request.params.id);
|
|
150
|
+
if (currentResourceIndex === -1) {
|
|
151
|
+
response.status(404).end();
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
storage.delete([
|
|
155
|
+
key,
|
|
156
|
+
currentResourceIndex
|
|
157
|
+
]);
|
|
158
|
+
response.status(204).end();
|
|
159
|
+
});
|
|
144
160
|
});
|
|
145
|
-
|
|
146
|
-
return router;
|
|
161
|
+
return router;
|
|
147
162
|
};
|
|
148
|
-
exports.createNestedDatabaseRoutes = createNestedDatabaseRoutes;
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
function
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
Object.defineProperty(exports, "createRewrittenDatabaseRoutes", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return createRewrittenDatabaseRoutes;
|
|
9
|
+
}
|
|
11
10
|
});
|
|
12
|
-
|
|
11
|
+
const _expressurlrewrite = /*#__PURE__*/ _interop_require_default(require("express-urlrewrite"));
|
|
12
|
+
function _interop_require_default(obj) {
|
|
13
|
+
return obj && obj.__esModule ? obj : {
|
|
14
|
+
default: obj
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const createRewrittenDatabaseRoutes = (router, rewrittenRoutes)=>Object.entries(rewrittenRoutes).forEach(([key, value])=>{
|
|
18
|
+
router.use((0, _expressurlrewrite.default)(key, value));
|
|
19
|
+
});
|
|
@@ -1,99 +1,93 @@
|
|
|
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
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
};
|
|
93
|
-
storage.write(key, updatedResource);
|
|
94
|
-
response.json(updatedResource);
|
|
5
|
+
Object.defineProperty(exports, "createShallowDatabaseRoutes", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return createShallowDatabaseRoutes;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _filter = require("../filter/filter");
|
|
12
|
+
const _pagination = require("../pagination/pagination");
|
|
13
|
+
const _search = require("../search/search");
|
|
14
|
+
const _sort = require("../sort/sort");
|
|
15
|
+
const createShallowDatabaseRoutes = (router, database, storage)=>{
|
|
16
|
+
Object.keys(database).forEach((key)=>{
|
|
17
|
+
const path = `/${key}`;
|
|
18
|
+
router.route(path).get((request, response)=>{
|
|
19
|
+
let data = storage.read(key);
|
|
20
|
+
if (!Array.isArray(data) || !request.query) {
|
|
21
|
+
// ✅ important:
|
|
22
|
+
// set 'Cache-Control' header for explicit browsers response revalidate
|
|
23
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
|
|
24
|
+
response.set("Cache-control", "no-cache");
|
|
25
|
+
return response.json(data);
|
|
26
|
+
}
|
|
27
|
+
data = data.filter((element)=>typeof element === "object" && element !== null);
|
|
28
|
+
const { _page, _limit, _begin, _end, _sort: _sort1, _order, _q, ...filters } = request.query;
|
|
29
|
+
if (Object.keys(filters).length) {
|
|
30
|
+
data = (0, _filter.filter)(data, filters);
|
|
31
|
+
}
|
|
32
|
+
if (_q) {
|
|
33
|
+
data = (0, _search.search)(data, request.query._q);
|
|
34
|
+
}
|
|
35
|
+
if (_page) {
|
|
36
|
+
data = (0, _pagination.pagination)(data, request.query);
|
|
37
|
+
if (data._link) {
|
|
38
|
+
const links = {};
|
|
39
|
+
const fullUrl = `${request.protocol}://${request.get("host")}${request.originalUrl}`;
|
|
40
|
+
if (data._link.first) {
|
|
41
|
+
links.first = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.first}`);
|
|
42
|
+
}
|
|
43
|
+
if (data._link.prev) {
|
|
44
|
+
links.prev = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.prev}`);
|
|
45
|
+
}
|
|
46
|
+
if (data._link.next) {
|
|
47
|
+
links.next = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.next}`);
|
|
48
|
+
}
|
|
49
|
+
if (data._link.last) {
|
|
50
|
+
links.last = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.last}`);
|
|
51
|
+
}
|
|
52
|
+
data._link = {
|
|
53
|
+
...data._link,
|
|
54
|
+
...links
|
|
55
|
+
};
|
|
56
|
+
response.links(links);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (_sort1) {
|
|
60
|
+
data = (0, _sort.sort)(data, request.query);
|
|
61
|
+
}
|
|
62
|
+
if (_begin || _end) {
|
|
63
|
+
var _request_query__begin;
|
|
64
|
+
data = data.slice((_request_query__begin = request.query._begin) !== null && _request_query__begin !== void 0 ? _request_query__begin : 0, request.query._end);
|
|
65
|
+
response.set("X-Total-Count", data.length);
|
|
66
|
+
}
|
|
67
|
+
// ✅ important:
|
|
68
|
+
// set 'Cache-Control' header for explicit browsers response revalidate
|
|
69
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
|
|
70
|
+
response.set("Cache-control", "no-cache");
|
|
71
|
+
response.json(data);
|
|
72
|
+
});
|
|
73
|
+
router.route(path).post((request, response)=>{
|
|
74
|
+
storage.write(key, request.body);
|
|
75
|
+
response.set("Location", request.url);
|
|
76
|
+
response.status(201).json(request.body);
|
|
77
|
+
});
|
|
78
|
+
router.route(path).put((request, response)=>{
|
|
79
|
+
storage.write(key, request.body);
|
|
80
|
+
response.json(request.body);
|
|
81
|
+
});
|
|
82
|
+
router.route(path).patch((request, response)=>{
|
|
83
|
+
const currentResource = storage.read(key);
|
|
84
|
+
const updatedResource = {
|
|
85
|
+
...currentResource,
|
|
86
|
+
...request.body
|
|
87
|
+
};
|
|
88
|
+
storage.write(key, updatedResource);
|
|
89
|
+
response.json(updatedResource);
|
|
90
|
+
});
|
|
95
91
|
});
|
|
96
|
-
|
|
97
|
-
return router;
|
|
92
|
+
return router;
|
|
98
93
|
};
|
|
99
|
-
exports.createShallowDatabaseRoutes = createShallowDatabaseRoutes;
|
|
@@ -1,57 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
5
|
+
Object.defineProperty(exports, "filter", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return filter;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _flat = require("flat");
|
|
8
12
|
const OPERATORS = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
neq: (a, b)=>`${a}` !== `${b}`,
|
|
14
|
+
gt: (a, b)=>+a > +b,
|
|
15
|
+
gte: (a, b)=>+a >= +b,
|
|
16
|
+
lt: (a, b)=>+a < +b,
|
|
17
|
+
lte: (a, b)=>+a <= +b,
|
|
18
|
+
cn: (a, b)=>a.includes(b),
|
|
19
|
+
ncn: (a, b)=>!a.includes(b),
|
|
20
|
+
sw: (a, b)=>a.startsWith(b),
|
|
21
|
+
nsw: (a, b)=>!a.startsWith(b),
|
|
22
|
+
ew: (a, b)=>a.endsWith(b),
|
|
23
|
+
new: (a, b)=>!a.endsWith(b)
|
|
20
24
|
};
|
|
21
25
|
const OPERATORS_KEYS = Object.keys(OPERATORS);
|
|
22
|
-
const OPERATOR_REGEXP = new RegExp(`^(.+)_(${OPERATORS_KEYS.join(
|
|
23
|
-
const getEntities = (object, key)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
const OPERATOR_REGEXP = new RegExp(`^(.+)_(${OPERATORS_KEYS.join("|")})$`);
|
|
27
|
+
const getEntities = (object, key)=>{
|
|
28
|
+
const parts = key.match(OPERATOR_REGEXP);
|
|
29
|
+
if (parts) {
|
|
30
|
+
const [, element, operator] = parts;
|
|
31
|
+
return {
|
|
32
|
+
element: object[element],
|
|
33
|
+
operator: operator
|
|
34
|
+
};
|
|
35
|
+
}
|
|
27
36
|
return {
|
|
28
|
-
|
|
29
|
-
operator: operator
|
|
37
|
+
element: object[key]
|
|
30
38
|
};
|
|
31
|
-
}
|
|
32
|
-
return {
|
|
33
|
-
element: object[key]
|
|
34
|
-
};
|
|
35
39
|
};
|
|
36
|
-
const filtered = (element, value, operator)
|
|
37
|
-
|
|
38
|
-
|
|
40
|
+
const filtered = (element, value, operator)=>{
|
|
41
|
+
if (!operator) return `${element}` === value;
|
|
42
|
+
return OPERATORS[operator](element, value);
|
|
39
43
|
};
|
|
40
|
-
const filter = (array, filters)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
element,
|
|
52
|
-
operator
|
|
53
|
-
} = getEntities(flattenedArrayElement, key);
|
|
54
|
-
return filtered(element, filter, operator);
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
exports.filter = filter;
|
|
44
|
+
const filter = (array, filters)=>array.filter((arrayElement)=>{
|
|
45
|
+
const flattenedArrayElement = (0, _flat.flatten)(arrayElement);
|
|
46
|
+
return Object.entries(filters).every(([key, filter])=>{
|
|
47
|
+
if (Array.isArray(filter)) {
|
|
48
|
+
const { element, operator } = getEntities(flattenedArrayElement, key);
|
|
49
|
+
return filter.some((value)=>filtered(element, value, operator));
|
|
50
|
+
}
|
|
51
|
+
const { element, operator } = getEntities(flattenedArrayElement, key);
|
|
52
|
+
return filtered(element, filter, operator);
|
|
53
|
+
});
|
|
54
|
+
});
|