{"version":3,"file":"attributes.mjs","sources":["../../../server/src/utils/attributes.ts"],"sourcesContent":["import _ from 'lodash';\nimport utils, { errors } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\nexport const isConfigurable = (attribute: Schema.Attribute.AnyAttribute) =>\n _.get(attribute, 'configurable', true);\n\nexport const isRelation = (attribute: Schema.Attribute.AnyAttribute) =>\n attribute.type === 'relation';\n\n/**\n * Formats a component's attributes\n */\nexport const formatAttributes = (model: any) => {\n const { getVisibleAttributes } = utils.contentTypes;\n\n // only get attributes that can be seen in the CTB\n return getVisibleAttributes(model).reduce((acc: any, key) => {\n acc[key] = formatAttribute(model.attributes[key]);\n return acc;\n }, {});\n};\n\n/**\n * Formats a component attribute\n */\nexport const formatAttribute = (attribute: Schema.Attribute.AnyAttribute & Record) => {\n const { configurable, required, autoPopulate, pluginOptions } = attribute;\n\n if (attribute.type === 'media') {\n return {\n type: 'media',\n multiple: !!attribute.multiple,\n required: !!required,\n configurable: configurable === false ? false : undefined,\n private: !!attribute.private,\n allowedTypes: attribute.allowedTypes,\n pluginOptions,\n };\n }\n\n if (attribute.type === 'relation') {\n return {\n ...attribute,\n type: 'relation',\n target: attribute.target,\n targetAttribute: attribute.inversedBy || attribute.mappedBy || null,\n configurable: configurable === false ? false : undefined,\n private: !!attribute.private,\n pluginOptions,\n // TODO: remove\n autoPopulate,\n };\n }\n\n return attribute;\n};\n\n// TODO: move to schema builder\nexport const replaceTemporaryUIDs = (uidMap: any) => (schema: any) => {\n return {\n ...schema,\n attributes: Object.keys(schema.attributes).reduce((acc: any, key) => {\n const attr = schema.attributes[key];\n if (attr.type === 'component') {\n if (_.has(uidMap, attr.component)) {\n acc[key] = {\n ...attr,\n component: uidMap[attr.component],\n };\n\n return acc;\n }\n\n if (!_.has(strapi.components, attr.component)) {\n throw new ApplicationError('component.notFound');\n }\n }\n\n if (\n attr.type === 'dynamiczone' &&\n _.intersection(attr.components, Object.keys(uidMap)).length > 0\n ) {\n acc[key] = {\n ...attr,\n components: attr.components.map((value: any) => {\n if (_.has(uidMap, value)) return uidMap[value];\n\n if (!_.has(strapi.components, value)) {\n throw new ApplicationError('component.notFound');\n }\n\n return value;\n }),\n };\n\n return acc;\n }\n\n acc[key] = attr;\n return acc;\n }, {}),\n };\n};\n"],"names":["ApplicationError","errors","isConfigurable","attribute","_","get","isRelation","type","formatAttributes","model","getVisibleAttributes","utils","contentTypes","reduce","acc","key","formatAttribute","attributes","configurable","required","autoPopulate","pluginOptions","multiple","undefined","private","allowedTypes","target","targetAttribute","inversedBy","mappedBy","replaceTemporaryUIDs","uidMap","schema","Object","keys","attr","has","component","strapi","components","intersection","length","map","value"],"mappings":"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"}