@strapi/utils 5.56.0 → 5.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/async.js +2 -2
- package/dist/async.js.map +1 -1
- package/dist/async.mjs +1 -1
- package/dist/async.mjs.map +1 -1
- package/dist/content-types.d.ts.map +1 -1
- package/dist/content-types.js +8 -9
- package/dist/content-types.js.map +1 -1
- package/dist/content-types.mjs +6 -7
- package/dist/content-types.mjs.map +1 -1
- package/dist/convert-query-params.d.ts.map +1 -1
- package/dist/convert-query-params.js +33 -34
- package/dist/convert-query-params.js.map +1 -1
- package/dist/convert-query-params.mjs +23 -24
- package/dist/convert-query-params.mjs.map +1 -1
- package/dist/format-yup-error.js +3 -3
- package/dist/format-yup-error.js.map +1 -1
- package/dist/format-yup-error.mjs +1 -1
- package/dist/format-yup-error.mjs.map +1 -1
- package/dist/hooks.js +3 -3
- package/dist/hooks.js.map +1 -1
- package/dist/hooks.mjs +2 -2
- package/dist/hooks.mjs.map +1 -1
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +15 -18
- package/dist/pagination.js.map +1 -1
- package/dist/pagination.mjs +15 -18
- package/dist/pagination.mjs.map +1 -1
- package/dist/policy.d.ts +1 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +1 -3
- package/dist/policy.js.map +1 -1
- package/dist/policy.mjs +1 -3
- package/dist/policy.mjs.map +1 -1
- package/dist/primitives/objects.d.ts +7 -1
- package/dist/primitives/objects.d.ts.map +1 -1
- package/dist/primitives/objects.js +5 -0
- package/dist/primitives/objects.js.map +1 -1
- package/dist/primitives/objects.mjs +5 -1
- package/dist/primitives/objects.mjs.map +1 -1
- package/dist/primitives/strings.d.ts.map +1 -1
- package/dist/primitives/strings.js +3 -7
- package/dist/primitives/strings.js.map +1 -1
- package/dist/primitives/strings.mjs +3 -7
- package/dist/primitives/strings.mjs.map +1 -1
- package/dist/provider-factory.js +4 -4
- package/dist/provider-factory.js.map +1 -1
- package/dist/provider-factory.mjs +1 -1
- package/dist/provider-factory.mjs.map +1 -1
- package/dist/relations.js +2 -2
- package/dist/relations.js.map +1 -1
- package/dist/relations.mjs +1 -1
- package/dist/relations.mjs.map +1 -1
- package/dist/sanitize/index.d.ts.map +1 -1
- package/dist/sanitize/index.js +8 -8
- package/dist/sanitize/index.js.map +1 -1
- package/dist/sanitize/index.mjs +7 -7
- package/dist/sanitize/index.mjs.map +1 -1
- package/dist/sanitize/sanitizers.js +10 -10
- package/dist/sanitize/sanitizers.js.map +1 -1
- package/dist/sanitize/sanitizers.mjs +4 -4
- package/dist/sanitize/sanitizers.mjs.map +1 -1
- package/dist/sanitize/visitors/remove-disallowed-fields.js +4 -4
- package/dist/sanitize/visitors/remove-disallowed-fields.js.map +1 -1
- package/dist/sanitize/visitors/remove-disallowed-fields.mjs +3 -3
- package/dist/sanitize/visitors/remove-disallowed-fields.mjs.map +1 -1
- package/dist/sanitize/visitors/remove-restricted-fields.js +2 -2
- package/dist/sanitize/visitors/remove-restricted-fields.js.map +1 -1
- package/dist/sanitize/visitors/remove-restricted-fields.mjs +2 -2
- package/dist/sanitize/visitors/remove-restricted-fields.mjs.map +1 -1
- package/dist/sanitize/visitors/remove-restricted-relations.js +9 -9
- package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -1
- package/dist/sanitize/visitors/remove-restricted-relations.mjs +4 -4
- package/dist/sanitize/visitors/remove-restricted-relations.mjs.map +1 -1
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +3 -3
- package/dist/security.js.map +1 -1
- package/dist/security.mjs +3 -3
- package/dist/security.mjs.map +1 -1
- package/dist/set-creator-fields.d.ts +4 -1
- package/dist/set-creator-fields.d.ts.map +1 -1
- package/dist/set-creator-fields.js +7 -4
- package/dist/set-creator-fields.js.map +1 -1
- package/dist/set-creator-fields.mjs +7 -4
- package/dist/set-creator-fields.mjs.map +1 -1
- package/dist/traverse/factory.js +8 -8
- package/dist/traverse/factory.js.map +1 -1
- package/dist/traverse/factory.mjs +8 -8
- package/dist/traverse/factory.mjs.map +1 -1
- package/dist/traverse/query-fields.js +7 -7
- package/dist/traverse/query-fields.js.map +1 -1
- package/dist/traverse/query-fields.mjs +3 -3
- package/dist/traverse/query-fields.mjs.map +1 -1
- package/dist/traverse/query-filters.js +12 -12
- package/dist/traverse/query-filters.js.map +1 -1
- package/dist/traverse/query-filters.mjs +7 -7
- package/dist/traverse/query-filters.mjs.map +1 -1
- package/dist/traverse/query-populate.d.ts.map +1 -1
- package/dist/traverse/query-populate.js +21 -21
- package/dist/traverse/query-populate.js.map +1 -1
- package/dist/traverse/query-populate.mjs +12 -12
- package/dist/traverse/query-populate.mjs.map +1 -1
- package/dist/traverse/query-sort.d.ts.map +1 -1
- package/dist/traverse/query-sort.js +16 -16
- package/dist/traverse/query-sort.js.map +1 -1
- package/dist/traverse/query-sort.mjs +6 -6
- package/dist/traverse/query-sort.mjs.map +1 -1
- package/dist/traverse-entity.d.ts.map +1 -1
- package/dist/traverse-entity.js +18 -18
- package/dist/traverse-entity.js.map +1 -1
- package/dist/traverse-entity.mjs +16 -16
- package/dist/traverse-entity.mjs.map +1 -1
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +5 -5
- package/dist/validate/index.js.map +1 -1
- package/dist/validate/index.mjs +3 -3
- package/dist/validate/index.mjs.map +1 -1
- package/dist/validate/utils.d.ts +2 -1
- package/dist/validate/utils.d.ts.map +1 -1
- package/dist/validate/utils.js +4 -4
- package/dist/validate/utils.js.map +1 -1
- package/dist/validate/utils.mjs +4 -4
- package/dist/validate/utils.mjs.map +1 -1
- package/dist/validate/validators.d.ts.map +1 -1
- package/dist/validate/validators.js +17 -9
- package/dist/validate/validators.js.map +1 -1
- package/dist/validate/validators.mjs +14 -6
- package/dist/validate/validators.mjs.map +1 -1
- package/dist/validate/visitors/throw-disallowed-fields.js +4 -4
- package/dist/validate/visitors/throw-disallowed-fields.js.map +1 -1
- package/dist/validate/visitors/throw-disallowed-fields.mjs +3 -3
- package/dist/validate/visitors/throw-disallowed-fields.mjs.map +1 -1
- package/dist/validate/visitors/throw-restricted-fields.js +2 -2
- package/dist/validate/visitors/throw-restricted-fields.js.map +1 -1
- package/dist/validate/visitors/throw-restricted-fields.mjs +2 -2
- package/dist/validate/visitors/throw-restricted-fields.mjs.map +1 -1
- package/dist/validate/visitors/throw-restricted-relations.js +6 -6
- package/dist/validate/visitors/throw-restricted-relations.js.map +1 -1
- package/dist/validate/visitors/throw-restricted-relations.mjs +2 -2
- package/dist/validate/visitors/throw-restricted-relations.mjs.map +1 -1
- package/dist/validators.js +3 -3
- package/dist/validators.js.map +1 -1
- package/dist/validators.mjs +3 -3
- package/dist/validators.mjs.map +1 -1
- package/dist/yup.d.ts.map +1 -1
- package/dist/yup.js +2 -3
- package/dist/yup.js.map +1 -1
- package/dist/yup.mjs +3 -4
- package/dist/yup.mjs.map +1 -1
- package/package.json +4 -4
package/dist/async.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var pMap = require('p-map');
|
|
4
|
-
var
|
|
4
|
+
var _ = require('lodash');
|
|
5
5
|
|
|
6
6
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
7
|
|
|
@@ -17,7 +17,7 @@ function pipe(...fns) {
|
|
|
17
17
|
return res;
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
const map =
|
|
20
|
+
const map = _.curry(pMap__default.default);
|
|
21
21
|
const reduce = (mixedArray)=>async (iteratee, initialValue)=>{
|
|
22
22
|
let acc = initialValue;
|
|
23
23
|
for(let i = 0; i < mixedArray.length; i += 1){
|
package/dist/async.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async.js","sources":["../src/async.ts"],"sourcesContent":["import pMap from 'p-map';\nimport { curry } from 'lodash
|
|
1
|
+
{"version":3,"file":"async.js","sources":["../src/async.ts"],"sourcesContent":["import pMap from 'p-map';\nimport { curry } from 'lodash';\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,IAAAA,CAA0B,GAAGC,GAA4C,EAAA;AACvF,IAAA,MAAM,CAACC,OAAAA,EAAS,GAAGC,MAAAA,CAAO,GAAGF,GAAAA;AAE7B,IAAA,OAAQ,OAAO,GAAGG,IAAAA,GAAAA;AAChB,QAAA,IAAIC,GAAAA,GAAM,MAAMH,OAAAA,CAAQI,KAAK,CAACJ,OAAAA,EAASE,IAAAA,CAAAA;QAEvC,IAAK,IAAIG,IAAI,CAAA,EAAGA,CAAAA,GAAIJ,OAAOK,MAAM,EAAED,KAAK,CAAA,CAAG;AACzCF,YAAAA,GAAAA,GAAM,MAAMF,MAAM,CAACI,CAAAA,CAAE,CAACF,GAAAA,CAAAA;AACxB,QAAA;QAEA,OAAOA,GAAAA;AACT,IAAA,CAAA;AACF;AAEO,MAAMI,GAAAA,GAAMC,OAAAA,CAAMC,qBAAAA;AAElB,MAAMC,MAAAA,GACX,CAACC,UAAAA,GACD,OAAUC,QAAAA,EAAmBC,YAAAA,GAAAA;AAC3B,QAAA,IAAIC,GAAAA,GAAMD,YAAAA;QACV,IAAK,IAAIR,IAAI,CAAA,EAAGA,CAAAA,GAAIM,WAAWL,MAAM,EAAED,KAAK,CAAA,CAAG;AAC7CS,YAAAA,GAAAA,GAAM,MAAMF,QAAAA,CAASE,GAAAA,EAAK,MAAMH,UAAU,CAACN,EAAE,EAAEA,CAAAA,CAAAA;AACjD,QAAA;QACA,OAAOS,GAAAA;IACT;;;;;;"}
|
package/dist/async.mjs
CHANGED
package/dist/async.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async.mjs","sources":["../src/async.ts"],"sourcesContent":["import pMap from 'p-map';\nimport { curry } from 'lodash
|
|
1
|
+
{"version":3,"file":"async.mjs","sources":["../src/async.ts"],"sourcesContent":["import pMap from 'p-map';\nimport { curry } from 'lodash';\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,IAAAA,CAA0B,GAAGC,GAA4C,EAAA;AACvF,IAAA,MAAM,CAACC,OAAAA,EAAS,GAAGC,MAAAA,CAAO,GAAGF,GAAAA;AAE7B,IAAA,OAAQ,OAAO,GAAGG,IAAAA,GAAAA;AAChB,QAAA,IAAIC,GAAAA,GAAM,MAAMH,OAAAA,CAAQI,KAAK,CAACJ,OAAAA,EAASE,IAAAA,CAAAA;QAEvC,IAAK,IAAIG,IAAI,CAAA,EAAGA,CAAAA,GAAIJ,OAAOK,MAAM,EAAED,KAAK,CAAA,CAAG;AACzCF,YAAAA,GAAAA,GAAM,MAAMF,MAAM,CAACI,CAAAA,CAAE,CAACF,GAAAA,CAAAA;AACxB,QAAA;QAEA,OAAOA,GAAAA;AACT,IAAA,CAAA;AACF;AAEO,MAAMI,GAAAA,GAAMC,KAAAA,CAAMC,IAAAA;AAElB,MAAMC,MAAAA,GACX,CAACC,UAAAA,GACD,OAAUC,QAAAA,EAAmBC,YAAAA,GAAAA;AAC3B,QAAA,IAAIC,GAAAA,GAAMD,YAAAA;QACV,IAAK,IAAIR,IAAI,CAAA,EAAGA,CAAAA,GAAIM,WAAWL,MAAM,EAAED,KAAK,CAAA,CAAG;AAC7CS,YAAAA,GAAAA,GAAM,MAAMF,QAAAA,CAASE,GAAAA,EAAK,MAAMH,UAAU,CAACN,EAAE,EAAEA,CAAAA,CAAAA;AACjD,QAAA;QACA,OAAOS,GAAAA;IACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../src/content-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../src/content-types.ts"],"names":[],"mappings":"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"}
|
package/dist/content-types.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _ = require('lodash');
|
|
4
|
-
var fp = require('lodash/fp');
|
|
5
4
|
|
|
6
5
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
6
|
|
|
@@ -104,7 +103,7 @@ const matchesReservedName = (snakeCaseName, list)=>{
|
|
|
104
103
|
};
|
|
105
104
|
// compare snake case to check the actual column names that will be used in the database
|
|
106
105
|
const isReservedAttributeName = (name, { draftAndPublish = true } = {})=>{
|
|
107
|
-
const snakeCaseName =
|
|
106
|
+
const snakeCaseName = _.snakeCase(name);
|
|
108
107
|
if (matchesReservedName(snakeCaseName, RESERVED_ATTRIBUTE_NAMES)) {
|
|
109
108
|
return true;
|
|
110
109
|
}
|
|
@@ -115,7 +114,7 @@ const isReservedAttributeName = (name, { draftAndPublish = true } = {})=>{
|
|
|
115
114
|
};
|
|
116
115
|
// compare snake case to check the actual column names that will be used in the database
|
|
117
116
|
const isReservedModelName = (name)=>{
|
|
118
|
-
return matchesReservedName(
|
|
117
|
+
return matchesReservedName(_.snakeCase(name), RESERVED_MODEL_NAMES);
|
|
119
118
|
};
|
|
120
119
|
const getReservedAttributeNames = ({ draftAndPublish = true } = {})=>{
|
|
121
120
|
return draftAndPublish ? [
|
|
@@ -131,26 +130,26 @@ const getReservedModelNames = ()=>[
|
|
|
131
130
|
const findDraftAndPublishReservedAttributeNames = (attributeNames)=>{
|
|
132
131
|
return [
|
|
133
132
|
...attributeNames
|
|
134
|
-
].filter((name)=>matchesReservedName(
|
|
133
|
+
].filter((name)=>matchesReservedName(_.snakeCase(name), RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH));
|
|
135
134
|
};
|
|
136
135
|
const getDraftAndPublishReservedAttributeWarning = (uid, attributeName)=>`The attribute name '${attributeName}' on content type '${uid}' is reserved when 'draftAndPublish' is enabled. It conflicts with the Document Service / REST 'status' query parameter. Rename the attribute or disable the 'draftAndPublish' option.`;
|
|
137
136
|
const getDraftAndPublishEnableBlockedMessage = (attributeNames)=>`Cannot enable draft and publish while the following attribute names are reserved: ${attributeNames.join(', ')}. Rename them or remove them first.`;
|
|
138
137
|
const getTimestamps = (model)=>{
|
|
139
138
|
const attributes = [];
|
|
140
|
-
if (
|
|
139
|
+
if (_.has(model.attributes, CREATED_AT_ATTRIBUTE)) {
|
|
141
140
|
attributes.push(CREATED_AT_ATTRIBUTE);
|
|
142
141
|
}
|
|
143
|
-
if (
|
|
142
|
+
if (_.has(model.attributes, UPDATED_AT_ATTRIBUTE)) {
|
|
144
143
|
attributes.push(UPDATED_AT_ATTRIBUTE);
|
|
145
144
|
}
|
|
146
145
|
return attributes;
|
|
147
146
|
};
|
|
148
147
|
const getCreatorFields = (model)=>{
|
|
149
148
|
const attributes = [];
|
|
150
|
-
if (
|
|
149
|
+
if (_.has(model.attributes, CREATED_BY_ATTRIBUTE)) {
|
|
151
150
|
attributes.push(CREATED_BY_ATTRIBUTE);
|
|
152
151
|
}
|
|
153
|
-
if (
|
|
152
|
+
if (_.has(model.attributes, UPDATED_BY_ATTRIBUTE)) {
|
|
154
153
|
attributes.push(UPDATED_BY_ATTRIBUTE);
|
|
155
154
|
}
|
|
156
155
|
return attributes;
|
|
@@ -230,7 +229,7 @@ const isKind = (kind)=>(model)=>model.kind === kind;
|
|
|
230
229
|
* comes from the schema definition. The cache is only populated once `strapi.config` is
|
|
231
230
|
* available so that a lookup during early boot cannot record an empty set permanently.
|
|
232
231
|
*/ const storedPrivateAttributesCache = new WeakMap();
|
|
233
|
-
const computeStoredPrivateAttributes = (model)=>new Set(
|
|
232
|
+
const computeStoredPrivateAttributes = (model)=>new Set(_.union(_.get(model, 'options.privateAttributes', []), strapi?.config?.get('api.responses.privateAttributes', []) ?? []));
|
|
234
233
|
const getStoredPrivateAttributesSet = (model)=>{
|
|
235
234
|
const cacheable = typeof model === 'object' && model !== null && strapi?.config != null;
|
|
236
235
|
if (!cacheable) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.js","sources":["../src/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { has, getOr, union, snakeCase } 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 FIRST_PUBLISHED_AT_ATTRIBUTE = 'firstPublishedAt';\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 FIRST_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\n/** ID-like fields accepted at root level and on relations/media/components (validate/sanitize traversal). */\nconst ID_FIELDS: string[] = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];\n/** Keys accepted on morphTo relation payloads (e.g. __type). */\nconst MORPH_TO_KEYS: string[] = ['__type'];\n/** Keys accepted on dynamic zone component payloads (e.g. __component). */\nconst DYNAMIC_ZONE_KEYS: string[] = ['__component'];\n/** Relation operation keys (connect, disconnect, set, options). */\nconst RELATION_OPERATION_KEYS: string[] = ['connect', 'disconnect', 'set', 'options'];\n\n/**\n * Reserved attribute names that cannot be used by user-defined content-type fields.\n * Entries ending with `*` are treated as prefix matchers (e.g. `strapi*` blocks `strapi_foo`).\n */\n// use snake_case\nconst RESERVED_ATTRIBUTE_NAMES: string[] = [\n // ID fields\n 'id',\n 'document_id',\n\n // Creator fields\n 'created_at',\n 'updated_at',\n 'published_at',\n // V6: we will need to add first_published_at when it becomes the default behaviour\n 'created_by_id',\n 'updated_by_id',\n // does not actually conflict because the fields are called *_by_id but we'll leave it to avoid confusion\n 'created_by',\n 'updated_by',\n\n // Used for Strapi functionality\n 'entry_id',\n 'localizations',\n 'meta',\n 'locale',\n '__component',\n '__contentType',\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\n/**\n * Reserved attribute names that only conflict when draftAndPublish is enabled.\n * `status` is the v5 Document Service / REST query parameter for draft/published filtering.\n */\n// use snake_case\nconst RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH: string[] = ['status'];\n\n/** Reserved model (collection) names that cannot be used by user-defined content-types. */\n// use snake_case\nconst RESERVED_MODEL_NAMES: string[] = [\n 'boolean',\n 'date',\n 'date_time',\n 'time',\n 'upload',\n 'document',\n 'then', // no longer an issue but still restricting for being a javascript keyword\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\nconst matchesReservedName = (snakeCaseName: string, list: string[]): boolean => {\n if (list.includes(snakeCaseName)) {\n return true;\n }\n\n return list\n .filter((entry) => entry.endsWith('*'))\n .map((entry) => entry.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix));\n};\n\ninterface IsReservedAttributeNameOptions {\n /** When true, draft-and-publish-specific names (e.g. `status`) are also reserved. Defaults to true. */\n draftAndPublish?: boolean;\n}\n\n// compare snake case to check the actual column names that will be used in the database\nconst isReservedAttributeName = (\n name: string,\n { draftAndPublish = true }: IsReservedAttributeNameOptions = {}\n): boolean => {\n const snakeCaseName = snakeCase(name);\n\n if (matchesReservedName(snakeCaseName, RESERVED_ATTRIBUTE_NAMES)) {\n return true;\n }\n\n if (\n draftAndPublish &&\n matchesReservedName(snakeCaseName, RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH)\n ) {\n return true;\n }\n\n return false;\n};\n\n// compare snake case to check the actual column names that will be used in the database\nconst isReservedModelName = (name: string): boolean => {\n return matchesReservedName(snakeCase(name), RESERVED_MODEL_NAMES);\n};\n\nconst getReservedAttributeNames = ({\n draftAndPublish = true,\n}: IsReservedAttributeNameOptions = {}): string[] => {\n return draftAndPublish\n ? [...RESERVED_ATTRIBUTE_NAMES, ...RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH]\n : [...RESERVED_ATTRIBUTE_NAMES];\n};\n\nconst getReservedModelNames = (): string[] => [...RESERVED_MODEL_NAMES];\n\nconst findDraftAndPublishReservedAttributeNames = (attributeNames: Iterable<string>): string[] => {\n return [...attributeNames].filter((name) =>\n matchesReservedName(snakeCase(name), RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH)\n );\n};\n\nconst getDraftAndPublishReservedAttributeWarning = (uid: string, attributeName: string): string =>\n `The attribute name '${attributeName}' on content type '${uid}' is reserved when 'draftAndPublish' is enabled. It conflicts with the Document Service / REST 'status' query parameter. Rename the attribute or disable the 'draftAndPublish' option.`;\n\nconst getDraftAndPublishEnableBlockedMessage = (attributeNames: string[]): string =>\n `Cannot enable draft and publish while the following attribute names are reserved: ${attributeNames.join(', ')}. Rename them or remove them first.`;\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([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonVisibleAttributes,\n ]);\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 hasFirstPublishedAtField = (model: Model) =>\n strapi.config.get('features.future.experimental_firstPublishedAt', false) &&\n hasDraftAndPublish(model);\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\n/**\n * Memo of each model's \"stored\" private attributes — those declared in\n * `api.responses.privateAttributes` config or in the model's `options.privateAttributes`,\n * as opposed to attributes flagged `private: true` individually.\n *\n * `isPrivateAttribute` is called once per key, per node, per traversal, per entity, and\n * recomputing this set every time dominated response sanitization: a 25-entity page made\n * 48,605 calls, each doing two lodash path lookups plus a fresh `union()` allocation, all\n * returning the same answer.\n *\n * Keyed on the model object rather than its uid, so a rebuilt schema is a distinct key and\n * the entry cannot go stale. Deliberately NOT stored on the schema itself: a\n * `privateAttributes` getter used to live there and was removed in 2023 (2fa8f30371)\n * because it polluted schema serialization, and because it was only ever attached by\n * `createContentType`, so components never got one.\n *\n * Both inputs are fixed for a model's lifetime — `api.responses.privateAttributes` is\n * boot configuration and is never written at runtime, and `options.privateAttributes`\n * comes from the schema definition. The cache is only populated once `strapi.config` is\n * available so that a lookup during early boot cannot record an empty set permanently.\n */\nconst storedPrivateAttributesCache = new WeakMap<object, Set<string>>();\n\nconst computeStoredPrivateAttributes = (model: Model): Set<string> =>\n new Set(\n union(\n (strapi?.config?.get('api.responses.privateAttributes', []) ?? []) as Array<string>,\n getOr([], 'options.privateAttributes', model) as Array<string>\n )\n );\n\nconst getStoredPrivateAttributesSet = (model: Model): Set<string> => {\n const cacheable = typeof model === 'object' && model !== null && strapi?.config != null;\n\n if (!cacheable) {\n return computeStoredPrivateAttributes(model);\n }\n\n let cached = storedPrivateAttributesCache.get(model as object);\n\n if (cached === undefined) {\n cached = computeStoredPrivateAttributes(model);\n storedPrivateAttributesCache.set(model as object, cached);\n }\n\n return cached;\n};\n\n// Set iteration order is insertion order, which matches what `union` returned before.\nconst getStoredPrivateAttributes = (model: Model) =>\n Array.from(getStoredPrivateAttributesSet(model));\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\n const storedPrivateAttributes = getStoredPrivateAttributesSet(model);\n\n // The set is empty for the overwhelming majority of models, so check size before hashing.\n return storedPrivateAttributes.size !== 0 && storedPrivateAttributes.has(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 !!attribute && ['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 getMediaAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isMediaAttribute(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 ID_FIELDS,\n MORPH_TO_KEYS,\n DYNAMIC_ZONE_KEYS,\n RELATION_OPERATION_KEYS,\n RESERVED_ATTRIBUTE_NAMES,\n RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH,\n RESERVED_MODEL_NAMES,\n isReservedAttributeName,\n isReservedModelName,\n getReservedAttributeNames,\n getReservedModelNames,\n findDraftAndPublishReservedAttributeNames,\n getDraftAndPublishReservedAttributeWarning,\n getDraftAndPublishEnableBlockedMessage,\n getNonWritableAttributes,\n getComponentAttributes,\n getMediaAttributes,\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 hasFirstPublishedAtField,\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","FIRST_PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","constants","ID_FIELDS","MORPH_TO_KEYS","DYNAMIC_ZONE_KEYS","RELATION_OPERATION_KEYS","RESERVED_ATTRIBUTE_NAMES","RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH","RESERVED_MODEL_NAMES","matchesReservedName","snakeCaseName","list","includes","filter","entry","endsWith","map","slice","some","prefix","startsWith","isReservedAttributeName","name","draftAndPublish","snakeCase","isReservedModelName","getReservedAttributeNames","getReservedModelNames","findDraftAndPublishReservedAttributeNames","attributeNames","getDraftAndPublishReservedAttributeWarning","uid","attributeName","getDraftAndPublishEnableBlockedMessage","join","getTimestamps","model","attributes","has","push","getCreatorFields","getNonWritableAttributes","nonWritableAttributes","_","reduce","acc","attr","attrName","writable","concat","uniq","getWritableAttributes","difference","Object","keys","isWritableAttribute","getNonVisibleAttributes","nonVisibleAttributes","visible","getVisibleAttributes","isVisibleAttribute","getOptions","assign","get","hasDraftAndPublish","hasFirstPublishedAtField","strapi","config","isDraft","data","isSchema","modelType","isComponentSchema","isContentTypeSchema","isSingleType","kind","isCollectionType","isKind","storedPrivateAttributesCache","WeakMap","computeStoredPrivateAttributes","Set","union","getOr","getStoredPrivateAttributesSet","cacheable","cached","undefined","set","getStoredPrivateAttributes","Array","from","getPrivateAttributes","pickBy","private","isPrivateAttribute","storedPrivateAttributes","size","isScalarAttribute","attribute","type","getDoesAttributeRequireValidation","required","unique","prototype","hasOwnProperty","call","isMediaAttribute","isRelationalAttribute","HAS_RELATION_REORDERING","hasRelationReordering","relation","isComponentAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","getComponentAttributes","schema","getMediaAttributes","getScalarAttributes","getRelationalAttributes","isTypedAttribute","getContentTypeRoutePrefix","contentType","kebabCase","info","singularName","pluralName"],"mappings":";;;;;;;;;AAYA,MAAMA,WAAAA,GAAc,YAAA;AACpB,MAAMC,eAAAA,GAAkB,gBAAA;AAExB,MAAMC,YAAAA,GAAe,IAAA;AACrB,MAAMC,gBAAAA,GAAmB,YAAA;AAEzB,MAAMC,sBAAAA,GAAyB,aAAA;AAC/B,MAAMC,4BAAAA,GAA+B,kBAAA;AACrC,MAAMC,oBAAAA,GAAuB,WAAA;AAC7B,MAAMC,oBAAAA,GAAuB,WAAA;AAE7B,MAAMC,oBAAAA,GAAuB,WAAA;AAC7B,MAAMC,oBAAAA,GAAuB,WAAA;AAE7B,MAAMC,SAAAA,GAAY;AAChBR,IAAAA,YAAAA;AACAC,IAAAA,gBAAAA;AACAC,IAAAA,sBAAAA;AACAC,IAAAA,4BAAAA;AACAC,IAAAA,oBAAAA;AACAC,IAAAA,oBAAAA;AACAC,IAAAA,oBAAAA;AACAC,IAAAA,oBAAAA;AACAT,IAAAA,WAAAA;AACAC,IAAAA;AACF;AAEA,oHACMU,SAAAA,GAAsB;AAACT,IAAAA,YAAAA;AAAcC,IAAAA;AAAiB;AAC5D,uEACMS,aAAAA,GAA0B;AAAC,IAAA;AAAS;AAC1C,kFACMC,iBAAAA,GAA8B;AAAC,IAAA;AAAc;AACnD,0EACMC,uBAAAA,GAAoC;AAAC,IAAA,SAAA;AAAW,IAAA,YAAA;AAAc,IAAA,KAAA;AAAO,IAAA;AAAU;AAErF;;;AAGC;AAED,MAAMC,wBAAAA,GAAqC;;AAEzC,IAAA,IAAA;AACA,IAAA,aAAA;;AAGA,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,cAAA;;AAEA,IAAA,eAAA;AACA,IAAA,eAAA;;AAEA,IAAA,YAAA;AACA,IAAA,YAAA;;AAGA,IAAA,UAAA;AACA,IAAA,eAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,aAAA;AACA,IAAA,eAAA;;AAGA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;AACD;AAED;;;AAGC;AAED,MAAMC,sCAAAA,GAAmD;AAAC,IAAA;AAAS;AAEnE;AAEA,MAAMC,oBAAAA,GAAiC;AACrC,IAAA,SAAA;AACA,IAAA,MAAA;AACA,IAAA,WAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,UAAA;AACA,IAAA,MAAA;;AAGA,IAAA,SAAA;AACA,IAAA,UAAA;AACA,IAAA;AACD;AAED,MAAMC,mBAAAA,GAAsB,CAACC,aAAAA,EAAuBC,IAAAA,GAAAA;IAClD,IAAIA,IAAAA,CAAKC,QAAQ,CAACF,aAAAA,CAAAA,EAAgB;QAChC,OAAO,IAAA;AACT,IAAA;IAEA,OAAOC,IAAAA,CACJE,MAAM,CAAC,CAACC,KAAAA,GAAUA,MAAMC,QAAQ,CAAC,GAAA,CAAA,CAAA,CACjCC,GAAG,CAAC,CAACF,QAAUA,KAAAA,CAAMG,KAAK,CAAC,CAAA,EAAG,EAAC,CAAA,CAAA,CAC/BC,IAAI,CAAC,CAACC,MAAAA,GAAWT,aAAAA,CAAcU,UAAU,CAACD,MAAAA,CAAAA,CAAAA;AAC/C,CAAA;AAOA;AACA,MAAME,uBAAAA,GAA0B,CAC9BC,IAAAA,EACA,EAAEC,kBAAkB,IAAI,EAAkC,GAAG,EAAE,GAAA;AAE/D,IAAA,MAAMb,gBAAgBc,YAAAA,CAAUF,IAAAA,CAAAA;IAEhC,IAAIb,mBAAAA,CAAoBC,eAAeJ,wBAAAA,CAAAA,EAA2B;QAChE,OAAO,IAAA;AACT,IAAA;IAEA,IACEiB,eAAAA,IACAd,mBAAAA,CAAoBC,aAAAA,EAAeH,sCAAAA,CAAAA,EACnC;QACA,OAAO,IAAA;AACT,IAAA;IAEA,OAAO,KAAA;AACT;AAEA;AACA,MAAMkB,sBAAsB,CAACH,IAAAA,GAAAA;IAC3B,OAAOb,mBAAAA,CAAoBe,aAAUF,IAAAA,CAAAA,EAAOd,oBAAAA,CAAAA;AAC9C;AAEA,MAAMkB,yBAAAA,GAA4B,CAAC,EACjCH,eAAAA,GAAkB,IAAI,EACS,GAAG,EAAE,GAAA;AACpC,IAAA,OAAOA,eAAAA,GACH;AAAIjB,QAAAA,GAAAA,wBAAAA;AAA6BC,QAAAA,GAAAA;KAAuC,GACxE;AAAID,QAAAA,GAAAA;AAAyB,KAAA;AACnC;AAEA,MAAMqB,wBAAwB,IAAgB;AAAInB,QAAAA,GAAAA;AAAqB;AAEvE,MAAMoB,4CAA4C,CAACC,cAAAA,GAAAA;IACjD,OAAO;AAAIA,QAAAA,GAAAA;AAAe,KAAA,CAAChB,MAAM,CAAC,CAACS,IAAAA,GACjCb,mBAAAA,CAAoBe,aAAUF,IAAAA,CAAAA,EAAOf,sCAAAA,CAAAA,CAAAA;AAEzC;AAEA,MAAMuB,0CAAAA,GAA6C,CAACC,GAAAA,EAAaC,aAAAA,GAC/D,CAAC,oBAAoB,EAAEA,aAAAA,CAAc,mBAAmB,EAAED,GAAAA,CAAI,sLAAsL;AAEtP,MAAME,sCAAAA,GAAyC,CAACJ,cAAAA,GAC9C,CAAC,kFAAkF,EAAEA,cAAAA,CAAeK,IAAI,CAAC,IAAA,CAAA,CAAM,mCAAmC;AAEpJ,MAAMC,gBAAgB,CAACC,KAAAA,GAAAA;AACrB,IAAA,MAAMC,aAAuB,EAAE;AAE/B,IAAA,IAAIC,MAAAA,CAAIvC,oBAAAA,EAAsBqC,KAAAA,CAAMC,UAAU,CAAA,EAAG;AAC/CA,QAAAA,UAAAA,CAAWE,IAAI,CAACxC,oBAAAA,CAAAA;AAClB,IAAA;AAEA,IAAA,IAAIuC,MAAAA,CAAItC,oBAAAA,EAAsBoC,KAAAA,CAAMC,UAAU,CAAA,EAAG;AAC/CA,QAAAA,UAAAA,CAAWE,IAAI,CAACvC,oBAAAA,CAAAA;AAClB,IAAA;IAEA,OAAOqC,UAAAA;AACT;AAEA,MAAMG,mBAAmB,CAACJ,KAAAA,GAAAA;AACxB,IAAA,MAAMC,aAAuB,EAAE;AAE/B,IAAA,IAAIC,MAAAA,CAAIzC,oBAAAA,EAAsBuC,KAAAA,CAAMC,UAAU,CAAA,EAAG;AAC/CA,QAAAA,UAAAA,CAAWE,IAAI,CAAC1C,oBAAAA,CAAAA;AAClB,IAAA;AAEA,IAAA,IAAIyC,MAAAA,CAAIxC,oBAAAA,EAAsBsC,KAAAA,CAAMC,UAAU,CAAA,EAAG;AAC/CA,QAAAA,UAAAA,CAAWE,IAAI,CAACzC,oBAAAA,CAAAA;AAClB,IAAA;IAEA,OAAOuC,UAAAA;AACT;AAEA,MAAMI,2BAA2B,CAACL,KAAAA,GAAAA;IAChC,IAAI,CAACA,KAAAA,EAAO,OAAO,EAAE;IAErB,MAAMM,qBAAAA,GAAwBC,mBAAEC,MAAM,CACpCR,MAAMC,UAAU,EAChB,CAACQ,GAAAA,EAAKC,IAAAA,EAAMC,WAAcD,IAAAA,CAAKE,QAAQ,KAAK,KAAA,GAAQH,GAAAA,CAAII,MAAM,CAACF,QAAAA,CAAAA,GAAYF,KAC3E,EAAE,CAAA;IAGJ,OAAOF,kBAAAA,CAAEO,IAAI,CAAC;AACZzD,QAAAA,YAAAA;AACAC,QAAAA,gBAAAA;WACGyC,aAAAA,CAAcC,KAAAA,CAAAA;AACdM,QAAAA,GAAAA;AACJ,KAAA,CAAA;AACH;AAEA,MAAMS,wBAAwB,CAACf,KAAAA,GAAAA;IAC7B,IAAI,CAACA,KAAAA,EAAO,OAAO,EAAE;IAErB,OAAOO,kBAAAA,CAAES,UAAU,CAACC,MAAAA,CAAOC,IAAI,CAAClB,KAAAA,CAAMC,UAAU,CAAA,EAAGI,wBAAAA,CAAyBL,KAAAA,CAAAA,CAAAA;AAC9E;AAEA,MAAMmB,mBAAAA,GAAsB,CAACnB,KAAAA,EAAcJ,aAAAA,GAAAA;IACzC,OAAOmB,qBAAAA,CAAsBf,KAAAA,CAAAA,CAAOxB,QAAQ,CAACoB,aAAAA,CAAAA;AAC/C;AAEA,MAAMwB,0BAA0B,CAACpB,KAAAA,GAAAA;IAC/B,MAAMqB,oBAAAA,GAAuBd,mBAAEC,MAAM,CACnCR,MAAMC,UAAU,EAChB,CAACQ,GAAAA,EAAKC,IAAAA,EAAMC,WAAcD,IAAAA,CAAKY,OAAO,KAAK,KAAA,GAAQb,GAAAA,CAAII,MAAM,CAACF,QAAAA,CAAAA,GAAYF,KAC1E,EAAE,CAAA;IAGJ,OAAOF,kBAAAA,CAAEO,IAAI,CAAC;AACZzD,QAAAA,YAAAA;AACAC,QAAAA,gBAAAA;AACAC,QAAAA,sBAAAA;WACGwC,aAAAA,CAAcC,KAAAA,CAAAA;AACdqB,QAAAA,GAAAA;AACJ,KAAA,CAAA;AACH;AAEA,MAAME,uBAAuB,CAACvB,KAAAA,GAAAA;IAC5B,OAAOO,kBAAAA,CAAES,UAAU,CAACT,kBAAAA,CAAEW,IAAI,CAAClB,KAAAA,CAAMC,UAAU,CAAA,EAAGmB,uBAAAA,CAAwBpB,KAAAA,CAAAA,CAAAA;AACxE;AAEA,MAAMwB,kBAAAA,GAAqB,CAACxB,KAAAA,EAAcJ,aAAAA,GAAAA;IACxC,OAAO2B,oBAAAA,CAAqBvB,KAAAA,CAAAA,CAAOxB,QAAQ,CAACoB,aAAAA,CAAAA;AAC9C;AAEA,MAAM6B,UAAAA,GAAa,CAACzB,KAAAA,GAClBO,kBAAAA,CAAEmB,MAAM,CAAC;QAAEvC,eAAAA,EAAiB;AAAM,KAAA,EAAGoB,kBAAAA,CAAEoB,GAAG,CAAC3B,KAAAA,EAAO,WAAW,EAAC,CAAA;AAEhE,MAAM4B,kBAAAA,GAAqB,CAAC5B,KAAAA,GAC1BO,kBAAAA,CAAEoB,GAAG,CAAC3B,KAAAA,EAAO,2BAA2B,KAAA,CAAA,KAAW;AAErD,MAAM6B,wBAAAA,GAA2B,CAAC7B,KAAAA,GAChC8B,MAAAA,CAAOC,MAAM,CAACJ,GAAG,CAAC,+CAAA,EAAiD,KAAA,CAAA,IACnEC,kBAAAA,CAAmB5B,KAAAA;AAErB,MAAMgC,OAAAA,GAAU,CAAmBC,IAAAA,EAASjC,KAAAA,GAC1C4B,kBAAAA,CAAmB5B,UAAUO,kBAAAA,CAAEoB,GAAG,CAACM,IAAAA,EAAM1E,sBAAAA,CAAAA,KAA4B;AAEvE,MAAM2E,WAAW,CAACD,IAAAA,GAAAA;IAChB,OACE,OAAOA,IAAAA,KAAS,QAAA,IAChBA,IAAAA,KAAS,IAAA,IACT,WAAA,IAAeA,IAAAA,IACf,OAAOA,IAAAA,CAAKE,SAAS,KAAK,QAAA,IAC1B;AAAC,QAAA,WAAA;AAAa,QAAA;KAAc,CAAC3D,QAAQ,CAACyD,IAAAA,CAAKE,SAAS,CAAA;AAExD;AAEA,MAAMC,oBAAoB,CAACH,IAAAA,GAAAA;AACzB,IAAA,OAAOC,QAAAA,CAASD,IAAAA,CAAAA,IAASA,IAAAA,CAAKE,SAAS,KAAK,WAAA;AAC9C;AAEA,MAAME,sBAAsB,CAACJ,IAAAA,GAAAA;AAC3B,IAAA,OAAOC,QAAAA,CAASD,IAAAA,CAAAA,IAASA,IAAAA,CAAKE,SAAS,KAAK,aAAA;AAC9C;AAEA,MAAMG,eAAe,CAAC,EAAEC,OAAOnF,eAAe,EAAE,GAAKmF,IAAAA,KAASpF;AAC9D,MAAMqF,mBAAmB,CAAC,EAAED,OAAOnF,eAAe,EAAE,GAAKmF,IAAAA,KAASnF;AAClE,MAAMqF,SAAS,CAACF,IAAAA,GAAe,CAACvC,KAAAA,GAAiBA,KAAAA,CAAMuC,IAAI,KAAKA;AAEhE;;;;;;;;;;;;;;;;;;;;IAqBA,MAAMG,+BAA+B,IAAIC,OAAAA,EAAAA;AAEzC,MAAMC,iCAAiC,CAAC5C,KAAAA,GACtC,IAAI6C,GAAAA,CACFC,SACGhB,MAAAA,EAAQC,MAAAA,EAAQJ,GAAAA,CAAI,iCAAA,EAAmC,EAAE,CAAA,IAAK,EAAE,EACjEoB,QAAAA,CAAM,EAAE,EAAE,2BAAA,EAA6B/C,KAAAA,CAAAA,CAAAA,CAAAA;AAI7C,MAAMgD,gCAAgC,CAAChD,KAAAA,GAAAA;AACrC,IAAA,MAAMiD,YAAY,OAAOjD,KAAAA,KAAU,YAAYA,KAAAA,KAAU,IAAA,IAAQ8B,QAAQC,MAAAA,IAAU,IAAA;AAEnF,IAAA,IAAI,CAACkB,SAAAA,EAAW;AACd,QAAA,OAAOL,8BAAAA,CAA+B5C,KAAAA,CAAAA;AACxC,IAAA;IAEA,IAAIkD,MAAAA,GAASR,4BAAAA,CAA6Bf,GAAG,CAAC3B,KAAAA,CAAAA;AAE9C,IAAA,IAAIkD,WAAWC,SAAAA,EAAW;AACxBD,QAAAA,MAAAA,GAASN,8BAAAA,CAA+B5C,KAAAA,CAAAA;QACxC0C,4BAAAA,CAA6BU,GAAG,CAACpD,KAAAA,EAAiBkD,MAAAA,CAAAA;AACpD,IAAA;IAEA,OAAOA,MAAAA;AACT,CAAA;AAEA;AACA,MAAMG,6BAA6B,CAACrD,KAAAA,GAClCsD,KAAAA,CAAMC,IAAI,CAACP,6BAAAA,CAA8BhD,KAAAA,CAAAA,CAAAA;AAE3C,MAAMwD,uBAAuB,CAACxD,KAAAA,GAAAA;AAC5B,IAAA,OAAOO,mBAAEuC,KAAK,CACZO,2BAA2BrD,KAAAA,CAAAA,EAC3BO,kBAAAA,CAAEW,IAAI,CAACX,kBAAAA,CAAEkD,MAAM,CAACzD,KAAAA,CAAMC,UAAU,EAAE,CAACS,OAAS,CAAC,CAACA,KAAKgD,OAAO,CAAA,CAAA,CAAA;AAE9D;AAEA,MAAMC,kBAAAA,GAAqB,CAAC3D,KAAAA,EAAcJ,aAAAA,GAAAA;AACxC,IAAA,IAAII,OAAOC,UAAAA,GAAaL,aAAAA,CAAc,EAAE8D,YAAY,IAAA,EAAM;QACxD,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,MAAME,0BAA0BZ,6BAAAA,CAA8BhD,KAAAA,CAAAA;;AAG9D,IAAA,OAAO4D,wBAAwBC,IAAI,KAAK,CAAA,IAAKD,uBAAAA,CAAwB1D,GAAG,CAACN,aAAAA,CAAAA;AAC3E;AAEA,MAAMkE,oBAAoB,CAACC,SAAAA,GAAAA;AACzB,IAAA,OAAOA,aAAa,CAAC;AAAC,QAAA,OAAA;AAAS,QAAA,WAAA;AAAa,QAAA,UAAA;AAAY,QAAA;KAAc,CAACvF,QAAQ,CAACuF,SAAAA,CAAUC,IAAI,CAAA;AAChG;AAEA,MAAMC,oCAAoC,CAACF,SAAAA,GAAAA;AACzC,IAAA,OACEA,UAAUG,QAAQ,IAClBH,UAAUI,MAAM,IAChBlD,OAAOmD,SAAS,CAACC,cAAc,CAACC,IAAI,CAACP,SAAAA,EAAW,UAChD9C,MAAAA,CAAOmD,SAAS,CAACC,cAAc,CAACC,IAAI,CAACP,WAAW,KAAA,CAAA,IAChD9C,MAAAA,CAAOmD,SAAS,CAACC,cAAc,CAACC,IAAI,CAACP,SAAAA,EAAW,WAAA,CAAA,IAChD9C,OAAOmD,SAAS,CAACC,cAAc,CAACC,IAAI,CAACP,SAAAA,EAAW,WAAA,CAAA;AAEpD;AACA,MAAMQ,gBAAAA,GAAmB,CAACR,SAAAA,GAA0BA,SAAAA,EAAWC,IAAAA,KAAS;AACxE,MAAMQ,qBAAAA,GAAwB,CAACT,SAAAA,GAC7BA,SAAAA,EAAWC,IAAAA,KAAS;AAEtB,MAAMS,uBAAAA,GAA0B;AAAC,IAAA,YAAA;AAAc,IAAA,WAAA;AAAa,IAAA;AAAY,CAAA;AACxE,MAAMC,qBAAAA,GAAwB,CAACX,SAAAA,GAC7BS,qBAAAA,CAAsBT,cAAcU,uBAAAA,CAAwBjG,QAAQ,CAACuF,SAAAA,CAAUY,QAAQ;AAEzF,MAAMC,oBAAAA,GAAuB,CAC3Bb,SAAAA,GAEA,CAAC,CAACA,SAAAA,IAAa;AAAC,QAAA,WAAA;AAAa,QAAA;KAAc,CAACvF,QAAQ,CAACuF,SAAAA,CAAUC,IAAI;AAErE,MAAMa,sBAAAA,GAAyB,CAACd,SAAAA,GAC9B,CAAC,CAACA,SAAAA,IAAaA,SAAAA,CAAUC,IAAI,KAAK;AACpC,MAAMc,+BAA+B,CAACf,SAAAA,GAAAA;IACpC,OACE,CAAC,CAACA,SAAAA,IAAaS,qBAAAA,CAAsBT,cAAcA,SAAAA,CAAUY,QAAQ,EAAE3F,UAAAA,GAAa,SAAA,CAAA;AAExF;AAEA,MAAM+F,yBAAyB,CAACC,MAAAA,GAAAA;IAC9B,OAAOzE,kBAAAA,CAAEC,MAAM,CACbwE,MAAAA,CAAO/E,UAAU,EACjB,CAACQ,KAAKC,IAAAA,EAAMC,QAAAA,GAAAA;AACV,QAAA,IAAIiE,oBAAAA,CAAqBlE,IAAAA,CAAAA,EAAOD,GAAAA,CAAIN,IAAI,CAACQ,QAAAA,CAAAA;QACzC,OAAOF,GAAAA;AACT,IAAA,CAAA,EACA,EAAE,CAAA;AAEN;AAEA,MAAMwE,qBAAqB,CAACD,MAAAA,GAAAA;IAC1B,OAAOzE,kBAAAA,CAAEC,MAAM,CACbwE,MAAAA,CAAO/E,UAAU,EACjB,CAACQ,KAAKC,IAAAA,EAAMC,QAAAA,GAAAA;AACV,QAAA,IAAI4D,gBAAAA,CAAiB7D,IAAAA,CAAAA,EAAOD,GAAAA,CAAIN,IAAI,CAACQ,QAAAA,CAAAA;QACrC,OAAOF,GAAAA;AACT,IAAA,CAAA,EACA,EAAE,CAAA;AAEN;AAEA,MAAMyE,sBAAsB,CAACF,MAAAA,GAAAA;IAC3B,OAAOzE,kBAAAA,CAAEC,MAAM,CACbwE,MAAAA,CAAO/E,UAAU,EACjB,CAACQ,KAAKC,IAAAA,EAAMC,QAAAA,GAAAA;AACV,QAAA,IAAImD,iBAAAA,CAAkBpD,IAAAA,CAAAA,EAAOD,GAAAA,CAAIN,IAAI,CAACQ,QAAAA,CAAAA;QACtC,OAAOF,GAAAA;AACT,IAAA,CAAA,EACA,EAAE,CAAA;AAEN;AAEA,MAAM0E,0BAA0B,CAACH,MAAAA,GAAAA;IAC/B,OAAOzE,kBAAAA,CAAEC,MAAM,CACbwE,MAAAA,CAAO/E,UAAU,EACjB,CAACQ,KAAKC,IAAAA,EAAMC,QAAAA,GAAAA;AACV,QAAA,IAAI6D,qBAAAA,CAAsB9D,IAAAA,CAAAA,EAAOD,GAAAA,CAAIN,IAAI,CAACQ,QAAAA,CAAAA;QAC1C,OAAOF,GAAAA;AACT,IAAA,CAAA,EACA,EAAE,CAAA;AAEN;AAEA;;;;IAKA,MAAM2E,gBAAAA,GAAmB,CAACrB,SAAAA,EAAsBC,IAAAA,GAAAA;AAC9C,IAAA,OAAOzD,mBAAEL,GAAG,CAAC6D,WAAW,MAAA,CAAA,IAAWA,SAAAA,CAAUC,IAAI,KAAKA,IAAAA;AACxD;AAEA;;;;IAKA,MAAMqB,4BAA4B,CAACC,WAAAA,GAAAA;AACjC,IAAA,OAAOhD,aAAagD,WAAAA,CAAAA,GAChB/E,kBAAAA,CAAEgF,SAAS,CAACD,YAAYE,IAAI,CAACC,YAAY,CAAA,GACzClF,mBAAEgF,SAAS,CAACD,WAAAA,CAAYE,IAAI,CAACE,UAAU,CAAA;AAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"content-types.js","sources":["../src/content-types.ts"],"sourcesContent":["import _, { has, get, union, snakeCase } from 'lodash';\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 FIRST_PUBLISHED_AT_ATTRIBUTE = 'firstPublishedAt';\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 FIRST_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\n/** ID-like fields accepted at root level and on relations/media/components (validate/sanitize traversal). */\nconst ID_FIELDS: string[] = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];\n/** Keys accepted on morphTo relation payloads (e.g. __type). */\nconst MORPH_TO_KEYS: string[] = ['__type'];\n/** Keys accepted on dynamic zone component payloads (e.g. __component). */\nconst DYNAMIC_ZONE_KEYS: string[] = ['__component'];\n/** Relation operation keys (connect, disconnect, set, options). */\nconst RELATION_OPERATION_KEYS: string[] = ['connect', 'disconnect', 'set', 'options'];\n\n/**\n * Reserved attribute names that cannot be used by user-defined content-type fields.\n * Entries ending with `*` are treated as prefix matchers (e.g. `strapi*` blocks `strapi_foo`).\n */\n// use snake_case\nconst RESERVED_ATTRIBUTE_NAMES: string[] = [\n // ID fields\n 'id',\n 'document_id',\n\n // Creator fields\n 'created_at',\n 'updated_at',\n 'published_at',\n // V6: we will need to add first_published_at when it becomes the default behaviour\n 'created_by_id',\n 'updated_by_id',\n // does not actually conflict because the fields are called *_by_id but we'll leave it to avoid confusion\n 'created_by',\n 'updated_by',\n\n // Used for Strapi functionality\n 'entry_id',\n 'localizations',\n 'meta',\n 'locale',\n '__component',\n '__contentType',\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\n/**\n * Reserved attribute names that only conflict when draftAndPublish is enabled.\n * `status` is the v5 Document Service / REST query parameter for draft/published filtering.\n */\n// use snake_case\nconst RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH: string[] = ['status'];\n\n/** Reserved model (collection) names that cannot be used by user-defined content-types. */\n// use snake_case\nconst RESERVED_MODEL_NAMES: string[] = [\n 'boolean',\n 'date',\n 'date_time',\n 'time',\n 'upload',\n 'document',\n 'then', // no longer an issue but still restricting for being a javascript keyword\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\nconst matchesReservedName = (snakeCaseName: string, list: string[]): boolean => {\n if (list.includes(snakeCaseName)) {\n return true;\n }\n\n return list\n .filter((entry) => entry.endsWith('*'))\n .map((entry) => entry.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix));\n};\n\ninterface IsReservedAttributeNameOptions {\n /** When true, draft-and-publish-specific names (e.g. `status`) are also reserved. Defaults to true. */\n draftAndPublish?: boolean;\n}\n\n// compare snake case to check the actual column names that will be used in the database\nconst isReservedAttributeName = (\n name: string,\n { draftAndPublish = true }: IsReservedAttributeNameOptions = {}\n): boolean => {\n const snakeCaseName = snakeCase(name);\n\n if (matchesReservedName(snakeCaseName, RESERVED_ATTRIBUTE_NAMES)) {\n return true;\n }\n\n if (\n draftAndPublish &&\n matchesReservedName(snakeCaseName, RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH)\n ) {\n return true;\n }\n\n return false;\n};\n\n// compare snake case to check the actual column names that will be used in the database\nconst isReservedModelName = (name: string): boolean => {\n return matchesReservedName(snakeCase(name), RESERVED_MODEL_NAMES);\n};\n\nconst getReservedAttributeNames = ({\n draftAndPublish = true,\n}: IsReservedAttributeNameOptions = {}): string[] => {\n return draftAndPublish\n ? [...RESERVED_ATTRIBUTE_NAMES, ...RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH]\n : [...RESERVED_ATTRIBUTE_NAMES];\n};\n\nconst getReservedModelNames = (): string[] => [...RESERVED_MODEL_NAMES];\n\nconst findDraftAndPublishReservedAttributeNames = (attributeNames: Iterable<string>): string[] => {\n return [...attributeNames].filter((name) =>\n matchesReservedName(snakeCase(name), RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH)\n );\n};\n\nconst getDraftAndPublishReservedAttributeWarning = (uid: string, attributeName: string): string =>\n `The attribute name '${attributeName}' on content type '${uid}' is reserved when 'draftAndPublish' is enabled. It conflicts with the Document Service / REST 'status' query parameter. Rename the attribute or disable the 'draftAndPublish' option.`;\n\nconst getDraftAndPublishEnableBlockedMessage = (attributeNames: string[]): string =>\n `Cannot enable draft and publish while the following attribute names are reserved: ${attributeNames.join(', ')}. Rename them or remove them first.`;\n\nconst getTimestamps = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(model.attributes, CREATED_AT_ATTRIBUTE)) {\n attributes.push(CREATED_AT_ATTRIBUTE);\n }\n\n if (has(model.attributes, UPDATED_AT_ATTRIBUTE)) {\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(model.attributes, CREATED_BY_ATTRIBUTE)) {\n attributes.push(CREATED_BY_ATTRIBUTE);\n }\n\n if (has(model.attributes, UPDATED_BY_ATTRIBUTE)) {\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([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonVisibleAttributes,\n ]);\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 hasFirstPublishedAtField = (model: Model) =>\n strapi.config.get('features.future.experimental_firstPublishedAt', false) &&\n hasDraftAndPublish(model);\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\n/**\n * Memo of each model's \"stored\" private attributes — those declared in\n * `api.responses.privateAttributes` config or in the model's `options.privateAttributes`,\n * as opposed to attributes flagged `private: true` individually.\n *\n * `isPrivateAttribute` is called once per key, per node, per traversal, per entity, and\n * recomputing this set every time dominated response sanitization: a 25-entity page made\n * 48,605 calls, each doing two lodash path lookups plus a fresh `union()` allocation, all\n * returning the same answer.\n *\n * Keyed on the model object rather than its uid, so a rebuilt schema is a distinct key and\n * the entry cannot go stale. Deliberately NOT stored on the schema itself: a\n * `privateAttributes` getter used to live there and was removed in 2023 (2fa8f30371)\n * because it polluted schema serialization, and because it was only ever attached by\n * `createContentType`, so components never got one.\n *\n * Both inputs are fixed for a model's lifetime — `api.responses.privateAttributes` is\n * boot configuration and is never written at runtime, and `options.privateAttributes`\n * comes from the schema definition. The cache is only populated once `strapi.config` is\n * available so that a lookup during early boot cannot record an empty set permanently.\n */\nconst storedPrivateAttributesCache = new WeakMap<object, Set<string>>();\n\nconst computeStoredPrivateAttributes = (model: Model): Set<string> =>\n new Set(\n union(\n get(model, 'options.privateAttributes', []) as Array<string>,\n (strapi?.config?.get('api.responses.privateAttributes', []) ?? []) as Array<string>\n )\n );\n\nconst getStoredPrivateAttributesSet = (model: Model): Set<string> => {\n const cacheable = typeof model === 'object' && model !== null && strapi?.config != null;\n\n if (!cacheable) {\n return computeStoredPrivateAttributes(model);\n }\n\n let cached = storedPrivateAttributesCache.get(model as object);\n\n if (cached === undefined) {\n cached = computeStoredPrivateAttributes(model);\n storedPrivateAttributesCache.set(model as object, cached);\n }\n\n return cached;\n};\n\n// Set iteration order is insertion order, which matches what `union` returned before.\nconst getStoredPrivateAttributes = (model: Model) =>\n Array.from(getStoredPrivateAttributesSet(model));\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\n const storedPrivateAttributes = getStoredPrivateAttributesSet(model);\n\n // The set is empty for the overwhelming majority of models, so check size before hashing.\n return storedPrivateAttributes.size !== 0 && storedPrivateAttributes.has(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 !!attribute && ['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 getMediaAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isMediaAttribute(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 ID_FIELDS,\n MORPH_TO_KEYS,\n DYNAMIC_ZONE_KEYS,\n RELATION_OPERATION_KEYS,\n RESERVED_ATTRIBUTE_NAMES,\n RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH,\n RESERVED_MODEL_NAMES,\n isReservedAttributeName,\n isReservedModelName,\n getReservedAttributeNames,\n getReservedModelNames,\n findDraftAndPublishReservedAttributeNames,\n getDraftAndPublishReservedAttributeWarning,\n getDraftAndPublishEnableBlockedMessage,\n getNonWritableAttributes,\n getComponentAttributes,\n getMediaAttributes,\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 hasFirstPublishedAtField,\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","FIRST_PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","constants","ID_FIELDS","MORPH_TO_KEYS","DYNAMIC_ZONE_KEYS","RELATION_OPERATION_KEYS","RESERVED_ATTRIBUTE_NAMES","RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH","RESERVED_MODEL_NAMES","matchesReservedName","snakeCaseName","list","includes","filter","entry","endsWith","map","slice","some","prefix","startsWith","isReservedAttributeName","name","draftAndPublish","snakeCase","isReservedModelName","getReservedAttributeNames","getReservedModelNames","findDraftAndPublishReservedAttributeNames","attributeNames","getDraftAndPublishReservedAttributeWarning","uid","attributeName","getDraftAndPublishEnableBlockedMessage","join","getTimestamps","model","attributes","has","push","getCreatorFields","getNonWritableAttributes","nonWritableAttributes","_","reduce","acc","attr","attrName","writable","concat","uniq","getWritableAttributes","difference","Object","keys","isWritableAttribute","getNonVisibleAttributes","nonVisibleAttributes","visible","getVisibleAttributes","isVisibleAttribute","getOptions","assign","get","hasDraftAndPublish","hasFirstPublishedAtField","strapi","config","isDraft","data","isSchema","modelType","isComponentSchema","isContentTypeSchema","isSingleType","kind","isCollectionType","isKind","storedPrivateAttributesCache","WeakMap","computeStoredPrivateAttributes","Set","union","getStoredPrivateAttributesSet","cacheable","cached","undefined","set","getStoredPrivateAttributes","Array","from","getPrivateAttributes","pickBy","private","isPrivateAttribute","storedPrivateAttributes","size","isScalarAttribute","attribute","type","getDoesAttributeRequireValidation","required","unique","prototype","hasOwnProperty","call","isMediaAttribute","isRelationalAttribute","HAS_RELATION_REORDERING","hasRelationReordering","relation","isComponentAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","getComponentAttributes","schema","getMediaAttributes","getScalarAttributes","getRelationalAttributes","isTypedAttribute","getContentTypeRoutePrefix","contentType","kebabCase","info","singularName","pluralName"],"mappings":"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"}
|
package/dist/content-types.mjs
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import ___default from 'lodash';
|
|
2
|
-
import { union, getOr, snakeCase, has } from 'lodash/fp';
|
|
1
|
+
import ___default, { union, get, snakeCase, has } from 'lodash';
|
|
3
2
|
|
|
4
3
|
const SINGLE_TYPE = 'singleType';
|
|
5
4
|
const COLLECTION_TYPE = 'collectionType';
|
|
@@ -131,20 +130,20 @@ const getDraftAndPublishReservedAttributeWarning = (uid, attributeName)=>`The at
|
|
|
131
130
|
const getDraftAndPublishEnableBlockedMessage = (attributeNames)=>`Cannot enable draft and publish while the following attribute names are reserved: ${attributeNames.join(', ')}. Rename them or remove them first.`;
|
|
132
131
|
const getTimestamps = (model)=>{
|
|
133
132
|
const attributes = [];
|
|
134
|
-
if (has(
|
|
133
|
+
if (has(model.attributes, CREATED_AT_ATTRIBUTE)) {
|
|
135
134
|
attributes.push(CREATED_AT_ATTRIBUTE);
|
|
136
135
|
}
|
|
137
|
-
if (has(
|
|
136
|
+
if (has(model.attributes, UPDATED_AT_ATTRIBUTE)) {
|
|
138
137
|
attributes.push(UPDATED_AT_ATTRIBUTE);
|
|
139
138
|
}
|
|
140
139
|
return attributes;
|
|
141
140
|
};
|
|
142
141
|
const getCreatorFields = (model)=>{
|
|
143
142
|
const attributes = [];
|
|
144
|
-
if (has(
|
|
143
|
+
if (has(model.attributes, CREATED_BY_ATTRIBUTE)) {
|
|
145
144
|
attributes.push(CREATED_BY_ATTRIBUTE);
|
|
146
145
|
}
|
|
147
|
-
if (has(
|
|
146
|
+
if (has(model.attributes, UPDATED_BY_ATTRIBUTE)) {
|
|
148
147
|
attributes.push(UPDATED_BY_ATTRIBUTE);
|
|
149
148
|
}
|
|
150
149
|
return attributes;
|
|
@@ -224,7 +223,7 @@ const isKind = (kind)=>(model)=>model.kind === kind;
|
|
|
224
223
|
* comes from the schema definition. The cache is only populated once `strapi.config` is
|
|
225
224
|
* available so that a lookup during early boot cannot record an empty set permanently.
|
|
226
225
|
*/ const storedPrivateAttributesCache = new WeakMap();
|
|
227
|
-
const computeStoredPrivateAttributes = (model)=>new Set(union(strapi?.config?.get('api.responses.privateAttributes', []) ?? []
|
|
226
|
+
const computeStoredPrivateAttributes = (model)=>new Set(union(get(model, 'options.privateAttributes', []), strapi?.config?.get('api.responses.privateAttributes', []) ?? []));
|
|
228
227
|
const getStoredPrivateAttributesSet = (model)=>{
|
|
229
228
|
const cacheable = typeof model === 'object' && model !== null && strapi?.config != null;
|
|
230
229
|
if (!cacheable) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.mjs","sources":["../src/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { has, getOr, union, snakeCase } 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 FIRST_PUBLISHED_AT_ATTRIBUTE = 'firstPublishedAt';\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 FIRST_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\n/** ID-like fields accepted at root level and on relations/media/components (validate/sanitize traversal). */\nconst ID_FIELDS: string[] = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];\n/** Keys accepted on morphTo relation payloads (e.g. __type). */\nconst MORPH_TO_KEYS: string[] = ['__type'];\n/** Keys accepted on dynamic zone component payloads (e.g. __component). */\nconst DYNAMIC_ZONE_KEYS: string[] = ['__component'];\n/** Relation operation keys (connect, disconnect, set, options). */\nconst RELATION_OPERATION_KEYS: string[] = ['connect', 'disconnect', 'set', 'options'];\n\n/**\n * Reserved attribute names that cannot be used by user-defined content-type fields.\n * Entries ending with `*` are treated as prefix matchers (e.g. `strapi*` blocks `strapi_foo`).\n */\n// use snake_case\nconst RESERVED_ATTRIBUTE_NAMES: string[] = [\n // ID fields\n 'id',\n 'document_id',\n\n // Creator fields\n 'created_at',\n 'updated_at',\n 'published_at',\n // V6: we will need to add first_published_at when it becomes the default behaviour\n 'created_by_id',\n 'updated_by_id',\n // does not actually conflict because the fields are called *_by_id but we'll leave it to avoid confusion\n 'created_by',\n 'updated_by',\n\n // Used for Strapi functionality\n 'entry_id',\n 'localizations',\n 'meta',\n 'locale',\n '__component',\n '__contentType',\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\n/**\n * Reserved attribute names that only conflict when draftAndPublish is enabled.\n * `status` is the v5 Document Service / REST query parameter for draft/published filtering.\n */\n// use snake_case\nconst RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH: string[] = ['status'];\n\n/** Reserved model (collection) names that cannot be used by user-defined content-types. */\n// use snake_case\nconst RESERVED_MODEL_NAMES: string[] = [\n 'boolean',\n 'date',\n 'date_time',\n 'time',\n 'upload',\n 'document',\n 'then', // no longer an issue but still restricting for being a javascript keyword\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\nconst matchesReservedName = (snakeCaseName: string, list: string[]): boolean => {\n if (list.includes(snakeCaseName)) {\n return true;\n }\n\n return list\n .filter((entry) => entry.endsWith('*'))\n .map((entry) => entry.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix));\n};\n\ninterface IsReservedAttributeNameOptions {\n /** When true, draft-and-publish-specific names (e.g. `status`) are also reserved. Defaults to true. */\n draftAndPublish?: boolean;\n}\n\n// compare snake case to check the actual column names that will be used in the database\nconst isReservedAttributeName = (\n name: string,\n { draftAndPublish = true }: IsReservedAttributeNameOptions = {}\n): boolean => {\n const snakeCaseName = snakeCase(name);\n\n if (matchesReservedName(snakeCaseName, RESERVED_ATTRIBUTE_NAMES)) {\n return true;\n }\n\n if (\n draftAndPublish &&\n matchesReservedName(snakeCaseName, RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH)\n ) {\n return true;\n }\n\n return false;\n};\n\n// compare snake case to check the actual column names that will be used in the database\nconst isReservedModelName = (name: string): boolean => {\n return matchesReservedName(snakeCase(name), RESERVED_MODEL_NAMES);\n};\n\nconst getReservedAttributeNames = ({\n draftAndPublish = true,\n}: IsReservedAttributeNameOptions = {}): string[] => {\n return draftAndPublish\n ? [...RESERVED_ATTRIBUTE_NAMES, ...RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH]\n : [...RESERVED_ATTRIBUTE_NAMES];\n};\n\nconst getReservedModelNames = (): string[] => [...RESERVED_MODEL_NAMES];\n\nconst findDraftAndPublishReservedAttributeNames = (attributeNames: Iterable<string>): string[] => {\n return [...attributeNames].filter((name) =>\n matchesReservedName(snakeCase(name), RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH)\n );\n};\n\nconst getDraftAndPublishReservedAttributeWarning = (uid: string, attributeName: string): string =>\n `The attribute name '${attributeName}' on content type '${uid}' is reserved when 'draftAndPublish' is enabled. It conflicts with the Document Service / REST 'status' query parameter. Rename the attribute or disable the 'draftAndPublish' option.`;\n\nconst getDraftAndPublishEnableBlockedMessage = (attributeNames: string[]): string =>\n `Cannot enable draft and publish while the following attribute names are reserved: ${attributeNames.join(', ')}. Rename them or remove them first.`;\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([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonVisibleAttributes,\n ]);\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 hasFirstPublishedAtField = (model: Model) =>\n strapi.config.get('features.future.experimental_firstPublishedAt', false) &&\n hasDraftAndPublish(model);\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\n/**\n * Memo of each model's \"stored\" private attributes — those declared in\n * `api.responses.privateAttributes` config or in the model's `options.privateAttributes`,\n * as opposed to attributes flagged `private: true` individually.\n *\n * `isPrivateAttribute` is called once per key, per node, per traversal, per entity, and\n * recomputing this set every time dominated response sanitization: a 25-entity page made\n * 48,605 calls, each doing two lodash path lookups plus a fresh `union()` allocation, all\n * returning the same answer.\n *\n * Keyed on the model object rather than its uid, so a rebuilt schema is a distinct key and\n * the entry cannot go stale. Deliberately NOT stored on the schema itself: a\n * `privateAttributes` getter used to live there and was removed in 2023 (2fa8f30371)\n * because it polluted schema serialization, and because it was only ever attached by\n * `createContentType`, so components never got one.\n *\n * Both inputs are fixed for a model's lifetime — `api.responses.privateAttributes` is\n * boot configuration and is never written at runtime, and `options.privateAttributes`\n * comes from the schema definition. The cache is only populated once `strapi.config` is\n * available so that a lookup during early boot cannot record an empty set permanently.\n */\nconst storedPrivateAttributesCache = new WeakMap<object, Set<string>>();\n\nconst computeStoredPrivateAttributes = (model: Model): Set<string> =>\n new Set(\n union(\n (strapi?.config?.get('api.responses.privateAttributes', []) ?? []) as Array<string>,\n getOr([], 'options.privateAttributes', model) as Array<string>\n )\n );\n\nconst getStoredPrivateAttributesSet = (model: Model): Set<string> => {\n const cacheable = typeof model === 'object' && model !== null && strapi?.config != null;\n\n if (!cacheable) {\n return computeStoredPrivateAttributes(model);\n }\n\n let cached = storedPrivateAttributesCache.get(model as object);\n\n if (cached === undefined) {\n cached = computeStoredPrivateAttributes(model);\n storedPrivateAttributesCache.set(model as object, cached);\n }\n\n return cached;\n};\n\n// Set iteration order is insertion order, which matches what `union` returned before.\nconst getStoredPrivateAttributes = (model: Model) =>\n Array.from(getStoredPrivateAttributesSet(model));\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\n const storedPrivateAttributes = getStoredPrivateAttributesSet(model);\n\n // The set is empty for the overwhelming majority of models, so check size before hashing.\n return storedPrivateAttributes.size !== 0 && storedPrivateAttributes.has(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 !!attribute && ['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 getMediaAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isMediaAttribute(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 ID_FIELDS,\n MORPH_TO_KEYS,\n DYNAMIC_ZONE_KEYS,\n RELATION_OPERATION_KEYS,\n RESERVED_ATTRIBUTE_NAMES,\n RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH,\n RESERVED_MODEL_NAMES,\n isReservedAttributeName,\n isReservedModelName,\n getReservedAttributeNames,\n getReservedModelNames,\n findDraftAndPublishReservedAttributeNames,\n getDraftAndPublishReservedAttributeWarning,\n getDraftAndPublishEnableBlockedMessage,\n getNonWritableAttributes,\n getComponentAttributes,\n getMediaAttributes,\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 hasFirstPublishedAtField,\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","FIRST_PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","constants","ID_FIELDS","MORPH_TO_KEYS","DYNAMIC_ZONE_KEYS","RELATION_OPERATION_KEYS","RESERVED_ATTRIBUTE_NAMES","RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH","RESERVED_MODEL_NAMES","matchesReservedName","snakeCaseName","list","includes","filter","entry","endsWith","map","slice","some","prefix","startsWith","isReservedAttributeName","name","draftAndPublish","snakeCase","isReservedModelName","getReservedAttributeNames","getReservedModelNames","findDraftAndPublishReservedAttributeNames","attributeNames","getDraftAndPublishReservedAttributeWarning","uid","attributeName","getDraftAndPublishEnableBlockedMessage","join","getTimestamps","model","attributes","has","push","getCreatorFields","getNonWritableAttributes","nonWritableAttributes","_","reduce","acc","attr","attrName","writable","concat","uniq","getWritableAttributes","difference","Object","keys","isWritableAttribute","getNonVisibleAttributes","nonVisibleAttributes","visible","getVisibleAttributes","isVisibleAttribute","getOptions","assign","get","hasDraftAndPublish","hasFirstPublishedAtField","strapi","config","isDraft","data","isSchema","modelType","isComponentSchema","isContentTypeSchema","isSingleType","kind","isCollectionType","isKind","storedPrivateAttributesCache","WeakMap","computeStoredPrivateAttributes","Set","union","getOr","getStoredPrivateAttributesSet","cacheable","cached","undefined","set","getStoredPrivateAttributes","Array","from","getPrivateAttributes","pickBy","private","isPrivateAttribute","storedPrivateAttributes","size","isScalarAttribute","attribute","type","getDoesAttributeRequireValidation","required","unique","prototype","hasOwnProperty","call","isMediaAttribute","isRelationalAttribute","HAS_RELATION_REORDERING","hasRelationReordering","relation","isComponentAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","getComponentAttributes","schema","getMediaAttributes","getScalarAttributes","getRelationalAttributes","isTypedAttribute","getContentTypeRoutePrefix","contentType","kebabCase","info","singularName","pluralName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-types.mjs","sources":["../src/content-types.ts"],"sourcesContent":["import _, { has, get, union, snakeCase } from 'lodash';\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 FIRST_PUBLISHED_AT_ATTRIBUTE = 'firstPublishedAt';\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 FIRST_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\n/** ID-like fields accepted at root level and on relations/media/components (validate/sanitize traversal). */\nconst ID_FIELDS: string[] = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];\n/** Keys accepted on morphTo relation payloads (e.g. __type). */\nconst MORPH_TO_KEYS: string[] = ['__type'];\n/** Keys accepted on dynamic zone component payloads (e.g. __component). */\nconst DYNAMIC_ZONE_KEYS: string[] = ['__component'];\n/** Relation operation keys (connect, disconnect, set, options). */\nconst RELATION_OPERATION_KEYS: string[] = ['connect', 'disconnect', 'set', 'options'];\n\n/**\n * Reserved attribute names that cannot be used by user-defined content-type fields.\n * Entries ending with `*` are treated as prefix matchers (e.g. `strapi*` blocks `strapi_foo`).\n */\n// use snake_case\nconst RESERVED_ATTRIBUTE_NAMES: string[] = [\n // ID fields\n 'id',\n 'document_id',\n\n // Creator fields\n 'created_at',\n 'updated_at',\n 'published_at',\n // V6: we will need to add first_published_at when it becomes the default behaviour\n 'created_by_id',\n 'updated_by_id',\n // does not actually conflict because the fields are called *_by_id but we'll leave it to avoid confusion\n 'created_by',\n 'updated_by',\n\n // Used for Strapi functionality\n 'entry_id',\n 'localizations',\n 'meta',\n 'locale',\n '__component',\n '__contentType',\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\n/**\n * Reserved attribute names that only conflict when draftAndPublish is enabled.\n * `status` is the v5 Document Service / REST query parameter for draft/published filtering.\n */\n// use snake_case\nconst RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH: string[] = ['status'];\n\n/** Reserved model (collection) names that cannot be used by user-defined content-types. */\n// use snake_case\nconst RESERVED_MODEL_NAMES: string[] = [\n 'boolean',\n 'date',\n 'date_time',\n 'time',\n 'upload',\n 'document',\n 'then', // no longer an issue but still restricting for being a javascript keyword\n\n // We support ending with * to denote prefixes\n 'strapi*',\n '_strapi*',\n '__strapi*',\n];\n\nconst matchesReservedName = (snakeCaseName: string, list: string[]): boolean => {\n if (list.includes(snakeCaseName)) {\n return true;\n }\n\n return list\n .filter((entry) => entry.endsWith('*'))\n .map((entry) => entry.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix));\n};\n\ninterface IsReservedAttributeNameOptions {\n /** When true, draft-and-publish-specific names (e.g. `status`) are also reserved. Defaults to true. */\n draftAndPublish?: boolean;\n}\n\n// compare snake case to check the actual column names that will be used in the database\nconst isReservedAttributeName = (\n name: string,\n { draftAndPublish = true }: IsReservedAttributeNameOptions = {}\n): boolean => {\n const snakeCaseName = snakeCase(name);\n\n if (matchesReservedName(snakeCaseName, RESERVED_ATTRIBUTE_NAMES)) {\n return true;\n }\n\n if (\n draftAndPublish &&\n matchesReservedName(snakeCaseName, RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH)\n ) {\n return true;\n }\n\n return false;\n};\n\n// compare snake case to check the actual column names that will be used in the database\nconst isReservedModelName = (name: string): boolean => {\n return matchesReservedName(snakeCase(name), RESERVED_MODEL_NAMES);\n};\n\nconst getReservedAttributeNames = ({\n draftAndPublish = true,\n}: IsReservedAttributeNameOptions = {}): string[] => {\n return draftAndPublish\n ? [...RESERVED_ATTRIBUTE_NAMES, ...RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH]\n : [...RESERVED_ATTRIBUTE_NAMES];\n};\n\nconst getReservedModelNames = (): string[] => [...RESERVED_MODEL_NAMES];\n\nconst findDraftAndPublishReservedAttributeNames = (attributeNames: Iterable<string>): string[] => {\n return [...attributeNames].filter((name) =>\n matchesReservedName(snakeCase(name), RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH)\n );\n};\n\nconst getDraftAndPublishReservedAttributeWarning = (uid: string, attributeName: string): string =>\n `The attribute name '${attributeName}' on content type '${uid}' is reserved when 'draftAndPublish' is enabled. It conflicts with the Document Service / REST 'status' query parameter. Rename the attribute or disable the 'draftAndPublish' option.`;\n\nconst getDraftAndPublishEnableBlockedMessage = (attributeNames: string[]): string =>\n `Cannot enable draft and publish while the following attribute names are reserved: ${attributeNames.join(', ')}. Rename them or remove them first.`;\n\nconst getTimestamps = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(model.attributes, CREATED_AT_ATTRIBUTE)) {\n attributes.push(CREATED_AT_ATTRIBUTE);\n }\n\n if (has(model.attributes, UPDATED_AT_ATTRIBUTE)) {\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(model.attributes, CREATED_BY_ATTRIBUTE)) {\n attributes.push(CREATED_BY_ATTRIBUTE);\n }\n\n if (has(model.attributes, UPDATED_BY_ATTRIBUTE)) {\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([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonVisibleAttributes,\n ]);\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 hasFirstPublishedAtField = (model: Model) =>\n strapi.config.get('features.future.experimental_firstPublishedAt', false) &&\n hasDraftAndPublish(model);\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\n/**\n * Memo of each model's \"stored\" private attributes — those declared in\n * `api.responses.privateAttributes` config or in the model's `options.privateAttributes`,\n * as opposed to attributes flagged `private: true` individually.\n *\n * `isPrivateAttribute` is called once per key, per node, per traversal, per entity, and\n * recomputing this set every time dominated response sanitization: a 25-entity page made\n * 48,605 calls, each doing two lodash path lookups plus a fresh `union()` allocation, all\n * returning the same answer.\n *\n * Keyed on the model object rather than its uid, so a rebuilt schema is a distinct key and\n * the entry cannot go stale. Deliberately NOT stored on the schema itself: a\n * `privateAttributes` getter used to live there and was removed in 2023 (2fa8f30371)\n * because it polluted schema serialization, and because it was only ever attached by\n * `createContentType`, so components never got one.\n *\n * Both inputs are fixed for a model's lifetime — `api.responses.privateAttributes` is\n * boot configuration and is never written at runtime, and `options.privateAttributes`\n * comes from the schema definition. The cache is only populated once `strapi.config` is\n * available so that a lookup during early boot cannot record an empty set permanently.\n */\nconst storedPrivateAttributesCache = new WeakMap<object, Set<string>>();\n\nconst computeStoredPrivateAttributes = (model: Model): Set<string> =>\n new Set(\n union(\n get(model, 'options.privateAttributes', []) as Array<string>,\n (strapi?.config?.get('api.responses.privateAttributes', []) ?? []) as Array<string>\n )\n );\n\nconst getStoredPrivateAttributesSet = (model: Model): Set<string> => {\n const cacheable = typeof model === 'object' && model !== null && strapi?.config != null;\n\n if (!cacheable) {\n return computeStoredPrivateAttributes(model);\n }\n\n let cached = storedPrivateAttributesCache.get(model as object);\n\n if (cached === undefined) {\n cached = computeStoredPrivateAttributes(model);\n storedPrivateAttributesCache.set(model as object, cached);\n }\n\n return cached;\n};\n\n// Set iteration order is insertion order, which matches what `union` returned before.\nconst getStoredPrivateAttributes = (model: Model) =>\n Array.from(getStoredPrivateAttributesSet(model));\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\n const storedPrivateAttributes = getStoredPrivateAttributesSet(model);\n\n // The set is empty for the overwhelming majority of models, so check size before hashing.\n return storedPrivateAttributes.size !== 0 && storedPrivateAttributes.has(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 !!attribute && ['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 getMediaAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isMediaAttribute(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 ID_FIELDS,\n MORPH_TO_KEYS,\n DYNAMIC_ZONE_KEYS,\n RELATION_OPERATION_KEYS,\n RESERVED_ATTRIBUTE_NAMES,\n RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH,\n RESERVED_MODEL_NAMES,\n isReservedAttributeName,\n isReservedModelName,\n getReservedAttributeNames,\n getReservedModelNames,\n findDraftAndPublishReservedAttributeNames,\n getDraftAndPublishReservedAttributeWarning,\n getDraftAndPublishEnableBlockedMessage,\n getNonWritableAttributes,\n getComponentAttributes,\n getMediaAttributes,\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 hasFirstPublishedAtField,\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","FIRST_PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","constants","ID_FIELDS","MORPH_TO_KEYS","DYNAMIC_ZONE_KEYS","RELATION_OPERATION_KEYS","RESERVED_ATTRIBUTE_NAMES","RESERVED_ATTRIBUTE_NAMES_DRAFT_PUBLISH","RESERVED_MODEL_NAMES","matchesReservedName","snakeCaseName","list","includes","filter","entry","endsWith","map","slice","some","prefix","startsWith","isReservedAttributeName","name","draftAndPublish","snakeCase","isReservedModelName","getReservedAttributeNames","getReservedModelNames","findDraftAndPublishReservedAttributeNames","attributeNames","getDraftAndPublishReservedAttributeWarning","uid","attributeName","getDraftAndPublishEnableBlockedMessage","join","getTimestamps","model","attributes","has","push","getCreatorFields","getNonWritableAttributes","nonWritableAttributes","_","reduce","acc","attr","attrName","writable","concat","uniq","getWritableAttributes","difference","Object","keys","isWritableAttribute","getNonVisibleAttributes","nonVisibleAttributes","visible","getVisibleAttributes","isVisibleAttribute","getOptions","assign","get","hasDraftAndPublish","hasFirstPublishedAtField","strapi","config","isDraft","data","isSchema","modelType","isComponentSchema","isContentTypeSchema","isSingleType","kind","isCollectionType","isKind","storedPrivateAttributesCache","WeakMap","computeStoredPrivateAttributes","Set","union","getStoredPrivateAttributesSet","cacheable","cached","undefined","set","getStoredPrivateAttributes","Array","from","getPrivateAttributes","pickBy","private","isPrivateAttribute","storedPrivateAttributes","size","isScalarAttribute","attribute","type","getDoesAttributeRequireValidation","required","unique","prototype","hasOwnProperty","call","isMediaAttribute","isRelationalAttribute","HAS_RELATION_REORDERING","hasRelationReordering","relation","isComponentAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","getComponentAttributes","schema","getMediaAttributes","getScalarAttributes","getRelationalAttributes","isTypedAttribute","getContentTypeRoutePrefix","contentType","kebabCase","info","singularName","pluralName"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-query-params.d.ts","sourceRoot":"","sources":["../src/convert-query-params.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convert-query-params.d.ts","sourceRoot":"","sources":["../src/convert-query-params.ts"],"names":[],"mappings":"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"}
|