@strapi/content-type-builder 5.9.0 → 5.10.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.
Files changed (210) hide show
  1. package/dist/admin/chunks/ListView-CDnrvVrV.mjs +1184 -0
  2. package/dist/admin/chunks/ListView-CDnrvVrV.mjs.map +1 -0
  3. package/dist/admin/chunks/ListView-CQwvSbZH.js +1186 -0
  4. package/dist/admin/chunks/ListView-CQwvSbZH.js.map +1 -0
  5. package/dist/admin/chunks/ar-Df0f0-PT.js +52 -0
  6. package/dist/admin/chunks/ar-Df0f0-PT.js.map +1 -0
  7. package/dist/admin/chunks/ar-sRW9VFC-.mjs +49 -0
  8. package/dist/admin/chunks/ar-sRW9VFC-.mjs.map +1 -0
  9. package/dist/admin/chunks/cs-BpQ26jiq.mjs +136 -0
  10. package/dist/{_chunks/cs-ChL4LaFY.mjs.map → admin/chunks/cs-BpQ26jiq.mjs.map} +1 -1
  11. package/dist/admin/chunks/cs-DeTwqc7p.js +140 -0
  12. package/dist/{_chunks/cs-Ci3js5EC.js.map → admin/chunks/cs-DeTwqc7p.js.map} +1 -1
  13. package/dist/admin/chunks/de-BJkS06jF.js +194 -0
  14. package/dist/{_chunks/de-DnlblIOh.js.map → admin/chunks/de-BJkS06jF.js.map} +1 -1
  15. package/dist/admin/chunks/de-DSxx5_x-.mjs +190 -0
  16. package/dist/{_chunks/de-DsHQNzp2.mjs.map → admin/chunks/de-DSxx5_x-.mjs.map} +1 -1
  17. package/dist/admin/chunks/dk-BnjVZ7A_.mjs +180 -0
  18. package/dist/{_chunks/es-BE_zx2_w.mjs.map → admin/chunks/dk-BnjVZ7A_.mjs.map} +1 -1
  19. package/dist/admin/chunks/dk-CGm-qVH7.js +184 -0
  20. package/dist/{_chunks/dk-D3XnOjYz.js.map → admin/chunks/dk-CGm-qVH7.js.map} +1 -1
  21. package/dist/admin/chunks/en-BJUu34b0.js +217 -0
  22. package/dist/{_chunks/en-CXG5y_vo.js.map → admin/chunks/en-BJUu34b0.js.map} +1 -1
  23. package/dist/admin/chunks/en-Bhut8Yay.mjs +213 -0
  24. package/dist/{_chunks/en-jBwb53yg.mjs.map → admin/chunks/en-Bhut8Yay.mjs.map} +1 -1
  25. package/dist/admin/chunks/es-DG8g9igJ.mjs +180 -0
  26. package/dist/admin/chunks/es-DG8g9igJ.mjs.map +1 -0
  27. package/dist/admin/chunks/es-J8kvHlNy.js +184 -0
  28. package/dist/{_chunks/es-DL8lez9W.js.map → admin/chunks/es-J8kvHlNy.js.map} +1 -1
  29. package/dist/admin/chunks/fr-C6y35iY7.js +76 -0
  30. package/dist/admin/chunks/fr-C6y35iY7.js.map +1 -0
  31. package/dist/admin/chunks/fr-UpV34MHY.mjs +73 -0
  32. package/dist/admin/chunks/fr-UpV34MHY.mjs.map +1 -0
  33. package/dist/admin/chunks/id-BWM18ljw.mjs +163 -0
  34. package/dist/{_chunks/ru-DGSjru5m.mjs.map → admin/chunks/id-BWM18ljw.mjs.map} +1 -1
  35. package/dist/admin/chunks/id-BvxV6wLP.js +167 -0
  36. package/dist/{_chunks/ru-C8A_4j0w.js.map → admin/chunks/id-BvxV6wLP.js.map} +1 -1
  37. package/dist/admin/chunks/index-BQ2VO38W.js +7781 -0
  38. package/dist/admin/chunks/index-BQ2VO38W.js.map +1 -0
  39. package/dist/admin/chunks/index-BZeN5KRn.js +1421 -0
  40. package/dist/admin/chunks/index-BZeN5KRn.js.map +1 -0
  41. package/dist/admin/chunks/index-BhX2euW0.mjs +1384 -0
  42. package/dist/admin/chunks/index-BhX2euW0.mjs.map +1 -0
  43. package/dist/admin/chunks/index-Cr5tfW7U.mjs +7754 -0
  44. package/dist/admin/chunks/index-Cr5tfW7U.mjs.map +1 -0
  45. package/dist/admin/chunks/it-1_vd9gV4.mjs +164 -0
  46. package/dist/{_chunks/tr-DsUerr-c.mjs.map → admin/chunks/it-1_vd9gV4.mjs.map} +1 -1
  47. package/dist/admin/chunks/it-C_IgFU-G.js +168 -0
  48. package/dist/{_chunks/sk-raWRcmPT.js.map → admin/chunks/it-C_IgFU-G.js.map} +1 -1
  49. package/dist/admin/chunks/ja-CWo4Qqq6.js +51 -0
  50. package/dist/admin/chunks/ja-CWo4Qqq6.js.map +1 -0
  51. package/dist/admin/chunks/ja-Cx23a2Ui.mjs +48 -0
  52. package/dist/admin/chunks/ja-Cx23a2Ui.mjs.map +1 -0
  53. package/dist/admin/chunks/ko-BsByJNEl.js +184 -0
  54. package/dist/admin/chunks/ko-BsByJNEl.js.map +1 -0
  55. package/dist/admin/chunks/ko-DC7paEx5.mjs +180 -0
  56. package/dist/admin/chunks/ko-DC7paEx5.mjs.map +1 -0
  57. package/dist/admin/chunks/ms-C3s4kxq6.mjs +160 -0
  58. package/dist/{_chunks/id-W1sKBFEw.mjs.map → admin/chunks/ms-C3s4kxq6.mjs.map} +1 -1
  59. package/dist/admin/chunks/ms-DPTzS7SH.js +164 -0
  60. package/dist/{_chunks/th-C83Bb_kR.js.map → admin/chunks/ms-DPTzS7SH.js.map} +1 -1
  61. package/dist/admin/chunks/nl-TzvfktV_.mjs +153 -0
  62. package/dist/{_chunks/nl-BaTAuelQ.mjs.map → admin/chunks/nl-TzvfktV_.mjs.map} +1 -1
  63. package/dist/admin/chunks/nl-db29QMOx.js +157 -0
  64. package/dist/{_chunks/nl-DQjrDEw0.js.map → admin/chunks/nl-db29QMOx.js.map} +1 -1
  65. package/dist/admin/chunks/pl-BdvupIN_.mjs +190 -0
  66. package/dist/admin/chunks/pl-BdvupIN_.mjs.map +1 -0
  67. package/dist/admin/chunks/pl-pYy1djj3.js +194 -0
  68. package/dist/admin/chunks/pl-pYy1djj3.js.map +1 -0
  69. package/dist/admin/chunks/pt-BQmWcdeG.js +52 -0
  70. package/dist/admin/chunks/pt-BQmWcdeG.js.map +1 -0
  71. package/dist/admin/chunks/pt-BR-CTPuXGWF.js +194 -0
  72. package/dist/{_chunks/pt-BR-DPd5nRnl.js.map → admin/chunks/pt-BR-CTPuXGWF.js.map} +1 -1
  73. package/dist/admin/chunks/pt-BR-DPrVmKeZ.mjs +190 -0
  74. package/dist/{_chunks/pt-BR-CCQGwXs0.mjs.map → admin/chunks/pt-BR-DPrVmKeZ.mjs.map} +1 -1
  75. package/dist/admin/chunks/pt-BTLIwmCv.mjs +49 -0
  76. package/dist/admin/chunks/pt-BTLIwmCv.mjs.map +1 -0
  77. package/dist/admin/chunks/ru-D46no502.mjs +165 -0
  78. package/dist/{_chunks/dk-BC7NAQR2.mjs.map → admin/chunks/ru-D46no502.mjs.map} +1 -1
  79. package/dist/admin/chunks/ru-DQiDXgUV.js +169 -0
  80. package/dist/admin/chunks/ru-DQiDXgUV.js.map +1 -0
  81. package/dist/admin/chunks/sk-Byr_l4Jc.mjs +164 -0
  82. package/dist/{_chunks/ko-DoNsXHXA.mjs.map → admin/chunks/sk-Byr_l4Jc.mjs.map} +1 -1
  83. package/dist/admin/chunks/sk-DrnebmXb.js +168 -0
  84. package/dist/{_chunks/it-DS4sM3km.js.map → admin/chunks/sk-DrnebmXb.js.map} +1 -1
  85. package/dist/admin/chunks/sv-Bbam7IDm.mjs +199 -0
  86. package/dist/admin/chunks/sv-Bbam7IDm.mjs.map +1 -0
  87. package/dist/admin/chunks/sv-CrWlNosi.js +203 -0
  88. package/dist/admin/chunks/sv-CrWlNosi.js.map +1 -0
  89. package/dist/admin/chunks/th-BbrCkfgX.js +165 -0
  90. package/dist/{_chunks/id-DYuTgqcc.js.map → admin/chunks/th-BbrCkfgX.js.map} +1 -1
  91. package/dist/admin/chunks/th-hfS0Wmk_.mjs +161 -0
  92. package/dist/{_chunks/it-D04lb2Wc.mjs.map → admin/chunks/th-hfS0Wmk_.mjs.map} +1 -1
  93. package/dist/admin/chunks/tr-CHdMj8m6.js +180 -0
  94. package/dist/admin/chunks/tr-CHdMj8m6.js.map +1 -0
  95. package/dist/admin/chunks/tr-DS7DBOhC.mjs +176 -0
  96. package/dist/admin/chunks/tr-DS7DBOhC.mjs.map +1 -0
  97. package/dist/admin/chunks/uk-BQEQ3weH.js +165 -0
  98. package/dist/{_chunks/uk-VwB0oiuV.js.map → admin/chunks/uk-BQEQ3weH.js.map} +1 -1
  99. package/dist/admin/chunks/uk-Cj8-BKeu.mjs +161 -0
  100. package/dist/{_chunks/sk-DVK4HfSC.mjs.map → admin/chunks/uk-Cj8-BKeu.mjs.map} +1 -1
  101. package/dist/admin/chunks/zh-BUVXH75-.mjs +199 -0
  102. package/dist/admin/chunks/zh-BUVXH75-.mjs.map +1 -0
  103. package/dist/admin/chunks/zh-CWj4avQA.js +203 -0
  104. package/dist/admin/chunks/zh-CWj4avQA.js.map +1 -0
  105. package/dist/admin/chunks/zh-Hans-BElOnuRb.mjs +144 -0
  106. package/dist/{_chunks/zh-Hans-Cc0M5PXr.mjs.map → admin/chunks/zh-Hans-BElOnuRb.mjs.map} +1 -1
  107. package/dist/admin/chunks/zh-Hans-lXbNiMp9.js +148 -0
  108. package/dist/{_chunks/zh-Hans-CLTLm_nt.js.map → admin/chunks/zh-Hans-lXbNiMp9.js.map} +1 -1
  109. package/dist/admin/index.js +24 -4
  110. package/dist/admin/index.js.map +1 -1
  111. package/dist/admin/index.mjs +17 -7
  112. package/dist/admin/index.mjs.map +1 -1
  113. package/dist/admin/src/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.d.ts +5 -2
  114. package/dist/admin/src/components/DataManagerProvider/reducer.d.ts +97 -6
  115. package/dist/admin/src/components/FormModal/reducer.d.ts +110 -4
  116. package/dist/admin/src/components/ListRow.d.ts +2 -1
  117. package/dist/admin/src/contexts/DataManagerContext.d.ts +4 -4
  118. package/dist/admin/src/index.d.ts +2 -1
  119. package/dist/admin/src/pages/ListView/LinkToCMSettingsView.d.ts +1 -2
  120. package/dist/admin/src/pluginId.d.ts +1 -1
  121. package/dist/admin/src/reducers.d.ts +8 -1
  122. package/dist/admin/src/types.d.ts +2 -5
  123. package/dist/server/index.js +2504 -2151
  124. package/dist/server/index.js.map +1 -1
  125. package/dist/server/index.mjs +2500 -2147
  126. package/dist/server/index.mjs.map +1 -1
  127. package/package.json +13 -10
  128. package/dist/_chunks/ListView-B7k6NgwS.mjs +0 -959
  129. package/dist/_chunks/ListView-B7k6NgwS.mjs.map +0 -1
  130. package/dist/_chunks/ListView-CsRxS9zZ.js +0 -964
  131. package/dist/_chunks/ListView-CsRxS9zZ.js.map +0 -1
  132. package/dist/_chunks/ar-BYDB75EB.mjs +0 -51
  133. package/dist/_chunks/ar-BYDB75EB.mjs.map +0 -1
  134. package/dist/_chunks/ar-OCxhAFUy.js +0 -51
  135. package/dist/_chunks/ar-OCxhAFUy.js.map +0 -1
  136. package/dist/_chunks/cs-ChL4LaFY.mjs +0 -139
  137. package/dist/_chunks/cs-Ci3js5EC.js +0 -139
  138. package/dist/_chunks/de-DnlblIOh.js +0 -193
  139. package/dist/_chunks/de-DsHQNzp2.mjs +0 -193
  140. package/dist/_chunks/dk-BC7NAQR2.mjs +0 -183
  141. package/dist/_chunks/dk-D3XnOjYz.js +0 -183
  142. package/dist/_chunks/en-CXG5y_vo.js +0 -216
  143. package/dist/_chunks/en-jBwb53yg.mjs +0 -216
  144. package/dist/_chunks/es-BE_zx2_w.mjs +0 -183
  145. package/dist/_chunks/es-DL8lez9W.js +0 -183
  146. package/dist/_chunks/fr-DnTxugIo.js +0 -75
  147. package/dist/_chunks/fr-DnTxugIo.js.map +0 -1
  148. package/dist/_chunks/fr-lU_OMJma.mjs +0 -75
  149. package/dist/_chunks/fr-lU_OMJma.mjs.map +0 -1
  150. package/dist/_chunks/id-DYuTgqcc.js +0 -166
  151. package/dist/_chunks/id-W1sKBFEw.mjs +0 -166
  152. package/dist/_chunks/index-97hm9i_H.mjs +0 -1331
  153. package/dist/_chunks/index-97hm9i_H.mjs.map +0 -1
  154. package/dist/_chunks/index-B5tHY87r.mjs +0 -6694
  155. package/dist/_chunks/index-B5tHY87r.mjs.map +0 -1
  156. package/dist/_chunks/index-BgMd59JL.js +0 -6730
  157. package/dist/_chunks/index-BgMd59JL.js.map +0 -1
  158. package/dist/_chunks/index-Cr85ijm8.js +0 -1357
  159. package/dist/_chunks/index-Cr85ijm8.js.map +0 -1
  160. package/dist/_chunks/it-D04lb2Wc.mjs +0 -167
  161. package/dist/_chunks/it-DS4sM3km.js +0 -167
  162. package/dist/_chunks/ja-BHLK_2_g.mjs +0 -50
  163. package/dist/_chunks/ja-BHLK_2_g.mjs.map +0 -1
  164. package/dist/_chunks/ja-BjouJgZf.js +0 -50
  165. package/dist/_chunks/ja-BjouJgZf.js.map +0 -1
  166. package/dist/_chunks/ko-D_71Pdfn.js +0 -183
  167. package/dist/_chunks/ko-D_71Pdfn.js.map +0 -1
  168. package/dist/_chunks/ko-DoNsXHXA.mjs +0 -183
  169. package/dist/_chunks/ms-BtGFDB9t.mjs +0 -163
  170. package/dist/_chunks/ms-BtGFDB9t.mjs.map +0 -1
  171. package/dist/_chunks/ms-Re1pSHmx.js +0 -163
  172. package/dist/_chunks/ms-Re1pSHmx.js.map +0 -1
  173. package/dist/_chunks/nl-BaTAuelQ.mjs +0 -156
  174. package/dist/_chunks/nl-DQjrDEw0.js +0 -156
  175. package/dist/_chunks/pl-BGwXgwH7.js +0 -193
  176. package/dist/_chunks/pl-BGwXgwH7.js.map +0 -1
  177. package/dist/_chunks/pl-CP2Zgp01.mjs +0 -193
  178. package/dist/_chunks/pl-CP2Zgp01.mjs.map +0 -1
  179. package/dist/_chunks/pt-BR-CCQGwXs0.mjs +0 -193
  180. package/dist/_chunks/pt-BR-DPd5nRnl.js +0 -193
  181. package/dist/_chunks/pt-CJoUDTHQ.js +0 -51
  182. package/dist/_chunks/pt-CJoUDTHQ.js.map +0 -1
  183. package/dist/_chunks/pt-DMeTMW2x.mjs +0 -51
  184. package/dist/_chunks/pt-DMeTMW2x.mjs.map +0 -1
  185. package/dist/_chunks/ru-C8A_4j0w.js +0 -168
  186. package/dist/_chunks/ru-DGSjru5m.mjs +0 -168
  187. package/dist/_chunks/sk-DVK4HfSC.mjs +0 -167
  188. package/dist/_chunks/sk-raWRcmPT.js +0 -167
  189. package/dist/_chunks/sv-BGb12eW3.mjs +0 -202
  190. package/dist/_chunks/sv-BGb12eW3.mjs.map +0 -1
  191. package/dist/_chunks/sv-BNN71SFE.js +0 -202
  192. package/dist/_chunks/sv-BNN71SFE.js.map +0 -1
  193. package/dist/_chunks/th--u3VqsON.mjs +0 -164
  194. package/dist/_chunks/th--u3VqsON.mjs.map +0 -1
  195. package/dist/_chunks/th-C83Bb_kR.js +0 -164
  196. package/dist/_chunks/tr-BW20CfcO.js +0 -179
  197. package/dist/_chunks/tr-BW20CfcO.js.map +0 -1
  198. package/dist/_chunks/tr-DsUerr-c.mjs +0 -179
  199. package/dist/_chunks/uk-Bx5IlOKX.mjs +0 -164
  200. package/dist/_chunks/uk-Bx5IlOKX.mjs.map +0 -1
  201. package/dist/_chunks/uk-VwB0oiuV.js +0 -164
  202. package/dist/_chunks/zh-BiOCwPJu.js +0 -202
  203. package/dist/_chunks/zh-BiOCwPJu.js.map +0 -1
  204. package/dist/_chunks/zh-CsUDN13W.mjs +0 -202
  205. package/dist/_chunks/zh-CsUDN13W.mjs.map +0 -1
  206. package/dist/_chunks/zh-Hans-CLTLm_nt.js +0 -147
  207. package/dist/_chunks/zh-Hans-Cc0M5PXr.mjs +0 -147
  208. package/dist/admin/src/components/DataManagerProvider/constants.d.ts +0 -17
  209. package/dist/admin/src/components/FormModal/constants.d.ts +0 -12
  210. package/dist/admin/src/pages/RecursivePath/RecursivePath.d.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../server/src/config.ts","../../server/src/bootstrap.ts","../../server/src/utils/attributes.ts","../../server/src/services/schema-builder/schema-handler.ts","../../server/src/services/schema-builder/component-builder.ts","../../server/src/services/constants.ts","../../server/src/services/schema-builder/content-type-builder.ts","../../server/src/services/schema-builder/index.ts","../../server/src/services/content-types.ts","../../server/src/services/components.ts","../../server/src/services/component-categories.ts","../../server/src/services/builder.ts","../../server/src/services/api-handler.ts","../../server/src/services/index.ts","../../server/src/utils/index.ts","../../server/src/controllers/builder.ts","../../server/src/controllers/validation/common.ts","../../server/src/controllers/validation/component-category.ts","../../server/src/controllers/component-categories.ts","../../server/src/controllers/validation/types.ts","../../server/src/controllers/validation/relations.ts","../../server/src/controllers/validation/model-schema.ts","../../server/src/utils/typeguards.ts","../../server/src/controllers/validation/data-transform.ts","../../server/src/controllers/validation/component.ts","../../server/src/controllers/components.ts","../../server/src/controllers/validation/content-type.ts","../../server/src/controllers/content-types.ts","../../server/src/controllers/index.ts","../../server/src/routes/admin.ts","../../server/src/routes/content-api.ts","../../server/src/routes/index.ts","../../server/src/index.ts"],"sourcesContent":["export default {\n default: {},\n validator() {},\n};\n","import type { Core } from '@strapi/types';\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n const actions = [\n {\n section: 'plugins',\n displayName: 'Read',\n uid: 'read',\n pluginName: 'content-type-builder',\n },\n ];\n\n await strapi.service('admin::permission').actionProvider.registerMany(actions);\n};\n","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","import path from 'path';\nimport type { Internal, Struct } from '@strapi/types';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\n\nimport { isConfigurable } from '../../utils/attributes';\n\nexport type Infos = {\n category?: string;\n modelName?: string;\n plugin?: string;\n uid?: Internal.UID.ContentType;\n dir: string;\n filename: string;\n schema?: Struct.ContentTypeSchema;\n};\n\nexport default function createSchemaHandler(infos: Infos) {\n const { category, modelName, plugin, uid, dir, filename, schema } = infos;\n\n const initialState = {\n modelName,\n plugin,\n category,\n uid,\n dir,\n filename,\n schema:\n schema ||\n ({\n info: {},\n options: {},\n attributes: {},\n } as Struct.ContentTypeSchema),\n };\n\n const state = _.cloneDeep(initialState);\n\n // always keep it the same to rollback\n Object.freeze(initialState.schema);\n\n let modified = false;\n let deleted = false;\n\n return {\n get modelName() {\n return initialState.modelName;\n },\n\n get plugin() {\n return initialState.plugin;\n },\n\n get category() {\n return initialState.category;\n },\n\n get kind() {\n return _.get(state.schema, 'kind', 'collectionType');\n },\n\n get uid() {\n return state.uid;\n },\n\n get writable() {\n return _.get(state, 'plugin') !== 'admin';\n },\n\n setUID(val: Internal.UID.ContentType) {\n modified = true;\n\n state.uid = val;\n return this;\n },\n\n setDir(val: string) {\n modified = true;\n\n state.dir = val;\n return this;\n },\n\n get schema() {\n return _.cloneDeep(state.schema);\n },\n\n setSchema(val: Struct.ContentTypeSchema) {\n modified = true;\n\n state.schema = _.cloneDeep(val);\n return this;\n },\n\n // get a particular path inside the schema\n get(path: string[]) {\n return _.get(state.schema, path);\n },\n\n // set a particular path inside the schema\n set(path: string[] | string, val: unknown) {\n if (!state.schema) return this;\n\n modified = true;\n\n const value = _.defaultTo(val, _.get(state.schema, path));\n _.set(state.schema, path, value);\n\n return this;\n },\n\n // delete a particular path inside the schema\n unset(path: string[]) {\n modified = true;\n\n _.unset(state.schema, path);\n\n return this;\n },\n\n delete() {\n deleted = true;\n return this;\n },\n\n getAttribute(key: string) {\n return this.get(['attributes', key]);\n },\n\n setAttribute(key: string, attribute: any) {\n return this.set(['attributes', key], attribute);\n },\n\n deleteAttribute(key: string) {\n return this.unset(['attributes', key]);\n },\n\n setAttributes(newAttributes: Struct.SchemaAttributes) {\n if (!this.schema) return this;\n\n // delete old configurable attributes\n for (const key in this.schema.attributes) {\n if (isConfigurable((this.schema.attributes as any)[key])) {\n this.deleteAttribute(key);\n }\n }\n\n // set new Attributes\n for (const key of Object.keys(newAttributes)) {\n this.setAttribute(key, newAttributes[key as keyof Struct.SchemaAttributes]);\n }\n\n return this;\n },\n\n removeContentType(uid: Internal.UID.ContentType) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attribute = attributes[key];\n\n if (attribute.target === uid) {\n this.deleteAttribute(key);\n }\n });\n\n return this;\n },\n\n // utils\n removeComponent(uid: Internal.UID.Component) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attr = attributes[key];\n\n if (attr.type === 'component' && attr.component === uid) {\n this.deleteAttribute(key);\n }\n\n if (\n attr.type === 'dynamiczone' &&\n Array.isArray(attr.components) &&\n attr.components.includes(uid)\n ) {\n const updatedComponentList = attributes[key].components.filter(\n (val: string) => val !== uid\n );\n this.set(['attributes', key, 'components'], updatedComponentList);\n }\n });\n\n return this;\n },\n\n updateComponent(uid: Internal.UID.Component, newUID: Internal.UID.Component) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attr = attributes[key];\n\n if (attr.type === 'component' && attr.component === uid) {\n this.set(['attributes', key, 'component'], newUID);\n }\n\n if (\n attr.type === 'dynamiczone' &&\n Array.isArray(attr.components) &&\n attr.components.includes(uid)\n ) {\n const updatedComponentList = attr.components.map((val: string) =>\n val === uid ? newUID : val\n );\n\n this.set(['attributes', key, 'components'], updatedComponentList);\n }\n });\n\n return this;\n },\n\n // save the schema to disk\n async flush() {\n if (!this.writable) {\n return;\n }\n\n const initialPath = path.join(initialState.dir, initialState.filename);\n const filePath = path.join(state.dir, state.filename);\n\n if (deleted) {\n await fse.remove(initialPath);\n\n const list = await fse.readdir(initialState.dir);\n if (list.length === 0) {\n await fse.remove(initialState.dir);\n }\n\n return;\n }\n\n if (modified) {\n if (!state.schema) return Promise.resolve();\n\n await fse.ensureFile(filePath);\n\n await fse.writeJSON(\n filePath,\n {\n kind: state.schema.kind,\n collectionName: state.schema.collectionName,\n info: state.schema.info,\n options: state.schema.options,\n pluginOptions: state.schema.pluginOptions,\n attributes: state.schema.attributes,\n config: (state.schema as any).config,\n },\n { spaces: 2 }\n );\n\n // remove from oldPath\n if (initialPath !== filePath) {\n await fse.remove(initialPath);\n\n const list = await fse.readdir(initialState.dir);\n if (list.length === 0) {\n await fse.remove(initialState.dir);\n }\n }\n\n return;\n }\n\n return Promise.resolve();\n },\n\n // reset the schema to its initial value\n async rollback() {\n if (!this.writable) {\n return;\n }\n\n const initialPath = path.join(initialState.dir, initialState.filename);\n const filePath = path.join(state.dir, state.filename);\n\n // it was a creation so it needs to be deleted\n if (!initialState.uid) {\n await fse.remove(filePath);\n\n const list = await fse.readdir(state.dir);\n if (list.length === 0) {\n await fse.remove(state.dir);\n }\n return;\n }\n\n if (modified || deleted) {\n await fse.ensureFile(initialPath);\n await fse.writeJSON(initialPath, initialState.schema, { spaces: 2 });\n\n // remove\n if (initialPath !== filePath) {\n await fse.remove(filePath);\n\n const list = await fse.readdir(state.dir);\n if (list.length === 0) {\n await fse.remove(state.dir);\n }\n }\n }\n\n return Promise.resolve();\n },\n };\n}\n","import path from 'path';\nimport type { Internal } from '@strapi/types';\nimport _ from 'lodash';\nimport pluralize from 'pluralize';\n\nimport { strings, errors } from '@strapi/utils';\nimport { isConfigurable } from '../../utils/attributes';\nimport createSchemaHandler from './schema-handler';\n\nconst { ApplicationError } = errors;\n\nexport default function createComponentBuilder() {\n return {\n createComponentUID({ category, displayName }: any) {\n return `${strings.nameToSlug(category)}.${strings.nameToSlug(displayName)}`;\n },\n\n createNewComponentUIDMap(components: object[]) {\n return components.reduce((uidMap: any, component: any) => {\n uidMap[component.tmpUID] = this.createComponentUID(component);\n return uidMap;\n }, {});\n },\n\n /**\n * create a component in the tmpComponent map\n */\n createComponent(this: any, infos: any) {\n const uid = this.createComponentUID(infos);\n\n if (this.components.has(uid)) {\n throw new ApplicationError('component.alreadyExists');\n }\n\n const handler = createSchemaHandler({\n dir: path.join(strapi.dirs.app.components, strings.nameToSlug(infos.category)),\n filename: `${strings.nameToSlug(infos.displayName)}.json`,\n });\n\n // TODO: create a utility for this\n // Duplicate in admin/src/components/FormModal/forms/utils/createCollectionName.ts\n const collectionName = `components_${strings.nameToCollectionName(\n infos.category\n )}_${strings.nameToCollectionName(pluralize(infos.displayName))}`;\n\n this.components.forEach((compo: any) => {\n if (compo.schema.collectionName === collectionName) {\n throw new ApplicationError('component.alreadyExists');\n }\n });\n\n handler\n .setUID(uid)\n .set('collectionName', collectionName)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'icon'], infos.icon)\n .set(['info', 'description'], infos.description)\n .set('pluginOptions', infos.pluginOptions)\n .set('config', infos.config)\n .setAttributes(this.convertAttributes(infos.attributes));\n\n if (this.components.size === 0) {\n strapi.telemetry.send('didCreateFirstComponent');\n } else {\n strapi.telemetry.send('didCreateComponent');\n }\n\n this.components.set(uid, handler);\n\n return handler;\n },\n\n /**\n * create a component in the tmpComponent map\n */\n editComponent(this: any, infos: any) {\n const { uid } = infos;\n\n if (!this.components.has(uid)) {\n throw new errors.ApplicationError('component.notFound');\n }\n\n const component = this.components.get(uid);\n\n const [, nameUID] = uid.split('.');\n\n const newCategory = strings.nameToSlug(infos.category);\n const newUID = `${newCategory}.${nameUID}`;\n\n if (newUID !== uid && this.components.has(newUID)) {\n throw new errors.ApplicationError('component.edit.alreadyExists');\n }\n\n const newDir = path.join(strapi.dirs.app.components, newCategory);\n\n const oldAttributes = component.schema.attributes;\n\n const newAttributes = _.omitBy(infos.attributes, (attr, key) => {\n return _.has(oldAttributes, key) && !isConfigurable(oldAttributes[key]);\n });\n\n component\n .setUID(newUID)\n .setDir(newDir)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'icon'], infos.icon)\n .set(['info', 'description'], infos.description)\n .set('pluginOptions', infos.pluginOptions)\n .setAttributes(this.convertAttributes(newAttributes));\n\n if (newUID !== uid) {\n this.components.forEach((compo: any) => {\n compo.updateComponent(uid, newUID);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.updateComponent(uid, newUID);\n });\n }\n\n return component;\n },\n\n deleteComponent(this: any, uid: Internal.UID.Component) {\n if (!this.components.has(uid)) {\n throw new errors.ApplicationError('component.notFound');\n }\n\n this.components.forEach((compo: any) => {\n compo.removeComponent(uid);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.removeComponent(uid);\n });\n\n return this.components.get(uid).delete();\n },\n };\n}\n","export const modelTypes = {\n CONTENT_TYPE: 'CONTENT_TYPE',\n COMPONENT: 'COMPONENT',\n} as const;\n\nexport const typeKinds = {\n SINGLE_TYPE: 'singleType',\n COLLECTION_TYPE: 'collectionType',\n} as const;\n\nexport const DEFAULT_TYPES = [\n // advanced types\n 'media',\n\n // scalar types\n 'string',\n 'text',\n 'richtext',\n 'blocks',\n 'json',\n 'enumeration',\n 'password',\n 'email',\n 'integer',\n 'biginteger',\n 'float',\n 'decimal',\n 'date',\n 'time',\n 'datetime',\n 'timestamp',\n 'boolean',\n\n 'relation',\n] as const;\n\nexport const VALID_UID_TARGETS = ['string', 'text'] as const;\n\nexport const coreUids = {\n STRAPI_USER: 'admin::user',\n PREFIX: 'strapi::',\n} as const;\n\nexport const pluginsUids = {\n UPLOAD_FILE: 'plugin::upload.file',\n} as const;\n","import path from 'path';\nimport _ from 'lodash';\n\nimport { strings, errors } from '@strapi/utils';\nimport type { Schema, Internal } from '@strapi/types';\nimport { isRelation, isConfigurable } from '../../utils/attributes';\nimport { typeKinds } from '../constants';\nimport createSchemaHandler from './schema-handler';\nimport { CreateContentTypeInput } from '../../controllers/validation/content-type';\n\nconst { ApplicationError } = errors;\n\nconst reuseUnsetPreviousProperties = (\n newAttribute: Schema.Attribute.AnyAttribute,\n oldAttribute: Schema.Attribute.AnyAttribute\n) => {\n _.defaults(\n newAttribute,\n _.omit(oldAttribute, [\n 'configurable',\n 'required',\n 'private',\n 'unique',\n 'pluginOptions',\n 'inversedBy',\n 'mappedBy',\n ])\n );\n};\n\nexport default function createComponentBuilder() {\n return {\n setRelation(this: any, { key, uid, attribute }: any) {\n if (!_.has(attribute, 'target')) {\n return;\n }\n\n const targetCT = this.contentTypes.get(attribute.target);\n const targetAttribute = targetCT.getAttribute(attribute.targetAttribute);\n\n if (!attribute.targetAttribute) {\n return;\n }\n\n targetCT.setAttribute(\n attribute.targetAttribute,\n generateRelation({ key, attribute, uid, targetAttribute })\n );\n },\n\n unsetRelation(this: any, attribute: any) {\n if (!_.has(attribute, 'target')) {\n return;\n }\n\n const targetCT = this.contentTypes.get(attribute.target);\n\n const targetAttributeName = attribute.inversedBy || attribute.mappedBy;\n const targetAttribute = targetCT.getAttribute(targetAttributeName);\n\n if (!targetAttribute) return;\n\n return targetCT.deleteAttribute(targetAttributeName);\n },\n\n /**\n * Creates a content type in memory to be written to files later on\n */\n createContentType(this: any, infos: CreateContentTypeInput) {\n const uid = createContentTypeUID(infos);\n\n if (this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.alreadyExists');\n }\n\n const contentType = createSchemaHandler({\n modelName: infos.singularName,\n dir: path.join(\n strapi.dirs.app.api,\n infos.singularName,\n 'content-types',\n infos.singularName\n ),\n filename: `schema.json`,\n });\n\n this.contentTypes.set(uid, contentType);\n\n // support self referencing content type relation\n Object.keys(infos.attributes).forEach((key) => {\n const { target } = infos.attributes[key];\n if (target === '__self__') {\n infos.attributes[key].target = uid;\n }\n });\n\n contentType\n .setUID(uid)\n .set('kind', infos.kind || typeKinds.COLLECTION_TYPE)\n .set(\n 'collectionName',\n infos.collectionName || strings.nameToCollectionName(infos.pluralName)\n )\n .set('info', {\n singularName: infos.singularName,\n pluralName: infos.pluralName,\n displayName: infos.displayName,\n description: infos.description,\n })\n .set('options', {\n ...(infos.options ?? {}),\n draftAndPublish: infos.draftAndPublish,\n })\n .set('pluginOptions', infos.pluginOptions)\n .set('config', infos.config)\n .setAttributes(this.convertAttributes(infos.attributes));\n\n Object.keys(infos.attributes).forEach((key) => {\n const attribute = infos.attributes[key];\n\n if (isRelation(attribute)) {\n if (['manyToMany', 'oneToOne'].includes(attribute.relation)) {\n if (attribute.target === uid && attribute.targetAttribute !== undefined) {\n // self referencing relation\n const targetAttribute = infos.attributes[attribute.targetAttribute];\n\n if (targetAttribute.dominant === undefined) {\n attribute.dominant = true;\n } else {\n attribute.dominant = false;\n }\n } else {\n attribute.dominant = true;\n }\n }\n\n this.setRelation({\n key,\n uid,\n attribute,\n });\n }\n });\n\n return contentType;\n },\n\n editContentType(this: any, infos: any) {\n const { uid } = infos;\n\n if (!this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.notFound');\n }\n\n const contentType = this.contentTypes.get(uid);\n\n const oldAttributes = contentType.schema.attributes;\n\n const newAttributes = _.omitBy(infos.attributes, (attr, key) => {\n return _.has(oldAttributes, key) && !isConfigurable(oldAttributes[key]);\n });\n\n const newKeys = _.difference(Object.keys(newAttributes), Object.keys(oldAttributes));\n const deletedKeys = _.difference(Object.keys(oldAttributes), Object.keys(newAttributes));\n const remainingKeys = _.intersection(Object.keys(oldAttributes), Object.keys(newAttributes));\n\n // remove old relations\n deletedKeys.forEach((key) => {\n const attribute = oldAttributes[key];\n\n const targetAttributeName = attribute.inversedBy || attribute.mappedBy;\n\n // if the old relation has a target attribute. we need to remove it in the target type\n if (isConfigurable(attribute) && isRelation(attribute) && !_.isNil(targetAttributeName)) {\n this.unsetRelation(attribute);\n }\n });\n\n remainingKeys.forEach((key) => {\n const oldAttribute = oldAttributes[key];\n const newAttribute = newAttributes[key];\n\n if (!isRelation(oldAttribute) && isRelation(newAttribute)) {\n return this.setRelation({\n key,\n uid,\n attribute: newAttributes[key],\n });\n }\n\n if (isRelation(oldAttribute) && !isRelation(newAttribute)) {\n return this.unsetRelation(oldAttribute);\n }\n\n if (isRelation(oldAttribute) && isRelation(newAttribute)) {\n const oldTargetAttributeName = oldAttribute.inversedBy || oldAttribute.mappedBy;\n\n const sameRelation = oldAttribute.relation === newAttribute.relation;\n const targetAttributeHasChanged = oldTargetAttributeName !== newAttribute.targetAttribute;\n\n if (!sameRelation || targetAttributeHasChanged) {\n this.unsetRelation(oldAttribute);\n }\n\n // keep extra options that were set manually on oldAttribute\n reuseUnsetPreviousProperties(newAttribute, oldAttribute);\n\n if (oldAttribute.inversedBy) {\n newAttribute.dominant = true;\n } else if (oldAttribute.mappedBy) {\n newAttribute.dominant = false;\n }\n\n return this.setRelation({\n key,\n uid,\n attribute: newAttribute,\n });\n }\n });\n\n // add new relations\n newKeys.forEach((key) => {\n const attribute = newAttributes[key];\n\n if (isRelation(attribute)) {\n if (['manyToMany', 'oneToOne'].includes(attribute.relation)) {\n if (attribute.target === uid && attribute.targetAttribute !== undefined) {\n // self referencing relation\n const targetAttribute = newAttributes[attribute.targetAttribute];\n\n if (targetAttribute.dominant === undefined) {\n attribute.dominant = true;\n } else {\n attribute.dominant = false;\n }\n } else {\n attribute.dominant = true;\n }\n }\n\n this.setRelation({\n key,\n uid,\n attribute,\n });\n }\n });\n\n contentType\n .set('kind', infos.kind || contentType.schema.kind)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'description'], infos.description)\n .set('options', {\n ...(infos.options ?? {}),\n draftAndPublish: infos.draftAndPublish,\n })\n .set('pluginOptions', infos.pluginOptions)\n .setAttributes(this.convertAttributes(newAttributes));\n\n return contentType;\n },\n\n deleteContentType(this: any, uid: string) {\n if (!this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.notFound');\n }\n\n this.components.forEach((compo: any) => {\n compo.removeContentType(uid);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.removeContentType(uid);\n });\n\n return this.contentTypes.get(uid).delete();\n },\n };\n}\n\n/**\n * Returns a uid from a content type infos\n *\n * @param {object} options options\n * @param {string} options.singularName content-type singularName\n * @returns {string} uid\n */\nconst createContentTypeUID = ({\n singularName,\n}: {\n singularName: string;\n}): Internal.UID.ContentType => `api::${singularName}.${singularName}`;\n\nconst generateRelation = ({ key, attribute, uid, targetAttribute = {} }: any) => {\n const opts: any = {\n type: 'relation',\n target: uid,\n autoPopulate: targetAttribute.autoPopulate,\n private: targetAttribute.private || undefined,\n pluginOptions: targetAttribute.pluginOptions || undefined,\n };\n\n switch (attribute.relation) {\n case 'oneToOne': {\n opts.relation = 'oneToOne';\n\n if (attribute.dominant) {\n opts.mappedBy = key;\n } else {\n opts.inversedBy = key;\n }\n break;\n }\n case 'oneToMany': {\n opts.relation = 'manyToOne';\n opts.inversedBy = key;\n break;\n }\n case 'manyToOne': {\n opts.relation = 'oneToMany';\n opts.mappedBy = key;\n break;\n }\n case 'manyToMany': {\n opts.relation = 'manyToMany';\n\n if (attribute.dominant) {\n opts.mappedBy = key;\n } else {\n opts.inversedBy = key;\n }\n\n break;\n }\n default:\n }\n\n // we do this just to make sure we have the same key order when writing to files\n const { type, relation, target, ...restOptions } = opts;\n\n return {\n type,\n relation,\n target,\n ...restOptions,\n };\n};\n","import { join } from 'path';\nimport _ from 'lodash';\n\nimport { errors } from '@strapi/utils';\nimport createSchemaHandler from './schema-handler';\nimport createComponentBuilder from './component-builder';\nimport createContentTypeBuilder from './content-type-builder';\n\n/**\n * Creates a content type schema builder instance\n */\nexport default function createBuilder() {\n const components = Object.values(strapi.components).map((componentInput) => ({\n category: componentInput.category,\n modelName: componentInput.modelName,\n plugin: componentInput.modelName,\n uid: componentInput.uid,\n filename: componentInput.__filename__,\n dir: join(strapi.dirs.app.components, componentInput.category),\n schema: componentInput.__schema__,\n config: componentInput.config,\n }));\n\n const contentTypes = Object.values<any>(strapi.contentTypes).map((contentTypeInput) => {\n const dir = contentTypeInput.plugin\n ? join(\n strapi.dirs.app.extensions,\n contentTypeInput.plugin,\n 'content-types',\n contentTypeInput.info.singularName\n )\n : join(\n strapi.dirs.app.api,\n contentTypeInput.apiName,\n 'content-types',\n contentTypeInput.info.singularName\n );\n\n return {\n modelName: contentTypeInput.modelName,\n plugin: contentTypeInput.plugin,\n uid: contentTypeInput.uid,\n filename: 'schema.json',\n dir,\n schema: contentTypeInput.__schema__,\n config: contentTypeInput.config,\n };\n });\n\n return createSchemaBuilder({\n components,\n contentTypes,\n });\n}\n\ntype SchemaBuilderOptions = {\n components: any;\n contentTypes: any;\n};\n\nfunction createSchemaBuilder({ components, contentTypes }: SchemaBuilderOptions) {\n const tmpComponents = new Map();\n const tmpContentTypes = new Map();\n\n // init temporary ContentTypes\n Object.keys(contentTypes).forEach((key) => {\n tmpContentTypes.set(contentTypes[key].uid, createSchemaHandler(contentTypes[key]));\n });\n\n // init temporary components\n Object.keys(components).forEach((key) => {\n tmpComponents.set(components[key].uid, createSchemaHandler(components[key]));\n });\n\n return {\n get components() {\n return tmpComponents;\n },\n get contentTypes() {\n return tmpContentTypes;\n },\n\n /**\n * Convert Attributes received from the API to the right syntax\n */\n convertAttributes(attributes: any) {\n return Object.keys(attributes).reduce(\n (acc, key) => {\n const attribute = attributes[key];\n\n const { configurable, private: isPrivate } = attribute;\n\n const baseProperties = {\n private: isPrivate === true ? true : undefined,\n configurable: configurable === false ? false : undefined,\n };\n\n if (attribute.type === 'relation') {\n const { target, relation, targetAttribute, dominant, ...restOfProperties } = attribute;\n\n const attr = {\n type: 'relation',\n relation,\n target,\n ...restOfProperties,\n ...baseProperties,\n };\n\n acc[key] = attr;\n\n if (target && !this.contentTypes.has(target)) {\n throw new errors.ApplicationError(`target: ${target} does not exist`);\n }\n\n if (_.isNil(targetAttribute)) {\n return acc;\n }\n\n if (['oneToOne', 'manyToMany'].includes(relation) && dominant === true) {\n attr.inversedBy = targetAttribute;\n } else if (['oneToOne', 'manyToMany'].includes(relation) && dominant === false) {\n attr.mappedBy = targetAttribute;\n } else if (['oneToOne', 'manyToOne', 'manyToMany'].includes(relation)) {\n attr.inversedBy = targetAttribute;\n } else if (['oneToMany'].includes(relation)) {\n attr.mappedBy = targetAttribute;\n }\n\n return acc;\n }\n\n acc[key] = {\n ...attribute,\n ...baseProperties,\n };\n\n return acc;\n },\n {} as Record<string, unknown>\n );\n },\n\n ...createComponentBuilder(),\n ...createContentTypeBuilder(),\n\n /**\n * Write all type to files\n */\n writeFiles() {\n const schemas = [\n ...Array.from(tmpComponents.values()),\n ...Array.from(tmpContentTypes.values()),\n ];\n\n return Promise.all(schemas.map((schema) => schema.flush()))\n .catch((error) => {\n strapi.log.error('Error writing schema files');\n strapi.log.error(error);\n return this.rollback();\n })\n .catch((error) => {\n strapi.log.error(\n 'Error rolling back schema files. You might need to fix your files manually'\n );\n strapi.log.error(error);\n\n throw new errors.ApplicationError('Invalid schema edition');\n });\n },\n\n /**\n * rollback all files\n */\n rollback() {\n return Promise.all(\n [...Array.from(tmpComponents.values()), ...Array.from(tmpContentTypes.values())].map(\n (schema) => schema.rollback()\n )\n );\n },\n };\n}\n","import _ from 'lodash';\nimport { getOr } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils, errors } from '@strapi/utils';\nimport type { UID, Struct } from '@strapi/types';\nimport { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes';\nimport createBuilder from './schema-builder';\nimport { coreUids, pluginsUids } from './constants';\n\nconst { ApplicationError } = errors;\n\nexport const isContentTypeVisible = (model: Struct.ContentTypeSchema) =>\n getOr(true, 'pluginOptions.content-type-builder.visible', model) === true;\n\nexport const getRestrictRelationsTo = (contentType: Struct.ContentTypeSchema) => {\n const { uid } = contentType;\n if (uid === coreUids.STRAPI_USER) {\n // TODO: replace with an obj { relation: 'x', bidirectional: true|false }\n return ['oneWay', 'manyWay'];\n }\n\n if (\n uid.startsWith(coreUids.PREFIX) ||\n uid === pluginsUids.UPLOAD_FILE ||\n !isContentTypeVisible(contentType)\n ) {\n return [];\n }\n\n return null;\n};\n\n/**\n * Format a contentType info to be used by the front-end\n */\nexport const formatContentType = (contentType: any) => {\n const { uid, kind, modelName, plugin, collectionName, info } = contentType;\n\n return {\n uid,\n plugin,\n apiID: modelName,\n schema: {\n ...contentTypesUtils.getOptions(contentType),\n displayName: info.displayName,\n singularName: info.singularName,\n pluralName: info.pluralName,\n description: _.get(info, 'description', ''),\n pluginOptions: contentType.pluginOptions,\n kind: kind || 'collectionType',\n collectionName,\n attributes: formatAttributes(contentType),\n visible: isContentTypeVisible(contentType),\n restrictRelationsTo: getRestrictRelationsTo(contentType),\n },\n };\n};\n\nexport const createContentTypes = async (contentTypes: any[]) => {\n const builder = createBuilder();\n const createdContentTypes: any[] = [];\n\n for (const contentType of contentTypes) {\n createdContentTypes.push(await createContentType(contentType, { defaultBuilder: builder }));\n }\n\n await builder.writeFiles();\n\n return createdContentTypes;\n};\n\ntype CreateContentTypeOptions = {\n defaultBuilder?: any; // TODO\n};\n\n/**\n * Creates a content type and handle the nested components sent with it\n */\nexport const createContentType = async (\n { contentType, components }: any,\n options: CreateContentTypeOptions = {}\n) => {\n const builder = options.defaultBuilder || createBuilder();\n const uidMap = builder.createNewComponentUIDMap(components || []);\n\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const newContentType = builder.createContentType(replaceTmpUIDs(contentType));\n\n // allow components to target the new contentType\n const targetContentType = (infos: any) => {\n Object.keys(infos.attributes).forEach((key) => {\n const { target } = infos.attributes[key];\n if (target === '__contentType__') {\n infos.attributes[key].target = newContentType.uid;\n }\n });\n\n return infos;\n };\n\n components?.forEach((component: any) => {\n const options = replaceTmpUIDs(targetContentType(component));\n\n if (!_.has(component, 'uid')) {\n return builder.createComponent(options);\n }\n\n return builder.editComponent(options);\n });\n\n // generate api skeleton\n await generateAPI({\n displayName: contentType!.displayName || contentType!.info.displayName,\n singularName: contentType!.singularName,\n pluralName: contentType!.pluralName,\n kind: contentType!.kind,\n });\n\n if (!options.defaultBuilder) {\n await builder.writeFiles();\n }\n\n strapi.eventHub.emit('content-type.create', { contentType: newContentType });\n\n return newContentType;\n};\n\n/**\n * Generate an API skeleton\n */\nexport const generateAPI = ({\n singularName,\n kind = 'collectionType',\n pluralName,\n displayName,\n}: any) => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const strapiGenerators = require('@strapi/generators');\n return strapiGenerators.generate(\n 'content-type',\n {\n kind,\n singularName,\n id: singularName,\n pluralName,\n displayName,\n destination: 'new',\n bootstrapApi: true,\n attributes: [],\n },\n { dir: strapi.dirs.app.root }\n );\n};\n\n/**\n * Edits a contentType and handle the nested contentTypes sent with it\n */\nexport const editContentType = async (\n uid: UID.ContentType,\n { contentType, components = [] }: any\n) => {\n const builder = createBuilder();\n\n const previousSchema = builder.contentTypes.get(uid).schema;\n const previousKind = previousSchema.kind;\n const newKind = contentType.kind || previousKind;\n\n // Restore non-visible attributes from previous schema\n const previousAttributes = previousSchema.attributes;\n const prevNonVisibleAttributes = contentTypesUtils\n .getNonVisibleAttributes(previousSchema)\n .reduce((acc, key) => {\n if (key in previousAttributes) {\n acc[key] = previousAttributes[key];\n }\n\n return acc;\n }, {} as any);\n contentType.attributes = _.merge(prevNonVisibleAttributes, contentType.attributes);\n\n if (newKind !== previousKind && newKind === 'singleType') {\n const entryCount = await strapi.db.query(uid).count();\n if (entryCount > 1) {\n throw new ApplicationError(\n 'You cannot convert a collectionType to a singleType when having multiple entries in DB'\n );\n }\n }\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const updatedContentType = builder.editContentType({\n uid,\n ...replaceTmpUIDs(contentType),\n });\n\n components.forEach((component: any) => {\n if (!_.has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n if (newKind !== previousKind) {\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n await apiHandler.backup(uid);\n\n try {\n await apiHandler.clear(uid);\n\n // generate new api skeleton\n await generateAPI({\n displayName: updatedContentType.schema.info.displayName,\n singularName: updatedContentType.schema.info.singularName,\n pluralName: updatedContentType.schema.info.pluralName,\n kind: updatedContentType.schema.kind,\n });\n\n await builder.writeFiles();\n } catch (error) {\n strapi.log.error(error);\n await apiHandler.rollback(uid);\n }\n\n return updatedContentType;\n }\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('content-type.update', { contentType: updatedContentType });\n\n return updatedContentType;\n};\n\nexport const deleteContentTypes = async (uids: UID.ContentType[]) => {\n const builder = createBuilder();\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n\n for (const uid of uids) {\n await deleteContentType(uid, builder);\n }\n\n await builder.writeFiles();\n for (const uid of uids) {\n try {\n await apiHandler.clear(uid);\n } catch (error) {\n strapi.log.error(error);\n await apiHandler.rollback(uid);\n }\n }\n};\n\n/**\n * Deletes a content type and the api files related to it\n */\nexport const deleteContentType = async (uid: UID.ContentType, defaultBuilder: any = undefined) => {\n const builder = defaultBuilder || createBuilder();\n // make a backup\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n await apiHandler.backup(uid);\n\n const contentType = builder.deleteContentType(uid);\n\n if (!defaultBuilder) {\n try {\n await builder.writeFiles();\n await apiHandler.clear(uid);\n } catch (error) {\n await apiHandler.rollback(uid);\n }\n }\n\n strapi.eventHub.emit('content-type.delete', { contentType });\n\n return contentType;\n};\n","import type { Internal, Struct } from '@strapi/types';\nimport { get, has } from 'lodash';\n\nimport { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes';\nimport createBuilder from './schema-builder';\n\n/**\n * Formats a component attributes\n */\nexport const formatComponent = (component: any) => {\n const { uid, modelName, connection, collectionName, info, category } = component;\n\n return {\n uid,\n category,\n apiId: modelName,\n schema: {\n displayName: get(info, 'displayName'),\n description: get(info, 'description', ''),\n icon: get(info, 'icon'),\n connection,\n collectionName,\n pluginOptions: component.pluginOptions,\n attributes: formatAttributes(component),\n },\n };\n};\n\n/**\n * Creates a component and handle the nested components sent with it\n */\nexport const createComponent = async ({ component, components = [] }: any) => {\n const builder = createBuilder();\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const newComponent = builder.createComponent(replaceTmpUIDs(component));\n\n components.forEach((component: any) => {\n if (!has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.create', { component: newComponent });\n\n return newComponent;\n};\n\ntype ComponentToCreate = {\n component: Struct.ComponentSchema;\n components?: Struct.ComponentSchema[];\n};\n\nexport const editComponent = async (\n uid: Internal.UID.Component,\n { component, components = [] }: ComponentToCreate\n) => {\n const builder = createBuilder();\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const updatedComponent = builder.editComponent({\n uid,\n ...replaceTmpUIDs(component),\n });\n\n components.forEach((component) => {\n if (!has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.update', { component: updatedComponent });\n\n return updatedComponent;\n};\n\nexport const deleteComponent = async (uid: Internal.UID.Component) => {\n const builder = createBuilder();\n\n const deletedComponent = builder.deleteComponent(uid);\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.delete', { component: deletedComponent });\n\n return deletedComponent;\n};\n","import { join } from 'path';\nimport { strings, errors } from '@strapi/utils';\nimport type { Struct } from '@strapi/types';\nimport createBuilder from './schema-builder';\n\ntype Infos = {\n name: string;\n};\n\ninterface WorkingComponent extends Struct.ComponentSchema {\n setUID: (uid: string) => WorkingComponent;\n setDir: (dir: string) => WorkingComponent;\n updateComponent: (oldUID: string, newUID: string) => void;\n}\n\n/**\n * Edit a category name and move components to the write folder\n */\nexport const editCategory = async (name: string, infos: Infos) => {\n const newName = strings.nameToSlug(infos.name);\n\n // don't do anything the name doesn't change\n if (name === newName) return;\n\n if (!categoryExists(name)) {\n throw new errors.ApplicationError('category not found');\n }\n\n if (categoryExists(newName)) {\n throw new errors.ApplicationError('Name already taken');\n }\n\n const builder = createBuilder();\n\n builder.components.forEach((component: WorkingComponent) => {\n const oldUID = component.uid;\n const newUID = `${newName}.${component.modelName}`;\n\n // only edit the components in this specific category\n if (component.category !== name) return;\n\n component.setUID(newUID).setDir(join(strapi.dirs.app.components, newName));\n\n builder.components.forEach((compo: WorkingComponent) => {\n compo.updateComponent(oldUID, newUID);\n });\n\n builder.contentTypes.forEach((ct: WorkingComponent) => {\n ct.updateComponent(oldUID, newUID);\n });\n });\n\n await builder.writeFiles();\n\n return newName;\n};\n\n/**\n * Deletes a category and its components\n */\nexport const deleteCategory = async (name: string) => {\n if (!categoryExists(name)) {\n throw new errors.ApplicationError('category not found');\n }\n\n const builder = createBuilder();\n\n builder.components.forEach((component) => {\n if (component.category === name) {\n builder.deleteComponent(component.uid);\n }\n });\n\n await builder.writeFiles();\n};\n\n/**\n * Checks if a category exists\n */\nconst categoryExists = (name: string) => {\n const matchingIndex = Object.values(strapi.components).findIndex(\n (component) => component.category === name\n );\n\n return matchingIndex > -1;\n};\n","import { snakeCase } from 'lodash/fp';\n\n// use snake_case\nexport const reservedAttributes = [\n // TODO: these need to come from a centralized place so we don't break things accidentally in the future and can share them outside the CTB, for example on Strapi bootstrap prior to schema db sync\n\n // ID fields\n 'id',\n 'document_id',\n\n // Creator fields\n 'created_at',\n 'updated_at',\n 'published_at',\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 'status',\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// use snake_case\nexport const reservedModels = [\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\nexport const getReservedNames = () => {\n return {\n models: reservedModels,\n attributes: reservedAttributes,\n };\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedModelName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedModels.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedModels\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\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\nexport const isReservedAttributeName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedAttributes.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedAttributes\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n","import * as path from 'path';\nimport * as fse from 'fs-extra';\nimport type { Internal } from '@strapi/types';\n\n/**\n * Deletes the API folder of a contentType\n */\nexport async function clear(uid: Internal.UID.ContentType) {\n // TODO double check if this is the correct way to get the apiName\n const { apiName, modelName } = strapi.contentTypes[uid] as any;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n\n await recursiveRemoveFiles(apiFolder, createDeleteApiFunction(modelName));\n await deleteBackup(uid);\n}\n\n/**\n * Backups the API folder of a contentType\n * @param {string} uid content type uid\n */\nexport async function backup(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n // backup the api folder\n await fse.copy(apiFolder, backupFolder);\n}\n\n/**\n * Deletes an API backup folder\n */\nasync function deleteBackup(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n const backupFolder = path.join(strapi.dirs.app.api, '.backup');\n const apiBackupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n await fse.remove(apiBackupFolder);\n\n const list = await fse.readdir(backupFolder);\n if (list.length === 0) {\n await fse.remove(backupFolder);\n }\n}\n\n/**\n * Rollbacks the API folder of a contentType\n */\nexport async function rollback(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n try {\n await fse.access(backupFolder);\n } catch {\n throw new Error('Cannot rollback api that was not backed up');\n }\n\n await fse.remove(apiFolder);\n await fse.copy(backupFolder, apiFolder);\n await deleteBackup(uid);\n}\n\n/**\n * Creates a delete function to clear an api folder\n */\nconst createDeleteApiFunction = (baseName: string) => {\n /**\n * Delets a file in an api.\n * Will only update routes.json instead of deleting it if other routes are present\n */\n return async (filePath: string) => {\n const fileName = path.basename(filePath, path.extname(filePath));\n\n const isSchemaFile = filePath.endsWith(`${baseName}/schema.json`);\n if (fileName === baseName || isSchemaFile) {\n return fse.remove(filePath);\n }\n };\n};\n\n/**\n * Deletes a folder recursively using a delete function\n * @param {string} folder folder to delete\n */\nconst recursiveRemoveFiles = async (folder: string, deleteFn: (file: string) => unknown) => {\n const filesName = await fse.readdir(folder);\n\n for (const fileName of filesName) {\n const filePath = path.join(folder, fileName);\n\n const stat = await fse.stat(filePath);\n\n if (stat.isDirectory()) {\n await recursiveRemoveFiles(filePath, deleteFn);\n } else {\n await deleteFn(filePath);\n }\n }\n\n const files = await fse.readdir(folder);\n if (files.length === 0) {\n await fse.remove(folder);\n }\n};\n","import * as contentTypes from './content-types';\nimport * as components from './components';\nimport * as componentCategories from './component-categories';\nimport * as builder from './builder';\nimport * as apiHandler from './api-handler';\n\nexport default {\n 'content-types': contentTypes,\n components,\n 'component-categories': componentCategories,\n builder,\n 'api-handler': apiHandler,\n};\n","import type * as components from '../services/components';\nimport type * as builder from '../services/builder';\nimport type * as contentTypes from '../services/content-types';\nimport type * as componentCategories from '../services/component-categories';\nimport type * as apiHandler from '../services/api-handler';\n\ntype S = {\n 'content-types': typeof contentTypes;\n components: typeof components;\n 'component-categories': typeof componentCategories;\n builder: typeof builder;\n 'api-handler': typeof apiHandler;\n};\n\nexport function getService<T extends keyof S>(\n name: T\n): S[T] extends (...args: any[]) => any ? ReturnType<S[T]> : S[T] {\n return strapi.plugin('content-type-builder').service(name);\n}\n","import type { Context } from 'koa';\nimport { getService } from '../utils';\n\nexport default {\n getReservedNames(ctx: Context) {\n ctx.body = getService('builder').getReservedNames();\n },\n};\n","/* eslint-disable no-template-curly-in-string */\nimport { yup, strings } from '@strapi/utils';\nimport _ from 'lodash';\nimport { TestConfig } from 'yup';\n\nexport const validators = {\n required: yup.boolean(),\n unique: yup.boolean(),\n minLength: yup.number().integer().positive(),\n maxLength: yup.number().integer().positive(),\n};\n\nexport const NAME_REGEX = /^[A-Za-z][_0-9A-Za-z]*$/;\nexport const COLLECTION_NAME_REGEX = /^[A-Za-z][-_0-9A-Za-z]*$/;\nexport const CATEGORY_NAME_REGEX = /^[A-Za-z][-_0-9A-Za-z]*$/;\nexport const ICON_REGEX = /^[A-Za-z0-9][-A-Za-z0-9]*$/;\nexport const UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\nexport type CommonTestConfig = TestConfig<unknown | undefined, Record<string, unknown>>;\n\nexport const isValidName: CommonTestConfig = {\n name: 'isValidName',\n message: `\\${path} must match the following regex: ${NAME_REGEX}`,\n test: (val: unknown) => val === '' || NAME_REGEX.test(val as string),\n};\n\nexport const isValidIcon: CommonTestConfig = {\n name: 'isValidIcon',\n message: `\\${path} is not a valid icon name. Make sure your icon name starts with an alphanumeric character and only includes alphanumeric characters or dashes.`,\n test: (val) => val === '' || ICON_REGEX.test(val as string),\n};\n\nexport const isValidUID: CommonTestConfig = {\n name: 'isValidUID',\n message: `\\${path} must match the following regex: ${UID_REGEX}`,\n test: (val) => val === '' || UID_REGEX.test(val as string),\n};\n\nexport const isValidCategoryName: CommonTestConfig = {\n name: 'isValidCategoryName',\n message: `\\${path} must match the following regex: ${CATEGORY_NAME_REGEX}`,\n test: (val) => val === '' || CATEGORY_NAME_REGEX.test(val as string),\n};\n\nexport const isValidCollectionName: CommonTestConfig = {\n name: 'isValidCollectionName',\n message: `\\${path} must match the following regex: ${COLLECTION_NAME_REGEX}`,\n test: (val) => val === '' || COLLECTION_NAME_REGEX.test(val as string),\n};\n\nexport const isValidKey = (key: string): CommonTestConfig => ({\n name: 'isValidKey',\n message: `Attribute name '${key}' must match the following regex: ${NAME_REGEX}`,\n test: () => NAME_REGEX.test(key),\n});\n\nexport const isValidEnum: CommonTestConfig = {\n name: 'isValidEnum',\n message: '${path} should not start with number',\n test: (val) => val === '' || !strings.startsWithANumber(val as string),\n};\n\nexport const areEnumValuesUnique: CommonTestConfig = {\n name: 'areEnumValuesUnique',\n message: '${path} cannot contain duplicate values',\n test(values) {\n const filtered = [...new Set(values as string[])];\n\n return filtered.length === (values as string[]).length;\n },\n};\n\nexport const isValidRegExpPattern: CommonTestConfig = {\n name: 'isValidRegExpPattern',\n message: '${path} must be a valid RexExp pattern string',\n test: (val) => val === '' || !!new RegExp(val as string),\n};\n\nexport const isValidDefaultJSON: CommonTestConfig = {\n name: 'isValidDefaultJSON',\n message: '${path} is not a valid JSON',\n test(val) {\n if (val === undefined) {\n return true;\n }\n\n if (_.isNumber(val) || _.isNull(val) || _.isObject(val) || _.isArray(val)) {\n return true;\n }\n\n try {\n JSON.parse(val as string);\n\n return true;\n } catch (err) {\n return false;\n }\n },\n};\n","import { yup, validateYupSchema } from '@strapi/utils';\nimport { isValidCategoryName } from './common';\n\nconst componentCategorySchema = yup\n .object({\n name: yup.string().min(3).test(isValidCategoryName).required('name.required'),\n })\n .noUnknown();\n\nexport default validateYupSchema(componentCategorySchema);\n","import type { Context } from 'koa';\nimport { getService } from '../utils';\nimport validateComponentCategory from './validation/component-category';\n\nexport default {\n async editCategory(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateComponentCategory(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n const { name } = ctx.params;\n\n strapi.reload.isWatching = false;\n\n const componentCategoryService = getService('component-categories');\n\n const newName = await componentCategoryService.editCategory(name, body);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ name: newName });\n },\n\n async deleteCategory(ctx: Context) {\n const { name } = ctx.params;\n\n strapi.reload.isWatching = false;\n\n const componentCategoryService = getService('component-categories');\n\n await componentCategoryService.deleteCategory(name);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ name });\n },\n};\n","import _ from 'lodash';\nimport { yup } from '@strapi/utils';\n\nimport type { TestContext } from 'yup';\nimport type { Schema, Struct } from '@strapi/types';\n\nimport { modelTypes, VALID_UID_TARGETS } from '../../services/constants';\nimport {\n validators,\n areEnumValuesUnique,\n isValidDefaultJSON,\n isValidName,\n isValidEnum,\n isValidUID,\n isValidRegExpPattern,\n} from './common';\n\nexport type GetTypeValidatorOptions = {\n types: ReadonlyArray<string>;\n attributes?: Struct.SchemaAttributes;\n modelType?: (typeof modelTypes)[keyof typeof modelTypes];\n};\n\nconst maxLengthIsGreaterThanOrEqualToMinLength = {\n name: 'isGreaterThanMin',\n message: 'maxLength must be greater or equal to minLength',\n test(this: TestContext, value: unknown) {\n const { minLength } = this.parent;\n return !(!_.isUndefined(minLength) && !_.isUndefined(value) && (value as number) < minLength);\n },\n};\n\nexport const getTypeValidator = (\n attribute: Schema.Attribute.AnyAttribute,\n { types, modelType, attributes }: GetTypeValidatorOptions\n) => {\n return yup.object({\n type: yup\n .string()\n .oneOf([...types])\n .required(),\n configurable: yup.boolean().nullable(),\n private: yup.boolean().nullable(),\n pluginOptions: yup.object(),\n ...getTypeShape(attribute, { modelType, attributes }),\n } as any);\n};\n\nconst getTypeShape = (attribute: Schema.Attribute.AnyAttribute, { attributes }: any = {}) => {\n switch (attribute.type) {\n /**\n * complex types\n */\n\n case 'media': {\n return {\n multiple: yup.boolean(),\n required: validators.required,\n allowedTypes: yup\n .array()\n .of(yup.string().oneOf(['images', 'videos', 'files', 'audios']))\n .min(1),\n };\n }\n\n case 'uid': {\n return {\n required: validators.required,\n targetField: yup\n .string()\n .oneOf(\n Object.keys(attributes!).filter((key) =>\n VALID_UID_TARGETS.includes(_.get(attributes![key] as any, 'type'))\n )\n )\n .nullable(),\n default: yup\n .string()\n .test(\n 'isValidDefaultUID',\n 'cannot define a default UID if the targetField is set',\n function (value) {\n const { targetField } = this.parent;\n return !!(_.isNil(targetField) || _.isNil(value));\n }\n )\n .test(isValidUID),\n minLength: validators.minLength,\n maxLength: validators.maxLength.max(256).test(maxLengthIsGreaterThanOrEqualToMinLength),\n options: yup.object().shape({\n separator: yup.string(),\n lowercase: yup.boolean(),\n decamelize: yup.boolean(),\n customReplacements: yup.array().of(yup.array().of(yup.string()).min(2).max(2)),\n preserveLeadingUnderscore: yup.boolean(),\n }),\n };\n }\n\n /**\n * scalar types\n */\n case 'string':\n case 'text': {\n return {\n default: yup.string(),\n required: validators.required,\n unique: validators.unique,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n regex: yup.string().test(isValidRegExpPattern),\n };\n }\n case 'richtext': {\n return {\n default: yup.string(),\n required: validators.required,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n };\n }\n case 'blocks': {\n return {\n required: validators.required,\n };\n }\n case 'json': {\n return {\n default: yup.mixed().test(isValidDefaultJSON),\n required: validators.required,\n };\n }\n case 'enumeration': {\n return {\n enum: yup\n .array()\n .of(yup.string().test(isValidEnum).required())\n .min(1)\n .test(areEnumValuesUnique)\n .required(),\n default: yup.string().when('enum', (enumVal) => yup.string().oneOf(enumVal)),\n enumName: yup.string().test(isValidName),\n required: validators.required,\n };\n }\n case 'password': {\n return {\n required: validators.required,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n };\n }\n case 'email': {\n return {\n default: yup.string().email(),\n required: validators.required,\n unique: validators.unique,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n };\n }\n case 'integer': {\n return {\n default: yup.number().integer(),\n required: validators.required,\n unique: validators.unique,\n min: yup.number().integer(),\n max: yup.number().integer(),\n };\n }\n case 'biginteger': {\n return {\n default: yup.string().nullable().matches(/^\\d*$/),\n required: validators.required,\n unique: validators.unique,\n min: yup.string().nullable().matches(/^\\d*$/),\n max: yup.string().nullable().matches(/^\\d*$/),\n };\n }\n case 'float': {\n return {\n default: yup.number(),\n required: validators.required,\n unique: validators.unique,\n min: yup.number(),\n max: yup.number(),\n };\n }\n case 'decimal': {\n return {\n default: yup.number(),\n required: validators.required,\n unique: validators.unique,\n min: yup.number(),\n max: yup.number(),\n };\n }\n case 'time':\n case 'datetime':\n case 'date': {\n return {\n default: yup.string(),\n required: validators.required,\n unique: validators.unique,\n };\n }\n case 'boolean': {\n return {\n default: yup.boolean(),\n required: validators.required,\n };\n }\n\n case 'component': {\n return {\n required: validators.required,\n repeatable: yup.boolean(),\n // TODO: Add correct server validation for nested components\n component: yup.string().required(),\n min: yup.number(),\n max: yup.number(),\n };\n }\n\n case 'dynamiczone': {\n return {\n required: validators.required,\n components: yup\n .array()\n .of(yup.string().required())\n .test('isArray', '${path} must be an array', (value) => Array.isArray(value))\n .min(1),\n min: yup.number(),\n max: yup.number(),\n };\n }\n\n default: {\n return {};\n }\n }\n};\n","import { isUndefined } from 'lodash/fp';\nimport { yup } from '@strapi/utils';\nimport type { TestContext, TestFunction } from 'yup';\nimport type { Schema, UID } from '@strapi/types';\nimport { typeKinds, coreUids } from '../../services/constants';\nimport { isValidName } from './common';\n\nconst STRAPI_USER_RELATIONS = ['oneToOne', 'oneToMany'];\n\nconst isValidRelation = (validNatures: ReadonlyArray<string>): TestFunction<string | undefined> =>\n function (this: TestContext, value) {\n // NOTE: In case of an undefined value, delegate the check to .required()\n if (value === undefined) {\n return true;\n }\n\n if (this.parent.target === coreUids.STRAPI_USER) {\n if (!validNatures.includes(value) || !isUndefined(this.parent.targetAttribute)) {\n return this.createError({\n path: this.path,\n message: `must be one of the following values: ${STRAPI_USER_RELATIONS.join(', ')}`,\n });\n }\n }\n\n return validNatures.includes(value)\n ? true\n : this.createError({\n path: this.path,\n message: `must be one of the following values: ${validNatures.join(', ')}`,\n });\n };\n\nexport const getRelationValidator = (\n attribute: Schema.Attribute.Relation,\n allowedRelations: ReadonlyArray<string>\n) => {\n const contentTypesUIDs = Object.keys(strapi.contentTypes)\n .filter((key) => strapi.contentTypes[key as UID.ContentType].kind === typeKinds.COLLECTION_TYPE)\n .filter((key) => !key.startsWith(coreUids.PREFIX) || key === coreUids.STRAPI_USER)\n .concat(['__self__', '__contentType__']);\n\n const base = {\n type: yup.string().oneOf(['relation']).required(),\n relation: yup.string().test('isValidRelation', isValidRelation(allowedRelations)).required(),\n configurable: yup.boolean().nullable(),\n private: yup.boolean().nullable(),\n pluginOptions: yup.object(),\n };\n\n switch (attribute.relation) {\n case 'oneToOne':\n case 'oneToMany':\n case 'manyToOne':\n case 'manyToMany':\n case 'morphOne':\n case 'morphMany': {\n return yup.object({\n ...base,\n target: yup.string().oneOf(contentTypesUIDs).required(),\n targetAttribute: yup.string().test(isValidName).nullable(),\n });\n }\n case 'morphToOne':\n case 'morphToMany':\n default: {\n return yup.object({ ...base });\n }\n }\n};\n","import { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport { snakeCase } from 'lodash/fp';\nimport { modelTypes, typeKinds } from '../../services/constants';\nimport { getService } from '../../utils';\nimport { isValidKey, isValidCollectionName } from './common';\nimport { getTypeValidator } from './types';\nimport { getRelationValidator } from './relations';\n\ntype ModelTypeInput = (typeof modelTypes)[keyof typeof modelTypes];\n\ntype CreateAttributesInput = {\n types: ReadonlyArray<string>;\n relations: ReadonlyArray<string>;\n modelType?: ModelTypeInput;\n};\n\nexport const createSchema = (\n types: CreateAttributesInput['types'],\n relations: CreateAttributesInput['relations'],\n { modelType }: { modelType?: ModelTypeInput } = {}\n) => {\n const shape = {\n description: yup.string(),\n options: yup.object(),\n pluginOptions: yup.object(),\n collectionName: yup.string().nullable().test(isValidCollectionName),\n attributes: createAttributesValidator({ types, relations, modelType }),\n draftAndPublish: yup.boolean(),\n } as any;\n\n if (modelType === modelTypes.CONTENT_TYPE) {\n shape.kind = yup.string().oneOf([typeKinds.SINGLE_TYPE, typeKinds.COLLECTION_TYPE]).nullable();\n }\n\n return yup.object(shape).noUnknown();\n};\n\nconst createAttributesValidator = ({ types, modelType, relations }: CreateAttributesInput) => {\n return yup.lazy((attributes) => {\n return yup\n .object()\n .shape(\n _.mapValues(attributes, (attribute, key) => {\n if (isForbiddenKey(key)) {\n return forbiddenValidator();\n }\n\n if (isConflictingKey(key, attributes)) {\n return conflictingKeysValidator(key);\n }\n\n if (attribute.type === 'relation') {\n return getRelationValidator(attribute, relations).test(isValidKey(key));\n }\n\n if (_.has(attribute, 'type')) {\n return getTypeValidator(attribute, { types, modelType, attributes }).test(\n isValidKey(key)\n );\n }\n\n return typeOrRelationValidator;\n })\n )\n .required('attributes.required');\n });\n};\n\nconst isConflictingKey = (key: string, attributes: Record<string, any>) => {\n const snakeCaseKey = snakeCase(key);\n\n return Object.keys(attributes).some((existingKey) => {\n if (existingKey === key) return false; // don't compare against itself\n return snakeCase(existingKey) === snakeCaseKey;\n });\n};\n\nconst isForbiddenKey = (key: string) => {\n return getService('builder').isReservedAttributeName(key);\n};\n\nconst forbiddenValidator = () => {\n const reservedNames = [...getService('builder').getReservedNames().attributes];\n\n return yup.mixed().test({\n name: 'forbiddenKeys',\n message: `Attribute keys cannot be one of ${reservedNames.join(', ')}`,\n test: () => false,\n });\n};\n\nconst conflictingKeysValidator = (key: string) => {\n return yup.mixed().test({\n name: 'conflictingKeys',\n message: `Attribute ${key} conflicts with an existing key`,\n test: () => false,\n });\n};\n\nconst typeOrRelationValidator = yup.object().test({\n name: 'mustHaveTypeOrTarget',\n message: 'Attribute must have either a type or a target',\n test: () => false,\n});\n","import type { Schema } from '@strapi/types';\n\nexport const hasDefaultAttribute = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.DefaultOption<unknown> => {\n return 'default' in attribute;\n};\n","import type { Struct } from '@strapi/types';\nimport _ from 'lodash';\nimport { hasDefaultAttribute } from '../../utils/typeguards';\n\nexport const removeEmptyDefaults = (\n data: Partial<Struct.ContentTypeSchema> | Partial<Struct.ComponentSchema> | undefined\n) => {\n const { attributes } = data || {};\n\n Object.keys(attributes!).forEach((attributeName) => {\n const attribute = attributes![attributeName];\n\n if (hasDefaultAttribute(attribute) && attribute.default === '') {\n attribute.default = undefined;\n }\n });\n};\n\nexport const removeDeletedUIDTargetFields = (data: Struct.ContentTypeSchema) => {\n if (_.has(data, 'attributes')) {\n Object.values(data.attributes).forEach((attribute) => {\n if (\n attribute.type === 'uid' &&\n !_.isUndefined(attribute.targetField) &&\n !_.has(data.attributes, attribute.targetField)\n ) {\n attribute.targetField = undefined;\n }\n });\n }\n};\n","import _ from 'lodash';\nimport { yup, validateYupSchema } from '@strapi/utils';\n\nimport type { Struct } from '@strapi/types';\nimport { modelTypes, DEFAULT_TYPES } from '../../services/constants';\nimport { isValidCategoryName, isValidIcon } from './common';\nimport { createSchema } from './model-schema';\nimport { removeEmptyDefaults } from './data-transform';\n\nexport const VALID_RELATIONS = ['oneToOne', 'oneToMany'];\nexport const VALID_TYPES = [...DEFAULT_TYPES, 'component', 'customField'];\n\nexport const componentSchema = createSchema(VALID_TYPES, VALID_RELATIONS, {\n modelType: modelTypes.COMPONENT,\n})\n .shape({\n displayName: yup.string().min(1).required('displayName.required'),\n icon: yup.string().nullable().test(isValidIcon),\n category: yup.string().nullable().test(isValidCategoryName).required('category.required'),\n })\n .required()\n .noUnknown();\n\nexport const nestedComponentSchema = yup.array().of(\n componentSchema\n .shape({\n uid: yup.string(),\n tmpUID: yup.string(),\n })\n .test({\n name: 'mustHaveUIDOrTmpUID',\n message: 'Component must have a uid or a tmpUID',\n test(attr: unknown) {\n if (_.has(attr, 'uid') && _.has(attr, 'tmpUID')) return false;\n if (!_.has(attr, 'uid') && !_.has(attr, 'tmpUID')) return false;\n return true;\n },\n })\n .required()\n .noUnknown()\n);\n\nexport const componentInputSchema = yup\n .object({\n component: componentSchema,\n components: nestedComponentSchema,\n })\n .noUnknown();\n\nexport const validateComponentInput = validateYupSchema(componentInputSchema);\n\nconst updateComponentInputSchema = yup\n .object({\n component: componentSchema,\n components: nestedComponentSchema,\n })\n .noUnknown();\n\nexport const validateUpdateComponentInput = (data: {\n component?: Struct.ComponentSchema;\n components?: Struct.ComponentSchema[];\n}) => {\n if (_.has(data, 'component') && data.component) {\n removeEmptyDefaults(data.component);\n }\n\n if (_.has(data, 'components') && Array.isArray(data.components)) {\n data.components.forEach((data) => {\n if (_.has(data, 'uid')) {\n removeEmptyDefaults(data);\n }\n });\n }\n\n return validateYupSchema(updateComponentInputSchema)(data);\n};\n","import _ from 'lodash';\nimport type { Context } from 'koa';\nimport type { UID } from '@strapi/types';\nimport { getService } from '../utils';\nimport { validateComponentInput, validateUpdateComponentInput } from './validation/component';\n\n/**\n * Components controller\n */\n\nexport default {\n /**\n * GET /components handler\n * Returns a list of available components\n * @param {Object} ctx - koa context\n */\n async getComponents(ctx: Context) {\n const componentService = getService('components');\n const componentUIDs = Object.keys(strapi.components) as UID.Component[];\n\n const data = componentUIDs.map((uid) => {\n return componentService.formatComponent(strapi.components[uid]);\n });\n\n ctx.send({ data });\n },\n\n /**\n * GET /components/:uid\n * Returns a specific component\n * @param {Object} ctx - koa context\n */\n async getComponent(ctx: Context) {\n const { uid } = ctx.params;\n\n const component = strapi.components[uid];\n\n if (!component) {\n return ctx.send({ error: 'component.notFound' }, 404);\n }\n\n const componentService = getService('components');\n\n ctx.send({ data: componentService.formatComponent(component) });\n },\n\n /**\n * POST /components\n * Creates a component and returns its infos\n * @param {Object} ctx - koa context\n */\n async createComponent(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateComponentInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const componentService = getService('components');\n\n const component = await componentService.createComponent({\n component: body.component,\n components: body.components,\n });\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } }, 201);\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as any)?.message || 'Unknown error' }, 400);\n }\n },\n\n /**\n * PUT /components/:uid\n * Updates a component and return its infos\n * @param {Object} ctx - koa context - enhanced koa context\n */\n async updateComponent(ctx: Context) {\n const { uid } = ctx.params;\n const body = ctx.request.body as any;\n\n if (!_.has(strapi.components, uid)) {\n return ctx.send({ error: 'component.notFound' }, 404);\n }\n\n try {\n await validateUpdateComponentInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const componentService = getService('components');\n\n const component = (await componentService.editComponent(uid, {\n component: body.component,\n components: body.components,\n })) as any;\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n\n ctx.send({ error: (error as any)?.message || 'Unknown error' }, 400);\n }\n },\n\n /**\n * DELETE /components/:uid\n * Deletes a components and returns its old infos\n * @param {Object} ctx - koa context\n */\n async deleteComponent(ctx: Context) {\n const { uid } = ctx.params;\n\n if (!_.has(strapi.components, uid)) {\n return ctx.send({ error: 'component.notFound' }, 404);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const componentService = getService('components');\n\n const component = await componentService.deleteComponent(uid);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as any)?.message || 'Unknown error' }, 400);\n }\n },\n};\n","/* eslint-disable no-template-curly-in-string */ // yup templates need to be in this format\n\nimport { flatMap, getOr, has, snakeCase } from 'lodash/fp';\nimport { yup, validateYupSchema } from '@strapi/utils';\n\nimport type { Struct, Internal } from '@strapi/types';\nimport { getService } from '../../utils';\nimport { modelTypes, DEFAULT_TYPES, typeKinds } from '../../services/constants';\nimport { createSchema } from './model-schema';\nimport { removeEmptyDefaults, removeDeletedUIDTargetFields } from './data-transform';\nimport { nestedComponentSchema } from './component';\n\n// Input flattens some fields of the \"info\" into the root type\nexport type CreateContentTypeInput = {\n contentType?: Partial<Struct.ContentTypeSchema> & Partial<Struct.ContentTypeSchemaInfo>;\n components?: Array<\n Partial<Struct.ComponentSchema> &\n Partial<Struct.SchemaInfo> & { tmpUID?: Internal.UID.Component }\n >;\n singularName: Struct.ContentTypeSchemaInfo['singularName'];\n attributes: Struct.SchemaAttributes & Record<string, any>;\n kind: Struct.ContentTypeKind;\n collectionName?: Struct.CollectionTypeSchema['collectionName'];\n pluralName: Struct.ContentTypeSchemaInfo['pluralName'];\n displayName: Struct.ContentTypeSchemaInfo['displayName'];\n description: Struct.ContentTypeSchemaInfo['description'];\n options?: Struct.SchemaOptions;\n draftAndPublish?: Struct.SchemaOptions['draftAndPublish'];\n pluginOptions?: Struct.ContentTypeSchema['pluginOptions'];\n config?: object;\n};\n\n/**\n * Allowed relation per type kind\n */\nconst VALID_RELATIONS = {\n [typeKinds.SINGLE_TYPE]: [\n 'oneToOne',\n 'oneToMany',\n 'morphOne',\n 'morphMany',\n 'morphToOne',\n 'morphToMany',\n ],\n [typeKinds.COLLECTION_TYPE]: [\n 'oneToOne',\n 'oneToMany',\n 'manyToOne',\n 'manyToMany',\n 'morphOne',\n 'morphMany',\n 'morphToOne',\n 'morphToMany',\n ],\n} as const;\n\n/**\n * Allowed types\n */\nconst VALID_TYPES = [...DEFAULT_TYPES, 'uid', 'component', 'dynamiczone', 'customField'];\n\n/**\n * Returns a yup schema to validate a content type payload\n */\nconst createContentTypeSchema = (data: CreateContentTypeInput, { isEdition = false } = {}) => {\n const kind: keyof typeof VALID_RELATIONS = getOr(\n typeKinds.COLLECTION_TYPE,\n 'contentType.kind',\n data\n );\n const contentTypeSchema = createSchema(VALID_TYPES, VALID_RELATIONS[kind] || [], {\n modelType: modelTypes.CONTENT_TYPE,\n })\n .shape({\n displayName: yup.string().min(1).required(),\n singularName: yup\n .string()\n .min(1)\n .test(nameIsAvailable(isEdition))\n .test(forbiddenContentTypeNameValidator())\n .isKebabCase()\n .required(),\n pluralName: yup\n .string()\n .min(1)\n .test(nameIsAvailable(isEdition))\n .test(nameIsNotExistingCollectionName(isEdition)) // TODO: v5: require singularName to not match a collection name\n .test(forbiddenContentTypeNameValidator())\n .isKebabCase()\n .required(),\n })\n .test(\n 'singularName-not-equal-pluralName',\n '${path}: singularName and pluralName should be different',\n (value) => value.singularName !== value.pluralName\n );\n\n return yup\n .object({\n // FIXME .noUnknown(false) will strip off the unwanted properties without throwing an error\n // Why not having .noUnknown() ? Because we want to be able to add options relatable to EE features\n // without having any reference to them in CE.\n // Why not handle an \"options\" object in the content-type ? The admin panel needs lots of rework\n // to be able to send this options object instead of top-level attributes.\n // @nathan-pichon 20/02/2023\n contentType: contentTypeSchema.required().noUnknown(false),\n components: nestedComponentSchema,\n })\n .noUnknown();\n};\n\n/**\n * Validator for content type creation\n */\nexport const validateContentTypeInput = (data: CreateContentTypeInput) => {\n return validateYupSchema(createContentTypeSchema(data))(data);\n};\n\n/**\n * Validator for content type edition\n */\nexport const validateUpdateContentTypeInput = (data: CreateContentTypeInput) => {\n if (has('contentType', data)) {\n removeEmptyDefaults(data.contentType);\n removeDeletedUIDTargetFields(data.contentType as Struct.ContentTypeSchema);\n }\n\n if (has('components', data) && Array.isArray(data.components)) {\n data.components.forEach((comp) => {\n if (has('uid', comp)) {\n removeEmptyDefaults(comp as Struct.ComponentSchema);\n }\n });\n }\n\n return validateYupSchema(createContentTypeSchema(data, { isEdition: true }))(data);\n};\n\nconst forbiddenContentTypeNameValidator = () => {\n const reservedNames = getService('builder').getReservedNames().models;\n\n return {\n name: 'forbiddenContentTypeName',\n message: `Content Type name cannot be one of ${reservedNames.join(', ')}`,\n test(value: unknown) {\n if (typeof value !== 'string') {\n return true;\n }\n\n return !getService('builder').isReservedModelName(value);\n },\n };\n};\n\nconst nameIsAvailable = (isEdition: boolean) => {\n // TODO TS: if strapi.contentTypes (ie, ContentTypes) works as an ArrayLike and is used like this, we may want to ensure it is typed so that it can be without using as\n const usedNames = flatMap((ct: Struct.ContentTypeSchema) => {\n return [ct.info?.singularName, ct.info?.pluralName];\n })(strapi.contentTypes as any);\n\n return {\n name: 'nameAlreadyUsed',\n message: 'contentType: name `${value}` is already being used by another content type.',\n test(value: unknown) {\n // don't check on edition\n if (isEdition) return true;\n\n // ignore if not a string (will be caught in another validator)\n if (typeof value !== 'string') {\n return true;\n }\n\n // compare snake case to check the actual column names that will be used in the database\n return usedNames.every((usedName) => snakeCase(usedName) !== snakeCase(value));\n },\n };\n};\n\nconst nameIsNotExistingCollectionName = (isEdition: boolean) => {\n const usedNames = Object.keys(strapi.contentTypes).map(\n (key) => strapi.contentTypes[key as Internal.UID.ContentType].collectionName\n ) as string[];\n\n return {\n name: 'nameAlreadyUsed',\n message: 'contentType: name `${value}` is already being used by another content type.',\n test(value: unknown) {\n // don't check on edition\n if (isEdition) return true;\n\n // ignore if not a string (will be caught in another validator)\n if (typeof value !== 'string') {\n return true;\n }\n\n // compare snake case to check the actual column names that will be used in the database\n return usedNames.every((usedName) => snakeCase(usedName) !== snakeCase(value));\n },\n };\n};\n\n/**\n * Validates type kind\n */\nconst kindSchema = yup.string().oneOf([typeKinds.SINGLE_TYPE, typeKinds.COLLECTION_TYPE]);\n\nexport const validateKind = validateYupSchema(kindSchema);\n","import _ from 'lodash';\nimport type { Context } from 'koa';\nimport type {} from 'koa-body';\nimport type { Internal } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n validateContentTypeInput,\n validateUpdateContentTypeInput,\n validateKind,\n} from './validation/content-type';\n\nexport default {\n async getContentTypes(ctx: Context) {\n const { kind } = ctx.query;\n\n try {\n await validateKind(kind);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n const contentTypeService = getService('content-types');\n\n const contentTypes = Object.keys(strapi.contentTypes)\n .filter(\n (uid) =>\n !kind ||\n _.get(strapi.contentTypes[uid as Internal.UID.ContentType], 'kind', 'collectionType') ===\n kind\n )\n .map((uid) =>\n contentTypeService.formatContentType(strapi.contentTypes[uid as Internal.UID.ContentType])\n );\n\n ctx.send({\n data: contentTypes,\n });\n },\n\n getContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n const contentType = strapi.contentTypes[uid];\n\n if (!contentType) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n const contentTypeService = getService('content-types');\n\n ctx.send({ data: contentTypeService.formatContentType(contentType) });\n },\n\n async createContentType(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const contentType = await contentTypeService.createContentType({\n contentType: body.contentType,\n components: body.components,\n });\n\n const metricsPayload = {\n eventProperties: {\n kind: contentType.kind,\n },\n };\n\n if (_.isEmpty(strapi.apis)) {\n await strapi.telemetry.send('didCreateFirstContentType', metricsPayload);\n } else {\n await strapi.telemetry.send('didCreateContentType', metricsPayload);\n }\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: contentType.uid } }, 201);\n } catch (err) {\n strapi.log.error(err);\n await strapi.telemetry.send('didNotCreateContentType', {\n eventProperties: { error: (err as Error).message || err },\n });\n ctx.send({ error: (err as Error).message || 'Unknown error' }, 400);\n }\n },\n\n async updateContentType(ctx: Context) {\n const { uid } = ctx.params;\n const body = ctx.request.body as any;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n await validateUpdateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.editContentType(uid, {\n contentType: body.contentType,\n components: body.components,\n });\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } }, 201);\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n\n async deleteContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.deleteContentType(uid);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n};\n","import builder from './builder';\nimport componentCategories from './component-categories';\nimport components from './components';\nimport contentTypes from './content-types';\n\nconst exportObject = {\n builder,\n 'component-categories': componentCategories,\n components,\n 'content-types': contentTypes,\n};\n\nexport default exportObject;\n","export default {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/reserved-names',\n handler: 'builder.getReservedNames',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/content-types',\n handler: 'content-types.getContentTypes',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/content-types/:uid',\n handler: 'content-types.getContentType',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/content-types',\n handler: 'content-types.createContentType',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/content-types/:uid',\n handler: 'content-types.updateContentType',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/content-types/:uid',\n handler: 'content-types.deleteContentType',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/components',\n handler: 'components.getComponents',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/components/:uid',\n handler: 'components.getComponent',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/components',\n handler: 'components.createComponent',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/components/:uid',\n handler: 'components.updateComponent',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/components/:uid',\n handler: 'components.deleteComponent',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/component-categories/:name',\n handler: 'component-categories.editCategory',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/component-categories/:name',\n handler: 'component-categories.deleteCategory',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n ],\n};\n","export default {\n type: 'content-api',\n routes: [\n {\n method: 'GET',\n path: '/content-types',\n handler: 'content-types.getContentTypes',\n },\n {\n method: 'GET',\n path: '/content-types/:uid',\n handler: 'content-types.getContentType',\n },\n {\n method: 'GET',\n path: '/components',\n handler: 'components.getComponents',\n },\n {\n method: 'GET',\n path: '/components/:uid',\n handler: 'components.getComponent',\n },\n ],\n};\n","import admin from './admin';\nimport contentApi from './content-api';\n\nexport default {\n admin,\n 'content-api': contentApi,\n};\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport '@strapi/types';\n\nimport config from './config';\nimport bootstrap from './bootstrap';\nimport services from './services';\nimport controllers from './controllers';\nimport routes from './routes';\n\nexport default () => ({\n config,\n bootstrap,\n services,\n controllers,\n routes,\n});\n"],"names":["strapi","ApplicationError","errors","_","utils","path","uid","fse","createComponentBuilder","strings","components","pluralize","join","contentTypes","createContentTypeBuilder","getOr","contentTypesUtils","builder","options","apiHandler","get","component","has","snakeCase","componentCategories","yup","validateYupSchema","isUndefined","VALID_RELATIONS","VALID_TYPES","data","flatMap","controllers"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../server/src/config.ts","../../server/src/bootstrap.ts","../../server/src/utils/attributes.ts","../../server/src/services/schema-builder/schema-handler.ts","../../server/src/services/schema-builder/component-builder.ts","../../server/src/services/constants.ts","../../server/src/services/schema-builder/content-type-builder.ts","../../server/src/services/schema-builder/index.ts","../../server/src/services/content-types.ts","../../server/src/services/components.ts","../../server/src/services/component-categories.ts","../../server/src/services/builder.ts","../../server/src/services/api-handler.ts","../../server/src/services/index.ts","../../server/src/utils/index.ts","../../server/src/controllers/builder.ts","../../server/src/controllers/validation/common.ts","../../server/src/controllers/validation/component-category.ts","../../server/src/controllers/component-categories.ts","../../server/src/controllers/validation/types.ts","../../server/src/controllers/validation/relations.ts","../../server/src/controllers/validation/model-schema.ts","../../server/src/utils/typeguards.ts","../../server/src/controllers/validation/data-transform.ts","../../server/src/controllers/validation/component.ts","../../server/src/controllers/components.ts","../../server/src/controllers/validation/content-type.ts","../../server/src/controllers/content-types.ts","../../server/src/controllers/index.ts","../../server/src/routes/admin.ts","../../server/src/routes/content-api.ts","../../server/src/routes/index.ts","../../server/src/index.ts"],"sourcesContent":["export default {\n default: {},\n validator() {},\n};\n","import type { Core } from '@strapi/types';\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n const actions = [\n {\n section: 'plugins',\n displayName: 'Read',\n uid: 'read',\n pluginName: 'content-type-builder',\n },\n ];\n\n await strapi.service('admin::permission').actionProvider.registerMany(actions);\n};\n","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","import path from 'path';\nimport type { Internal, Struct } from '@strapi/types';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\n\nimport { isConfigurable } from '../../utils/attributes';\n\nexport type Infos = {\n category?: string;\n modelName?: string;\n plugin?: string;\n uid?: Internal.UID.ContentType;\n dir: string;\n filename: string;\n schema?: Struct.ContentTypeSchema;\n};\n\nexport default function createSchemaHandler(infos: Infos) {\n const { category, modelName, plugin, uid, dir, filename, schema } = infos;\n\n const initialState = {\n modelName,\n plugin,\n category,\n uid,\n dir,\n filename,\n schema:\n schema ||\n ({\n info: {},\n options: {},\n attributes: {},\n } as Struct.ContentTypeSchema),\n };\n\n const state = _.cloneDeep(initialState);\n\n // always keep it the same to rollback\n Object.freeze(initialState.schema);\n\n let modified = false;\n let deleted = false;\n\n return {\n get modelName() {\n return initialState.modelName;\n },\n\n get plugin() {\n return initialState.plugin;\n },\n\n get category() {\n return initialState.category;\n },\n\n get kind() {\n return _.get(state.schema, 'kind', 'collectionType');\n },\n\n get uid() {\n return state.uid;\n },\n\n get writable() {\n return _.get(state, 'plugin') !== 'admin';\n },\n\n setUID(val: Internal.UID.ContentType) {\n modified = true;\n\n state.uid = val;\n return this;\n },\n\n setDir(val: string) {\n modified = true;\n\n state.dir = val;\n return this;\n },\n\n get schema() {\n return _.cloneDeep(state.schema);\n },\n\n setSchema(val: Struct.ContentTypeSchema) {\n modified = true;\n\n state.schema = _.cloneDeep(val);\n return this;\n },\n\n // get a particular path inside the schema\n get(path: string[]) {\n return _.get(state.schema, path);\n },\n\n // set a particular path inside the schema\n set(path: string[] | string, val: unknown) {\n if (!state.schema) return this;\n\n modified = true;\n\n const value = _.defaultTo(val, _.get(state.schema, path));\n _.set(state.schema, path, value);\n\n return this;\n },\n\n // delete a particular path inside the schema\n unset(path: string[]) {\n modified = true;\n\n _.unset(state.schema, path);\n\n return this;\n },\n\n delete() {\n deleted = true;\n return this;\n },\n\n getAttribute(key: string) {\n return this.get(['attributes', key]);\n },\n\n setAttribute(key: string, attribute: any) {\n return this.set(['attributes', key], attribute);\n },\n\n deleteAttribute(key: string) {\n return this.unset(['attributes', key]);\n },\n\n setAttributes(newAttributes: Struct.SchemaAttributes) {\n if (!this.schema) return this;\n\n // delete old configurable attributes\n for (const key in this.schema.attributes) {\n if (isConfigurable((this.schema.attributes as any)[key])) {\n this.deleteAttribute(key);\n }\n }\n\n // set new Attributes\n for (const key of Object.keys(newAttributes)) {\n this.setAttribute(key, newAttributes[key as keyof Struct.SchemaAttributes]);\n }\n\n return this;\n },\n\n removeContentType(uid: Internal.UID.ContentType) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attribute = attributes[key];\n\n if (attribute.target === uid) {\n this.deleteAttribute(key);\n }\n });\n\n return this;\n },\n\n // utils\n removeComponent(uid: Internal.UID.Component) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attr = attributes[key];\n\n if (attr.type === 'component' && attr.component === uid) {\n this.deleteAttribute(key);\n }\n\n if (\n attr.type === 'dynamiczone' &&\n Array.isArray(attr.components) &&\n attr.components.includes(uid)\n ) {\n const updatedComponentList = attributes[key].components.filter(\n (val: string) => val !== uid\n );\n this.set(['attributes', key, 'components'], updatedComponentList);\n }\n });\n\n return this;\n },\n\n updateComponent(uid: Internal.UID.Component, newUID: Internal.UID.Component) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attr = attributes[key];\n\n if (attr.type === 'component' && attr.component === uid) {\n this.set(['attributes', key, 'component'], newUID);\n }\n\n if (\n attr.type === 'dynamiczone' &&\n Array.isArray(attr.components) &&\n attr.components.includes(uid)\n ) {\n const updatedComponentList = attr.components.map((val: string) =>\n val === uid ? newUID : val\n );\n\n this.set(['attributes', key, 'components'], updatedComponentList);\n }\n });\n\n return this;\n },\n\n // save the schema to disk\n async flush() {\n if (!this.writable) {\n return;\n }\n\n const initialPath = path.join(initialState.dir, initialState.filename);\n const filePath = path.join(state.dir, state.filename);\n\n if (deleted) {\n await fse.remove(initialPath);\n\n const list = await fse.readdir(initialState.dir);\n if (list.length === 0) {\n await fse.remove(initialState.dir);\n }\n\n return;\n }\n\n if (modified) {\n if (!state.schema) return Promise.resolve();\n\n await fse.ensureFile(filePath);\n\n await fse.writeJSON(\n filePath,\n {\n kind: state.schema.kind,\n collectionName: state.schema.collectionName,\n info: state.schema.info,\n options: state.schema.options,\n pluginOptions: state.schema.pluginOptions,\n attributes: state.schema.attributes,\n config: (state.schema as any).config,\n },\n { spaces: 2 }\n );\n\n // remove from oldPath\n if (initialPath !== filePath) {\n await fse.remove(initialPath);\n\n const list = await fse.readdir(initialState.dir);\n if (list.length === 0) {\n await fse.remove(initialState.dir);\n }\n }\n\n return;\n }\n\n return Promise.resolve();\n },\n\n // reset the schema to its initial value\n async rollback() {\n if (!this.writable) {\n return;\n }\n\n const initialPath = path.join(initialState.dir, initialState.filename);\n const filePath = path.join(state.dir, state.filename);\n\n // it was a creation so it needs to be deleted\n if (!initialState.uid) {\n await fse.remove(filePath);\n\n const list = await fse.readdir(state.dir);\n if (list.length === 0) {\n await fse.remove(state.dir);\n }\n return;\n }\n\n if (modified || deleted) {\n await fse.ensureFile(initialPath);\n await fse.writeJSON(initialPath, initialState.schema, { spaces: 2 });\n\n // remove\n if (initialPath !== filePath) {\n await fse.remove(filePath);\n\n const list = await fse.readdir(state.dir);\n if (list.length === 0) {\n await fse.remove(state.dir);\n }\n }\n }\n\n return Promise.resolve();\n },\n };\n}\n","import path from 'path';\nimport type { Internal } from '@strapi/types';\nimport _ from 'lodash';\nimport pluralize from 'pluralize';\n\nimport { strings, errors } from '@strapi/utils';\nimport { isConfigurable } from '../../utils/attributes';\nimport createSchemaHandler from './schema-handler';\n\nconst { ApplicationError } = errors;\n\nexport default function createComponentBuilder() {\n return {\n createComponentUID({ category, displayName }: any) {\n return `${strings.nameToSlug(category)}.${strings.nameToSlug(displayName)}`;\n },\n\n createNewComponentUIDMap(components: object[]) {\n return components.reduce((uidMap: any, component: any) => {\n uidMap[component.tmpUID] = this.createComponentUID(component);\n return uidMap;\n }, {});\n },\n\n /**\n * create a component in the tmpComponent map\n */\n createComponent(this: any, infos: any) {\n const uid = this.createComponentUID(infos);\n\n if (this.components.has(uid)) {\n throw new ApplicationError('component.alreadyExists');\n }\n\n const handler = createSchemaHandler({\n dir: path.join(strapi.dirs.app.components, strings.nameToSlug(infos.category)),\n filename: `${strings.nameToSlug(infos.displayName)}.json`,\n });\n\n // TODO: create a utility for this\n // Duplicate in admin/src/components/FormModal/forms/utils/createCollectionName.ts\n const collectionName = `components_${strings.nameToCollectionName(\n infos.category\n )}_${strings.nameToCollectionName(pluralize(infos.displayName))}`;\n\n this.components.forEach((compo: any) => {\n if (compo.schema.collectionName === collectionName) {\n throw new ApplicationError('component.alreadyExists');\n }\n });\n\n handler\n .setUID(uid)\n .set('collectionName', collectionName)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'icon'], infos.icon)\n .set(['info', 'description'], infos.description)\n .set('pluginOptions', infos.pluginOptions)\n .set('config', infos.config)\n .setAttributes(this.convertAttributes(infos.attributes));\n\n if (this.components.size === 0) {\n strapi.telemetry.send('didCreateFirstComponent');\n } else {\n strapi.telemetry.send('didCreateComponent');\n }\n\n this.components.set(uid, handler);\n\n return handler;\n },\n\n /**\n * create a component in the tmpComponent map\n */\n editComponent(this: any, infos: any) {\n const { uid } = infos;\n\n if (!this.components.has(uid)) {\n throw new errors.ApplicationError('component.notFound');\n }\n\n const component = this.components.get(uid);\n\n const [, nameUID] = uid.split('.');\n\n const newCategory = strings.nameToSlug(infos.category);\n const newUID = `${newCategory}.${nameUID}`;\n\n if (newUID !== uid && this.components.has(newUID)) {\n throw new errors.ApplicationError('component.edit.alreadyExists');\n }\n\n const newDir = path.join(strapi.dirs.app.components, newCategory);\n\n const oldAttributes = component.schema.attributes;\n\n const newAttributes = _.omitBy(infos.attributes, (attr, key) => {\n return _.has(oldAttributes, key) && !isConfigurable(oldAttributes[key]);\n });\n\n component\n .setUID(newUID)\n .setDir(newDir)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'icon'], infos.icon)\n .set(['info', 'description'], infos.description)\n .set('pluginOptions', infos.pluginOptions)\n .setAttributes(this.convertAttributes(newAttributes));\n\n if (newUID !== uid) {\n this.components.forEach((compo: any) => {\n compo.updateComponent(uid, newUID);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.updateComponent(uid, newUID);\n });\n }\n\n return component;\n },\n\n deleteComponent(this: any, uid: Internal.UID.Component) {\n if (!this.components.has(uid)) {\n throw new errors.ApplicationError('component.notFound');\n }\n\n this.components.forEach((compo: any) => {\n compo.removeComponent(uid);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.removeComponent(uid);\n });\n\n return this.components.get(uid).delete();\n },\n };\n}\n","export const modelTypes = {\n CONTENT_TYPE: 'CONTENT_TYPE',\n COMPONENT: 'COMPONENT',\n} as const;\n\nexport const typeKinds = {\n SINGLE_TYPE: 'singleType',\n COLLECTION_TYPE: 'collectionType',\n} as const;\n\nexport const DEFAULT_TYPES = [\n // advanced types\n 'media',\n\n // scalar types\n 'string',\n 'text',\n 'richtext',\n 'blocks',\n 'json',\n 'enumeration',\n 'password',\n 'email',\n 'integer',\n 'biginteger',\n 'float',\n 'decimal',\n 'date',\n 'time',\n 'datetime',\n 'timestamp',\n 'boolean',\n\n 'relation',\n] as const;\n\nexport const VALID_UID_TARGETS = ['string', 'text'] as const;\n\nexport const coreUids = {\n STRAPI_USER: 'admin::user',\n PREFIX: 'strapi::',\n} as const;\n\nexport const pluginsUids = {\n UPLOAD_FILE: 'plugin::upload.file',\n} as const;\n","import path from 'path';\nimport _ from 'lodash';\n\nimport { strings, errors } from '@strapi/utils';\nimport type { Schema, Internal } from '@strapi/types';\nimport { isRelation, isConfigurable } from '../../utils/attributes';\nimport { typeKinds } from '../constants';\nimport createSchemaHandler from './schema-handler';\nimport { CreateContentTypeInput } from '../../controllers/validation/content-type';\n\nconst { ApplicationError } = errors;\n\nconst reuseUnsetPreviousProperties = (\n newAttribute: Schema.Attribute.AnyAttribute,\n oldAttribute: Schema.Attribute.AnyAttribute\n) => {\n _.defaults(\n newAttribute,\n _.omit(oldAttribute, [\n 'configurable',\n 'required',\n 'private',\n 'unique',\n 'pluginOptions',\n 'inversedBy',\n 'mappedBy',\n ])\n );\n};\n\nexport default function createComponentBuilder() {\n return {\n setRelation(this: any, { key, uid, attribute }: any) {\n if (!_.has(attribute, 'target')) {\n return;\n }\n\n const targetCT = this.contentTypes.get(attribute.target);\n const targetAttribute = targetCT.getAttribute(attribute.targetAttribute);\n\n if (!attribute.targetAttribute) {\n return;\n }\n\n targetCT.setAttribute(\n attribute.targetAttribute,\n generateRelation({ key, attribute, uid, targetAttribute })\n );\n },\n\n unsetRelation(this: any, attribute: any) {\n if (!_.has(attribute, 'target')) {\n return;\n }\n\n const targetCT = this.contentTypes.get(attribute.target);\n\n const targetAttributeName = attribute.inversedBy || attribute.mappedBy;\n const targetAttribute = targetCT.getAttribute(targetAttributeName);\n\n if (!targetAttribute) return;\n\n return targetCT.deleteAttribute(targetAttributeName);\n },\n\n /**\n * Creates a content type in memory to be written to files later on\n */\n createContentType(this: any, infos: CreateContentTypeInput) {\n const uid = createContentTypeUID(infos);\n\n if (this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.alreadyExists');\n }\n\n const contentType = createSchemaHandler({\n modelName: infos.singularName,\n dir: path.join(\n strapi.dirs.app.api,\n infos.singularName,\n 'content-types',\n infos.singularName\n ),\n filename: `schema.json`,\n });\n\n this.contentTypes.set(uid, contentType);\n\n // support self referencing content type relation\n Object.keys(infos.attributes).forEach((key) => {\n const { target } = infos.attributes[key];\n if (target === '__self__') {\n infos.attributes[key].target = uid;\n }\n });\n\n contentType\n .setUID(uid)\n .set('kind', infos.kind || typeKinds.COLLECTION_TYPE)\n .set(\n 'collectionName',\n infos.collectionName || strings.nameToCollectionName(infos.pluralName)\n )\n .set('info', {\n singularName: infos.singularName,\n pluralName: infos.pluralName,\n displayName: infos.displayName,\n description: infos.description,\n })\n .set('options', {\n ...(infos.options ?? {}),\n draftAndPublish: infos.draftAndPublish,\n })\n .set('pluginOptions', infos.pluginOptions)\n .set('config', infos.config)\n .setAttributes(this.convertAttributes(infos.attributes));\n\n Object.keys(infos.attributes).forEach((key) => {\n const attribute = infos.attributes[key];\n\n if (isRelation(attribute)) {\n if (['manyToMany', 'oneToOne'].includes(attribute.relation)) {\n if (attribute.target === uid && attribute.targetAttribute !== undefined) {\n // self referencing relation\n const targetAttribute = infos.attributes[attribute.targetAttribute];\n\n if (targetAttribute.dominant === undefined) {\n attribute.dominant = true;\n } else {\n attribute.dominant = false;\n }\n } else {\n attribute.dominant = true;\n }\n }\n\n this.setRelation({\n key,\n uid,\n attribute,\n });\n }\n });\n\n return contentType;\n },\n\n editContentType(this: any, infos: any) {\n const { uid } = infos;\n\n if (!this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.notFound');\n }\n\n const contentType = this.contentTypes.get(uid);\n\n const oldAttributes = contentType.schema.attributes;\n\n const newAttributes = _.omitBy(infos.attributes, (attr, key) => {\n return _.has(oldAttributes, key) && !isConfigurable(oldAttributes[key]);\n });\n\n const newKeys = _.difference(Object.keys(newAttributes), Object.keys(oldAttributes));\n const deletedKeys = _.difference(Object.keys(oldAttributes), Object.keys(newAttributes));\n const remainingKeys = _.intersection(Object.keys(oldAttributes), Object.keys(newAttributes));\n\n // remove old relations\n deletedKeys.forEach((key) => {\n const attribute = oldAttributes[key];\n\n const targetAttributeName = attribute.inversedBy || attribute.mappedBy;\n\n // if the old relation has a target attribute. we need to remove it in the target type\n if (isConfigurable(attribute) && isRelation(attribute) && !_.isNil(targetAttributeName)) {\n this.unsetRelation(attribute);\n }\n });\n\n remainingKeys.forEach((key) => {\n const oldAttribute = oldAttributes[key];\n const newAttribute = newAttributes[key];\n\n if (!isRelation(oldAttribute) && isRelation(newAttribute)) {\n return this.setRelation({\n key,\n uid,\n attribute: newAttributes[key],\n });\n }\n\n if (isRelation(oldAttribute) && !isRelation(newAttribute)) {\n return this.unsetRelation(oldAttribute);\n }\n\n if (isRelation(oldAttribute) && isRelation(newAttribute)) {\n const oldTargetAttributeName = oldAttribute.inversedBy || oldAttribute.mappedBy;\n\n const sameRelation = oldAttribute.relation === newAttribute.relation;\n const targetAttributeHasChanged = oldTargetAttributeName !== newAttribute.targetAttribute;\n\n if (!sameRelation || targetAttributeHasChanged) {\n this.unsetRelation(oldAttribute);\n }\n\n // keep extra options that were set manually on oldAttribute\n reuseUnsetPreviousProperties(newAttribute, oldAttribute);\n\n if (oldAttribute.inversedBy) {\n newAttribute.dominant = true;\n } else if (oldAttribute.mappedBy) {\n newAttribute.dominant = false;\n }\n\n return this.setRelation({\n key,\n uid,\n attribute: newAttribute,\n });\n }\n });\n\n // add new relations\n newKeys.forEach((key) => {\n const attribute = newAttributes[key];\n\n if (isRelation(attribute)) {\n if (['manyToMany', 'oneToOne'].includes(attribute.relation)) {\n if (attribute.target === uid && attribute.targetAttribute !== undefined) {\n // self referencing relation\n const targetAttribute = newAttributes[attribute.targetAttribute];\n\n if (targetAttribute.dominant === undefined) {\n attribute.dominant = true;\n } else {\n attribute.dominant = false;\n }\n } else {\n attribute.dominant = true;\n }\n }\n\n this.setRelation({\n key,\n uid,\n attribute,\n });\n }\n });\n\n contentType\n .set('kind', infos.kind || contentType.schema.kind)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'description'], infos.description)\n .set('options', {\n ...(infos.options ?? {}),\n draftAndPublish: infos.draftAndPublish,\n })\n .set('pluginOptions', infos.pluginOptions)\n .setAttributes(this.convertAttributes(newAttributes));\n\n return contentType;\n },\n\n deleteContentType(this: any, uid: string) {\n if (!this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.notFound');\n }\n\n this.components.forEach((compo: any) => {\n compo.removeContentType(uid);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.removeContentType(uid);\n });\n\n return this.contentTypes.get(uid).delete();\n },\n };\n}\n\n/**\n * Returns a uid from a content type infos\n *\n * @param {object} options options\n * @param {string} options.singularName content-type singularName\n * @returns {string} uid\n */\nconst createContentTypeUID = ({\n singularName,\n}: {\n singularName: string;\n}): Internal.UID.ContentType => `api::${singularName}.${singularName}`;\n\nconst generateRelation = ({ key, attribute, uid, targetAttribute = {} }: any) => {\n const opts: any = {\n type: 'relation',\n target: uid,\n autoPopulate: targetAttribute.autoPopulate,\n private: targetAttribute.private || undefined,\n pluginOptions: targetAttribute.pluginOptions || undefined,\n };\n\n switch (attribute.relation) {\n case 'oneToOne': {\n opts.relation = 'oneToOne';\n\n if (attribute.dominant) {\n opts.mappedBy = key;\n } else {\n opts.inversedBy = key;\n }\n break;\n }\n case 'oneToMany': {\n opts.relation = 'manyToOne';\n opts.inversedBy = key;\n break;\n }\n case 'manyToOne': {\n opts.relation = 'oneToMany';\n opts.mappedBy = key;\n break;\n }\n case 'manyToMany': {\n opts.relation = 'manyToMany';\n\n if (attribute.dominant) {\n opts.mappedBy = key;\n } else {\n opts.inversedBy = key;\n }\n\n break;\n }\n default:\n }\n\n // we do this just to make sure we have the same key order when writing to files\n const { type, relation, target, ...restOptions } = opts;\n\n return {\n type,\n relation,\n target,\n ...restOptions,\n };\n};\n","import { join } from 'path';\nimport _ from 'lodash';\n\nimport { errors } from '@strapi/utils';\nimport createSchemaHandler from './schema-handler';\nimport createComponentBuilder from './component-builder';\nimport createContentTypeBuilder from './content-type-builder';\n\n/**\n * Creates a content type schema builder instance\n */\nexport default function createBuilder() {\n const components = Object.values(strapi.components).map((componentInput) => ({\n category: componentInput.category,\n modelName: componentInput.modelName,\n plugin: componentInput.modelName,\n uid: componentInput.uid,\n filename: componentInput.__filename__,\n dir: join(strapi.dirs.app.components, componentInput.category),\n schema: componentInput.__schema__,\n config: componentInput.config,\n }));\n\n const contentTypes = Object.values<any>(strapi.contentTypes).map((contentTypeInput) => {\n const dir = contentTypeInput.plugin\n ? join(\n strapi.dirs.app.extensions,\n contentTypeInput.plugin,\n 'content-types',\n contentTypeInput.info.singularName\n )\n : join(\n strapi.dirs.app.api,\n contentTypeInput.apiName,\n 'content-types',\n contentTypeInput.info.singularName\n );\n\n return {\n modelName: contentTypeInput.modelName,\n plugin: contentTypeInput.plugin,\n uid: contentTypeInput.uid,\n filename: 'schema.json',\n dir,\n schema: contentTypeInput.__schema__,\n config: contentTypeInput.config,\n };\n });\n\n return createSchemaBuilder({\n components,\n contentTypes,\n });\n}\n\ntype SchemaBuilderOptions = {\n components: any;\n contentTypes: any;\n};\n\nfunction createSchemaBuilder({ components, contentTypes }: SchemaBuilderOptions) {\n const tmpComponents = new Map();\n const tmpContentTypes = new Map();\n\n // init temporary ContentTypes\n Object.keys(contentTypes).forEach((key) => {\n tmpContentTypes.set(contentTypes[key].uid, createSchemaHandler(contentTypes[key]));\n });\n\n // init temporary components\n Object.keys(components).forEach((key) => {\n tmpComponents.set(components[key].uid, createSchemaHandler(components[key]));\n });\n\n return {\n get components() {\n return tmpComponents;\n },\n get contentTypes() {\n return tmpContentTypes;\n },\n\n /**\n * Convert Attributes received from the API to the right syntax\n */\n convertAttributes(attributes: any) {\n return Object.keys(attributes).reduce(\n (acc, key) => {\n const attribute = attributes[key];\n\n const { configurable, private: isPrivate } = attribute;\n\n const baseProperties = {\n private: isPrivate === true ? true : undefined,\n configurable: configurable === false ? false : undefined,\n };\n\n if (attribute.type === 'relation') {\n const { target, relation, targetAttribute, dominant, ...restOfProperties } = attribute;\n\n const attr = {\n type: 'relation',\n relation,\n target,\n ...restOfProperties,\n ...baseProperties,\n };\n\n acc[key] = attr;\n\n if (target && !this.contentTypes.has(target)) {\n throw new errors.ApplicationError(`target: ${target} does not exist`);\n }\n\n if (_.isNil(targetAttribute)) {\n return acc;\n }\n\n if (['oneToOne', 'manyToMany'].includes(relation) && dominant === true) {\n attr.inversedBy = targetAttribute;\n } else if (['oneToOne', 'manyToMany'].includes(relation) && dominant === false) {\n attr.mappedBy = targetAttribute;\n } else if (['oneToOne', 'manyToOne', 'manyToMany'].includes(relation)) {\n attr.inversedBy = targetAttribute;\n } else if (['oneToMany'].includes(relation)) {\n attr.mappedBy = targetAttribute;\n }\n\n return acc;\n }\n\n acc[key] = {\n ...attribute,\n ...baseProperties,\n };\n\n return acc;\n },\n {} as Record<string, unknown>\n );\n },\n\n ...createComponentBuilder(),\n ...createContentTypeBuilder(),\n\n /**\n * Write all type to files\n */\n writeFiles() {\n const schemas = [\n ...Array.from(tmpComponents.values()),\n ...Array.from(tmpContentTypes.values()),\n ];\n\n return Promise.all(schemas.map((schema) => schema.flush()))\n .catch((error) => {\n strapi.log.error('Error writing schema files');\n strapi.log.error(error);\n return this.rollback();\n })\n .catch((error) => {\n strapi.log.error(\n 'Error rolling back schema files. You might need to fix your files manually'\n );\n strapi.log.error(error);\n\n throw new errors.ApplicationError('Invalid schema edition');\n });\n },\n\n /**\n * rollback all files\n */\n rollback() {\n return Promise.all(\n [...Array.from(tmpComponents.values()), ...Array.from(tmpContentTypes.values())].map(\n (schema) => schema.rollback()\n )\n );\n },\n };\n}\n","import _ from 'lodash';\nimport { getOr } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils, errors } from '@strapi/utils';\nimport type { UID, Struct } from '@strapi/types';\nimport { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes';\nimport createBuilder from './schema-builder';\nimport { coreUids, pluginsUids } from './constants';\n\nconst { ApplicationError } = errors;\n\nexport const isContentTypeVisible = (model: Struct.ContentTypeSchema) =>\n getOr(true, 'pluginOptions.content-type-builder.visible', model) === true;\n\nexport const getRestrictRelationsTo = (contentType: Struct.ContentTypeSchema) => {\n const { uid } = contentType;\n if (uid === coreUids.STRAPI_USER) {\n // TODO: replace with an obj { relation: 'x', bidirectional: true|false }\n return ['oneWay', 'manyWay'];\n }\n\n if (\n uid.startsWith(coreUids.PREFIX) ||\n uid === pluginsUids.UPLOAD_FILE ||\n !isContentTypeVisible(contentType)\n ) {\n return [];\n }\n\n return null;\n};\n\n/**\n * Format a contentType info to be used by the front-end\n */\nexport const formatContentType = (contentType: any) => {\n const { uid, kind, modelName, plugin, collectionName, info } = contentType;\n\n return {\n uid,\n plugin,\n apiID: modelName,\n schema: {\n ...contentTypesUtils.getOptions(contentType),\n displayName: info.displayName,\n singularName: info.singularName,\n pluralName: info.pluralName,\n description: _.get(info, 'description', ''),\n pluginOptions: contentType.pluginOptions,\n kind: kind || 'collectionType',\n collectionName,\n attributes: formatAttributes(contentType),\n visible: isContentTypeVisible(contentType),\n restrictRelationsTo: getRestrictRelationsTo(contentType),\n },\n };\n};\n\nexport const createContentTypes = async (contentTypes: any[]) => {\n const builder = createBuilder();\n const createdContentTypes: any[] = [];\n\n for (const contentType of contentTypes) {\n createdContentTypes.push(await createContentType(contentType, { defaultBuilder: builder }));\n }\n\n await builder.writeFiles();\n\n return createdContentTypes;\n};\n\ntype CreateContentTypeOptions = {\n defaultBuilder?: any; // TODO\n};\n\n/**\n * Creates a content type and handle the nested components sent with it\n */\nexport const createContentType = async (\n { contentType, components }: any,\n options: CreateContentTypeOptions = {}\n) => {\n const builder = options.defaultBuilder || createBuilder();\n const uidMap = builder.createNewComponentUIDMap(components || []);\n\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const newContentType = builder.createContentType(replaceTmpUIDs(contentType));\n\n // allow components to target the new contentType\n const targetContentType = (infos: any) => {\n Object.keys(infos.attributes).forEach((key) => {\n const { target } = infos.attributes[key];\n if (target === '__contentType__') {\n infos.attributes[key].target = newContentType.uid;\n }\n });\n\n return infos;\n };\n\n components?.forEach((component: any) => {\n const options = replaceTmpUIDs(targetContentType(component));\n\n if (!_.has(component, 'uid')) {\n return builder.createComponent(options);\n }\n\n return builder.editComponent(options);\n });\n\n // generate api skeleton\n await generateAPI({\n displayName: contentType!.displayName || contentType!.info.displayName,\n singularName: contentType!.singularName,\n pluralName: contentType!.pluralName,\n kind: contentType!.kind,\n });\n\n if (!options.defaultBuilder) {\n await builder.writeFiles();\n }\n\n strapi.eventHub.emit('content-type.create', { contentType: newContentType });\n\n return newContentType;\n};\n\n/**\n * Generate an API skeleton\n */\nexport const generateAPI = ({\n singularName,\n kind = 'collectionType',\n pluralName,\n displayName,\n}: any) => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const strapiGenerators = require('@strapi/generators');\n return strapiGenerators.generate(\n 'content-type',\n {\n kind,\n singularName,\n id: singularName,\n pluralName,\n displayName,\n destination: 'new',\n bootstrapApi: true,\n attributes: [],\n },\n { dir: strapi.dirs.app.root }\n );\n};\n\n/**\n * Edits a contentType and handle the nested contentTypes sent with it\n */\nexport const editContentType = async (\n uid: UID.ContentType,\n { contentType, components = [] }: any\n) => {\n const builder = createBuilder();\n\n const previousSchema = builder.contentTypes.get(uid).schema;\n const previousKind = previousSchema.kind;\n const newKind = contentType.kind || previousKind;\n\n // Restore non-visible attributes from previous schema\n const previousAttributes = previousSchema.attributes;\n const prevNonVisibleAttributes = contentTypesUtils\n .getNonVisibleAttributes(previousSchema)\n .reduce((acc, key) => {\n if (key in previousAttributes) {\n acc[key] = previousAttributes[key];\n }\n\n return acc;\n }, {} as any);\n contentType.attributes = _.merge(prevNonVisibleAttributes, contentType.attributes);\n\n if (newKind !== previousKind && newKind === 'singleType') {\n const entryCount = await strapi.db.query(uid).count();\n if (entryCount > 1) {\n throw new ApplicationError(\n 'You cannot convert a collectionType to a singleType when having multiple entries in DB'\n );\n }\n }\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const updatedContentType = builder.editContentType({\n uid,\n ...replaceTmpUIDs(contentType),\n });\n\n components.forEach((component: any) => {\n if (!_.has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n if (newKind !== previousKind) {\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n await apiHandler.backup(uid);\n\n try {\n await apiHandler.clear(uid);\n\n // generate new api skeleton\n await generateAPI({\n displayName: updatedContentType.schema.info.displayName,\n singularName: updatedContentType.schema.info.singularName,\n pluralName: updatedContentType.schema.info.pluralName,\n kind: updatedContentType.schema.kind,\n });\n\n await builder.writeFiles();\n } catch (error) {\n strapi.log.error(error);\n await apiHandler.rollback(uid);\n }\n\n return updatedContentType;\n }\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('content-type.update', { contentType: updatedContentType });\n\n return updatedContentType;\n};\n\nexport const deleteContentTypes = async (uids: UID.ContentType[]) => {\n const builder = createBuilder();\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n\n for (const uid of uids) {\n await deleteContentType(uid, builder);\n }\n\n await builder.writeFiles();\n for (const uid of uids) {\n try {\n await apiHandler.clear(uid);\n } catch (error) {\n strapi.log.error(error);\n await apiHandler.rollback(uid);\n }\n }\n};\n\n/**\n * Deletes a content type and the api files related to it\n */\nexport const deleteContentType = async (uid: UID.ContentType, defaultBuilder: any = undefined) => {\n const builder = defaultBuilder || createBuilder();\n // make a backup\n const apiHandler = strapi.plugin('content-type-builder').service('api-handler');\n await apiHandler.backup(uid);\n\n const contentType = builder.deleteContentType(uid);\n\n if (!defaultBuilder) {\n try {\n await builder.writeFiles();\n await apiHandler.clear(uid);\n } catch (error) {\n await apiHandler.rollback(uid);\n }\n }\n\n strapi.eventHub.emit('content-type.delete', { contentType });\n\n return contentType;\n};\n","import type { Internal, Struct } from '@strapi/types';\nimport { get, has } from 'lodash';\n\nimport { formatAttributes, replaceTemporaryUIDs } from '../utils/attributes';\nimport createBuilder from './schema-builder';\n\n/**\n * Formats a component attributes\n */\nexport const formatComponent = (component: any) => {\n const { uid, modelName, connection, collectionName, info, category } = component;\n\n return {\n uid,\n category,\n apiId: modelName,\n schema: {\n displayName: get(info, 'displayName'),\n description: get(info, 'description', ''),\n icon: get(info, 'icon'),\n connection,\n collectionName,\n pluginOptions: component.pluginOptions,\n attributes: formatAttributes(component),\n },\n };\n};\n\n/**\n * Creates a component and handle the nested components sent with it\n */\nexport const createComponent = async ({ component, components = [] }: any) => {\n const builder = createBuilder();\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const newComponent = builder.createComponent(replaceTmpUIDs(component));\n\n components.forEach((component: any) => {\n if (!has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.create', { component: newComponent });\n\n return newComponent;\n};\n\ntype ComponentToCreate = {\n component: Struct.ComponentSchema;\n components?: Struct.ComponentSchema[];\n};\n\nexport const editComponent = async (\n uid: Internal.UID.Component,\n { component, components = [] }: ComponentToCreate\n) => {\n const builder = createBuilder();\n\n const uidMap = builder.createNewComponentUIDMap(components);\n const replaceTmpUIDs = replaceTemporaryUIDs(uidMap);\n\n const updatedComponent = builder.editComponent({\n uid,\n ...replaceTmpUIDs(component),\n });\n\n components.forEach((component) => {\n if (!has(component, 'uid')) {\n return builder.createComponent(replaceTmpUIDs(component));\n }\n\n return builder.editComponent(replaceTmpUIDs(component));\n });\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.update', { component: updatedComponent });\n\n return updatedComponent;\n};\n\nexport const deleteComponent = async (uid: Internal.UID.Component) => {\n const builder = createBuilder();\n\n const deletedComponent = builder.deleteComponent(uid);\n\n await builder.writeFiles();\n\n strapi.eventHub.emit('component.delete', { component: deletedComponent });\n\n return deletedComponent;\n};\n","import { join } from 'path';\nimport { strings, errors } from '@strapi/utils';\nimport type { Struct } from '@strapi/types';\nimport createBuilder from './schema-builder';\n\ntype Infos = {\n name: string;\n};\n\ninterface WorkingComponent extends Struct.ComponentSchema {\n setUID: (uid: string) => WorkingComponent;\n setDir: (dir: string) => WorkingComponent;\n updateComponent: (oldUID: string, newUID: string) => void;\n}\n\n/**\n * Edit a category name and move components to the write folder\n */\nexport const editCategory = async (name: string, infos: Infos) => {\n const newName = strings.nameToSlug(infos.name);\n\n // don't do anything the name doesn't change\n if (name === newName) return;\n\n if (!categoryExists(name)) {\n throw new errors.ApplicationError('category not found');\n }\n\n if (categoryExists(newName)) {\n throw new errors.ApplicationError('Name already taken');\n }\n\n const builder = createBuilder();\n\n builder.components.forEach((component: WorkingComponent) => {\n const oldUID = component.uid;\n const newUID = `${newName}.${component.modelName}`;\n\n // only edit the components in this specific category\n if (component.category !== name) return;\n\n component.setUID(newUID).setDir(join(strapi.dirs.app.components, newName));\n\n builder.components.forEach((compo: WorkingComponent) => {\n compo.updateComponent(oldUID, newUID);\n });\n\n builder.contentTypes.forEach((ct: WorkingComponent) => {\n ct.updateComponent(oldUID, newUID);\n });\n });\n\n await builder.writeFiles();\n\n return newName;\n};\n\n/**\n * Deletes a category and its components\n */\nexport const deleteCategory = async (name: string) => {\n if (!categoryExists(name)) {\n throw new errors.ApplicationError('category not found');\n }\n\n const builder = createBuilder();\n\n builder.components.forEach((component) => {\n if (component.category === name) {\n builder.deleteComponent(component.uid);\n }\n });\n\n await builder.writeFiles();\n};\n\n/**\n * Checks if a category exists\n */\nconst categoryExists = (name: string) => {\n const matchingIndex = Object.values(strapi.components).findIndex(\n (component) => component.category === name\n );\n\n return matchingIndex > -1;\n};\n","import { snakeCase } from 'lodash/fp';\n\n// use snake_case\nexport const reservedAttributes = [\n // TODO: these need to come from a centralized place so we don't break things accidentally in the future and can share them outside the CTB, for example on Strapi bootstrap prior to schema db sync\n\n // ID fields\n 'id',\n 'document_id',\n\n // Creator fields\n 'created_at',\n 'updated_at',\n 'published_at',\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 'status',\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// use snake_case\nexport const reservedModels = [\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\nexport const getReservedNames = () => {\n return {\n models: reservedModels,\n attributes: reservedAttributes,\n };\n};\n\n// compare snake case to check the actual column names that will be used in the database\nexport const isReservedModelName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedModels.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedModels\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\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\nexport const isReservedAttributeName = (name: string) => {\n const snakeCaseName = snakeCase(name);\n if (reservedAttributes.includes(snakeCaseName)) {\n return true;\n }\n\n if (\n reservedAttributes\n .filter((key) => key.endsWith('*'))\n .map((key) => key.slice(0, -1))\n .some((prefix) => snakeCaseName.startsWith(prefix))\n ) {\n return true;\n }\n\n return false;\n};\n","import * as path from 'path';\nimport * as fse from 'fs-extra';\nimport type { Internal } from '@strapi/types';\n\n/**\n * Deletes the API folder of a contentType\n */\nexport async function clear(uid: Internal.UID.ContentType) {\n // TODO double check if this is the correct way to get the apiName\n const { apiName, modelName } = strapi.contentTypes[uid] as any;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n\n await recursiveRemoveFiles(apiFolder, createDeleteApiFunction(modelName));\n await deleteBackup(uid);\n}\n\n/**\n * Backups the API folder of a contentType\n * @param {string} uid content type uid\n */\nexport async function backup(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n // backup the api folder\n await fse.copy(apiFolder, backupFolder);\n}\n\n/**\n * Deletes an API backup folder\n */\nasync function deleteBackup(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n const backupFolder = path.join(strapi.dirs.app.api, '.backup');\n const apiBackupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n await fse.remove(apiBackupFolder);\n\n const list = await fse.readdir(backupFolder);\n if (list.length === 0) {\n await fse.remove(backupFolder);\n }\n}\n\n/**\n * Rollbacks the API folder of a contentType\n */\nexport async function rollback(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n try {\n await fse.access(backupFolder);\n } catch {\n throw new Error('Cannot rollback api that was not backed up');\n }\n\n await fse.remove(apiFolder);\n await fse.copy(backupFolder, apiFolder);\n await deleteBackup(uid);\n}\n\n/**\n * Creates a delete function to clear an api folder\n */\nconst createDeleteApiFunction = (baseName: string) => {\n /**\n * Delets a file in an api.\n * Will only update routes.json instead of deleting it if other routes are present\n */\n return async (filePath: string) => {\n const fileName = path.basename(filePath, path.extname(filePath));\n\n const isSchemaFile = filePath.endsWith(`${baseName}/schema.json`);\n if (fileName === baseName || isSchemaFile) {\n return fse.remove(filePath);\n }\n };\n};\n\n/**\n * Deletes a folder recursively using a delete function\n * @param {string} folder folder to delete\n */\nconst recursiveRemoveFiles = async (folder: string, deleteFn: (file: string) => unknown) => {\n const filesName = await fse.readdir(folder);\n\n for (const fileName of filesName) {\n const filePath = path.join(folder, fileName);\n\n const stat = await fse.stat(filePath);\n\n if (stat.isDirectory()) {\n await recursiveRemoveFiles(filePath, deleteFn);\n } else {\n await deleteFn(filePath);\n }\n }\n\n const files = await fse.readdir(folder);\n if (files.length === 0) {\n await fse.remove(folder);\n }\n};\n","import * as contentTypes from './content-types';\nimport * as components from './components';\nimport * as componentCategories from './component-categories';\nimport * as builder from './builder';\nimport * as apiHandler from './api-handler';\n\nexport default {\n 'content-types': contentTypes,\n components,\n 'component-categories': componentCategories,\n builder,\n 'api-handler': apiHandler,\n};\n","import type * as components from '../services/components';\nimport type * as builder from '../services/builder';\nimport type * as contentTypes from '../services/content-types';\nimport type * as componentCategories from '../services/component-categories';\nimport type * as apiHandler from '../services/api-handler';\n\ntype S = {\n 'content-types': typeof contentTypes;\n components: typeof components;\n 'component-categories': typeof componentCategories;\n builder: typeof builder;\n 'api-handler': typeof apiHandler;\n};\n\nexport function getService<T extends keyof S>(\n name: T\n): S[T] extends (...args: any[]) => any ? ReturnType<S[T]> : S[T] {\n return strapi.plugin('content-type-builder').service(name);\n}\n","import type { Context } from 'koa';\nimport { getService } from '../utils';\n\nexport default {\n getReservedNames(ctx: Context) {\n ctx.body = getService('builder').getReservedNames();\n },\n};\n","/* eslint-disable no-template-curly-in-string */\nimport { yup, strings } from '@strapi/utils';\nimport _ from 'lodash';\nimport { TestConfig } from 'yup';\n\nexport const validators = {\n required: yup.boolean(),\n unique: yup.boolean(),\n minLength: yup.number().integer().positive(),\n maxLength: yup.number().integer().positive(),\n};\n\nexport const NAME_REGEX = /^[A-Za-z][_0-9A-Za-z]*$/;\nexport const COLLECTION_NAME_REGEX = /^[A-Za-z][-_0-9A-Za-z]*$/;\nexport const CATEGORY_NAME_REGEX = /^[A-Za-z][-_0-9A-Za-z]*$/;\nexport const ICON_REGEX = /^[A-Za-z0-9][-A-Za-z0-9]*$/;\nexport const UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\nexport type CommonTestConfig = TestConfig<unknown | undefined, Record<string, unknown>>;\n\nexport const isValidName: CommonTestConfig = {\n name: 'isValidName',\n message: `\\${path} must match the following regex: ${NAME_REGEX}`,\n test: (val: unknown) => val === '' || NAME_REGEX.test(val as string),\n};\n\nexport const isValidIcon: CommonTestConfig = {\n name: 'isValidIcon',\n message: `\\${path} is not a valid icon name. Make sure your icon name starts with an alphanumeric character and only includes alphanumeric characters or dashes.`,\n test: (val) => val === '' || ICON_REGEX.test(val as string),\n};\n\nexport const isValidUID: CommonTestConfig = {\n name: 'isValidUID',\n message: `\\${path} must match the following regex: ${UID_REGEX}`,\n test: (val) => val === '' || UID_REGEX.test(val as string),\n};\n\nexport const isValidCategoryName: CommonTestConfig = {\n name: 'isValidCategoryName',\n message: `\\${path} must match the following regex: ${CATEGORY_NAME_REGEX}`,\n test: (val) => val === '' || CATEGORY_NAME_REGEX.test(val as string),\n};\n\nexport const isValidCollectionName: CommonTestConfig = {\n name: 'isValidCollectionName',\n message: `\\${path} must match the following regex: ${COLLECTION_NAME_REGEX}`,\n test: (val) => val === '' || COLLECTION_NAME_REGEX.test(val as string),\n};\n\nexport const isValidKey = (key: string): CommonTestConfig => ({\n name: 'isValidKey',\n message: `Attribute name '${key}' must match the following regex: ${NAME_REGEX}`,\n test: () => NAME_REGEX.test(key),\n});\n\nexport const isValidEnum: CommonTestConfig = {\n name: 'isValidEnum',\n message: '${path} should not start with number',\n test: (val) => val === '' || !strings.startsWithANumber(val as string),\n};\n\nexport const areEnumValuesUnique: CommonTestConfig = {\n name: 'areEnumValuesUnique',\n message: '${path} cannot contain duplicate values',\n test(values) {\n const filtered = [...new Set(values as string[])];\n\n return filtered.length === (values as string[]).length;\n },\n};\n\nexport const isValidRegExpPattern: CommonTestConfig = {\n name: 'isValidRegExpPattern',\n message: '${path} must be a valid RexExp pattern string',\n test: (val) => val === '' || !!new RegExp(val as string),\n};\n\nexport const isValidDefaultJSON: CommonTestConfig = {\n name: 'isValidDefaultJSON',\n message: '${path} is not a valid JSON',\n test(val) {\n if (val === undefined) {\n return true;\n }\n\n if (_.isNumber(val) || _.isNull(val) || _.isObject(val) || _.isArray(val)) {\n return true;\n }\n\n try {\n JSON.parse(val as string);\n\n return true;\n } catch (err) {\n return false;\n }\n },\n};\n","import { yup, validateYupSchema } from '@strapi/utils';\nimport { isValidCategoryName } from './common';\n\nconst componentCategorySchema = yup\n .object({\n name: yup.string().min(3).test(isValidCategoryName).required('name.required'),\n })\n .noUnknown();\n\nexport default validateYupSchema(componentCategorySchema);\n","import type { Context } from 'koa';\nimport { getService } from '../utils';\nimport validateComponentCategory from './validation/component-category';\n\nexport default {\n async editCategory(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateComponentCategory(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n const { name } = ctx.params;\n\n strapi.reload.isWatching = false;\n\n const componentCategoryService = getService('component-categories');\n\n const newName = await componentCategoryService.editCategory(name, body);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ name: newName });\n },\n\n async deleteCategory(ctx: Context) {\n const { name } = ctx.params;\n\n strapi.reload.isWatching = false;\n\n const componentCategoryService = getService('component-categories');\n\n await componentCategoryService.deleteCategory(name);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ name });\n },\n};\n","import _ from 'lodash';\nimport { yup } from '@strapi/utils';\n\nimport type { TestContext } from 'yup';\nimport type { Schema, Struct } from '@strapi/types';\n\nimport { modelTypes, VALID_UID_TARGETS } from '../../services/constants';\nimport {\n validators,\n areEnumValuesUnique,\n isValidDefaultJSON,\n isValidName,\n isValidEnum,\n isValidUID,\n isValidRegExpPattern,\n} from './common';\n\nexport type GetTypeValidatorOptions = {\n types: ReadonlyArray<string>;\n attributes?: Struct.SchemaAttributes;\n modelType?: (typeof modelTypes)[keyof typeof modelTypes];\n};\n\nconst maxLengthIsGreaterThanOrEqualToMinLength = {\n name: 'isGreaterThanMin',\n message: 'maxLength must be greater or equal to minLength',\n test(this: TestContext, value: unknown) {\n const { minLength } = this.parent;\n return !(!_.isUndefined(minLength) && !_.isUndefined(value) && (value as number) < minLength);\n },\n};\n\nexport const getTypeValidator = (\n attribute: Schema.Attribute.AnyAttribute,\n { types, modelType, attributes }: GetTypeValidatorOptions\n) => {\n return yup.object({\n type: yup\n .string()\n .oneOf([...types])\n .required(),\n configurable: yup.boolean().nullable(),\n private: yup.boolean().nullable(),\n pluginOptions: yup.object(),\n ...getTypeShape(attribute, { modelType, attributes }),\n } as any);\n};\n\nconst getTypeShape = (attribute: Schema.Attribute.AnyAttribute, { attributes }: any = {}) => {\n switch (attribute.type) {\n /**\n * complex types\n */\n\n case 'media': {\n return {\n multiple: yup.boolean(),\n required: validators.required,\n allowedTypes: yup\n .array()\n .of(yup.string().oneOf(['images', 'videos', 'files', 'audios']))\n .min(1),\n };\n }\n\n case 'uid': {\n return {\n required: validators.required,\n targetField: yup\n .string()\n .oneOf(\n Object.keys(attributes!).filter((key) =>\n VALID_UID_TARGETS.includes(_.get(attributes![key] as any, 'type'))\n )\n )\n .nullable(),\n default: yup\n .string()\n .test(\n 'isValidDefaultUID',\n 'cannot define a default UID if the targetField is set',\n function (value) {\n const { targetField } = this.parent;\n return !!(_.isNil(targetField) || _.isNil(value));\n }\n )\n .test(isValidUID),\n minLength: validators.minLength,\n maxLength: validators.maxLength.max(256).test(maxLengthIsGreaterThanOrEqualToMinLength),\n options: yup.object().shape({\n separator: yup.string(),\n lowercase: yup.boolean(),\n decamelize: yup.boolean(),\n customReplacements: yup.array().of(yup.array().of(yup.string()).min(2).max(2)),\n preserveLeadingUnderscore: yup.boolean(),\n }),\n };\n }\n\n /**\n * scalar types\n */\n case 'string':\n case 'text': {\n return {\n default: yup.string(),\n required: validators.required,\n unique: validators.unique,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n regex: yup.string().test(isValidRegExpPattern),\n };\n }\n case 'richtext': {\n return {\n default: yup.string(),\n required: validators.required,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n };\n }\n case 'blocks': {\n return {\n required: validators.required,\n };\n }\n case 'json': {\n return {\n default: yup.mixed().test(isValidDefaultJSON),\n required: validators.required,\n };\n }\n case 'enumeration': {\n return {\n enum: yup\n .array()\n .of(yup.string().test(isValidEnum).required())\n .min(1)\n .test(areEnumValuesUnique)\n .required(),\n default: yup.string().when('enum', (enumVal) => yup.string().oneOf(enumVal)),\n enumName: yup.string().test(isValidName),\n required: validators.required,\n };\n }\n case 'password': {\n return {\n required: validators.required,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n };\n }\n case 'email': {\n return {\n default: yup.string().email(),\n required: validators.required,\n unique: validators.unique,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n };\n }\n case 'integer': {\n return {\n default: yup.number().integer(),\n required: validators.required,\n unique: validators.unique,\n min: yup.number().integer(),\n max: yup.number().integer(),\n };\n }\n case 'biginteger': {\n return {\n default: yup.string().nullable().matches(/^\\d*$/),\n required: validators.required,\n unique: validators.unique,\n min: yup.string().nullable().matches(/^\\d*$/),\n max: yup.string().nullable().matches(/^\\d*$/),\n };\n }\n case 'float': {\n return {\n default: yup.number(),\n required: validators.required,\n unique: validators.unique,\n min: yup.number(),\n max: yup.number(),\n };\n }\n case 'decimal': {\n return {\n default: yup.number(),\n required: validators.required,\n unique: validators.unique,\n min: yup.number(),\n max: yup.number(),\n };\n }\n case 'time':\n case 'datetime':\n case 'date': {\n return {\n default: yup.string(),\n required: validators.required,\n unique: validators.unique,\n };\n }\n case 'boolean': {\n return {\n default: yup.boolean(),\n required: validators.required,\n };\n }\n\n case 'component': {\n return {\n required: validators.required,\n repeatable: yup.boolean(),\n // TODO: Add correct server validation for nested components\n component: yup.string().required(),\n min: yup.number(),\n max: yup.number(),\n };\n }\n\n case 'dynamiczone': {\n return {\n required: validators.required,\n components: yup\n .array()\n .of(yup.string().required())\n .test('isArray', '${path} must be an array', (value) => Array.isArray(value))\n .min(1),\n min: yup.number(),\n max: yup.number(),\n };\n }\n\n default: {\n return {};\n }\n }\n};\n","import { isUndefined } from 'lodash/fp';\nimport { yup } from '@strapi/utils';\nimport type { TestContext, TestFunction } from 'yup';\nimport type { Schema, UID } from '@strapi/types';\nimport { typeKinds, coreUids } from '../../services/constants';\nimport { isValidName } from './common';\n\nconst STRAPI_USER_RELATIONS = ['oneToOne', 'oneToMany'];\n\nconst isValidRelation = (validNatures: ReadonlyArray<string>): TestFunction<string | undefined> =>\n function (this: TestContext, value) {\n // NOTE: In case of an undefined value, delegate the check to .required()\n if (value === undefined) {\n return true;\n }\n\n if (this.parent.target === coreUids.STRAPI_USER) {\n if (!validNatures.includes(value) || !isUndefined(this.parent.targetAttribute)) {\n return this.createError({\n path: this.path,\n message: `must be one of the following values: ${STRAPI_USER_RELATIONS.join(', ')}`,\n });\n }\n }\n\n return validNatures.includes(value)\n ? true\n : this.createError({\n path: this.path,\n message: `must be one of the following values: ${validNatures.join(', ')}`,\n });\n };\n\nexport const getRelationValidator = (\n attribute: Schema.Attribute.Relation,\n allowedRelations: ReadonlyArray<string>\n) => {\n const contentTypesUIDs = Object.keys(strapi.contentTypes)\n .filter((key) => strapi.contentTypes[key as UID.ContentType].kind === typeKinds.COLLECTION_TYPE)\n .filter((key) => !key.startsWith(coreUids.PREFIX) || key === coreUids.STRAPI_USER)\n .concat(['__self__', '__contentType__']);\n\n const base = {\n type: yup.string().oneOf(['relation']).required(),\n relation: yup.string().test('isValidRelation', isValidRelation(allowedRelations)).required(),\n configurable: yup.boolean().nullable(),\n private: yup.boolean().nullable(),\n pluginOptions: yup.object(),\n };\n\n switch (attribute.relation) {\n case 'oneToOne':\n case 'oneToMany':\n case 'manyToOne':\n case 'manyToMany':\n case 'morphOne':\n case 'morphMany': {\n return yup.object({\n ...base,\n target: yup.string().oneOf(contentTypesUIDs).required(),\n targetAttribute: yup.string().test(isValidName).nullable(),\n });\n }\n case 'morphToOne':\n case 'morphToMany':\n default: {\n return yup.object({ ...base });\n }\n }\n};\n","import { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport { snakeCase } from 'lodash/fp';\nimport { modelTypes, typeKinds } from '../../services/constants';\nimport { getService } from '../../utils';\nimport { isValidKey, isValidCollectionName } from './common';\nimport { getTypeValidator } from './types';\nimport { getRelationValidator } from './relations';\n\ntype ModelTypeInput = (typeof modelTypes)[keyof typeof modelTypes];\n\ntype CreateAttributesInput = {\n types: ReadonlyArray<string>;\n relations: ReadonlyArray<string>;\n modelType?: ModelTypeInput;\n};\n\nexport const createSchema = (\n types: CreateAttributesInput['types'],\n relations: CreateAttributesInput['relations'],\n { modelType }: { modelType?: ModelTypeInput } = {}\n) => {\n const shape = {\n description: yup.string(),\n options: yup.object(),\n pluginOptions: yup.object(),\n collectionName: yup.string().nullable().test(isValidCollectionName),\n attributes: createAttributesValidator({ types, relations, modelType }),\n draftAndPublish: yup.boolean(),\n } as any;\n\n if (modelType === modelTypes.CONTENT_TYPE) {\n shape.kind = yup.string().oneOf([typeKinds.SINGLE_TYPE, typeKinds.COLLECTION_TYPE]).nullable();\n }\n\n return yup.object(shape).noUnknown();\n};\n\nconst createAttributesValidator = ({ types, modelType, relations }: CreateAttributesInput) => {\n return yup.lazy((attributes) => {\n return yup\n .object()\n .shape(\n _.mapValues(attributes, (attribute, key) => {\n if (isForbiddenKey(key)) {\n return forbiddenValidator();\n }\n\n if (isConflictingKey(key, attributes)) {\n return conflictingKeysValidator(key);\n }\n\n if (attribute.type === 'relation') {\n return getRelationValidator(attribute, relations).test(isValidKey(key));\n }\n\n if (_.has(attribute, 'type')) {\n return getTypeValidator(attribute, { types, modelType, attributes }).test(\n isValidKey(key)\n );\n }\n\n return typeOrRelationValidator;\n })\n )\n .required('attributes.required');\n });\n};\n\nconst isConflictingKey = (key: string, attributes: Record<string, any>) => {\n const snakeCaseKey = snakeCase(key);\n\n return Object.keys(attributes).some((existingKey) => {\n if (existingKey === key) return false; // don't compare against itself\n return snakeCase(existingKey) === snakeCaseKey;\n });\n};\n\nconst isForbiddenKey = (key: string) => {\n return getService('builder').isReservedAttributeName(key);\n};\n\nconst forbiddenValidator = () => {\n const reservedNames = [...getService('builder').getReservedNames().attributes];\n\n return yup.mixed().test({\n name: 'forbiddenKeys',\n message: `Attribute keys cannot be one of ${reservedNames.join(', ')}`,\n test: () => false,\n });\n};\n\nconst conflictingKeysValidator = (key: string) => {\n return yup.mixed().test({\n name: 'conflictingKeys',\n message: `Attribute ${key} conflicts with an existing key`,\n test: () => false,\n });\n};\n\nconst typeOrRelationValidator = yup.object().test({\n name: 'mustHaveTypeOrTarget',\n message: 'Attribute must have either a type or a target',\n test: () => false,\n});\n","import type { Schema } from '@strapi/types';\n\nexport const hasDefaultAttribute = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.DefaultOption<unknown> => {\n return 'default' in attribute;\n};\n","import type { Struct } from '@strapi/types';\nimport _ from 'lodash';\nimport { hasDefaultAttribute } from '../../utils/typeguards';\n\nexport const removeEmptyDefaults = (\n data: Partial<Struct.ContentTypeSchema> | Partial<Struct.ComponentSchema> | undefined\n) => {\n const { attributes } = data || {};\n\n Object.keys(attributes!).forEach((attributeName) => {\n const attribute = attributes![attributeName];\n\n if (hasDefaultAttribute(attribute) && attribute.default === '') {\n attribute.default = undefined;\n }\n });\n};\n\nexport const removeDeletedUIDTargetFields = (data: Struct.ContentTypeSchema) => {\n if (_.has(data, 'attributes')) {\n Object.values(data.attributes).forEach((attribute) => {\n if (\n attribute.type === 'uid' &&\n !_.isUndefined(attribute.targetField) &&\n !_.has(data.attributes, attribute.targetField)\n ) {\n attribute.targetField = undefined;\n }\n });\n }\n};\n","import _ from 'lodash';\nimport { yup, validateYupSchema } from '@strapi/utils';\n\nimport type { Struct } from '@strapi/types';\nimport { modelTypes, DEFAULT_TYPES } from '../../services/constants';\nimport { isValidCategoryName, isValidIcon } from './common';\nimport { createSchema } from './model-schema';\nimport { removeEmptyDefaults } from './data-transform';\n\nexport const VALID_RELATIONS = ['oneToOne', 'oneToMany'];\nexport const VALID_TYPES = [...DEFAULT_TYPES, 'component', 'customField'];\n\nexport const componentSchema = createSchema(VALID_TYPES, VALID_RELATIONS, {\n modelType: modelTypes.COMPONENT,\n})\n .shape({\n displayName: yup.string().min(1).required('displayName.required'),\n icon: yup.string().nullable().test(isValidIcon),\n category: yup.string().nullable().test(isValidCategoryName).required('category.required'),\n })\n .required()\n .noUnknown();\n\nexport const nestedComponentSchema = yup.array().of(\n componentSchema\n .shape({\n uid: yup.string(),\n tmpUID: yup.string(),\n })\n .test({\n name: 'mustHaveUIDOrTmpUID',\n message: 'Component must have a uid or a tmpUID',\n test(attr: unknown) {\n if (_.has(attr, 'uid') && _.has(attr, 'tmpUID')) return false;\n if (!_.has(attr, 'uid') && !_.has(attr, 'tmpUID')) return false;\n return true;\n },\n })\n .required()\n .noUnknown()\n);\n\nexport const componentInputSchema = yup\n .object({\n component: componentSchema,\n components: nestedComponentSchema,\n })\n .noUnknown();\n\nexport const validateComponentInput = validateYupSchema(componentInputSchema);\n\nconst updateComponentInputSchema = yup\n .object({\n component: componentSchema,\n components: nestedComponentSchema,\n })\n .noUnknown();\n\nexport const validateUpdateComponentInput = (data: {\n component?: Struct.ComponentSchema;\n components?: Struct.ComponentSchema[];\n}) => {\n if (_.has(data, 'component') && data.component) {\n removeEmptyDefaults(data.component);\n }\n\n if (_.has(data, 'components') && Array.isArray(data.components)) {\n data.components.forEach((data) => {\n if (_.has(data, 'uid')) {\n removeEmptyDefaults(data);\n }\n });\n }\n\n return validateYupSchema(updateComponentInputSchema)(data);\n};\n","import _ from 'lodash';\nimport type { Context } from 'koa';\nimport type { UID } from '@strapi/types';\nimport { getService } from '../utils';\nimport { validateComponentInput, validateUpdateComponentInput } from './validation/component';\n\n/**\n * Components controller\n */\n\nexport default {\n /**\n * GET /components handler\n * Returns a list of available components\n * @param {Object} ctx - koa context\n */\n async getComponents(ctx: Context) {\n const componentService = getService('components');\n const componentUIDs = Object.keys(strapi.components) as UID.Component[];\n\n const data = componentUIDs.map((uid) => {\n return componentService.formatComponent(strapi.components[uid]);\n });\n\n ctx.send({ data });\n },\n\n /**\n * GET /components/:uid\n * Returns a specific component\n * @param {Object} ctx - koa context\n */\n async getComponent(ctx: Context) {\n const { uid } = ctx.params;\n\n const component = strapi.components[uid];\n\n if (!component) {\n return ctx.send({ error: 'component.notFound' }, 404);\n }\n\n const componentService = getService('components');\n\n ctx.send({ data: componentService.formatComponent(component) });\n },\n\n /**\n * POST /components\n * Creates a component and returns its infos\n * @param {Object} ctx - koa context\n */\n async createComponent(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateComponentInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const componentService = getService('components');\n\n const component = await componentService.createComponent({\n component: body.component,\n components: body.components,\n });\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } }, 201);\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as any)?.message || 'Unknown error' }, 400);\n }\n },\n\n /**\n * PUT /components/:uid\n * Updates a component and return its infos\n * @param {Object} ctx - koa context - enhanced koa context\n */\n async updateComponent(ctx: Context) {\n const { uid } = ctx.params;\n const body = ctx.request.body as any;\n\n if (!_.has(strapi.components, uid)) {\n return ctx.send({ error: 'component.notFound' }, 404);\n }\n\n try {\n await validateUpdateComponentInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const componentService = getService('components');\n\n const component = (await componentService.editComponent(uid, {\n component: body.component,\n components: body.components,\n })) as any;\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n\n ctx.send({ error: (error as any)?.message || 'Unknown error' }, 400);\n }\n },\n\n /**\n * DELETE /components/:uid\n * Deletes a components and returns its old infos\n * @param {Object} ctx - koa context\n */\n async deleteComponent(ctx: Context) {\n const { uid } = ctx.params;\n\n if (!_.has(strapi.components, uid)) {\n return ctx.send({ error: 'component.notFound' }, 404);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const componentService = getService('components');\n\n const component = await componentService.deleteComponent(uid);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as any)?.message || 'Unknown error' }, 400);\n }\n },\n};\n","/* eslint-disable no-template-curly-in-string */ // yup templates need to be in this format\n\nimport { flatMap, getOr, has, snakeCase } from 'lodash/fp';\nimport { yup, validateYupSchema } from '@strapi/utils';\n\nimport type { Struct, Internal } from '@strapi/types';\nimport { getService } from '../../utils';\nimport { modelTypes, DEFAULT_TYPES, typeKinds } from '../../services/constants';\nimport { createSchema } from './model-schema';\nimport { removeEmptyDefaults, removeDeletedUIDTargetFields } from './data-transform';\nimport { nestedComponentSchema } from './component';\n\n// Input flattens some fields of the \"info\" into the root type\nexport type CreateContentTypeInput = {\n contentType?: Partial<Struct.ContentTypeSchema> & Partial<Struct.ContentTypeSchemaInfo>;\n components?: Array<\n Partial<Struct.ComponentSchema> &\n Partial<Struct.SchemaInfo> & { tmpUID?: Internal.UID.Component }\n >;\n singularName: Struct.ContentTypeSchemaInfo['singularName'];\n attributes: Struct.SchemaAttributes & Record<string, any>;\n kind: Struct.ContentTypeKind;\n collectionName?: Struct.CollectionTypeSchema['collectionName'];\n pluralName: Struct.ContentTypeSchemaInfo['pluralName'];\n displayName: Struct.ContentTypeSchemaInfo['displayName'];\n description: Struct.ContentTypeSchemaInfo['description'];\n options?: Struct.SchemaOptions;\n draftAndPublish?: Struct.SchemaOptions['draftAndPublish'];\n pluginOptions?: Struct.ContentTypeSchema['pluginOptions'];\n config?: object;\n};\n\n/**\n * Allowed relation per type kind\n */\nconst VALID_RELATIONS = {\n [typeKinds.SINGLE_TYPE]: [\n 'oneToOne',\n 'oneToMany',\n 'morphOne',\n 'morphMany',\n 'morphToOne',\n 'morphToMany',\n ],\n [typeKinds.COLLECTION_TYPE]: [\n 'oneToOne',\n 'oneToMany',\n 'manyToOne',\n 'manyToMany',\n 'morphOne',\n 'morphMany',\n 'morphToOne',\n 'morphToMany',\n ],\n} as const;\n\n/**\n * Allowed types\n */\nconst VALID_TYPES = [...DEFAULT_TYPES, 'uid', 'component', 'dynamiczone', 'customField'];\n\n/**\n * Returns a yup schema to validate a content type payload\n */\nconst createContentTypeSchema = (data: CreateContentTypeInput, { isEdition = false } = {}) => {\n const kind: keyof typeof VALID_RELATIONS = getOr(\n typeKinds.COLLECTION_TYPE,\n 'contentType.kind',\n data\n );\n const contentTypeSchema = createSchema(VALID_TYPES, VALID_RELATIONS[kind] || [], {\n modelType: modelTypes.CONTENT_TYPE,\n })\n .shape({\n displayName: yup.string().min(1).required(),\n singularName: yup\n .string()\n .min(1)\n .test(nameIsAvailable(isEdition))\n .test(forbiddenContentTypeNameValidator())\n .isKebabCase()\n .required(),\n pluralName: yup\n .string()\n .min(1)\n .test(nameIsAvailable(isEdition))\n .test(nameIsNotExistingCollectionName(isEdition)) // TODO: v5: require singularName to not match a collection name\n .test(forbiddenContentTypeNameValidator())\n .isKebabCase()\n .required(),\n })\n .test(\n 'singularName-not-equal-pluralName',\n '${path}: singularName and pluralName should be different',\n (value) => value.singularName !== value.pluralName\n );\n\n return yup\n .object({\n // FIXME .noUnknown(false) will strip off the unwanted properties without throwing an error\n // Why not having .noUnknown() ? Because we want to be able to add options relatable to EE features\n // without having any reference to them in CE.\n // Why not handle an \"options\" object in the content-type ? The admin panel needs lots of rework\n // to be able to send this options object instead of top-level attributes.\n // @nathan-pichon 20/02/2023\n contentType: contentTypeSchema.required().noUnknown(false),\n components: nestedComponentSchema,\n })\n .noUnknown();\n};\n\n/**\n * Validator for content type creation\n */\nexport const validateContentTypeInput = (data: CreateContentTypeInput) => {\n return validateYupSchema(createContentTypeSchema(data))(data);\n};\n\n/**\n * Validator for content type edition\n */\nexport const validateUpdateContentTypeInput = (data: CreateContentTypeInput) => {\n if (has('contentType', data)) {\n removeEmptyDefaults(data.contentType);\n removeDeletedUIDTargetFields(data.contentType as Struct.ContentTypeSchema);\n }\n\n if (has('components', data) && Array.isArray(data.components)) {\n data.components.forEach((comp) => {\n if (has('uid', comp)) {\n removeEmptyDefaults(comp as Struct.ComponentSchema);\n }\n });\n }\n\n return validateYupSchema(createContentTypeSchema(data, { isEdition: true }))(data);\n};\n\nconst forbiddenContentTypeNameValidator = () => {\n const reservedNames = getService('builder').getReservedNames().models;\n\n return {\n name: 'forbiddenContentTypeName',\n message: `Content Type name cannot be one of ${reservedNames.join(', ')}`,\n test(value: unknown) {\n if (typeof value !== 'string') {\n return true;\n }\n\n return !getService('builder').isReservedModelName(value);\n },\n };\n};\n\nconst nameIsAvailable = (isEdition: boolean) => {\n // TODO TS: if strapi.contentTypes (ie, ContentTypes) works as an ArrayLike and is used like this, we may want to ensure it is typed so that it can be without using as\n const usedNames = flatMap((ct: Struct.ContentTypeSchema) => {\n return [ct.info?.singularName, ct.info?.pluralName];\n })(strapi.contentTypes as any);\n\n return {\n name: 'nameAlreadyUsed',\n message: 'contentType: name `${value}` is already being used by another content type.',\n test(value: unknown) {\n // don't check on edition\n if (isEdition) return true;\n\n // ignore if not a string (will be caught in another validator)\n if (typeof value !== 'string') {\n return true;\n }\n\n // compare snake case to check the actual column names that will be used in the database\n return usedNames.every((usedName) => snakeCase(usedName) !== snakeCase(value));\n },\n };\n};\n\nconst nameIsNotExistingCollectionName = (isEdition: boolean) => {\n const usedNames = Object.keys(strapi.contentTypes).map(\n (key) => strapi.contentTypes[key as Internal.UID.ContentType].collectionName\n ) as string[];\n\n return {\n name: 'nameAlreadyUsed',\n message: 'contentType: name `${value}` is already being used by another content type.',\n test(value: unknown) {\n // don't check on edition\n if (isEdition) return true;\n\n // ignore if not a string (will be caught in another validator)\n if (typeof value !== 'string') {\n return true;\n }\n\n // compare snake case to check the actual column names that will be used in the database\n return usedNames.every((usedName) => snakeCase(usedName) !== snakeCase(value));\n },\n };\n};\n\n/**\n * Validates type kind\n */\nconst kindSchema = yup.string().oneOf([typeKinds.SINGLE_TYPE, typeKinds.COLLECTION_TYPE]);\n\nexport const validateKind = validateYupSchema(kindSchema);\n","import _ from 'lodash';\nimport type { Context } from 'koa';\nimport type {} from 'koa-body';\nimport type { Internal } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n validateContentTypeInput,\n validateUpdateContentTypeInput,\n validateKind,\n} from './validation/content-type';\n\nexport default {\n async getContentTypes(ctx: Context) {\n const { kind } = ctx.query;\n\n try {\n await validateKind(kind);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n const contentTypeService = getService('content-types');\n\n const contentTypes = Object.keys(strapi.contentTypes)\n .filter(\n (uid) =>\n !kind ||\n _.get(strapi.contentTypes[uid as Internal.UID.ContentType], 'kind', 'collectionType') ===\n kind\n )\n .map((uid) =>\n contentTypeService.formatContentType(strapi.contentTypes[uid as Internal.UID.ContentType])\n );\n\n ctx.send({\n data: contentTypes,\n });\n },\n\n getContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n const contentType = strapi.contentTypes[uid];\n\n if (!contentType) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n const contentTypeService = getService('content-types');\n\n ctx.send({ data: contentTypeService.formatContentType(contentType) });\n },\n\n async createContentType(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const contentType = await contentTypeService.createContentType({\n contentType: body.contentType,\n components: body.components,\n });\n\n const metricsPayload = {\n eventProperties: {\n kind: contentType.kind,\n },\n };\n\n if (_.isEmpty(strapi.apis)) {\n await strapi.telemetry.send('didCreateFirstContentType', metricsPayload);\n } else {\n await strapi.telemetry.send('didCreateContentType', metricsPayload);\n }\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: contentType.uid } }, 201);\n } catch (err) {\n strapi.log.error(err);\n await strapi.telemetry.send('didNotCreateContentType', {\n eventProperties: { error: (err as Error).message || err },\n });\n ctx.send({ error: (err as Error).message || 'Unknown error' }, 400);\n }\n },\n\n async updateContentType(ctx: Context) {\n const { uid } = ctx.params;\n const body = ctx.request.body as any;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n await validateUpdateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.editContentType(uid, {\n contentType: body.contentType,\n components: body.components,\n });\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } }, 201);\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n\n async deleteContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.deleteContentType(uid);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n};\n","import builder from './builder';\nimport componentCategories from './component-categories';\nimport components from './components';\nimport contentTypes from './content-types';\n\nconst exportObject = {\n builder,\n 'component-categories': componentCategories,\n components,\n 'content-types': contentTypes,\n};\n\nexport default exportObject;\n","export default {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/reserved-names',\n handler: 'builder.getReservedNames',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/content-types',\n handler: 'content-types.getContentTypes',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/content-types/:uid',\n handler: 'content-types.getContentType',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/content-types',\n handler: 'content-types.createContentType',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/content-types/:uid',\n handler: 'content-types.updateContentType',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/content-types/:uid',\n handler: 'content-types.deleteContentType',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/components',\n handler: 'components.getComponents',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/components/:uid',\n handler: 'components.getComponent',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/components',\n handler: 'components.createComponent',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/components/:uid',\n handler: 'components.updateComponent',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/components/:uid',\n handler: 'components.deleteComponent',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/component-categories/:name',\n handler: 'component-categories.editCategory',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/component-categories/:name',\n handler: 'component-categories.deleteCategory',\n config: {\n policies: [\n {\n name: 'admin::hasPermissions',\n config: { actions: ['plugin::content-type-builder.read'] },\n },\n ],\n },\n },\n ],\n};\n","export default {\n type: 'content-api',\n routes: [\n {\n method: 'GET',\n path: '/content-types',\n handler: 'content-types.getContentTypes',\n },\n {\n method: 'GET',\n path: '/content-types/:uid',\n handler: 'content-types.getContentType',\n },\n {\n method: 'GET',\n path: '/components',\n handler: 'components.getComponents',\n },\n {\n method: 'GET',\n path: '/components/:uid',\n handler: 'components.getComponent',\n },\n ],\n};\n","import admin from './admin';\nimport contentApi from './content-api';\n\nexport default {\n admin,\n 'content-api': contentApi,\n};\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport '@strapi/types';\n\nimport config from './config';\nimport bootstrap from './bootstrap';\nimport services from './services';\nimport controllers from './controllers';\nimport routes from './routes';\n\nexport default () => ({\n config,\n bootstrap,\n services,\n controllers,\n routes,\n});\n"],"names":["default","validator","strapi","actions","section","displayName","uid","pluginName","service","actionProvider","registerMany","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","components","intersection","length","map","value","createSchemaHandler","infos","category","modelName","plugin","dir","filename","initialState","info","options","state","cloneDeep","freeze","modified","deleted","kind","writable","setUID","val","setDir","setSchema","path","set","defaultTo","unset","delete","getAttribute","setAttribute","deleteAttribute","setAttributes","newAttributes","removeContentType","forEach","removeComponent","Array","isArray","includes","updatedComponentList","filter","updateComponent","newUID","flush","initialPath","join","filePath","fse","remove","list","readdir","Promise","resolve","ensureFile","writeJSON","collectionName","config","spaces","rollback","createComponentBuilder","createComponentUID","strings","nameToSlug","createNewComponentUIDMap","tmpUID","createComponent","handler","dirs","app","nameToCollectionName","pluralize","compo","icon","description","convertAttributes","size","telemetry","send","editComponent","nameUID","split","newCategory","newDir","oldAttributes","omitBy","ct","deleteComponent","modelTypes","CONTENT_TYPE","COMPONENT","typeKinds","SINGLE_TYPE","COLLECTION_TYPE","DEFAULT_TYPES","VALID_UID_TARGETS","coreUids","STRAPI_USER","PREFIX","pluginsUids","UPLOAD_FILE","reuseUnsetPreviousProperties","newAttribute","oldAttribute","defaults","omit","setRelation","targetCT","generateRelation","unsetRelation","targetAttributeName","createContentType","createContentTypeUID","contentType","singularName","api","pluralName","draftAndPublish","relation","dominant","editContentType","newKeys","difference","deletedKeys","remainingKeys","isNil","oldTargetAttributeName","sameRelation","targetAttributeHasChanged","deleteContentType","opts","restOptions","createBuilder","values","componentInput","__filename__","__schema__","contentTypeInput","extensions","apiName","createSchemaBuilder","tmpComponents","Map","tmpContentTypes","isPrivate","baseProperties","restOfProperties","createContentTypeBuilder","writeFiles","schemas","from","all","catch","error","log","isContentTypeVisible","getOr","getRestrictRelationsTo","startsWith","formatContentType","apiID","contentTypesUtils","getOptions","visible","restrictRelationsTo","createContentTypes","builder","createdContentTypes","push","defaultBuilder","replaceTmpUIDs","newContentType","targetContentType","generateAPI","eventHub","emit","strapiGenerators","require","generate","id","destination","bootstrapApi","root","previousSchema","previousKind","newKind","previousAttributes","prevNonVisibleAttributes","getNonVisibleAttributes","merge","entryCount","db","query","count","updatedContentType","apiHandler","backup","clear","deleteContentTypes","uids","formatComponent","connection","apiId","newComponent","updatedComponent","deletedComponent","editCategory","name","newName","categoryExists","oldUID","deleteCategory","matchingIndex","findIndex","reservedAttributes","reservedModels","getReservedNames","models","isReservedModelName","snakeCaseName","snakeCase","endsWith","slice","some","prefix","isReservedAttributeName","apiFolder","recursiveRemoveFiles","createDeleteApiFunction","deleteBackup","backupFolder","copy","apiBackupFolder","access","Error","baseName","fileName","basename","extname","isSchemaFile","folder","deleteFn","filesName","stat","isDirectory","files","componentCategories","getService","ctx","body","validators","yup","boolean","unique","minLength","number","integer","positive","maxLength","NAME_REGEX","COLLECTION_NAME_REGEX","CATEGORY_NAME_REGEX","ICON_REGEX","UID_REGEX","isValidName","message","test","isValidIcon","isValidUID","isValidCategoryName","isValidCollectionName","isValidKey","isValidEnum","startsWithANumber","areEnumValuesUnique","filtered","Set","isValidRegExpPattern","RegExp","isValidDefaultJSON","isNumber","isNull","isObject","JSON","parse","err","componentCategorySchema","object","string","min","noUnknown","validateYupSchema","request","validateComponentCategory","params","reload","isWatching","componentCategoryService","setImmediate","maxLengthIsGreaterThanOrEqualToMinLength","parent","isUndefined","getTypeValidator","types","modelType","oneOf","nullable","getTypeShape","array","of","targetField","max","shape","separator","lowercase","decamelize","customReplacements","preserveLeadingUnderscore","regex","mixed","enum","when","enumVal","enumName","email","matches","repeatable","STRAPI_USER_RELATIONS","isValidRelation","validNatures","createError","getRelationValidator","allowedRelations","contentTypesUIDs","concat","base","createSchema","relations","createAttributesValidator","lazy","mapValues","isForbiddenKey","forbiddenValidator","isConflictingKey","conflictingKeysValidator","typeOrRelationValidator","snakeCaseKey","existingKey","reservedNames","hasDefaultAttribute","removeEmptyDefaults","data","attributeName","removeDeletedUIDTargetFields","VALID_RELATIONS","VALID_TYPES","componentSchema","nestedComponentSchema","componentInputSchema","validateComponentInput","updateComponentInputSchema","validateUpdateComponentInput","getComponents","componentService","componentUIDs","getComponent","createContentTypeSchema","isEdition","contentTypeSchema","nameIsAvailable","forbiddenContentTypeNameValidator","isKebabCase","nameIsNotExistingCollectionName","validateContentTypeInput","validateUpdateContentTypeInput","comp","usedNames","flatMap","every","usedName","kindSchema","validateKind","getContentTypes","contentTypeService","getContentType","metricsPayload","eventProperties","isEmpty","apis","updateContentType","exportObject","routes","method","policies","admin","contentApi","bootstrap","services","controllers"],"mappings":"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"}