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.
Files changed (155) hide show
  1. package/dist/bin/bin.js +5 -8
  2. package/dist/bin/build.js +52 -50
  3. package/dist/bin/cli.js +50 -43
  4. package/dist/bin/helpers/createTemplate.js +29 -21
  5. package/dist/bin/helpers/getMostSpecificPathFromError.js +34 -30
  6. package/dist/bin/helpers/getValidationMessageFromPath.js +11 -8
  7. package/dist/bin/helpers/index.js +21 -79
  8. package/dist/bin/helpers/isOnlyRequestedDataResolvingPropertyExists.js +13 -6
  9. package/dist/bin/helpers/resolveConfigFile.js +22 -19
  10. package/dist/bin/helpers/resolveConfigFilePath.js +19 -12
  11. package/dist/bin/helpers/resolveExportsFromSourceCode.js +13 -10
  12. package/dist/bin/init.js +114 -97
  13. package/dist/bin/run.js +42 -37
  14. package/dist/bin/templates/js/full/mock-server.config.js +16 -16
  15. package/dist/bin/templates/js/graphql/mock-server.config.js +9 -9
  16. package/dist/bin/templates/js/rest/mock-server.config.js +9 -9
  17. package/dist/bin/templates/ts/full/mock-requests/graphql/index.ts +2 -2
  18. package/dist/bin/templates/ts/full/mock-requests/graphql/user.ts +37 -37
  19. package/dist/bin/templates/ts/full/mock-requests/graphql/users.ts +14 -14
  20. package/dist/bin/templates/ts/full/mock-requests/rest/index.ts +2 -2
  21. package/dist/bin/templates/ts/full/mock-requests/rest/user.ts +37 -37
  22. package/dist/bin/templates/ts/full/mock-requests/rest/users.ts +14 -14
  23. package/dist/bin/templates/ts/full/mock-server.config.ts +18 -18
  24. package/dist/bin/templates/ts/graphql/mock-requests/index.ts +2 -2
  25. package/dist/bin/templates/ts/graphql/mock-requests/user.ts +37 -37
  26. package/dist/bin/templates/ts/graphql/mock-requests/users.ts +14 -14
  27. package/dist/bin/templates/ts/graphql/mock-server.config.ts +11 -11
  28. package/dist/bin/templates/ts/rest/mock-requests/index.ts +2 -2
  29. package/dist/bin/templates/ts/rest/mock-requests/user.ts +37 -37
  30. package/dist/bin/templates/ts/rest/mock-requests/users.ts +14 -14
  31. package/dist/bin/templates/ts/rest/mock-server.config.ts +11 -11
  32. package/dist/bin/validateMockServerConfig/baseUrlSchema/baseUrlSchema.js +9 -5
  33. package/dist/bin/validateMockServerConfig/corsSchema/corsSchema.js +32 -14
  34. package/dist/bin/validateMockServerConfig/databaseConfigSchema/databaseConfigSchema.js +19 -9
  35. package/dist/bin/validateMockServerConfig/graphqlConfigSchema/graphqlConfigSchema.js +38 -22
  36. package/dist/bin/validateMockServerConfig/graphqlConfigSchema/routeConfigSchema/routeConfigSchema.js +38 -28
  37. package/dist/bin/validateMockServerConfig/interceptorsSchema/interceptorsSchema.js +12 -8
  38. package/dist/bin/validateMockServerConfig/portSchema/portSchema.js +9 -5
  39. package/dist/bin/validateMockServerConfig/queueSchema/queueSchema.js +18 -9
  40. package/dist/bin/validateMockServerConfig/restConfigSchema/restConfigSchema.js +33 -19
  41. package/dist/bin/validateMockServerConfig/restConfigSchema/routeConfigSchema/routeConfigSchema.js +62 -48
  42. package/dist/bin/validateMockServerConfig/settingsSchema/settingsSchema.js +13 -9
  43. package/dist/bin/validateMockServerConfig/staticPathSchema/staticPathSchema.js +19 -9
  44. package/dist/bin/validateMockServerConfig/utils/checkModeSchema/checkModeSchema.js +27 -9
  45. package/dist/bin/validateMockServerConfig/utils/entitiesSchema/entitiesSchema.js +117 -60
  46. package/dist/bin/validateMockServerConfig/utils/index.js +20 -68
  47. package/dist/bin/validateMockServerConfig/utils/jsonSchema/jsonSchema.js +30 -10
  48. package/dist/bin/validateMockServerConfig/utils/plainObjectSchema/plainObjectSchema.js +9 -8
  49. package/dist/bin/validateMockServerConfig/utils/requiredPropertiesSchema/requiredPropertiesSchema.js +10 -7
  50. package/dist/bin/validateMockServerConfig/utils/sharedSchema/sharedSchema.js +18 -6
  51. package/dist/bin/validateMockServerConfig/validateApiMockServerConfig.js +43 -40
  52. package/dist/bin/validateMockServerConfig/validateMockServerConfig.js +38 -35
  53. package/dist/index.js +15 -13
  54. package/dist/src/core/database/createDatabaseRoutes/createDatabaseRoutes.js +25 -28
  55. package/dist/src/core/database/createDatabaseRoutes/helpers/array/createNewId/createNewId.js +14 -11
  56. package/dist/src/core/database/createDatabaseRoutes/helpers/array/findIndexById/findIndexById.js +8 -5
  57. package/dist/src/core/database/createDatabaseRoutes/helpers/array/index.js +17 -35
  58. package/dist/src/core/database/createDatabaseRoutes/helpers/array/isIndex/isIndex.js +8 -5
  59. package/dist/src/core/database/createDatabaseRoutes/helpers/createNestedDatabaseRoutes/createNestedDatabaseRoutes.js +157 -143
  60. package/dist/src/core/database/createDatabaseRoutes/helpers/createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes.js +15 -8
  61. package/dist/src/core/database/createDatabaseRoutes/helpers/createShallowDatabaseRoutes/createShallowDatabaseRoutes.js +88 -94
  62. package/dist/src/core/database/createDatabaseRoutes/helpers/filter/filter.js +44 -47
  63. package/dist/src/core/database/createDatabaseRoutes/helpers/index.js +19 -57
  64. package/dist/src/core/database/createDatabaseRoutes/helpers/pagination/pagination.js +32 -31
  65. package/dist/src/core/database/createDatabaseRoutes/helpers/search/search.js +34 -24
  66. package/dist/src/core/database/createDatabaseRoutes/helpers/sort/sort.js +38 -34
  67. package/dist/src/core/database/createDatabaseRoutes/helpers/splitDatabaseByNesting/splitDatabaseByNesting.js +26 -25
  68. package/dist/src/core/database/createDatabaseRoutes/storages/File/FileStorage.js +65 -50
  69. package/dist/src/core/database/createDatabaseRoutes/storages/File/FileWriter.js +55 -48
  70. package/dist/src/core/database/createDatabaseRoutes/storages/Memory/MemoryStorage.js +51 -41
  71. package/dist/src/core/database/createDatabaseRoutes/storages/index.js +16 -24
  72. package/dist/src/core/database/index.js +15 -13
  73. package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.js +126 -140
  74. package/dist/src/core/graphql/createGraphQLRoutes/helpers/index.js +15 -13
  75. package/dist/src/core/graphql/createGraphQLRoutes/helpers/prepareGraphQLRequestConfigs/prepareGraphQLRequestConfigs.js +36 -41
  76. package/dist/src/core/graphql/index.js +15 -13
  77. package/dist/src/core/middlewares/cookieParseMiddleware/cookieParseMiddleware.js +16 -13
  78. package/dist/src/core/middlewares/cookieParseMiddleware/helpers/index.js +15 -13
  79. package/dist/src/core/middlewares/cookieParseMiddleware/helpers/parseCookie/parseCookie.js +18 -15
  80. package/dist/src/core/middlewares/corsMiddleware/corsMiddleware.js +50 -47
  81. package/dist/src/core/middlewares/corsMiddleware/helpers/getAllowedOrigins/getAllowedOrigins.js +17 -12
  82. package/dist/src/core/middlewares/corsMiddleware/helpers/index.js +15 -13
  83. package/dist/src/core/middlewares/destroyerMiddleware/destroyerMiddleware.js +23 -20
  84. package/dist/src/core/middlewares/errorMiddleware/errorMiddleware.js +23 -17
  85. package/dist/src/core/middlewares/index.js +23 -91
  86. package/dist/src/core/middlewares/noCorsMiddleware/noCorsMiddleware.js +22 -19
  87. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getGraphqlUrlSuggestions/getGraphqlUrlSuggestions.js +21 -23
  88. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getLevenshteinDistance/getLevenshteinDistance.js +80 -80
  89. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/getRestUrlSuggestions.js +34 -34
  90. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/getActualRestUrlMeaningfulString/getActualRestUrlMeaningfulString.js +8 -5
  91. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/getPatternRestUrlMeaningfulString/getPatternRestUrlMeaningfulString.js +8 -5
  92. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/index.js +16 -24
  93. package/dist/src/core/middlewares/notFoundMiddleware/helpers/index.js +17 -35
  94. package/dist/src/core/middlewares/notFoundMiddleware/notFoundMiddleware.js +58 -60
  95. package/dist/src/core/middlewares/requestInterceptorMiddleware/requestInterceptorMiddleware.js +16 -17
  96. package/dist/src/core/middlewares/staticMiddleware/staticMiddleware.js +32 -25
  97. package/dist/src/core/rest/createRestRoutes/createRestRoutes.js +120 -130
  98. package/dist/src/core/rest/createRestRoutes/helpers/index.js +15 -13
  99. package/dist/src/core/rest/createRestRoutes/helpers/prepareRestRequestConfigs/prepareRestRequestConfigs.js +37 -43
  100. package/dist/src/core/rest/index.js +15 -13
  101. package/dist/src/index.js +16 -24
  102. package/dist/src/server/createDatabaseMockServer/createDatabaseMockServer.js +56 -53
  103. package/dist/src/server/createGraphQLMockServer/createGraphQLMockServer.js +64 -62
  104. package/dist/src/server/createMockServer/createMockServer.js +94 -91
  105. package/dist/src/server/createRestMockServer/createRestMockServer.js +64 -62
  106. package/dist/src/server/index.js +23 -91
  107. package/dist/src/server/startDatabaseMockServer/startDatabaseMockServer.js +25 -19
  108. package/dist/src/server/startGraphQLMockServer/startGraphQLMockServer.js +25 -19
  109. package/dist/src/server/startMockServer/startMockServer.js +25 -19
  110. package/dist/src/server/startRestMockServer/startRestMockServer.js +25 -19
  111. package/dist/src/utils/constants/appPath.js +8 -4
  112. package/dist/src/utils/constants/checkModes.js +74 -11
  113. package/dist/src/utils/constants/default.js +18 -14
  114. package/dist/src/utils/constants/index.js +17 -35
  115. package/dist/src/utils/helpers/asyncHandler.js +8 -5
  116. package/dist/src/utils/helpers/config/index.js +15 -13
  117. package/dist/src/utils/helpers/config/resolveEntityValues/resolveEntityValues.js +103 -110
  118. package/dist/src/utils/helpers/entities/convertToEntityDescriptor/convertToEntityDescriptor.js +12 -9
  119. package/dist/src/utils/helpers/entities/index.js +16 -24
  120. package/dist/src/utils/helpers/entities/isEntityDescriptor/isEntityDescriptor.js +9 -6
  121. package/dist/src/utils/helpers/files/index.js +15 -13
  122. package/dist/src/utils/helpers/files/isFilePathValid/isFilePathValid.js +22 -15
  123. package/dist/src/utils/helpers/graphql/getGraphQLInput/getGraphQLInput.js +25 -29
  124. package/dist/src/utils/helpers/graphql/index.js +17 -35
  125. package/dist/src/utils/helpers/graphql/parseGraphQLRequest/parseGraphQLRequest.js +13 -10
  126. package/dist/src/utils/helpers/graphql/parseQuery/parseQuery.js +23 -19
  127. package/dist/src/utils/helpers/index.js +26 -124
  128. package/dist/src/utils/helpers/interceptors/callRequestInterceptor/callRequestInterceptor.js +21 -21
  129. package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.js +62 -64
  130. package/dist/src/utils/helpers/interceptors/helpers/setDelay.js +10 -7
  131. package/dist/src/utils/helpers/interceptors/index.js +16 -24
  132. package/dist/src/utils/helpers/isPlainObject/isPlainObject.js +8 -5
  133. package/dist/src/utils/helpers/isPrimitive/isPrimitive.js +8 -5
  134. package/dist/src/utils/helpers/isRegExp/isRegExp.js +8 -5
  135. package/dist/src/utils/helpers/sleep.js +9 -6
  136. package/dist/src/utils/helpers/tests/createTmpDir.js +16 -9
  137. package/dist/src/utils/helpers/tests/index.js +15 -13
  138. package/dist/src/utils/helpers/url/convertWin32PathToUnix/convertWin32PathToUnix.js +8 -5
  139. package/dist/src/utils/helpers/url/getUrlParts/getUrlParts.js +9 -6
  140. package/dist/src/utils/helpers/url/index.js +18 -46
  141. package/dist/src/utils/helpers/url/removeLeadingAndTrailingSlashes/removeLeadingAndTrailingSlashes.js +8 -5
  142. package/dist/src/utils/helpers/url/urlJoin/urlJoin.js +18 -11
  143. package/dist/src/utils/types/checkModes.js +4 -1
  144. package/dist/src/utils/types/database.js +4 -1
  145. package/dist/src/utils/types/entities.js +4 -1
  146. package/dist/src/utils/types/graphql.js +4 -1
  147. package/dist/src/utils/types/index.js +24 -102
  148. package/dist/src/utils/types/interceptors.js +4 -1
  149. package/dist/src/utils/types/rest.js +4 -1
  150. package/dist/src/utils/types/server.js +4 -1
  151. package/dist/src/utils/types/utils.js +4 -1
  152. package/dist/src/utils/types/values.js +4 -1
  153. package/package.json +8 -9
  154. package/dist/bin/templates/.eslintrc.js +0 -14
  155. package/dist/bin/templates/tsconfig.json +0 -11
@@ -1,148 +1,162 @@
1
1
  "use strict";
2
-
3
2
  Object.defineProperty(exports, "__esModule", {
4
- value: true
3
+ value: true
5
4
  });
6
- exports.createNestedDatabaseRoutes = void 0;
7
- var _array = require("../array");
8
- var _filter = require("../filter/filter");
9
- var _pagination = require("../pagination/pagination");
10
- var _search = require("../search/search");
11
- var _sort2 = require("../sort/sort");
12
- const createNestedDatabaseRoutes = (router, database, storage) => {
13
- Object.keys(database).forEach(key => {
14
- const collectionPath = `/${key}`;
15
- const itemPath = `/${key}/:id`;
16
- router.route(collectionPath).get((request, response) => {
17
- let data = storage.read(key);
18
- if (!Array.isArray(data) || !request.query) {
19
- // important:
20
- // set 'Cache-Control' header for explicit browsers response revalidate
21
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
22
- response.set('Cache-control', 'max-age=0, must-revalidate');
23
- return response.json(data);
24
- }
25
- const {
26
- _page,
27
- _limit,
28
- _begin,
29
- _end,
30
- _sort,
31
- _order,
32
- _q,
33
- ...filters
34
- } = request.query;
35
- if (Object.keys(filters).length) {
36
- data = (0, _filter.filter)(data, filters);
37
- }
38
- if (_q) {
39
- data = (0, _search.search)(data, request.query._q);
40
- }
41
- if (_page) {
42
- data = (0, _pagination.pagination)(data, request.query);
43
- if (data._link) {
44
- const links = {};
45
- const fullUrl = `${request.protocol}://${request.get('host')}${request.originalUrl}`;
46
- if (data._link.first) {
47
- links.first = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.first}`);
48
- }
49
- if (data._link.prev) {
50
- links.prev = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.prev}`);
51
- }
52
- if (data._link.next) {
53
- links.next = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.next}`);
54
- }
55
- if (data._link.last) {
56
- links.last = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.last}`);
57
- }
58
- data._link = {
59
- ...data._link,
60
- ...links
61
- };
62
- response.links(links);
63
- }
64
- }
65
- if (_sort) {
66
- data = (0, _sort2.sort)(data, request.query);
67
- }
68
- if (_begin || _end) {
69
- var _request$query$_begin;
70
- data = data.slice((_request$query$_begin = request.query._begin) !== null && _request$query$_begin !== void 0 ? _request$query$_begin : 0, request.query._end);
71
- response.set('X-Total-Count', data.length);
72
- }
73
- // ✅ important:
74
- // set 'Cache-Control' header for explicit browsers response revalidate
75
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
76
- response.set('Cache-control', 'no-cache');
77
- response.json(data);
78
- });
79
- router.route(collectionPath).post((request, response) => {
80
- const collection = storage.read(key);
81
- const newResourceId = (0, _array.createNewId)(collection);
82
- const newResource = {
83
- ...request.body,
84
- id: newResourceId
85
- };
86
- storage.write([key, collection.length], newResource);
87
- response.set('Location', `${request.url}/${newResourceId}`);
88
- response.status(201).json(newResource);
89
- });
90
- router.route(itemPath).get((request, response) => {
91
- const currentResourceCollection = storage.read(key);
92
- const currentResourceIndex = (0, _array.findIndexById)(currentResourceCollection, request.params.id);
93
- if (currentResourceIndex === -1) {
94
- response.status(404).end();
95
- return;
96
- }
97
-
98
- // ✅ important:
99
- // set 'Cache-Control' header for explicit browsers response revalidate
100
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
101
- response.set('Cache-control', 'no-cache');
102
- response.json(storage.read([key, currentResourceIndex]));
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([key, currentResourceIndex]);
112
- const updatedResource = {
113
- ...request.body,
114
- id: currentResource.id
115
- };
116
- storage.write([key, currentResourceIndex], updatedResource);
117
- response.json(updatedResource);
118
- });
119
- router.route(itemPath).patch((request, response) => {
120
- const currentResourceCollection = storage.read(key);
121
- const currentResourceIndex = (0, _array.findIndexById)(currentResourceCollection, request.params.id);
122
- if (currentResourceIndex === -1) {
123
- response.status(404).end();
124
- return;
125
- }
126
- const currentResource = storage.read([key, currentResourceIndex]);
127
- const updatedResource = {
128
- ...currentResource,
129
- ...request.body,
130
- id: currentResource.id
131
- };
132
- storage.write([key, currentResourceIndex], updatedResource);
133
- response.json(updatedResource);
134
- });
135
- router.route(itemPath).delete((request, response) => {
136
- const currentResourceCollection = storage.read(key);
137
- const currentResourceIndex = (0, _array.findIndexById)(currentResourceCollection, request.params.id);
138
- if (currentResourceIndex === -1) {
139
- response.status(404).end();
140
- return;
141
- }
142
- storage.delete([key, currentResourceIndex]);
143
- response.status(204).end();
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
- value: true
3
+ value: true
5
4
  });
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));
5
+ Object.defineProperty(exports, "createRewrittenDatabaseRoutes", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return createRewrittenDatabaseRoutes;
9
+ }
11
10
  });
12
- exports.createRewrittenDatabaseRoutes = createRewrittenDatabaseRoutes;
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
- value: true
3
+ value: true
5
4
  });
6
- exports.createShallowDatabaseRoutes = void 0;
7
- var _filter = require("../filter/filter");
8
- var _pagination = require("../pagination/pagination");
9
- var _search = require("../search/search");
10
- var _sort2 = require("../sort/sort");
11
- const createShallowDatabaseRoutes = (router, database, storage) => {
12
- Object.keys(database).forEach(key => {
13
- const path = `/${key}`;
14
- router.route(path).get((request, response) => {
15
- let data = storage.read(key);
16
- if (!Array.isArray(data) || !request.query) {
17
- // ✅ important:
18
- // set 'Cache-Control' header for explicit browsers response revalidate
19
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
20
- response.set('Cache-control', 'no-cache');
21
- return response.json(data);
22
- }
23
- data = data.filter(element => typeof element === 'object' && element !== null);
24
- const {
25
- _page,
26
- _limit,
27
- _begin,
28
- _end,
29
- _sort,
30
- _order,
31
- _q,
32
- ...filters
33
- } = request.query;
34
- if (Object.keys(filters).length) {
35
- data = (0, _filter.filter)(data, filters);
36
- }
37
- if (_q) {
38
- data = (0, _search.search)(data, request.query._q);
39
- }
40
- if (_page) {
41
- data = (0, _pagination.pagination)(data, request.query);
42
- if (data._link) {
43
- const links = {};
44
- const fullUrl = `${request.protocol}://${request.get('host')}${request.originalUrl}`;
45
- if (data._link.first) {
46
- links.first = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.first}`);
47
- }
48
- if (data._link.prev) {
49
- links.prev = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.prev}`);
50
- }
51
- if (data._link.next) {
52
- links.next = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.next}`);
53
- }
54
- if (data._link.last) {
55
- links.last = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.last}`);
56
- }
57
- data._link = {
58
- ...data._link,
59
- ...links
60
- };
61
- response.links(links);
62
- }
63
- }
64
- if (_sort) {
65
- data = (0, _sort2.sort)(data, request.query);
66
- }
67
- if (_begin || _end) {
68
- var _request$query$_begin;
69
- data = data.slice((_request$query$_begin = request.query._begin) !== null && _request$query$_begin !== void 0 ? _request$query$_begin : 0, request.query._end);
70
- response.set('X-Total-Count', data.length);
71
- }
72
- // ✅ important:
73
- // set 'Cache-Control' header for explicit browsers response revalidate
74
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
75
- response.set('Cache-control', 'no-cache');
76
- response.json(data);
77
- });
78
- router.route(path).post((request, response) => {
79
- storage.write(key, request.body);
80
- response.set('Location', request.url);
81
- response.status(201).json(request.body);
82
- });
83
- router.route(path).put((request, response) => {
84
- storage.write(key, request.body);
85
- response.json(request.body);
86
- });
87
- router.route(path).patch((request, response) => {
88
- const currentResource = storage.read(key);
89
- const updatedResource = {
90
- ...currentResource,
91
- ...request.body
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
- value: true
3
+ value: true
5
4
  });
6
- exports.filter = void 0;
7
- var _flat = require("flat");
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
- neq: (a, b) => `${a}` !== `${b}`,
10
- gt: (a, b) => +a > +b,
11
- gte: (a, b) => +a >= +b,
12
- lt: (a, b) => +a < +b,
13
- lte: (a, b) => +a <= +b,
14
- cn: (a, b) => a.includes(b),
15
- ncn: (a, b) => !a.includes(b),
16
- sw: (a, b) => a.startsWith(b),
17
- nsw: (a, b) => !a.startsWith(b),
18
- ew: (a, b) => a.endsWith(b),
19
- new: (a, b) => !a.endsWith(b)
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
- const parts = key.match(OPERATOR_REGEXP);
25
- if (parts) {
26
- const [, element, operator] = parts;
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
- element: object[element],
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
- if (!operator) return `${element}` === value;
38
- return OPERATORS[operator](element, value);
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) => array.filter(arrayElement => {
41
- const flattenedArrayElement = (0, _flat.flatten)(arrayElement);
42
- return Object.entries(filters).every(([key, filter]) => {
43
- if (Array.isArray(filter)) {
44
- const {
45
- element,
46
- operator
47
- } = getEntities(flattenedArrayElement, key);
48
- return filter.some(value => filtered(element, value, operator));
49
- }
50
- const {
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
+ });