@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.
Files changed (134) hide show
  1. package/dist/async.d.ts +10 -0
  2. package/dist/async.js +33 -0
  3. package/dist/async.js.map +1 -0
  4. package/dist/code-generator.d.ts +2 -0
  5. package/dist/code-generator.js +11 -0
  6. package/dist/code-generator.js.map +1 -0
  7. package/dist/config.d.ts +8 -0
  8. package/dist/config.js +79 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/content-types.d.ts +60 -0
  11. package/dist/content-types.js +147 -0
  12. package/dist/content-types.js.map +1 -0
  13. package/dist/convert-query-params.d.ts +72 -0
  14. package/dist/convert-query-params.js +451 -0
  15. package/dist/convert-query-params.js.map +1 -0
  16. package/dist/env-helper.d.ts +18 -0
  17. package/dist/env-helper.js +84 -0
  18. package/dist/env-helper.js.map +1 -0
  19. package/dist/errors.d.ts +37 -0
  20. package/dist/errors.js +100 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/file.d.ts +16 -0
  23. package/dist/file.js +54 -0
  24. package/dist/file.js.map +1 -0
  25. package/dist/format-yup-error.d.ts +10 -0
  26. package/dist/format-yup-error.js +17 -0
  27. package/dist/format-yup-error.js.map +1 -0
  28. package/dist/hooks.d.ts +92 -0
  29. package/dist/hooks.js +89 -0
  30. package/dist/hooks.js.map +1 -0
  31. package/dist/import-default.d.ts +1 -0
  32. package/dist/import-default.js +10 -0
  33. package/dist/import-default.js.map +1 -0
  34. package/dist/index.d.ts +200 -0
  35. package/dist/index.js +151 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/object-formatting.d.ts +3 -0
  38. package/dist/object-formatting.js +14 -0
  39. package/dist/object-formatting.js.map +1 -0
  40. package/dist/pagination.d.ts +14 -0
  41. package/dist/pagination.js +80 -0
  42. package/dist/pagination.js.map +1 -0
  43. package/dist/parse-multipart.d.ts +8 -0
  44. package/dist/parse-multipart.js +36 -0
  45. package/dist/parse-multipart.js.map +1 -0
  46. package/dist/parse-type.d.ts +21 -0
  47. package/dist/parse-type.js +97 -0
  48. package/dist/parse-type.js.map +1 -0
  49. package/dist/policy.d.ts +41 -0
  50. package/dist/policy.js +109 -0
  51. package/dist/policy.js.map +1 -0
  52. package/dist/print-value.d.ts +2 -0
  53. package/dist/print-value.js +50 -0
  54. package/dist/print-value.js.map +1 -0
  55. package/dist/provider-factory.d.ts +84 -0
  56. package/dist/provider-factory.js +88 -0
  57. package/dist/provider-factory.js.map +1 -0
  58. package/dist/relations.d.ts +10 -0
  59. package/dist/relations.js +23 -0
  60. package/dist/relations.js.map +1 -0
  61. package/dist/sanitize/index.d.ts +23 -0
  62. package/dist/sanitize/index.js +135 -0
  63. package/dist/sanitize/index.js.map +1 -0
  64. package/dist/sanitize/sanitizers.d.ts +10 -0
  65. package/dist/sanitize/sanitizers.js +106 -0
  66. package/dist/sanitize/sanitizers.js.map +1 -0
  67. package/dist/sanitize/visitors/allowed-fields.d.ts +3 -0
  68. package/dist/sanitize/visitors/allowed-fields.js +83 -0
  69. package/dist/sanitize/visitors/allowed-fields.js.map +1 -0
  70. package/dist/sanitize/visitors/index.d.ts +7 -0
  71. package/dist/sanitize/visitors/index.js +21 -0
  72. package/dist/sanitize/visitors/index.js.map +1 -0
  73. package/dist/sanitize/visitors/remove-dynamic-zones.d.ts +3 -0
  74. package/dist/sanitize/visitors/remove-dynamic-zones.js +10 -0
  75. package/dist/sanitize/visitors/remove-dynamic-zones.js.map +1 -0
  76. package/dist/sanitize/visitors/remove-morph-to-relations.d.ts +3 -0
  77. package/dist/sanitize/visitors/remove-morph-to-relations.js +10 -0
  78. package/dist/sanitize/visitors/remove-morph-to-relations.js.map +1 -0
  79. package/dist/sanitize/visitors/remove-password.d.ts +3 -0
  80. package/dist/sanitize/visitors/remove-password.js +9 -0
  81. package/dist/sanitize/visitors/remove-password.js.map +1 -0
  82. package/dist/sanitize/visitors/remove-private.d.ts +3 -0
  83. package/dist/sanitize/visitors/remove-private.js +14 -0
  84. package/dist/sanitize/visitors/remove-private.js.map +1 -0
  85. package/dist/sanitize/visitors/remove-restricted-relations.d.ts +3 -0
  86. package/dist/sanitize/visitors/remove-restricted-relations.js +88 -0
  87. package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -0
  88. package/dist/sanitize/visitors/restricted-fields.d.ts +3 -0
  89. package/dist/sanitize/visitors/restricted-fields.js +25 -0
  90. package/dist/sanitize/visitors/restricted-fields.js.map +1 -0
  91. package/dist/set-creator-fields.d.ts +9 -0
  92. package/dist/set-creator-fields.js +38 -0
  93. package/dist/set-creator-fields.js.map +1 -0
  94. package/dist/string-formatting.d.ts +16 -0
  95. package/dist/string-formatting.js +85 -0
  96. package/dist/string-formatting.js.map +1 -0
  97. package/dist/template-configuration.d.ts +5 -0
  98. package/dist/template-configuration.js +28 -0
  99. package/dist/template-configuration.js.map +1 -0
  100. package/dist/template.d.ts +9 -0
  101. package/dist/template.js +20 -0
  102. package/dist/template.js.map +1 -0
  103. package/dist/traverse/factory.d.ts +80 -0
  104. package/dist/traverse/factory.js +127 -0
  105. package/dist/traverse/factory.js.map +1 -0
  106. package/dist/traverse/index.d.ts +5 -0
  107. package/dist/traverse/index.js +17 -0
  108. package/dist/traverse/index.js.map +1 -0
  109. package/dist/traverse/query-fields.d.ts +3 -0
  110. package/dist/traverse/query-fields.js +35 -0
  111. package/dist/traverse/query-fields.js.map +1 -0
  112. package/dist/traverse/query-filters.d.ts +3 -0
  113. package/dist/traverse/query-filters.js +75 -0
  114. package/dist/traverse/query-filters.js.map +1 -0
  115. package/dist/traverse/query-populate.d.ts +3 -0
  116. package/dist/traverse/query-populate.js +144 -0
  117. package/dist/traverse/query-populate.js.map +1 -0
  118. package/dist/traverse/query-sort.d.ts +3 -0
  119. package/dist/traverse/query-sort.js +116 -0
  120. package/dist/traverse/query-sort.js.map +1 -0
  121. package/dist/traverse-entity.d.ts +33 -0
  122. package/dist/traverse-entity.js +134 -0
  123. package/dist/traverse-entity.js.map +1 -0
  124. package/dist/types.d.ts +66 -0
  125. package/dist/types.js +4 -0
  126. package/dist/types.js.map +1 -0
  127. package/dist/validators.d.ts +13 -0
  128. package/dist/validators.js +120 -0
  129. package/dist/validators.js.map +1 -0
  130. package/dist/webhook.d.ts +10 -0
  131. package/dist/webhook.js +14 -0
  132. package/dist/webhook.js.map +1 -0
  133. package/lib/content-types.js +5 -4
  134. package/package.json +2 -2
@@ -0,0 +1,451 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/naming-convention */
3
+ /* eslint-disable max-classes-per-file */
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
17
+ }) : function(o, v) {
18
+ o["default"] = v;
19
+ });
20
+ var __importStar = (this && this.__importStar) || function (mod) {
21
+ if (mod && mod.__esModule) return mod;
22
+ var result = {};
23
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
24
+ __setModuleDefault(result, mod);
25
+ return result;
26
+ };
27
+ var __importDefault = (this && this.__importDefault) || function (mod) {
28
+ return (mod && mod.__esModule) ? mod : { "default": mod };
29
+ };
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ /**
32
+ * Converts the standard Strapi REST query params to a more usable format for querying
33
+ * You can read more here: https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest-api.html#filters
34
+ */
35
+ const fp_1 = require("lodash/fp");
36
+ const lodash_1 = __importDefault(require("lodash"));
37
+ const parse_type_1 = __importDefault(require("./parse-type"));
38
+ const contentTypesUtils = __importStar(require("./content-types"));
39
+ const errors_1 = require("./errors");
40
+ const content_types_1 = require("./content-types");
41
+ const { PUBLISHED_AT_ATTRIBUTE } = contentTypesUtils.constants;
42
+ class InvalidOrderError extends Error {
43
+ constructor() {
44
+ super();
45
+ this.message = 'Invalid order. order can only be one of asc|desc|ASC|DESC';
46
+ }
47
+ }
48
+ class InvalidSortError extends Error {
49
+ constructor() {
50
+ super();
51
+ this.message =
52
+ 'Invalid sort parameter. Expected a string, an array of strings, a sort object or an array of sort objects';
53
+ }
54
+ }
55
+ function validateOrder(order) {
56
+ if (!['asc', 'desc'].includes(order.toLocaleLowerCase())) {
57
+ throw new InvalidOrderError();
58
+ }
59
+ }
60
+ const convertCountQueryParams = (countQuery) => {
61
+ return (0, parse_type_1.default)({ type: 'boolean', value: countQuery });
62
+ };
63
+ const convertOrderingQueryParams = (ordering) => {
64
+ return ordering;
65
+ };
66
+ const isPlainObject = (value) => lodash_1.default.isPlainObject(value);
67
+ const isStringArray = (value) => (0, fp_1.isArray)(value) && value.every(fp_1.isString);
68
+ /**
69
+ * Sort query parser
70
+ */
71
+ const convertSortQueryParams = (sortQuery) => {
72
+ if (typeof sortQuery === 'string') {
73
+ return convertStringSortQueryParam(sortQuery);
74
+ }
75
+ if (isStringArray(sortQuery)) {
76
+ return sortQuery.flatMap((sortValue) => convertStringSortQueryParam(sortValue));
77
+ }
78
+ if (isPlainObject(sortQuery)) {
79
+ return convertNestedSortQueryParam(sortQuery);
80
+ }
81
+ throw new InvalidSortError();
82
+ };
83
+ const convertStringSortQueryParam = (sortQuery) => {
84
+ return sortQuery.split(',').map((value) => convertSingleSortQueryParam(value));
85
+ };
86
+ const convertSingleSortQueryParam = (sortQuery) => {
87
+ // split field and order param with default order to ascending
88
+ const [field, order = 'asc'] = sortQuery.split(':');
89
+ if (field.length === 0) {
90
+ throw new Error('Field cannot be empty');
91
+ }
92
+ validateOrder(order);
93
+ return lodash_1.default.set({}, field, order);
94
+ };
95
+ const convertNestedSortQueryParam = (sortQuery) => {
96
+ const transformedSort = {};
97
+ for (const field of Object.keys(sortQuery)) {
98
+ const order = sortQuery[field];
99
+ // this is a deep sort
100
+ if (isPlainObject(order)) {
101
+ transformedSort[field] = convertNestedSortQueryParam(order);
102
+ }
103
+ else if (typeof order === 'string') {
104
+ validateOrder(order);
105
+ transformedSort[field] = order;
106
+ }
107
+ else {
108
+ throw Error(`Invalid sort type expected object or string got ${typeof order}`);
109
+ }
110
+ }
111
+ return transformedSort;
112
+ };
113
+ /**
114
+ * Start query parser
115
+ */
116
+ const convertStartQueryParams = (startQuery) => {
117
+ const startAsANumber = lodash_1.default.toNumber(startQuery);
118
+ if (!lodash_1.default.isInteger(startAsANumber) || startAsANumber < 0) {
119
+ throw new Error(`convertStartQueryParams expected a positive integer got ${startAsANumber}`);
120
+ }
121
+ return startAsANumber;
122
+ };
123
+ /**
124
+ * Limit query parser
125
+ */
126
+ const convertLimitQueryParams = (limitQuery) => {
127
+ const limitAsANumber = lodash_1.default.toNumber(limitQuery);
128
+ if (!lodash_1.default.isInteger(limitAsANumber) || (limitAsANumber !== -1 && limitAsANumber < 0)) {
129
+ throw new Error(`convertLimitQueryParams expected a positive integer got ${limitAsANumber}`);
130
+ }
131
+ if (limitAsANumber === -1) {
132
+ return undefined;
133
+ }
134
+ return limitAsANumber;
135
+ };
136
+ const convertPageQueryParams = (page) => {
137
+ const pageVal = (0, fp_1.toNumber)(page);
138
+ if (!(0, fp_1.isInteger)(pageVal) || pageVal <= 0) {
139
+ throw new errors_1.PaginationError(`Invalid 'page' parameter. Expected an integer > 0, received: ${page}`);
140
+ }
141
+ return pageVal;
142
+ };
143
+ const convertPageSizeQueryParams = (pageSize, page) => {
144
+ const pageSizeVal = (0, fp_1.toNumber)(pageSize);
145
+ if (!(0, fp_1.isInteger)(pageSizeVal) || pageSizeVal <= 0) {
146
+ throw new errors_1.PaginationError(`Invalid 'pageSize' parameter. Expected an integer > 0, received: ${page}`);
147
+ }
148
+ return pageSizeVal;
149
+ };
150
+ const validatePaginationParams = (page, pageSize, start, limit) => {
151
+ const isPagePagination = !(0, fp_1.isNil)(page) || !(0, fp_1.isNil)(pageSize);
152
+ const isOffsetPagination = !(0, fp_1.isNil)(start) || !(0, fp_1.isNil)(limit);
153
+ if (isPagePagination && isOffsetPagination) {
154
+ throw new errors_1.PaginationError('Invalid pagination attributes. You cannot use page and offset pagination in the same query');
155
+ }
156
+ };
157
+ class InvalidPopulateError extends Error {
158
+ constructor() {
159
+ super();
160
+ this.message =
161
+ 'Invalid populate parameter. Expected a string, an array of strings, a populate object';
162
+ }
163
+ }
164
+ // NOTE: we could support foo.* or foo.bar.* etc later on
165
+ const convertPopulateQueryParams = (populate, schema, depth = 0) => {
166
+ if (depth === 0 && populate === '*') {
167
+ return true;
168
+ }
169
+ if (typeof populate === 'string') {
170
+ return populate.split(',').map((value) => lodash_1.default.trim(value));
171
+ }
172
+ if (Array.isArray(populate)) {
173
+ // map convert
174
+ return lodash_1.default.uniq(populate.flatMap((value) => {
175
+ if (typeof value !== 'string') {
176
+ throw new InvalidPopulateError();
177
+ }
178
+ return value.split(',').map((value) => lodash_1.default.trim(value));
179
+ }));
180
+ }
181
+ if (lodash_1.default.isPlainObject(populate)) {
182
+ return convertPopulateObject(populate, schema);
183
+ }
184
+ throw new InvalidPopulateError();
185
+ };
186
+ const convertPopulateObject = (populate, schema) => {
187
+ if (!schema) {
188
+ return {};
189
+ }
190
+ const { attributes } = schema;
191
+ return Object.entries(populate).reduce((acc, [key, subPopulate]) => {
192
+ const attribute = attributes[key];
193
+ if (!attribute) {
194
+ return acc;
195
+ }
196
+ // Allow adding an 'on' strategy to populate queries for polymorphic relations, media and dynamic zones
197
+ const isAllowedAttributeForFragmentPopulate = (0, content_types_1.isDynamicZoneAttribute)(attribute) ||
198
+ (0, content_types_1.isMediaAttribute)(attribute) ||
199
+ (0, content_types_1.isMorphToRelationalAttribute)(attribute);
200
+ const hasFragmentPopulateDefined = typeof subPopulate === 'object' && 'on' in subPopulate && !(0, fp_1.isNil)(subPopulate.on);
201
+ if (isAllowedAttributeForFragmentPopulate && hasFragmentPopulateDefined) {
202
+ return {
203
+ ...acc,
204
+ [key]: {
205
+ on: Object.entries(subPopulate.on).reduce((acc, [type, typeSubPopulate]) => ({
206
+ ...acc,
207
+ [type]: convertNestedPopulate(typeSubPopulate, strapi.getModel(type)),
208
+ }), {}),
209
+ },
210
+ };
211
+ }
212
+ // TODO: This is a query's populate fallback for DynamicZone and is kept for legacy purpose.
213
+ // Removing it could break existing user queries but it should be removed in V5.
214
+ if ((0, content_types_1.isDynamicZoneAttribute)(attribute)) {
215
+ const populates = attribute.components
216
+ .map((uid) => strapi.getModel(uid))
217
+ .map((schema) => convertNestedPopulate(subPopulate, schema))
218
+ .map((populate) => (populate === true ? {} : populate)) // cast boolean to empty object to avoid merging issues
219
+ .filter((populate) => populate !== false);
220
+ if ((0, fp_1.isEmpty)(populates)) {
221
+ return acc;
222
+ }
223
+ return {
224
+ ...acc,
225
+ [key]: (0, fp_1.mergeAll)(populates),
226
+ };
227
+ }
228
+ // NOTE: Retrieve the target schema UID.
229
+ // Only handles basic relations, medias and component since it's not possible
230
+ // to populate with options for a dynamic zone or a polymorphic relation
231
+ let targetSchemaUID;
232
+ if (attribute.type === 'relation') {
233
+ targetSchemaUID = attribute.target;
234
+ }
235
+ else if (attribute.type === 'component') {
236
+ targetSchemaUID = attribute.component;
237
+ }
238
+ else if (attribute.type === 'media') {
239
+ targetSchemaUID = 'plugin::upload.file';
240
+ }
241
+ else {
242
+ return acc;
243
+ }
244
+ const targetSchema = strapi.getModel(targetSchemaUID);
245
+ if (!targetSchema) {
246
+ return acc;
247
+ }
248
+ const populateObject = convertNestedPopulate(subPopulate, targetSchema);
249
+ if (!populateObject) {
250
+ return acc;
251
+ }
252
+ return {
253
+ ...acc,
254
+ [key]: populateObject,
255
+ };
256
+ }, {});
257
+ };
258
+ const convertNestedPopulate = (subPopulate, schema) => {
259
+ if (lodash_1.default.isString(subPopulate)) {
260
+ return (0, parse_type_1.default)({ type: 'boolean', value: subPopulate, forceCast: true });
261
+ }
262
+ if (lodash_1.default.isBoolean(subPopulate)) {
263
+ return subPopulate;
264
+ }
265
+ if (!isPlainObject(subPopulate)) {
266
+ throw new Error(`Invalid nested populate. Expected '*' or an object`);
267
+ }
268
+ const { sort, filters, fields, populate, count, ordering, page, pageSize, start, limit } = subPopulate;
269
+ const query = {};
270
+ if (sort) {
271
+ query.orderBy = convertSortQueryParams(sort);
272
+ }
273
+ if (filters) {
274
+ query.where = convertFiltersQueryParams(filters, schema);
275
+ }
276
+ if (fields) {
277
+ query.select = convertFieldsQueryParams(fields);
278
+ }
279
+ if (populate) {
280
+ query.populate = convertPopulateQueryParams(populate, schema);
281
+ }
282
+ if (count) {
283
+ query.count = convertCountQueryParams(count);
284
+ }
285
+ if (ordering) {
286
+ query.ordering = convertOrderingQueryParams(ordering);
287
+ }
288
+ validatePaginationParams(page, pageSize, start, limit);
289
+ if (!(0, fp_1.isNil)(page)) {
290
+ query.page = convertPageQueryParams(page);
291
+ }
292
+ if (!(0, fp_1.isNil)(pageSize)) {
293
+ query.pageSize = convertPageSizeQueryParams(pageSize, page);
294
+ }
295
+ if (!(0, fp_1.isNil)(start)) {
296
+ query.offset = convertStartQueryParams(start);
297
+ }
298
+ if (!(0, fp_1.isNil)(limit)) {
299
+ query.limit = convertLimitQueryParams(limit);
300
+ }
301
+ convertPublicationStateParams(schema, subPopulate, query);
302
+ return query;
303
+ };
304
+ const convertFieldsQueryParams = (fields, depth = 0) => {
305
+ if (depth === 0 && fields === '*') {
306
+ return undefined;
307
+ }
308
+ if (typeof fields === 'string') {
309
+ const fieldsValues = fields.split(',').map((value) => lodash_1.default.trim(value));
310
+ return lodash_1.default.uniq(['id', ...fieldsValues]);
311
+ }
312
+ if (isStringArray(fields)) {
313
+ // map convert
314
+ const fieldsValues = fields
315
+ .flatMap((value) => convertFieldsQueryParams(value, depth + 1))
316
+ .filter((v) => !(0, fp_1.isNil)(v));
317
+ return lodash_1.default.uniq(['id', ...fieldsValues]);
318
+ }
319
+ throw new Error('Invalid fields parameter. Expected a string or an array of strings');
320
+ };
321
+ const convertFiltersQueryParams = (filters, schema) => {
322
+ // Filters need to be either an array or an object
323
+ // Here we're only checking for 'object' type since typeof [] => object and typeof {} => object
324
+ if (!(0, fp_1.isObject)(filters)) {
325
+ throw new Error('The filters parameter must be an object or an array');
326
+ }
327
+ // Don't mutate the original object
328
+ const filtersCopy = (0, fp_1.cloneDeep)(filters);
329
+ return convertAndSanitizeFilters(filtersCopy, schema);
330
+ };
331
+ const convertAndSanitizeFilters = (filters, schema) => {
332
+ if (!isPlainObject(filters)) {
333
+ return filters;
334
+ }
335
+ if (Array.isArray(filters)) {
336
+ return (filters
337
+ // Sanitize each filter
338
+ .map((filter) => convertAndSanitizeFilters(filter, schema))
339
+ // Filter out empty filters
340
+ .filter((filter) => !(0, fp_1.isObject)(filter) || !(0, fp_1.isEmpty)(filter)));
341
+ }
342
+ const removeOperator = (operator) => delete filters[operator];
343
+ // Here, `key` can either be an operator or an attribute name
344
+ for (const [key, value] of Object.entries(filters)) {
345
+ const attribute = (0, fp_1.get)(key, schema?.attributes);
346
+ // Handle attributes
347
+ if (attribute) {
348
+ // Relations
349
+ if (attribute.type === 'relation') {
350
+ filters[key] = convertAndSanitizeFilters(value, strapi.getModel(attribute.target));
351
+ }
352
+ // Components
353
+ else if (attribute.type === 'component') {
354
+ filters[key] = convertAndSanitizeFilters(value, strapi.getModel(attribute.component));
355
+ }
356
+ // Media
357
+ else if (attribute.type === 'media') {
358
+ filters[key] = convertAndSanitizeFilters(value, strapi.getModel('plugin::upload.file'));
359
+ }
360
+ // Dynamic Zones
361
+ else if (attribute.type === 'dynamiczone') {
362
+ removeOperator(key);
363
+ }
364
+ // Password attributes
365
+ else if (attribute.type === 'password') {
366
+ // Always remove password attributes from filters object
367
+ removeOperator(key);
368
+ }
369
+ // Scalar attributes
370
+ else {
371
+ filters[key] = convertAndSanitizeFilters(value, schema);
372
+ }
373
+ }
374
+ // Handle operators
375
+ else if (['$null', '$notNull'].includes(key)) {
376
+ filters[key] = (0, parse_type_1.default)({ type: 'boolean', value: filters[key], forceCast: true });
377
+ }
378
+ else if ((0, fp_1.isObject)(value)) {
379
+ filters[key] = convertAndSanitizeFilters(value, schema);
380
+ }
381
+ // Remove empty objects & arrays
382
+ if (isPlainObject(filters[key]) && (0, fp_1.isEmpty)(filters[key])) {
383
+ removeOperator(key);
384
+ }
385
+ }
386
+ return filters;
387
+ };
388
+ const convertPublicationStateParams = (schema, params = {}, query = {}) => {
389
+ if (!schema) {
390
+ return;
391
+ }
392
+ const { publicationState } = params;
393
+ if (!lodash_1.default.isNil(publicationState)) {
394
+ if (!contentTypesUtils.constants.DP_PUB_STATES.includes(publicationState)) {
395
+ throw new Error(`Invalid publicationState. Expected one of 'preview','live' received: ${publicationState}.`);
396
+ }
397
+ // NOTE: this is the query layer filters not the entity service filters
398
+ query.filters = ({ meta }) => {
399
+ if (publicationState === 'live' && (0, fp_1.has)(PUBLISHED_AT_ATTRIBUTE, meta.attributes)) {
400
+ return { [PUBLISHED_AT_ATTRIBUTE]: { $notNull: true } };
401
+ }
402
+ };
403
+ }
404
+ };
405
+ const transformParamsToQuery = (uid, params) => {
406
+ // NOTE: can be a CT, a Compo or nothing in the case of polymorphism (DZ & morph relations)
407
+ const schema = strapi.getModel(uid);
408
+ const query = {};
409
+ const { _q, sort, filters, fields, populate, page, pageSize, start, limit } = params;
410
+ if (!(0, fp_1.isNil)(_q)) {
411
+ query._q = _q;
412
+ }
413
+ if (!(0, fp_1.isNil)(sort)) {
414
+ query.orderBy = convertSortQueryParams(sort);
415
+ }
416
+ if (!(0, fp_1.isNil)(filters)) {
417
+ query.where = convertFiltersQueryParams(filters, schema);
418
+ }
419
+ if (!(0, fp_1.isNil)(fields)) {
420
+ query.select = convertFieldsQueryParams(fields);
421
+ }
422
+ if (!(0, fp_1.isNil)(populate)) {
423
+ query.populate = convertPopulateQueryParams(populate, schema);
424
+ }
425
+ validatePaginationParams(page, pageSize, start, limit);
426
+ if (!(0, fp_1.isNil)(page)) {
427
+ query.page = convertPageQueryParams(page);
428
+ }
429
+ if (!(0, fp_1.isNil)(pageSize)) {
430
+ query.pageSize = convertPageSizeQueryParams(pageSize, page);
431
+ }
432
+ if (!(0, fp_1.isNil)(start)) {
433
+ query.offset = convertStartQueryParams(start);
434
+ }
435
+ if (!(0, fp_1.isNil)(limit)) {
436
+ query.limit = convertLimitQueryParams(limit);
437
+ }
438
+ convertPublicationStateParams(schema, params, query);
439
+ return query;
440
+ };
441
+ exports.default = {
442
+ convertSortQueryParams,
443
+ convertStartQueryParams,
444
+ convertLimitQueryParams,
445
+ convertPopulateQueryParams,
446
+ convertFiltersQueryParams,
447
+ convertFieldsQueryParams,
448
+ convertPublicationStateParams,
449
+ transformParamsToQuery,
450
+ };
451
+ //# sourceMappingURL=convert-query-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-query-params.js","sourceRoot":"","sources":["../src/convert-query-params.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ declare function envFn<T>(key: string, defaultValue?: T): string | T | undefined;
2
+ declare const env: typeof envFn & {
3
+ int(key: string, defaultValue?: number): number | undefined;
4
+ float(key: string, defaultValue?: number): number | undefined;
5
+ bool(key: string, defaultValue?: boolean): boolean | undefined;
6
+ json(key: string, defaultValue?: object): any;
7
+ array(key: string, defaultValue?: string[]): string[] | undefined;
8
+ date(key: string, defaultValue?: Date): Date | undefined;
9
+ /**
10
+ * Gets a value from env that matches oneOf provided values
11
+ * @param {string} key
12
+ * @param {string[]} expectedValues
13
+ * @param {string|undefined} defaultValue
14
+ * @returns {string|undefined}
15
+ */
16
+ oneOf(key: string, expectedValues?: unknown[], defaultValue?: unknown): unknown;
17
+ };
18
+ export default env;
@@ -0,0 +1,84 @@
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
+ const lodash_1 = __importDefault(require("lodash"));
7
+ function envFn(key, defaultValue) {
8
+ return lodash_1.default.has(process.env, key) ? process.env[key] : defaultValue;
9
+ }
10
+ function getKey(key) {
11
+ return process.env[key] ?? '';
12
+ }
13
+ const utils = {
14
+ int(key, defaultValue) {
15
+ if (!lodash_1.default.has(process.env, key)) {
16
+ return defaultValue;
17
+ }
18
+ return parseInt(getKey(key), 10);
19
+ },
20
+ float(key, defaultValue) {
21
+ if (!lodash_1.default.has(process.env, key)) {
22
+ return defaultValue;
23
+ }
24
+ return parseFloat(getKey(key));
25
+ },
26
+ bool(key, defaultValue) {
27
+ if (!lodash_1.default.has(process.env, key)) {
28
+ return defaultValue;
29
+ }
30
+ return getKey(key) === 'true';
31
+ },
32
+ json(key, defaultValue) {
33
+ if (!lodash_1.default.has(process.env, key)) {
34
+ return defaultValue;
35
+ }
36
+ try {
37
+ return JSON.parse(getKey(key));
38
+ }
39
+ catch (error) {
40
+ if (error instanceof Error) {
41
+ throw new Error(`Invalid json environment variable ${key}: ${error.message}`);
42
+ }
43
+ throw error;
44
+ }
45
+ },
46
+ array(key, defaultValue) {
47
+ if (!lodash_1.default.has(process.env, key)) {
48
+ return defaultValue;
49
+ }
50
+ let value = getKey(key);
51
+ if (value.startsWith('[') && value.endsWith(']')) {
52
+ value = value.substring(1, value.length - 1);
53
+ }
54
+ return value.split(',').map((v) => {
55
+ return lodash_1.default.trim(lodash_1.default.trim(v, ' '), '"');
56
+ });
57
+ },
58
+ date(key, defaultValue) {
59
+ if (!lodash_1.default.has(process.env, key)) {
60
+ return defaultValue;
61
+ }
62
+ return new Date(getKey(key));
63
+ },
64
+ /**
65
+ * Gets a value from env that matches oneOf provided values
66
+ * @param {string} key
67
+ * @param {string[]} expectedValues
68
+ * @param {string|undefined} defaultValue
69
+ * @returns {string|undefined}
70
+ */
71
+ oneOf(key, expectedValues, defaultValue) {
72
+ if (!expectedValues) {
73
+ throw new Error(`env.oneOf requires expectedValues`);
74
+ }
75
+ if (defaultValue && !expectedValues.includes(defaultValue)) {
76
+ throw new Error(`env.oneOf requires defaultValue to be included in expectedValues`);
77
+ }
78
+ const rawValue = env(key, defaultValue);
79
+ return expectedValues.includes(rawValue) ? rawValue : defaultValue;
80
+ },
81
+ };
82
+ const env = Object.assign(envFn, utils);
83
+ exports.default = env;
84
+ //# sourceMappingURL=env-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-helper.js","sourceRoot":"","sources":["../src/env-helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import yup from 'yup';
2
+ import { HttpError } from 'http-errors';
3
+ declare class ApplicationError extends Error {
4
+ details: unknown;
5
+ constructor(message: string, details?: unknown);
6
+ }
7
+ declare class ValidationError extends ApplicationError {
8
+ constructor(message: string, details?: unknown);
9
+ }
10
+ declare class YupValidationError extends ValidationError {
11
+ constructor(yupError: yup.ValidationError, message?: string);
12
+ }
13
+ declare class PaginationError extends ApplicationError {
14
+ constructor(message: string, details?: unknown);
15
+ }
16
+ declare class NotFoundError extends ApplicationError {
17
+ constructor(message: string, details?: unknown);
18
+ }
19
+ declare class ForbiddenError extends ApplicationError {
20
+ constructor(message: string, details?: unknown);
21
+ }
22
+ declare class UnauthorizedError extends ApplicationError {
23
+ constructor(message: string, details?: unknown);
24
+ }
25
+ declare class RateLimitError extends ApplicationError {
26
+ constructor(message: string, details?: unknown);
27
+ }
28
+ declare class PayloadTooLargeError extends ApplicationError {
29
+ constructor(message: string, details?: unknown);
30
+ }
31
+ declare class PolicyError extends ForbiddenError {
32
+ constructor(message: string, details?: unknown);
33
+ }
34
+ declare class NotImplementedError extends ApplicationError {
35
+ constructor(message: string, details?: unknown);
36
+ }
37
+ export { HttpError, ApplicationError, ValidationError, YupValidationError, PaginationError, NotFoundError, ForbiddenError, UnauthorizedError, RateLimitError, PayloadTooLargeError, PolicyError, NotImplementedError, };