{"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<string, any>) => {\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":";;;AAIA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,MAAAA;AAEtB,MAAMC,iBAAiB,CAACC,SAAAA,GAC7BC,EAAEC,GAAG,CAACF,SAAW,EAAA,cAAA,EAAgB,IAAM;MAE5BG,UAAa,GAAA,CAACH,YACzBA,SAAUI,CAAAA,IAAI,KAAK;AAErB;;IAGaC,MAAAA,gBAAAA,GAAmB,CAACC,KAAAA,GAAAA;AAC/B,IAAA,MAAM,EAAEC,oBAAoB,EAAE,GAAGC,MAAMC,YAAY;;AAGnD,IAAA,OAAOF,oBAAqBD,CAAAA,KAAAA,CAAAA,CAAOI,MAAM,CAAC,CAACC,GAAUC,EAAAA,GAAAA,GAAAA;AACnDD,QAAAA,GAAG,CAACC,GAAI,CAAA,GAAGC,gBAAgBP,KAAMQ,CAAAA,UAAU,CAACF,GAAI,CAAA,CAAA;QAChD,OAAOD,GAAAA;AACT,KAAA,EAAG,EAAC,CAAA;AACN;AAEA;;IAGaE,MAAAA,eAAAA,GAAkB,CAACb,SAAAA,GAAAA;IAC9B,MAAM,EAAEe,YAAY,EAAEC,QAAQ,EAAEC,YAAY,EAAEC,aAAa,EAAE,GAAGlB,SAAAA;IAEhE,IAAIA,SAAAA,CAAUI,IAAI,KAAK,OAAS,EAAA;QAC9B,OAAO;YACLA,IAAM,EAAA,OAAA;YACNe,QAAU,EAAA,CAAC,CAACnB,SAAAA,CAAUmB,QAAQ;AAC9BH,YAAAA,QAAAA,EAAU,CAAC,CAACA,QAAAA;YACZD,YAAcA,EAAAA,YAAAA,KAAiB,QAAQ,KAAQK,GAAAA,SAAAA;YAC/CC,OAAS,EAAA,CAAC,CAACrB,SAAAA,CAAUqB,OAAO;AAC5BC,YAAAA,YAAAA,EAActB,UAAUsB,YAAY;AACpCJ,YAAAA;AACF,SAAA;AACF;IAEA,IAAIlB,SAAAA,CAAUI,IAAI,KAAK,UAAY,EAAA;QACjC,OAAO;AACL,YAAA,GAAGJ,SAAS;YACZI,IAAM,EAAA,UAAA;AACNmB,YAAAA,MAAAA,EAAQvB,UAAUuB,MAAM;AACxBC,YAAAA,eAAAA,EAAiBxB,SAAUyB,CAAAA,UAAU,IAAIzB,SAAAA,CAAU0B,QAAQ,IAAI,IAAA;YAC/DX,YAAcA,EAAAA,YAAAA,KAAiB,QAAQ,KAAQK,GAAAA,SAAAA;YAC/CC,OAAS,EAAA,CAAC,CAACrB,SAAAA,CAAUqB,OAAO;AAC5BH,YAAAA,aAAAA;;AAEAD,YAAAA;AACF,SAAA;AACF;IAEA,OAAOjB,SAAAA;AACT;AAEA;AACa2B,MAAAA,oBAAAA,GAAuB,CAACC,MAAAA,GAAgB,CAACC,MAAAA,GAAAA;QACpD,OAAO;AACL,YAAA,GAAGA,MAAM;YACTf,UAAYgB,EAAAA,MAAAA,CAAOC,IAAI,CAACF,MAAAA,CAAOf,UAAU,CAAEJ,CAAAA,MAAM,CAAC,CAACC,GAAUC,EAAAA,GAAAA,GAAAA;AAC3D,gBAAA,MAAMoB,IAAOH,GAAAA,MAAAA,CAAOf,UAAU,CAACF,GAAI,CAAA;gBACnC,IAAIoB,IAAAA,CAAK5B,IAAI,KAAK,WAAa,EAAA;AAC7B,oBAAA,IAAIH,EAAEgC,GAAG,CAACL,MAAQI,EAAAA,IAAAA,CAAKE,SAAS,CAAG,EAAA;wBACjCvB,GAAG,CAACC,IAAI,GAAG;AACT,4BAAA,GAAGoB,IAAI;AACPE,4BAAAA,SAAAA,EAAWN,MAAM,CAACI,IAAKE,CAAAA,SAAS;AAClC,yBAAA;wBAEA,OAAOvB,GAAAA;AACT;oBAEA,IAAI,CAACV,EAAEgC,GAAG,CAACE,OAAOC,UAAU,EAAEJ,IAAKE,CAAAA,SAAS,CAAG,EAAA;AAC7C,wBAAA,MAAM,IAAIrC,gBAAiB,CAAA,oBAAA,CAAA;AAC7B;AACF;AAEA,gBAAA,IACEmC,KAAK5B,IAAI,KAAK,aACdH,IAAAA,CAAAA,CAAEoC,YAAY,CAACL,IAAAA,CAAKI,UAAU,EAAEN,OAAOC,IAAI,CAACH,MAASU,CAAAA,CAAAA,CAAAA,MAAM,GAAG,CAC9D,EAAA;oBACA3B,GAAG,CAACC,IAAI,GAAG;AACT,wBAAA,GAAGoB,IAAI;AACPI,wBAAAA,UAAAA,EAAYJ,IAAKI,CAAAA,UAAU,CAACG,GAAG,CAAC,CAACC,KAAAA,GAAAA;4BAC/B,IAAIvC,CAAAA,CAAEgC,GAAG,CAACL,MAAAA,EAAQY,QAAQ,OAAOZ,MAAM,CAACY,KAAM,CAAA;AAE9C,4BAAA,IAAI,CAACvC,CAAEgC,CAAAA,GAAG,CAACE,MAAOC,CAAAA,UAAU,EAAEI,KAAQ,CAAA,EAAA;AACpC,gCAAA,MAAM,IAAI3C,gBAAiB,CAAA,oBAAA,CAAA;AAC7B;4BAEA,OAAO2C,KAAAA;AACT,yBAAA;AACF,qBAAA;oBAEA,OAAO7B,GAAAA;AACT;gBAEAA,GAAG,CAACC,IAAI,GAAGoB,IAAAA;gBACX,OAAOrB,GAAAA;AACT,aAAA,EAAG,EAAC;AACN,SAAA;;;;;"}