@strapi/core 0.0.0-experimental.f75e3c6d67cc47c64ab37479efdbb7b43be50b78 → 0.0.0-experimental.f78dd29ef270559728250589cde1cfb0b9f7343a

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.

Potentially problematic release.


This version of @strapi/core might be problematic. Click here for more details.

Files changed (749) hide show
  1. package/LICENSE +18 -3
  2. package/dist/Strapi.d.ts +3 -1
  3. package/dist/Strapi.d.ts.map +1 -1
  4. package/dist/Strapi.js +437 -369
  5. package/dist/Strapi.js.map +1 -1
  6. package/dist/Strapi.mjs +426 -377
  7. package/dist/Strapi.mjs.map +1 -1
  8. package/dist/compile.js +23 -14
  9. package/dist/compile.js.map +1 -1
  10. package/dist/compile.mjs +22 -14
  11. package/dist/compile.mjs.map +1 -1
  12. package/dist/configuration/config-loader.js +110 -97
  13. package/dist/configuration/config-loader.js.map +1 -1
  14. package/dist/configuration/config-loader.mjs +109 -96
  15. package/dist/configuration/config-loader.mjs.map +1 -1
  16. package/dist/configuration/get-dirs.js +31 -29
  17. package/dist/configuration/get-dirs.js.map +1 -1
  18. package/dist/configuration/get-dirs.mjs +30 -30
  19. package/dist/configuration/get-dirs.mjs.map +1 -1
  20. package/dist/configuration/index.d.ts.map +1 -1
  21. package/dist/configuration/index.js +84 -73
  22. package/dist/configuration/index.js.map +1 -1
  23. package/dist/configuration/index.mjs +83 -69
  24. package/dist/configuration/index.mjs.map +1 -1
  25. package/dist/configuration/urls.d.ts.map +1 -1
  26. package/dist/configuration/urls.js +74 -61
  27. package/dist/configuration/urls.js.map +1 -1
  28. package/dist/configuration/urls.mjs +73 -62
  29. package/dist/configuration/urls.mjs.map +1 -1
  30. package/dist/container.js +27 -23
  31. package/dist/container.js.map +1 -1
  32. package/dist/container.mjs +26 -24
  33. package/dist/container.mjs.map +1 -1
  34. package/dist/core-api/controller/collection-type.js +77 -76
  35. package/dist/core-api/controller/collection-type.js.map +1 -1
  36. package/dist/core-api/controller/collection-type.mjs +76 -77
  37. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  38. package/dist/core-api/controller/index.js +63 -48
  39. package/dist/core-api/controller/index.js.map +1 -1
  40. package/dist/core-api/controller/index.mjs +62 -49
  41. package/dist/core-api/controller/index.mjs.map +1 -1
  42. package/dist/core-api/controller/single-type.js +41 -40
  43. package/dist/core-api/controller/single-type.js.map +1 -1
  44. package/dist/core-api/controller/single-type.mjs +40 -41
  45. package/dist/core-api/controller/single-type.mjs.map +1 -1
  46. package/dist/core-api/controller/transform.js +72 -63
  47. package/dist/core-api/controller/transform.js.map +1 -1
  48. package/dist/core-api/controller/transform.mjs +71 -64
  49. package/dist/core-api/controller/transform.mjs.map +1 -1
  50. package/dist/core-api/routes/index.js +64 -62
  51. package/dist/core-api/routes/index.js.map +1 -1
  52. package/dist/core-api/routes/index.mjs +62 -62
  53. package/dist/core-api/routes/index.mjs.map +1 -1
  54. package/dist/core-api/service/collection-type.d.ts +2 -2
  55. package/dist/core-api/service/collection-type.js +73 -60
  56. package/dist/core-api/service/collection-type.js.map +1 -1
  57. package/dist/core-api/service/collection-type.mjs +72 -62
  58. package/dist/core-api/service/collection-type.mjs.map +1 -1
  59. package/dist/core-api/service/core-service.js +9 -8
  60. package/dist/core-api/service/core-service.js.map +1 -1
  61. package/dist/core-api/service/core-service.mjs +8 -9
  62. package/dist/core-api/service/core-service.mjs.map +1 -1
  63. package/dist/core-api/service/index.js +13 -13
  64. package/dist/core-api/service/index.js.map +1 -1
  65. package/dist/core-api/service/index.mjs +12 -14
  66. package/dist/core-api/service/index.mjs.map +1 -1
  67. package/dist/core-api/service/pagination.js +69 -43
  68. package/dist/core-api/service/pagination.js.map +1 -1
  69. package/dist/core-api/service/pagination.mjs +68 -47
  70. package/dist/core-api/service/pagination.mjs.map +1 -1
  71. package/dist/core-api/service/single-type.js +43 -39
  72. package/dist/core-api/service/single-type.js.map +1 -1
  73. package/dist/core-api/service/single-type.mjs +42 -41
  74. package/dist/core-api/service/single-type.mjs.map +1 -1
  75. package/dist/domain/content-type/index.js +95 -100
  76. package/dist/domain/content-type/index.js.map +1 -1
  77. package/dist/domain/content-type/index.mjs +94 -100
  78. package/dist/domain/content-type/index.mjs.map +1 -1
  79. package/dist/domain/content-type/validator.js +84 -69
  80. package/dist/domain/content-type/validator.js.map +1 -1
  81. package/dist/domain/content-type/validator.mjs +83 -68
  82. package/dist/domain/content-type/validator.mjs.map +1 -1
  83. package/dist/domain/module/index.js +109 -100
  84. package/dist/domain/module/index.js.map +1 -1
  85. package/dist/domain/module/index.mjs +108 -99
  86. package/dist/domain/module/index.mjs.map +1 -1
  87. package/dist/domain/module/validation.js +25 -20
  88. package/dist/domain/module/validation.js.map +1 -1
  89. package/dist/domain/module/validation.mjs +24 -21
  90. package/dist/domain/module/validation.mjs.map +1 -1
  91. package/dist/ee/index.d.ts +1 -0
  92. package/dist/ee/index.d.ts.map +1 -1
  93. package/dist/ee/index.js +171 -132
  94. package/dist/ee/index.js.map +1 -1
  95. package/dist/ee/index.mjs +170 -134
  96. package/dist/ee/index.mjs.map +1 -1
  97. package/dist/ee/license.d.ts.map +1 -1
  98. package/dist/ee/license.js +99 -75
  99. package/dist/ee/license.js.map +1 -1
  100. package/dist/ee/license.mjs +98 -76
  101. package/dist/ee/license.mjs.map +1 -1
  102. package/dist/factories.js +72 -67
  103. package/dist/factories.js.map +1 -1
  104. package/dist/factories.mjs +71 -71
  105. package/dist/factories.mjs.map +1 -1
  106. package/dist/index.d.ts +14 -0
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +29 -26
  109. package/dist/index.js.map +1 -1
  110. package/dist/index.mjs +29 -29
  111. package/dist/index.mjs.map +1 -1
  112. package/dist/loaders/admin.d.ts.map +1 -1
  113. package/dist/loaders/admin.js +21 -20
  114. package/dist/loaders/admin.js.map +1 -1
  115. package/dist/loaders/admin.mjs +20 -20
  116. package/dist/loaders/admin.mjs.map +1 -1
  117. package/dist/loaders/apis.js +143 -120
  118. package/dist/loaders/apis.js.map +1 -1
  119. package/dist/loaders/apis.mjs +142 -119
  120. package/dist/loaders/apis.mjs.map +1 -1
  121. package/dist/loaders/components.js +33 -34
  122. package/dist/loaders/components.js.map +1 -1
  123. package/dist/loaders/components.mjs +32 -34
  124. package/dist/loaders/components.mjs.map +1 -1
  125. package/dist/loaders/index.js +22 -20
  126. package/dist/loaders/index.js.map +1 -1
  127. package/dist/loaders/index.mjs +21 -21
  128. package/dist/loaders/index.mjs.map +1 -1
  129. package/dist/loaders/middlewares.js +29 -25
  130. package/dist/loaders/middlewares.js.map +1 -1
  131. package/dist/loaders/middlewares.mjs +28 -25
  132. package/dist/loaders/middlewares.mjs.map +1 -1
  133. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  134. package/dist/loaders/plugins/get-enabled-plugins.js +125 -102
  135. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  136. package/dist/loaders/plugins/get-enabled-plugins.mjs +124 -101
  137. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  138. package/dist/loaders/plugins/get-user-plugins-config.js +25 -24
  139. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  140. package/dist/loaders/plugins/get-user-plugins-config.mjs +24 -23
  141. package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
  142. package/dist/loaders/plugins/index.d.ts.map +1 -1
  143. package/dist/loaders/plugins/index.js +141 -104
  144. package/dist/loaders/plugins/index.js.map +1 -1
  145. package/dist/loaders/plugins/index.mjs +121 -104
  146. package/dist/loaders/plugins/index.mjs.map +1 -1
  147. package/dist/loaders/policies.js +24 -20
  148. package/dist/loaders/policies.js.map +1 -1
  149. package/dist/loaders/policies.mjs +23 -20
  150. package/dist/loaders/policies.mjs.map +1 -1
  151. package/dist/loaders/sanitizers.js +10 -4
  152. package/dist/loaders/sanitizers.js.map +1 -1
  153. package/dist/loaders/sanitizers.mjs +9 -6
  154. package/dist/loaders/sanitizers.mjs.map +1 -1
  155. package/dist/loaders/src-index.js +35 -27
  156. package/dist/loaders/src-index.js.map +1 -1
  157. package/dist/loaders/src-index.mjs +34 -29
  158. package/dist/loaders/src-index.mjs.map +1 -1
  159. package/dist/loaders/validators.js +9 -4
  160. package/dist/loaders/validators.js.map +1 -1
  161. package/dist/loaders/validators.mjs +8 -6
  162. package/dist/loaders/validators.mjs.map +1 -1
  163. package/dist/middlewares/body.d.ts.map +1 -1
  164. package/dist/middlewares/body.js +58 -54
  165. package/dist/middlewares/body.js.map +1 -1
  166. package/dist/middlewares/body.mjs +57 -51
  167. package/dist/middlewares/body.mjs.map +1 -1
  168. package/dist/middlewares/compression.js +6 -6
  169. package/dist/middlewares/compression.js.map +1 -1
  170. package/dist/middlewares/compression.mjs +5 -5
  171. package/dist/middlewares/compression.mjs.map +1 -1
  172. package/dist/middlewares/cors.d.ts.map +1 -1
  173. package/dist/middlewares/cors.js +59 -46
  174. package/dist/middlewares/cors.js.map +1 -1
  175. package/dist/middlewares/cors.mjs +58 -45
  176. package/dist/middlewares/cors.mjs.map +1 -1
  177. package/dist/middlewares/errors.js +32 -30
  178. package/dist/middlewares/errors.js.map +1 -1
  179. package/dist/middlewares/errors.mjs +31 -31
  180. package/dist/middlewares/errors.mjs.map +1 -1
  181. package/dist/middlewares/favicon.js +27 -17
  182. package/dist/middlewares/favicon.js.map +1 -1
  183. package/dist/middlewares/favicon.mjs +26 -16
  184. package/dist/middlewares/favicon.mjs.map +1 -1
  185. package/dist/middlewares/index.js +32 -30
  186. package/dist/middlewares/index.js.map +1 -1
  187. package/dist/middlewares/index.mjs +31 -31
  188. package/dist/middlewares/index.mjs.map +1 -1
  189. package/dist/middlewares/ip.js +6 -6
  190. package/dist/middlewares/ip.js.map +1 -1
  191. package/dist/middlewares/ip.mjs +5 -5
  192. package/dist/middlewares/ip.mjs.map +1 -1
  193. package/dist/middlewares/logger.js +10 -9
  194. package/dist/middlewares/logger.js.map +1 -1
  195. package/dist/middlewares/logger.mjs +9 -10
  196. package/dist/middlewares/logger.mjs.map +1 -1
  197. package/dist/middlewares/powered-by.js +13 -9
  198. package/dist/middlewares/powered-by.js.map +1 -1
  199. package/dist/middlewares/powered-by.mjs +12 -10
  200. package/dist/middlewares/powered-by.mjs.map +1 -1
  201. package/dist/middlewares/public.js +33 -29
  202. package/dist/middlewares/public.js.map +1 -1
  203. package/dist/middlewares/public.mjs +32 -28
  204. package/dist/middlewares/public.mjs.map +1 -1
  205. package/dist/middlewares/query.d.ts.map +1 -1
  206. package/dist/middlewares/query.js +35 -32
  207. package/dist/middlewares/query.js.map +1 -1
  208. package/dist/middlewares/query.mjs +34 -31
  209. package/dist/middlewares/query.mjs.map +1 -1
  210. package/dist/middlewares/response-time.js +10 -9
  211. package/dist/middlewares/response-time.js.map +1 -1
  212. package/dist/middlewares/response-time.mjs +9 -10
  213. package/dist/middlewares/response-time.mjs.map +1 -1
  214. package/dist/middlewares/responses.js +14 -12
  215. package/dist/middlewares/responses.js.map +1 -1
  216. package/dist/middlewares/responses.mjs +13 -13
  217. package/dist/middlewares/responses.mjs.map +1 -1
  218. package/dist/middlewares/security.d.ts.map +1 -1
  219. package/dist/middlewares/security.js +110 -65
  220. package/dist/middlewares/security.js.map +1 -1
  221. package/dist/middlewares/security.mjs +108 -63
  222. package/dist/middlewares/security.mjs.map +1 -1
  223. package/dist/middlewares/session.js +26 -25
  224. package/dist/middlewares/session.js.map +1 -1
  225. package/dist/middlewares/session.mjs +25 -24
  226. package/dist/middlewares/session.mjs.map +1 -1
  227. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +14 -11
  228. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
  229. package/dist/migrations/database/5.0.0-discard-drafts.js +153 -35
  230. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  231. package/dist/migrations/database/5.0.0-discard-drafts.mjs +152 -37
  232. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  233. package/dist/migrations/draft-publish.d.ts +2 -2
  234. package/dist/migrations/draft-publish.d.ts.map +1 -1
  235. package/dist/migrations/draft-publish.js +61 -34
  236. package/dist/migrations/draft-publish.js.map +1 -1
  237. package/dist/migrations/draft-publish.mjs +60 -36
  238. package/dist/migrations/draft-publish.mjs.map +1 -1
  239. package/dist/migrations/i18n.d.ts +5 -0
  240. package/dist/migrations/i18n.d.ts.map +1 -0
  241. package/dist/migrations/i18n.js +71 -0
  242. package/dist/migrations/i18n.js.map +1 -0
  243. package/dist/migrations/i18n.mjs +68 -0
  244. package/dist/migrations/i18n.mjs.map +1 -0
  245. package/dist/migrations/index.d.ts +5 -0
  246. package/dist/migrations/index.d.ts.map +1 -0
  247. package/dist/migrations/index.js +29 -0
  248. package/dist/migrations/index.js.map +1 -0
  249. package/dist/migrations/index.mjs +26 -0
  250. package/dist/migrations/index.mjs.map +1 -0
  251. package/dist/package.json.js +182 -0
  252. package/dist/package.json.js.map +1 -0
  253. package/dist/package.json.mjs +159 -0
  254. package/dist/package.json.mjs.map +1 -0
  255. package/dist/providers/admin.d.ts.map +1 -1
  256. package/dist/providers/admin.js +27 -17
  257. package/dist/providers/admin.js.map +1 -1
  258. package/dist/providers/admin.mjs +26 -19
  259. package/dist/providers/admin.mjs.map +1 -1
  260. package/dist/providers/coreStore.js +13 -8
  261. package/dist/providers/coreStore.js.map +1 -1
  262. package/dist/providers/coreStore.mjs +12 -10
  263. package/dist/providers/coreStore.mjs.map +1 -1
  264. package/dist/providers/cron.js +19 -16
  265. package/dist/providers/cron.js.map +1 -1
  266. package/dist/providers/cron.mjs +18 -18
  267. package/dist/providers/cron.mjs.map +1 -1
  268. package/dist/providers/index.js +18 -9
  269. package/dist/providers/index.js.map +1 -1
  270. package/dist/providers/index.mjs +17 -10
  271. package/dist/providers/index.mjs.map +1 -1
  272. package/dist/providers/provider.js +4 -3
  273. package/dist/providers/provider.js.map +1 -1
  274. package/dist/providers/provider.mjs +3 -4
  275. package/dist/providers/provider.mjs.map +1 -1
  276. package/dist/providers/registries.js +37 -32
  277. package/dist/providers/registries.js.map +1 -1
  278. package/dist/providers/registries.mjs +36 -34
  279. package/dist/providers/registries.mjs.map +1 -1
  280. package/dist/providers/telemetry.js +19 -16
  281. package/dist/providers/telemetry.js.map +1 -1
  282. package/dist/providers/telemetry.mjs +18 -18
  283. package/dist/providers/telemetry.mjs.map +1 -1
  284. package/dist/providers/webhooks.js +28 -26
  285. package/dist/providers/webhooks.js.map +1 -1
  286. package/dist/providers/webhooks.mjs +27 -28
  287. package/dist/providers/webhooks.mjs.map +1 -1
  288. package/dist/registries/apis.js +23 -20
  289. package/dist/registries/apis.js.map +1 -1
  290. package/dist/registries/apis.mjs +22 -22
  291. package/dist/registries/apis.mjs.map +1 -1
  292. package/dist/registries/components.js +35 -37
  293. package/dist/registries/components.js.map +1 -1
  294. package/dist/registries/components.mjs +34 -39
  295. package/dist/registries/components.mjs.map +1 -1
  296. package/dist/registries/content-types.js +54 -59
  297. package/dist/registries/content-types.js.map +1 -1
  298. package/dist/registries/content-types.mjs +53 -61
  299. package/dist/registries/content-types.mjs.map +1 -1
  300. package/dist/registries/controllers.js +70 -71
  301. package/dist/registries/controllers.js.map +1 -1
  302. package/dist/registries/controllers.mjs +69 -73
  303. package/dist/registries/controllers.mjs.map +1 -1
  304. package/dist/registries/custom-fields.js +75 -65
  305. package/dist/registries/custom-fields.js.map +1 -1
  306. package/dist/registries/custom-fields.mjs +74 -67
  307. package/dist/registries/custom-fields.mjs.map +1 -1
  308. package/dist/registries/hooks.js +46 -49
  309. package/dist/registries/hooks.js.map +1 -1
  310. package/dist/registries/hooks.mjs +45 -51
  311. package/dist/registries/hooks.mjs.map +1 -1
  312. package/dist/registries/middlewares.js +49 -51
  313. package/dist/registries/middlewares.js.map +1 -1
  314. package/dist/registries/middlewares.mjs +48 -53
  315. package/dist/registries/middlewares.mjs.map +1 -1
  316. package/dist/registries/models.js +14 -13
  317. package/dist/registries/models.js.map +1 -1
  318. package/dist/registries/models.mjs +13 -14
  319. package/dist/registries/models.mjs.map +1 -1
  320. package/dist/registries/modules.js +39 -36
  321. package/dist/registries/modules.js.map +1 -1
  322. package/dist/registries/modules.mjs +38 -38
  323. package/dist/registries/modules.mjs.map +1 -1
  324. package/dist/registries/namespace.js +21 -20
  325. package/dist/registries/namespace.js.map +1 -1
  326. package/dist/registries/namespace.mjs +20 -23
  327. package/dist/registries/namespace.mjs.map +1 -1
  328. package/dist/registries/plugins.js +23 -20
  329. package/dist/registries/plugins.js.map +1 -1
  330. package/dist/registries/plugins.mjs +22 -22
  331. package/dist/registries/plugins.mjs.map +1 -1
  332. package/dist/registries/policies.d.ts +1 -1
  333. package/dist/registries/policies.d.ts.map +1 -1
  334. package/dist/registries/policies.js +103 -96
  335. package/dist/registries/policies.js.map +1 -1
  336. package/dist/registries/policies.mjs +102 -98
  337. package/dist/registries/policies.mjs.map +1 -1
  338. package/dist/registries/sanitizers.js +23 -22
  339. package/dist/registries/sanitizers.js.map +1 -1
  340. package/dist/registries/sanitizers.mjs +22 -22
  341. package/dist/registries/sanitizers.mjs.map +1 -1
  342. package/dist/registries/services.js +71 -71
  343. package/dist/registries/services.js.map +1 -1
  344. package/dist/registries/services.mjs +70 -73
  345. package/dist/registries/services.mjs.map +1 -1
  346. package/dist/registries/validators.js +23 -22
  347. package/dist/registries/validators.js.map +1 -1
  348. package/dist/registries/validators.mjs +22 -22
  349. package/dist/registries/validators.mjs.map +1 -1
  350. package/dist/services/auth/index.js +74 -74
  351. package/dist/services/auth/index.js.map +1 -1
  352. package/dist/services/auth/index.mjs +73 -74
  353. package/dist/services/auth/index.mjs.map +1 -1
  354. package/dist/services/config.js +47 -43
  355. package/dist/services/config.js.map +1 -1
  356. package/dist/services/config.mjs +46 -44
  357. package/dist/services/config.mjs.map +1 -1
  358. package/dist/services/content-api/index.d.ts +10 -12
  359. package/dist/services/content-api/index.d.ts.map +1 -1
  360. package/dist/services/content-api/index.js +80 -79
  361. package/dist/services/content-api/index.js.map +1 -1
  362. package/dist/services/content-api/index.mjs +79 -79
  363. package/dist/services/content-api/index.mjs.map +1 -1
  364. package/dist/services/content-api/permissions/engine.js +8 -5
  365. package/dist/services/content-api/permissions/engine.js.map +1 -1
  366. package/dist/services/content-api/permissions/engine.mjs +7 -5
  367. package/dist/services/content-api/permissions/engine.mjs.map +1 -1
  368. package/dist/services/content-api/permissions/index.d.ts +10 -12
  369. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  370. package/dist/services/content-api/permissions/index.js +101 -81
  371. package/dist/services/content-api/permissions/index.js.map +1 -1
  372. package/dist/services/content-api/permissions/index.mjs +100 -81
  373. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  374. package/dist/services/content-api/permissions/providers/action.d.ts +5 -6
  375. package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
  376. package/dist/services/content-api/permissions/providers/action.js +17 -14
  377. package/dist/services/content-api/permissions/providers/action.js.map +1 -1
  378. package/dist/services/content-api/permissions/providers/action.mjs +16 -16
  379. package/dist/services/content-api/permissions/providers/action.mjs.map +1 -1
  380. package/dist/services/content-api/permissions/providers/condition.d.ts +5 -6
  381. package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
  382. package/dist/services/content-api/permissions/providers/condition.js +17 -14
  383. package/dist/services/content-api/permissions/providers/condition.js.map +1 -1
  384. package/dist/services/content-api/permissions/providers/condition.mjs +16 -16
  385. package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -1
  386. package/dist/services/core-store.js +115 -95
  387. package/dist/services/core-store.js.map +1 -1
  388. package/dist/services/core-store.mjs +114 -97
  389. package/dist/services/core-store.mjs.map +1 -1
  390. package/dist/services/cron.d.ts +3 -3
  391. package/dist/services/cron.d.ts.map +1 -1
  392. package/dist/services/cron.js +74 -60
  393. package/dist/services/cron.js.map +1 -1
  394. package/dist/services/cron.mjs +73 -62
  395. package/dist/services/cron.mjs.map +1 -1
  396. package/dist/services/custom-fields.js +9 -7
  397. package/dist/services/custom-fields.js.map +1 -1
  398. package/dist/services/custom-fields.mjs +8 -9
  399. package/dist/services/custom-fields.mjs.map +1 -1
  400. package/dist/services/document-service/attributes/index.js +23 -18
  401. package/dist/services/document-service/attributes/index.js.map +1 -1
  402. package/dist/services/document-service/attributes/index.mjs +22 -19
  403. package/dist/services/document-service/attributes/index.mjs.map +1 -1
  404. package/dist/services/document-service/attributes/transforms.js +16 -15
  405. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  406. package/dist/services/document-service/attributes/transforms.mjs +15 -15
  407. package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
  408. package/dist/services/document-service/common.d.ts +1 -1
  409. package/dist/services/document-service/common.d.ts.map +1 -1
  410. package/dist/services/document-service/common.js +5 -4
  411. package/dist/services/document-service/common.js.map +1 -1
  412. package/dist/services/document-service/common.mjs +4 -5
  413. package/dist/services/document-service/common.mjs.map +1 -1
  414. package/dist/services/document-service/components.d.ts.map +1 -1
  415. package/dist/services/document-service/components.js +257 -259
  416. package/dist/services/document-service/components.js.map +1 -1
  417. package/dist/services/document-service/components.mjs +254 -262
  418. package/dist/services/document-service/components.mjs.map +1 -1
  419. package/dist/services/document-service/draft-and-publish.d.ts +1 -1
  420. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  421. package/dist/services/document-service/draft-and-publish.js +94 -54
  422. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  423. package/dist/services/document-service/draft-and-publish.mjs +87 -54
  424. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  425. package/dist/services/document-service/entries.d.ts +2 -2
  426. package/dist/services/document-service/entries.d.ts.map +1 -1
  427. package/dist/services/document-service/entries.js +109 -92
  428. package/dist/services/document-service/entries.js.map +1 -1
  429. package/dist/services/document-service/entries.mjs +108 -93
  430. package/dist/services/document-service/entries.mjs.map +1 -1
  431. package/dist/services/document-service/events.d.ts +1 -1
  432. package/dist/services/document-service/events.d.ts.map +1 -1
  433. package/dist/services/document-service/events.js +52 -40
  434. package/dist/services/document-service/events.js.map +1 -1
  435. package/dist/services/document-service/events.mjs +51 -41
  436. package/dist/services/document-service/events.mjs.map +1 -1
  437. package/dist/services/document-service/index.d.ts +2 -1
  438. package/dist/services/document-service/index.d.ts.map +1 -1
  439. package/dist/services/document-service/index.js +53 -32
  440. package/dist/services/document-service/index.js.map +1 -1
  441. package/dist/services/document-service/index.mjs +52 -33
  442. package/dist/services/document-service/index.mjs.map +1 -1
  443. package/dist/services/document-service/internationalization.js +66 -50
  444. package/dist/services/document-service/internationalization.js.map +1 -1
  445. package/dist/services/document-service/internationalization.mjs +61 -50
  446. package/dist/services/document-service/internationalization.mjs.map +1 -1
  447. package/dist/services/document-service/middlewares/errors.js +23 -19
  448. package/dist/services/document-service/middlewares/errors.js.map +1 -1
  449. package/dist/services/document-service/middlewares/errors.mjs +22 -20
  450. package/dist/services/document-service/middlewares/errors.mjs.map +1 -1
  451. package/dist/services/document-service/middlewares/middleware-manager.js +46 -44
  452. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -1
  453. package/dist/services/document-service/middlewares/middleware-manager.mjs +45 -45
  454. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -1
  455. package/dist/services/document-service/params.js +11 -5
  456. package/dist/services/document-service/params.js.map +1 -1
  457. package/dist/services/document-service/params.mjs +10 -6
  458. package/dist/services/document-service/params.mjs.map +1 -1
  459. package/dist/services/document-service/repository.d.ts.map +1 -1
  460. package/dist/services/document-service/repository.js +355 -269
  461. package/dist/services/document-service/repository.js.map +1 -1
  462. package/dist/services/document-service/repository.mjs +354 -270
  463. package/dist/services/document-service/repository.mjs.map +1 -1
  464. package/dist/services/document-service/transform/data.js +22 -12
  465. package/dist/services/document-service/transform/data.js.map +1 -1
  466. package/dist/services/document-service/transform/data.mjs +21 -13
  467. package/dist/services/document-service/transform/data.mjs.map +1 -1
  468. package/dist/services/document-service/transform/fields.js +26 -17
  469. package/dist/services/document-service/transform/fields.js.map +1 -1
  470. package/dist/services/document-service/transform/fields.mjs +25 -18
  471. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  472. package/dist/services/document-service/transform/id-map.d.ts +1 -1
  473. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  474. package/dist/services/document-service/transform/id-map.js +116 -69
  475. package/dist/services/document-service/transform/id-map.js.map +1 -1
  476. package/dist/services/document-service/transform/id-map.mjs +115 -70
  477. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  478. package/dist/services/document-service/transform/id-transform.d.ts +1 -1
  479. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  480. package/dist/services/document-service/transform/id-transform.js +38 -30
  481. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  482. package/dist/services/document-service/transform/id-transform.mjs +36 -30
  483. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  484. package/dist/services/document-service/transform/populate.js +23 -18
  485. package/dist/services/document-service/transform/populate.js.map +1 -1
  486. package/dist/services/document-service/transform/populate.mjs +22 -19
  487. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  488. package/dist/services/document-service/transform/query.js +11 -6
  489. package/dist/services/document-service/transform/query.js.map +1 -1
  490. package/dist/services/document-service/transform/query.mjs +10 -7
  491. package/dist/services/document-service/transform/query.mjs.map +1 -1
  492. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +1 -1
  493. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  494. package/dist/services/document-service/transform/relations/extract/data-ids.js +71 -48
  495. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  496. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +70 -49
  497. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  498. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  499. package/dist/services/document-service/transform/relations/transform/data-ids.js +97 -63
  500. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  501. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +96 -64
  502. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  503. package/dist/services/document-service/transform/relations/transform/default-locale.js +47 -29
  504. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
  505. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +46 -30
  506. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
  507. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  508. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  509. package/dist/services/document-service/transform/relations/utils/dp.js +52 -26
  510. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  511. package/dist/services/document-service/transform/relations/utils/dp.mjs +51 -27
  512. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  513. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +1 -1
  514. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  515. package/dist/services/document-service/transform/relations/utils/i18n.js +20 -18
  516. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  517. package/dist/services/document-service/transform/relations/utils/i18n.mjs +19 -21
  518. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  519. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  520. package/dist/services/document-service/transform/relations/utils/map-relation.js +118 -79
  521. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  522. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +115 -79
  523. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  524. package/dist/services/document-service/utils/bidirectional-relations.d.ts +95 -0
  525. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -0
  526. package/dist/services/document-service/utils/bidirectional-relations.js +148 -0
  527. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -0
  528. package/dist/services/document-service/utils/bidirectional-relations.mjs +145 -0
  529. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -0
  530. package/dist/services/document-service/utils/populate.d.ts +1 -1
  531. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  532. package/dist/services/document-service/utils/populate.js +67 -37
  533. package/dist/services/document-service/utils/populate.js.map +1 -1
  534. package/dist/services/document-service/utils/populate.mjs +66 -38
  535. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  536. package/dist/services/document-service/utils/unidirectional-relations.d.ts +36 -0
  537. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -0
  538. package/dist/services/document-service/utils/unidirectional-relations.js +116 -0
  539. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -0
  540. package/dist/services/document-service/utils/unidirectional-relations.mjs +113 -0
  541. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -0
  542. package/dist/services/entity-service/index.js +230 -161
  543. package/dist/services/entity-service/index.js.map +1 -1
  544. package/dist/services/entity-service/index.mjs +229 -160
  545. package/dist/services/entity-service/index.mjs.map +1 -1
  546. package/dist/services/entity-validator/blocks-validator.d.ts +1 -2
  547. package/dist/services/entity-validator/blocks-validator.d.ts.map +1 -1
  548. package/dist/services/entity-validator/blocks-validator.js +137 -104
  549. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  550. package/dist/services/entity-validator/blocks-validator.mjs +135 -105
  551. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  552. package/dist/services/entity-validator/index.d.ts +15 -1
  553. package/dist/services/entity-validator/index.d.ts.map +1 -1
  554. package/dist/services/entity-validator/index.js +362 -311
  555. package/dist/services/entity-validator/index.js.map +1 -1
  556. package/dist/services/entity-validator/index.mjs +358 -308
  557. package/dist/services/entity-validator/index.mjs.map +1 -1
  558. package/dist/services/entity-validator/validators.d.ts +36 -25
  559. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  560. package/dist/services/entity-validator/validators.js +283 -110
  561. package/dist/services/entity-validator/validators.js.map +1 -1
  562. package/dist/services/entity-validator/validators.mjs +274 -108
  563. package/dist/services/entity-validator/validators.mjs.map +1 -1
  564. package/dist/services/errors.js +65 -65
  565. package/dist/services/errors.js.map +1 -1
  566. package/dist/services/errors.mjs +64 -66
  567. package/dist/services/errors.mjs.map +1 -1
  568. package/dist/services/event-hub.js +82 -69
  569. package/dist/services/event-hub.js.map +1 -1
  570. package/dist/services/event-hub.mjs +81 -71
  571. package/dist/services/event-hub.mjs.map +1 -1
  572. package/dist/services/features.js +19 -14
  573. package/dist/services/features.js.map +1 -1
  574. package/dist/services/features.mjs +18 -15
  575. package/dist/services/features.mjs.map +1 -1
  576. package/dist/services/fs.js +41 -40
  577. package/dist/services/fs.js.map +1 -1
  578. package/dist/services/fs.mjs +40 -39
  579. package/dist/services/fs.mjs.map +1 -1
  580. package/dist/services/metrics/admin-user-hash.js +13 -11
  581. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  582. package/dist/services/metrics/admin-user-hash.mjs +12 -10
  583. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  584. package/dist/services/metrics/index.js +46 -40
  585. package/dist/services/metrics/index.js.map +1 -1
  586. package/dist/services/metrics/index.mjs +45 -42
  587. package/dist/services/metrics/index.mjs.map +1 -1
  588. package/dist/services/metrics/is-truthy.js +13 -6
  589. package/dist/services/metrics/is-truthy.js.map +1 -1
  590. package/dist/services/metrics/is-truthy.mjs +12 -6
  591. package/dist/services/metrics/is-truthy.mjs.map +1 -1
  592. package/dist/services/metrics/middleware.d.ts.map +1 -1
  593. package/dist/services/metrics/middleware.js +37 -22
  594. package/dist/services/metrics/middleware.js.map +1 -1
  595. package/dist/services/metrics/middleware.mjs +36 -24
  596. package/dist/services/metrics/middleware.mjs.map +1 -1
  597. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  598. package/dist/services/metrics/rate-limiter.js +24 -19
  599. package/dist/services/metrics/rate-limiter.js.map +1 -1
  600. package/dist/services/metrics/rate-limiter.mjs +23 -21
  601. package/dist/services/metrics/rate-limiter.mjs.map +1 -1
  602. package/dist/services/metrics/sender.js +78 -69
  603. package/dist/services/metrics/sender.js.map +1 -1
  604. package/dist/services/metrics/sender.mjs +77 -64
  605. package/dist/services/metrics/sender.mjs.map +1 -1
  606. package/dist/services/query-params.js +13 -10
  607. package/dist/services/query-params.js.map +1 -1
  608. package/dist/services/query-params.mjs +12 -12
  609. package/dist/services/query-params.mjs.map +1 -1
  610. package/dist/services/reloader.js +35 -32
  611. package/dist/services/reloader.js.map +1 -1
  612. package/dist/services/reloader.mjs +34 -33
  613. package/dist/services/reloader.mjs.map +1 -1
  614. package/dist/services/request-context.js +11 -8
  615. package/dist/services/request-context.js.map +1 -1
  616. package/dist/services/request-context.mjs +10 -10
  617. package/dist/services/request-context.mjs.map +1 -1
  618. package/dist/services/server/admin-api.js +11 -10
  619. package/dist/services/server/admin-api.js.map +1 -1
  620. package/dist/services/server/admin-api.mjs +10 -11
  621. package/dist/services/server/admin-api.mjs.map +1 -1
  622. package/dist/services/server/api.js +33 -27
  623. package/dist/services/server/api.js.map +1 -1
  624. package/dist/services/server/api.mjs +32 -26
  625. package/dist/services/server/api.mjs.map +1 -1
  626. package/dist/services/server/compose-endpoint.js +116 -105
  627. package/dist/services/server/compose-endpoint.js.map +1 -1
  628. package/dist/services/server/compose-endpoint.mjs +115 -105
  629. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  630. package/dist/services/server/content-api.js +11 -9
  631. package/dist/services/server/content-api.js.map +1 -1
  632. package/dist/services/server/content-api.mjs +10 -10
  633. package/dist/services/server/content-api.mjs.map +1 -1
  634. package/dist/services/server/http-server.js +48 -44
  635. package/dist/services/server/http-server.js.map +1 -1
  636. package/dist/services/server/http-server.mjs +47 -43
  637. package/dist/services/server/http-server.mjs.map +1 -1
  638. package/dist/services/server/index.js +85 -82
  639. package/dist/services/server/index.js.map +1 -1
  640. package/dist/services/server/index.mjs +84 -81
  641. package/dist/services/server/index.mjs.map +1 -1
  642. package/dist/services/server/koa.js +49 -47
  643. package/dist/services/server/koa.js.map +1 -1
  644. package/dist/services/server/koa.mjs +48 -44
  645. package/dist/services/server/koa.mjs.map +1 -1
  646. package/dist/services/server/middleware.js +86 -82
  647. package/dist/services/server/middleware.js.map +1 -1
  648. package/dist/services/server/middleware.mjs +85 -82
  649. package/dist/services/server/middleware.mjs.map +1 -1
  650. package/dist/services/server/policy.js +24 -17
  651. package/dist/services/server/policy.js.map +1 -1
  652. package/dist/services/server/policy.mjs +23 -18
  653. package/dist/services/server/policy.mjs.map +1 -1
  654. package/dist/services/server/register-middlewares.js +68 -61
  655. package/dist/services/server/register-middlewares.js.map +1 -1
  656. package/dist/services/server/register-middlewares.mjs +67 -63
  657. package/dist/services/server/register-middlewares.mjs.map +1 -1
  658. package/dist/services/server/register-routes.js +90 -67
  659. package/dist/services/server/register-routes.js.map +1 -1
  660. package/dist/services/server/register-routes.mjs +89 -67
  661. package/dist/services/server/register-routes.mjs.map +1 -1
  662. package/dist/services/server/routing.js +94 -81
  663. package/dist/services/server/routing.js.map +1 -1
  664. package/dist/services/server/routing.mjs +93 -81
  665. package/dist/services/server/routing.mjs.map +1 -1
  666. package/dist/services/utils/dynamic-zones.js +13 -14
  667. package/dist/services/utils/dynamic-zones.js.map +1 -1
  668. package/dist/services/utils/dynamic-zones.mjs +12 -16
  669. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  670. package/dist/services/webhook-runner.d.ts +2 -1
  671. package/dist/services/webhook-runner.d.ts.map +1 -1
  672. package/dist/services/webhook-runner.js +124 -122
  673. package/dist/services/webhook-runner.js.map +1 -1
  674. package/dist/services/webhook-runner.mjs +123 -121
  675. package/dist/services/webhook-runner.mjs.map +1 -1
  676. package/dist/services/webhook-store.d.ts +2 -8
  677. package/dist/services/webhook-store.d.ts.map +1 -1
  678. package/dist/services/webhook-store.js +132 -99
  679. package/dist/services/webhook-store.js.map +1 -1
  680. package/dist/services/webhook-store.mjs +131 -101
  681. package/dist/services/webhook-store.mjs.map +1 -1
  682. package/dist/services/worker-queue.js +44 -49
  683. package/dist/services/worker-queue.js.map +1 -1
  684. package/dist/services/worker-queue.mjs +43 -49
  685. package/dist/services/worker-queue.mjs.map +1 -1
  686. package/dist/utils/convert-custom-field-type.js +17 -20
  687. package/dist/utils/convert-custom-field-type.js.map +1 -1
  688. package/dist/utils/convert-custom-field-type.mjs +16 -21
  689. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  690. package/dist/utils/cron.js +64 -30
  691. package/dist/utils/cron.js.map +1 -1
  692. package/dist/utils/cron.mjs +63 -31
  693. package/dist/utils/cron.mjs.map +1 -1
  694. package/dist/utils/fetch.d.ts.map +1 -1
  695. package/dist/utils/fetch.js +24 -17
  696. package/dist/utils/fetch.js.map +1 -1
  697. package/dist/utils/fetch.mjs +23 -18
  698. package/dist/utils/fetch.mjs.map +1 -1
  699. package/dist/utils/filepath-to-prop-path.d.ts +1 -1
  700. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  701. package/dist/utils/filepath-to-prop-path.js +22 -9
  702. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  703. package/dist/utils/filepath-to-prop-path.mjs +20 -7
  704. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  705. package/dist/utils/is-initialized.js +21 -12
  706. package/dist/utils/is-initialized.js.map +1 -1
  707. package/dist/utils/is-initialized.mjs +20 -13
  708. package/dist/utils/is-initialized.mjs.map +1 -1
  709. package/dist/utils/lifecycles.js +6 -5
  710. package/dist/utils/lifecycles.js.map +1 -1
  711. package/dist/utils/lifecycles.mjs +5 -6
  712. package/dist/utils/lifecycles.mjs.map +1 -1
  713. package/dist/utils/load-config-file.js +40 -38
  714. package/dist/utils/load-config-file.js.map +1 -1
  715. package/dist/utils/load-config-file.mjs +39 -36
  716. package/dist/utils/load-config-file.mjs.map +1 -1
  717. package/dist/utils/load-files.js +40 -35
  718. package/dist/utils/load-files.js.map +1 -1
  719. package/dist/utils/load-files.mjs +39 -32
  720. package/dist/utils/load-files.mjs.map +1 -1
  721. package/dist/utils/open-browser.js +8 -8
  722. package/dist/utils/open-browser.js.map +1 -1
  723. package/dist/utils/open-browser.mjs +7 -7
  724. package/dist/utils/open-browser.mjs.map +1 -1
  725. package/dist/utils/resolve-working-dirs.js +23 -10
  726. package/dist/utils/resolve-working-dirs.js.map +1 -1
  727. package/dist/utils/resolve-working-dirs.mjs +22 -9
  728. package/dist/utils/resolve-working-dirs.mjs.map +1 -1
  729. package/dist/utils/signals.js +20 -14
  730. package/dist/utils/signals.js.map +1 -1
  731. package/dist/utils/signals.mjs +19 -15
  732. package/dist/utils/signals.mjs.map +1 -1
  733. package/dist/utils/startup-logger.d.ts.map +1 -1
  734. package/dist/utils/startup-logger.js +107 -78
  735. package/dist/utils/startup-logger.js.map +1 -1
  736. package/dist/utils/startup-logger.mjs +106 -75
  737. package/dist/utils/startup-logger.mjs.map +1 -1
  738. package/dist/utils/transform-content-types-to-models.d.ts +355 -23
  739. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  740. package/dist/utils/transform-content-types-to-models.js +350 -248
  741. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  742. package/dist/utils/transform-content-types-to-models.mjs +349 -256
  743. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  744. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  745. package/dist/utils/update-notifier/index.js +68 -73
  746. package/dist/utils/update-notifier/index.js.map +1 -1
  747. package/dist/utils/update-notifier/index.mjs +67 -67
  748. package/dist/utils/update-notifier/index.mjs.map +1 -1
  749. package/package.json +32 -31
@@ -1,137 +1,160 @@
1
- "use strict";
2
- const path = require("path");
3
- const fse = require("fs-extra");
4
- const _ = require("lodash");
5
- const strapiUtils = require("@strapi/utils");
6
- const _$1 = require("lodash/fp");
7
- const index = require("../domain/content-type/index.js");
8
- const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
9
- const fse__default = /* @__PURE__ */ _interopDefault(fse);
10
- const ___default = /* @__PURE__ */ _interopDefault(_);
1
+ 'use strict';
2
+
3
+ var path = require('path');
4
+ var fse = require('fs-extra');
5
+ var _ = require('lodash');
6
+ var strapiUtils = require('@strapi/utils');
7
+ var fp = require('lodash/fp');
8
+ var index = require('../domain/content-type/index.js');
9
+
11
10
  const DEFAULT_CONTENT_TYPE = {
12
- schema: {},
13
- actions: {},
14
- lifecycles: {}
11
+ schema: {},
12
+ actions: {},
13
+ lifecycles: {}
15
14
  };
16
- const normalizeName = (name) => strapiUtils.strings.isKebabCase(name) ? name : ___default.default.kebabCase(name);
17
- const isDirectory = (fd) => fd.isDirectory();
18
- const isDotFile = (fd) => fd.name.startsWith(".");
15
+ // to handle names with numbers in it we first check if it is already in kebabCase
16
+ const normalizeName = (name)=>strapiUtils.strings.isKebabCase(name) ? name : _.kebabCase(name);
17
+ const isDirectory = (fd)=>fd.isDirectory();
18
+ const isDotFile = (fd)=>fd.name.startsWith('.');
19
19
  async function loadAPIs(strapi) {
20
- if (!fse.existsSync(strapi.dirs.dist.api)) {
21
- return;
22
- }
23
- const apisFDs = await (await fse__default.default.readdir(strapi.dirs.dist.api, { withFileTypes: true })).filter(isDirectory).filter(___default.default.negate(isDotFile));
24
- const apis = {};
25
- for (const apiFD of apisFDs) {
26
- const apiName = normalizeName(apiFD.name);
27
- const api = await loadAPI(apiName, path.join(strapi.dirs.dist.api, apiFD.name));
28
- apis[apiName] = api;
29
- }
30
- validateContentTypesUnicity(apis);
31
- for (const apiName of Object.keys(apis)) {
32
- strapi.get("apis").add(apiName, apis[apiName]);
33
- }
34
- }
35
- const validateContentTypesUnicity = (apis) => {
36
- const allApisSchemas = Object.values(apis).flatMap((api) => Object.values(api.contentTypes));
37
- const names = [];
38
- allApisSchemas.forEach(({ schema }) => {
39
- if (schema.info.singularName) {
40
- const singularName = ___default.default.kebabCase(schema.info.singularName);
41
- if (names.includes(singularName)) {
42
- throw new Error(`The singular name "${schema.info.singularName}" should be unique`);
43
- }
44
- names.push(singularName);
20
+ if (!fse.existsSync(strapi.dirs.dist.api)) {
21
+ return;
22
+ }
23
+ const apisFDs = await (await fse.readdir(strapi.dirs.dist.api, {
24
+ withFileTypes: true
25
+ })).filter(isDirectory).filter(_.negate(isDotFile));
26
+ const apis = {};
27
+ // only load folders
28
+ for (const apiFD of apisFDs){
29
+ const apiName = normalizeName(apiFD.name);
30
+ const api = await loadAPI(apiName, path.join(strapi.dirs.dist.api, apiFD.name));
31
+ // @ts-expect-error TODO verify that it's a valid api, not missing bootstrap, register, and destroy
32
+ apis[apiName] = api;
45
33
  }
46
- if (schema.info.pluralName) {
47
- const pluralName = ___default.default.kebabCase(schema.info.pluralName);
48
- if (names.includes(pluralName)) {
49
- throw new Error(`The plural name "${schema.info.pluralName}" should be unique`);
50
- }
51
- names.push(pluralName);
34
+ validateContentTypesUnicity(apis);
35
+ for (const apiName of Object.keys(apis)){
36
+ strapi.get('apis').add(apiName, apis[apiName]);
52
37
  }
53
- });
38
+ }
39
+ const validateContentTypesUnicity = (apis)=>{
40
+ const allApisSchemas = Object.values(apis).flatMap((api)=>Object.values(api.contentTypes));
41
+ const names = [];
42
+ allApisSchemas.forEach(({ schema })=>{
43
+ if (schema.info.singularName) {
44
+ const singularName = _.kebabCase(schema.info.singularName);
45
+ if (names.includes(singularName)) {
46
+ throw new Error(`The singular name "${schema.info.singularName}" should be unique`);
47
+ }
48
+ names.push(singularName);
49
+ }
50
+ if (schema.info.pluralName) {
51
+ const pluralName = _.kebabCase(schema.info.pluralName);
52
+ if (names.includes(pluralName)) {
53
+ throw new Error(`The plural name "${schema.info.pluralName}" should be unique`);
54
+ }
55
+ names.push(pluralName);
56
+ }
57
+ });
54
58
  };
55
- const loadAPI = async (apiName, dir) => {
56
- const [index2, config, routes, controllers, services, policies, middlewares, contentTypes] = (await Promise.all([
57
- loadIndex(dir),
58
- loadDir(path.join(dir, "config")),
59
- loadDir(path.join(dir, "routes")),
60
- loadDir(path.join(dir, "controllers")),
61
- loadDir(path.join(dir, "services")),
62
- loadDir(path.join(dir, "policies")),
63
- loadDir(path.join(dir, "middlewares")),
64
- loadContentTypes(apiName, path.join(dir, "content-types"))
65
- ])).map((result) => result?.result);
66
- return {
67
- ...index2 || {},
68
- config: config || {},
69
- routes: routes || [],
70
- controllers: controllers || {},
71
- services: services || {},
72
- policies: policies || {},
73
- middlewares: middlewares || {},
74
- contentTypes: contentTypes || {}
75
- };
59
+ const loadAPI = async (apiName, dir)=>{
60
+ const [index, config, routes, controllers, services, policies, middlewares, contentTypes] = (await Promise.all([
61
+ loadIndex(dir),
62
+ loadDir(path.join(dir, 'config')),
63
+ loadDir(path.join(dir, 'routes')),
64
+ loadDir(path.join(dir, 'controllers')),
65
+ loadDir(path.join(dir, 'services')),
66
+ loadDir(path.join(dir, 'policies')),
67
+ loadDir(path.join(dir, 'middlewares')),
68
+ loadContentTypes(apiName, path.join(dir, 'content-types'))
69
+ ])).map((result)=>result?.result);
70
+ return {
71
+ ...index || {},
72
+ config: config || {},
73
+ routes: routes || [],
74
+ controllers: controllers || {},
75
+ services: services || {},
76
+ policies: policies || {},
77
+ middlewares: middlewares || {},
78
+ contentTypes: contentTypes || {}
79
+ };
76
80
  };
77
- const loadIndex = async (dir) => {
78
- if (await fse__default.default.pathExists(path.join(dir, "index.js"))) {
79
- return loadFile(path.join(dir, "index.js"));
80
- }
81
+ const loadIndex = async (dir)=>{
82
+ if (await fse.pathExists(path.join(dir, 'index.js'))) {
83
+ return loadFile(path.join(dir, 'index.js'));
84
+ }
81
85
  };
82
- const loadContentTypes = async (apiName, dir) => {
83
- if (!await fse__default.default.pathExists(dir)) {
84
- return;
85
- }
86
- const fds = await fse__default.default.readdir(dir, { withFileTypes: true });
87
- const contentTypes = {};
88
- for (const fd of fds) {
89
- if (fd.isFile()) {
90
- continue;
86
+ // 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
87
+ const loadContentTypes = async (apiName, dir)=>{
88
+ if (!await fse.pathExists(dir)) {
89
+ return;
91
90
  }
92
- const contentTypeName = normalizeName(fd.name);
93
- const loadedContentType = (await loadDir(path.join(dir, fd.name)))?.result;
94
- if (_$1.isEmpty(loadedContentType) || _$1.isEmpty(loadedContentType.schema)) {
95
- throw new Error(`Could not load content type found at ${dir}`);
91
+ const fds = await fse.readdir(dir, {
92
+ withFileTypes: true
93
+ });
94
+ const contentTypes = {};
95
+ // only load folders
96
+ for (const fd of fds){
97
+ if (fd.isFile()) {
98
+ continue;
99
+ }
100
+ const contentTypeName = normalizeName(fd.name);
101
+ const loadedContentType = (await loadDir(path.join(dir, fd.name)))?.result;
102
+ if (fp.isEmpty(loadedContentType) || fp.isEmpty(loadedContentType.schema)) {
103
+ throw new Error(`Could not load content type found at ${dir}`);
104
+ }
105
+ const contentType = {
106
+ ...DEFAULT_CONTENT_TYPE,
107
+ ...loadedContentType
108
+ };
109
+ Object.assign(contentType.schema, {
110
+ apiName,
111
+ collectionName: contentType.schema.collectionName || contentType.schema.info.singularName,
112
+ globalId: index.getGlobalId(contentType.schema)
113
+ });
114
+ contentTypes[normalizeName(contentTypeName)] = contentType;
96
115
  }
97
- const contentType = {
98
- ...DEFAULT_CONTENT_TYPE,
99
- ...loadedContentType
116
+ return {
117
+ result: contentTypes
100
118
  };
101
- Object.assign(contentType.schema, {
102
- apiName,
103
- collectionName: contentType.schema.collectionName || contentType.schema.info.singularName,
104
- globalId: index.getGlobalId(contentType.schema)
105
- });
106
- contentTypes[normalizeName(contentTypeName)] = contentType;
107
- }
108
- return { result: contentTypes };
109
119
  };
110
- const loadDir = async (dir) => {
111
- if (!await fse__default.default.pathExists(dir)) {
112
- return;
113
- }
114
- const fds = await fse__default.default.readdir(dir, { withFileTypes: true });
115
- const root = {};
116
- for (const fd of fds) {
117
- if (!fd.isFile() || path.extname(fd.name) === ".map") {
118
- continue;
120
+ // 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
121
+ const loadDir = async (dir)=>{
122
+ if (!await fse.pathExists(dir)) {
123
+ return;
124
+ }
125
+ const fds = await fse.readdir(dir, {
126
+ withFileTypes: true
127
+ });
128
+ const root = {};
129
+ for (const fd of fds){
130
+ if (!fd.isFile() || path.extname(fd.name) === '.map') {
131
+ continue;
132
+ }
133
+ const key = path.basename(fd.name, path.extname(fd.name));
134
+ root[normalizeName(key)] = (await loadFile(path.join(dir, fd.name))).result;
119
135
  }
120
- const key = path.basename(fd.name, path.extname(fd.name));
121
- root[normalizeName(key)] = (await loadFile(path.join(dir, fd.name))).result;
122
- }
123
- return { result: root };
136
+ return {
137
+ result: root
138
+ };
124
139
  };
125
- const loadFile = async (file) => {
126
- const ext = path.extname(file);
127
- switch (ext) {
128
- case ".js":
129
- return { result: strapiUtils.importDefault(file) };
130
- case ".json":
131
- return { result: await fse__default.default.readJSON(file) };
132
- default:
133
- return { result: {} };
134
- }
140
+ // 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
141
+ const loadFile = async (file)=>{
142
+ const ext = path.extname(file);
143
+ switch(ext){
144
+ case '.js':
145
+ return {
146
+ result: strapiUtils.importDefault(file)
147
+ };
148
+ case '.json':
149
+ return {
150
+ result: await fse.readJSON(file)
151
+ };
152
+ default:
153
+ return {
154
+ result: {}
155
+ };
156
+ }
135
157
  };
158
+
136
159
  module.exports = loadAPIs;
137
160
  //# sourceMappingURL=apis.js.map
@@ -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":";;;;;;;;;AAyBA,MAAMA,oBAAuB,GAAA;AAC3BC,IAAAA,MAAAA,EAAQ,EAAC;AACTC,IAAAA,OAAAA,EAAS,EAAC;AACVC,IAAAA,UAAAA,EAAY;AACd,CAAA;AAEA;AACA,MAAMC,aAAAA,GAAgB,CAACC,IAAAA,GAAkBC,mBAAQC,CAAAA,WAAW,CAACF,IAAQA,CAAAA,GAAAA,IAAAA,GAAOG,CAAEC,CAAAA,SAAS,CAACJ,IAAAA,CAAAA;AAExF,MAAMK,WAAc,GAAA,CAACC,EAAmBA,GAAAA,EAAAA,CAAGD,WAAW,EAAA;AACtD,MAAME,YAAY,CAACD,EAAAA,GAAmBA,GAAGN,IAAI,CAACQ,UAAU,CAAC,GAAA,CAAA;AAE1C,eAAeC,SAASC,MAAmB,EAAA;IACxD,IAAI,CAACC,eAAWD,MAAOE,CAAAA,IAAI,CAACC,IAAI,CAACC,GAAG,CAAG,EAAA;AACrC,QAAA;AACF;AAEA,IAAA,MAAMC,OAAU,GAAA,MAAM,CAAC,MAAMC,GAAIC,CAAAA,OAAO,CAACP,MAAAA,CAAOE,IAAI,CAACC,IAAI,CAACC,GAAG,EAAE;QAAEI,aAAe,EAAA;KAAM,CAAA,EACnFC,MAAM,CAACd,WAAAA,CAAAA,CACPc,MAAM,CAAChB,CAAAA,CAAEiB,MAAM,CAACb,SAAAA,CAAAA,CAAAA;AAEnB,IAAA,MAAMc,OAAa,EAAC;;IAGpB,KAAK,MAAMC,SAASP,OAAS,CAAA;QAC3B,MAAMQ,OAAAA,GAAUxB,aAAcuB,CAAAA,KAAAA,CAAMtB,IAAI,CAAA;AACxC,QAAA,MAAMc,GAAM,GAAA,MAAMU,OAAQD,CAAAA,OAAAA,EAASE,SAAKf,CAAAA,MAAAA,CAAOE,IAAI,CAACC,IAAI,CAACC,GAAG,EAAEQ,MAAMtB,IAAI,CAAA,CAAA;;QAGxEqB,IAAI,CAACE,QAAQ,GAAGT,GAAAA;AAClB;IAEAY,2BAA4BL,CAAAA,IAAAA,CAAAA;AAE5B,IAAA,KAAK,MAAME,OAAAA,IAAWI,MAAOC,CAAAA,IAAI,CAACP,IAAO,CAAA,CAAA;QACvCX,MAAOmB,CAAAA,GAAG,CAAC,MAAQC,CAAAA,CAAAA,GAAG,CAACP,OAASF,EAAAA,IAAI,CAACE,OAAQ,CAAA,CAAA;AAC/C;AACF;AAEA,MAAMG,8BAA8B,CAACL,IAAAA,GAAAA;AACnC,IAAA,MAAMU,cAAiBJ,GAAAA,MAAAA,CAAOK,MAAM,CAACX,IAAMY,CAAAA,CAAAA,OAAO,CAAC,CAACnB,GAAQa,GAAAA,MAAAA,CAAOK,MAAM,CAAClB,IAAIoB,YAAY,CAAA,CAAA;AAE1F,IAAA,MAAMC,QAAkB,EAAE;AAC1BJ,IAAAA,cAAAA,CAAeK,OAAO,CAAC,CAAC,EAAExC,MAAM,EAAE,GAAA;AAChC,QAAA,IAAIA,MAAOyC,CAAAA,IAAI,CAACC,YAAY,EAAE;AAC5B,YAAA,MAAMA,eAAenC,CAAEC,CAAAA,SAAS,CAACR,MAAOyC,CAAAA,IAAI,CAACC,YAAY,CAAA;YACzD,IAAIH,KAAAA,CAAMI,QAAQ,CAACD,YAAe,CAAA,EAAA;gBAChC,MAAM,IAAIE,KAAM,CAAA,CAAC,mBAAmB,EAAE5C,MAAOyC,CAAAA,IAAI,CAACC,YAAY,CAAC,kBAAkB,CAAC,CAAA;AACpF;AACAH,YAAAA,KAAAA,CAAMM,IAAI,CAACH,YAAAA,CAAAA;AACb;AAEA,QAAA,IAAI1C,MAAOyC,CAAAA,IAAI,CAACK,UAAU,EAAE;AAC1B,YAAA,MAAMA,aAAavC,CAAEC,CAAAA,SAAS,CAACR,MAAOyC,CAAAA,IAAI,CAACK,UAAU,CAAA;YACrD,IAAIP,KAAAA,CAAMI,QAAQ,CAACG,UAAa,CAAA,EAAA;gBAC9B,MAAM,IAAIF,KAAM,CAAA,CAAC,iBAAiB,EAAE5C,MAAOyC,CAAAA,IAAI,CAACK,UAAU,CAAC,kBAAkB,CAAC,CAAA;AAChF;AACAP,YAAAA,KAAAA,CAAMM,IAAI,CAACC,UAAAA,CAAAA;AACb;AACF,KAAA,CAAA;AACF,CAAA;AAEA,MAAMlB,OAAAA,GAAU,OAAOD,OAAiBoB,EAAAA,GAAAA,GAAAA;AACtC,IAAA,MAAM,CAACC,KAAAA,EAAOC,MAAQC,EAAAA,MAAAA,EAAQC,aAAaC,QAAUC,EAAAA,QAAAA,EAAUC,WAAahB,EAAAA,YAAAA,CAAa,GAAG,CAC1F,MAAMiB,OAAAA,CAAQC,GAAG,CAAC;QAChBC,SAAUV,CAAAA,GAAAA,CAAAA;AACVW,QAAAA,OAAAA,CAAQ7B,UAAKkB,GAAK,EAAA,QAAA,CAAA,CAAA;AAClBW,QAAAA,OAAAA,CAAQ7B,UAAKkB,GAAK,EAAA,QAAA,CAAA,CAAA;AAClBW,QAAAA,OAAAA,CAAQ7B,UAAKkB,GAAK,EAAA,aAAA,CAAA,CAAA;AAClBW,QAAAA,OAAAA,CAAQ7B,UAAKkB,GAAK,EAAA,UAAA,CAAA,CAAA;AAClBW,QAAAA,OAAAA,CAAQ7B,UAAKkB,GAAK,EAAA,UAAA,CAAA,CAAA;AAClBW,QAAAA,OAAAA,CAAQ7B,UAAKkB,GAAK,EAAA,aAAA,CAAA,CAAA;QAClBY,gBAAiBhC,CAAAA,OAAAA,EAASE,UAAKkB,GAAK,EAAA,eAAA,CAAA;AACrC,KAAA,CAAA,EACDa,GAAG,CAAC,CAACC,SAAWA,MAAQA,EAAAA,MAAAA,CAAAA;IAE1B,OAAO;QACL,GAAIb,KAAAA,IAAS,EAAE;AACfC,QAAAA,MAAAA,EAAQA,UAAU,EAAC;AACnBC,QAAAA,MAAAA,EAAQA,UAAU,EAAE;AACpBC,QAAAA,WAAAA,EAAaA,eAAe,EAAC;AAC7BC,QAAAA,QAAAA,EAAUA,YAAY,EAAC;AACvBC,QAAAA,QAAAA,EAAUA,YAAY,EAAC;AACvBC,QAAAA,WAAAA,EAAaA,eAAe,EAAC;AAC7BhB,QAAAA,YAAAA,EAAcA,gBAAgB;AAChC,KAAA;AACF,CAAA;AAEA,MAAMmB,YAAY,OAAOV,GAAAA,GAAAA;AACvB,IAAA,IAAI,MAAM3B,GAAI0C,CAAAA,UAAU,CAACjC,SAAAA,CAAKkB,KAAK,UAAc,CAAA,CAAA,EAAA;QAC/C,OAAOgB,QAAAA,CAASlC,UAAKkB,GAAK,EAAA,UAAA,CAAA,CAAA;AAC5B;AACF,CAAA;AAEA;AACA,MAAMY,gBAAAA,GAAmB,OAAOhC,OAAiBoB,EAAAA,GAAAA,GAAAA;AAC/C,IAAA,IAAI,CAAE,MAAM3B,GAAI0C,CAAAA,UAAU,CAACf,GAAO,CAAA,EAAA;AAChC,QAAA;AACF;AAEA,IAAA,MAAMiB,GAAM,GAAA,MAAM5C,GAAIC,CAAAA,OAAO,CAAC0B,GAAK,EAAA;QAAEzB,aAAe,EAAA;AAAK,KAAA,CAAA;AACzD,IAAA,MAAMgB,eAAoC,EAAC;;IAG3C,KAAK,MAAM5B,MAAMsD,GAAK,CAAA;QACpB,IAAItD,EAAAA,CAAGuD,MAAM,EAAI,EAAA;AACf,YAAA;AACF;QAEA,MAAMC,eAAAA,GAAkB/D,aAAcO,CAAAA,EAAAA,CAAGN,IAAI,CAAA;QAC7C,MAAM+D,iBAAAA,GAAqB,CAAA,MAAMT,OAAAA,CAAQ7B,UAAKkB,GAAKrC,EAAAA,EAAAA,CAAGN,IAAI,CAAA,CAAC,GAAIyD,MAAAA;AAE/D,QAAA,IAAIO,UAAQD,CAAAA,iBAAAA,CAAAA,IAAsBC,UAAQD,CAAAA,iBAAAA,CAAkBnE,MAAM,CAAG,EAAA;AACnE,YAAA,MAAM,IAAI4C,KAAM,CAAA,CAAC,qCAAqC,EAAEG,IAAI,CAAC,CAAA;AAC/D;AAEA,QAAA,MAAMsB,WAAc,GAAA;AAClB,YAAA,GAAGtE,oBAAoB;AACvB,YAAA,GAAGoE;AACL,SAAA;AAEApC,QAAAA,MAAAA,CAAOuC,MAAM,CAACD,WAAYrE,CAAAA,MAAM,EAAE;AAChC2B,YAAAA,OAAAA;YACA4C,cAAgBF,EAAAA,WAAAA,CAAYrE,MAAM,CAACuE,cAAc,IAAIF,YAAYrE,MAAM,CAACyC,IAAI,CAACC,YAAY;YACzF8B,QAAUC,EAAAA,iBAAAA,CAAYJ,YAAYrE,MAAM;AAC1C,SAAA,CAAA;QAEAsC,YAAY,CAACnC,aAAc+D,CAAAA,eAAAA,CAAAA,CAAiB,GAAGG,WAAAA;AACjD;IAEA,OAAO;QAAER,MAAQvB,EAAAA;AAAa,KAAA;AAChC,CAAA;AAEA;AACA,MAAMoB,UAAU,OAAOX,GAAAA,GAAAA;AACrB,IAAA,IAAI,CAAE,MAAM3B,GAAI0C,CAAAA,UAAU,CAACf,GAAO,CAAA,EAAA;AAChC,QAAA;AACF;AAEA,IAAA,MAAMiB,GAAM,GAAA,MAAM5C,GAAIC,CAAAA,OAAO,CAAC0B,GAAK,EAAA;QAAEzB,aAAe,EAAA;AAAK,KAAA,CAAA;AAEzD,IAAA,MAAMoD,OAAgC,EAAC;IACvC,KAAK,MAAMhE,MAAMsD,GAAK,CAAA;QACpB,IAAI,CAACtD,GAAGuD,MAAM,EAAA,IAAMU,aAAQjE,EAAGN,CAAAA,IAAI,MAAM,MAAQ,EAAA;AAC/C,YAAA;AACF;AAEA,QAAA,MAAMwE,MAAMC,aAASnE,CAAAA,EAAAA,CAAGN,IAAI,EAAEuE,YAAAA,CAAQjE,GAAGN,IAAI,CAAA,CAAA;AAE7CsE,QAAAA,IAAI,CAACvE,aAAAA,CAAcyE,GAAK,CAAA,CAAA,GAAG,CAAC,MAAMb,QAASlC,CAAAA,SAAAA,CAAKkB,GAAKrC,EAAAA,EAAAA,CAAGN,IAAI,CAAA,CAAC,EAAGyD,MAAM;AACxE;IAEA,OAAO;QAAEA,MAAQa,EAAAA;AAAK,KAAA;AACxB,CAAA;AAEA;AACA,MAAMX,WAAW,OAAOe,IAAAA,GAAAA;AACtB,IAAA,MAAMC,MAAMJ,YAAQG,CAAAA,IAAAA,CAAAA;IAEpB,OAAQC,GAAAA;QACN,KAAK,KAAA;YACH,OAAO;AAAElB,gBAAAA,MAAAA,EAAQmB,yBAAcF,CAAAA,IAAAA;AAAM,aAAA;QACvC,KAAK,OAAA;YACH,OAAO;gBAAEjB,MAAQ,EAAA,MAAMzC,GAAI6D,CAAAA,QAAQ,CAACH,IAAAA;AAAM,aAAA;AAC5C,QAAA;YACE,OAAO;AAAEjB,gBAAAA,MAAAA,EAAQ;AAAG,aAAA;AACxB;AACF,CAAA;;;;"}
@@ -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