@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,80 @@
1
+ import { Attribute, ComponentAttribute, DynamicZoneAttribute, Model, RelationalAttribute } from '../types';
2
+ export interface Path {
3
+ raw: string | null;
4
+ attribute: string | null;
5
+ }
6
+ export interface TraverseOptions {
7
+ path?: Path;
8
+ schema: Model;
9
+ }
10
+ export interface VisitorOptions {
11
+ data: unknown;
12
+ value: unknown;
13
+ schema: Model;
14
+ key: string;
15
+ attribute: Attribute;
16
+ path: Path;
17
+ }
18
+ export interface Traverse {
19
+ (visitor: Visitor, options: TraverseOptions, data: unknown): Promise<unknown>;
20
+ }
21
+ export interface Visitor {
22
+ (visitorOptions: VisitorOptions, opts: Pick<TransformUtils, 'set' | 'remove'>): void;
23
+ }
24
+ interface Interceptor<T = unknown> {
25
+ predicate(data: unknown): data is T;
26
+ handler(visitor: Visitor, options: TraverseOptions, data: T, recurseOptions: {
27
+ recurse: Traverse;
28
+ }): void;
29
+ }
30
+ interface ParseUtils<T> {
31
+ transform(data: T): unknown;
32
+ remove(key: string, data: T): unknown;
33
+ set(key: string, valeu: unknown, data: T): unknown;
34
+ keys(data: T): string[];
35
+ get(key: string, data: T): unknown;
36
+ }
37
+ interface Parser<T = unknown> {
38
+ predicate(data: unknown): data is T;
39
+ parser(data: T): ParseUtils<T>;
40
+ }
41
+ interface Ignore {
42
+ (ctx: Context): boolean;
43
+ }
44
+ interface AttributeHandler<AttributeType = Attribute> {
45
+ predicate(ctx: Context<AttributeType>): boolean;
46
+ handler(ctx: Context<AttributeType>, opts: Pick<TransformUtils, 'set' | 'recurse'>): void;
47
+ }
48
+ interface CommonHandler<AttributeType = Attribute> {
49
+ predicate(ctx: Context<AttributeType>): boolean;
50
+ handler(ctx: Context<AttributeType>, opts: Pick<TransformUtils, 'set' | 'recurse'>): void;
51
+ }
52
+ interface TransformUtils {
53
+ remove(key: string): void;
54
+ set(key: string, valeu: unknown): void;
55
+ recurse: Traverse;
56
+ }
57
+ interface Context<AttributeType = Attribute> {
58
+ key: string;
59
+ value: unknown;
60
+ attribute: AttributeType;
61
+ schema: Model;
62
+ path: Path;
63
+ data: unknown;
64
+ visitor: Visitor;
65
+ }
66
+ declare const _default: () => {
67
+ traverse: Traverse;
68
+ intercept<T>(predicate: (data: unknown) => data is T, handler: (visitor: Visitor, options: TraverseOptions, data: T, recurseOptions: {
69
+ recurse: Traverse;
70
+ }) => void): any;
71
+ parse<T_1>(predicate: (data: unknown) => data is T_1, parser: (data: T_1) => ParseUtils<T_1>): any;
72
+ ignore(predicate: Ignore): any;
73
+ on(predicate: CommonHandler['predicate'], handler: CommonHandler['handler']): any;
74
+ onAttribute(predicate: AttributeHandler['predicate'], handler: AttributeHandler['handler']): any;
75
+ onRelation(handler: AttributeHandler<RelationalAttribute>['handler']): any;
76
+ onMedia(handler: AttributeHandler<RelationalAttribute>['handler']): any;
77
+ onComponent(handler: AttributeHandler<ComponentAttribute>['handler']): any;
78
+ onDynamicZone(handler: AttributeHandler<DynamicZoneAttribute>['handler']): any;
79
+ };
80
+ export default _default;
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable @typescript-eslint/no-loop-func */
4
+ const fp_1 = require("lodash/fp");
5
+ const DEFAULT_PATH = { raw: null, attribute: null };
6
+ exports.default = () => {
7
+ const state = {
8
+ parsers: [],
9
+ interceptors: [],
10
+ ignore: [],
11
+ handlers: {
12
+ attributes: [],
13
+ common: [],
14
+ },
15
+ };
16
+ const traverse = async (visitor, options, data) => {
17
+ const { path = DEFAULT_PATH, schema } = options ?? {};
18
+ // interceptors
19
+ for (const { predicate, handler } of state.interceptors) {
20
+ if (predicate(data)) {
21
+ return handler(visitor, options, data, { recurse: traverse });
22
+ }
23
+ }
24
+ // parsers
25
+ const parser = state.parsers.find((parser) => parser.predicate(data))?.parser;
26
+ const utils = parser?.(data);
27
+ // Return the data untouched if we don't know how to traverse it
28
+ if (!utils) {
29
+ return data;
30
+ }
31
+ // main loop
32
+ let out = utils.transform(data);
33
+ const keys = utils.keys(out);
34
+ for (const key of keys) {
35
+ const attribute = schema?.attributes?.[key] ??
36
+ // FIX: Needed to not break existing behavior on the API.
37
+ // It looks for the attribute in the DB metadata when the key is in snake_case
38
+ schema?.attributes?.[strapi.db.metadata.get(schema?.uid).columnToAttribute[key]];
39
+ const newPath = { ...path };
40
+ newPath.raw = (0, fp_1.isNil)(path.raw) ? key : `${path.raw}.${key}`;
41
+ if (!(0, fp_1.isNil)(attribute)) {
42
+ newPath.attribute = (0, fp_1.isNil)(path.attribute) ? key : `${path.attribute}.${key}`;
43
+ }
44
+ // visitors
45
+ const visitorOptions = {
46
+ key,
47
+ value: utils.get(key, out),
48
+ attribute,
49
+ schema,
50
+ path: newPath,
51
+ data: out,
52
+ };
53
+ const transformUtils = {
54
+ remove(key) {
55
+ out = utils.remove(key, out);
56
+ },
57
+ set(key, value) {
58
+ out = utils.set(key, value, out);
59
+ },
60
+ recurse: traverse,
61
+ };
62
+ await visitor(visitorOptions, (0, fp_1.pick)(['remove', 'set'], transformUtils));
63
+ const value = utils.get(key, out);
64
+ const createContext = () => ({
65
+ key,
66
+ value,
67
+ attribute,
68
+ schema,
69
+ path: newPath,
70
+ data: out,
71
+ visitor,
72
+ });
73
+ // ignore
74
+ const ignoreCtx = createContext();
75
+ const shouldIgnore = state.ignore.some((predicate) => predicate(ignoreCtx));
76
+ if (shouldIgnore) {
77
+ continue;
78
+ }
79
+ // handlers
80
+ const handlers = [...state.handlers.common, ...state.handlers.attributes];
81
+ for await (const handler of handlers) {
82
+ const ctx = createContext();
83
+ const pass = await handler.predicate(ctx);
84
+ if (pass) {
85
+ await handler.handler(ctx, (0, fp_1.pick)(['recurse', 'set'], transformUtils));
86
+ }
87
+ }
88
+ }
89
+ return out;
90
+ };
91
+ return {
92
+ traverse,
93
+ intercept(predicate, handler) {
94
+ state.interceptors.push({ predicate, handler });
95
+ return this;
96
+ },
97
+ parse(predicate, parser) {
98
+ state.parsers.push({ predicate, parser });
99
+ return this;
100
+ },
101
+ ignore(predicate) {
102
+ state.ignore.push(predicate);
103
+ return this;
104
+ },
105
+ on(predicate, handler) {
106
+ state.handlers.common.push({ predicate, handler });
107
+ return this;
108
+ },
109
+ onAttribute(predicate, handler) {
110
+ state.handlers.attributes.push({ predicate, handler });
111
+ return this;
112
+ },
113
+ onRelation(handler) {
114
+ return this.onAttribute(({ attribute }) => attribute?.type === 'relation', handler);
115
+ },
116
+ onMedia(handler) {
117
+ return this.onAttribute(({ attribute }) => attribute?.type === 'media', handler);
118
+ },
119
+ onComponent(handler) {
120
+ return this.onAttribute(({ attribute }) => attribute?.type === 'component', handler);
121
+ },
122
+ onDynamicZone(handler) {
123
+ return this.onAttribute(({ attribute }) => attribute?.type === 'dynamiczone', handler);
124
+ },
125
+ };
126
+ };
127
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/traverse/factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { default as factory } from './factory';
2
+ export { default as traverseQueryFilters } from './query-filters';
3
+ export { default as traverseQuerySort } from './query-sort';
4
+ export { default as traverseQueryPopulate } from './query-populate';
5
+ export { default as traverseQueryFields } from './query-fields';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.traverseQueryFields = exports.traverseQueryPopulate = exports.traverseQuerySort = exports.traverseQueryFilters = exports.factory = void 0;
7
+ var factory_1 = require("./factory");
8
+ Object.defineProperty(exports, "factory", { enumerable: true, get: function () { return __importDefault(factory_1).default; } });
9
+ var query_filters_1 = require("./query-filters");
10
+ Object.defineProperty(exports, "traverseQueryFilters", { enumerable: true, get: function () { return __importDefault(query_filters_1).default; } });
11
+ var query_sort_1 = require("./query-sort");
12
+ Object.defineProperty(exports, "traverseQuerySort", { enumerable: true, get: function () { return __importDefault(query_sort_1).default; } });
13
+ var query_populate_1 = require("./query-populate");
14
+ Object.defineProperty(exports, "traverseQueryPopulate", { enumerable: true, get: function () { return __importDefault(query_populate_1).default; } });
15
+ var query_fields_1 = require("./query-fields");
16
+ Object.defineProperty(exports, "traverseQueryFields", { enumerable: true, get: function () { return __importDefault(query_fields_1).default; } });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/traverse/index.ts"],"names":[],"mappings":";;;;;;AAAA,qCAA+C;AAAtC,mHAAA,OAAO,OAAW;AAC3B,iDAAkE;AAAzD,sIAAA,OAAO,OAAwB;AACxC,2CAA4D;AAAnD,gIAAA,OAAO,OAAqB;AACrC,mDAAoE;AAA3D,wIAAA,OAAO,OAAyB;AACzC,+CAAgE;AAAvD,oIAAA,OAAO,OAAuB"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="lodash" />
2
+ declare const _default: import("lodash").CurriedFunction3<import("./factory").Visitor, import("./factory").TraverseOptions, unknown, Promise<unknown>>;
3
+ export default _default;
@@ -0,0 +1,35 @@
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 fp_1 = require("lodash/fp");
7
+ const factory_1 = __importDefault(require("./factory"));
8
+ const isStringArray = (value) => (0, fp_1.isArray)(value) && value.every(fp_1.isString);
9
+ const fields = (0, factory_1.default)()
10
+ // Interecept array of strings
11
+ .intercept(isStringArray, async (visitor, options, fields, { recurse }) => {
12
+ return Promise.all(fields.map((field) => recurse(visitor, options, field)));
13
+ })
14
+ // Return wildcards as is
15
+ .intercept((value) => (0, fp_1.eq)('*', value), (0, fp_1.constant)('*'))
16
+ // Parse string values
17
+ // Since we're parsing strings only, each value should be an attribute name (and it's value, undefined),
18
+ // thus it shouldn't be possible to set a new value, and get should return the whole data if key === data
19
+ .parse(fp_1.isString, () => ({
20
+ transform: fp_1.trim,
21
+ remove(key, data) {
22
+ return data === key ? undefined : data;
23
+ },
24
+ set(_key, _value, data) {
25
+ return data;
26
+ },
27
+ keys(data) {
28
+ return [data];
29
+ },
30
+ get(key, data) {
31
+ return key === data ? data : undefined;
32
+ },
33
+ }));
34
+ exports.default = (0, fp_1.curry)(fields.traverse);
35
+ //# sourceMappingURL=query-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-fields.js","sourceRoot":"","sources":["../../src/traverse/query-fields.ts"],"names":[],"mappings":";;;;;AAAA,kCAAyE;AAEzE,wDAAwC;AAExC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAqB,EAAE,CAC1D,IAAA,YAAO,EAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,aAAQ,CAAC,CAAC;AAE1C,MAAM,MAAM,GAAG,IAAA,iBAAe,GAAE;IAC9B,8BAA8B;KAC7B,SAAS,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACxE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC,CAAC;IACF,yBAAyB;KACxB,SAAS,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,IAAA,OAAE,EAAC,GAAG,EAAE,KAAK,CAAC,EAAE,IAAA,aAAQ,EAAC,GAAG,CAAC,CAAC;IACrE,sBAAsB;IACtB,wGAAwG;IACxG,yGAAyG;KACxG,KAAK,CAAC,aAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IACtB,SAAS,EAAE,SAAI;IAEf,MAAM,CAAC,GAAG,EAAE,IAAI;QACd,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAI;QACP,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,GAAG,EAAE,IAAI;QACX,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACzC,CAAC;CACF,CAAC,CAAC,CAAC;AAEN,kBAAe,IAAA,UAAK,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="lodash" />
2
+ declare const _default: import("lodash").CurriedFunction3<import("./factory").Visitor, import("./factory").TraverseOptions, unknown, Promise<unknown>>;
3
+ export default _default;
@@ -0,0 +1,75 @@
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 fp_1 = require("lodash/fp");
7
+ const factory_1 = __importDefault(require("./factory"));
8
+ const isObj = (value) => (0, fp_1.isObject)(value);
9
+ const filters = (0, factory_1.default)()
10
+ .intercept(
11
+ // Intercept filters arrays and apply the traversal to each one individually
12
+ fp_1.isArray, async (visitor, options, filters, { recurse }) => {
13
+ return Promise.all(filters.map((filter, i) => {
14
+ // In filters, only operators such as $and, $in, $notIn or $or and implicit operators like [...]
15
+ // can have a value array, thus we can update the raw path but not the attribute one
16
+ const newPath = options.path
17
+ ? { ...options.path, raw: `${options.path.raw}[${i}]` }
18
+ : options.path;
19
+ return recurse(visitor, { ...options, path: newPath }, filter);
20
+ })
21
+ // todo: move that to the visitors
22
+ ).then((res) => res.filter((val) => !((0, fp_1.isObject)(val) && (0, fp_1.isEmpty)(val))));
23
+ })
24
+ .intercept(
25
+ // Ignore non object filters and return the value as-is
26
+ (filters) => !(0, fp_1.isObject)(filters), (_, __, filters) => {
27
+ return filters;
28
+ })
29
+ // Parse object values
30
+ .parse(isObj, () => ({
31
+ transform: fp_1.cloneDeep,
32
+ remove(key, data) {
33
+ return (0, fp_1.omit)(key, data);
34
+ },
35
+ set(key, value, data) {
36
+ return { ...data, [key]: value };
37
+ },
38
+ keys(data) {
39
+ return Object.keys(data);
40
+ },
41
+ get(key, data) {
42
+ return data[key];
43
+ },
44
+ }))
45
+ // Ignore null or undefined values
46
+ .ignore(({ value }) => (0, fp_1.isNil)(value))
47
+ // Recursion on operators (non attributes)
48
+ .on(({ attribute }) => (0, fp_1.isNil)(attribute), async ({ key, visitor, path, value, schema }, { set, recurse }) => {
49
+ set(key, await recurse(visitor, { schema, path }, value));
50
+ })
51
+ // Handle relation recursion
52
+ .onRelation(async ({ key, attribute, visitor, path, value }, { set, recurse }) => {
53
+ const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');
54
+ if (isMorphRelation) {
55
+ return;
56
+ }
57
+ const targetSchemaUID = attribute.target;
58
+ const targetSchema = strapi.getModel(targetSchemaUID);
59
+ const newValue = await recurse(visitor, { schema: targetSchema, path }, value);
60
+ set(key, newValue);
61
+ })
62
+ .onComponent(async ({ key, attribute, visitor, path, value }, { set, recurse }) => {
63
+ const targetSchema = strapi.getModel(attribute.component);
64
+ const newValue = await recurse(visitor, { schema: targetSchema, path }, value);
65
+ set(key, newValue);
66
+ })
67
+ // Handle media recursion
68
+ .onMedia(async ({ key, visitor, path, value }, { set, recurse }) => {
69
+ const targetSchemaUID = 'plugin::upload.file';
70
+ const targetSchema = strapi.getModel(targetSchemaUID);
71
+ const newValue = await recurse(visitor, { schema: targetSchema, path }, value);
72
+ set(key, newValue);
73
+ });
74
+ exports.default = (0, fp_1.curry)(filters.traverse);
75
+ //# sourceMappingURL=query-filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-filters.js","sourceRoot":"","sources":["../../src/traverse/query-filters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="lodash" />
2
+ declare const _default: import("lodash").CurriedFunction3<import("./factory").Visitor, import("./factory").TraverseOptions, unknown, Promise<unknown>>;
3
+ export default _default;
@@ -0,0 +1,144 @@
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 fp_1 = require("lodash/fp");
7
+ const factory_1 = __importDefault(require("./factory"));
8
+ const content_types_1 = require("../content-types");
9
+ const isKeyword = (keyword) => {
10
+ return ({ key, attribute }) => {
11
+ return !attribute && keyword === key;
12
+ };
13
+ };
14
+ const isStringArray = (value) => (0, fp_1.isArray)(value) && value.every(fp_1.isString);
15
+ const isObj = (value) => (0, fp_1.isObject)(value);
16
+ const populate = (0, factory_1.default)()
17
+ // Array of strings ['foo', 'foo.bar'] => map(recurse), then filter out empty items
18
+ .intercept(isStringArray, async (visitor, options, populate, { recurse }) => {
19
+ return Promise.all(populate.map((nestedPopulate) => recurse(visitor, options, nestedPopulate)));
20
+ })
21
+ // Return wildcards as is
22
+ .intercept((value) => (0, fp_1.eq)('*', value), (0, fp_1.constant)('*'))
23
+ // Parse string values
24
+ .parse(fp_1.isString, () => {
25
+ const tokenize = (0, fp_1.split)('.');
26
+ const recompose = (0, fp_1.join)('.');
27
+ return {
28
+ transform: fp_1.trim,
29
+ remove(key, data) {
30
+ const [root] = tokenize(data);
31
+ return root === key ? undefined : data;
32
+ },
33
+ set(key, value, data) {
34
+ const [root] = tokenize(data);
35
+ if (root !== key) {
36
+ return data;
37
+ }
38
+ return (0, fp_1.isNil)(value) ? root : `${root}.${value}`;
39
+ },
40
+ keys(data) {
41
+ const v = (0, fp_1.first)(tokenize(data));
42
+ return v ? [v] : [];
43
+ },
44
+ get(key, data) {
45
+ const [root, ...rest] = tokenize(data);
46
+ return key === root ? recompose(rest) : undefined;
47
+ },
48
+ };
49
+ })
50
+ // Parse object values
51
+ .parse(isObj, () => ({
52
+ transform: fp_1.cloneDeep,
53
+ remove(key, data) {
54
+ const { [key]: ignored, ...rest } = data;
55
+ return rest;
56
+ },
57
+ set(key, value, data) {
58
+ return { ...data, [key]: value };
59
+ },
60
+ keys(data) {
61
+ return Object.keys(data);
62
+ },
63
+ get(key, data) {
64
+ return data[key];
65
+ },
66
+ }))
67
+ .ignore(({ key, attribute }) => {
68
+ return ['sort', 'filters', 'fields'].includes(key) && !attribute;
69
+ })
70
+ .on(
71
+ // Handle recursion on populate."populate"
72
+ isKeyword('populate'), async ({ key, visitor, path, value, schema }, { set, recurse }) => {
73
+ const newValue = await recurse(visitor, { schema, path }, value);
74
+ set(key, newValue);
75
+ })
76
+ .on(isKeyword('on'), async ({ key, visitor, path, value }, { set, recurse }) => {
77
+ const newOn = {};
78
+ if (!isObj(value)) {
79
+ return;
80
+ }
81
+ for (const [uid, subPopulate] of Object.entries(value)) {
82
+ const model = strapi.getModel(uid);
83
+ const newPath = { ...path, raw: `${path.raw}[${uid}]` };
84
+ const newSubPopulate = await recurse(visitor, { schema: model, path: newPath }, subPopulate);
85
+ newOn[uid] = newSubPopulate;
86
+ }
87
+ set(key, newOn);
88
+ })
89
+ // Handle populate on relation
90
+ .onRelation(async ({ key, value, attribute, visitor, path, schema }, { set, recurse }) => {
91
+ if ((0, content_types_1.isMorphToRelationalAttribute)(attribute)) {
92
+ // Don't traverse values that cannot be parsed
93
+ if (!(0, fp_1.isObject)(value) || !('on' in value && (0, fp_1.isObject)(value?.on))) {
94
+ return;
95
+ }
96
+ // If there is a populate fragment defined, traverse it
97
+ const newValue = await recurse(visitor, { schema, path }, { on: value?.on });
98
+ set(key, { on: newValue });
99
+ }
100
+ const targetSchemaUID = attribute.target;
101
+ const targetSchema = strapi.getModel(targetSchemaUID);
102
+ const newValue = await recurse(visitor, { schema: targetSchema, path }, value);
103
+ set(key, newValue);
104
+ })
105
+ // Handle populate on media
106
+ .onMedia(async ({ key, path, visitor, value }, { recurse, set }) => {
107
+ const targetSchemaUID = 'plugin::upload.file';
108
+ const targetSchema = strapi.getModel(targetSchemaUID);
109
+ const newValue = await recurse(visitor, { schema: targetSchema, path }, value);
110
+ set(key, newValue);
111
+ })
112
+ // Handle populate on components
113
+ .onComponent(async ({ key, value, visitor, path, attribute }, { recurse, set }) => {
114
+ const targetSchema = strapi.getModel(attribute.component);
115
+ const newValue = await recurse(visitor, { schema: targetSchema, path }, value);
116
+ set(key, newValue);
117
+ })
118
+ // Handle populate on dynamic zones
119
+ .onDynamicZone(async ({ key, value, attribute, schema, visitor, path }, { set, recurse }) => {
120
+ if ((0, fp_1.isObject)(value)) {
121
+ const { components } = attribute;
122
+ const newValue = {};
123
+ // Handle legacy DZ params
124
+ let newProperties = (0, fp_1.omit)('on', value);
125
+ for (const componentUID of components) {
126
+ const componentSchema = strapi.getModel(componentUID);
127
+ newProperties = await recurse(visitor, { schema: componentSchema, path }, newProperties);
128
+ }
129
+ Object.assign(newValue, newProperties);
130
+ // Handle new morph fragment syntax
131
+ if ('on' in value && value.on) {
132
+ const newOn = await recurse(visitor, { schema, path }, { on: value.on });
133
+ // Recompose both syntaxes
134
+ Object.assign(newValue, newOn);
135
+ }
136
+ set(key, newValue);
137
+ }
138
+ else {
139
+ const newValue = await recurse(visitor, { schema, path }, value);
140
+ set(key, newValue);
141
+ }
142
+ });
143
+ exports.default = (0, fp_1.curry)(populate.traverse);
144
+ //# sourceMappingURL=query-populate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-populate.js","sourceRoot":"","sources":["../../src/traverse/query-populate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="lodash" />
2
+ declare const _default: import("lodash").CurriedFunction3<import("./factory").Visitor, import("./factory").TraverseOptions, unknown, Promise<unknown>>;
3
+ export default _default;