@strapi/core 0.0.0-experimental.580ff744b0b1df648d5a65092d9bc91fd5430329 → 0.0.0-experimental.58c6b635911a7cb83cd165b4e5abd75b8ec30893

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (330) hide show
  1. package/LICENSE +18 -3
  2. package/dist/Strapi.d.ts +3 -1
  3. package/dist/Strapi.d.ts.map +1 -1
  4. package/dist/Strapi.js +90 -34
  5. package/dist/Strapi.js.map +1 -1
  6. package/dist/Strapi.mjs +66 -32
  7. package/dist/Strapi.mjs.map +1 -1
  8. package/dist/configuration/get-dirs.js +2 -2
  9. package/dist/configuration/get-dirs.js.map +1 -1
  10. package/dist/configuration/index.js +2 -2
  11. package/dist/configuration/index.js.map +1 -1
  12. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  13. package/dist/core-api/controller/collection-type.js +5 -3
  14. package/dist/core-api/controller/collection-type.js.map +1 -1
  15. package/dist/core-api/controller/collection-type.mjs +2 -0
  16. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  17. package/dist/core-api/controller/index.js +2 -2
  18. package/dist/core-api/controller/index.js.map +1 -1
  19. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  20. package/dist/core-api/controller/single-type.js +3 -2
  21. package/dist/core-api/controller/single-type.js.map +1 -1
  22. package/dist/core-api/controller/single-type.mjs +1 -0
  23. package/dist/core-api/controller/single-type.mjs.map +1 -1
  24. package/dist/core-api/controller/transform.js +8 -8
  25. package/dist/core-api/controller/transform.js.map +1 -1
  26. package/dist/core-api/service/collection-type.d.ts +3 -9
  27. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  28. package/dist/core-api/service/collection-type.js +5 -3
  29. package/dist/core-api/service/collection-type.js.map +1 -1
  30. package/dist/core-api/service/collection-type.mjs +6 -4
  31. package/dist/core-api/service/collection-type.mjs.map +1 -1
  32. package/dist/core-api/service/pagination.d.ts +4 -11
  33. package/dist/core-api/service/pagination.d.ts.map +1 -1
  34. package/dist/core-api/service/pagination.js +18 -44
  35. package/dist/core-api/service/pagination.js.map +1 -1
  36. package/dist/core-api/service/pagination.mjs +16 -42
  37. package/dist/core-api/service/pagination.mjs.map +1 -1
  38. package/dist/core-api/service/single-type.d.ts.map +1 -1
  39. package/dist/core-api/service/single-type.js +2 -1
  40. package/dist/core-api/service/single-type.js.map +1 -1
  41. package/dist/core-api/service/single-type.mjs +2 -1
  42. package/dist/core-api/service/single-type.mjs.map +1 -1
  43. package/dist/domain/content-type/index.js +4 -4
  44. package/dist/domain/content-type/index.js.map +1 -1
  45. package/dist/ee/index.d.ts.map +1 -1
  46. package/dist/ee/index.js +9 -4
  47. package/dist/ee/index.js.map +1 -1
  48. package/dist/ee/index.mjs +6 -1
  49. package/dist/ee/index.mjs.map +1 -1
  50. package/dist/factories.js +4 -4
  51. package/dist/factories.js.map +1 -1
  52. package/dist/factories.mjs.map +1 -1
  53. package/dist/index.d.ts +14 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/index.mjs.map +1 -1
  57. package/dist/loaders/apis.d.ts.map +1 -1
  58. package/dist/loaders/apis.js +12 -12
  59. package/dist/loaders/apis.js.map +1 -1
  60. package/dist/loaders/apis.mjs +10 -10
  61. package/dist/loaders/apis.mjs.map +1 -1
  62. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  63. package/dist/loaders/plugins/get-enabled-plugins.js +45 -17
  64. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  65. package/dist/loaders/plugins/get-enabled-plugins.mjs +15 -9
  66. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  67. package/dist/loaders/plugins/get-user-plugins-config.js +2 -2
  68. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  69. package/dist/loaders/plugins/index.d.ts.map +1 -1
  70. package/dist/loaders/plugins/index.js +34 -7
  71. package/dist/loaders/plugins/index.js.map +1 -1
  72. package/dist/loaders/plugins/index.mjs +9 -1
  73. package/dist/loaders/plugins/index.mjs.map +1 -1
  74. package/dist/middlewares/body.js +2 -2
  75. package/dist/middlewares/body.js.map +1 -1
  76. package/dist/middlewares/cors.d.ts.map +1 -1
  77. package/dist/middlewares/cors.js +9 -7
  78. package/dist/middlewares/cors.js.map +1 -1
  79. package/dist/middlewares/cors.mjs +9 -7
  80. package/dist/middlewares/cors.mjs.map +1 -1
  81. package/dist/middlewares/public.js +2 -2
  82. package/dist/middlewares/public.js.map +1 -1
  83. package/dist/middlewares/query.d.ts.map +1 -1
  84. package/dist/middlewares/query.js.map +1 -1
  85. package/dist/middlewares/query.mjs.map +1 -1
  86. package/dist/middlewares/responses.js +2 -2
  87. package/dist/middlewares/responses.js.map +1 -1
  88. package/dist/middlewares/security.d.ts.map +1 -1
  89. package/dist/middlewares/security.js +12 -5
  90. package/dist/middlewares/security.js.map +1 -1
  91. package/dist/middlewares/security.mjs +11 -4
  92. package/dist/middlewares/security.mjs.map +1 -1
  93. package/dist/middlewares/session.js +2 -2
  94. package/dist/middlewares/session.js.map +1 -1
  95. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +27 -6
  96. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
  97. package/dist/migrations/database/5.0.0-discard-drafts.js +67 -10
  98. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  99. package/dist/migrations/database/5.0.0-discard-drafts.mjs +69 -12
  100. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  101. package/dist/migrations/draft-publish.d.ts +1 -1
  102. package/dist/migrations/draft-publish.d.ts.map +1 -1
  103. package/dist/migrations/draft-publish.js +14 -31
  104. package/dist/migrations/draft-publish.js.map +1 -1
  105. package/dist/migrations/draft-publish.mjs +15 -32
  106. package/dist/migrations/draft-publish.mjs.map +1 -1
  107. package/dist/migrations/i18n.d.ts +5 -0
  108. package/dist/migrations/i18n.d.ts.map +1 -0
  109. package/dist/migrations/i18n.js +54 -0
  110. package/dist/migrations/i18n.js.map +1 -0
  111. package/dist/migrations/i18n.mjs +54 -0
  112. package/dist/migrations/i18n.mjs.map +1 -0
  113. package/dist/migrations/index.d.ts +5 -0
  114. package/dist/migrations/index.d.ts.map +1 -0
  115. package/dist/migrations/index.js +15 -0
  116. package/dist/migrations/index.js.map +1 -0
  117. package/dist/migrations/index.mjs +15 -0
  118. package/dist/migrations/index.mjs.map +1 -0
  119. package/dist/providers/admin.d.ts.map +1 -1
  120. package/dist/providers/admin.js.map +1 -1
  121. package/dist/providers/admin.mjs.map +1 -1
  122. package/dist/providers/registries.js +3 -3
  123. package/dist/providers/registries.js.map +1 -1
  124. package/dist/providers/registries.mjs +3 -3
  125. package/dist/providers/registries.mjs.map +1 -1
  126. package/dist/registries/apis.js +2 -2
  127. package/dist/registries/apis.js.map +1 -1
  128. package/dist/registries/components.js +2 -2
  129. package/dist/registries/components.js.map +1 -1
  130. package/dist/registries/content-types.js +3 -3
  131. package/dist/registries/content-types.js.map +1 -1
  132. package/dist/registries/controllers.js +3 -3
  133. package/dist/registries/controllers.js.map +1 -1
  134. package/dist/registries/custom-fields.js +4 -4
  135. package/dist/registries/custom-fields.js.map +1 -1
  136. package/dist/registries/hooks.js +2 -2
  137. package/dist/registries/hooks.js.map +1 -1
  138. package/dist/registries/middlewares.js +3 -3
  139. package/dist/registries/middlewares.js.map +1 -1
  140. package/dist/registries/modules.js +3 -3
  141. package/dist/registries/modules.js.map +1 -1
  142. package/dist/registries/plugins.js +2 -2
  143. package/dist/registries/plugins.js.map +1 -1
  144. package/dist/registries/policies.d.ts +1 -1
  145. package/dist/registries/policies.d.ts.map +1 -1
  146. package/dist/registries/policies.js +5 -5
  147. package/dist/registries/policies.js.map +1 -1
  148. package/dist/registries/policies.mjs +1 -1
  149. package/dist/registries/policies.mjs.map +1 -1
  150. package/dist/registries/services.js +3 -3
  151. package/dist/registries/services.js.map +1 -1
  152. package/dist/services/auth/index.js +3 -3
  153. package/dist/services/auth/index.js.map +1 -1
  154. package/dist/services/content-api/index.d.ts +10 -12
  155. package/dist/services/content-api/index.d.ts.map +1 -1
  156. package/dist/services/content-api/permissions/index.d.ts +10 -12
  157. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  158. package/dist/services/content-api/permissions/providers/action.d.ts +5 -6
  159. package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
  160. package/dist/services/content-api/permissions/providers/condition.d.ts +5 -6
  161. package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
  162. package/dist/services/core-store.js +3 -3
  163. package/dist/services/core-store.js.map +1 -1
  164. package/dist/services/cron.d.ts +3 -3
  165. package/dist/services/cron.d.ts.map +1 -1
  166. package/dist/services/cron.js +12 -7
  167. package/dist/services/cron.js.map +1 -1
  168. package/dist/services/cron.mjs +9 -4
  169. package/dist/services/cron.mjs.map +1 -1
  170. package/dist/services/document-service/attributes/index.js +2 -2
  171. package/dist/services/document-service/attributes/index.js.map +1 -1
  172. package/dist/services/document-service/attributes/transforms.js +3 -3
  173. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  174. package/dist/services/document-service/common.d.ts +1 -1
  175. package/dist/services/document-service/common.d.ts.map +1 -1
  176. package/dist/services/document-service/common.js.map +1 -1
  177. package/dist/services/document-service/common.mjs.map +1 -1
  178. package/dist/services/document-service/components.js +15 -15
  179. package/dist/services/document-service/components.js.map +1 -1
  180. package/dist/services/document-service/draft-and-publish.js +16 -16
  181. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  182. package/dist/services/document-service/entries.d.ts +3 -3
  183. package/dist/services/document-service/entries.d.ts.map +1 -1
  184. package/dist/services/document-service/entries.js +13 -13
  185. package/dist/services/document-service/entries.js.map +1 -1
  186. package/dist/services/document-service/entries.mjs +3 -3
  187. package/dist/services/document-service/entries.mjs.map +1 -1
  188. package/dist/services/document-service/events.d.ts +25 -0
  189. package/dist/services/document-service/events.d.ts.map +1 -0
  190. package/dist/services/document-service/events.js +47 -0
  191. package/dist/services/document-service/events.js.map +1 -0
  192. package/dist/services/document-service/events.mjs +47 -0
  193. package/dist/services/document-service/events.mjs.map +1 -0
  194. package/dist/services/document-service/index.d.ts +2 -1
  195. package/dist/services/document-service/index.d.ts.map +1 -1
  196. package/dist/services/document-service/index.js +3 -2
  197. package/dist/services/document-service/index.js.map +1 -1
  198. package/dist/services/document-service/index.mjs +3 -2
  199. package/dist/services/document-service/index.mjs.map +1 -1
  200. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  201. package/dist/services/document-service/internationalization.js +21 -12
  202. package/dist/services/document-service/internationalization.js.map +1 -1
  203. package/dist/services/document-service/internationalization.mjs +14 -5
  204. package/dist/services/document-service/internationalization.mjs.map +1 -1
  205. package/dist/services/document-service/params.js +2 -2
  206. package/dist/services/document-service/params.js.map +1 -1
  207. package/dist/services/document-service/repository.d.ts.map +1 -1
  208. package/dist/services/document-service/repository.js +131 -52
  209. package/dist/services/document-service/repository.js.map +1 -1
  210. package/dist/services/document-service/repository.mjs +127 -48
  211. package/dist/services/document-service/repository.mjs.map +1 -1
  212. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  213. package/dist/services/document-service/transform/id-map.js +13 -4
  214. package/dist/services/document-service/transform/id-map.js.map +1 -1
  215. package/dist/services/document-service/transform/id-map.mjs +14 -5
  216. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  217. package/dist/services/document-service/transform/id-transform.js +2 -2
  218. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  219. package/dist/services/document-service/transform/query.js +3 -3
  220. package/dist/services/document-service/transform/query.js.map +1 -1
  221. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  222. package/dist/services/document-service/transform/relations/extract/data-ids.js +5 -2
  223. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  224. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +3 -0
  225. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  226. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  227. package/dist/services/document-service/transform/relations/transform/data-ids.js +5 -2
  228. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  229. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +3 -0
  230. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  231. package/dist/services/document-service/transform/relations/utils/dp.js +2 -2
  232. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  233. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  234. package/dist/services/document-service/transform/relations/utils/map-relation.js +13 -9
  235. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  236. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +7 -3
  237. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  238. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  239. package/dist/services/document-service/utils/populate.js +7 -1
  240. package/dist/services/document-service/utils/populate.js.map +1 -1
  241. package/dist/services/document-service/utils/populate.mjs +7 -1
  242. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  243. package/dist/services/document-service/utils/unidirectional-relations.d.ts +36 -0
  244. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -0
  245. package/dist/services/document-service/utils/unidirectional-relations.js +69 -0
  246. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -0
  247. package/dist/services/document-service/utils/unidirectional-relations.mjs +69 -0
  248. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -0
  249. package/dist/services/entity-validator/blocks-validator.d.ts +1 -2
  250. package/dist/services/entity-validator/blocks-validator.d.ts.map +1 -1
  251. package/dist/services/entity-validator/blocks-validator.js +4 -3
  252. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  253. package/dist/services/entity-validator/blocks-validator.mjs +3 -3
  254. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  255. package/dist/services/entity-validator/index.d.ts +15 -1
  256. package/dist/services/entity-validator/index.d.ts.map +1 -1
  257. package/dist/services/entity-validator/index.js +109 -53
  258. package/dist/services/entity-validator/index.js.map +1 -1
  259. package/dist/services/entity-validator/index.mjs +95 -39
  260. package/dist/services/entity-validator/index.mjs.map +1 -1
  261. package/dist/services/entity-validator/validators.d.ts +36 -25
  262. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  263. package/dist/services/entity-validator/validators.js +148 -33
  264. package/dist/services/entity-validator/validators.js.map +1 -1
  265. package/dist/services/entity-validator/validators.mjs +140 -25
  266. package/dist/services/entity-validator/validators.mjs.map +1 -1
  267. package/dist/services/event-hub.d.ts +1 -0
  268. package/dist/services/event-hub.d.ts.map +1 -1
  269. package/dist/services/event-hub.js +9 -4
  270. package/dist/services/event-hub.js.map +1 -1
  271. package/dist/services/event-hub.mjs +9 -4
  272. package/dist/services/event-hub.mjs.map +1 -1
  273. package/dist/services/server/compose-endpoint.js +7 -7
  274. package/dist/services/server/compose-endpoint.js.map +1 -1
  275. package/dist/services/server/index.js +1 -1
  276. package/dist/services/server/index.js.map +1 -1
  277. package/dist/services/server/index.mjs +1 -1
  278. package/dist/services/server/index.mjs.map +1 -1
  279. package/dist/services/server/koa.d.ts.map +1 -1
  280. package/dist/services/server/koa.js +4 -4
  281. package/dist/services/server/koa.js.map +1 -1
  282. package/dist/services/server/koa.mjs +1 -1
  283. package/dist/services/server/koa.mjs.map +1 -1
  284. package/dist/services/server/middleware.js +3 -3
  285. package/dist/services/server/middleware.js.map +1 -1
  286. package/dist/services/server/routing.js +2 -2
  287. package/dist/services/server/routing.js.map +1 -1
  288. package/dist/services/utils/dynamic-zones.js +5 -5
  289. package/dist/services/utils/dynamic-zones.js.map +1 -1
  290. package/dist/services/webhook-runner.d.ts +2 -1
  291. package/dist/services/webhook-runner.d.ts.map +1 -1
  292. package/dist/services/webhook-runner.js.map +1 -1
  293. package/dist/services/webhook-runner.mjs.map +1 -1
  294. package/dist/services/webhook-store.d.ts +2 -8
  295. package/dist/services/webhook-store.d.ts.map +1 -1
  296. package/dist/services/webhook-store.js +9 -2
  297. package/dist/services/webhook-store.js.map +1 -1
  298. package/dist/services/webhook-store.mjs +9 -2
  299. package/dist/services/webhook-store.mjs.map +1 -1
  300. package/dist/utils/cron.js +3 -3
  301. package/dist/utils/cron.js.map +1 -1
  302. package/dist/utils/fetch.d.ts.map +1 -1
  303. package/dist/utils/fetch.js +4 -3
  304. package/dist/utils/fetch.js.map +1 -1
  305. package/dist/utils/fetch.mjs +4 -3
  306. package/dist/utils/fetch.mjs.map +1 -1
  307. package/dist/utils/filepath-to-prop-path.d.ts +1 -1
  308. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  309. package/dist/utils/filepath-to-prop-path.js +27 -6
  310. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  311. package/dist/utils/filepath-to-prop-path.mjs +25 -5
  312. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  313. package/dist/utils/is-initialized.js +3 -3
  314. package/dist/utils/is-initialized.js.map +1 -1
  315. package/dist/utils/startup-logger.js +4 -4
  316. package/dist/utils/startup-logger.js.map +1 -1
  317. package/dist/utils/startup-logger.mjs +3 -3
  318. package/dist/utils/startup-logger.mjs.map +1 -1
  319. package/dist/utils/transform-content-types-to-models.d.ts +327 -23
  320. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  321. package/dist/utils/transform-content-types-to-models.js +17 -4
  322. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  323. package/dist/utils/transform-content-types-to-models.mjs +16 -3
  324. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  325. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  326. package/dist/utils/update-notifier/index.js +1 -3
  327. package/dist/utils/update-notifier/index.js.map +1 -1
  328. package/dist/utils/update-notifier/index.mjs +1 -2
  329. package/dist/utils/update-notifier/index.mjs.map +1 -1
  330. package/package.json +27 -23
package/LICENSE CHANGED
@@ -2,7 +2,21 @@ Copyright (c) 2015-present Strapi Solutions SAS
2
2
 
3
3
  Portions of the Strapi software are licensed as follows:
4
4
 
5
- * All software that resides under an "ee/" directory (the “EE Software”), if that directory exists, is licensed under the license defined in "ee/LICENSE".
5
+ * All software that resides under an "ee/" directory (the “EE Software”), if that directory exists, is licensed under the license defined below.
6
+
7
+ Enterprise License
8
+
9
+ If you or the company you represent has entered into a written agreement referencing the Enterprise Edition of the Strapi source code available at
10
+ https://github.com/strapi/strapi, then such agreement applies to your use of the Enterprise Edition of the Strapi Software. If you or the company you
11
+ represent is using the Enterprise Edition of the Strapi Software in connection with a subscription to our cloud offering, then the agreement you have
12
+ agreed to with respect to our cloud offering and the licenses included in such agreement apply to your use of the Enterprise Edition of the Strapi Software.
13
+ Otherwise, the Strapi Enterprise Software License Agreement (found here https://strapi.io/enterprise-terms) applies to your use of the Enterprise Edition of the Strapi Software.
14
+
15
+ BY ACCESSING OR USING THE ENTERPRISE EDITION OF THE STRAPI SOFTWARE, YOU ARE AGREEING TO BE BOUND BY THE RELEVANT REFERENCED AGREEMENT.
16
+ IF YOU ARE NOT AUTHORIZED TO ACCEPT THESE TERMS ON BEHALF OF THE COMPANY YOU REPRESENT OR IF YOU DO NOT AGREE TO ALL OF THE RELEVANT TERMS AND CONDITIONS REFERENCED AND YOU
17
+ HAVE NOT OTHERWISE EXECUTED A WRITTEN AGREEMENT WITH STRAPI, YOU ARE NOT AUTHORIZED TO ACCESS OR USE OR ALLOW ANY USER TO ACCESS OR USE ANY PART OF
18
+ THE ENTERPRISE EDITION OF THE STRAPI SOFTWARE. YOUR ACCESS RIGHTS ARE CONDITIONAL ON YOUR CONSENT TO THE RELEVANT REFERENCED TERMS TO THE EXCLUSION OF ALL OTHER TERMS;
19
+ IF THE RELEVANT REFERENCED TERMS ARE CONSIDERED AN OFFER BY YOU, ACCEPTANCE IS EXPRESSLY LIMITED TO THE RELEVANT REFERENCED TERMS.
6
20
 
7
21
  * All software outside of the above-mentioned directories or restrictions above is available under the "MIT Expat" license as set forth below.
8
22
 
@@ -18,5 +32,6 @@ furnished to do so, subject to the following conditions:
18
32
  The above copyright notice and this permission notice shall be included in all
19
33
  copies or substantial portions of the Software.
20
34
 
21
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
- SOFTWARE.
35
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
36
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
37
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/dist/Strapi.d.ts CHANGED
@@ -70,8 +70,10 @@ declare class Strapi extends Container implements Core.Strapi {
70
70
  load(): Promise<this>;
71
71
  register(): Promise<this>;
72
72
  bootstrap(): Promise<this>;
73
+ configureGlobalProxy(): Promise<void>;
73
74
  destroy(): Promise<void>;
74
- runLifecyclesFunctions(lifecycleName: 'register' | 'bootstrap' | 'destroy'): Promise<void>;
75
+ runPluginsLifecycles(lifecycleName: 'register' | 'bootstrap' | 'destroy'): Promise<void>;
76
+ runUserLifecycles(lifecycleName: 'register' | 'bootstrap' | 'destroy'): Promise<void>;
75
77
  getModel(uid: UID.ContentType): Schema.ContentType;
76
78
  getModel(uid: UID.Component): Schema.Component;
77
79
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Strapi.d.ts","sourceRoot":"","sources":["../src/Strapi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Strapi.d.ts","sourceRoot":"","sources":["../src/Strapi.ts"],"names":[],"mappings":"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"}
package/dist/Strapi.js CHANGED
@@ -1,7 +1,29 @@
1
1
  "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
2
24
  const path = require("path");
3
25
  const _ = require("lodash");
4
- const _$1 = require("lodash/fp");
26
+ const fp = require("lodash/fp");
5
27
  const logger = require("@strapi/logger");
6
28
  const database = require("@strapi/database");
7
29
  const index = require("./configuration/index.js");
@@ -194,18 +216,19 @@ class Strapi extends container.Container {
194
216
  }
195
217
  // TODO: split into more providers
196
218
  registerInternalServices() {
197
- this.add("config", () => config.createConfigProvider(this.internal_config, this)).add("query-params", queryParams(this)).add("content-api", index$3(this)).add("auth", index$4()).add("server", () => index$5.createServer(this)).add("fs", () => fs(this)).add("eventHub", () => eventHub()).add("startupLogger", () => startupLogger.createStartupLogger(this)).add("logger", () => {
198
- return logger.createLogger({
199
- level: "http",
200
- // Strapi defaults to level 'http'
201
- ...this.config.get("logger"),
202
- // DEPRECATED
203
- ...this.config.get("server.logger.config")
204
- });
205
- }).add("fetch", () => fetch.createStrapiFetch(this)).add("features", () => features.createFeaturesService(this)).add("requestContext", requestContext).add("customFields", customFields(this)).add("entityValidator", index$6).add("entityService", () => index$7({ strapi: this, db: this.db })).add("documents", () => index$8.createDocumentService(this)).add(
219
+ const config$1 = config.createConfigProvider(this.internal_config, this);
220
+ const logger$1 = logger.createLogger({
221
+ level: "http",
222
+ // Strapi defaults to level 'http'
223
+ ...config$1.get("logger"),
224
+ // DEPRECATED
225
+ ...config$1.get("server.logger.config")
226
+ });
227
+ this.add("config", () => config$1).add("query-params", queryParams(this)).add("content-api", index$3(this)).add("auth", index$4()).add("server", () => index$5.createServer(this)).add("fs", () => fs(this)).add("eventHub", () => eventHub()).add("startupLogger", () => startupLogger.createStartupLogger(this)).add("logger", () => logger$1).add("fetch", () => fetch.createStrapiFetch(this)).add("features", () => features.createFeaturesService(this)).add("requestContext", requestContext).add("customFields", customFields(this)).add("entityValidator", index$6).add("entityService", () => index$7({ strapi: this, db: this.db })).add("documents", () => index$8.createDocumentService(this)).add(
206
228
  "db",
207
229
  () => new database.Database(
208
230
  ___default.default.merge(this.config.get("database"), {
231
+ logger: logger$1,
209
232
  settings: {
210
233
  migrations: {
211
234
  dir: path__default.default.join(this.dirs.app.root, "database/migrations")
@@ -300,11 +323,13 @@ class Strapi extends container.Container {
300
323
  for (const provider of index$1.providers) {
301
324
  await provider.register?.(this);
302
325
  }
303
- await this.runLifecyclesFunctions(lifecycles.LIFECYCLES.REGISTER);
326
+ await this.runPluginsLifecycles(lifecycles.LIFECYCLES.REGISTER);
327
+ await this.runUserLifecycles(lifecycles.LIFECYCLES.REGISTER);
304
328
  convertCustomFieldType.convertCustomFieldType(this);
305
329
  return this;
306
330
  }
307
331
  async bootstrap() {
332
+ await this.configureGlobalProxy();
308
333
  const models = [
309
334
  ...transformContentTypesToModels.transformContentTypesToModels(
310
335
  [...Object.values(this.contentTypes), ...Object.values(this.components)],
@@ -312,48 +337,77 @@ class Strapi extends container.Container {
312
337
  ),
313
338
  ...this.get("models").get()
314
339
  ];
315
- await this.db.init({ models });
340
+ const skipSync = process.env.STRAPI_SKIP_SCHEMA_SYNC === "true";
341
+ await this.db.init({ models, validate: !skipSync });
316
342
  let oldContentTypes;
317
- if (await this.db.getSchemaConnection().hasTable(coreStore.coreStoreModel.tableName)) {
318
- oldContentTypes = await this.store.get({
343
+ if (!skipSync) {
344
+ const start = Date.now();
345
+ if (await this.db.getSchemaConnection().hasTable(coreStore.coreStoreModel.tableName)) {
346
+ oldContentTypes = await this.store.get({
347
+ type: "strapi",
348
+ name: "content_types",
349
+ key: "schema"
350
+ });
351
+ }
352
+ await this.hook("strapi::content-types.beforeSync").call({
353
+ oldContentTypes,
354
+ contentTypes: this.contentTypes
355
+ });
356
+ await this.db.schema.sync();
357
+ await this.hook("strapi::content-types.afterSync").call({
358
+ oldContentTypes,
359
+ contentTypes: this.contentTypes
360
+ });
361
+ await this.store.set({
319
362
  type: "strapi",
320
363
  name: "content_types",
321
- key: "schema"
364
+ key: "schema",
365
+ value: this.contentTypes
322
366
  });
367
+ this.log.debug(`Database sync finished (${Date.now() - start}ms)`);
368
+ } else {
369
+ this.log.warn("Skipping schema sync");
323
370
  }
324
- await this.hook("strapi::content-types.beforeSync").call({
325
- oldContentTypes,
326
- contentTypes: this.contentTypes
327
- });
328
- await this.db.schema.sync();
329
371
  if (this.EE) {
372
+ const start = Date.now();
330
373
  await index$2.checkLicense({ strapi: this });
374
+ this.log.debug(`License check finished (${Date.now() - start}ms)`);
331
375
  }
332
- await this.hook("strapi::content-types.afterSync").call({
333
- oldContentTypes,
334
- contentTypes: this.contentTypes
335
- });
336
- await this.store.set({
337
- type: "strapi",
338
- name: "content_types",
339
- key: "schema",
340
- value: this.contentTypes
341
- });
342
376
  await this.server.initMiddlewares();
343
377
  this.server.initRouting();
344
378
  await this.contentAPI.permissions.registerActions();
345
- await this.runLifecyclesFunctions(lifecycles.LIFECYCLES.BOOTSTRAP);
379
+ await this.runPluginsLifecycles(lifecycles.LIFECYCLES.BOOTSTRAP);
346
380
  for (const provider of index$1.providers) {
347
381
  await provider.bootstrap?.(this);
348
382
  }
383
+ await this.runUserLifecycles(lifecycles.LIFECYCLES.BOOTSTRAP);
349
384
  return this;
350
385
  }
386
+ async configureGlobalProxy() {
387
+ const globalProxy = this.config.get("server.proxy.global");
388
+ const httpProxy = this.config.get("server.proxy.http") || globalProxy;
389
+ const httpsProxy = this.config.get("server.proxy.https") || globalProxy;
390
+ if (!httpProxy && !httpsProxy) {
391
+ return;
392
+ }
393
+ const globalAgent = await import("global-agent");
394
+ globalAgent.bootstrap();
395
+ if (httpProxy) {
396
+ this.log.info(`Using HTTP proxy: ${httpProxy}`);
397
+ global.GLOBAL_AGENT.HTTP_PROXY = httpProxy;
398
+ }
399
+ if (httpsProxy) {
400
+ this.log.info(`Using HTTPS proxy: ${httpsProxy}`);
401
+ global.GLOBAL_AGENT.HTTPS_PROXY = httpsProxy;
402
+ }
403
+ }
351
404
  async destroy() {
352
405
  this.log.info("Shutting down Strapi");
353
- await this.runLifecyclesFunctions(lifecycles.LIFECYCLES.DESTROY);
406
+ await this.runPluginsLifecycles(lifecycles.LIFECYCLES.DESTROY);
354
407
  for (const provider of index$1.providers) {
355
408
  await provider.destroy?.(this);
356
409
  }
410
+ await this.runUserLifecycles(lifecycles.LIFECYCLES.DESTROY);
357
411
  await this.server.destroy();
358
412
  this.eventHub.destroy();
359
413
  await this.db?.destroy();
@@ -361,10 +415,12 @@ class Strapi extends container.Container {
361
415
  delete global.strapi;
362
416
  this.log.info("Strapi has been shut down");
363
417
  }
364
- async runLifecyclesFunctions(lifecycleName) {
418
+ async runPluginsLifecycles(lifecycleName) {
365
419
  await this.get("modules")[lifecycleName]();
420
+ }
421
+ async runUserLifecycles(lifecycleName) {
366
422
  const userLifecycleFunction = this.app && this.app[lifecycleName];
367
- if (_$1.isFunction(userLifecycleFunction)) {
423
+ if (fp.isFunction(userLifecycleFunction)) {
368
424
  await userLifecycleFunction({ strapi: this });
369
425
  }
370
426
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Strapi.js","sources":["../src/Strapi.ts"],"sourcesContent":["import path from 'path';\nimport _ from 'lodash';\nimport { isFunction } from 'lodash/fp';\nimport { Logger, createLogger } from '@strapi/logger';\nimport { Database } from '@strapi/database';\n\nimport type { Core, Modules, UID, Schema } from '@strapi/types';\n\nimport { loadConfiguration } from './configuration';\n\nimport * as factories from './factories';\n\nimport * as utils from './utils';\nimport { Container } from './container';\nimport createStrapiFs from './services/fs';\nimport createEventHub from './services/event-hub';\nimport { createServer } from './services/server';\nimport { createReloader } from './services/reloader';\n\nimport { providers } from './providers';\nimport createEntityService from './services/entity-service';\nimport createQueryParamService from './services/query-params';\n\nimport entityValidator from './services/entity-validator';\nimport requestContext from './services/request-context';\nimport createAuth from './services/auth';\nimport createCustomFields from './services/custom-fields';\nimport createContentAPI from './services/content-api';\nimport getNumberOfDynamicZones from './services/utils/dynamic-zones';\nimport { FeaturesService, createFeaturesService } from './services/features';\nimport { createDocumentService } from './services/document-service';\n\nimport { coreStoreModel } from './services/core-store';\nimport { createConfigProvider } from './services/config';\n\nclass Strapi extends Container implements Core.Strapi {\n app: any;\n\n isLoaded: boolean = false;\n\n internal_config: Record<string, unknown> = {};\n\n constructor(opts: StrapiOptions) {\n super();\n\n this.internal_config = loadConfiguration(opts);\n\n this.registerInternalServices();\n\n for (const provider of providers) {\n provider.init?.(this);\n }\n }\n\n get admin(): Core.Module {\n return this.get('admin');\n }\n\n get EE(): boolean {\n return utils.ee.isEE;\n }\n\n get ee(): Core.Strapi['ee'] {\n return utils.ee;\n }\n\n get dirs(): Core.StrapiDirectories {\n return this.config.get('dirs');\n }\n\n get reload(): Core.Reloader {\n return this.get('reload');\n }\n\n get db(): Database {\n return this.get('db');\n }\n\n get requestContext(): Modules.RequestContext.RequestContext {\n return this.get('requestContext');\n }\n\n get customFields(): Modules.CustomFields.CustomFields {\n return this.get('customFields');\n }\n\n get entityValidator(): Modules.EntityValidator.EntityValidator {\n return this.get('entityValidator');\n }\n\n /**\n * @deprecated `strapi.entityService` will be removed in the next major version\n */\n get entityService(): Modules.EntityService.EntityService {\n return this.get('entityService');\n }\n\n get documents(): Modules.Documents.Service {\n return this.get('documents');\n }\n\n get features(): FeaturesService {\n return this.get('features');\n }\n\n get fetch(): Modules.Fetch.Fetch {\n return this.get('fetch');\n }\n\n get cron(): Modules.Cron.CronService {\n return this.get('cron');\n }\n\n get log(): Logger {\n return this.get('logger');\n }\n\n get startupLogger(): Core.StartupLogger {\n return this.get('startupLogger');\n }\n\n get eventHub(): Modules.EventHub.EventHub {\n return this.get('eventHub');\n }\n\n get fs(): Core.StrapiFS {\n return this.get('fs');\n }\n\n get server(): Modules.Server.Server {\n return this.get('server');\n }\n\n get telemetry(): Modules.Metrics.TelemetryService {\n return this.get('telemetry');\n }\n\n get store(): Modules.CoreStore.CoreStore {\n return this.get('coreStore');\n }\n\n get config() {\n return this.get('config');\n }\n\n get services() {\n return this.get('services').getAll();\n }\n\n service(uid: UID.Service) {\n return this.get('services').get(uid);\n }\n\n get controllers() {\n return this.get('controllers').getAll();\n }\n\n controller(uid: UID.Controller) {\n return this.get('controllers').get(uid);\n }\n\n get contentTypes(): Schema.ContentTypes {\n return this.get('content-types').getAll();\n }\n\n contentType(name: UID.ContentType) {\n return this.get('content-types').get(name);\n }\n\n get components(): Schema.Components {\n return this.get('components').getAll();\n }\n\n get policies() {\n return this.get('policies').getAll();\n }\n\n policy(name: string) {\n return this.get('policies').get(name);\n }\n\n get middlewares() {\n return this.get('middlewares').getAll();\n }\n\n middleware(name: string) {\n return this.get('middlewares').get(name);\n }\n\n get plugins(): Record<string, Core.Plugin> {\n return this.get('plugins').getAll();\n }\n\n plugin(name: string): Core.Plugin {\n return this.get('plugins').get(name);\n }\n\n get hooks() {\n return this.get('hooks').getAll();\n }\n\n hook(name: string) {\n return this.get('hooks').get(name);\n }\n\n get apis() {\n return this.get('apis').getAll();\n }\n\n api(name: string): Core.Module {\n return this.get('apis').get(name);\n }\n\n get auth() {\n return this.get('auth');\n }\n\n get contentAPI() {\n return this.get('content-api');\n }\n\n get sanitizers() {\n return this.get('sanitizers');\n }\n\n get validators() {\n return this.get('validators');\n }\n\n async start() {\n try {\n if (!this.isLoaded) {\n await this.load();\n }\n\n await this.listen();\n\n return this;\n } catch (error) {\n return this.stopWithError(error);\n }\n }\n\n // TODO: split into more providers\n registerInternalServices() {\n // Instantiate the Strapi container\n this.add('config', () => createConfigProvider(this.internal_config, this))\n .add('query-params', createQueryParamService(this))\n .add('content-api', createContentAPI(this))\n .add('auth', createAuth())\n .add('server', () => createServer(this))\n .add('fs', () => createStrapiFs(this))\n .add('eventHub', () => createEventHub())\n .add('startupLogger', () => utils.createStartupLogger(this))\n .add('logger', () => {\n return createLogger({\n level: 'http', // Strapi defaults to level 'http'\n ...this.config.get('logger'), // DEPRECATED\n ...this.config.get('server.logger.config'),\n });\n })\n .add('fetch', () => utils.createStrapiFetch(this))\n .add('features', () => createFeaturesService(this))\n .add('requestContext', requestContext)\n .add('customFields', createCustomFields(this))\n .add('entityValidator', entityValidator)\n .add('entityService', () => createEntityService({ strapi: this, db: this.db }))\n .add('documents', () => createDocumentService(this))\n .add(\n 'db',\n () =>\n new Database(\n _.merge(this.config.get('database'), {\n settings: {\n migrations: {\n dir: path.join(this.dirs.app.root, 'database/migrations'),\n },\n },\n })\n )\n )\n .add('reload', () => createReloader(this));\n }\n\n sendStartupTelemetry() {\n // Emit started event.\n // do not await to avoid slower startup\n // This event is anonymous\n this.telemetry\n .send('didStartServer', {\n groupProperties: {\n database: this.config.get('database.connection.client'),\n plugins: Object.keys(this.plugins),\n numberOfAllContentTypes: _.size(this.contentTypes), // TODO: V5: This event should be renamed numberOfContentTypes in V5 as the name is already taken to describe the number of content types using i18n.\n numberOfComponents: _.size(this.components),\n numberOfDynamicZones: getNumberOfDynamicZones(),\n numberOfCustomControllers: Object.values<Core.Controller>(this.controllers).filter(\n // TODO: Fix this at the content API loader level to prevent future types issues\n (controller) => controller !== undefined && factories.isCustomController(controller)\n ).length,\n environment: this.config.environment,\n // TODO: to add back\n // providers: this.config.installedProviders,\n },\n })\n .catch(this.log.error);\n }\n\n async openAdmin({ isInitialized }: { isInitialized: boolean }) {\n const shouldOpenAdmin =\n this.config.get('environment') === 'development' &&\n this.config.get('admin.autoOpen', true) !== false;\n\n if (shouldOpenAdmin && !isInitialized) {\n try {\n await utils.openBrowser(this.config);\n this.telemetry.send('didOpenTab');\n } catch (e) {\n this.telemetry.send('didNotOpenTab');\n }\n }\n }\n\n async postListen() {\n const isInitialized = await utils.isInitialized(this);\n\n this.startupLogger.logStartupMessage({ isInitialized });\n\n this.log.info('Strapi started successfully');\n this.sendStartupTelemetry();\n this.openAdmin({ isInitialized });\n }\n\n /**\n * Add behaviors to the server\n */\n async listen() {\n return new Promise<void>((resolve, reject) => {\n const onListen = async () => {\n try {\n await this.postListen();\n\n resolve();\n } catch (error) {\n reject(error);\n }\n };\n\n const listenSocket = this.config.get('server.socket');\n\n if (listenSocket) {\n this.server.listen(listenSocket, onListen);\n } else {\n const { host, port } = this.config.get('server');\n\n this.server.listen(port, host, onListen);\n }\n });\n }\n\n stopWithError(err: unknown, customMessage?: string): never {\n this.log.debug(`⛔️ Server wasn't able to start properly.`);\n if (customMessage) {\n this.log.error(customMessage);\n }\n\n this.log.error(err);\n return this.stop();\n }\n\n stop(exitCode = 1): never {\n this.destroy();\n\n if (this.config.get('autoReload')) {\n process.send?.('stop');\n }\n\n // Kill process\n process.exit(exitCode);\n }\n\n async load() {\n await this.register();\n await this.bootstrap();\n\n this.isLoaded = true;\n\n return this;\n }\n\n async register() {\n // @ts-expect-error: init is internal\n this.ee.init(this.dirs.app.root, this.log);\n\n for (const provider of providers) {\n await provider.register?.(this);\n }\n\n await this.runLifecyclesFunctions(utils.LIFECYCLES.REGISTER);\n\n // NOTE: Swap type customField for underlying data type\n utils.convertCustomFieldType(this);\n\n return this;\n }\n\n async bootstrap() {\n const models = [\n ...utils.transformContentTypesToModels(\n [...Object.values(this.contentTypes), ...Object.values(this.components)],\n this.db.metadata.identifiers\n ),\n ...this.get('models').get(),\n ];\n\n await this.db.init({ models });\n\n let oldContentTypes;\n if (await this.db.getSchemaConnection().hasTable(coreStoreModel.tableName)) {\n oldContentTypes = await this.store.get({\n type: 'strapi',\n name: 'content_types',\n key: 'schema',\n });\n }\n\n await this.hook('strapi::content-types.beforeSync').call({\n oldContentTypes,\n contentTypes: this.contentTypes,\n });\n\n await this.db.schema.sync();\n\n if (this.EE) {\n await utils.ee.checkLicense({ strapi: this });\n }\n\n await this.hook('strapi::content-types.afterSync').call({\n oldContentTypes,\n contentTypes: this.contentTypes,\n });\n\n await this.store.set({\n type: 'strapi',\n name: 'content_types',\n key: 'schema',\n value: this.contentTypes,\n });\n\n await this.server.initMiddlewares();\n this.server.initRouting();\n\n await this.contentAPI.permissions.registerActions();\n\n await this.runLifecyclesFunctions(utils.LIFECYCLES.BOOTSTRAP);\n\n for (const provider of providers) {\n await provider.bootstrap?.(this);\n }\n\n return this;\n }\n\n async destroy() {\n this.log.info('Shutting down Strapi');\n await this.runLifecyclesFunctions(utils.LIFECYCLES.DESTROY);\n\n for (const provider of providers) {\n await provider.destroy?.(this);\n }\n\n await this.server.destroy();\n\n this.eventHub.destroy();\n\n await this.db?.destroy();\n\n process.removeAllListeners();\n\n // @ts-expect-error: Allow clean delete of global.strapi to allow re-instanciation\n delete global.strapi;\n\n this.log.info('Strapi has been shut down');\n }\n\n async runLifecyclesFunctions(lifecycleName: 'register' | 'bootstrap' | 'destroy') {\n // plugins\n await this.get('modules')[lifecycleName]();\n\n // user\n const userLifecycleFunction = this.app && this.app[lifecycleName];\n if (isFunction(userLifecycleFunction)) {\n await userLifecycleFunction({ strapi: this });\n }\n }\n\n getModel(uid: UID.ContentType): Schema.ContentType;\n getModel(uid: UID.Component): Schema.Component;\n getModel<TUID extends UID.Schema>(uid: TUID): Schema.ContentType | Schema.Component | undefined {\n if (uid in this.contentTypes) {\n return this.contentTypes[uid as UID.ContentType];\n }\n\n if (uid in this.components) {\n return this.components[uid as UID.Component];\n }\n }\n\n /**\n * @deprecated Use `strapi.db.query` instead\n */\n query(uid: UID.Schema) {\n return this.db.query(uid);\n }\n}\n\nexport interface StrapiOptions {\n appDir: string;\n distDir: string;\n autoReload?: boolean;\n serveAdminPanel?: boolean;\n}\n\nexport default Strapi;\n"],"names":["Container","loadConfiguration","providers","utils.ee","createConfigProvider","createQueryParamService","createContentAPI","createAuth","createServer","createStrapiFs","createEventHub","utils.createStartupLogger","createLogger","utils.createStrapiFetch","createFeaturesService","createCustomFields","entityValidator","createEntityService","createDocumentService","Database","_","path","createReloader","getNumberOfDynamicZones","factories.isCustomController","isInitialized","utils.openBrowser","utils.isInitialized","utils.LIFECYCLES","utils.convertCustomFieldType","utils.transformContentTypesToModels","coreStoreModel","isFunction"],"mappings":"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"}
1
+ {"version":3,"file":"Strapi.js","sources":["../src/Strapi.ts"],"sourcesContent":["import path from 'path';\nimport _ from 'lodash';\nimport { isFunction } from 'lodash/fp';\nimport { Logger, createLogger } from '@strapi/logger';\nimport { Database } from '@strapi/database';\n\nimport type { Core, Modules, UID, Schema } from '@strapi/types';\n\nimport { loadConfiguration } from './configuration';\n\nimport * as factories from './factories';\n\nimport * as utils from './utils';\nimport { Container } from './container';\nimport createStrapiFs from './services/fs';\nimport createEventHub from './services/event-hub';\nimport { createServer } from './services/server';\nimport { createReloader } from './services/reloader';\n\nimport { providers } from './providers';\nimport createEntityService from './services/entity-service';\nimport createQueryParamService from './services/query-params';\n\nimport entityValidator from './services/entity-validator';\nimport requestContext from './services/request-context';\nimport createAuth from './services/auth';\nimport createCustomFields from './services/custom-fields';\nimport createContentAPI from './services/content-api';\nimport getNumberOfDynamicZones from './services/utils/dynamic-zones';\nimport { FeaturesService, createFeaturesService } from './services/features';\nimport { createDocumentService } from './services/document-service';\n\nimport { coreStoreModel } from './services/core-store';\nimport { createConfigProvider } from './services/config';\n\nclass Strapi extends Container implements Core.Strapi {\n app: any;\n\n isLoaded: boolean = false;\n\n internal_config: Record<string, unknown> = {};\n\n constructor(opts: StrapiOptions) {\n super();\n\n this.internal_config = loadConfiguration(opts);\n\n this.registerInternalServices();\n\n for (const provider of providers) {\n provider.init?.(this);\n }\n }\n\n get admin(): Core.Module {\n return this.get('admin');\n }\n\n get EE(): boolean {\n return utils.ee.isEE;\n }\n\n get ee(): Core.Strapi['ee'] {\n return utils.ee;\n }\n\n get dirs(): Core.StrapiDirectories {\n return this.config.get('dirs');\n }\n\n get reload(): Core.Reloader {\n return this.get('reload');\n }\n\n get db(): Database {\n return this.get('db');\n }\n\n get requestContext(): Modules.RequestContext.RequestContext {\n return this.get('requestContext');\n }\n\n get customFields(): Modules.CustomFields.CustomFields {\n return this.get('customFields');\n }\n\n get entityValidator(): Modules.EntityValidator.EntityValidator {\n return this.get('entityValidator');\n }\n\n /**\n * @deprecated `strapi.entityService` will be removed in the next major version\n */\n get entityService(): Modules.EntityService.EntityService {\n return this.get('entityService');\n }\n\n get documents(): Modules.Documents.Service {\n return this.get('documents');\n }\n\n get features(): FeaturesService {\n return this.get('features');\n }\n\n get fetch(): Modules.Fetch.Fetch {\n return this.get('fetch');\n }\n\n get cron(): Modules.Cron.CronService {\n return this.get('cron');\n }\n\n get log(): Logger {\n return this.get('logger');\n }\n\n get startupLogger(): Core.StartupLogger {\n return this.get('startupLogger');\n }\n\n get eventHub(): Modules.EventHub.EventHub {\n return this.get('eventHub');\n }\n\n get fs(): Core.StrapiFS {\n return this.get('fs');\n }\n\n get server(): Modules.Server.Server {\n return this.get('server');\n }\n\n get telemetry(): Modules.Metrics.TelemetryService {\n return this.get('telemetry');\n }\n\n get store(): Modules.CoreStore.CoreStore {\n return this.get('coreStore');\n }\n\n get config() {\n return this.get('config');\n }\n\n get services() {\n return this.get('services').getAll();\n }\n\n service(uid: UID.Service) {\n return this.get('services').get(uid);\n }\n\n get controllers() {\n return this.get('controllers').getAll();\n }\n\n controller(uid: UID.Controller) {\n return this.get('controllers').get(uid);\n }\n\n get contentTypes(): Schema.ContentTypes {\n return this.get('content-types').getAll();\n }\n\n contentType(name: UID.ContentType) {\n return this.get('content-types').get(name);\n }\n\n get components(): Schema.Components {\n return this.get('components').getAll();\n }\n\n get policies() {\n return this.get('policies').getAll();\n }\n\n policy(name: string) {\n return this.get('policies').get(name);\n }\n\n get middlewares() {\n return this.get('middlewares').getAll();\n }\n\n middleware(name: string) {\n return this.get('middlewares').get(name);\n }\n\n get plugins(): Record<string, Core.Plugin> {\n return this.get('plugins').getAll();\n }\n\n plugin(name: string): Core.Plugin {\n return this.get('plugins').get(name);\n }\n\n get hooks() {\n return this.get('hooks').getAll();\n }\n\n hook(name: string) {\n return this.get('hooks').get(name);\n }\n\n get apis() {\n return this.get('apis').getAll();\n }\n\n api(name: string): Core.Module {\n return this.get('apis').get(name);\n }\n\n get auth() {\n return this.get('auth');\n }\n\n get contentAPI() {\n return this.get('content-api');\n }\n\n get sanitizers() {\n return this.get('sanitizers');\n }\n\n get validators() {\n return this.get('validators');\n }\n\n async start() {\n try {\n if (!this.isLoaded) {\n await this.load();\n }\n\n await this.listen();\n\n return this;\n } catch (error) {\n return this.stopWithError(error);\n }\n }\n\n // TODO: split into more providers\n registerInternalServices() {\n const config = createConfigProvider(this.internal_config, this);\n\n const logger = createLogger({\n level: 'http', // Strapi defaults to level 'http'\n ...config.get('logger'), // DEPRECATED\n ...config.get('server.logger.config'),\n });\n\n // Instantiate the Strapi container\n this.add('config', () => config)\n .add('query-params', createQueryParamService(this))\n .add('content-api', createContentAPI(this))\n .add('auth', createAuth())\n .add('server', () => createServer(this))\n .add('fs', () => createStrapiFs(this))\n .add('eventHub', () => createEventHub())\n .add('startupLogger', () => utils.createStartupLogger(this))\n .add('logger', () => logger)\n .add('fetch', () => utils.createStrapiFetch(this))\n .add('features', () => createFeaturesService(this))\n .add('requestContext', requestContext)\n .add('customFields', createCustomFields(this))\n .add('entityValidator', entityValidator)\n .add('entityService', () => createEntityService({ strapi: this, db: this.db }))\n .add('documents', () => createDocumentService(this))\n .add(\n 'db',\n () =>\n new Database(\n _.merge(this.config.get('database'), {\n logger,\n settings: {\n migrations: {\n dir: path.join(this.dirs.app.root, 'database/migrations'),\n },\n },\n })\n )\n )\n .add('reload', () => createReloader(this));\n }\n\n sendStartupTelemetry() {\n // Emit started event.\n // do not await to avoid slower startup\n // This event is anonymous\n this.telemetry\n .send('didStartServer', {\n groupProperties: {\n database: this.config.get('database.connection.client'),\n plugins: Object.keys(this.plugins),\n numberOfAllContentTypes: _.size(this.contentTypes), // TODO: V5: This event should be renamed numberOfContentTypes in V5 as the name is already taken to describe the number of content types using i18n.\n numberOfComponents: _.size(this.components),\n numberOfDynamicZones: getNumberOfDynamicZones(),\n numberOfCustomControllers: Object.values<Core.Controller>(this.controllers).filter(\n // TODO: Fix this at the content API loader level to prevent future types issues\n (controller) => controller !== undefined && factories.isCustomController(controller)\n ).length,\n environment: this.config.environment,\n // TODO: to add back\n // providers: this.config.installedProviders,\n },\n })\n .catch(this.log.error);\n }\n\n async openAdmin({ isInitialized }: { isInitialized: boolean }) {\n const shouldOpenAdmin =\n this.config.get('environment') === 'development' &&\n this.config.get('admin.autoOpen', true) !== false;\n\n if (shouldOpenAdmin && !isInitialized) {\n try {\n await utils.openBrowser(this.config);\n this.telemetry.send('didOpenTab');\n } catch (e) {\n this.telemetry.send('didNotOpenTab');\n }\n }\n }\n\n async postListen() {\n const isInitialized = await utils.isInitialized(this);\n\n this.startupLogger.logStartupMessage({ isInitialized });\n\n this.log.info('Strapi started successfully');\n this.sendStartupTelemetry();\n this.openAdmin({ isInitialized });\n }\n\n /**\n * Add behaviors to the server\n */\n async listen() {\n return new Promise<void>((resolve, reject) => {\n const onListen = async () => {\n try {\n await this.postListen();\n\n resolve();\n } catch (error) {\n reject(error);\n }\n };\n\n const listenSocket = this.config.get('server.socket');\n\n if (listenSocket) {\n this.server.listen(listenSocket, onListen);\n } else {\n const { host, port } = this.config.get('server');\n\n this.server.listen(port, host, onListen);\n }\n });\n }\n\n stopWithError(err: unknown, customMessage?: string): never {\n this.log.debug(`⛔️ Server wasn't able to start properly.`);\n if (customMessage) {\n this.log.error(customMessage);\n }\n\n this.log.error(err);\n return this.stop();\n }\n\n stop(exitCode = 1): never {\n this.destroy();\n\n if (this.config.get('autoReload')) {\n process.send?.('stop');\n }\n\n // Kill process\n process.exit(exitCode);\n }\n\n async load() {\n await this.register();\n await this.bootstrap();\n\n this.isLoaded = true;\n\n return this;\n }\n\n async register() {\n // @ts-expect-error: init is internal\n this.ee.init(this.dirs.app.root, this.log);\n\n for (const provider of providers) {\n await provider.register?.(this);\n }\n\n await this.runPluginsLifecycles(utils.LIFECYCLES.REGISTER);\n await this.runUserLifecycles(utils.LIFECYCLES.REGISTER);\n\n // NOTE: Swap type customField for underlying data type\n utils.convertCustomFieldType(this);\n\n return this;\n }\n\n async bootstrap() {\n await this.configureGlobalProxy();\n\n const models = [\n ...utils.transformContentTypesToModels(\n [...Object.values(this.contentTypes), ...Object.values(this.components)],\n this.db.metadata.identifiers\n ),\n ...this.get('models').get(),\n ];\n\n const skipSync = process.env.STRAPI_SKIP_SCHEMA_SYNC === 'true';\n\n await this.db.init({ models, validate: !skipSync });\n\n let oldContentTypes;\n\n if (!skipSync) {\n const start = Date.now();\n if (await this.db.getSchemaConnection().hasTable(coreStoreModel.tableName)) {\n oldContentTypes = await this.store.get({\n type: 'strapi',\n name: 'content_types',\n key: 'schema',\n });\n }\n\n await this.hook('strapi::content-types.beforeSync').call({\n oldContentTypes,\n contentTypes: this.contentTypes,\n });\n\n await this.db.schema.sync();\n\n await this.hook('strapi::content-types.afterSync').call({\n oldContentTypes,\n contentTypes: this.contentTypes,\n });\n\n await this.store.set({\n type: 'strapi',\n name: 'content_types',\n key: 'schema',\n value: this.contentTypes,\n });\n\n this.log.debug(`Database sync finished (${Date.now() - start}ms)`);\n } else {\n this.log.warn('Skipping schema sync');\n }\n\n if (this.EE) {\n const start = Date.now();\n await utils.ee.checkLicense({ strapi: this });\n this.log.debug(`License check finished (${Date.now() - start}ms)`);\n }\n\n await this.server.initMiddlewares();\n this.server.initRouting();\n\n await this.contentAPI.permissions.registerActions();\n\n await this.runPluginsLifecycles(utils.LIFECYCLES.BOOTSTRAP);\n\n for (const provider of providers) {\n await provider.bootstrap?.(this);\n }\n\n await this.runUserLifecycles(utils.LIFECYCLES.BOOTSTRAP);\n\n return this;\n }\n\n async configureGlobalProxy() {\n const globalProxy = this.config.get('server.proxy.global');\n const httpProxy = this.config.get('server.proxy.http') || globalProxy;\n const httpsProxy = this.config.get('server.proxy.https') || globalProxy;\n\n if (!httpProxy && !httpsProxy) {\n return;\n }\n\n const globalAgent = await import('global-agent');\n\n globalAgent.bootstrap();\n\n if (httpProxy) {\n this.log.info(`Using HTTP proxy: ${httpProxy}`);\n (global as any).GLOBAL_AGENT.HTTP_PROXY = httpProxy;\n }\n\n if (httpsProxy) {\n this.log.info(`Using HTTPS proxy: ${httpsProxy}`);\n (global as any).GLOBAL_AGENT.HTTPS_PROXY = httpsProxy;\n }\n }\n\n async destroy() {\n this.log.info('Shutting down Strapi');\n await this.runPluginsLifecycles(utils.LIFECYCLES.DESTROY);\n\n for (const provider of providers) {\n await provider.destroy?.(this);\n }\n\n await this.runUserLifecycles(utils.LIFECYCLES.DESTROY);\n\n await this.server.destroy();\n\n this.eventHub.destroy();\n\n await this.db?.destroy();\n\n process.removeAllListeners();\n\n // @ts-expect-error: Allow clean delete of global.strapi to allow re-instanciation\n delete global.strapi;\n\n this.log.info('Strapi has been shut down');\n }\n\n async runPluginsLifecycles(lifecycleName: 'register' | 'bootstrap' | 'destroy') {\n // plugins\n await this.get('modules')[lifecycleName]();\n }\n\n async runUserLifecycles(lifecycleName: 'register' | 'bootstrap' | 'destroy') {\n // user\n const userLifecycleFunction = this.app && this.app[lifecycleName];\n if (isFunction(userLifecycleFunction)) {\n await userLifecycleFunction({ strapi: this });\n }\n }\n\n getModel(uid: UID.ContentType): Schema.ContentType;\n getModel(uid: UID.Component): Schema.Component;\n getModel<TUID extends UID.Schema>(uid: TUID): Schema.ContentType | Schema.Component | undefined {\n if (uid in this.contentTypes) {\n return this.contentTypes[uid as UID.ContentType];\n }\n\n if (uid in this.components) {\n return this.components[uid as UID.Component];\n }\n }\n\n /**\n * @deprecated Use `strapi.db.query` instead\n */\n query(uid: UID.Schema) {\n return this.db.query(uid);\n }\n}\n\nexport interface StrapiOptions {\n appDir: string;\n distDir: string;\n autoReload?: boolean;\n serveAdminPanel?: boolean;\n}\n\nexport default Strapi;\n"],"names":["Container","loadConfiguration","providers","utils.ee","config","createConfigProvider","logger","createLogger","createQueryParamService","createContentAPI","createAuth","createServer","createStrapiFs","createEventHub","utils.createStartupLogger","utils.createStrapiFetch","createFeaturesService","createCustomFields","entityValidator","createEntityService","createDocumentService","Database","_","path","createReloader","getNumberOfDynamicZones","factories.isCustomController","isInitialized","utils.openBrowser","utils.isInitialized","utils.LIFECYCLES","utils.convertCustomFieldType","utils.transformContentTypesToModels","coreStoreModel","isFunction"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAM,eAAeA,UAAAA,UAAiC;AAAA,EACpD;AAAA,EAEA,WAAoB;AAAA,EAEpB,kBAA2C,CAAA;AAAA,EAE3C,YAAY,MAAqB;AACzB;AAED,SAAA,kBAAkBC,wBAAkB,IAAI;AAE7C,SAAK,yBAAyB;AAE9B,eAAW,YAAYC,mBAAW;AAChC,eAAS,OAAO,IAAI;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,IAAI,QAAqB;AAChB,WAAA,KAAK,IAAI,OAAO;AAAA,EACzB;AAAA,EAEA,IAAI,KAAc;AAChB,WAAOC,QAAS;AAAA,EAClB;AAAA,EAEA,IAAI,KAAwB;AAC1B,WAAOA;AAAAA,EACT;AAAA,EAEA,IAAI,OAA+B;AAC1B,WAAA,KAAK,OAAO,IAAI,MAAM;AAAA,EAC/B;AAAA,EAEA,IAAI,SAAwB;AACnB,WAAA,KAAK,IAAI,QAAQ;AAAA,EAC1B;AAAA,EAEA,IAAI,KAAe;AACV,WAAA,KAAK,IAAI,IAAI;AAAA,EACtB;AAAA,EAEA,IAAI,iBAAwD;AACnD,WAAA,KAAK,IAAI,gBAAgB;AAAA,EAClC;AAAA,EAEA,IAAI,eAAkD;AAC7C,WAAA,KAAK,IAAI,cAAc;AAAA,EAChC;AAAA,EAEA,IAAI,kBAA2D;AACtD,WAAA,KAAK,IAAI,iBAAiB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,gBAAqD;AAChD,WAAA,KAAK,IAAI,eAAe;AAAA,EACjC;AAAA,EAEA,IAAI,YAAuC;AAClC,WAAA,KAAK,IAAI,WAAW;AAAA,EAC7B;AAAA,EAEA,IAAI,WAA4B;AACvB,WAAA,KAAK,IAAI,UAAU;AAAA,EAC5B;AAAA,EAEA,IAAI,QAA6B;AACxB,WAAA,KAAK,IAAI,OAAO;AAAA,EACzB;AAAA,EAEA,IAAI,OAAiC;AAC5B,WAAA,KAAK,IAAI,MAAM;AAAA,EACxB;AAAA,EAEA,IAAI,MAAc;AACT,WAAA,KAAK,IAAI,QAAQ;AAAA,EAC1B;AAAA,EAEA,IAAI,gBAAoC;AAC/B,WAAA,KAAK,IAAI,eAAe;AAAA,EACjC;AAAA,EAEA,IAAI,WAAsC;AACjC,WAAA,KAAK,IAAI,UAAU;AAAA,EAC5B;AAAA,EAEA,IAAI,KAAoB;AACf,WAAA,KAAK,IAAI,IAAI;AAAA,EACtB;AAAA,EAEA,IAAI,SAAgC;AAC3B,WAAA,KAAK,IAAI,QAAQ;AAAA,EAC1B;AAAA,EAEA,IAAI,YAA8C;AACzC,WAAA,KAAK,IAAI,WAAW;AAAA,EAC7B;AAAA,EAEA,IAAI,QAAqC;AAChC,WAAA,KAAK,IAAI,WAAW;AAAA,EAC7B;AAAA,EAEA,IAAI,SAAS;AACJ,WAAA,KAAK,IAAI,QAAQ;AAAA,EAC1B;AAAA,EAEA,IAAI,WAAW;AACb,WAAO,KAAK,IAAI,UAAU,EAAE,OAAO;AAAA,EACrC;AAAA,EAEA,QAAQ,KAAkB;AACxB,WAAO,KAAK,IAAI,UAAU,EAAE,IAAI,GAAG;AAAA,EACrC;AAAA,EAEA,IAAI,cAAc;AAChB,WAAO,KAAK,IAAI,aAAa,EAAE,OAAO;AAAA,EACxC;AAAA,EAEA,WAAW,KAAqB;AAC9B,WAAO,KAAK,IAAI,aAAa,EAAE,IAAI,GAAG;AAAA,EACxC;AAAA,EAEA,IAAI,eAAoC;AACtC,WAAO,KAAK,IAAI,eAAe,EAAE,OAAO;AAAA,EAC1C;AAAA,EAEA,YAAY,MAAuB;AACjC,WAAO,KAAK,IAAI,eAAe,EAAE,IAAI,IAAI;AAAA,EAC3C;AAAA,EAEA,IAAI,aAAgC;AAClC,WAAO,KAAK,IAAI,YAAY,EAAE,OAAO;AAAA,EACvC;AAAA,EAEA,IAAI,WAAW;AACb,WAAO,KAAK,IAAI,UAAU,EAAE,OAAO;AAAA,EACrC;AAAA,EAEA,OAAO,MAAc;AACnB,WAAO,KAAK,IAAI,UAAU,EAAE,IAAI,IAAI;AAAA,EACtC;AAAA,EAEA,IAAI,cAAc;AAChB,WAAO,KAAK,IAAI,aAAa,EAAE,OAAO;AAAA,EACxC;AAAA,EAEA,WAAW,MAAc;AACvB,WAAO,KAAK,IAAI,aAAa,EAAE,IAAI,IAAI;AAAA,EACzC;AAAA,EAEA,IAAI,UAAuC;AACzC,WAAO,KAAK,IAAI,SAAS,EAAE,OAAO;AAAA,EACpC;AAAA,EAEA,OAAO,MAA2B;AAChC,WAAO,KAAK,IAAI,SAAS,EAAE,IAAI,IAAI;AAAA,EACrC;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK,IAAI,OAAO,EAAE,OAAO;AAAA,EAClC;AAAA,EAEA,KAAK,MAAc;AACjB,WAAO,KAAK,IAAI,OAAO,EAAE,IAAI,IAAI;AAAA,EACnC;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK,IAAI,MAAM,EAAE,OAAO;AAAA,EACjC;AAAA,EAEA,IAAI,MAA2B;AAC7B,WAAO,KAAK,IAAI,MAAM,EAAE,IAAI,IAAI;AAAA,EAClC;AAAA,EAEA,IAAI,OAAO;AACF,WAAA,KAAK,IAAI,MAAM;AAAA,EACxB;AAAA,EAEA,IAAI,aAAa;AACR,WAAA,KAAK,IAAI,aAAa;AAAA,EAC/B;AAAA,EAEA,IAAI,aAAa;AACR,WAAA,KAAK,IAAI,YAAY;AAAA,EAC9B;AAAA,EAEA,IAAI,aAAa;AACR,WAAA,KAAK,IAAI,YAAY;AAAA,EAC9B;AAAA,EAEA,MAAM,QAAQ;AACR,QAAA;AACE,UAAA,CAAC,KAAK,UAAU;AAClB,cAAM,KAAK;MACb;AAEA,YAAM,KAAK;AAEJ,aAAA;AAAA,aACA,OAAO;AACP,aAAA,KAAK,cAAc,KAAK;AAAA,IACjC;AAAA,EACF;AAAA;AAAA,EAGA,2BAA2B;AACzB,UAAMC,WAASC,OAAA,qBAAqB,KAAK,iBAAiB,IAAI;AAE9D,UAAMC,WAASC,OAAAA,aAAa;AAAA,MAC1B,OAAO;AAAA;AAAA,MACP,GAAGH,SAAO,IAAI,QAAQ;AAAA;AAAA,MACtB,GAAGA,SAAO,IAAI,sBAAsB;AAAA,IAAA,CACrC;AAGI,SAAA,IAAI,UAAU,MAAMA,QAAM,EAC5B,IAAI,gBAAgBI,YAAwB,IAAI,CAAC,EACjD,IAAI,eAAeC,QAAiB,IAAI,CAAC,EACzC,IAAI,QAAQC,QAAY,CAAA,EACxB,IAAI,UAAU,MAAMC,QAAa,aAAA,IAAI,CAAC,EACtC,IAAI,MAAM,MAAMC,GAAe,IAAI,CAAC,EACpC,IAAI,YAAY,MAAMC,UAAgB,EACtC,IAAI,iBAAiB,MAAMC,kCAA0B,IAAI,CAAC,EAC1D,IAAI,UAAU,MAAMR,QAAM,EAC1B,IAAI,SAAS,MAAMS,MAAM,kBAAkB,IAAI,CAAC,EAChD,IAAI,YAAY,MAAMC,SAAA,sBAAsB,IAAI,CAAC,EACjD,IAAI,kBAAkB,cAAc,EACpC,IAAI,gBAAgBC,aAAmB,IAAI,CAAC,EAC5C,IAAI,mBAAmBC,OAAe,EACtC,IAAI,iBAAiB,MAAMC,QAAoB,EAAE,QAAQ,MAAM,IAAI,KAAK,IAAI,CAAC,EAC7E,IAAI,aAAa,MAAMC,QAAA,sBAAsB,IAAI,CAAC,EAClD;AAAA,MACC;AAAA,MACA,MACE,IAAIC,SAAA;AAAA,QACFC,mBAAE,MAAM,KAAK,OAAO,IAAI,UAAU,GAAG;AAAA,UAAA,QACnChB;AAAAA,UACA,UAAU;AAAA,YACR,YAAY;AAAA,cACV,KAAKiB,cAAK,QAAA,KAAK,KAAK,KAAK,IAAI,MAAM,qBAAqB;AAAA,YAC1D;AAAA,UACF;AAAA,QAAA,CACD;AAAA,MACH;AAAA,MAEH,IAAI,UAAU,MAAMC,SAAAA,eAAe,IAAI,CAAC;AAAA,EAC7C;AAAA,EAEA,uBAAuB;AAIhB,SAAA,UACF,KAAK,kBAAkB;AAAA,MACtB,iBAAiB;AAAA,QACf,UAAU,KAAK,OAAO,IAAI,4BAA4B;AAAA,QACtD,SAAS,OAAO,KAAK,KAAK,OAAO;AAAA,QACjC,yBAAyBF,WAAA,QAAE,KAAK,KAAK,YAAY;AAAA;AAAA,QACjD,oBAAoBA,WAAA,QAAE,KAAK,KAAK,UAAU;AAAA,QAC1C,sBAAsBG,aAAwB;AAAA,QAC9C,2BAA2B,OAAO,OAAwB,KAAK,WAAW,EAAE;AAAA;AAAA,UAE1E,CAAC,eAAe,eAAe,UAAaC,UAAAA,mBAA6B,UAAU;AAAA,QAAA,EACnF;AAAA,QACF,aAAa,KAAK,OAAO;AAAA;AAAA;AAAA,MAG3B;AAAA,IACD,CAAA,EACA,MAAM,KAAK,IAAI,KAAK;AAAA,EACzB;AAAA,EAEA,MAAM,UAAU,EAAE,eAAAC,kBAA6C;AAC7D,UAAM,kBACJ,KAAK,OAAO,IAAI,aAAa,MAAM,iBACnC,KAAK,OAAO,IAAI,kBAAkB,IAAI,MAAM;AAE1C,QAAA,mBAAmB,CAACA,gBAAe;AACjC,UAAA;AACI,cAAAC,YAAkB,YAAA,KAAK,MAAM;AAC9B,aAAA,UAAU,KAAK,YAAY;AAAA,eACzB,GAAG;AACL,aAAA,UAAU,KAAK,eAAe;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAa;AACjB,UAAMD,kBAAgB,MAAME,4BAAoB,IAAI;AAEpD,SAAK,cAAc,kBAAkB,EAAEF,eAAAA,gBAAe,CAAA;AAEjD,SAAA,IAAI,KAAK,6BAA6B;AAC3C,SAAK,qBAAqB;AACrB,SAAA,UAAU,iBAAEA,gBAAA,CAAe;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS;AACb,WAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAC5C,YAAM,WAAW,YAAY;AACvB,YAAA;AACF,gBAAM,KAAK;AAEH;iBACD,OAAO;AACd,iBAAO,KAAK;AAAA,QACd;AAAA,MAAA;AAGF,YAAM,eAAe,KAAK,OAAO,IAAI,eAAe;AAEpD,UAAI,cAAc;AACX,aAAA,OAAO,OAAO,cAAc,QAAQ;AAAA,MAAA,OACpC;AACL,cAAM,EAAE,MAAM,SAAS,KAAK,OAAO,IAAI,QAAQ;AAE/C,aAAK,OAAO,OAAO,MAAM,MAAM,QAAQ;AAAA,MACzC;AAAA,IAAA,CACD;AAAA,EACH;AAAA,EAEA,cAAc,KAAc,eAA+B;AACpD,SAAA,IAAI,MAAM,0CAA0C;AACzD,QAAI,eAAe;AACZ,WAAA,IAAI,MAAM,aAAa;AAAA,IAC9B;AAEK,SAAA,IAAI,MAAM,GAAG;AAClB,WAAO,KAAK;EACd;AAAA,EAEA,KAAK,WAAW,GAAU;AACxB,SAAK,QAAQ;AAEb,QAAI,KAAK,OAAO,IAAI,YAAY,GAAG;AACjC,cAAQ,OAAO,MAAM;AAAA,IACvB;AAGA,YAAQ,KAAK,QAAQ;AAAA,EACvB;AAAA,EAEA,MAAM,OAAO;AACX,UAAM,KAAK;AACX,UAAM,KAAK;AAEX,SAAK,WAAW;AAET,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,WAAW;AAEf,SAAK,GAAG,KAAK,KAAK,KAAK,IAAI,MAAM,KAAK,GAAG;AAEzC,eAAW,YAAYzB,mBAAW;AAC1B,YAAA,SAAS,WAAW,IAAI;AAAA,IAChC;AAEA,UAAM,KAAK,qBAAqB4B,WAAM,WAAW,QAAQ;AACzD,UAAM,KAAK,kBAAkBA,WAAM,WAAW,QAAQ;AAGtDC,kDAA6B,IAAI;AAE1B,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAY;AAChB,UAAM,KAAK;AAEX,UAAM,SAAS;AAAA,MACb,GAAGC,8BAAM;AAAA,QACP,CAAC,GAAG,OAAO,OAAO,KAAK,YAAY,GAAG,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC;AAAA,QACvE,KAAK,GAAG,SAAS;AAAA,MACnB;AAAA,MACA,GAAG,KAAK,IAAI,QAAQ,EAAE,IAAI;AAAA,IAAA;AAGtB,UAAA,WAAW,QAAQ,IAAI,4BAA4B;AAEnD,UAAA,KAAK,GAAG,KAAK,EAAE,QAAQ,UAAU,CAAC,UAAU;AAE9C,QAAA;AAEJ,QAAI,CAAC,UAAU;AACP,YAAA,QAAQ,KAAK;AACf,UAAA,MAAM,KAAK,GAAG,sBAAsB,SAASC,UAAAA,eAAe,SAAS,GAAG;AACxD,0BAAA,MAAM,KAAK,MAAM,IAAI;AAAA,UACrC,MAAM;AAAA,UACN,MAAM;AAAA,UACN,KAAK;AAAA,QAAA,CACN;AAAA,MACH;AAEA,YAAM,KAAK,KAAK,kCAAkC,EAAE,KAAK;AAAA,QACvD;AAAA,QACA,cAAc,KAAK;AAAA,MAAA,CACpB;AAEK,YAAA,KAAK,GAAG,OAAO,KAAK;AAE1B,YAAM,KAAK,KAAK,iCAAiC,EAAE,KAAK;AAAA,QACtD;AAAA,QACA,cAAc,KAAK;AAAA,MAAA,CACpB;AAEK,YAAA,KAAK,MAAM,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,KAAK;AAAA,QACL,OAAO,KAAK;AAAA,MAAA,CACb;AAED,WAAK,IAAI,MAAM,2BAA2B,KAAK,QAAQ,KAAK,KAAK;AAAA,IAAA,OAC5D;AACA,WAAA,IAAI,KAAK,sBAAsB;AAAA,IACtC;AAEA,QAAI,KAAK,IAAI;AACL,YAAA,QAAQ,KAAK;AACnB,YAAM9B,QAAS,aAAa,EAAE,QAAQ,KAAM,CAAA;AAC5C,WAAK,IAAI,MAAM,2BAA2B,KAAK,QAAQ,KAAK,KAAK;AAAA,IACnE;AAEM,UAAA,KAAK,OAAO;AAClB,SAAK,OAAO;AAEN,UAAA,KAAK,WAAW,YAAY,gBAAgB;AAElD,UAAM,KAAK,qBAAqB2B,WAAM,WAAW,SAAS;AAE1D,eAAW,YAAY5B,mBAAW;AAC1B,YAAA,SAAS,YAAY,IAAI;AAAA,IACjC;AAEA,UAAM,KAAK,kBAAkB4B,WAAM,WAAW,SAAS;AAEhD,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,uBAAuB;AAC3B,UAAM,cAAc,KAAK,OAAO,IAAI,qBAAqB;AACzD,UAAM,YAAY,KAAK,OAAO,IAAI,mBAAmB,KAAK;AAC1D,UAAM,aAAa,KAAK,OAAO,IAAI,oBAAoB,KAAK;AAExD,QAAA,CAAC,aAAa,CAAC,YAAY;AAC7B;AAAA,IACF;AAEM,UAAA,cAAc,MAAM,OAAO,cAAc;AAE/C,gBAAY,UAAU;AAEtB,QAAI,WAAW;AACb,WAAK,IAAI,KAAK,qBAAqB,SAAS,EAAE;AAC7C,aAAe,aAAa,aAAa;AAAA,IAC5C;AAEA,QAAI,YAAY;AACd,WAAK,IAAI,KAAK,sBAAsB,UAAU,EAAE;AAC/C,aAAe,aAAa,cAAc;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,UAAU;AACT,SAAA,IAAI,KAAK,sBAAsB;AACpC,UAAM,KAAK,qBAAqBA,WAAM,WAAW,OAAO;AAExD,eAAW,YAAY5B,mBAAW;AAC1B,YAAA,SAAS,UAAU,IAAI;AAAA,IAC/B;AAEA,UAAM,KAAK,kBAAkB4B,WAAM,WAAW,OAAO;AAE/C,UAAA,KAAK,OAAO;AAElB,SAAK,SAAS;AAER,UAAA,KAAK,IAAI;AAEf,YAAQ,mBAAmB;AAG3B,WAAO,OAAO;AAET,SAAA,IAAI,KAAK,2BAA2B;AAAA,EAC3C;AAAA,EAEA,MAAM,qBAAqB,eAAqD;AAE9E,UAAM,KAAK,IAAI,SAAS,EAAE,aAAa,EAAE;AAAA,EAC3C;AAAA,EAEA,MAAM,kBAAkB,eAAqD;AAE3E,UAAM,wBAAwB,KAAK,OAAO,KAAK,IAAI,aAAa;AAC5D,QAAAI,GAAAA,WAAW,qBAAqB,GAAG;AACrC,YAAM,sBAAsB,EAAE,QAAQ,KAAM,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA,EAIA,SAAkC,KAA8D;AAC1F,QAAA,OAAO,KAAK,cAAc;AACrB,aAAA,KAAK,aAAa,GAAsB;AAAA,IACjD;AAEI,QAAA,OAAO,KAAK,YAAY;AACnB,aAAA,KAAK,WAAW,GAAoB;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAiB;AACd,WAAA,KAAK,GAAG,MAAM,GAAG;AAAA,EAC1B;AACF;;"}
package/dist/Strapi.mjs CHANGED
@@ -190,18 +190,19 @@ class Strapi extends Container {
190
190
  }
191
191
  // TODO: split into more providers
192
192
  registerInternalServices() {
193
- this.add("config", () => createConfigProvider(this.internal_config, this)).add("query-params", createQueryParamService(this)).add("content-api", createContentAPI(this)).add("auth", createAuthentication()).add("server", () => createServer(this)).add("fs", () => createStrapiFs(this)).add("eventHub", () => createEventHub()).add("startupLogger", () => createStartupLogger(this)).add("logger", () => {
194
- return createLogger({
195
- level: "http",
196
- // Strapi defaults to level 'http'
197
- ...this.config.get("logger"),
198
- // DEPRECATED
199
- ...this.config.get("server.logger.config")
200
- });
201
- }).add("fetch", () => createStrapiFetch(this)).add("features", () => createFeaturesService(this)).add("requestContext", requestCtx).add("customFields", createCustomFields(this)).add("entityValidator", entityValidator).add("entityService", () => createEntityService({ strapi: this, db: this.db })).add("documents", () => createDocumentService(this)).add(
193
+ const config = createConfigProvider(this.internal_config, this);
194
+ const logger = createLogger({
195
+ level: "http",
196
+ // Strapi defaults to level 'http'
197
+ ...config.get("logger"),
198
+ // DEPRECATED
199
+ ...config.get("server.logger.config")
200
+ });
201
+ this.add("config", () => config).add("query-params", createQueryParamService(this)).add("content-api", createContentAPI(this)).add("auth", createAuthentication()).add("server", () => createServer(this)).add("fs", () => createStrapiFs(this)).add("eventHub", () => createEventHub()).add("startupLogger", () => createStartupLogger(this)).add("logger", () => logger).add("fetch", () => createStrapiFetch(this)).add("features", () => createFeaturesService(this)).add("requestContext", requestCtx).add("customFields", createCustomFields(this)).add("entityValidator", entityValidator).add("entityService", () => createEntityService({ strapi: this, db: this.db })).add("documents", () => createDocumentService(this)).add(
202
202
  "db",
203
203
  () => new Database(
204
204
  _.merge(this.config.get("database"), {
205
+ logger,
205
206
  settings: {
206
207
  migrations: {
207
208
  dir: path.join(this.dirs.app.root, "database/migrations")
@@ -296,11 +297,13 @@ class Strapi extends Container {
296
297
  for (const provider of providers) {
297
298
  await provider.register?.(this);
298
299
  }
299
- await this.runLifecyclesFunctions(LIFECYCLES.REGISTER);
300
+ await this.runPluginsLifecycles(LIFECYCLES.REGISTER);
301
+ await this.runUserLifecycles(LIFECYCLES.REGISTER);
300
302
  convertCustomFieldType(this);
301
303
  return this;
302
304
  }
303
305
  async bootstrap() {
306
+ await this.configureGlobalProxy();
304
307
  const models = [
305
308
  ...transformContentTypesToModels(
306
309
  [...Object.values(this.contentTypes), ...Object.values(this.components)],
@@ -308,48 +311,77 @@ class Strapi extends Container {
308
311
  ),
309
312
  ...this.get("models").get()
310
313
  ];
311
- await this.db.init({ models });
314
+ const skipSync = process.env.STRAPI_SKIP_SCHEMA_SYNC === "true";
315
+ await this.db.init({ models, validate: !skipSync });
312
316
  let oldContentTypes;
313
- if (await this.db.getSchemaConnection().hasTable(coreStoreModel.tableName)) {
314
- oldContentTypes = await this.store.get({
317
+ if (!skipSync) {
318
+ const start = Date.now();
319
+ if (await this.db.getSchemaConnection().hasTable(coreStoreModel.tableName)) {
320
+ oldContentTypes = await this.store.get({
321
+ type: "strapi",
322
+ name: "content_types",
323
+ key: "schema"
324
+ });
325
+ }
326
+ await this.hook("strapi::content-types.beforeSync").call({
327
+ oldContentTypes,
328
+ contentTypes: this.contentTypes
329
+ });
330
+ await this.db.schema.sync();
331
+ await this.hook("strapi::content-types.afterSync").call({
332
+ oldContentTypes,
333
+ contentTypes: this.contentTypes
334
+ });
335
+ await this.store.set({
315
336
  type: "strapi",
316
337
  name: "content_types",
317
- key: "schema"
338
+ key: "schema",
339
+ value: this.contentTypes
318
340
  });
341
+ this.log.debug(`Database sync finished (${Date.now() - start}ms)`);
342
+ } else {
343
+ this.log.warn("Skipping schema sync");
319
344
  }
320
- await this.hook("strapi::content-types.beforeSync").call({
321
- oldContentTypes,
322
- contentTypes: this.contentTypes
323
- });
324
- await this.db.schema.sync();
325
345
  if (this.EE) {
346
+ const start = Date.now();
326
347
  await index.checkLicense({ strapi: this });
348
+ this.log.debug(`License check finished (${Date.now() - start}ms)`);
327
349
  }
328
- await this.hook("strapi::content-types.afterSync").call({
329
- oldContentTypes,
330
- contentTypes: this.contentTypes
331
- });
332
- await this.store.set({
333
- type: "strapi",
334
- name: "content_types",
335
- key: "schema",
336
- value: this.contentTypes
337
- });
338
350
  await this.server.initMiddlewares();
339
351
  this.server.initRouting();
340
352
  await this.contentAPI.permissions.registerActions();
341
- await this.runLifecyclesFunctions(LIFECYCLES.BOOTSTRAP);
353
+ await this.runPluginsLifecycles(LIFECYCLES.BOOTSTRAP);
342
354
  for (const provider of providers) {
343
355
  await provider.bootstrap?.(this);
344
356
  }
357
+ await this.runUserLifecycles(LIFECYCLES.BOOTSTRAP);
345
358
  return this;
346
359
  }
360
+ async configureGlobalProxy() {
361
+ const globalProxy = this.config.get("server.proxy.global");
362
+ const httpProxy = this.config.get("server.proxy.http") || globalProxy;
363
+ const httpsProxy = this.config.get("server.proxy.https") || globalProxy;
364
+ if (!httpProxy && !httpsProxy) {
365
+ return;
366
+ }
367
+ const globalAgent = await import("global-agent");
368
+ globalAgent.bootstrap();
369
+ if (httpProxy) {
370
+ this.log.info(`Using HTTP proxy: ${httpProxy}`);
371
+ global.GLOBAL_AGENT.HTTP_PROXY = httpProxy;
372
+ }
373
+ if (httpsProxy) {
374
+ this.log.info(`Using HTTPS proxy: ${httpsProxy}`);
375
+ global.GLOBAL_AGENT.HTTPS_PROXY = httpsProxy;
376
+ }
377
+ }
347
378
  async destroy() {
348
379
  this.log.info("Shutting down Strapi");
349
- await this.runLifecyclesFunctions(LIFECYCLES.DESTROY);
380
+ await this.runPluginsLifecycles(LIFECYCLES.DESTROY);
350
381
  for (const provider of providers) {
351
382
  await provider.destroy?.(this);
352
383
  }
384
+ await this.runUserLifecycles(LIFECYCLES.DESTROY);
353
385
  await this.server.destroy();
354
386
  this.eventHub.destroy();
355
387
  await this.db?.destroy();
@@ -357,8 +389,10 @@ class Strapi extends Container {
357
389
  delete global.strapi;
358
390
  this.log.info("Strapi has been shut down");
359
391
  }
360
- async runLifecyclesFunctions(lifecycleName) {
392
+ async runPluginsLifecycles(lifecycleName) {
361
393
  await this.get("modules")[lifecycleName]();
394
+ }
395
+ async runUserLifecycles(lifecycleName) {
362
396
  const userLifecycleFunction = this.app && this.app[lifecycleName];
363
397
  if (isFunction(userLifecycleFunction)) {
364
398
  await userLifecycleFunction({ strapi: this });