directus 9.23.1 → 9.23.4

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 (383) hide show
  1. package/dist/app.js +25 -21
  2. package/dist/auth/auth.d.ts +3 -3
  3. package/dist/auth/auth.js +2 -0
  4. package/dist/auth/drivers/ldap.d.ts +1 -1
  5. package/dist/auth/drivers/ldap.js +57 -46
  6. package/dist/auth/drivers/local.d.ts +1 -1
  7. package/dist/auth/drivers/local.js +20 -17
  8. package/dist/auth/drivers/oauth2.d.ts +1 -1
  9. package/dist/auth/drivers/oauth2.js +44 -35
  10. package/dist/auth/drivers/openid.d.ts +1 -1
  11. package/dist/auth/drivers/openid.js +50 -41
  12. package/dist/auth/drivers/saml.d.ts +1 -1
  13. package/dist/auth/drivers/saml.js +20 -17
  14. package/dist/auth.d.ts +1 -1
  15. package/dist/auth.js +8 -7
  16. package/dist/cache.d.ts +9 -1
  17. package/dist/cache.js +66 -18
  18. package/dist/cli/commands/bootstrap/index.js +7 -6
  19. package/dist/cli/commands/init/index.js +3 -3
  20. package/dist/cli/commands/schema/apply.js +14 -15
  21. package/dist/cli/commands/schema/snapshot.js +2 -2
  22. package/dist/cli/utils/create-db-connection.d.ts +1 -1
  23. package/dist/cli/utils/create-db-connection.js +3 -2
  24. package/dist/cli/utils/create-env/index.d.ts +2 -2
  25. package/dist/cli/utils/create-env/index.js +1 -1
  26. package/dist/cli/utils/drivers.d.ts +1 -1
  27. package/dist/constants.d.ts +3 -2
  28. package/dist/constants.js +7 -7
  29. package/dist/controllers/activity.js +10 -11
  30. package/dist/controllers/assets.js +31 -25
  31. package/dist/controllers/auth.js +40 -26
  32. package/dist/controllers/collections.js +10 -10
  33. package/dist/controllers/dashboards.js +14 -11
  34. package/dist/controllers/extensions.js +3 -3
  35. package/dist/controllers/fields.js +20 -20
  36. package/dist/controllers/files.js +26 -20
  37. package/dist/controllers/flows.js +16 -13
  38. package/dist/controllers/folders.js +14 -11
  39. package/dist/controllers/graphql.js +6 -8
  40. package/dist/controllers/items.js +22 -19
  41. package/dist/controllers/not-found.d.ts +1 -1
  42. package/dist/controllers/not-found.js +1 -2
  43. package/dist/controllers/notifications.js +14 -11
  44. package/dist/controllers/operations.js +14 -11
  45. package/dist/controllers/panels.js +14 -11
  46. package/dist/controllers/permissions.js +14 -11
  47. package/dist/controllers/presets.js +14 -11
  48. package/dist/controllers/relations.js +10 -10
  49. package/dist/controllers/revisions.js +3 -3
  50. package/dist/controllers/roles.js +14 -11
  51. package/dist/controllers/schema.js +5 -5
  52. package/dist/controllers/server.js +7 -7
  53. package/dist/controllers/settings.js +2 -2
  54. package/dist/controllers/shares.js +21 -18
  55. package/dist/controllers/users.js +32 -36
  56. package/dist/controllers/utils.js +10 -15
  57. package/dist/controllers/webhooks.js +14 -11
  58. package/dist/database/helpers/fn/dialects/mssql.d.ts +1 -1
  59. package/dist/database/helpers/fn/dialects/mssql.js +10 -11
  60. package/dist/database/helpers/fn/dialects/mysql.d.ts +1 -1
  61. package/dist/database/helpers/fn/dialects/mysql.js +2 -3
  62. package/dist/database/helpers/fn/dialects/oracle.d.ts +1 -1
  63. package/dist/database/helpers/fn/dialects/oracle.js +10 -11
  64. package/dist/database/helpers/fn/dialects/postgres.d.ts +1 -1
  65. package/dist/database/helpers/fn/dialects/postgres.js +10 -11
  66. package/dist/database/helpers/fn/dialects/sqlite.d.ts +1 -1
  67. package/dist/database/helpers/fn/dialects/sqlite.js +10 -11
  68. package/dist/database/helpers/fn/types.d.ts +5 -6
  69. package/dist/database/helpers/fn/types.js +4 -5
  70. package/dist/database/helpers/geometry/dialects/mssql.d.ts +3 -3
  71. package/dist/database/helpers/geometry/dialects/mysql.d.ts +1 -1
  72. package/dist/database/helpers/geometry/dialects/oracle.d.ts +3 -3
  73. package/dist/database/helpers/geometry/dialects/postgres.d.ts +3 -3
  74. package/dist/database/helpers/geometry/dialects/postgres.js +1 -2
  75. package/dist/database/helpers/geometry/dialects/redshift.d.ts +2 -2
  76. package/dist/database/helpers/geometry/dialects/sqlite.d.ts +1 -1
  77. package/dist/database/helpers/geometry/types.d.ts +2 -2
  78. package/dist/database/helpers/geometry/types.js +1 -2
  79. package/dist/database/helpers/index.d.ts +5 -5
  80. package/dist/database/helpers/schema/dialects/cockroachdb.d.ts +1 -1
  81. package/dist/database/helpers/schema/dialects/mssql.d.ts +1 -1
  82. package/dist/database/helpers/schema/dialects/mysql.d.ts +1 -1
  83. package/dist/database/helpers/schema/dialects/mysql.js +1 -2
  84. package/dist/database/helpers/schema/dialects/oracle.d.ts +2 -2
  85. package/dist/database/helpers/schema/dialects/oracle.js +4 -6
  86. package/dist/database/helpers/schema/types.d.ts +4 -4
  87. package/dist/database/helpers/types.d.ts +1 -1
  88. package/dist/database/helpers/types.js +1 -0
  89. package/dist/database/index.d.ts +1 -1
  90. package/dist/database/index.js +13 -13
  91. package/dist/database/migrations/20201028A-remove-collection-foreign-keys.d.ts +1 -1
  92. package/dist/database/migrations/20201029A-remove-system-relations.d.ts +1 -1
  93. package/dist/database/migrations/20201029B-remove-system-collections.d.ts +1 -1
  94. package/dist/database/migrations/20201029C-remove-system-fields.d.ts +1 -1
  95. package/dist/database/migrations/20201105A-add-cascade-system-relations.d.ts +1 -1
  96. package/dist/database/migrations/20201105B-change-webhook-url-type.d.ts +1 -1
  97. package/dist/database/migrations/20210225A-add-relations-sort-field.d.ts +1 -1
  98. package/dist/database/migrations/20210225A-add-relations-sort-field.js +1 -2
  99. package/dist/database/migrations/20210304A-remove-locked-fields.d.ts +1 -1
  100. package/dist/database/migrations/20210312A-webhooks-collections-text.d.ts +1 -1
  101. package/dist/database/migrations/20210331A-add-refresh-interval.d.ts +1 -1
  102. package/dist/database/migrations/20210415A-make-filesize-nullable.d.ts +1 -1
  103. package/dist/database/migrations/20210416A-add-collections-accountability.d.ts +1 -1
  104. package/dist/database/migrations/20210422A-remove-files-interface.d.ts +1 -1
  105. package/dist/database/migrations/20210506A-rename-interfaces.d.ts +1 -1
  106. package/dist/database/migrations/20210510A-restructure-relations.d.ts +1 -1
  107. package/dist/database/migrations/20210518A-add-foreign-key-constraints.d.ts +1 -1
  108. package/dist/database/migrations/20210518A-add-foreign-key-constraints.js +1 -1
  109. package/dist/database/migrations/20210519A-add-system-fk-triggers.d.ts +1 -1
  110. package/dist/database/migrations/20210519A-add-system-fk-triggers.js +2 -2
  111. package/dist/database/migrations/20210521A-add-collections-icon-color.d.ts +1 -1
  112. package/dist/database/migrations/20210525A-add-insights.d.ts +1 -1
  113. package/dist/database/migrations/20210608A-add-deep-clone-config.d.ts +1 -1
  114. package/dist/database/migrations/20210626A-change-filesize-bigint.d.ts +1 -1
  115. package/dist/database/migrations/20210716A-add-conditions-to-fields.d.ts +1 -1
  116. package/dist/database/migrations/20210721A-add-default-folder.d.ts +1 -1
  117. package/dist/database/migrations/20210802A-replace-groups.d.ts +1 -1
  118. package/dist/database/migrations/20210803A-add-required-to-fields.d.ts +1 -1
  119. package/dist/database/migrations/20210805A-update-groups.d.ts +1 -1
  120. package/dist/database/migrations/20210805B-change-image-metadata-structure.d.ts +1 -1
  121. package/dist/database/migrations/20210805B-change-image-metadata-structure.js +15 -15
  122. package/dist/database/migrations/20210811A-add-geometry-config.d.ts +1 -1
  123. package/dist/database/migrations/20210831A-remove-limit-column.d.ts +1 -1
  124. package/dist/database/migrations/20210903A-add-auth-provider.d.ts +1 -1
  125. package/dist/database/migrations/20210907A-webhooks-collections-not-null.d.ts +1 -1
  126. package/dist/database/migrations/20210910A-move-module-setup.d.ts +1 -1
  127. package/dist/database/migrations/20210920A-webhooks-url-not-null.d.ts +1 -1
  128. package/dist/database/migrations/20210924A-add-collection-organization.d.ts +1 -1
  129. package/dist/database/migrations/20210927A-replace-fields-group.d.ts +1 -1
  130. package/dist/database/migrations/20210927B-replace-m2m-interface.d.ts +1 -1
  131. package/dist/database/migrations/20210929A-rename-login-action.d.ts +1 -1
  132. package/dist/database/migrations/20211007A-update-presets.d.ts +1 -1
  133. package/dist/database/migrations/20211007A-update-presets.js +7 -9
  134. package/dist/database/migrations/20211009A-add-auth-data.d.ts +1 -1
  135. package/dist/database/migrations/20211016A-add-webhook-headers.d.ts +1 -1
  136. package/dist/database/migrations/20211103A-set-unique-to-user-token.d.ts +1 -1
  137. package/dist/database/migrations/20211103B-update-special-geometry.d.ts +1 -1
  138. package/dist/database/migrations/20211104A-remove-collections-listing.d.ts +1 -1
  139. package/dist/database/migrations/20211118A-add-notifications.d.ts +1 -1
  140. package/dist/database/migrations/20211211A-add-shares.d.ts +1 -1
  141. package/dist/database/migrations/20211230A-add-project-descriptor.d.ts +1 -1
  142. package/dist/database/migrations/20220303A-remove-default-project-color.d.ts +1 -1
  143. package/dist/database/migrations/20220308A-add-bookmark-icon-and-color.d.ts +1 -1
  144. package/dist/database/migrations/20220314A-add-translation-strings.d.ts +1 -1
  145. package/dist/database/migrations/20220322A-rename-field-typecast-flags.d.ts +1 -1
  146. package/dist/database/migrations/20220323A-add-field-validation.d.ts +1 -1
  147. package/dist/database/migrations/20220325A-fix-typecast-flags.d.ts +1 -1
  148. package/dist/database/migrations/20220325B-add-default-language.d.ts +1 -1
  149. package/dist/database/migrations/20220402A-remove-default-value-panel-icon.d.ts +1 -1
  150. package/dist/database/migrations/20220429A-add-flows.d.ts +1 -1
  151. package/dist/database/migrations/20220429B-add-color-to-insights-icon.d.ts +1 -1
  152. package/dist/database/migrations/20220429C-drop-non-null-from-ip-of-activity.d.ts +1 -1
  153. package/dist/database/migrations/20220429D-drop-non-null-from-sender-of-notifications.d.ts +1 -1
  154. package/dist/database/migrations/20220614A-rename-hook-trigger-to-event.d.ts +1 -1
  155. package/dist/database/migrations/20220801A-update-notifications-timestamp-column.d.ts +1 -1
  156. package/dist/database/migrations/20220802A-add-custom-aspect-ratios.d.ts +1 -1
  157. package/dist/database/migrations/20220826A-add-origin-to-accountability.d.ts +1 -1
  158. package/dist/database/migrations/run.d.ts +1 -1
  159. package/dist/database/migrations/run.js +1 -1
  160. package/dist/database/run-ast.d.ts +3 -3
  161. package/dist/database/run-ast.js +21 -30
  162. package/dist/database/seeds/run.d.ts +1 -1
  163. package/dist/database/seeds/run.js +1 -2
  164. package/dist/database/system-data/app-access-permissions/index.d.ts +1 -1
  165. package/dist/database/system-data/collections/index.d.ts +1 -1
  166. package/dist/database/system-data/collections/index.js +2 -2
  167. package/dist/database/system-data/fields/collections.yaml +2 -0
  168. package/dist/database/system-data/fields/index.d.ts +1 -1
  169. package/dist/database/system-data/fields/index.js +3 -4
  170. package/dist/database/system-data/fields/settings.yaml +4 -0
  171. package/dist/database/system-data/relations/index.d.ts +1 -1
  172. package/dist/emitter.d.ts +1 -1
  173. package/dist/emitter.js +3 -0
  174. package/dist/env.js +11 -3
  175. package/dist/exceptions/database/dialects/mssql.d.ts +1 -1
  176. package/dist/exceptions/database/dialects/mssql.js +5 -6
  177. package/dist/exceptions/database/dialects/mysql.d.ts +1 -1
  178. package/dist/exceptions/database/dialects/mysql.js +19 -25
  179. package/dist/exceptions/database/dialects/oracle.d.ts +1 -1
  180. package/dist/exceptions/database/dialects/postgres.d.ts +1 -1
  181. package/dist/exceptions/database/dialects/sqlite.d.ts +1 -1
  182. package/dist/exceptions/database/translate.d.ts +1 -1
  183. package/dist/exceptions/database/value-out-of-range.js +1 -1
  184. package/dist/exceptions/range-not-satisfiable.js +2 -3
  185. package/dist/extensions.d.ts +1 -1
  186. package/dist/extensions.js +43 -33
  187. package/dist/flows.js +65 -46
  188. package/dist/logger.d.ts +2 -1
  189. package/dist/logger.js +35 -19
  190. package/dist/logger.test.d.ts +1 -0
  191. package/dist/mailer.js +16 -16
  192. package/dist/messenger.js +9 -7
  193. package/dist/middleware/authenticate.d.ts +1 -1
  194. package/dist/middleware/authenticate.js +13 -6
  195. package/dist/middleware/cache.d.ts +1 -1
  196. package/dist/middleware/cache.js +16 -16
  197. package/dist/middleware/check-ip.d.ts +1 -1
  198. package/dist/middleware/check-ip.js +1 -1
  199. package/dist/middleware/collection-exists.d.ts +1 -1
  200. package/dist/middleware/collection-exists.js +5 -5
  201. package/dist/middleware/cors.d.ts +1 -1
  202. package/dist/middleware/cors.js +7 -7
  203. package/dist/middleware/error-handler.d.ts +1 -1
  204. package/dist/middleware/error-handler.js +11 -12
  205. package/dist/middleware/extract-token.d.ts +1 -1
  206. package/dist/middleware/extract-token.js +2 -2
  207. package/dist/middleware/get-permissions.d.ts +1 -1
  208. package/dist/middleware/graphql.d.ts +1 -1
  209. package/dist/middleware/graphql.js +15 -9
  210. package/dist/middleware/rate-limiter-global.d.ts +5 -0
  211. package/dist/middleware/rate-limiter-global.js +48 -0
  212. package/dist/middleware/{rate-limiter.d.ts → rate-limiter-ip.d.ts} +2 -2
  213. package/dist/middleware/{rate-limiter.js → rate-limiter-ip.js} +5 -5
  214. package/dist/middleware/respond.d.ts +1 -1
  215. package/dist/middleware/respond.js +18 -19
  216. package/dist/middleware/sanitize-query.d.ts +1 -1
  217. package/dist/middleware/sanitize-query.js +1 -1
  218. package/dist/middleware/schema.d.ts +1 -1
  219. package/dist/middleware/use-collection.d.ts +1 -1
  220. package/dist/operations/condition/index.d.ts +1 -1
  221. package/dist/operations/exec/index.js +15 -4
  222. package/dist/operations/item-create/index.js +1 -2
  223. package/dist/operations/item-delete/index.d.ts +1 -1
  224. package/dist/operations/item-read/index.d.ts +1 -1
  225. package/dist/operations/item-update/index.d.ts +1 -1
  226. package/dist/operations/item-update/index.js +1 -2
  227. package/dist/operations/notification/index.js +1 -2
  228. package/dist/operations/request/index.js +19 -19
  229. package/dist/operations/trigger/index.js +2 -3
  230. package/dist/rate-limiter.d.ts +1 -1
  231. package/dist/rate-limiter.js +9 -9
  232. package/dist/request/validate-ip.js +2 -2
  233. package/dist/server.js +12 -13
  234. package/dist/services/activity.d.ts +1 -1
  235. package/dist/services/activity.js +17 -16
  236. package/dist/services/assets.d.ts +3 -3
  237. package/dist/services/assets.js +35 -37
  238. package/dist/services/authentication.d.ts +2 -2
  239. package/dist/services/authentication.js +22 -19
  240. package/dist/services/authorization.d.ts +3 -3
  241. package/dist/services/authorization.js +27 -31
  242. package/dist/services/collections.d.ts +5 -5
  243. package/dist/services/collections.js +54 -50
  244. package/dist/services/dashboards.d.ts +1 -1
  245. package/dist/services/fields.d.ts +5 -5
  246. package/dist/services/fields.js +50 -50
  247. package/dist/services/files.d.ts +1 -2
  248. package/dist/services/files.js +33 -27
  249. package/dist/services/flows.d.ts +2 -2
  250. package/dist/services/folders.d.ts +1 -1
  251. package/dist/services/graphql/index.d.ts +4 -4
  252. package/dist/services/graphql/index.js +259 -252
  253. package/dist/services/graphql/utils/add-path-to-validation-error.js +1 -2
  254. package/dist/services/graphql/utils/process-error.d.ts +2 -2
  255. package/dist/services/graphql/utils/process-error.js +11 -4
  256. package/dist/services/import-export.d.ts +3 -3
  257. package/dist/services/import-export.js +30 -27
  258. package/dist/services/items.d.ts +3 -3
  259. package/dist/services/items.js +42 -36
  260. package/dist/services/mail/index.d.ts +4 -4
  261. package/dist/services/mail/index.js +14 -10
  262. package/dist/services/meta.d.ts +3 -3
  263. package/dist/services/meta.js +11 -9
  264. package/dist/services/notifications.d.ts +3 -3
  265. package/dist/services/notifications.js +10 -9
  266. package/dist/services/operations.d.ts +2 -2
  267. package/dist/services/panels.d.ts +1 -1
  268. package/dist/services/payload.d.ts +3 -3
  269. package/dist/services/payload.js +124 -122
  270. package/dist/services/permissions.d.ts +3 -3
  271. package/dist/services/permissions.js +11 -11
  272. package/dist/services/presets.d.ts +1 -1
  273. package/dist/services/relations.d.ts +6 -6
  274. package/dist/services/relations.js +45 -43
  275. package/dist/services/revisions.d.ts +1 -1
  276. package/dist/services/revisions.js +3 -3
  277. package/dist/services/roles.d.ts +2 -2
  278. package/dist/services/roles.js +7 -7
  279. package/dist/services/schema.d.ts +3 -3
  280. package/dist/services/schema.js +9 -11
  281. package/dist/services/server.d.ts +3 -3
  282. package/dist/services/server.js +88 -32
  283. package/dist/services/settings.d.ts +1 -1
  284. package/dist/services/shares.d.ts +1 -1
  285. package/dist/services/shares.js +14 -15
  286. package/dist/services/specifications.d.ts +4 -4
  287. package/dist/services/specifications.js +137 -119
  288. package/dist/services/tfa.d.ts +2 -2
  289. package/dist/services/tfa.js +7 -5
  290. package/dist/services/users.d.ts +2 -6
  291. package/dist/services/users.js +37 -40
  292. package/dist/services/utils.d.ts +3 -3
  293. package/dist/services/utils.js +10 -8
  294. package/dist/services/webhooks.d.ts +2 -2
  295. package/dist/services/webhooks.js +2 -1
  296. package/dist/storage/register-locations.js +1 -1
  297. package/dist/types/assets.d.ts +1 -1
  298. package/dist/types/ast.d.ts +1 -1
  299. package/dist/types/auth.d.ts +2 -2
  300. package/dist/types/collection.d.ts +2 -2
  301. package/dist/types/events.d.ts +2 -2
  302. package/dist/types/graphql.d.ts +2 -2
  303. package/dist/types/items.d.ts +3 -3
  304. package/dist/types/services.d.ts +5 -5
  305. package/dist/types/snapshot.d.ts +4 -4
  306. package/dist/utils/apply-diff.d.ts +3 -3
  307. package/dist/utils/apply-diff.js +25 -28
  308. package/dist/utils/apply-query.d.ts +3 -3
  309. package/dist/utils/apply-query.js +10 -12
  310. package/dist/utils/apply-snapshot.d.ts +3 -3
  311. package/dist/utils/apply-snapshot.js +5 -6
  312. package/dist/utils/construct-flow-tree.d.ts +1 -1
  313. package/dist/utils/construct-flow-tree.js +2 -2
  314. package/dist/utils/dynamic-import.js +1 -1
  315. package/dist/utils/filter-items.d.ts +1 -1
  316. package/dist/utils/generate-hash.js +1 -1
  317. package/dist/utils/get-accountability-for-role.d.ts +2 -2
  318. package/dist/utils/get-accountability-for-role.js +1 -1
  319. package/dist/utils/get-ast-from-query.d.ts +3 -3
  320. package/dist/utils/get-ast-from-query.js +22 -28
  321. package/dist/utils/get-auth-providers.js +1 -1
  322. package/dist/utils/get-cache-headers.d.ts +1 -1
  323. package/dist/utils/get-cache-headers.js +6 -7
  324. package/dist/utils/get-cache-key.d.ts +1 -1
  325. package/dist/utils/get-cache-key.js +2 -3
  326. package/dist/utils/get-collection-from-alias.d.ts +1 -1
  327. package/dist/utils/get-collection-from-alias.js +1 -0
  328. package/dist/utils/get-column-path.d.ts +2 -2
  329. package/dist/utils/get-column-path.js +3 -4
  330. package/dist/utils/get-column.d.ts +4 -4
  331. package/dist/utils/get-column.js +4 -5
  332. package/dist/utils/get-default-value.d.ts +2 -2
  333. package/dist/utils/get-default-value.js +2 -3
  334. package/dist/utils/get-graphql-query-and-variables.d.ts +1 -1
  335. package/dist/utils/get-graphql-query-and-variables.js +1 -2
  336. package/dist/utils/get-graphql-type.d.ts +2 -2
  337. package/dist/utils/get-graphql-type.js +1 -1
  338. package/dist/utils/get-ip-from-req.d.ts +1 -1
  339. package/dist/utils/get-ip-from-req.js +2 -2
  340. package/dist/utils/get-local-type.d.ts +1 -1
  341. package/dist/utils/get-local-type.js +3 -3
  342. package/dist/utils/get-milliseconds.js +1 -2
  343. package/dist/utils/get-permissions.d.ts +1 -1
  344. package/dist/utils/get-permissions.js +12 -12
  345. package/dist/utils/get-relation-info.d.ts +1 -1
  346. package/dist/utils/get-relation-info.js +3 -5
  347. package/dist/utils/get-relation-type.d.ts +1 -1
  348. package/dist/utils/get-relation-type.js +3 -4
  349. package/dist/utils/get-schema.d.ts +2 -2
  350. package/dist/utils/get-schema.js +20 -22
  351. package/dist/utils/get-snapshot-diff.js +2 -3
  352. package/dist/utils/get-snapshot.d.ts +3 -3
  353. package/dist/utils/get-snapshot.js +6 -8
  354. package/dist/utils/is-directus-jwt.js +1 -1
  355. package/dist/utils/is-url-allowed.js +5 -2
  356. package/dist/utils/job-queue.js +2 -0
  357. package/dist/utils/jwt.d.ts +1 -1
  358. package/dist/utils/merge-permissions-for-share.d.ts +1 -1
  359. package/dist/utils/merge-permissions-for-share.js +3 -4
  360. package/dist/utils/merge-permissions.d.ts +3 -3
  361. package/dist/utils/reduce-schema.d.ts +1 -1
  362. package/dist/utils/reduce-schema.js +12 -12
  363. package/dist/utils/sanitize-query.d.ts +1 -1
  364. package/dist/utils/sanitize-query.js +27 -27
  365. package/dist/utils/sanitize-schema.d.ts +2 -2
  366. package/dist/utils/should-skip-cache.d.ts +7 -0
  367. package/dist/utils/should-skip-cache.js +21 -0
  368. package/dist/utils/should-skip-cache.test.d.ts +1 -0
  369. package/dist/utils/track.js +16 -16
  370. package/dist/utils/transformations.d.ts +1 -1
  371. package/dist/utils/transformations.js +2 -4
  372. package/dist/utils/url.js +7 -2
  373. package/dist/utils/user-name.d.ts +1 -1
  374. package/dist/utils/validate-diff.js +7 -8
  375. package/dist/utils/validate-keys.d.ts +2 -2
  376. package/dist/utils/validate-keys.js +1 -1
  377. package/dist/utils/validate-query.d.ts +1 -1
  378. package/dist/utils/validate-query.js +3 -3
  379. package/dist/utils/validate-storage.js +8 -8
  380. package/dist/webhooks.js +3 -3
  381. package/package.json +36 -37
  382. package/dist/utils/with-timeout.d.ts +0 -1
  383. package/dist/utils/with-timeout.js +0 -16
@@ -1,2 +1,2 @@
1
- import { CollectionMeta } from '../../../types';
1
+ import type { CollectionMeta } from '../../../types';
2
2
  export declare const systemCollectionRows: CollectionMeta[];
@@ -4,6 +4,6 @@ exports.systemCollectionRows = void 0;
4
4
  const lodash_1 = require("lodash");
5
5
  const require_yaml_1 = require("../../../utils/require-yaml");
6
6
  const systemData = (0, require_yaml_1.requireYAML)(require.resolve('./collections.yaml'));
7
- exports.systemCollectionRows = systemData.data.map((row) => {
8
- return (0, lodash_1.merge)({ system: true }, systemData.defaults, row);
7
+ exports.systemCollectionRows = systemData['data'].map((row) => {
8
+ return (0, lodash_1.merge)({ system: true }, systemData['defaults'], row);
9
9
  });
@@ -72,12 +72,14 @@ fields:
72
72
  meta:
73
73
  interface: system-language
74
74
  width: half
75
+ required: true
75
76
  - field: translation
76
77
  name: $t:field_options.directus_collections.collection_name
77
78
  type: string
78
79
  meta:
79
80
  interface: input
80
81
  width: half
82
+ required: true
81
83
  options:
82
84
  placeholder: $t:field_options.directus_collections.translation_placeholder
83
85
  - field: singular
@@ -1,2 +1,2 @@
1
- import { FieldMeta } from '@directus/shared/types';
1
+ import type { FieldMeta } from '@directus/shared/types';
2
2
  export declare const systemFieldRows: FieldMeta[];
@@ -18,16 +18,15 @@ for (const filepath of fieldData) {
18
18
  if (filepath.includes('_defaults') || filepath.includes('index'))
19
19
  continue;
20
20
  const systemFields = (0, require_yaml_1.requireYAML)(path_1.default.resolve(__dirname, filepath));
21
- systemFields.fields.forEach((field, index) => {
21
+ systemFields['fields'].forEach((field, index) => {
22
22
  const systemField = (0, lodash_1.merge)({ system: true }, defaults, field, {
23
- collection: systemFields.table,
23
+ collection: systemFields['table'],
24
24
  sort: index + 1,
25
25
  });
26
26
  // Dynamically populate auth providers field
27
27
  if (systemField.collection === 'directus_users' && systemField.field === 'provider') {
28
28
  (0, get_auth_providers_1.getAuthProviders)().forEach(({ name }) => {
29
- var _a, _b;
30
- (_b = (_a = systemField.options) === null || _a === void 0 ? void 0 : _a.choices) === null || _b === void 0 ? void 0 : _b.push({
29
+ systemField.options?.['choices']?.push({
31
30
  text: (0, format_title_1.default)(name),
32
31
  value: name,
33
32
  });
@@ -183,6 +183,7 @@ fields:
183
183
  slug: true
184
184
  onlyOnCreate: false
185
185
  width: full
186
+ required: true
186
187
  - field: fit
187
188
  name: $t:field_options.directus_settings.storage_asset_presets.fit_label
188
189
  type: string
@@ -322,6 +323,7 @@ fields:
322
323
  is_nullable: false
323
324
  meta:
324
325
  interface: text-input
326
+ required: true
325
327
  options:
326
328
  placeholder: $t:field_options.directus_settings.basemaps_name_placeholder
327
329
  - field: type
@@ -397,6 +399,7 @@ fields:
397
399
  meta:
398
400
  interface: text-input
399
401
  width: half
402
+ required: true
400
403
  options:
401
404
  placeholder: $t:text
402
405
  - field: value
@@ -405,5 +408,6 @@ fields:
405
408
  meta:
406
409
  interface: input
407
410
  width: half
411
+ required: true
408
412
  options:
409
413
  placeholder: $t:value
@@ -1,2 +1,2 @@
1
- import { RelationMeta } from '@directus/shared/types';
1
+ import type { RelationMeta } from '@directus/shared/types';
2
2
  export declare const systemRelationRows: RelationMeta[];
package/dist/emitter.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ActionHandler, EventContext, FilterHandler, InitHandler } from '@directus/shared/types';
1
+ import type { ActionHandler, EventContext, FilterHandler, InitHandler } from '@directus/shared/types';
2
2
  export declare class Emitter {
3
3
  private filterEmitter;
4
4
  private actionEmitter;
package/dist/emitter.js CHANGED
@@ -7,6 +7,9 @@ exports.Emitter = void 0;
7
7
  const eventemitter2_1 = require("eventemitter2");
8
8
  const logger_1 = __importDefault(require("./logger"));
9
9
  class Emitter {
10
+ filterEmitter;
11
+ actionEmitter;
12
+ initEmitter;
10
13
  constructor() {
11
14
  const emitterOptions = {
12
15
  wildcard: true,
package/dist/env.js CHANGED
@@ -62,6 +62,7 @@ const allowedEnvironmentVars = [
62
62
  'CORS_CREDENTIALS',
63
63
  'CORS_MAX_AGE',
64
64
  // rate limiting
65
+ 'RATE_LIMITER_GLOBAL_.+',
65
66
  'RATE_LIMITER_.+',
66
67
  // cache
67
68
  'CACHE_ENABLED',
@@ -80,6 +81,7 @@ const allowedEnvironmentVars = [
80
81
  'CACHE_REDIS_PASSWORD',
81
82
  'CACHE_MEMCACHE',
82
83
  'CACHE_VALUE_MAX_SIZE',
84
+ 'CACHE_SKIP_ALLOWED',
83
85
  'CACHE_HEALTHCHECK_THRESHOLD',
84
86
  // storage
85
87
  'STORAGE_LOCATIONS',
@@ -203,9 +205,13 @@ const defaults = {
203
205
  STORAGE_LOCAL_DRIVER: 'local',
204
206
  STORAGE_LOCAL_ROOT: './uploads',
205
207
  RATE_LIMITER_ENABLED: false,
206
- RATE_LIMITER_POINTS: 25,
208
+ RATE_LIMITER_POINTS: 50,
207
209
  RATE_LIMITER_DURATION: 1,
208
210
  RATE_LIMITER_STORE: 'memory',
211
+ RATE_LIMITER_GLOBAL_ENABLED: false,
212
+ RATE_LIMITER_GLOBAL_POINTS: 1000,
213
+ RATE_LIMITER_GLOBAL_DURATION: 1,
214
+ RATE_LIMITER_GLOBAL_STORE: 'memory',
209
215
  ACCESS_TOKEN_TTL: '15m',
210
216
  REFRESH_TOKEN_TTL: '7d',
211
217
  REFRESH_TOKEN_COOKIE_SECURE: false,
@@ -229,6 +235,7 @@ const defaults = {
229
235
  CACHE_SCHEMA: true,
230
236
  CACHE_PERMISSIONS: true,
231
237
  CACHE_VALUE_MAX_SIZE: false,
238
+ CACHE_SKIP_ALLOWED: false,
232
239
  AUTH_PROVIDERS: '',
233
240
  AUTH_DISABLE_DEFAULT: false,
234
241
  PACKAGE_FILE_LOCATION: '.',
@@ -241,7 +248,7 @@ const defaults = {
241
248
  EMAIL_SENDMAIL_PATH: '/usr/sbin/sendmail',
242
249
  TELEMETRY: true,
243
250
  ASSETS_CACHE_TTL: '30d',
244
- ASSETS_TRANSFORM_MAX_CONCURRENT: 1,
251
+ ASSETS_TRANSFORM_MAX_CONCURRENT: 25,
245
252
  ASSETS_TRANSFORM_IMAGE_MAX_DIMENSION: 6000,
246
253
  ASSETS_TRANSFORM_MAX_OPERATIONS: 5,
247
254
  ASSETS_TRANSFORM_TIMEOUT: '7500ms',
@@ -268,6 +275,7 @@ const typeMap = {
268
275
  DB_DATABASE: 'string',
269
276
  DB_PORT: 'number',
270
277
  DB_EXCLUDE_TABLES: 'array',
278
+ CACHE_SKIP_ALLOWED: 'boolean',
271
279
  IMPORT_IP_DENY_LIST: 'array',
272
280
  FILE_METADATA_ALLOW_LIST: 'array',
273
281
  GRAPHQL_INTROSPECTION: 'boolean',
@@ -300,7 +308,7 @@ function refreshEnv() {
300
308
  }
301
309
  exports.refreshEnv = refreshEnv;
302
310
  function processConfiguration() {
303
- const configPath = path_1.default.resolve(process.env.CONFIG_PATH || defaults.CONFIG_PATH);
311
+ const configPath = path_1.default.resolve(process.env['CONFIG_PATH'] || defaults['CONFIG_PATH']);
304
312
  if (fs_1.default.existsSync(configPath) === false)
305
313
  return {};
306
314
  const fileExt = path_1.default.extname(configPath).toLowerCase();
@@ -1,2 +1,2 @@
1
- import { MSSQLError } from './types';
1
+ import type { MSSQLError } from './types';
2
2
  export declare function extractError(error: MSSQLError): Promise<MSSQLError | Error>;
@@ -48,15 +48,14 @@ async function uniqueViolation(error) {
48
48
  * While it's not ideal, the best next thing we can do is extract the column name from
49
49
  * information_schema when this happens
50
50
  */
51
- var _a, _b, _c;
52
51
  const betweenQuotes = /'([^']+)'/g;
53
52
  const betweenParens = /\(([^)]+)\)/g;
54
53
  const quoteMatches = error.message.match(betweenQuotes);
55
54
  const parenMatches = error.message.match(betweenParens);
56
55
  if (!quoteMatches || !parenMatches)
57
56
  return error;
58
- const keyName = (_a = quoteMatches[1]) === null || _a === void 0 ? void 0 : _a.slice(1, -1);
59
- let collection = (_b = quoteMatches[0]) === null || _b === void 0 ? void 0 : _b.slice(1, -1);
57
+ const keyName = quoteMatches[1]?.slice(1, -1);
58
+ let collection = quoteMatches[0]?.slice(1, -1);
60
59
  let field = null;
61
60
  if (keyName) {
62
61
  const database = (0, database_1.default)();
@@ -75,10 +74,10 @@ async function uniqueViolation(error) {
75
74
  })
76
75
  .where('sys.indexes.name', '=', keyName)
77
76
  .first();
78
- collection = constraintUsage === null || constraintUsage === void 0 ? void 0 : constraintUsage.collection;
79
- field = constraintUsage === null || constraintUsage === void 0 ? void 0 : constraintUsage.field;
77
+ collection = constraintUsage?.collection;
78
+ field = constraintUsage?.field;
80
79
  }
81
- const invalid = (_c = parenMatches[parenMatches.length - 1]) === null || _c === void 0 ? void 0 : _c.slice(1, -1);
80
+ const invalid = parenMatches[parenMatches.length - 1]?.slice(1, -1);
82
81
  return new record_not_unique_1.RecordNotUniqueException(field, {
83
82
  collection,
84
83
  field,
@@ -1,2 +1,2 @@
1
- import { MySQLError } from './types';
1
+ import type { MySQLError } from './types';
2
2
  export declare function extractError(error: MySQLError): MySQLError | Error;
@@ -38,7 +38,6 @@ function extractError(error) {
38
38
  }
39
39
  exports.extractError = extractError;
40
40
  function uniqueViolation(error) {
41
- var _a, _b, _c, _d, _e;
42
41
  const betweenQuotes = /'([^']+)'/g;
43
42
  const matches = error.sqlMessage.match(betweenQuotes);
44
43
  if (!matches)
@@ -50,13 +49,13 @@ function uniqueViolation(error) {
50
49
  */
51
50
  /** MySQL 8+ style error message */
52
51
  if (matches[1].includes('.')) {
53
- const collection = (_a = matches[1]) === null || _a === void 0 ? void 0 : _a.slice(1, -1).split('.')[0];
52
+ const collection = matches[1]?.slice(1, -1).split('.')[0];
54
53
  let field = null;
55
- const indexName = (_b = matches[1]) === null || _b === void 0 ? void 0 : _b.slice(1, -1).split('.')[1];
56
- if ((indexName === null || indexName === void 0 ? void 0 : indexName.startsWith(`${collection}_`)) && indexName.endsWith('_unique')) {
57
- field = indexName === null || indexName === void 0 ? void 0 : indexName.slice(collection.length + 1, -7);
54
+ const indexName = matches[1]?.slice(1, -1).split('.')[1];
55
+ if (indexName?.startsWith(`${collection}_`) && indexName.endsWith('_unique')) {
56
+ field = indexName?.slice(collection.length + 1, -7);
58
57
  }
59
- const invalid = (_c = matches[0]) === null || _c === void 0 ? void 0 : _c.slice(1, -1);
58
+ const invalid = matches[0]?.slice(1, -1);
60
59
  return new record_not_unique_1.RecordNotUniqueException(field, {
61
60
  collection,
62
61
  field,
@@ -65,13 +64,13 @@ function uniqueViolation(error) {
65
64
  }
66
65
  else {
67
66
  /** MySQL 5.7 style error message */
68
- const indexName = (_d = matches[1]) === null || _d === void 0 ? void 0 : _d.slice(1, -1);
67
+ const indexName = matches[1]?.slice(1, -1);
69
68
  const collection = indexName.split('_')[0];
70
69
  let field = null;
71
- if ((indexName === null || indexName === void 0 ? void 0 : indexName.startsWith(`${collection}_`)) && indexName.endsWith('_unique')) {
72
- field = indexName === null || indexName === void 0 ? void 0 : indexName.slice(collection.length + 1, -7);
70
+ if (indexName?.startsWith(`${collection}_`) && indexName.endsWith('_unique')) {
71
+ field = indexName?.slice(collection.length + 1, -7);
73
72
  }
74
- const invalid = (_e = matches[0]) === null || _e === void 0 ? void 0 : _e.slice(1, -1);
73
+ const invalid = matches[0]?.slice(1, -1);
75
74
  return new record_not_unique_1.RecordNotUniqueException(field, {
76
75
  collection,
77
76
  field,
@@ -80,61 +79,57 @@ function uniqueViolation(error) {
80
79
  }
81
80
  }
82
81
  function numericValueOutOfRange(error) {
83
- var _a, _b;
84
82
  const betweenTicks = /`([^`]+)`/g;
85
83
  const betweenQuotes = /'([^']+)'/g;
86
84
  const tickMatches = error.sql.match(betweenTicks);
87
85
  const quoteMatches = error.sqlMessage.match(betweenQuotes);
88
86
  if (!tickMatches || !quoteMatches)
89
87
  return error;
90
- const collection = (_a = tickMatches[0]) === null || _a === void 0 ? void 0 : _a.slice(1, -1);
91
- const field = (_b = quoteMatches[0]) === null || _b === void 0 ? void 0 : _b.slice(1, -1);
88
+ const collection = tickMatches[0]?.slice(1, -1);
89
+ const field = quoteMatches[0]?.slice(1, -1);
92
90
  return new value_out_of_range_1.ValueOutOfRangeException(field, {
93
91
  collection,
94
92
  field,
95
93
  });
96
94
  }
97
95
  function valueLimitViolation(error) {
98
- var _a, _b;
99
96
  const betweenTicks = /`([^`]+)`/g;
100
97
  const betweenQuotes = /'([^']+)'/g;
101
98
  const tickMatches = error.sql.match(betweenTicks);
102
99
  const quoteMatches = error.sqlMessage.match(betweenQuotes);
103
100
  if (!tickMatches || !quoteMatches)
104
101
  return error;
105
- const collection = (_a = tickMatches[0]) === null || _a === void 0 ? void 0 : _a.slice(1, -1);
106
- const field = (_b = quoteMatches[0]) === null || _b === void 0 ? void 0 : _b.slice(1, -1);
102
+ const collection = tickMatches[0]?.slice(1, -1);
103
+ const field = quoteMatches[0]?.slice(1, -1);
107
104
  return new value_too_long_1.ValueTooLongException(field, {
108
105
  collection,
109
106
  field,
110
107
  });
111
108
  }
112
109
  function notNullViolation(error) {
113
- var _a, _b;
114
110
  const betweenTicks = /`([^`]+)`/g;
115
111
  const betweenQuotes = /'([^']+)'/g;
116
112
  const tickMatches = error.sql.match(betweenTicks);
117
113
  const quoteMatches = error.sqlMessage.match(betweenQuotes);
118
114
  if (!tickMatches || !quoteMatches)
119
115
  return error;
120
- const collection = (_a = tickMatches[0]) === null || _a === void 0 ? void 0 : _a.slice(1, -1);
121
- const field = (_b = quoteMatches[0]) === null || _b === void 0 ? void 0 : _b.slice(1, -1);
116
+ const collection = tickMatches[0]?.slice(1, -1);
117
+ const field = quoteMatches[0]?.slice(1, -1);
122
118
  return new not_null_violation_1.NotNullViolationException(field, {
123
119
  collection,
124
120
  field,
125
121
  });
126
122
  }
127
123
  function foreignKeyViolation(error) {
128
- var _a, _b, _c;
129
124
  const betweenTicks = /`([^`]+)`/g;
130
125
  const betweenParens = /\(([^)]+)\)/g;
131
126
  const tickMatches = error.sqlMessage.match(betweenTicks);
132
127
  const parenMatches = error.sql.match(betweenParens);
133
128
  if (!tickMatches || !parenMatches)
134
129
  return error;
135
- const collection = (_a = tickMatches[1]) === null || _a === void 0 ? void 0 : _a.slice(1, -1);
136
- const field = (_b = tickMatches[3]) === null || _b === void 0 ? void 0 : _b.slice(1, -1);
137
- const invalid = (_c = parenMatches[1]) === null || _c === void 0 ? void 0 : _c.slice(1, -1);
130
+ const collection = tickMatches[1]?.slice(1, -1);
131
+ const field = tickMatches[3]?.slice(1, -1);
132
+ const invalid = parenMatches[1]?.slice(1, -1);
138
133
  return new invalid_foreign_key_1.InvalidForeignKeyException(field, {
139
134
  collection,
140
135
  field,
@@ -142,13 +137,12 @@ function foreignKeyViolation(error) {
142
137
  });
143
138
  }
144
139
  function containsNullValues(error) {
145
- var _a;
146
140
  const betweenTicks = /`([^`]+)`/g;
147
141
  // Normally, we shouldn't read from the executed SQL. In this case, we're altering a single
148
142
  // column, so we shouldn't have the problem where multiple columns are altered at the same time
149
143
  const tickMatches = error.sql.match(betweenTicks);
150
144
  if (!tickMatches)
151
145
  return error;
152
- const field = (_a = tickMatches[1]) === null || _a === void 0 ? void 0 : _a.slice(1, -1);
146
+ const field = tickMatches[1]?.slice(1, -1);
153
147
  return new contains_null_values_1.ContainsNullValuesException(field);
154
148
  }
@@ -1,2 +1,2 @@
1
- import { OracleError } from './types';
1
+ import type { OracleError } from './types';
2
2
  export declare function extractError(error: OracleError): OracleError | Error;
@@ -1,2 +1,2 @@
1
- import { PostgresError } from './types';
1
+ import type { PostgresError } from './types';
2
2
  export declare function extractError(error: PostgresError): PostgresError | Error;
@@ -1,2 +1,2 @@
1
- import { SQLiteError } from './types';
1
+ import type { SQLiteError } from './types';
2
2
  export declare function extractError(error: SQLiteError): SQLiteError | Error;
@@ -1,4 +1,4 @@
1
- import { SQLError } from './dialects/types';
1
+ import type { SQLError } from './dialects/types';
2
2
  /**
3
3
  * Translates an error thrown by any of the databases into a pre-defined Exception. Currently
4
4
  * supports:
@@ -5,7 +5,7 @@ const exceptions_1 = require("@directus/shared/exceptions");
5
5
  class ValueOutOfRangeException extends exceptions_1.BaseException {
6
6
  constructor(field, exceptions) {
7
7
  if (field) {
8
- super(`Numeric value in field "${field !== null && field !== void 0 ? field : ''}" is out of range.`, 400, 'VALUE_OUT_OF_RANGE', exceptions);
8
+ super(`Numeric value in field "${field ?? ''}" is out of range.`, 400, 'VALUE_OUT_OF_RANGE', exceptions);
9
9
  }
10
10
  else {
11
11
  super(`Numeric value is out of range.`, 400, 'VALUE_OUT_OF_RANGE', exceptions);
@@ -4,9 +4,8 @@ exports.RangeNotSatisfiableException = void 0;
4
4
  const exceptions_1 = require("@directus/shared/exceptions");
5
5
  class RangeNotSatisfiableException extends exceptions_1.BaseException {
6
6
  constructor(range) {
7
- var _a, _b;
8
- const rangeString = range && ((range === null || range === void 0 ? void 0 : range.start) !== undefined || (range === null || range === void 0 ? void 0 : range.end) !== undefined)
9
- ? `"${(_a = range.start) !== null && _a !== void 0 ? _a : ''}-${(_b = range.end) !== null && _b !== void 0 ? _b : ''}" `
7
+ const rangeString = range && (range?.start !== undefined || range?.end !== undefined)
8
+ ? `"${range.start ?? ''}-${range.end ?? ''}" `
10
9
  : '';
11
10
  super(`Range ${rangeString}is invalid or the file's size doesn't match the requested range.`, 416, 'RANGE_NOT_SATISFIABLE');
12
11
  }
@@ -1,4 +1,4 @@
1
- import { Extension, ExtensionInfo, ExtensionType } from '@directus/shared/types';
1
+ import type { Extension, ExtensionInfo, ExtensionType } from '@directus/shared/types';
2
2
  import { Router } from 'express';
3
3
  export declare function getExtensionManager(): ExtensionManager;
4
4
  type Options = {
@@ -29,28 +29,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.getExtensionManager = void 0;
30
30
  const constants_1 = require("@directus/shared/constants");
31
31
  const sharedExceptions = __importStar(require("@directus/shared/exceptions"));
32
- const node_1 = require("@directus/shared/utils/node");
33
- const express_1 = __importStar(require("express"));
34
- const fs_extra_1 = __importDefault(require("fs-extra"));
35
- const path_1 = __importDefault(require("path"));
36
- const database_1 = __importDefault(require("./database"));
37
- const emitter_1 = __importStar(require("./emitter"));
38
- const env_1 = __importDefault(require("./env"));
39
- const exceptions = __importStar(require("./exceptions"));
40
- const logger_1 = __importDefault(require("./logger"));
41
- const dynamic_import_1 = require("./utils/dynamic-import");
42
- const get_schema_1 = require("./utils/get-schema");
43
32
  const utils_1 = require("@directus/shared/utils");
33
+ const node_1 = require("@directus/shared/utils/node");
44
34
  const plugin_alias_1 = __importDefault(require("@rollup/plugin-alias"));
45
35
  const plugin_virtual_1 = __importDefault(require("@rollup/plugin-virtual"));
46
36
  const chokidar_1 = __importDefault(require("chokidar"));
37
+ const express_1 = __importStar(require("express"));
38
+ const fs_extra_1 = __importDefault(require("fs-extra"));
47
39
  const globby_1 = __importDefault(require("globby"));
48
40
  const lodash_1 = require("lodash");
49
41
  const node_cron_1 = require("node-cron");
42
+ const path_1 = __importDefault(require("path"));
50
43
  const rollup_1 = require("rollup");
44
+ const database_1 = __importDefault(require("./database"));
45
+ const emitter_1 = __importStar(require("./emitter"));
46
+ const env_1 = __importDefault(require("./env"));
47
+ const exceptions = __importStar(require("./exceptions"));
51
48
  const flows_1 = require("./flows");
49
+ const logger_1 = __importDefault(require("./logger"));
52
50
  const services = __importStar(require("./services"));
51
+ const dynamic_import_1 = require("./utils/dynamic-import");
53
52
  const get_module_default_1 = __importDefault(require("./utils/get-module-default"));
53
+ const get_schema_1 = require("./utils/get-schema");
54
54
  const job_queue_1 = require("./utils/job-queue");
55
55
  const url_1 = require("./utils/url");
56
56
  let extensionManager;
@@ -64,18 +64,22 @@ function getExtensionManager() {
64
64
  exports.getExtensionManager = getExtensionManager;
65
65
  const defaultOptions = {
66
66
  schedule: true,
67
- watch: env_1.default.EXTENSIONS_AUTO_RELOAD && env_1.default.NODE_ENV !== 'development',
67
+ watch: env_1.default['EXTENSIONS_AUTO_RELOAD'] && env_1.default['NODE_ENV'] !== 'development',
68
68
  };
69
69
  class ExtensionManager {
70
+ isLoaded = false;
71
+ options;
72
+ extensions = [];
73
+ appExtensions = null;
74
+ apiExtensions = [];
75
+ apiEmitter;
76
+ hookEvents = [];
77
+ endpointRouter;
78
+ hookEmbedsHead = [];
79
+ hookEmbedsBody = [];
80
+ reloadQueue;
81
+ watcher = null;
70
82
  constructor() {
71
- this.isLoaded = false;
72
- this.extensions = [];
73
- this.appExtensions = null;
74
- this.apiExtensions = [];
75
- this.hookEvents = [];
76
- this.hookEmbedsHead = [];
77
- this.hookEmbedsBody = [];
78
- this.watcher = null;
79
83
  this.options = defaultOptions;
80
84
  this.apiEmitter = new emitter_1.Emitter();
81
85
  this.endpointRouter = (0, express_1.Router)();
@@ -140,17 +144,23 @@ class ExtensionManager {
140
144
  name: extension.name,
141
145
  type: extension.type,
142
146
  local: extension.local,
143
- host: extension.host,
144
- version: extension.version,
147
+ entries: [],
145
148
  };
149
+ if (extension.host)
150
+ extensionInfo.host = extension.host;
151
+ if (extension.version)
152
+ extensionInfo.version = extension.version;
146
153
  if (extension.type === 'bundle') {
147
- return {
148
- ...extensionInfo,
154
+ const bundleExtensionInfo = {
155
+ name: extensionInfo.name,
156
+ type: 'bundle',
157
+ local: extensionInfo.local,
149
158
  entries: extension.entries.map((entry) => ({
150
159
  name: entry.name,
151
160
  type: entry.type,
152
161
  })),
153
162
  };
163
+ return bundleExtensionInfo;
154
164
  }
155
165
  else {
156
166
  return extensionInfo;
@@ -179,7 +189,7 @@ class ExtensionManager {
179
189
  }
180
190
  async load() {
181
191
  try {
182
- await (0, node_1.ensureExtensionDirs)(env_1.default.EXTENSIONS_PATH, constants_1.NESTED_EXTENSION_TYPES);
192
+ await (0, node_1.ensureExtensionDirs)(env_1.default['EXTENSIONS_PATH'], constants_1.NESTED_EXTENSION_TYPES);
183
193
  this.extensions = await this.getExtensions();
184
194
  }
185
195
  catch (err) {
@@ -190,7 +200,7 @@ class ExtensionManager {
190
200
  await this.registerEndpoints();
191
201
  await this.registerOperations();
192
202
  await this.registerBundles();
193
- if (env_1.default.SERVE_APP) {
203
+ if (env_1.default['SERVE_APP']) {
194
204
  this.appExtensions = await this.generateExtensionBundle();
195
205
  }
196
206
  this.isLoaded = true;
@@ -198,7 +208,7 @@ class ExtensionManager {
198
208
  async unload() {
199
209
  this.unregisterApiExtensions();
200
210
  this.apiEmitter.offAll();
201
- if (env_1.default.SERVE_APP) {
211
+ if (env_1.default['SERVE_APP']) {
202
212
  this.appExtensions = null;
203
213
  }
204
214
  this.isLoaded = false;
@@ -207,7 +217,7 @@ class ExtensionManager {
207
217
  if (!this.watcher) {
208
218
  logger_1.default.info('Watching extensions for changes...');
209
219
  const localExtensionPaths = constants_1.NESTED_EXTENSION_TYPES.flatMap((type) => {
210
- const typeDir = path_1.default.posix.join((0, node_1.pathToRelativeUrl)(env_1.default.EXTENSIONS_PATH), (0, utils_1.pluralize)(type));
220
+ const typeDir = path_1.default.posix.join((0, node_1.pathToRelativeUrl)(env_1.default['EXTENSIONS_PATH']), (0, utils_1.pluralize)(type));
211
221
  if ((0, utils_1.isIn)(type, constants_1.HYBRID_EXTENSION_TYPES)) {
212
222
  return [path_1.default.posix.join(typeDir, '*', 'app.js'), path_1.default.posix.join(typeDir, '*', 'api.js')];
213
223
  }
@@ -246,10 +256,10 @@ class ExtensionManager {
246
256
  }
247
257
  }
248
258
  async getExtensions() {
249
- const packageExtensions = await (0, node_1.getPackageExtensions)(env_1.default.PACKAGE_FILE_LOCATION);
250
- const localPackageExtensions = await (0, node_1.resolvePackageExtensions)(env_1.default.EXTENSIONS_PATH);
251
- const localExtensions = await (0, node_1.getLocalExtensions)(env_1.default.EXTENSIONS_PATH);
252
- return [...packageExtensions, ...localPackageExtensions, ...localExtensions].filter((extension) => env_1.default.SERVE_APP || constants_1.APP_EXTENSION_TYPES.includes(extension.type) === false);
259
+ const packageExtensions = await (0, node_1.getPackageExtensions)(env_1.default['PACKAGE_FILE_LOCATION']);
260
+ const localPackageExtensions = await (0, node_1.resolvePackageExtensions)(env_1.default['EXTENSIONS_PATH']);
261
+ const localExtensions = await (0, node_1.getLocalExtensions)(env_1.default['EXTENSIONS_PATH']);
262
+ return [...packageExtensions, ...localPackageExtensions, ...localExtensions].filter((extension) => env_1.default['SERVE_APP'] || constants_1.APP_EXTENSION_TYPES.includes(extension.type) === false);
253
263
  }
254
264
  async generateExtensionBundle() {
255
265
  const sharedDepsMapping = await this.getSharedDepsMapping(constants_1.APP_SHARED_DEPS);
@@ -282,7 +292,7 @@ class ExtensionManager {
282
292
  const depRegex = new RegExp(`${(0, lodash_1.escapeRegExp)(dep.replace(/\//g, '_'))}\\.[0-9a-f]{8}\\.entry\\.js`);
283
293
  const depName = appDir.find((file) => depRegex.test(file));
284
294
  if (depName) {
285
- const depUrl = new url_1.Url(env_1.default.PUBLIC_URL).addPath('admin', 'assets', depName);
295
+ const depUrl = new url_1.Url(env_1.default['PUBLIC_URL']).addPath('admin', 'assets', depName);
286
296
  depsMapping[dep] = depUrl.toString({ rootRelative: true });
287
297
  }
288
298
  else {