@autofleet/sheilta 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/formatter/index.d.ts +10 -4
- package/lib/formatter/index.js +16 -2
- package/lib/formatter/index.test.js +8 -5
- package/lib/middleware/index.js +13 -4
- package/lib/utils.d.ts +6 -0
- package/lib/utils.js +8 -1
- package/lib/validations/index.d.ts +3 -1
- package/lib/validations/index.js +17 -6
- package/package.json +1 -1
package/lib/formatter/index.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
declare type OrderItem = string | [string, string];
|
|
2
2
|
declare type SequelizeOrder = string | OrderItem[];
|
|
3
|
-
|
|
4
|
-
order
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
declare const formatPayload: ({ order, page, perPage, }: {
|
|
4
|
+
order: any;
|
|
5
|
+
page?: number;
|
|
6
|
+
perPage?: number;
|
|
7
|
+
}) => {
|
|
8
|
+
order: SequelizeOrder[];
|
|
9
|
+
page: any;
|
|
10
|
+
perPage: any;
|
|
11
|
+
};
|
|
12
|
+
export default formatPayload;
|
package/lib/formatter/index.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.formatOrder = void 0;
|
|
4
3
|
const utils_1 = require("../utils");
|
|
5
4
|
const DESCENDING_KEY = 'DESC';
|
|
6
|
-
|
|
5
|
+
const formatOrder = ({ order = [], }) => (order.length === 0 ? undefined :
|
|
7
6
|
order.map((o) => {
|
|
8
7
|
const isOrderDescOrder = utils_1.isOrderDesc(o);
|
|
9
8
|
let column = o;
|
|
@@ -13,3 +12,18 @@ exports.formatOrder = ({ order = [], }) => (order.length === 0 ? undefined :
|
|
|
13
12
|
}
|
|
14
13
|
return [column];
|
|
15
14
|
}));
|
|
15
|
+
const formatPage = page => page || utils_1.PAGE_DEFAULT;
|
|
16
|
+
const formatPerPage = perPage => perPage || utils_1.PER_PAGE_DEFAULT;
|
|
17
|
+
const formatPayload = ({ order, page = utils_1.PAGE_DEFAULT, perPage = utils_1.PER_PAGE_DEFAULT, }) => {
|
|
18
|
+
const formattedOrder = formatOrder({
|
|
19
|
+
order,
|
|
20
|
+
});
|
|
21
|
+
const formattedPage = formatPage(page);
|
|
22
|
+
const formattedPerPage = formatPerPage(perPage);
|
|
23
|
+
return {
|
|
24
|
+
order: formattedOrder,
|
|
25
|
+
page: formattedPage,
|
|
26
|
+
perPage: formattedPerPage,
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
exports.default = formatPayload;
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const _1 = require(".");
|
|
6
|
+
const _1 = __importDefault(require("."));
|
|
4
7
|
describe('formatting test', () => {
|
|
5
8
|
it('check order formatting', () => {
|
|
6
|
-
const
|
|
9
|
+
const { order } = _1.default({
|
|
7
10
|
order: ['startTime', '-endTime'],
|
|
8
11
|
});
|
|
9
|
-
expect(JSON.stringify(
|
|
12
|
+
expect(JSON.stringify(order)).toBe(JSON.stringify([['startTime'], ['endTime', 'DESC']]));
|
|
10
13
|
});
|
|
11
14
|
it('check order formatting', () => {
|
|
12
|
-
const
|
|
15
|
+
const { order } = _1.default({
|
|
13
16
|
order: ['startTime', 'endTime'],
|
|
14
17
|
});
|
|
15
|
-
expect(JSON.stringify(
|
|
18
|
+
expect(JSON.stringify(order)).toBe(JSON.stringify([['startTime'], ['endTime']]));
|
|
16
19
|
});
|
|
17
20
|
});
|
package/lib/middleware/index.js
CHANGED
|
@@ -8,18 +8,23 @@ 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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
15
|
exports.queryFormatMiddleware = exports.queryValidationMiddleware = void 0;
|
|
13
16
|
const errors_1 = require("@autofleet/errors");
|
|
14
|
-
const formatter_1 = require("../formatter");
|
|
17
|
+
const formatter_1 = __importDefault(require("../formatter"));
|
|
15
18
|
const validations_1 = require("../validations");
|
|
16
19
|
exports.queryValidationMiddleware = model => (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
-
const { query, attributes, order, } = req.body;
|
|
20
|
+
const { query, attributes, order, page, perPage, } = req.body;
|
|
18
21
|
try {
|
|
19
22
|
validations_1.validatePayload({
|
|
20
23
|
query,
|
|
21
24
|
attributes,
|
|
22
25
|
order,
|
|
26
|
+
page,
|
|
27
|
+
perPage,
|
|
23
28
|
}, model);
|
|
24
29
|
return next();
|
|
25
30
|
}
|
|
@@ -36,10 +41,14 @@ exports.queryValidationMiddleware = model => (req, res, next) => __awaiter(void
|
|
|
36
41
|
}
|
|
37
42
|
});
|
|
38
43
|
exports.queryFormatMiddleware = () => (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
39
|
-
const { order, } = req.body;
|
|
40
|
-
const formattedOrder = formatter_1.
|
|
44
|
+
const { order, page, perPage, } = req.body;
|
|
45
|
+
const { order: formattedOrder, page: formattedPage, perPage: formattedPerPage, } = formatter_1.default({
|
|
41
46
|
order,
|
|
47
|
+
page,
|
|
48
|
+
perPage,
|
|
42
49
|
});
|
|
43
50
|
req.body.order = formattedOrder;
|
|
51
|
+
req.body.page = formattedPage;
|
|
52
|
+
req.body.perPage = formattedPerPage;
|
|
44
53
|
return next();
|
|
45
54
|
});
|
package/lib/utils.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export declare const ORDER_PREFIX = "-";
|
|
2
|
+
export declare const PER_PAGE_DEFAULT = 20;
|
|
3
|
+
export declare const PAGE_DEFAULT = 1;
|
|
4
|
+
export declare const PER_PAGE_MAX_LIMIT = 100;
|
|
5
|
+
export declare const PER_PAGE_MIN_LIMIT = 1;
|
|
6
|
+
export declare const PAGE_MIN = 1;
|
|
2
7
|
export declare const extractAttributeNameFromOrder: (order: any) => string;
|
|
3
8
|
export declare const isOrderDesc: (order: any) => boolean;
|
|
9
|
+
export declare const throwBadRequestError: (message: string) => never;
|
package/lib/utils.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isOrderDesc = exports.extractAttributeNameFromOrder = exports.ORDER_PREFIX = void 0;
|
|
3
|
+
exports.throwBadRequestError = exports.isOrderDesc = exports.extractAttributeNameFromOrder = exports.PAGE_MIN = exports.PER_PAGE_MIN_LIMIT = exports.PER_PAGE_MAX_LIMIT = exports.PAGE_DEFAULT = exports.PER_PAGE_DEFAULT = exports.ORDER_PREFIX = void 0;
|
|
4
|
+
const errors_1 = require("@autofleet/errors");
|
|
4
5
|
exports.ORDER_PREFIX = '-';
|
|
6
|
+
exports.PER_PAGE_DEFAULT = 20;
|
|
7
|
+
exports.PAGE_DEFAULT = 1;
|
|
8
|
+
exports.PER_PAGE_MAX_LIMIT = 100;
|
|
9
|
+
exports.PER_PAGE_MIN_LIMIT = 1;
|
|
10
|
+
exports.PAGE_MIN = 1;
|
|
5
11
|
exports.extractAttributeNameFromOrder = (order) => order.split(exports.ORDER_PREFIX)[1];
|
|
6
12
|
exports.isOrderDesc = (order) => order.includes(exports.ORDER_PREFIX);
|
|
13
|
+
exports.throwBadRequestError = (message) => { throw new errors_1.BadRequest(message, null); };
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export declare const validatePayload: ({ query, order, attributes, }: {
|
|
1
|
+
export declare const validatePayload: ({ query, order, attributes, page, perPage, }: {
|
|
2
2
|
query?: {};
|
|
3
3
|
order?: any[];
|
|
4
4
|
attributes?: any[];
|
|
5
|
+
page?: number;
|
|
6
|
+
perPage?: number;
|
|
5
7
|
}, model: any) => boolean;
|
package/lib/validations/index.js
CHANGED
|
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.validatePayload = void 0;
|
|
7
|
-
const errors_1 = require("@autofleet/errors");
|
|
8
7
|
const lodash_1 = __importDefault(require("lodash"));
|
|
9
8
|
const utils_1 = require("../utils");
|
|
10
9
|
const operators_1 = require("../operators");
|
|
@@ -13,18 +12,18 @@ const validateQueryAttribute = (attribute, modelAttributes) => modelAttributes.i
|
|
|
13
12
|
const validateSingleOrder = (currentOrder, rawAttributes) => {
|
|
14
13
|
const isOrderDescOrder = utils_1.isOrderDesc(currentOrder);
|
|
15
14
|
if (isOrderDescOrder && currentOrder[0] !== utils_1.ORDER_PREFIX) {
|
|
16
|
-
|
|
15
|
+
utils_1.throwBadRequestError(`${utils_1.ORDER_PREFIX} must be only at the beginning of the word`);
|
|
17
16
|
}
|
|
18
17
|
const formattedOrderString = isOrderDescOrder ?
|
|
19
18
|
utils_1.extractAttributeNameFromOrder(currentOrder) :
|
|
20
19
|
currentOrder;
|
|
21
20
|
if (!rawAttributes.includes(formattedOrderString)) {
|
|
22
|
-
|
|
21
|
+
utils_1.throwBadRequestError(`${currentOrder} is invalid`);
|
|
23
22
|
}
|
|
24
23
|
};
|
|
25
24
|
const validateSingleAttribute = (currentAttribute, rawAttributes) => {
|
|
26
25
|
if (!rawAttributes.includes(currentAttribute)) {
|
|
27
|
-
|
|
26
|
+
utils_1.throwBadRequestError(`${currentAttribute} is invalid`);
|
|
28
27
|
}
|
|
29
28
|
};
|
|
30
29
|
const validateOrderAttributes = (order, rawAttributes) => {
|
|
@@ -48,11 +47,19 @@ const validateQueryPayload = (query, rawAttributes) => {
|
|
|
48
47
|
}
|
|
49
48
|
}
|
|
50
49
|
else {
|
|
51
|
-
|
|
50
|
+
utils_1.throwBadRequestError(`invalid key: ${key}`);
|
|
52
51
|
}
|
|
53
52
|
});
|
|
54
53
|
};
|
|
55
|
-
|
|
54
|
+
const validatePagination = ({ page, perPage, }) => {
|
|
55
|
+
if (page < utils_1.PAGE_MIN) {
|
|
56
|
+
utils_1.throwBadRequestError('Page must be greater than 0');
|
|
57
|
+
}
|
|
58
|
+
if (perPage >= utils_1.PER_PAGE_MAX_LIMIT || perPage <= utils_1.PER_PAGE_MIN_LIMIT) {
|
|
59
|
+
utils_1.throwBadRequestError(`PerPage must be between ${utils_1.PER_PAGE_MIN_LIMIT} to ${utils_1.PER_PAGE_MAX_LIMIT}`);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
exports.validatePayload = ({ query = {}, order = [], attributes = [], page = utils_1.PAGE_DEFAULT, perPage = utils_1.PER_PAGE_DEFAULT, }, model) => {
|
|
56
63
|
const rawAttributes = Object.keys(model.rawAttributes);
|
|
57
64
|
if (!attributes || attributes.length === 0) {
|
|
58
65
|
// eslint-disable-next-line no-param-reassign
|
|
@@ -63,5 +70,9 @@ exports.validatePayload = ({ query = {}, order = [], attributes = [], }, model)
|
|
|
63
70
|
}
|
|
64
71
|
validateOrderAttributes(order, rawAttributes);
|
|
65
72
|
validateQueryPayload(query, rawAttributes);
|
|
73
|
+
validatePagination({
|
|
74
|
+
page,
|
|
75
|
+
perPage,
|
|
76
|
+
});
|
|
66
77
|
return true;
|
|
67
78
|
};
|