axe-api 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -42,6 +52,7 @@ const change_case_1 = require("change-case");
42
52
  const Enums_1 = require("../Enums");
43
53
  const node_cache_1 = __importDefault(require("node-cache"));
44
54
  const Services_1 = require("../Services");
55
+ const LimitService_1 = require("../Services/LimitService");
45
56
  const cache = new node_cache_1.default();
46
57
  const DATA_TYPE_MAP = [
47
58
  {
@@ -74,10 +85,15 @@ const DATA_TYPE_MAP = [
74
85
  "smallint",
75
86
  "mediumint",
76
87
  "int",
88
+ "int unsigned",
89
+ "integer unsigned",
77
90
  "integer",
78
91
  "bigint",
92
+ "bigint unsigned",
79
93
  "float",
94
+ "float unsigned",
80
95
  "double",
96
+ "double unsigned",
81
97
  "decimal",
82
98
  "numeric",
83
99
  ],
@@ -324,7 +340,7 @@ const toRequestBody = (endpoint) => {
324
340
  required: true,
325
341
  };
326
342
  };
327
- const toRequestParameters = (endpoint) => {
343
+ const toRequestParameters = (endpoint, modelService) => {
328
344
  const parameters = [
329
345
  {
330
346
  in: "header",
@@ -454,16 +470,6 @@ const toRequestParameters = (endpoint) => {
454
470
  type: "string",
455
471
  },
456
472
  },
457
- {
458
- name: "trashed",
459
- in: "query",
460
- description: "List of deleted data with soft-delete",
461
- required: false,
462
- schema: {
463
- type: "integer",
464
- default: 0,
465
- },
466
- },
467
473
  {
468
474
  name: "q",
469
475
  in: "query",
@@ -474,6 +480,19 @@ const toRequestParameters = (endpoint) => {
474
480
  },
475
481
  },
476
482
  ]);
483
+ if (modelService.instance.deletedAtColumn &&
484
+ (0, LimitService_1.isQueryFeatureEnabled)(modelService, Enums_1.QueryFeature.Trashed)) {
485
+ parameters.push({
486
+ name: "trashed",
487
+ in: "query",
488
+ description: "List of deleted data with soft-delete",
489
+ required: false,
490
+ schema: {
491
+ type: "integer",
492
+ default: 0,
493
+ },
494
+ });
495
+ }
477
496
  }
478
497
  return parameters;
479
498
  };
@@ -560,18 +579,20 @@ const generateDocumentation = () => __awaiter(void 0, void 0, void 0, function*
560
579
  };
561
580
  }
562
581
  }
582
+ const modelPatterns = {};
563
583
  const paths = {};
564
584
  for (const endpoint of docs.get()) {
565
585
  if (paths[endpoint.url] === undefined) {
566
586
  paths[endpoint.url] = {};
567
587
  }
588
+ modelPatterns[endpoint.url] = endpoint.model;
568
589
  const path = {
569
590
  tags: [endpoint.model],
570
591
  summary: toEndpointSummary(endpoint),
571
592
  description: toEndpointDescription(endpoint),
572
593
  operationId: `${endpoint.handler}${endpoint.model}`,
573
594
  responses: toEndpointResponse(endpoint),
574
- parameters: toRequestParameters(endpoint),
595
+ parameters: toRequestParameters(endpoint, endpoint.modelService),
575
596
  };
576
597
  const requestBody = toRequestBody(endpoint);
577
598
  if (requestBody) {
@@ -579,12 +600,19 @@ const generateDocumentation = () => __awaiter(void 0, void 0, void 0, function*
579
600
  }
580
601
  paths[endpoint.url][endpoint.method.toLowerCase()] = path;
581
602
  }
603
+ const modelPatternsKeys = Object.keys(modelPatterns);
582
604
  // Added custom endpoint
583
605
  for (const custom of docs.getCustoms()) {
584
606
  if (paths[custom.url] === undefined) {
585
607
  paths[custom.url] = {};
586
608
  }
609
+ const samePattern = modelPatternsKeys.find((key) => custom.url.startsWith(key));
610
+ const tags = [];
611
+ if (samePattern) {
612
+ tags.push(modelPatterns[samePattern]);
613
+ }
587
614
  paths[custom.url][custom.method.toLowerCase()] = {
615
+ tags,
588
616
  description: "Custom endpoint",
589
617
  };
590
618
  }
@@ -296,6 +296,58 @@ export interface IAfterShowContext extends IContext {
296
296
  conditions: IQuery;
297
297
  item: any;
298
298
  }
299
+ export interface IBeforeInsertEventContext extends Omit<IBeforeInsertContext, "res"> {
300
+ }
301
+ export interface IBeforeUpdateQueryEventContext extends Omit<IBeforeUpdateQueryContext, "res"> {
302
+ }
303
+ export interface IBeforePatchQueryEventContext extends Omit<IBeforePatchQueryContext, "res"> {
304
+ }
305
+ export interface IBeforeUpdateEventContext extends Omit<IBeforeUpdateContext, "res"> {
306
+ }
307
+ export interface IBeforePatchEventContext extends Omit<IBeforePatchContext, "res"> {
308
+ }
309
+ export interface IBeforeDeleteQueryEventContext extends Omit<IBeforeDeleteQueryContext, "res"> {
310
+ }
311
+ export interface IBeforeDeleteEventContext extends Omit<IBeforeDeleteContext, "res"> {
312
+ }
313
+ export interface IBeforeForceDeleteQueryEventContext extends Omit<IBeforeForceDeleteQueryContext, "res"> {
314
+ }
315
+ export interface IBeforeForceDeleteEventContext extends Omit<IBeforeForceDeleteContext, "res"> {
316
+ }
317
+ export interface IBeforePaginateEventContext extends Omit<IBeforePaginateContext, "res"> {
318
+ }
319
+ export interface IBeforeSearchEventContext extends Omit<IBeforeSearchContext, "res"> {
320
+ }
321
+ export interface IBeforeAllEventContext extends Omit<IBeforeAllContext, "res"> {
322
+ }
323
+ export interface IBeforeShowEventContext extends Omit<IBeforeShowContext, "res"> {
324
+ }
325
+ export interface IAfterInsertEventContext extends Omit<IAfterInsertContext, "res"> {
326
+ }
327
+ export interface IAfterUpdateQueryEventContext extends Omit<IAfterUpdateQueryContext, "res"> {
328
+ }
329
+ export interface IAfterUpdateEventContext extends Omit<IAfterUpdateContext, "res"> {
330
+ }
331
+ export interface IAfterPatchQueryEventContext extends Omit<IAfterPatchQueryContext, "res"> {
332
+ }
333
+ export interface IAfterPatchEventContext extends Omit<IAfterPatchContext, "res"> {
334
+ }
335
+ export interface IAfterDeleteQueryEventContext extends Omit<IAfterDeleteQueryContext, "res"> {
336
+ }
337
+ export interface IAfterDeleteEventContext extends Omit<IAfterDeleteContext, "res"> {
338
+ }
339
+ export interface IAfterForceDeleteQueryEventContext extends Omit<IAfterForceDeleteQueryContext, "res"> {
340
+ }
341
+ export interface IAfterForceDeleteEventContext extends Omit<IAfterForceDeleteContext, "res"> {
342
+ }
343
+ export interface IAfterPaginateEventContext extends Omit<IAfterPaginateContext, "res"> {
344
+ }
345
+ export interface IAfterAllEventContext extends Omit<IAfterAllContext, "res"> {
346
+ }
347
+ export interface IAfterSearchEventContext extends Omit<IAfterSearchContext, "res"> {
348
+ }
349
+ export interface IAfterShowEventContext extends Omit<IAfterShowContext, "res"> {
350
+ }
299
351
  export interface IRouteDocumentation {
300
352
  version: string;
301
353
  handler: string;
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -20,4 +20,5 @@ export declare const allow: (feature: QueryFeature, keys?: string[]) => IQueryLi
20
20
  * deny(QueryFeature.WhereLike)
21
21
  */
22
22
  export declare const deny: (feature: QueryFeature, keys?: string[]) => IQueryLimitConfig[];
23
+ export declare const isQueryFeatureEnabled: (model: IModelService, feature: QueryFeature, key?: string | null) => boolean;
23
24
  export declare const valideteQueryFeature: (model: IModelService, feature: QueryFeature, key?: string | null, errorDescription?: string) => void;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.valideteQueryFeature = exports.deny = exports.allow = void 0;
6
+ exports.valideteQueryFeature = exports.isQueryFeatureEnabled = exports.deny = exports.allow = void 0;
7
7
  const Enums_1 = require("../Enums");
8
8
  const ApiError_1 = __importDefault(require("../Exceptions/ApiError"));
9
9
  const QueryFeatureMap = {
@@ -116,25 +116,32 @@ const deny = (feature, keys = []) => {
116
116
  return generatePermission(Enums_1.QueryFeatureType.Deny, feature, keys);
117
117
  };
118
118
  exports.deny = deny;
119
- const valideteQueryFeature = (model, feature, key = null, errorDescription) => {
120
- const errorDetail = errorDescription ? ` (${errorDescription})` : "";
119
+ const isQueryFeatureEnabled = (model, feature, key = null) => {
121
120
  const rules = model.queryLimits.filter((limit) => limit.feature === feature && limit.key === null);
122
121
  if (key) {
123
122
  const keyRules = model.queryLimits.filter((limit) => limit.feature === feature && limit.key === key);
124
123
  if (keyRules.length > 0) {
125
124
  const lastKeyRule = keyRules[keyRules.length - 1];
126
125
  if ((lastKeyRule === null || lastKeyRule === void 0 ? void 0 : lastKeyRule.type) === Enums_1.QueryFeatureType.Deny) {
127
- throw new ApiError_1.default(`[ERR-1] Unsupported query feature${errorDetail}: ${feature.toString()} [${key}]`);
126
+ return false;
128
127
  }
129
- return;
128
+ return true;
130
129
  }
131
130
  }
132
131
  if (rules.length === 0) {
133
- throw new ApiError_1.default(`[ERR-2] Unsupported query feature${errorDetail}: ${feature.toString()}`);
132
+ return false;
134
133
  }
135
134
  const lastRule = rules[rules.length - 1];
136
135
  if ((lastRule === null || lastRule === void 0 ? void 0 : lastRule.type) === Enums_1.QueryFeatureType.Deny) {
137
- throw new ApiError_1.default(`[ERR-3] Unsupported query feature${errorDetail}: ${feature.toString()}`);
136
+ return false;
137
+ }
138
+ return true;
139
+ };
140
+ exports.isQueryFeatureEnabled = isQueryFeatureEnabled;
141
+ const valideteQueryFeature = (model, feature, key = null, errorDescription) => {
142
+ const errorDetail = errorDescription ? ` (${errorDescription})` : "";
143
+ if ((0, exports.isQueryFeatureEnabled)(model, feature, key) === false) {
144
+ throw new ApiError_1.default(`[ERR-1] Unsupported query feature${errorDetail}: ${feature.toString()} [${key}]`);
138
145
  }
139
146
  };
140
147
  exports.valideteQueryFeature = valideteQueryFeature;
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
37
  return new (P || (P = Promise))(function (resolve, reject) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "axe-api",
3
- "version": "1.5.1",
3
+ "version": "1.6.0",
4
4
  "description": "AXE API is a simple tool to create Rest APIs quickly.",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
package/readme.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <h1 align="center">
2
2
  <br>
3
3
  <a href="https://axe-api.com/">
4
- <img src="https://axe-api.com/axe.png" alt="Markdownify" width="200">
4
+ <img src="https://axe-api.com/viking.png" alt="Markdownify" width="200">
5
5
  </a>
6
6
  <br>
7
7
  Axe API