@strapi/utils 4.10.1 → 4.10.2-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/async.d.ts +15 -0
- package/dist/async.js +33 -0
- package/dist/async.js.map +1 -0
- package/dist/code-generator.d.ts +2 -0
- package/dist/code-generator.js +11 -0
- package/dist/code-generator.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.js +79 -0
- package/dist/config.js.map +1 -0
- package/dist/content-types.d.ts +60 -0
- package/dist/content-types.js +143 -0
- package/dist/content-types.js.map +1 -0
- package/dist/env-helper.d.ts +2 -0
- package/dist/env-helper.js +83 -0
- package/dist/env-helper.js.map +1 -0
- package/dist/errors.d.ts +37 -0
- package/dist/errors.js +100 -0
- package/dist/errors.js.map +1 -0
- package/dist/file.d.ts +16 -0
- package/dist/file.js +54 -0
- package/dist/file.js.map +1 -0
- package/dist/format-yup-error.d.ts +10 -0
- package/dist/format-yup-error.js +17 -0
- package/dist/format-yup-error.js.map +1 -0
- package/dist/hooks.d.ts +92 -0
- package/dist/hooks.js +89 -0
- package/dist/hooks.js.map +1 -0
- package/dist/import-default.d.ts +2 -0
- package/dist/import-default.js +7 -0
- package/dist/import-default.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/object-formatting.d.ts +3 -0
- package/dist/object-formatting.js +14 -0
- package/dist/object-formatting.js.map +1 -0
- package/dist/pagination.d.ts +14 -0
- package/dist/pagination.js +80 -0
- package/dist/pagination.js.map +1 -0
- package/dist/parse-multipart.d.ts +8 -0
- package/dist/parse-multipart.js +36 -0
- package/dist/parse-multipart.js.map +1 -0
- package/dist/parse-type.d.ts +1 -0
- package/dist/parse-type.js +95 -0
- package/dist/parse-type.js.map +1 -0
- package/dist/policy.d.ts +41 -0
- package/dist/policy.js +109 -0
- package/dist/policy.js.map +1 -0
- package/dist/print-value.d.ts +2 -0
- package/dist/print-value.js +50 -0
- package/dist/print-value.js.map +1 -0
- package/dist/provider-factory.d.ts +84 -0
- package/dist/provider-factory.js +87 -0
- package/dist/provider-factory.js.map +1 -0
- package/dist/relations.d.ts +10 -0
- package/dist/relations.js +23 -0
- package/dist/relations.js.map +1 -0
- package/dist/sanitize/index.d.ts +28 -0
- package/dist/sanitize/index.js +135 -0
- package/dist/sanitize/index.js.map +1 -0
- package/dist/sanitize/sanitizers.d.ts +10 -0
- package/dist/sanitize/sanitizers.js +106 -0
- package/dist/sanitize/sanitizers.js.map +1 -0
- package/dist/sanitize/visitors/allowed-fields.d.ts +3 -0
- package/dist/sanitize/visitors/allowed-fields.js +83 -0
- package/dist/sanitize/visitors/allowed-fields.js.map +1 -0
- package/dist/sanitize/visitors/index.d.ts +7 -0
- package/dist/sanitize/visitors/index.js +21 -0
- package/dist/sanitize/visitors/index.js.map +1 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.d.ts +3 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.js +10 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.js.map +1 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.d.ts +3 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.js +10 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.js.map +1 -0
- package/dist/sanitize/visitors/remove-password.d.ts +3 -0
- package/dist/sanitize/visitors/remove-password.js +9 -0
- package/dist/sanitize/visitors/remove-password.js.map +1 -0
- package/dist/sanitize/visitors/remove-private.d.ts +3 -0
- package/dist/sanitize/visitors/remove-private.js +14 -0
- package/dist/sanitize/visitors/remove-private.js.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-relations.d.ts +3 -0
- package/dist/sanitize/visitors/remove-restricted-relations.js +88 -0
- package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -0
- package/dist/sanitize/visitors/restricted-fields.d.ts +3 -0
- package/dist/sanitize/visitors/restricted-fields.js +25 -0
- package/dist/sanitize/visitors/restricted-fields.js.map +1 -0
- package/dist/set-creator-fields.d.ts +9 -0
- package/dist/set-creator-fields.js +37 -0
- package/dist/set-creator-fields.js.map +1 -0
- package/dist/string-formatting.d.ts +16 -0
- package/dist/string-formatting.js +85 -0
- package/dist/string-formatting.js.map +1 -0
- package/dist/template-configuration.d.ts +5 -0
- package/dist/template-configuration.js +28 -0
- package/dist/template-configuration.js.map +1 -0
- package/dist/template.d.ts +9 -0
- package/dist/template.js +20 -0
- package/dist/template.js.map +1 -0
- package/dist/traverse/factory.d.ts +13 -0
- package/dist/traverse/factory.js +126 -0
- package/dist/traverse/factory.js.map +1 -0
- package/dist/traverse/index.d.ts +5 -0
- package/dist/traverse/index.js +17 -0
- package/dist/traverse/index.js.map +1 -0
- package/dist/traverse/query-fields.d.ts +3 -0
- package/dist/traverse/query-fields.js +35 -0
- package/dist/traverse/query-fields.js.map +1 -0
- package/dist/traverse/query-filters.d.ts +3 -0
- package/dist/traverse/query-filters.js +73 -0
- package/dist/traverse/query-filters.js.map +1 -0
- package/dist/traverse/query-populate.d.ts +3 -0
- package/dist/traverse/query-populate.js +140 -0
- package/dist/traverse/query-populate.js.map +1 -0
- package/dist/traverse/query-sort.d.ts +3 -0
- package/dist/traverse/query-sort.js +114 -0
- package/dist/traverse/query-sort.js.map +1 -0
- package/dist/traverse-entity.d.ts +33 -0
- package/dist/traverse-entity.js +134 -0
- package/dist/traverse-entity.js.map +1 -0
- package/dist/types.d.ts +57 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/validators.d.ts +5 -0
- package/dist/validators.js +110 -0
- package/dist/validators.js.map +1 -0
- package/dist/webhook.d.ts +10 -0
- package/dist/webhook.js +14 -0
- package/dist/webhook.js.map +1 -0
- package/index.d.ts +5 -3
- package/package.json +2 -2
- package/coverage/clover.xml +0 -638
- package/coverage/coverage-final.json +0 -24
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -146
- package/coverage/lcov-report/lib/async.js.html +0 -223
- package/coverage/lcov-report/lib/content-types.js.html +0 -643
- package/coverage/lcov-report/lib/env-helper.js.html +0 -319
- package/coverage/lcov-report/lib/errors.js.html +0 -397
- package/coverage/lcov-report/lib/format-yup-error.js.html +0 -145
- package/coverage/lcov-report/lib/hooks.js.html +0 -415
- package/coverage/lcov-report/lib/import-default.js.html +0 -115
- package/coverage/lcov-report/lib/index.html +0 -326
- package/coverage/lcov-report/lib/pagination.js.html +0 -382
- package/coverage/lcov-report/lib/parse-type.js.html +0 -385
- package/coverage/lcov-report/lib/policy.js.html +0 -472
- package/coverage/lcov-report/lib/print-value.js.html +0 -241
- package/coverage/lcov-report/lib/provider-factory.js.html +0 -433
- package/coverage/lcov-report/lib/relations.js.html +0 -178
- package/coverage/lcov-report/lib/sanitize/visitors/allowed-fields.js.html +0 -367
- package/coverage/lcov-report/lib/sanitize/visitors/index.html +0 -191
- package/coverage/lcov-report/lib/sanitize/visitors/index.js.html +0 -112
- package/coverage/lcov-report/lib/sanitize/visitors/remove-password.js.html +0 -106
- package/coverage/lcov-report/lib/sanitize/visitors/remove-private.js.html +0 -118
- package/coverage/lcov-report/lib/sanitize/visitors/remove-restricted-relations.js.html +0 -316
- package/coverage/lcov-report/lib/sanitize/visitors/restricted-fields.js.html +0 -181
- package/coverage/lcov-report/lib/string-formatting.js.html +0 -322
- package/coverage/lcov-report/lib/validators.js.html +0 -445
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
const fp_1 = require("lodash/fp");
|
|
26
|
+
const contentTypes = __importStar(require("./content-types"));
|
|
27
|
+
const { CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } = contentTypes.constants;
|
|
28
|
+
module.exports = ({ user, isEdition = false }) => (data) => {
|
|
29
|
+
if (isEdition) {
|
|
30
|
+
return (0, fp_1.assoc)(UPDATED_BY_ATTRIBUTE, user.id, data);
|
|
31
|
+
}
|
|
32
|
+
return (0, fp_1.assign)(data, {
|
|
33
|
+
[CREATED_BY_ATTRIBUTE]: user.id,
|
|
34
|
+
[UPDATED_BY_ATTRIBUTE]: user.id,
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=set-creator-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-creator-fields.js","sourceRoot":"","sources":["../src/set-creator-fields.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,kCAA0C;AAC1C,8DAAgD;AAEhD,MAAM,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC;AAW9E,iBAAS,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,KAAK,EAAW,EAAE,EAAE,CAChD,CAAC,IAAY,EAAE,EAAE;IACf,IAAI,SAAS,EAAE;QACb,OAAO,IAAA,UAAK,EAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;KACnD;IAED,OAAO,IAAA,WAAM,EAAC,IAAI,EAAE;QAClB,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,EAAE;QAC/B,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,EAAE;KAChC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
declare const nameToSlug: (name: string, options?: {
|
|
2
|
+
separator: string;
|
|
3
|
+
}) => string;
|
|
4
|
+
declare const nameToCollectionName: (name: string) => string;
|
|
5
|
+
declare const toRegressedEnumValue: (value: string) => string;
|
|
6
|
+
declare const getCommonBeginning: (...strings: string[]) => string;
|
|
7
|
+
declare const getCommonPath: (...paths: string[]) => string;
|
|
8
|
+
declare const escapeQuery: (query: string, charsToEscape: string[], escapeChar?: string) => string;
|
|
9
|
+
declare const stringIncludes: (arr: unknown[], val: unknown) => boolean;
|
|
10
|
+
declare const stringEquals: (a: unknown, b: unknown) => boolean;
|
|
11
|
+
declare const isCamelCase: (value: string) => boolean;
|
|
12
|
+
declare const isKebabCase: (value: string) => boolean;
|
|
13
|
+
declare const startsWithANumber: (value: string) => boolean;
|
|
14
|
+
declare const joinBy: (joint: string, ...args: string[]) => string;
|
|
15
|
+
declare const toKebabCase: (value: string) => string;
|
|
16
|
+
export { nameToSlug, nameToCollectionName, getCommonBeginning, getCommonPath, escapeQuery, stringIncludes, stringEquals, isCamelCase, isKebabCase, toKebabCase, toRegressedEnumValue, startsWithANumber, joinBy, };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.joinBy = exports.startsWithANumber = exports.toRegressedEnumValue = exports.toKebabCase = exports.isKebabCase = exports.isCamelCase = exports.stringEquals = exports.stringIncludes = exports.escapeQuery = exports.getCommonPath = exports.getCommonBeginning = exports.nameToCollectionName = exports.nameToSlug = void 0;
|
|
30
|
+
const lodash_1 = __importStar(require("lodash"));
|
|
31
|
+
const fp_1 = require("lodash/fp");
|
|
32
|
+
const slugify_1 = __importDefault(require("@sindresorhus/slugify"));
|
|
33
|
+
const nameToSlug = (name, options = { separator: '-' }) => (0, slugify_1.default)(name, options);
|
|
34
|
+
exports.nameToSlug = nameToSlug;
|
|
35
|
+
const nameToCollectionName = (name) => (0, slugify_1.default)(name, { separator: '_' });
|
|
36
|
+
exports.nameToCollectionName = nameToCollectionName;
|
|
37
|
+
const toRegressedEnumValue = (value) => (0, slugify_1.default)(value, {
|
|
38
|
+
decamelize: false,
|
|
39
|
+
lowercase: false,
|
|
40
|
+
separator: '_',
|
|
41
|
+
});
|
|
42
|
+
exports.toRegressedEnumValue = toRegressedEnumValue;
|
|
43
|
+
const getCommonBeginning = (...strings) => lodash_1.default.takeWhile(strings[0], (char, index) => strings.every((string) => string[index] === char)).join('');
|
|
44
|
+
exports.getCommonBeginning = getCommonBeginning;
|
|
45
|
+
const getCommonPath = (...paths) => {
|
|
46
|
+
const [segments, ...otherSegments] = paths.map((it) => lodash_1.default.split(it, '/'));
|
|
47
|
+
return lodash_1.default.join(lodash_1.default.takeWhile(segments, (str, index) => otherSegments.every((it) => it[index] === str)), '/');
|
|
48
|
+
};
|
|
49
|
+
exports.getCommonPath = getCommonPath;
|
|
50
|
+
const escapeQuery = (query, charsToEscape, escapeChar = '\\') => {
|
|
51
|
+
return query
|
|
52
|
+
.split('')
|
|
53
|
+
.reduce((escapedQuery, char) => charsToEscape.includes(char)
|
|
54
|
+
? `${escapedQuery}${escapeChar}${char}`
|
|
55
|
+
: `${escapedQuery}${char}`, '');
|
|
56
|
+
};
|
|
57
|
+
exports.escapeQuery = escapeQuery;
|
|
58
|
+
const stringIncludes = (arr, val) => arr.map(String).includes(String(val));
|
|
59
|
+
exports.stringIncludes = stringIncludes;
|
|
60
|
+
const stringEquals = (a, b) => String(a) === String(b);
|
|
61
|
+
exports.stringEquals = stringEquals;
|
|
62
|
+
const isCamelCase = (value) => /^[a-z][a-zA-Z0-9]+$/.test(value);
|
|
63
|
+
exports.isCamelCase = isCamelCase;
|
|
64
|
+
const isKebabCase = (value) => /^([a-z][a-z0-9]*)(-[a-z0-9]+)*$/.test(value);
|
|
65
|
+
exports.isKebabCase = isKebabCase;
|
|
66
|
+
const startsWithANumber = (value) => /^[0-9]/.test(value);
|
|
67
|
+
exports.startsWithANumber = startsWithANumber;
|
|
68
|
+
const joinBy = (joint, ...args) => {
|
|
69
|
+
const trim = (0, fp_1.trimChars)(joint);
|
|
70
|
+
const trimEnd = (0, fp_1.trimCharsEnd)(joint);
|
|
71
|
+
const trimStart = (0, fp_1.trimCharsStart)(joint);
|
|
72
|
+
return args.reduce((url, path, index) => {
|
|
73
|
+
if (args.length === 1)
|
|
74
|
+
return path;
|
|
75
|
+
if (index === 0)
|
|
76
|
+
return trimEnd(path);
|
|
77
|
+
if (index === args.length - 1)
|
|
78
|
+
return url + joint + trimStart(path);
|
|
79
|
+
return url + joint + trim(path);
|
|
80
|
+
}, '');
|
|
81
|
+
};
|
|
82
|
+
exports.joinBy = joinBy;
|
|
83
|
+
const toKebabCase = (value) => (0, lodash_1.kebabCase)(value);
|
|
84
|
+
exports.toKebabCase = toKebabCase;
|
|
85
|
+
//# sourceMappingURL=string-formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-formatting.js","sourceRoot":"","sources":["../src/string-formatting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const lodash_1 = require("lodash");
|
|
3
|
+
const regex = /\$\{[^()]*\}/g;
|
|
4
|
+
const excludeConfigPaths = ['info.scripts'];
|
|
5
|
+
/**
|
|
6
|
+
* Allow dynamic config values through the native ES6 template string function.
|
|
7
|
+
*/
|
|
8
|
+
const templateConfiguration = (obj, configPath = '') => {
|
|
9
|
+
// Allow values which looks like such as an ES6 literal string without parenthesis inside (aka function call).
|
|
10
|
+
// Exclude config with conflicting syntax (e.g. npm scripts).
|
|
11
|
+
return Object.keys(obj).reduce((acc, key) => {
|
|
12
|
+
if ((0, lodash_1.isPlainObject)(obj[key]) && !(0, lodash_1.isString)(obj[key])) {
|
|
13
|
+
acc[key] = templateConfiguration(obj[key], `${configPath}.${key}`);
|
|
14
|
+
}
|
|
15
|
+
else if ((0, lodash_1.isString)(obj[key]) &&
|
|
16
|
+
!excludeConfigPaths.includes(configPath.substr(1)) &&
|
|
17
|
+
obj[key].match(regex) !== null) {
|
|
18
|
+
// eslint-disable-next-line prefer-template, no-eval
|
|
19
|
+
acc[key] = eval('`' + obj[key] + '`');
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
acc[key] = obj[key];
|
|
23
|
+
}
|
|
24
|
+
return acc;
|
|
25
|
+
}, {});
|
|
26
|
+
};
|
|
27
|
+
module.exports = templateConfiguration;
|
|
28
|
+
//# sourceMappingURL=template-configuration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-configuration.js","sourceRoot":"","sources":["../src/template-configuration.ts"],"names":[],"mappings":";AAAA,mCAAiD;AAEjD,MAAM,KAAK,GAAG,eAAe,CAAC;AAC9B,MAAM,kBAAkB,GAAG,CAAC,cAAc,CAAC,CAAC;AAE5C;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAAC,GAAwB,EAAE,UAAU,GAAG,EAAE,EAAE,EAAE;IAC1E,8GAA8G;IAC9G,6DAA6D;IAC7D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,IAAI,IAAA,sBAAa,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAA,iBAAQ,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;YAClD,GAAG,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;SACpE;aAAM,IACL,IAAA,iBAAQ,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClD,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,EAC9B;YACA,oDAAoD;YACpD,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;SACvC;aAAM;YACL,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;SACrB;QAED,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAyB,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,iBAAS,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a strict interpolation RegExp based on the given variables' name
|
|
3
|
+
*/
|
|
4
|
+
declare const createStrictInterpolationRegExp: (allowedVariableNames: string[], flags: string) => RegExp;
|
|
5
|
+
/**
|
|
6
|
+
* Create a loose interpolation RegExp to match as many groups as possible
|
|
7
|
+
*/
|
|
8
|
+
declare const createLooseInterpolationRegExp: (flags: string) => RegExp;
|
|
9
|
+
export { createStrictInterpolationRegExp, createLooseInterpolationRegExp };
|
package/dist/template.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createLooseInterpolationRegExp = exports.createStrictInterpolationRegExp = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Create a strict interpolation RegExp based on the given variables' name
|
|
6
|
+
*/
|
|
7
|
+
const createStrictInterpolationRegExp = (allowedVariableNames, flags) => {
|
|
8
|
+
const oneOfVariables = allowedVariableNames.join('|');
|
|
9
|
+
// 1. We need to match the delimiters: <%= ... %>
|
|
10
|
+
// 2. We accept any number of whitespaces characters before and/or after the variable name: \s* ... \s*
|
|
11
|
+
// 3. We only accept values from the variable list as interpolation variables' name: : (${oneOfVariables})
|
|
12
|
+
return new RegExp(`<%=\\s*(${oneOfVariables})\\s*%>`, flags);
|
|
13
|
+
};
|
|
14
|
+
exports.createStrictInterpolationRegExp = createStrictInterpolationRegExp;
|
|
15
|
+
/**
|
|
16
|
+
* Create a loose interpolation RegExp to match as many groups as possible
|
|
17
|
+
*/
|
|
18
|
+
const createLooseInterpolationRegExp = (flags) => new RegExp(/<%=([\s\S]+?)%>/, flags);
|
|
19
|
+
exports.createLooseInterpolationRegExp = createLooseInterpolationRegExp;
|
|
20
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAM,+BAA+B,GAAG,CAAC,oBAA8B,EAAE,KAAa,EAAE,EAAE;IACxF,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtD,iDAAiD;IACjD,uGAAuG;IACvG,0GAA0G;IAC1G,OAAO,IAAI,MAAM,CAAC,WAAW,cAAc,SAAS,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC,CAAC;AAOO,0EAA+B;AALxC;;GAEG;AACH,MAAM,8BAA8B,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;AAErD,wEAA8B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare const _default: () => {
|
|
2
|
+
traverse: (visitor: any, options: any, data: any) => Promise<any>;
|
|
3
|
+
intercept(predicate: any, handler: any): any;
|
|
4
|
+
parse(predicate: any, parser: any): any;
|
|
5
|
+
ignore(predicate: any): any;
|
|
6
|
+
on(predicate: any, handler: any): any;
|
|
7
|
+
onAttribute(predicate: any, handler: any): any;
|
|
8
|
+
onRelation(handler: any): any;
|
|
9
|
+
onMedia(handler: any): any;
|
|
10
|
+
onComponent(handler: any): any;
|
|
11
|
+
onDynamicZone(handler: any): any;
|
|
12
|
+
};
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,126 @@
|
|
|
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
|
+
exports.default = () => {
|
|
6
|
+
const state = {
|
|
7
|
+
parsers: [],
|
|
8
|
+
interceptors: [],
|
|
9
|
+
ignore: [],
|
|
10
|
+
handlers: {
|
|
11
|
+
attributes: [],
|
|
12
|
+
common: [],
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
const traverse = async (visitor, options, data) => {
|
|
16
|
+
const { path = { raw: null, attribute: null }, schema } = options ?? {};
|
|
17
|
+
// interceptors
|
|
18
|
+
for (const { predicate, handler } of state.interceptors) {
|
|
19
|
+
if (predicate(data)) {
|
|
20
|
+
return handler(visitor, options, data, { recurse: traverse });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// parsers
|
|
24
|
+
const parser = state.parsers.find((parser) => parser.predicate(data))?.parser;
|
|
25
|
+
const utils = parser?.(data);
|
|
26
|
+
// Return the data untouched if we don't know how to traverse it
|
|
27
|
+
if (!utils) {
|
|
28
|
+
return data;
|
|
29
|
+
}
|
|
30
|
+
// main loop
|
|
31
|
+
let out = utils.transform(data);
|
|
32
|
+
const keys = utils.keys(out);
|
|
33
|
+
for (const key of keys) {
|
|
34
|
+
const attribute = schema?.attributes?.[key] ??
|
|
35
|
+
// FIX: Needed to not break existing behavior on the API.
|
|
36
|
+
// It looks for the attribute in the DB metadata when the key is in snake_case
|
|
37
|
+
schema?.attributes?.[strapi.db.metadata.get(schema?.uid).columnToAttribute[key]];
|
|
38
|
+
const newPath = { ...path };
|
|
39
|
+
newPath.raw = (0, fp_1.isNil)(path.raw) ? key : `${path.raw}.${key}`;
|
|
40
|
+
if (!(0, fp_1.isNil)(attribute)) {
|
|
41
|
+
newPath.attribute = (0, fp_1.isNil)(path.attribute) ? key : `${path.attribute}.${key}`;
|
|
42
|
+
}
|
|
43
|
+
// visitors
|
|
44
|
+
const visitorOptions = {
|
|
45
|
+
key,
|
|
46
|
+
value: utils.get(key, out),
|
|
47
|
+
attribute,
|
|
48
|
+
schema,
|
|
49
|
+
path: newPath,
|
|
50
|
+
data: out,
|
|
51
|
+
};
|
|
52
|
+
const transformUtils = {
|
|
53
|
+
remove(key) {
|
|
54
|
+
out = utils.remove(key, out);
|
|
55
|
+
},
|
|
56
|
+
set(key, value) {
|
|
57
|
+
out = utils.set(key, value, out);
|
|
58
|
+
},
|
|
59
|
+
recurse: traverse,
|
|
60
|
+
};
|
|
61
|
+
await visitor(visitorOptions, (0, fp_1.pick)(['remove', 'set'], transformUtils));
|
|
62
|
+
const value = utils.get(key, out);
|
|
63
|
+
const createContext = () => ({
|
|
64
|
+
key,
|
|
65
|
+
value,
|
|
66
|
+
attribute,
|
|
67
|
+
schema,
|
|
68
|
+
path: newPath,
|
|
69
|
+
data: out,
|
|
70
|
+
visitor,
|
|
71
|
+
});
|
|
72
|
+
// ignore
|
|
73
|
+
const ignoreCtx = createContext();
|
|
74
|
+
const shouldIgnore = state.ignore.some((predicate) => predicate(ignoreCtx));
|
|
75
|
+
if (shouldIgnore) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// handlers
|
|
79
|
+
const handlers = [...state.handlers.common, ...state.handlers.attributes];
|
|
80
|
+
for await (const handler of handlers) {
|
|
81
|
+
const ctx = createContext();
|
|
82
|
+
const pass = await handler.predicate(ctx);
|
|
83
|
+
if (pass) {
|
|
84
|
+
await handler.handler(ctx, (0, fp_1.pick)(['recurse', 'set'], transformUtils));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
};
|
|
90
|
+
return {
|
|
91
|
+
traverse,
|
|
92
|
+
intercept(predicate, handler) {
|
|
93
|
+
state.interceptors.push({ predicate, handler });
|
|
94
|
+
return this;
|
|
95
|
+
},
|
|
96
|
+
parse(predicate, parser) {
|
|
97
|
+
state.parsers.push({ predicate, parser });
|
|
98
|
+
return this;
|
|
99
|
+
},
|
|
100
|
+
ignore(predicate) {
|
|
101
|
+
state.ignore.push(predicate);
|
|
102
|
+
return this;
|
|
103
|
+
},
|
|
104
|
+
on(predicate, handler) {
|
|
105
|
+
state.handlers.common.push({ predicate, handler });
|
|
106
|
+
return this;
|
|
107
|
+
},
|
|
108
|
+
onAttribute(predicate, handler) {
|
|
109
|
+
state.handlers.attributes.push({ predicate, handler });
|
|
110
|
+
return this;
|
|
111
|
+
},
|
|
112
|
+
onRelation(handler) {
|
|
113
|
+
return this.onAttribute(({ attribute }) => attribute?.type === 'relation', handler);
|
|
114
|
+
},
|
|
115
|
+
onMedia(handler) {
|
|
116
|
+
return this.onAttribute(({ attribute }) => attribute?.type === 'media', handler);
|
|
117
|
+
},
|
|
118
|
+
onComponent(handler) {
|
|
119
|
+
return this.onAttribute(({ attribute }) => attribute?.type === 'component', handler);
|
|
120
|
+
},
|
|
121
|
+
onDynamicZone(handler) {
|
|
122
|
+
return this.onAttribute(({ attribute }) => attribute?.type === 'dynamiczone', handler);
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
//# 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,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((0, fp_1.eq)('*'), (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,IAAA,OAAE,EAAC,GAAG,CAAC,EAAE,IAAA,aAAQ,EAAC,GAAG,CAAC,CAAC;IAClC,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,73 @@
|
|
|
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 filters = (0, factory_1.default)()
|
|
9
|
+
.intercept(
|
|
10
|
+
// Intercept filters arrays and apply the traversal to each one individually
|
|
11
|
+
fp_1.isArray, async (visitor, options, filters, { recurse }) => {
|
|
12
|
+
return Promise.all(filters.map((filter, i) => {
|
|
13
|
+
// In filters, only operators such as $and, $in, $notIn or $or and implicit operators like [...]
|
|
14
|
+
// can have a value array, thus we can update the raw path but not the attribute one
|
|
15
|
+
const newPath = { ...options.path, raw: `${options.path.raw}[${i}]` };
|
|
16
|
+
return recurse(visitor, { ...options, path: newPath }, filter);
|
|
17
|
+
})
|
|
18
|
+
// todo: move that to the visitors
|
|
19
|
+
).then((res) => res.filter((val) => !((0, fp_1.isObject)(val) && (0, fp_1.isEmpty)(val))));
|
|
20
|
+
})
|
|
21
|
+
.intercept(
|
|
22
|
+
// Ignore non object filters and return the value as-is
|
|
23
|
+
(filters) => !(0, fp_1.isObject)(filters), (_, __, filters) => {
|
|
24
|
+
return filters;
|
|
25
|
+
})
|
|
26
|
+
// Parse object values
|
|
27
|
+
.parse((value) => typeof value === 'object', () => ({
|
|
28
|
+
transform: fp_1.cloneDeep,
|
|
29
|
+
remove(key, data) {
|
|
30
|
+
const { [key]: ignored, ...rest } = data;
|
|
31
|
+
return rest;
|
|
32
|
+
},
|
|
33
|
+
set(key, value, data) {
|
|
34
|
+
return { ...data, [key]: value };
|
|
35
|
+
},
|
|
36
|
+
keys(data) {
|
|
37
|
+
return Object.keys(data);
|
|
38
|
+
},
|
|
39
|
+
get(key, data) {
|
|
40
|
+
return data[key];
|
|
41
|
+
},
|
|
42
|
+
}))
|
|
43
|
+
// Ignore null or undefined values
|
|
44
|
+
.ignore(({ value }) => (0, fp_1.isNil)(value))
|
|
45
|
+
// Recursion on operators (non attributes)
|
|
46
|
+
.on(({ attribute }) => (0, fp_1.isNil)(attribute), async ({ key, visitor, path, value, schema }, { set, recurse }) => {
|
|
47
|
+
set(key, await recurse(visitor, { schema, path }, value));
|
|
48
|
+
})
|
|
49
|
+
// Handle relation recursion
|
|
50
|
+
.onRelation(async ({ key, attribute, visitor, path, value }, { set, recurse }) => {
|
|
51
|
+
const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');
|
|
52
|
+
if (isMorphRelation) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const targetSchemaUID = attribute.target;
|
|
56
|
+
const targetSchema = strapi.getModel(targetSchemaUID);
|
|
57
|
+
const newValue = await recurse(visitor, { schema: targetSchema, path }, value);
|
|
58
|
+
set(key, newValue);
|
|
59
|
+
})
|
|
60
|
+
.onComponent(async ({ key, attribute, visitor, path, value }, { set, recurse }) => {
|
|
61
|
+
const targetSchema = strapi.getModel(attribute.component);
|
|
62
|
+
const newValue = await recurse(visitor, { schema: targetSchema, path }, value);
|
|
63
|
+
set(key, newValue);
|
|
64
|
+
})
|
|
65
|
+
// Handle media recursion
|
|
66
|
+
.onMedia(async ({ key, visitor, path, value }, { set, recurse }) => {
|
|
67
|
+
const targetSchemaUID = 'plugin::upload.file';
|
|
68
|
+
const targetSchema = strapi.getModel(targetSchemaUID);
|
|
69
|
+
const newValue = await recurse(visitor, { schema: targetSchema, path }, value);
|
|
70
|
+
set(key, newValue);
|
|
71
|
+
});
|
|
72
|
+
exports.default = (0, fp_1.curry)(filters.traverse);
|
|
73
|
+
//# 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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"}
|