@strapi/core 0.0.0-experimental.e02b4637b3906c6d31048d00600d09a23a0edc3d → 0.0.0-experimental.e100737b0ed96d0d80a5c6f4925c7374e63a342a

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 (710) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +427 -403
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +426 -402
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/compile.js +23 -14
  7. package/dist/compile.js.map +1 -1
  8. package/dist/compile.mjs +22 -14
  9. package/dist/compile.mjs.map +1 -1
  10. package/dist/configuration/config-loader.js +110 -97
  11. package/dist/configuration/config-loader.js.map +1 -1
  12. package/dist/configuration/config-loader.mjs +109 -96
  13. package/dist/configuration/config-loader.mjs.map +1 -1
  14. package/dist/configuration/get-dirs.js +31 -29
  15. package/dist/configuration/get-dirs.js.map +1 -1
  16. package/dist/configuration/get-dirs.mjs +30 -30
  17. package/dist/configuration/get-dirs.mjs.map +1 -1
  18. package/dist/configuration/index.d.ts.map +1 -1
  19. package/dist/configuration/index.js +84 -73
  20. package/dist/configuration/index.js.map +1 -1
  21. package/dist/configuration/index.mjs +83 -69
  22. package/dist/configuration/index.mjs.map +1 -1
  23. package/dist/configuration/urls.js +65 -61
  24. package/dist/configuration/urls.js.map +1 -1
  25. package/dist/configuration/urls.mjs +64 -62
  26. package/dist/configuration/urls.mjs.map +1 -1
  27. package/dist/container.js +27 -23
  28. package/dist/container.js.map +1 -1
  29. package/dist/container.mjs +26 -24
  30. package/dist/container.mjs.map +1 -1
  31. package/dist/core-api/controller/collection-type.js +77 -76
  32. package/dist/core-api/controller/collection-type.js.map +1 -1
  33. package/dist/core-api/controller/collection-type.mjs +76 -77
  34. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  35. package/dist/core-api/controller/index.js +63 -48
  36. package/dist/core-api/controller/index.js.map +1 -1
  37. package/dist/core-api/controller/index.mjs +62 -49
  38. package/dist/core-api/controller/index.mjs.map +1 -1
  39. package/dist/core-api/controller/single-type.js +41 -40
  40. package/dist/core-api/controller/single-type.js.map +1 -1
  41. package/dist/core-api/controller/single-type.mjs +40 -41
  42. package/dist/core-api/controller/single-type.mjs.map +1 -1
  43. package/dist/core-api/controller/transform.js +72 -63
  44. package/dist/core-api/controller/transform.js.map +1 -1
  45. package/dist/core-api/controller/transform.mjs +71 -64
  46. package/dist/core-api/controller/transform.mjs.map +1 -1
  47. package/dist/core-api/routes/index.js +64 -62
  48. package/dist/core-api/routes/index.js.map +1 -1
  49. package/dist/core-api/routes/index.mjs +62 -62
  50. package/dist/core-api/routes/index.mjs.map +1 -1
  51. package/dist/core-api/service/collection-type.js +73 -60
  52. package/dist/core-api/service/collection-type.js.map +1 -1
  53. package/dist/core-api/service/collection-type.mjs +72 -62
  54. package/dist/core-api/service/collection-type.mjs.map +1 -1
  55. package/dist/core-api/service/core-service.js +9 -8
  56. package/dist/core-api/service/core-service.js.map +1 -1
  57. package/dist/core-api/service/core-service.mjs +8 -9
  58. package/dist/core-api/service/core-service.mjs.map +1 -1
  59. package/dist/core-api/service/index.js +13 -13
  60. package/dist/core-api/service/index.js.map +1 -1
  61. package/dist/core-api/service/index.mjs +12 -14
  62. package/dist/core-api/service/index.mjs.map +1 -1
  63. package/dist/core-api/service/pagination.js +69 -43
  64. package/dist/core-api/service/pagination.js.map +1 -1
  65. package/dist/core-api/service/pagination.mjs +68 -47
  66. package/dist/core-api/service/pagination.mjs.map +1 -1
  67. package/dist/core-api/service/single-type.js +43 -39
  68. package/dist/core-api/service/single-type.js.map +1 -1
  69. package/dist/core-api/service/single-type.mjs +42 -41
  70. package/dist/core-api/service/single-type.mjs.map +1 -1
  71. package/dist/domain/content-type/index.js +95 -100
  72. package/dist/domain/content-type/index.js.map +1 -1
  73. package/dist/domain/content-type/index.mjs +94 -100
  74. package/dist/domain/content-type/index.mjs.map +1 -1
  75. package/dist/domain/content-type/validator.js +84 -69
  76. package/dist/domain/content-type/validator.js.map +1 -1
  77. package/dist/domain/content-type/validator.mjs +83 -68
  78. package/dist/domain/content-type/validator.mjs.map +1 -1
  79. package/dist/domain/module/index.js +109 -100
  80. package/dist/domain/module/index.js.map +1 -1
  81. package/dist/domain/module/index.mjs +108 -99
  82. package/dist/domain/module/index.mjs.map +1 -1
  83. package/dist/domain/module/validation.js +25 -20
  84. package/dist/domain/module/validation.js.map +1 -1
  85. package/dist/domain/module/validation.mjs +24 -21
  86. package/dist/domain/module/validation.mjs.map +1 -1
  87. package/dist/ee/index.d.ts +1 -0
  88. package/dist/ee/index.d.ts.map +1 -1
  89. package/dist/ee/index.js +171 -132
  90. package/dist/ee/index.js.map +1 -1
  91. package/dist/ee/index.mjs +170 -134
  92. package/dist/ee/index.mjs.map +1 -1
  93. package/dist/ee/license.d.ts.map +1 -1
  94. package/dist/ee/license.js +99 -75
  95. package/dist/ee/license.js.map +1 -1
  96. package/dist/ee/license.mjs +98 -76
  97. package/dist/ee/license.mjs.map +1 -1
  98. package/dist/factories.js +72 -67
  99. package/dist/factories.js.map +1 -1
  100. package/dist/factories.mjs +71 -71
  101. package/dist/factories.mjs.map +1 -1
  102. package/dist/index.js +29 -26
  103. package/dist/index.js.map +1 -1
  104. package/dist/index.mjs +29 -29
  105. package/dist/index.mjs.map +1 -1
  106. package/dist/loaders/admin.d.ts.map +1 -1
  107. package/dist/loaders/admin.js +21 -20
  108. package/dist/loaders/admin.js.map +1 -1
  109. package/dist/loaders/admin.mjs +20 -20
  110. package/dist/loaders/admin.mjs.map +1 -1
  111. package/dist/loaders/apis.js +143 -120
  112. package/dist/loaders/apis.js.map +1 -1
  113. package/dist/loaders/apis.mjs +142 -119
  114. package/dist/loaders/apis.mjs.map +1 -1
  115. package/dist/loaders/components.js +33 -34
  116. package/dist/loaders/components.js.map +1 -1
  117. package/dist/loaders/components.mjs +32 -34
  118. package/dist/loaders/components.mjs.map +1 -1
  119. package/dist/loaders/index.js +22 -20
  120. package/dist/loaders/index.js.map +1 -1
  121. package/dist/loaders/index.mjs +21 -21
  122. package/dist/loaders/index.mjs.map +1 -1
  123. package/dist/loaders/middlewares.js +29 -25
  124. package/dist/loaders/middlewares.js.map +1 -1
  125. package/dist/loaders/middlewares.mjs +28 -25
  126. package/dist/loaders/middlewares.mjs.map +1 -1
  127. package/dist/loaders/plugins/get-enabled-plugins.js +126 -131
  128. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  129. package/dist/loaders/plugins/get-enabled-plugins.mjs +125 -108
  130. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  131. package/dist/loaders/plugins/get-user-plugins-config.js +25 -24
  132. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  133. package/dist/loaders/plugins/get-user-plugins-config.mjs +24 -23
  134. package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
  135. package/dist/loaders/plugins/index.js +132 -122
  136. package/dist/loaders/plugins/index.js.map +1 -1
  137. package/dist/loaders/plugins/index.mjs +121 -112
  138. package/dist/loaders/plugins/index.mjs.map +1 -1
  139. package/dist/loaders/policies.js +24 -20
  140. package/dist/loaders/policies.js.map +1 -1
  141. package/dist/loaders/policies.mjs +23 -20
  142. package/dist/loaders/policies.mjs.map +1 -1
  143. package/dist/loaders/sanitizers.js +10 -4
  144. package/dist/loaders/sanitizers.js.map +1 -1
  145. package/dist/loaders/sanitizers.mjs +9 -6
  146. package/dist/loaders/sanitizers.mjs.map +1 -1
  147. package/dist/loaders/src-index.js +35 -27
  148. package/dist/loaders/src-index.js.map +1 -1
  149. package/dist/loaders/src-index.mjs +34 -29
  150. package/dist/loaders/src-index.mjs.map +1 -1
  151. package/dist/loaders/validators.js +9 -4
  152. package/dist/loaders/validators.js.map +1 -1
  153. package/dist/loaders/validators.mjs +8 -6
  154. package/dist/loaders/validators.mjs.map +1 -1
  155. package/dist/middlewares/body.d.ts.map +1 -1
  156. package/dist/middlewares/body.js +58 -54
  157. package/dist/middlewares/body.js.map +1 -1
  158. package/dist/middlewares/body.mjs +57 -51
  159. package/dist/middlewares/body.mjs.map +1 -1
  160. package/dist/middlewares/compression.js +6 -6
  161. package/dist/middlewares/compression.js.map +1 -1
  162. package/dist/middlewares/compression.mjs +5 -5
  163. package/dist/middlewares/compression.mjs.map +1 -1
  164. package/dist/middlewares/cors.js +59 -48
  165. package/dist/middlewares/cors.js.map +1 -1
  166. package/dist/middlewares/cors.mjs +58 -47
  167. package/dist/middlewares/cors.mjs.map +1 -1
  168. package/dist/middlewares/errors.js +32 -30
  169. package/dist/middlewares/errors.js.map +1 -1
  170. package/dist/middlewares/errors.mjs +31 -31
  171. package/dist/middlewares/errors.mjs.map +1 -1
  172. package/dist/middlewares/favicon.js +27 -17
  173. package/dist/middlewares/favicon.js.map +1 -1
  174. package/dist/middlewares/favicon.mjs +26 -16
  175. package/dist/middlewares/favicon.mjs.map +1 -1
  176. package/dist/middlewares/index.js +32 -30
  177. package/dist/middlewares/index.js.map +1 -1
  178. package/dist/middlewares/index.mjs +31 -31
  179. package/dist/middlewares/index.mjs.map +1 -1
  180. package/dist/middlewares/ip.js +6 -6
  181. package/dist/middlewares/ip.js.map +1 -1
  182. package/dist/middlewares/ip.mjs +5 -5
  183. package/dist/middlewares/ip.mjs.map +1 -1
  184. package/dist/middlewares/logger.js +10 -9
  185. package/dist/middlewares/logger.js.map +1 -1
  186. package/dist/middlewares/logger.mjs +9 -10
  187. package/dist/middlewares/logger.mjs.map +1 -1
  188. package/dist/middlewares/powered-by.js +13 -9
  189. package/dist/middlewares/powered-by.js.map +1 -1
  190. package/dist/middlewares/powered-by.mjs +12 -10
  191. package/dist/middlewares/powered-by.mjs.map +1 -1
  192. package/dist/middlewares/public.js +33 -29
  193. package/dist/middlewares/public.js.map +1 -1
  194. package/dist/middlewares/public.mjs +32 -28
  195. package/dist/middlewares/public.mjs.map +1 -1
  196. package/dist/middlewares/query.js +35 -32
  197. package/dist/middlewares/query.js.map +1 -1
  198. package/dist/middlewares/query.mjs +34 -31
  199. package/dist/middlewares/query.mjs.map +1 -1
  200. package/dist/middlewares/response-time.js +10 -9
  201. package/dist/middlewares/response-time.js.map +1 -1
  202. package/dist/middlewares/response-time.mjs +9 -10
  203. package/dist/middlewares/response-time.mjs.map +1 -1
  204. package/dist/middlewares/responses.js +14 -12
  205. package/dist/middlewares/responses.js.map +1 -1
  206. package/dist/middlewares/responses.mjs +13 -13
  207. package/dist/middlewares/responses.mjs.map +1 -1
  208. package/dist/middlewares/security.js +109 -71
  209. package/dist/middlewares/security.js.map +1 -1
  210. package/dist/middlewares/security.mjs +108 -70
  211. package/dist/middlewares/security.mjs.map +1 -1
  212. package/dist/middlewares/session.js +26 -25
  213. package/dist/middlewares/session.js.map +1 -1
  214. package/dist/middlewares/session.mjs +25 -24
  215. package/dist/middlewares/session.mjs.map +1 -1
  216. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +2 -2
  217. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
  218. package/dist/migrations/database/5.0.0-discard-drafts.js +154 -80
  219. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  220. package/dist/migrations/database/5.0.0-discard-drafts.mjs +153 -82
  221. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  222. package/dist/migrations/draft-publish.d.ts +1 -1
  223. package/dist/migrations/draft-publish.d.ts.map +1 -1
  224. package/dist/migrations/draft-publish.js +61 -34
  225. package/dist/migrations/draft-publish.js.map +1 -1
  226. package/dist/migrations/draft-publish.mjs +60 -36
  227. package/dist/migrations/draft-publish.mjs.map +1 -1
  228. package/dist/migrations/i18n.js +62 -45
  229. package/dist/migrations/i18n.js.map +1 -1
  230. package/dist/migrations/i18n.mjs +61 -47
  231. package/dist/migrations/i18n.mjs.map +1 -1
  232. package/dist/migrations/index.js +24 -10
  233. package/dist/migrations/index.js.map +1 -1
  234. package/dist/migrations/index.mjs +23 -12
  235. package/dist/migrations/index.mjs.map +1 -1
  236. package/dist/package.json.js +182 -0
  237. package/dist/package.json.js.map +1 -0
  238. package/dist/package.json.mjs +159 -0
  239. package/dist/package.json.mjs.map +1 -0
  240. package/dist/providers/admin.js +27 -17
  241. package/dist/providers/admin.js.map +1 -1
  242. package/dist/providers/admin.mjs +26 -19
  243. package/dist/providers/admin.mjs.map +1 -1
  244. package/dist/providers/coreStore.js +13 -8
  245. package/dist/providers/coreStore.js.map +1 -1
  246. package/dist/providers/coreStore.mjs +12 -10
  247. package/dist/providers/coreStore.mjs.map +1 -1
  248. package/dist/providers/cron.js +19 -16
  249. package/dist/providers/cron.js.map +1 -1
  250. package/dist/providers/cron.mjs +18 -18
  251. package/dist/providers/cron.mjs.map +1 -1
  252. package/dist/providers/index.js +18 -9
  253. package/dist/providers/index.js.map +1 -1
  254. package/dist/providers/index.mjs +17 -10
  255. package/dist/providers/index.mjs.map +1 -1
  256. package/dist/providers/provider.js +4 -3
  257. package/dist/providers/provider.js.map +1 -1
  258. package/dist/providers/provider.mjs +3 -4
  259. package/dist/providers/provider.mjs.map +1 -1
  260. package/dist/providers/registries.js +37 -32
  261. package/dist/providers/registries.js.map +1 -1
  262. package/dist/providers/registries.mjs +36 -34
  263. package/dist/providers/registries.mjs.map +1 -1
  264. package/dist/providers/telemetry.js +19 -16
  265. package/dist/providers/telemetry.js.map +1 -1
  266. package/dist/providers/telemetry.mjs +18 -18
  267. package/dist/providers/telemetry.mjs.map +1 -1
  268. package/dist/providers/webhooks.js +28 -26
  269. package/dist/providers/webhooks.js.map +1 -1
  270. package/dist/providers/webhooks.mjs +27 -28
  271. package/dist/providers/webhooks.mjs.map +1 -1
  272. package/dist/registries/apis.js +23 -20
  273. package/dist/registries/apis.js.map +1 -1
  274. package/dist/registries/apis.mjs +22 -22
  275. package/dist/registries/apis.mjs.map +1 -1
  276. package/dist/registries/components.js +35 -37
  277. package/dist/registries/components.js.map +1 -1
  278. package/dist/registries/components.mjs +34 -39
  279. package/dist/registries/components.mjs.map +1 -1
  280. package/dist/registries/content-types.js +54 -59
  281. package/dist/registries/content-types.js.map +1 -1
  282. package/dist/registries/content-types.mjs +53 -61
  283. package/dist/registries/content-types.mjs.map +1 -1
  284. package/dist/registries/controllers.js +70 -71
  285. package/dist/registries/controllers.js.map +1 -1
  286. package/dist/registries/controllers.mjs +69 -73
  287. package/dist/registries/controllers.mjs.map +1 -1
  288. package/dist/registries/custom-fields.js +75 -65
  289. package/dist/registries/custom-fields.js.map +1 -1
  290. package/dist/registries/custom-fields.mjs +74 -67
  291. package/dist/registries/custom-fields.mjs.map +1 -1
  292. package/dist/registries/hooks.js +46 -49
  293. package/dist/registries/hooks.js.map +1 -1
  294. package/dist/registries/hooks.mjs +45 -51
  295. package/dist/registries/hooks.mjs.map +1 -1
  296. package/dist/registries/middlewares.js +49 -51
  297. package/dist/registries/middlewares.js.map +1 -1
  298. package/dist/registries/middlewares.mjs +48 -53
  299. package/dist/registries/middlewares.mjs.map +1 -1
  300. package/dist/registries/models.js +14 -13
  301. package/dist/registries/models.js.map +1 -1
  302. package/dist/registries/models.mjs +13 -14
  303. package/dist/registries/models.mjs.map +1 -1
  304. package/dist/registries/modules.js +39 -36
  305. package/dist/registries/modules.js.map +1 -1
  306. package/dist/registries/modules.mjs +38 -38
  307. package/dist/registries/modules.mjs.map +1 -1
  308. package/dist/registries/namespace.js +21 -20
  309. package/dist/registries/namespace.js.map +1 -1
  310. package/dist/registries/namespace.mjs +20 -23
  311. package/dist/registries/namespace.mjs.map +1 -1
  312. package/dist/registries/plugins.js +23 -20
  313. package/dist/registries/plugins.js.map +1 -1
  314. package/dist/registries/plugins.mjs +22 -22
  315. package/dist/registries/plugins.mjs.map +1 -1
  316. package/dist/registries/policies.js +103 -96
  317. package/dist/registries/policies.js.map +1 -1
  318. package/dist/registries/policies.mjs +102 -98
  319. package/dist/registries/policies.mjs.map +1 -1
  320. package/dist/registries/sanitizers.js +23 -22
  321. package/dist/registries/sanitizers.js.map +1 -1
  322. package/dist/registries/sanitizers.mjs +22 -22
  323. package/dist/registries/sanitizers.mjs.map +1 -1
  324. package/dist/registries/services.js +71 -71
  325. package/dist/registries/services.js.map +1 -1
  326. package/dist/registries/services.mjs +70 -73
  327. package/dist/registries/services.mjs.map +1 -1
  328. package/dist/registries/validators.js +23 -22
  329. package/dist/registries/validators.js.map +1 -1
  330. package/dist/registries/validators.mjs +22 -22
  331. package/dist/registries/validators.mjs.map +1 -1
  332. package/dist/services/auth/index.js +74 -74
  333. package/dist/services/auth/index.js.map +1 -1
  334. package/dist/services/auth/index.mjs +73 -74
  335. package/dist/services/auth/index.mjs.map +1 -1
  336. package/dist/services/config.js +47 -43
  337. package/dist/services/config.js.map +1 -1
  338. package/dist/services/config.mjs +46 -44
  339. package/dist/services/config.mjs.map +1 -1
  340. package/dist/services/content-api/index.js +80 -79
  341. package/dist/services/content-api/index.js.map +1 -1
  342. package/dist/services/content-api/index.mjs +79 -79
  343. package/dist/services/content-api/index.mjs.map +1 -1
  344. package/dist/services/content-api/permissions/engine.js +8 -5
  345. package/dist/services/content-api/permissions/engine.js.map +1 -1
  346. package/dist/services/content-api/permissions/engine.mjs +7 -5
  347. package/dist/services/content-api/permissions/engine.mjs.map +1 -1
  348. package/dist/services/content-api/permissions/index.js +101 -81
  349. package/dist/services/content-api/permissions/index.js.map +1 -1
  350. package/dist/services/content-api/permissions/index.mjs +100 -81
  351. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  352. package/dist/services/content-api/permissions/providers/action.js +17 -14
  353. package/dist/services/content-api/permissions/providers/action.js.map +1 -1
  354. package/dist/services/content-api/permissions/providers/action.mjs +16 -16
  355. package/dist/services/content-api/permissions/providers/action.mjs.map +1 -1
  356. package/dist/services/content-api/permissions/providers/condition.js +17 -14
  357. package/dist/services/content-api/permissions/providers/condition.js.map +1 -1
  358. package/dist/services/content-api/permissions/providers/condition.mjs +16 -16
  359. package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -1
  360. package/dist/services/core-store.js +115 -95
  361. package/dist/services/core-store.js.map +1 -1
  362. package/dist/services/core-store.mjs +114 -97
  363. package/dist/services/core-store.mjs.map +1 -1
  364. package/dist/services/cron.js +74 -60
  365. package/dist/services/cron.js.map +1 -1
  366. package/dist/services/cron.mjs +73 -62
  367. package/dist/services/cron.mjs.map +1 -1
  368. package/dist/services/custom-fields.js +9 -7
  369. package/dist/services/custom-fields.js.map +1 -1
  370. package/dist/services/custom-fields.mjs +8 -9
  371. package/dist/services/custom-fields.mjs.map +1 -1
  372. package/dist/services/document-service/attributes/index.js +23 -18
  373. package/dist/services/document-service/attributes/index.js.map +1 -1
  374. package/dist/services/document-service/attributes/index.mjs +22 -19
  375. package/dist/services/document-service/attributes/index.mjs.map +1 -1
  376. package/dist/services/document-service/attributes/transforms.js +16 -15
  377. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  378. package/dist/services/document-service/attributes/transforms.mjs +15 -15
  379. package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
  380. package/dist/services/document-service/common.d.ts +1 -1
  381. package/dist/services/document-service/common.d.ts.map +1 -1
  382. package/dist/services/document-service/common.js +5 -4
  383. package/dist/services/document-service/common.js.map +1 -1
  384. package/dist/services/document-service/common.mjs +4 -5
  385. package/dist/services/document-service/common.mjs.map +1 -1
  386. package/dist/services/document-service/components.d.ts.map +1 -1
  387. package/dist/services/document-service/components.js +255 -257
  388. package/dist/services/document-service/components.js.map +1 -1
  389. package/dist/services/document-service/components.mjs +254 -262
  390. package/dist/services/document-service/components.mjs.map +1 -1
  391. package/dist/services/document-service/draft-and-publish.d.ts +1 -1
  392. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  393. package/dist/services/document-service/draft-and-publish.js +88 -48
  394. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  395. package/dist/services/document-service/draft-and-publish.mjs +87 -54
  396. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  397. package/dist/services/document-service/entries.d.ts +2 -2
  398. package/dist/services/document-service/entries.d.ts.map +1 -1
  399. package/dist/services/document-service/entries.js +109 -92
  400. package/dist/services/document-service/entries.js.map +1 -1
  401. package/dist/services/document-service/entries.mjs +108 -93
  402. package/dist/services/document-service/entries.mjs.map +1 -1
  403. package/dist/services/document-service/events.d.ts +1 -1
  404. package/dist/services/document-service/events.d.ts.map +1 -1
  405. package/dist/services/document-service/events.js +52 -40
  406. package/dist/services/document-service/events.js.map +1 -1
  407. package/dist/services/document-service/events.mjs +51 -41
  408. package/dist/services/document-service/events.mjs.map +1 -1
  409. package/dist/services/document-service/index.d.ts +2 -1
  410. package/dist/services/document-service/index.d.ts.map +1 -1
  411. package/dist/services/document-service/index.js +53 -32
  412. package/dist/services/document-service/index.js.map +1 -1
  413. package/dist/services/document-service/index.mjs +52 -33
  414. package/dist/services/document-service/index.mjs.map +1 -1
  415. package/dist/services/document-service/internationalization.js +62 -46
  416. package/dist/services/document-service/internationalization.js.map +1 -1
  417. package/dist/services/document-service/internationalization.mjs +61 -50
  418. package/dist/services/document-service/internationalization.mjs.map +1 -1
  419. package/dist/services/document-service/middlewares/errors.js +23 -19
  420. package/dist/services/document-service/middlewares/errors.js.map +1 -1
  421. package/dist/services/document-service/middlewares/errors.mjs +22 -20
  422. package/dist/services/document-service/middlewares/errors.mjs.map +1 -1
  423. package/dist/services/document-service/middlewares/middleware-manager.js +46 -44
  424. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -1
  425. package/dist/services/document-service/middlewares/middleware-manager.mjs +45 -45
  426. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -1
  427. package/dist/services/document-service/params.js +11 -5
  428. package/dist/services/document-service/params.js.map +1 -1
  429. package/dist/services/document-service/params.mjs +10 -6
  430. package/dist/services/document-service/params.mjs.map +1 -1
  431. package/dist/services/document-service/repository.d.ts.map +1 -1
  432. package/dist/services/document-service/repository.js +354 -304
  433. package/dist/services/document-service/repository.js.map +1 -1
  434. package/dist/services/document-service/repository.mjs +353 -305
  435. package/dist/services/document-service/repository.mjs.map +1 -1
  436. package/dist/services/document-service/transform/data.js +22 -12
  437. package/dist/services/document-service/transform/data.js.map +1 -1
  438. package/dist/services/document-service/transform/data.mjs +21 -13
  439. package/dist/services/document-service/transform/data.mjs.map +1 -1
  440. package/dist/services/document-service/transform/fields.js +26 -17
  441. package/dist/services/document-service/transform/fields.js.map +1 -1
  442. package/dist/services/document-service/transform/fields.mjs +25 -18
  443. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  444. package/dist/services/document-service/transform/id-map.d.ts +1 -1
  445. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  446. package/dist/services/document-service/transform/id-map.js +116 -69
  447. package/dist/services/document-service/transform/id-map.js.map +1 -1
  448. package/dist/services/document-service/transform/id-map.mjs +115 -70
  449. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  450. package/dist/services/document-service/transform/id-transform.d.ts +1 -1
  451. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  452. package/dist/services/document-service/transform/id-transform.js +37 -29
  453. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  454. package/dist/services/document-service/transform/id-transform.mjs +36 -30
  455. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  456. package/dist/services/document-service/transform/populate.js +23 -18
  457. package/dist/services/document-service/transform/populate.js.map +1 -1
  458. package/dist/services/document-service/transform/populate.mjs +22 -19
  459. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  460. package/dist/services/document-service/transform/query.js +11 -6
  461. package/dist/services/document-service/transform/query.js.map +1 -1
  462. package/dist/services/document-service/transform/query.mjs +10 -7
  463. package/dist/services/document-service/transform/query.mjs.map +1 -1
  464. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +1 -1
  465. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  466. package/dist/services/document-service/transform/relations/extract/data-ids.js +71 -48
  467. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  468. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +70 -49
  469. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  470. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  471. package/dist/services/document-service/transform/relations/transform/data-ids.js +97 -63
  472. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  473. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +96 -64
  474. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  475. package/dist/services/document-service/transform/relations/transform/default-locale.js +47 -29
  476. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
  477. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +46 -30
  478. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
  479. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  480. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  481. package/dist/services/document-service/transform/relations/utils/dp.js +52 -26
  482. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  483. package/dist/services/document-service/transform/relations/utils/dp.mjs +51 -27
  484. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  485. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +1 -1
  486. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  487. package/dist/services/document-service/transform/relations/utils/i18n.js +20 -18
  488. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  489. package/dist/services/document-service/transform/relations/utils/i18n.mjs +19 -21
  490. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  491. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  492. package/dist/services/document-service/transform/relations/utils/map-relation.js +116 -77
  493. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  494. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +115 -79
  495. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  496. package/dist/services/document-service/utils/bidirectional-relations.d.ts +95 -0
  497. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -0
  498. package/dist/services/document-service/utils/bidirectional-relations.js +148 -0
  499. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -0
  500. package/dist/services/document-service/utils/bidirectional-relations.mjs +145 -0
  501. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -0
  502. package/dist/services/document-service/utils/populate.d.ts +1 -1
  503. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  504. package/dist/services/document-service/utils/populate.js +66 -42
  505. package/dist/services/document-service/utils/populate.js.map +1 -1
  506. package/dist/services/document-service/utils/populate.mjs +65 -43
  507. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  508. package/dist/services/document-service/utils/unidirectional-relations.d.ts +12 -9
  509. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  510. package/dist/services/document-service/utils/unidirectional-relations.js +110 -51
  511. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  512. package/dist/services/document-service/utils/unidirectional-relations.mjs +109 -53
  513. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  514. package/dist/services/entity-service/index.js +230 -161
  515. package/dist/services/entity-service/index.js.map +1 -1
  516. package/dist/services/entity-service/index.mjs +229 -160
  517. package/dist/services/entity-service/index.mjs.map +1 -1
  518. package/dist/services/entity-validator/blocks-validator.js +135 -103
  519. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  520. package/dist/services/entity-validator/blocks-validator.mjs +134 -104
  521. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  522. package/dist/services/entity-validator/index.d.ts +1 -1
  523. package/dist/services/entity-validator/index.d.ts.map +1 -1
  524. package/dist/services/entity-validator/index.js +362 -367
  525. package/dist/services/entity-validator/index.js.map +1 -1
  526. package/dist/services/entity-validator/index.mjs +358 -364
  527. package/dist/services/entity-validator/index.mjs.map +1 -1
  528. package/dist/services/entity-validator/validators.js +268 -210
  529. package/dist/services/entity-validator/validators.js.map +1 -1
  530. package/dist/services/entity-validator/validators.mjs +267 -216
  531. package/dist/services/entity-validator/validators.mjs.map +1 -1
  532. package/dist/services/errors.js +65 -65
  533. package/dist/services/errors.js.map +1 -1
  534. package/dist/services/errors.mjs +64 -66
  535. package/dist/services/errors.mjs.map +1 -1
  536. package/dist/services/event-hub.js +82 -69
  537. package/dist/services/event-hub.js.map +1 -1
  538. package/dist/services/event-hub.mjs +81 -71
  539. package/dist/services/event-hub.mjs.map +1 -1
  540. package/dist/services/features.js +19 -14
  541. package/dist/services/features.js.map +1 -1
  542. package/dist/services/features.mjs +18 -15
  543. package/dist/services/features.mjs.map +1 -1
  544. package/dist/services/fs.js +41 -40
  545. package/dist/services/fs.js.map +1 -1
  546. package/dist/services/fs.mjs +40 -39
  547. package/dist/services/fs.mjs.map +1 -1
  548. package/dist/services/metrics/admin-user-hash.js +13 -11
  549. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  550. package/dist/services/metrics/admin-user-hash.mjs +12 -10
  551. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  552. package/dist/services/metrics/index.js +46 -40
  553. package/dist/services/metrics/index.js.map +1 -1
  554. package/dist/services/metrics/index.mjs +45 -42
  555. package/dist/services/metrics/index.mjs.map +1 -1
  556. package/dist/services/metrics/is-truthy.js +13 -6
  557. package/dist/services/metrics/is-truthy.js.map +1 -1
  558. package/dist/services/metrics/is-truthy.mjs +12 -6
  559. package/dist/services/metrics/is-truthy.mjs.map +1 -1
  560. package/dist/services/metrics/middleware.d.ts.map +1 -1
  561. package/dist/services/metrics/middleware.js +37 -22
  562. package/dist/services/metrics/middleware.js.map +1 -1
  563. package/dist/services/metrics/middleware.mjs +36 -24
  564. package/dist/services/metrics/middleware.mjs.map +1 -1
  565. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  566. package/dist/services/metrics/rate-limiter.js +24 -19
  567. package/dist/services/metrics/rate-limiter.js.map +1 -1
  568. package/dist/services/metrics/rate-limiter.mjs +23 -21
  569. package/dist/services/metrics/rate-limiter.mjs.map +1 -1
  570. package/dist/services/metrics/sender.js +78 -69
  571. package/dist/services/metrics/sender.js.map +1 -1
  572. package/dist/services/metrics/sender.mjs +77 -64
  573. package/dist/services/metrics/sender.mjs.map +1 -1
  574. package/dist/services/query-params.js +13 -10
  575. package/dist/services/query-params.js.map +1 -1
  576. package/dist/services/query-params.mjs +12 -12
  577. package/dist/services/query-params.mjs.map +1 -1
  578. package/dist/services/reloader.js +35 -32
  579. package/dist/services/reloader.js.map +1 -1
  580. package/dist/services/reloader.mjs +34 -33
  581. package/dist/services/reloader.mjs.map +1 -1
  582. package/dist/services/request-context.js +11 -8
  583. package/dist/services/request-context.js.map +1 -1
  584. package/dist/services/request-context.mjs +10 -10
  585. package/dist/services/request-context.mjs.map +1 -1
  586. package/dist/services/server/admin-api.js +11 -10
  587. package/dist/services/server/admin-api.js.map +1 -1
  588. package/dist/services/server/admin-api.mjs +10 -11
  589. package/dist/services/server/admin-api.mjs.map +1 -1
  590. package/dist/services/server/api.js +33 -27
  591. package/dist/services/server/api.js.map +1 -1
  592. package/dist/services/server/api.mjs +32 -26
  593. package/dist/services/server/api.mjs.map +1 -1
  594. package/dist/services/server/compose-endpoint.js +116 -105
  595. package/dist/services/server/compose-endpoint.js.map +1 -1
  596. package/dist/services/server/compose-endpoint.mjs +115 -105
  597. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  598. package/dist/services/server/content-api.js +11 -9
  599. package/dist/services/server/content-api.js.map +1 -1
  600. package/dist/services/server/content-api.mjs +10 -10
  601. package/dist/services/server/content-api.mjs.map +1 -1
  602. package/dist/services/server/http-server.js +48 -44
  603. package/dist/services/server/http-server.js.map +1 -1
  604. package/dist/services/server/http-server.mjs +47 -43
  605. package/dist/services/server/http-server.mjs.map +1 -1
  606. package/dist/services/server/index.js +85 -82
  607. package/dist/services/server/index.js.map +1 -1
  608. package/dist/services/server/index.mjs +84 -81
  609. package/dist/services/server/index.mjs.map +1 -1
  610. package/dist/services/server/koa.js +49 -47
  611. package/dist/services/server/koa.js.map +1 -1
  612. package/dist/services/server/koa.mjs +48 -44
  613. package/dist/services/server/koa.mjs.map +1 -1
  614. package/dist/services/server/middleware.js +86 -82
  615. package/dist/services/server/middleware.js.map +1 -1
  616. package/dist/services/server/middleware.mjs +85 -82
  617. package/dist/services/server/middleware.mjs.map +1 -1
  618. package/dist/services/server/policy.js +24 -17
  619. package/dist/services/server/policy.js.map +1 -1
  620. package/dist/services/server/policy.mjs +23 -18
  621. package/dist/services/server/policy.mjs.map +1 -1
  622. package/dist/services/server/register-middlewares.js +68 -61
  623. package/dist/services/server/register-middlewares.js.map +1 -1
  624. package/dist/services/server/register-middlewares.mjs +67 -63
  625. package/dist/services/server/register-middlewares.mjs.map +1 -1
  626. package/dist/services/server/register-routes.js +90 -67
  627. package/dist/services/server/register-routes.js.map +1 -1
  628. package/dist/services/server/register-routes.mjs +89 -67
  629. package/dist/services/server/register-routes.mjs.map +1 -1
  630. package/dist/services/server/routing.js +94 -81
  631. package/dist/services/server/routing.js.map +1 -1
  632. package/dist/services/server/routing.mjs +93 -81
  633. package/dist/services/server/routing.mjs.map +1 -1
  634. package/dist/services/utils/dynamic-zones.js +13 -14
  635. package/dist/services/utils/dynamic-zones.js.map +1 -1
  636. package/dist/services/utils/dynamic-zones.mjs +12 -16
  637. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  638. package/dist/services/webhook-runner.js +124 -122
  639. package/dist/services/webhook-runner.js.map +1 -1
  640. package/dist/services/webhook-runner.mjs +123 -121
  641. package/dist/services/webhook-runner.mjs.map +1 -1
  642. package/dist/services/webhook-store.js +132 -99
  643. package/dist/services/webhook-store.js.map +1 -1
  644. package/dist/services/webhook-store.mjs +131 -101
  645. package/dist/services/webhook-store.mjs.map +1 -1
  646. package/dist/services/worker-queue.js +44 -49
  647. package/dist/services/worker-queue.js.map +1 -1
  648. package/dist/services/worker-queue.mjs +43 -49
  649. package/dist/services/worker-queue.mjs.map +1 -1
  650. package/dist/utils/convert-custom-field-type.js +17 -20
  651. package/dist/utils/convert-custom-field-type.js.map +1 -1
  652. package/dist/utils/convert-custom-field-type.mjs +16 -21
  653. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  654. package/dist/utils/cron.js +64 -30
  655. package/dist/utils/cron.js.map +1 -1
  656. package/dist/utils/cron.mjs +63 -31
  657. package/dist/utils/cron.mjs.map +1 -1
  658. package/dist/utils/fetch.js +24 -18
  659. package/dist/utils/fetch.js.map +1 -1
  660. package/dist/utils/fetch.mjs +23 -19
  661. package/dist/utils/fetch.mjs.map +1 -1
  662. package/dist/utils/filepath-to-prop-path.js +20 -28
  663. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  664. package/dist/utils/filepath-to-prop-path.mjs +19 -26
  665. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  666. package/dist/utils/is-initialized.js +21 -12
  667. package/dist/utils/is-initialized.js.map +1 -1
  668. package/dist/utils/is-initialized.mjs +20 -13
  669. package/dist/utils/is-initialized.mjs.map +1 -1
  670. package/dist/utils/lifecycles.js +6 -5
  671. package/dist/utils/lifecycles.js.map +1 -1
  672. package/dist/utils/lifecycles.mjs +5 -6
  673. package/dist/utils/lifecycles.mjs.map +1 -1
  674. package/dist/utils/load-config-file.js +40 -38
  675. package/dist/utils/load-config-file.js.map +1 -1
  676. package/dist/utils/load-config-file.mjs +39 -36
  677. package/dist/utils/load-config-file.mjs.map +1 -1
  678. package/dist/utils/load-files.js +40 -35
  679. package/dist/utils/load-files.js.map +1 -1
  680. package/dist/utils/load-files.mjs +39 -32
  681. package/dist/utils/load-files.mjs.map +1 -1
  682. package/dist/utils/open-browser.js +8 -8
  683. package/dist/utils/open-browser.js.map +1 -1
  684. package/dist/utils/open-browser.mjs +7 -7
  685. package/dist/utils/open-browser.mjs.map +1 -1
  686. package/dist/utils/resolve-working-dirs.js +23 -10
  687. package/dist/utils/resolve-working-dirs.js.map +1 -1
  688. package/dist/utils/resolve-working-dirs.mjs +22 -9
  689. package/dist/utils/resolve-working-dirs.mjs.map +1 -1
  690. package/dist/utils/signals.js +20 -14
  691. package/dist/utils/signals.js.map +1 -1
  692. package/dist/utils/signals.mjs +19 -15
  693. package/dist/utils/signals.mjs.map +1 -1
  694. package/dist/utils/startup-logger.d.ts.map +1 -1
  695. package/dist/utils/startup-logger.js +107 -78
  696. package/dist/utils/startup-logger.js.map +1 -1
  697. package/dist/utils/startup-logger.mjs +106 -75
  698. package/dist/utils/startup-logger.mjs.map +1 -1
  699. package/dist/utils/transform-content-types-to-models.d.ts +353 -21
  700. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  701. package/dist/utils/transform-content-types-to-models.js +350 -261
  702. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  703. package/dist/utils/transform-content-types-to-models.mjs +349 -269
  704. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  705. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  706. package/dist/utils/update-notifier/index.js +68 -73
  707. package/dist/utils/update-notifier/index.js.map +1 -1
  708. package/dist/utils/update-notifier/index.mjs +67 -67
  709. package/dist/utils/update-notifier/index.mjs.map +1 -1
  710. package/package.json +27 -28
@@ -1 +1 @@
1
- {"version":3,"file":"apis.js","sources":["../../src/loaders/apis.ts"],"sourcesContent":["import { join, extname, basename } from 'path';\nimport fse, { existsSync } from 'fs-extra';\nimport _ from 'lodash';\nimport { strings, importDefault } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Core, Struct } from '@strapi/types';\nimport { getGlobalId, type ContentTypeDefinition } from '../domain/content-type';\n\ninterface API {\n bootstrap: () => void | Promise<void>;\n destroy: () => void | Promise<void>;\n register: () => void | Promise<void>;\n config: Record<string, unknown>;\n routes: Record<string, Core.Router>;\n controllers: Record<string, Core.Controller>;\n services: Record<string, Core.Service>;\n policies: Record<string, Core.Policy>;\n middlewares: Record<string, Core.Middleware>;\n contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>;\n}\n\ninterface APIs {\n [key: string]: API;\n}\n\nconst DEFAULT_CONTENT_TYPE = {\n schema: {},\n actions: {},\n lifecycles: {},\n};\n\n// to handle names with numbers in it we first check if it is already in kebabCase\nconst normalizeName = (name: string) => (strings.isKebabCase(name) ? name : _.kebabCase(name));\n\nconst isDirectory = (fd: fse.Dirent) => fd.isDirectory();\nconst isDotFile = (fd: fse.Dirent) => fd.name.startsWith('.');\n\nexport default async function loadAPIs(strapi: Core.Strapi) {\n if (!existsSync(strapi.dirs.dist.api)) {\n return;\n }\n\n const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, { withFileTypes: true }))\n .filter(isDirectory)\n .filter(_.negate(isDotFile));\n\n const apis: APIs = {};\n\n // only load folders\n for (const apiFD of apisFDs) {\n const apiName = normalizeName(apiFD.name);\n const api = await loadAPI(apiName, join(strapi.dirs.dist.api, apiFD.name));\n\n // @ts-expect-error TODO verify that it's a valid api, not missing bootstrap, register, and destroy\n apis[apiName] = api;\n }\n\n validateContentTypesUnicity(apis);\n\n for (const apiName of Object.keys(apis)) {\n strapi.get('apis').add(apiName, apis[apiName]);\n }\n}\n\nconst validateContentTypesUnicity = (apis: APIs) => {\n const allApisSchemas = Object.values(apis).flatMap((api) => Object.values(api.contentTypes));\n\n const names: string[] = [];\n allApisSchemas.forEach(({ schema }) => {\n if (schema.info.singularName) {\n const singularName = _.kebabCase(schema.info.singularName);\n if (names.includes(singularName)) {\n throw new Error(`The singular name \"${schema.info.singularName}\" should be unique`);\n }\n names.push(singularName);\n }\n\n if (schema.info.pluralName) {\n const pluralName = _.kebabCase(schema.info.pluralName);\n if (names.includes(pluralName)) {\n throw new Error(`The plural name \"${schema.info.pluralName}\" should be unique`);\n }\n names.push(pluralName);\n }\n });\n};\n\nconst loadAPI = async (apiName: string, dir: string) => {\n const [index, config, routes, controllers, services, policies, middlewares, contentTypes] = (\n await Promise.all([\n loadIndex(dir),\n loadDir(join(dir, 'config')),\n loadDir(join(dir, 'routes')),\n loadDir(join(dir, 'controllers')),\n loadDir(join(dir, 'services')),\n loadDir(join(dir, 'policies')),\n loadDir(join(dir, 'middlewares')),\n loadContentTypes(apiName, join(dir, 'content-types')),\n ])\n ).map((result) => result?.result);\n\n return {\n ...(index || {}),\n config: config || {},\n routes: routes || [],\n controllers: controllers || {},\n services: services || {},\n policies: policies || {},\n middlewares: middlewares || {},\n contentTypes: contentTypes || {},\n };\n};\n\nconst loadIndex = async (dir: string) => {\n if (await fse.pathExists(join(dir, 'index.js'))) {\n return loadFile(join(dir, 'index.js'));\n }\n};\n\n// because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise\nconst loadContentTypes = async (apiName: string, dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n const contentTypes: API['contentTypes'] = {};\n\n // only load folders\n for (const fd of fds) {\n if (fd.isFile()) {\n continue;\n }\n\n const contentTypeName = normalizeName(fd.name);\n const loadedContentType = (await loadDir(join(dir, fd.name)))?.result;\n\n if (isEmpty(loadedContentType) || isEmpty(loadedContentType.schema)) {\n throw new Error(`Could not load content type found at ${dir}`);\n }\n\n const contentType = {\n ...DEFAULT_CONTENT_TYPE,\n ...loadedContentType,\n } as ContentTypeDefinition;\n\n Object.assign(contentType.schema, {\n apiName,\n collectionName: contentType.schema.collectionName || contentType.schema.info.singularName,\n globalId: getGlobalId(contentType.schema),\n });\n\n contentTypes[normalizeName(contentTypeName)] = contentType;\n }\n\n return { result: contentTypes };\n};\n\n// because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise\nconst loadDir = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n\n const root: Record<string, unknown> = {};\n for (const fd of fds) {\n if (!fd.isFile() || extname(fd.name) === '.map') {\n continue;\n }\n\n const key = basename(fd.name, extname(fd.name));\n\n root[normalizeName(key)] = (await loadFile(join(dir, fd.name))).result;\n }\n\n return { result: root };\n};\n\n// because this is async and its contents are dynamic, we must return it as an array to avoid a property called `then` being interpreted as a Promise\nconst loadFile = async (file: string): Promise<{ result: unknown }> => {\n const ext = extname(file);\n\n switch (ext) {\n case '.js':\n return { result: importDefault(file) };\n case '.json':\n return { result: await fse.readJSON(file) };\n default:\n return { result: {} };\n }\n};\n"],"names":["strings","_","existsSync","fse","join","index","isEmpty","getGlobalId","extname","basename","importDefault"],"mappings":";;;;;;;;;;AAyBA,MAAM,uBAAuB;AAAA,EAC3B,QAAQ,CAAC;AAAA,EACT,SAAS,CAAC;AAAA,EACV,YAAY,CAAC;AACf;AAGA,MAAM,gBAAgB,CAAC,SAAkBA,YAAQ,QAAA,YAAY,IAAI,IAAI,OAAOC,WAAE,QAAA,UAAU,IAAI;AAE5F,MAAM,cAAc,CAAC,OAAmB,GAAG,YAAY;AACvD,MAAM,YAAY,CAAC,OAAmB,GAAG,KAAK,WAAW,GAAG;AAE5D,eAA8B,SAAS,QAAqB;AAC1D,MAAI,CAACC,IAAW,WAAA,OAAO,KAAK,KAAK,GAAG,GAAG;AACrC;AAAA,EACF;AAEM,QAAA,UAAU,OAAO,MAAMC,aAAA,QAAI,QAAQ,OAAO,KAAK,KAAK,KAAK,EAAE,eAAe,KAAM,CAAA,GACnF,OAAO,WAAW,EAClB,OAAOF,mBAAE,OAAO,SAAS,CAAC;AAE7B,QAAM,OAAa,CAAA;AAGnB,aAAW,SAAS,SAAS;AACrB,UAAA,UAAU,cAAc,MAAM,IAAI;AAClC,UAAA,MAAM,MAAM,QAAQ,SAASG,KAAAA,KAAK,OAAO,KAAK,KAAK,KAAK,MAAM,IAAI,CAAC;AAGzE,SAAK,OAAO,IAAI;AAAA,EAClB;AAEA,8BAA4B,IAAI;AAEhC,aAAW,WAAW,OAAO,KAAK,IAAI,GAAG;AACvC,WAAO,IAAI,MAAM,EAAE,IAAI,SAAS,KAAK,OAAO,CAAC;AAAA,EAC/C;AACF;AAEA,MAAM,8BAA8B,CAAC,SAAe;AAClD,QAAM,iBAAiB,OAAO,OAAO,IAAI,EAAE,QAAQ,CAAC,QAAQ,OAAO,OAAO,IAAI,YAAY,CAAC;AAE3F,QAAM,QAAkB,CAAA;AACxB,iBAAe,QAAQ,CAAC,EAAE,aAAa;AACjC,QAAA,OAAO,KAAK,cAAc;AAC5B,YAAM,eAAeH,WAAAA,QAAE,UAAU,OAAO,KAAK,YAAY;AACrD,UAAA,MAAM,SAAS,YAAY,GAAG;AAChC,cAAM,IAAI,MAAM,sBAAsB,OAAO,KAAK,YAAY,oBAAoB;AAAA,MACpF;AACA,YAAM,KAAK,YAAY;AAAA,IACzB;AAEI,QAAA,OAAO,KAAK,YAAY;AAC1B,YAAM,aAAaA,WAAAA,QAAE,UAAU,OAAO,KAAK,UAAU;AACjD,UAAA,MAAM,SAAS,UAAU,GAAG;AAC9B,cAAM,IAAI,MAAM,oBAAoB,OAAO,KAAK,UAAU,oBAAoB;AAAA,MAChF;AACA,YAAM,KAAK,UAAU;AAAA,IACvB;AAAA,EAAA,CACD;AACH;AAEA,MAAM,UAAU,OAAO,SAAiB,QAAgB;AACtD,QAAM,CAACI,QAAO,QAAQ,QAAQ,aAAa,UAAU,UAAU,aAAa,YAAY,KACtF,MAAM,QAAQ,IAAI;AAAA,IAChB,UAAU,GAAG;AAAA,IACb,QAAQD,KAAA,KAAK,KAAK,QAAQ,CAAC;AAAA,IAC3B,QAAQA,KAAA,KAAK,KAAK,QAAQ,CAAC;AAAA,IAC3B,QAAQA,KAAA,KAAK,KAAK,aAAa,CAAC;AAAA,IAChC,QAAQA,KAAA,KAAK,KAAK,UAAU,CAAC;AAAA,IAC7B,QAAQA,KAAA,KAAK,KAAK,UAAU,CAAC;AAAA,IAC7B,QAAQA,KAAA,KAAK,KAAK,aAAa,CAAC;AAAA,IAChC,iBAAiB,SAASA,KAAAA,KAAK,KAAK,eAAe,CAAC;AAAA,EACrD,CAAA,GACD,IAAI,CAAC,WAAW,QAAQ,MAAM;AAEzB,SAAA;AAAA,IACL,GAAIC,UAAS,CAAC;AAAA,IACd,QAAQ,UAAU,CAAC;AAAA,IACnB,QAAQ,UAAU,CAAC;AAAA,IACnB,aAAa,eAAe,CAAC;AAAA,IAC7B,UAAU,YAAY,CAAC;AAAA,IACvB,UAAU,YAAY,CAAC;AAAA,IACvB,aAAa,eAAe,CAAC;AAAA,IAC7B,cAAc,gBAAgB,CAAC;AAAA,EAAA;AAEnC;AAEA,MAAM,YAAY,OAAO,QAAgB;AACvC,MAAI,MAAMF,aAAI,QAAA,WAAWC,UAAK,KAAK,UAAU,CAAC,GAAG;AAC/C,WAAO,SAASA,KAAA,KAAK,KAAK,UAAU,CAAC;AAAA,EACvC;AACF;AAGA,MAAM,mBAAmB,OAAO,SAAiB,QAAgB;AAC/D,MAAI,CAAE,MAAMD,aAAAA,QAAI,WAAW,GAAG,GAAI;AAChC;AAAA,EACF;AAEM,QAAA,MAAM,MAAMA,aAAAA,QAAI,QAAQ,KAAK,EAAE,eAAe,MAAM;AAC1D,QAAM,eAAoC,CAAA;AAG1C,aAAW,MAAM,KAAK;AAChB,QAAA,GAAG,UAAU;AACf;AAAA,IACF;AAEM,UAAA,kBAAkB,cAAc,GAAG,IAAI;AACvC,UAAA,qBAAqB,MAAM,QAAQC,KAAA,KAAK,KAAK,GAAG,IAAI,CAAC,IAAI;AAE/D,QAAIE,GAAAA,QAAQ,iBAAiB,KAAKA,GAAQ,QAAA,kBAAkB,MAAM,GAAG;AACnE,YAAM,IAAI,MAAM,wCAAwC,GAAG,EAAE;AAAA,IAC/D;AAEA,UAAM,cAAc;AAAA,MAClB,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAGE,WAAA,OAAO,YAAY,QAAQ;AAAA,MAChC;AAAA,MACA,gBAAgB,YAAY,OAAO,kBAAkB,YAAY,OAAO,KAAK;AAAA,MAC7E,UAAUC,MAAAA,YAAY,YAAY,MAAM;AAAA,IAAA,CACzC;AAEY,iBAAA,cAAc,eAAe,CAAC,IAAI;AAAA,EACjD;AAEO,SAAA,EAAE,QAAQ;AACnB;AAGA,MAAM,UAAU,OAAO,QAAgB;AACrC,MAAI,CAAE,MAAMJ,aAAAA,QAAI,WAAW,GAAG,GAAI;AAChC;AAAA,EACF;AAEM,QAAA,MAAM,MAAMA,aAAAA,QAAI,QAAQ,KAAK,EAAE,eAAe,MAAM;AAE1D,QAAM,OAAgC,CAAA;AACtC,aAAW,MAAM,KAAK;AAChB,QAAA,CAAC,GAAG,OAAO,KAAKK,aAAQ,GAAG,IAAI,MAAM,QAAQ;AAC/C;AAAA,IACF;AAEA,UAAM,MAAMC,KAAS,SAAA,GAAG,MAAMD,KAAAA,QAAQ,GAAG,IAAI,CAAC;AAEzC,SAAA,cAAc,GAAG,CAAC,KAAK,MAAM,SAASJ,KAAA,KAAK,KAAK,GAAG,IAAI,CAAC,GAAG;AAAA,EAClE;AAEO,SAAA,EAAE,QAAQ;AACnB;AAGA,MAAM,WAAW,OAAO,SAA+C;AAC/D,QAAA,MAAMI,aAAQ,IAAI;AAExB,UAAQ,KAAK;AAAA,IACX,KAAK;AACH,aAAO,EAAE,QAAQE,0BAAc,IAAI,EAAE;AAAA,IACvC,KAAK;AACH,aAAO,EAAE,QAAQ,MAAMP,aAAAA,QAAI,SAAS,IAAI,EAAE;AAAA,IAC5C;AACS,aAAA,EAAE,QAAQ,CAAA;EACrB;AACF;;"}
1
+ {"version":3,"file":"apis.js","sources":["../../src/loaders/apis.ts"],"sourcesContent":["import { join, extname, basename } from 'path';\nimport fse, { existsSync } from 'fs-extra';\nimport _ from 'lodash';\nimport { strings, importDefault } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Core, Struct } from '@strapi/types';\nimport { getGlobalId, type ContentTypeDefinition } from '../domain/content-type';\n\ninterface API {\n bootstrap: () => void | Promise<void>;\n destroy: () => void | Promise<void>;\n register: () => void | Promise<void>;\n config: Record<string, unknown>;\n routes: Record<string, Core.Router>;\n controllers: Record<string, Core.Controller>;\n services: Record<string, Core.Service>;\n policies: Record<string, Core.Policy>;\n middlewares: Record<string, Core.Middleware>;\n contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>;\n}\n\ninterface APIs {\n [key: string]: API;\n}\n\nconst DEFAULT_CONTENT_TYPE = {\n schema: {},\n actions: {},\n lifecycles: {},\n};\n\n// to handle names with numbers in it we first check if it is already in kebabCase\nconst normalizeName = (name: string) => (strings.isKebabCase(name) ? name : _.kebabCase(name));\n\nconst isDirectory = (fd: fse.Dirent) => fd.isDirectory();\nconst isDotFile = (fd: fse.Dirent) => fd.name.startsWith('.');\n\nexport default async function loadAPIs(strapi: Core.Strapi) {\n if (!existsSync(strapi.dirs.dist.api)) {\n return;\n }\n\n const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, { withFileTypes: true }))\n .filter(isDirectory)\n .filter(_.negate(isDotFile));\n\n const apis: APIs = {};\n\n // only load folders\n for (const apiFD of apisFDs) {\n const apiName = normalizeName(apiFD.name);\n const api = await loadAPI(apiName, join(strapi.dirs.dist.api, apiFD.name));\n\n // @ts-expect-error TODO verify that it's a valid api, not missing bootstrap, register, and destroy\n apis[apiName] = api;\n }\n\n validateContentTypesUnicity(apis);\n\n for (const apiName of Object.keys(apis)) {\n strapi.get('apis').add(apiName, apis[apiName]);\n }\n}\n\nconst validateContentTypesUnicity = (apis: APIs) => {\n const allApisSchemas = Object.values(apis).flatMap((api) => Object.values(api.contentTypes));\n\n const names: string[] = [];\n allApisSchemas.forEach(({ schema }) => {\n if (schema.info.singularName) {\n const singularName = _.kebabCase(schema.info.singularName);\n if (names.includes(singularName)) {\n throw new Error(`The singular name \"${schema.info.singularName}\" should be unique`);\n }\n names.push(singularName);\n }\n\n if (schema.info.pluralName) {\n const pluralName = _.kebabCase(schema.info.pluralName);\n if (names.includes(pluralName)) {\n throw new Error(`The plural name \"${schema.info.pluralName}\" should be unique`);\n }\n names.push(pluralName);\n }\n });\n};\n\nconst loadAPI = async (apiName: string, dir: string) => {\n const [index, config, routes, controllers, services, policies, middlewares, contentTypes] = (\n await Promise.all([\n loadIndex(dir),\n loadDir(join(dir, 'config')),\n loadDir(join(dir, 'routes')),\n loadDir(join(dir, 'controllers')),\n loadDir(join(dir, 'services')),\n loadDir(join(dir, 'policies')),\n loadDir(join(dir, 'middlewares')),\n loadContentTypes(apiName, join(dir, 'content-types')),\n ])\n ).map((result) => result?.result);\n\n return {\n ...(index || {}),\n config: config || {},\n routes: routes || [],\n controllers: controllers || {},\n services: services || {},\n policies: policies || {},\n middlewares: middlewares || {},\n contentTypes: contentTypes || {},\n };\n};\n\nconst loadIndex = async (dir: string) => {\n if (await fse.pathExists(join(dir, 'index.js'))) {\n return loadFile(join(dir, 'index.js'));\n }\n};\n\n// because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise\nconst loadContentTypes = async (apiName: string, dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n const contentTypes: API['contentTypes'] = {};\n\n // only load folders\n for (const fd of fds) {\n if (fd.isFile()) {\n continue;\n }\n\n const contentTypeName = normalizeName(fd.name);\n const loadedContentType = (await loadDir(join(dir, fd.name)))?.result;\n\n if (isEmpty(loadedContentType) || isEmpty(loadedContentType.schema)) {\n throw new Error(`Could not load content type found at ${dir}`);\n }\n\n const contentType = {\n ...DEFAULT_CONTENT_TYPE,\n ...loadedContentType,\n } as ContentTypeDefinition;\n\n Object.assign(contentType.schema, {\n apiName,\n collectionName: contentType.schema.collectionName || contentType.schema.info.singularName,\n globalId: getGlobalId(contentType.schema),\n });\n\n contentTypes[normalizeName(contentTypeName)] = contentType;\n }\n\n return { result: contentTypes };\n};\n\n// because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise\nconst loadDir = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n\n const root: Record<string, unknown> = {};\n for (const fd of fds) {\n if (!fd.isFile() || extname(fd.name) === '.map') {\n continue;\n }\n\n const key = basename(fd.name, extname(fd.name));\n\n root[normalizeName(key)] = (await loadFile(join(dir, fd.name))).result;\n }\n\n return { result: root };\n};\n\n// because this is async and its contents are dynamic, we must return it as an array to avoid a property called `then` being interpreted as a Promise\nconst loadFile = async (file: string): Promise<{ result: unknown }> => {\n const ext = extname(file);\n\n switch (ext) {\n case '.js':\n return { result: importDefault(file) };\n case '.json':\n return { result: await fse.readJSON(file) };\n default:\n return { result: {} };\n }\n};\n"],"names":["DEFAULT_CONTENT_TYPE","schema","actions","lifecycles","normalizeName","name","strings","isKebabCase","_","kebabCase","isDirectory","fd","isDotFile","startsWith","loadAPIs","strapi","existsSync","dirs","dist","api","apisFDs","fse","readdir","withFileTypes","filter","negate","apis","apiFD","apiName","loadAPI","join","validateContentTypesUnicity","Object","keys","get","add","allApisSchemas","values","flatMap","contentTypes","names","forEach","info","singularName","includes","Error","push","pluralName","dir","index","config","routes","controllers","services","policies","middlewares","Promise","all","loadIndex","loadDir","loadContentTypes","map","result","pathExists","loadFile","fds","isFile","contentTypeName","loadedContentType","isEmpty","contentType","assign","collectionName","globalId","getGlobalId","root","extname","key","basename","file","ext","importDefault","readJSON"],"mappings":"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"}
@@ -1,135 +1,158 @@
1
- import { join, extname, basename } from "path";
2
- import fse, { existsSync } from "fs-extra";
3
- import _ from "lodash";
4
- import { strings, importDefault } from "@strapi/utils";
5
- import { isEmpty } from "lodash/fp";
6
- import { getGlobalId } from "../domain/content-type/index.mjs";
1
+ import { join, extname, basename } from 'path';
2
+ import fse, { existsSync } from 'fs-extra';
3
+ import _ from 'lodash';
4
+ import { strings, importDefault } from '@strapi/utils';
5
+ import { isEmpty } from 'lodash/fp';
6
+ import { getGlobalId } from '../domain/content-type/index.mjs';
7
+
7
8
  const DEFAULT_CONTENT_TYPE = {
8
- schema: {},
9
- actions: {},
10
- lifecycles: {}
9
+ schema: {},
10
+ actions: {},
11
+ lifecycles: {}
11
12
  };
12
- const normalizeName = (name) => strings.isKebabCase(name) ? name : _.kebabCase(name);
13
- const isDirectory = (fd) => fd.isDirectory();
14
- const isDotFile = (fd) => fd.name.startsWith(".");
13
+ // to handle names with numbers in it we first check if it is already in kebabCase
14
+ const normalizeName = (name)=>strings.isKebabCase(name) ? name : _.kebabCase(name);
15
+ const isDirectory = (fd)=>fd.isDirectory();
16
+ const isDotFile = (fd)=>fd.name.startsWith('.');
15
17
  async function loadAPIs(strapi) {
16
- if (!existsSync(strapi.dirs.dist.api)) {
17
- return;
18
- }
19
- const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, { withFileTypes: true })).filter(isDirectory).filter(_.negate(isDotFile));
20
- const apis = {};
21
- for (const apiFD of apisFDs) {
22
- const apiName = normalizeName(apiFD.name);
23
- const api = await loadAPI(apiName, join(strapi.dirs.dist.api, apiFD.name));
24
- apis[apiName] = api;
25
- }
26
- validateContentTypesUnicity(apis);
27
- for (const apiName of Object.keys(apis)) {
28
- strapi.get("apis").add(apiName, apis[apiName]);
29
- }
30
- }
31
- const validateContentTypesUnicity = (apis) => {
32
- const allApisSchemas = Object.values(apis).flatMap((api) => Object.values(api.contentTypes));
33
- const names = [];
34
- allApisSchemas.forEach(({ schema }) => {
35
- if (schema.info.singularName) {
36
- const singularName = _.kebabCase(schema.info.singularName);
37
- if (names.includes(singularName)) {
38
- throw new Error(`The singular name "${schema.info.singularName}" should be unique`);
39
- }
40
- names.push(singularName);
18
+ if (!existsSync(strapi.dirs.dist.api)) {
19
+ return;
20
+ }
21
+ const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, {
22
+ withFileTypes: true
23
+ })).filter(isDirectory).filter(_.negate(isDotFile));
24
+ const apis = {};
25
+ // only load folders
26
+ for (const apiFD of apisFDs){
27
+ const apiName = normalizeName(apiFD.name);
28
+ const api = await loadAPI(apiName, join(strapi.dirs.dist.api, apiFD.name));
29
+ // @ts-expect-error TODO verify that it's a valid api, not missing bootstrap, register, and destroy
30
+ apis[apiName] = api;
41
31
  }
42
- if (schema.info.pluralName) {
43
- const pluralName = _.kebabCase(schema.info.pluralName);
44
- if (names.includes(pluralName)) {
45
- throw new Error(`The plural name "${schema.info.pluralName}" should be unique`);
46
- }
47
- names.push(pluralName);
32
+ validateContentTypesUnicity(apis);
33
+ for (const apiName of Object.keys(apis)){
34
+ strapi.get('apis').add(apiName, apis[apiName]);
48
35
  }
49
- });
36
+ }
37
+ const validateContentTypesUnicity = (apis)=>{
38
+ const allApisSchemas = Object.values(apis).flatMap((api)=>Object.values(api.contentTypes));
39
+ const names = [];
40
+ allApisSchemas.forEach(({ schema })=>{
41
+ if (schema.info.singularName) {
42
+ const singularName = _.kebabCase(schema.info.singularName);
43
+ if (names.includes(singularName)) {
44
+ throw new Error(`The singular name "${schema.info.singularName}" should be unique`);
45
+ }
46
+ names.push(singularName);
47
+ }
48
+ if (schema.info.pluralName) {
49
+ const pluralName = _.kebabCase(schema.info.pluralName);
50
+ if (names.includes(pluralName)) {
51
+ throw new Error(`The plural name "${schema.info.pluralName}" should be unique`);
52
+ }
53
+ names.push(pluralName);
54
+ }
55
+ });
50
56
  };
51
- const loadAPI = async (apiName, dir) => {
52
- const [index, config, routes, controllers, services, policies, middlewares, contentTypes] = (await Promise.all([
53
- loadIndex(dir),
54
- loadDir(join(dir, "config")),
55
- loadDir(join(dir, "routes")),
56
- loadDir(join(dir, "controllers")),
57
- loadDir(join(dir, "services")),
58
- loadDir(join(dir, "policies")),
59
- loadDir(join(dir, "middlewares")),
60
- loadContentTypes(apiName, join(dir, "content-types"))
61
- ])).map((result) => result?.result);
62
- return {
63
- ...index || {},
64
- config: config || {},
65
- routes: routes || [],
66
- controllers: controllers || {},
67
- services: services || {},
68
- policies: policies || {},
69
- middlewares: middlewares || {},
70
- contentTypes: contentTypes || {}
71
- };
57
+ const loadAPI = async (apiName, dir)=>{
58
+ const [index, config, routes, controllers, services, policies, middlewares, contentTypes] = (await Promise.all([
59
+ loadIndex(dir),
60
+ loadDir(join(dir, 'config')),
61
+ loadDir(join(dir, 'routes')),
62
+ loadDir(join(dir, 'controllers')),
63
+ loadDir(join(dir, 'services')),
64
+ loadDir(join(dir, 'policies')),
65
+ loadDir(join(dir, 'middlewares')),
66
+ loadContentTypes(apiName, join(dir, 'content-types'))
67
+ ])).map((result)=>result?.result);
68
+ return {
69
+ ...index || {},
70
+ config: config || {},
71
+ routes: routes || [],
72
+ controllers: controllers || {},
73
+ services: services || {},
74
+ policies: policies || {},
75
+ middlewares: middlewares || {},
76
+ contentTypes: contentTypes || {}
77
+ };
72
78
  };
73
- const loadIndex = async (dir) => {
74
- if (await fse.pathExists(join(dir, "index.js"))) {
75
- return loadFile(join(dir, "index.js"));
76
- }
79
+ const loadIndex = async (dir)=>{
80
+ if (await fse.pathExists(join(dir, 'index.js'))) {
81
+ return loadFile(join(dir, 'index.js'));
82
+ }
77
83
  };
78
- const loadContentTypes = async (apiName, dir) => {
79
- if (!await fse.pathExists(dir)) {
80
- return;
81
- }
82
- const fds = await fse.readdir(dir, { withFileTypes: true });
83
- const contentTypes = {};
84
- for (const fd of fds) {
85
- if (fd.isFile()) {
86
- continue;
84
+ // because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise
85
+ const loadContentTypes = async (apiName, dir)=>{
86
+ if (!await fse.pathExists(dir)) {
87
+ return;
87
88
  }
88
- const contentTypeName = normalizeName(fd.name);
89
- const loadedContentType = (await loadDir(join(dir, fd.name)))?.result;
90
- if (isEmpty(loadedContentType) || isEmpty(loadedContentType.schema)) {
91
- throw new Error(`Could not load content type found at ${dir}`);
89
+ const fds = await fse.readdir(dir, {
90
+ withFileTypes: true
91
+ });
92
+ const contentTypes = {};
93
+ // only load folders
94
+ for (const fd of fds){
95
+ if (fd.isFile()) {
96
+ continue;
97
+ }
98
+ const contentTypeName = normalizeName(fd.name);
99
+ const loadedContentType = (await loadDir(join(dir, fd.name)))?.result;
100
+ if (isEmpty(loadedContentType) || isEmpty(loadedContentType.schema)) {
101
+ throw new Error(`Could not load content type found at ${dir}`);
102
+ }
103
+ const contentType = {
104
+ ...DEFAULT_CONTENT_TYPE,
105
+ ...loadedContentType
106
+ };
107
+ Object.assign(contentType.schema, {
108
+ apiName,
109
+ collectionName: contentType.schema.collectionName || contentType.schema.info.singularName,
110
+ globalId: getGlobalId(contentType.schema)
111
+ });
112
+ contentTypes[normalizeName(contentTypeName)] = contentType;
92
113
  }
93
- const contentType = {
94
- ...DEFAULT_CONTENT_TYPE,
95
- ...loadedContentType
114
+ return {
115
+ result: contentTypes
96
116
  };
97
- Object.assign(contentType.schema, {
98
- apiName,
99
- collectionName: contentType.schema.collectionName || contentType.schema.info.singularName,
100
- globalId: getGlobalId(contentType.schema)
101
- });
102
- contentTypes[normalizeName(contentTypeName)] = contentType;
103
- }
104
- return { result: contentTypes };
105
117
  };
106
- const loadDir = async (dir) => {
107
- if (!await fse.pathExists(dir)) {
108
- return;
109
- }
110
- const fds = await fse.readdir(dir, { withFileTypes: true });
111
- const root = {};
112
- for (const fd of fds) {
113
- if (!fd.isFile() || extname(fd.name) === ".map") {
114
- continue;
118
+ // because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise
119
+ const loadDir = async (dir)=>{
120
+ if (!await fse.pathExists(dir)) {
121
+ return;
115
122
  }
116
- const key = basename(fd.name, extname(fd.name));
117
- root[normalizeName(key)] = (await loadFile(join(dir, fd.name))).result;
118
- }
119
- return { result: root };
120
- };
121
- const loadFile = async (file) => {
122
- const ext = extname(file);
123
- switch (ext) {
124
- case ".js":
125
- return { result: importDefault(file) };
126
- case ".json":
127
- return { result: await fse.readJSON(file) };
128
- default:
129
- return { result: {} };
130
- }
123
+ const fds = await fse.readdir(dir, {
124
+ withFileTypes: true
125
+ });
126
+ const root = {};
127
+ for (const fd of fds){
128
+ if (!fd.isFile() || extname(fd.name) === '.map') {
129
+ continue;
130
+ }
131
+ const key = basename(fd.name, extname(fd.name));
132
+ root[normalizeName(key)] = (await loadFile(join(dir, fd.name))).result;
133
+ }
134
+ return {
135
+ result: root
136
+ };
131
137
  };
132
- export {
133
- loadAPIs as default
138
+ // because this is async and its contents are dynamic, we must return it as an array to avoid a property called `then` being interpreted as a Promise
139
+ const loadFile = async (file)=>{
140
+ const ext = extname(file);
141
+ switch(ext){
142
+ case '.js':
143
+ return {
144
+ result: importDefault(file)
145
+ };
146
+ case '.json':
147
+ return {
148
+ result: await fse.readJSON(file)
149
+ };
150
+ default:
151
+ return {
152
+ result: {}
153
+ };
154
+ }
134
155
  };
156
+
157
+ export { loadAPIs as default };
135
158
  //# sourceMappingURL=apis.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"apis.mjs","sources":["../../src/loaders/apis.ts"],"sourcesContent":["import { join, extname, basename } from 'path';\nimport fse, { existsSync } from 'fs-extra';\nimport _ from 'lodash';\nimport { strings, importDefault } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Core, Struct } from '@strapi/types';\nimport { getGlobalId, type ContentTypeDefinition } from '../domain/content-type';\n\ninterface API {\n bootstrap: () => void | Promise<void>;\n destroy: () => void | Promise<void>;\n register: () => void | Promise<void>;\n config: Record<string, unknown>;\n routes: Record<string, Core.Router>;\n controllers: Record<string, Core.Controller>;\n services: Record<string, Core.Service>;\n policies: Record<string, Core.Policy>;\n middlewares: Record<string, Core.Middleware>;\n contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>;\n}\n\ninterface APIs {\n [key: string]: API;\n}\n\nconst DEFAULT_CONTENT_TYPE = {\n schema: {},\n actions: {},\n lifecycles: {},\n};\n\n// to handle names with numbers in it we first check if it is already in kebabCase\nconst normalizeName = (name: string) => (strings.isKebabCase(name) ? name : _.kebabCase(name));\n\nconst isDirectory = (fd: fse.Dirent) => fd.isDirectory();\nconst isDotFile = (fd: fse.Dirent) => fd.name.startsWith('.');\n\nexport default async function loadAPIs(strapi: Core.Strapi) {\n if (!existsSync(strapi.dirs.dist.api)) {\n return;\n }\n\n const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, { withFileTypes: true }))\n .filter(isDirectory)\n .filter(_.negate(isDotFile));\n\n const apis: APIs = {};\n\n // only load folders\n for (const apiFD of apisFDs) {\n const apiName = normalizeName(apiFD.name);\n const api = await loadAPI(apiName, join(strapi.dirs.dist.api, apiFD.name));\n\n // @ts-expect-error TODO verify that it's a valid api, not missing bootstrap, register, and destroy\n apis[apiName] = api;\n }\n\n validateContentTypesUnicity(apis);\n\n for (const apiName of Object.keys(apis)) {\n strapi.get('apis').add(apiName, apis[apiName]);\n }\n}\n\nconst validateContentTypesUnicity = (apis: APIs) => {\n const allApisSchemas = Object.values(apis).flatMap((api) => Object.values(api.contentTypes));\n\n const names: string[] = [];\n allApisSchemas.forEach(({ schema }) => {\n if (schema.info.singularName) {\n const singularName = _.kebabCase(schema.info.singularName);\n if (names.includes(singularName)) {\n throw new Error(`The singular name \"${schema.info.singularName}\" should be unique`);\n }\n names.push(singularName);\n }\n\n if (schema.info.pluralName) {\n const pluralName = _.kebabCase(schema.info.pluralName);\n if (names.includes(pluralName)) {\n throw new Error(`The plural name \"${schema.info.pluralName}\" should be unique`);\n }\n names.push(pluralName);\n }\n });\n};\n\nconst loadAPI = async (apiName: string, dir: string) => {\n const [index, config, routes, controllers, services, policies, middlewares, contentTypes] = (\n await Promise.all([\n loadIndex(dir),\n loadDir(join(dir, 'config')),\n loadDir(join(dir, 'routes')),\n loadDir(join(dir, 'controllers')),\n loadDir(join(dir, 'services')),\n loadDir(join(dir, 'policies')),\n loadDir(join(dir, 'middlewares')),\n loadContentTypes(apiName, join(dir, 'content-types')),\n ])\n ).map((result) => result?.result);\n\n return {\n ...(index || {}),\n config: config || {},\n routes: routes || [],\n controllers: controllers || {},\n services: services || {},\n policies: policies || {},\n middlewares: middlewares || {},\n contentTypes: contentTypes || {},\n };\n};\n\nconst loadIndex = async (dir: string) => {\n if (await fse.pathExists(join(dir, 'index.js'))) {\n return loadFile(join(dir, 'index.js'));\n }\n};\n\n// because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise\nconst loadContentTypes = async (apiName: string, dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n const contentTypes: API['contentTypes'] = {};\n\n // only load folders\n for (const fd of fds) {\n if (fd.isFile()) {\n continue;\n }\n\n const contentTypeName = normalizeName(fd.name);\n const loadedContentType = (await loadDir(join(dir, fd.name)))?.result;\n\n if (isEmpty(loadedContentType) || isEmpty(loadedContentType.schema)) {\n throw new Error(`Could not load content type found at ${dir}`);\n }\n\n const contentType = {\n ...DEFAULT_CONTENT_TYPE,\n ...loadedContentType,\n } as ContentTypeDefinition;\n\n Object.assign(contentType.schema, {\n apiName,\n collectionName: contentType.schema.collectionName || contentType.schema.info.singularName,\n globalId: getGlobalId(contentType.schema),\n });\n\n contentTypes[normalizeName(contentTypeName)] = contentType;\n }\n\n return { result: contentTypes };\n};\n\n// because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise\nconst loadDir = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n\n const root: Record<string, unknown> = {};\n for (const fd of fds) {\n if (!fd.isFile() || extname(fd.name) === '.map') {\n continue;\n }\n\n const key = basename(fd.name, extname(fd.name));\n\n root[normalizeName(key)] = (await loadFile(join(dir, fd.name))).result;\n }\n\n return { result: root };\n};\n\n// because this is async and its contents are dynamic, we must return it as an array to avoid a property called `then` being interpreted as a Promise\nconst loadFile = async (file: string): Promise<{ result: unknown }> => {\n const ext = extname(file);\n\n switch (ext) {\n case '.js':\n return { result: importDefault(file) };\n case '.json':\n return { result: await fse.readJSON(file) };\n default:\n return { result: {} };\n }\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apis.mjs","sources":["../../src/loaders/apis.ts"],"sourcesContent":["import { join, extname, basename } from 'path';\nimport fse, { existsSync } from 'fs-extra';\nimport _ from 'lodash';\nimport { strings, importDefault } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Core, Struct } from '@strapi/types';\nimport { getGlobalId, type ContentTypeDefinition } from '../domain/content-type';\n\ninterface API {\n bootstrap: () => void | Promise<void>;\n destroy: () => void | Promise<void>;\n register: () => void | Promise<void>;\n config: Record<string, unknown>;\n routes: Record<string, Core.Router>;\n controllers: Record<string, Core.Controller>;\n services: Record<string, Core.Service>;\n policies: Record<string, Core.Policy>;\n middlewares: Record<string, Core.Middleware>;\n contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>;\n}\n\ninterface APIs {\n [key: string]: API;\n}\n\nconst DEFAULT_CONTENT_TYPE = {\n schema: {},\n actions: {},\n lifecycles: {},\n};\n\n// to handle names with numbers in it we first check if it is already in kebabCase\nconst normalizeName = (name: string) => (strings.isKebabCase(name) ? name : _.kebabCase(name));\n\nconst isDirectory = (fd: fse.Dirent) => fd.isDirectory();\nconst isDotFile = (fd: fse.Dirent) => fd.name.startsWith('.');\n\nexport default async function loadAPIs(strapi: Core.Strapi) {\n if (!existsSync(strapi.dirs.dist.api)) {\n return;\n }\n\n const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, { withFileTypes: true }))\n .filter(isDirectory)\n .filter(_.negate(isDotFile));\n\n const apis: APIs = {};\n\n // only load folders\n for (const apiFD of apisFDs) {\n const apiName = normalizeName(apiFD.name);\n const api = await loadAPI(apiName, join(strapi.dirs.dist.api, apiFD.name));\n\n // @ts-expect-error TODO verify that it's a valid api, not missing bootstrap, register, and destroy\n apis[apiName] = api;\n }\n\n validateContentTypesUnicity(apis);\n\n for (const apiName of Object.keys(apis)) {\n strapi.get('apis').add(apiName, apis[apiName]);\n }\n}\n\nconst validateContentTypesUnicity = (apis: APIs) => {\n const allApisSchemas = Object.values(apis).flatMap((api) => Object.values(api.contentTypes));\n\n const names: string[] = [];\n allApisSchemas.forEach(({ schema }) => {\n if (schema.info.singularName) {\n const singularName = _.kebabCase(schema.info.singularName);\n if (names.includes(singularName)) {\n throw new Error(`The singular name \"${schema.info.singularName}\" should be unique`);\n }\n names.push(singularName);\n }\n\n if (schema.info.pluralName) {\n const pluralName = _.kebabCase(schema.info.pluralName);\n if (names.includes(pluralName)) {\n throw new Error(`The plural name \"${schema.info.pluralName}\" should be unique`);\n }\n names.push(pluralName);\n }\n });\n};\n\nconst loadAPI = async (apiName: string, dir: string) => {\n const [index, config, routes, controllers, services, policies, middlewares, contentTypes] = (\n await Promise.all([\n loadIndex(dir),\n loadDir(join(dir, 'config')),\n loadDir(join(dir, 'routes')),\n loadDir(join(dir, 'controllers')),\n loadDir(join(dir, 'services')),\n loadDir(join(dir, 'policies')),\n loadDir(join(dir, 'middlewares')),\n loadContentTypes(apiName, join(dir, 'content-types')),\n ])\n ).map((result) => result?.result);\n\n return {\n ...(index || {}),\n config: config || {},\n routes: routes || [],\n controllers: controllers || {},\n services: services || {},\n policies: policies || {},\n middlewares: middlewares || {},\n contentTypes: contentTypes || {},\n };\n};\n\nconst loadIndex = async (dir: string) => {\n if (await fse.pathExists(join(dir, 'index.js'))) {\n return loadFile(join(dir, 'index.js'));\n }\n};\n\n// because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise\nconst loadContentTypes = async (apiName: string, dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n const contentTypes: API['contentTypes'] = {};\n\n // only load folders\n for (const fd of fds) {\n if (fd.isFile()) {\n continue;\n }\n\n const contentTypeName = normalizeName(fd.name);\n const loadedContentType = (await loadDir(join(dir, fd.name)))?.result;\n\n if (isEmpty(loadedContentType) || isEmpty(loadedContentType.schema)) {\n throw new Error(`Could not load content type found at ${dir}`);\n }\n\n const contentType = {\n ...DEFAULT_CONTENT_TYPE,\n ...loadedContentType,\n } as ContentTypeDefinition;\n\n Object.assign(contentType.schema, {\n apiName,\n collectionName: contentType.schema.collectionName || contentType.schema.info.singularName,\n globalId: getGlobalId(contentType.schema),\n });\n\n contentTypes[normalizeName(contentTypeName)] = contentType;\n }\n\n return { result: contentTypes };\n};\n\n// because this is async and its contents are dynamic, we must return it within an object to avoid a property called `then` being interpreted as a Promise\nconst loadDir = async (dir: string) => {\n if (!(await fse.pathExists(dir))) {\n return;\n }\n\n const fds = await fse.readdir(dir, { withFileTypes: true });\n\n const root: Record<string, unknown> = {};\n for (const fd of fds) {\n if (!fd.isFile() || extname(fd.name) === '.map') {\n continue;\n }\n\n const key = basename(fd.name, extname(fd.name));\n\n root[normalizeName(key)] = (await loadFile(join(dir, fd.name))).result;\n }\n\n return { result: root };\n};\n\n// because this is async and its contents are dynamic, we must return it as an array to avoid a property called `then` being interpreted as a Promise\nconst loadFile = async (file: string): Promise<{ result: unknown }> => {\n const ext = extname(file);\n\n switch (ext) {\n case '.js':\n return { result: importDefault(file) };\n case '.json':\n return { result: await fse.readJSON(file) };\n default:\n return { result: {} };\n }\n};\n"],"names":["DEFAULT_CONTENT_TYPE","schema","actions","lifecycles","normalizeName","name","strings","isKebabCase","_","kebabCase","isDirectory","fd","isDotFile","startsWith","loadAPIs","strapi","existsSync","dirs","dist","api","apisFDs","fse","readdir","withFileTypes","filter","negate","apis","apiFD","apiName","loadAPI","join","validateContentTypesUnicity","Object","keys","get","add","allApisSchemas","values","flatMap","contentTypes","names","forEach","info","singularName","includes","Error","push","pluralName","dir","index","config","routes","controllers","services","policies","middlewares","Promise","all","loadIndex","loadDir","loadContentTypes","map","result","pathExists","loadFile","fds","isFile","contentTypeName","loadedContentType","isEmpty","contentType","assign","collectionName","globalId","getGlobalId","root","extname","key","basename","file","ext","importDefault","readJSON"],"mappings":"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"}
@@ -1,38 +1,37 @@
1
- "use strict";
2
- const path = require("path");
3
- const _ = require("lodash");
4
- const fse = require("fs-extra");
5
- const loadFiles = require("../utils/load-files.js");
6
- const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
7
- const ___default = /* @__PURE__ */ _interopDefault(_);
1
+ 'use strict';
2
+
3
+ var path = require('path');
4
+ var _ = require('lodash');
5
+ var fse = require('fs-extra');
6
+ var loadFiles = require('../utils/load-files.js');
7
+
8
8
  async function loadComponents(strapi) {
9
- if (!await fse.pathExists(strapi.dirs.dist.components)) {
10
- return {};
11
- }
12
- const map = await loadFiles.loadFiles(strapi.dirs.dist.components, "*/*.*(js|json)");
13
- const components = Object.keys(map).reduce((acc, category) => {
14
- Object.keys(map[category]).forEach((key) => {
15
- const schema = map[category][key];
16
- if (!schema.collectionName) {
17
- const filePath = path.join(strapi.dirs.app.components, category, schema.__filename__);
18
- return strapi.stopWithError(
19
- `Component ${key} is missing a "collectionName" property.
20
- Verify file ${filePath}.`
21
- );
22
- }
23
- const uid = `${category}.${key}`;
24
- acc[uid] = Object.assign(schema, {
25
- __schema__: ___default.default.cloneDeep(schema),
26
- uid,
27
- category,
28
- modelType: "component",
29
- modelName: key,
30
- globalId: schema.globalId || ___default.default.upperFirst(___default.default.camelCase(`component_${uid}`))
31
- });
32
- });
33
- return acc;
34
- }, {});
35
- strapi.get("components").add(components);
9
+ if (!await fse.pathExists(strapi.dirs.dist.components)) {
10
+ return {};
11
+ }
12
+ const map = await loadFiles.loadFiles(strapi.dirs.dist.components, '*/*.*(js|json)');
13
+ const components = Object.keys(map).reduce((acc, category)=>{
14
+ Object.keys(map[category]).forEach((key)=>{
15
+ const schema = map[category][key];
16
+ if (!schema.collectionName) {
17
+ // NOTE: We're using the filepath from the app directory instead of the dist for information purpose
18
+ const filePath = path.join(strapi.dirs.app.components, category, schema.__filename__);
19
+ return strapi.stopWithError(`Component ${key} is missing a "collectionName" property.\nVerify file ${filePath}.`);
20
+ }
21
+ const uid = `${category}.${key}`;
22
+ acc[uid] = Object.assign(schema, {
23
+ __schema__: _.cloneDeep(schema),
24
+ uid,
25
+ category,
26
+ modelType: 'component',
27
+ modelName: key,
28
+ globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`))
29
+ });
30
+ });
31
+ return acc;
32
+ }, {});
33
+ strapi.get('components').add(components);
36
34
  }
35
+
37
36
  module.exports = loadComponents;
38
37
  //# sourceMappingURL=components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sources":["../../src/loaders/components.ts"],"sourcesContent":["import { join } from 'path';\nimport _ from 'lodash';\nimport { pathExists } from 'fs-extra';\nimport type { Core, Struct, UID } from '@strapi/types';\nimport { loadFiles } from '../utils/load-files';\n\ntype LoadedComponent = {\n collectionName: string;\n __filename__: string;\n __schema__: LoadedComponent;\n uid: string;\n category: string;\n modelName: string;\n globalId: string;\n info: any;\n attributes: any;\n};\n\ntype LoadedComponents = {\n [category: string]: {\n [key: string]: LoadedComponent;\n };\n};\n\ntype ComponentMap = {\n [uid in UID.Component]: Struct.ComponentSchema;\n};\n\nexport default async function loadComponents(strapi: Core.Strapi) {\n if (!(await pathExists(strapi.dirs.dist.components))) {\n return {};\n }\n\n const map = await loadFiles<LoadedComponents>(strapi.dirs.dist.components, '*/*.*(js|json)');\n\n const components = Object.keys(map).reduce((acc, category) => {\n Object.keys(map[category]).forEach((key) => {\n const schema = map[category][key];\n\n if (!schema.collectionName) {\n // NOTE: We're using the filepath from the app directory instead of the dist for information purpose\n const filePath = join(strapi.dirs.app.components, category, schema.__filename__);\n\n return strapi.stopWithError(\n `Component ${key} is missing a \"collectionName\" property.\\nVerify file ${filePath}.`\n );\n }\n\n const uid: UID.Component = `${category}.${key}`;\n\n acc[uid] = Object.assign(schema, {\n __schema__: _.cloneDeep(schema),\n uid,\n category,\n modelType: 'component' as const,\n modelName: key,\n globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`)),\n });\n });\n\n return acc;\n }, {} as ComponentMap);\n\n strapi.get('components').add(components);\n}\n"],"names":["pathExists","loadFiles","join","_"],"mappings":";;;;;;;AA4BA,eAA8B,eAAe,QAAqB;AAChE,MAAI,CAAE,MAAMA,IAAAA,WAAW,OAAO,KAAK,KAAK,UAAU,GAAI;AACpD,WAAO;EACT;AAEA,QAAM,MAAM,MAAMC,UAAAA,UAA4B,OAAO,KAAK,KAAK,YAAY,gBAAgB;AAErF,QAAA,aAAa,OAAO,KAAK,GAAG,EAAE,OAAO,CAAC,KAAK,aAAa;AAC5D,WAAO,KAAK,IAAI,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ;AAC1C,YAAM,SAAS,IAAI,QAAQ,EAAE,GAAG;AAE5B,UAAA,CAAC,OAAO,gBAAgB;AAEpB,cAAA,WAAWC,UAAK,OAAO,KAAK,IAAI,YAAY,UAAU,OAAO,YAAY;AAE/E,eAAO,OAAO;AAAA,UACZ,aAAa,GAAG;AAAA,cAAyD,QAAQ;AAAA,QAAA;AAAA,MAErF;AAEA,YAAM,MAAqB,GAAG,QAAQ,IAAI,GAAG;AAE7C,UAAI,GAAG,IAAI,OAAO,OAAO,QAAQ;AAAA,QAC/B,YAAYC,WAAAA,QAAE,UAAU,MAAM;AAAA,QAC9B;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,QACX,UAAU,OAAO,YAAYA,WAAAA,QAAE,WAAWA,mBAAE,UAAU,aAAa,GAAG,EAAE,CAAC;AAAA,MAAA,CAC1E;AAAA,IAAA,CACF;AAEM,WAAA;AAAA,EACT,GAAG,CAAkB,CAAA;AAErB,SAAO,IAAI,YAAY,EAAE,IAAI,UAAU;AACzC;;"}
1
+ {"version":3,"file":"components.js","sources":["../../src/loaders/components.ts"],"sourcesContent":["import { join } from 'path';\nimport _ from 'lodash';\nimport { pathExists } from 'fs-extra';\nimport type { Core, Struct, UID } from '@strapi/types';\nimport { loadFiles } from '../utils/load-files';\n\ntype LoadedComponent = {\n collectionName: string;\n __filename__: string;\n __schema__: LoadedComponent;\n uid: string;\n category: string;\n modelName: string;\n globalId: string;\n info: any;\n attributes: any;\n};\n\ntype LoadedComponents = {\n [category: string]: {\n [key: string]: LoadedComponent;\n };\n};\n\ntype ComponentMap = {\n [uid in UID.Component]: Struct.ComponentSchema;\n};\n\nexport default async function loadComponents(strapi: Core.Strapi) {\n if (!(await pathExists(strapi.dirs.dist.components))) {\n return {};\n }\n\n const map = await loadFiles<LoadedComponents>(strapi.dirs.dist.components, '*/*.*(js|json)');\n\n const components = Object.keys(map).reduce((acc, category) => {\n Object.keys(map[category]).forEach((key) => {\n const schema = map[category][key];\n\n if (!schema.collectionName) {\n // NOTE: We're using the filepath from the app directory instead of the dist for information purpose\n const filePath = join(strapi.dirs.app.components, category, schema.__filename__);\n\n return strapi.stopWithError(\n `Component ${key} is missing a \"collectionName\" property.\\nVerify file ${filePath}.`\n );\n }\n\n const uid: UID.Component = `${category}.${key}`;\n\n acc[uid] = Object.assign(schema, {\n __schema__: _.cloneDeep(schema),\n uid,\n category,\n modelType: 'component' as const,\n modelName: key,\n globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`)),\n });\n });\n\n return acc;\n }, {} as ComponentMap);\n\n strapi.get('components').add(components);\n}\n"],"names":["loadComponents","strapi","pathExists","dirs","dist","components","map","loadFiles","Object","keys","reduce","acc","category","forEach","key","schema","collectionName","filePath","join","app","__filename__","stopWithError","uid","assign","__schema__","_","cloneDeep","modelType","modelName","globalId","upperFirst","camelCase","get","add"],"mappings":";;;;;;;AA4Be,eAAeA,eAAeC,MAAmB,EAAA;IAC9D,IAAI,CAAE,MAAMC,cAAWD,CAAAA,MAAAA,CAAOE,IAAI,CAACC,IAAI,CAACC,UAAU,CAAI,EAAA;AACpD,QAAA,OAAO,EAAC;AACV;IAEA,MAAMC,GAAAA,GAAM,MAAMC,mBAA4BN,CAAAA,MAAAA,CAAOE,IAAI,CAACC,IAAI,CAACC,UAAU,EAAE,gBAAA,CAAA;IAE3E,MAAMA,UAAAA,GAAaG,OAAOC,IAAI,CAACH,KAAKI,MAAM,CAAC,CAACC,GAAKC,EAAAA,QAAAA,GAAAA;QAC/CJ,MAAOC,CAAAA,IAAI,CAACH,GAAG,CAACM,SAAS,CAAEC,CAAAA,OAAO,CAAC,CAACC,GAAAA,GAAAA;AAClC,YAAA,MAAMC,MAAST,GAAAA,GAAG,CAACM,QAAAA,CAAS,CAACE,GAAI,CAAA;YAEjC,IAAI,CAACC,MAAOC,CAAAA,cAAc,EAAE;;gBAE1B,MAAMC,QAAAA,GAAWC,SAAKjB,CAAAA,MAAAA,CAAOE,IAAI,CAACgB,GAAG,CAACd,UAAU,EAAEO,QAAUG,EAAAA,MAAAA,CAAOK,YAAY,CAAA;gBAE/E,OAAOnB,MAAAA,CAAOoB,aAAa,CACzB,CAAC,UAAU,EAAEP,GAAAA,CAAI,sDAAsD,EAAEG,QAAS,CAAA,CAAC,CAAC,CAAA;AAExF;AAEA,YAAA,MAAMK,MAAqB,CAAC,EAAEV,SAAS,CAAC,EAAEE,IAAI,CAAC;AAE/CH,YAAAA,GAAG,CAACW,GAAI,CAAA,GAAGd,MAAOe,CAAAA,MAAM,CAACR,MAAQ,EAAA;gBAC/BS,UAAYC,EAAAA,CAAAA,CAAEC,SAAS,CAACX,MAAAA,CAAAA;AACxBO,gBAAAA,GAAAA;AACAV,gBAAAA,QAAAA;gBACAe,SAAW,EAAA,WAAA;gBACXC,SAAWd,EAAAA,GAAAA;AACXe,gBAAAA,QAAAA,EAAUd,MAAOc,CAAAA,QAAQ,IAAIJ,CAAAA,CAAEK,UAAU,CAACL,CAAEM,CAAAA,SAAS,CAAC,CAAC,UAAU,EAAET,IAAI,CAAC,CAAA;AAC1E,aAAA,CAAA;AACF,SAAA,CAAA;QAEA,OAAOX,GAAAA;AACT,KAAA,EAAG,EAAC,CAAA;AAEJV,IAAAA,MAAAA,CAAO+B,GAAG,CAAC,YAAcC,CAAAA,CAAAA,GAAG,CAAC5B,UAAAA,CAAAA;AAC/B;;;;"}
@@ -1,37 +1,35 @@
1
- import { join } from "path";
2
- import _ from "lodash";
3
- import { pathExists } from "fs-extra";
4
- import { loadFiles } from "../utils/load-files.mjs";
1
+ import { join } from 'path';
2
+ import _ from 'lodash';
3
+ import { pathExists } from 'fs-extra';
4
+ import { loadFiles } from '../utils/load-files.mjs';
5
+
5
6
  async function loadComponents(strapi) {
6
- if (!await pathExists(strapi.dirs.dist.components)) {
7
- return {};
8
- }
9
- const map = await loadFiles(strapi.dirs.dist.components, "*/*.*(js|json)");
10
- const components = Object.keys(map).reduce((acc, category) => {
11
- Object.keys(map[category]).forEach((key) => {
12
- const schema = map[category][key];
13
- if (!schema.collectionName) {
14
- const filePath = join(strapi.dirs.app.components, category, schema.__filename__);
15
- return strapi.stopWithError(
16
- `Component ${key} is missing a "collectionName" property.
17
- Verify file ${filePath}.`
18
- );
19
- }
20
- const uid = `${category}.${key}`;
21
- acc[uid] = Object.assign(schema, {
22
- __schema__: _.cloneDeep(schema),
23
- uid,
24
- category,
25
- modelType: "component",
26
- modelName: key,
27
- globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`))
28
- });
29
- });
30
- return acc;
31
- }, {});
32
- strapi.get("components").add(components);
7
+ if (!await pathExists(strapi.dirs.dist.components)) {
8
+ return {};
9
+ }
10
+ const map = await loadFiles(strapi.dirs.dist.components, '*/*.*(js|json)');
11
+ const components = Object.keys(map).reduce((acc, category)=>{
12
+ Object.keys(map[category]).forEach((key)=>{
13
+ const schema = map[category][key];
14
+ if (!schema.collectionName) {
15
+ // NOTE: We're using the filepath from the app directory instead of the dist for information purpose
16
+ const filePath = join(strapi.dirs.app.components, category, schema.__filename__);
17
+ return strapi.stopWithError(`Component ${key} is missing a "collectionName" property.\nVerify file ${filePath}.`);
18
+ }
19
+ const uid = `${category}.${key}`;
20
+ acc[uid] = Object.assign(schema, {
21
+ __schema__: _.cloneDeep(schema),
22
+ uid,
23
+ category,
24
+ modelType: 'component',
25
+ modelName: key,
26
+ globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`))
27
+ });
28
+ });
29
+ return acc;
30
+ }, {});
31
+ strapi.get('components').add(components);
33
32
  }
34
- export {
35
- loadComponents as default
36
- };
33
+
34
+ export { loadComponents as default };
37
35
  //# sourceMappingURL=components.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.mjs","sources":["../../src/loaders/components.ts"],"sourcesContent":["import { join } from 'path';\nimport _ from 'lodash';\nimport { pathExists } from 'fs-extra';\nimport type { Core, Struct, UID } from '@strapi/types';\nimport { loadFiles } from '../utils/load-files';\n\ntype LoadedComponent = {\n collectionName: string;\n __filename__: string;\n __schema__: LoadedComponent;\n uid: string;\n category: string;\n modelName: string;\n globalId: string;\n info: any;\n attributes: any;\n};\n\ntype LoadedComponents = {\n [category: string]: {\n [key: string]: LoadedComponent;\n };\n};\n\ntype ComponentMap = {\n [uid in UID.Component]: Struct.ComponentSchema;\n};\n\nexport default async function loadComponents(strapi: Core.Strapi) {\n if (!(await pathExists(strapi.dirs.dist.components))) {\n return {};\n }\n\n const map = await loadFiles<LoadedComponents>(strapi.dirs.dist.components, '*/*.*(js|json)');\n\n const components = Object.keys(map).reduce((acc, category) => {\n Object.keys(map[category]).forEach((key) => {\n const schema = map[category][key];\n\n if (!schema.collectionName) {\n // NOTE: We're using the filepath from the app directory instead of the dist for information purpose\n const filePath = join(strapi.dirs.app.components, category, schema.__filename__);\n\n return strapi.stopWithError(\n `Component ${key} is missing a \"collectionName\" property.\\nVerify file ${filePath}.`\n );\n }\n\n const uid: UID.Component = `${category}.${key}`;\n\n acc[uid] = Object.assign(schema, {\n __schema__: _.cloneDeep(schema),\n uid,\n category,\n modelType: 'component' as const,\n modelName: key,\n globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`)),\n });\n });\n\n return acc;\n }, {} as ComponentMap);\n\n strapi.get('components').add(components);\n}\n"],"names":[],"mappings":";;;;AA4BA,eAA8B,eAAe,QAAqB;AAChE,MAAI,CAAE,MAAM,WAAW,OAAO,KAAK,KAAK,UAAU,GAAI;AACpD,WAAO;EACT;AAEA,QAAM,MAAM,MAAM,UAA4B,OAAO,KAAK,KAAK,YAAY,gBAAgB;AAErF,QAAA,aAAa,OAAO,KAAK,GAAG,EAAE,OAAO,CAAC,KAAK,aAAa;AAC5D,WAAO,KAAK,IAAI,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ;AAC1C,YAAM,SAAS,IAAI,QAAQ,EAAE,GAAG;AAE5B,UAAA,CAAC,OAAO,gBAAgB;AAEpB,cAAA,WAAW,KAAK,OAAO,KAAK,IAAI,YAAY,UAAU,OAAO,YAAY;AAE/E,eAAO,OAAO;AAAA,UACZ,aAAa,GAAG;AAAA,cAAyD,QAAQ;AAAA,QAAA;AAAA,MAErF;AAEA,YAAM,MAAqB,GAAG,QAAQ,IAAI,GAAG;AAE7C,UAAI,GAAG,IAAI,OAAO,OAAO,QAAQ;AAAA,QAC/B,YAAY,EAAE,UAAU,MAAM;AAAA,QAC9B;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,QACX,UAAU,OAAO,YAAY,EAAE,WAAW,EAAE,UAAU,aAAa,GAAG,EAAE,CAAC;AAAA,MAAA,CAC1E;AAAA,IAAA,CACF;AAEM,WAAA;AAAA,EACT,GAAG,CAAkB,CAAA;AAErB,SAAO,IAAI,YAAY,EAAE,IAAI,UAAU;AACzC;"}
1
+ {"version":3,"file":"components.mjs","sources":["../../src/loaders/components.ts"],"sourcesContent":["import { join } from 'path';\nimport _ from 'lodash';\nimport { pathExists } from 'fs-extra';\nimport type { Core, Struct, UID } from '@strapi/types';\nimport { loadFiles } from '../utils/load-files';\n\ntype LoadedComponent = {\n collectionName: string;\n __filename__: string;\n __schema__: LoadedComponent;\n uid: string;\n category: string;\n modelName: string;\n globalId: string;\n info: any;\n attributes: any;\n};\n\ntype LoadedComponents = {\n [category: string]: {\n [key: string]: LoadedComponent;\n };\n};\n\ntype ComponentMap = {\n [uid in UID.Component]: Struct.ComponentSchema;\n};\n\nexport default async function loadComponents(strapi: Core.Strapi) {\n if (!(await pathExists(strapi.dirs.dist.components))) {\n return {};\n }\n\n const map = await loadFiles<LoadedComponents>(strapi.dirs.dist.components, '*/*.*(js|json)');\n\n const components = Object.keys(map).reduce((acc, category) => {\n Object.keys(map[category]).forEach((key) => {\n const schema = map[category][key];\n\n if (!schema.collectionName) {\n // NOTE: We're using the filepath from the app directory instead of the dist for information purpose\n const filePath = join(strapi.dirs.app.components, category, schema.__filename__);\n\n return strapi.stopWithError(\n `Component ${key} is missing a \"collectionName\" property.\\nVerify file ${filePath}.`\n );\n }\n\n const uid: UID.Component = `${category}.${key}`;\n\n acc[uid] = Object.assign(schema, {\n __schema__: _.cloneDeep(schema),\n uid,\n category,\n modelType: 'component' as const,\n modelName: key,\n globalId: schema.globalId || _.upperFirst(_.camelCase(`component_${uid}`)),\n });\n });\n\n return acc;\n }, {} as ComponentMap);\n\n strapi.get('components').add(components);\n}\n"],"names":["loadComponents","strapi","pathExists","dirs","dist","components","map","loadFiles","Object","keys","reduce","acc","category","forEach","key","schema","collectionName","filePath","join","app","__filename__","stopWithError","uid","assign","__schema__","_","cloneDeep","modelType","modelName","globalId","upperFirst","camelCase","get","add"],"mappings":";;;;;AA4Be,eAAeA,eAAeC,MAAmB,EAAA;IAC9D,IAAI,CAAE,MAAMC,UAAWD,CAAAA,MAAAA,CAAOE,IAAI,CAACC,IAAI,CAACC,UAAU,CAAI,EAAA;AACpD,QAAA,OAAO,EAAC;AACV;IAEA,MAAMC,GAAAA,GAAM,MAAMC,SAA4BN,CAAAA,MAAAA,CAAOE,IAAI,CAACC,IAAI,CAACC,UAAU,EAAE,gBAAA,CAAA;IAE3E,MAAMA,UAAAA,GAAaG,OAAOC,IAAI,CAACH,KAAKI,MAAM,CAAC,CAACC,GAAKC,EAAAA,QAAAA,GAAAA;QAC/CJ,MAAOC,CAAAA,IAAI,CAACH,GAAG,CAACM,SAAS,CAAEC,CAAAA,OAAO,CAAC,CAACC,GAAAA,GAAAA;AAClC,YAAA,MAAMC,MAAST,GAAAA,GAAG,CAACM,QAAAA,CAAS,CAACE,GAAI,CAAA;YAEjC,IAAI,CAACC,MAAOC,CAAAA,cAAc,EAAE;;gBAE1B,MAAMC,QAAAA,GAAWC,IAAKjB,CAAAA,MAAAA,CAAOE,IAAI,CAACgB,GAAG,CAACd,UAAU,EAAEO,QAAUG,EAAAA,MAAAA,CAAOK,YAAY,CAAA;gBAE/E,OAAOnB,MAAAA,CAAOoB,aAAa,CACzB,CAAC,UAAU,EAAEP,GAAAA,CAAI,sDAAsD,EAAEG,QAAS,CAAA,CAAC,CAAC,CAAA;AAExF;AAEA,YAAA,MAAMK,MAAqB,CAAC,EAAEV,SAAS,CAAC,EAAEE,IAAI,CAAC;AAE/CH,YAAAA,GAAG,CAACW,GAAI,CAAA,GAAGd,MAAOe,CAAAA,MAAM,CAACR,MAAQ,EAAA;gBAC/BS,UAAYC,EAAAA,CAAAA,CAAEC,SAAS,CAACX,MAAAA,CAAAA;AACxBO,gBAAAA,GAAAA;AACAV,gBAAAA,QAAAA;gBACAe,SAAW,EAAA,WAAA;gBACXC,SAAWd,EAAAA,GAAAA;AACXe,gBAAAA,QAAAA,EAAUd,MAAOc,CAAAA,QAAQ,IAAIJ,CAAAA,CAAEK,UAAU,CAACL,CAAEM,CAAAA,SAAS,CAAC,CAAC,UAAU,EAAET,IAAI,CAAC,CAAA;AAC1E,aAAA,CAAA;AACF,SAAA,CAAA;QAEA,OAAOX,GAAAA;AACT,KAAA,EAAG,EAAC,CAAA;AAEJV,IAAAA,MAAAA,CAAO+B,GAAG,CAAC,YAAcC,CAAAA,CAAAA,GAAG,CAAC5B,UAAAA,CAAAA;AAC/B;;;;"}