temba 0.18.0 → 0.19.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 (225) hide show
  1. package/README.md +14 -2
  2. package/package.json +6 -8
  3. package/{config → src/config}/index.d.ts +7 -5
  4. package/src/config/index.d.ts.map +1 -0
  5. package/{config → src/config}/index.js +11 -39
  6. package/src/config/index.js.map +1 -0
  7. package/src/delay/delayMiddleware.d.ts +3 -0
  8. package/src/delay/delayMiddleware.d.ts.map +1 -0
  9. package/src/delay/delayMiddleware.js +13 -0
  10. package/src/delay/delayMiddleware.js.map +1 -0
  11. package/src/index.d.ts +6 -0
  12. package/src/index.d.ts.map +1 -0
  13. package/src/index.js +83 -0
  14. package/src/index.js.map +1 -0
  15. package/src/queries/in-memory.d.ts +3 -0
  16. package/src/queries/in-memory.d.ts.map +1 -0
  17. package/src/queries/in-memory.js +61 -0
  18. package/src/queries/in-memory.js.map +1 -0
  19. package/src/queries/mongo.d.ts +3 -0
  20. package/src/queries/mongo.d.ts.map +1 -0
  21. package/src/queries/mongo.js +75 -0
  22. package/src/queries/mongo.js.map +1 -0
  23. package/src/queries/queries.d.ts +2 -0
  24. package/src/queries/queries.d.ts.map +1 -0
  25. package/src/queries/queries.js +10 -0
  26. package/src/queries/queries.js.map +1 -0
  27. package/src/queries/types.d.ts +15 -0
  28. package/src/queries/types.d.ts.map +1 -0
  29. package/src/queries/types.js +2 -0
  30. package/{routes → src/queries}/types.js.map +1 -1
  31. package/src/requestBodyInterceptor/interceptRequestBody.d.ts +3 -0
  32. package/src/requestBodyInterceptor/interceptRequestBody.d.ts.map +1 -0
  33. package/src/requestBodyInterceptor/interceptRequestBody.js +14 -0
  34. package/src/requestBodyInterceptor/interceptRequestBody.js.map +1 -0
  35. package/src/requestBodyInterceptor/types.d.ts +12 -0
  36. package/src/requestBodyInterceptor/types.d.ts.map +1 -0
  37. package/src/requestBodyInterceptor/types.js +2 -0
  38. package/src/requestBodyInterceptor/types.js.map +1 -0
  39. package/src/requestHandlers/delete.d.ts +12 -0
  40. package/src/requestHandlers/delete.d.ts.map +1 -0
  41. package/src/requestHandlers/delete.js +22 -0
  42. package/src/requestHandlers/delete.js.map +1 -0
  43. package/src/requestHandlers/get.d.ts +22 -0
  44. package/src/requestHandlers/get.d.ts.map +1 -0
  45. package/src/requestHandlers/get.js +47 -0
  46. package/src/requestHandlers/get.js.map +1 -0
  47. package/src/requestHandlers/index.d.ts +54 -0
  48. package/src/requestHandlers/index.d.ts.map +1 -0
  49. package/src/requestHandlers/index.js +21 -0
  50. package/src/requestHandlers/index.js.map +1 -0
  51. package/src/requestHandlers/patch.d.ts +9 -0
  52. package/src/requestHandlers/patch.d.ts.map +1 -0
  53. package/src/requestHandlers/patch.js +35 -0
  54. package/src/requestHandlers/patch.js.map +1 -0
  55. package/src/requestHandlers/post.d.ts +18 -0
  56. package/src/requestHandlers/post.d.ts.map +1 -0
  57. package/src/requestHandlers/post.js +37 -0
  58. package/src/requestHandlers/post.js.map +1 -0
  59. package/src/requestHandlers/put.d.ts +9 -0
  60. package/src/requestHandlers/put.d.ts.map +1 -0
  61. package/src/requestHandlers/put.js +35 -0
  62. package/src/requestHandlers/put.js.map +1 -0
  63. package/src/requestHandlers/types.d.ts +38 -0
  64. package/src/requestHandlers/types.d.ts.map +1 -0
  65. package/src/requestHandlers/types.js +2 -0
  66. package/{schema → src/requestHandlers}/types.js.map +1 -1
  67. package/{routes → src/requestHandlers}/utils.d.ts +1 -0
  68. package/src/requestHandlers/utils.d.ts.map +1 -0
  69. package/src/requestHandlers/utils.js +6 -0
  70. package/src/requestHandlers/utils.js.map +1 -0
  71. package/src/resourceRouter.d.ts +5 -0
  72. package/src/resourceRouter.d.ts.map +1 -0
  73. package/src/resourceRouter.js +95 -0
  74. package/src/resourceRouter.js.map +1 -0
  75. package/src/responseBodyInterceptor/interceptResponseBody.d.ts +3 -0
  76. package/src/responseBodyInterceptor/interceptResponseBody.d.ts.map +1 -0
  77. package/src/responseBodyInterceptor/interceptResponseBody.js +7 -0
  78. package/src/responseBodyInterceptor/interceptResponseBody.js.map +1 -0
  79. package/src/responseBodyInterceptor/types.d.ts +11 -0
  80. package/src/responseBodyInterceptor/types.d.ts.map +1 -0
  81. package/src/responseBodyInterceptor/types.js +2 -0
  82. package/src/responseBodyInterceptor/types.js.map +1 -0
  83. package/src/schema/compile.d.ts +3 -0
  84. package/src/schema/compile.d.ts.map +1 -0
  85. package/src/schema/compile.js +26 -0
  86. package/src/schema/compile.js.map +1 -0
  87. package/{schema → src/schema}/types.d.ts +4 -14
  88. package/src/schema/types.d.ts.map +1 -0
  89. package/src/schema/types.js +2 -0
  90. package/{queries → src/schema}/types.js.map +1 -1
  91. package/{schema → src/schema}/validate.d.ts +1 -0
  92. package/src/schema/validate.d.ts.map +1 -0
  93. package/src/schema/validate.js +14 -0
  94. package/src/schema/validate.js.map +1 -0
  95. package/src/urls/urlParser.d.ts +5 -0
  96. package/src/urls/urlParser.d.ts.map +1 -0
  97. package/src/urls/urlParser.js +9 -0
  98. package/src/urls/urlParser.js.map +1 -0
  99. package/test/integration/api-prefix.test.d.ts +2 -0
  100. package/test/integration/api-prefix.test.d.ts.map +1 -0
  101. package/test/integration/api-prefix.test.js +69 -0
  102. package/test/integration/api-prefix.test.js.map +1 -0
  103. package/test/integration/createServer.d.ts +4 -0
  104. package/test/integration/createServer.d.ts.map +1 -0
  105. package/test/integration/createServer.js +4 -0
  106. package/test/integration/createServer.js.map +1 -0
  107. package/test/integration/crud.test.d.ts +2 -0
  108. package/test/integration/crud.test.d.ts.map +1 -0
  109. package/test/integration/crud.test.js +173 -0
  110. package/test/integration/crud.test.js.map +1 -0
  111. package/test/integration/custom-router.test.d.ts +2 -0
  112. package/test/integration/custom-router.test.d.ts.map +1 -0
  113. package/test/integration/custom-router.test.js +74 -0
  114. package/test/integration/custom-router.test.js.map +1 -0
  115. package/test/integration/head-method.test.d.ts +2 -0
  116. package/test/integration/head-method.test.d.ts.map +1 -0
  117. package/test/integration/head-method.test.js +38 -0
  118. package/test/integration/head-method.test.js.map +1 -0
  119. package/test/integration/options-method.test.d.ts +2 -0
  120. package/test/integration/options-method.test.d.ts.map +1 -0
  121. package/test/integration/options-method.test.js +30 -0
  122. package/test/integration/options-method.test.js.map +1 -0
  123. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.d.ts +2 -0
  124. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.d.ts.map +1 -0
  125. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.js +76 -0
  126. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.js.map +1 -0
  127. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.d.ts +2 -0
  128. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.d.ts.map +1 -0
  129. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.js +60 -0
  130. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.js.map +1 -0
  131. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.d.ts +2 -0
  132. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.d.ts.map +1 -0
  133. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.js +89 -0
  134. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.js.map +1 -0
  135. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.d.ts +2 -0
  136. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.d.ts.map +1 -0
  137. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.js +47 -0
  138. package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.js.map +1 -0
  139. package/test/integration/responseBodyInterceptor.test.d.ts +2 -0
  140. package/test/integration/responseBodyInterceptor.test.d.ts.map +1 -0
  141. package/test/integration/responseBodyInterceptor.test.js +107 -0
  142. package/test/integration/responseBodyInterceptor.test.js.map +1 -0
  143. package/test/integration/returnNullFields.test.d.ts +2 -0
  144. package/test/integration/returnNullFields.test.d.ts.map +1 -0
  145. package/test/integration/returnNullFields.test.js +51 -0
  146. package/test/integration/returnNullFields.test.js.map +1 -0
  147. package/test/integration/root-url.test.d.ts +2 -0
  148. package/test/integration/root-url.test.d.ts.map +1 -0
  149. package/test/integration/root-url.test.js +29 -0
  150. package/test/integration/root-url.test.js.map +1 -0
  151. package/test/integration/schema-validation.test.d.ts +2 -0
  152. package/test/integration/schema-validation.test.d.ts.map +1 -0
  153. package/test/integration/schema-validation.test.js +169 -0
  154. package/test/integration/schema-validation.test.js.map +1 -0
  155. package/test/unit/config/config.test.d.ts +2 -0
  156. package/test/unit/config/config.test.d.ts.map +1 -0
  157. package/test/unit/config/config.test.js +121 -0
  158. package/test/unit/config/config.test.js.map +1 -0
  159. package/test/unit/urls/urlParser.test.d.ts +2 -0
  160. package/test/unit/urls/urlParser.test.d.ts.map +1 -0
  161. package/test/unit/urls/urlParser.test.js +43 -0
  162. package/test/unit/urls/urlParser.test.js.map +1 -0
  163. package/tsconfig.tsbuildinfo +1 -0
  164. package/vitest.config.d.ts +3 -0
  165. package/vitest.config.d.ts.map +1 -0
  166. package/vitest.config.js +10 -0
  167. package/vitest.config.js.map +1 -0
  168. package/config/index.js.map +0 -1
  169. package/delay/delayMiddleware.d.ts +0 -2
  170. package/delay/delayMiddleware.js +0 -16
  171. package/delay/delayMiddleware.js.map +0 -1
  172. package/index.d.ts +0 -5
  173. package/index.js +0 -98
  174. package/index.js.map +0 -1
  175. package/queries/in-memory.d.ts +0 -20
  176. package/queries/in-memory.js +0 -88
  177. package/queries/in-memory.js.map +0 -1
  178. package/queries/mongo.d.ts +0 -19
  179. package/queries/mongo.js +0 -218
  180. package/queries/mongo.js.map +0 -1
  181. package/queries/queries.d.ts +0 -11
  182. package/queries/queries.js +0 -17
  183. package/queries/queries.js.map +0 -1
  184. package/queries/types.d.ts +0 -14
  185. package/queries/types.js +0 -3
  186. package/routes/delete.d.ts +0 -7
  187. package/routes/delete.js +0 -77
  188. package/routes/delete.js.map +0 -1
  189. package/routes/get.d.ts +0 -7
  190. package/routes/get.js +0 -115
  191. package/routes/get.js.map +0 -1
  192. package/routes/interceptRequestBody.d.ts +0 -3
  193. package/routes/interceptRequestBody.js +0 -19
  194. package/routes/interceptRequestBody.js.map +0 -1
  195. package/routes/patch.d.ts +0 -8
  196. package/routes/patch.js +0 -102
  197. package/routes/patch.js.map +0 -1
  198. package/routes/post.d.ts +0 -8
  199. package/routes/post.js +0 -87
  200. package/routes/post.js.map +0 -1
  201. package/routes/put.d.ts +0 -8
  202. package/routes/put.js +0 -102
  203. package/routes/put.js.map +0 -1
  204. package/routes/routes.d.ts +0 -8
  205. package/routes/routes.js +0 -90
  206. package/routes/routes.js.map +0 -1
  207. package/routes/types.d.ts +0 -23
  208. package/routes/types.js +0 -3
  209. package/routes/utils.js +0 -13
  210. package/routes/utils.js.map +0 -1
  211. package/schema/compile.d.ts +0 -2
  212. package/schema/compile.js +0 -41
  213. package/schema/compile.js.map +0 -1
  214. package/schema/transformConfig.d.ts +0 -2
  215. package/schema/transformConfig.js +0 -17
  216. package/schema/transformConfig.js.map +0 -1
  217. package/schema/types.js +0 -3
  218. package/schema/validate.js +0 -19
  219. package/schema/validate.js.map +0 -1
  220. package/urls/urlMiddleware.d.ts +0 -5
  221. package/urls/urlMiddleware.js +0 -41
  222. package/urls/urlMiddleware.js.map +0 -1
  223. package/urls/urlParser.d.ts +0 -5
  224. package/urls/urlParser.js +0 -13
  225. package/urls/urlParser.js.map +0 -1
@@ -0,0 +1,12 @@
1
+ import type { Queries } from '../queries/types';
2
+ import type { DeleteRequest } from './types';
3
+ export declare const createDeleteRoutes: (queries: Queries) => (req: DeleteRequest) => Promise<{
4
+ status: number;
5
+ body?: undefined;
6
+ } | {
7
+ status: number;
8
+ body: {
9
+ message: string;
10
+ };
11
+ }>;
12
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,eAAO,MAAM,kBAAkB,YAAa,OAAO,WAChB,aAAa;;;;;;;;EAoB/C,CAAA"}
@@ -0,0 +1,22 @@
1
+ export const createDeleteRoutes = (queries) => {
2
+ const handleDelete = async (req) => {
3
+ try {
4
+ const { resource, id } = req;
5
+ if (id) {
6
+ const item = await queries.getById(resource, id);
7
+ if (item) {
8
+ await queries.deleteById(resource, id);
9
+ }
10
+ }
11
+ else {
12
+ await queries.deleteAll(resource);
13
+ }
14
+ return { status: 204 };
15
+ }
16
+ catch (error) {
17
+ return { status: 500, body: { message: error.message } };
18
+ }
19
+ };
20
+ return handleDelete;
21
+ };
22
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/requestHandlers/delete.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAgB,EAAE,EAAE;IACrD,MAAM,YAAY,GAAG,KAAK,EAAE,GAAkB,EAAE,EAAE;QAChD,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,GAAG,CAAA;YAE5B,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBAChD,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YACnC,CAAC;YAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;QACxB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,CAAA;QACrE,CAAC;IACH,CAAC,CAAA;IAED,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA"}
@@ -0,0 +1,22 @@
1
+ import type { Queries } from '../queries/types';
2
+ import type { ResponseBodyInterceptor } from '../responseBodyInterceptor/types';
3
+ import type { GetRequest } from './types';
4
+ export declare const createGetRoutes: (queries: Queries, cacheControl: string, responseBodyInterceptor: ResponseBodyInterceptor | null, returnNullFields: boolean) => (req: GetRequest) => Promise<{
5
+ status: number;
6
+ body: unknown;
7
+ headers: {
8
+ 'Cache-control': string;
9
+ };
10
+ } | {
11
+ status: number;
12
+ headers: {
13
+ 'Cache-control': string;
14
+ };
15
+ body?: undefined;
16
+ } | {
17
+ status: number;
18
+ body: {
19
+ message: string;
20
+ };
21
+ }>;
22
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE/C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGzC,eAAO,MAAM,eAAe,YACjB,OAAO,gBACF,MAAM,2BACK,uBAAuB,GAAG,IAAI,oBACrC,OAAO,WAKK,UAAU;;;;;;;;;;;;;;;;;EAmDzC,CAAA"}
@@ -0,0 +1,47 @@
1
+ import { interceptResponseBody } from '../responseBodyInterceptor/interceptResponseBody';
2
+ import { removeNullFields } from './utils';
3
+ export const createGetRoutes = (queries, cacheControl, responseBodyInterceptor, returnNullFields) => {
4
+ const defaultResponse = { headers: { 'Cache-control': cacheControl } };
5
+ const responseOk = (body) => ({ ...defaultResponse, status: 200, body });
6
+ const handleGet = async (req) => {
7
+ try {
8
+ const { resource, id } = req;
9
+ if (id) {
10
+ const item = await queries.getById(resource, id);
11
+ if (!item) {
12
+ return { ...defaultResponse, status: 404 };
13
+ }
14
+ const theItem = responseBodyInterceptor
15
+ ? interceptResponseBody(responseBodyInterceptor, { resource, body: item, id })
16
+ : item;
17
+ if (!returnNullFields) {
18
+ if (Array.isArray(theItem)) {
19
+ return responseOk(theItem.map((item) => removeNullFields(item)));
20
+ }
21
+ if (typeof theItem === 'object') {
22
+ return responseOk(removeNullFields(theItem));
23
+ }
24
+ }
25
+ return responseOk(theItem);
26
+ }
27
+ const items = await queries.getAll(resource);
28
+ const theItems = responseBodyInterceptor
29
+ ? interceptResponseBody(responseBodyInterceptor, { resource, body: items })
30
+ : items;
31
+ if (!returnNullFields) {
32
+ if (Array.isArray(theItems)) {
33
+ return responseOk(theItems.map((item) => removeNullFields(item)));
34
+ }
35
+ if (typeof theItems === 'object') {
36
+ return responseOk(removeNullFields(theItems));
37
+ }
38
+ }
39
+ return responseOk(theItems);
40
+ }
41
+ catch (error) {
42
+ return { status: 500, body: { message: error.message } };
43
+ }
44
+ };
45
+ return handleGet;
46
+ };
47
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/requestHandlers/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kDAAkD,CAAA;AAGxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE1C,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,OAAgB,EAChB,YAAoB,EACpB,uBAAuD,EACvD,gBAAyB,EACzB,EAAE;IACF,MAAM,eAAe,GAAG,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,CAAA;IACtE,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;IAEjF,MAAM,SAAS,GAAG,KAAK,EAAE,GAAe,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,GAAG,CAAA;YAE5B,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBAEhD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,EAAE,GAAG,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;gBAC5C,CAAC;gBAED,MAAM,OAAO,GAAG,uBAAuB;oBACrC,CAAC,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;oBAC9E,CAAC,CAAC,IAAI,CAAA;gBAER,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC3B,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBAClE,CAAC;oBAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;wBAChC,OAAO,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;oBAC9C,CAAC;gBACH,CAAC;gBAED,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;YAC5B,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAE5C,MAAM,QAAQ,GAAG,uBAAuB;gBACtC,CAAC,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBAC3E,CAAC,CAAC,KAAK,CAAA;YAET,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACnE,CAAC;gBAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACjC,OAAO,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAC/C,CAAC;YACH,CAAC;YAED,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAA;QAC7B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,CAAA;QACrE,CAAC;IACH,CAAC,CAAA;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
@@ -0,0 +1,54 @@
1
+ import type { RouterConfig } from '../config';
2
+ import type { CompiledSchemas } from '../schema/types';
3
+ import type { Queries } from '../queries/types';
4
+ export declare const getRequestHandler: (queries: Queries, schemas: CompiledSchemas, routerConfig: RouterConfig) => {
5
+ handleGet: (req: import("./types").GetRequest) => Promise<{
6
+ status: number;
7
+ body: unknown;
8
+ headers: {
9
+ 'Cache-control': string;
10
+ };
11
+ } | {
12
+ status: number;
13
+ headers: {
14
+ 'Cache-control': string;
15
+ };
16
+ body?: undefined;
17
+ } | {
18
+ status: number;
19
+ body: {
20
+ message: string;
21
+ };
22
+ }>;
23
+ handlePost: (req: import("./types").PostRequest) => Promise<{
24
+ status: number;
25
+ body: {
26
+ message: string;
27
+ };
28
+ headers?: undefined;
29
+ } | {
30
+ headers: {
31
+ Location: string;
32
+ };
33
+ status: number;
34
+ body: unknown;
35
+ }>;
36
+ handlePut: (req: import("./types").PutRequest) => Promise<{
37
+ status: number;
38
+ body: unknown;
39
+ }>;
40
+ handlePatch: (req: import("./types").PutRequest) => Promise<{
41
+ status: number;
42
+ body: unknown;
43
+ }>;
44
+ handleDelete: (req: import("./types").DeleteRequest) => Promise<{
45
+ status: number;
46
+ body?: undefined;
47
+ } | {
48
+ status: number;
49
+ body: {
50
+ message: string;
51
+ };
52
+ }>;
53
+ };
54
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE/C,eAAO,MAAM,iBAAiB,YACnB,OAAO,WACP,eAAe,gBACV,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC3B,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { createGetRoutes } from './get';
2
+ import { createPostRoutes } from './post';
3
+ import { createPutRoutes } from './put';
4
+ import { createPatchRoutes } from './patch';
5
+ import { createDeleteRoutes } from './delete';
6
+ export const getRequestHandler = (queries, schemas, routerConfig) => {
7
+ const { cacheControl, requestBodyInterceptor, responseBodyInterceptor, returnNullFields } = routerConfig;
8
+ const handleGet = createGetRoutes(queries, cacheControl, responseBodyInterceptor, returnNullFields);
9
+ const handlePost = createPostRoutes(queries, requestBodyInterceptor, returnNullFields, schemas.post);
10
+ const handlePut = createPutRoutes(queries, requestBodyInterceptor, returnNullFields, schemas.put);
11
+ const handlePatch = createPatchRoutes(queries, requestBodyInterceptor, returnNullFields, schemas.patch);
12
+ const handleDelete = createDeleteRoutes(queries);
13
+ return {
14
+ handleGet,
15
+ handlePost,
16
+ handlePut,
17
+ handlePatch,
18
+ handleDelete,
19
+ };
20
+ };
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/requestHandlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAM7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,OAAgB,EAChB,OAAwB,EACxB,YAA0B,EAC1B,EAAE;IACF,MAAM,EAAE,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,GACvF,YAAY,CAAA;IAEd,MAAM,SAAS,GAAG,eAAe,CAC/B,OAAO,EACP,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,CACjB,CAAA;IAED,MAAM,UAAU,GAAG,gBAAgB,CACjC,OAAO,EACP,sBAAsB,EACtB,gBAAgB,EAChB,OAAO,CAAC,IAAI,CACb,CAAA;IAED,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IAEjG,MAAM,WAAW,GAAG,iBAAiB,CACnC,OAAO,EACP,sBAAsB,EACtB,gBAAgB,EAChB,OAAO,CAAC,KAAK,CACd,CAAA;IAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAEhD,OAAO;QACL,SAAS;QACT,UAAU;QACV,SAAS;QACT,WAAW;QACX,YAAY;KACb,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { ValidateFunctionPerResource } from '../schema/types';
2
+ import type { PatchRequest } from './types';
3
+ import type { Queries } from '../queries/types';
4
+ import { RequestBodyInterceptor } from '../requestBodyInterceptor/types';
5
+ export declare const createPatchRoutes: (queries: Queries, requestBodyInterceptor: RequestBodyInterceptor | null, returnNullFields: boolean, schemas: ValidateFunctionPerResource | null) => (req: PatchRequest) => Promise<{
6
+ status: number;
7
+ body: unknown;
8
+ }>;
9
+ //# sourceMappingURL=patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/patch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAExE,eAAO,MAAM,iBAAiB,YACnB,OAAO,0BACQ,sBAAsB,GAAG,IAAI,oBACnC,OAAO,WAChB,2BAA2B,GAAG,IAAI,WAEX,YAAY;;;EAoC7C,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { interceptRequestBody } from '../requestBodyInterceptor/interceptRequestBody';
2
+ import { validate } from '../schema/validate';
3
+ import { removeNullFields } from './utils';
4
+ export const createPatchRoutes = (queries, requestBodyInterceptor, returnNullFields, schemas) => {
5
+ const handlePatch = async (req) => {
6
+ try {
7
+ const { body, resource, id } = req;
8
+ const validationResult = validate(body, schemas?.[resource]);
9
+ if (validationResult.isValid === false) {
10
+ return { status: 400, body: { message: validationResult.errorMessage } };
11
+ }
12
+ const body2 = requestBodyInterceptor?.patch
13
+ ? interceptRequestBody(requestBodyInterceptor.patch, resource, body)
14
+ : body;
15
+ if (typeof body2 === 'string')
16
+ return { status: 400, body: { message: body2 } };
17
+ let item = await queries.getById(resource, id);
18
+ if (!item)
19
+ return {
20
+ status: 404,
21
+ body: {
22
+ message: `ID '${id}' not found`,
23
+ },
24
+ };
25
+ item = { ...item, ...body2, id };
26
+ const updatedItem = await queries.update(resource, item);
27
+ return { status: 200, body: returnNullFields ? updatedItem : removeNullFields(updatedItem) };
28
+ }
29
+ catch (error) {
30
+ return { status: 500, body: { message: error.message } };
31
+ }
32
+ };
33
+ return handlePatch;
34
+ };
35
+ //# sourceMappingURL=patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/requestHandlers/patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAA;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,OAAgB,EAChB,sBAAqD,EACrD,gBAAyB,EACzB,OAA2C,EAC3C,EAAE;IACF,MAAM,WAAW,GAAG,KAAK,EAAE,GAAiB,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,GAAG,CAAA;YAElC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC5D,IAAI,gBAAgB,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBACvC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAA;YAC1E,CAAC;YAED,MAAM,KAAK,GAAG,sBAAsB,EAAE,KAAK;gBACzC,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC;gBACpE,CAAC,CAAC,IAAI,CAAA;YAER,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAA;YAE/E,IAAI,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAE9C,IAAI,CAAC,IAAI;gBACP,OAAO;oBACL,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE;wBACJ,OAAO,EAAE,OAAO,EAAE,aAAa;qBAChC;iBACF,CAAA;YAEH,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAI,KAAgB,EAAE,EAAE,EAAE,CAAA;YAE5C,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAExD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAA;QAC9F,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,CAAA;QACrE,CAAC;IACH,CAAC,CAAA;IAED,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ import type { ValidateFunctionPerResource } from '../schema/types';
2
+ import type { PostRequest } from './types';
3
+ import type { Queries } from '../queries/types';
4
+ import { RequestBodyInterceptor } from '../requestBodyInterceptor/types';
5
+ export declare const createPostRoutes: (queries: Queries, requestBodyInterceptor: RequestBodyInterceptor | null, returnNullFields: boolean, schemas: ValidateFunctionPerResource) => (req: PostRequest) => Promise<{
6
+ status: number;
7
+ body: {
8
+ message: string;
9
+ };
10
+ headers?: undefined;
11
+ } | {
12
+ headers: {
13
+ Location: string;
14
+ };
15
+ status: number;
16
+ body: unknown;
17
+ }>;
18
+ //# sourceMappingURL=post.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/post.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAiB,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAExE,eAAO,MAAM,gBAAgB,YAClB,OAAO,0BACQ,sBAAsB,GAAG,IAAI,oBACnC,OAAO,WAChB,2BAA2B,WAEL,WAAW;;;;;;;;;;;;EAkC3C,CAAA"}
@@ -0,0 +1,37 @@
1
+ import { format } from 'url';
2
+ import { interceptRequestBody } from '../requestBodyInterceptor/interceptRequestBody';
3
+ import { removeNullFields } from './utils';
4
+ import { validate } from '../schema/validate';
5
+ export const createPostRoutes = (queries, requestBodyInterceptor, returnNullFields, schemas) => {
6
+ const handlePost = async (req) => {
7
+ try {
8
+ const { body, protocol, host, resource } = req;
9
+ const validationResult = validate(body, schemas[resource]);
10
+ if (validationResult.isValid === false) {
11
+ return { status: 400, body: { message: validationResult.errorMessage } };
12
+ }
13
+ const body2 = requestBodyInterceptor?.post
14
+ ? interceptRequestBody(requestBodyInterceptor.post, resource, body)
15
+ : body;
16
+ if (typeof body2 === 'string')
17
+ return { status: 400, body: { message: body2 } };
18
+ const newItem = await queries.create(resource, body2);
19
+ return {
20
+ headers: {
21
+ Location: format({
22
+ protocol: protocol,
23
+ host: host,
24
+ pathname: `${resource}/${newItem.id}`,
25
+ }),
26
+ },
27
+ status: 201,
28
+ body: returnNullFields ? newItem : removeNullFields(newItem),
29
+ };
30
+ }
31
+ catch (error) {
32
+ return { status: 500, body: { message: error.message } };
33
+ }
34
+ };
35
+ return handlePost;
36
+ };
37
+ //# sourceMappingURL=post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../../../src/requestHandlers/post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAA;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAM7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAgB,EAChB,sBAAqD,EACrD,gBAAyB,EACzB,OAAoC,EACpC,EAAE;IACF,MAAM,UAAU,GAAG,KAAK,EAAE,GAAgB,EAAE,EAAE;QAC5C,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAA;YAE9C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC1D,IAAI,gBAAgB,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBACvC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAA;YAC1E,CAAC;YAED,MAAM,KAAK,GAAG,sBAAsB,EAAE,IAAI;gBACxC,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;gBACnE,CAAC,CAAC,IAAI,CAAA;YAER,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAA;YAE/E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAsB,CAAC,CAAA;YAEtE,OAAO;gBACL,OAAO,EAAE;oBACP,QAAQ,EAAE,MAAM,CAAC;wBACf,QAAQ,EAAE,QAAQ;wBAClB,IAAI,EAAE,IAAI;wBACV,QAAQ,EAAE,GAAG,QAAQ,IAAI,OAAO,CAAC,EAAE,EAAE;qBACtC,CAAC;iBACH;gBACD,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC;aAC7D,CAAA;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,CAAA;QACrE,CAAC;IACH,CAAC,CAAA;IAED,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { ValidateFunctionPerResource } from '../schema/types';
2
+ import type { PutRequest } from './types';
3
+ import type { Queries } from '../queries/types';
4
+ import { RequestBodyInterceptor } from '../requestBodyInterceptor/types';
5
+ export declare const createPutRoutes: (queries: Queries, requestBodyInterceptor: RequestBodyInterceptor | null, returnNullFields: boolean, schemas: ValidateFunctionPerResource | null) => (req: PutRequest) => Promise<{
6
+ status: number;
7
+ body: unknown;
8
+ }>;
9
+ //# sourceMappingURL=put.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"put.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/put.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAExE,eAAO,MAAM,eAAe,YACjB,OAAO,0BACQ,sBAAsB,GAAG,IAAI,oBACnC,OAAO,WAChB,2BAA2B,GAAG,IAAI,WAEb,UAAU;;;EAoCzC,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { interceptRequestBody } from '../requestBodyInterceptor/interceptRequestBody';
2
+ import { validate } from '../schema/validate';
3
+ import { removeNullFields } from './utils';
4
+ export const createPutRoutes = (queries, requestBodyInterceptor, returnNullFields, schemas) => {
5
+ const handlePut = async (req) => {
6
+ try {
7
+ const { body, resource, id } = req;
8
+ const validationResult = validate(body, schemas?.[resource]);
9
+ if (validationResult.isValid === false) {
10
+ return { status: 400, body: { message: validationResult.errorMessage } };
11
+ }
12
+ const body2 = requestBodyInterceptor?.put
13
+ ? interceptRequestBody(requestBodyInterceptor.put, resource, body)
14
+ : body;
15
+ if (typeof body2 === 'string')
16
+ return { status: 400, body: { message: body2 } };
17
+ let item = await queries.getById(resource, id);
18
+ if (!item)
19
+ return {
20
+ status: 404,
21
+ body: {
22
+ message: `ID '${id}' not found`,
23
+ },
24
+ };
25
+ item = { ...body2, id };
26
+ const replacedItem = await queries.replace(resource, item);
27
+ return { status: 200, body: returnNullFields ? replacedItem : removeNullFields(replacedItem) };
28
+ }
29
+ catch (error) {
30
+ return { status: 500, body: { message: error.message } };
31
+ }
32
+ };
33
+ return handlePut;
34
+ };
35
+ //# sourceMappingURL=put.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"put.js","sourceRoot":"","sources":["../../../src/requestHandlers/put.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAA;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM1C,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,OAAgB,EAChB,sBAAqD,EACrD,gBAAyB,EACzB,OAA2C,EAC3C,EAAE;IACF,MAAM,SAAS,GAAG,KAAK,EAAE,GAAe,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,GAAG,CAAA;YAElC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC5D,IAAI,gBAAgB,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBACvC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAA;YAC1E,CAAC;YAED,MAAM,KAAK,GAAG,sBAAsB,EAAE,GAAG;gBACvC,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC;gBAClE,CAAC,CAAC,IAAI,CAAA;YAER,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAA;YAE/E,IAAI,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAE9C,IAAI,CAAC,IAAI;gBACP,OAAO;oBACL,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE;wBACJ,OAAO,EAAE,OAAO,EAAE,aAAa;qBAChC;iBACF,CAAA;YAEH,IAAI,GAAG,EAAE,GAAI,KAAgB,EAAE,EAAE,EAAE,CAAA;YAEnC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAE1D,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAA;QAChG,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,CAAA;QACrE,CAAC;IACH,CAAC,CAAA;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
@@ -0,0 +1,38 @@
1
+ export type UrlInfo = {
2
+ resource: string | null;
3
+ id: string | null;
4
+ };
5
+ export type RequestInfo = {
6
+ resource: string;
7
+ id: string | null;
8
+ };
9
+ export type RequestInfoWithoutId = Omit<RequestInfo, 'id'>;
10
+ export type ErrorResponse = {
11
+ message: string;
12
+ status: number;
13
+ };
14
+ export interface TembaRequest {
15
+ resource: string;
16
+ }
17
+ export type GetRequest = TembaRequest & {
18
+ id: string | null;
19
+ };
20
+ export type PostRequest = TembaRequest & {
21
+ body: unknown;
22
+ protocol: string | null;
23
+ host: string | null;
24
+ };
25
+ export type PutRequest = TembaRequest & {
26
+ id: string;
27
+ body: unknown;
28
+ };
29
+ export type PatchRequest = PutRequest;
30
+ export type DeleteRequest = TembaRequest & {
31
+ id: string | null;
32
+ };
33
+ export type TembaResponse = {
34
+ status: number;
35
+ body?: unknown;
36
+ headers?: Record<string, string>;
37
+ };
38
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAE1D,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG;IACvC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAA;AAErC,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/requestHandlers/types.ts"],"names":[],"mappings":""}
@@ -1 +1,2 @@
1
1
  export declare const removeNullFields: (obj: unknown) => unknown;
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,QAAS,OAAO,YAG5C,CAAA"}
@@ -0,0 +1,6 @@
1
+ export const removeNullFields = (obj) => {
2
+ if (typeof obj !== 'object' || obj === null)
3
+ return obj;
4
+ return Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== null));
5
+ };
6
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/requestHandlers/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAY,EAAE,EAAE;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,GAAG,CAAA;IACvD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAA;AACtF,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { Queries } from './queries/types';
2
+ import { CompiledSchemas } from './schema/types';
3
+ import { RouterConfig } from './config';
4
+ export declare const createResourceRouter: (queries: Queries, schemas: CompiledSchemas, routerConfig: RouterConfig) => import("express-serve-static-core").Router;
5
+ //# sourceMappingURL=resourceRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceRouter.d.ts","sourceRoot":"","sources":["../../src/resourceRouter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,eAAO,MAAM,oBAAoB,YACtB,OAAO,WACP,eAAe,gBACV,YAAY,+CAqH3B,CAAA"}
@@ -0,0 +1,95 @@
1
+ import express from 'express';
2
+ import { getRequestHandler } from './requestHandlers';
3
+ import { parseUrl } from './urls/urlParser';
4
+ export const createResourceRouter = (queries, schemas, routerConfig) => {
5
+ const getUrlInfo = (baseUrl) => {
6
+ const url = routerConfig.apiPrefix ? baseUrl.replace(routerConfig.apiPrefix, '') : baseUrl;
7
+ return parseUrl(url);
8
+ };
9
+ const parseGetRequest = (req) => {
10
+ const urlInfo = getUrlInfo(req.baseUrl);
11
+ if (!urlInfo.resource)
12
+ return null;
13
+ return {
14
+ id: urlInfo.id,
15
+ resource: urlInfo.resource,
16
+ };
17
+ };
18
+ const parsePostRequest = (req) => {
19
+ const urlInfo = getUrlInfo(req.baseUrl);
20
+ if (!urlInfo.resource)
21
+ return null;
22
+ const host = req.get('host') || null;
23
+ const protocol = host ? req.protocol : null;
24
+ return {
25
+ id: urlInfo.id,
26
+ resource: urlInfo.resource,
27
+ body: req.body,
28
+ host,
29
+ protocol,
30
+ };
31
+ };
32
+ const parsePutRequest = (req) => {
33
+ const urlInfo = getUrlInfo(req.baseUrl);
34
+ if (!urlInfo.resource)
35
+ return null;
36
+ if (!urlInfo.id)
37
+ return null;
38
+ return {
39
+ id: urlInfo.id,
40
+ resource: urlInfo.resource,
41
+ body: req.body,
42
+ };
43
+ };
44
+ const parsePatchRequest = parsePutRequest;
45
+ const parseDeleteRequest = (req) => {
46
+ const urlInfo = getUrlInfo(req.baseUrl);
47
+ if (!urlInfo.resource)
48
+ return null;
49
+ return {
50
+ id: urlInfo.id,
51
+ resource: urlInfo.resource,
52
+ };
53
+ };
54
+ const sendResponse = (tembaResponse, res) => {
55
+ res.status(tembaResponse.status);
56
+ if (tembaResponse.headers) {
57
+ for (const [key, value] of Object.entries(tembaResponse.headers)) {
58
+ res.set(key, value);
59
+ }
60
+ }
61
+ res.json(tembaResponse.body);
62
+ res.end();
63
+ };
64
+ const handle = async (expressRequest, expressResponse, parseRequest, handleRequest) => {
65
+ const requestInfo = parseRequest(expressRequest);
66
+ if (!requestInfo ||
67
+ (routerConfig.validateResources &&
68
+ !routerConfig.resources.includes(requestInfo.resource.toLowerCase()))) {
69
+ return expressResponse.status(404).json({
70
+ message: 'Unknown resource',
71
+ });
72
+ }
73
+ const response = await handleRequest(requestInfo);
74
+ sendResponse(response, expressResponse);
75
+ };
76
+ const requestHandler = getRequestHandler(queries, schemas, routerConfig);
77
+ const resourceRouter = express.Router();
78
+ resourceRouter.get('*', async (expressRequest, expressResponse) => {
79
+ await handle(expressRequest, expressResponse, parseGetRequest, requestHandler.handleGet);
80
+ });
81
+ resourceRouter.post('*', async (expressRequest, expressResponse) => {
82
+ await handle(expressRequest, expressResponse, parsePostRequest, requestHandler.handlePost);
83
+ });
84
+ resourceRouter.put('*', async (expressRequest, expressResponse) => {
85
+ await handle(expressRequest, expressResponse, parsePutRequest, requestHandler.handlePut);
86
+ });
87
+ resourceRouter.patch('*', async (expressRequest, expressResponse) => {
88
+ await handle(expressRequest, expressResponse, parsePatchRequest, requestHandler.handlePatch);
89
+ });
90
+ resourceRouter.delete('*', async (expressRequest, expressResponse) => {
91
+ await handle(expressRequest, expressResponse, parseDeleteRequest, requestHandler.handleDelete);
92
+ });
93
+ return resourceRouter;
94
+ };
95
+ //# sourceMappingURL=resourceRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceRouter.js","sourceRoot":"","sources":["../../src/resourceRouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { InterceptedResponse, ResponseBodyInterceptor } from './types';
2
+ export declare const interceptResponseBody: (interceptor: ResponseBodyInterceptor, info: InterceptedResponse) => {};
3
+ //# sourceMappingURL=interceptResponseBody.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interceptResponseBody.d.ts","sourceRoot":"","sources":["../../../src/responseBodyInterceptor/interceptResponseBody.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAEtE,eAAO,MAAM,qBAAqB,gBACnB,uBAAuB,QAC9B,mBAAmB,OAO1B,CAAA"}
@@ -0,0 +1,7 @@
1
+ export const interceptResponseBody = (interceptor, info) => {
2
+ if (!interceptor)
3
+ return info.body;
4
+ const intercepted = interceptor(info);
5
+ return intercepted ? intercepted : info.body;
6
+ };
7
+ //# sourceMappingURL=interceptResponseBody.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interceptResponseBody.js","sourceRoot":"","sources":["../../../src/responseBodyInterceptor/interceptResponseBody.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,WAAoC,EACpC,IAAyB,EACzB,EAAE;IACF,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC,IAAI,CAAA;IAElC,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAErC,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;AAC9C,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { Item } from '../queries/types';
2
+ export type InterceptedResponse = {
3
+ body: Item;
4
+ resource: string;
5
+ id: string;
6
+ } | {
7
+ body: Item[];
8
+ resource: string;
9
+ };
10
+ export type ResponseBodyInterceptor = (info: InterceptedResponse) => unknown;
11
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/responseBodyInterceptor/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAEvC,MAAM,MAAM,mBAAmB,GAC3B;IACE,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;CACX,GACD;IACE,IAAI,EAAE,IAAI,EAAE,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAEL,MAAM,MAAM,uBAAuB,GAAG,CAAC,IAAI,EAAE,mBAAmB,KAAK,OAAO,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/responseBodyInterceptor/types.ts"],"names":[],"mappings":""}