@strapi/utils 5.12.1 → 5.12.3
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.js +28 -0
- package/dist/async.js.map +1 -0
- package/dist/async.mjs +24 -0
- package/dist/async.mjs.map +1 -0
- package/dist/content-types.js +201 -0
- package/dist/content-types.js.map +1 -0
- package/dist/content-types.mjs +167 -0
- package/dist/content-types.mjs.map +1 -0
- package/dist/convert-query-params.js +512 -0
- package/dist/convert-query-params.js.map +1 -0
- package/dist/convert-query-params.mjs +510 -0
- package/dist/convert-query-params.mjs.map +1 -0
- package/dist/env-helper.js +81 -0
- package/dist/env-helper.js.map +1 -0
- package/dist/env-helper.mjs +79 -0
- package/dist/env-helper.mjs.map +1 -0
- package/dist/errors.js +104 -0
- package/dist/errors.js.map +1 -0
- package/dist/errors.mjs +88 -0
- package/dist/errors.mjs.map +1 -0
- package/dist/file.js +57 -0
- package/dist/file.js.map +1 -0
- package/dist/file.mjs +50 -0
- package/dist/file.mjs.map +1 -0
- package/dist/format-yup-error.js +19 -0
- package/dist/format-yup-error.js.map +1 -0
- package/dist/format-yup-error.mjs +17 -0
- package/dist/format-yup-error.mjs.map +1 -0
- package/dist/hooks.js +86 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hooks.mjs +80 -0
- package/dist/hooks.mjs.map +1 -0
- package/dist/import-default.js +9 -0
- package/dist/import-default.js.map +1 -0
- package/dist/import-default.mjs +7 -0
- package/dist/import-default.mjs.map +1 -0
- package/dist/index.js +54 -4358
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +48 -4317
- package/dist/index.mjs.map +1 -1
- package/dist/machine-id.js +17 -0
- package/dist/machine-id.js.map +1 -0
- package/dist/machine-id.mjs +15 -0
- package/dist/machine-id.mjs.map +1 -0
- package/dist/operators.js +79 -0
- package/dist/operators.js.map +1 -0
- package/dist/operators.mjs +76 -0
- package/dist/operators.mjs.map +1 -0
- package/dist/package-manager.js +36 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/package-manager.mjs +33 -0
- package/dist/package-manager.mjs.map +1 -0
- package/dist/pagination.js +163 -0
- package/dist/pagination.js.map +1 -0
- package/dist/pagination.mjs +159 -0
- package/dist/pagination.mjs.map +1 -0
- package/dist/parse-type.js +140 -0
- package/dist/parse-type.js.map +1 -0
- package/dist/parse-type.mjs +118 -0
- package/dist/parse-type.mjs.map +1 -0
- package/dist/policy.js +33 -0
- package/dist/policy.js.map +1 -0
- package/dist/policy.mjs +30 -0
- package/dist/policy.mjs.map +1 -0
- package/dist/primitives/arrays.js +7 -0
- package/dist/primitives/arrays.js.map +1 -0
- package/dist/primitives/arrays.mjs +5 -0
- package/dist/primitives/arrays.mjs.map +1 -0
- package/dist/primitives/dates.js +11 -0
- package/dist/primitives/dates.js.map +1 -0
- package/dist/primitives/dates.mjs +9 -0
- package/dist/primitives/dates.mjs.map +1 -0
- package/dist/primitives/objects.js +13 -0
- package/dist/primitives/objects.js.map +1 -0
- package/dist/primitives/objects.mjs +11 -0
- package/dist/primitives/objects.mjs.map +1 -0
- package/dist/primitives/strings.js +49 -0
- package/dist/primitives/strings.js.map +1 -0
- package/dist/primitives/strings.mjs +38 -0
- package/dist/primitives/strings.mjs.map +1 -0
- package/dist/print-value.js +42 -0
- package/dist/print-value.js.map +1 -0
- package/dist/print-value.mjs +40 -0
- package/dist/print-value.mjs.map +1 -0
- package/dist/provider-factory.js +82 -0
- package/dist/provider-factory.js.map +1 -0
- package/dist/provider-factory.mjs +80 -0
- package/dist/provider-factory.mjs.map +1 -0
- package/dist/relations.js +54 -0
- package/dist/relations.js.map +1 -0
- package/dist/relations.mjs +45 -0
- package/dist/relations.mjs.map +1 -0
- package/dist/sanitize/index.js +195 -0
- package/dist/sanitize/index.js.map +1 -0
- package/dist/sanitize/index.mjs +194 -0
- package/dist/sanitize/index.mjs.map +1 -0
- package/dist/sanitize/sanitizers.js +173 -0
- package/dist/sanitize/sanitizers.js.map +1 -0
- package/dist/sanitize/sanitizers.mjs +166 -0
- package/dist/sanitize/sanitizers.mjs.map +1 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.js +20 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.js.map +1 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.mjs +18 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.mjs.map +1 -0
- package/dist/sanitize/visitors/index.js +22 -0
- package/dist/sanitize/visitors/index.js.map +1 -0
- package/dist/sanitize/visitors/index.mjs +9 -0
- package/dist/sanitize/visitors/index.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.js +87 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.js.map +1 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.mjs +85 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.js +12 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.js.map +1 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.mjs +10 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.js +12 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.js.map +1 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.mjs +10 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-password.js +10 -0
- package/dist/sanitize/visitors/remove-password.js.map +1 -0
- package/dist/sanitize/visitors/remove-password.mjs +8 -0
- package/dist/sanitize/visitors/remove-password.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-private.js +16 -0
- package/dist/sanitize/visitors/remove-private.js.map +1 -0
- package/dist/sanitize/visitors/remove-private.mjs +14 -0
- package/dist/sanitize/visitors/remove-private.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-fields.js +28 -0
- package/dist/sanitize/visitors/remove-restricted-fields.js.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-fields.mjs +26 -0
- package/dist/sanitize/visitors/remove-restricted-fields.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-relations.js +116 -0
- package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-relations.mjs +114 -0
- package/dist/sanitize/visitors/remove-restricted-relations.mjs.map +1 -0
- package/dist/set-creator-fields.js +18 -0
- package/dist/set-creator-fields.js.map +1 -0
- package/dist/set-creator-fields.mjs +16 -0
- package/dist/set-creator-fields.mjs.map +1 -0
- package/dist/template.js +18 -0
- package/dist/template.js.map +1 -0
- package/dist/template.mjs +15 -0
- package/dist/template.mjs.map +1 -0
- package/dist/traverse/factory.js +158 -0
- package/dist/traverse/factory.js.map +1 -0
- package/dist/traverse/factory.mjs +156 -0
- package/dist/traverse/factory.mjs.map +1 -0
- package/dist/traverse/index.js +14 -0
- package/dist/traverse/index.js.map +1 -0
- package/dist/traverse/index.mjs +5 -0
- package/dist/traverse/index.mjs.map +1 -0
- package/dist/traverse/query-fields.js +41 -0
- package/dist/traverse/query-fields.js.map +1 -0
- package/dist/traverse/query-fields.mjs +39 -0
- package/dist/traverse/query-fields.mjs.map +1 -0
- package/dist/traverse/query-filters.js +114 -0
- package/dist/traverse/query-filters.js.map +1 -0
- package/dist/traverse/query-filters.mjs +112 -0
- package/dist/traverse/query-filters.mjs.map +1 -0
- package/dist/traverse/query-populate.js +280 -0
- package/dist/traverse/query-populate.js.map +1 -0
- package/dist/traverse/query-populate.mjs +278 -0
- package/dist/traverse/query-populate.mjs.map +1 -0
- package/dist/traverse/query-sort.js +144 -0
- package/dist/traverse/query-sort.js.map +1 -0
- package/dist/traverse/query-sort.mjs +142 -0
- package/dist/traverse/query-sort.mjs.map +1 -0
- package/dist/traverse-entity.js +170 -0
- package/dist/traverse-entity.js.map +1 -0
- package/dist/traverse-entity.mjs +168 -0
- package/dist/traverse-entity.mjs.map +1 -0
- package/dist/validate/index.js +218 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/index.mjs +217 -0
- package/dist/validate/index.mjs.map +1 -0
- package/dist/validate/utils.js +27 -0
- package/dist/validate/utils.js.map +1 -0
- package/dist/validate/utils.mjs +24 -0
- package/dist/validate/utils.mjs.map +1 -0
- package/dist/validate/validators.js +369 -0
- package/dist/validate/validators.js.map +1 -0
- package/dist/validate/validators.mjs +356 -0
- package/dist/validate/validators.mjs.map +1 -0
- package/dist/validate/visitors/index.js +22 -0
- package/dist/validate/visitors/index.js.map +1 -0
- package/dist/validate/visitors/index.mjs +9 -0
- package/dist/validate/visitors/index.mjs.map +1 -0
- package/dist/validate/visitors/throw-disallowed-fields.js +91 -0
- package/dist/validate/visitors/throw-disallowed-fields.js.map +1 -0
- package/dist/validate/visitors/throw-disallowed-fields.mjs +89 -0
- package/dist/validate/visitors/throw-disallowed-fields.mjs.map +1 -0
- package/dist/validate/visitors/throw-dynamic-zones.js +16 -0
- package/dist/validate/visitors/throw-dynamic-zones.js.map +1 -0
- package/dist/validate/visitors/throw-dynamic-zones.mjs +14 -0
- package/dist/validate/visitors/throw-dynamic-zones.mjs.map +1 -0
- package/dist/validate/visitors/throw-morph-to-relations.js +16 -0
- package/dist/validate/visitors/throw-morph-to-relations.js.map +1 -0
- package/dist/validate/visitors/throw-morph-to-relations.mjs +14 -0
- package/dist/validate/visitors/throw-morph-to-relations.mjs.map +1 -0
- package/dist/validate/visitors/throw-password.js +15 -0
- package/dist/validate/visitors/throw-password.js.map +1 -0
- package/dist/validate/visitors/throw-password.mjs +13 -0
- package/dist/validate/visitors/throw-password.mjs.map +1 -0
- package/dist/validate/visitors/throw-private.js +20 -0
- package/dist/validate/visitors/throw-private.js.map +1 -0
- package/dist/validate/visitors/throw-private.mjs +18 -0
- package/dist/validate/visitors/throw-private.mjs.map +1 -0
- package/dist/validate/visitors/throw-restricted-fields.js +36 -0
- package/dist/validate/visitors/throw-restricted-fields.js.map +1 -0
- package/dist/validate/visitors/throw-restricted-fields.mjs +34 -0
- package/dist/validate/visitors/throw-restricted-fields.mjs.map +1 -0
- package/dist/validate/visitors/throw-restricted-relations.js +125 -0
- package/dist/validate/visitors/throw-restricted-relations.js.map +1 -0
- package/dist/validate/visitors/throw-restricted-relations.mjs +123 -0
- package/dist/validate/visitors/throw-restricted-relations.mjs.map +1 -0
- package/dist/validate/visitors/throw-unrecognized-fields.js +66 -0
- package/dist/validate/visitors/throw-unrecognized-fields.js.map +1 -0
- package/dist/validate/visitors/throw-unrecognized-fields.mjs +64 -0
- package/dist/validate/visitors/throw-unrecognized-fields.mjs.map +1 -0
- package/dist/validators.js +60 -0
- package/dist/validators.js.map +1 -0
- package/dist/validators.mjs +37 -0
- package/dist/validators.mjs.map +1 -0
- package/dist/yup.js +101 -0
- package/dist/yup.js.map +1 -0
- package/dist/yup.mjs +74 -0
- package/dist/yup.mjs.map +1 -0
- package/dist/zod.js +31 -0
- package/dist/zod.js.map +1 -0
- package/dist/zod.mjs +29 -0
- package/dist/zod.mjs.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var crypto = require('crypto');
|
|
4
|
+
var nodeMachineId = require('node-machine-id');
|
|
5
|
+
|
|
6
|
+
var machineId = (()=>{
|
|
7
|
+
try {
|
|
8
|
+
const deviceId = nodeMachineId.machineIdSync();
|
|
9
|
+
return deviceId;
|
|
10
|
+
} catch (error) {
|
|
11
|
+
const deviceId = crypto.randomUUID();
|
|
12
|
+
return deviceId;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
module.exports = machineId;
|
|
17
|
+
//# sourceMappingURL=machine-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-id.js","sources":["../src/machine-id.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport { machineIdSync } from 'node-machine-id';\n\nexport default () => {\n try {\n const deviceId = machineIdSync();\n return deviceId;\n } catch (error) {\n const deviceId = randomUUID();\n return deviceId;\n }\n};\n"],"names":["deviceId","machineIdSync","error","randomUUID"],"mappings":";;;;;AAGA,gBAAe,CAAA,IAAA;IACb,IAAI;AACF,QAAA,MAAMA,QAAWC,GAAAA,2BAAAA,EAAAA;QACjB,OAAOD,QAAAA;AACT,KAAA,CAAE,OAAOE,KAAO,EAAA;AACd,QAAA,MAAMF,QAAWG,GAAAA,iBAAAA,EAAAA;QACjB,OAAOH,QAAAA;AACT;AACF,CAAA;;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { machineIdSync } from 'node-machine-id';
|
|
3
|
+
|
|
4
|
+
var machineId = (()=>{
|
|
5
|
+
try {
|
|
6
|
+
const deviceId = machineIdSync();
|
|
7
|
+
return deviceId;
|
|
8
|
+
} catch (error) {
|
|
9
|
+
const deviceId = randomUUID();
|
|
10
|
+
return deviceId;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export { machineId as default };
|
|
15
|
+
//# sourceMappingURL=machine-id.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-id.mjs","sources":["../src/machine-id.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport { machineIdSync } from 'node-machine-id';\n\nexport default () => {\n try {\n const deviceId = machineIdSync();\n return deviceId;\n } catch (error) {\n const deviceId = randomUUID();\n return deviceId;\n }\n};\n"],"names":["deviceId","machineIdSync","error","randomUUID"],"mappings":";;;AAGA,gBAAe,CAAA,IAAA;IACb,IAAI;AACF,QAAA,MAAMA,QAAWC,GAAAA,aAAAA,EAAAA;QACjB,OAAOD,QAAAA;AACT,KAAA,CAAE,OAAOE,KAAO,EAAA;AACd,QAAA,MAAMF,QAAWG,GAAAA,UAAAA,EAAAA;QACjB,OAAOH,QAAAA;AACT;AACF,CAAA;;;;"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const GROUP_OPERATORS = [
|
|
4
|
+
'$and',
|
|
5
|
+
'$or'
|
|
6
|
+
];
|
|
7
|
+
const WHERE_OPERATORS = [
|
|
8
|
+
'$not',
|
|
9
|
+
'$in',
|
|
10
|
+
'$notIn',
|
|
11
|
+
'$eq',
|
|
12
|
+
'$eqi',
|
|
13
|
+
'$ne',
|
|
14
|
+
'$nei',
|
|
15
|
+
'$gt',
|
|
16
|
+
'$gte',
|
|
17
|
+
'$lt',
|
|
18
|
+
'$lte',
|
|
19
|
+
'$null',
|
|
20
|
+
'$notNull',
|
|
21
|
+
'$between',
|
|
22
|
+
'$startsWith',
|
|
23
|
+
'$endsWith',
|
|
24
|
+
'$startsWithi',
|
|
25
|
+
'$endsWithi',
|
|
26
|
+
'$contains',
|
|
27
|
+
'$notContains',
|
|
28
|
+
'$containsi',
|
|
29
|
+
'$notContainsi',
|
|
30
|
+
// Experimental, only for internal use
|
|
31
|
+
'$jsonSupersetOf'
|
|
32
|
+
];
|
|
33
|
+
const CAST_OPERATORS = [
|
|
34
|
+
'$not',
|
|
35
|
+
'$in',
|
|
36
|
+
'$notIn',
|
|
37
|
+
'$eq',
|
|
38
|
+
'$ne',
|
|
39
|
+
'$gt',
|
|
40
|
+
'$gte',
|
|
41
|
+
'$lt',
|
|
42
|
+
'$lte',
|
|
43
|
+
'$between'
|
|
44
|
+
];
|
|
45
|
+
const ARRAY_OPERATORS = [
|
|
46
|
+
'$in',
|
|
47
|
+
'$notIn',
|
|
48
|
+
'$between'
|
|
49
|
+
];
|
|
50
|
+
const OPERATORS = {
|
|
51
|
+
where: WHERE_OPERATORS,
|
|
52
|
+
cast: CAST_OPERATORS,
|
|
53
|
+
group: GROUP_OPERATORS,
|
|
54
|
+
array: ARRAY_OPERATORS
|
|
55
|
+
};
|
|
56
|
+
// for performance, cache all operators in lowercase
|
|
57
|
+
const OPERATORS_LOWERCASE = Object.fromEntries(Object.entries(OPERATORS).map(([key, values])=>[
|
|
58
|
+
key,
|
|
59
|
+
values.map((value)=>value.toLowerCase())
|
|
60
|
+
]));
|
|
61
|
+
const isObjKey = (key, obj)=>{
|
|
62
|
+
return key in obj;
|
|
63
|
+
};
|
|
64
|
+
const isOperatorOfType = (type, key, ignoreCase = false)=>{
|
|
65
|
+
if (ignoreCase) {
|
|
66
|
+
return OPERATORS_LOWERCASE[type]?.includes(key.toLowerCase()) ?? false;
|
|
67
|
+
}
|
|
68
|
+
if (isObjKey(type, OPERATORS)) {
|
|
69
|
+
return OPERATORS[type]?.includes(key) ?? false;
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
};
|
|
73
|
+
const isOperator = (key, ignoreCase = false)=>{
|
|
74
|
+
return Object.keys(OPERATORS).some((type)=>isOperatorOfType(type, key, ignoreCase));
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
exports.isOperator = isOperator;
|
|
78
|
+
exports.isOperatorOfType = isOperatorOfType;
|
|
79
|
+
//# sourceMappingURL=operators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operators.js","sources":["../src/operators.ts"],"sourcesContent":["const GROUP_OPERATORS = ['$and', '$or'];\n\nconst WHERE_OPERATORS = [\n '$not',\n '$in',\n '$notIn',\n '$eq',\n '$eqi',\n '$ne',\n '$nei',\n '$gt',\n '$gte',\n '$lt',\n '$lte',\n '$null',\n '$notNull',\n '$between',\n '$startsWith',\n '$endsWith',\n '$startsWithi',\n '$endsWithi',\n '$contains',\n '$notContains',\n '$containsi',\n '$notContainsi',\n // Experimental, only for internal use\n '$jsonSupersetOf',\n];\n\nconst CAST_OPERATORS = [\n '$not',\n '$in',\n '$notIn',\n '$eq',\n '$ne',\n '$gt',\n '$gte',\n '$lt',\n '$lte',\n '$between',\n];\n\nconst ARRAY_OPERATORS = ['$in', '$notIn', '$between'];\n\nconst OPERATORS = {\n where: WHERE_OPERATORS,\n cast: CAST_OPERATORS,\n group: GROUP_OPERATORS,\n array: ARRAY_OPERATORS,\n};\n\n// for performance, cache all operators in lowercase\nconst OPERATORS_LOWERCASE = Object.fromEntries(\n Object.entries(OPERATORS).map(([key, values]) => [\n key,\n values.map((value) => value.toLowerCase()),\n ])\n);\n\nconst isObjKey = <T extends object>(key: string | symbol | number, obj: T): key is keyof T => {\n return key in obj;\n};\n\nexport const isOperatorOfType = (type: string, key: string, ignoreCase = false) => {\n if (ignoreCase) {\n return OPERATORS_LOWERCASE[type]?.includes(key.toLowerCase()) ?? false;\n }\n\n if (isObjKey(type, OPERATORS)) {\n return OPERATORS[type]?.includes(key) ?? false;\n }\n\n return false;\n};\n\nexport const isOperator = (key: string, ignoreCase = false) => {\n return Object.keys(OPERATORS).some((type) => isOperatorOfType(type, key, ignoreCase));\n};\n"],"names":["GROUP_OPERATORS","WHERE_OPERATORS","CAST_OPERATORS","ARRAY_OPERATORS","OPERATORS","where","cast","group","array","OPERATORS_LOWERCASE","Object","fromEntries","entries","map","key","values","value","toLowerCase","isObjKey","obj","isOperatorOfType","type","ignoreCase","includes","isOperator","keys","some"],"mappings":";;AAAA,MAAMA,eAAkB,GAAA;AAAC,IAAA,MAAA;AAAQ,IAAA;AAAM,CAAA;AAEvC,MAAMC,eAAkB,GAAA;AACtB,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,QAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,OAAA;AACA,IAAA,UAAA;AACA,IAAA,UAAA;AACA,IAAA,aAAA;AACA,IAAA,WAAA;AACA,IAAA,cAAA;AACA,IAAA,YAAA;AACA,IAAA,WAAA;AACA,IAAA,cAAA;AACA,IAAA,YAAA;AACA,IAAA,eAAA;;AAEA,IAAA;AACD,CAAA;AAED,MAAMC,cAAiB,GAAA;AACrB,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,QAAA;AACA,IAAA,KAAA;AACA,IAAA,KAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,eAAkB,GAAA;AAAC,IAAA,KAAA;AAAO,IAAA,QAAA;AAAU,IAAA;AAAW,CAAA;AAErD,MAAMC,SAAY,GAAA;IAChBC,KAAOJ,EAAAA,eAAAA;IACPK,IAAMJ,EAAAA,cAAAA;IACNK,KAAOP,EAAAA,eAAAA;IACPQ,KAAOL,EAAAA;AACT,CAAA;AAEA;AACA,MAAMM,mBAAsBC,GAAAA,MAAAA,CAAOC,WAAW,CAC5CD,OAAOE,OAAO,CAACR,SAAWS,CAAAA,CAAAA,GAAG,CAAC,CAAC,CAACC,GAAAA,EAAKC,OAAO,GAAK;AAC/CD,QAAAA,GAAAA;AACAC,QAAAA,MAAAA,CAAOF,GAAG,CAAC,CAACG,KAAAA,GAAUA,MAAMC,WAAW,EAAA;AACxC,KAAA,CAAA,CAAA;AAGH,MAAMC,QAAAA,GAAW,CAAmBJ,GAA+BK,EAAAA,GAAAA,GAAAA;AACjE,IAAA,OAAOL,GAAOK,IAAAA,GAAAA;AAChB,CAAA;MAEaC,gBAAmB,GAAA,CAACC,IAAcP,EAAAA,GAAAA,EAAaQ,aAAa,KAAK,GAAA;AAC5E,IAAA,IAAIA,UAAY,EAAA;AACd,QAAA,OAAOb,mBAAmB,CAACY,IAAAA,CAAK,EAAEE,QAAST,CAAAA,GAAAA,CAAIG,WAAW,EAAO,CAAA,IAAA,KAAA;AACnE;IAEA,IAAIC,QAAAA,CAASG,MAAMjB,SAAY,CAAA,EAAA;AAC7B,QAAA,OAAOA,SAAS,CAACiB,IAAK,CAAA,EAAEE,SAAST,GAAQ,CAAA,IAAA,KAAA;AAC3C;IAEA,OAAO,KAAA;AACT;AAEaU,MAAAA,UAAAA,GAAa,CAACV,GAAAA,EAAaQ,aAAa,KAAK,GAAA;IACxD,OAAOZ,MAAAA,CAAOe,IAAI,CAACrB,SAAWsB,CAAAA,CAAAA,IAAI,CAAC,CAACL,IAAAA,GAASD,gBAAiBC,CAAAA,IAAAA,EAAMP,GAAKQ,EAAAA,UAAAA,CAAAA,CAAAA;AAC3E;;;;;"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
const GROUP_OPERATORS = [
|
|
2
|
+
'$and',
|
|
3
|
+
'$or'
|
|
4
|
+
];
|
|
5
|
+
const WHERE_OPERATORS = [
|
|
6
|
+
'$not',
|
|
7
|
+
'$in',
|
|
8
|
+
'$notIn',
|
|
9
|
+
'$eq',
|
|
10
|
+
'$eqi',
|
|
11
|
+
'$ne',
|
|
12
|
+
'$nei',
|
|
13
|
+
'$gt',
|
|
14
|
+
'$gte',
|
|
15
|
+
'$lt',
|
|
16
|
+
'$lte',
|
|
17
|
+
'$null',
|
|
18
|
+
'$notNull',
|
|
19
|
+
'$between',
|
|
20
|
+
'$startsWith',
|
|
21
|
+
'$endsWith',
|
|
22
|
+
'$startsWithi',
|
|
23
|
+
'$endsWithi',
|
|
24
|
+
'$contains',
|
|
25
|
+
'$notContains',
|
|
26
|
+
'$containsi',
|
|
27
|
+
'$notContainsi',
|
|
28
|
+
// Experimental, only for internal use
|
|
29
|
+
'$jsonSupersetOf'
|
|
30
|
+
];
|
|
31
|
+
const CAST_OPERATORS = [
|
|
32
|
+
'$not',
|
|
33
|
+
'$in',
|
|
34
|
+
'$notIn',
|
|
35
|
+
'$eq',
|
|
36
|
+
'$ne',
|
|
37
|
+
'$gt',
|
|
38
|
+
'$gte',
|
|
39
|
+
'$lt',
|
|
40
|
+
'$lte',
|
|
41
|
+
'$between'
|
|
42
|
+
];
|
|
43
|
+
const ARRAY_OPERATORS = [
|
|
44
|
+
'$in',
|
|
45
|
+
'$notIn',
|
|
46
|
+
'$between'
|
|
47
|
+
];
|
|
48
|
+
const OPERATORS = {
|
|
49
|
+
where: WHERE_OPERATORS,
|
|
50
|
+
cast: CAST_OPERATORS,
|
|
51
|
+
group: GROUP_OPERATORS,
|
|
52
|
+
array: ARRAY_OPERATORS
|
|
53
|
+
};
|
|
54
|
+
// for performance, cache all operators in lowercase
|
|
55
|
+
const OPERATORS_LOWERCASE = Object.fromEntries(Object.entries(OPERATORS).map(([key, values])=>[
|
|
56
|
+
key,
|
|
57
|
+
values.map((value)=>value.toLowerCase())
|
|
58
|
+
]));
|
|
59
|
+
const isObjKey = (key, obj)=>{
|
|
60
|
+
return key in obj;
|
|
61
|
+
};
|
|
62
|
+
const isOperatorOfType = (type, key, ignoreCase = false)=>{
|
|
63
|
+
if (ignoreCase) {
|
|
64
|
+
return OPERATORS_LOWERCASE[type]?.includes(key.toLowerCase()) ?? false;
|
|
65
|
+
}
|
|
66
|
+
if (isObjKey(type, OPERATORS)) {
|
|
67
|
+
return OPERATORS[type]?.includes(key) ?? false;
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
};
|
|
71
|
+
const isOperator = (key, ignoreCase = false)=>{
|
|
72
|
+
return Object.keys(OPERATORS).some((type)=>isOperatorOfType(type, key, ignoreCase));
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export { isOperator, isOperatorOfType };
|
|
76
|
+
//# sourceMappingURL=operators.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operators.mjs","sources":["../src/operators.ts"],"sourcesContent":["const GROUP_OPERATORS = ['$and', '$or'];\n\nconst WHERE_OPERATORS = [\n '$not',\n '$in',\n '$notIn',\n '$eq',\n '$eqi',\n '$ne',\n '$nei',\n '$gt',\n '$gte',\n '$lt',\n '$lte',\n '$null',\n '$notNull',\n '$between',\n '$startsWith',\n '$endsWith',\n '$startsWithi',\n '$endsWithi',\n '$contains',\n '$notContains',\n '$containsi',\n '$notContainsi',\n // Experimental, only for internal use\n '$jsonSupersetOf',\n];\n\nconst CAST_OPERATORS = [\n '$not',\n '$in',\n '$notIn',\n '$eq',\n '$ne',\n '$gt',\n '$gte',\n '$lt',\n '$lte',\n '$between',\n];\n\nconst ARRAY_OPERATORS = ['$in', '$notIn', '$between'];\n\nconst OPERATORS = {\n where: WHERE_OPERATORS,\n cast: CAST_OPERATORS,\n group: GROUP_OPERATORS,\n array: ARRAY_OPERATORS,\n};\n\n// for performance, cache all operators in lowercase\nconst OPERATORS_LOWERCASE = Object.fromEntries(\n Object.entries(OPERATORS).map(([key, values]) => [\n key,\n values.map((value) => value.toLowerCase()),\n ])\n);\n\nconst isObjKey = <T extends object>(key: string | symbol | number, obj: T): key is keyof T => {\n return key in obj;\n};\n\nexport const isOperatorOfType = (type: string, key: string, ignoreCase = false) => {\n if (ignoreCase) {\n return OPERATORS_LOWERCASE[type]?.includes(key.toLowerCase()) ?? false;\n }\n\n if (isObjKey(type, OPERATORS)) {\n return OPERATORS[type]?.includes(key) ?? false;\n }\n\n return false;\n};\n\nexport const isOperator = (key: string, ignoreCase = false) => {\n return Object.keys(OPERATORS).some((type) => isOperatorOfType(type, key, ignoreCase));\n};\n"],"names":["GROUP_OPERATORS","WHERE_OPERATORS","CAST_OPERATORS","ARRAY_OPERATORS","OPERATORS","where","cast","group","array","OPERATORS_LOWERCASE","Object","fromEntries","entries","map","key","values","value","toLowerCase","isObjKey","obj","isOperatorOfType","type","ignoreCase","includes","isOperator","keys","some"],"mappings":"AAAA,MAAMA,eAAkB,GAAA;AAAC,IAAA,MAAA;AAAQ,IAAA;AAAM,CAAA;AAEvC,MAAMC,eAAkB,GAAA;AACtB,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,QAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,OAAA;AACA,IAAA,UAAA;AACA,IAAA,UAAA;AACA,IAAA,aAAA;AACA,IAAA,WAAA;AACA,IAAA,cAAA;AACA,IAAA,YAAA;AACA,IAAA,WAAA;AACA,IAAA,cAAA;AACA,IAAA,YAAA;AACA,IAAA,eAAA;;AAEA,IAAA;AACD,CAAA;AAED,MAAMC,cAAiB,GAAA;AACrB,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,QAAA;AACA,IAAA,KAAA;AACA,IAAA,KAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,eAAkB,GAAA;AAAC,IAAA,KAAA;AAAO,IAAA,QAAA;AAAU,IAAA;AAAW,CAAA;AAErD,MAAMC,SAAY,GAAA;IAChBC,KAAOJ,EAAAA,eAAAA;IACPK,IAAMJ,EAAAA,cAAAA;IACNK,KAAOP,EAAAA,eAAAA;IACPQ,KAAOL,EAAAA;AACT,CAAA;AAEA;AACA,MAAMM,mBAAsBC,GAAAA,MAAAA,CAAOC,WAAW,CAC5CD,OAAOE,OAAO,CAACR,SAAWS,CAAAA,CAAAA,GAAG,CAAC,CAAC,CAACC,GAAAA,EAAKC,OAAO,GAAK;AAC/CD,QAAAA,GAAAA;AACAC,QAAAA,MAAAA,CAAOF,GAAG,CAAC,CAACG,KAAAA,GAAUA,MAAMC,WAAW,EAAA;AACxC,KAAA,CAAA,CAAA;AAGH,MAAMC,QAAAA,GAAW,CAAmBJ,GAA+BK,EAAAA,GAAAA,GAAAA;AACjE,IAAA,OAAOL,GAAOK,IAAAA,GAAAA;AAChB,CAAA;MAEaC,gBAAmB,GAAA,CAACC,IAAcP,EAAAA,GAAAA,EAAaQ,aAAa,KAAK,GAAA;AAC5E,IAAA,IAAIA,UAAY,EAAA;AACd,QAAA,OAAOb,mBAAmB,CAACY,IAAAA,CAAK,EAAEE,QAAST,CAAAA,GAAAA,CAAIG,WAAW,EAAO,CAAA,IAAA,KAAA;AACnE;IAEA,IAAIC,QAAAA,CAASG,MAAMjB,SAAY,CAAA,EAAA;AAC7B,QAAA,OAAOA,SAAS,CAACiB,IAAK,CAAA,EAAEE,SAAST,GAAQ,CAAA,IAAA,KAAA;AAC3C;IAEA,OAAO,KAAA;AACT;AAEaU,MAAAA,UAAAA,GAAa,CAACV,GAAAA,EAAaQ,aAAa,KAAK,GAAA;IACxD,OAAOZ,MAAAA,CAAOe,IAAI,CAACrB,SAAWsB,CAAAA,CAAAA,IAAI,CAAC,CAACL,IAAAA,GAASD,gBAAiBC,CAAAA,IAAAA,EAAMP,GAAKQ,EAAAA,UAAAA,CAAAA,CAAAA;AAC3E;;;;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var execa = require('execa');
|
|
4
|
+
var preferredPM = require('preferred-pm');
|
|
5
|
+
|
|
6
|
+
const SUPPORTED_PACKAGE_MANAGERS = [
|
|
7
|
+
'npm',
|
|
8
|
+
'yarn'
|
|
9
|
+
];
|
|
10
|
+
const DEFAULT_PACKAGE_MANAGER = 'npm';
|
|
11
|
+
const getPreferred = async (pkgPath)=>{
|
|
12
|
+
const pm = await preferredPM(pkgPath);
|
|
13
|
+
const hasPackageManager = pm !== undefined;
|
|
14
|
+
if (!hasPackageManager) {
|
|
15
|
+
throw new Error(`Couldn't find a package manager in your project.`);
|
|
16
|
+
}
|
|
17
|
+
const isPackageManagerSupported = SUPPORTED_PACKAGE_MANAGERS.includes(pm.name);
|
|
18
|
+
if (!isPackageManagerSupported) {
|
|
19
|
+
process.emitWarning(`We detected your package manager (${pm.name} v${pm.version}), but it's not officially supported by Strapi yet. Defaulting to npm instead.`);
|
|
20
|
+
return DEFAULT_PACKAGE_MANAGER;
|
|
21
|
+
}
|
|
22
|
+
return pm.name;
|
|
23
|
+
};
|
|
24
|
+
const installDependencies = (path, packageManager, options = {})=>{
|
|
25
|
+
return execa(packageManager, [
|
|
26
|
+
'install'
|
|
27
|
+
], {
|
|
28
|
+
...options,
|
|
29
|
+
cwd: path,
|
|
30
|
+
stdin: 'ignore'
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
exports.getPreferred = getPreferred;
|
|
35
|
+
exports.installDependencies = installDependencies;
|
|
36
|
+
//# sourceMappingURL=package-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sources":["../src/package-manager.ts"],"sourcesContent":["import execa from 'execa';\nimport preferredPM from 'preferred-pm';\n\nimport type { Options as ProcessOptions } from 'execa';\n\nconst SUPPORTED_PACKAGE_MANAGERS = ['npm', 'yarn'];\nconst DEFAULT_PACKAGE_MANAGER = 'npm' as const;\n\ntype SupportedPackageManagerName = 'npm' | 'yarn';\n\nexport const getPreferred = async (pkgPath: string): Promise<SupportedPackageManagerName> => {\n const pm = await preferredPM(pkgPath);\n\n const hasPackageManager = pm !== undefined;\n if (!hasPackageManager) {\n throw new Error(`Couldn't find a package manager in your project.`);\n }\n\n const isPackageManagerSupported = SUPPORTED_PACKAGE_MANAGERS.includes(pm.name);\n if (!isPackageManagerSupported) {\n process.emitWarning(\n `We detected your package manager (${pm.name} v${pm.version}), but it's not officially supported by Strapi yet. Defaulting to npm instead.`\n );\n\n return DEFAULT_PACKAGE_MANAGER;\n }\n\n return pm.name as SupportedPackageManagerName;\n};\n\nexport const installDependencies = (\n path: string,\n packageManager: SupportedPackageManagerName,\n options: ProcessOptions<string> = {}\n) => {\n return execa(packageManager, ['install'], { ...options, cwd: path, stdin: 'ignore' });\n};\n"],"names":["SUPPORTED_PACKAGE_MANAGERS","DEFAULT_PACKAGE_MANAGER","getPreferred","pkgPath","pm","preferredPM","hasPackageManager","undefined","Error","isPackageManagerSupported","includes","name","process","emitWarning","version","installDependencies","path","packageManager","options","execa","cwd","stdin"],"mappings":";;;;;AAKA,MAAMA,0BAA6B,GAAA;AAAC,IAAA,KAAA;AAAO,IAAA;AAAO,CAAA;AAClD,MAAMC,uBAA0B,GAAA,KAAA;AAIzB,MAAMC,eAAe,OAAOC,OAAAA,GAAAA;IACjC,MAAMC,EAAAA,GAAK,MAAMC,WAAYF,CAAAA,OAAAA,CAAAA;AAE7B,IAAA,MAAMG,oBAAoBF,EAAOG,KAAAA,SAAAA;AACjC,IAAA,IAAI,CAACD,iBAAmB,EAAA;AACtB,QAAA,MAAM,IAAIE,KAAAA,CAAM,CAAC,gDAAgD,CAAC,CAAA;AACpE;AAEA,IAAA,MAAMC,yBAA4BT,GAAAA,0BAAAA,CAA2BU,QAAQ,CAACN,GAAGO,IAAI,CAAA;AAC7E,IAAA,IAAI,CAACF,yBAA2B,EAAA;AAC9BG,QAAAA,OAAAA,CAAQC,WAAW,CACjB,CAAC,kCAAkC,EAAET,EAAGO,CAAAA,IAAI,CAAC,EAAE,EAAEP,EAAAA,CAAGU,OAAO,CAAC,8EAA8E,CAAC,CAAA;QAG7I,OAAOb,uBAAAA;AACT;AAEA,IAAA,OAAOG,GAAGO,IAAI;AAChB;MAEaI,mBAAsB,GAAA,CACjCC,MACAC,cACAC,EAAAA,OAAAA,GAAkC,EAAE,GAAA;AAEpC,IAAA,OAAOC,MAAMF,cAAgB,EAAA;AAAC,QAAA;KAAU,EAAE;AAAE,QAAA,GAAGC,OAAO;QAAEE,GAAKJ,EAAAA,IAAAA;QAAMK,KAAO,EAAA;AAAS,KAAA,CAAA;AACrF;;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import execa from 'execa';
|
|
2
|
+
import preferredPM from 'preferred-pm';
|
|
3
|
+
|
|
4
|
+
const SUPPORTED_PACKAGE_MANAGERS = [
|
|
5
|
+
'npm',
|
|
6
|
+
'yarn'
|
|
7
|
+
];
|
|
8
|
+
const DEFAULT_PACKAGE_MANAGER = 'npm';
|
|
9
|
+
const getPreferred = async (pkgPath)=>{
|
|
10
|
+
const pm = await preferredPM(pkgPath);
|
|
11
|
+
const hasPackageManager = pm !== undefined;
|
|
12
|
+
if (!hasPackageManager) {
|
|
13
|
+
throw new Error(`Couldn't find a package manager in your project.`);
|
|
14
|
+
}
|
|
15
|
+
const isPackageManagerSupported = SUPPORTED_PACKAGE_MANAGERS.includes(pm.name);
|
|
16
|
+
if (!isPackageManagerSupported) {
|
|
17
|
+
process.emitWarning(`We detected your package manager (${pm.name} v${pm.version}), but it's not officially supported by Strapi yet. Defaulting to npm instead.`);
|
|
18
|
+
return DEFAULT_PACKAGE_MANAGER;
|
|
19
|
+
}
|
|
20
|
+
return pm.name;
|
|
21
|
+
};
|
|
22
|
+
const installDependencies = (path, packageManager, options = {})=>{
|
|
23
|
+
return execa(packageManager, [
|
|
24
|
+
'install'
|
|
25
|
+
], {
|
|
26
|
+
...options,
|
|
27
|
+
cwd: path,
|
|
28
|
+
stdin: 'ignore'
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export { getPreferred, installDependencies };
|
|
33
|
+
//# sourceMappingURL=package-manager.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.mjs","sources":["../src/package-manager.ts"],"sourcesContent":["import execa from 'execa';\nimport preferredPM from 'preferred-pm';\n\nimport type { Options as ProcessOptions } from 'execa';\n\nconst SUPPORTED_PACKAGE_MANAGERS = ['npm', 'yarn'];\nconst DEFAULT_PACKAGE_MANAGER = 'npm' as const;\n\ntype SupportedPackageManagerName = 'npm' | 'yarn';\n\nexport const getPreferred = async (pkgPath: string): Promise<SupportedPackageManagerName> => {\n const pm = await preferredPM(pkgPath);\n\n const hasPackageManager = pm !== undefined;\n if (!hasPackageManager) {\n throw new Error(`Couldn't find a package manager in your project.`);\n }\n\n const isPackageManagerSupported = SUPPORTED_PACKAGE_MANAGERS.includes(pm.name);\n if (!isPackageManagerSupported) {\n process.emitWarning(\n `We detected your package manager (${pm.name} v${pm.version}), but it's not officially supported by Strapi yet. Defaulting to npm instead.`\n );\n\n return DEFAULT_PACKAGE_MANAGER;\n }\n\n return pm.name as SupportedPackageManagerName;\n};\n\nexport const installDependencies = (\n path: string,\n packageManager: SupportedPackageManagerName,\n options: ProcessOptions<string> = {}\n) => {\n return execa(packageManager, ['install'], { ...options, cwd: path, stdin: 'ignore' });\n};\n"],"names":["SUPPORTED_PACKAGE_MANAGERS","DEFAULT_PACKAGE_MANAGER","getPreferred","pkgPath","pm","preferredPM","hasPackageManager","undefined","Error","isPackageManagerSupported","includes","name","process","emitWarning","version","installDependencies","path","packageManager","options","execa","cwd","stdin"],"mappings":";;;AAKA,MAAMA,0BAA6B,GAAA;AAAC,IAAA,KAAA;AAAO,IAAA;AAAO,CAAA;AAClD,MAAMC,uBAA0B,GAAA,KAAA;AAIzB,MAAMC,eAAe,OAAOC,OAAAA,GAAAA;IACjC,MAAMC,EAAAA,GAAK,MAAMC,WAAYF,CAAAA,OAAAA,CAAAA;AAE7B,IAAA,MAAMG,oBAAoBF,EAAOG,KAAAA,SAAAA;AACjC,IAAA,IAAI,CAACD,iBAAmB,EAAA;AACtB,QAAA,MAAM,IAAIE,KAAAA,CAAM,CAAC,gDAAgD,CAAC,CAAA;AACpE;AAEA,IAAA,MAAMC,yBAA4BT,GAAAA,0BAAAA,CAA2BU,QAAQ,CAACN,GAAGO,IAAI,CAAA;AAC7E,IAAA,IAAI,CAACF,yBAA2B,EAAA;AAC9BG,QAAAA,OAAAA,CAAQC,WAAW,CACjB,CAAC,kCAAkC,EAAET,EAAGO,CAAAA,IAAI,CAAC,EAAE,EAAEP,EAAAA,CAAGU,OAAO,CAAC,8EAA8E,CAAC,CAAA;QAG7I,OAAOb,uBAAAA;AACT;AAEA,IAAA,OAAOG,GAAGO,IAAI;AAChB;MAEaI,mBAAsB,GAAA,CACjCC,MACAC,cACAC,EAAAA,OAAAA,GAAkC,EAAE,GAAA;AAEpC,IAAA,OAAOC,MAAMF,cAAgB,EAAA;AAAC,QAAA;KAAU,EAAE;AAAE,QAAA,GAAGC,OAAO;QAAEE,GAAKJ,EAAAA,IAAAA;QAAMK,KAAO,EAAA;AAAS,KAAA,CAAA;AACrF;;;;"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fp = require('lodash/fp');
|
|
4
|
+
var errors = require('./errors.js');
|
|
5
|
+
|
|
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 = [
|
|
17
|
+
'start',
|
|
18
|
+
'limit',
|
|
19
|
+
'page',
|
|
20
|
+
'pageSize'
|
|
21
|
+
];
|
|
22
|
+
const withMaxLimit = (limit, maxLimit = -1)=>{
|
|
23
|
+
if (maxLimit === -1 || limit < maxLimit) {
|
|
24
|
+
return limit;
|
|
25
|
+
}
|
|
26
|
+
return maxLimit;
|
|
27
|
+
};
|
|
28
|
+
// Ensure minimum page & pageSize values (page >= 1, pageSize >= 0, start >= 0, limit >= 0)
|
|
29
|
+
const ensureMinValues = ({ start, limit })=>({
|
|
30
|
+
start: Math.max(start, 0),
|
|
31
|
+
limit: limit === -1 ? limit : Math.max(limit, 1)
|
|
32
|
+
});
|
|
33
|
+
const ensureMaxValues = (maxLimit = -1)=>({ start, limit })=>({
|
|
34
|
+
start,
|
|
35
|
+
limit: withMaxLimit(limit, maxLimit)
|
|
36
|
+
});
|
|
37
|
+
// Apply maxLimit as the limit when limit is -1
|
|
38
|
+
const withNoLimit = (pagination, maxLimit = -1)=>({
|
|
39
|
+
...pagination,
|
|
40
|
+
limit: pagination.limit === -1 ? maxLimit : pagination.limit
|
|
41
|
+
});
|
|
42
|
+
const withDefaultPagination = (args, { defaults = {}, maxLimit = -1 } = {})=>{
|
|
43
|
+
const defaultValues = fp.merge(STRAPI_DEFAULTS, defaults);
|
|
44
|
+
const usePagePagination = !fp.isNil(args.page) || !fp.isNil(args.pageSize);
|
|
45
|
+
const useOffsetPagination = !fp.isNil(args.start) || !fp.isNil(args.limit);
|
|
46
|
+
const ensureValidValues = fp.pipe(ensureMinValues, ensureMaxValues(maxLimit));
|
|
47
|
+
// If there is no pagination attribute, don't modify the payload
|
|
48
|
+
if (!usePagePagination && !useOffsetPagination) {
|
|
49
|
+
return fp.merge(args, ensureValidValues(defaultValues.offset));
|
|
50
|
+
}
|
|
51
|
+
// If there is page & offset pagination attributes, throw an error
|
|
52
|
+
if (usePagePagination && useOffsetPagination) {
|
|
53
|
+
throw new errors.PaginationError('Cannot use both page & offset pagination in the same query');
|
|
54
|
+
}
|
|
55
|
+
const pagination = {
|
|
56
|
+
start: 0,
|
|
57
|
+
limit: 0
|
|
58
|
+
};
|
|
59
|
+
// Start / Limit
|
|
60
|
+
if (useOffsetPagination) {
|
|
61
|
+
const { start, limit } = fp.merge(defaultValues.offset, args);
|
|
62
|
+
Object.assign(pagination, {
|
|
63
|
+
start,
|
|
64
|
+
limit
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// Page / PageSize
|
|
68
|
+
if (usePagePagination) {
|
|
69
|
+
const { page, pageSize } = fp.merge(defaultValues.page, {
|
|
70
|
+
...args,
|
|
71
|
+
pageSize: Math.max(1, args.pageSize ?? 0)
|
|
72
|
+
});
|
|
73
|
+
Object.assign(pagination, {
|
|
74
|
+
start: (page - 1) * pageSize,
|
|
75
|
+
limit: pageSize
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
// Handle -1 limit
|
|
79
|
+
Object.assign(pagination, withNoLimit(pagination, maxLimit));
|
|
80
|
+
const replacePaginationAttributes = fp.pipe(// Remove pagination attributes
|
|
81
|
+
fp.omit(paginationAttributes), // Merge the object with the new pagination + ensure minimum & maximum values
|
|
82
|
+
fp.merge(ensureValidValues(pagination)));
|
|
83
|
+
return replacePaginationAttributes(args);
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Transform pagination information into a paginated response:
|
|
87
|
+
* {
|
|
88
|
+
* page: number,
|
|
89
|
+
* pageSize: number,
|
|
90
|
+
* pageCount: number,
|
|
91
|
+
* total: number
|
|
92
|
+
* }
|
|
93
|
+
*/ const transformPagedPaginationInfo = (paginationInfo, total)=>{
|
|
94
|
+
if (!fp.isNil(paginationInfo.page)) {
|
|
95
|
+
const page = paginationInfo.page;
|
|
96
|
+
const pageSize = paginationInfo.pageSize ?? total;
|
|
97
|
+
return {
|
|
98
|
+
page,
|
|
99
|
+
pageSize,
|
|
100
|
+
pageCount: pageSize > 0 ? Math.ceil(total / pageSize) : 0,
|
|
101
|
+
total
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
if (!fp.isNil(paginationInfo.start)) {
|
|
105
|
+
const start = paginationInfo.start;
|
|
106
|
+
const limit = paginationInfo.limit ?? total;
|
|
107
|
+
// Start limit to page page size
|
|
108
|
+
return {
|
|
109
|
+
page: Math.floor(start / limit) + 1,
|
|
110
|
+
pageSize: limit,
|
|
111
|
+
pageCount: limit > 0 ? Math.ceil(total / limit) : 0,
|
|
112
|
+
total
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Default pagination
|
|
116
|
+
return {
|
|
117
|
+
...paginationInfo,
|
|
118
|
+
page: 1,
|
|
119
|
+
pageSize: 10,
|
|
120
|
+
pageCount: 1,
|
|
121
|
+
total
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Transform pagination information into a offset response:
|
|
126
|
+
* {
|
|
127
|
+
* start: number,
|
|
128
|
+
* limit: number,
|
|
129
|
+
* total: number
|
|
130
|
+
* }
|
|
131
|
+
*/ const transformOffsetPaginationInfo = (paginationInfo, total)=>{
|
|
132
|
+
if (!fp.isNil(paginationInfo.page)) {
|
|
133
|
+
const limit = paginationInfo.pageSize ?? total;
|
|
134
|
+
const start = (paginationInfo.page - 1) * limit;
|
|
135
|
+
return {
|
|
136
|
+
start,
|
|
137
|
+
limit,
|
|
138
|
+
total
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (!fp.isNil(paginationInfo.start)) {
|
|
142
|
+
const start = paginationInfo.start;
|
|
143
|
+
const limit = paginationInfo.limit ?? total;
|
|
144
|
+
// Start limit to page page size
|
|
145
|
+
return {
|
|
146
|
+
start,
|
|
147
|
+
limit,
|
|
148
|
+
total
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// Default pagination
|
|
152
|
+
return {
|
|
153
|
+
...paginationInfo,
|
|
154
|
+
start: 0,
|
|
155
|
+
limit: 10,
|
|
156
|
+
total
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
exports.transformOffsetPaginationInfo = transformOffsetPaginationInfo;
|
|
161
|
+
exports.transformPagedPaginationInfo = transformPagedPaginationInfo;
|
|
162
|
+
exports.withDefaultPagination = withDefaultPagination;
|
|
163
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sources":["../src/pagination.ts"],"sourcesContent":["import { merge, pipe, omit, isNil } from 'lodash/fp';\nimport { PaginationError } from './errors';\n\ninterface PaginationArgs {\n page: number;\n pageSize: number;\n start: number;\n limit: number;\n}\n\nexport interface Pagination {\n start: number;\n limit: number;\n}\n\nexport interface PagePatinationInformation {\n page: number;\n pageSize: number;\n pageCount: number;\n total: number;\n}\n\nexport interface OffsetPaginationInformation {\n start: number;\n limit: number;\n total: number;\n}\n\nconst STRAPI_DEFAULTS = {\n offset: {\n start: 0,\n limit: 10,\n },\n page: {\n page: 1,\n pageSize: 10,\n },\n};\n\nconst paginationAttributes = ['start', 'limit', 'page', 'pageSize'];\n\nconst withMaxLimit = (limit: number, maxLimit = -1) => {\n if (maxLimit === -1 || limit < maxLimit) {\n return limit;\n }\n\n return maxLimit;\n};\n\n// Ensure minimum page & pageSize values (page >= 1, pageSize >= 0, start >= 0, limit >= 0)\nconst ensureMinValues = ({ start, limit }: Pagination) => ({\n start: Math.max(start, 0),\n limit: limit === -1 ? limit : Math.max(limit, 1),\n});\n\nconst ensureMaxValues =\n (maxLimit = -1) =>\n ({ start, limit }: { start: number; limit: number }) => ({\n start,\n limit: withMaxLimit(limit, maxLimit),\n });\n\n// Apply maxLimit as the limit when limit is -1\nconst withNoLimit = (pagination: Pagination, maxLimit = -1) => ({\n ...pagination,\n limit: pagination.limit === -1 ? maxLimit : pagination.limit,\n});\n\nconst withDefaultPagination = <T extends Partial<PaginationArgs>>(\n args: T,\n { defaults = {}, maxLimit = -1 } = {}\n) => {\n const defaultValues = merge(STRAPI_DEFAULTS, defaults);\n\n const usePagePagination = !isNil(args.page) || !isNil(args.pageSize);\n const useOffsetPagination = !isNil(args.start) || !isNil(args.limit);\n\n const ensureValidValues = pipe(ensureMinValues, ensureMaxValues(maxLimit));\n\n // If there is no pagination attribute, don't modify the payload\n if (!usePagePagination && !useOffsetPagination) {\n return merge(args, ensureValidValues(defaultValues.offset));\n }\n\n // If there is page & offset pagination attributes, throw an error\n if (usePagePagination && useOffsetPagination) {\n throw new PaginationError('Cannot use both page & offset pagination in the same query');\n }\n\n const pagination: Pagination = {\n start: 0,\n limit: 0,\n };\n\n // Start / Limit\n if (useOffsetPagination) {\n const { start, limit } = merge(defaultValues.offset, args);\n\n Object.assign(pagination, { start, limit });\n }\n\n // Page / PageSize\n if (usePagePagination) {\n const { page, pageSize } = merge(defaultValues.page, {\n ...args,\n pageSize: Math.max(1, args.pageSize ?? 0),\n });\n\n Object.assign(pagination, {\n start: (page - 1) * pageSize,\n limit: pageSize,\n });\n }\n\n // Handle -1 limit\n Object.assign(pagination, withNoLimit(pagination, maxLimit));\n\n const replacePaginationAttributes = pipe(\n // Remove pagination attributes\n omit(paginationAttributes),\n // Merge the object with the new pagination + ensure minimum & maximum values\n merge(ensureValidValues(pagination))\n );\n\n return replacePaginationAttributes(args);\n};\n\n/**\n * Transform pagination information into a paginated response:\n * {\n * page: number,\n * pageSize: number,\n * pageCount: number,\n * total: number\n * }\n */\nconst transformPagedPaginationInfo = (\n paginationInfo: Partial<PaginationArgs>,\n total: number\n): PagePatinationInformation => {\n if (!isNil(paginationInfo.page)) {\n const page = paginationInfo.page;\n const pageSize = paginationInfo.pageSize ?? total;\n\n return {\n page,\n pageSize,\n pageCount: pageSize > 0 ? Math.ceil(total / pageSize) : 0,\n total,\n };\n }\n\n if (!isNil(paginationInfo.start)) {\n const start = paginationInfo.start;\n const limit = paginationInfo.limit ?? total;\n\n // Start limit to page page size\n return {\n page: Math.floor(start / limit) + 1,\n pageSize: limit,\n pageCount: limit > 0 ? Math.ceil(total / limit) : 0,\n total,\n };\n }\n\n // Default pagination\n return {\n ...paginationInfo,\n page: 1,\n pageSize: 10,\n pageCount: 1,\n total,\n };\n};\n\n/**\n * Transform pagination information into a offset response:\n * {\n * start: number,\n * limit: number,\n * total: number\n * }\n */\nconst transformOffsetPaginationInfo = (\n paginationInfo: Partial<PaginationArgs>,\n total: number\n): OffsetPaginationInformation => {\n if (!isNil(paginationInfo.page)) {\n const limit = paginationInfo.pageSize ?? total;\n const start = (paginationInfo.page - 1) * limit;\n\n return { start, limit, total };\n }\n\n if (!isNil(paginationInfo.start)) {\n const start = paginationInfo.start;\n const limit = paginationInfo.limit ?? total;\n\n // Start limit to page page size\n return { start, limit, total };\n }\n\n // Default pagination\n return {\n ...paginationInfo,\n start: 0,\n limit: 10,\n total,\n };\n};\n\nexport { withDefaultPagination, transformPagedPaginationInfo, transformOffsetPaginationInfo };\n"],"names":["STRAPI_DEFAULTS","offset","start","limit","page","pageSize","paginationAttributes","withMaxLimit","maxLimit","ensureMinValues","Math","max","ensureMaxValues","withNoLimit","pagination","withDefaultPagination","args","defaults","defaultValues","merge","usePagePagination","isNil","useOffsetPagination","ensureValidValues","pipe","PaginationError","Object","assign","replacePaginationAttributes","omit","transformPagedPaginationInfo","paginationInfo","total","pageCount","ceil","floor","transformOffsetPaginationInfo"],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { merge, isNil, pipe, omit } from 'lodash/fp';
|
|
2
|
+
import { PaginationError } from './errors.mjs';
|
|
3
|
+
|
|
4
|
+
const STRAPI_DEFAULTS = {
|
|
5
|
+
offset: {
|
|
6
|
+
start: 0,
|
|
7
|
+
limit: 10
|
|
8
|
+
},
|
|
9
|
+
page: {
|
|
10
|
+
page: 1,
|
|
11
|
+
pageSize: 10
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const paginationAttributes = [
|
|
15
|
+
'start',
|
|
16
|
+
'limit',
|
|
17
|
+
'page',
|
|
18
|
+
'pageSize'
|
|
19
|
+
];
|
|
20
|
+
const withMaxLimit = (limit, maxLimit = -1)=>{
|
|
21
|
+
if (maxLimit === -1 || limit < maxLimit) {
|
|
22
|
+
return limit;
|
|
23
|
+
}
|
|
24
|
+
return maxLimit;
|
|
25
|
+
};
|
|
26
|
+
// Ensure minimum page & pageSize values (page >= 1, pageSize >= 0, start >= 0, limit >= 0)
|
|
27
|
+
const ensureMinValues = ({ start, limit })=>({
|
|
28
|
+
start: Math.max(start, 0),
|
|
29
|
+
limit: limit === -1 ? limit : Math.max(limit, 1)
|
|
30
|
+
});
|
|
31
|
+
const ensureMaxValues = (maxLimit = -1)=>({ start, limit })=>({
|
|
32
|
+
start,
|
|
33
|
+
limit: withMaxLimit(limit, maxLimit)
|
|
34
|
+
});
|
|
35
|
+
// Apply maxLimit as the limit when limit is -1
|
|
36
|
+
const withNoLimit = (pagination, maxLimit = -1)=>({
|
|
37
|
+
...pagination,
|
|
38
|
+
limit: pagination.limit === -1 ? maxLimit : pagination.limit
|
|
39
|
+
});
|
|
40
|
+
const withDefaultPagination = (args, { defaults = {}, maxLimit = -1 } = {})=>{
|
|
41
|
+
const defaultValues = merge(STRAPI_DEFAULTS, defaults);
|
|
42
|
+
const usePagePagination = !isNil(args.page) || !isNil(args.pageSize);
|
|
43
|
+
const useOffsetPagination = !isNil(args.start) || !isNil(args.limit);
|
|
44
|
+
const ensureValidValues = pipe(ensureMinValues, ensureMaxValues(maxLimit));
|
|
45
|
+
// If there is no pagination attribute, don't modify the payload
|
|
46
|
+
if (!usePagePagination && !useOffsetPagination) {
|
|
47
|
+
return merge(args, ensureValidValues(defaultValues.offset));
|
|
48
|
+
}
|
|
49
|
+
// If there is page & offset pagination attributes, throw an error
|
|
50
|
+
if (usePagePagination && useOffsetPagination) {
|
|
51
|
+
throw new PaginationError('Cannot use both page & offset pagination in the same query');
|
|
52
|
+
}
|
|
53
|
+
const pagination = {
|
|
54
|
+
start: 0,
|
|
55
|
+
limit: 0
|
|
56
|
+
};
|
|
57
|
+
// Start / Limit
|
|
58
|
+
if (useOffsetPagination) {
|
|
59
|
+
const { start, limit } = merge(defaultValues.offset, args);
|
|
60
|
+
Object.assign(pagination, {
|
|
61
|
+
start,
|
|
62
|
+
limit
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Page / PageSize
|
|
66
|
+
if (usePagePagination) {
|
|
67
|
+
const { page, pageSize } = merge(defaultValues.page, {
|
|
68
|
+
...args,
|
|
69
|
+
pageSize: Math.max(1, args.pageSize ?? 0)
|
|
70
|
+
});
|
|
71
|
+
Object.assign(pagination, {
|
|
72
|
+
start: (page - 1) * pageSize,
|
|
73
|
+
limit: pageSize
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Handle -1 limit
|
|
77
|
+
Object.assign(pagination, withNoLimit(pagination, maxLimit));
|
|
78
|
+
const replacePaginationAttributes = pipe(// Remove pagination attributes
|
|
79
|
+
omit(paginationAttributes), // Merge the object with the new pagination + ensure minimum & maximum values
|
|
80
|
+
merge(ensureValidValues(pagination)));
|
|
81
|
+
return replacePaginationAttributes(args);
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Transform pagination information into a paginated response:
|
|
85
|
+
* {
|
|
86
|
+
* page: number,
|
|
87
|
+
* pageSize: number,
|
|
88
|
+
* pageCount: number,
|
|
89
|
+
* total: number
|
|
90
|
+
* }
|
|
91
|
+
*/ const transformPagedPaginationInfo = (paginationInfo, total)=>{
|
|
92
|
+
if (!isNil(paginationInfo.page)) {
|
|
93
|
+
const page = paginationInfo.page;
|
|
94
|
+
const pageSize = paginationInfo.pageSize ?? total;
|
|
95
|
+
return {
|
|
96
|
+
page,
|
|
97
|
+
pageSize,
|
|
98
|
+
pageCount: pageSize > 0 ? Math.ceil(total / pageSize) : 0,
|
|
99
|
+
total
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (!isNil(paginationInfo.start)) {
|
|
103
|
+
const start = paginationInfo.start;
|
|
104
|
+
const limit = paginationInfo.limit ?? total;
|
|
105
|
+
// Start limit to page page size
|
|
106
|
+
return {
|
|
107
|
+
page: Math.floor(start / limit) + 1,
|
|
108
|
+
pageSize: limit,
|
|
109
|
+
pageCount: limit > 0 ? Math.ceil(total / limit) : 0,
|
|
110
|
+
total
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// Default pagination
|
|
114
|
+
return {
|
|
115
|
+
...paginationInfo,
|
|
116
|
+
page: 1,
|
|
117
|
+
pageSize: 10,
|
|
118
|
+
pageCount: 1,
|
|
119
|
+
total
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* Transform pagination information into a offset response:
|
|
124
|
+
* {
|
|
125
|
+
* start: number,
|
|
126
|
+
* limit: number,
|
|
127
|
+
* total: number
|
|
128
|
+
* }
|
|
129
|
+
*/ const transformOffsetPaginationInfo = (paginationInfo, total)=>{
|
|
130
|
+
if (!isNil(paginationInfo.page)) {
|
|
131
|
+
const limit = paginationInfo.pageSize ?? total;
|
|
132
|
+
const start = (paginationInfo.page - 1) * limit;
|
|
133
|
+
return {
|
|
134
|
+
start,
|
|
135
|
+
limit,
|
|
136
|
+
total
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
if (!isNil(paginationInfo.start)) {
|
|
140
|
+
const start = paginationInfo.start;
|
|
141
|
+
const limit = paginationInfo.limit ?? total;
|
|
142
|
+
// Start limit to page page size
|
|
143
|
+
return {
|
|
144
|
+
start,
|
|
145
|
+
limit,
|
|
146
|
+
total
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
// Default pagination
|
|
150
|
+
return {
|
|
151
|
+
...paginationInfo,
|
|
152
|
+
start: 0,
|
|
153
|
+
limit: 10,
|
|
154
|
+
total
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
export { transformOffsetPaginationInfo, transformPagedPaginationInfo, withDefaultPagination };
|
|
159
|
+
//# sourceMappingURL=pagination.mjs.map
|