@strapi/utils 4.11.0-exp.9xg4-3qfm-9w8f.1 → 4.11.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 +147 -0
- package/dist/content-types.js.map +1 -0
- package/dist/convert-query-params.d.ts +72 -0
- package/dist/convert-query-params.js +451 -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 +92 -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 +10 -0
- package/dist/import-default.js.map +1 -0
- package/dist/index.d.ts +200 -0
- package/dist/index.js +151 -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/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 +97 -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 +84 -0
- package/dist/provider-factory.js +88 -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 +106 -0
- package/dist/sanitize/sanitizers.js.map +1 -0
- package/dist/sanitize/visitors/allowed-fields.d.ts +3 -0
- package/dist/sanitize/visitors/allowed-fields.js +83 -0
- 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 +38 -0
- package/dist/set-creator-fields.js.map +1 -0
- package/dist/string-formatting.d.ts +16 -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 +28 -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 +80 -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 +33 -0
- package/dist/traverse-entity.js +134 -0
- package/dist/traverse-entity.js.map +1 -0
- package/dist/types.d.ts +66 -0
- package/dist/types.js +4 -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 +10 -0
- package/dist/webhook.js +14 -0
- package/dist/webhook.js.map +1 -0
- package/lib/content-types.js +5 -4
- package/package.json +2 -2
package/dist/index.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.traverse = exports.file = exports.importDefault = exports.convertQueryParams = exports.validateYupSchemaSync = exports.validateYupSchema = exports.errors = exports.forEachAsync = exports.reduceAsync = exports.mapAsync = exports.pipeAsync = exports.pagination = exports.providerFactory = exports.hooks = exports.setCreatorFields = exports.relations = exports.env = exports.contentTypes = exports.toKebabCase = exports.isCamelCase = exports.isKebabCase = exports.template = exports.stringEquals = exports.stringIncludes = exports.generateTimestampCode = exports.getAbsoluteServerUrl = exports.getAbsoluteAdminUrl = exports.keysDeep = exports.removeUndefined = exports.escapeQuery = exports.getConfigUrls = exports.getCommonBeginning = exports.nameToCollectionName = exports.joinBy = exports.startsWithANumber = exports.toRegressedEnumValue = exports.nameToSlug = exports.parseType = exports.traverseEntity = exports.sanitize = exports.parseMultipartData = exports.templateConfiguration = exports.policy = exports.handleYupError = exports.yup = void 0;
|
|
30
|
+
/**
|
|
31
|
+
* Export shared utilities
|
|
32
|
+
*/
|
|
33
|
+
const parse_multipart_1 = __importDefault(require("./parse-multipart"));
|
|
34
|
+
exports.parseMultipartData = parse_multipart_1.default;
|
|
35
|
+
const parse_type_1 = __importDefault(require("./parse-type"));
|
|
36
|
+
exports.parseType = parse_type_1.default;
|
|
37
|
+
const policy = __importStar(require("./policy"));
|
|
38
|
+
exports.policy = policy;
|
|
39
|
+
const template_configuration_1 = __importDefault(require("./template-configuration"));
|
|
40
|
+
exports.templateConfiguration = template_configuration_1.default;
|
|
41
|
+
const validators_1 = require("./validators");
|
|
42
|
+
Object.defineProperty(exports, "yup", { enumerable: true, get: function () { return validators_1.yup; } });
|
|
43
|
+
Object.defineProperty(exports, "handleYupError", { enumerable: true, get: function () { return validators_1.handleYupError; } });
|
|
44
|
+
Object.defineProperty(exports, "validateYupSchema", { enumerable: true, get: function () { return validators_1.validateYupSchema; } });
|
|
45
|
+
Object.defineProperty(exports, "validateYupSchemaSync", { enumerable: true, get: function () { return validators_1.validateYupSchemaSync; } });
|
|
46
|
+
const errors = __importStar(require("./errors"));
|
|
47
|
+
exports.errors = errors;
|
|
48
|
+
const string_formatting_1 = require("./string-formatting");
|
|
49
|
+
Object.defineProperty(exports, "nameToSlug", { enumerable: true, get: function () { return string_formatting_1.nameToSlug; } });
|
|
50
|
+
Object.defineProperty(exports, "nameToCollectionName", { enumerable: true, get: function () { return string_formatting_1.nameToCollectionName; } });
|
|
51
|
+
Object.defineProperty(exports, "getCommonBeginning", { enumerable: true, get: function () { return string_formatting_1.getCommonBeginning; } });
|
|
52
|
+
Object.defineProperty(exports, "escapeQuery", { enumerable: true, get: function () { return string_formatting_1.escapeQuery; } });
|
|
53
|
+
Object.defineProperty(exports, "stringIncludes", { enumerable: true, get: function () { return string_formatting_1.stringIncludes; } });
|
|
54
|
+
Object.defineProperty(exports, "stringEquals", { enumerable: true, get: function () { return string_formatting_1.stringEquals; } });
|
|
55
|
+
Object.defineProperty(exports, "isKebabCase", { enumerable: true, get: function () { return string_formatting_1.isKebabCase; } });
|
|
56
|
+
Object.defineProperty(exports, "isCamelCase", { enumerable: true, get: function () { return string_formatting_1.isCamelCase; } });
|
|
57
|
+
Object.defineProperty(exports, "toRegressedEnumValue", { enumerable: true, get: function () { return string_formatting_1.toRegressedEnumValue; } });
|
|
58
|
+
Object.defineProperty(exports, "startsWithANumber", { enumerable: true, get: function () { return string_formatting_1.startsWithANumber; } });
|
|
59
|
+
Object.defineProperty(exports, "joinBy", { enumerable: true, get: function () { return string_formatting_1.joinBy; } });
|
|
60
|
+
Object.defineProperty(exports, "toKebabCase", { enumerable: true, get: function () { return string_formatting_1.toKebabCase; } });
|
|
61
|
+
const object_formatting_1 = require("./object-formatting");
|
|
62
|
+
Object.defineProperty(exports, "removeUndefined", { enumerable: true, get: function () { return object_formatting_1.removeUndefined; } });
|
|
63
|
+
Object.defineProperty(exports, "keysDeep", { enumerable: true, get: function () { return object_formatting_1.keysDeep; } });
|
|
64
|
+
const config_1 = require("./config");
|
|
65
|
+
Object.defineProperty(exports, "getConfigUrls", { enumerable: true, get: function () { return config_1.getConfigUrls; } });
|
|
66
|
+
Object.defineProperty(exports, "getAbsoluteAdminUrl", { enumerable: true, get: function () { return config_1.getAbsoluteAdminUrl; } });
|
|
67
|
+
Object.defineProperty(exports, "getAbsoluteServerUrl", { enumerable: true, get: function () { return config_1.getAbsoluteServerUrl; } });
|
|
68
|
+
const code_generator_1 = require("./code-generator");
|
|
69
|
+
Object.defineProperty(exports, "generateTimestampCode", { enumerable: true, get: function () { return code_generator_1.generateTimestampCode; } });
|
|
70
|
+
const contentTypes = __importStar(require("./content-types"));
|
|
71
|
+
exports.contentTypes = contentTypes;
|
|
72
|
+
const env_helper_1 = __importDefault(require("./env-helper"));
|
|
73
|
+
exports.env = env_helper_1.default;
|
|
74
|
+
const relations = __importStar(require("./relations"));
|
|
75
|
+
exports.relations = relations;
|
|
76
|
+
const set_creator_fields_1 = __importDefault(require("./set-creator-fields"));
|
|
77
|
+
exports.setCreatorFields = set_creator_fields_1.default;
|
|
78
|
+
const hooks = __importStar(require("./hooks"));
|
|
79
|
+
exports.hooks = hooks;
|
|
80
|
+
const provider_factory_1 = __importDefault(require("./provider-factory"));
|
|
81
|
+
exports.providerFactory = provider_factory_1.default;
|
|
82
|
+
const pagination = __importStar(require("./pagination"));
|
|
83
|
+
exports.pagination = pagination;
|
|
84
|
+
const sanitize_1 = __importDefault(require("./sanitize"));
|
|
85
|
+
exports.sanitize = sanitize_1.default;
|
|
86
|
+
const traverse_entity_1 = __importDefault(require("./traverse-entity"));
|
|
87
|
+
exports.traverseEntity = traverse_entity_1.default;
|
|
88
|
+
const async_1 = require("./async");
|
|
89
|
+
Object.defineProperty(exports, "pipeAsync", { enumerable: true, get: function () { return async_1.pipeAsync; } });
|
|
90
|
+
Object.defineProperty(exports, "mapAsync", { enumerable: true, get: function () { return async_1.mapAsync; } });
|
|
91
|
+
Object.defineProperty(exports, "reduceAsync", { enumerable: true, get: function () { return async_1.reduceAsync; } });
|
|
92
|
+
Object.defineProperty(exports, "forEachAsync", { enumerable: true, get: function () { return async_1.forEachAsync; } });
|
|
93
|
+
const convert_query_params_1 = __importDefault(require("./convert-query-params"));
|
|
94
|
+
exports.convertQueryParams = convert_query_params_1.default;
|
|
95
|
+
const import_default_1 = __importDefault(require("./import-default"));
|
|
96
|
+
exports.importDefault = import_default_1.default;
|
|
97
|
+
const template = __importStar(require("./template"));
|
|
98
|
+
exports.template = template;
|
|
99
|
+
const file = __importStar(require("./file"));
|
|
100
|
+
exports.file = file;
|
|
101
|
+
const traverse = __importStar(require("./traverse"));
|
|
102
|
+
exports.traverse = traverse;
|
|
103
|
+
const utils = {
|
|
104
|
+
yup: validators_1.yup,
|
|
105
|
+
handleYupError: validators_1.handleYupError,
|
|
106
|
+
policy,
|
|
107
|
+
templateConfiguration: template_configuration_1.default,
|
|
108
|
+
parseMultipartData: parse_multipart_1.default,
|
|
109
|
+
sanitize: sanitize_1.default,
|
|
110
|
+
traverseEntity: traverse_entity_1.default,
|
|
111
|
+
parseType: parse_type_1.default,
|
|
112
|
+
nameToSlug: string_formatting_1.nameToSlug,
|
|
113
|
+
toRegressedEnumValue: string_formatting_1.toRegressedEnumValue,
|
|
114
|
+
startsWithANumber: string_formatting_1.startsWithANumber,
|
|
115
|
+
joinBy: string_formatting_1.joinBy,
|
|
116
|
+
nameToCollectionName: string_formatting_1.nameToCollectionName,
|
|
117
|
+
getCommonBeginning: string_formatting_1.getCommonBeginning,
|
|
118
|
+
getConfigUrls: config_1.getConfigUrls,
|
|
119
|
+
escapeQuery: string_formatting_1.escapeQuery,
|
|
120
|
+
removeUndefined: object_formatting_1.removeUndefined,
|
|
121
|
+
keysDeep: object_formatting_1.keysDeep,
|
|
122
|
+
getAbsoluteAdminUrl: config_1.getAbsoluteAdminUrl,
|
|
123
|
+
getAbsoluteServerUrl: config_1.getAbsoluteServerUrl,
|
|
124
|
+
generateTimestampCode: code_generator_1.generateTimestampCode,
|
|
125
|
+
stringIncludes: string_formatting_1.stringIncludes,
|
|
126
|
+
stringEquals: string_formatting_1.stringEquals,
|
|
127
|
+
template,
|
|
128
|
+
isKebabCase: string_formatting_1.isKebabCase,
|
|
129
|
+
isCamelCase: string_formatting_1.isCamelCase,
|
|
130
|
+
toKebabCase: string_formatting_1.toKebabCase,
|
|
131
|
+
contentTypes,
|
|
132
|
+
env: env_helper_1.default,
|
|
133
|
+
relations,
|
|
134
|
+
setCreatorFields: set_creator_fields_1.default,
|
|
135
|
+
hooks,
|
|
136
|
+
providerFactory: provider_factory_1.default,
|
|
137
|
+
pagination,
|
|
138
|
+
pipeAsync: async_1.pipeAsync,
|
|
139
|
+
mapAsync: async_1.mapAsync,
|
|
140
|
+
reduceAsync: async_1.reduceAsync,
|
|
141
|
+
forEachAsync: async_1.forEachAsync,
|
|
142
|
+
errors,
|
|
143
|
+
validateYupSchema: validators_1.validateYupSchema,
|
|
144
|
+
validateYupSchemaSync: validators_1.validateYupSchemaSync,
|
|
145
|
+
convertQueryParams: convert_query_params_1.default,
|
|
146
|
+
importDefault: import_default_1.default,
|
|
147
|
+
file,
|
|
148
|
+
traverse,
|
|
149
|
+
};
|
|
150
|
+
exports.default = utils;
|
|
151
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.keysDeep = exports.removeUndefined = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const removeUndefined = (obj) => lodash_1.default.pickBy(obj, (value) => typeof value !== 'undefined');
|
|
9
|
+
exports.removeUndefined = removeUndefined;
|
|
10
|
+
const keysDeep = (obj, path = []) => !lodash_1.default.isObject(obj)
|
|
11
|
+
? [path.join('.')]
|
|
12
|
+
: lodash_1.default.reduce(obj, (acc, next, key) => lodash_1.default.concat(acc, keysDeep(next, [...path, key])), []);
|
|
13
|
+
exports.keysDeep = keysDeep;
|
|
14
|
+
//# sourceMappingURL=object-formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-formatting.js","sourceRoot":"","sources":["../src/object-formatting.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AAEvB,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,gBAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC;AAWvF,0CAAe;AATxB,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,OAAiB,EAAE,EAAY,EAAE,CAC9D,CAAC,gBAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;IACd,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC,CAAC,gBAAC,CAAC,MAAM,CACN,GAAG,EACH,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAC,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EACjE,EAAc,CACf,CAAC;AAEkB,4BAAQ"}
|
|
@@ -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 {
|
|
13
|
+
type: keyof TypeMap;
|
|
14
|
+
value: any;
|
|
15
|
+
forceCast?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Cast basic values based on attribute type
|
|
19
|
+
*/
|
|
20
|
+
declare const parseType: (options: ParseTypeOptions) => any;
|
|
21
|
+
export default parseType;
|
|
@@ -0,0 +1,97 @@
|
|
|
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
|
+
try {
|
|
29
|
+
const date = dates.parseISO(value);
|
|
30
|
+
if (dates.isValid(date))
|
|
31
|
+
return dates.format(date, 'yyyy-MM-dd');
|
|
32
|
+
throw new Error(`Invalid format, expected an ISO compatible date`);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
throw new Error(`Invalid format, expected an ISO compatible date`);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const parseDateTimeOrTimestamp = (value) => {
|
|
39
|
+
if (isDate(value)) {
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const date = dates.parseISO(value);
|
|
44
|
+
if (dates.isValid(date))
|
|
45
|
+
return date;
|
|
46
|
+
const milliUnixDate = dates.parse(value, 'T', new Date());
|
|
47
|
+
if (dates.isValid(milliUnixDate))
|
|
48
|
+
return milliUnixDate;
|
|
49
|
+
throw new Error(`Invalid format, expected a timestamp or an ISO date`);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
throw new Error(`Invalid format, expected a timestamp or an ISO date`);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Cast basic values based on attribute type
|
|
57
|
+
*/
|
|
58
|
+
const parseType = (options) => {
|
|
59
|
+
const { type, value, forceCast = false } = options;
|
|
60
|
+
switch (type) {
|
|
61
|
+
case 'boolean': {
|
|
62
|
+
if (typeof value === 'boolean') {
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
if (['true', 't', '1', 1].includes(value)) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
if (['false', 'f', '0', 0].includes(value)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
if (forceCast) {
|
|
72
|
+
return Boolean(value);
|
|
73
|
+
}
|
|
74
|
+
throw new Error('Invalid boolean input. Expected "t","1","true","false","0","f"');
|
|
75
|
+
}
|
|
76
|
+
case 'integer':
|
|
77
|
+
case 'biginteger':
|
|
78
|
+
case 'float':
|
|
79
|
+
case 'decimal': {
|
|
80
|
+
return _.toNumber(value);
|
|
81
|
+
}
|
|
82
|
+
case 'time': {
|
|
83
|
+
return parseTime(value);
|
|
84
|
+
}
|
|
85
|
+
case 'date': {
|
|
86
|
+
return parseDate(value);
|
|
87
|
+
}
|
|
88
|
+
case 'timestamp':
|
|
89
|
+
case 'datetime': {
|
|
90
|
+
return parseDateTimeOrTimestamp(value);
|
|
91
|
+
}
|
|
92
|
+
default:
|
|
93
|
+
return value;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
exports.default = parseType;
|
|
97
|
+
//# sourceMappingURL=parse-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-type.js","sourceRoot":"","sources":["../src/parse-type.ts"],"names":[],"mappings":"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"}
|
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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"}
|