@strapi/core 0.0.0-next.0af49f5c5ec496b0fad61ac9bfd4d0127b89d8d3 → 0.0.0-next.0fc44faf3ab6f94c481a4d426988705776878bb3

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 (702) hide show
  1. package/dist/Strapi.js +426 -408
  2. package/dist/Strapi.js.map +1 -1
  3. package/dist/Strapi.mjs +426 -408
  4. package/dist/Strapi.mjs.map +1 -1
  5. package/dist/compile.js +23 -14
  6. package/dist/compile.js.map +1 -1
  7. package/dist/compile.mjs +22 -14
  8. package/dist/compile.mjs.map +1 -1
  9. package/dist/configuration/config-loader.js +110 -96
  10. package/dist/configuration/config-loader.js.map +1 -1
  11. package/dist/configuration/config-loader.mjs +109 -95
  12. package/dist/configuration/config-loader.mjs.map +1 -1
  13. package/dist/configuration/get-dirs.js +31 -29
  14. package/dist/configuration/get-dirs.js.map +1 -1
  15. package/dist/configuration/get-dirs.mjs +30 -30
  16. package/dist/configuration/get-dirs.mjs.map +1 -1
  17. package/dist/configuration/index.d.ts +1 -0
  18. package/dist/configuration/index.d.ts.map +1 -1
  19. package/dist/configuration/index.js +85 -78
  20. package/dist/configuration/index.js.map +1 -1
  21. package/dist/configuration/index.mjs +84 -74
  22. package/dist/configuration/index.mjs.map +1 -1
  23. package/dist/configuration/urls.d.ts.map +1 -1
  24. package/dist/configuration/urls.js +74 -61
  25. package/dist/configuration/urls.js.map +1 -1
  26. package/dist/configuration/urls.mjs +73 -62
  27. package/dist/configuration/urls.mjs.map +1 -1
  28. package/dist/container.js +27 -23
  29. package/dist/container.js.map +1 -1
  30. package/dist/container.mjs +26 -24
  31. package/dist/container.mjs.map +1 -1
  32. package/dist/core-api/controller/collection-type.js +77 -76
  33. package/dist/core-api/controller/collection-type.js.map +1 -1
  34. package/dist/core-api/controller/collection-type.mjs +76 -77
  35. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  36. package/dist/core-api/controller/index.js +63 -48
  37. package/dist/core-api/controller/index.js.map +1 -1
  38. package/dist/core-api/controller/index.mjs +62 -49
  39. package/dist/core-api/controller/index.mjs.map +1 -1
  40. package/dist/core-api/controller/single-type.js +41 -40
  41. package/dist/core-api/controller/single-type.js.map +1 -1
  42. package/dist/core-api/controller/single-type.mjs +40 -41
  43. package/dist/core-api/controller/single-type.mjs.map +1 -1
  44. package/dist/core-api/controller/transform.js +72 -63
  45. package/dist/core-api/controller/transform.js.map +1 -1
  46. package/dist/core-api/controller/transform.mjs +71 -64
  47. package/dist/core-api/controller/transform.mjs.map +1 -1
  48. package/dist/core-api/routes/index.js +64 -62
  49. package/dist/core-api/routes/index.js.map +1 -1
  50. package/dist/core-api/routes/index.mjs +62 -62
  51. package/dist/core-api/routes/index.mjs.map +1 -1
  52. package/dist/core-api/service/collection-type.js +73 -60
  53. package/dist/core-api/service/collection-type.js.map +1 -1
  54. package/dist/core-api/service/collection-type.mjs +72 -62
  55. package/dist/core-api/service/collection-type.mjs.map +1 -1
  56. package/dist/core-api/service/core-service.js +9 -8
  57. package/dist/core-api/service/core-service.js.map +1 -1
  58. package/dist/core-api/service/core-service.mjs +8 -9
  59. package/dist/core-api/service/core-service.mjs.map +1 -1
  60. package/dist/core-api/service/index.js +13 -13
  61. package/dist/core-api/service/index.js.map +1 -1
  62. package/dist/core-api/service/index.mjs +12 -14
  63. package/dist/core-api/service/index.mjs.map +1 -1
  64. package/dist/core-api/service/pagination.js +69 -43
  65. package/dist/core-api/service/pagination.js.map +1 -1
  66. package/dist/core-api/service/pagination.mjs +68 -47
  67. package/dist/core-api/service/pagination.mjs.map +1 -1
  68. package/dist/core-api/service/single-type.js +43 -38
  69. package/dist/core-api/service/single-type.js.map +1 -1
  70. package/dist/core-api/service/single-type.mjs +42 -40
  71. package/dist/core-api/service/single-type.mjs.map +1 -1
  72. package/dist/domain/content-type/index.js +95 -100
  73. package/dist/domain/content-type/index.js.map +1 -1
  74. package/dist/domain/content-type/index.mjs +94 -100
  75. package/dist/domain/content-type/index.mjs.map +1 -1
  76. package/dist/domain/content-type/validator.js +84 -69
  77. package/dist/domain/content-type/validator.js.map +1 -1
  78. package/dist/domain/content-type/validator.mjs +83 -68
  79. package/dist/domain/content-type/validator.mjs.map +1 -1
  80. package/dist/domain/module/index.js +109 -100
  81. package/dist/domain/module/index.js.map +1 -1
  82. package/dist/domain/module/index.mjs +108 -99
  83. package/dist/domain/module/index.mjs.map +1 -1
  84. package/dist/domain/module/validation.js +25 -20
  85. package/dist/domain/module/validation.js.map +1 -1
  86. package/dist/domain/module/validation.mjs +24 -21
  87. package/dist/domain/module/validation.mjs.map +1 -1
  88. package/dist/ee/index.d.ts +1 -0
  89. package/dist/ee/index.d.ts.map +1 -1
  90. package/dist/ee/index.js +171 -137
  91. package/dist/ee/index.js.map +1 -1
  92. package/dist/ee/index.mjs +170 -139
  93. package/dist/ee/index.mjs.map +1 -1
  94. package/dist/ee/license.d.ts.map +1 -1
  95. package/dist/ee/license.js +100 -75
  96. package/dist/ee/license.js.map +1 -1
  97. package/dist/ee/license.mjs +99 -76
  98. package/dist/ee/license.mjs.map +1 -1
  99. package/dist/factories.js +72 -67
  100. package/dist/factories.js.map +1 -1
  101. package/dist/factories.mjs +71 -71
  102. package/dist/factories.mjs.map +1 -1
  103. package/dist/index.js +29 -26
  104. package/dist/index.js.map +1 -1
  105. package/dist/index.mjs +29 -29
  106. package/dist/index.mjs.map +1 -1
  107. package/dist/loaders/admin.d.ts.map +1 -1
  108. package/dist/loaders/admin.js +21 -20
  109. package/dist/loaders/admin.js.map +1 -1
  110. package/dist/loaders/admin.mjs +20 -20
  111. package/dist/loaders/admin.mjs.map +1 -1
  112. package/dist/loaders/apis.js +143 -120
  113. package/dist/loaders/apis.js.map +1 -1
  114. package/dist/loaders/apis.mjs +142 -119
  115. package/dist/loaders/apis.mjs.map +1 -1
  116. package/dist/loaders/components.js +33 -34
  117. package/dist/loaders/components.js.map +1 -1
  118. package/dist/loaders/components.mjs +32 -34
  119. package/dist/loaders/components.mjs.map +1 -1
  120. package/dist/loaders/index.js +22 -20
  121. package/dist/loaders/index.js.map +1 -1
  122. package/dist/loaders/index.mjs +21 -21
  123. package/dist/loaders/index.mjs.map +1 -1
  124. package/dist/loaders/middlewares.js +29 -25
  125. package/dist/loaders/middlewares.js.map +1 -1
  126. package/dist/loaders/middlewares.mjs +28 -25
  127. package/dist/loaders/middlewares.mjs.map +1 -1
  128. package/dist/loaders/plugins/get-enabled-plugins.js +126 -131
  129. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  130. package/dist/loaders/plugins/get-enabled-plugins.mjs +125 -108
  131. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  132. package/dist/loaders/plugins/get-user-plugins-config.js +25 -24
  133. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  134. package/dist/loaders/plugins/get-user-plugins-config.mjs +24 -23
  135. package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
  136. package/dist/loaders/plugins/index.js +132 -121
  137. package/dist/loaders/plugins/index.js.map +1 -1
  138. package/dist/loaders/plugins/index.mjs +121 -112
  139. package/dist/loaders/plugins/index.mjs.map +1 -1
  140. package/dist/loaders/policies.js +24 -20
  141. package/dist/loaders/policies.js.map +1 -1
  142. package/dist/loaders/policies.mjs +23 -20
  143. package/dist/loaders/policies.mjs.map +1 -1
  144. package/dist/loaders/sanitizers.js +10 -4
  145. package/dist/loaders/sanitizers.js.map +1 -1
  146. package/dist/loaders/sanitizers.mjs +9 -6
  147. package/dist/loaders/sanitizers.mjs.map +1 -1
  148. package/dist/loaders/src-index.js +35 -27
  149. package/dist/loaders/src-index.js.map +1 -1
  150. package/dist/loaders/src-index.mjs +34 -29
  151. package/dist/loaders/src-index.mjs.map +1 -1
  152. package/dist/loaders/validators.js +9 -4
  153. package/dist/loaders/validators.js.map +1 -1
  154. package/dist/loaders/validators.mjs +8 -6
  155. package/dist/loaders/validators.mjs.map +1 -1
  156. package/dist/middlewares/body.d.ts.map +1 -1
  157. package/dist/middlewares/body.js +58 -54
  158. package/dist/middlewares/body.js.map +1 -1
  159. package/dist/middlewares/body.mjs +57 -51
  160. package/dist/middlewares/body.mjs.map +1 -1
  161. package/dist/middlewares/compression.js +6 -6
  162. package/dist/middlewares/compression.js.map +1 -1
  163. package/dist/middlewares/compression.mjs +5 -5
  164. package/dist/middlewares/compression.mjs.map +1 -1
  165. package/dist/middlewares/cors.js +59 -48
  166. package/dist/middlewares/cors.js.map +1 -1
  167. package/dist/middlewares/cors.mjs +58 -47
  168. package/dist/middlewares/cors.mjs.map +1 -1
  169. package/dist/middlewares/errors.js +32 -30
  170. package/dist/middlewares/errors.js.map +1 -1
  171. package/dist/middlewares/errors.mjs +31 -31
  172. package/dist/middlewares/errors.mjs.map +1 -1
  173. package/dist/middlewares/favicon.js +27 -17
  174. package/dist/middlewares/favicon.js.map +1 -1
  175. package/dist/middlewares/favicon.mjs +26 -16
  176. package/dist/middlewares/favicon.mjs.map +1 -1
  177. package/dist/middlewares/index.js +32 -30
  178. package/dist/middlewares/index.js.map +1 -1
  179. package/dist/middlewares/index.mjs +31 -31
  180. package/dist/middlewares/index.mjs.map +1 -1
  181. package/dist/middlewares/ip.js +6 -6
  182. package/dist/middlewares/ip.js.map +1 -1
  183. package/dist/middlewares/ip.mjs +5 -5
  184. package/dist/middlewares/ip.mjs.map +1 -1
  185. package/dist/middlewares/logger.js +10 -9
  186. package/dist/middlewares/logger.js.map +1 -1
  187. package/dist/middlewares/logger.mjs +9 -10
  188. package/dist/middlewares/logger.mjs.map +1 -1
  189. package/dist/middlewares/powered-by.js +13 -9
  190. package/dist/middlewares/powered-by.js.map +1 -1
  191. package/dist/middlewares/powered-by.mjs +12 -10
  192. package/dist/middlewares/powered-by.mjs.map +1 -1
  193. package/dist/middlewares/public.js +33 -29
  194. package/dist/middlewares/public.js.map +1 -1
  195. package/dist/middlewares/public.mjs +32 -28
  196. package/dist/middlewares/public.mjs.map +1 -1
  197. package/dist/middlewares/query.js +35 -32
  198. package/dist/middlewares/query.js.map +1 -1
  199. package/dist/middlewares/query.mjs +34 -31
  200. package/dist/middlewares/query.mjs.map +1 -1
  201. package/dist/middlewares/response-time.js +10 -9
  202. package/dist/middlewares/response-time.js.map +1 -1
  203. package/dist/middlewares/response-time.mjs +9 -10
  204. package/dist/middlewares/response-time.mjs.map +1 -1
  205. package/dist/middlewares/responses.js +14 -12
  206. package/dist/middlewares/responses.js.map +1 -1
  207. package/dist/middlewares/responses.mjs +13 -13
  208. package/dist/middlewares/responses.mjs.map +1 -1
  209. package/dist/middlewares/security.js +109 -71
  210. package/dist/middlewares/security.js.map +1 -1
  211. package/dist/middlewares/security.mjs +108 -70
  212. package/dist/middlewares/security.mjs.map +1 -1
  213. package/dist/middlewares/session.js +26 -25
  214. package/dist/middlewares/session.js.map +1 -1
  215. package/dist/middlewares/session.mjs +25 -24
  216. package/dist/middlewares/session.mjs.map +1 -1
  217. package/dist/migrations/database/5.0.0-discard-drafts.js +152 -93
  218. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  219. package/dist/migrations/database/5.0.0-discard-drafts.mjs +151 -95
  220. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  221. package/dist/migrations/draft-publish.d.ts +1 -1
  222. package/dist/migrations/draft-publish.d.ts.map +1 -1
  223. package/dist/migrations/draft-publish.js +61 -34
  224. package/dist/migrations/draft-publish.js.map +1 -1
  225. package/dist/migrations/draft-publish.mjs +60 -36
  226. package/dist/migrations/draft-publish.mjs.map +1 -1
  227. package/dist/migrations/i18n.js +62 -45
  228. package/dist/migrations/i18n.js.map +1 -1
  229. package/dist/migrations/i18n.mjs +61 -47
  230. package/dist/migrations/i18n.mjs.map +1 -1
  231. package/dist/migrations/index.js +24 -10
  232. package/dist/migrations/index.js.map +1 -1
  233. package/dist/migrations/index.mjs +23 -12
  234. package/dist/migrations/index.mjs.map +1 -1
  235. package/dist/package.json.js +182 -0
  236. package/dist/package.json.js.map +1 -0
  237. package/dist/package.json.mjs +159 -0
  238. package/dist/package.json.mjs.map +1 -0
  239. package/dist/providers/admin.js +27 -17
  240. package/dist/providers/admin.js.map +1 -1
  241. package/dist/providers/admin.mjs +26 -19
  242. package/dist/providers/admin.mjs.map +1 -1
  243. package/dist/providers/coreStore.js +13 -8
  244. package/dist/providers/coreStore.js.map +1 -1
  245. package/dist/providers/coreStore.mjs +12 -10
  246. package/dist/providers/coreStore.mjs.map +1 -1
  247. package/dist/providers/cron.js +19 -16
  248. package/dist/providers/cron.js.map +1 -1
  249. package/dist/providers/cron.mjs +18 -18
  250. package/dist/providers/cron.mjs.map +1 -1
  251. package/dist/providers/index.js +18 -9
  252. package/dist/providers/index.js.map +1 -1
  253. package/dist/providers/index.mjs +17 -10
  254. package/dist/providers/index.mjs.map +1 -1
  255. package/dist/providers/provider.js +4 -3
  256. package/dist/providers/provider.js.map +1 -1
  257. package/dist/providers/provider.mjs +3 -4
  258. package/dist/providers/provider.mjs.map +1 -1
  259. package/dist/providers/registries.js +37 -32
  260. package/dist/providers/registries.js.map +1 -1
  261. package/dist/providers/registries.mjs +36 -34
  262. package/dist/providers/registries.mjs.map +1 -1
  263. package/dist/providers/telemetry.js +19 -16
  264. package/dist/providers/telemetry.js.map +1 -1
  265. package/dist/providers/telemetry.mjs +18 -18
  266. package/dist/providers/telemetry.mjs.map +1 -1
  267. package/dist/providers/webhooks.js +28 -26
  268. package/dist/providers/webhooks.js.map +1 -1
  269. package/dist/providers/webhooks.mjs +27 -28
  270. package/dist/providers/webhooks.mjs.map +1 -1
  271. package/dist/registries/apis.js +23 -20
  272. package/dist/registries/apis.js.map +1 -1
  273. package/dist/registries/apis.mjs +22 -22
  274. package/dist/registries/apis.mjs.map +1 -1
  275. package/dist/registries/components.js +35 -37
  276. package/dist/registries/components.js.map +1 -1
  277. package/dist/registries/components.mjs +34 -39
  278. package/dist/registries/components.mjs.map +1 -1
  279. package/dist/registries/content-types.js +54 -59
  280. package/dist/registries/content-types.js.map +1 -1
  281. package/dist/registries/content-types.mjs +53 -61
  282. package/dist/registries/content-types.mjs.map +1 -1
  283. package/dist/registries/controllers.js +70 -71
  284. package/dist/registries/controllers.js.map +1 -1
  285. package/dist/registries/controllers.mjs +69 -73
  286. package/dist/registries/controllers.mjs.map +1 -1
  287. package/dist/registries/custom-fields.js +75 -65
  288. package/dist/registries/custom-fields.js.map +1 -1
  289. package/dist/registries/custom-fields.mjs +74 -67
  290. package/dist/registries/custom-fields.mjs.map +1 -1
  291. package/dist/registries/hooks.js +46 -49
  292. package/dist/registries/hooks.js.map +1 -1
  293. package/dist/registries/hooks.mjs +45 -51
  294. package/dist/registries/hooks.mjs.map +1 -1
  295. package/dist/registries/middlewares.js +49 -51
  296. package/dist/registries/middlewares.js.map +1 -1
  297. package/dist/registries/middlewares.mjs +48 -53
  298. package/dist/registries/middlewares.mjs.map +1 -1
  299. package/dist/registries/models.js +14 -13
  300. package/dist/registries/models.js.map +1 -1
  301. package/dist/registries/models.mjs +13 -14
  302. package/dist/registries/models.mjs.map +1 -1
  303. package/dist/registries/modules.js +39 -36
  304. package/dist/registries/modules.js.map +1 -1
  305. package/dist/registries/modules.mjs +38 -38
  306. package/dist/registries/modules.mjs.map +1 -1
  307. package/dist/registries/namespace.js +21 -20
  308. package/dist/registries/namespace.js.map +1 -1
  309. package/dist/registries/namespace.mjs +20 -23
  310. package/dist/registries/namespace.mjs.map +1 -1
  311. package/dist/registries/plugins.js +23 -20
  312. package/dist/registries/plugins.js.map +1 -1
  313. package/dist/registries/plugins.mjs +22 -22
  314. package/dist/registries/plugins.mjs.map +1 -1
  315. package/dist/registries/policies.js +103 -96
  316. package/dist/registries/policies.js.map +1 -1
  317. package/dist/registries/policies.mjs +102 -98
  318. package/dist/registries/policies.mjs.map +1 -1
  319. package/dist/registries/sanitizers.js +23 -22
  320. package/dist/registries/sanitizers.js.map +1 -1
  321. package/dist/registries/sanitizers.mjs +22 -22
  322. package/dist/registries/sanitizers.mjs.map +1 -1
  323. package/dist/registries/services.js +71 -71
  324. package/dist/registries/services.js.map +1 -1
  325. package/dist/registries/services.mjs +70 -73
  326. package/dist/registries/services.mjs.map +1 -1
  327. package/dist/registries/validators.js +23 -22
  328. package/dist/registries/validators.js.map +1 -1
  329. package/dist/registries/validators.mjs +22 -22
  330. package/dist/registries/validators.mjs.map +1 -1
  331. package/dist/services/auth/index.js +74 -74
  332. package/dist/services/auth/index.js.map +1 -1
  333. package/dist/services/auth/index.mjs +73 -74
  334. package/dist/services/auth/index.mjs.map +1 -1
  335. package/dist/services/config.js +47 -43
  336. package/dist/services/config.js.map +1 -1
  337. package/dist/services/config.mjs +46 -44
  338. package/dist/services/config.mjs.map +1 -1
  339. package/dist/services/content-api/index.js +80 -79
  340. package/dist/services/content-api/index.js.map +1 -1
  341. package/dist/services/content-api/index.mjs +79 -79
  342. package/dist/services/content-api/index.mjs.map +1 -1
  343. package/dist/services/content-api/permissions/engine.js +8 -5
  344. package/dist/services/content-api/permissions/engine.js.map +1 -1
  345. package/dist/services/content-api/permissions/engine.mjs +7 -5
  346. package/dist/services/content-api/permissions/engine.mjs.map +1 -1
  347. package/dist/services/content-api/permissions/index.js +101 -81
  348. package/dist/services/content-api/permissions/index.js.map +1 -1
  349. package/dist/services/content-api/permissions/index.mjs +100 -81
  350. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  351. package/dist/services/content-api/permissions/providers/action.js +17 -14
  352. package/dist/services/content-api/permissions/providers/action.js.map +1 -1
  353. package/dist/services/content-api/permissions/providers/action.mjs +16 -16
  354. package/dist/services/content-api/permissions/providers/action.mjs.map +1 -1
  355. package/dist/services/content-api/permissions/providers/condition.js +17 -14
  356. package/dist/services/content-api/permissions/providers/condition.js.map +1 -1
  357. package/dist/services/content-api/permissions/providers/condition.mjs +16 -16
  358. package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -1
  359. package/dist/services/core-store.d.ts +2 -2
  360. package/dist/services/core-store.d.ts.map +1 -1
  361. package/dist/services/core-store.js +115 -95
  362. package/dist/services/core-store.js.map +1 -1
  363. package/dist/services/core-store.mjs +114 -97
  364. package/dist/services/core-store.mjs.map +1 -1
  365. package/dist/services/cron.js +74 -64
  366. package/dist/services/cron.js.map +1 -1
  367. package/dist/services/cron.mjs +73 -66
  368. package/dist/services/cron.mjs.map +1 -1
  369. package/dist/services/custom-fields.js +9 -7
  370. package/dist/services/custom-fields.js.map +1 -1
  371. package/dist/services/custom-fields.mjs +8 -9
  372. package/dist/services/custom-fields.mjs.map +1 -1
  373. package/dist/services/document-service/attributes/index.js +23 -18
  374. package/dist/services/document-service/attributes/index.js.map +1 -1
  375. package/dist/services/document-service/attributes/index.mjs +22 -19
  376. package/dist/services/document-service/attributes/index.mjs.map +1 -1
  377. package/dist/services/document-service/attributes/transforms.js +16 -15
  378. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  379. package/dist/services/document-service/attributes/transforms.mjs +15 -15
  380. package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
  381. package/dist/services/document-service/common.js +5 -4
  382. package/dist/services/document-service/common.js.map +1 -1
  383. package/dist/services/document-service/common.mjs +4 -5
  384. package/dist/services/document-service/common.mjs.map +1 -1
  385. package/dist/services/document-service/components.js +255 -257
  386. package/dist/services/document-service/components.js.map +1 -1
  387. package/dist/services/document-service/components.mjs +254 -262
  388. package/dist/services/document-service/components.mjs.map +1 -1
  389. package/dist/services/document-service/draft-and-publish.d.ts +1 -1
  390. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  391. package/dist/services/document-service/draft-and-publish.js +88 -48
  392. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  393. package/dist/services/document-service/draft-and-publish.mjs +87 -54
  394. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  395. package/dist/services/document-service/entries.d.ts.map +1 -1
  396. package/dist/services/document-service/entries.js +151 -91
  397. package/dist/services/document-service/entries.js.map +1 -1
  398. package/dist/services/document-service/entries.mjs +150 -92
  399. package/dist/services/document-service/entries.mjs.map +1 -1
  400. package/dist/services/document-service/events.d.ts +1 -1
  401. package/dist/services/document-service/events.d.ts.map +1 -1
  402. package/dist/services/document-service/events.js +52 -40
  403. package/dist/services/document-service/events.js.map +1 -1
  404. package/dist/services/document-service/events.mjs +51 -41
  405. package/dist/services/document-service/events.mjs.map +1 -1
  406. package/dist/services/document-service/index.js +53 -33
  407. package/dist/services/document-service/index.js.map +1 -1
  408. package/dist/services/document-service/index.mjs +52 -34
  409. package/dist/services/document-service/index.mjs.map +1 -1
  410. package/dist/services/document-service/internationalization.js +62 -46
  411. package/dist/services/document-service/internationalization.js.map +1 -1
  412. package/dist/services/document-service/internationalization.mjs +61 -50
  413. package/dist/services/document-service/internationalization.mjs.map +1 -1
  414. package/dist/services/document-service/middlewares/errors.js +23 -19
  415. package/dist/services/document-service/middlewares/errors.js.map +1 -1
  416. package/dist/services/document-service/middlewares/errors.mjs +22 -20
  417. package/dist/services/document-service/middlewares/errors.mjs.map +1 -1
  418. package/dist/services/document-service/middlewares/middleware-manager.js +46 -44
  419. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -1
  420. package/dist/services/document-service/middlewares/middleware-manager.mjs +45 -45
  421. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -1
  422. package/dist/services/document-service/params.js +11 -5
  423. package/dist/services/document-service/params.js.map +1 -1
  424. package/dist/services/document-service/params.mjs +10 -6
  425. package/dist/services/document-service/params.mjs.map +1 -1
  426. package/dist/services/document-service/repository.d.ts.map +1 -1
  427. package/dist/services/document-service/repository.js +353 -321
  428. package/dist/services/document-service/repository.js.map +1 -1
  429. package/dist/services/document-service/repository.mjs +352 -322
  430. package/dist/services/document-service/repository.mjs.map +1 -1
  431. package/dist/services/document-service/transform/data.js +22 -12
  432. package/dist/services/document-service/transform/data.js.map +1 -1
  433. package/dist/services/document-service/transform/data.mjs +21 -13
  434. package/dist/services/document-service/transform/data.mjs.map +1 -1
  435. package/dist/services/document-service/transform/fields.js +26 -17
  436. package/dist/services/document-service/transform/fields.js.map +1 -1
  437. package/dist/services/document-service/transform/fields.mjs +25 -18
  438. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  439. package/dist/services/document-service/transform/id-map.d.ts +1 -1
  440. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  441. package/dist/services/document-service/transform/id-map.js +115 -75
  442. package/dist/services/document-service/transform/id-map.js.map +1 -1
  443. package/dist/services/document-service/transform/id-map.mjs +114 -76
  444. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  445. package/dist/services/document-service/transform/id-transform.d.ts +1 -1
  446. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  447. package/dist/services/document-service/transform/id-transform.js +37 -29
  448. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  449. package/dist/services/document-service/transform/id-transform.mjs +36 -30
  450. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  451. package/dist/services/document-service/transform/populate.js +23 -18
  452. package/dist/services/document-service/transform/populate.js.map +1 -1
  453. package/dist/services/document-service/transform/populate.mjs +22 -19
  454. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  455. package/dist/services/document-service/transform/query.js +11 -6
  456. package/dist/services/document-service/transform/query.js.map +1 -1
  457. package/dist/services/document-service/transform/query.mjs +10 -7
  458. package/dist/services/document-service/transform/query.mjs.map +1 -1
  459. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +1 -1
  460. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  461. package/dist/services/document-service/transform/relations/extract/data-ids.js +70 -54
  462. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  463. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +69 -55
  464. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  465. package/dist/services/document-service/transform/relations/transform/data-ids.js +96 -71
  466. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  467. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +95 -72
  468. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  469. package/dist/services/document-service/transform/relations/transform/default-locale.js +47 -29
  470. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
  471. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +46 -30
  472. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
  473. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  474. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  475. package/dist/services/document-service/transform/relations/utils/dp.js +52 -26
  476. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  477. package/dist/services/document-service/transform/relations/utils/dp.mjs +51 -27
  478. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  479. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +1 -1
  480. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  481. package/dist/services/document-service/transform/relations/utils/i18n.js +20 -18
  482. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  483. package/dist/services/document-service/transform/relations/utils/i18n.mjs +19 -21
  484. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  485. package/dist/services/document-service/transform/relations/utils/map-relation.js +116 -70
  486. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  487. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +115 -72
  488. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  489. package/dist/services/document-service/utils/bidirectional-relations.d.ts +95 -0
  490. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -0
  491. package/dist/services/document-service/utils/bidirectional-relations.js +148 -0
  492. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -0
  493. package/dist/services/document-service/utils/bidirectional-relations.mjs +145 -0
  494. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -0
  495. package/dist/services/document-service/utils/populate.d.ts +1 -1
  496. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  497. package/dist/services/document-service/utils/populate.js +66 -42
  498. package/dist/services/document-service/utils/populate.js.map +1 -1
  499. package/dist/services/document-service/utils/populate.mjs +65 -43
  500. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  501. package/dist/services/document-service/utils/unidirectional-relations.d.ts +1 -1
  502. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  503. package/dist/services/document-service/utils/unidirectional-relations.js +110 -62
  504. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  505. package/dist/services/document-service/utils/unidirectional-relations.mjs +109 -64
  506. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  507. package/dist/services/entity-service/index.js +230 -161
  508. package/dist/services/entity-service/index.js.map +1 -1
  509. package/dist/services/entity-service/index.mjs +229 -160
  510. package/dist/services/entity-service/index.mjs.map +1 -1
  511. package/dist/services/entity-validator/blocks-validator.js +135 -103
  512. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  513. package/dist/services/entity-validator/blocks-validator.mjs +134 -104
  514. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  515. package/dist/services/entity-validator/index.d.ts +1 -1
  516. package/dist/services/entity-validator/index.d.ts.map +1 -1
  517. package/dist/services/entity-validator/index.js +362 -367
  518. package/dist/services/entity-validator/index.js.map +1 -1
  519. package/dist/services/entity-validator/index.mjs +358 -364
  520. package/dist/services/entity-validator/index.mjs.map +1 -1
  521. package/dist/services/entity-validator/validators.js +268 -210
  522. package/dist/services/entity-validator/validators.js.map +1 -1
  523. package/dist/services/entity-validator/validators.mjs +267 -216
  524. package/dist/services/entity-validator/validators.mjs.map +1 -1
  525. package/dist/services/errors.js +65 -65
  526. package/dist/services/errors.js.map +1 -1
  527. package/dist/services/errors.mjs +64 -66
  528. package/dist/services/errors.mjs.map +1 -1
  529. package/dist/services/event-hub.js +82 -69
  530. package/dist/services/event-hub.js.map +1 -1
  531. package/dist/services/event-hub.mjs +81 -71
  532. package/dist/services/event-hub.mjs.map +1 -1
  533. package/dist/services/features.js +19 -14
  534. package/dist/services/features.js.map +1 -1
  535. package/dist/services/features.mjs +18 -15
  536. package/dist/services/features.mjs.map +1 -1
  537. package/dist/services/fs.js +41 -40
  538. package/dist/services/fs.js.map +1 -1
  539. package/dist/services/fs.mjs +40 -39
  540. package/dist/services/fs.mjs.map +1 -1
  541. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  542. package/dist/services/metrics/admin-user-hash.js +13 -11
  543. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  544. package/dist/services/metrics/admin-user-hash.mjs +12 -10
  545. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  546. package/dist/services/metrics/index.js +46 -39
  547. package/dist/services/metrics/index.js.map +1 -1
  548. package/dist/services/metrics/index.mjs +45 -41
  549. package/dist/services/metrics/index.mjs.map +1 -1
  550. package/dist/services/metrics/is-truthy.js +13 -6
  551. package/dist/services/metrics/is-truthy.js.map +1 -1
  552. package/dist/services/metrics/is-truthy.mjs +12 -6
  553. package/dist/services/metrics/is-truthy.mjs.map +1 -1
  554. package/dist/services/metrics/middleware.d.ts.map +1 -1
  555. package/dist/services/metrics/middleware.js +37 -22
  556. package/dist/services/metrics/middleware.js.map +1 -1
  557. package/dist/services/metrics/middleware.mjs +36 -24
  558. package/dist/services/metrics/middleware.mjs.map +1 -1
  559. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  560. package/dist/services/metrics/rate-limiter.js +24 -19
  561. package/dist/services/metrics/rate-limiter.js.map +1 -1
  562. package/dist/services/metrics/rate-limiter.mjs +23 -21
  563. package/dist/services/metrics/rate-limiter.mjs.map +1 -1
  564. package/dist/services/metrics/sender.d.ts.map +1 -1
  565. package/dist/services/metrics/sender.js +78 -69
  566. package/dist/services/metrics/sender.js.map +1 -1
  567. package/dist/services/metrics/sender.mjs +77 -64
  568. package/dist/services/metrics/sender.mjs.map +1 -1
  569. package/dist/services/query-params.js +13 -10
  570. package/dist/services/query-params.js.map +1 -1
  571. package/dist/services/query-params.mjs +12 -12
  572. package/dist/services/query-params.mjs.map +1 -1
  573. package/dist/services/reloader.js +35 -32
  574. package/dist/services/reloader.js.map +1 -1
  575. package/dist/services/reloader.mjs +34 -33
  576. package/dist/services/reloader.mjs.map +1 -1
  577. package/dist/services/request-context.js +11 -8
  578. package/dist/services/request-context.js.map +1 -1
  579. package/dist/services/request-context.mjs +10 -10
  580. package/dist/services/request-context.mjs.map +1 -1
  581. package/dist/services/server/admin-api.js +11 -10
  582. package/dist/services/server/admin-api.js.map +1 -1
  583. package/dist/services/server/admin-api.mjs +10 -11
  584. package/dist/services/server/admin-api.mjs.map +1 -1
  585. package/dist/services/server/api.js +33 -27
  586. package/dist/services/server/api.js.map +1 -1
  587. package/dist/services/server/api.mjs +32 -26
  588. package/dist/services/server/api.mjs.map +1 -1
  589. package/dist/services/server/compose-endpoint.js +116 -105
  590. package/dist/services/server/compose-endpoint.js.map +1 -1
  591. package/dist/services/server/compose-endpoint.mjs +115 -105
  592. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  593. package/dist/services/server/content-api.js +11 -9
  594. package/dist/services/server/content-api.js.map +1 -1
  595. package/dist/services/server/content-api.mjs +10 -10
  596. package/dist/services/server/content-api.mjs.map +1 -1
  597. package/dist/services/server/http-server.js +48 -44
  598. package/dist/services/server/http-server.js.map +1 -1
  599. package/dist/services/server/http-server.mjs +47 -43
  600. package/dist/services/server/http-server.mjs.map +1 -1
  601. package/dist/services/server/index.js +85 -82
  602. package/dist/services/server/index.js.map +1 -1
  603. package/dist/services/server/index.mjs +84 -81
  604. package/dist/services/server/index.mjs.map +1 -1
  605. package/dist/services/server/koa.js +49 -47
  606. package/dist/services/server/koa.js.map +1 -1
  607. package/dist/services/server/koa.mjs +48 -44
  608. package/dist/services/server/koa.mjs.map +1 -1
  609. package/dist/services/server/middleware.js +86 -82
  610. package/dist/services/server/middleware.js.map +1 -1
  611. package/dist/services/server/middleware.mjs +85 -82
  612. package/dist/services/server/middleware.mjs.map +1 -1
  613. package/dist/services/server/policy.js +24 -17
  614. package/dist/services/server/policy.js.map +1 -1
  615. package/dist/services/server/policy.mjs +23 -18
  616. package/dist/services/server/policy.mjs.map +1 -1
  617. package/dist/services/server/register-middlewares.js +68 -61
  618. package/dist/services/server/register-middlewares.js.map +1 -1
  619. package/dist/services/server/register-middlewares.mjs +67 -63
  620. package/dist/services/server/register-middlewares.mjs.map +1 -1
  621. package/dist/services/server/register-routes.js +90 -67
  622. package/dist/services/server/register-routes.js.map +1 -1
  623. package/dist/services/server/register-routes.mjs +89 -67
  624. package/dist/services/server/register-routes.mjs.map +1 -1
  625. package/dist/services/server/routing.js +94 -81
  626. package/dist/services/server/routing.js.map +1 -1
  627. package/dist/services/server/routing.mjs +93 -81
  628. package/dist/services/server/routing.mjs.map +1 -1
  629. package/dist/services/utils/dynamic-zones.js +13 -14
  630. package/dist/services/utils/dynamic-zones.js.map +1 -1
  631. package/dist/services/utils/dynamic-zones.mjs +12 -16
  632. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  633. package/dist/services/webhook-runner.js +124 -122
  634. package/dist/services/webhook-runner.js.map +1 -1
  635. package/dist/services/webhook-runner.mjs +123 -121
  636. package/dist/services/webhook-runner.mjs.map +1 -1
  637. package/dist/services/webhook-store.js +132 -99
  638. package/dist/services/webhook-store.js.map +1 -1
  639. package/dist/services/webhook-store.mjs +131 -101
  640. package/dist/services/webhook-store.mjs.map +1 -1
  641. package/dist/services/worker-queue.js +44 -49
  642. package/dist/services/worker-queue.js.map +1 -1
  643. package/dist/services/worker-queue.mjs +43 -49
  644. package/dist/services/worker-queue.mjs.map +1 -1
  645. package/dist/utils/convert-custom-field-type.js +17 -20
  646. package/dist/utils/convert-custom-field-type.js.map +1 -1
  647. package/dist/utils/convert-custom-field-type.mjs +16 -21
  648. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  649. package/dist/utils/cron.js +64 -30
  650. package/dist/utils/cron.js.map +1 -1
  651. package/dist/utils/cron.mjs +63 -31
  652. package/dist/utils/cron.mjs.map +1 -1
  653. package/dist/utils/fetch.js +24 -18
  654. package/dist/utils/fetch.js.map +1 -1
  655. package/dist/utils/fetch.mjs +23 -19
  656. package/dist/utils/fetch.mjs.map +1 -1
  657. package/dist/utils/filepath-to-prop-path.js +20 -28
  658. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  659. package/dist/utils/filepath-to-prop-path.mjs +19 -26
  660. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  661. package/dist/utils/is-initialized.js +21 -12
  662. package/dist/utils/is-initialized.js.map +1 -1
  663. package/dist/utils/is-initialized.mjs +20 -13
  664. package/dist/utils/is-initialized.mjs.map +1 -1
  665. package/dist/utils/lifecycles.js +6 -5
  666. package/dist/utils/lifecycles.js.map +1 -1
  667. package/dist/utils/lifecycles.mjs +5 -6
  668. package/dist/utils/lifecycles.mjs.map +1 -1
  669. package/dist/utils/load-config-file.js +40 -38
  670. package/dist/utils/load-config-file.js.map +1 -1
  671. package/dist/utils/load-config-file.mjs +39 -36
  672. package/dist/utils/load-config-file.mjs.map +1 -1
  673. package/dist/utils/load-files.js +40 -34
  674. package/dist/utils/load-files.js.map +1 -1
  675. package/dist/utils/load-files.mjs +39 -31
  676. package/dist/utils/load-files.mjs.map +1 -1
  677. package/dist/utils/open-browser.js +8 -8
  678. package/dist/utils/open-browser.js.map +1 -1
  679. package/dist/utils/open-browser.mjs +7 -7
  680. package/dist/utils/open-browser.mjs.map +1 -1
  681. package/dist/utils/resolve-working-dirs.js +23 -10
  682. package/dist/utils/resolve-working-dirs.js.map +1 -1
  683. package/dist/utils/resolve-working-dirs.mjs +22 -9
  684. package/dist/utils/resolve-working-dirs.mjs.map +1 -1
  685. package/dist/utils/signals.js +20 -14
  686. package/dist/utils/signals.js.map +1 -1
  687. package/dist/utils/signals.mjs +19 -15
  688. package/dist/utils/signals.mjs.map +1 -1
  689. package/dist/utils/startup-logger.js +107 -83
  690. package/dist/utils/startup-logger.js.map +1 -1
  691. package/dist/utils/startup-logger.mjs +106 -80
  692. package/dist/utils/startup-logger.mjs.map +1 -1
  693. package/dist/utils/transform-content-types-to-models.js +350 -261
  694. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  695. package/dist/utils/transform-content-types-to-models.mjs +349 -269
  696. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  697. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  698. package/dist/utils/update-notifier/index.js +68 -73
  699. package/dist/utils/update-notifier/index.js.map +1 -1
  700. package/dist/utils/update-notifier/index.mjs +67 -67
  701. package/dist/utils/update-notifier/index.mjs.map +1 -1
  702. package/package.json +25 -26
@@ -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":"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"}
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,CAAC;AAAA,EAAA;AAGV,QAAM,MAAM,MAAMC,oBAA4B,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,QACnF;AAAA,MAAA;AAGF,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,EAAkB;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,CAAC;AAAA,EAAA;AAGV,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,QACnF;AAAA,MAAA;AAGF,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,EAAkB;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;;;;"}