@strapi/utils 5.56.0 → 5.57.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 (149) hide show
  1. package/dist/async.js +2 -2
  2. package/dist/async.js.map +1 -1
  3. package/dist/async.mjs +1 -1
  4. package/dist/async.mjs.map +1 -1
  5. package/dist/content-types.d.ts.map +1 -1
  6. package/dist/content-types.js +8 -9
  7. package/dist/content-types.js.map +1 -1
  8. package/dist/content-types.mjs +6 -7
  9. package/dist/content-types.mjs.map +1 -1
  10. package/dist/convert-query-params.d.ts.map +1 -1
  11. package/dist/convert-query-params.js +33 -34
  12. package/dist/convert-query-params.js.map +1 -1
  13. package/dist/convert-query-params.mjs +23 -24
  14. package/dist/convert-query-params.mjs.map +1 -1
  15. package/dist/format-yup-error.js +3 -3
  16. package/dist/format-yup-error.js.map +1 -1
  17. package/dist/format-yup-error.mjs +1 -1
  18. package/dist/format-yup-error.mjs.map +1 -1
  19. package/dist/hooks.js +3 -3
  20. package/dist/hooks.js.map +1 -1
  21. package/dist/hooks.mjs +2 -2
  22. package/dist/hooks.mjs.map +1 -1
  23. package/dist/pagination.d.ts.map +1 -1
  24. package/dist/pagination.js +15 -18
  25. package/dist/pagination.js.map +1 -1
  26. package/dist/pagination.mjs +15 -18
  27. package/dist/pagination.mjs.map +1 -1
  28. package/dist/policy.d.ts +1 -1
  29. package/dist/policy.d.ts.map +1 -1
  30. package/dist/policy.js +1 -3
  31. package/dist/policy.js.map +1 -1
  32. package/dist/policy.mjs +1 -3
  33. package/dist/policy.mjs.map +1 -1
  34. package/dist/primitives/objects.d.ts +7 -1
  35. package/dist/primitives/objects.d.ts.map +1 -1
  36. package/dist/primitives/objects.js +5 -0
  37. package/dist/primitives/objects.js.map +1 -1
  38. package/dist/primitives/objects.mjs +5 -1
  39. package/dist/primitives/objects.mjs.map +1 -1
  40. package/dist/primitives/strings.d.ts.map +1 -1
  41. package/dist/primitives/strings.js +3 -7
  42. package/dist/primitives/strings.js.map +1 -1
  43. package/dist/primitives/strings.mjs +3 -7
  44. package/dist/primitives/strings.mjs.map +1 -1
  45. package/dist/provider-factory.js +4 -4
  46. package/dist/provider-factory.js.map +1 -1
  47. package/dist/provider-factory.mjs +1 -1
  48. package/dist/provider-factory.mjs.map +1 -1
  49. package/dist/relations.js +2 -2
  50. package/dist/relations.js.map +1 -1
  51. package/dist/relations.mjs +1 -1
  52. package/dist/relations.mjs.map +1 -1
  53. package/dist/sanitize/index.d.ts.map +1 -1
  54. package/dist/sanitize/index.js +8 -8
  55. package/dist/sanitize/index.js.map +1 -1
  56. package/dist/sanitize/index.mjs +7 -7
  57. package/dist/sanitize/index.mjs.map +1 -1
  58. package/dist/sanitize/sanitizers.js +10 -10
  59. package/dist/sanitize/sanitizers.js.map +1 -1
  60. package/dist/sanitize/sanitizers.mjs +4 -4
  61. package/dist/sanitize/sanitizers.mjs.map +1 -1
  62. package/dist/sanitize/visitors/remove-disallowed-fields.js +4 -4
  63. package/dist/sanitize/visitors/remove-disallowed-fields.js.map +1 -1
  64. package/dist/sanitize/visitors/remove-disallowed-fields.mjs +3 -3
  65. package/dist/sanitize/visitors/remove-disallowed-fields.mjs.map +1 -1
  66. package/dist/sanitize/visitors/remove-restricted-fields.js +2 -2
  67. package/dist/sanitize/visitors/remove-restricted-fields.js.map +1 -1
  68. package/dist/sanitize/visitors/remove-restricted-fields.mjs +2 -2
  69. package/dist/sanitize/visitors/remove-restricted-fields.mjs.map +1 -1
  70. package/dist/sanitize/visitors/remove-restricted-relations.js +9 -9
  71. package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -1
  72. package/dist/sanitize/visitors/remove-restricted-relations.mjs +4 -4
  73. package/dist/sanitize/visitors/remove-restricted-relations.mjs.map +1 -1
  74. package/dist/security.d.ts.map +1 -1
  75. package/dist/security.js +3 -3
  76. package/dist/security.js.map +1 -1
  77. package/dist/security.mjs +3 -3
  78. package/dist/security.mjs.map +1 -1
  79. package/dist/set-creator-fields.d.ts +4 -1
  80. package/dist/set-creator-fields.d.ts.map +1 -1
  81. package/dist/set-creator-fields.js +7 -4
  82. package/dist/set-creator-fields.js.map +1 -1
  83. package/dist/set-creator-fields.mjs +7 -4
  84. package/dist/set-creator-fields.mjs.map +1 -1
  85. package/dist/traverse/factory.js +8 -8
  86. package/dist/traverse/factory.js.map +1 -1
  87. package/dist/traverse/factory.mjs +8 -8
  88. package/dist/traverse/factory.mjs.map +1 -1
  89. package/dist/traverse/query-fields.js +7 -7
  90. package/dist/traverse/query-fields.js.map +1 -1
  91. package/dist/traverse/query-fields.mjs +3 -3
  92. package/dist/traverse/query-fields.mjs.map +1 -1
  93. package/dist/traverse/query-filters.js +12 -12
  94. package/dist/traverse/query-filters.js.map +1 -1
  95. package/dist/traverse/query-filters.mjs +7 -7
  96. package/dist/traverse/query-filters.mjs.map +1 -1
  97. package/dist/traverse/query-populate.d.ts.map +1 -1
  98. package/dist/traverse/query-populate.js +21 -21
  99. package/dist/traverse/query-populate.js.map +1 -1
  100. package/dist/traverse/query-populate.mjs +12 -12
  101. package/dist/traverse/query-populate.mjs.map +1 -1
  102. package/dist/traverse/query-sort.d.ts.map +1 -1
  103. package/dist/traverse/query-sort.js +16 -16
  104. package/dist/traverse/query-sort.js.map +1 -1
  105. package/dist/traverse/query-sort.mjs +6 -6
  106. package/dist/traverse/query-sort.mjs.map +1 -1
  107. package/dist/traverse-entity.d.ts.map +1 -1
  108. package/dist/traverse-entity.js +18 -18
  109. package/dist/traverse-entity.js.map +1 -1
  110. package/dist/traverse-entity.mjs +16 -16
  111. package/dist/traverse-entity.mjs.map +1 -1
  112. package/dist/validate/index.d.ts.map +1 -1
  113. package/dist/validate/index.js +5 -5
  114. package/dist/validate/index.js.map +1 -1
  115. package/dist/validate/index.mjs +3 -3
  116. package/dist/validate/index.mjs.map +1 -1
  117. package/dist/validate/utils.d.ts +2 -1
  118. package/dist/validate/utils.d.ts.map +1 -1
  119. package/dist/validate/utils.js +4 -4
  120. package/dist/validate/utils.js.map +1 -1
  121. package/dist/validate/utils.mjs +4 -4
  122. package/dist/validate/utils.mjs.map +1 -1
  123. package/dist/validate/validators.d.ts.map +1 -1
  124. package/dist/validate/validators.js +17 -9
  125. package/dist/validate/validators.js.map +1 -1
  126. package/dist/validate/validators.mjs +14 -6
  127. package/dist/validate/validators.mjs.map +1 -1
  128. package/dist/validate/visitors/throw-disallowed-fields.js +4 -4
  129. package/dist/validate/visitors/throw-disallowed-fields.js.map +1 -1
  130. package/dist/validate/visitors/throw-disallowed-fields.mjs +3 -3
  131. package/dist/validate/visitors/throw-disallowed-fields.mjs.map +1 -1
  132. package/dist/validate/visitors/throw-restricted-fields.js +2 -2
  133. package/dist/validate/visitors/throw-restricted-fields.js.map +1 -1
  134. package/dist/validate/visitors/throw-restricted-fields.mjs +2 -2
  135. package/dist/validate/visitors/throw-restricted-fields.mjs.map +1 -1
  136. package/dist/validate/visitors/throw-restricted-relations.js +6 -6
  137. package/dist/validate/visitors/throw-restricted-relations.js.map +1 -1
  138. package/dist/validate/visitors/throw-restricted-relations.mjs +2 -2
  139. package/dist/validate/visitors/throw-restricted-relations.mjs.map +1 -1
  140. package/dist/validators.js +3 -3
  141. package/dist/validators.js.map +1 -1
  142. package/dist/validators.mjs +3 -3
  143. package/dist/validators.mjs.map +1 -1
  144. package/dist/yup.d.ts.map +1 -1
  145. package/dist/yup.js +2 -3
  146. package/dist/yup.js.map +1 -1
  147. package/dist/yup.mjs +3 -4
  148. package/dist/yup.mjs.map +1 -1
  149. package/package.json +4 -4
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var _ = require('lodash');
4
- var fp = require('lodash/fp');
5
4
  var contentTypes = require('./content-types.js');
6
5
  var errors = require('./errors.js');
7
6
  var operators = require('./operators.js');
@@ -83,7 +82,7 @@ class InvalidPopulateError extends errors.ValidationError {
83
82
  }
84
83
  }
85
84
  function validateOrder(order) {
86
- if (!fp.isString(order) || ![
85
+ if (!_.isString(order) || ![
87
86
  'asc',
88
87
  'desc'
89
88
  ].includes(order.toLocaleLowerCase())) {
@@ -99,7 +98,7 @@ const convertCountQueryParams = (countQuery)=>{
99
98
  const convertOrderingQueryParams = (ordering)=>{
100
99
  return ordering;
101
100
  };
102
- const isStringArray = (value)=>fp.isArray(value) && value.every(fp.isString);
101
+ const isStringArray = (value)=>Array.isArray(value) && value.every(_.isString);
103
102
  const createTransformer = ({ getModel })=>{
104
103
  /**
105
104
  * Sort query parser
@@ -126,7 +125,7 @@ const createTransformer = ({ getModel })=>{
126
125
  if (!trimmed) {
127
126
  return {};
128
127
  }
129
- if (!fp.isString(trimmed)) {
128
+ if (!_.isString(trimmed)) {
130
129
  throw new errors.ValidationError('Invalid sort query');
131
130
  }
132
131
  // split field and order param with default order to ascending
@@ -173,7 +172,7 @@ const createTransformer = ({ getModel })=>{
173
172
  /**
174
173
  * Start query parser
175
174
  */ const convertStartQueryParams = (startQuery)=>{
176
- const startAsANumber = fp.toNumber(startQuery);
175
+ const startAsANumber = _.toNumber(startQuery);
177
176
  if (!___default.default.isInteger(startAsANumber) || startAsANumber < 0) {
178
177
  throw new errors.ValidationError(`convertStartQueryParams expected a positive integer got ${startAsANumber}`);
179
178
  }
@@ -182,7 +181,7 @@ const createTransformer = ({ getModel })=>{
182
181
  /**
183
182
  * Limit query parser
184
183
  */ const convertLimitQueryParams = (limitQuery)=>{
185
- const limitAsANumber = fp.toNumber(limitQuery);
184
+ const limitAsANumber = _.toNumber(limitQuery);
186
185
  if (!___default.default.isInteger(limitAsANumber) || limitAsANumber !== -1 && limitAsANumber < 0) {
187
186
  throw new errors.ValidationError(`convertLimitQueryParams expected a positive integer got ${limitAsANumber}`);
188
187
  }
@@ -192,23 +191,23 @@ const createTransformer = ({ getModel })=>{
192
191
  return limitAsANumber;
193
192
  };
194
193
  const convertPageQueryParams = (page)=>{
195
- const pageVal = fp.toNumber(page);
196
- if (!fp.isInteger(pageVal) || pageVal <= 0) {
194
+ const pageVal = _.toNumber(page);
195
+ if (!Number.isInteger(pageVal) || pageVal <= 0) {
197
196
  throw new errors.PaginationError(`Invalid 'page' parameter. Expected an integer > 0, received: ${page}`);
198
197
  }
199
198
  return pageVal;
200
199
  };
201
200
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
202
201
  const convertPageSizeQueryParams = (pageSize, _page)=>{
203
- const pageSizeVal = fp.toNumber(pageSize);
204
- if (!fp.isInteger(pageSizeVal) || pageSizeVal <= 0) {
202
+ const pageSizeVal = _.toNumber(pageSize);
203
+ if (!Number.isInteger(pageSizeVal) || pageSizeVal <= 0) {
205
204
  throw new errors.PaginationError(`Invalid 'pageSize' parameter. Expected an integer > 0, received: ${pageSize}`);
206
205
  }
207
206
  return pageSizeVal;
208
207
  };
209
208
  const validatePaginationParams = (page, pageSize, start, limit)=>{
210
- const isPagePagination = !fp.isNil(page) || !fp.isNil(pageSize);
211
- const isOffsetPagination = !fp.isNil(start) || !fp.isNil(limit);
209
+ const isPagePagination = page != null || pageSize != null;
210
+ const isOffsetPagination = start != null || limit != null;
212
211
  if (isPagePagination && isOffsetPagination) {
213
212
  throw new errors.PaginationError('Invalid pagination attributes. The page parameters are incorrect and must be in the pagination object');
214
213
  }
@@ -236,7 +235,7 @@ const createTransformer = ({ getModel })=>{
236
235
  throw new InvalidPopulateError();
237
236
  };
238
237
  const hasPopulateFragmentDefined = (populate)=>{
239
- return typeof populate === 'object' && 'on' in populate && !fp.isNil(populate.on);
238
+ return typeof populate === 'object' && 'on' in populate && populate.on != null;
240
239
  };
241
240
  const hasCountDefined = (populate)=>{
242
241
  return typeof populate === 'object' && 'count' in populate && typeof populate.count === 'boolean';
@@ -289,7 +288,7 @@ const createTransformer = ({ getModel })=>{
289
288
  * Validate nested population queries in the context of a polymorphic attribute (dynamic zone, morph relation).
290
289
  *
291
290
  * If 'populate' exists in subPopulate, its value should be constrained to a wildcard ('*').
292
- */ if ('populate' in subPopulate && !fp.isNil(subPopulate.populate) && subPopulate.populate !== '*') {
291
+ */ if ('populate' in subPopulate && subPopulate.populate != null && subPopulate.populate !== '*') {
293
292
  throw new errors.ValidationError(`Invalid nested population query detected. When using 'populate' within polymorphic structures, ` + `its value must be '*' to indicate all second level links. Specific field targeting is not supported here. ` + `Consider using the fragment API for more granular population control.`);
294
293
  }
295
294
  // TODO: Remove the possibility to have multiple properties at the same time (on/count/populate)
@@ -387,16 +386,16 @@ const createTransformer = ({ getModel })=>{
387
386
  query.ordering = convertOrderingQueryParams(ordering);
388
387
  }
389
388
  validatePaginationParams(page, pageSize, start, limit);
390
- if (!fp.isNil(page)) {
389
+ if (page != null) {
391
390
  query.page = convertPageQueryParams(page);
392
391
  }
393
- if (!fp.isNil(pageSize)) {
392
+ if (pageSize != null) {
394
393
  query.pageSize = convertPageSizeQueryParams(pageSize);
395
394
  }
396
- if (!fp.isNil(start)) {
395
+ if (start != null) {
397
396
  query.offset = convertStartQueryParams(start);
398
397
  }
399
- if (!fp.isNil(limit)) {
398
+ if (limit != null) {
400
399
  query.limit = convertLimitQueryParams(limit);
401
400
  }
402
401
  return query;
@@ -423,7 +422,7 @@ const createTransformer = ({ getModel })=>{
423
422
  }
424
423
  if (isStringArray(fields)) {
425
424
  // map convert
426
- const fieldsValues = fields.flatMap((value)=>convertFieldsQueryParams(value, schema, depth + 1)).filter((v)=>!fp.isNil(v));
425
+ const fieldsValues = fields.flatMap((value)=>convertFieldsQueryParams(value, schema, depth + 1)).filter((v)=>v != null);
427
426
  // NOTE: Only include the doc id if it's a content type
428
427
  if (schema?.modelType === 'contentType') {
429
428
  return ___default.default.uniq([
@@ -454,18 +453,18 @@ const createTransformer = ({ getModel })=>{
454
453
  const convertFiltersQueryParams = (filters, schema)=>{
455
454
  // Filters need to be either an array or an object
456
455
  // Here we're only checking for 'object' type since typeof [] => object and typeof {} => object
457
- if (!fp.isObject(filters)) {
456
+ if (!_.isObject(filters)) {
458
457
  throw new errors.ValidationError('The filters parameter must be an object or an array');
459
458
  }
460
459
  // Don't mutate the original object
461
- const filtersCopy = fp.cloneDeep(filters);
460
+ const filtersCopy = _.cloneDeep(filters);
462
461
  return convertAndSanitizeFilters(filtersCopy, schema);
463
462
  };
464
463
  const convertAndSanitizeFilters = (filters, schema)=>{
465
464
  if (Array.isArray(filters)) {
466
465
  return filters// Sanitize each filter
467
466
  .map((filter)=>convertAndSanitizeFilters(filter, schema))// Filter out empty filters
468
- .filter((filter)=>!isPlainObject(filter) || !fp.isEmpty(filter));
467
+ .filter((filter)=>!isPlainObject(filter) || !_.isEmpty(filter));
469
468
  }
470
469
  if (!isPlainObject(filters)) {
471
470
  return filters;
@@ -473,7 +472,7 @@ const createTransformer = ({ getModel })=>{
473
472
  const removeOperator = (operator)=>delete filters[operator];
474
473
  // Here, `key` can either be an operator or an attribute name
475
474
  for (const [key, value] of Object.entries(filters)){
476
- const attribute = fp.get(key, schema?.attributes);
475
+ const attribute = _.get(schema?.attributes, key);
477
476
  const validKey = operators.isOperator(key) || isValidSchemaAttribute(key, schema);
478
477
  if (!validKey) {
479
478
  removeOperator(key);
@@ -502,11 +501,11 @@ const createTransformer = ({ getModel })=>{
502
501
  value: filters[key],
503
502
  forceCast: true
504
503
  });
505
- } else if (fp.isObject(value)) {
504
+ } else if (_.isObject(value)) {
506
505
  filters[key] = convertAndSanitizeFilters(value, schema);
507
506
  }
508
507
  // Remove empty objects & arrays
509
- if (isPlainObject(filters[key]) && fp.isEmpty(filters[key])) {
508
+ if (isPlainObject(filters[key]) && _.isEmpty(filters[key])) {
510
509
  removeOperator(key);
511
510
  }
512
511
  }
@@ -532,33 +531,33 @@ const createTransformer = ({ getModel })=>{
532
531
  const schema = getModel(uid);
533
532
  const query = {};
534
533
  const { _q: searchQuery, sort, filters, fields, populate, page, pageSize, start, limit, status, ...rest } = params;
535
- if (!fp.isNil(status)) {
534
+ if (status != null) {
536
535
  convertStatusParams(status, query);
537
536
  }
538
- if (!fp.isNil(searchQuery)) {
537
+ if (searchQuery != null) {
539
538
  query._q = searchQuery;
540
539
  }
541
540
  applySortToQuery(query, sort);
542
- if (!fp.isNil(filters)) {
541
+ if (filters != null) {
543
542
  query.where = convertFiltersQueryParams(filters, schema);
544
543
  }
545
- if (!fp.isNil(fields)) {
544
+ if (fields != null) {
546
545
  query.select = convertFieldsQueryParams(fields, schema);
547
546
  }
548
- if (!fp.isNil(populate)) {
547
+ if (populate != null) {
549
548
  query.populate = convertPopulateQueryParams(populate, schema);
550
549
  }
551
550
  validatePaginationParams(page, pageSize, start, limit);
552
- if (!fp.isNil(page)) {
551
+ if (page != null) {
553
552
  query.page = convertPageQueryParams(page);
554
553
  }
555
- if (!fp.isNil(pageSize)) {
554
+ if (pageSize != null) {
556
555
  query.pageSize = convertPageSizeQueryParams(pageSize);
557
556
  }
558
- if (!fp.isNil(start)) {
557
+ if (start != null) {
559
558
  query.offset = convertStartQueryParams(start);
560
559
  }
561
- if (!fp.isNil(limit)) {
560
+ if (limit != null) {
562
561
  query.limit = convertLimitQueryParams(limit);
563
562
  }
564
563
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"convert-query-params.js","sources":["../src/convert-query-params.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\n\n/**\n * Converts the standard Strapi REST query params to a more usable format for querying\n * You can read more here: https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest-api.html#filters\n */\n\nimport _ from 'lodash';\nimport {\n cloneDeep,\n get,\n isArray,\n isEmpty,\n isInteger,\n isNil,\n isObject,\n isString,\n toNumber,\n} from 'lodash/fp';\nimport {\n constants,\n hasDraftAndPublish,\n isDynamicZoneAttribute,\n isMorphToRelationalAttribute,\n} from './content-types';\nimport { PaginationError, ValidationError } from './errors';\nimport { isOperator } from './operators';\n\nimport parseType from './parse-type';\nimport type { PublicationFilterMode } from './publication-filter';\nimport {\n getMeaningfulSortSegments,\n hasSort,\n type SortParams,\n type SortParamsObject,\n} from './sort-query';\nimport { Model } from './types';\n\nexport type { SortParams, SortParamsObject } from './sort-query';\n\nconst { ID_ATTRIBUTE, DOC_ID_ATTRIBUTE, PUBLISHED_AT_ATTRIBUTE } = constants;\n\ntype SortOrder = 'asc' | 'desc';\n\nexport interface SortMap {\n [key: string]: SortOrder | SortMap;\n}\n\ntype FieldsParams = string | string[];\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => _.isPlainObject(value);\n\nconst hasOwnProperty = (object: object, key: PropertyKey): boolean =>\n Object.prototype.hasOwnProperty.call(object, key);\n\nconst setSortMapValue = (field: string, order: SortOrder): SortMap => {\n const path = _.toPath(field);\n const sortMap: SortMap = {};\n let current: SortMap | SortMap[] = sortMap;\n\n for (const [index, key] of path.entries()) {\n const isLastSegment = index === path.length - 1;\n\n if (key === 'prototype' || (key in current && !hasOwnProperty(current, key))) {\n throw new ValidationError('Invalid sort query');\n }\n\n if (isLastSegment) {\n Object.defineProperty(current, key, {\n configurable: true,\n enumerable: true,\n value: order,\n writable: true,\n });\n continue;\n }\n\n const nextValue = /^\\d+$/.test(path[index + 1]) ? [] : {};\n\n Object.defineProperty(current, key, {\n configurable: true,\n enumerable: true,\n value: nextValue,\n writable: true,\n });\n\n current = nextValue;\n }\n\n return sortMap;\n};\n\nfunction isEmptySortMap(sortMap: SortMap): boolean {\n const keys = Object.keys(sortMap);\n\n if (keys.length === 0) {\n return true;\n }\n\n return keys.every((key) => {\n const value = sortMap[key];\n\n if (typeof value === 'string') {\n return value.trim().length === 0;\n }\n\n if (isPlainObject(value)) {\n return isEmptySortMap(value as SortMap);\n }\n\n return true;\n });\n}\n\n/** Drops empty sort maps so a trailing comma does not leave a truthy but meaningless `orderBy`. */\nfunction normalizeOrderBy(orderBy: OrderByQuery): OrderByQuery | undefined {\n if (Array.isArray(orderBy)) {\n const filtered = orderBy.filter((sortMap) => !isEmptySortMap(sortMap));\n\n return filtered.length > 0 ? filtered : undefined;\n }\n\n return isEmptySortMap(orderBy) ? undefined : orderBy;\n}\n\ntype FiltersParams = unknown;\n\nexport interface PopulateAttributesParams {\n [key: string]: boolean | PopulateObjectParams;\n}\n\nexport interface PopulateObjectParams {\n sort?: SortParams;\n fields?: FieldsParams;\n filters?: FiltersParams;\n populate?: string | string[] | PopulateAttributesParams;\n on?: PopulateAttributesParams;\n count?: boolean;\n ordering?: unknown;\n _q?: string;\n limit?: number | string;\n start?: number | string;\n page?: number | string;\n pageSize?: number | string;\n}\n\ntype PopulateParams = string | string[] | PopulateAttributesParams;\n\nexport interface Params {\n sort?: SortParams;\n fields?: FieldsParams;\n filters?: FiltersParams;\n populate?: PopulateParams;\n count?: boolean;\n ordering?: unknown;\n _q?: string;\n limit?: number | string;\n start?: number | string;\n page?: number | string;\n pageSize?: number | string;\n status?: 'draft' | 'published';\n publicationFilter?: PublicationFilterMode;\n /**\n * @deprecated Replaced by `publicationFilter` (`never-published`, `has-published-version`, …).\n * Retained for backward compatibility with existing REST and GraphQL clients.\n */\n hasPublishedVersion?: boolean | 'true' | 'false';\n}\n\ntype FiltersQuery = (options: { meta: Model }) => WhereQuery | undefined;\ntype OrderByQuery = SortMap | SortMap[];\ntype SelectQuery = string | string[];\n\nexport interface WhereQuery {\n [key: string]: any;\n}\n\ntype PopulateQuery =\n | boolean\n | string[]\n | {\n [key: string]: PopulateQuery;\n };\n\nexport interface Query {\n orderBy?: OrderByQuery;\n select?: SelectQuery;\n where?: WhereQuery;\n // NOTE: those are internal DB filters do not modify\n filters?: FiltersQuery;\n populate?: PopulateQuery;\n count?: boolean;\n ordering?: unknown;\n _q?: string;\n limit?: number;\n offset?: number;\n page?: number;\n pageSize?: number;\n}\n\nclass InvalidOrderError extends ValidationError {\n constructor() {\n super('Invalid order. order can only be one of asc|desc|ASC|DESC');\n }\n}\n\nclass InvalidSortError extends ValidationError {\n constructor() {\n super(\n 'Invalid sort parameter. Expected a string, an array of strings, a sort object or an array of sort objects'\n );\n }\n}\n\nclass InvalidPopulateError extends ValidationError {\n constructor() {\n super('Invalid populate parameter. Expected a string, an array of strings, a populate object');\n }\n}\n\nfunction validateOrder(order: string): asserts order is SortOrder {\n if (!isString(order) || !['asc', 'desc'].includes(order.toLocaleLowerCase())) {\n throw new InvalidOrderError();\n }\n}\n\nconst convertCountQueryParams = (countQuery: unknown): boolean => {\n return parseType({ type: 'boolean', value: countQuery });\n};\n\nconst convertOrderingQueryParams = (ordering: unknown) => {\n return ordering;\n};\n\nconst isStringArray = (value: unknown): value is string[] =>\n isArray(value) && value.every(isString);\n\ninterface TransformerOptions {\n getModel: (uid: string) => Model | undefined;\n}\n\nconst createTransformer = ({ getModel }: TransformerOptions) => {\n /**\n * Sort query parser\n */\n const convertSortQueryParams = (sortQuery: SortParams): OrderByQuery => {\n if (typeof sortQuery === 'string') {\n return convertStringSortQueryParam(sortQuery);\n }\n\n if (isStringArray(sortQuery)) {\n return sortQuery.flatMap((sortValue: string) => convertStringSortQueryParam(sortValue));\n }\n\n if (Array.isArray(sortQuery)) {\n return sortQuery.map((sortValue) => convertNestedSortQueryParam(sortValue));\n }\n\n if (isPlainObject(sortQuery)) {\n return convertNestedSortQueryParam(sortQuery);\n }\n\n throw new InvalidSortError();\n };\n\n const convertStringSortQueryParam = (sortQuery: string): SortMap[] => {\n return getMeaningfulSortSegments(sortQuery).map((segment) =>\n convertSingleSortQueryParam(segment)\n );\n };\n\n const convertSingleSortQueryParam = (sortQuery: string): SortMap => {\n const trimmed = sortQuery.trim();\n\n if (!trimmed) {\n return {};\n }\n\n if (!isString(trimmed)) {\n throw new ValidationError('Invalid sort query');\n }\n\n // split field and order param with default order to ascending\n const [rawField, order = 'asc'] = trimmed.split(':');\n const field = rawField.trim();\n\n if (field.length === 0) {\n throw new ValidationError('Field cannot be empty');\n }\n\n validateOrder(order.trim());\n\n // TODO: field should be a valid path on an object model\n\n return setSortMapValue(field, order.trim() as SortOrder);\n };\n\n const convertNestedSortQueryParam = (sortQuery: SortParamsObject): SortMap => {\n const transformedSort: SortMap = {};\n for (const field of Object.keys(sortQuery)) {\n const order = sortQuery[field];\n\n // this is a deep sort\n if (isPlainObject(order)) {\n const nested = convertNestedSortQueryParam(order as SortParamsObject);\n\n if (!isEmptySortMap(nested)) {\n transformedSort[field] = nested;\n }\n } else if (typeof order === 'string') {\n const trimmedOrder = order.trim();\n\n if (trimmedOrder.length > 0) {\n validateOrder(trimmedOrder);\n transformedSort[field] = trimmedOrder;\n }\n } else {\n throw new ValidationError(\n `Invalid sort type expected object or string got ${typeof order}`\n );\n }\n }\n\n return transformedSort;\n };\n\n const applySortToQuery = (query: Query, sortParam?: SortParams | null) => {\n if (!hasSort(sortParam)) {\n return;\n }\n\n const orderBy = normalizeOrderBy(convertSortQueryParams(sortParam));\n\n if (orderBy !== undefined) {\n query.orderBy = orderBy;\n }\n };\n\n /**\n * Start query parser\n */\n const convertStartQueryParams = (startQuery: unknown): number => {\n const startAsANumber = toNumber(startQuery);\n\n if (!_.isInteger(startAsANumber) || startAsANumber < 0) {\n throw new ValidationError(\n `convertStartQueryParams expected a positive integer got ${startAsANumber}`\n );\n }\n\n return startAsANumber;\n };\n\n /**\n * Limit query parser\n */\n const convertLimitQueryParams = (limitQuery: unknown): number | undefined => {\n const limitAsANumber = toNumber(limitQuery);\n\n if (!_.isInteger(limitAsANumber) || (limitAsANumber !== -1 && limitAsANumber < 0)) {\n throw new ValidationError(\n `convertLimitQueryParams expected a positive integer got ${limitAsANumber}`\n );\n }\n\n if (limitAsANumber === -1) {\n return undefined;\n }\n\n return limitAsANumber;\n };\n\n const convertPageQueryParams = (page: unknown): number => {\n const pageVal = toNumber(page);\n\n if (!isInteger(pageVal) || pageVal <= 0) {\n throw new PaginationError(\n `Invalid 'page' parameter. Expected an integer > 0, received: ${page}`\n );\n }\n\n return pageVal;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const convertPageSizeQueryParams = (pageSize: unknown, _page: unknown): number => {\n const pageSizeVal = toNumber(pageSize);\n\n if (!isInteger(pageSizeVal) || pageSizeVal <= 0) {\n throw new PaginationError(\n `Invalid 'pageSize' parameter. Expected an integer > 0, received: ${pageSize}`\n );\n }\n\n return pageSizeVal;\n };\n\n const validatePaginationParams = (\n page: unknown,\n pageSize: unknown,\n start: unknown,\n limit: unknown\n ) => {\n const isPagePagination = !isNil(page) || !isNil(pageSize);\n const isOffsetPagination = !isNil(start) || !isNil(limit);\n\n if (isPagePagination && isOffsetPagination) {\n throw new PaginationError(\n 'Invalid pagination attributes. The page parameters are incorrect and must be in the pagination object'\n );\n }\n };\n\n // NOTE: we could support foo.* or foo.bar.* etc later on\n const convertPopulateQueryParams = (\n populate: PopulateParams,\n schema?: Model,\n depth = 0\n ): PopulateQuery => {\n if (depth === 0 && populate === '*') {\n return true;\n }\n\n if (typeof populate === 'string') {\n return populate.split(',').map((value) => _.trim(value));\n }\n\n if (Array.isArray(populate)) {\n // map convert\n return _.uniq(\n populate.flatMap((value) => {\n if (typeof value !== 'string') {\n throw new InvalidPopulateError();\n }\n\n return value.split(',').map((value) => _.trim(value));\n })\n );\n }\n\n if (_.isPlainObject(populate)) {\n return convertPopulateObject(populate, schema);\n }\n\n throw new InvalidPopulateError();\n };\n\n const hasPopulateFragmentDefined = (\n populate: PopulateObjectParams\n ): populate is PopulateObjectParams & Required<Pick<PopulateObjectParams, 'on'>> => {\n return typeof populate === 'object' && 'on' in populate && !isNil(populate.on);\n };\n\n const hasCountDefined = (\n populate: PopulateObjectParams\n ): populate is PopulateObjectParams & { count: boolean } => {\n return (\n typeof populate === 'object' && 'count' in populate && typeof populate.count === 'boolean'\n );\n };\n\n const convertPopulateObject = (populate: PopulateAttributesParams, schema?: Model) => {\n if (!schema) {\n return {};\n }\n\n const { attributes } = schema;\n return Object.entries(populate).reduce((acc, [key, subPopulate]) => {\n // Try converting strings to regular booleans if possible\n if (_.isString(subPopulate)) {\n try {\n const subPopulateAsBoolean = parseType({ type: 'boolean', value: subPopulate });\n // Only true is accepted as a boolean populate value\n return subPopulateAsBoolean ? { ...acc, [key]: true } : acc;\n } catch {\n // ignore\n }\n }\n\n if (_.isBoolean(subPopulate)) {\n // Only true is accepted as a boolean populate value\n return subPopulate === true ? { ...acc, [key]: true } : acc;\n }\n\n const attribute = attributes[key];\n\n if (!attribute) {\n return acc;\n }\n\n // Allow adding an 'on' strategy to populate queries for morphTo relations and dynamic zones\n const isMorphLikeRelationalAttribute =\n isDynamicZoneAttribute(attribute) || isMorphToRelationalAttribute(attribute);\n\n if (isMorphLikeRelationalAttribute) {\n const hasInvalidProperties = Object.keys(subPopulate).some(\n (key) => !['populate', 'on', 'count'].includes(key)\n );\n\n if (hasInvalidProperties) {\n throw new ValidationError(\n `Invalid nested populate for ${schema.info?.singularName}.${key} (${schema.uid}). Expected a fragment (\"on\") or \"count\" but found ${JSON.stringify(subPopulate)}`\n );\n }\n\n /**\n * Validate nested population queries in the context of a polymorphic attribute (dynamic zone, morph relation).\n *\n * If 'populate' exists in subPopulate, its value should be constrained to a wildcard ('*').\n */\n if (\n 'populate' in subPopulate &&\n !isNil(subPopulate.populate) &&\n subPopulate.populate !== '*'\n ) {\n throw new ValidationError(\n `Invalid nested population query detected. When using 'populate' within polymorphic structures, ` +\n `its value must be '*' to indicate all second level links. Specific field targeting is not supported here. ` +\n `Consider using the fragment API for more granular population control.`\n );\n }\n\n // TODO: Remove the possibility to have multiple properties at the same time (on/count/populate)\n const newSubPopulate = {};\n\n // case: { populate: '*' }\n if ('populate' in subPopulate && subPopulate.populate === '*') {\n Object.assign(newSubPopulate, { populate: true });\n }\n\n // case: { on: { <clauses> } }\n if (hasPopulateFragmentDefined(subPopulate)) {\n // If the fragment API is used, it applies the transformation to every\n // sub-populate, then assign the result to the new sub-populate\n Object.assign(newSubPopulate, {\n on: Object.entries(subPopulate.on).reduce(\n (acc, [type, typeSubPopulate]) => ({\n ...acc,\n [type]: convertNestedPopulate(typeSubPopulate, getModel(type)),\n }),\n {}\n ),\n });\n }\n\n // case: { count: true | false }\n if (hasCountDefined(subPopulate)) {\n Object.assign(newSubPopulate, { count: subPopulate.count });\n }\n\n return { ...acc, [key]: newSubPopulate };\n }\n\n // Edge case when trying to use the fragment ('on') on a non-morph like attribute\n if (!isMorphLikeRelationalAttribute && hasPopulateFragmentDefined(subPopulate)) {\n throw new ValidationError(\n `Using fragments is not permitted to populate \"${key}\" in \"${schema.uid}\"`\n );\n }\n\n // NOTE: Retrieve the target schema UID.\n // Only handles basic relations, medias and component since it's not possible\n // to populate with options for a dynamic zone or a polymorphic relation\n let targetSchemaUID;\n\n if (attribute.type === 'relation') {\n targetSchemaUID = attribute.target;\n } else if (attribute.type === 'component') {\n targetSchemaUID = attribute.component;\n } else if (attribute.type === 'media') {\n targetSchemaUID = 'plugin::upload.file';\n } else {\n return acc;\n }\n\n const targetSchema = getModel(targetSchemaUID!);\n\n // ignore the sub-populate for the current key if there is no schema associated\n if (!targetSchema) {\n return acc;\n }\n\n const populateObject = convertNestedPopulate(subPopulate, targetSchema);\n\n if (!populateObject) {\n return acc;\n }\n\n return {\n ...acc,\n [key]: populateObject,\n };\n }, {});\n };\n\n const convertNestedPopulate = (subPopulate: boolean | PopulateObjectParams, schema?: Model) => {\n if (_.isString(subPopulate)) {\n return parseType({ type: 'boolean', value: subPopulate, forceCast: true });\n }\n\n if (_.isBoolean(subPopulate)) {\n return subPopulate;\n }\n\n if (!isPlainObject(subPopulate)) {\n throw new ValidationError(`Invalid nested populate. Expected '*' or an object`);\n }\n\n const { sort, filters, fields, populate, count, ordering, page, pageSize, start, limit } =\n subPopulate as PopulateObjectParams;\n\n const query: Query = {};\n\n applySortToQuery(query, sort);\n\n if (filters) {\n query.where = convertFiltersQueryParams(filters, schema);\n }\n\n if (fields) {\n query.select = convertFieldsQueryParams(fields, schema);\n }\n\n if (populate) {\n query.populate = convertPopulateQueryParams(populate, schema);\n }\n\n if (count) {\n query.count = convertCountQueryParams(count);\n }\n\n if (ordering) {\n query.ordering = convertOrderingQueryParams(ordering);\n }\n\n validatePaginationParams(page, pageSize, start, limit);\n\n if (!isNil(page)) {\n query.page = convertPageQueryParams(page);\n }\n\n if (!isNil(pageSize)) {\n query.pageSize = convertPageSizeQueryParams(pageSize, page);\n }\n\n if (!isNil(start)) {\n query.offset = convertStartQueryParams(start);\n }\n\n if (!isNil(limit)) {\n query.limit = convertLimitQueryParams(limit);\n }\n\n return query;\n };\n\n // TODO: ensure field is valid in content types (will probably have to check strapi.contentTypes since it can be a string.path)\n const convertFieldsQueryParams = (\n fields: FieldsParams,\n schema?: Model,\n depth = 0\n ): SelectQuery | undefined => {\n if (depth === 0 && fields === '*') {\n return undefined;\n }\n\n if (typeof fields === 'string') {\n const fieldsValues = fields.split(',').map((value) => _.trim(value));\n\n // NOTE: Only include the doc id if it's a content type\n if (schema?.modelType === 'contentType') {\n return _.uniq([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE, ...fieldsValues]);\n }\n return _.uniq([ID_ATTRIBUTE, ...fieldsValues]);\n }\n\n if (isStringArray(fields)) {\n // map convert\n const fieldsValues = fields\n .flatMap((value) => convertFieldsQueryParams(value, schema, depth + 1))\n .filter((v) => !isNil(v)) as string[];\n\n // NOTE: Only include the doc id if it's a content type\n if (schema?.modelType === 'contentType') {\n return _.uniq([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE, ...fieldsValues]);\n }\n return _.uniq([ID_ATTRIBUTE, ...fieldsValues]);\n }\n\n throw new ValidationError('Invalid fields parameter. Expected a string or an array of strings');\n };\n\n const isValidSchemaAttribute = (key: string, schema?: Model) => {\n if ([DOC_ID_ATTRIBUTE, ID_ATTRIBUTE].includes(key)) {\n return true;\n }\n\n if (!schema) {\n return false;\n }\n\n return Object.keys(schema.attributes).includes(key);\n };\n\n const convertFiltersQueryParams = (filters: FiltersParams, schema?: Model): WhereQuery => {\n // Filters need to be either an array or an object\n // Here we're only checking for 'object' type since typeof [] => object and typeof {} => object\n if (!isObject(filters)) {\n throw new ValidationError('The filters parameter must be an object or an array');\n }\n\n // Don't mutate the original object\n const filtersCopy = cloneDeep(filters);\n\n return convertAndSanitizeFilters(filtersCopy, schema);\n };\n\n const convertAndSanitizeFilters = (filters: FiltersParams, schema?: Model): WhereQuery => {\n if (Array.isArray(filters)) {\n return (\n filters\n // Sanitize each filter\n .map((filter) => convertAndSanitizeFilters(filter, schema))\n // Filter out empty filters\n .filter((filter) => !isPlainObject(filter) || !isEmpty(filter))\n );\n }\n\n if (!isPlainObject(filters)) {\n return filters as WhereQuery;\n }\n\n const removeOperator = (operator: string) => delete filters[operator];\n\n // Here, `key` can either be an operator or an attribute name\n for (const [key, value] of Object.entries(filters)) {\n const attribute = get(key, schema?.attributes);\n const validKey = isOperator(key) || isValidSchemaAttribute(key, schema);\n\n if (!validKey) {\n removeOperator(key);\n }\n // Handle attributes\n else if (attribute) {\n // Relations\n if (attribute.type === 'relation') {\n filters[key] = convertAndSanitizeFilters(value, getModel(attribute.target!));\n }\n\n // Components\n else if (attribute.type === 'component') {\n filters[key] = convertAndSanitizeFilters(value, getModel(attribute.component));\n }\n\n // Media\n else if (attribute.type === 'media') {\n filters[key] = convertAndSanitizeFilters(value, getModel('plugin::upload.file'));\n }\n\n // Dynamic Zones\n else if (attribute.type === 'dynamiczone') {\n removeOperator(key);\n }\n\n // Password attributes\n else if (attribute.type === 'password') {\n // Always remove password attributes from filters object\n removeOperator(key);\n }\n\n // Scalar attributes\n else {\n filters[key] = convertAndSanitizeFilters(value, schema);\n }\n }\n\n // Handle operators\n else if (['$null', '$notNull'].includes(key)) {\n filters[key] = parseType({ type: 'boolean', value: filters[key], forceCast: true });\n } else if (isObject(value)) {\n filters[key] = convertAndSanitizeFilters(value, schema);\n }\n\n // Remove empty objects & arrays\n if (isPlainObject(filters[key]) && isEmpty(filters[key])) {\n removeOperator(key);\n }\n }\n\n return filters;\n };\n\n const convertStatusParams = (status?: 'draft' | 'published', query: Query = {}) => {\n // NOTE: this is the query layer filters not the document/entity service filters\n query.filters = ({ meta }: { meta: Model }) => {\n const contentType = getModel(meta.uid);\n\n // Ignore if target model has disabled DP, as it doesn't make sense to filter by its status\n if (!contentType || !hasDraftAndPublish(contentType)) {\n return {};\n }\n\n return { [PUBLISHED_AT_ATTRIBUTE]: { $null: status === 'draft' } };\n };\n };\n\n const transformQueryParams = (uid: string, params: Params): Query => {\n // NOTE: can be a CT, a Compo or nothing in the case of polymorphism (DZ & morph relations)\n const schema = getModel(uid);\n\n const query: Query = {};\n\n const {\n _q: searchQuery,\n sort,\n filters,\n fields,\n populate,\n page,\n pageSize,\n start,\n limit,\n status,\n ...rest\n } = params;\n\n if (!isNil(status)) {\n convertStatusParams(status, query);\n }\n\n if (!isNil(searchQuery)) {\n query._q = searchQuery;\n }\n\n applySortToQuery(query, sort);\n\n if (!isNil(filters)) {\n query.where = convertFiltersQueryParams(filters, schema);\n }\n\n if (!isNil(fields)) {\n query.select = convertFieldsQueryParams(fields, schema);\n }\n\n if (!isNil(populate)) {\n query.populate = convertPopulateQueryParams(populate, schema);\n }\n\n validatePaginationParams(page, pageSize, start, limit);\n\n if (!isNil(page)) {\n query.page = convertPageQueryParams(page);\n }\n\n if (!isNil(pageSize)) {\n query.pageSize = convertPageSizeQueryParams(pageSize, page);\n }\n\n if (!isNil(start)) {\n query.offset = convertStartQueryParams(start);\n }\n\n if (!isNil(limit)) {\n query.limit = convertLimitQueryParams(limit);\n }\n\n return {\n ...rest,\n ...query,\n };\n };\n\n return {\n private_convertSortQueryParams: convertSortQueryParams,\n private_convertStartQueryParams: convertStartQueryParams,\n private_convertLimitQueryParams: convertLimitQueryParams,\n private_convertPopulateQueryParams: convertPopulateQueryParams,\n private_convertFiltersQueryParams: convertFiltersQueryParams,\n private_convertFieldsQueryParams: convertFieldsQueryParams,\n transformQueryParams,\n };\n};\n\nexport { createTransformer };\n"],"names":["ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","constants","isPlainObject","value","_","hasOwnProperty","object","key","Object","prototype","call","setSortMapValue","field","order","path","toPath","sortMap","current","index","entries","isLastSegment","length","ValidationError","defineProperty","configurable","enumerable","writable","nextValue","test","isEmptySortMap","keys","every","trim","normalizeOrderBy","orderBy","Array","isArray","filtered","filter","undefined","InvalidOrderError","InvalidSortError","InvalidPopulateError","validateOrder","isString","includes","toLocaleLowerCase","convertCountQueryParams","countQuery","parseType","type","convertOrderingQueryParams","ordering","isStringArray","createTransformer","getModel","convertSortQueryParams","sortQuery","convertStringSortQueryParam","flatMap","sortValue","map","convertNestedSortQueryParam","getMeaningfulSortSegments","segment","convertSingleSortQueryParam","trimmed","rawField","split","transformedSort","nested","trimmedOrder","applySortToQuery","query","sortParam","hasSort","convertStartQueryParams","startQuery","startAsANumber","toNumber","isInteger","convertLimitQueryParams","limitQuery","limitAsANumber","convertPageQueryParams","page","pageVal","PaginationError","convertPageSizeQueryParams","pageSize","_page","pageSizeVal","validatePaginationParams","start","limit","isPagePagination","isNil","isOffsetPagination","convertPopulateQueryParams","populate","schema","depth","uniq","convertPopulateObject","hasPopulateFragmentDefined","on","hasCountDefined","count","attributes","reduce","acc","subPopulate","subPopulateAsBoolean","isBoolean","attribute","isMorphLikeRelationalAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","hasInvalidProperties","some","info","singularName","uid","JSON","stringify","newSubPopulate","assign","typeSubPopulate","convertNestedPopulate","targetSchemaUID","target","component","targetSchema","populateObject","forceCast","sort","filters","fields","where","convertFiltersQueryParams","select","convertFieldsQueryParams","offset","fieldsValues","modelType","v","isValidSchemaAttribute","isObject","filtersCopy","cloneDeep","convertAndSanitizeFilters","isEmpty","removeOperator","operator","get","validKey","isOperator","convertStatusParams","status","meta","contentType","hasDraftAndPublish","$null","transformQueryParams","params","_q","searchQuery","rest","private_convertSortQueryParams","private_convertStartQueryParams","private_convertLimitQueryParams","private_convertPopulateQueryParams","private_convertFiltersQueryParams","private_convertFieldsQueryParams"],"mappings":"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"}
1
+ {"version":3,"file":"convert-query-params.js","sources":["../src/convert-query-params.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\n\n/**\n * Converts the standard Strapi REST query params to a more usable format for querying\n * You can read more here: https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest-api.html#filters\n */\n\nimport _, { cloneDeep, get, isEmpty, isObject, isString, toNumber } from 'lodash';\nimport {\n constants,\n hasDraftAndPublish,\n isDynamicZoneAttribute,\n isMorphToRelationalAttribute,\n} from './content-types';\nimport { PaginationError, ValidationError } from './errors';\nimport { isOperator } from './operators';\n\nimport parseType from './parse-type';\nimport type { PublicationFilterMode } from './publication-filter';\nimport {\n getMeaningfulSortSegments,\n hasSort,\n type SortParams,\n type SortParamsObject,\n} from './sort-query';\nimport { Model } from './types';\n\nexport type { SortParams, SortParamsObject } from './sort-query';\n\nconst { ID_ATTRIBUTE, DOC_ID_ATTRIBUTE, PUBLISHED_AT_ATTRIBUTE } = constants;\n\ntype SortOrder = 'asc' | 'desc';\n\nexport interface SortMap {\n [key: string]: SortOrder | SortMap;\n}\n\ntype FieldsParams = string | string[];\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => _.isPlainObject(value);\n\nconst hasOwnProperty = (object: object, key: PropertyKey): boolean =>\n Object.prototype.hasOwnProperty.call(object, key);\n\nconst setSortMapValue = (field: string, order: SortOrder): SortMap => {\n const path = _.toPath(field);\n const sortMap: SortMap = {};\n let current: SortMap | SortMap[] = sortMap;\n\n for (const [index, key] of path.entries()) {\n const isLastSegment = index === path.length - 1;\n\n if (key === 'prototype' || (key in current && !hasOwnProperty(current, key))) {\n throw new ValidationError('Invalid sort query');\n }\n\n if (isLastSegment) {\n Object.defineProperty(current, key, {\n configurable: true,\n enumerable: true,\n value: order,\n writable: true,\n });\n continue;\n }\n\n const nextValue = /^\\d+$/.test(path[index + 1]) ? [] : {};\n\n Object.defineProperty(current, key, {\n configurable: true,\n enumerable: true,\n value: nextValue,\n writable: true,\n });\n\n current = nextValue;\n }\n\n return sortMap;\n};\n\nfunction isEmptySortMap(sortMap: SortMap): boolean {\n const keys = Object.keys(sortMap);\n\n if (keys.length === 0) {\n return true;\n }\n\n return keys.every((key) => {\n const value = sortMap[key];\n\n if (typeof value === 'string') {\n return value.trim().length === 0;\n }\n\n if (isPlainObject(value)) {\n return isEmptySortMap(value as SortMap);\n }\n\n return true;\n });\n}\n\n/** Drops empty sort maps so a trailing comma does not leave a truthy but meaningless `orderBy`. */\nfunction normalizeOrderBy(orderBy: OrderByQuery): OrderByQuery | undefined {\n if (Array.isArray(orderBy)) {\n const filtered = orderBy.filter((sortMap) => !isEmptySortMap(sortMap));\n\n return filtered.length > 0 ? filtered : undefined;\n }\n\n return isEmptySortMap(orderBy) ? undefined : orderBy;\n}\n\ntype FiltersParams = unknown;\n\nexport interface PopulateAttributesParams {\n [key: string]: boolean | PopulateObjectParams;\n}\n\nexport interface PopulateObjectParams {\n sort?: SortParams;\n fields?: FieldsParams;\n filters?: FiltersParams;\n populate?: string | string[] | PopulateAttributesParams;\n on?: PopulateAttributesParams;\n count?: boolean;\n ordering?: unknown;\n _q?: string;\n limit?: number | string;\n start?: number | string;\n page?: number | string;\n pageSize?: number | string;\n}\n\ntype PopulateParams = string | string[] | PopulateAttributesParams;\n\nexport interface Params {\n sort?: SortParams;\n fields?: FieldsParams;\n filters?: FiltersParams;\n populate?: PopulateParams;\n count?: boolean;\n ordering?: unknown;\n _q?: string;\n limit?: number | string;\n start?: number | string;\n page?: number | string;\n pageSize?: number | string;\n status?: 'draft' | 'published';\n publicationFilter?: PublicationFilterMode;\n /**\n * @deprecated Replaced by `publicationFilter` (`never-published`, `has-published-version`, …).\n * Retained for backward compatibility with existing REST and GraphQL clients.\n */\n hasPublishedVersion?: boolean | 'true' | 'false';\n}\n\ntype FiltersQuery = (options: { meta: Model }) => WhereQuery | undefined;\ntype OrderByQuery = SortMap | SortMap[];\ntype SelectQuery = string | string[];\n\nexport interface WhereQuery {\n [key: string]: any;\n}\n\ntype PopulateQuery =\n | boolean\n | string[]\n | {\n [key: string]: PopulateQuery;\n };\n\nexport interface Query {\n orderBy?: OrderByQuery;\n select?: SelectQuery;\n where?: WhereQuery;\n // NOTE: those are internal DB filters do not modify\n filters?: FiltersQuery;\n populate?: PopulateQuery;\n count?: boolean;\n ordering?: unknown;\n _q?: string;\n limit?: number;\n offset?: number;\n page?: number;\n pageSize?: number;\n}\n\nclass InvalidOrderError extends ValidationError {\n constructor() {\n super('Invalid order. order can only be one of asc|desc|ASC|DESC');\n }\n}\n\nclass InvalidSortError extends ValidationError {\n constructor() {\n super(\n 'Invalid sort parameter. Expected a string, an array of strings, a sort object or an array of sort objects'\n );\n }\n}\n\nclass InvalidPopulateError extends ValidationError {\n constructor() {\n super('Invalid populate parameter. Expected a string, an array of strings, a populate object');\n }\n}\n\nfunction validateOrder(order: string): asserts order is SortOrder {\n if (!isString(order) || !['asc', 'desc'].includes(order.toLocaleLowerCase())) {\n throw new InvalidOrderError();\n }\n}\n\nconst convertCountQueryParams = (countQuery: unknown): boolean => {\n return parseType({ type: 'boolean', value: countQuery });\n};\n\nconst convertOrderingQueryParams = (ordering: unknown) => {\n return ordering;\n};\n\nconst isStringArray = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every(isString);\n\ninterface TransformerOptions {\n getModel: (uid: string) => Model | undefined;\n}\n\nconst createTransformer = ({ getModel }: TransformerOptions) => {\n /**\n * Sort query parser\n */\n const convertSortQueryParams = (sortQuery: SortParams): OrderByQuery => {\n if (typeof sortQuery === 'string') {\n return convertStringSortQueryParam(sortQuery);\n }\n\n if (isStringArray(sortQuery)) {\n return sortQuery.flatMap((sortValue: string) => convertStringSortQueryParam(sortValue));\n }\n\n if (Array.isArray(sortQuery)) {\n return sortQuery.map((sortValue) => convertNestedSortQueryParam(sortValue));\n }\n\n if (isPlainObject(sortQuery)) {\n return convertNestedSortQueryParam(sortQuery);\n }\n\n throw new InvalidSortError();\n };\n\n const convertStringSortQueryParam = (sortQuery: string): SortMap[] => {\n return getMeaningfulSortSegments(sortQuery).map((segment) =>\n convertSingleSortQueryParam(segment)\n );\n };\n\n const convertSingleSortQueryParam = (sortQuery: string): SortMap => {\n const trimmed = sortQuery.trim();\n\n if (!trimmed) {\n return {};\n }\n\n if (!isString(trimmed)) {\n throw new ValidationError('Invalid sort query');\n }\n\n // split field and order param with default order to ascending\n const [rawField, order = 'asc'] = trimmed.split(':');\n const field = rawField.trim();\n\n if (field.length === 0) {\n throw new ValidationError('Field cannot be empty');\n }\n\n validateOrder(order.trim());\n\n // TODO: field should be a valid path on an object model\n\n return setSortMapValue(field, order.trim() as SortOrder);\n };\n\n const convertNestedSortQueryParam = (sortQuery: SortParamsObject): SortMap => {\n const transformedSort: SortMap = {};\n for (const field of Object.keys(sortQuery)) {\n const order = sortQuery[field];\n\n // this is a deep sort\n if (isPlainObject(order)) {\n const nested = convertNestedSortQueryParam(order as SortParamsObject);\n\n if (!isEmptySortMap(nested)) {\n transformedSort[field] = nested;\n }\n } else if (typeof order === 'string') {\n const trimmedOrder = order.trim();\n\n if (trimmedOrder.length > 0) {\n validateOrder(trimmedOrder);\n transformedSort[field] = trimmedOrder;\n }\n } else {\n throw new ValidationError(\n `Invalid sort type expected object or string got ${typeof order}`\n );\n }\n }\n\n return transformedSort;\n };\n\n const applySortToQuery = (query: Query, sortParam?: SortParams | null) => {\n if (!hasSort(sortParam)) {\n return;\n }\n\n const orderBy = normalizeOrderBy(convertSortQueryParams(sortParam));\n\n if (orderBy !== undefined) {\n query.orderBy = orderBy;\n }\n };\n\n /**\n * Start query parser\n */\n const convertStartQueryParams = (startQuery: unknown): number => {\n const startAsANumber = toNumber(startQuery);\n\n if (!_.isInteger(startAsANumber) || startAsANumber < 0) {\n throw new ValidationError(\n `convertStartQueryParams expected a positive integer got ${startAsANumber}`\n );\n }\n\n return startAsANumber;\n };\n\n /**\n * Limit query parser\n */\n const convertLimitQueryParams = (limitQuery: unknown): number | undefined => {\n const limitAsANumber = toNumber(limitQuery);\n\n if (!_.isInteger(limitAsANumber) || (limitAsANumber !== -1 && limitAsANumber < 0)) {\n throw new ValidationError(\n `convertLimitQueryParams expected a positive integer got ${limitAsANumber}`\n );\n }\n\n if (limitAsANumber === -1) {\n return undefined;\n }\n\n return limitAsANumber;\n };\n\n const convertPageQueryParams = (page: unknown): number => {\n const pageVal = toNumber(page);\n\n if (!Number.isInteger(pageVal) || pageVal <= 0) {\n throw new PaginationError(\n `Invalid 'page' parameter. Expected an integer > 0, received: ${page}`\n );\n }\n\n return pageVal;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const convertPageSizeQueryParams = (pageSize: unknown, _page: unknown): number => {\n const pageSizeVal = toNumber(pageSize);\n\n if (!Number.isInteger(pageSizeVal) || pageSizeVal <= 0) {\n throw new PaginationError(\n `Invalid 'pageSize' parameter. Expected an integer > 0, received: ${pageSize}`\n );\n }\n\n return pageSizeVal;\n };\n\n const validatePaginationParams = (\n page: unknown,\n pageSize: unknown,\n start: unknown,\n limit: unknown\n ) => {\n const isPagePagination = page != null || pageSize != null;\n const isOffsetPagination = start != null || limit != null;\n\n if (isPagePagination && isOffsetPagination) {\n throw new PaginationError(\n 'Invalid pagination attributes. The page parameters are incorrect and must be in the pagination object'\n );\n }\n };\n\n // NOTE: we could support foo.* or foo.bar.* etc later on\n const convertPopulateQueryParams = (\n populate: PopulateParams,\n schema?: Model,\n depth = 0\n ): PopulateQuery => {\n if (depth === 0 && populate === '*') {\n return true;\n }\n\n if (typeof populate === 'string') {\n return populate.split(',').map((value) => _.trim(value));\n }\n\n if (Array.isArray(populate)) {\n // map convert\n return _.uniq(\n populate.flatMap((value) => {\n if (typeof value !== 'string') {\n throw new InvalidPopulateError();\n }\n\n return value.split(',').map((value) => _.trim(value));\n })\n );\n }\n\n if (_.isPlainObject(populate)) {\n return convertPopulateObject(populate, schema);\n }\n\n throw new InvalidPopulateError();\n };\n\n const hasPopulateFragmentDefined = (\n populate: PopulateObjectParams\n ): populate is PopulateObjectParams & Required<Pick<PopulateObjectParams, 'on'>> => {\n return typeof populate === 'object' && 'on' in populate && populate.on != null;\n };\n\n const hasCountDefined = (\n populate: PopulateObjectParams\n ): populate is PopulateObjectParams & { count: boolean } => {\n return (\n typeof populate === 'object' && 'count' in populate && typeof populate.count === 'boolean'\n );\n };\n\n const convertPopulateObject = (populate: PopulateAttributesParams, schema?: Model) => {\n if (!schema) {\n return {};\n }\n\n const { attributes } = schema;\n return Object.entries(populate).reduce((acc, [key, subPopulate]) => {\n // Try converting strings to regular booleans if possible\n if (_.isString(subPopulate)) {\n try {\n const subPopulateAsBoolean = parseType({ type: 'boolean', value: subPopulate });\n // Only true is accepted as a boolean populate value\n return subPopulateAsBoolean ? { ...acc, [key]: true } : acc;\n } catch {\n // ignore\n }\n }\n\n if (_.isBoolean(subPopulate)) {\n // Only true is accepted as a boolean populate value\n return subPopulate === true ? { ...acc, [key]: true } : acc;\n }\n\n const attribute = attributes[key];\n\n if (!attribute) {\n return acc;\n }\n\n // Allow adding an 'on' strategy to populate queries for morphTo relations and dynamic zones\n const isMorphLikeRelationalAttribute =\n isDynamicZoneAttribute(attribute) || isMorphToRelationalAttribute(attribute);\n\n if (isMorphLikeRelationalAttribute) {\n const hasInvalidProperties = Object.keys(subPopulate).some(\n (key) => !['populate', 'on', 'count'].includes(key)\n );\n\n if (hasInvalidProperties) {\n throw new ValidationError(\n `Invalid nested populate for ${schema.info?.singularName}.${key} (${schema.uid}). Expected a fragment (\"on\") or \"count\" but found ${JSON.stringify(subPopulate)}`\n );\n }\n\n /**\n * Validate nested population queries in the context of a polymorphic attribute (dynamic zone, morph relation).\n *\n * If 'populate' exists in subPopulate, its value should be constrained to a wildcard ('*').\n */\n if (\n 'populate' in subPopulate &&\n subPopulate.populate != null &&\n subPopulate.populate !== '*'\n ) {\n throw new ValidationError(\n `Invalid nested population query detected. When using 'populate' within polymorphic structures, ` +\n `its value must be '*' to indicate all second level links. Specific field targeting is not supported here. ` +\n `Consider using the fragment API for more granular population control.`\n );\n }\n\n // TODO: Remove the possibility to have multiple properties at the same time (on/count/populate)\n const newSubPopulate = {};\n\n // case: { populate: '*' }\n if ('populate' in subPopulate && subPopulate.populate === '*') {\n Object.assign(newSubPopulate, { populate: true });\n }\n\n // case: { on: { <clauses> } }\n if (hasPopulateFragmentDefined(subPopulate)) {\n // If the fragment API is used, it applies the transformation to every\n // sub-populate, then assign the result to the new sub-populate\n Object.assign(newSubPopulate, {\n on: Object.entries(subPopulate.on).reduce(\n (acc, [type, typeSubPopulate]) => ({\n ...acc,\n [type]: convertNestedPopulate(typeSubPopulate, getModel(type)),\n }),\n {}\n ),\n });\n }\n\n // case: { count: true | false }\n if (hasCountDefined(subPopulate)) {\n Object.assign(newSubPopulate, { count: subPopulate.count });\n }\n\n return { ...acc, [key]: newSubPopulate };\n }\n\n // Edge case when trying to use the fragment ('on') on a non-morph like attribute\n if (!isMorphLikeRelationalAttribute && hasPopulateFragmentDefined(subPopulate)) {\n throw new ValidationError(\n `Using fragments is not permitted to populate \"${key}\" in \"${schema.uid}\"`\n );\n }\n\n // NOTE: Retrieve the target schema UID.\n // Only handles basic relations, medias and component since it's not possible\n // to populate with options for a dynamic zone or a polymorphic relation\n let targetSchemaUID;\n\n if (attribute.type === 'relation') {\n targetSchemaUID = attribute.target;\n } else if (attribute.type === 'component') {\n targetSchemaUID = attribute.component;\n } else if (attribute.type === 'media') {\n targetSchemaUID = 'plugin::upload.file';\n } else {\n return acc;\n }\n\n const targetSchema = getModel(targetSchemaUID!);\n\n // ignore the sub-populate for the current key if there is no schema associated\n if (!targetSchema) {\n return acc;\n }\n\n const populateObject = convertNestedPopulate(subPopulate, targetSchema);\n\n if (!populateObject) {\n return acc;\n }\n\n return {\n ...acc,\n [key]: populateObject,\n };\n }, {});\n };\n\n const convertNestedPopulate = (subPopulate: boolean | PopulateObjectParams, schema?: Model) => {\n if (_.isString(subPopulate)) {\n return parseType({ type: 'boolean', value: subPopulate, forceCast: true });\n }\n\n if (_.isBoolean(subPopulate)) {\n return subPopulate;\n }\n\n if (!isPlainObject(subPopulate)) {\n throw new ValidationError(`Invalid nested populate. Expected '*' or an object`);\n }\n\n const { sort, filters, fields, populate, count, ordering, page, pageSize, start, limit } =\n subPopulate as PopulateObjectParams;\n\n const query: Query = {};\n\n applySortToQuery(query, sort);\n\n if (filters) {\n query.where = convertFiltersQueryParams(filters, schema);\n }\n\n if (fields) {\n query.select = convertFieldsQueryParams(fields, schema);\n }\n\n if (populate) {\n query.populate = convertPopulateQueryParams(populate, schema);\n }\n\n if (count) {\n query.count = convertCountQueryParams(count);\n }\n\n if (ordering) {\n query.ordering = convertOrderingQueryParams(ordering);\n }\n\n validatePaginationParams(page, pageSize, start, limit);\n\n if (page != null) {\n query.page = convertPageQueryParams(page);\n }\n\n if (pageSize != null) {\n query.pageSize = convertPageSizeQueryParams(pageSize, page);\n }\n\n if (start != null) {\n query.offset = convertStartQueryParams(start);\n }\n\n if (limit != null) {\n query.limit = convertLimitQueryParams(limit);\n }\n\n return query;\n };\n\n // TODO: ensure field is valid in content types (will probably have to check strapi.contentTypes since it can be a string.path)\n const convertFieldsQueryParams = (\n fields: FieldsParams,\n schema?: Model,\n depth = 0\n ): SelectQuery | undefined => {\n if (depth === 0 && fields === '*') {\n return undefined;\n }\n\n if (typeof fields === 'string') {\n const fieldsValues = fields.split(',').map((value) => _.trim(value));\n\n // NOTE: Only include the doc id if it's a content type\n if (schema?.modelType === 'contentType') {\n return _.uniq([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE, ...fieldsValues]);\n }\n return _.uniq([ID_ATTRIBUTE, ...fieldsValues]);\n }\n\n if (isStringArray(fields)) {\n // map convert\n const fieldsValues = fields\n .flatMap((value) => convertFieldsQueryParams(value, schema, depth + 1))\n .filter((v) => v != null) as string[];\n\n // NOTE: Only include the doc id if it's a content type\n if (schema?.modelType === 'contentType') {\n return _.uniq([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE, ...fieldsValues]);\n }\n return _.uniq([ID_ATTRIBUTE, ...fieldsValues]);\n }\n\n throw new ValidationError('Invalid fields parameter. Expected a string or an array of strings');\n };\n\n const isValidSchemaAttribute = (key: string, schema?: Model) => {\n if ([DOC_ID_ATTRIBUTE, ID_ATTRIBUTE].includes(key)) {\n return true;\n }\n\n if (!schema) {\n return false;\n }\n\n return Object.keys(schema.attributes).includes(key);\n };\n\n const convertFiltersQueryParams = (filters: FiltersParams, schema?: Model): WhereQuery => {\n // Filters need to be either an array or an object\n // Here we're only checking for 'object' type since typeof [] => object and typeof {} => object\n if (!isObject(filters)) {\n throw new ValidationError('The filters parameter must be an object or an array');\n }\n\n // Don't mutate the original object\n const filtersCopy = cloneDeep(filters);\n\n return convertAndSanitizeFilters(filtersCopy, schema);\n };\n\n const convertAndSanitizeFilters = (filters: FiltersParams, schema?: Model): WhereQuery => {\n if (Array.isArray(filters)) {\n return (\n filters\n // Sanitize each filter\n .map((filter) => convertAndSanitizeFilters(filter, schema))\n // Filter out empty filters\n .filter((filter) => !isPlainObject(filter) || !isEmpty(filter))\n );\n }\n\n if (!isPlainObject(filters)) {\n return filters as WhereQuery;\n }\n\n const removeOperator = (operator: string) => delete filters[operator];\n\n // Here, `key` can either be an operator or an attribute name\n for (const [key, value] of Object.entries(filters)) {\n const attribute = get(schema?.attributes, key);\n const validKey = isOperator(key) || isValidSchemaAttribute(key, schema);\n\n if (!validKey) {\n removeOperator(key);\n }\n // Handle attributes\n else if (attribute) {\n // Relations\n if (attribute.type === 'relation') {\n filters[key] = convertAndSanitizeFilters(value, getModel(attribute.target!));\n }\n\n // Components\n else if (attribute.type === 'component') {\n filters[key] = convertAndSanitizeFilters(value, getModel(attribute.component));\n }\n\n // Media\n else if (attribute.type === 'media') {\n filters[key] = convertAndSanitizeFilters(value, getModel('plugin::upload.file'));\n }\n\n // Dynamic Zones\n else if (attribute.type === 'dynamiczone') {\n removeOperator(key);\n }\n\n // Password attributes\n else if (attribute.type === 'password') {\n // Always remove password attributes from filters object\n removeOperator(key);\n }\n\n // Scalar attributes\n else {\n filters[key] = convertAndSanitizeFilters(value, schema);\n }\n }\n\n // Handle operators\n else if (['$null', '$notNull'].includes(key)) {\n filters[key] = parseType({ type: 'boolean', value: filters[key], forceCast: true });\n } else if (isObject(value)) {\n filters[key] = convertAndSanitizeFilters(value, schema);\n }\n\n // Remove empty objects & arrays\n if (isPlainObject(filters[key]) && isEmpty(filters[key])) {\n removeOperator(key);\n }\n }\n\n return filters;\n };\n\n const convertStatusParams = (status?: 'draft' | 'published', query: Query = {}) => {\n // NOTE: this is the query layer filters not the document/entity service filters\n query.filters = ({ meta }: { meta: Model }) => {\n const contentType = getModel(meta.uid);\n\n // Ignore if target model has disabled DP, as it doesn't make sense to filter by its status\n if (!contentType || !hasDraftAndPublish(contentType)) {\n return {};\n }\n\n return { [PUBLISHED_AT_ATTRIBUTE]: { $null: status === 'draft' } };\n };\n };\n\n const transformQueryParams = (uid: string, params: Params): Query => {\n // NOTE: can be a CT, a Compo or nothing in the case of polymorphism (DZ & morph relations)\n const schema = getModel(uid);\n\n const query: Query = {};\n\n const {\n _q: searchQuery,\n sort,\n filters,\n fields,\n populate,\n page,\n pageSize,\n start,\n limit,\n status,\n ...rest\n } = params;\n\n if (status != null) {\n convertStatusParams(status, query);\n }\n\n if (searchQuery != null) {\n query._q = searchQuery;\n }\n\n applySortToQuery(query, sort);\n\n if (filters != null) {\n query.where = convertFiltersQueryParams(filters, schema);\n }\n\n if (fields != null) {\n query.select = convertFieldsQueryParams(fields, schema);\n }\n\n if (populate != null) {\n query.populate = convertPopulateQueryParams(populate, schema);\n }\n\n validatePaginationParams(page, pageSize, start, limit);\n\n if (page != null) {\n query.page = convertPageQueryParams(page);\n }\n\n if (pageSize != null) {\n query.pageSize = convertPageSizeQueryParams(pageSize, page);\n }\n\n if (start != null) {\n query.offset = convertStartQueryParams(start);\n }\n\n if (limit != null) {\n query.limit = convertLimitQueryParams(limit);\n }\n\n return {\n ...rest,\n ...query,\n };\n };\n\n return {\n private_convertSortQueryParams: convertSortQueryParams,\n private_convertStartQueryParams: convertStartQueryParams,\n private_convertLimitQueryParams: convertLimitQueryParams,\n private_convertPopulateQueryParams: convertPopulateQueryParams,\n private_convertFiltersQueryParams: convertFiltersQueryParams,\n private_convertFieldsQueryParams: convertFieldsQueryParams,\n transformQueryParams,\n };\n};\n\nexport { createTransformer };\n"],"names":["ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","constants","isPlainObject","value","_","hasOwnProperty","object","key","Object","prototype","call","setSortMapValue","field","order","path","toPath","sortMap","current","index","entries","isLastSegment","length","ValidationError","defineProperty","configurable","enumerable","writable","nextValue","test","isEmptySortMap","keys","every","trim","normalizeOrderBy","orderBy","Array","isArray","filtered","filter","undefined","InvalidOrderError","InvalidSortError","InvalidPopulateError","validateOrder","isString","includes","toLocaleLowerCase","convertCountQueryParams","countQuery","parseType","type","convertOrderingQueryParams","ordering","isStringArray","createTransformer","getModel","convertSortQueryParams","sortQuery","convertStringSortQueryParam","flatMap","sortValue","map","convertNestedSortQueryParam","getMeaningfulSortSegments","segment","convertSingleSortQueryParam","trimmed","rawField","split","transformedSort","nested","trimmedOrder","applySortToQuery","query","sortParam","hasSort","convertStartQueryParams","startQuery","startAsANumber","toNumber","isInteger","convertLimitQueryParams","limitQuery","limitAsANumber","convertPageQueryParams","page","pageVal","Number","PaginationError","convertPageSizeQueryParams","pageSize","_page","pageSizeVal","validatePaginationParams","start","limit","isPagePagination","isOffsetPagination","convertPopulateQueryParams","populate","schema","depth","uniq","convertPopulateObject","hasPopulateFragmentDefined","on","hasCountDefined","count","attributes","reduce","acc","subPopulate","subPopulateAsBoolean","isBoolean","attribute","isMorphLikeRelationalAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","hasInvalidProperties","some","info","singularName","uid","JSON","stringify","newSubPopulate","assign","typeSubPopulate","convertNestedPopulate","targetSchemaUID","target","component","targetSchema","populateObject","forceCast","sort","filters","fields","where","convertFiltersQueryParams","select","convertFieldsQueryParams","offset","fieldsValues","modelType","v","isValidSchemaAttribute","isObject","filtersCopy","cloneDeep","convertAndSanitizeFilters","isEmpty","removeOperator","operator","get","validKey","isOperator","convertStatusParams","status","meta","contentType","hasDraftAndPublish","$null","transformQueryParams","params","_q","searchQuery","rest","private_convertSortQueryParams","private_convertStartQueryParams","private_convertLimitQueryParams","private_convertPopulateQueryParams","private_convertFiltersQueryParams","private_convertFieldsQueryParams"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import ___default from 'lodash';
2
- import { isNil, isObject, cloneDeep, toNumber, isInteger, isArray, isString, isEmpty, get } from 'lodash/fp';
1
+ import ___default, { isObject, cloneDeep, toNumber, isString, isEmpty, get } from 'lodash';
3
2
  import { constants, hasDraftAndPublish, isDynamicZoneAttribute, isMorphToRelationalAttribute } from './content-types.mjs';
4
3
  import { ValidationError, PaginationError } from './errors.mjs';
5
4
  import { isOperator } from './operators.mjs';
@@ -93,7 +92,7 @@ const convertCountQueryParams = (countQuery)=>{
93
92
  const convertOrderingQueryParams = (ordering)=>{
94
93
  return ordering;
95
94
  };
96
- const isStringArray = (value)=>isArray(value) && value.every(isString);
95
+ const isStringArray = (value)=>Array.isArray(value) && value.every(isString);
97
96
  const createTransformer = ({ getModel })=>{
98
97
  /**
99
98
  * Sort query parser
@@ -187,7 +186,7 @@ const createTransformer = ({ getModel })=>{
187
186
  };
188
187
  const convertPageQueryParams = (page)=>{
189
188
  const pageVal = toNumber(page);
190
- if (!isInteger(pageVal) || pageVal <= 0) {
189
+ if (!Number.isInteger(pageVal) || pageVal <= 0) {
191
190
  throw new PaginationError(`Invalid 'page' parameter. Expected an integer > 0, received: ${page}`);
192
191
  }
193
192
  return pageVal;
@@ -195,14 +194,14 @@ const createTransformer = ({ getModel })=>{
195
194
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
196
195
  const convertPageSizeQueryParams = (pageSize, _page)=>{
197
196
  const pageSizeVal = toNumber(pageSize);
198
- if (!isInteger(pageSizeVal) || pageSizeVal <= 0) {
197
+ if (!Number.isInteger(pageSizeVal) || pageSizeVal <= 0) {
199
198
  throw new PaginationError(`Invalid 'pageSize' parameter. Expected an integer > 0, received: ${pageSize}`);
200
199
  }
201
200
  return pageSizeVal;
202
201
  };
203
202
  const validatePaginationParams = (page, pageSize, start, limit)=>{
204
- const isPagePagination = !isNil(page) || !isNil(pageSize);
205
- const isOffsetPagination = !isNil(start) || !isNil(limit);
203
+ const isPagePagination = page != null || pageSize != null;
204
+ const isOffsetPagination = start != null || limit != null;
206
205
  if (isPagePagination && isOffsetPagination) {
207
206
  throw new PaginationError('Invalid pagination attributes. The page parameters are incorrect and must be in the pagination object');
208
207
  }
@@ -230,7 +229,7 @@ const createTransformer = ({ getModel })=>{
230
229
  throw new InvalidPopulateError();
231
230
  };
232
231
  const hasPopulateFragmentDefined = (populate)=>{
233
- return typeof populate === 'object' && 'on' in populate && !isNil(populate.on);
232
+ return typeof populate === 'object' && 'on' in populate && populate.on != null;
234
233
  };
235
234
  const hasCountDefined = (populate)=>{
236
235
  return typeof populate === 'object' && 'count' in populate && typeof populate.count === 'boolean';
@@ -283,7 +282,7 @@ const createTransformer = ({ getModel })=>{
283
282
  * Validate nested population queries in the context of a polymorphic attribute (dynamic zone, morph relation).
284
283
  *
285
284
  * If 'populate' exists in subPopulate, its value should be constrained to a wildcard ('*').
286
- */ if ('populate' in subPopulate && !isNil(subPopulate.populate) && subPopulate.populate !== '*') {
285
+ */ if ('populate' in subPopulate && subPopulate.populate != null && subPopulate.populate !== '*') {
287
286
  throw new ValidationError(`Invalid nested population query detected. When using 'populate' within polymorphic structures, ` + `its value must be '*' to indicate all second level links. Specific field targeting is not supported here. ` + `Consider using the fragment API for more granular population control.`);
288
287
  }
289
288
  // TODO: Remove the possibility to have multiple properties at the same time (on/count/populate)
@@ -381,16 +380,16 @@ const createTransformer = ({ getModel })=>{
381
380
  query.ordering = convertOrderingQueryParams(ordering);
382
381
  }
383
382
  validatePaginationParams(page, pageSize, start, limit);
384
- if (!isNil(page)) {
383
+ if (page != null) {
385
384
  query.page = convertPageQueryParams(page);
386
385
  }
387
- if (!isNil(pageSize)) {
386
+ if (pageSize != null) {
388
387
  query.pageSize = convertPageSizeQueryParams(pageSize);
389
388
  }
390
- if (!isNil(start)) {
389
+ if (start != null) {
391
390
  query.offset = convertStartQueryParams(start);
392
391
  }
393
- if (!isNil(limit)) {
392
+ if (limit != null) {
394
393
  query.limit = convertLimitQueryParams(limit);
395
394
  }
396
395
  return query;
@@ -417,7 +416,7 @@ const createTransformer = ({ getModel })=>{
417
416
  }
418
417
  if (isStringArray(fields)) {
419
418
  // map convert
420
- const fieldsValues = fields.flatMap((value)=>convertFieldsQueryParams(value, schema, depth + 1)).filter((v)=>!isNil(v));
419
+ const fieldsValues = fields.flatMap((value)=>convertFieldsQueryParams(value, schema, depth + 1)).filter((v)=>v != null);
421
420
  // NOTE: Only include the doc id if it's a content type
422
421
  if (schema?.modelType === 'contentType') {
423
422
  return ___default.uniq([
@@ -467,7 +466,7 @@ const createTransformer = ({ getModel })=>{
467
466
  const removeOperator = (operator)=>delete filters[operator];
468
467
  // Here, `key` can either be an operator or an attribute name
469
468
  for (const [key, value] of Object.entries(filters)){
470
- const attribute = get(key, schema?.attributes);
469
+ const attribute = get(schema?.attributes, key);
471
470
  const validKey = isOperator(key) || isValidSchemaAttribute(key, schema);
472
471
  if (!validKey) {
473
472
  removeOperator(key);
@@ -526,33 +525,33 @@ const createTransformer = ({ getModel })=>{
526
525
  const schema = getModel(uid);
527
526
  const query = {};
528
527
  const { _q: searchQuery, sort, filters, fields, populate, page, pageSize, start, limit, status, ...rest } = params;
529
- if (!isNil(status)) {
528
+ if (status != null) {
530
529
  convertStatusParams(status, query);
531
530
  }
532
- if (!isNil(searchQuery)) {
531
+ if (searchQuery != null) {
533
532
  query._q = searchQuery;
534
533
  }
535
534
  applySortToQuery(query, sort);
536
- if (!isNil(filters)) {
535
+ if (filters != null) {
537
536
  query.where = convertFiltersQueryParams(filters, schema);
538
537
  }
539
- if (!isNil(fields)) {
538
+ if (fields != null) {
540
539
  query.select = convertFieldsQueryParams(fields, schema);
541
540
  }
542
- if (!isNil(populate)) {
541
+ if (populate != null) {
543
542
  query.populate = convertPopulateQueryParams(populate, schema);
544
543
  }
545
544
  validatePaginationParams(page, pageSize, start, limit);
546
- if (!isNil(page)) {
545
+ if (page != null) {
547
546
  query.page = convertPageQueryParams(page);
548
547
  }
549
- if (!isNil(pageSize)) {
548
+ if (pageSize != null) {
550
549
  query.pageSize = convertPageSizeQueryParams(pageSize);
551
550
  }
552
- if (!isNil(start)) {
551
+ if (start != null) {
553
552
  query.offset = convertStartQueryParams(start);
554
553
  }
555
- if (!isNil(limit)) {
554
+ if (limit != null) {
556
555
  query.limit = convertLimitQueryParams(limit);
557
556
  }
558
557
  return {