@strapi/core 5.12.1 → 5.12.2

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 (662) hide show
  1. package/dist/Strapi.js +455 -0
  2. package/dist/Strapi.js.map +1 -0
  3. package/dist/Strapi.mjs +434 -0
  4. package/dist/Strapi.mjs.map +1 -0
  5. package/dist/compile.js +27 -0
  6. package/dist/compile.js.map +1 -0
  7. package/dist/compile.mjs +25 -0
  8. package/dist/compile.mjs.map +1 -0
  9. package/dist/configuration/config-loader.js +119 -0
  10. package/dist/configuration/config-loader.js.map +1 -0
  11. package/dist/configuration/config-loader.mjs +117 -0
  12. package/dist/configuration/config-loader.mjs.map +1 -0
  13. package/dist/configuration/get-dirs.js +33 -0
  14. package/dist/configuration/get-dirs.js.map +1 -0
  15. package/dist/configuration/get-dirs.mjs +31 -0
  16. package/dist/configuration/get-dirs.mjs.map +1 -0
  17. package/dist/configuration/index.js +91 -0
  18. package/dist/configuration/index.js.map +1 -0
  19. package/dist/configuration/index.mjs +89 -0
  20. package/dist/configuration/index.mjs.map +1 -0
  21. package/dist/configuration/urls.js +72 -0
  22. package/dist/configuration/urls.js.map +1 -0
  23. package/dist/configuration/urls.mjs +68 -0
  24. package/dist/configuration/urls.mjs.map +1 -0
  25. package/dist/container.js +34 -0
  26. package/dist/container.js.map +1 -0
  27. package/dist/container.mjs +32 -0
  28. package/dist/container.mjs.map +1 -0
  29. package/dist/core-api/controller/collection-type.js +85 -0
  30. package/dist/core-api/controller/collection-type.js.map +1 -0
  31. package/dist/core-api/controller/collection-type.mjs +83 -0
  32. package/dist/core-api/controller/collection-type.mjs.map +1 -0
  33. package/dist/core-api/controller/index.js +67 -0
  34. package/dist/core-api/controller/index.js.map +1 -0
  35. package/dist/core-api/controller/index.mjs +65 -0
  36. package/dist/core-api/controller/index.mjs.map +1 -0
  37. package/dist/core-api/controller/single-type.js +47 -0
  38. package/dist/core-api/controller/single-type.js.map +1 -0
  39. package/dist/core-api/controller/single-type.mjs +45 -0
  40. package/dist/core-api/controller/single-type.mjs.map +1 -0
  41. package/dist/core-api/controller/transform.js +85 -0
  42. package/dist/core-api/controller/transform.js.map +1 -0
  43. package/dist/core-api/controller/transform.mjs +83 -0
  44. package/dist/core-api/controller/transform.mjs.map +1 -0
  45. package/dist/core-api/routes/index.js +69 -0
  46. package/dist/core-api/routes/index.js.map +1 -0
  47. package/dist/core-api/routes/index.mjs +67 -0
  48. package/dist/core-api/routes/index.mjs.map +1 -0
  49. package/dist/core-api/service/collection-type.js +80 -0
  50. package/dist/core-api/service/collection-type.js.map +1 -0
  51. package/dist/core-api/service/collection-type.mjs +77 -0
  52. package/dist/core-api/service/collection-type.mjs.map +1 -0
  53. package/dist/core-api/service/core-service.js +13 -0
  54. package/dist/core-api/service/core-service.js.map +1 -0
  55. package/dist/core-api/service/core-service.mjs +11 -0
  56. package/dist/core-api/service/core-service.mjs.map +1 -0
  57. package/dist/core-api/service/index.js +16 -0
  58. package/dist/core-api/service/index.js.map +1 -0
  59. package/dist/core-api/service/index.mjs +14 -0
  60. package/dist/core-api/service/index.mjs.map +1 -0
  61. package/dist/core-api/service/pagination.js +78 -0
  62. package/dist/core-api/service/pagination.js.map +1 -0
  63. package/dist/core-api/service/pagination.mjs +73 -0
  64. package/dist/core-api/service/pagination.mjs.map +1 -0
  65. package/dist/core-api/service/single-type.js +50 -0
  66. package/dist/core-api/service/single-type.js.map +1 -0
  67. package/dist/core-api/service/single-type.mjs +47 -0
  68. package/dist/core-api/service/single-type.mjs.map +1 -0
  69. package/dist/domain/content-type/index.js +106 -0
  70. package/dist/domain/content-type/index.js.map +1 -0
  71. package/dist/domain/content-type/index.mjs +103 -0
  72. package/dist/domain/content-type/index.mjs.map +1 -0
  73. package/dist/domain/content-type/validator.js +92 -0
  74. package/dist/domain/content-type/validator.js.map +1 -0
  75. package/dist/domain/content-type/validator.mjs +90 -0
  76. package/dist/domain/content-type/validator.mjs.map +1 -0
  77. package/dist/domain/module/index.js +116 -0
  78. package/dist/domain/module/index.js.map +1 -0
  79. package/dist/domain/module/index.mjs +114 -0
  80. package/dist/domain/module/index.mjs.map +1 -0
  81. package/dist/domain/module/validation.js +30 -0
  82. package/dist/domain/module/validation.js.map +1 -0
  83. package/dist/domain/module/validation.mjs +28 -0
  84. package/dist/domain/module/validation.mjs.map +1 -0
  85. package/dist/ee/index.js +192 -0
  86. package/dist/ee/index.js.map +1 -0
  87. package/dist/ee/index.mjs +190 -0
  88. package/dist/ee/index.mjs.map +1 -0
  89. package/dist/ee/license.js +115 -0
  90. package/dist/ee/license.js.map +1 -0
  91. package/dist/ee/license.mjs +110 -0
  92. package/dist/ee/license.mjs.map +1 -0
  93. package/dist/factories.js +85 -0
  94. package/dist/factories.js.map +1 -0
  95. package/dist/factories.mjs +80 -0
  96. package/dist/factories.mjs.map +1 -0
  97. package/dist/index.js +19 -10105
  98. package/dist/index.js.map +1 -1
  99. package/dist/index.mjs +17 -10082
  100. package/dist/index.mjs.map +1 -1
  101. package/dist/loaders/admin.d.ts.map +1 -1
  102. package/dist/loaders/admin.js +27 -0
  103. package/dist/loaders/admin.js.map +1 -0
  104. package/dist/loaders/admin.mjs +25 -0
  105. package/dist/loaders/admin.mjs.map +1 -0
  106. package/dist/loaders/apis.js +160 -0
  107. package/dist/loaders/apis.js.map +1 -0
  108. package/dist/loaders/apis.mjs +158 -0
  109. package/dist/loaders/apis.mjs.map +1 -0
  110. package/dist/loaders/components.js +37 -0
  111. package/dist/loaders/components.js.map +1 -0
  112. package/dist/loaders/components.mjs +35 -0
  113. package/dist/loaders/components.mjs.map +1 -0
  114. package/dist/loaders/index.js +26 -0
  115. package/dist/loaders/index.js.map +1 -0
  116. package/dist/loaders/index.mjs +24 -0
  117. package/dist/loaders/index.mjs.map +1 -0
  118. package/dist/loaders/middlewares.js +35 -0
  119. package/dist/loaders/middlewares.js.map +1 -0
  120. package/dist/loaders/middlewares.mjs +33 -0
  121. package/dist/loaders/middlewares.mjs.map +1 -0
  122. package/dist/loaders/plugins/get-enabled-plugins.js +136 -0
  123. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -0
  124. package/dist/loaders/plugins/get-enabled-plugins.mjs +134 -0
  125. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -0
  126. package/dist/loaders/plugins/get-user-plugins-config.js +28 -0
  127. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -0
  128. package/dist/loaders/plugins/get-user-plugins-config.mjs +26 -0
  129. package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -0
  130. package/dist/loaders/plugins/index.js +155 -0
  131. package/dist/loaders/plugins/index.js.map +1 -0
  132. package/dist/loaders/plugins/index.mjs +134 -0
  133. package/dist/loaders/plugins/index.mjs.map +1 -0
  134. package/dist/loaders/policies.js +29 -0
  135. package/dist/loaders/policies.js.map +1 -0
  136. package/dist/loaders/policies.mjs +27 -0
  137. package/dist/loaders/policies.mjs.map +1 -0
  138. package/dist/loaders/sanitizers.js +12 -0
  139. package/dist/loaders/sanitizers.js.map +1 -0
  140. package/dist/loaders/sanitizers.mjs +10 -0
  141. package/dist/loaders/sanitizers.mjs.map +1 -0
  142. package/dist/loaders/src-index.js +41 -0
  143. package/dist/loaders/src-index.js.map +1 -0
  144. package/dist/loaders/src-index.mjs +39 -0
  145. package/dist/loaders/src-index.mjs.map +1 -0
  146. package/dist/loaders/validators.js +11 -0
  147. package/dist/loaders/validators.js.map +1 -0
  148. package/dist/loaders/validators.mjs +9 -0
  149. package/dist/loaders/validators.mjs.map +1 -0
  150. package/dist/middlewares/body.js +69 -0
  151. package/dist/middlewares/body.js.map +1 -0
  152. package/dist/middlewares/body.mjs +67 -0
  153. package/dist/middlewares/body.mjs.map +1 -0
  154. package/dist/middlewares/compression.js +8 -0
  155. package/dist/middlewares/compression.js.map +1 -0
  156. package/dist/middlewares/compression.mjs +6 -0
  157. package/dist/middlewares/compression.mjs.map +1 -0
  158. package/dist/middlewares/cors.js +64 -0
  159. package/dist/middlewares/cors.js.map +1 -0
  160. package/dist/middlewares/cors.mjs +62 -0
  161. package/dist/middlewares/cors.mjs.map +1 -0
  162. package/dist/middlewares/errors.js +35 -0
  163. package/dist/middlewares/errors.js.map +1 -0
  164. package/dist/middlewares/errors.mjs +33 -0
  165. package/dist/middlewares/errors.mjs.map +1 -0
  166. package/dist/middlewares/favicon.js +32 -0
  167. package/dist/middlewares/favicon.js.map +1 -0
  168. package/dist/middlewares/favicon.mjs +30 -0
  169. package/dist/middlewares/favicon.mjs.map +1 -0
  170. package/dist/middlewares/index.js +36 -0
  171. package/dist/middlewares/index.js.map +1 -0
  172. package/dist/middlewares/index.mjs +34 -0
  173. package/dist/middlewares/index.mjs.map +1 -0
  174. package/dist/middlewares/ip.js +8 -0
  175. package/dist/middlewares/ip.js.map +1 -0
  176. package/dist/middlewares/ip.mjs +6 -0
  177. package/dist/middlewares/ip.mjs.map +1 -0
  178. package/dist/middlewares/logger.js +13 -0
  179. package/dist/middlewares/logger.js.map +1 -0
  180. package/dist/middlewares/logger.mjs +11 -0
  181. package/dist/middlewares/logger.mjs.map +1 -0
  182. package/dist/middlewares/powered-by.js +18 -0
  183. package/dist/middlewares/powered-by.js.map +1 -0
  184. package/dist/middlewares/powered-by.mjs +16 -0
  185. package/dist/middlewares/powered-by.mjs.map +1 -0
  186. package/dist/middlewares/public.js +38 -0
  187. package/dist/middlewares/public.js.map +1 -0
  188. package/dist/middlewares/public.mjs +36 -0
  189. package/dist/middlewares/public.mjs.map +1 -0
  190. package/dist/middlewares/query.js +43 -0
  191. package/dist/middlewares/query.js.map +1 -0
  192. package/dist/middlewares/query.mjs +41 -0
  193. package/dist/middlewares/query.mjs.map +1 -0
  194. package/dist/middlewares/response-time.js +13 -0
  195. package/dist/middlewares/response-time.js.map +1 -0
  196. package/dist/middlewares/response-time.mjs +11 -0
  197. package/dist/middlewares/response-time.mjs.map +1 -0
  198. package/dist/middlewares/responses.js +17 -0
  199. package/dist/middlewares/responses.js.map +1 -0
  200. package/dist/middlewares/responses.mjs +15 -0
  201. package/dist/middlewares/responses.mjs.map +1 -0
  202. package/dist/middlewares/security.js +116 -0
  203. package/dist/middlewares/security.js.map +1 -0
  204. package/dist/middlewares/security.mjs +114 -0
  205. package/dist/middlewares/security.mjs.map +1 -0
  206. package/dist/middlewares/session.js +31 -0
  207. package/dist/middlewares/session.js.map +1 -0
  208. package/dist/middlewares/session.mjs +29 -0
  209. package/dist/middlewares/session.mjs.map +1 -0
  210. package/dist/migrations/database/5.0.0-discard-drafts.js +168 -0
  211. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -0
  212. package/dist/migrations/database/5.0.0-discard-drafts.mjs +165 -0
  213. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -0
  214. package/dist/migrations/draft-publish.js +69 -0
  215. package/dist/migrations/draft-publish.js.map +1 -0
  216. package/dist/migrations/draft-publish.mjs +66 -0
  217. package/dist/migrations/draft-publish.mjs.map +1 -0
  218. package/dist/migrations/i18n.js +71 -0
  219. package/dist/migrations/i18n.js.map +1 -0
  220. package/dist/migrations/i18n.mjs +68 -0
  221. package/dist/migrations/i18n.mjs.map +1 -0
  222. package/dist/migrations/index.js +29 -0
  223. package/dist/migrations/index.js.map +1 -0
  224. package/dist/migrations/index.mjs +26 -0
  225. package/dist/migrations/index.mjs.map +1 -0
  226. package/dist/package.json.js +182 -0
  227. package/dist/package.json.js.map +1 -0
  228. package/dist/package.json.mjs +159 -0
  229. package/dist/package.json.mjs.map +1 -0
  230. package/dist/providers/admin.js +30 -0
  231. package/dist/providers/admin.js.map +1 -0
  232. package/dist/providers/admin.mjs +28 -0
  233. package/dist/providers/admin.mjs.map +1 -0
  234. package/dist/providers/coreStore.js +16 -0
  235. package/dist/providers/coreStore.js.map +1 -0
  236. package/dist/providers/coreStore.mjs +14 -0
  237. package/dist/providers/coreStore.mjs.map +1 -0
  238. package/dist/providers/cron.js +23 -0
  239. package/dist/providers/cron.js.map +1 -0
  240. package/dist/providers/cron.mjs +21 -0
  241. package/dist/providers/cron.mjs.map +1 -0
  242. package/dist/providers/index.js +20 -0
  243. package/dist/providers/index.js.map +1 -0
  244. package/dist/providers/index.mjs +18 -0
  245. package/dist/providers/index.mjs.map +1 -0
  246. package/dist/providers/provider.js +6 -0
  247. package/dist/providers/provider.js.map +1 -0
  248. package/dist/providers/provider.mjs +4 -0
  249. package/dist/providers/provider.mjs.map +1 -0
  250. package/dist/providers/registries.js +40 -0
  251. package/dist/providers/registries.js.map +1 -0
  252. package/dist/providers/registries.mjs +38 -0
  253. package/dist/providers/registries.mjs.map +1 -0
  254. package/dist/providers/telemetry.js +22 -0
  255. package/dist/providers/telemetry.js.map +1 -0
  256. package/dist/providers/telemetry.mjs +20 -0
  257. package/dist/providers/telemetry.mjs.map +1 -0
  258. package/dist/providers/webhooks.js +32 -0
  259. package/dist/providers/webhooks.js.map +1 -0
  260. package/dist/providers/webhooks.mjs +30 -0
  261. package/dist/providers/webhooks.mjs.map +1 -0
  262. package/dist/registries/apis.js +26 -0
  263. package/dist/registries/apis.js.map +1 -0
  264. package/dist/registries/apis.mjs +24 -0
  265. package/dist/registries/apis.mjs.map +1 -0
  266. package/dist/registries/components.js +43 -0
  267. package/dist/registries/components.js.map +1 -0
  268. package/dist/registries/components.mjs +41 -0
  269. package/dist/registries/components.mjs.map +1 -0
  270. package/dist/registries/content-types.js +65 -0
  271. package/dist/registries/content-types.js.map +1 -0
  272. package/dist/registries/content-types.mjs +63 -0
  273. package/dist/registries/content-types.mjs.map +1 -0
  274. package/dist/registries/controllers.js +79 -0
  275. package/dist/registries/controllers.js.map +1 -0
  276. package/dist/registries/controllers.mjs +77 -0
  277. package/dist/registries/controllers.mjs.map +1 -0
  278. package/dist/registries/custom-fields.js +81 -0
  279. package/dist/registries/custom-fields.js.map +1 -0
  280. package/dist/registries/custom-fields.mjs +79 -0
  281. package/dist/registries/custom-fields.mjs.map +1 -0
  282. package/dist/registries/hooks.js +55 -0
  283. package/dist/registries/hooks.js.map +1 -0
  284. package/dist/registries/hooks.mjs +53 -0
  285. package/dist/registries/hooks.mjs.map +1 -0
  286. package/dist/registries/middlewares.js +58 -0
  287. package/dist/registries/middlewares.js.map +1 -0
  288. package/dist/registries/middlewares.mjs +56 -0
  289. package/dist/registries/middlewares.mjs.map +1 -0
  290. package/dist/registries/models.js +17 -0
  291. package/dist/registries/models.js.map +1 -0
  292. package/dist/registries/models.mjs +15 -0
  293. package/dist/registries/models.mjs.map +1 -0
  294. package/dist/registries/modules.js +42 -0
  295. package/dist/registries/modules.js.map +1 -0
  296. package/dist/registries/modules.mjs +40 -0
  297. package/dist/registries/modules.mjs.map +1 -0
  298. package/dist/registries/namespace.js +28 -0
  299. package/dist/registries/namespace.js.map +1 -0
  300. package/dist/registries/namespace.mjs +24 -0
  301. package/dist/registries/namespace.mjs.map +1 -0
  302. package/dist/registries/plugins.js +26 -0
  303. package/dist/registries/plugins.js.map +1 -0
  304. package/dist/registries/plugins.mjs +24 -0
  305. package/dist/registries/plugins.mjs.map +1 -0
  306. package/dist/registries/policies.js +115 -0
  307. package/dist/registries/policies.js.map +1 -0
  308. package/dist/registries/policies.mjs +113 -0
  309. package/dist/registries/policies.mjs.map +1 -0
  310. package/dist/registries/sanitizers.js +26 -0
  311. package/dist/registries/sanitizers.js.map +1 -0
  312. package/dist/registries/sanitizers.mjs +24 -0
  313. package/dist/registries/sanitizers.mjs.map +1 -0
  314. package/dist/registries/services.js +80 -0
  315. package/dist/registries/services.js.map +1 -0
  316. package/dist/registries/services.mjs +78 -0
  317. package/dist/registries/services.mjs.map +1 -0
  318. package/dist/registries/validators.js +26 -0
  319. package/dist/registries/validators.js.map +1 -0
  320. package/dist/registries/validators.mjs +24 -0
  321. package/dist/registries/validators.mjs.map +1 -0
  322. package/dist/services/auth/index.js +81 -0
  323. package/dist/services/auth/index.js.map +1 -0
  324. package/dist/services/auth/index.mjs +79 -0
  325. package/dist/services/auth/index.mjs.map +1 -0
  326. package/dist/services/config.js +51 -0
  327. package/dist/services/config.js.map +1 -0
  328. package/dist/services/config.mjs +49 -0
  329. package/dist/services/config.mjs.map +1 -0
  330. package/dist/services/content-api/index.js +86 -0
  331. package/dist/services/content-api/index.js.map +1 -0
  332. package/dist/services/content-api/index.mjs +84 -0
  333. package/dist/services/content-api/index.mjs.map +1 -0
  334. package/dist/services/content-api/permissions/engine.js +10 -0
  335. package/dist/services/content-api/permissions/engine.js.map +1 -0
  336. package/dist/services/content-api/permissions/engine.mjs +8 -0
  337. package/dist/services/content-api/permissions/engine.mjs.map +1 -0
  338. package/dist/services/content-api/permissions/index.js +107 -0
  339. package/dist/services/content-api/permissions/index.js.map +1 -0
  340. package/dist/services/content-api/permissions/index.mjs +105 -0
  341. package/dist/services/content-api/permissions/index.mjs.map +1 -0
  342. package/dist/services/content-api/permissions/providers/action.js +19 -0
  343. package/dist/services/content-api/permissions/providers/action.js.map +1 -0
  344. package/dist/services/content-api/permissions/providers/action.mjs +17 -0
  345. package/dist/services/content-api/permissions/providers/action.mjs.map +1 -0
  346. package/dist/services/content-api/permissions/providers/condition.js +19 -0
  347. package/dist/services/content-api/permissions/providers/condition.js.map +1 -0
  348. package/dist/services/content-api/permissions/providers/condition.mjs +17 -0
  349. package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -0
  350. package/dist/services/core-store.js +127 -0
  351. package/dist/services/core-store.js.map +1 -0
  352. package/dist/services/core-store.mjs +124 -0
  353. package/dist/services/core-store.mjs.map +1 -0
  354. package/dist/services/cron.js +77 -0
  355. package/dist/services/cron.js.map +1 -0
  356. package/dist/services/cron.mjs +75 -0
  357. package/dist/services/cron.mjs.map +1 -0
  358. package/dist/services/custom-fields.js +12 -0
  359. package/dist/services/custom-fields.js.map +1 -0
  360. package/dist/services/custom-fields.mjs +10 -0
  361. package/dist/services/custom-fields.mjs.map +1 -0
  362. package/dist/services/document-service/attributes/index.js +27 -0
  363. package/dist/services/document-service/attributes/index.js.map +1 -0
  364. package/dist/services/document-service/attributes/index.mjs +25 -0
  365. package/dist/services/document-service/attributes/index.mjs.map +1 -0
  366. package/dist/services/document-service/attributes/transforms.js +21 -0
  367. package/dist/services/document-service/attributes/transforms.js.map +1 -0
  368. package/dist/services/document-service/attributes/transforms.mjs +19 -0
  369. package/dist/services/document-service/attributes/transforms.mjs.map +1 -0
  370. package/dist/services/document-service/common.js +8 -0
  371. package/dist/services/document-service/common.js.map +1 -0
  372. package/dist/services/document-service/common.mjs +6 -0
  373. package/dist/services/document-service/common.mjs.map +1 -0
  374. package/dist/services/document-service/components.js +286 -0
  375. package/dist/services/document-service/components.js.map +1 -0
  376. package/dist/services/document-service/components.mjs +278 -0
  377. package/dist/services/document-service/components.mjs.map +1 -0
  378. package/dist/services/document-service/draft-and-publish.js +109 -0
  379. package/dist/services/document-service/draft-and-publish.js.map +1 -0
  380. package/dist/services/document-service/draft-and-publish.mjs +102 -0
  381. package/dist/services/document-service/draft-and-publish.mjs.map +1 -0
  382. package/dist/services/document-service/entries.js +113 -0
  383. package/dist/services/document-service/entries.js.map +1 -0
  384. package/dist/services/document-service/entries.mjs +111 -0
  385. package/dist/services/document-service/entries.mjs.map +1 -0
  386. package/dist/services/document-service/events.js +59 -0
  387. package/dist/services/document-service/events.js.map +1 -0
  388. package/dist/services/document-service/events.mjs +57 -0
  389. package/dist/services/document-service/events.mjs.map +1 -0
  390. package/dist/services/document-service/index.js +56 -0
  391. package/dist/services/document-service/index.js.map +1 -0
  392. package/dist/services/document-service/index.mjs +54 -0
  393. package/dist/services/document-service/index.mjs.map +1 -0
  394. package/dist/services/document-service/internationalization.js +79 -0
  395. package/dist/services/document-service/internationalization.js.map +1 -0
  396. package/dist/services/document-service/internationalization.mjs +74 -0
  397. package/dist/services/document-service/internationalization.mjs.map +1 -0
  398. package/dist/services/document-service/middlewares/errors.js +29 -0
  399. package/dist/services/document-service/middlewares/errors.js.map +1 -0
  400. package/dist/services/document-service/middlewares/errors.mjs +27 -0
  401. package/dist/services/document-service/middlewares/errors.mjs.map +1 -0
  402. package/dist/services/document-service/middlewares/middleware-manager.js +51 -0
  403. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -0
  404. package/dist/services/document-service/middlewares/middleware-manager.mjs +49 -0
  405. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -0
  406. package/dist/services/document-service/params.js +14 -0
  407. package/dist/services/document-service/params.js.map +1 -0
  408. package/dist/services/document-service/params.mjs +12 -0
  409. package/dist/services/document-service/params.mjs.map +1 -0
  410. package/dist/services/document-service/repository.js +364 -0
  411. package/dist/services/document-service/repository.js.map +1 -0
  412. package/dist/services/document-service/repository.mjs +362 -0
  413. package/dist/services/document-service/repository.mjs.map +1 -0
  414. package/dist/services/document-service/transform/data.js +25 -0
  415. package/dist/services/document-service/transform/data.js.map +1 -0
  416. package/dist/services/document-service/transform/data.mjs +23 -0
  417. package/dist/services/document-service/transform/data.mjs.map +1 -0
  418. package/dist/services/document-service/transform/fields.js +33 -0
  419. package/dist/services/document-service/transform/fields.js.map +1 -0
  420. package/dist/services/document-service/transform/fields.mjs +31 -0
  421. package/dist/services/document-service/transform/fields.mjs.map +1 -0
  422. package/dist/services/document-service/transform/id-map.js +125 -0
  423. package/dist/services/document-service/transform/id-map.js.map +1 -0
  424. package/dist/services/document-service/transform/id-map.mjs +123 -0
  425. package/dist/services/document-service/transform/id-map.mjs.map +1 -0
  426. package/dist/services/document-service/transform/id-transform.js +41 -0
  427. package/dist/services/document-service/transform/id-transform.js.map +1 -0
  428. package/dist/services/document-service/transform/id-transform.mjs +39 -0
  429. package/dist/services/document-service/transform/id-transform.mjs.map +1 -0
  430. package/dist/services/document-service/transform/populate.js +26 -0
  431. package/dist/services/document-service/transform/populate.js.map +1 -0
  432. package/dist/services/document-service/transform/populate.mjs +24 -0
  433. package/dist/services/document-service/transform/populate.mjs.map +1 -0
  434. package/dist/services/document-service/transform/query.js +14 -0
  435. package/dist/services/document-service/transform/query.js.map +1 -0
  436. package/dist/services/document-service/transform/query.mjs +12 -0
  437. package/dist/services/document-service/transform/query.mjs.map +1 -0
  438. package/dist/services/document-service/transform/relations/extract/data-ids.js +80 -0
  439. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -0
  440. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +78 -0
  441. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -0
  442. package/dist/services/document-service/transform/relations/transform/data-ids.js +110 -0
  443. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -0
  444. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +108 -0
  445. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -0
  446. package/dist/services/document-service/transform/relations/transform/default-locale.js +50 -0
  447. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -0
  448. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +48 -0
  449. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -0
  450. package/dist/services/document-service/transform/relations/utils/dp.js +56 -0
  451. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -0
  452. package/dist/services/document-service/transform/relations/utils/dp.mjs +54 -0
  453. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -0
  454. package/dist/services/document-service/transform/relations/utils/i18n.js +27 -0
  455. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -0
  456. package/dist/services/document-service/transform/relations/utils/i18n.mjs +23 -0
  457. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -0
  458. package/dist/services/document-service/transform/relations/utils/map-relation.js +130 -0
  459. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -0
  460. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +127 -0
  461. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -0
  462. package/dist/services/document-service/utils/bidirectional-relations.js +148 -0
  463. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -0
  464. package/dist/services/document-service/utils/bidirectional-relations.mjs +145 -0
  465. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -0
  466. package/dist/services/document-service/utils/populate.js +71 -0
  467. package/dist/services/document-service/utils/populate.js.map +1 -0
  468. package/dist/services/document-service/utils/populate.mjs +69 -0
  469. package/dist/services/document-service/utils/populate.mjs.map +1 -0
  470. package/dist/services/document-service/utils/unidirectional-relations.js +116 -0
  471. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -0
  472. package/dist/services/document-service/utils/unidirectional-relations.mjs +113 -0
  473. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -0
  474. package/dist/services/entity-service/index.js +238 -0
  475. package/dist/services/entity-service/index.js.map +1 -0
  476. package/dist/services/entity-service/index.mjs +236 -0
  477. package/dist/services/entity-service/index.mjs.map +1 -0
  478. package/dist/services/entity-validator/blocks-validator.js +160 -0
  479. package/dist/services/entity-validator/blocks-validator.js.map +1 -0
  480. package/dist/services/entity-validator/blocks-validator.mjs +158 -0
  481. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -0
  482. package/dist/services/entity-validator/index.js +384 -0
  483. package/dist/services/entity-validator/index.js.map +1 -0
  484. package/dist/services/entity-validator/index.mjs +382 -0
  485. package/dist/services/entity-validator/index.mjs.map +1 -0
  486. package/dist/services/entity-validator/validators.js +299 -0
  487. package/dist/services/entity-validator/validators.js.map +1 -0
  488. package/dist/services/entity-validator/validators.mjs +290 -0
  489. package/dist/services/entity-validator/validators.mjs.map +1 -0
  490. package/dist/services/errors.js +76 -0
  491. package/dist/services/errors.js.map +1 -0
  492. package/dist/services/errors.mjs +72 -0
  493. package/dist/services/errors.mjs.map +1 -0
  494. package/dist/services/event-hub.js +85 -0
  495. package/dist/services/event-hub.js.map +1 -0
  496. package/dist/services/event-hub.mjs +83 -0
  497. package/dist/services/event-hub.mjs.map +1 -0
  498. package/dist/services/features.js +22 -0
  499. package/dist/services/features.js.map +1 -0
  500. package/dist/services/features.mjs +20 -0
  501. package/dist/services/features.mjs.map +1 -0
  502. package/dist/services/fs.js +52 -0
  503. package/dist/services/fs.js.map +1 -0
  504. package/dist/services/fs.mjs +50 -0
  505. package/dist/services/fs.mjs.map +1 -0
  506. package/dist/services/metrics/admin-user-hash.js +16 -0
  507. package/dist/services/metrics/admin-user-hash.js.map +1 -0
  508. package/dist/services/metrics/admin-user-hash.mjs +14 -0
  509. package/dist/services/metrics/admin-user-hash.mjs.map +1 -0
  510. package/dist/services/metrics/index.js +51 -0
  511. package/dist/services/metrics/index.js.map +1 -0
  512. package/dist/services/metrics/index.mjs +49 -0
  513. package/dist/services/metrics/index.mjs.map +1 -0
  514. package/dist/services/metrics/is-truthy.js +16 -0
  515. package/dist/services/metrics/is-truthy.js.map +1 -0
  516. package/dist/services/metrics/is-truthy.mjs +14 -0
  517. package/dist/services/metrics/is-truthy.mjs.map +1 -0
  518. package/dist/services/metrics/middleware.js +40 -0
  519. package/dist/services/metrics/middleware.js.map +1 -0
  520. package/dist/services/metrics/middleware.mjs +38 -0
  521. package/dist/services/metrics/middleware.mjs.map +1 -0
  522. package/dist/services/metrics/rate-limiter.js +26 -0
  523. package/dist/services/metrics/rate-limiter.js.map +1 -0
  524. package/dist/services/metrics/rate-limiter.mjs +24 -0
  525. package/dist/services/metrics/rate-limiter.mjs.map +1 -0
  526. package/dist/services/metrics/sender.js +85 -0
  527. package/dist/services/metrics/sender.js.map +1 -0
  528. package/dist/services/metrics/sender.mjs +83 -0
  529. package/dist/services/metrics/sender.mjs.map +1 -0
  530. package/dist/services/query-params.js +15 -0
  531. package/dist/services/query-params.js.map +1 -0
  532. package/dist/services/query-params.mjs +13 -0
  533. package/dist/services/query-params.mjs.map +1 -0
  534. package/dist/services/reloader.js +39 -0
  535. package/dist/services/reloader.js.map +1 -0
  536. package/dist/services/reloader.mjs +37 -0
  537. package/dist/services/reloader.mjs.map +1 -0
  538. package/dist/services/request-context.js +16 -0
  539. package/dist/services/request-context.js.map +1 -0
  540. package/dist/services/request-context.mjs +14 -0
  541. package/dist/services/request-context.mjs.map +1 -0
  542. package/dist/services/server/admin-api.js +14 -0
  543. package/dist/services/server/admin-api.js.map +1 -0
  544. package/dist/services/server/admin-api.mjs +12 -0
  545. package/dist/services/server/admin-api.mjs.map +1 -0
  546. package/dist/services/server/api.js +36 -0
  547. package/dist/services/server/api.js.map +1 -0
  548. package/dist/services/server/api.mjs +34 -0
  549. package/dist/services/server/api.mjs.map +1 -0
  550. package/dist/services/server/compose-endpoint.js +128 -0
  551. package/dist/services/server/compose-endpoint.js.map +1 -0
  552. package/dist/services/server/compose-endpoint.mjs +126 -0
  553. package/dist/services/server/compose-endpoint.mjs.map +1 -0
  554. package/dist/services/server/content-api.js +14 -0
  555. package/dist/services/server/content-api.js.map +1 -0
  556. package/dist/services/server/content-api.mjs +12 -0
  557. package/dist/services/server/content-api.mjs.map +1 -0
  558. package/dist/services/server/http-server.js +54 -0
  559. package/dist/services/server/http-server.js.map +1 -0
  560. package/dist/services/server/http-server.mjs +52 -0
  561. package/dist/services/server/http-server.mjs.map +1 -0
  562. package/dist/services/server/index.js +90 -0
  563. package/dist/services/server/index.js.map +1 -0
  564. package/dist/services/server/index.mjs +88 -0
  565. package/dist/services/server/index.mjs.map +1 -0
  566. package/dist/services/server/koa.js +54 -0
  567. package/dist/services/server/koa.js.map +1 -0
  568. package/dist/services/server/koa.mjs +52 -0
  569. package/dist/services/server/koa.mjs.map +1 -0
  570. package/dist/services/server/middleware.js +96 -0
  571. package/dist/services/server/middleware.js.map +1 -0
  572. package/dist/services/server/middleware.mjs +93 -0
  573. package/dist/services/server/middleware.mjs.map +1 -0
  574. package/dist/services/server/policy.js +27 -0
  575. package/dist/services/server/policy.js.map +1 -0
  576. package/dist/services/server/policy.mjs +25 -0
  577. package/dist/services/server/policy.mjs.map +1 -0
  578. package/dist/services/server/register-middlewares.js +79 -0
  579. package/dist/services/server/register-middlewares.js.map +1 -0
  580. package/dist/services/server/register-middlewares.mjs +77 -0
  581. package/dist/services/server/register-middlewares.mjs.map +1 -0
  582. package/dist/services/server/register-routes.js +99 -0
  583. package/dist/services/server/register-routes.js.map +1 -0
  584. package/dist/services/server/register-routes.mjs +97 -0
  585. package/dist/services/server/register-routes.mjs.map +1 -0
  586. package/dist/services/server/routing.js +104 -0
  587. package/dist/services/server/routing.js.map +1 -0
  588. package/dist/services/server/routing.mjs +101 -0
  589. package/dist/services/server/routing.mjs.map +1 -0
  590. package/dist/services/utils/dynamic-zones.js +16 -0
  591. package/dist/services/utils/dynamic-zones.js.map +1 -0
  592. package/dist/services/utils/dynamic-zones.mjs +14 -0
  593. package/dist/services/utils/dynamic-zones.mjs.map +1 -0
  594. package/dist/services/webhook-runner.js +135 -0
  595. package/dist/services/webhook-runner.js.map +1 -0
  596. package/dist/services/webhook-runner.mjs +133 -0
  597. package/dist/services/webhook-runner.mjs.map +1 -0
  598. package/dist/services/webhook-store.js +143 -0
  599. package/dist/services/webhook-store.js.map +1 -0
  600. package/dist/services/webhook-store.mjs +140 -0
  601. package/dist/services/webhook-store.mjs.map +1 -0
  602. package/dist/services/worker-queue.js +51 -0
  603. package/dist/services/worker-queue.js.map +1 -0
  604. package/dist/services/worker-queue.mjs +49 -0
  605. package/dist/services/worker-queue.mjs.map +1 -0
  606. package/dist/utils/convert-custom-field-type.js +21 -0
  607. package/dist/utils/convert-custom-field-type.js.map +1 -0
  608. package/dist/utils/convert-custom-field-type.mjs +19 -0
  609. package/dist/utils/convert-custom-field-type.mjs.map +1 -0
  610. package/dist/utils/cron.js +72 -0
  611. package/dist/utils/cron.js.map +1 -0
  612. package/dist/utils/cron.mjs +70 -0
  613. package/dist/utils/cron.mjs.map +1 -0
  614. package/dist/utils/fetch.js +27 -0
  615. package/dist/utils/fetch.js.map +1 -0
  616. package/dist/utils/fetch.mjs +25 -0
  617. package/dist/utils/fetch.mjs.map +1 -0
  618. package/dist/utils/filepath-to-prop-path.js +25 -0
  619. package/dist/utils/filepath-to-prop-path.js.map +1 -0
  620. package/dist/utils/filepath-to-prop-path.mjs +23 -0
  621. package/dist/utils/filepath-to-prop-path.mjs.map +1 -0
  622. package/dist/utils/is-initialized.js +25 -0
  623. package/dist/utils/is-initialized.js.map +1 -0
  624. package/dist/utils/is-initialized.mjs +23 -0
  625. package/dist/utils/is-initialized.mjs.map +1 -0
  626. package/dist/utils/lifecycles.js +10 -0
  627. package/dist/utils/lifecycles.js.map +1 -0
  628. package/dist/utils/lifecycles.mjs +8 -0
  629. package/dist/utils/lifecycles.mjs.map +1 -0
  630. package/dist/utils/load-config-file.js +47 -0
  631. package/dist/utils/load-config-file.js.map +1 -0
  632. package/dist/utils/load-config-file.mjs +45 -0
  633. package/dist/utils/load-config-file.mjs.map +1 -0
  634. package/dist/utils/load-files.js +44 -0
  635. package/dist/utils/load-files.js.map +1 -0
  636. package/dist/utils/load-files.mjs +42 -0
  637. package/dist/utils/load-files.mjs.map +1 -0
  638. package/dist/utils/open-browser.js +11 -0
  639. package/dist/utils/open-browser.js.map +1 -0
  640. package/dist/utils/open-browser.mjs +9 -0
  641. package/dist/utils/open-browser.mjs.map +1 -0
  642. package/dist/utils/resolve-working-dirs.js +26 -0
  643. package/dist/utils/resolve-working-dirs.js.map +1 -0
  644. package/dist/utils/resolve-working-dirs.mjs +24 -0
  645. package/dist/utils/resolve-working-dirs.mjs.map +1 -0
  646. package/dist/utils/signals.js +23 -0
  647. package/dist/utils/signals.js.map +1 -0
  648. package/dist/utils/signals.mjs +21 -0
  649. package/dist/utils/signals.mjs.map +1 -0
  650. package/dist/utils/startup-logger.js +110 -0
  651. package/dist/utils/startup-logger.js.map +1 -0
  652. package/dist/utils/startup-logger.mjs +108 -0
  653. package/dist/utils/startup-logger.mjs.map +1 -0
  654. package/dist/utils/transform-content-types-to-models.js +377 -0
  655. package/dist/utils/transform-content-types-to-models.js.map +1 -0
  656. package/dist/utils/transform-content-types-to-models.mjs +365 -0
  657. package/dist/utils/transform-content-types-to-models.mjs.map +1 -0
  658. package/dist/utils/update-notifier/index.js +80 -0
  659. package/dist/utils/update-notifier/index.js.map +1 -0
  660. package/dist/utils/update-notifier/index.mjs +78 -0
  661. package/dist/utils/update-notifier/index.mjs.map +1 -0
  662. package/package.json +11 -11
@@ -0,0 +1,365 @@
1
+ import { createId } from '@paralleldrive/cuid2';
2
+ import assert from 'node:assert';
3
+ import fp from 'lodash/fp';
4
+
5
+ /**
6
+ * Because strapi/database models don't know about things like components or dynamic zones, we use this file to convert them
7
+ * to a relations format that it recognizes
8
+ *
9
+ * Therefore we have to keep an additional set of helpers/extensions to the database naming methods
10
+ *
11
+ * IMPORTANT!
12
+ * If we use short versions of anything, we MUST call getNameFromTokens directly; attempting to shorten them ourselves
13
+ * prevents the unshortened name map from being filled properly, so for example it will think that the short name
14
+ * 'collection4f3a_cmps' maps to the unshortened 'collectionname_cmps' rather than 'collectionname_components'
15
+ * Therefore, we only use the identifiers helpers in cases where we do not do any of our own shortening
16
+ */ const getComponentJoinTableName = (collectionName, identifiers)=>{
17
+ return identifiers.getNameFromTokens([
18
+ {
19
+ name: collectionName,
20
+ compressible: true
21
+ },
22
+ {
23
+ name: 'components',
24
+ shortName: 'cmps',
25
+ compressible: false
26
+ }
27
+ ]);
28
+ };
29
+ const getDzJoinTableName = (collectionName, identifiers)=>{
30
+ return identifiers.getNameFromTokens([
31
+ {
32
+ name: collectionName,
33
+ compressible: true
34
+ },
35
+ {
36
+ name: 'components',
37
+ shortName: 'cmps',
38
+ compressible: false
39
+ }
40
+ ]);
41
+ };
42
+ const getComponentJoinColumnEntityName = (identifiers)=>{
43
+ return identifiers.getNameFromTokens([
44
+ {
45
+ name: 'entity',
46
+ compressible: false
47
+ },
48
+ {
49
+ name: 'id',
50
+ compressible: false
51
+ }
52
+ ]);
53
+ };
54
+ const getComponentJoinColumnInverseName = (identifiers)=>{
55
+ return identifiers.getNameFromTokens([
56
+ {
57
+ name: 'component',
58
+ shortName: 'cmp',
59
+ compressible: false
60
+ },
61
+ {
62
+ name: 'id',
63
+ compressible: false
64
+ }
65
+ ]);
66
+ };
67
+ const getComponentTypeColumn = (identifiers)=>{
68
+ return identifiers.getNameFromTokens([
69
+ {
70
+ name: 'component_type',
71
+ compressible: false
72
+ }
73
+ ]);
74
+ };
75
+ const getComponentFkIndexName = (contentType, identifiers)=>{
76
+ return identifiers.getNameFromTokens([
77
+ {
78
+ name: contentType,
79
+ compressible: true
80
+ },
81
+ {
82
+ name: 'entity',
83
+ compressible: false
84
+ },
85
+ {
86
+ name: 'fk',
87
+ compressible: false
88
+ }
89
+ ]);
90
+ };
91
+ // Transforms an attribute (particularly for relation types) into the format that strapi/database accepts
92
+ const transformAttribute = (name, attribute, contentType, identifiers)=>{
93
+ switch(attribute.type){
94
+ case 'media':
95
+ {
96
+ return {
97
+ type: 'relation',
98
+ relation: attribute.multiple === true ? 'morphMany' : 'morphOne',
99
+ target: 'plugin::upload.file',
100
+ morphBy: 'related'
101
+ };
102
+ }
103
+ case 'component':
104
+ {
105
+ const joinTableName = getComponentJoinTableName(contentType.collectionName, identifiers);
106
+ const joinColumnEntityName = getComponentJoinColumnEntityName(identifiers);
107
+ const joinColumnInverseName = getComponentJoinColumnInverseName(identifiers);
108
+ const compTypeColumn = getComponentTypeColumn(identifiers);
109
+ return {
110
+ type: 'relation',
111
+ relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',
112
+ target: attribute.component,
113
+ // We need the join table name to be deterministic,
114
+ // We need to allow passing the join table name as an option
115
+ joinTable: {
116
+ name: joinTableName,
117
+ joinColumn: {
118
+ name: joinColumnEntityName,
119
+ referencedColumn: identifiers.ID_COLUMN
120
+ },
121
+ inverseJoinColumn: {
122
+ name: joinColumnInverseName,
123
+ referencedColumn: identifiers.ID_COLUMN
124
+ },
125
+ on: {
126
+ field: name
127
+ },
128
+ orderColumnName: identifiers.ORDER_COLUMN,
129
+ orderBy: {
130
+ order: 'asc'
131
+ },
132
+ pivotColumns: [
133
+ joinColumnEntityName,
134
+ joinColumnInverseName,
135
+ identifiers.FIELD_COLUMN,
136
+ compTypeColumn
137
+ ]
138
+ }
139
+ };
140
+ }
141
+ case 'dynamiczone':
142
+ {
143
+ const joinTableName = getDzJoinTableName(contentType.collectionName, identifiers);
144
+ const joinColumnEntityName = getComponentJoinColumnEntityName(identifiers);
145
+ const joinColumnInverseName = getComponentJoinColumnInverseName(identifiers);
146
+ const compTypeColumn = getComponentTypeColumn(identifiers);
147
+ return {
148
+ type: 'relation',
149
+ relation: 'morphToMany',
150
+ // TODO: handle restrictions at some point
151
+ // target: attribute.components,
152
+ joinTable: {
153
+ name: joinTableName,
154
+ joinColumn: {
155
+ name: joinColumnEntityName,
156
+ referencedColumn: identifiers.ID_COLUMN
157
+ },
158
+ morphColumn: {
159
+ idColumn: {
160
+ name: joinColumnInverseName,
161
+ referencedColumn: identifiers.ID_COLUMN
162
+ },
163
+ typeColumn: {
164
+ name: compTypeColumn
165
+ },
166
+ typeField: '__component'
167
+ },
168
+ on: {
169
+ field: name
170
+ },
171
+ orderBy: {
172
+ order: 'asc'
173
+ },
174
+ pivotColumns: [
175
+ joinColumnEntityName,
176
+ joinColumnInverseName,
177
+ identifiers.FIELD_COLUMN,
178
+ compTypeColumn
179
+ ]
180
+ }
181
+ };
182
+ }
183
+ default:
184
+ {
185
+ return attribute;
186
+ }
187
+ }
188
+ };
189
+ const transformAttributes = (contentType, identifiers)=>{
190
+ return Object.keys(contentType.attributes || {}).reduce((attrs, attrName)=>{
191
+ return {
192
+ ...attrs,
193
+ [attrName]: transformAttribute(attrName, contentType.attributes[attrName], contentType, identifiers)
194
+ };
195
+ }, {});
196
+ };
197
+ const hasComponentsOrDz = (contentType)=>{
198
+ return Object.values(contentType.attributes || {}).some(({ type })=>type === 'dynamiczone' || type === 'component');
199
+ };
200
+ const createDocumentId = createId;
201
+ const createCompoLinkModel = (contentType, identifiers)=>{
202
+ const name = getComponentJoinTableName(contentType.collectionName, identifiers);
203
+ const entityId = getComponentJoinColumnEntityName(identifiers);
204
+ const componentId = getComponentJoinColumnInverseName(identifiers);
205
+ const compTypeColumn = getComponentTypeColumn(identifiers);
206
+ const fkIndex = getComponentFkIndexName(contentType.collectionName, identifiers);
207
+ return {
208
+ // TODO: make sure there can't be any conflicts with a prefix
209
+ singularName: name,
210
+ uid: name,
211
+ tableName: name,
212
+ attributes: {
213
+ [identifiers.ID_COLUMN]: {
214
+ type: 'increments'
215
+ },
216
+ [entityId]: {
217
+ type: 'integer',
218
+ column: {
219
+ unsigned: true
220
+ }
221
+ },
222
+ [componentId]: {
223
+ type: 'integer',
224
+ column: {
225
+ unsigned: true
226
+ }
227
+ },
228
+ [compTypeColumn]: {
229
+ type: 'string'
230
+ },
231
+ [identifiers.FIELD_COLUMN]: {
232
+ type: 'string'
233
+ },
234
+ [identifiers.ORDER_COLUMN]: {
235
+ type: 'float',
236
+ column: {
237
+ unsigned: true,
238
+ defaultTo: null
239
+ }
240
+ }
241
+ },
242
+ indexes: [
243
+ {
244
+ name: identifiers.getIndexName([
245
+ contentType.collectionName,
246
+ identifiers.FIELD_COLUMN
247
+ ]),
248
+ columns: [
249
+ identifiers.FIELD_COLUMN
250
+ ]
251
+ },
252
+ {
253
+ name: identifiers.getIndexName([
254
+ contentType.collectionName,
255
+ compTypeColumn
256
+ ]),
257
+ columns: [
258
+ compTypeColumn
259
+ ]
260
+ },
261
+ {
262
+ name: fkIndex,
263
+ columns: [
264
+ entityId
265
+ ]
266
+ },
267
+ {
268
+ // NOTE: since we don't include attribute names, we need to be careful not to create another unique index
269
+ name: identifiers.getUniqueIndexName([
270
+ contentType.collectionName
271
+ ]),
272
+ columns: [
273
+ entityId,
274
+ componentId,
275
+ identifiers.FIELD_COLUMN,
276
+ compTypeColumn
277
+ ],
278
+ type: 'unique'
279
+ }
280
+ ],
281
+ foreignKeys: [
282
+ {
283
+ name: fkIndex,
284
+ columns: [
285
+ entityId
286
+ ],
287
+ referencedColumns: [
288
+ identifiers.ID_COLUMN
289
+ ],
290
+ referencedTable: identifiers.getTableName(contentType.collectionName),
291
+ onDelete: 'CASCADE'
292
+ }
293
+ ]
294
+ };
295
+ };
296
+ const transformContentTypesToModels = (contentTypes, identifiers)=>{
297
+ const models = [];
298
+ contentTypes.forEach((contentType)=>{
299
+ assert(contentType.collectionName, 'Content type "collectionName" is required');
300
+ assert(contentType.modelName, 'Content type "modelName" is required');
301
+ assert(contentType.uid, 'Content type "uid" is required');
302
+ // Add document id to content types
303
+ // as it is not documented
304
+ const documentIdAttribute = contentType.modelType === 'contentType' ? {
305
+ documentId: {
306
+ type: 'string',
307
+ default: createDocumentId
308
+ }
309
+ } : {};
310
+ // TODO: this needs to be combined with getReservedNames, we should not be maintaining two lists
311
+ // Prevent user from creating a documentId attribute
312
+ const reservedAttributeNames = [
313
+ 'document_id',
314
+ identifiers.ID_COLUMN
315
+ ];
316
+ Object.keys(contentType.attributes || {}).forEach((attributeName)=>{
317
+ const snakeCasedAttributeName = fp.snakeCase(attributeName);
318
+ if (reservedAttributeNames.includes(snakeCasedAttributeName)) {
319
+ throw new Error(`The attribute "${attributeName}" is reserved and cannot be used in a model. Please rename "${contentType.modelName}" attribute "${attributeName}" to something else.`);
320
+ }
321
+ });
322
+ if (hasComponentsOrDz(contentType)) {
323
+ const compoLinkModel = createCompoLinkModel(contentType, identifiers);
324
+ models.push(compoLinkModel);
325
+ }
326
+ const model = {
327
+ uid: contentType.uid,
328
+ singularName: contentType.modelName,
329
+ tableName: contentType.collectionName,
330
+ attributes: {
331
+ [identifiers.ID_COLUMN]: {
332
+ type: 'increments'
333
+ },
334
+ ...documentIdAttribute,
335
+ ...transformAttributes(contentType, identifiers)
336
+ },
337
+ indexes: contentType.indexes,
338
+ foreignKeys: contentType.foreignKeys,
339
+ lifecycles: contentType?.lifecycles ?? {}
340
+ };
341
+ // Add indexes to model
342
+ if (contentType.modelType === 'contentType') {
343
+ model.indexes = [
344
+ ...model.indexes || [],
345
+ {
346
+ name: identifiers.getIndexName([
347
+ contentType.collectionName,
348
+ 'documents'
349
+ ]),
350
+ // Filter attributes that are not in the schema
351
+ columns: [
352
+ 'documentId',
353
+ 'locale',
354
+ 'publishedAt'
355
+ ].filter((n)=>model.attributes[n]).map((name)=>identifiers.getColumnName(fp.snakeCase(name)))
356
+ }
357
+ ];
358
+ }
359
+ models.push(model);
360
+ });
361
+ return models;
362
+ };
363
+
364
+ export { createDocumentId, getComponentFkIndexName, getComponentJoinColumnEntityName, getComponentJoinColumnInverseName, getComponentJoinTableName, getComponentTypeColumn, getDzJoinTableName, hasComponentsOrDz, transformAttribute, transformAttributes, transformContentTypesToModels };
365
+ //# sourceMappingURL=transform-content-types-to-models.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-content-types-to-models.mjs","sources":["../../src/utils/transform-content-types-to-models.ts"],"sourcesContent":["import { type Model, type Identifiers } from '@strapi/database';\nimport type { Struct, Schema } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\nimport _ from 'lodash/fp';\n\n/**\n * Because strapi/database models don't know about things like components or dynamic zones, we use this file to convert them\n * to a relations format that it recognizes\n *\n * Therefore we have to keep an additional set of helpers/extensions to the database naming methods\n *\n * IMPORTANT!\n * If we use short versions of anything, we MUST call getNameFromTokens directly; attempting to shorten them ourselves\n * prevents the unshortened name map from being filled properly, so for example it will think that the short name\n * 'collection4f3a_cmps' maps to the unshortened 'collectionname_cmps' rather than 'collectionname_components'\n * Therefore, we only use the identifiers helpers in cases where we do not do any of our own shortening\n */\n\nexport const getComponentJoinTableName = (collectionName: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ]);\n};\n\nexport const getDzJoinTableName = (collectionName: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ]);\n};\n\nexport const getComponentJoinColumnEntityName = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: 'entity', compressible: false },\n { name: 'id', compressible: false },\n ]);\n};\n\nexport const getComponentJoinColumnInverseName = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: 'component', shortName: 'cmp', compressible: false },\n { name: 'id', compressible: false },\n ]);\n};\n\nexport const getComponentTypeColumn = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([{ name: 'component_type', compressible: false }]);\n};\n\nexport const getComponentFkIndexName = (contentType: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: contentType, compressible: true },\n { name: 'entity', compressible: false },\n { name: 'fk', compressible: false },\n ]);\n};\n\n// const { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;\n\nexport type LoadedContentTypeModel = Struct.ContentTypeSchema &\n Required<Pick<Struct.ContentTypeSchema, 'collectionName' | 'uid' | 'modelName'>> &\n Pick<Model, 'lifecycles'>;\n\n// Transforms an attribute (particularly for relation types) into the format that strapi/database accepts\nexport const transformAttribute = (\n name: string,\n attribute: Schema.Attribute.AnyAttribute,\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n) => {\n switch (attribute.type) {\n case 'media': {\n return {\n type: 'relation',\n relation: attribute.multiple === true ? 'morphMany' : 'morphOne',\n target: 'plugin::upload.file',\n morphBy: 'related',\n };\n }\n case 'component': {\n const joinTableName = getComponentJoinTableName(contentType.collectionName, identifiers);\n const joinColumnEntityName = getComponentJoinColumnEntityName(identifiers);\n const joinColumnInverseName = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\n return {\n type: 'relation',\n relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',\n target: attribute.component,\n\n // We need the join table name to be deterministic,\n // We need to allow passing the join table name as an option\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n inverseJoinColumn: {\n name: joinColumnInverseName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n on: {\n field: name,\n },\n orderColumnName: identifiers.ORDER_COLUMN,\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [\n joinColumnEntityName,\n joinColumnInverseName,\n identifiers.FIELD_COLUMN,\n compTypeColumn,\n ],\n },\n };\n }\n case 'dynamiczone': {\n const joinTableName = getDzJoinTableName(contentType.collectionName, identifiers);\n const joinColumnEntityName = getComponentJoinColumnEntityName(identifiers);\n const joinColumnInverseName = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\n\n return {\n type: 'relation',\n relation: 'morphToMany',\n // TODO: handle restrictions at some point\n // target: attribute.components,\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n morphColumn: {\n idColumn: {\n name: joinColumnInverseName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n typeColumn: {\n name: compTypeColumn,\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [\n joinColumnEntityName,\n joinColumnInverseName,\n identifiers.FIELD_COLUMN,\n compTypeColumn,\n ],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nexport const transformAttributes = (\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(\n attrName,\n contentType.attributes[attrName]!,\n contentType,\n identifiers\n ),\n };\n }, {});\n};\n\nexport const hasComponentsOrDz = (\n contentType: LoadedContentTypeModel\n): contentType is LoadedContentTypeModel & { type: 'dynamiczone' | 'component' } => {\n return Object.values(contentType.attributes || {}).some(\n (({ type }: { type: string }) => type === 'dynamiczone' || type === 'component') as any\n );\n};\n\nexport const createDocumentId = createId;\n\nconst createCompoLinkModel = (\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n): Model => {\n const name = getComponentJoinTableName(contentType.collectionName, identifiers);\n\n const entityId = getComponentJoinColumnEntityName(identifiers);\n const componentId = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\n const fkIndex = getComponentFkIndexName(contentType.collectionName, identifiers);\n\n return {\n // TODO: make sure there can't be any conflicts with a prefix\n singularName: name,\n uid: name,\n tableName: name,\n attributes: {\n [identifiers.ID_COLUMN]: {\n type: 'increments',\n },\n [entityId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [componentId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [compTypeColumn]: {\n type: 'string',\n },\n [identifiers.FIELD_COLUMN]: {\n type: 'string',\n },\n [identifiers.ORDER_COLUMN]: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: identifiers.getIndexName([contentType.collectionName, identifiers.FIELD_COLUMN]),\n columns: [identifiers.FIELD_COLUMN],\n },\n {\n name: identifiers.getIndexName([contentType.collectionName, compTypeColumn]),\n columns: [compTypeColumn],\n },\n {\n name: fkIndex,\n columns: [entityId],\n },\n {\n // NOTE: since we don't include attribute names, we need to be careful not to create another unique index\n name: identifiers.getUniqueIndexName([contentType.collectionName]),\n columns: [entityId, componentId, identifiers.FIELD_COLUMN, compTypeColumn],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndex,\n columns: [entityId],\n referencedColumns: [identifiers.ID_COLUMN],\n referencedTable: identifiers.getTableName(contentType.collectionName),\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (\n contentTypes: LoadedContentTypeModel[],\n identifiers: Identifiers\n): Model[] => {\n const models: Model[] = [];\n\n contentTypes.forEach((contentType) => {\n assert(contentType.collectionName, 'Content type \"collectionName\" is required');\n assert(contentType.modelName, 'Content type \"modelName\" is required');\n assert(contentType.uid, 'Content type \"uid\" is required');\n\n // Add document id to content types\n // as it is not documented\n const documentIdAttribute: Record<string, Schema.Attribute.AnyAttribute> =\n contentType.modelType === 'contentType'\n ? { documentId: { type: 'string', default: createDocumentId } }\n : {};\n\n // TODO: this needs to be combined with getReservedNames, we should not be maintaining two lists\n // Prevent user from creating a documentId attribute\n const reservedAttributeNames = ['document_id', identifiers.ID_COLUMN];\n Object.keys(contentType.attributes || {}).forEach((attributeName) => {\n const snakeCasedAttributeName = _.snakeCase(attributeName);\n if (reservedAttributeNames.includes(snakeCasedAttributeName)) {\n throw new Error(\n `The attribute \"${attributeName}\" is reserved and cannot be used in a model. Please rename \"${contentType.modelName}\" attribute \"${attributeName}\" to something else.`\n );\n }\n });\n\n if (hasComponentsOrDz(contentType)) {\n const compoLinkModel = createCompoLinkModel(contentType, identifiers);\n models.push(compoLinkModel);\n }\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: contentType.collectionName, // This gets shortened in metadata.loadModels(), so we don't shorten here or it will happen twice\n attributes: {\n [identifiers.ID_COLUMN]: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType, identifiers),\n },\n indexes: contentType.indexes as Model['indexes'],\n foreignKeys: contentType.foreignKeys as Model['foreignKeys'],\n lifecycles: contentType?.lifecycles ?? {},\n };\n\n // Add indexes to model\n if (contentType.modelType === 'contentType') {\n model.indexes = [\n ...(model.indexes || []),\n {\n name: identifiers.getIndexName([contentType.collectionName, 'documents']),\n // Filter attributes that are not in the schema\n columns: ['documentId', 'locale', 'publishedAt']\n .filter((n) => model.attributes[n])\n .map((name) => identifiers.getColumnName(_.snakeCase(name))),\n },\n ];\n }\n\n models.push(model);\n });\n\n return models;\n};\n"],"names":["getComponentJoinTableName","collectionName","identifiers","getNameFromTokens","name","compressible","shortName","getDzJoinTableName","getComponentJoinColumnEntityName","getComponentJoinColumnInverseName","getComponentTypeColumn","getComponentFkIndexName","contentType","transformAttribute","attribute","type","relation","multiple","target","morphBy","joinTableName","joinColumnEntityName","joinColumnInverseName","compTypeColumn","repeatable","component","joinTable","joinColumn","referencedColumn","ID_COLUMN","inverseJoinColumn","on","field","orderColumnName","ORDER_COLUMN","orderBy","order","pivotColumns","FIELD_COLUMN","morphColumn","idColumn","typeColumn","typeField","transformAttributes","Object","keys","attributes","reduce","attrs","attrName","hasComponentsOrDz","values","some","createDocumentId","createId","createCompoLinkModel","entityId","componentId","fkIndex","singularName","uid","tableName","column","unsigned","defaultTo","indexes","getIndexName","columns","getUniqueIndexName","foreignKeys","referencedColumns","referencedTable","getTableName","onDelete","transformContentTypesToModels","contentTypes","models","forEach","assert","modelName","documentIdAttribute","modelType","documentId","default","reservedAttributeNames","attributeName","snakeCasedAttributeName","_","snakeCase","includes","Error","compoLinkModel","push","model","lifecycles","filter","n","map","getColumnName"],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ 'use strict';
2
+
3
+ var path = require('path');
4
+ var packageJson = require('package-json');
5
+ var Configstore = require('configstore');
6
+ var semver = require('semver');
7
+ var boxen = require('boxen');
8
+ var chalk = require('chalk');
9
+ var strapiUtils = require('@strapi/utils');
10
+ var _package = require('../../package.json.js');
11
+
12
+ const CHECK_INTERVAL = 1000 * 60 * 60 * 24 * 1; // 1 day
13
+ const NOTIF_INTERVAL = 1000 * 60 * 60 * 24 * 7; // 1 week
14
+ const boxenOptions = {
15
+ padding: 1,
16
+ margin: 1,
17
+ align: 'center',
18
+ borderColor: 'yellow',
19
+ borderStyle: 'round'
20
+ };
21
+ const getUpdateMessage = (newVersion, currentVersion)=>{
22
+ const currentVersionLog = chalk.dim(currentVersion);
23
+ const newVersionLog = chalk.green(newVersion);
24
+ const releaseLink = chalk.bold('https://github.com/strapi/strapi/releases');
25
+ return `
26
+ A new version of Strapi is available ${currentVersionLog} → ${newVersionLog}
27
+ Check out the new releases at: ${releaseLink}
28
+ `.trim();
29
+ };
30
+ const createUpdateNotifier = (strapi)=>{
31
+ let config;
32
+ try {
33
+ config = new Configstore(_package.default.name, {}, {
34
+ configPath: path.join(strapi.dirs.app.root, '.strapi-updater.json')
35
+ });
36
+ } catch {
37
+ // we don't have write access to the file system
38
+ // we silence the error
39
+ return;
40
+ }
41
+ const checkUpdate = async (checkInterval)=>{
42
+ const now = Date.now();
43
+ const lastUpdateCheck = config.get('lastUpdateCheck') || 0;
44
+ if (lastUpdateCheck + checkInterval > now) {
45
+ return;
46
+ }
47
+ try {
48
+ const res = await packageJson(_package.default.name);
49
+ if (res.version) {
50
+ config.set('latest', res.version);
51
+ config.set('lastUpdateCheck', now);
52
+ }
53
+ } catch {
54
+ // silence error if offline
55
+ }
56
+ };
57
+ const display = (notifInterval)=>{
58
+ const now = Date.now();
59
+ const latestVersion = config.get('latest');
60
+ const lastNotification = config.get('lastNotification') || 0;
61
+ if (!process.stdout.isTTY || lastNotification + notifInterval > now || !semver.valid(latestVersion) || !semver.valid(_package.default.version) || semver.lte(latestVersion, _package.default.version)) {
62
+ return;
63
+ }
64
+ const message = boxen(getUpdateMessage(latestVersion, _package.default.version), boxenOptions);
65
+ config.set('lastNotification', now);
66
+ console.log(message);
67
+ };
68
+ // TODO v6: Remove this warning
69
+ if (strapiUtils.env.bool('STRAPI_DISABLE_UPDATE_NOTIFICATION', false)) {
70
+ strapi.log.warn('STRAPI_DISABLE_UPDATE_NOTIFICATION is no longer supported. Instead, set logger.updates.enabled to false in your server configuration.');
71
+ }
72
+ if (!strapi.config.get('server.logger.updates.enabled') || !config) {
73
+ return;
74
+ }
75
+ display(NOTIF_INTERVAL);
76
+ checkUpdate(CHECK_INTERVAL); // doesn't need to await
77
+ };
78
+
79
+ exports.createUpdateNotifier = createUpdateNotifier;
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/utils/update-notifier/index.ts"],"sourcesContent":["import path from 'path';\nimport packageJson from 'package-json';\nimport Configstore from 'configstore';\nimport semver from 'semver';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport { env } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport pkg from '../../../package.json';\n\nconst CHECK_INTERVAL = 1000 * 60 * 60 * 24 * 1; // 1 day\nconst NOTIF_INTERVAL = 1000 * 60 * 60 * 24 * 7; // 1 week\nconst boxenOptions: boxen.Options = {\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'round',\n};\n\nconst getUpdateMessage = (newVersion: string, currentVersion: string) => {\n const currentVersionLog = chalk.dim(currentVersion);\n const newVersionLog = chalk.green(newVersion);\n const releaseLink = chalk.bold('https://github.com/strapi/strapi/releases');\n\n return `\nA new version of Strapi is available ${currentVersionLog} → ${newVersionLog}\nCheck out the new releases at: ${releaseLink}\n`.trim();\n};\n\nexport const createUpdateNotifier = (strapi: Core.Strapi) => {\n let config: InstanceType<typeof Configstore>;\n\n try {\n config = new Configstore(\n pkg.name,\n {},\n { configPath: path.join(strapi.dirs.app.root, '.strapi-updater.json') }\n );\n } catch {\n // we don't have write access to the file system\n // we silence the error\n return;\n }\n\n const checkUpdate = async (checkInterval: number) => {\n const now = Date.now();\n const lastUpdateCheck = config.get('lastUpdateCheck') || 0;\n if (lastUpdateCheck + checkInterval > now) {\n return;\n }\n\n try {\n const res = await packageJson(pkg.name);\n if (res.version) {\n config.set('latest', res.version);\n config.set('lastUpdateCheck', now);\n }\n } catch {\n // silence error if offline\n }\n };\n\n const display = (notifInterval: number) => {\n const now = Date.now();\n const latestVersion = config.get('latest');\n const lastNotification = config.get('lastNotification') || 0;\n\n if (\n !process.stdout.isTTY ||\n lastNotification + notifInterval > now ||\n !semver.valid(latestVersion) ||\n !semver.valid(pkg.version) ||\n semver.lte(latestVersion, pkg.version)\n ) {\n return;\n }\n\n const message = boxen(getUpdateMessage(latestVersion, pkg.version), boxenOptions);\n config.set('lastNotification', now);\n console.log(message);\n };\n\n // TODO v6: Remove this warning\n if (env.bool('STRAPI_DISABLE_UPDATE_NOTIFICATION', false)) {\n strapi.log.warn(\n 'STRAPI_DISABLE_UPDATE_NOTIFICATION is no longer supported. Instead, set logger.updates.enabled to false in your server configuration.'\n );\n }\n\n if (!strapi.config.get('server.logger.updates.enabled') || !config) {\n return;\n }\n\n display(NOTIF_INTERVAL);\n checkUpdate(CHECK_INTERVAL); // doesn't need to await\n};\n"],"names":["CHECK_INTERVAL","NOTIF_INTERVAL","boxenOptions","padding","margin","align","borderColor","borderStyle","getUpdateMessage","newVersion","currentVersion","currentVersionLog","chalk","dim","newVersionLog","green","releaseLink","bold","trim","createUpdateNotifier","strapi","config","Configstore","pkg","name","configPath","path","join","dirs","app","root","checkUpdate","checkInterval","now","Date","lastUpdateCheck","get","res","packageJson","version","set","display","notifInterval","latestVersion","lastNotification","process","stdout","isTTY","semver","valid","lte","message","boxen","console","log","env","bool","warn"],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import path from 'path';
2
+ import packageJson from 'package-json';
3
+ import Configstore from 'configstore';
4
+ import semver from 'semver';
5
+ import boxen from 'boxen';
6
+ import chalk from 'chalk';
7
+ import { env } from '@strapi/utils';
8
+ import pkg from '../../package.json.mjs';
9
+
10
+ const CHECK_INTERVAL = 1000 * 60 * 60 * 24 * 1; // 1 day
11
+ const NOTIF_INTERVAL = 1000 * 60 * 60 * 24 * 7; // 1 week
12
+ const boxenOptions = {
13
+ padding: 1,
14
+ margin: 1,
15
+ align: 'center',
16
+ borderColor: 'yellow',
17
+ borderStyle: 'round'
18
+ };
19
+ const getUpdateMessage = (newVersion, currentVersion)=>{
20
+ const currentVersionLog = chalk.dim(currentVersion);
21
+ const newVersionLog = chalk.green(newVersion);
22
+ const releaseLink = chalk.bold('https://github.com/strapi/strapi/releases');
23
+ return `
24
+ A new version of Strapi is available ${currentVersionLog} → ${newVersionLog}
25
+ Check out the new releases at: ${releaseLink}
26
+ `.trim();
27
+ };
28
+ const createUpdateNotifier = (strapi)=>{
29
+ let config;
30
+ try {
31
+ config = new Configstore(pkg.name, {}, {
32
+ configPath: path.join(strapi.dirs.app.root, '.strapi-updater.json')
33
+ });
34
+ } catch {
35
+ // we don't have write access to the file system
36
+ // we silence the error
37
+ return;
38
+ }
39
+ const checkUpdate = async (checkInterval)=>{
40
+ const now = Date.now();
41
+ const lastUpdateCheck = config.get('lastUpdateCheck') || 0;
42
+ if (lastUpdateCheck + checkInterval > now) {
43
+ return;
44
+ }
45
+ try {
46
+ const res = await packageJson(pkg.name);
47
+ if (res.version) {
48
+ config.set('latest', res.version);
49
+ config.set('lastUpdateCheck', now);
50
+ }
51
+ } catch {
52
+ // silence error if offline
53
+ }
54
+ };
55
+ const display = (notifInterval)=>{
56
+ const now = Date.now();
57
+ const latestVersion = config.get('latest');
58
+ const lastNotification = config.get('lastNotification') || 0;
59
+ if (!process.stdout.isTTY || lastNotification + notifInterval > now || !semver.valid(latestVersion) || !semver.valid(pkg.version) || semver.lte(latestVersion, pkg.version)) {
60
+ return;
61
+ }
62
+ const message = boxen(getUpdateMessage(latestVersion, pkg.version), boxenOptions);
63
+ config.set('lastNotification', now);
64
+ console.log(message);
65
+ };
66
+ // TODO v6: Remove this warning
67
+ if (env.bool('STRAPI_DISABLE_UPDATE_NOTIFICATION', false)) {
68
+ strapi.log.warn('STRAPI_DISABLE_UPDATE_NOTIFICATION is no longer supported. Instead, set logger.updates.enabled to false in your server configuration.');
69
+ }
70
+ if (!strapi.config.get('server.logger.updates.enabled') || !config) {
71
+ return;
72
+ }
73
+ display(NOTIF_INTERVAL);
74
+ checkUpdate(CHECK_INTERVAL); // doesn't need to await
75
+ };
76
+
77
+ export { createUpdateNotifier };
78
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/utils/update-notifier/index.ts"],"sourcesContent":["import path from 'path';\nimport packageJson from 'package-json';\nimport Configstore from 'configstore';\nimport semver from 'semver';\nimport boxen from 'boxen';\nimport chalk from 'chalk';\nimport { env } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport pkg from '../../../package.json';\n\nconst CHECK_INTERVAL = 1000 * 60 * 60 * 24 * 1; // 1 day\nconst NOTIF_INTERVAL = 1000 * 60 * 60 * 24 * 7; // 1 week\nconst boxenOptions: boxen.Options = {\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'round',\n};\n\nconst getUpdateMessage = (newVersion: string, currentVersion: string) => {\n const currentVersionLog = chalk.dim(currentVersion);\n const newVersionLog = chalk.green(newVersion);\n const releaseLink = chalk.bold('https://github.com/strapi/strapi/releases');\n\n return `\nA new version of Strapi is available ${currentVersionLog} → ${newVersionLog}\nCheck out the new releases at: ${releaseLink}\n`.trim();\n};\n\nexport const createUpdateNotifier = (strapi: Core.Strapi) => {\n let config: InstanceType<typeof Configstore>;\n\n try {\n config = new Configstore(\n pkg.name,\n {},\n { configPath: path.join(strapi.dirs.app.root, '.strapi-updater.json') }\n );\n } catch {\n // we don't have write access to the file system\n // we silence the error\n return;\n }\n\n const checkUpdate = async (checkInterval: number) => {\n const now = Date.now();\n const lastUpdateCheck = config.get('lastUpdateCheck') || 0;\n if (lastUpdateCheck + checkInterval > now) {\n return;\n }\n\n try {\n const res = await packageJson(pkg.name);\n if (res.version) {\n config.set('latest', res.version);\n config.set('lastUpdateCheck', now);\n }\n } catch {\n // silence error if offline\n }\n };\n\n const display = (notifInterval: number) => {\n const now = Date.now();\n const latestVersion = config.get('latest');\n const lastNotification = config.get('lastNotification') || 0;\n\n if (\n !process.stdout.isTTY ||\n lastNotification + notifInterval > now ||\n !semver.valid(latestVersion) ||\n !semver.valid(pkg.version) ||\n semver.lte(latestVersion, pkg.version)\n ) {\n return;\n }\n\n const message = boxen(getUpdateMessage(latestVersion, pkg.version), boxenOptions);\n config.set('lastNotification', now);\n console.log(message);\n };\n\n // TODO v6: Remove this warning\n if (env.bool('STRAPI_DISABLE_UPDATE_NOTIFICATION', false)) {\n strapi.log.warn(\n 'STRAPI_DISABLE_UPDATE_NOTIFICATION is no longer supported. Instead, set logger.updates.enabled to false in your server configuration.'\n );\n }\n\n if (!strapi.config.get('server.logger.updates.enabled') || !config) {\n return;\n }\n\n display(NOTIF_INTERVAL);\n checkUpdate(CHECK_INTERVAL); // doesn't need to await\n};\n"],"names":["CHECK_INTERVAL","NOTIF_INTERVAL","boxenOptions","padding","margin","align","borderColor","borderStyle","getUpdateMessage","newVersion","currentVersion","currentVersionLog","chalk","dim","newVersionLog","green","releaseLink","bold","trim","createUpdateNotifier","strapi","config","Configstore","pkg","name","configPath","path","join","dirs","app","root","checkUpdate","checkInterval","now","Date","lastUpdateCheck","get","res","packageJson","version","set","display","notifInterval","latestVersion","lastNotification","process","stdout","isTTY","semver","valid","lte","message","boxen","console","log","env","bool","warn"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/core",
3
- "version": "5.12.1",
3
+ "version": "5.12.2",
4
4
  "description": "Core of Strapi",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -56,14 +56,14 @@
56
56
  "@koa/cors": "5.0.0",
57
57
  "@koa/router": "12.0.2",
58
58
  "@paralleldrive/cuid2": "2.2.2",
59
- "@strapi/admin": "5.12.1",
60
- "@strapi/database": "5.12.1",
61
- "@strapi/generators": "5.12.1",
62
- "@strapi/logger": "5.12.1",
63
- "@strapi/permissions": "5.12.1",
64
- "@strapi/types": "5.12.1",
65
- "@strapi/typescript-utils": "5.12.1",
66
- "@strapi/utils": "5.12.1",
59
+ "@strapi/admin": "5.12.2",
60
+ "@strapi/database": "5.12.2",
61
+ "@strapi/generators": "5.12.2",
62
+ "@strapi/logger": "5.12.2",
63
+ "@strapi/permissions": "5.12.2",
64
+ "@strapi/types": "5.12.2",
65
+ "@strapi/typescript-utils": "5.12.2",
66
+ "@strapi/utils": "5.12.2",
67
67
  "bcryptjs": "2.4.3",
68
68
  "boxen": "5.1.2",
69
69
  "chalk": "4.1.2",
@@ -126,9 +126,9 @@
126
126
  "@types/node": "18.19.24",
127
127
  "@types/node-schedule": "2.1.7",
128
128
  "@types/statuses": "2.0.1",
129
- "eslint-config-custom": "5.12.1",
129
+ "eslint-config-custom": "5.12.2",
130
130
  "supertest": "6.3.3",
131
- "tsconfig": "5.12.1"
131
+ "tsconfig": "5.12.2"
132
132
  },
133
133
  "engines": {
134
134
  "node": ">=18.0.0 <=22.x.x",