@strapi/utils 4.11.2 → 4.11.4

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 (184) 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 +151 -0
  12. package/dist/content-types.js.map +1 -0
  13. package/dist/convert-query-params.d.ts +75 -0
  14. package/dist/convert-query-params.js +476 -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 +63 -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 +9 -0
  33. package/dist/import-default.js.map +1 -0
  34. package/dist/index.d.ts +30 -0
  35. package/dist/index.js +99 -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/operators.d.ts +2 -0
  41. package/dist/operators.js +69 -0
  42. package/dist/operators.js.map +1 -0
  43. package/dist/pagination.d.ts +14 -0
  44. package/dist/pagination.js +80 -0
  45. package/dist/pagination.js.map +1 -0
  46. package/dist/parse-multipart.d.ts +8 -0
  47. package/dist/parse-multipart.js +36 -0
  48. package/dist/parse-multipart.js.map +1 -0
  49. package/dist/parse-type.d.ts +21 -0
  50. package/dist/parse-type.js +108 -0
  51. package/dist/parse-type.js.map +1 -0
  52. package/dist/policy.d.ts +41 -0
  53. package/dist/policy.js +109 -0
  54. package/dist/policy.js.map +1 -0
  55. package/dist/print-value.d.ts +2 -0
  56. package/dist/print-value.js +50 -0
  57. package/dist/print-value.js.map +1 -0
  58. package/dist/provider-factory.d.ts +29 -0
  59. package/dist/provider-factory.js +80 -0
  60. package/dist/provider-factory.js.map +1 -0
  61. package/dist/relations.d.ts +10 -0
  62. package/dist/relations.js +23 -0
  63. package/dist/relations.js.map +1 -0
  64. package/dist/sanitize/index.d.ts +23 -0
  65. package/dist/sanitize/index.js +135 -0
  66. package/dist/sanitize/index.js.map +1 -0
  67. package/dist/sanitize/sanitizers.d.ts +10 -0
  68. package/dist/sanitize/sanitizers.js +114 -0
  69. package/dist/sanitize/sanitizers.js.map +1 -0
  70. package/dist/sanitize/visitors/allowed-fields.d.ts +3 -0
  71. package/{lib → dist}/sanitize/visitors/allowed-fields.js +17 -32
  72. package/dist/sanitize/visitors/allowed-fields.js.map +1 -0
  73. package/dist/sanitize/visitors/index.d.ts +7 -0
  74. package/dist/sanitize/visitors/index.js +21 -0
  75. package/dist/sanitize/visitors/index.js.map +1 -0
  76. package/dist/sanitize/visitors/remove-dynamic-zones.d.ts +3 -0
  77. package/dist/sanitize/visitors/remove-dynamic-zones.js +10 -0
  78. package/dist/sanitize/visitors/remove-dynamic-zones.js.map +1 -0
  79. package/dist/sanitize/visitors/remove-morph-to-relations.d.ts +3 -0
  80. package/dist/sanitize/visitors/remove-morph-to-relations.js +10 -0
  81. package/dist/sanitize/visitors/remove-morph-to-relations.js.map +1 -0
  82. package/dist/sanitize/visitors/remove-password.d.ts +3 -0
  83. package/dist/sanitize/visitors/remove-password.js +9 -0
  84. package/dist/sanitize/visitors/remove-password.js.map +1 -0
  85. package/dist/sanitize/visitors/remove-private.d.ts +3 -0
  86. package/dist/sanitize/visitors/remove-private.js +14 -0
  87. package/dist/sanitize/visitors/remove-private.js.map +1 -0
  88. package/dist/sanitize/visitors/remove-restricted-relations.d.ts +3 -0
  89. package/dist/sanitize/visitors/remove-restricted-relations.js +88 -0
  90. package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -0
  91. package/dist/sanitize/visitors/restricted-fields.d.ts +3 -0
  92. package/dist/sanitize/visitors/restricted-fields.js +25 -0
  93. package/dist/sanitize/visitors/restricted-fields.js.map +1 -0
  94. package/dist/set-creator-fields.d.ts +9 -0
  95. package/dist/set-creator-fields.js +39 -0
  96. package/dist/set-creator-fields.js.map +1 -0
  97. package/dist/string-formatting.d.ts +15 -0
  98. package/dist/string-formatting.js +85 -0
  99. package/dist/string-formatting.js.map +1 -0
  100. package/dist/template-configuration.d.ts +5 -0
  101. package/dist/template-configuration.js +30 -0
  102. package/dist/template-configuration.js.map +1 -0
  103. package/dist/template.d.ts +9 -0
  104. package/dist/template.js +20 -0
  105. package/dist/template.js.map +1 -0
  106. package/dist/traverse/factory.d.ts +78 -0
  107. package/dist/traverse/factory.js +127 -0
  108. package/dist/traverse/factory.js.map +1 -0
  109. package/dist/traverse/index.d.ts +5 -0
  110. package/dist/traverse/index.js +17 -0
  111. package/dist/traverse/index.js.map +1 -0
  112. package/dist/traverse/query-fields.d.ts +3 -0
  113. package/dist/traverse/query-fields.js +35 -0
  114. package/dist/traverse/query-fields.js.map +1 -0
  115. package/dist/traverse/query-filters.d.ts +3 -0
  116. package/dist/traverse/query-filters.js +75 -0
  117. package/dist/traverse/query-filters.js.map +1 -0
  118. package/dist/traverse/query-populate.d.ts +3 -0
  119. package/dist/traverse/query-populate.js +144 -0
  120. package/dist/traverse/query-populate.js.map +1 -0
  121. package/dist/traverse/query-sort.d.ts +3 -0
  122. package/dist/traverse/query-sort.js +116 -0
  123. package/dist/traverse/query-sort.js.map +1 -0
  124. package/dist/traverse-entity.d.ts +31 -0
  125. package/dist/traverse-entity.js +134 -0
  126. package/dist/traverse-entity.js.map +1 -0
  127. package/dist/types.d.ts +65 -0
  128. package/dist/types.js +3 -0
  129. package/dist/types.js.map +1 -0
  130. package/dist/validators.d.ts +13 -0
  131. package/dist/validators.js +120 -0
  132. package/dist/validators.js.map +1 -0
  133. package/dist/webhook.d.ts +5 -0
  134. package/dist/webhook.js +27 -0
  135. package/dist/webhook.js.map +1 -0
  136. package/package.json +19 -4
  137. package/.eslintignore +0 -3
  138. package/.eslintrc.js +0 -4
  139. package/index.d.ts +0 -5
  140. package/lib/async.d.ts +0 -21
  141. package/lib/async.js +0 -45
  142. package/lib/build-query.js +0 -208
  143. package/lib/code-generator.js +0 -13
  144. package/lib/config.js +0 -88
  145. package/lib/content-types.js +0 -196
  146. package/lib/convert-query-params.js +0 -586
  147. package/lib/env-helper.js +0 -98
  148. package/lib/errors.js +0 -113
  149. package/lib/file.js +0 -60
  150. package/lib/format-yup-error.js +0 -20
  151. package/lib/hooks.js +0 -110
  152. package/lib/import-default.js +0 -10
  153. package/lib/index.js +0 -99
  154. package/lib/object-formatting.js +0 -15
  155. package/lib/operators.js +0 -74
  156. package/lib/pagination.js +0 -99
  157. package/lib/parse-multipart.js +0 -44
  158. package/lib/parse-type.js +0 -100
  159. package/lib/policy.js +0 -129
  160. package/lib/print-value.js +0 -52
  161. package/lib/provider-factory.js +0 -116
  162. package/lib/relations.js +0 -31
  163. package/lib/sanitize/index.js +0 -143
  164. package/lib/sanitize/sanitizers.js +0 -163
  165. package/lib/sanitize/visitors/index.js +0 -11
  166. package/lib/sanitize/visitors/remove-dynamic-zones.js +0 -9
  167. package/lib/sanitize/visitors/remove-morph-to-relations.js +0 -9
  168. package/lib/sanitize/visitors/remove-password.js +0 -7
  169. package/lib/sanitize/visitors/remove-private.js +0 -15
  170. package/lib/sanitize/visitors/remove-restricted-relations.js +0 -81
  171. package/lib/sanitize/visitors/restricted-fields.js +0 -32
  172. package/lib/set-creator-fields.js +0 -17
  173. package/lib/string-formatting.js +0 -79
  174. package/lib/template-configuration.js +0 -32
  175. package/lib/template.js +0 -28
  176. package/lib/traverse/factory.js +0 -157
  177. package/lib/traverse/index.js +0 -16
  178. package/lib/traverse/query-fields.js +0 -39
  179. package/lib/traverse/query-filters.js +0 -97
  180. package/lib/traverse/query-populate.js +0 -191
  181. package/lib/traverse/query-sort.js +0 -171
  182. package/lib/traverse-entity.js +0 -166
  183. package/lib/validators.js +0 -120
  184. package/lib/webhook.js +0 -30
@@ -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;
@@ -0,0 +1,116 @@
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 ORDERS = { asc: 'asc', desc: 'desc' };
9
+ const ORDER_VALUES = Object.values(ORDERS);
10
+ const isSortOrder = (value) => ORDER_VALUES.includes(value.toLowerCase());
11
+ const isStringArray = (value) => Array.isArray(value) && value.every(fp_1.isString);
12
+ const isObjectArray = (value) => Array.isArray(value) && value.every(fp_1.isObject);
13
+ const isNestedSorts = (value) => (0, fp_1.isString)(value) && value.split(',').length > 1;
14
+ const isObj = (value) => (0, fp_1.isObject)(value);
15
+ const sort = (0, factory_1.default)()
16
+ .intercept(
17
+ // String with chained sorts (foo,bar,foobar) => split, map(recurse), then recompose
18
+ isNestedSorts, async (visitor, options, sort, { recurse }) => {
19
+ return Promise.all(sort
20
+ .split(',')
21
+ .map(fp_1.trim)
22
+ .map((nestedSort) => recurse(visitor, options, nestedSort))).then((res) => res.filter((part) => !(0, fp_1.isEmpty)(part)).join(','));
23
+ })
24
+ .intercept(
25
+ // Array of strings ['foo', 'foo,bar'] => map(recurse), then filter out empty items
26
+ isStringArray, async (visitor, options, sort, { recurse }) => {
27
+ return Promise.all(sort.map((nestedSort) => recurse(visitor, options, nestedSort))).then((res) => res.filter((nestedSort) => !(0, fp_1.isEmpty)(nestedSort)));
28
+ })
29
+ .intercept(
30
+ // Array of objects [{ foo: 'asc' }, { bar: 'desc', baz: 'asc' }] => map(recurse), then filter out empty items
31
+ isObjectArray, async (visitor, options, sort, { recurse }) => {
32
+ return Promise.all(sort.map((nestedSort) => recurse(visitor, options, nestedSort))).then((res) => res.filter((nestedSort) => !(0, fp_1.isEmpty)(nestedSort)));
33
+ })
34
+ // Parse string values
35
+ .parse(fp_1.isString, () => {
36
+ const tokenize = (0, fp_1.pipe)((0, fp_1.split)('.'), (0, fp_1.map)((0, fp_1.split)(':')), fp_1.flatten);
37
+ const recompose = (parts) => {
38
+ if (parts.length === 0) {
39
+ return undefined;
40
+ }
41
+ return parts.reduce((acc, part) => {
42
+ if ((0, fp_1.isEmpty)(part)) {
43
+ return acc;
44
+ }
45
+ if (acc === '') {
46
+ return part;
47
+ }
48
+ return isSortOrder(part) ? `${acc}:${part}` : `${acc}.${part}`;
49
+ }, '');
50
+ };
51
+ return {
52
+ transform: fp_1.trim,
53
+ remove(key, data) {
54
+ const [root] = tokenize(data);
55
+ return root === key ? undefined : data;
56
+ },
57
+ set(key, value, data) {
58
+ const [root] = tokenize(data);
59
+ if (root !== key) {
60
+ return data;
61
+ }
62
+ return (0, fp_1.isNil)(value) ? root : `${root}.${value}`;
63
+ },
64
+ keys(data) {
65
+ const v = (0, fp_1.first)(tokenize(data));
66
+ return v ? [v] : [];
67
+ },
68
+ get(key, data) {
69
+ const [root, ...rest] = tokenize(data);
70
+ return key === root ? recompose(rest) : undefined;
71
+ },
72
+ };
73
+ })
74
+ // Parse object values
75
+ .parse(isObj, () => ({
76
+ transform: fp_1.cloneDeep,
77
+ remove(key, data) {
78
+ const { [key]: ignored, ...rest } = data;
79
+ return rest;
80
+ },
81
+ set(key, value, data) {
82
+ return { ...data, [key]: value };
83
+ },
84
+ keys(data) {
85
+ return Object.keys(data);
86
+ },
87
+ get(key, data) {
88
+ return data[key];
89
+ },
90
+ }))
91
+ // Handle deep sort on relation
92
+ .onRelation(async ({ key, value, attribute, visitor, path }, { set, recurse }) => {
93
+ const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');
94
+ if (isMorphRelation) {
95
+ return;
96
+ }
97
+ const targetSchemaUID = attribute.target;
98
+ const targetSchema = strapi.getModel(targetSchemaUID);
99
+ const newValue = await recurse(visitor, { schema: targetSchema, path }, value);
100
+ set(key, newValue);
101
+ })
102
+ // Handle deep sort on media
103
+ .onMedia(async ({ key, path, visitor, value }, { recurse, set }) => {
104
+ const targetSchemaUID = 'plugin::upload.file';
105
+ const targetSchema = strapi.getModel(targetSchemaUID);
106
+ const newValue = await recurse(visitor, { schema: targetSchema, path }, value);
107
+ set(key, newValue);
108
+ })
109
+ // Handle deep sort on components
110
+ .onComponent(async ({ key, value, visitor, path, attribute }, { recurse, set }) => {
111
+ const targetSchema = strapi.getModel(attribute.component);
112
+ const newValue = await recurse(visitor, { schema: targetSchema, path }, value);
113
+ set(key, newValue);
114
+ });
115
+ exports.default = (0, fp_1.curry)(sort.traverse);
116
+ //# sourceMappingURL=query-sort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-sort.js","sourceRoot":"","sources":["../../src/traverse/query-sort.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /// <reference types="lodash" />
2
+ import type { Attribute, Model } from './types';
3
+ export type VisitorUtils = ReturnType<typeof createVisitorUtils>;
4
+ export interface VisitorOptions {
5
+ data: Record<string, unknown>;
6
+ schema: Model;
7
+ key: string;
8
+ value: Data | Data[];
9
+ attribute: Attribute;
10
+ path: Path;
11
+ }
12
+ export type Visitor = (visitorOptions: VisitorOptions, visitorUtils: VisitorUtils) => void;
13
+ export interface Data {
14
+ [key: string]: Data | Data[];
15
+ }
16
+ export interface Path {
17
+ raw: string | null;
18
+ attribute: string | null;
19
+ }
20
+ export interface TraverseOptions {
21
+ path?: Path;
22
+ schema: Model;
23
+ }
24
+ declare const createVisitorUtils: ({ data }: {
25
+ data: Data;
26
+ }) => {
27
+ remove(key: string): void;
28
+ set(key: string, value: Data): void;
29
+ };
30
+ declare const _default: import("lodash").CurriedFunction3<Visitor, TraverseOptions, Data, Promise<Data>>;
31
+ export default _default;
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fp_1 = require("lodash/fp");
4
+ const content_types_1 = require("./content-types");
5
+ const traverseMorphRelationTarget = async (visitor, path, entry) => {
6
+ const targetSchema = strapi.getModel(entry.__type);
7
+ const traverseOptions = { schema: targetSchema, path };
8
+ return traverseEntity(visitor, traverseOptions, entry);
9
+ };
10
+ const traverseRelationTarget = (schema) => async (visitor, path, entry) => {
11
+ const traverseOptions = { schema, path };
12
+ return traverseEntity(visitor, traverseOptions, entry);
13
+ };
14
+ const traverseMediaTarget = async (visitor, path, entry) => {
15
+ const targetSchemaUID = 'plugin::upload.file';
16
+ const targetSchema = strapi.getModel(targetSchemaUID);
17
+ const traverseOptions = { schema: targetSchema, path };
18
+ return traverseEntity(visitor, traverseOptions, entry);
19
+ };
20
+ const traverseComponent = async (visitor, path, schema, entry) => {
21
+ const traverseOptions = { schema, path };
22
+ return traverseEntity(visitor, traverseOptions, entry);
23
+ };
24
+ const visitDynamicZoneEntry = async (visitor, path, entry) => {
25
+ const targetSchema = strapi.getModel(entry.__component);
26
+ const traverseOptions = { schema: targetSchema, path };
27
+ return traverseEntity(visitor, traverseOptions, entry);
28
+ };
29
+ const traverseEntity = async (visitor, options, entity) => {
30
+ const { path = { raw: null, attribute: null }, schema } = options;
31
+ // End recursion
32
+ if (!(0, fp_1.isObject)(entity) || (0, fp_1.isNil)(schema)) {
33
+ return entity;
34
+ }
35
+ // Don't mutate the original entity object
36
+ // only clone at 1st level as the next level will get clone when traversed
37
+ const copy = (0, fp_1.clone)(entity);
38
+ const visitorUtils = createVisitorUtils({ data: copy });
39
+ const keys = Object.keys(copy);
40
+ for (let i = 0; i < keys.length; i += 1) {
41
+ const key = keys[i];
42
+ // Retrieve the attribute definition associated to the key from the schema
43
+ const attribute = schema.attributes[key];
44
+ // If the attribute doesn't exist within the schema, ignore it
45
+ if ((0, fp_1.isNil)(attribute)) {
46
+ continue;
47
+ }
48
+ const newPath = { ...path };
49
+ newPath.raw = (0, fp_1.isNil)(path.raw) ? key : `${path.raw}.${key}`;
50
+ if (!(0, fp_1.isNil)(attribute)) {
51
+ newPath.attribute = (0, fp_1.isNil)(path.attribute) ? key : `${path.attribute}.${key}`;
52
+ }
53
+ // Visit the current attribute
54
+ const visitorOptions = {
55
+ data: copy,
56
+ schema,
57
+ key,
58
+ value: copy[key],
59
+ attribute,
60
+ path: newPath,
61
+ };
62
+ await visitor(visitorOptions, visitorUtils);
63
+ // Extract the value for the current key (after calling the visitor)
64
+ const value = copy[key];
65
+ // Ignore Nil values
66
+ if ((0, fp_1.isNil)(value)) {
67
+ continue;
68
+ }
69
+ if ((0, content_types_1.isRelationalAttribute)(attribute)) {
70
+ const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');
71
+ const method = isMorphRelation
72
+ ? traverseMorphRelationTarget
73
+ : traverseRelationTarget(strapi.getModel(attribute.target));
74
+ if ((0, fp_1.isArray)(value)) {
75
+ const res = new Array(value.length);
76
+ for (let i = 0; i < value.length; i += 1) {
77
+ res[i] = await method(visitor, newPath, value[i]);
78
+ }
79
+ copy[key] = res;
80
+ }
81
+ else {
82
+ copy[key] = await method(visitor, newPath, value);
83
+ }
84
+ continue;
85
+ }
86
+ if ((0, content_types_1.isMediaAttribute)(attribute)) {
87
+ // need to update copy
88
+ if ((0, fp_1.isArray)(value)) {
89
+ const res = new Array(value.length);
90
+ for (let i = 0; i < value.length; i += 1) {
91
+ res[i] = await traverseMediaTarget(visitor, newPath, value[i]);
92
+ }
93
+ copy[key] = res;
94
+ }
95
+ else {
96
+ copy[key] = await traverseMediaTarget(visitor, newPath, value);
97
+ }
98
+ continue;
99
+ }
100
+ if (attribute.type === 'component') {
101
+ const targetSchema = strapi.getModel(attribute.component);
102
+ if ((0, fp_1.isArray)(value)) {
103
+ const res = new Array(value.length);
104
+ for (let i = 0; i < value.length; i += 1) {
105
+ res[i] = await traverseComponent(visitor, newPath, targetSchema, value[i]);
106
+ }
107
+ copy[key] = res;
108
+ }
109
+ else {
110
+ copy[key] = await traverseComponent(visitor, newPath, targetSchema, value);
111
+ }
112
+ continue;
113
+ }
114
+ if (attribute.type === 'dynamiczone' && (0, fp_1.isArray)(value)) {
115
+ const res = new Array(value.length);
116
+ for (let i = 0; i < value.length; i += 1) {
117
+ res[i] = await visitDynamicZoneEntry(visitor, newPath, value[i]);
118
+ }
119
+ copy[key] = res;
120
+ continue;
121
+ }
122
+ }
123
+ return copy;
124
+ };
125
+ const createVisitorUtils = ({ data }) => ({
126
+ remove(key) {
127
+ delete data[key];
128
+ },
129
+ set(key, value) {
130
+ data[key] = value;
131
+ },
132
+ });
133
+ exports.default = (0, fp_1.curry)(traverseEntity);
134
+ //# sourceMappingURL=traverse-entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traverse-entity.js","sourceRoot":"","sources":["../src/traverse-entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type * as Koa from 'koa';
2
+ export interface Config {
3
+ get<T = unknown>(key: string, defaultVal?: T): T;
4
+ }
5
+ export interface Attribute {
6
+ type: string;
7
+ writable?: boolean;
8
+ relation?: string;
9
+ [key: string]: unknown;
10
+ }
11
+ export interface RelationalAttribute extends Attribute {
12
+ relation: string;
13
+ target: string;
14
+ }
15
+ export interface ComponentAttribute extends Attribute {
16
+ component: string;
17
+ repeatable?: boolean;
18
+ }
19
+ export interface DynamicZoneAttribute extends Attribute {
20
+ components: string[];
21
+ }
22
+ export type Kind = 'singleType' | 'collectionType';
23
+ export interface Model {
24
+ uid?: string;
25
+ kind: Kind;
26
+ info: {
27
+ singularName: string;
28
+ pluralName: string;
29
+ };
30
+ options: {
31
+ populateCreatorFields: boolean;
32
+ };
33
+ privateAttributes?: string[];
34
+ attributes: Record<string, Attribute>;
35
+ }
36
+ declare module 'koa' {
37
+ interface ExtendableContext {
38
+ ok: (response?: string | object) => Koa.Context;
39
+ created: (response?: string | object) => Koa.Context;
40
+ noContent: (response?: string | object) => Koa.Context;
41
+ badRequest: (response?: string | object) => Koa.Context;
42
+ unauthorized: (response?: string | object) => Koa.Context;
43
+ forbidden: (response?: string | object) => Koa.Context;
44
+ notFound: (response?: string | object) => Koa.Context;
45
+ locked: (response?: string | object) => Koa.Context;
46
+ internalServerError: (response?: string | object) => Koa.Context;
47
+ notImplemented: (response?: string | object) => Koa.Context;
48
+ }
49
+ }
50
+ export interface RouteInfo {
51
+ endpoint: string;
52
+ controller: string;
53
+ action: string;
54
+ verb: string;
55
+ plugin: string;
56
+ }
57
+ export interface Request extends Koa.Request {
58
+ body: {
59
+ data?: string;
60
+ };
61
+ route: RouteInfo;
62
+ }
63
+ export interface Context extends Koa.ExtendableContext {
64
+ request: Request;
65
+ }
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import * as yup from 'yup';
2
+ declare const MixedSchemaType: typeof import("yup/lib/mixed").MixedSchema;
3
+ declare class StrapiIDSchema extends MixedSchemaType {
4
+ constructor();
5
+ _typeCheck(value: unknown): value is string | number;
6
+ }
7
+ declare const handleYupError: (error: yup.ValidationError, errorMessage: string) => never;
8
+ declare const validateYupSchema: (schema: yup.AnySchema, options?: {}) => (body: unknown, errorMessage: string) => Promise<any>;
9
+ declare const validateYupSchemaSync: (schema: yup.AnySchema, options?: {}) => (body: unknown, errorMessage: string) => any;
10
+ declare const customYup: typeof yup & {
11
+ strapiID: () => InstanceType<typeof StrapiIDSchema>;
12
+ };
13
+ export { customYup as yup, StrapiIDSchema, handleYupError, validateYupSchema, validateYupSchemaSync, };