temba 0.16.0 → 0.18.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 (67) hide show
  1. package/README.md +77 -45
  2. package/config/index.d.ts +13 -8
  3. package/config/index.js +41 -18
  4. package/config/index.js.map +1 -1
  5. package/delay/delayMiddleware.js +1 -1
  6. package/delay/delayMiddleware.js.map +1 -1
  7. package/index.js +26 -22
  8. package/index.js.map +1 -1
  9. package/package.json +16 -14
  10. package/queries/in-memory.d.ts +9 -8
  11. package/queries/in-memory.js +64 -42
  12. package/queries/in-memory.js.map +1 -1
  13. package/queries/mongo.d.ts +8 -8
  14. package/queries/mongo.js +177 -65
  15. package/queries/mongo.js.map +1 -1
  16. package/queries/queries.d.ts +7 -16
  17. package/queries/queries.js +3 -3
  18. package/queries/queries.js.map +1 -1
  19. package/queries/types.d.ts +14 -0
  20. package/queries/types.js +3 -0
  21. package/queries/types.js.map +1 -0
  22. package/routes/delete.d.ts +5 -2
  23. package/routes/delete.js +55 -17
  24. package/routes/delete.js.map +1 -1
  25. package/routes/get.d.ts +5 -2
  26. package/routes/get.js +92 -48
  27. package/routes/get.js.map +1 -1
  28. package/routes/interceptRequestBody.d.ts +3 -0
  29. package/routes/interceptRequestBody.js +19 -0
  30. package/routes/interceptRequestBody.js.map +1 -0
  31. package/routes/patch.d.ts +6 -2
  32. package/routes/patch.js +82 -27
  33. package/routes/patch.js.map +1 -1
  34. package/routes/post.d.ts +6 -2
  35. package/routes/post.js +67 -27
  36. package/routes/post.js.map +1 -1
  37. package/routes/put.d.ts +6 -2
  38. package/routes/put.js +82 -27
  39. package/routes/put.js.map +1 -1
  40. package/routes/routes.d.ts +3 -1
  41. package/routes/routes.js +51 -22
  42. package/routes/routes.js.map +1 -1
  43. package/routes/types.d.ts +12 -6
  44. package/routes/utils.d.ts +1 -3
  45. package/routes/utils.js +7 -2
  46. package/routes/utils.js.map +1 -1
  47. package/schema/compile.d.ts +2 -0
  48. package/schema/compile.js +41 -0
  49. package/schema/compile.js.map +1 -0
  50. package/schema/transformConfig.d.ts +2 -0
  51. package/schema/transformConfig.js +17 -0
  52. package/schema/transformConfig.js.map +1 -0
  53. package/schema/types.d.ts +35 -0
  54. package/schema/types.js +3 -0
  55. package/schema/types.js.map +1 -0
  56. package/schema/validate.d.ts +3 -0
  57. package/schema/validate.js +19 -0
  58. package/schema/validate.js.map +1 -0
  59. package/urls/urlMiddleware.d.ts +4 -2
  60. package/urls/urlMiddleware.js +21 -10
  61. package/urls/urlMiddleware.js.map +1 -1
  62. package/urls/urlParser.d.ts +3 -3
  63. package/urls/urlParser.js +5 -5
  64. package/urls/urlParser.js.map +1 -1
  65. package/routes/interceptors.d.ts +0 -3
  66. package/routes/interceptors.js +0 -22
  67. package/routes/interceptors.js.map +0 -1
package/routes/put.js CHANGED
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
14
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
15
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -8,39 +19,83 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
19
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
20
  });
10
21
  };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
11
49
  Object.defineProperty(exports, "__esModule", { value: true });
12
50
  exports.createPutRoutes = void 0;
13
- const interceptors_1 = require("./interceptors");
14
- const utils_1 = require("./utils");
15
- function createPutRoutes(queries, requestBodyInterceptor, returnNullFields) {
51
+ var interceptRequestBody_1 = require("./interceptRequestBody");
52
+ var validate_1 = require("../schema/validate");
53
+ var utils_1 = require("./utils");
54
+ function createPutRoutes(queries, requestBodyInterceptor, returnNullFields, schemas) {
16
55
  function handlePut(req, res) {
17
- return __awaiter(this, void 0, void 0, function* () {
18
- try {
19
- const { resourceName, id } = req.requestInfo;
20
- const requestBody = (0, interceptors_1.interceptRequestBody)(requestBodyInterceptor.put, req);
21
- if (typeof requestBody === 'string')
22
- return res.status(400).json({ message: requestBody }).send();
23
- let item = null;
24
- if (id)
25
- item = yield queries.getById(resourceName, id);
26
- if (!item)
27
- return res.status(404).json({
28
- message: `ID '${id}' not found`,
29
- });
30
- item = Object.assign(Object.assign({}, requestBody), { id });
31
- const replacedItem = yield queries.replace(resourceName, item);
32
- return res
33
- .status(200)
34
- .json(returnNullFields ? replacedItem : (0, utils_1.removeNullFields)(replacedItem))
35
- .send();
36
- }
37
- catch (error) {
38
- return res.status(500).json({ message: error.message });
39
- }
56
+ return __awaiter(this, void 0, void 0, function () {
57
+ var _a, resource, id, validationResult, body, item, replacedItem, error_1;
58
+ return __generator(this, function (_b) {
59
+ switch (_b.label) {
60
+ case 0:
61
+ _b.trys.push([0, 4, , 5]);
62
+ _a = req.requestInfo, resource = _a.resource, id = _a.id;
63
+ validationResult = (0, validate_1.validate)(req.body, schemas === null || schemas === void 0 ? void 0 : schemas[resource]);
64
+ if (validationResult.isValid === false) {
65
+ return [2 /*return*/, res.status(400).json({ message: validationResult.errorMessage })];
66
+ }
67
+ body = (0, interceptRequestBody_1.interceptRequestBody)(requestBodyInterceptor.put, req);
68
+ if (typeof body === 'string')
69
+ return [2 /*return*/, res.status(400).json({ message: body }).send()];
70
+ item = null;
71
+ if (!id) return [3 /*break*/, 2];
72
+ return [4 /*yield*/, queries.getById(resource, id)];
73
+ case 1:
74
+ item = _b.sent();
75
+ _b.label = 2;
76
+ case 2:
77
+ if (!item)
78
+ return [2 /*return*/, res.status(404).json({
79
+ message: "ID '".concat(id, "' not found"),
80
+ })];
81
+ item = __assign(__assign({}, body), { id: id });
82
+ return [4 /*yield*/, queries.replace(resource, item)];
83
+ case 3:
84
+ replacedItem = _b.sent();
85
+ return [2 /*return*/, res
86
+ .status(200)
87
+ .json(returnNullFields ? replacedItem : (0, utils_1.removeNullFields)(replacedItem))
88
+ .send()];
89
+ case 4:
90
+ error_1 = _b.sent();
91
+ return [2 /*return*/, res.status(500).json({ message: error_1.message })];
92
+ case 5: return [2 /*return*/];
93
+ }
94
+ });
40
95
  });
41
96
  }
42
97
  return {
43
- handlePut,
98
+ handlePut: handlePut,
44
99
  };
45
100
  }
46
101
  exports.createPutRoutes = createPutRoutes;
package/routes/put.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"put.js","sourceRoot":"","sources":["../../src/routes/put.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAAqD;AACrD,mCAA0C;AAE1C,SAAS,eAAe,CAAC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB;IACxE,SAAe,SAAS,CAAC,GAAG,EAAE,GAAG;;YAC/B,IAAI;gBACF,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,WAAW,CAAA;gBAE5C,MAAM,WAAW,GAAG,IAAA,mCAAoB,EAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;gBAEzE,IAAI,OAAO,WAAW,KAAK,QAAQ;oBACjC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;gBAE9D,IAAI,IAAI,GAAG,IAAI,CAAA;gBACf,IAAI,EAAE;oBAAE,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;gBAEtD,IAAI,CAAC,IAAI;oBACP,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBAC1B,OAAO,EAAE,OAAO,EAAE,aAAa;qBAChC,CAAC,CAAA;gBAEJ,IAAI,mCAAQ,WAAW,KAAE,EAAE,GAAE,CAAA;gBAE7B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;gBAE9D,OAAO,GAAG;qBACP,MAAM,CAAC,GAAG,CAAC;qBACX,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,YAAY,CAAC,CAAC;qBACtE,IAAI,EAAE,CAAA;aACV;YAAC,OAAO,KAAc,EAAE;gBACvB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAA;aACnE;QACH,CAAC;KAAA;IAED,OAAO;QACL,SAAS;KACV,CAAA;AACH,CAAC;AAEQ,0CAAe"}
1
+ {"version":3,"file":"put.js","sourceRoot":"","sources":["../../src/routes/put.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAA6D;AAC7D,+CAA6C;AAC7C,iCAA0C;AAM1C,SAAS,eAAe,CACtB,OAAgB,EAChB,sBAA8C,EAC9C,gBAAyB,EACzB,OAAoC;IAEpC,SAAe,SAAS,CAAC,GAAoB,EAAE,GAAa;;;;;;;wBAElD,KAAmB,GAAG,CAAC,WAAW,EAAhC,QAAQ,cAAA,EAAE,EAAE,QAAA,CAAoB;wBAElC,gBAAgB,GAAG,IAAA,mBAAQ,EAAC,GAAG,CAAC,IAAI,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,QAAQ,CAAC,CAAC,CAAA;wBAChE,IAAI,gBAAgB,CAAC,OAAO,KAAK,KAAK,EAAE;4BACtC,sBAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,YAAY,EAAE,CAAC,EAAA;yBACxE;wBAEK,IAAI,GAAG,IAAA,2CAAoB,EAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;wBAElE,IAAI,OAAO,IAAI,KAAK,QAAQ;4BAAE,sBAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAA;wBAE/E,IAAI,GAAG,IAAI,CAAA;6BACX,EAAE,EAAF,wBAAE;wBAAS,qBAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAA;;wBAA1C,IAAI,GAAG,SAAmC,CAAA;;;wBAElD,IAAI,CAAC,IAAI;4BACP,sBAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oCAC1B,OAAO,EAAE,cAAO,EAAE,gBAAa;iCAChC,CAAC,EAAA;wBAEJ,IAAI,yBAAQ,IAAI,KAAE,EAAE,IAAA,GAAE,CAAA;wBAED,qBAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAA;;wBAApD,YAAY,GAAG,SAAqC;wBAE1D,sBAAO,GAAG;iCACP,MAAM,CAAC,GAAG,CAAC;iCACX,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,YAAY,CAAC,CAAC;iCACtE,IAAI,EAAE,EAAA;;;wBAET,sBAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAG,OAAe,CAAC,OAAO,EAAE,CAAC,EAAA;;;;;KAErE;IAED,OAAO;QACL,SAAS,WAAA;KACV,CAAA;AACH,CAAC;AAEQ,0CAAe"}
@@ -1,5 +1,7 @@
1
1
  import { RouterConfig } from '../config';
2
- declare function createResourceRouter(queries: any, routerConfig: RouterConfig): import("express-serve-static-core").Router;
2
+ import { CompiledSchemas } from '../schema/types';
3
+ import { Queries } from '../queries/types';
4
+ declare function createResourceRouter(queries: Queries, schemas: CompiledSchemas, routerConfig: RouterConfig): import("express-serve-static-core").Router;
3
5
  declare const rootRouter: import("express-serve-static-core").Router;
4
6
  declare function handleMethodNotAllowed(_: any, res: any): void;
5
7
  declare function handleNotFound(_: any, res: any): void;
package/routes/routes.js CHANGED
@@ -8,31 +8,58 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
11
38
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
39
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
40
  };
14
41
  Object.defineProperty(exports, "__esModule", { value: true });
15
42
  exports.handleNotFound = exports.handleMethodNotAllowed = exports.rootRouter = exports.createResourceRouter = void 0;
16
- const get_1 = require("./get");
17
- const post_1 = require("./post");
18
- const put_1 = require("./put");
19
- const patch_1 = require("./patch");
20
- const delete_1 = require("./delete");
21
- const urlMiddleware_1 = require("../urls/urlMiddleware");
22
- const express_1 = __importDefault(require("express"));
23
- function createResourceRouter(queries, routerConfig) {
24
- const { validateResources, resourceNames, apiPrefix, cacheControl, requestBodyInterceptor, responseBodyInterceptor, returnNullFields, } = routerConfig;
25
- const { handleGetResource } = (0, get_1.createGetRoutes)(queries, cacheControl, responseBodyInterceptor, returnNullFields);
26
- const { handlePost } = (0, post_1.createPostRoutes)(queries, requestBodyInterceptor, returnNullFields);
27
- const { handlePut } = (0, put_1.createPutRoutes)(queries, requestBodyInterceptor, returnNullFields);
28
- const { handlePatch } = (0, patch_1.createPatchRoutes)(queries, requestBodyInterceptor, returnNullFields);
29
- const { handleDelete } = (0, delete_1.createDeleteRoutes)(queries);
30
- const validateResource = (0, urlMiddleware_1.createValidateResourceMiddleware)(validateResources, resourceNames);
31
- const getResourceAndId = (0, urlMiddleware_1.createResourceAndIdParser)(apiPrefix);
32
- const resourceRouter = express_1.default.Router();
43
+ var express_1 = __importDefault(require("express"));
44
+ var get_1 = require("./get");
45
+ var post_1 = require("./post");
46
+ var put_1 = require("./put");
47
+ var patch_1 = require("./patch");
48
+ var delete_1 = require("./delete");
49
+ var urlMiddleware_1 = require("../urls/urlMiddleware");
50
+ function createResourceRouter(queries, schemas, routerConfig) {
51
+ var validateResources = routerConfig.validateResources, resources = routerConfig.resources, apiPrefix = routerConfig.apiPrefix, cacheControl = routerConfig.cacheControl, requestBodyInterceptor = routerConfig.requestBodyInterceptor, responseBodyInterceptor = routerConfig.responseBodyInterceptor, returnNullFields = routerConfig.returnNullFields;
52
+ var handleGet = (0, get_1.createGetRoutes)(queries, cacheControl, responseBodyInterceptor, returnNullFields).handleGet;
53
+ var handlePost = (0, post_1.createPostRoutes)(queries, requestBodyInterceptor, returnNullFields, schemas.post).handlePost;
54
+ var handlePut = (0, put_1.createPutRoutes)(queries, requestBodyInterceptor, returnNullFields, schemas.put).handlePut;
55
+ var handlePatch = (0, patch_1.createPatchRoutes)(queries, requestBodyInterceptor, returnNullFields, schemas.patch).handlePatch;
56
+ var handleDelete = (0, delete_1.createDeleteRoutes)(queries).handleDelete;
57
+ var validateResource = (0, urlMiddleware_1.createValidateResourceMiddleware)(validateResources, resources);
58
+ var getResourceAndId = (0, urlMiddleware_1.createResourceAndIdParser)(apiPrefix);
59
+ var resourceRouter = express_1.default.Router();
33
60
  resourceRouter
34
61
  // The router.get() function automatically handles HEAD requests as well, unless router.head is called first.
35
- .get('*', getResourceAndId, validateResource, handleGetResource)
62
+ .get('*', getResourceAndId, validateResource, handleGet)
36
63
  .post('*', getResourceAndId, validateResource, handlePost)
37
64
  .put('*', getResourceAndId, validateResource, handlePut)
38
65
  .patch('*', getResourceAndId, validateResource, handlePatch)
@@ -41,11 +68,13 @@ function createResourceRouter(queries, routerConfig) {
41
68
  }
42
69
  exports.createResourceRouter = createResourceRouter;
43
70
  // A GET to the root URL shows a default message.
44
- const rootRouter = express_1.default.Router();
71
+ var rootRouter = express_1.default.Router();
45
72
  exports.rootRouter = rootRouter;
46
- rootRouter.get('/', (_, res) => __awaiter(void 0, void 0, void 0, function* () {
47
- return res.send('It works! ツ');
48
- }));
73
+ rootRouter.get('/', function (_, res) { return __awaiter(void 0, void 0, void 0, function () {
74
+ return __generator(this, function (_a) {
75
+ return [2 /*return*/, res.send('It works! ツ')];
76
+ });
77
+ }); });
49
78
  // All other requests to the root URL are not allowed.
50
79
  rootRouter.all('/', handleMethodNotAllowed);
51
80
  // Route for handling not allowed methods.
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/routes/routes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+BAAuC;AACvC,iCAAyC;AACzC,+BAAuC;AACvC,mCAA2C;AAC3C,qCAA6C;AAC7C,yDAAmG;AAEnG,sDAA6B;AAG7B,SAAS,oBAAoB,CAAC,OAAO,EAAE,YAA0B;IAC/D,MAAM,EACJ,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,GACjB,GAAG,YAAY,CAAA;IAEhB,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAA,qBAAe,EAC3C,OAAO,EACP,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,CACjB,CAAA;IACD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,uBAAgB,EAAC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CAAA;IAC1F,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,qBAAe,EAAC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CAAA;IACxF,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,yBAAiB,EAAC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CAAA;IAC5F,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,2BAAkB,EAAC,OAAO,CAAC,CAAA;IAEpD,MAAM,gBAAgB,GAAG,IAAA,gDAAgC,EAAC,iBAAiB,EAAE,aAAa,CAAC,CAAA;IAC3F,MAAM,gBAAgB,GAAG,IAAA,yCAAyB,EAAC,SAAS,CAAC,CAAA;IAE7D,MAAM,cAAc,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;IAEvC,cAAc;QACZ,6GAA6G;SAC5G,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;SAC/D,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,CAAC;SACzD,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,CAAC;SACvD,KAAK,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,CAAC;SAC3D,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAA;IAEhE,OAAO,cAAc,CAAA;AACvB,CAAC;AAqBQ,oDAAoB;AAnB7B,iDAAiD;AACjD,MAAM,UAAU,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAkBJ,gCAAU;AAjBzC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAO,CAAC,EAAE,GAAG,EAAE,EAAE;IACnC,OAAO,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AAChC,CAAC,CAAA,CAAC,CAAA;AAEF,sDAAsD;AACtD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAA;AAE3C,0CAA0C;AAC1C,SAAS,sBAAsB,CAAC,CAAC,EAAE,GAAG;IACpC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAA;AACzD,CAAC;AAO0C,wDAAsB;AALjE,gCAAgC;AAChC,SAAS,cAAc,CAAC,CAAC,EAAE,GAAG;IAC5B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;AAChD,CAAC;AAEkE,wCAAc"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/routes/routes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAA6B;AAC7B,6BAAuC;AACvC,+BAAyC;AACzC,6BAAuC;AACvC,iCAA2C;AAC3C,mCAA6C;AAC7C,uDAAmG;AAKnG,SAAS,oBAAoB,CAC3B,OAAgB,EAChB,OAAwB,EACxB,YAA0B;IAGxB,IAAA,iBAAiB,GAOf,YAAY,kBAPG,EACjB,SAAS,GAMP,YAAY,UANL,EACT,SAAS,GAKP,YAAY,UALL,EACT,YAAY,GAIV,YAAY,aAJF,EACZ,sBAAsB,GAGpB,YAAY,uBAHQ,EACtB,uBAAuB,GAErB,YAAY,wBAFS,EACvB,gBAAgB,GACd,YAAY,iBADE,CACF;IAER,IAAA,SAAS,GAAK,IAAA,qBAAe,EACnC,OAAO,EACP,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,CACjB,UALgB,CAKhB;IAEO,IAAA,UAAU,GAAK,IAAA,uBAAgB,EACrC,OAAO,EACP,sBAAsB,EACtB,gBAAgB,EAChB,OAAO,CAAC,IAAI,CACb,WALiB,CAKjB;IAEO,IAAA,SAAS,GAAK,IAAA,qBAAe,EACnC,OAAO,EACP,sBAAsB,EACtB,gBAAgB,EAChB,OAAO,CAAC,GAAG,CACZ,UALgB,CAKhB;IAEO,IAAA,WAAW,GAAK,IAAA,yBAAiB,EACvC,OAAO,EACP,sBAAsB,EACtB,gBAAgB,EAChB,OAAO,CAAC,KAAK,CACd,YALkB,CAKlB;IAEO,IAAA,YAAY,GAAK,IAAA,2BAAkB,EAAC,OAAO,CAAC,aAAhC,CAAgC;IAEpD,IAAM,gBAAgB,GAAG,IAAA,gDAAgC,EAAC,iBAAiB,EAAE,SAAS,CAAC,CAAA;IACvF,IAAM,gBAAgB,GAAG,IAAA,yCAAyB,EAAC,SAAS,CAAC,CAAA;IAE7D,IAAM,cAAc,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;IAEvC,cAAc;QACZ,6GAA6G;SAC5G,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,CAAC;SACvD,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,CAAC;SACzD,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,CAAC;SACvD,KAAK,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,CAAC;SAC3D,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAA;IAEhE,OAAO,cAAc,CAAA;AACvB,CAAC;AAqBQ,oDAAoB;AAnB7B,iDAAiD;AACjD,IAAM,UAAU,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAkBJ,gCAAU;AAjBzC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,UAAO,CAAC,EAAE,GAAG;;QAC/B,sBAAO,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,EAAA;;KAC/B,CAAC,CAAA;AAEF,sDAAsD;AACtD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAA;AAE3C,0CAA0C;AAC1C,SAAS,sBAAsB,CAAC,CAAC,EAAE,GAAG;IACpC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAA;AACzD,CAAC;AAO0C,wDAAsB;AALjE,gCAAgC;AAChC,SAAS,cAAc,CAAC,CAAC,EAAE,GAAG;IAC5B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;AAChD,CAAC;AAEkE,wCAAc"}
package/routes/types.d.ts CHANGED
@@ -1,6 +1,12 @@
1
+ import { Request } from 'express';
2
+ import { Item } from '../queries/types';
3
+ export type ExtendedRequest = Request & {
4
+ requestInfo: RequestInfo;
5
+ };
1
6
  type RequestInfo = {
2
- resourceName: string;
3
- requestBody: unknown;
7
+ resource: string;
8
+ body: unknown;
9
+ id?: string;
4
10
  };
5
11
  export type RequestBodyInterceptorCallback = (info: RequestInfo) => void | string | object;
6
12
  export type RequestBodyInterceptor = {
@@ -8,10 +14,10 @@ export type RequestBodyInterceptor = {
8
14
  patch?: RequestBodyInterceptorCallback;
9
15
  put?: RequestBodyInterceptorCallback;
10
16
  };
11
- type ResponseInfo = {
12
- resourceName: string;
13
- responseBody: unknown;
17
+ export type ResponseInfo<T extends Item | Item[]> = {
18
+ resource: string;
19
+ body: T;
14
20
  id?: string;
15
21
  };
16
- export type ResponseBodyInterceptor = (info: ResponseInfo) => unknown;
22
+ export type ResponseBodyInterceptor = (info: ResponseInfo<Item | Item[]>) => unknown;
17
23
  export {};
package/routes/utils.d.ts CHANGED
@@ -1,3 +1 @@
1
- export declare const removeNullFields: (obj: Record<string, unknown>) => {
2
- [k: string]: unknown;
3
- };
1
+ export declare const removeNullFields: (obj: unknown) => unknown;
package/routes/utils.js CHANGED
@@ -1,8 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.removeNullFields = void 0;
4
- const removeNullFields = (obj) => {
5
- return Object.fromEntries(Object.entries(obj).filter(([_, value]) => value !== null));
4
+ var removeNullFields = function (obj) {
5
+ if (typeof obj !== 'object')
6
+ return obj;
7
+ return Object.fromEntries(Object.entries(obj).filter(function (_a) {
8
+ var value = _a[1];
9
+ return value !== null;
10
+ }));
6
11
  };
7
12
  exports.removeNullFields = removeNullFields;
8
13
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/routes/utils.ts"],"names":[],"mappings":";;;AAAO,MAAM,gBAAgB,GAAG,CAAC,GAA4B,EAAE,EAAE;IAC/D,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAA;AACvF,CAAC,CAAA;AAFY,QAAA,gBAAgB,oBAE5B"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/routes/utils.ts"],"names":[],"mappings":";;;AAAO,IAAM,gBAAgB,GAAG,UAAC,GAAY;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAA;IACvC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAC,EAAS;YAAN,KAAK,QAAA;QAAM,OAAA,KAAK,KAAK,IAAI;IAAd,CAAc,CAAC,CAAC,CAAA;AACtF,CAAC,CAAA;AAHY,QAAA,gBAAgB,oBAG5B"}
@@ -0,0 +1,2 @@
1
+ import { ConfiguredSchemas, CompiledSchemas } from './types';
2
+ export declare const compileAndTransformSchemas: (schemas: ConfiguredSchemas) => CompiledSchemas;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.compileAndTransformSchemas = void 0;
18
+ var ajv_1 = __importDefault(require("ajv"));
19
+ var transformConfig_1 = require("./transformConfig");
20
+ var compileSchemas = function (schemas) {
21
+ // Use a single Ajv instance in the whole app
22
+ var ajv = new ajv_1.default();
23
+ // Turn the configured schemas into compiled schemas
24
+ var compiledSchemas = __assign({}, schemas);
25
+ Object.keys(schemas).forEach(function (resource) {
26
+ Object.keys(schemas[resource]).forEach(function (method) {
27
+ compiledSchemas[resource][method] = ajv.compile(schemas[resource][method]);
28
+ });
29
+ });
30
+ return compiledSchemas;
31
+ };
32
+ var compileAndTransformSchemas = function (schemas) {
33
+ var transformedSchemas = {};
34
+ if (schemas) {
35
+ var compiledSchemas = compileSchemas(schemas);
36
+ transformedSchemas = (0, transformConfig_1.transformSchemas)(compiledSchemas);
37
+ }
38
+ return transformedSchemas;
39
+ };
40
+ exports.compileAndTransformSchemas = compileAndTransformSchemas;
41
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/schema/compile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4CAAqB;AAErB,qDAAoD;AAEpD,IAAM,cAAc,GAAG,UAAC,OAA0B;IAChD,6CAA6C;IAC7C,IAAM,GAAG,GAAG,IAAI,aAAG,EAAE,CAAA;IAErB,oDAAoD;IACpD,IAAM,eAAe,gBAAyB,OAAO,CAAE,CAAA;IACvD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAC,QAAQ;QACpC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,MAAM;YAC5C,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QAC5E,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO,eAAe,CAAA;AACxB,CAAC,CAAA;AAEM,IAAM,0BAA0B,GAAG,UAAC,OAA0B;IACnE,IAAI,kBAAkB,GAAG,EAAE,CAAA;IAC3B,IAAI,OAAO,EAAE;QACX,IAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QAC/C,kBAAkB,GAAG,IAAA,kCAAgB,EAAC,eAAe,CAAC,CAAA;KACvD;IAED,OAAO,kBAAkB,CAAA;AAC3B,CAAC,CAAA;AARY,QAAA,0BAA0B,8BAQtC"}
@@ -0,0 +1,2 @@
1
+ import { ConfiguredSchemas, TransformedSchemas } from './types';
2
+ export declare const transformSchemas: (schemas: ConfiguredSchemas) => TransformedSchemas;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformSchemas = void 0;
4
+ var transformSchemas = function (schemas) {
5
+ var transformedObject = {};
6
+ for (var resource in schemas) {
7
+ for (var key in schemas[resource]) {
8
+ if (!transformedObject[key]) {
9
+ transformedObject[key] = {};
10
+ }
11
+ transformedObject[key][resource] = schemas[resource][key];
12
+ }
13
+ }
14
+ return transformedObject;
15
+ };
16
+ exports.transformSchemas = transformSchemas;
17
+ //# sourceMappingURL=transformConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformConfig.js","sourceRoot":"","sources":["../../src/schema/transformConfig.ts"],"names":[],"mappings":";;;AAEO,IAAM,gBAAgB,GAAG,UAAC,OAA0B;IACzD,IAAM,iBAAiB,GAAG,EAAE,CAAA;IAE5B,KAAK,IAAM,QAAQ,IAAI,OAAO,EAAE;QAC9B,KAAK,IAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;YACnC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;gBAC3B,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;aAC5B;YACD,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAA;SAC1D;KACF;IAED,OAAO,iBAAiB,CAAA;AAC1B,CAAC,CAAA;AAbY,QAAA,gBAAgB,oBAa5B"}
@@ -0,0 +1,35 @@
1
+ import { ValidateFunction } from 'ajv';
2
+ export type ConfiguredSchemas = {
3
+ [resource: string]: ConfiguredResourceSchema;
4
+ };
5
+ type ConfiguredResourceSchema = {
6
+ post?: unknown;
7
+ put?: unknown;
8
+ patch?: unknown;
9
+ };
10
+ export type TransformedSchemas = {
11
+ post?: {
12
+ [resource: string]: unknown;
13
+ };
14
+ put?: {
15
+ [resource: string]: unknown;
16
+ };
17
+ patch?: {
18
+ [resource: string]: unknown;
19
+ };
20
+ };
21
+ export type ValidateFunctionPerResource = {
22
+ [resource: string]: ValidateFunction<unknown>;
23
+ };
24
+ export type CompiledSchemas = {
25
+ post?: ValidateFunctionPerResource;
26
+ put?: ValidateFunctionPerResource;
27
+ patch?: ValidateFunctionPerResource;
28
+ };
29
+ export type ValidationResult = {
30
+ isValid: false;
31
+ errorMessage: string;
32
+ } | {
33
+ isValid: true;
34
+ };
35
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { ValidateFunction } from 'ajv';
2
+ import { ValidationResult } from './types';
3
+ export declare const validate: (body: unknown, validate?: ValidateFunction<unknown>) => ValidationResult;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validate = void 0;
4
+ var validate = function (body, validate) {
5
+ var _a, _b;
6
+ if (!validate)
7
+ return { isValid: true };
8
+ if (validate(body)) {
9
+ return { isValid: true };
10
+ }
11
+ else {
12
+ return {
13
+ isValid: false,
14
+ errorMessage: (_b = (_a = validate.errors) === null || _a === void 0 ? void 0 : _a[0].message) !== null && _b !== void 0 ? _b : 'Unknown schema validation error',
15
+ };
16
+ }
17
+ };
18
+ exports.validate = validate;
19
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/schema/validate.ts"],"names":[],"mappings":";;;AAGO,IAAM,QAAQ,GAAG,UAAC,IAAa,EAAE,QAAoC;;IAC1E,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAEvC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;QAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;KACzB;SAAM;QACL,OAAO;YACL,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,MAAA,MAAA,QAAQ,CAAC,MAAM,0CAAG,CAAC,EAAE,OAAO,mCAAI,iCAAiC;SAChF,CAAA;KACF;AACH,CAAC,CAAA;AAXY,QAAA,QAAQ,YAWpB"}
@@ -1,3 +1,5 @@
1
- declare function createResourceAndIdParser(apiPrefix: any): (req: any, _: any, next: any) => any;
2
- declare function createValidateResourceMiddleware(validateResources: any, resourceNames: any): (req: any, res: any, next: any) => any;
1
+ import { Response } from 'express';
2
+ import { ExtendedRequest } from '../routes/types';
3
+ declare function createResourceAndIdParser(apiPrefix: string): (req: ExtendedRequest, res: Response, next: () => void) => void;
4
+ declare function createValidateResourceMiddleware(validateResources: boolean, resources: string[]): (req: ExtendedRequest, res: Response, next: () => void) => void | Response<any, Record<string, any>>;
3
5
  export { createResourceAndIdParser, createValidateResourceMiddleware };
@@ -1,26 +1,37 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  Object.defineProperty(exports, "__esModule", { value: true });
3
14
  exports.createValidateResourceMiddleware = exports.createResourceAndIdParser = void 0;
4
- const urlParser_1 = require("./urlParser");
15
+ var urlParser_1 = require("./urlParser");
5
16
  function createResourceAndIdParser(apiPrefix) {
6
- return function getResourceAndId(req, _, next) {
7
- const url = req.baseUrl.replace(apiPrefix, '');
8
- const urlInfo = (0, urlParser_1.parseUrl)(url);
9
- req.requestInfo = Object.assign(Object.assign({}, req.requestInfo), urlInfo);
17
+ return function getResourceAndId(req, res, next) {
18
+ var url = req.baseUrl.replace(apiPrefix, '');
19
+ var urlInfo = (0, urlParser_1.parseUrl)(url);
20
+ req.requestInfo = __assign(__assign({}, req.requestInfo), urlInfo);
10
21
  return next();
11
22
  };
12
23
  }
13
24
  exports.createResourceAndIdParser = createResourceAndIdParser;
14
- function createValidateResourceMiddleware(validateResources, resourceNames) {
25
+ function createValidateResourceMiddleware(validateResources, resources) {
15
26
  return function validateResource(req, res, next) {
16
27
  if (!validateResources)
17
28
  return next();
18
- const { resourceName } = req.requestInfo;
19
- if (!resourceName)
29
+ var resource = req.requestInfo.resource;
30
+ if (!resource)
20
31
  return next();
21
- if (!resourceNames.includes(resourceName.toLowerCase())) {
32
+ if (!resources.includes(resource.toLowerCase())) {
22
33
  return res.status(404).json({
23
- message: `'${resourceName}' is an unknown resource`,
34
+ message: "'".concat(resource, "' is an unknown resource"),
24
35
  });
25
36
  }
26
37
  return next();
@@ -1 +1 @@
1
- {"version":3,"file":"urlMiddleware.js","sourceRoot":"","sources":["../../src/urls/urlMiddleware.ts"],"names":[],"mappings":";;;AAAA,2CAAsC;AAEtC,SAAS,yBAAyB,CAAC,SAAS;IAC1C,OAAO,SAAS,gBAAgB,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI;QAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAC9C,MAAM,OAAO,GAAG,IAAA,oBAAQ,EAAC,GAAG,CAAC,CAAA;QAE7B,GAAG,CAAC,WAAW,mCAAQ,GAAG,CAAC,WAAW,GAAK,OAAO,CAAE,CAAA;QAEpD,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAoBQ,8DAAyB;AAlBlC,SAAS,gCAAgC,CAAC,iBAAiB,EAAE,aAAa;IACxE,OAAO,SAAS,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;QAC7C,IAAI,CAAC,iBAAiB;YAAE,OAAO,IAAI,EAAE,CAAA;QAErC,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,WAAW,CAAA;QAExC,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,EAAE,CAAA;QAEhC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,EAAE;YACvD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,IAAI,YAAY,0BAA0B;aACpD,CAAC,CAAA;SACH;QAED,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAEmC,4EAAgC"}
1
+ {"version":3,"file":"urlMiddleware.js","sourceRoot":"","sources":["../../src/urls/urlMiddleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,yCAAsC;AAGtC,SAAS,yBAAyB,CAAC,SAAiB;IAClD,OAAO,SAAS,gBAAgB,CAAC,GAAoB,EAAE,GAAa,EAAE,IAAgB;QACpF,IAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAC9C,IAAM,OAAO,GAAG,IAAA,oBAAQ,EAAC,GAAG,CAAC,CAAA;QAE7B,GAAG,CAAC,WAAW,yBAAQ,GAAG,CAAC,WAAW,GAAK,OAAO,CAAE,CAAA;QAEpD,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAoBQ,8DAAyB;AAlBlC,SAAS,gCAAgC,CAAC,iBAA0B,EAAE,SAAmB;IACvF,OAAO,SAAS,gBAAgB,CAAC,GAAoB,EAAE,GAAa,EAAE,IAAgB;QACpF,IAAI,CAAC,iBAAiB;YAAE,OAAO,IAAI,EAAE,CAAA;QAE7B,IAAA,QAAQ,GAAK,GAAG,CAAC,WAAW,SAApB,CAAoB;QAEpC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,EAAE,CAAA;QAE5B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE;YAC/C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,WAAI,QAAQ,6BAA0B;aAChD,CAAC,CAAA;SACH;QAED,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAEmC,4EAAgC"}
@@ -1,5 +1,5 @@
1
- declare function parseUrl(url: any): {
2
- resourceName: any;
3
- id: any;
1
+ declare function parseUrl(url: string): {
2
+ resource: string;
3
+ id: string;
4
4
  };
5
5
  export { parseUrl };
package/urls/urlParser.js CHANGED
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseUrl = void 0;
4
4
  function parseUrl(url) {
5
5
  if (!url || (url && !url.trim()))
6
- return { resourceName: null, id: null };
7
- const urlSegments = url.split('/').filter((i) => i);
8
- const resourceName = urlSegments.length > 0 ? urlSegments[0] : null;
9
- const id = urlSegments.length > 1 ? urlSegments[1] : null;
10
- return { resourceName, id };
6
+ return { resource: null, id: null };
7
+ var urlSegments = url.split('/').filter(function (i) { return i; });
8
+ var resource = urlSegments.length > 0 ? urlSegments[0] : null;
9
+ var id = urlSegments.length > 1 ? urlSegments[1] : null;
10
+ return { resource: resource, id: id };
11
11
  }
12
12
  exports.parseUrl = parseUrl;
13
13
  //# sourceMappingURL=urlParser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"urlParser.js","sourceRoot":"","sources":["../../src/urls/urlParser.ts"],"names":[],"mappings":";;;AAAA,SAAS,QAAQ,CAAC,GAAG;IACnB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IAEzE,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAEnD,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACnE,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEzD,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;AAC7B,CAAC;AAEQ,4BAAQ"}
1
+ {"version":3,"file":"urlParser.js","sourceRoot":"","sources":["../../src/urls/urlParser.ts"],"names":[],"mappings":";;;AAAA,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IAErE,IAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC,CAAC,CAAA;IAEnD,IAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC/D,IAAM,EAAE,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEzD,OAAO,EAAE,QAAQ,UAAA,EAAE,EAAE,IAAA,EAAE,CAAA;AACzB,CAAC;AAEQ,4BAAQ"}
@@ -1,3 +0,0 @@
1
- import { RequestBodyInterceptorCallback } from './types';
2
- declare function interceptRequestBody(intercept: RequestBodyInterceptorCallback, req: any): string | object;
3
- export { interceptRequestBody };
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.interceptRequestBody = void 0;
4
- function interceptRequestBody(intercept, req) {
5
- const { resourceName } = req.requestInfo;
6
- let requestBody = req.body;
7
- const validationResult = intercept({ resourceName, requestBody });
8
- if (!validationResult && typeof requestBody === 'object')
9
- return requestBody;
10
- if (typeof validationResult === 'string')
11
- return validationResult;
12
- // The requestBody was replaced by something else.
13
- if (validationResult)
14
- requestBody = validationResult;
15
- if (typeof requestBody === 'object') {
16
- return requestBody;
17
- }
18
- else
19
- return req.body;
20
- }
21
- exports.interceptRequestBody = interceptRequestBody;
22
- //# sourceMappingURL=interceptors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interceptors.js","sourceRoot":"","sources":["../../src/routes/interceptors.ts"],"names":[],"mappings":";;;AAEA,SAAS,oBAAoB,CAAC,SAAyC,EAAE,GAAG;IAC1E,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,WAAW,CAAA;IACxC,IAAI,WAAW,GAAG,GAAG,CAAC,IAAI,CAAA;IAE1B,MAAM,gBAAgB,GAAG,SAAS,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAA;IAEjE,IAAI,CAAC,gBAAgB,IAAI,OAAO,WAAW,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAA;IAE5E,IAAI,OAAO,gBAAgB,KAAK,QAAQ;QAAE,OAAO,gBAAgB,CAAA;IAEjE,kDAAkD;IAClD,IAAI,gBAAgB;QAAE,WAAW,GAAG,gBAAgB,CAAA;IAEpD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;QACnC,OAAO,WAAW,CAAA;KACnB;;QAAM,OAAO,GAAG,CAAC,IAAI,CAAA;AACxB,CAAC;AAEQ,oDAAoB"}