@strapi/core 5.55.1 → 5.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/dist/Strapi.d.ts +1 -0
  2. package/dist/Strapi.d.ts.map +1 -1
  3. package/dist/Strapi.js +6 -3
  4. package/dist/Strapi.js.map +1 -1
  5. package/dist/Strapi.mjs +6 -3
  6. package/dist/Strapi.mjs.map +1 -1
  7. package/dist/configuration/get-dirs.js +2 -2
  8. package/dist/configuration/get-dirs.js.map +1 -1
  9. package/dist/configuration/get-dirs.mjs +2 -2
  10. package/dist/configuration/get-dirs.mjs.map +1 -1
  11. package/dist/configuration/index.d.ts +1 -2
  12. package/dist/configuration/index.d.ts.map +1 -1
  13. package/dist/configuration/index.js +1 -2
  14. package/dist/configuration/index.js.map +1 -1
  15. package/dist/configuration/index.mjs +2 -3
  16. package/dist/configuration/index.mjs.map +1 -1
  17. package/dist/core-api/controller/collection-type.js +3 -3
  18. package/dist/core-api/controller/collection-type.js.map +1 -1
  19. package/dist/core-api/controller/collection-type.mjs +1 -1
  20. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  21. package/dist/core-api/controller/index.js +2 -2
  22. package/dist/core-api/controller/index.js.map +1 -1
  23. package/dist/core-api/controller/index.mjs +2 -2
  24. package/dist/core-api/controller/index.mjs.map +1 -1
  25. package/dist/core-api/controller/single-type.js +2 -2
  26. package/dist/core-api/controller/single-type.js.map +1 -1
  27. package/dist/core-api/controller/single-type.mjs +1 -1
  28. package/dist/core-api/controller/single-type.mjs.map +1 -1
  29. package/dist/core-api/controller/transform.d.ts +1 -4
  30. package/dist/core-api/controller/transform.d.ts.map +1 -1
  31. package/dist/core-api/controller/transform.js +8 -8
  32. package/dist/core-api/controller/transform.js.map +1 -1
  33. package/dist/core-api/controller/transform.mjs +5 -5
  34. package/dist/core-api/controller/transform.mjs.map +1 -1
  35. package/dist/core-api/routes/index.js +1 -1
  36. package/dist/core-api/routes/index.js.map +1 -1
  37. package/dist/core-api/routes/index.mjs +1 -1
  38. package/dist/core-api/routes/index.mjs.map +1 -1
  39. package/dist/core-api/service/pagination.js +9 -9
  40. package/dist/core-api/service/pagination.js.map +1 -1
  41. package/dist/core-api/service/pagination.mjs +7 -7
  42. package/dist/core-api/service/pagination.mjs.map +1 -1
  43. package/dist/domain/content-type/index.d.ts.map +1 -1
  44. package/dist/domain/content-type/index.js +1 -2
  45. package/dist/domain/content-type/index.js.map +1 -1
  46. package/dist/domain/content-type/index.mjs +1 -2
  47. package/dist/domain/content-type/index.mjs.map +1 -1
  48. package/dist/ee/index.js +4 -4
  49. package/dist/ee/index.js.map +1 -1
  50. package/dist/ee/index.mjs +3 -3
  51. package/dist/ee/index.mjs.map +1 -1
  52. package/dist/factories.d.ts.map +1 -1
  53. package/dist/factories.js +3 -2
  54. package/dist/factories.js.map +1 -1
  55. package/dist/factories.mjs +3 -2
  56. package/dist/factories.mjs.map +1 -1
  57. package/dist/index.js +1 -1
  58. package/dist/index.mjs +1 -1
  59. package/dist/loaders/apis.d.ts.map +1 -1
  60. package/dist/loaders/apis.js +1 -2
  61. package/dist/loaders/apis.js.map +1 -1
  62. package/dist/loaders/apis.mjs +1 -2
  63. package/dist/loaders/apis.mjs.map +1 -1
  64. package/dist/loaders/plugins/get-enabled-plugins.d.ts +1 -1
  65. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  66. package/dist/loaders/plugins/get-enabled-plugins.js +6 -5
  67. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  68. package/dist/loaders/plugins/get-enabled-plugins.mjs +6 -5
  69. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  70. package/dist/loaders/plugins/get-user-plugins-config.js +2 -2
  71. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  72. package/dist/loaders/plugins/get-user-plugins-config.mjs +2 -2
  73. package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
  74. package/dist/loaders/plugins/index.js +9 -12
  75. package/dist/loaders/plugins/index.js.map +1 -1
  76. package/dist/loaders/plugins/index.mjs +9 -12
  77. package/dist/loaders/plugins/index.mjs.map +1 -1
  78. package/dist/middlewares/body.js +2 -2
  79. package/dist/middlewares/body.js.map +1 -1
  80. package/dist/middlewares/body.mjs +2 -2
  81. package/dist/middlewares/body.mjs.map +1 -1
  82. package/dist/middlewares/public.js +2 -2
  83. package/dist/middlewares/public.js.map +1 -1
  84. package/dist/middlewares/public.mjs +2 -2
  85. package/dist/middlewares/public.mjs.map +1 -1
  86. package/dist/middlewares/responses.d.ts.map +1 -1
  87. package/dist/middlewares/responses.js +1 -3
  88. package/dist/middlewares/responses.js.map +1 -1
  89. package/dist/middlewares/responses.mjs +1 -3
  90. package/dist/middlewares/responses.mjs.map +1 -1
  91. package/dist/middlewares/security.d.ts.map +1 -1
  92. package/dist/middlewares/security.js +3 -3
  93. package/dist/middlewares/security.js.map +1 -1
  94. package/dist/middlewares/security.mjs +3 -3
  95. package/dist/middlewares/security.mjs.map +1 -1
  96. package/dist/middlewares/session.js +2 -2
  97. package/dist/middlewares/session.js.map +1 -1
  98. package/dist/middlewares/session.mjs +2 -2
  99. package/dist/middlewares/session.mjs.map +1 -1
  100. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
  101. package/dist/migrations/database/5.0.0-discard-drafts.js +1 -2
  102. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  103. package/dist/migrations/database/5.0.0-discard-drafts.mjs +1 -2
  104. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  105. package/dist/migrations/i18n.d.ts.map +1 -1
  106. package/dist/migrations/i18n.js +6 -4
  107. package/dist/migrations/i18n.js.map +1 -1
  108. package/dist/migrations/i18n.mjs +6 -4
  109. package/dist/migrations/i18n.mjs.map +1 -1
  110. package/dist/package.json.js +15 -15
  111. package/dist/package.json.mjs +15 -15
  112. package/dist/registries/apis.js +2 -2
  113. package/dist/registries/apis.js.map +1 -1
  114. package/dist/registries/apis.mjs +2 -2
  115. package/dist/registries/apis.mjs.map +1 -1
  116. package/dist/registries/components.js +2 -2
  117. package/dist/registries/components.js.map +1 -1
  118. package/dist/registries/components.mjs +2 -2
  119. package/dist/registries/components.mjs.map +1 -1
  120. package/dist/registries/content-types.d.ts +1 -1
  121. package/dist/registries/content-types.js +3 -3
  122. package/dist/registries/content-types.js.map +1 -1
  123. package/dist/registries/content-types.mjs +3 -3
  124. package/dist/registries/content-types.mjs.map +1 -1
  125. package/dist/registries/controllers.js +3 -3
  126. package/dist/registries/controllers.js.map +1 -1
  127. package/dist/registries/controllers.mjs +3 -3
  128. package/dist/registries/controllers.mjs.map +1 -1
  129. package/dist/registries/custom-fields.js +4 -4
  130. package/dist/registries/custom-fields.js.map +1 -1
  131. package/dist/registries/custom-fields.mjs +4 -4
  132. package/dist/registries/custom-fields.mjs.map +1 -1
  133. package/dist/registries/hooks.d.ts +1 -1
  134. package/dist/registries/hooks.js +2 -2
  135. package/dist/registries/hooks.js.map +1 -1
  136. package/dist/registries/hooks.mjs +2 -2
  137. package/dist/registries/hooks.mjs.map +1 -1
  138. package/dist/registries/middlewares.d.ts +1 -1
  139. package/dist/registries/middlewares.js +3 -3
  140. package/dist/registries/middlewares.js.map +1 -1
  141. package/dist/registries/middlewares.mjs +3 -3
  142. package/dist/registries/middlewares.mjs.map +1 -1
  143. package/dist/registries/modules.d.ts +1 -4
  144. package/dist/registries/modules.d.ts.map +1 -1
  145. package/dist/registries/modules.js +3 -3
  146. package/dist/registries/modules.js.map +1 -1
  147. package/dist/registries/modules.mjs +3 -3
  148. package/dist/registries/modules.mjs.map +1 -1
  149. package/dist/registries/plugins.js +2 -2
  150. package/dist/registries/plugins.js.map +1 -1
  151. package/dist/registries/plugins.mjs +2 -2
  152. package/dist/registries/plugins.mjs.map +1 -1
  153. package/dist/registries/policies.d.ts +1 -1
  154. package/dist/registries/policies.js +4 -4
  155. package/dist/registries/policies.js.map +1 -1
  156. package/dist/registries/policies.mjs +3 -3
  157. package/dist/registries/policies.mjs.map +1 -1
  158. package/dist/registries/services.js +3 -3
  159. package/dist/registries/services.js.map +1 -1
  160. package/dist/registries/services.mjs +3 -3
  161. package/dist/registries/services.mjs.map +1 -1
  162. package/dist/services/auth/index.js +3 -3
  163. package/dist/services/auth/index.js.map +1 -1
  164. package/dist/services/auth/index.mjs +3 -3
  165. package/dist/services/auth/index.mjs.map +1 -1
  166. package/dist/services/content-structure/index.js +1 -1
  167. package/dist/services/content-structure/index.js.map +1 -1
  168. package/dist/services/content-structure/index.mjs +1 -1
  169. package/dist/services/content-structure/index.mjs.map +1 -1
  170. package/dist/services/core-store.js +3 -3
  171. package/dist/services/core-store.js.map +1 -1
  172. package/dist/services/core-store.mjs +1 -1
  173. package/dist/services/core-store.mjs.map +1 -1
  174. package/dist/services/cron.d.ts.map +1 -1
  175. package/dist/services/cron.js +2 -4
  176. package/dist/services/cron.js.map +1 -1
  177. package/dist/services/cron.mjs +2 -4
  178. package/dist/services/cron.mjs.map +1 -1
  179. package/dist/services/document-service/attributes/index.js +2 -2
  180. package/dist/services/document-service/attributes/index.js.map +1 -1
  181. package/dist/services/document-service/attributes/index.mjs +1 -1
  182. package/dist/services/document-service/attributes/index.mjs.map +1 -1
  183. package/dist/services/document-service/attributes/transforms.js +3 -3
  184. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  185. package/dist/services/document-service/attributes/transforms.mjs +2 -2
  186. package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
  187. package/dist/services/document-service/components.d.ts.map +1 -1
  188. package/dist/services/document-service/components.js +13 -14
  189. package/dist/services/document-service/components.js.map +1 -1
  190. package/dist/services/document-service/components.mjs +12 -13
  191. package/dist/services/document-service/components.mjs.map +1 -1
  192. package/dist/services/document-service/draft-and-publish.js +65 -38
  193. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  194. package/dist/services/document-service/draft-and-publish.mjs +59 -32
  195. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  196. package/dist/services/document-service/entries.d.ts +2 -2
  197. package/dist/services/document-service/entries.d.ts.map +1 -1
  198. package/dist/services/document-service/entries.js +16 -8
  199. package/dist/services/document-service/entries.js.map +1 -1
  200. package/dist/services/document-service/entries.mjs +17 -9
  201. package/dist/services/document-service/entries.mjs.map +1 -1
  202. package/dist/services/document-service/first-published-at.js +7 -5
  203. package/dist/services/document-service/first-published-at.js.map +1 -1
  204. package/dist/services/document-service/first-published-at.mjs +7 -5
  205. package/dist/services/document-service/first-published-at.mjs.map +1 -1
  206. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  207. package/dist/services/document-service/internationalization.js +37 -28
  208. package/dist/services/document-service/internationalization.js.map +1 -1
  209. package/dist/services/document-service/internationalization.mjs +33 -24
  210. package/dist/services/document-service/internationalization.mjs.map +1 -1
  211. package/dist/services/document-service/params.d.ts +1 -0
  212. package/dist/services/document-service/params.d.ts.map +1 -1
  213. package/dist/services/document-service/params.js +6 -4
  214. package/dist/services/document-service/params.js.map +1 -1
  215. package/dist/services/document-service/params.mjs +6 -5
  216. package/dist/services/document-service/params.mjs.map +1 -1
  217. package/dist/services/document-service/repository.d.ts.map +1 -1
  218. package/dist/services/document-service/repository.js +84 -61
  219. package/dist/services/document-service/repository.js.map +1 -1
  220. package/dist/services/document-service/repository.mjs +47 -24
  221. package/dist/services/document-service/repository.mjs.map +1 -1
  222. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  223. package/dist/services/document-service/transform/id-map.js +2 -1
  224. package/dist/services/document-service/transform/id-map.js.map +1 -1
  225. package/dist/services/document-service/transform/id-map.mjs +2 -1
  226. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  227. package/dist/services/document-service/transform/id-transform.js +2 -2
  228. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  229. package/dist/services/document-service/transform/id-transform.mjs +1 -1
  230. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  231. package/dist/services/document-service/transform/query.d.ts +3 -1
  232. package/dist/services/document-service/transform/query.d.ts.map +1 -1
  233. package/dist/services/document-service/transform/query.js +12 -6
  234. package/dist/services/document-service/transform/query.js.map +1 -1
  235. package/dist/services/document-service/transform/query.mjs +11 -5
  236. package/dist/services/document-service/transform/query.mjs.map +1 -1
  237. package/dist/services/document-service/transform/relations/extract/data-ids.js +2 -2
  238. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  239. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +1 -1
  240. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  241. package/dist/services/document-service/transform/relations/transform/data-ids.js +2 -2
  242. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  243. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +1 -1
  244. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  245. package/dist/services/document-service/transform/relations/transform/default-locale.js +1 -1
  246. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
  247. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +1 -1
  248. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
  249. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  250. package/dist/services/document-service/transform/relations/utils/dp.js +1 -2
  251. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  252. package/dist/services/document-service/transform/relations/utils/dp.mjs +1 -2
  253. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  254. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +2 -2
  255. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  256. package/dist/services/document-service/transform/relations/utils/i18n.js +2 -2
  257. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  258. package/dist/services/document-service/transform/relations/utils/i18n.mjs +2 -2
  259. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  260. package/dist/services/document-service/transform/relations/utils/map-relation.js +6 -6
  261. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  262. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +3 -3
  263. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  264. package/dist/services/document-service/transform/relations/utils/xto-one.js +3 -3
  265. package/dist/services/document-service/transform/relations/utils/xto-one.js.map +1 -1
  266. package/dist/services/document-service/transform/relations/utils/xto-one.mjs +2 -2
  267. package/dist/services/document-service/transform/relations/utils/xto-one.mjs.map +1 -1
  268. package/dist/services/document-service/utils/bidirectional-relations.js +3 -3
  269. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -1
  270. package/dist/services/document-service/utils/bidirectional-relations.mjs +3 -3
  271. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -1
  272. package/dist/services/document-service/utils/clone-relations.js +3 -3
  273. package/dist/services/document-service/utils/clone-relations.js.map +1 -1
  274. package/dist/services/document-service/utils/clone-relations.mjs +3 -3
  275. package/dist/services/document-service/utils/clone-relations.mjs.map +1 -1
  276. package/dist/services/document-service/utils/self-referential-relations.js +4 -4
  277. package/dist/services/document-service/utils/self-referential-relations.js.map +1 -1
  278. package/dist/services/document-service/utils/self-referential-relations.mjs +4 -4
  279. package/dist/services/document-service/utils/self-referential-relations.mjs.map +1 -1
  280. package/dist/services/document-service/utils/unidirectional-relations.js +3 -3
  281. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  282. package/dist/services/document-service/utils/unidirectional-relations.mjs +3 -3
  283. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  284. package/dist/services/entity-validator/index.d.ts.map +1 -1
  285. package/dist/services/entity-validator/index.js +9 -10
  286. package/dist/services/entity-validator/index.js.map +1 -1
  287. package/dist/services/entity-validator/index.mjs +4 -5
  288. package/dist/services/entity-validator/index.mjs.map +1 -1
  289. package/dist/services/localization.d.ts +4 -0
  290. package/dist/services/localization.d.ts.map +1 -0
  291. package/dist/services/localization.js +51 -0
  292. package/dist/services/localization.js.map +1 -0
  293. package/dist/services/localization.mjs +49 -0
  294. package/dist/services/localization.mjs.map +1 -0
  295. package/dist/services/server/compose-endpoint.js +7 -7
  296. package/dist/services/server/compose-endpoint.js.map +1 -1
  297. package/dist/services/server/compose-endpoint.mjs +3 -3
  298. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  299. package/dist/services/server/koa-methods.js +2 -2
  300. package/dist/services/server/koa-methods.js.map +1 -1
  301. package/dist/services/server/koa-methods.mjs +1 -1
  302. package/dist/services/server/koa-methods.mjs.map +1 -1
  303. package/dist/services/server/koa.d.ts.map +1 -1
  304. package/dist/services/server/koa.js +1 -2
  305. package/dist/services/server/koa.js.map +1 -1
  306. package/dist/services/server/koa.mjs +1 -2
  307. package/dist/services/server/koa.mjs.map +1 -1
  308. package/dist/services/server/middleware.d.ts.map +1 -1
  309. package/dist/services/server/middleware.js +1 -2
  310. package/dist/services/server/middleware.js.map +1 -1
  311. package/dist/services/server/middleware.mjs +1 -2
  312. package/dist/services/server/middleware.mjs.map +1 -1
  313. package/dist/services/server/routing.js +2 -2
  314. package/dist/services/server/routing.js.map +1 -1
  315. package/dist/services/server/routing.mjs +2 -2
  316. package/dist/services/server/routing.mjs.map +1 -1
  317. package/dist/services/utils/conditional-fields.d.ts +1 -1
  318. package/dist/services/utils/conditional-fields.d.ts.map +1 -1
  319. package/dist/services/utils/conditional-fields.js +2 -8
  320. package/dist/services/utils/conditional-fields.js.map +1 -1
  321. package/dist/services/utils/conditional-fields.mjs +2 -8
  322. package/dist/services/utils/conditional-fields.mjs.map +1 -1
  323. package/dist/services/utils/dynamic-zones.d.ts.map +1 -1
  324. package/dist/services/utils/dynamic-zones.js +2 -8
  325. package/dist/services/utils/dynamic-zones.js.map +1 -1
  326. package/dist/services/utils/dynamic-zones.mjs +2 -8
  327. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  328. package/dist/utils/cron.js +2 -2
  329. package/dist/utils/cron.js.map +1 -1
  330. package/dist/utils/cron.mjs +1 -1
  331. package/dist/utils/cron.mjs.map +1 -1
  332. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  333. package/dist/utils/filepath-to-prop-path.js +5 -12
  334. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  335. package/dist/utils/filepath-to-prop-path.mjs +5 -11
  336. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  337. package/dist/utils/is-initialized.js +3 -3
  338. package/dist/utils/is-initialized.js.map +1 -1
  339. package/dist/utils/is-initialized.mjs +2 -2
  340. package/dist/utils/is-initialized.mjs.map +1 -1
  341. package/dist/utils/startup-logger.d.ts.map +1 -1
  342. package/dist/utils/startup-logger.js +2 -4
  343. package/dist/utils/startup-logger.js.map +1 -1
  344. package/dist/utils/startup-logger.mjs +2 -3
  345. package/dist/utils/startup-logger.mjs.map +1 -1
  346. package/dist/utils/transform-content-types-to-models.js +4 -4
  347. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  348. package/dist/utils/transform-content-types-to-models.mjs +3 -3
  349. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  350. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"cron.mjs","sources":["../../src/utils/cron.ts"],"sourcesContent":["import { isEmpty, negate } from 'lodash/fp';\n\nconst DATE_FUNCTIONS = [\n 'getSeconds',\n 'getMinutes',\n 'getHours',\n 'getDate',\n 'getMonth',\n 'getDay',\n] as const;\n\nconst INTEGER_REGEX = /^\\d+$/;\nconst STEP_REGEX = /^\\*\\/\\d+$/;\nconst COMPONENTS: {\n limit: number;\n zeroBasedIndices: boolean;\n functionName: (typeof DATE_FUNCTIONS)[number];\n}[] = [\n { limit: 60, zeroBasedIndices: true, functionName: 'getSeconds' },\n { limit: 60, zeroBasedIndices: true, functionName: 'getMinutes' },\n { limit: 24, zeroBasedIndices: true, functionName: 'getHours' },\n { limit: 31, zeroBasedIndices: false, functionName: 'getDate' },\n { limit: 12, zeroBasedIndices: false, functionName: 'getMonth' },\n { limit: 7, zeroBasedIndices: true, functionName: 'getDay' },\n];\n\nconst shift = (component: string, index: number, date: Date) => {\n if (component === '*') {\n return '*';\n }\n\n const { limit, zeroBasedIndices, functionName } = COMPONENTS[index];\n const offset = +!zeroBasedIndices;\n const currentValue = date[functionName]();\n\n if (INTEGER_REGEX.test(component)) {\n return ((Number.parseInt(component, 10) + currentValue) % limit) + offset;\n }\n\n if (STEP_REGEX.test(component)) {\n const [, step] = component.split('/');\n const frequency = Math.floor(limit / Number(step));\n const list = Array.from({ length: frequency }, (_, index) => index * Number(step));\n return list.map((value) => ((value + currentValue) % limit) + offset).sort((a, b) => a - b);\n }\n\n // Unsupported syntax\n return component;\n};\n\n/**\n * Simulate an interval by shifting a cron expression using the specified date.\n * @param {string} rule A cron expression you want to shift.\n * @param {Date} date The date that's gonna be used as the start of the \"interval\", it defaults to now.\n * @returns The shifted cron expression.\n */\nexport const shiftCronExpression = (rule: string, date = new Date()) => {\n const components = rule.trim().split(' ').filter(negate(isEmpty));\n const secondsIncluded = components.length === 6;\n return components\n .map((component, index) => shift(component, secondsIncluded ? index : index + 1, date))\n .join(' ');\n};\n"],"names":["INTEGER_REGEX","STEP_REGEX","COMPONENTS","limit","zeroBasedIndices","functionName","shift","component","index","date","offset","currentValue","test","Number","parseInt","step","split","frequency","Math","floor","list","Array","from","length","_","map","value","sort","a","b","shiftCronExpression","rule","Date","components","trim","filter","negate","isEmpty","secondsIncluded","join"],"mappings":"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"}
1
+ {"version":3,"file":"cron.mjs","sources":["../../src/utils/cron.ts"],"sourcesContent":["import { isEmpty, negate } from 'lodash';\n\nconst DATE_FUNCTIONS = [\n 'getSeconds',\n 'getMinutes',\n 'getHours',\n 'getDate',\n 'getMonth',\n 'getDay',\n] as const;\n\nconst INTEGER_REGEX = /^\\d+$/;\nconst STEP_REGEX = /^\\*\\/\\d+$/;\nconst COMPONENTS: {\n limit: number;\n zeroBasedIndices: boolean;\n functionName: (typeof DATE_FUNCTIONS)[number];\n}[] = [\n { limit: 60, zeroBasedIndices: true, functionName: 'getSeconds' },\n { limit: 60, zeroBasedIndices: true, functionName: 'getMinutes' },\n { limit: 24, zeroBasedIndices: true, functionName: 'getHours' },\n { limit: 31, zeroBasedIndices: false, functionName: 'getDate' },\n { limit: 12, zeroBasedIndices: false, functionName: 'getMonth' },\n { limit: 7, zeroBasedIndices: true, functionName: 'getDay' },\n];\n\nconst shift = (component: string, index: number, date: Date) => {\n if (component === '*') {\n return '*';\n }\n\n const { limit, zeroBasedIndices, functionName } = COMPONENTS[index];\n const offset = +!zeroBasedIndices;\n const currentValue = date[functionName]();\n\n if (INTEGER_REGEX.test(component)) {\n return ((Number.parseInt(component, 10) + currentValue) % limit) + offset;\n }\n\n if (STEP_REGEX.test(component)) {\n const [, step] = component.split('/');\n const frequency = Math.floor(limit / Number(step));\n const list = Array.from({ length: frequency }, (_, index) => index * Number(step));\n return list.map((value) => ((value + currentValue) % limit) + offset).sort((a, b) => a - b);\n }\n\n // Unsupported syntax\n return component;\n};\n\n/**\n * Simulate an interval by shifting a cron expression using the specified date.\n * @param {string} rule A cron expression you want to shift.\n * @param {Date} date The date that's gonna be used as the start of the \"interval\", it defaults to now.\n * @returns The shifted cron expression.\n */\nexport const shiftCronExpression = (rule: string, date = new Date()) => {\n const components = rule.trim().split(' ').filter(negate(isEmpty));\n const secondsIncluded = components.length === 6;\n return components\n .map((component, index) => shift(component, secondsIncluded ? index : index + 1, date))\n .join(' ');\n};\n"],"names":["INTEGER_REGEX","STEP_REGEX","COMPONENTS","limit","zeroBasedIndices","functionName","shift","component","index","date","offset","currentValue","test","Number","parseInt","step","split","frequency","Math","floor","list","Array","from","length","_","map","value","sort","a","b","shiftCronExpression","rule","Date","components","trim","filter","negate","isEmpty","secondsIncluded","join"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"filepath-to-prop-path.d.ts","sourceRoot":"","sources":["../../src/utils/filepath-to-prop-path.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,mBAAkB,OAAc,KAC/B,MAAM,EAqBR,CAAC"}
1
+ {"version":3,"file":"filepath-to-prop-path.d.ts","sourceRoot":"","sources":["../../src/utils/filepath-to-prop-path.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,mBAAkB,OAAc,KAC/B,MAAM,EAaR,CAAC"}
@@ -1,26 +1,19 @@
1
1
  'use strict';
2
2
 
3
3
  var path = require('node:path');
4
- var fp = require('lodash/fp');
4
+ var _ = require('lodash');
5
5
 
6
6
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
7
 
8
8
  var path__default = /*#__PURE__*/_interopDefault(path);
9
- var fp__default = /*#__PURE__*/_interopDefault(fp);
10
9
 
11
10
  /**
12
11
  * Returns a path (as an array) from a file path
13
12
  */ const filePathToPropPath = (entryPath, useFileNameAsKey = true)=>{
14
- const transform = fp__default.default.pipe(// Remove the relative path prefixes: './' for posix (and some win32) and ".\" for win32
15
- removeRelativePrefix, // Remove the path metadata and extensions
16
- fp__default.default.replace(/(\.settings|\.json|\.js)/g, ''), // Transform to lowercase
17
- // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as "/"
18
- fp__default.default.toLower, // Split the cleaned path by matching every possible separator (either "/" or "\" depending on the OS)
19
- fp__default.default.split(new RegExp(`[\\${path__default.default.win32.sep}|${path__default.default.posix.sep}]`, 'g')), // Make sure to remove leading '.' from the different path parts
20
- fp__default.default.map(fp__default.default.trimCharsStart('.')), // join + split in case some '.' characters are still present in different parts of the path
21
- fp__default.default.join('.'), fp__default.default.split('.'), // Remove the last portion of the path array if the file name shouldn't be used as a key
22
- useFileNameAsKey ? fp__default.default.identity : fp__default.default.slice(0, -1));
23
- return transform(entryPath);
13
+ const cleanPath = removeRelativePrefix(entryPath).replace(/(\.settings|\.json|\.js)/g, '').toLowerCase();
14
+ const parts = cleanPath.split(new RegExp(`[\\${path__default.default.win32.sep}|${path__default.default.posix.sep}]`, 'g')).map((part)=>_.trimStart(part, '.'))// Dots can also delimit properties within a path segment.
15
+ .join('.').split('.');
16
+ return useFileNameAsKey ? parts : parts.slice(0, -1);
24
17
  };
25
18
  const removeRelativePrefix = (filePath)=>{
26
19
  return filePath.startsWith(`.${path__default.default.win32.sep}`) || filePath.startsWith(`.${path__default.default.posix.sep}`) ? filePath.slice(2) : filePath;
@@ -1 +1 @@
1
- {"version":3,"file":"filepath-to-prop-path.js","sources":["../../src/utils/filepath-to-prop-path.ts"],"sourcesContent":["import path from 'node:path';\nimport fp from 'lodash/fp';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (\n entryPath: string,\n useFileNameAsKey: boolean = true\n): string[] => {\n const transform = fp.pipe(\n // Remove the relative path prefixes: './' for posix (and some win32) and \".\\\" for win32\n removeRelativePrefix,\n // Remove the path metadata and extensions\n fp.replace(/(\\.settings|\\.json|\\.js)/g, ''),\n // Transform to lowercase\n // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as \"/\"\n fp.toLower,\n // Split the cleaned path by matching every possible separator (either \"/\" or \"\\\" depending on the OS)\n fp.split(new RegExp(`[\\\\${path.win32.sep}|${path.posix.sep}]`, 'g')),\n // Make sure to remove leading '.' from the different path parts\n fp.map(fp.trimCharsStart('.')),\n // join + split in case some '.' characters are still present in different parts of the path\n fp.join('.'),\n fp.split('.'),\n // Remove the last portion of the path array if the file name shouldn't be used as a key\n useFileNameAsKey ? fp.identity : fp.slice(0, -1)\n );\n\n return transform(entryPath) as string[];\n};\n\nconst removeRelativePrefix = (filePath: string) => {\n return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`)\n ? filePath.slice(2)\n : filePath;\n};\n"],"names":["filePathToPropPath","entryPath","useFileNameAsKey","transform","fp","pipe","removeRelativePrefix","replace","toLower","split","RegExp","path","win32","sep","posix","map","trimCharsStart","join","identity","slice","filePath","startsWith"],"mappings":";;;;;;;;;;AAGA;;AAEC,IACM,MAAMA,kBAAAA,GAAqB,CAChCC,SAAAA,EACAC,mBAA4B,IAAI,GAAA;AAEhC,IAAA,MAAMC,SAAAA,GAAYC,mBAAAA,CAAGC,IAAI;AAEvBC,IAAAA,oBAAAA;AAEAF,IAAAA,mBAAAA,CAAGG,OAAO,CAAC,2BAAA,EAA6B,EAAA,CAAA;;IAGxCH,mBAAAA,CAAGI,OAAO;IAEVJ,mBAAAA,CAAGK,KAAK,CAAC,IAAIC,MAAAA,CAAO,CAAC,GAAG,EAAEC,qBAAAA,CAAKC,KAAK,CAACC,GAAG,CAAC,CAAC,EAAEF,qBAAAA,CAAKG,KAAK,CAACD,GAAG,CAAC,CAAC,CAAC,EAAE,GAAA,CAAA,CAAA;AAE/DT,IAAAA,mBAAAA,CAAGW,GAAG,CAACX,mBAAAA,CAAGY,cAAc,CAAC;AAEzBZ,IAAAA,mBAAAA,CAAGa,IAAI,CAAC,GAAA,CAAA,EACRb,oBAAGK,KAAK,CAAC;AAETP,IAAAA,gBAAAA,GAAmBE,oBAAGc,QAAQ,GAAGd,oBAAGe,KAAK,CAAC,GAAG,EAAC,CAAA,CAAA;AAGhD,IAAA,OAAOhB,SAAAA,CAAUF,SAAAA,CAAAA;AACnB;AAEA,MAAMK,uBAAuB,CAACc,QAAAA,GAAAA;IAC5B,OAAOA,QAAAA,CAASC,UAAU,CAAC,CAAC,CAAC,EAAEV,qBAAAA,CAAKC,KAAK,CAACC,GAAG,CAAA,CAAE,CAAA,IAAKO,QAAAA,CAASC,UAAU,CAAC,CAAC,CAAC,EAAEV,qBAAAA,CAAKG,KAAK,CAACD,GAAG,CAAA,CAAE,CAAA,GACxFO,QAAAA,CAASD,KAAK,CAAC,CAAA,CAAA,GACfC,QAAAA;AACN,CAAA;;;;"}
1
+ {"version":3,"file":"filepath-to-prop-path.js","sources":["../../src/utils/filepath-to-prop-path.ts"],"sourcesContent":["import path from 'node:path';\nimport { trimStart } from 'lodash';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (\n entryPath: string,\n useFileNameAsKey: boolean = true\n): string[] => {\n const cleanPath = removeRelativePrefix(entryPath)\n .replace(/(\\.settings|\\.json|\\.js)/g, '')\n .toLowerCase();\n\n const parts = cleanPath\n .split(new RegExp(`[\\\\${path.win32.sep}|${path.posix.sep}]`, 'g'))\n .map((part) => trimStart(part, '.'))\n // Dots can also delimit properties within a path segment.\n .join('.')\n .split('.');\n\n return useFileNameAsKey ? parts : parts.slice(0, -1);\n};\n\nconst removeRelativePrefix = (filePath: string) => {\n return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`)\n ? filePath.slice(2)\n : filePath;\n};\n"],"names":["filePathToPropPath","entryPath","useFileNameAsKey","cleanPath","removeRelativePrefix","replace","toLowerCase","parts","split","RegExp","path","win32","sep","posix","map","part","trimStart","join","slice","filePath","startsWith"],"mappings":";;;;;;;;;AAGA;;AAEC,IACM,MAAMA,kBAAAA,GAAqB,CAChCC,SAAAA,EACAC,mBAA4B,IAAI,GAAA;AAEhC,IAAA,MAAMC,YAAYC,oBAAAA,CAAqBH,SAAAA,CAAAA,CACpCI,OAAO,CAAC,2BAAA,EAA6B,IACrCC,WAAW,EAAA;AAEd,IAAA,MAAMC,KAAAA,GAAQJ,SAAAA,CACXK,KAAK,CAAC,IAAIC,MAAAA,CAAO,CAAC,GAAG,EAAEC,qBAAAA,CAAKC,KAAK,CAACC,GAAG,CAAC,CAAC,EAAEF,qBAAAA,CAAKG,KAAK,CAACD,GAAG,CAAC,CAAC,CAAC,EAAE,GAAA,CAAA,CAAA,CAC5DE,GAAG,CAAC,CAACC,IAAAA,GAASC,WAAAA,CAAUD,IAAAA,EAAM,KAC/B;KACCE,IAAI,CAAC,GAAA,CAAA,CACLT,KAAK,CAAC,GAAA,CAAA;AAET,IAAA,OAAON,mBAAmBK,KAAAA,GAAQA,KAAAA,CAAMW,KAAK,CAAC,GAAG,EAAC,CAAA;AACpD;AAEA,MAAMd,uBAAuB,CAACe,QAAAA,GAAAA;IAC5B,OAAOA,QAAAA,CAASC,UAAU,CAAC,CAAC,CAAC,EAAEV,qBAAAA,CAAKC,KAAK,CAACC,GAAG,CAAA,CAAE,CAAA,IAAKO,QAAAA,CAASC,UAAU,CAAC,CAAC,CAAC,EAAEV,qBAAAA,CAAKG,KAAK,CAACD,GAAG,CAAA,CAAE,CAAA,GACxFO,QAAAA,CAASD,KAAK,CAAC,CAAA,CAAA,GACfC,QAAAA;AACN,CAAA;;;;"}
@@ -1,19 +1,13 @@
1
1
  import path from 'node:path';
2
- import fp from 'lodash/fp';
2
+ import { trimStart } from 'lodash';
3
3
 
4
4
  /**
5
5
  * Returns a path (as an array) from a file path
6
6
  */ const filePathToPropPath = (entryPath, useFileNameAsKey = true)=>{
7
- const transform = fp.pipe(// Remove the relative path prefixes: './' for posix (and some win32) and ".\" for win32
8
- removeRelativePrefix, // Remove the path metadata and extensions
9
- fp.replace(/(\.settings|\.json|\.js)/g, ''), // Transform to lowercase
10
- // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as "/"
11
- fp.toLower, // Split the cleaned path by matching every possible separator (either "/" or "\" depending on the OS)
12
- fp.split(new RegExp(`[\\${path.win32.sep}|${path.posix.sep}]`, 'g')), // Make sure to remove leading '.' from the different path parts
13
- fp.map(fp.trimCharsStart('.')), // join + split in case some '.' characters are still present in different parts of the path
14
- fp.join('.'), fp.split('.'), // Remove the last portion of the path array if the file name shouldn't be used as a key
15
- useFileNameAsKey ? fp.identity : fp.slice(0, -1));
16
- return transform(entryPath);
7
+ const cleanPath = removeRelativePrefix(entryPath).replace(/(\.settings|\.json|\.js)/g, '').toLowerCase();
8
+ const parts = cleanPath.split(new RegExp(`[\\${path.win32.sep}|${path.posix.sep}]`, 'g')).map((part)=>trimStart(part, '.'))// Dots can also delimit properties within a path segment.
9
+ .join('.').split('.');
10
+ return useFileNameAsKey ? parts : parts.slice(0, -1);
17
11
  };
18
12
  const removeRelativePrefix = (filePath)=>{
19
13
  return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`) ? filePath.slice(2) : filePath;
@@ -1 +1 @@
1
- {"version":3,"file":"filepath-to-prop-path.mjs","sources":["../../src/utils/filepath-to-prop-path.ts"],"sourcesContent":["import path from 'node:path';\nimport fp from 'lodash/fp';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (\n entryPath: string,\n useFileNameAsKey: boolean = true\n): string[] => {\n const transform = fp.pipe(\n // Remove the relative path prefixes: './' for posix (and some win32) and \".\\\" for win32\n removeRelativePrefix,\n // Remove the path metadata and extensions\n fp.replace(/(\\.settings|\\.json|\\.js)/g, ''),\n // Transform to lowercase\n // Note: We're using fp.toLower instead of fp.lowercase as the latest removes special characters such as \"/\"\n fp.toLower,\n // Split the cleaned path by matching every possible separator (either \"/\" or \"\\\" depending on the OS)\n fp.split(new RegExp(`[\\\\${path.win32.sep}|${path.posix.sep}]`, 'g')),\n // Make sure to remove leading '.' from the different path parts\n fp.map(fp.trimCharsStart('.')),\n // join + split in case some '.' characters are still present in different parts of the path\n fp.join('.'),\n fp.split('.'),\n // Remove the last portion of the path array if the file name shouldn't be used as a key\n useFileNameAsKey ? fp.identity : fp.slice(0, -1)\n );\n\n return transform(entryPath) as string[];\n};\n\nconst removeRelativePrefix = (filePath: string) => {\n return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`)\n ? filePath.slice(2)\n : filePath;\n};\n"],"names":["filePathToPropPath","entryPath","useFileNameAsKey","transform","fp","pipe","removeRelativePrefix","replace","toLower","split","RegExp","path","win32","sep","posix","map","trimCharsStart","join","identity","slice","filePath","startsWith"],"mappings":";;;AAGA;;AAEC,IACM,MAAMA,kBAAAA,GAAqB,CAChCC,SAAAA,EACAC,mBAA4B,IAAI,GAAA;AAEhC,IAAA,MAAMC,SAAAA,GAAYC,EAAAA,CAAGC,IAAI;AAEvBC,IAAAA,oBAAAA;AAEAF,IAAAA,EAAAA,CAAGG,OAAO,CAAC,2BAAA,EAA6B,EAAA,CAAA;;IAGxCH,EAAAA,CAAGI,OAAO;IAEVJ,EAAAA,CAAGK,KAAK,CAAC,IAAIC,MAAAA,CAAO,CAAC,GAAG,EAAEC,IAAAA,CAAKC,KAAK,CAACC,GAAG,CAAC,CAAC,EAAEF,IAAAA,CAAKG,KAAK,CAACD,GAAG,CAAC,CAAC,CAAC,EAAE,GAAA,CAAA,CAAA;AAE/DT,IAAAA,EAAAA,CAAGW,GAAG,CAACX,EAAAA,CAAGY,cAAc,CAAC;AAEzBZ,IAAAA,EAAAA,CAAGa,IAAI,CAAC,GAAA,CAAA,EACRb,GAAGK,KAAK,CAAC;AAETP,IAAAA,gBAAAA,GAAmBE,GAAGc,QAAQ,GAAGd,GAAGe,KAAK,CAAC,GAAG,EAAC,CAAA,CAAA;AAGhD,IAAA,OAAOhB,SAAAA,CAAUF,SAAAA,CAAAA;AACnB;AAEA,MAAMK,uBAAuB,CAACc,QAAAA,GAAAA;IAC5B,OAAOA,QAAAA,CAASC,UAAU,CAAC,CAAC,CAAC,EAAEV,IAAAA,CAAKC,KAAK,CAACC,GAAG,CAAA,CAAE,CAAA,IAAKO,QAAAA,CAASC,UAAU,CAAC,CAAC,CAAC,EAAEV,IAAAA,CAAKG,KAAK,CAACD,GAAG,CAAA,CAAE,CAAA,GACxFO,QAAAA,CAASD,KAAK,CAAC,CAAA,CAAA,GACfC,QAAAA;AACN,CAAA;;;;"}
1
+ {"version":3,"file":"filepath-to-prop-path.mjs","sources":["../../src/utils/filepath-to-prop-path.ts"],"sourcesContent":["import path from 'node:path';\nimport { trimStart } from 'lodash';\n\n/**\n * Returns a path (as an array) from a file path\n */\nexport const filePathToPropPath = (\n entryPath: string,\n useFileNameAsKey: boolean = true\n): string[] => {\n const cleanPath = removeRelativePrefix(entryPath)\n .replace(/(\\.settings|\\.json|\\.js)/g, '')\n .toLowerCase();\n\n const parts = cleanPath\n .split(new RegExp(`[\\\\${path.win32.sep}|${path.posix.sep}]`, 'g'))\n .map((part) => trimStart(part, '.'))\n // Dots can also delimit properties within a path segment.\n .join('.')\n .split('.');\n\n return useFileNameAsKey ? parts : parts.slice(0, -1);\n};\n\nconst removeRelativePrefix = (filePath: string) => {\n return filePath.startsWith(`.${path.win32.sep}`) || filePath.startsWith(`.${path.posix.sep}`)\n ? filePath.slice(2)\n : filePath;\n};\n"],"names":["filePathToPropPath","entryPath","useFileNameAsKey","cleanPath","removeRelativePrefix","replace","toLowerCase","parts","split","RegExp","path","win32","sep","posix","map","part","trimStart","join","slice","filePath","startsWith"],"mappings":";;;AAGA;;AAEC,IACM,MAAMA,kBAAAA,GAAqB,CAChCC,SAAAA,EACAC,mBAA4B,IAAI,GAAA;AAEhC,IAAA,MAAMC,YAAYC,oBAAAA,CAAqBH,SAAAA,CAAAA,CACpCI,OAAO,CAAC,2BAAA,EAA6B,IACrCC,WAAW,EAAA;AAEd,IAAA,MAAMC,KAAAA,GAAQJ,SAAAA,CACXK,KAAK,CAAC,IAAIC,MAAAA,CAAO,CAAC,GAAG,EAAEC,IAAAA,CAAKC,KAAK,CAACC,GAAG,CAAC,CAAC,EAAEF,IAAAA,CAAKG,KAAK,CAACD,GAAG,CAAC,CAAC,CAAC,EAAE,GAAA,CAAA,CAAA,CAC5DE,GAAG,CAAC,CAACC,IAAAA,GAASC,SAAAA,CAAUD,IAAAA,EAAM,KAC/B;KACCE,IAAI,CAAC,GAAA,CAAA,CACLT,KAAK,CAAC,GAAA,CAAA;AAET,IAAA,OAAON,mBAAmBK,KAAAA,GAAQA,KAAAA,CAAMW,KAAK,CAAC,GAAG,EAAC,CAAA;AACpD;AAEA,MAAMd,uBAAuB,CAACe,QAAAA,GAAAA;IAC5B,OAAOA,QAAAA,CAASC,UAAU,CAAC,CAAC,CAAC,EAAEV,IAAAA,CAAKC,KAAK,CAACC,GAAG,CAAA,CAAE,CAAA,IAAKO,QAAAA,CAASC,UAAU,CAAC,CAAC,CAAC,EAAEV,IAAAA,CAAKG,KAAK,CAACD,GAAG,CAAA,CAAE,CAAA,GACxFO,QAAAA,CAASD,KAAK,CAAC,CAAA,CAAA,GACfC,QAAAA;AACN,CAAA;;;;"}
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var fp = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
 
5
5
  /**
6
6
  * Test if the strapi application is considered as initialized (1st user has been created)
7
7
  */ const isInitialized = async (strapi)=>{
8
8
  try {
9
- if (fp.isEmpty(strapi.admin)) {
9
+ if (_.isEmpty(strapi.admin)) {
10
10
  return true;
11
11
  }
12
12
  // test if there is at least one admin
@@ -15,7 +15,7 @@ var fp = require('lodash/fp');
15
15
  'id'
16
16
  ]
17
17
  });
18
- return !fp.isNil(anyAdministrator);
18
+ return anyAdministrator != null;
19
19
  } catch (err) {
20
20
  strapi.stopWithError(err);
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"is-initialized.js","sources":["../../src/utils/is-initialized.ts"],"sourcesContent":["import { isEmpty, isNil } from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\n/**\n * Test if the strapi application is considered as initialized (1st user has been created)\n */\nexport const isInitialized = async (strapi: Core.Strapi): Promise<boolean> => {\n try {\n if (isEmpty(strapi.admin)) {\n return true;\n }\n\n // test if there is at least one admin\n const anyAdministrator = await strapi.db.query('admin::user').findOne({ select: ['id'] });\n\n return !isNil(anyAdministrator);\n } catch (err) {\n strapi.stopWithError(err);\n }\n};\n"],"names":["isInitialized","strapi","isEmpty","admin","anyAdministrator","db","query","findOne","select","isNil","err","stopWithError"],"mappings":";;;;AAIA;;IAGO,MAAMA,aAAAA,GAAgB,OAAOC,MAAAA,GAAAA;IAClC,IAAI;QACF,IAAIC,UAAAA,CAAQD,MAAAA,CAAOE,KAAK,CAAA,EAAG;YACzB,OAAO,IAAA;AACT,QAAA;;QAGA,MAAMC,gBAAAA,GAAmB,MAAMH,MAAAA,CAAOI,EAAE,CAACC,KAAK,CAAC,aAAA,CAAA,CAAeC,OAAO,CAAC;YAAEC,MAAAA,EAAQ;AAAC,gBAAA;AAAK;AAAC,SAAA,CAAA;AAEvF,QAAA,OAAO,CAACC,QAAAA,CAAML,gBAAAA,CAAAA;AAChB,IAAA,CAAA,CAAE,OAAOM,GAAAA,EAAK;AACZT,QAAAA,MAAAA,CAAOU,aAAa,CAACD,GAAAA,CAAAA;AACvB,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"is-initialized.js","sources":["../../src/utils/is-initialized.ts"],"sourcesContent":["import { isEmpty } from 'lodash';\n\nimport type { Core } from '@strapi/types';\n\n/**\n * Test if the strapi application is considered as initialized (1st user has been created)\n */\nexport const isInitialized = async (strapi: Core.Strapi): Promise<boolean> => {\n try {\n if (isEmpty(strapi.admin)) {\n return true;\n }\n\n // test if there is at least one admin\n const anyAdministrator = await strapi.db.query('admin::user').findOne({ select: ['id'] });\n\n return anyAdministrator != null;\n } catch (err) {\n strapi.stopWithError(err);\n }\n};\n"],"names":["isInitialized","strapi","isEmpty","admin","anyAdministrator","db","query","findOne","select","err","stopWithError"],"mappings":";;;;AAIA;;IAGO,MAAMA,aAAAA,GAAgB,OAAOC,MAAAA,GAAAA;IAClC,IAAI;QACF,IAAIC,SAAAA,CAAQD,MAAAA,CAAOE,KAAK,CAAA,EAAG;YACzB,OAAO,IAAA;AACT,QAAA;;QAGA,MAAMC,gBAAAA,GAAmB,MAAMH,MAAAA,CAAOI,EAAE,CAACC,KAAK,CAAC,aAAA,CAAA,CAAeC,OAAO,CAAC;YAAEC,MAAAA,EAAQ;AAAC,gBAAA;AAAK;AAAC,SAAA,CAAA;AAEvF,QAAA,OAAOJ,gBAAAA,IAAoB,IAAA;AAC7B,IAAA,CAAA,CAAE,OAAOK,GAAAA,EAAK;AACZR,QAAAA,MAAAA,CAAOS,aAAa,CAACD,GAAAA,CAAAA;AACvB,IAAA;AACF;;;;"}
@@ -1,4 +1,4 @@
1
- import { isEmpty, isNil } from 'lodash/fp';
1
+ import { isEmpty } from 'lodash';
2
2
 
3
3
  /**
4
4
  * Test if the strapi application is considered as initialized (1st user has been created)
@@ -13,7 +13,7 @@ import { isEmpty, isNil } from 'lodash/fp';
13
13
  'id'
14
14
  ]
15
15
  });
16
- return !isNil(anyAdministrator);
16
+ return anyAdministrator != null;
17
17
  } catch (err) {
18
18
  strapi.stopWithError(err);
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"is-initialized.mjs","sources":["../../src/utils/is-initialized.ts"],"sourcesContent":["import { isEmpty, isNil } from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\n/**\n * Test if the strapi application is considered as initialized (1st user has been created)\n */\nexport const isInitialized = async (strapi: Core.Strapi): Promise<boolean> => {\n try {\n if (isEmpty(strapi.admin)) {\n return true;\n }\n\n // test if there is at least one admin\n const anyAdministrator = await strapi.db.query('admin::user').findOne({ select: ['id'] });\n\n return !isNil(anyAdministrator);\n } catch (err) {\n strapi.stopWithError(err);\n }\n};\n"],"names":["isInitialized","strapi","isEmpty","admin","anyAdministrator","db","query","findOne","select","isNil","err","stopWithError"],"mappings":";;AAIA;;IAGO,MAAMA,aAAAA,GAAgB,OAAOC,MAAAA,GAAAA;IAClC,IAAI;QACF,IAAIC,OAAAA,CAAQD,MAAAA,CAAOE,KAAK,CAAA,EAAG;YACzB,OAAO,IAAA;AACT,QAAA;;QAGA,MAAMC,gBAAAA,GAAmB,MAAMH,MAAAA,CAAOI,EAAE,CAACC,KAAK,CAAC,aAAA,CAAA,CAAeC,OAAO,CAAC;YAAEC,MAAAA,EAAQ;AAAC,gBAAA;AAAK;AAAC,SAAA,CAAA;AAEvF,QAAA,OAAO,CAACC,KAAAA,CAAML,gBAAAA,CAAAA;AAChB,IAAA,CAAA,CAAE,OAAOM,GAAAA,EAAK;AACZT,QAAAA,MAAAA,CAAOU,aAAa,CAACD,GAAAA,CAAAA;AACvB,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"is-initialized.mjs","sources":["../../src/utils/is-initialized.ts"],"sourcesContent":["import { isEmpty } from 'lodash';\n\nimport type { Core } from '@strapi/types';\n\n/**\n * Test if the strapi application is considered as initialized (1st user has been created)\n */\nexport const isInitialized = async (strapi: Core.Strapi): Promise<boolean> => {\n try {\n if (isEmpty(strapi.admin)) {\n return true;\n }\n\n // test if there is at least one admin\n const anyAdministrator = await strapi.db.query('admin::user').findOne({ select: ['id'] });\n\n return anyAdministrator != null;\n } catch (err) {\n strapi.stopWithError(err);\n }\n};\n"],"names":["isInitialized","strapi","isEmpty","admin","anyAdministrator","db","query","findOne","select","err","stopWithError"],"mappings":";;AAIA;;IAGO,MAAMA,aAAAA,GAAgB,OAAOC,MAAAA,GAAAA;IAClC,IAAI;QACF,IAAIC,OAAAA,CAAQD,MAAAA,CAAOE,KAAK,CAAA,EAAG;YACzB,OAAO,IAAA;AACT,QAAA;;QAGA,MAAMC,gBAAAA,GAAmB,MAAMH,MAAAA,CAAOI,EAAE,CAACC,KAAK,CAAC,aAAA,CAAA,CAAeC,OAAO,CAAC;YAAEC,MAAAA,EAAQ;AAAC,gBAAA;AAAK;AAAC,SAAA,CAAA;AAEvF,QAAA,OAAOJ,gBAAAA,IAAoB,IAAA;AAC7B,IAAA,CAAA,CAAE,OAAOK,GAAAA,EAAK;AACZR,QAAAA,MAAAA,CAAOS,aAAa,CAACD,GAAAA,CAAAA;AACvB,IAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"startup-logger.d.ts","sourceRoot":"","sources":["../../src/utils/startup-logger.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAoB1C,eAAO,MAAM,mBAAmB,GAAI,KAAK,IAAI,CAAC,MAAM;;;;yCAuFX;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE;CAWlE,CAAC"}
1
+ {"version":3,"file":"startup-logger.d.ts","sourceRoot":"","sources":["../../src/utils/startup-logger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAoB1C,eAAO,MAAM,mBAAmB,GAAI,KAAK,IAAI,CAAC,MAAM;;;;yCAuFX;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE;CAWlE,CAAC"}
@@ -2,13 +2,11 @@
2
2
 
3
3
  var chalk = require('chalk');
4
4
  var CLITable = require('cli-table3');
5
- var fp = require('lodash/fp');
6
5
 
7
6
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
7
 
9
8
  var chalk__default = /*#__PURE__*/_interopDefault(chalk);
10
9
  var CLITable__default = /*#__PURE__*/_interopDefault(CLITable);
11
- var fp__default = /*#__PURE__*/_interopDefault(fp);
12
10
 
13
11
  const ROUNDED_CHARS = {
14
12
  top: '─',
@@ -32,7 +30,7 @@ const createStartupLogger = (app)=>{
32
30
  logStats () {
33
31
  const columns = Math.min(process.stderr.columns, 80) - 2;
34
32
  console.log();
35
- console.log(chalk__default.default.black.bgWhite(fp__default.default.padEnd(columns, ' Project information')));
33
+ console.log(chalk__default.default.black.bgWhite(' Project information'.padEnd(columns)));
36
34
  console.log();
37
35
  const infoTable = new CLITable__default.default({
38
36
  colWidths: [
@@ -81,7 +79,7 @@ const createStartupLogger = (app)=>{
81
79
  }
82
80
  console.log(infoTable.toString());
83
81
  console.log();
84
- console.log(chalk__default.default.black.bgWhite(fp__default.default.padEnd(columns, ' Actions available')));
82
+ console.log(chalk__default.default.black.bgWhite(' Actions available'.padEnd(columns)));
85
83
  console.log();
86
84
  },
87
85
  logFirstStartupMessage () {
@@ -1 +1 @@
1
- {"version":3,"file":"startup-logger.js","sources":["../../src/utils/startup-logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport CLITable from 'cli-table3';\nimport _ from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\nconst ROUNDED_CHARS = {\n top: '─',\n 'top-mid': '┬',\n 'top-left': '╭',\n 'top-right': '╮',\n bottom: '─',\n 'bottom-mid': '┴',\n 'bottom-left': '╰',\n 'bottom-right': '╯',\n left: '│',\n right: '│',\n middle: '│',\n mid: '',\n 'left-mid': '',\n 'mid-mid': '',\n 'right-mid': '',\n};\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Project information')));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: ROUNDED_CHARS,\n });\n\n const dbInfo = app.db?.getInfo();\n\n const getPlan = () => {\n if (!app.EE) {\n return 'Community';\n }\n\n return app.ee.planPriceId?.toLowerCase().includes('growth') ? 'Growth' : 'Enterprise';\n };\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Plan'), getPlan()],\n [chalk.blue('Database'), dbInfo?.client],\n [chalk.blue('Database name'), dbInfo?.displayName]\n );\n\n if (dbInfo?.schema) {\n infoTable.push([chalk.blue('Database schema'), dbInfo.schema]);\n }\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Actions available')));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n"],"names":["ROUNDED_CHARS","top","bottom","left","right","middle","mid","createStartupLogger","app","logStats","columns","Math","min","process","stderr","console","log","chalk","black","bgWhite","_","padEnd","infoTable","CLITable","colWidths","chars","dbInfo","db","getInfo","getPlan","EE","ee","planPriceId","toLowerCase","includes","push","blue","Date","now","config","launchedAt","environment","pid","info","strapi","version","client","displayName","schema","toString","logFirstStartupMessage","get","bold","grey","addressTable","adminUrl","logDefaultStartupMessage","serverUrl","logStartupMessage","isInitialized"],"mappings":"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"}
1
+ {"version":3,"file":"startup-logger.js","sources":["../../src/utils/startup-logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport CLITable from 'cli-table3';\n\nimport type { Core } from '@strapi/types';\n\nconst ROUNDED_CHARS = {\n top: '─',\n 'top-mid': '┬',\n 'top-left': '╭',\n 'top-right': '╮',\n bottom: '─',\n 'bottom-mid': '┴',\n 'bottom-left': '╰',\n 'bottom-right': '╯',\n left: '│',\n right: '│',\n middle: '│',\n mid: '',\n 'left-mid': '',\n 'mid-mid': '',\n 'right-mid': '',\n};\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(' Project information'.padEnd(columns)));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: ROUNDED_CHARS,\n });\n\n const dbInfo = app.db?.getInfo();\n\n const getPlan = () => {\n if (!app.EE) {\n return 'Community';\n }\n\n return app.ee.planPriceId?.toLowerCase().includes('growth') ? 'Growth' : 'Enterprise';\n };\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Plan'), getPlan()],\n [chalk.blue('Database'), dbInfo?.client],\n [chalk.blue('Database name'), dbInfo?.displayName]\n );\n\n if (dbInfo?.schema) {\n infoTable.push([chalk.blue('Database schema'), dbInfo.schema]);\n }\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(' Actions available'.padEnd(columns)));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n"],"names":["ROUNDED_CHARS","top","bottom","left","right","middle","mid","createStartupLogger","app","logStats","columns","Math","min","process","stderr","console","log","chalk","black","bgWhite","padEnd","infoTable","CLITable","colWidths","chars","dbInfo","db","getInfo","getPlan","EE","ee","planPriceId","toLowerCase","includes","push","blue","Date","now","config","launchedAt","environment","pid","info","strapi","version","client","displayName","schema","toString","logFirstStartupMessage","get","bold","grey","addressTable","adminUrl","logDefaultStartupMessage","serverUrl","logStartupMessage","isInitialized"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import chalk from 'chalk';
2
2
  import CLITable from 'cli-table3';
3
- import fp from 'lodash/fp';
4
3
 
5
4
  const ROUNDED_CHARS = {
6
5
  top: '─',
@@ -24,7 +23,7 @@ const createStartupLogger = (app)=>{
24
23
  logStats () {
25
24
  const columns = Math.min(process.stderr.columns, 80) - 2;
26
25
  console.log();
27
- console.log(chalk.black.bgWhite(fp.padEnd(columns, ' Project information')));
26
+ console.log(chalk.black.bgWhite(' Project information'.padEnd(columns)));
28
27
  console.log();
29
28
  const infoTable = new CLITable({
30
29
  colWidths: [
@@ -73,7 +72,7 @@ const createStartupLogger = (app)=>{
73
72
  }
74
73
  console.log(infoTable.toString());
75
74
  console.log();
76
- console.log(chalk.black.bgWhite(fp.padEnd(columns, ' Actions available')));
75
+ console.log(chalk.black.bgWhite(' Actions available'.padEnd(columns)));
77
76
  console.log();
78
77
  },
79
78
  logFirstStartupMessage () {
@@ -1 +1 @@
1
- {"version":3,"file":"startup-logger.mjs","sources":["../../src/utils/startup-logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport CLITable from 'cli-table3';\nimport _ from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\n\nconst ROUNDED_CHARS = {\n top: '─',\n 'top-mid': '┬',\n 'top-left': '╭',\n 'top-right': '╮',\n bottom: '─',\n 'bottom-mid': '┴',\n 'bottom-left': '╰',\n 'bottom-right': '╯',\n left: '│',\n right: '│',\n middle: '│',\n mid: '',\n 'left-mid': '',\n 'mid-mid': '',\n 'right-mid': '',\n};\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Project information')));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: ROUNDED_CHARS,\n });\n\n const dbInfo = app.db?.getInfo();\n\n const getPlan = () => {\n if (!app.EE) {\n return 'Community';\n }\n\n return app.ee.planPriceId?.toLowerCase().includes('growth') ? 'Growth' : 'Enterprise';\n };\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Plan'), getPlan()],\n [chalk.blue('Database'), dbInfo?.client],\n [chalk.blue('Database name'), dbInfo?.displayName]\n );\n\n if (dbInfo?.schema) {\n infoTable.push([chalk.blue('Database schema'), dbInfo.schema]);\n }\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(_.padEnd(columns, ' Actions available')));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n"],"names":["ROUNDED_CHARS","top","bottom","left","right","middle","mid","createStartupLogger","app","logStats","columns","Math","min","process","stderr","console","log","chalk","black","bgWhite","_","padEnd","infoTable","CLITable","colWidths","chars","dbInfo","db","getInfo","getPlan","EE","ee","planPriceId","toLowerCase","includes","push","blue","Date","now","config","launchedAt","environment","pid","info","strapi","version","client","displayName","schema","toString","logFirstStartupMessage","get","bold","grey","addressTable","adminUrl","logDefaultStartupMessage","serverUrl","logStartupMessage","isInitialized"],"mappings":"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"}
1
+ {"version":3,"file":"startup-logger.mjs","sources":["../../src/utils/startup-logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport CLITable from 'cli-table3';\n\nimport type { Core } from '@strapi/types';\n\nconst ROUNDED_CHARS = {\n top: '─',\n 'top-mid': '┬',\n 'top-left': '╭',\n 'top-right': '╮',\n bottom: '─',\n 'bottom-mid': '┴',\n 'bottom-left': '╰',\n 'bottom-right': '╯',\n left: '│',\n right: '│',\n middle: '│',\n mid: '',\n 'left-mid': '',\n 'mid-mid': '',\n 'right-mid': '',\n};\n\nexport const createStartupLogger = (app: Core.Strapi) => {\n return {\n logStats() {\n const columns = Math.min(process.stderr.columns, 80) - 2;\n console.log();\n console.log(chalk.black.bgWhite(' Project information'.padEnd(columns)));\n console.log();\n\n const infoTable = new CLITable({\n colWidths: [20, 50],\n chars: ROUNDED_CHARS,\n });\n\n const dbInfo = app.db?.getInfo();\n\n const getPlan = () => {\n if (!app.EE) {\n return 'Community';\n }\n\n return app.ee.planPriceId?.toLowerCase().includes('growth') ? 'Growth' : 'Enterprise';\n };\n\n infoTable.push(\n [chalk.blue('Time'), `${new Date()}`],\n [chalk.blue('Launched in'), `${Date.now() - app.config.launchedAt} ms`],\n [chalk.blue('Environment'), app.config.environment],\n [chalk.blue('Process PID'), process.pid],\n [chalk.blue('Version'), `${app.config.info.strapi} (node ${process.version})`],\n [chalk.blue('Plan'), getPlan()],\n [chalk.blue('Database'), dbInfo?.client],\n [chalk.blue('Database name'), dbInfo?.displayName]\n );\n\n if (dbInfo?.schema) {\n infoTable.push([chalk.blue('Database schema'), dbInfo.schema]);\n }\n\n console.log(infoTable.toString());\n console.log();\n console.log(chalk.black.bgWhite(' Actions available'.padEnd(columns)));\n console.log();\n },\n\n logFirstStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n\n this.logStats();\n\n console.log(chalk.bold('One more thing...'));\n console.log(\n chalk.grey('Create your first administrator 💻 by going to the administration panel at:')\n );\n console.log();\n\n const addressTable = new CLITable();\n\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n addressTable.push([chalk.bold(adminUrl)]);\n\n console.log(`${addressTable.toString()}`);\n console.log();\n },\n\n logDefaultStartupMessage() {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n this.logStats();\n\n console.log(chalk.bold('Welcome back!'));\n\n if (app.config.get('admin.serveAdminPanel') === true) {\n console.log(chalk.grey('To manage your project 🚀, go to the administration panel at:'));\n const adminUrl = strapi.config.get('admin.absoluteUrl');\n console.log(chalk.bold(adminUrl));\n console.log();\n }\n\n console.log(chalk.grey('To access the server ⚡️, go to:'));\n const serverUrl = strapi.config.get('server.absoluteUrl');\n console.log(chalk.bold(serverUrl));\n console.log();\n },\n\n logStartupMessage({ isInitialized }: { isInitialized: boolean }) {\n if (!strapi.config.get('server.logger.startup.enabled')) {\n return;\n }\n if (!isInitialized) {\n this.logFirstStartupMessage();\n } else {\n this.logDefaultStartupMessage();\n }\n },\n };\n};\n"],"names":["ROUNDED_CHARS","top","bottom","left","right","middle","mid","createStartupLogger","app","logStats","columns","Math","min","process","stderr","console","log","chalk","black","bgWhite","padEnd","infoTable","CLITable","colWidths","chars","dbInfo","db","getInfo","getPlan","EE","ee","planPriceId","toLowerCase","includes","push","blue","Date","now","config","launchedAt","environment","pid","info","strapi","version","client","displayName","schema","toString","logFirstStartupMessage","get","bold","grey","addressTable","adminUrl","logDefaultStartupMessage","serverUrl","logStartupMessage","isInitialized"],"mappings":"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"}
@@ -2,12 +2,12 @@
2
2
 
3
3
  var cuid2 = require('@paralleldrive/cuid2');
4
4
  var assert = require('node:assert');
5
- var fp = require('lodash/fp');
5
+ var _ = require('lodash');
6
6
 
7
7
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
8
 
9
9
  var assert__default = /*#__PURE__*/_interopDefault(assert);
10
- var fp__default = /*#__PURE__*/_interopDefault(fp);
10
+ var ___default = /*#__PURE__*/_interopDefault(_);
11
11
 
12
12
  /**
13
13
  * Because strapi/database models don't know about things like components or dynamic zones, we use this file to convert them
@@ -321,7 +321,7 @@ const transformContentTypesToModels = (contentTypes, identifiers)=>{
321
321
  identifiers.ID_COLUMN
322
322
  ];
323
323
  Object.keys(contentType.attributes || {}).forEach((attributeName)=>{
324
- const snakeCasedAttributeName = fp__default.default.snakeCase(attributeName);
324
+ const snakeCasedAttributeName = ___default.default.snakeCase(attributeName);
325
325
  if (reservedAttributeNames.includes(snakeCasedAttributeName)) {
326
326
  throw new Error(`The attribute "${attributeName}" is reserved and cannot be used in a model. Please rename "${contentType.modelName}" attribute "${attributeName}" to something else.`);
327
327
  }
@@ -363,7 +363,7 @@ const transformContentTypesToModels = (contentTypes, identifiers)=>{
363
363
  'documentId',
364
364
  'locale',
365
365
  'publishedAt'
366
- ].filter((n)=>model.attributes[n]).map((name)=>identifiers.getColumnName(fp__default.default.snakeCase(name)))
366
+ ].filter((n)=>model.attributes[n]).map((name)=>identifiers.getColumnName(___default.default.snakeCase(name)))
367
367
  }
368
368
  ];
369
369
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transform-content-types-to-models.js","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 // Document lookups: secondary btree index declared here so syncSchema owns it\n // (instead of DDL in internal migration `5.0.0-06-add-document-id-indexes`, now a no-op).\n // Keep the exact same name/columns schema sync already produced so existing databases\n // see no index diff on upgrade (a rename would orphan the old index, since the schema\n // builder's dropIndex is a silent no-op unless forceMigration is enabled).\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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"}
1
+ {"version":3,"file":"transform-content-types-to-models.js","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';\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 // Document lookups: secondary btree index declared here so syncSchema owns it\n // (instead of DDL in internal migration `5.0.0-06-add-document-id-indexes`, now a no-op).\n // Keep the exact same name/columns schema sync already produced so existing databases\n // see no index diff on upgrade (a rename would orphan the old index, since the schema\n // builder's dropIndex is a silent no-op unless forceMigration is enabled).\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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"}
@@ -1,6 +1,6 @@
1
1
  import { createId } from '@paralleldrive/cuid2';
2
2
  import assert from 'node:assert';
3
- import fp from 'lodash/fp';
3
+ import _ from 'lodash';
4
4
 
5
5
  /**
6
6
  * Because strapi/database models don't know about things like components or dynamic zones, we use this file to convert them
@@ -314,7 +314,7 @@ const transformContentTypesToModels = (contentTypes, identifiers)=>{
314
314
  identifiers.ID_COLUMN
315
315
  ];
316
316
  Object.keys(contentType.attributes || {}).forEach((attributeName)=>{
317
- const snakeCasedAttributeName = fp.snakeCase(attributeName);
317
+ const snakeCasedAttributeName = _.snakeCase(attributeName);
318
318
  if (reservedAttributeNames.includes(snakeCasedAttributeName)) {
319
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
320
  }
@@ -356,7 +356,7 @@ const transformContentTypesToModels = (contentTypes, identifiers)=>{
356
356
  'documentId',
357
357
  'locale',
358
358
  'publishedAt'
359
- ].filter((n)=>model.attributes[n]).map((name)=>identifiers.getColumnName(fp.snakeCase(name)))
359
+ ].filter((n)=>model.attributes[n]).map((name)=>identifiers.getColumnName(_.snakeCase(name)))
360
360
  }
361
361
  ];
362
362
  }