@strapi/utils 4.11.3 → 4.12.0-beta.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.
- package/dist/async.d.ts +10 -0
- package/dist/async.js +33 -0
- package/dist/async.js.map +1 -0
- package/dist/code-generator.d.ts +2 -0
- package/dist/code-generator.js +11 -0
- package/dist/code-generator.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.js +79 -0
- package/dist/config.js.map +1 -0
- package/dist/content-types.d.ts +60 -0
- package/dist/content-types.js +151 -0
- package/dist/content-types.js.map +1 -0
- package/dist/convert-query-params.d.ts +75 -0
- package/dist/convert-query-params.js +476 -0
- package/dist/convert-query-params.js.map +1 -0
- package/dist/env-helper.d.ts +18 -0
- package/dist/env-helper.js +84 -0
- package/dist/env-helper.js.map +1 -0
- package/dist/errors.d.ts +37 -0
- package/dist/errors.js +100 -0
- package/dist/errors.js.map +1 -0
- package/dist/file.d.ts +16 -0
- package/dist/file.js +54 -0
- package/dist/file.js.map +1 -0
- package/dist/format-yup-error.d.ts +10 -0
- package/dist/format-yup-error.js +17 -0
- package/dist/format-yup-error.js.map +1 -0
- package/dist/hooks.d.ts +63 -0
- package/dist/hooks.js +89 -0
- package/dist/hooks.js.map +1 -0
- package/dist/import-default.d.ts +1 -0
- package/dist/import-default.js +9 -0
- package/dist/import-default.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.js +99 -0
- package/dist/index.js.map +1 -0
- package/dist/object-formatting.d.ts +3 -0
- package/dist/object-formatting.js +14 -0
- package/dist/object-formatting.js.map +1 -0
- package/dist/operators.d.ts +2 -0
- package/dist/operators.js +70 -0
- package/dist/operators.js.map +1 -0
- package/dist/pagination.d.ts +14 -0
- package/dist/pagination.js +80 -0
- package/dist/pagination.js.map +1 -0
- package/dist/parse-multipart.d.ts +8 -0
- package/dist/parse-multipart.js +36 -0
- package/dist/parse-multipart.js.map +1 -0
- package/dist/parse-type.d.ts +21 -0
- package/dist/parse-type.js +108 -0
- package/dist/parse-type.js.map +1 -0
- package/dist/policy.d.ts +41 -0
- package/dist/policy.js +109 -0
- package/dist/policy.js.map +1 -0
- package/dist/print-value.d.ts +2 -0
- package/dist/print-value.js +50 -0
- package/dist/print-value.js.map +1 -0
- package/dist/provider-factory.d.ts +29 -0
- package/dist/provider-factory.js +80 -0
- package/dist/provider-factory.js.map +1 -0
- package/dist/relations.d.ts +10 -0
- package/dist/relations.js +23 -0
- package/dist/relations.js.map +1 -0
- package/dist/sanitize/index.d.ts +23 -0
- package/dist/sanitize/index.js +135 -0
- package/dist/sanitize/index.js.map +1 -0
- package/dist/sanitize/sanitizers.d.ts +10 -0
- package/dist/sanitize/sanitizers.js +114 -0
- package/dist/sanitize/sanitizers.js.map +1 -0
- package/dist/sanitize/visitors/allowed-fields.d.ts +3 -0
- package/{lib → dist}/sanitize/visitors/allowed-fields.js +17 -32
- package/dist/sanitize/visitors/allowed-fields.js.map +1 -0
- package/dist/sanitize/visitors/index.d.ts +7 -0
- package/dist/sanitize/visitors/index.js +21 -0
- package/dist/sanitize/visitors/index.js.map +1 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.d.ts +3 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.js +10 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.js.map +1 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.d.ts +3 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.js +10 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.js.map +1 -0
- package/dist/sanitize/visitors/remove-password.d.ts +3 -0
- package/dist/sanitize/visitors/remove-password.js +9 -0
- package/dist/sanitize/visitors/remove-password.js.map +1 -0
- package/dist/sanitize/visitors/remove-private.d.ts +3 -0
- package/dist/sanitize/visitors/remove-private.js +14 -0
- package/dist/sanitize/visitors/remove-private.js.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-relations.d.ts +3 -0
- package/dist/sanitize/visitors/remove-restricted-relations.js +88 -0
- package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -0
- package/dist/sanitize/visitors/restricted-fields.d.ts +3 -0
- package/dist/sanitize/visitors/restricted-fields.js +25 -0
- package/dist/sanitize/visitors/restricted-fields.js.map +1 -0
- package/dist/set-creator-fields.d.ts +9 -0
- package/dist/set-creator-fields.js +39 -0
- package/dist/set-creator-fields.js.map +1 -0
- package/dist/string-formatting.d.ts +15 -0
- package/dist/string-formatting.js +85 -0
- package/dist/string-formatting.js.map +1 -0
- package/dist/template-configuration.d.ts +5 -0
- package/dist/template-configuration.js +30 -0
- package/dist/template-configuration.js.map +1 -0
- package/dist/template.d.ts +9 -0
- package/dist/template.js +20 -0
- package/dist/template.js.map +1 -0
- package/dist/traverse/factory.d.ts +78 -0
- package/dist/traverse/factory.js +127 -0
- package/dist/traverse/factory.js.map +1 -0
- package/dist/traverse/index.d.ts +5 -0
- package/dist/traverse/index.js +17 -0
- package/dist/traverse/index.js.map +1 -0
- package/dist/traverse/query-fields.d.ts +3 -0
- package/dist/traverse/query-fields.js +35 -0
- package/dist/traverse/query-fields.js.map +1 -0
- package/dist/traverse/query-filters.d.ts +3 -0
- package/dist/traverse/query-filters.js +75 -0
- package/dist/traverse/query-filters.js.map +1 -0
- package/dist/traverse/query-populate.d.ts +3 -0
- package/dist/traverse/query-populate.js +144 -0
- package/dist/traverse/query-populate.js.map +1 -0
- package/dist/traverse/query-sort.d.ts +3 -0
- package/dist/traverse/query-sort.js +116 -0
- package/dist/traverse/query-sort.js.map +1 -0
- package/dist/traverse-entity.d.ts +31 -0
- package/dist/traverse-entity.js +134 -0
- package/dist/traverse-entity.js.map +1 -0
- package/dist/types.d.ts +65 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/validators.d.ts +13 -0
- package/dist/validators.js +120 -0
- package/dist/validators.js.map +1 -0
- package/dist/webhook.d.ts +5 -0
- package/dist/webhook.js +27 -0
- package/dist/webhook.js.map +1 -0
- package/package.json +19 -4
- package/.eslintignore +0 -3
- package/.eslintrc.js +0 -4
- package/index.d.ts +0 -5
- package/lib/async.d.ts +0 -21
- package/lib/async.js +0 -45
- package/lib/build-query.js +0 -208
- package/lib/code-generator.js +0 -13
- package/lib/config.js +0 -88
- package/lib/content-types.js +0 -196
- package/lib/convert-query-params.js +0 -586
- package/lib/env-helper.js +0 -98
- package/lib/errors.js +0 -113
- package/lib/file.js +0 -60
- package/lib/format-yup-error.js +0 -20
- package/lib/hooks.js +0 -110
- package/lib/import-default.js +0 -10
- package/lib/index.js +0 -99
- package/lib/object-formatting.js +0 -15
- package/lib/operators.js +0 -74
- package/lib/pagination.js +0 -99
- package/lib/parse-multipart.js +0 -44
- package/lib/parse-type.js +0 -100
- package/lib/policy.js +0 -129
- package/lib/print-value.js +0 -52
- package/lib/provider-factory.js +0 -116
- package/lib/relations.js +0 -31
- package/lib/sanitize/index.js +0 -143
- package/lib/sanitize/sanitizers.js +0 -163
- package/lib/sanitize/visitors/index.js +0 -11
- package/lib/sanitize/visitors/remove-dynamic-zones.js +0 -9
- package/lib/sanitize/visitors/remove-morph-to-relations.js +0 -9
- package/lib/sanitize/visitors/remove-password.js +0 -7
- package/lib/sanitize/visitors/remove-private.js +0 -15
- package/lib/sanitize/visitors/remove-restricted-relations.js +0 -81
- package/lib/sanitize/visitors/restricted-fields.js +0 -32
- package/lib/set-creator-fields.js +0 -17
- package/lib/string-formatting.js +0 -79
- package/lib/template-configuration.js +0 -32
- package/lib/template.js +0 -28
- package/lib/traverse/factory.js +0 -157
- package/lib/traverse/index.js +0 -16
- package/lib/traverse/query-fields.js +0 -39
- package/lib/traverse/query-filters.js +0 -97
- package/lib/traverse/query-populate.js +0 -191
- package/lib/traverse/query-sort.js +0 -171
- package/lib/traverse-entity.js +0 -166
- package/lib/validators.js +0 -120
- package/lib/webhook.js +0 -30
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface PaginationArgs {
|
|
2
|
+
page: number;
|
|
3
|
+
pageSize: number;
|
|
4
|
+
start: number;
|
|
5
|
+
limit: number;
|
|
6
|
+
}
|
|
7
|
+
declare const withDefaultPagination: (args: Partial<PaginationArgs>, { defaults, maxLimit }?: {
|
|
8
|
+
defaults?: {} | undefined;
|
|
9
|
+
maxLimit?: number | undefined;
|
|
10
|
+
}) => Partial<PaginationArgs> & {
|
|
11
|
+
start: number;
|
|
12
|
+
limit: number;
|
|
13
|
+
};
|
|
14
|
+
export { withDefaultPagination };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withDefaultPagination = void 0;
|
|
4
|
+
const fp_1 = require("lodash/fp");
|
|
5
|
+
const errors_1 = require("./errors");
|
|
6
|
+
const STRAPI_DEFAULTS = {
|
|
7
|
+
offset: {
|
|
8
|
+
start: 0,
|
|
9
|
+
limit: 10,
|
|
10
|
+
},
|
|
11
|
+
page: {
|
|
12
|
+
page: 1,
|
|
13
|
+
pageSize: 10,
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
const paginationAttributes = ['start', 'limit', 'page', 'pageSize'];
|
|
17
|
+
const withMaxLimit = (limit, maxLimit = -1) => {
|
|
18
|
+
if (maxLimit === -1 || limit < maxLimit) {
|
|
19
|
+
return limit;
|
|
20
|
+
}
|
|
21
|
+
return maxLimit;
|
|
22
|
+
};
|
|
23
|
+
// Ensure minimum page & pageSize values (page >= 1, pageSize >= 0, start >= 0, limit >= 0)
|
|
24
|
+
const ensureMinValues = ({ start, limit }) => ({
|
|
25
|
+
start: Math.max(start, 0),
|
|
26
|
+
limit: limit === -1 ? limit : Math.max(limit, 1),
|
|
27
|
+
});
|
|
28
|
+
const ensureMaxValues = (maxLimit = -1) => ({ start, limit }) => ({
|
|
29
|
+
start,
|
|
30
|
+
limit: withMaxLimit(limit, maxLimit),
|
|
31
|
+
});
|
|
32
|
+
// Apply maxLimit as the limit when limit is -1
|
|
33
|
+
const withNoLimit = (pagination, maxLimit = -1) => ({
|
|
34
|
+
...pagination,
|
|
35
|
+
limit: pagination.limit === -1 ? maxLimit : pagination.limit,
|
|
36
|
+
});
|
|
37
|
+
const withDefaultPagination = (args, { defaults = {}, maxLimit = -1 } = {}) => {
|
|
38
|
+
const defaultValues = (0, fp_1.merge)(STRAPI_DEFAULTS, defaults);
|
|
39
|
+
const usePagePagination = !(0, fp_1.isNil)(args.page) || !(0, fp_1.isNil)(args.pageSize);
|
|
40
|
+
const useOffsetPagination = !(0, fp_1.isNil)(args.start) || !(0, fp_1.isNil)(args.limit);
|
|
41
|
+
const ensureValidValues = (0, fp_1.pipe)(ensureMinValues, ensureMaxValues(maxLimit));
|
|
42
|
+
// If there is no pagination attribute, don't modify the payload
|
|
43
|
+
if (!usePagePagination && !useOffsetPagination) {
|
|
44
|
+
return (0, fp_1.merge)(args, ensureValidValues(defaultValues.offset));
|
|
45
|
+
}
|
|
46
|
+
// If there is page & offset pagination attributes, throw an error
|
|
47
|
+
if (usePagePagination && useOffsetPagination) {
|
|
48
|
+
throw new errors_1.PaginationError('Cannot use both page & offset pagination in the same query');
|
|
49
|
+
}
|
|
50
|
+
const pagination = {
|
|
51
|
+
start: 0,
|
|
52
|
+
limit: 0,
|
|
53
|
+
};
|
|
54
|
+
// Start / Limit
|
|
55
|
+
if (useOffsetPagination) {
|
|
56
|
+
const { start, limit } = (0, fp_1.merge)(defaultValues.offset, args);
|
|
57
|
+
Object.assign(pagination, { start, limit });
|
|
58
|
+
}
|
|
59
|
+
// Page / PageSize
|
|
60
|
+
if (usePagePagination) {
|
|
61
|
+
const { page, pageSize } = (0, fp_1.merge)(defaultValues.page, {
|
|
62
|
+
...args,
|
|
63
|
+
pageSize: Math.max(1, args.pageSize ?? 0),
|
|
64
|
+
});
|
|
65
|
+
Object.assign(pagination, {
|
|
66
|
+
start: (page - 1) * pageSize,
|
|
67
|
+
limit: pageSize,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// Handle -1 limit
|
|
71
|
+
Object.assign(pagination, withNoLimit(pagination, maxLimit));
|
|
72
|
+
const replacePaginationAttributes = (0, fp_1.pipe)(
|
|
73
|
+
// Remove pagination attributes
|
|
74
|
+
(0, fp_1.omit)(paginationAttributes),
|
|
75
|
+
// Merge the object with the new pagination + ensure minimum & maximum values
|
|
76
|
+
(0, fp_1.merge)(ensureValidValues(pagination)));
|
|
77
|
+
return replacePaginationAttributes(args);
|
|
78
|
+
};
|
|
79
|
+
exports.withDefaultPagination = withDefaultPagination;
|
|
80
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
6
|
+
module.exports = (ctx) => {
|
|
7
|
+
if (!ctx.is('multipart')) {
|
|
8
|
+
return { data: ctx.request.body, files: {} };
|
|
9
|
+
}
|
|
10
|
+
const { body = {}, files = {} } = ctx.request;
|
|
11
|
+
if (!body.data) {
|
|
12
|
+
return ctx.badRequest(`When using multipart/form-data you need to provide your data in a JSON 'data' field.`);
|
|
13
|
+
}
|
|
14
|
+
let data;
|
|
15
|
+
try {
|
|
16
|
+
data = JSON.parse(body.data);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
return ctx.badRequest(`Invalid 'data' field. 'data' should be a valid JSON.`);
|
|
20
|
+
}
|
|
21
|
+
const filesToUpload = Object.keys(files).reduce((acc, key) => {
|
|
22
|
+
const fullPath = lodash_1.default.toPath(key);
|
|
23
|
+
if (fullPath.length <= 1 || fullPath[0] !== 'files') {
|
|
24
|
+
return ctx.badRequest(`When using multipart/form-data you need to provide your files by prefixing them with the 'files'.
|
|
25
|
+
For example, when a media file is named "avatar", make sure the form key name is "files.avatar"`);
|
|
26
|
+
}
|
|
27
|
+
const path = lodash_1.default.tail(fullPath);
|
|
28
|
+
acc[path.join('.')] = files[key];
|
|
29
|
+
return acc;
|
|
30
|
+
}, {});
|
|
31
|
+
return {
|
|
32
|
+
data,
|
|
33
|
+
files: filesToUpload,
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=parse-multipart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-multipart.js","sourceRoot":"","sources":["../src/parse-multipart.ts"],"names":[],"mappings":";;;;AAAA,oDAAuB;AAGvB,iBAAS,CAAC,GAAY,EAAE,EAAE;IACxB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;QACxB,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;KAC9C;IAED,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;IAE9C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACd,OAAO,GAAG,CAAC,UAAU,CACnB,sFAAsF,CACvF,CAAC;KACH;IAED,IAAI,IAAI,CAAC;IACT,IAAI;QACF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9B;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,GAAG,CAAC,UAAU,CAAC,sDAAsD,CAAC,CAAC;KAC/E;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3D,MAAM,QAAQ,GAAG,gBAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE/B,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;YACnD,OAAO,GAAG,CAAC,UAAU,CACnB;gGACwF,CACzF,CAAC;SACH;QAED,MAAM,IAAI,GAAG,gBAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAmC,CAAC,CAAC;IAExC,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,aAAa;KACrB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type TypeMap = {
|
|
2
|
+
boolean: boolean;
|
|
3
|
+
integer: number;
|
|
4
|
+
biginteger: number;
|
|
5
|
+
float: number;
|
|
6
|
+
decimal: number;
|
|
7
|
+
time: string;
|
|
8
|
+
date: string;
|
|
9
|
+
timestamp: Date;
|
|
10
|
+
datetime: Date;
|
|
11
|
+
};
|
|
12
|
+
export interface ParseTypeOptions<T extends keyof TypeMap> {
|
|
13
|
+
type: T;
|
|
14
|
+
value: unknown;
|
|
15
|
+
forceCast?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Cast basic values based on attribute type
|
|
19
|
+
*/
|
|
20
|
+
declare const parseType: <Type extends keyof TypeMap>(options: ParseTypeOptions<Type>) => TypeMap[Type];
|
|
21
|
+
export default parseType;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const _ = require("lodash");
|
|
4
|
+
const dates = require("date-fns");
|
|
5
|
+
const timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]{1,3})?$/;
|
|
6
|
+
const isDate = (v) => {
|
|
7
|
+
return dates.isDate(v);
|
|
8
|
+
};
|
|
9
|
+
const parseTime = (value) => {
|
|
10
|
+
if (isDate(value)) {
|
|
11
|
+
return dates.format(value, 'HH:mm:ss.SSS');
|
|
12
|
+
}
|
|
13
|
+
if (typeof value !== 'string') {
|
|
14
|
+
throw new Error(`Expected a string, got a ${typeof value}`);
|
|
15
|
+
}
|
|
16
|
+
const result = value.match(timeRegex);
|
|
17
|
+
if (result === null) {
|
|
18
|
+
throw new Error('Invalid time format, expected HH:mm:ss.SSS');
|
|
19
|
+
}
|
|
20
|
+
const [, hours, minutes, seconds, fraction = '.000'] = result;
|
|
21
|
+
const fractionPart = _.padEnd(fraction.slice(1), 3, '0');
|
|
22
|
+
return `${hours}:${minutes}:${seconds}.${fractionPart}`;
|
|
23
|
+
};
|
|
24
|
+
const parseDate = (value) => {
|
|
25
|
+
if (isDate(value)) {
|
|
26
|
+
return dates.format(value, 'yyyy-MM-dd');
|
|
27
|
+
}
|
|
28
|
+
if (typeof value !== 'string') {
|
|
29
|
+
throw new Error(`Expected a string, got a ${typeof value}`);
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const date = dates.parseISO(value);
|
|
33
|
+
if (dates.isValid(date))
|
|
34
|
+
return dates.format(date, 'yyyy-MM-dd');
|
|
35
|
+
throw new Error(`Invalid format, expected an ISO compatible date`);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
throw new Error(`Invalid format, expected an ISO compatible date`);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const parseDateTimeOrTimestamp = (value) => {
|
|
42
|
+
if (isDate(value)) {
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
if (typeof value !== 'string') {
|
|
46
|
+
throw new Error(`Expected a string, got a ${typeof value}`);
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const date = dates.parseISO(value);
|
|
50
|
+
if (dates.isValid(date))
|
|
51
|
+
return date;
|
|
52
|
+
const milliUnixDate = dates.parse(value, 'T', new Date());
|
|
53
|
+
if (dates.isValid(milliUnixDate))
|
|
54
|
+
return milliUnixDate;
|
|
55
|
+
throw new Error(`Invalid format, expected a timestamp or an ISO date`);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
throw new Error(`Invalid format, expected a timestamp or an ISO date`);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const parseBoolean = (value, options) => {
|
|
62
|
+
const { forceCast = false } = options;
|
|
63
|
+
if (typeof value === 'boolean') {
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
67
|
+
if (['true', 't', '1', 1].includes(value)) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
if (['false', 'f', '0', 0].includes(value)) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (forceCast) {
|
|
75
|
+
return Boolean(value);
|
|
76
|
+
}
|
|
77
|
+
throw new Error('Invalid boolean input. Expected "t","1","true","false","0","f"');
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Cast basic values based on attribute type
|
|
81
|
+
*/
|
|
82
|
+
const parseType = (options) => {
|
|
83
|
+
const { type, value, forceCast } = options;
|
|
84
|
+
switch (type) {
|
|
85
|
+
case 'boolean':
|
|
86
|
+
return parseBoolean(value, { forceCast });
|
|
87
|
+
case 'integer':
|
|
88
|
+
case 'biginteger':
|
|
89
|
+
case 'float':
|
|
90
|
+
case 'decimal': {
|
|
91
|
+
return _.toNumber(value);
|
|
92
|
+
}
|
|
93
|
+
case 'time': {
|
|
94
|
+
return parseTime(value);
|
|
95
|
+
}
|
|
96
|
+
case 'date': {
|
|
97
|
+
return parseDate(value);
|
|
98
|
+
}
|
|
99
|
+
case 'timestamp':
|
|
100
|
+
case 'datetime': {
|
|
101
|
+
return parseDateTimeOrTimestamp(value);
|
|
102
|
+
}
|
|
103
|
+
default:
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
exports.default = parseType;
|
|
108
|
+
//# sourceMappingURL=parse-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-type.js","sourceRoot":"","sources":["../src/parse-type.ts"],"names":[],"mappings":";;AAAA,4BAA6B;AAC7B,kCAAmC;AAEnC,MAAM,SAAS,GAAG,8DAA8D,CAAC;AAEjF,MAAM,MAAM,GAAG,CAAC,CAAU,EAAa,EAAE;IACvC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAU,EAAE;IAC3C,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;QACjB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;KAC5C;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,KAAK,EAAE,CAAC,CAAC;KAC7D;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEtC,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;KAC/D;IAED,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;IAC9D,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAEzD,OAAO,GAAG,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,EAAE;IACnC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;QACjB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;KAC1C;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,KAAK,EAAE,CAAC,CAAC;KAC7D;IAED,IAAI;QACF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAEjE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;KACpE;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;KACpE;AACH,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,KAAc,EAAE,EAAE;IAClD,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;QACjB,OAAO,KAAK,CAAC;KACd;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,KAAK,EAAE,CAAC,CAAC;KAC7D;IAED,IAAI;QACF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAErC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;YAAE,OAAO,aAAa,CAAC;QAEvD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;KACxE;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;KACxE;AACH,CAAC,CAAC;AAoBF,MAAM,YAAY,GAAG,CAAC,KAAc,EAAE,OAAgC,EAAW,EAAE;IACjF,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEtC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;QAC9B,OAAO,KAAK,CAAC;KACd;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC1D,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACzC,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC1C,OAAO,KAAK,CAAC;SACd;KACF;IAED,IAAI,SAAS,EAAE;QACb,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;KACvB;IAED,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;AACpF,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,SAAS,GAAG,CAA6B,OAA+B,EAAiB,EAAE;IAC/F,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAE3C,QAAQ,IAAI,EAAE;QACZ,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAkB,CAAC;QAC7D,KAAK,SAAS,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,OAAO,CAAC;QACb,KAAK,SAAS,CAAC,CAAC;YACd,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAkB,CAAC;SAC3C;QACD,KAAK,MAAM,CAAC,CAAC;YACX,OAAO,SAAS,CAAC,KAAK,CAAkB,CAAC;SAC1C;QACD,KAAK,MAAM,CAAC,CAAC;YACX,OAAO,SAAS,CAAC,KAAK,CAAkB,CAAC;SAC1C;QACD,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC,CAAC;YACf,OAAO,wBAAwB,CAAC,KAAK,CAAkB,CAAC;SACzD;QACD;YACE,OAAO,KAAsB,CAAC;KACjC;AACH,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC"}
|
package/dist/policy.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policies util
|
|
3
|
+
*/
|
|
4
|
+
import type { Context } from './types';
|
|
5
|
+
interface PolicyInfo {
|
|
6
|
+
name: string;
|
|
7
|
+
config: unknown;
|
|
8
|
+
}
|
|
9
|
+
type PolicyConfig = string | PolicyInfo | (() => PolicyInfo);
|
|
10
|
+
interface PolicyContext {
|
|
11
|
+
pluginName?: string;
|
|
12
|
+
apiName?: string;
|
|
13
|
+
}
|
|
14
|
+
interface RouteInfo {
|
|
15
|
+
method: string;
|
|
16
|
+
endpoint: string;
|
|
17
|
+
controller: string;
|
|
18
|
+
action: string;
|
|
19
|
+
plugin: string;
|
|
20
|
+
}
|
|
21
|
+
declare const globalPolicy: ({ method, endpoint, controller, action, plugin }: RouteInfo) => (ctx: Context, next: () => void) => Promise<void>;
|
|
22
|
+
declare const resolvePolicies: (config: PolicyInfo[], policyContext: PolicyContext) => {
|
|
23
|
+
handler: any;
|
|
24
|
+
config: {};
|
|
25
|
+
}[];
|
|
26
|
+
declare const getPolicy: (policyConfig: PolicyConfig, policyContext?: PolicyContext) => any;
|
|
27
|
+
interface Options {
|
|
28
|
+
name: string;
|
|
29
|
+
validator?(config: unknown): void;
|
|
30
|
+
handler(...args: any[]): any;
|
|
31
|
+
}
|
|
32
|
+
declare const createPolicy: (options: Options) => {
|
|
33
|
+
name: string;
|
|
34
|
+
validator: (config: unknown) => void;
|
|
35
|
+
handler: (...args: any[]) => any;
|
|
36
|
+
};
|
|
37
|
+
declare const createPolicyContext: (type: string, ctx: object) => {
|
|
38
|
+
is: import("lodash/fp").LodashEq1x1;
|
|
39
|
+
readonly type: string;
|
|
40
|
+
} & object;
|
|
41
|
+
export { getPolicy as get, resolvePolicies as resolve, globalPolicy, createPolicy, createPolicyContext, };
|
package/dist/policy.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Policies util
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.createPolicyContext = exports.createPolicy = exports.globalPolicy = exports.resolve = exports.get = void 0;
|
|
10
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
11
|
+
const fp_1 = require("lodash/fp");
|
|
12
|
+
const PLUGIN_PREFIX = 'plugin::';
|
|
13
|
+
const API_PREFIX = 'api::';
|
|
14
|
+
const parsePolicy = (policy) => {
|
|
15
|
+
if (typeof policy === 'string') {
|
|
16
|
+
return { policyName: policy, config: {} };
|
|
17
|
+
}
|
|
18
|
+
const { name, config } = policy;
|
|
19
|
+
return { policyName: name, config };
|
|
20
|
+
};
|
|
21
|
+
const searchLocalPolicy = (policyName, policyContext) => {
|
|
22
|
+
const { pluginName, apiName } = policyContext ?? {};
|
|
23
|
+
if (pluginName) {
|
|
24
|
+
return strapi.policy(`${PLUGIN_PREFIX}${pluginName}.${policyName}`);
|
|
25
|
+
}
|
|
26
|
+
if (apiName) {
|
|
27
|
+
return strapi.policy(`${API_PREFIX}${apiName}.${policyName}`);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const globalPolicy = ({ method, endpoint, controller, action, plugin }) => {
|
|
31
|
+
return async (ctx, next) => {
|
|
32
|
+
ctx.request.route = {
|
|
33
|
+
endpoint: `${method} ${endpoint}`,
|
|
34
|
+
controller: lodash_1.default.toLower(controller),
|
|
35
|
+
action: lodash_1.default.toLower(action),
|
|
36
|
+
verb: lodash_1.default.toLower(method),
|
|
37
|
+
plugin,
|
|
38
|
+
};
|
|
39
|
+
await next();
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
exports.globalPolicy = globalPolicy;
|
|
43
|
+
const resolvePolicies = (config, policyContext) => {
|
|
44
|
+
const { pluginName, apiName } = policyContext ?? {};
|
|
45
|
+
return config.map((policyConfig) => {
|
|
46
|
+
return {
|
|
47
|
+
handler: getPolicy(policyConfig, { pluginName, apiName }),
|
|
48
|
+
config: policyConfig.config || {},
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
exports.resolve = resolvePolicies;
|
|
53
|
+
const findPolicy = (name, policyContext) => {
|
|
54
|
+
const { pluginName, apiName } = policyContext ?? {};
|
|
55
|
+
const resolvedPolicy = strapi.policy(name);
|
|
56
|
+
if (resolvedPolicy !== undefined) {
|
|
57
|
+
return resolvedPolicy;
|
|
58
|
+
}
|
|
59
|
+
const localPolicy = searchLocalPolicy(name, { pluginName, apiName });
|
|
60
|
+
if (localPolicy !== undefined) {
|
|
61
|
+
return localPolicy;
|
|
62
|
+
}
|
|
63
|
+
throw new Error(`Could not find policy "${name}"`);
|
|
64
|
+
};
|
|
65
|
+
const getPolicy = (policyConfig, policyContext) => {
|
|
66
|
+
const { pluginName, apiName } = policyContext ?? {};
|
|
67
|
+
if (typeof policyConfig === 'function') {
|
|
68
|
+
return policyConfig;
|
|
69
|
+
}
|
|
70
|
+
const { policyName, config } = parsePolicy(policyConfig);
|
|
71
|
+
const policy = findPolicy(policyName, { pluginName, apiName });
|
|
72
|
+
if (typeof policy === 'function') {
|
|
73
|
+
return policy;
|
|
74
|
+
}
|
|
75
|
+
if (policy.validator) {
|
|
76
|
+
policy.validator(config);
|
|
77
|
+
}
|
|
78
|
+
return policy.handler;
|
|
79
|
+
};
|
|
80
|
+
exports.get = getPolicy;
|
|
81
|
+
const createPolicy = (options) => {
|
|
82
|
+
const { name = 'unnamed', validator, handler } = options;
|
|
83
|
+
const wrappedValidator = (config) => {
|
|
84
|
+
if (validator) {
|
|
85
|
+
try {
|
|
86
|
+
validator(config);
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
throw new Error(`Invalid config passed to "${name}" policy.`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
return {
|
|
94
|
+
name,
|
|
95
|
+
validator: wrappedValidator,
|
|
96
|
+
handler,
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
exports.createPolicy = createPolicy;
|
|
100
|
+
const createPolicyContext = (type, ctx) => {
|
|
101
|
+
return Object.assign({
|
|
102
|
+
is: (0, fp_1.eq)(type),
|
|
103
|
+
get type() {
|
|
104
|
+
return type;
|
|
105
|
+
},
|
|
106
|
+
}, ctx);
|
|
107
|
+
};
|
|
108
|
+
exports.createPolicyContext = createPolicyContext;
|
|
109
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Code copied from the yup library (https://github.com/jquense/yup)
|
|
3
|
+
// https://github.com/jquense/yup/blob/2778b88bdacd5260d593c6468793da2e77daf21f/src/util/printValue.ts
|
|
4
|
+
const { toString } = Object.prototype;
|
|
5
|
+
const errorToString = Error.prototype.toString;
|
|
6
|
+
const regExpToString = RegExp.prototype.toString;
|
|
7
|
+
const symbolToString = typeof Symbol !== 'undefined' ? Symbol.prototype.toString : () => '';
|
|
8
|
+
const SYMBOL_REGEXP = /^Symbol\((.*)\)(.*)$/;
|
|
9
|
+
function printNumber(val) {
|
|
10
|
+
// eslint-disable-next-line eqeqeq
|
|
11
|
+
if (val != +val)
|
|
12
|
+
return 'NaN';
|
|
13
|
+
const isNegativeZero = val === 0 && 1 / val < 0;
|
|
14
|
+
return isNegativeZero ? '-0' : `${val}`;
|
|
15
|
+
}
|
|
16
|
+
function printSimpleValue(val, quoteStrings = false) {
|
|
17
|
+
if (val == null || val === true || val === false)
|
|
18
|
+
return `${val}`;
|
|
19
|
+
if (typeof val === 'number')
|
|
20
|
+
return printNumber(val);
|
|
21
|
+
if (typeof val === 'string')
|
|
22
|
+
return quoteStrings ? `"${val}"` : val;
|
|
23
|
+
if (typeof val === 'function')
|
|
24
|
+
return `[Function ${val.name || 'anonymous'}]`;
|
|
25
|
+
if (typeof val === 'symbol')
|
|
26
|
+
return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)');
|
|
27
|
+
const tag = toString.call(val).slice(8, -1);
|
|
28
|
+
if (tag === 'Date') {
|
|
29
|
+
const v = val;
|
|
30
|
+
return Number.isNaN(v.getTime()) ? `${v}` : v.toISOString();
|
|
31
|
+
}
|
|
32
|
+
if (tag === 'Error' || val instanceof Error)
|
|
33
|
+
return `[${errorToString.call(val)}]`;
|
|
34
|
+
if (tag === 'RegExp')
|
|
35
|
+
return regExpToString.call(val);
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
function printValue(value, quoteStrings) {
|
|
39
|
+
const result = printSimpleValue(value, quoteStrings);
|
|
40
|
+
if (result !== null)
|
|
41
|
+
return result;
|
|
42
|
+
return JSON.stringify(value, function replacer(key, value) {
|
|
43
|
+
const result = printSimpleValue(this[key], quoteStrings);
|
|
44
|
+
if (result !== null)
|
|
45
|
+
return result;
|
|
46
|
+
return value;
|
|
47
|
+
}, 2);
|
|
48
|
+
}
|
|
49
|
+
module.exports = printValue;
|
|
50
|
+
//# sourceMappingURL=print-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"print-value.js","sourceRoot":"","sources":["../src/print-value.ts"],"names":[],"mappings":";AAAA,oEAAoE;AACpE,sGAAsG;AAEtG,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;AACtC,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC/C,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;AACjD,MAAM,cAAc,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;AAE5F,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAE7C,SAAS,WAAW,CAAC,GAAW;IAC9B,kCAAkC;IAClC,IAAI,GAAG,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAC9B,MAAM,cAAc,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAChD,OAAO,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAY,EAAE,YAAY,GAAG,KAAK;IAC1D,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,GAAG,GAAG,EAAE,CAAC;IAElE,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACpE,IAAI,OAAO,GAAG,KAAK,UAAU;QAAE,OAAO,aAAa,GAAG,CAAC,IAAI,IAAI,WAAW,GAAG,CAAC;IAC9E,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAElG,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5C,IAAI,GAAG,KAAK,MAAM,EAAE;QAClB,MAAM,CAAC,GAAG,GAAW,CAAC;QACtB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;KAC7D;IACD,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACnF,IAAI,GAAG,KAAK,QAAQ;QAAE,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,YAAqB;IACvD,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACrD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAEnC,OAAO,IAAI,CAAC,SAAS,CACnB,KAAK,EACL,SAAS,QAAQ,CAAC,GAAG,EAAE,KAAK;QAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;QACzD,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC,EACD,CAAC,CACF,CAAC;AACJ,CAAC;AAED,iBAAS,UAAU,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AsyncSeriesHook, AsyncParallelHook } from './hooks';
|
|
2
|
+
interface ProviderHooksMap {
|
|
3
|
+
willRegister: AsyncSeriesHook;
|
|
4
|
+
didRegister: AsyncParallelHook;
|
|
5
|
+
willDelete: AsyncParallelHook;
|
|
6
|
+
didDelete: AsyncParallelHook;
|
|
7
|
+
}
|
|
8
|
+
export interface Options {
|
|
9
|
+
throwOnDuplicates?: boolean;
|
|
10
|
+
}
|
|
11
|
+
type Item = Record<string, unknown>;
|
|
12
|
+
export interface Provider {
|
|
13
|
+
hooks: ProviderHooksMap;
|
|
14
|
+
register(key: string, item: Item): Promise<Provider>;
|
|
15
|
+
delete(key: string): Promise<Provider>;
|
|
16
|
+
get(key: string): Item | undefined;
|
|
17
|
+
getWhere(filters?: Record<string, unknown>): Item[];
|
|
18
|
+
values(): Item[];
|
|
19
|
+
keys(): string[];
|
|
20
|
+
has(key: string): boolean;
|
|
21
|
+
size(): number;
|
|
22
|
+
clear(): Promise<Provider>;
|
|
23
|
+
}
|
|
24
|
+
export type ProviderFactory = (options?: Options) => Provider;
|
|
25
|
+
/**
|
|
26
|
+
* A Provider factory
|
|
27
|
+
*/
|
|
28
|
+
declare const providerFactory: ProviderFactory;
|
|
29
|
+
export default providerFactory;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fp_1 = require("lodash/fp");
|
|
4
|
+
const hooks_1 = require("./hooks");
|
|
5
|
+
/**
|
|
6
|
+
* Creates a new object containing various hooks used by the providers
|
|
7
|
+
*/
|
|
8
|
+
const createProviderHooksMap = () => ({
|
|
9
|
+
// Register events
|
|
10
|
+
willRegister: (0, hooks_1.createAsyncSeriesHook)(),
|
|
11
|
+
didRegister: (0, hooks_1.createAsyncParallelHook)(),
|
|
12
|
+
// Delete events
|
|
13
|
+
willDelete: (0, hooks_1.createAsyncParallelHook)(),
|
|
14
|
+
didDelete: (0, hooks_1.createAsyncParallelHook)(),
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* A Provider factory
|
|
18
|
+
*/
|
|
19
|
+
const providerFactory = (options = {}) => {
|
|
20
|
+
const { throwOnDuplicates = true } = options;
|
|
21
|
+
const state = {
|
|
22
|
+
hooks: createProviderHooksMap(),
|
|
23
|
+
registry: new Map(),
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
hooks: state.hooks,
|
|
27
|
+
async register(key, item) {
|
|
28
|
+
if (throwOnDuplicates && this.has(key)) {
|
|
29
|
+
throw new Error(`Duplicated item key: ${key}`);
|
|
30
|
+
}
|
|
31
|
+
await state.hooks.willRegister.call({ key, value: item });
|
|
32
|
+
state.registry.set(key, item);
|
|
33
|
+
await state.hooks.didRegister.call({ key, value: (0, fp_1.cloneDeep)(item) });
|
|
34
|
+
return this;
|
|
35
|
+
},
|
|
36
|
+
async delete(key) {
|
|
37
|
+
if (this.has(key)) {
|
|
38
|
+
const item = this.get(key);
|
|
39
|
+
await state.hooks.willDelete.call({ key, value: (0, fp_1.cloneDeep)(item) });
|
|
40
|
+
state.registry.delete(key);
|
|
41
|
+
await state.hooks.didDelete.call({ key, value: (0, fp_1.cloneDeep)(item) });
|
|
42
|
+
}
|
|
43
|
+
return this;
|
|
44
|
+
},
|
|
45
|
+
get(key) {
|
|
46
|
+
return state.registry.get(key);
|
|
47
|
+
},
|
|
48
|
+
getWhere(filters = {}) {
|
|
49
|
+
const items = this.values();
|
|
50
|
+
const filtersEntries = Object.entries(filters);
|
|
51
|
+
if (filtersEntries.length === 0) {
|
|
52
|
+
return items;
|
|
53
|
+
}
|
|
54
|
+
return items.filter((item) => {
|
|
55
|
+
return filtersEntries.every(([key, value]) => item[key] === value);
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
values() {
|
|
59
|
+
return Array.from(state.registry.values());
|
|
60
|
+
},
|
|
61
|
+
keys() {
|
|
62
|
+
return Array.from(state.registry.keys());
|
|
63
|
+
},
|
|
64
|
+
has(key) {
|
|
65
|
+
return state.registry.has(key);
|
|
66
|
+
},
|
|
67
|
+
size() {
|
|
68
|
+
return state.registry.size;
|
|
69
|
+
},
|
|
70
|
+
async clear() {
|
|
71
|
+
const keys = this.keys();
|
|
72
|
+
for (const key of keys) {
|
|
73
|
+
await this.delete(key);
|
|
74
|
+
}
|
|
75
|
+
return this;
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
exports.default = providerFactory;
|
|
80
|
+
//# sourceMappingURL=provider-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-factory.js","sourceRoot":"","sources":["../src/provider-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Attribute, Model } from './types';
|
|
2
|
+
declare const getRelationalFields: (contentType: Model) => string[];
|
|
3
|
+
declare const isOneToAny: (attribute: Attribute) => boolean;
|
|
4
|
+
declare const isManyToAny: (attribute: Attribute) => boolean;
|
|
5
|
+
declare const isAnyToOne: (attribute: Attribute) => boolean;
|
|
6
|
+
declare const isAnyToMany: (attribute: Attribute) => boolean;
|
|
7
|
+
export declare const constants: {
|
|
8
|
+
MANY_RELATIONS: string[];
|
|
9
|
+
};
|
|
10
|
+
export { getRelationalFields, isOneToAny, isManyToAny, isAnyToOne, isAnyToMany };
|