@strapi/utils 5.12.1 → 5.12.3
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.js +28 -0
- package/dist/async.js.map +1 -0
- package/dist/async.mjs +24 -0
- package/dist/async.mjs.map +1 -0
- package/dist/content-types.js +201 -0
- package/dist/content-types.js.map +1 -0
- package/dist/content-types.mjs +167 -0
- package/dist/content-types.mjs.map +1 -0
- package/dist/convert-query-params.js +512 -0
- package/dist/convert-query-params.js.map +1 -0
- package/dist/convert-query-params.mjs +510 -0
- package/dist/convert-query-params.mjs.map +1 -0
- package/dist/env-helper.js +81 -0
- package/dist/env-helper.js.map +1 -0
- package/dist/env-helper.mjs +79 -0
- package/dist/env-helper.mjs.map +1 -0
- package/dist/errors.js +104 -0
- package/dist/errors.js.map +1 -0
- package/dist/errors.mjs +88 -0
- package/dist/errors.mjs.map +1 -0
- package/dist/file.js +57 -0
- package/dist/file.js.map +1 -0
- package/dist/file.mjs +50 -0
- package/dist/file.mjs.map +1 -0
- package/dist/format-yup-error.js +19 -0
- package/dist/format-yup-error.js.map +1 -0
- package/dist/format-yup-error.mjs +17 -0
- package/dist/format-yup-error.mjs.map +1 -0
- package/dist/hooks.js +86 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hooks.mjs +80 -0
- package/dist/hooks.mjs.map +1 -0
- package/dist/import-default.js +9 -0
- package/dist/import-default.js.map +1 -0
- package/dist/import-default.mjs +7 -0
- package/dist/import-default.mjs.map +1 -0
- package/dist/index.js +54 -4358
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +48 -4317
- package/dist/index.mjs.map +1 -1
- package/dist/machine-id.js +17 -0
- package/dist/machine-id.js.map +1 -0
- package/dist/machine-id.mjs +15 -0
- package/dist/machine-id.mjs.map +1 -0
- package/dist/operators.js +79 -0
- package/dist/operators.js.map +1 -0
- package/dist/operators.mjs +76 -0
- package/dist/operators.mjs.map +1 -0
- package/dist/package-manager.js +36 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/package-manager.mjs +33 -0
- package/dist/package-manager.mjs.map +1 -0
- package/dist/pagination.js +163 -0
- package/dist/pagination.js.map +1 -0
- package/dist/pagination.mjs +159 -0
- package/dist/pagination.mjs.map +1 -0
- package/dist/parse-type.js +140 -0
- package/dist/parse-type.js.map +1 -0
- package/dist/parse-type.mjs +118 -0
- package/dist/parse-type.mjs.map +1 -0
- package/dist/policy.js +33 -0
- package/dist/policy.js.map +1 -0
- package/dist/policy.mjs +30 -0
- package/dist/policy.mjs.map +1 -0
- package/dist/primitives/arrays.js +7 -0
- package/dist/primitives/arrays.js.map +1 -0
- package/dist/primitives/arrays.mjs +5 -0
- package/dist/primitives/arrays.mjs.map +1 -0
- package/dist/primitives/dates.js +11 -0
- package/dist/primitives/dates.js.map +1 -0
- package/dist/primitives/dates.mjs +9 -0
- package/dist/primitives/dates.mjs.map +1 -0
- package/dist/primitives/objects.js +13 -0
- package/dist/primitives/objects.js.map +1 -0
- package/dist/primitives/objects.mjs +11 -0
- package/dist/primitives/objects.mjs.map +1 -0
- package/dist/primitives/strings.js +49 -0
- package/dist/primitives/strings.js.map +1 -0
- package/dist/primitives/strings.mjs +38 -0
- package/dist/primitives/strings.mjs.map +1 -0
- package/dist/print-value.js +42 -0
- package/dist/print-value.js.map +1 -0
- package/dist/print-value.mjs +40 -0
- package/dist/print-value.mjs.map +1 -0
- package/dist/provider-factory.js +82 -0
- package/dist/provider-factory.js.map +1 -0
- package/dist/provider-factory.mjs +80 -0
- package/dist/provider-factory.mjs.map +1 -0
- package/dist/relations.js +54 -0
- package/dist/relations.js.map +1 -0
- package/dist/relations.mjs +45 -0
- package/dist/relations.mjs.map +1 -0
- package/dist/sanitize/index.js +195 -0
- package/dist/sanitize/index.js.map +1 -0
- package/dist/sanitize/index.mjs +194 -0
- package/dist/sanitize/index.mjs.map +1 -0
- package/dist/sanitize/sanitizers.js +173 -0
- package/dist/sanitize/sanitizers.js.map +1 -0
- package/dist/sanitize/sanitizers.mjs +166 -0
- package/dist/sanitize/sanitizers.mjs.map +1 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.js +20 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.js.map +1 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.mjs +18 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.mjs.map +1 -0
- package/dist/sanitize/visitors/index.js +22 -0
- package/dist/sanitize/visitors/index.js.map +1 -0
- package/dist/sanitize/visitors/index.mjs +9 -0
- package/dist/sanitize/visitors/index.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.js +87 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.js.map +1 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.mjs +85 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.js +12 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.js.map +1 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.mjs +10 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.js +12 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.js.map +1 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.mjs +10 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-password.js +10 -0
- package/dist/sanitize/visitors/remove-password.js.map +1 -0
- package/dist/sanitize/visitors/remove-password.mjs +8 -0
- package/dist/sanitize/visitors/remove-password.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-private.js +16 -0
- package/dist/sanitize/visitors/remove-private.js.map +1 -0
- package/dist/sanitize/visitors/remove-private.mjs +14 -0
- package/dist/sanitize/visitors/remove-private.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-fields.js +28 -0
- package/dist/sanitize/visitors/remove-restricted-fields.js.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-fields.mjs +26 -0
- package/dist/sanitize/visitors/remove-restricted-fields.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-relations.js +116 -0
- package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-relations.mjs +114 -0
- package/dist/sanitize/visitors/remove-restricted-relations.mjs.map +1 -0
- package/dist/set-creator-fields.js +18 -0
- package/dist/set-creator-fields.js.map +1 -0
- package/dist/set-creator-fields.mjs +16 -0
- package/dist/set-creator-fields.mjs.map +1 -0
- package/dist/template.js +18 -0
- package/dist/template.js.map +1 -0
- package/dist/template.mjs +15 -0
- package/dist/template.mjs.map +1 -0
- package/dist/traverse/factory.js +158 -0
- package/dist/traverse/factory.js.map +1 -0
- package/dist/traverse/factory.mjs +156 -0
- package/dist/traverse/factory.mjs.map +1 -0
- package/dist/traverse/index.js +14 -0
- package/dist/traverse/index.js.map +1 -0
- package/dist/traverse/index.mjs +5 -0
- package/dist/traverse/index.mjs.map +1 -0
- package/dist/traverse/query-fields.js +41 -0
- package/dist/traverse/query-fields.js.map +1 -0
- package/dist/traverse/query-fields.mjs +39 -0
- package/dist/traverse/query-fields.mjs.map +1 -0
- package/dist/traverse/query-filters.js +114 -0
- package/dist/traverse/query-filters.js.map +1 -0
- package/dist/traverse/query-filters.mjs +112 -0
- package/dist/traverse/query-filters.mjs.map +1 -0
- package/dist/traverse/query-populate.js +280 -0
- package/dist/traverse/query-populate.js.map +1 -0
- package/dist/traverse/query-populate.mjs +278 -0
- package/dist/traverse/query-populate.mjs.map +1 -0
- package/dist/traverse/query-sort.js +144 -0
- package/dist/traverse/query-sort.js.map +1 -0
- package/dist/traverse/query-sort.mjs +142 -0
- package/dist/traverse/query-sort.mjs.map +1 -0
- package/dist/traverse-entity.js +170 -0
- package/dist/traverse-entity.js.map +1 -0
- package/dist/traverse-entity.mjs +168 -0
- package/dist/traverse-entity.mjs.map +1 -0
- package/dist/validate/index.js +218 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/index.mjs +217 -0
- package/dist/validate/index.mjs.map +1 -0
- package/dist/validate/utils.js +27 -0
- package/dist/validate/utils.js.map +1 -0
- package/dist/validate/utils.mjs +24 -0
- package/dist/validate/utils.mjs.map +1 -0
- package/dist/validate/validators.js +369 -0
- package/dist/validate/validators.js.map +1 -0
- package/dist/validate/validators.mjs +356 -0
- package/dist/validate/validators.mjs.map +1 -0
- package/dist/validate/visitors/index.js +22 -0
- package/dist/validate/visitors/index.js.map +1 -0
- package/dist/validate/visitors/index.mjs +9 -0
- package/dist/validate/visitors/index.mjs.map +1 -0
- package/dist/validate/visitors/throw-disallowed-fields.js +91 -0
- package/dist/validate/visitors/throw-disallowed-fields.js.map +1 -0
- package/dist/validate/visitors/throw-disallowed-fields.mjs +89 -0
- package/dist/validate/visitors/throw-disallowed-fields.mjs.map +1 -0
- package/dist/validate/visitors/throw-dynamic-zones.js +16 -0
- package/dist/validate/visitors/throw-dynamic-zones.js.map +1 -0
- package/dist/validate/visitors/throw-dynamic-zones.mjs +14 -0
- package/dist/validate/visitors/throw-dynamic-zones.mjs.map +1 -0
- package/dist/validate/visitors/throw-morph-to-relations.js +16 -0
- package/dist/validate/visitors/throw-morph-to-relations.js.map +1 -0
- package/dist/validate/visitors/throw-morph-to-relations.mjs +14 -0
- package/dist/validate/visitors/throw-morph-to-relations.mjs.map +1 -0
- package/dist/validate/visitors/throw-password.js +15 -0
- package/dist/validate/visitors/throw-password.js.map +1 -0
- package/dist/validate/visitors/throw-password.mjs +13 -0
- package/dist/validate/visitors/throw-password.mjs.map +1 -0
- package/dist/validate/visitors/throw-private.js +20 -0
- package/dist/validate/visitors/throw-private.js.map +1 -0
- package/dist/validate/visitors/throw-private.mjs +18 -0
- package/dist/validate/visitors/throw-private.mjs.map +1 -0
- package/dist/validate/visitors/throw-restricted-fields.js +36 -0
- package/dist/validate/visitors/throw-restricted-fields.js.map +1 -0
- package/dist/validate/visitors/throw-restricted-fields.mjs +34 -0
- package/dist/validate/visitors/throw-restricted-fields.mjs.map +1 -0
- package/dist/validate/visitors/throw-restricted-relations.js +125 -0
- package/dist/validate/visitors/throw-restricted-relations.js.map +1 -0
- package/dist/validate/visitors/throw-restricted-relations.mjs +123 -0
- package/dist/validate/visitors/throw-restricted-relations.mjs.map +1 -0
- package/dist/validate/visitors/throw-unrecognized-fields.js +66 -0
- package/dist/validate/visitors/throw-unrecognized-fields.js.map +1 -0
- package/dist/validate/visitors/throw-unrecognized-fields.mjs +64 -0
- package/dist/validate/visitors/throw-unrecognized-fields.mjs.map +1 -0
- package/dist/validators.js +60 -0
- package/dist/validators.js.map +1 -0
- package/dist/validators.mjs +37 -0
- package/dist/validators.mjs.map +1 -0
- package/dist/yup.js +101 -0
- package/dist/yup.js.map +1 -0
- package/dist/yup.mjs +74 -0
- package/dist/yup.mjs.map +1 -0
- package/dist/zod.js +31 -0
- package/dist/zod.js.map +1 -0
- package/dist/zod.mjs +29 -0
- package/dist/zod.mjs.map +1 -0
- package/package.json +3 -3
package/dist/async.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var pMap = require('p-map');
|
|
4
|
+
var fp = require('lodash/fp');
|
|
5
|
+
|
|
6
|
+
function pipe(...fns) {
|
|
7
|
+
const [firstFn, ...fnRest] = fns;
|
|
8
|
+
return async (...args)=>{
|
|
9
|
+
let res = await firstFn.apply(firstFn, args);
|
|
10
|
+
for(let i = 0; i < fnRest.length; i += 1){
|
|
11
|
+
res = await fnRest[i](res);
|
|
12
|
+
}
|
|
13
|
+
return res;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const map = fp.curry(pMap);
|
|
17
|
+
const reduce = (mixedArray)=>async (iteratee, initialValue)=>{
|
|
18
|
+
let acc = initialValue;
|
|
19
|
+
for(let i = 0; i < mixedArray.length; i += 1){
|
|
20
|
+
acc = await iteratee(acc, await mixedArray[i], i);
|
|
21
|
+
}
|
|
22
|
+
return acc;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
exports.map = map;
|
|
26
|
+
exports.pipe = pipe;
|
|
27
|
+
exports.reduce = reduce;
|
|
28
|
+
//# sourceMappingURL=async.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.js","sources":["../src/async.ts"],"sourcesContent":["import pMap from 'p-map';\nimport { curry } from 'lodash/fp';\n\ntype AnyFunc<TA extends any[] = any[], TR = any> = (...args: TA) => TR;\n\ntype MakeProm<T> = Promise<T extends PromiseLike<infer I> ? I : T>;\n\ntype PipedFunc<T extends AnyFunc[]> =\n PipeReturn<T> extends never ? never : (...args: Parameters<T[0]>) => PipeReturn<T>;\n\ntype PipeReturn<F extends AnyFunc[]> = MakeProm<ReturnType<F[0]>>;\n\nexport function pipe<T extends AnyFunc[]>(...fns: PipeReturn<T> extends never ? never : T) {\n const [firstFn, ...fnRest] = fns;\n\n return (async (...args: any[]) => {\n let res = await firstFn.apply(firstFn, args);\n\n for (let i = 0; i < fnRest.length; i += 1) {\n res = await fnRest[i](res);\n }\n\n return res;\n }) as PipedFunc<T>;\n}\n\nexport const map = curry(pMap);\n\nexport const reduce =\n (mixedArray: any[]) =>\n async <T>(iteratee: AnyFunc, initialValue?: T) => {\n let acc = initialValue;\n for (let i = 0; i < mixedArray.length; i += 1) {\n acc = await iteratee(acc, await mixedArray[i], i);\n }\n return acc;\n };\n"],"names":["pipe","fns","firstFn","fnRest","args","res","apply","i","length","map","curry","pMap","reduce","mixedArray","iteratee","initialValue","acc"],"mappings":";;;;;AAYO,SAASA,IAA0B,CAAA,GAAGC,GAA4C,EAAA;AACvF,IAAA,MAAM,CAACC,OAAAA,EAAS,GAAGC,MAAAA,CAAO,GAAGF,GAAAA;AAE7B,IAAA,OAAQ,OAAO,GAAGG,IAAAA,GAAAA;AAChB,QAAA,IAAIC,GAAM,GAAA,MAAMH,OAAQI,CAAAA,KAAK,CAACJ,OAASE,EAAAA,IAAAA,CAAAA;QAEvC,IAAK,IAAIG,IAAI,CAAGA,EAAAA,CAAAA,GAAIJ,OAAOK,MAAM,EAAED,KAAK,CAAG,CAAA;AACzCF,YAAAA,GAAAA,GAAM,MAAMF,MAAM,CAACI,CAAAA,CAAE,CAACF,GAAAA,CAAAA;AACxB;QAEA,OAAOA,GAAAA;AACT,KAAA;AACF;AAEO,MAAMI,GAAMC,GAAAA,QAAAA,CAAMC,IAAM;AAElBC,MAAAA,MAAAA,GACX,CAACC,UAAAA,GACD,OAAUC,QAAmBC,EAAAA,YAAAA,GAAAA;AAC3B,QAAA,IAAIC,GAAMD,GAAAA,YAAAA;QACV,IAAK,IAAIR,IAAI,CAAGA,EAAAA,CAAAA,GAAIM,WAAWL,MAAM,EAAED,KAAK,CAAG,CAAA;AAC7CS,YAAAA,GAAAA,GAAM,MAAMF,QAASE,CAAAA,GAAAA,EAAK,MAAMH,UAAU,CAACN,EAAE,EAAEA,CAAAA,CAAAA;AACjD;QACA,OAAOS,GAAAA;;;;;;;"}
|
package/dist/async.mjs
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import pMap from 'p-map';
|
|
2
|
+
import { curry } from 'lodash/fp';
|
|
3
|
+
|
|
4
|
+
function pipe(...fns) {
|
|
5
|
+
const [firstFn, ...fnRest] = fns;
|
|
6
|
+
return async (...args)=>{
|
|
7
|
+
let res = await firstFn.apply(firstFn, args);
|
|
8
|
+
for(let i = 0; i < fnRest.length; i += 1){
|
|
9
|
+
res = await fnRest[i](res);
|
|
10
|
+
}
|
|
11
|
+
return res;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
const map = curry(pMap);
|
|
15
|
+
const reduce = (mixedArray)=>async (iteratee, initialValue)=>{
|
|
16
|
+
let acc = initialValue;
|
|
17
|
+
for(let i = 0; i < mixedArray.length; i += 1){
|
|
18
|
+
acc = await iteratee(acc, await mixedArray[i], i);
|
|
19
|
+
}
|
|
20
|
+
return acc;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export { map, pipe, reduce };
|
|
24
|
+
//# sourceMappingURL=async.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.mjs","sources":["../src/async.ts"],"sourcesContent":["import pMap from 'p-map';\nimport { curry } from 'lodash/fp';\n\ntype AnyFunc<TA extends any[] = any[], TR = any> = (...args: TA) => TR;\n\ntype MakeProm<T> = Promise<T extends PromiseLike<infer I> ? I : T>;\n\ntype PipedFunc<T extends AnyFunc[]> =\n PipeReturn<T> extends never ? never : (...args: Parameters<T[0]>) => PipeReturn<T>;\n\ntype PipeReturn<F extends AnyFunc[]> = MakeProm<ReturnType<F[0]>>;\n\nexport function pipe<T extends AnyFunc[]>(...fns: PipeReturn<T> extends never ? never : T) {\n const [firstFn, ...fnRest] = fns;\n\n return (async (...args: any[]) => {\n let res = await firstFn.apply(firstFn, args);\n\n for (let i = 0; i < fnRest.length; i += 1) {\n res = await fnRest[i](res);\n }\n\n return res;\n }) as PipedFunc<T>;\n}\n\nexport const map = curry(pMap);\n\nexport const reduce =\n (mixedArray: any[]) =>\n async <T>(iteratee: AnyFunc, initialValue?: T) => {\n let acc = initialValue;\n for (let i = 0; i < mixedArray.length; i += 1) {\n acc = await iteratee(acc, await mixedArray[i], i);\n }\n return acc;\n };\n"],"names":["pipe","fns","firstFn","fnRest","args","res","apply","i","length","map","curry","pMap","reduce","mixedArray","iteratee","initialValue","acc"],"mappings":";;;AAYO,SAASA,IAA0B,CAAA,GAAGC,GAA4C,EAAA;AACvF,IAAA,MAAM,CAACC,OAAAA,EAAS,GAAGC,MAAAA,CAAO,GAAGF,GAAAA;AAE7B,IAAA,OAAQ,OAAO,GAAGG,IAAAA,GAAAA;AAChB,QAAA,IAAIC,GAAM,GAAA,MAAMH,OAAQI,CAAAA,KAAK,CAACJ,OAASE,EAAAA,IAAAA,CAAAA;QAEvC,IAAK,IAAIG,IAAI,CAAGA,EAAAA,CAAAA,GAAIJ,OAAOK,MAAM,EAAED,KAAK,CAAG,CAAA;AACzCF,YAAAA,GAAAA,GAAM,MAAMF,MAAM,CAACI,CAAAA,CAAE,CAACF,GAAAA,CAAAA;AACxB;QAEA,OAAOA,GAAAA;AACT,KAAA;AACF;AAEO,MAAMI,GAAMC,GAAAA,KAAAA,CAAMC,IAAM;AAElBC,MAAAA,MAAAA,GACX,CAACC,UAAAA,GACD,OAAUC,QAAmBC,EAAAA,YAAAA,GAAAA;AAC3B,QAAA,IAAIC,GAAMD,GAAAA,YAAAA;QACV,IAAK,IAAIR,IAAI,CAAGA,EAAAA,CAAAA,GAAIM,WAAWL,MAAM,EAAED,KAAK,CAAG,CAAA;AAC7CS,YAAAA,GAAAA,GAAM,MAAMF,QAASE,CAAAA,GAAAA,EAAK,MAAMH,UAAU,CAACN,EAAE,EAAEA,CAAAA,CAAAA;AACjD;QACA,OAAOS,GAAAA;;;;;"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _ = require('lodash');
|
|
4
|
+
var fp = require('lodash/fp');
|
|
5
|
+
|
|
6
|
+
const SINGLE_TYPE = 'singleType';
|
|
7
|
+
const COLLECTION_TYPE = 'collectionType';
|
|
8
|
+
const ID_ATTRIBUTE = 'id';
|
|
9
|
+
const DOC_ID_ATTRIBUTE = 'documentId';
|
|
10
|
+
const PUBLISHED_AT_ATTRIBUTE = 'publishedAt';
|
|
11
|
+
const CREATED_BY_ATTRIBUTE = 'createdBy';
|
|
12
|
+
const UPDATED_BY_ATTRIBUTE = 'updatedBy';
|
|
13
|
+
const CREATED_AT_ATTRIBUTE = 'createdAt';
|
|
14
|
+
const UPDATED_AT_ATTRIBUTE = 'updatedAt';
|
|
15
|
+
const constants = {
|
|
16
|
+
ID_ATTRIBUTE,
|
|
17
|
+
DOC_ID_ATTRIBUTE,
|
|
18
|
+
PUBLISHED_AT_ATTRIBUTE,
|
|
19
|
+
CREATED_BY_ATTRIBUTE,
|
|
20
|
+
UPDATED_BY_ATTRIBUTE,
|
|
21
|
+
CREATED_AT_ATTRIBUTE,
|
|
22
|
+
UPDATED_AT_ATTRIBUTE,
|
|
23
|
+
SINGLE_TYPE,
|
|
24
|
+
COLLECTION_TYPE
|
|
25
|
+
};
|
|
26
|
+
const getTimestamps = (model)=>{
|
|
27
|
+
const attributes = [];
|
|
28
|
+
if (fp.has(CREATED_AT_ATTRIBUTE, model.attributes)) {
|
|
29
|
+
attributes.push(CREATED_AT_ATTRIBUTE);
|
|
30
|
+
}
|
|
31
|
+
if (fp.has(UPDATED_AT_ATTRIBUTE, model.attributes)) {
|
|
32
|
+
attributes.push(UPDATED_AT_ATTRIBUTE);
|
|
33
|
+
}
|
|
34
|
+
return attributes;
|
|
35
|
+
};
|
|
36
|
+
const getCreatorFields = (model)=>{
|
|
37
|
+
const attributes = [];
|
|
38
|
+
if (fp.has(CREATED_BY_ATTRIBUTE, model.attributes)) {
|
|
39
|
+
attributes.push(CREATED_BY_ATTRIBUTE);
|
|
40
|
+
}
|
|
41
|
+
if (fp.has(UPDATED_BY_ATTRIBUTE, model.attributes)) {
|
|
42
|
+
attributes.push(UPDATED_BY_ATTRIBUTE);
|
|
43
|
+
}
|
|
44
|
+
return attributes;
|
|
45
|
+
};
|
|
46
|
+
const getNonWritableAttributes = (model)=>{
|
|
47
|
+
if (!model) return [];
|
|
48
|
+
const nonWritableAttributes = _.reduce(model.attributes, (acc, attr, attrName)=>attr.writable === false ? acc.concat(attrName) : acc, []);
|
|
49
|
+
return _.uniq([
|
|
50
|
+
ID_ATTRIBUTE,
|
|
51
|
+
DOC_ID_ATTRIBUTE,
|
|
52
|
+
...getTimestamps(model),
|
|
53
|
+
...nonWritableAttributes
|
|
54
|
+
]);
|
|
55
|
+
};
|
|
56
|
+
const getWritableAttributes = (model)=>{
|
|
57
|
+
if (!model) return [];
|
|
58
|
+
return _.difference(Object.keys(model.attributes), getNonWritableAttributes(model));
|
|
59
|
+
};
|
|
60
|
+
const isWritableAttribute = (model, attributeName)=>{
|
|
61
|
+
return getWritableAttributes(model).includes(attributeName);
|
|
62
|
+
};
|
|
63
|
+
const getNonVisibleAttributes = (model)=>{
|
|
64
|
+
const nonVisibleAttributes = _.reduce(model.attributes, (acc, attr, attrName)=>attr.visible === false ? acc.concat(attrName) : acc, []);
|
|
65
|
+
return _.uniq([
|
|
66
|
+
ID_ATTRIBUTE,
|
|
67
|
+
DOC_ID_ATTRIBUTE,
|
|
68
|
+
...getTimestamps(model),
|
|
69
|
+
...nonVisibleAttributes
|
|
70
|
+
]);
|
|
71
|
+
};
|
|
72
|
+
const getVisibleAttributes = (model)=>{
|
|
73
|
+
return _.difference(_.keys(model.attributes), getNonVisibleAttributes(model));
|
|
74
|
+
};
|
|
75
|
+
const isVisibleAttribute = (model, attributeName)=>{
|
|
76
|
+
return getVisibleAttributes(model).includes(attributeName);
|
|
77
|
+
};
|
|
78
|
+
const getOptions = (model)=>_.assign({
|
|
79
|
+
draftAndPublish: false
|
|
80
|
+
}, _.get(model, 'options', {}));
|
|
81
|
+
const hasDraftAndPublish = (model)=>_.get(model, 'options.draftAndPublish', false) === true;
|
|
82
|
+
const isDraft = (data, model)=>hasDraftAndPublish(model) && _.get(data, PUBLISHED_AT_ATTRIBUTE) === null;
|
|
83
|
+
const isSchema = (data)=>{
|
|
84
|
+
return typeof data === 'object' && data !== null && 'modelType' in data && typeof data.modelType === 'string' && [
|
|
85
|
+
'component',
|
|
86
|
+
'contentType'
|
|
87
|
+
].includes(data.modelType);
|
|
88
|
+
};
|
|
89
|
+
const isComponentSchema = (data)=>{
|
|
90
|
+
return isSchema(data) && data.modelType === 'component';
|
|
91
|
+
};
|
|
92
|
+
const isContentTypeSchema = (data)=>{
|
|
93
|
+
return isSchema(data) && data.modelType === 'contentType';
|
|
94
|
+
};
|
|
95
|
+
const isSingleType = ({ kind = COLLECTION_TYPE })=>kind === SINGLE_TYPE;
|
|
96
|
+
const isCollectionType = ({ kind = COLLECTION_TYPE })=>kind === COLLECTION_TYPE;
|
|
97
|
+
const isKind = (kind)=>(model)=>model.kind === kind;
|
|
98
|
+
const getStoredPrivateAttributes = (model)=>fp.union(strapi?.config?.get('api.responses.privateAttributes', []) ?? [], fp.getOr([], 'options.privateAttributes', model));
|
|
99
|
+
const getPrivateAttributes = (model)=>{
|
|
100
|
+
return _.union(getStoredPrivateAttributes(model), _.keys(_.pickBy(model.attributes, (attr)=>!!attr.private)));
|
|
101
|
+
};
|
|
102
|
+
const isPrivateAttribute = (model, attributeName)=>{
|
|
103
|
+
if (model?.attributes?.[attributeName]?.private === true) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
return getStoredPrivateAttributes(model).includes(attributeName);
|
|
107
|
+
};
|
|
108
|
+
const isScalarAttribute = (attribute)=>{
|
|
109
|
+
return attribute && ![
|
|
110
|
+
'media',
|
|
111
|
+
'component',
|
|
112
|
+
'relation',
|
|
113
|
+
'dynamiczone'
|
|
114
|
+
].includes(attribute.type);
|
|
115
|
+
};
|
|
116
|
+
const getDoesAttributeRequireValidation = (attribute)=>{
|
|
117
|
+
return attribute.required || attribute.unique || Object.prototype.hasOwnProperty.call(attribute, 'max') || Object.prototype.hasOwnProperty.call(attribute, 'min') || Object.prototype.hasOwnProperty.call(attribute, 'maxLength') || Object.prototype.hasOwnProperty.call(attribute, 'minLength');
|
|
118
|
+
};
|
|
119
|
+
const isMediaAttribute = (attribute)=>attribute?.type === 'media';
|
|
120
|
+
const isRelationalAttribute = (attribute)=>attribute?.type === 'relation';
|
|
121
|
+
const HAS_RELATION_REORDERING = [
|
|
122
|
+
'manyToMany',
|
|
123
|
+
'manyToOne',
|
|
124
|
+
'oneToMany'
|
|
125
|
+
];
|
|
126
|
+
const hasRelationReordering = (attribute)=>isRelationalAttribute(attribute) && HAS_RELATION_REORDERING.includes(attribute.relation);
|
|
127
|
+
const isComponentAttribute = (attribute)=>[
|
|
128
|
+
'component',
|
|
129
|
+
'dynamiczone'
|
|
130
|
+
].includes(attribute?.type);
|
|
131
|
+
const isDynamicZoneAttribute = (attribute)=>!!attribute && attribute.type === 'dynamiczone';
|
|
132
|
+
const isMorphToRelationalAttribute = (attribute)=>{
|
|
133
|
+
return !!attribute && isRelationalAttribute(attribute) && attribute.relation?.startsWith?.('morphTo');
|
|
134
|
+
};
|
|
135
|
+
const getComponentAttributes = (schema)=>{
|
|
136
|
+
return _.reduce(schema.attributes, (acc, attr, attrName)=>{
|
|
137
|
+
if (isComponentAttribute(attr)) acc.push(attrName);
|
|
138
|
+
return acc;
|
|
139
|
+
}, []);
|
|
140
|
+
};
|
|
141
|
+
const getScalarAttributes = (schema)=>{
|
|
142
|
+
return _.reduce(schema.attributes, (acc, attr, attrName)=>{
|
|
143
|
+
if (isScalarAttribute(attr)) acc.push(attrName);
|
|
144
|
+
return acc;
|
|
145
|
+
}, []);
|
|
146
|
+
};
|
|
147
|
+
const getRelationalAttributes = (schema)=>{
|
|
148
|
+
return _.reduce(schema.attributes, (acc, attr, attrName)=>{
|
|
149
|
+
if (isRelationalAttribute(attr)) acc.push(attrName);
|
|
150
|
+
return acc;
|
|
151
|
+
}, []);
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* Checks if an attribute is of type `type`
|
|
155
|
+
* @param {object} attribute
|
|
156
|
+
* @param {string} type
|
|
157
|
+
*/ const isTypedAttribute = (attribute, type)=>{
|
|
158
|
+
return _.has(attribute, 'type') && attribute.type === type;
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* Returns a route prefix for a contentType
|
|
162
|
+
* @param {object} contentType
|
|
163
|
+
* @returns {string}
|
|
164
|
+
*/ const getContentTypeRoutePrefix = (contentType)=>{
|
|
165
|
+
return isSingleType(contentType) ? _.kebabCase(contentType.info.singularName) : _.kebabCase(contentType.info.pluralName);
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
exports.constants = constants;
|
|
169
|
+
exports.getComponentAttributes = getComponentAttributes;
|
|
170
|
+
exports.getContentTypeRoutePrefix = getContentTypeRoutePrefix;
|
|
171
|
+
exports.getCreatorFields = getCreatorFields;
|
|
172
|
+
exports.getDoesAttributeRequireValidation = getDoesAttributeRequireValidation;
|
|
173
|
+
exports.getNonVisibleAttributes = getNonVisibleAttributes;
|
|
174
|
+
exports.getNonWritableAttributes = getNonWritableAttributes;
|
|
175
|
+
exports.getOptions = getOptions;
|
|
176
|
+
exports.getPrivateAttributes = getPrivateAttributes;
|
|
177
|
+
exports.getRelationalAttributes = getRelationalAttributes;
|
|
178
|
+
exports.getScalarAttributes = getScalarAttributes;
|
|
179
|
+
exports.getTimestamps = getTimestamps;
|
|
180
|
+
exports.getVisibleAttributes = getVisibleAttributes;
|
|
181
|
+
exports.getWritableAttributes = getWritableAttributes;
|
|
182
|
+
exports.hasDraftAndPublish = hasDraftAndPublish;
|
|
183
|
+
exports.hasRelationReordering = hasRelationReordering;
|
|
184
|
+
exports.isCollectionType = isCollectionType;
|
|
185
|
+
exports.isComponentAttribute = isComponentAttribute;
|
|
186
|
+
exports.isComponentSchema = isComponentSchema;
|
|
187
|
+
exports.isContentTypeSchema = isContentTypeSchema;
|
|
188
|
+
exports.isDraft = isDraft;
|
|
189
|
+
exports.isDynamicZoneAttribute = isDynamicZoneAttribute;
|
|
190
|
+
exports.isKind = isKind;
|
|
191
|
+
exports.isMediaAttribute = isMediaAttribute;
|
|
192
|
+
exports.isMorphToRelationalAttribute = isMorphToRelationalAttribute;
|
|
193
|
+
exports.isPrivateAttribute = isPrivateAttribute;
|
|
194
|
+
exports.isRelationalAttribute = isRelationalAttribute;
|
|
195
|
+
exports.isScalarAttribute = isScalarAttribute;
|
|
196
|
+
exports.isSchema = isSchema;
|
|
197
|
+
exports.isSingleType = isSingleType;
|
|
198
|
+
exports.isTypedAttribute = isTypedAttribute;
|
|
199
|
+
exports.isVisibleAttribute = isVisibleAttribute;
|
|
200
|
+
exports.isWritableAttribute = isWritableAttribute;
|
|
201
|
+
//# sourceMappingURL=content-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-types.js","sources":["../src/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { has, getOr, union } from 'lodash/fp';\nimport type {\n Model,\n Kind,\n Attribute,\n RelationalAttribute,\n ComponentAttribute,\n DynamicZoneAttribute,\n WithRequired,\n} from './types';\n\nconst SINGLE_TYPE = 'singleType';\nconst COLLECTION_TYPE = 'collectionType';\n\nconst ID_ATTRIBUTE = 'id';\nconst DOC_ID_ATTRIBUTE = 'documentId';\n\nconst PUBLISHED_AT_ATTRIBUTE = 'publishedAt';\nconst CREATED_BY_ATTRIBUTE = 'createdBy';\nconst UPDATED_BY_ATTRIBUTE = 'updatedBy';\n\nconst CREATED_AT_ATTRIBUTE = 'createdAt';\nconst UPDATED_AT_ATTRIBUTE = 'updatedAt';\n\nconst constants = {\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n SINGLE_TYPE,\n COLLECTION_TYPE,\n};\n\nconst getTimestamps = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(CREATED_AT_ATTRIBUTE, model.attributes)) {\n attributes.push(CREATED_AT_ATTRIBUTE);\n }\n\n if (has(UPDATED_AT_ATTRIBUTE, model.attributes)) {\n attributes.push(UPDATED_AT_ATTRIBUTE);\n }\n\n return attributes;\n};\n\nconst getCreatorFields = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(CREATED_BY_ATTRIBUTE, model.attributes)) {\n attributes.push(CREATED_BY_ATTRIBUTE);\n }\n\n if (has(UPDATED_BY_ATTRIBUTE, model.attributes)) {\n attributes.push(UPDATED_BY_ATTRIBUTE);\n }\n\n return attributes;\n};\n\nconst getNonWritableAttributes = (model: Model) => {\n if (!model) return [];\n\n const nonWritableAttributes = _.reduce(\n model.attributes,\n (acc, attr, attrName) => (attr.writable === false ? acc.concat(attrName) : acc),\n [] as string[]\n );\n\n return _.uniq([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonWritableAttributes,\n ]);\n};\n\nconst getWritableAttributes = (model: Model) => {\n if (!model) return [];\n\n return _.difference(Object.keys(model.attributes), getNonWritableAttributes(model));\n};\n\nconst isWritableAttribute = (model: Model, attributeName: string) => {\n return getWritableAttributes(model).includes(attributeName);\n};\n\nconst getNonVisibleAttributes = (model: Model) => {\n const nonVisibleAttributes = _.reduce(\n model.attributes,\n (acc, attr, attrName) => (attr.visible === false ? acc.concat(attrName) : acc),\n [] as string[]\n );\n\n return _.uniq([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE, ...getTimestamps(model), ...nonVisibleAttributes]);\n};\n\nconst getVisibleAttributes = (model: Model) => {\n return _.difference(_.keys(model.attributes), getNonVisibleAttributes(model));\n};\n\nconst isVisibleAttribute = (model: Model, attributeName: string) => {\n return getVisibleAttributes(model).includes(attributeName);\n};\n\nconst getOptions = (model: Model) =>\n _.assign({ draftAndPublish: false }, _.get(model, 'options', {}));\n\nconst hasDraftAndPublish = (model: Model) =>\n _.get(model, 'options.draftAndPublish', false) === true;\n\nconst isDraft = <T extends object>(data: T, model: Model) =>\n hasDraftAndPublish(model) && _.get(data, PUBLISHED_AT_ATTRIBUTE) === null;\n\nconst isSchema = (data: unknown): data is Model => {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'modelType' in data &&\n typeof data.modelType === 'string' &&\n ['component', 'contentType'].includes(data.modelType)\n );\n};\n\nconst isComponentSchema = (data: unknown): data is Model & { modelType: 'component' } => {\n return isSchema(data) && data.modelType === 'component';\n};\n\nconst isContentTypeSchema = (data: unknown): data is Model & { modelType: 'contentType' } => {\n return isSchema(data) && data.modelType === 'contentType';\n};\n\nconst isSingleType = ({ kind = COLLECTION_TYPE }) => kind === SINGLE_TYPE;\nconst isCollectionType = ({ kind = COLLECTION_TYPE }) => kind === COLLECTION_TYPE;\nconst isKind = (kind: Kind) => (model: Model) => model.kind === kind;\n\nconst getStoredPrivateAttributes = (model: Model) =>\n union(\n (strapi?.config?.get('api.responses.privateAttributes', []) ?? []) as Array<string>,\n getOr([], 'options.privateAttributes', model)\n );\n\nconst getPrivateAttributes = (model: Model) => {\n return _.union(\n getStoredPrivateAttributes(model),\n _.keys(_.pickBy(model.attributes, (attr) => !!attr.private))\n );\n};\n\nconst isPrivateAttribute = (model: Model, attributeName: string) => {\n if (model?.attributes?.[attributeName]?.private === true) {\n return true;\n }\n return getStoredPrivateAttributes(model).includes(attributeName);\n};\n\nconst isScalarAttribute = (attribute?: Attribute) => {\n return attribute && !['media', 'component', 'relation', 'dynamiczone'].includes(attribute.type);\n};\n\nconst getDoesAttributeRequireValidation = (attribute: Attribute) => {\n return (\n attribute.required ||\n attribute.unique ||\n Object.prototype.hasOwnProperty.call(attribute, 'max') ||\n Object.prototype.hasOwnProperty.call(attribute, 'min') ||\n Object.prototype.hasOwnProperty.call(attribute, 'maxLength') ||\n Object.prototype.hasOwnProperty.call(attribute, 'minLength')\n );\n};\nconst isMediaAttribute = (attribute?: Attribute) => attribute?.type === 'media';\nconst isRelationalAttribute = (attribute?: Attribute): attribute is RelationalAttribute =>\n attribute?.type === 'relation';\n\nconst HAS_RELATION_REORDERING = ['manyToMany', 'manyToOne', 'oneToMany'];\nconst hasRelationReordering = (attribute?: Attribute) =>\n isRelationalAttribute(attribute) && HAS_RELATION_REORDERING.includes(attribute.relation);\n\nconst isComponentAttribute = (\n attribute: Attribute\n): attribute is ComponentAttribute | DynamicZoneAttribute =>\n ['component', 'dynamiczone'].includes(attribute?.type);\n\nconst isDynamicZoneAttribute = (attribute?: Attribute): attribute is DynamicZoneAttribute =>\n !!attribute && attribute.type === 'dynamiczone';\nconst isMorphToRelationalAttribute = (attribute?: Attribute) => {\n return (\n !!attribute && isRelationalAttribute(attribute) && attribute.relation?.startsWith?.('morphTo')\n );\n};\n\nconst getComponentAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isComponentAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getScalarAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isScalarAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getRelationalAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isRelationalAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\n/**\n * Checks if an attribute is of type `type`\n * @param {object} attribute\n * @param {string} type\n */\nconst isTypedAttribute = (attribute: Attribute, type: string) => {\n return _.has(attribute, 'type') && attribute.type === type;\n};\n\n/**\n * Returns a route prefix for a contentType\n * @param {object} contentType\n * @returns {string}\n */\nconst getContentTypeRoutePrefix = (contentType: WithRequired<Model, 'info'>) => {\n return isSingleType(contentType)\n ? _.kebabCase(contentType.info.singularName)\n : _.kebabCase(contentType.info.pluralName);\n};\n\nexport {\n isSchema,\n isContentTypeSchema,\n isComponentSchema,\n isScalarAttribute,\n isMediaAttribute,\n isRelationalAttribute,\n hasRelationReordering,\n isComponentAttribute,\n isDynamicZoneAttribute,\n isMorphToRelationalAttribute,\n isTypedAttribute,\n getPrivateAttributes,\n isPrivateAttribute,\n constants,\n getNonWritableAttributes,\n getComponentAttributes,\n getScalarAttributes,\n getRelationalAttributes,\n getWritableAttributes,\n isWritableAttribute,\n getNonVisibleAttributes,\n getVisibleAttributes,\n getTimestamps,\n getCreatorFields,\n isVisibleAttribute,\n getOptions,\n isDraft,\n hasDraftAndPublish,\n isSingleType,\n isCollectionType,\n isKind,\n getContentTypeRoutePrefix,\n getDoesAttributeRequireValidation,\n};\n"],"names":["SINGLE_TYPE","COLLECTION_TYPE","ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","constants","getTimestamps","model","attributes","has","push","getCreatorFields","getNonWritableAttributes","nonWritableAttributes","_","reduce","acc","attr","attrName","writable","concat","uniq","getWritableAttributes","difference","Object","keys","isWritableAttribute","attributeName","includes","getNonVisibleAttributes","nonVisibleAttributes","visible","getVisibleAttributes","isVisibleAttribute","getOptions","assign","draftAndPublish","get","hasDraftAndPublish","isDraft","data","isSchema","modelType","isComponentSchema","isContentTypeSchema","isSingleType","kind","isCollectionType","isKind","getStoredPrivateAttributes","union","strapi","config","getOr","getPrivateAttributes","pickBy","private","isPrivateAttribute","isScalarAttribute","attribute","type","getDoesAttributeRequireValidation","required","unique","prototype","hasOwnProperty","call","isMediaAttribute","isRelationalAttribute","HAS_RELATION_REORDERING","hasRelationReordering","relation","isComponentAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","startsWith","getComponentAttributes","schema","getScalarAttributes","getRelationalAttributes","isTypedAttribute","getContentTypeRoutePrefix","contentType","kebabCase","info","singularName","pluralName"],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import ___default from 'lodash';
|
|
2
|
+
import { has, union, getOr } from 'lodash/fp';
|
|
3
|
+
|
|
4
|
+
const SINGLE_TYPE = 'singleType';
|
|
5
|
+
const COLLECTION_TYPE = 'collectionType';
|
|
6
|
+
const ID_ATTRIBUTE = 'id';
|
|
7
|
+
const DOC_ID_ATTRIBUTE = 'documentId';
|
|
8
|
+
const PUBLISHED_AT_ATTRIBUTE = 'publishedAt';
|
|
9
|
+
const CREATED_BY_ATTRIBUTE = 'createdBy';
|
|
10
|
+
const UPDATED_BY_ATTRIBUTE = 'updatedBy';
|
|
11
|
+
const CREATED_AT_ATTRIBUTE = 'createdAt';
|
|
12
|
+
const UPDATED_AT_ATTRIBUTE = 'updatedAt';
|
|
13
|
+
const constants = {
|
|
14
|
+
ID_ATTRIBUTE,
|
|
15
|
+
DOC_ID_ATTRIBUTE,
|
|
16
|
+
PUBLISHED_AT_ATTRIBUTE,
|
|
17
|
+
CREATED_BY_ATTRIBUTE,
|
|
18
|
+
UPDATED_BY_ATTRIBUTE,
|
|
19
|
+
CREATED_AT_ATTRIBUTE,
|
|
20
|
+
UPDATED_AT_ATTRIBUTE,
|
|
21
|
+
SINGLE_TYPE,
|
|
22
|
+
COLLECTION_TYPE
|
|
23
|
+
};
|
|
24
|
+
const getTimestamps = (model)=>{
|
|
25
|
+
const attributes = [];
|
|
26
|
+
if (has(CREATED_AT_ATTRIBUTE, model.attributes)) {
|
|
27
|
+
attributes.push(CREATED_AT_ATTRIBUTE);
|
|
28
|
+
}
|
|
29
|
+
if (has(UPDATED_AT_ATTRIBUTE, model.attributes)) {
|
|
30
|
+
attributes.push(UPDATED_AT_ATTRIBUTE);
|
|
31
|
+
}
|
|
32
|
+
return attributes;
|
|
33
|
+
};
|
|
34
|
+
const getCreatorFields = (model)=>{
|
|
35
|
+
const attributes = [];
|
|
36
|
+
if (has(CREATED_BY_ATTRIBUTE, model.attributes)) {
|
|
37
|
+
attributes.push(CREATED_BY_ATTRIBUTE);
|
|
38
|
+
}
|
|
39
|
+
if (has(UPDATED_BY_ATTRIBUTE, model.attributes)) {
|
|
40
|
+
attributes.push(UPDATED_BY_ATTRIBUTE);
|
|
41
|
+
}
|
|
42
|
+
return attributes;
|
|
43
|
+
};
|
|
44
|
+
const getNonWritableAttributes = (model)=>{
|
|
45
|
+
if (!model) return [];
|
|
46
|
+
const nonWritableAttributes = ___default.reduce(model.attributes, (acc, attr, attrName)=>attr.writable === false ? acc.concat(attrName) : acc, []);
|
|
47
|
+
return ___default.uniq([
|
|
48
|
+
ID_ATTRIBUTE,
|
|
49
|
+
DOC_ID_ATTRIBUTE,
|
|
50
|
+
...getTimestamps(model),
|
|
51
|
+
...nonWritableAttributes
|
|
52
|
+
]);
|
|
53
|
+
};
|
|
54
|
+
const getWritableAttributes = (model)=>{
|
|
55
|
+
if (!model) return [];
|
|
56
|
+
return ___default.difference(Object.keys(model.attributes), getNonWritableAttributes(model));
|
|
57
|
+
};
|
|
58
|
+
const isWritableAttribute = (model, attributeName)=>{
|
|
59
|
+
return getWritableAttributes(model).includes(attributeName);
|
|
60
|
+
};
|
|
61
|
+
const getNonVisibleAttributes = (model)=>{
|
|
62
|
+
const nonVisibleAttributes = ___default.reduce(model.attributes, (acc, attr, attrName)=>attr.visible === false ? acc.concat(attrName) : acc, []);
|
|
63
|
+
return ___default.uniq([
|
|
64
|
+
ID_ATTRIBUTE,
|
|
65
|
+
DOC_ID_ATTRIBUTE,
|
|
66
|
+
...getTimestamps(model),
|
|
67
|
+
...nonVisibleAttributes
|
|
68
|
+
]);
|
|
69
|
+
};
|
|
70
|
+
const getVisibleAttributes = (model)=>{
|
|
71
|
+
return ___default.difference(___default.keys(model.attributes), getNonVisibleAttributes(model));
|
|
72
|
+
};
|
|
73
|
+
const isVisibleAttribute = (model, attributeName)=>{
|
|
74
|
+
return getVisibleAttributes(model).includes(attributeName);
|
|
75
|
+
};
|
|
76
|
+
const getOptions = (model)=>___default.assign({
|
|
77
|
+
draftAndPublish: false
|
|
78
|
+
}, ___default.get(model, 'options', {}));
|
|
79
|
+
const hasDraftAndPublish = (model)=>___default.get(model, 'options.draftAndPublish', false) === true;
|
|
80
|
+
const isDraft = (data, model)=>hasDraftAndPublish(model) && ___default.get(data, PUBLISHED_AT_ATTRIBUTE) === null;
|
|
81
|
+
const isSchema = (data)=>{
|
|
82
|
+
return typeof data === 'object' && data !== null && 'modelType' in data && typeof data.modelType === 'string' && [
|
|
83
|
+
'component',
|
|
84
|
+
'contentType'
|
|
85
|
+
].includes(data.modelType);
|
|
86
|
+
};
|
|
87
|
+
const isComponentSchema = (data)=>{
|
|
88
|
+
return isSchema(data) && data.modelType === 'component';
|
|
89
|
+
};
|
|
90
|
+
const isContentTypeSchema = (data)=>{
|
|
91
|
+
return isSchema(data) && data.modelType === 'contentType';
|
|
92
|
+
};
|
|
93
|
+
const isSingleType = ({ kind = COLLECTION_TYPE })=>kind === SINGLE_TYPE;
|
|
94
|
+
const isCollectionType = ({ kind = COLLECTION_TYPE })=>kind === COLLECTION_TYPE;
|
|
95
|
+
const isKind = (kind)=>(model)=>model.kind === kind;
|
|
96
|
+
const getStoredPrivateAttributes = (model)=>union(strapi?.config?.get('api.responses.privateAttributes', []) ?? [], getOr([], 'options.privateAttributes', model));
|
|
97
|
+
const getPrivateAttributes = (model)=>{
|
|
98
|
+
return ___default.union(getStoredPrivateAttributes(model), ___default.keys(___default.pickBy(model.attributes, (attr)=>!!attr.private)));
|
|
99
|
+
};
|
|
100
|
+
const isPrivateAttribute = (model, attributeName)=>{
|
|
101
|
+
if (model?.attributes?.[attributeName]?.private === true) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
return getStoredPrivateAttributes(model).includes(attributeName);
|
|
105
|
+
};
|
|
106
|
+
const isScalarAttribute = (attribute)=>{
|
|
107
|
+
return attribute && ![
|
|
108
|
+
'media',
|
|
109
|
+
'component',
|
|
110
|
+
'relation',
|
|
111
|
+
'dynamiczone'
|
|
112
|
+
].includes(attribute.type);
|
|
113
|
+
};
|
|
114
|
+
const getDoesAttributeRequireValidation = (attribute)=>{
|
|
115
|
+
return attribute.required || attribute.unique || Object.prototype.hasOwnProperty.call(attribute, 'max') || Object.prototype.hasOwnProperty.call(attribute, 'min') || Object.prototype.hasOwnProperty.call(attribute, 'maxLength') || Object.prototype.hasOwnProperty.call(attribute, 'minLength');
|
|
116
|
+
};
|
|
117
|
+
const isMediaAttribute = (attribute)=>attribute?.type === 'media';
|
|
118
|
+
const isRelationalAttribute = (attribute)=>attribute?.type === 'relation';
|
|
119
|
+
const HAS_RELATION_REORDERING = [
|
|
120
|
+
'manyToMany',
|
|
121
|
+
'manyToOne',
|
|
122
|
+
'oneToMany'
|
|
123
|
+
];
|
|
124
|
+
const hasRelationReordering = (attribute)=>isRelationalAttribute(attribute) && HAS_RELATION_REORDERING.includes(attribute.relation);
|
|
125
|
+
const isComponentAttribute = (attribute)=>[
|
|
126
|
+
'component',
|
|
127
|
+
'dynamiczone'
|
|
128
|
+
].includes(attribute?.type);
|
|
129
|
+
const isDynamicZoneAttribute = (attribute)=>!!attribute && attribute.type === 'dynamiczone';
|
|
130
|
+
const isMorphToRelationalAttribute = (attribute)=>{
|
|
131
|
+
return !!attribute && isRelationalAttribute(attribute) && attribute.relation?.startsWith?.('morphTo');
|
|
132
|
+
};
|
|
133
|
+
const getComponentAttributes = (schema)=>{
|
|
134
|
+
return ___default.reduce(schema.attributes, (acc, attr, attrName)=>{
|
|
135
|
+
if (isComponentAttribute(attr)) acc.push(attrName);
|
|
136
|
+
return acc;
|
|
137
|
+
}, []);
|
|
138
|
+
};
|
|
139
|
+
const getScalarAttributes = (schema)=>{
|
|
140
|
+
return ___default.reduce(schema.attributes, (acc, attr, attrName)=>{
|
|
141
|
+
if (isScalarAttribute(attr)) acc.push(attrName);
|
|
142
|
+
return acc;
|
|
143
|
+
}, []);
|
|
144
|
+
};
|
|
145
|
+
const getRelationalAttributes = (schema)=>{
|
|
146
|
+
return ___default.reduce(schema.attributes, (acc, attr, attrName)=>{
|
|
147
|
+
if (isRelationalAttribute(attr)) acc.push(attrName);
|
|
148
|
+
return acc;
|
|
149
|
+
}, []);
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Checks if an attribute is of type `type`
|
|
153
|
+
* @param {object} attribute
|
|
154
|
+
* @param {string} type
|
|
155
|
+
*/ const isTypedAttribute = (attribute, type)=>{
|
|
156
|
+
return ___default.has(attribute, 'type') && attribute.type === type;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Returns a route prefix for a contentType
|
|
160
|
+
* @param {object} contentType
|
|
161
|
+
* @returns {string}
|
|
162
|
+
*/ const getContentTypeRoutePrefix = (contentType)=>{
|
|
163
|
+
return isSingleType(contentType) ? ___default.kebabCase(contentType.info.singularName) : ___default.kebabCase(contentType.info.pluralName);
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
export { constants, getComponentAttributes, getContentTypeRoutePrefix, getCreatorFields, getDoesAttributeRequireValidation, getNonVisibleAttributes, getNonWritableAttributes, getOptions, getPrivateAttributes, getRelationalAttributes, getScalarAttributes, getTimestamps, getVisibleAttributes, getWritableAttributes, hasDraftAndPublish, hasRelationReordering, isCollectionType, isComponentAttribute, isComponentSchema, isContentTypeSchema, isDraft, isDynamicZoneAttribute, isKind, isMediaAttribute, isMorphToRelationalAttribute, isPrivateAttribute, isRelationalAttribute, isScalarAttribute, isSchema, isSingleType, isTypedAttribute, isVisibleAttribute, isWritableAttribute };
|
|
167
|
+
//# sourceMappingURL=content-types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-types.mjs","sources":["../src/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { has, getOr, union } from 'lodash/fp';\nimport type {\n Model,\n Kind,\n Attribute,\n RelationalAttribute,\n ComponentAttribute,\n DynamicZoneAttribute,\n WithRequired,\n} from './types';\n\nconst SINGLE_TYPE = 'singleType';\nconst COLLECTION_TYPE = 'collectionType';\n\nconst ID_ATTRIBUTE = 'id';\nconst DOC_ID_ATTRIBUTE = 'documentId';\n\nconst PUBLISHED_AT_ATTRIBUTE = 'publishedAt';\nconst CREATED_BY_ATTRIBUTE = 'createdBy';\nconst UPDATED_BY_ATTRIBUTE = 'updatedBy';\n\nconst CREATED_AT_ATTRIBUTE = 'createdAt';\nconst UPDATED_AT_ATTRIBUTE = 'updatedAt';\n\nconst constants = {\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n SINGLE_TYPE,\n COLLECTION_TYPE,\n};\n\nconst getTimestamps = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(CREATED_AT_ATTRIBUTE, model.attributes)) {\n attributes.push(CREATED_AT_ATTRIBUTE);\n }\n\n if (has(UPDATED_AT_ATTRIBUTE, model.attributes)) {\n attributes.push(UPDATED_AT_ATTRIBUTE);\n }\n\n return attributes;\n};\n\nconst getCreatorFields = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(CREATED_BY_ATTRIBUTE, model.attributes)) {\n attributes.push(CREATED_BY_ATTRIBUTE);\n }\n\n if (has(UPDATED_BY_ATTRIBUTE, model.attributes)) {\n attributes.push(UPDATED_BY_ATTRIBUTE);\n }\n\n return attributes;\n};\n\nconst getNonWritableAttributes = (model: Model) => {\n if (!model) return [];\n\n const nonWritableAttributes = _.reduce(\n model.attributes,\n (acc, attr, attrName) => (attr.writable === false ? acc.concat(attrName) : acc),\n [] as string[]\n );\n\n return _.uniq([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonWritableAttributes,\n ]);\n};\n\nconst getWritableAttributes = (model: Model) => {\n if (!model) return [];\n\n return _.difference(Object.keys(model.attributes), getNonWritableAttributes(model));\n};\n\nconst isWritableAttribute = (model: Model, attributeName: string) => {\n return getWritableAttributes(model).includes(attributeName);\n};\n\nconst getNonVisibleAttributes = (model: Model) => {\n const nonVisibleAttributes = _.reduce(\n model.attributes,\n (acc, attr, attrName) => (attr.visible === false ? acc.concat(attrName) : acc),\n [] as string[]\n );\n\n return _.uniq([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE, ...getTimestamps(model), ...nonVisibleAttributes]);\n};\n\nconst getVisibleAttributes = (model: Model) => {\n return _.difference(_.keys(model.attributes), getNonVisibleAttributes(model));\n};\n\nconst isVisibleAttribute = (model: Model, attributeName: string) => {\n return getVisibleAttributes(model).includes(attributeName);\n};\n\nconst getOptions = (model: Model) =>\n _.assign({ draftAndPublish: false }, _.get(model, 'options', {}));\n\nconst hasDraftAndPublish = (model: Model) =>\n _.get(model, 'options.draftAndPublish', false) === true;\n\nconst isDraft = <T extends object>(data: T, model: Model) =>\n hasDraftAndPublish(model) && _.get(data, PUBLISHED_AT_ATTRIBUTE) === null;\n\nconst isSchema = (data: unknown): data is Model => {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'modelType' in data &&\n typeof data.modelType === 'string' &&\n ['component', 'contentType'].includes(data.modelType)\n );\n};\n\nconst isComponentSchema = (data: unknown): data is Model & { modelType: 'component' } => {\n return isSchema(data) && data.modelType === 'component';\n};\n\nconst isContentTypeSchema = (data: unknown): data is Model & { modelType: 'contentType' } => {\n return isSchema(data) && data.modelType === 'contentType';\n};\n\nconst isSingleType = ({ kind = COLLECTION_TYPE }) => kind === SINGLE_TYPE;\nconst isCollectionType = ({ kind = COLLECTION_TYPE }) => kind === COLLECTION_TYPE;\nconst isKind = (kind: Kind) => (model: Model) => model.kind === kind;\n\nconst getStoredPrivateAttributes = (model: Model) =>\n union(\n (strapi?.config?.get('api.responses.privateAttributes', []) ?? []) as Array<string>,\n getOr([], 'options.privateAttributes', model)\n );\n\nconst getPrivateAttributes = (model: Model) => {\n return _.union(\n getStoredPrivateAttributes(model),\n _.keys(_.pickBy(model.attributes, (attr) => !!attr.private))\n );\n};\n\nconst isPrivateAttribute = (model: Model, attributeName: string) => {\n if (model?.attributes?.[attributeName]?.private === true) {\n return true;\n }\n return getStoredPrivateAttributes(model).includes(attributeName);\n};\n\nconst isScalarAttribute = (attribute?: Attribute) => {\n return attribute && !['media', 'component', 'relation', 'dynamiczone'].includes(attribute.type);\n};\n\nconst getDoesAttributeRequireValidation = (attribute: Attribute) => {\n return (\n attribute.required ||\n attribute.unique ||\n Object.prototype.hasOwnProperty.call(attribute, 'max') ||\n Object.prototype.hasOwnProperty.call(attribute, 'min') ||\n Object.prototype.hasOwnProperty.call(attribute, 'maxLength') ||\n Object.prototype.hasOwnProperty.call(attribute, 'minLength')\n );\n};\nconst isMediaAttribute = (attribute?: Attribute) => attribute?.type === 'media';\nconst isRelationalAttribute = (attribute?: Attribute): attribute is RelationalAttribute =>\n attribute?.type === 'relation';\n\nconst HAS_RELATION_REORDERING = ['manyToMany', 'manyToOne', 'oneToMany'];\nconst hasRelationReordering = (attribute?: Attribute) =>\n isRelationalAttribute(attribute) && HAS_RELATION_REORDERING.includes(attribute.relation);\n\nconst isComponentAttribute = (\n attribute: Attribute\n): attribute is ComponentAttribute | DynamicZoneAttribute =>\n ['component', 'dynamiczone'].includes(attribute?.type);\n\nconst isDynamicZoneAttribute = (attribute?: Attribute): attribute is DynamicZoneAttribute =>\n !!attribute && attribute.type === 'dynamiczone';\nconst isMorphToRelationalAttribute = (attribute?: Attribute) => {\n return (\n !!attribute && isRelationalAttribute(attribute) && attribute.relation?.startsWith?.('morphTo')\n );\n};\n\nconst getComponentAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isComponentAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getScalarAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isScalarAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getRelationalAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isRelationalAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\n/**\n * Checks if an attribute is of type `type`\n * @param {object} attribute\n * @param {string} type\n */\nconst isTypedAttribute = (attribute: Attribute, type: string) => {\n return _.has(attribute, 'type') && attribute.type === type;\n};\n\n/**\n * Returns a route prefix for a contentType\n * @param {object} contentType\n * @returns {string}\n */\nconst getContentTypeRoutePrefix = (contentType: WithRequired<Model, 'info'>) => {\n return isSingleType(contentType)\n ? _.kebabCase(contentType.info.singularName)\n : _.kebabCase(contentType.info.pluralName);\n};\n\nexport {\n isSchema,\n isContentTypeSchema,\n isComponentSchema,\n isScalarAttribute,\n isMediaAttribute,\n isRelationalAttribute,\n hasRelationReordering,\n isComponentAttribute,\n isDynamicZoneAttribute,\n isMorphToRelationalAttribute,\n isTypedAttribute,\n getPrivateAttributes,\n isPrivateAttribute,\n constants,\n getNonWritableAttributes,\n getComponentAttributes,\n getScalarAttributes,\n getRelationalAttributes,\n getWritableAttributes,\n isWritableAttribute,\n getNonVisibleAttributes,\n getVisibleAttributes,\n getTimestamps,\n getCreatorFields,\n isVisibleAttribute,\n getOptions,\n isDraft,\n hasDraftAndPublish,\n isSingleType,\n isCollectionType,\n isKind,\n getContentTypeRoutePrefix,\n getDoesAttributeRequireValidation,\n};\n"],"names":["SINGLE_TYPE","COLLECTION_TYPE","ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","constants","getTimestamps","model","attributes","has","push","getCreatorFields","getNonWritableAttributes","nonWritableAttributes","_","reduce","acc","attr","attrName","writable","concat","uniq","getWritableAttributes","difference","Object","keys","isWritableAttribute","attributeName","includes","getNonVisibleAttributes","nonVisibleAttributes","visible","getVisibleAttributes","isVisibleAttribute","getOptions","assign","draftAndPublish","get","hasDraftAndPublish","isDraft","data","isSchema","modelType","isComponentSchema","isContentTypeSchema","isSingleType","kind","isCollectionType","isKind","getStoredPrivateAttributes","union","strapi","config","getOr","getPrivateAttributes","pickBy","private","isPrivateAttribute","isScalarAttribute","attribute","type","getDoesAttributeRequireValidation","required","unique","prototype","hasOwnProperty","call","isMediaAttribute","isRelationalAttribute","HAS_RELATION_REORDERING","hasRelationReordering","relation","isComponentAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","startsWith","getComponentAttributes","schema","getScalarAttributes","getRelationalAttributes","isTypedAttribute","getContentTypeRoutePrefix","contentType","kebabCase","info","singularName","pluralName"],"mappings":"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"}
|