@strapi/core 5.0.0-beta.0 → 5.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. package/dist/Strapi.d.ts +35 -42
  2. package/dist/Strapi.d.ts.map +1 -1
  3. package/dist/Strapi.js +14 -17
  4. package/dist/Strapi.js.map +1 -1
  5. package/dist/Strapi.mjs +14 -18
  6. package/dist/Strapi.mjs.map +1 -1
  7. package/dist/configuration/config-loader.d.ts.map +1 -1
  8. package/dist/configuration/config-loader.js +8 -5
  9. package/dist/configuration/config-loader.js.map +1 -1
  10. package/dist/configuration/config-loader.mjs +8 -5
  11. package/dist/configuration/config-loader.mjs.map +1 -1
  12. package/dist/configuration/index.js.map +1 -1
  13. package/dist/configuration/index.mjs.map +1 -1
  14. package/dist/container.d.ts +2 -2
  15. package/dist/container.d.ts.map +1 -1
  16. package/dist/container.js.map +1 -1
  17. package/dist/container.mjs.map +1 -1
  18. package/dist/core-api/controller/collection-type.d.ts +3 -3
  19. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  20. package/dist/core-api/controller/collection-type.js.map +1 -1
  21. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  22. package/dist/core-api/controller/index.d.ts +3 -3
  23. package/dist/core-api/controller/index.d.ts.map +1 -1
  24. package/dist/core-api/controller/index.js +5 -5
  25. package/dist/core-api/controller/index.js.map +1 -1
  26. package/dist/core-api/controller/index.mjs +6 -6
  27. package/dist/core-api/controller/index.mjs.map +1 -1
  28. package/dist/core-api/controller/single-type.d.ts +3 -3
  29. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  30. package/dist/core-api/controller/single-type.js.map +1 -1
  31. package/dist/core-api/controller/single-type.mjs.map +1 -1
  32. package/dist/core-api/controller/transform.d.ts +2 -2
  33. package/dist/core-api/controller/transform.d.ts.map +1 -1
  34. package/dist/core-api/controller/transform.js +2 -5
  35. package/dist/core-api/controller/transform.js.map +1 -1
  36. package/dist/core-api/controller/transform.mjs +2 -5
  37. package/dist/core-api/controller/transform.mjs.map +1 -1
  38. package/dist/core-api/service/collection-type.d.ts +10 -10
  39. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  40. package/dist/core-api/service/collection-type.js.map +1 -1
  41. package/dist/core-api/service/collection-type.mjs.map +1 -1
  42. package/dist/core-api/service/index.d.ts +3 -3
  43. package/dist/core-api/service/index.d.ts.map +1 -1
  44. package/dist/core-api/service/index.js.map +1 -1
  45. package/dist/core-api/service/index.mjs.map +1 -1
  46. package/dist/core-api/service/single-type.d.ts +4 -4
  47. package/dist/core-api/service/single-type.d.ts.map +1 -1
  48. package/dist/core-api/service/single-type.js.map +1 -1
  49. package/dist/core-api/service/single-type.mjs.map +1 -1
  50. package/dist/domain/content-type/index.d.ts +1 -1
  51. package/dist/domain/content-type/index.d.ts.map +1 -1
  52. package/dist/domain/module/index.d.ts +24 -23
  53. package/dist/domain/module/index.d.ts.map +1 -1
  54. package/dist/domain/module/index.js +2 -1
  55. package/dist/domain/module/index.js.map +1 -1
  56. package/dist/domain/module/index.mjs +3 -2
  57. package/dist/domain/module/index.mjs.map +1 -1
  58. package/dist/ee/index.d.ts +2 -2
  59. package/dist/ee/index.d.ts.map +1 -1
  60. package/dist/ee/index.js.map +1 -1
  61. package/dist/ee/index.mjs.map +1 -1
  62. package/dist/ee/license.d.ts +2 -2
  63. package/dist/ee/license.d.ts.map +1 -1
  64. package/dist/ee/license.js.map +1 -1
  65. package/dist/ee/license.mjs.map +1 -1
  66. package/dist/factories.d.ts +10 -10
  67. package/dist/factories.d.ts.map +1 -1
  68. package/dist/factories.js +6 -2
  69. package/dist/factories.js.map +1 -1
  70. package/dist/factories.mjs +6 -2
  71. package/dist/factories.mjs.map +1 -1
  72. package/dist/index.d.ts +4 -2
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +8 -1
  75. package/dist/index.js.map +1 -1
  76. package/dist/index.mjs +10 -3
  77. package/dist/index.mjs.map +1 -1
  78. package/dist/loaders/admin.d.ts +2 -2
  79. package/dist/loaders/admin.d.ts.map +1 -1
  80. package/dist/loaders/admin.js.map +1 -1
  81. package/dist/loaders/admin.mjs.map +1 -1
  82. package/dist/loaders/apis.d.ts +2 -2
  83. package/dist/loaders/apis.d.ts.map +1 -1
  84. package/dist/loaders/apis.js.map +1 -1
  85. package/dist/loaders/apis.mjs.map +1 -1
  86. package/dist/loaders/components.d.ts +2 -2
  87. package/dist/loaders/components.d.ts.map +1 -1
  88. package/dist/loaders/components.js.map +1 -1
  89. package/dist/loaders/components.mjs.map +1 -1
  90. package/dist/loaders/index.d.ts +2 -2
  91. package/dist/loaders/index.d.ts.map +1 -1
  92. package/dist/loaders/index.js.map +1 -1
  93. package/dist/loaders/index.mjs.map +1 -1
  94. package/dist/loaders/middlewares.d.ts +2 -2
  95. package/dist/loaders/middlewares.d.ts.map +1 -1
  96. package/dist/loaders/middlewares.js.map +1 -1
  97. package/dist/loaders/middlewares.mjs.map +1 -1
  98. package/dist/loaders/plugins/get-enabled-plugins.d.ts +2 -2
  99. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  100. package/dist/loaders/plugins/get-enabled-plugins.js +2 -1
  101. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  102. package/dist/loaders/plugins/get-enabled-plugins.mjs +2 -1
  103. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  104. package/dist/loaders/plugins/index.d.ts +2 -2
  105. package/dist/loaders/plugins/index.d.ts.map +1 -1
  106. package/dist/loaders/plugins/index.js.map +1 -1
  107. package/dist/loaders/plugins/index.mjs.map +1 -1
  108. package/dist/loaders/policies.d.ts +2 -2
  109. package/dist/loaders/policies.d.ts.map +1 -1
  110. package/dist/loaders/policies.js.map +1 -1
  111. package/dist/loaders/policies.mjs.map +1 -1
  112. package/dist/loaders/sanitizers.d.ts +2 -2
  113. package/dist/loaders/sanitizers.d.ts.map +1 -1
  114. package/dist/loaders/sanitizers.js.map +1 -1
  115. package/dist/loaders/sanitizers.mjs.map +1 -1
  116. package/dist/loaders/src-index.d.ts +2 -2
  117. package/dist/loaders/src-index.d.ts.map +1 -1
  118. package/dist/loaders/src-index.js.map +1 -1
  119. package/dist/loaders/src-index.mjs.map +1 -1
  120. package/dist/loaders/validators.d.ts +2 -2
  121. package/dist/loaders/validators.d.ts.map +1 -1
  122. package/dist/loaders/validators.js.map +1 -1
  123. package/dist/loaders/validators.mjs.map +1 -1
  124. package/dist/middlewares/body.d.ts +2 -2
  125. package/dist/middlewares/body.d.ts.map +1 -1
  126. package/dist/middlewares/body.js.map +1 -1
  127. package/dist/middlewares/body.mjs.map +1 -1
  128. package/dist/middlewares/compression.d.ts +2 -2
  129. package/dist/middlewares/compression.d.ts.map +1 -1
  130. package/dist/middlewares/compression.js.map +1 -1
  131. package/dist/middlewares/compression.mjs.map +1 -1
  132. package/dist/middlewares/cors.d.ts +2 -2
  133. package/dist/middlewares/cors.d.ts.map +1 -1
  134. package/dist/middlewares/cors.js.map +1 -1
  135. package/dist/middlewares/cors.mjs.map +1 -1
  136. package/dist/middlewares/errors.d.ts +2 -2
  137. package/dist/middlewares/errors.d.ts.map +1 -1
  138. package/dist/middlewares/errors.js.map +1 -1
  139. package/dist/middlewares/errors.mjs.map +1 -1
  140. package/dist/middlewares/favicon.d.ts +2 -2
  141. package/dist/middlewares/favicon.d.ts.map +1 -1
  142. package/dist/middlewares/favicon.js.map +1 -1
  143. package/dist/middlewares/favicon.mjs.map +1 -1
  144. package/dist/middlewares/index.d.ts +2 -2
  145. package/dist/middlewares/index.d.ts.map +1 -1
  146. package/dist/middlewares/index.js.map +1 -1
  147. package/dist/middlewares/index.mjs.map +1 -1
  148. package/dist/middlewares/ip.d.ts +2 -2
  149. package/dist/middlewares/ip.d.ts.map +1 -1
  150. package/dist/middlewares/ip.js.map +1 -1
  151. package/dist/middlewares/ip.mjs.map +1 -1
  152. package/dist/middlewares/logger.d.ts +2 -2
  153. package/dist/middlewares/logger.d.ts.map +1 -1
  154. package/dist/middlewares/logger.js.map +1 -1
  155. package/dist/middlewares/logger.mjs.map +1 -1
  156. package/dist/middlewares/powered-by.d.ts +2 -2
  157. package/dist/middlewares/powered-by.d.ts.map +1 -1
  158. package/dist/middlewares/powered-by.js.map +1 -1
  159. package/dist/middlewares/powered-by.mjs.map +1 -1
  160. package/dist/middlewares/public.d.ts +2 -2
  161. package/dist/middlewares/public.d.ts.map +1 -1
  162. package/dist/middlewares/public.js.map +1 -1
  163. package/dist/middlewares/public.mjs.map +1 -1
  164. package/dist/middlewares/query.d.ts +2 -2
  165. package/dist/middlewares/query.d.ts.map +1 -1
  166. package/dist/middlewares/query.js.map +1 -1
  167. package/dist/middlewares/query.mjs.map +1 -1
  168. package/dist/middlewares/response-time.d.ts +2 -2
  169. package/dist/middlewares/response-time.d.ts.map +1 -1
  170. package/dist/middlewares/response-time.js.map +1 -1
  171. package/dist/middlewares/response-time.mjs.map +1 -1
  172. package/dist/middlewares/responses.d.ts +3 -3
  173. package/dist/middlewares/responses.d.ts.map +1 -1
  174. package/dist/middlewares/responses.js.map +1 -1
  175. package/dist/middlewares/responses.mjs.map +1 -1
  176. package/dist/middlewares/security.d.ts +2 -2
  177. package/dist/middlewares/security.d.ts.map +1 -1
  178. package/dist/middlewares/security.js.map +1 -1
  179. package/dist/middlewares/security.mjs.map +1 -1
  180. package/dist/middlewares/session.d.ts +2 -2
  181. package/dist/middlewares/session.d.ts.map +1 -1
  182. package/dist/middlewares/session.js.map +1 -1
  183. package/dist/middlewares/session.mjs.map +1 -1
  184. package/dist/registries/apis.d.ts +2 -2
  185. package/dist/registries/apis.d.ts.map +1 -1
  186. package/dist/registries/apis.js.map +1 -1
  187. package/dist/registries/apis.mjs.map +1 -1
  188. package/dist/registries/components.d.ts +6 -6
  189. package/dist/registries/components.d.ts.map +1 -1
  190. package/dist/registries/components.js.map +1 -1
  191. package/dist/registries/components.mjs.map +1 -1
  192. package/dist/registries/config.d.ts +2 -2
  193. package/dist/registries/config.d.ts.map +1 -1
  194. package/dist/registries/config.js +15 -3
  195. package/dist/registries/config.js.map +1 -1
  196. package/dist/registries/config.mjs +16 -4
  197. package/dist/registries/config.mjs.map +1 -1
  198. package/dist/registries/content-types.d.ts +5 -5
  199. package/dist/registries/content-types.d.ts.map +1 -1
  200. package/dist/registries/content-types.js.map +1 -1
  201. package/dist/registries/content-types.mjs.map +1 -1
  202. package/dist/registries/controllers.d.ts +10 -10
  203. package/dist/registries/controllers.d.ts.map +1 -1
  204. package/dist/registries/controllers.js.map +1 -1
  205. package/dist/registries/controllers.mjs.map +1 -1
  206. package/dist/registries/custom-fields.d.ts +3 -3
  207. package/dist/registries/custom-fields.d.ts.map +1 -1
  208. package/dist/registries/custom-fields.js.map +1 -1
  209. package/dist/registries/custom-fields.mjs.map +1 -1
  210. package/dist/registries/middlewares.d.ts +6 -6
  211. package/dist/registries/middlewares.d.ts.map +1 -1
  212. package/dist/registries/middlewares.js.map +1 -1
  213. package/dist/registries/middlewares.mjs.map +1 -1
  214. package/dist/registries/modules.d.ts +2 -2
  215. package/dist/registries/modules.d.ts.map +1 -1
  216. package/dist/registries/modules.js.map +1 -1
  217. package/dist/registries/modules.mjs.map +1 -1
  218. package/dist/registries/plugins.d.ts +5 -5
  219. package/dist/registries/plugins.d.ts.map +1 -1
  220. package/dist/registries/plugins.js.map +1 -1
  221. package/dist/registries/plugins.mjs.map +1 -1
  222. package/dist/registries/policies.d.ts +23 -11
  223. package/dist/registries/policies.d.ts.map +1 -1
  224. package/dist/registries/policies.js +64 -18
  225. package/dist/registries/policies.js.map +1 -1
  226. package/dist/registries/policies.mjs +65 -19
  227. package/dist/registries/policies.mjs.map +1 -1
  228. package/dist/registries/services.d.ts +8 -8
  229. package/dist/registries/services.d.ts.map +1 -1
  230. package/dist/registries/services.js.map +1 -1
  231. package/dist/registries/services.mjs.map +1 -1
  232. package/dist/services/auth/index.d.ts +4 -4
  233. package/dist/services/auth/index.d.ts.map +1 -1
  234. package/dist/services/auth/index.js.map +1 -1
  235. package/dist/services/auth/index.mjs.map +1 -1
  236. package/dist/services/content-api/index.d.ts +21 -3
  237. package/dist/services/content-api/index.d.ts.map +1 -1
  238. package/dist/services/content-api/index.js +28 -2
  239. package/dist/services/content-api/index.js.map +1 -1
  240. package/dist/services/content-api/index.mjs +28 -2
  241. package/dist/services/content-api/index.mjs.map +1 -1
  242. package/dist/services/content-api/permissions/index.d.ts +3 -3
  243. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  244. package/dist/services/content-api/permissions/index.js +1 -1
  245. package/dist/services/content-api/permissions/index.js.map +1 -1
  246. package/dist/services/content-api/permissions/index.mjs +1 -1
  247. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  248. package/dist/services/cron.d.ts +2 -2
  249. package/dist/services/cron.d.ts.map +1 -1
  250. package/dist/services/cron.js.map +1 -1
  251. package/dist/services/cron.mjs.map +1 -1
  252. package/dist/services/custom-fields.d.ts +2 -2
  253. package/dist/services/custom-fields.d.ts.map +1 -1
  254. package/dist/services/custom-fields.js.map +1 -1
  255. package/dist/services/custom-fields.mjs.map +1 -1
  256. package/dist/services/document-service/common.d.ts +2 -2
  257. package/dist/services/document-service/common.d.ts.map +1 -1
  258. package/dist/services/document-service/common.js.map +1 -1
  259. package/dist/services/document-service/common.mjs.map +1 -1
  260. package/dist/services/document-service/document-engine.d.ts +2 -0
  261. package/dist/services/document-service/document-engine.d.ts.map +1 -0
  262. package/dist/services/document-service/draft-and-publish.d.ts +7 -7
  263. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  264. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  265. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  266. package/dist/services/document-service/index.d.ts +2 -2
  267. package/dist/services/document-service/index.d.ts.map +1 -1
  268. package/dist/services/document-service/index.js +4 -0
  269. package/dist/services/document-service/index.js.map +1 -1
  270. package/dist/services/document-service/index.mjs +4 -0
  271. package/dist/services/document-service/index.mjs.map +1 -1
  272. package/dist/services/document-service/internationalization.d.ts +5 -5
  273. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  274. package/dist/services/document-service/internationalization.js.map +1 -1
  275. package/dist/services/document-service/internationalization.mjs.map +1 -1
  276. package/dist/services/document-service/repository.d.ts.map +1 -1
  277. package/dist/services/document-service/repository.js +16 -4
  278. package/dist/services/document-service/repository.js.map +1 -1
  279. package/dist/services/document-service/repository.mjs +17 -5
  280. package/dist/services/document-service/repository.mjs.map +1 -1
  281. package/dist/services/document-service/transform/data.d.ts.map +1 -1
  282. package/dist/services/document-service/transform/data.js +4 -2
  283. package/dist/services/document-service/transform/data.js.map +1 -1
  284. package/dist/services/document-service/transform/data.mjs +4 -2
  285. package/dist/services/document-service/transform/data.mjs.map +1 -1
  286. package/dist/services/document-service/transform/fields.d.ts +2 -2
  287. package/dist/services/document-service/transform/fields.d.ts.map +1 -1
  288. package/dist/services/document-service/transform/fields.js.map +1 -1
  289. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  290. package/dist/services/document-service/transform/id-map.d.ts +3 -3
  291. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  292. package/dist/services/document-service/transform/id-map.js.map +1 -1
  293. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  294. package/dist/services/document-service/transform/id-transform.d.ts +2 -2
  295. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  296. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  297. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  298. package/dist/services/document-service/transform/populate.d.ts +2 -2
  299. package/dist/services/document-service/transform/populate.d.ts.map +1 -1
  300. package/dist/services/document-service/transform/populate.js +1 -1
  301. package/dist/services/document-service/transform/populate.js.map +1 -1
  302. package/dist/services/document-service/transform/populate.mjs +1 -1
  303. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  304. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +8 -7
  305. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  306. package/dist/services/document-service/transform/relations/extract/data-ids.js +42 -78
  307. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  308. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +42 -78
  309. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  310. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts +8 -4
  311. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  312. package/dist/services/document-service/transform/relations/transform/data-ids.js +57 -125
  313. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  314. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +58 -126
  315. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  316. package/dist/services/document-service/transform/relations/transform/default-locale.d.ts +9 -0
  317. package/dist/services/document-service/transform/relations/transform/default-locale.d.ts.map +1 -0
  318. package/dist/services/document-service/transform/relations/transform/default-locale.js +32 -0
  319. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -0
  320. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +32 -0
  321. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -0
  322. package/dist/services/document-service/transform/relations/utils/dp.d.ts +3 -3
  323. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  324. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  325. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  326. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +6 -6
  327. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  328. package/dist/services/document-service/transform/relations/utils/i18n.js +3 -9
  329. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  330. package/dist/services/document-service/transform/relations/utils/i18n.mjs +3 -9
  331. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  332. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts +6 -0
  333. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -0
  334. package/dist/services/document-service/transform/relations/utils/map-relation.js +87 -0
  335. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -0
  336. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +87 -0
  337. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -0
  338. package/dist/services/document-service/transform/relations/utils/types.d.ts +6 -0
  339. package/dist/services/document-service/transform/relations/utils/types.d.ts.map +1 -1
  340. package/dist/services/document-service/transform/types.d.ts +3 -3
  341. package/dist/services/document-service/transform/types.d.ts.map +1 -1
  342. package/dist/services/document-service/utils/populate.d.ts +2 -2
  343. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  344. package/dist/services/document-service/utils/populate.js.map +1 -1
  345. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  346. package/dist/services/entity-service/attributes/index.d.ts +4 -4
  347. package/dist/services/entity-service/attributes/index.d.ts.map +1 -1
  348. package/dist/services/entity-service/attributes/index.js.map +1 -1
  349. package/dist/services/entity-service/attributes/index.mjs.map +1 -1
  350. package/dist/services/entity-service/attributes/transforms.d.ts +3 -3
  351. package/dist/services/entity-service/attributes/transforms.d.ts.map +1 -1
  352. package/dist/services/entity-service/attributes/transforms.js.map +1 -1
  353. package/dist/services/entity-service/attributes/transforms.mjs.map +1 -1
  354. package/dist/services/entity-service/components.d.ts +87 -12
  355. package/dist/services/entity-service/components.d.ts.map +1 -1
  356. package/dist/services/entity-service/components.js +1 -4
  357. package/dist/services/entity-service/components.js.map +1 -1
  358. package/dist/services/entity-service/components.mjs +1 -4
  359. package/dist/services/entity-service/components.mjs.map +1 -1
  360. package/dist/services/entity-service/index.d.ts +4 -4
  361. package/dist/services/entity-service/index.d.ts.map +1 -1
  362. package/dist/services/entity-service/index.js +14 -15
  363. package/dist/services/entity-service/index.js.map +1 -1
  364. package/dist/services/entity-service/index.mjs +15 -16
  365. package/dist/services/entity-service/index.mjs.map +1 -1
  366. package/dist/services/entity-service/params.d.ts +5 -5
  367. package/dist/services/entity-service/params.d.ts.map +1 -1
  368. package/dist/services/entity-service/params.js.map +1 -1
  369. package/dist/services/entity-service/params.mjs.map +1 -1
  370. package/dist/services/entity-validator/index.d.ts +2 -2
  371. package/dist/services/entity-validator/index.d.ts.map +1 -1
  372. package/dist/services/entity-validator/index.js +100 -89
  373. package/dist/services/entity-validator/index.js.map +1 -1
  374. package/dist/services/entity-validator/index.mjs +100 -89
  375. package/dist/services/entity-validator/index.mjs.map +1 -1
  376. package/dist/services/entity-validator/validators.d.ts +18 -18
  377. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  378. package/dist/services/entity-validator/validators.js +6 -1
  379. package/dist/services/entity-validator/validators.js.map +1 -1
  380. package/dist/services/entity-validator/validators.mjs +6 -1
  381. package/dist/services/entity-validator/validators.mjs.map +1 -1
  382. package/dist/services/features.d.ts +3 -3
  383. package/dist/services/features.d.ts.map +1 -1
  384. package/dist/services/features.js.map +1 -1
  385. package/dist/services/features.mjs.map +1 -1
  386. package/dist/services/fs.d.ts +2 -2
  387. package/dist/services/fs.d.ts.map +1 -1
  388. package/dist/services/fs.js.map +1 -1
  389. package/dist/services/fs.mjs.map +1 -1
  390. package/dist/services/metrics/admin-user-hash.d.ts +2 -2
  391. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  392. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  393. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  394. package/dist/services/metrics/index.d.ts +2 -2
  395. package/dist/services/metrics/index.d.ts.map +1 -1
  396. package/dist/services/metrics/index.js.map +1 -1
  397. package/dist/services/metrics/index.mjs.map +1 -1
  398. package/dist/services/metrics/middleware.d.ts +2 -2
  399. package/dist/services/metrics/middleware.d.ts.map +1 -1
  400. package/dist/services/metrics/middleware.js.map +1 -1
  401. package/dist/services/metrics/middleware.mjs.map +1 -1
  402. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  403. package/dist/services/metrics/rate-limiter.js.map +1 -1
  404. package/dist/services/metrics/rate-limiter.mjs.map +1 -1
  405. package/dist/services/metrics/sender.d.ts +3 -3
  406. package/dist/services/metrics/sender.d.ts.map +1 -1
  407. package/dist/services/metrics/sender.js.map +1 -1
  408. package/dist/services/metrics/sender.mjs.map +1 -1
  409. package/dist/services/query-params.d.ts +7 -0
  410. package/dist/services/query-params.d.ts.map +1 -0
  411. package/dist/services/query-params.js +12 -0
  412. package/dist/services/query-params.js.map +1 -0
  413. package/dist/services/query-params.mjs +13 -0
  414. package/dist/services/query-params.mjs.map +1 -0
  415. package/dist/services/server/admin-api.d.ts +3 -3
  416. package/dist/services/server/admin-api.d.ts.map +1 -1
  417. package/dist/services/server/admin-api.js.map +1 -1
  418. package/dist/services/server/admin-api.mjs.map +1 -1
  419. package/dist/services/server/api.d.ts +3 -3
  420. package/dist/services/server/api.d.ts.map +1 -1
  421. package/dist/services/server/api.js.map +1 -1
  422. package/dist/services/server/api.mjs.map +1 -1
  423. package/dist/services/server/compose-endpoint.d.ts +2 -2
  424. package/dist/services/server/compose-endpoint.d.ts.map +1 -1
  425. package/dist/services/server/compose-endpoint.js +1 -2
  426. package/dist/services/server/compose-endpoint.js.map +1 -1
  427. package/dist/services/server/compose-endpoint.mjs +2 -3
  428. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  429. package/dist/services/server/content-api.d.ts +3 -3
  430. package/dist/services/server/content-api.d.ts.map +1 -1
  431. package/dist/services/server/content-api.js.map +1 -1
  432. package/dist/services/server/content-api.mjs.map +1 -1
  433. package/dist/services/server/http-server.d.ts +2 -2
  434. package/dist/services/server/http-server.d.ts.map +1 -1
  435. package/dist/services/server/http-server.js.map +1 -1
  436. package/dist/services/server/http-server.mjs.map +1 -1
  437. package/dist/services/server/index.d.ts +2 -2
  438. package/dist/services/server/index.d.ts.map +1 -1
  439. package/dist/services/server/index.js +1 -2
  440. package/dist/services/server/index.js.map +1 -1
  441. package/dist/services/server/index.mjs +1 -2
  442. package/dist/services/server/index.mjs.map +1 -1
  443. package/dist/services/server/middleware.d.ts +4 -4
  444. package/dist/services/server/middleware.d.ts.map +1 -1
  445. package/dist/services/server/middleware.js.map +1 -1
  446. package/dist/services/server/middleware.mjs.map +1 -1
  447. package/dist/services/server/policy.d.ts +3 -3
  448. package/dist/services/server/policy.d.ts.map +1 -1
  449. package/dist/services/server/policy.js +4 -4
  450. package/dist/services/server/policy.js.map +1 -1
  451. package/dist/services/server/policy.mjs +4 -4
  452. package/dist/services/server/policy.mjs.map +1 -1
  453. package/dist/services/server/register-middlewares.d.ts +2 -2
  454. package/dist/services/server/register-middlewares.d.ts.map +1 -1
  455. package/dist/services/server/register-middlewares.js.map +1 -1
  456. package/dist/services/server/register-middlewares.mjs.map +1 -1
  457. package/dist/services/server/register-routes.d.ts +2 -2
  458. package/dist/services/server/register-routes.d.ts.map +1 -1
  459. package/dist/services/server/register-routes.js +2 -2
  460. package/dist/services/server/register-routes.js.map +1 -1
  461. package/dist/services/server/register-routes.mjs +2 -2
  462. package/dist/services/server/register-routes.mjs.map +1 -1
  463. package/dist/services/server/routing.d.ts +4 -4
  464. package/dist/services/server/routing.d.ts.map +1 -1
  465. package/dist/services/server/routing.js.map +1 -1
  466. package/dist/services/server/routing.mjs.map +1 -1
  467. package/dist/services/utils/dynamic-zones.d.ts.map +1 -1
  468. package/dist/services/utils/dynamic-zones.js +2 -1
  469. package/dist/services/utils/dynamic-zones.js.map +1 -1
  470. package/dist/services/utils/dynamic-zones.mjs +2 -1
  471. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  472. package/dist/services/webhook-runner.js.map +1 -1
  473. package/dist/services/webhook-runner.mjs.map +1 -1
  474. package/dist/utils/convert-custom-field-type.d.ts +2 -2
  475. package/dist/utils/convert-custom-field-type.d.ts.map +1 -1
  476. package/dist/utils/convert-custom-field-type.js.map +1 -1
  477. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  478. package/dist/utils/fetch.d.ts +3 -3
  479. package/dist/utils/fetch.d.ts.map +1 -1
  480. package/dist/utils/fetch.js.map +1 -1
  481. package/dist/utils/fetch.mjs.map +1 -1
  482. package/dist/utils/get-dirs.d.ts +3 -3
  483. package/dist/utils/get-dirs.d.ts.map +1 -1
  484. package/dist/utils/get-dirs.js.map +1 -1
  485. package/dist/utils/get-dirs.mjs.map +1 -1
  486. package/dist/utils/is-initialized.d.ts +2 -2
  487. package/dist/utils/is-initialized.d.ts.map +1 -1
  488. package/dist/utils/is-initialized.js.map +1 -1
  489. package/dist/utils/is-initialized.mjs.map +1 -1
  490. package/dist/utils/open-browser.d.ts +2 -2
  491. package/dist/utils/open-browser.d.ts.map +1 -1
  492. package/dist/utils/open-browser.js.map +1 -1
  493. package/dist/utils/open-browser.mjs.map +1 -1
  494. package/dist/utils/signals.d.ts +2 -2
  495. package/dist/utils/signals.d.ts.map +1 -1
  496. package/dist/utils/signals.js.map +1 -1
  497. package/dist/utils/signals.mjs.map +1 -1
  498. package/dist/utils/startup-logger.d.ts +2 -2
  499. package/dist/utils/startup-logger.d.ts.map +1 -1
  500. package/dist/utils/startup-logger.js.map +1 -1
  501. package/dist/utils/startup-logger.mjs.map +1 -1
  502. package/dist/utils/transform-content-types-to-models.d.ts +54 -99
  503. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  504. package/dist/utils/transform-content-types-to-models.js +95 -57
  505. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  506. package/dist/utils/transform-content-types-to-models.mjs +95 -57
  507. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  508. package/dist/utils/update-notifier/index.d.ts +2 -2
  509. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  510. package/dist/utils/update-notifier/index.js.map +1 -1
  511. package/dist/utils/update-notifier/index.mjs.map +1 -1
  512. package/package.json +15 -15
  513. package/dist/services/document-service/transform/relations/utils/data.js +0 -12
  514. package/dist/services/document-service/transform/relations/utils/data.js.map +0 -1
  515. package/dist/services/document-service/transform/relations/utils/data.mjs +0 -12
  516. package/dist/services/document-service/transform/relations/utils/data.mjs.map +0 -1
@@ -1,32 +1,80 @@
1
1
  "use strict";
2
2
  const _ = require("lodash/fp");
3
3
  const namespace = require("./namespace.js");
4
+ const PLUGIN_PREFIX = "plugin::";
5
+ const API_PREFIX = "api::";
6
+ const parsePolicy = (policy) => {
7
+ if (typeof policy === "string") {
8
+ return { policyName: policy, config: {} };
9
+ }
10
+ const { name, config } = policy;
11
+ return { policyName: name, config };
12
+ };
4
13
  const policiesRegistry = () => {
5
- const policies = {};
14
+ const policies = /* @__PURE__ */ new Map();
15
+ const find = (name, namespaceInfo) => {
16
+ const { pluginName, apiName } = namespaceInfo ?? {};
17
+ const policy = policies.get(name);
18
+ if (policy) {
19
+ return policy;
20
+ }
21
+ if (pluginName) {
22
+ return policies.get(`${PLUGIN_PREFIX}${pluginName}.${name}`);
23
+ }
24
+ if (apiName) {
25
+ return policies.get(`${API_PREFIX}${apiName}.${name}`);
26
+ }
27
+ };
28
+ function resolveHandler(policyConfig, namespaceInfo) {
29
+ if (Array.isArray(policyConfig)) {
30
+ return policyConfig.map((config2) => {
31
+ return resolveHandler(config2, namespaceInfo);
32
+ });
33
+ }
34
+ const { policyName, config } = parsePolicy(policyConfig);
35
+ const policy = find(policyName, namespaceInfo);
36
+ if (!policy) {
37
+ throw new Error(`Policy ${policyName} not found.`);
38
+ }
39
+ if (typeof policy === "function") {
40
+ return policy;
41
+ }
42
+ if (policy.validator) {
43
+ policy.validator(config);
44
+ }
45
+ return policy.handler;
46
+ }
6
47
  return {
7
48
  /**
8
49
  * Returns this list of registered policies uids
9
50
  */
10
51
  keys() {
11
- return Object.keys(policies);
52
+ return policies.keys();
12
53
  },
13
54
  /**
14
55
  * Returns the instance of a policy. Instantiate the policy if not already done
15
56
  */
16
- get(uid) {
17
- return policies[uid];
57
+ get(name, namespaceInfo) {
58
+ return find(name, namespaceInfo);
59
+ },
60
+ /**
61
+ * Checks if a policy is registered
62
+ */
63
+ has(name, namespaceInfo) {
64
+ const res = find(name, namespaceInfo);
65
+ return !!res;
18
66
  },
19
67
  /**
20
68
  * Returns a map with all the policies in a namespace
21
69
  */
22
70
  getAll(namespace$1) {
23
- return _.pickBy((_2, uid) => namespace.hasNamespace(uid, namespace$1))(policies);
71
+ return _.pickBy((_2, uid) => namespace.hasNamespace(uid, namespace$1))(Object.fromEntries(policies));
24
72
  },
25
73
  /**
26
74
  * Registers a policy
27
75
  */
28
76
  set(uid, policy) {
29
- policies[uid] = policy;
77
+ policies.set(uid, policy);
30
78
  return this;
31
79
  },
32
80
  /**
@@ -39,22 +87,20 @@ const policiesRegistry = () => {
39
87
  if (_.has(uid, policies)) {
40
88
  throw new Error(`Policy ${uid} has already been registered.`);
41
89
  }
42
- policies[uid] = policy;
90
+ policies.set(uid, policy);
43
91
  }
44
92
  },
45
93
  /**
46
- * Wraps a policy to extend it
47
- * @param {string} uid
48
- * @param {(policy: Policy) => Policy} extendFn
94
+ * Resolves a list of policies
49
95
  */
50
- extend(uid, extendFn) {
51
- const currentPolicy = this.get(uid);
52
- if (!currentPolicy) {
53
- throw new Error(`Policy ${uid} doesn't exist`);
54
- }
55
- const newPolicy = extendFn(currentPolicy);
56
- policies[uid] = newPolicy;
57
- return this;
96
+ resolve(config, namespaceInfo) {
97
+ const { pluginName, apiName } = namespaceInfo ?? {};
98
+ return _.castArray(config).map((policyConfig) => {
99
+ return {
100
+ handler: resolveHandler(policyConfig, { pluginName, apiName }),
101
+ config: typeof policyConfig === "object" && policyConfig.config || {}
102
+ };
103
+ });
58
104
  }
59
105
  };
60
106
  };
@@ -1 +1 @@
1
- {"version":3,"file":"policies.js","sources":["../../src/registries/policies.ts"],"sourcesContent":["import { pickBy, has } from 'lodash/fp';\nimport type { Common } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\ntype PolicyExtendFn = (policy: Common.Policy) => Common.Policy;\ntype PolicyMap = Record<string, Common.Policy>;\n\n// TODO: move instantiation part here instead of in the policy utils\nconst policiesRegistry = () => {\n const policies: PolicyMap = {};\n\n return {\n /**\n * Returns this list of registered policies uids\n */\n keys() {\n return Object.keys(policies);\n },\n\n /**\n * Returns the instance of a policy. Instantiate the policy if not already done\n */\n get(uid: Common.UID.Policy) {\n return policies[uid];\n },\n\n /**\n * Returns a map with all the policies in a namespace\n */\n getAll(namespace: string) {\n return pickBy((_, uid) => hasNamespace(uid, namespace))(policies);\n },\n\n /**\n * Registers a policy\n */\n set(uid: string, policy: Common.Policy) {\n policies[uid] = policy;\n return this;\n },\n\n /**\n * Registers a map of policies for a specific namespace\n */\n add(namespace: string, newPolicies: PolicyMap) {\n for (const policyName of Object.keys(newPolicies)) {\n const policy = newPolicies[policyName];\n const uid = addNamespace(policyName, namespace);\n\n if (has(uid, policies)) {\n throw new Error(`Policy ${uid} has already been registered.`);\n }\n policies[uid] = policy;\n }\n },\n\n /**\n * Wraps a policy to extend it\n * @param {string} uid\n * @param {(policy: Policy) => Policy} extendFn\n */\n extend(uid: Common.UID.Policy, extendFn: PolicyExtendFn) {\n const currentPolicy = this.get(uid);\n\n if (!currentPolicy) {\n throw new Error(`Policy ${uid} doesn't exist`);\n }\n\n const newPolicy = extendFn(currentPolicy);\n policies[uid] = newPolicy;\n\n return this;\n },\n };\n};\n\nexport default policiesRegistry;\n"],"names":["namespace","pickBy","_","hasNamespace","addNamespace","has"],"mappings":";;;AAQA,MAAM,mBAAmB,MAAM;AAC7B,QAAM,WAAsB,CAAA;AAErB,SAAA;AAAA;AAAA;AAAA;AAAA,IAIL,OAAO;AACE,aAAA,OAAO,KAAK,QAAQ;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAwB;AAC1B,aAAO,SAAS,GAAG;AAAA,IACrB;AAAA;AAAA;AAAA;AAAA,IAKA,OAAOA,aAAmB;AACjB,aAAAC,EAAA,OAAO,CAACC,IAAG,QAAQC,UAAAA,aAAa,KAAKH,WAAS,CAAC,EAAE,QAAQ;AAAA,IAClE;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAa,QAAuB;AACtC,eAAS,GAAG,IAAI;AACT,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAIA,aAAmB,aAAwB;AAC7C,iBAAW,cAAc,OAAO,KAAK,WAAW,GAAG;AAC3C,cAAA,SAAS,YAAY,UAAU;AAC/B,cAAA,MAAMI,UAAAA,aAAa,YAAYJ,WAAS;AAE1C,YAAAK,EAAA,IAAI,KAAK,QAAQ,GAAG;AACtB,gBAAM,IAAI,MAAM,UAAU,GAAG,+BAA+B;AAAA,QAC9D;AACA,iBAAS,GAAG,IAAI;AAAA,MAClB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAO,KAAwB,UAA0B;AACjD,YAAA,gBAAgB,KAAK,IAAI,GAAG;AAElC,UAAI,CAAC,eAAe;AAClB,cAAM,IAAI,MAAM,UAAU,GAAG,gBAAgB;AAAA,MAC/C;AAEM,YAAA,YAAY,SAAS,aAAa;AACxC,eAAS,GAAG,IAAI;AAET,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;;"}
1
+ {"version":3,"file":"policies.js","sources":["../../src/registries/policies.ts"],"sourcesContent":["import { pickBy, has, castArray } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nconst PLUGIN_PREFIX = 'plugin::';\nconst API_PREFIX = 'api::';\n\ninterface PolicyInfo {\n name: string;\n config: unknown;\n}\n\ntype PolicyConfig = string | PolicyInfo;\n\ninterface NamespaceInfo {\n pluginName?: string;\n apiName?: string;\n}\n\nconst parsePolicy = (policy: string | PolicyInfo) => {\n if (typeof policy === 'string') {\n return { policyName: policy, config: {} };\n }\n\n const { name, config } = policy;\n return { policyName: name, config };\n};\n\nconst policiesRegistry = () => {\n const policies = new Map<string, Core.Policy>();\n\n const find = (name: string, namespaceInfo?: NamespaceInfo) => {\n const { pluginName, apiName } = namespaceInfo ?? {};\n\n // try to resolve a full name to avoid extra prefixing\n const policy = policies.get(name);\n\n if (policy) {\n return policy;\n }\n\n if (pluginName) {\n return policies.get(`${PLUGIN_PREFIX}${pluginName}.${name}`);\n }\n\n if (apiName) {\n return policies.get(`${API_PREFIX}${apiName}.${name}`);\n }\n };\n\n function resolveHandler(policyConfig: PolicyConfig, namespaceInfo?: NamespaceInfo): Core.Policy;\n function resolveHandler(\n policyConfig: PolicyConfig[],\n namespaceInfo?: NamespaceInfo\n ): Core.Policy[];\n function resolveHandler(\n policyConfig: PolicyConfig | PolicyConfig[],\n namespaceInfo?: NamespaceInfo\n ): Core.Policy | Core.Policy[] {\n if (Array.isArray(policyConfig)) {\n return policyConfig.map((config) => {\n return resolveHandler(config, namespaceInfo);\n });\n }\n\n const { policyName, config } = parsePolicy(policyConfig);\n\n const policy = find(policyName, namespaceInfo);\n\n if (!policy) {\n throw new Error(`Policy ${policyName} not found.`);\n }\n\n if (typeof policy === 'function') {\n return policy;\n }\n\n if (policy.validator) {\n policy.validator(config);\n }\n\n return policy.handler;\n }\n\n return {\n /**\n * Returns this list of registered policies uids\n */\n keys() {\n return policies.keys();\n },\n\n /**\n * Returns the instance of a policy. Instantiate the policy if not already done\n */\n get(name: string, namespaceInfo?: NamespaceInfo) {\n return find(name, namespaceInfo);\n },\n /**\n * Checks if a policy is registered\n */\n has(name: string, namespaceInfo?: NamespaceInfo) {\n const res = find(name, namespaceInfo);\n return !!res;\n },\n\n /**\n * Returns a map with all the policies in a namespace\n */\n getAll(namespace: string) {\n return pickBy((_, uid) => hasNamespace(uid, namespace))(Object.fromEntries(policies));\n },\n\n /**\n * Registers a policy\n */\n set(uid: string, policy: Core.Policy) {\n policies.set(uid, policy);\n return this;\n },\n\n /**\n * Registers a map of policies for a specific namespace\n */\n add(namespace: string, newPolicies: Record<string, Core.Policy>) {\n for (const policyName of Object.keys(newPolicies)) {\n const policy = newPolicies[policyName];\n const uid = addNamespace(policyName, namespace);\n\n if (has(uid, policies)) {\n throw new Error(`Policy ${uid} has already been registered.`);\n }\n\n policies.set(uid, policy);\n }\n },\n\n /**\n * Resolves a list of policies\n */\n resolve(config: PolicyConfig | PolicyConfig[], namespaceInfo?: NamespaceInfo) {\n const { pluginName, apiName } = namespaceInfo ?? {};\n\n return castArray(config).map((policyConfig) => {\n return {\n handler: resolveHandler(policyConfig, { pluginName, apiName }),\n config: (typeof policyConfig === 'object' && policyConfig.config) || {},\n };\n });\n },\n };\n};\n\nexport default policiesRegistry;\n"],"names":["config","namespace","pickBy","_","hasNamespace","addNamespace","has","castArray"],"mappings":";;;AAIA,MAAM,gBAAgB;AACtB,MAAM,aAAa;AAcnB,MAAM,cAAc,CAAC,WAAgC;AAC/C,MAAA,OAAO,WAAW,UAAU;AAC9B,WAAO,EAAE,YAAY,QAAQ,QAAQ,CAAG,EAAA;AAAA,EAC1C;AAEM,QAAA,EAAE,MAAM,OAAW,IAAA;AAClB,SAAA,EAAE,YAAY,MAAM;AAC7B;AAEA,MAAM,mBAAmB,MAAM;AACvB,QAAA,+BAAe;AAEf,QAAA,OAAO,CAAC,MAAc,kBAAkC;AAC5D,UAAM,EAAE,YAAY,YAAY,iBAAiB,CAAA;AAG3C,UAAA,SAAS,SAAS,IAAI,IAAI;AAEhC,QAAI,QAAQ;AACH,aAAA;AAAA,IACT;AAEA,QAAI,YAAY;AACP,aAAA,SAAS,IAAI,GAAG,aAAa,GAAG,UAAU,IAAI,IAAI,EAAE;AAAA,IAC7D;AAEA,QAAI,SAAS;AACJ,aAAA,SAAS,IAAI,GAAG,UAAU,GAAG,OAAO,IAAI,IAAI,EAAE;AAAA,IACvD;AAAA,EAAA;AAQO,WAAA,eACP,cACA,eAC6B;AACzB,QAAA,MAAM,QAAQ,YAAY,GAAG;AACxB,aAAA,aAAa,IAAI,CAACA,YAAW;AAC3B,eAAA,eAAeA,SAAQ,aAAa;AAAA,MAAA,CAC5C;AAAA,IACH;AAEA,UAAM,EAAE,YAAY,OAAO,IAAI,YAAY,YAAY;AAEjD,UAAA,SAAS,KAAK,YAAY,aAAa;AAE7C,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,UAAU,UAAU,aAAa;AAAA,IACnD;AAEI,QAAA,OAAO,WAAW,YAAY;AACzB,aAAA;AAAA,IACT;AAEA,QAAI,OAAO,WAAW;AACpB,aAAO,UAAU,MAAM;AAAA,IACzB;AAEA,WAAO,OAAO;AAAA,EAChB;AAEO,SAAA;AAAA;AAAA;AAAA;AAAA,IAIL,OAAO;AACL,aAAO,SAAS;IAClB;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,MAAc,eAA+B;AACxC,aAAA,KAAK,MAAM,aAAa;AAAA,IACjC;AAAA;AAAA;AAAA;AAAA,IAIA,IAAI,MAAc,eAA+B;AACzC,YAAA,MAAM,KAAK,MAAM,aAAa;AACpC,aAAO,CAAC,CAAC;AAAA,IACX;AAAA;AAAA;AAAA;AAAA,IAKA,OAAOC,aAAmB;AACxB,aAAOC,SAAO,CAACC,IAAG,QAAQC,UAAAA,aAAa,KAAKH,WAAS,CAAC,EAAE,OAAO,YAAY,QAAQ,CAAC;AAAA,IACtF;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAa,QAAqB;AAC3B,eAAA,IAAI,KAAK,MAAM;AACjB,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAIA,aAAmB,aAA0C;AAC/D,iBAAW,cAAc,OAAO,KAAK,WAAW,GAAG;AAC3C,cAAA,SAAS,YAAY,UAAU;AAC/B,cAAA,MAAMI,UAAAA,aAAa,YAAYJ,WAAS;AAE1C,YAAAK,EAAA,IAAI,KAAK,QAAQ,GAAG;AACtB,gBAAM,IAAI,MAAM,UAAU,GAAG,+BAA+B;AAAA,QAC9D;AAES,iBAAA,IAAI,KAAK,MAAM;AAAA,MAC1B;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,QAAQ,QAAuC,eAA+B;AAC5E,YAAM,EAAE,YAAY,YAAY,iBAAiB,CAAA;AAEjD,aAAOC,EAAU,UAAA,MAAM,EAAE,IAAI,CAAC,iBAAiB;AACtC,eAAA;AAAA,UACL,SAAS,eAAe,cAAc,EAAE,YAAY,SAAS;AAAA,UAC7D,QAAS,OAAO,iBAAiB,YAAY,aAAa,UAAW,CAAC;AAAA,QAAA;AAAA,MACxE,CACD;AAAA,IACH;AAAA,EAAA;AAEJ;;"}
@@ -1,31 +1,79 @@
1
- import { pickBy, has } from "lodash/fp";
1
+ import { pickBy, has, castArray } from "lodash/fp";
2
2
  import { hasNamespace, addNamespace } from "./namespace.mjs";
3
+ const PLUGIN_PREFIX = "plugin::";
4
+ const API_PREFIX = "api::";
5
+ const parsePolicy = (policy) => {
6
+ if (typeof policy === "string") {
7
+ return { policyName: policy, config: {} };
8
+ }
9
+ const { name, config } = policy;
10
+ return { policyName: name, config };
11
+ };
3
12
  const policiesRegistry = () => {
4
- const policies = {};
13
+ const policies = /* @__PURE__ */ new Map();
14
+ const find = (name, namespaceInfo) => {
15
+ const { pluginName, apiName } = namespaceInfo ?? {};
16
+ const policy = policies.get(name);
17
+ if (policy) {
18
+ return policy;
19
+ }
20
+ if (pluginName) {
21
+ return policies.get(`${PLUGIN_PREFIX}${pluginName}.${name}`);
22
+ }
23
+ if (apiName) {
24
+ return policies.get(`${API_PREFIX}${apiName}.${name}`);
25
+ }
26
+ };
27
+ function resolveHandler(policyConfig, namespaceInfo) {
28
+ if (Array.isArray(policyConfig)) {
29
+ return policyConfig.map((config2) => {
30
+ return resolveHandler(config2, namespaceInfo);
31
+ });
32
+ }
33
+ const { policyName, config } = parsePolicy(policyConfig);
34
+ const policy = find(policyName, namespaceInfo);
35
+ if (!policy) {
36
+ throw new Error(`Policy ${policyName} not found.`);
37
+ }
38
+ if (typeof policy === "function") {
39
+ return policy;
40
+ }
41
+ if (policy.validator) {
42
+ policy.validator(config);
43
+ }
44
+ return policy.handler;
45
+ }
5
46
  return {
6
47
  /**
7
48
  * Returns this list of registered policies uids
8
49
  */
9
50
  keys() {
10
- return Object.keys(policies);
51
+ return policies.keys();
11
52
  },
12
53
  /**
13
54
  * Returns the instance of a policy. Instantiate the policy if not already done
14
55
  */
15
- get(uid) {
16
- return policies[uid];
56
+ get(name, namespaceInfo) {
57
+ return find(name, namespaceInfo);
58
+ },
59
+ /**
60
+ * Checks if a policy is registered
61
+ */
62
+ has(name, namespaceInfo) {
63
+ const res = find(name, namespaceInfo);
64
+ return !!res;
17
65
  },
18
66
  /**
19
67
  * Returns a map with all the policies in a namespace
20
68
  */
21
69
  getAll(namespace) {
22
- return pickBy((_, uid) => hasNamespace(uid, namespace))(policies);
70
+ return pickBy((_, uid) => hasNamespace(uid, namespace))(Object.fromEntries(policies));
23
71
  },
24
72
  /**
25
73
  * Registers a policy
26
74
  */
27
75
  set(uid, policy) {
28
- policies[uid] = policy;
76
+ policies.set(uid, policy);
29
77
  return this;
30
78
  },
31
79
  /**
@@ -38,22 +86,20 @@ const policiesRegistry = () => {
38
86
  if (has(uid, policies)) {
39
87
  throw new Error(`Policy ${uid} has already been registered.`);
40
88
  }
41
- policies[uid] = policy;
89
+ policies.set(uid, policy);
42
90
  }
43
91
  },
44
92
  /**
45
- * Wraps a policy to extend it
46
- * @param {string} uid
47
- * @param {(policy: Policy) => Policy} extendFn
93
+ * Resolves a list of policies
48
94
  */
49
- extend(uid, extendFn) {
50
- const currentPolicy = this.get(uid);
51
- if (!currentPolicy) {
52
- throw new Error(`Policy ${uid} doesn't exist`);
53
- }
54
- const newPolicy = extendFn(currentPolicy);
55
- policies[uid] = newPolicy;
56
- return this;
95
+ resolve(config, namespaceInfo) {
96
+ const { pluginName, apiName } = namespaceInfo ?? {};
97
+ return castArray(config).map((policyConfig) => {
98
+ return {
99
+ handler: resolveHandler(policyConfig, { pluginName, apiName }),
100
+ config: typeof policyConfig === "object" && policyConfig.config || {}
101
+ };
102
+ });
57
103
  }
58
104
  };
59
105
  };
@@ -1 +1 @@
1
- {"version":3,"file":"policies.mjs","sources":["../../src/registries/policies.ts"],"sourcesContent":["import { pickBy, has } from 'lodash/fp';\nimport type { Common } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\ntype PolicyExtendFn = (policy: Common.Policy) => Common.Policy;\ntype PolicyMap = Record<string, Common.Policy>;\n\n// TODO: move instantiation part here instead of in the policy utils\nconst policiesRegistry = () => {\n const policies: PolicyMap = {};\n\n return {\n /**\n * Returns this list of registered policies uids\n */\n keys() {\n return Object.keys(policies);\n },\n\n /**\n * Returns the instance of a policy. Instantiate the policy if not already done\n */\n get(uid: Common.UID.Policy) {\n return policies[uid];\n },\n\n /**\n * Returns a map with all the policies in a namespace\n */\n getAll(namespace: string) {\n return pickBy((_, uid) => hasNamespace(uid, namespace))(policies);\n },\n\n /**\n * Registers a policy\n */\n set(uid: string, policy: Common.Policy) {\n policies[uid] = policy;\n return this;\n },\n\n /**\n * Registers a map of policies for a specific namespace\n */\n add(namespace: string, newPolicies: PolicyMap) {\n for (const policyName of Object.keys(newPolicies)) {\n const policy = newPolicies[policyName];\n const uid = addNamespace(policyName, namespace);\n\n if (has(uid, policies)) {\n throw new Error(`Policy ${uid} has already been registered.`);\n }\n policies[uid] = policy;\n }\n },\n\n /**\n * Wraps a policy to extend it\n * @param {string} uid\n * @param {(policy: Policy) => Policy} extendFn\n */\n extend(uid: Common.UID.Policy, extendFn: PolicyExtendFn) {\n const currentPolicy = this.get(uid);\n\n if (!currentPolicy) {\n throw new Error(`Policy ${uid} doesn't exist`);\n }\n\n const newPolicy = extendFn(currentPolicy);\n policies[uid] = newPolicy;\n\n return this;\n },\n };\n};\n\nexport default policiesRegistry;\n"],"names":[],"mappings":";;AAQA,MAAM,mBAAmB,MAAM;AAC7B,QAAM,WAAsB,CAAA;AAErB,SAAA;AAAA;AAAA;AAAA;AAAA,IAIL,OAAO;AACE,aAAA,OAAO,KAAK,QAAQ;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAwB;AAC1B,aAAO,SAAS,GAAG;AAAA,IACrB;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,WAAmB;AACjB,aAAA,OAAO,CAAC,GAAG,QAAQ,aAAa,KAAK,SAAS,CAAC,EAAE,QAAQ;AAAA,IAClE;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAa,QAAuB;AACtC,eAAS,GAAG,IAAI;AACT,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,WAAmB,aAAwB;AAC7C,iBAAW,cAAc,OAAO,KAAK,WAAW,GAAG;AAC3C,cAAA,SAAS,YAAY,UAAU;AAC/B,cAAA,MAAM,aAAa,YAAY,SAAS;AAE1C,YAAA,IAAI,KAAK,QAAQ,GAAG;AACtB,gBAAM,IAAI,MAAM,UAAU,GAAG,+BAA+B;AAAA,QAC9D;AACA,iBAAS,GAAG,IAAI;AAAA,MAClB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAO,KAAwB,UAA0B;AACjD,YAAA,gBAAgB,KAAK,IAAI,GAAG;AAElC,UAAI,CAAC,eAAe;AAClB,cAAM,IAAI,MAAM,UAAU,GAAG,gBAAgB;AAAA,MAC/C;AAEM,YAAA,YAAY,SAAS,aAAa;AACxC,eAAS,GAAG,IAAI;AAET,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"policies.mjs","sources":["../../src/registries/policies.ts"],"sourcesContent":["import { pickBy, has, castArray } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nconst PLUGIN_PREFIX = 'plugin::';\nconst API_PREFIX = 'api::';\n\ninterface PolicyInfo {\n name: string;\n config: unknown;\n}\n\ntype PolicyConfig = string | PolicyInfo;\n\ninterface NamespaceInfo {\n pluginName?: string;\n apiName?: string;\n}\n\nconst parsePolicy = (policy: string | PolicyInfo) => {\n if (typeof policy === 'string') {\n return { policyName: policy, config: {} };\n }\n\n const { name, config } = policy;\n return { policyName: name, config };\n};\n\nconst policiesRegistry = () => {\n const policies = new Map<string, Core.Policy>();\n\n const find = (name: string, namespaceInfo?: NamespaceInfo) => {\n const { pluginName, apiName } = namespaceInfo ?? {};\n\n // try to resolve a full name to avoid extra prefixing\n const policy = policies.get(name);\n\n if (policy) {\n return policy;\n }\n\n if (pluginName) {\n return policies.get(`${PLUGIN_PREFIX}${pluginName}.${name}`);\n }\n\n if (apiName) {\n return policies.get(`${API_PREFIX}${apiName}.${name}`);\n }\n };\n\n function resolveHandler(policyConfig: PolicyConfig, namespaceInfo?: NamespaceInfo): Core.Policy;\n function resolveHandler(\n policyConfig: PolicyConfig[],\n namespaceInfo?: NamespaceInfo\n ): Core.Policy[];\n function resolveHandler(\n policyConfig: PolicyConfig | PolicyConfig[],\n namespaceInfo?: NamespaceInfo\n ): Core.Policy | Core.Policy[] {\n if (Array.isArray(policyConfig)) {\n return policyConfig.map((config) => {\n return resolveHandler(config, namespaceInfo);\n });\n }\n\n const { policyName, config } = parsePolicy(policyConfig);\n\n const policy = find(policyName, namespaceInfo);\n\n if (!policy) {\n throw new Error(`Policy ${policyName} not found.`);\n }\n\n if (typeof policy === 'function') {\n return policy;\n }\n\n if (policy.validator) {\n policy.validator(config);\n }\n\n return policy.handler;\n }\n\n return {\n /**\n * Returns this list of registered policies uids\n */\n keys() {\n return policies.keys();\n },\n\n /**\n * Returns the instance of a policy. Instantiate the policy if not already done\n */\n get(name: string, namespaceInfo?: NamespaceInfo) {\n return find(name, namespaceInfo);\n },\n /**\n * Checks if a policy is registered\n */\n has(name: string, namespaceInfo?: NamespaceInfo) {\n const res = find(name, namespaceInfo);\n return !!res;\n },\n\n /**\n * Returns a map with all the policies in a namespace\n */\n getAll(namespace: string) {\n return pickBy((_, uid) => hasNamespace(uid, namespace))(Object.fromEntries(policies));\n },\n\n /**\n * Registers a policy\n */\n set(uid: string, policy: Core.Policy) {\n policies.set(uid, policy);\n return this;\n },\n\n /**\n * Registers a map of policies for a specific namespace\n */\n add(namespace: string, newPolicies: Record<string, Core.Policy>) {\n for (const policyName of Object.keys(newPolicies)) {\n const policy = newPolicies[policyName];\n const uid = addNamespace(policyName, namespace);\n\n if (has(uid, policies)) {\n throw new Error(`Policy ${uid} has already been registered.`);\n }\n\n policies.set(uid, policy);\n }\n },\n\n /**\n * Resolves a list of policies\n */\n resolve(config: PolicyConfig | PolicyConfig[], namespaceInfo?: NamespaceInfo) {\n const { pluginName, apiName } = namespaceInfo ?? {};\n\n return castArray(config).map((policyConfig) => {\n return {\n handler: resolveHandler(policyConfig, { pluginName, apiName }),\n config: (typeof policyConfig === 'object' && policyConfig.config) || {},\n };\n });\n },\n };\n};\n\nexport default policiesRegistry;\n"],"names":["config"],"mappings":";;AAIA,MAAM,gBAAgB;AACtB,MAAM,aAAa;AAcnB,MAAM,cAAc,CAAC,WAAgC;AAC/C,MAAA,OAAO,WAAW,UAAU;AAC9B,WAAO,EAAE,YAAY,QAAQ,QAAQ,CAAG,EAAA;AAAA,EAC1C;AAEM,QAAA,EAAE,MAAM,OAAW,IAAA;AAClB,SAAA,EAAE,YAAY,MAAM;AAC7B;AAEA,MAAM,mBAAmB,MAAM;AACvB,QAAA,+BAAe;AAEf,QAAA,OAAO,CAAC,MAAc,kBAAkC;AAC5D,UAAM,EAAE,YAAY,YAAY,iBAAiB,CAAA;AAG3C,UAAA,SAAS,SAAS,IAAI,IAAI;AAEhC,QAAI,QAAQ;AACH,aAAA;AAAA,IACT;AAEA,QAAI,YAAY;AACP,aAAA,SAAS,IAAI,GAAG,aAAa,GAAG,UAAU,IAAI,IAAI,EAAE;AAAA,IAC7D;AAEA,QAAI,SAAS;AACJ,aAAA,SAAS,IAAI,GAAG,UAAU,GAAG,OAAO,IAAI,IAAI,EAAE;AAAA,IACvD;AAAA,EAAA;AAQO,WAAA,eACP,cACA,eAC6B;AACzB,QAAA,MAAM,QAAQ,YAAY,GAAG;AACxB,aAAA,aAAa,IAAI,CAACA,YAAW;AAC3B,eAAA,eAAeA,SAAQ,aAAa;AAAA,MAAA,CAC5C;AAAA,IACH;AAEA,UAAM,EAAE,YAAY,OAAO,IAAI,YAAY,YAAY;AAEjD,UAAA,SAAS,KAAK,YAAY,aAAa;AAE7C,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,UAAU,UAAU,aAAa;AAAA,IACnD;AAEI,QAAA,OAAO,WAAW,YAAY;AACzB,aAAA;AAAA,IACT;AAEA,QAAI,OAAO,WAAW;AACpB,aAAO,UAAU,MAAM;AAAA,IACzB;AAEA,WAAO,OAAO;AAAA,EAChB;AAEO,SAAA;AAAA;AAAA;AAAA;AAAA,IAIL,OAAO;AACL,aAAO,SAAS;IAClB;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,MAAc,eAA+B;AACxC,aAAA,KAAK,MAAM,aAAa;AAAA,IACjC;AAAA;AAAA;AAAA;AAAA,IAIA,IAAI,MAAc,eAA+B;AACzC,YAAA,MAAM,KAAK,MAAM,aAAa;AACpC,aAAO,CAAC,CAAC;AAAA,IACX;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,WAAmB;AACxB,aAAO,OAAO,CAAC,GAAG,QAAQ,aAAa,KAAK,SAAS,CAAC,EAAE,OAAO,YAAY,QAAQ,CAAC;AAAA,IACtF;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAa,QAAqB;AAC3B,eAAA,IAAI,KAAK,MAAM;AACjB,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,WAAmB,aAA0C;AAC/D,iBAAW,cAAc,OAAO,KAAK,WAAW,GAAG;AAC3C,cAAA,SAAS,YAAY,UAAU;AAC/B,cAAA,MAAM,aAAa,YAAY,SAAS;AAE1C,YAAA,IAAI,KAAK,QAAQ,GAAG;AACtB,gBAAM,IAAI,MAAM,UAAU,GAAG,+BAA+B;AAAA,QAC9D;AAES,iBAAA,IAAI,KAAK,MAAM;AAAA,MAC1B;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,QAAQ,QAAuC,eAA+B;AAC5E,YAAM,EAAE,YAAY,YAAY,iBAAiB,CAAA;AAEjD,aAAO,UAAU,MAAM,EAAE,IAAI,CAAC,iBAAiB;AACtC,eAAA;AAAA,UACL,SAAS,eAAe,cAAc,EAAE,YAAY,SAAS;AAAA,UAC7D,QAAS,OAAO,iBAAiB,YAAY,aAAa,UAAW,CAAC;AAAA,QAAA;AAAA,MACxE,CACD;AAAA,IACH;AAAA,EAAA;AAEJ;"}
@@ -1,11 +1,11 @@
1
- import type { Strapi, Common } from '@strapi/types';
1
+ import type { Core, UID } from '@strapi/types';
2
2
  export type ServiceFactory = (params: {
3
- strapi: Strapi;
4
- }) => Common.Service | Common.Service;
3
+ strapi: Core.Strapi;
4
+ }) => Core.Service | Core.Service;
5
5
  export type ServiceFactoryMap = Record<string, ServiceFactory>;
6
- export type ServiceMap = Record<string, Common.Service>;
7
- export type ServiceExtendFn = (service: Common.Service) => Common.Service;
8
- declare const servicesRegistry: (strapi: Strapi) => {
6
+ export type ServiceMap = Record<string, Core.Service>;
7
+ export type ServiceExtendFn = (service: Core.Service) => Core.Service;
8
+ declare const servicesRegistry: (strapi: Core.Strapi) => {
9
9
  /**
10
10
  * Returns this list of registered services uids
11
11
  */
@@ -13,7 +13,7 @@ declare const servicesRegistry: (strapi: Strapi) => {
13
13
  /**
14
14
  * Returns the instance of a service. Instantiate the service if not already done
15
15
  */
16
- get(uid: Common.UID.Service): Common.Service | undefined;
16
+ get(uid: UID.Service): Core.Service | undefined;
17
17
  /**
18
18
  * Returns a map with all the services in a namespace
19
19
  */
@@ -29,7 +29,7 @@ declare const servicesRegistry: (strapi: Strapi) => {
29
29
  /**
30
30
  * Wraps a service to extend it
31
31
  */
32
- extend(uid: Common.UID.Service, extendFn: ServiceExtendFn): any;
32
+ extend(uid: UID.Service, extendFn: ServiceExtendFn): any;
33
33
  };
34
34
  export default servicesRegistry;
35
35
  //# sourceMappingURL=services.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/registries/services.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,KAAK,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AAC7F,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAC/D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC;AAE1E,QAAA,MAAM,gBAAgB,WAAY,MAAM;IAKpC;;OAEG;;IAKH;;OAEG;aACM,OAAO,GAAG,CAAC,OAAO;IAY3B;;OAEG;sBACe,MAAM,GAAG,UAAU;IAiBrC;;OAEG;aACM,MAAM,WAAW,cAAc;IAMxC;;OAEG;mBACY,MAAM,eAAe,iBAAiB;IAcrD;;OAEG;gBACS,OAAO,GAAG,CAAC,OAAO,YAAY,eAAe;CAa5D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/registries/services.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE,KAAK,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC9F,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAC/D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACtD,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC;AAEtE,QAAA,MAAM,gBAAgB,WAAY,KAAK,MAAM;IAKzC;;OAEG;;IAKH;;OAEG;aACM,IAAI,OAAO;IAYpB;;OAEG;sBACe,MAAM,GAAG,UAAU;IAiBrC;;OAEG;aACM,MAAM,WAAW,cAAc;IAMxC;;OAEG;mBACY,MAAM,eAAe,iBAAiB;IAcrD;;OAEG;gBACS,IAAI,OAAO,YAAY,eAAe;CAarD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"services.js","sources":["../../src/registries/services.ts"],"sourcesContent":["import { pickBy, has } from 'lodash/fp';\nimport type { Strapi, Common } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nexport type ServiceFactory = (params: { strapi: Strapi }) => Common.Service | Common.Service;\nexport type ServiceFactoryMap = Record<string, ServiceFactory>;\nexport type ServiceMap = Record<string, Common.Service>;\nexport type ServiceExtendFn = (service: Common.Service) => Common.Service;\n\nconst servicesRegistry = (strapi: Strapi) => {\n const services: ServiceFactoryMap = {};\n const instantiatedServices: ServiceMap = {};\n\n return {\n /**\n * Returns this list of registered services uids\n */\n keys() {\n return Object.keys(services);\n },\n\n /**\n * Returns the instance of a service. Instantiate the service if not already done\n */\n get(uid: Common.UID.Service) {\n if (instantiatedServices[uid]) {\n return instantiatedServices[uid];\n }\n\n const service = services[uid];\n if (service) {\n instantiatedServices[uid] = typeof service === 'function' ? service({ strapi }) : service;\n return instantiatedServices[uid];\n }\n },\n\n /**\n * Returns a map with all the services in a namespace\n */\n getAll(namespace: string): ServiceMap {\n const filteredServices = pickBy((_, uid) => hasNamespace(uid, namespace))(services);\n\n // create lazy accessor to avoid instantiating the services;\n const map = {};\n for (const uid of Object.keys(filteredServices)) {\n Object.defineProperty(map, uid, {\n enumerable: true,\n get: () => {\n return this.get(uid as Common.UID.Service);\n },\n });\n }\n\n return map;\n },\n\n /**\n * Registers a service\n */\n set(uid: string, service: ServiceFactory) {\n services[uid] = service;\n delete instantiatedServices[uid];\n return this;\n },\n\n /**\n * Registers a map of services for a specific namespace\n */\n add(namespace: string, newServices: ServiceFactoryMap) {\n for (const serviceName of Object.keys(newServices)) {\n const service = newServices[serviceName];\n const uid = addNamespace(serviceName, namespace);\n\n if (has(uid, services)) {\n throw new Error(`Service ${uid} has already been registered.`);\n }\n services[uid] = service;\n }\n\n return this;\n },\n\n /**\n * Wraps a service to extend it\n */\n extend(uid: Common.UID.Service, extendFn: ServiceExtendFn) {\n const currentService = this.get(uid);\n\n if (!currentService) {\n throw new Error(`Service ${uid} doesn't exist`);\n }\n\n const newService = extendFn(currentService);\n instantiatedServices[uid] = newService;\n\n return this;\n },\n };\n};\n\nexport default servicesRegistry;\n"],"names":["namespace","pickBy","_","hasNamespace","addNamespace","has"],"mappings":";;;AASM,MAAA,mBAAmB,CAAC,WAAmB;AAC3C,QAAM,WAA8B,CAAA;AACpC,QAAM,uBAAmC,CAAA;AAElC,SAAA;AAAA;AAAA;AAAA;AAAA,IAIL,OAAO;AACE,aAAA,OAAO,KAAK,QAAQ;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAyB;AACvB,UAAA,qBAAqB,GAAG,GAAG;AAC7B,eAAO,qBAAqB,GAAG;AAAA,MACjC;AAEM,YAAA,UAAU,SAAS,GAAG;AAC5B,UAAI,SAAS;AACU,6BAAA,GAAG,IAAI,OAAO,YAAY,aAAa,QAAQ,EAAE,QAAQ,IAAI;AAClF,eAAO,qBAAqB,GAAG;AAAA,MACjC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,OAAOA,aAA+B;AAC9B,YAAA,mBAAmBC,EAAAA,OAAO,CAACC,IAAG,QAAQC,uBAAa,KAAKH,WAAS,CAAC,EAAE,QAAQ;AAGlF,YAAM,MAAM,CAAA;AACZ,iBAAW,OAAO,OAAO,KAAK,gBAAgB,GAAG;AACxC,eAAA,eAAe,KAAK,KAAK;AAAA,UAC9B,YAAY;AAAA,UACZ,KAAK,MAAM;AACF,mBAAA,KAAK,IAAI,GAAyB;AAAA,UAC3C;AAAA,QAAA,CACD;AAAA,MACH;AAEO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAa,SAAyB;AACxC,eAAS,GAAG,IAAI;AAChB,aAAO,qBAAqB,GAAG;AACxB,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAIA,aAAmB,aAAgC;AACrD,iBAAW,eAAe,OAAO,KAAK,WAAW,GAAG;AAC5C,cAAA,UAAU,YAAY,WAAW;AACjC,cAAA,MAAMI,UAAAA,aAAa,aAAaJ,WAAS;AAE3C,YAAAK,EAAA,IAAI,KAAK,QAAQ,GAAG;AACtB,gBAAM,IAAI,MAAM,WAAW,GAAG,+BAA+B;AAAA,QAC/D;AACA,iBAAS,GAAG,IAAI;AAAA,MAClB;AAEO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,KAAyB,UAA2B;AACnD,YAAA,iBAAiB,KAAK,IAAI,GAAG;AAEnC,UAAI,CAAC,gBAAgB;AACnB,cAAM,IAAI,MAAM,WAAW,GAAG,gBAAgB;AAAA,MAChD;AAEM,YAAA,aAAa,SAAS,cAAc;AAC1C,2BAAqB,GAAG,IAAI;AAErB,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;;"}
1
+ {"version":3,"file":"services.js","sources":["../../src/registries/services.ts"],"sourcesContent":["import { pickBy, has } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nexport type ServiceFactory = (params: { strapi: Core.Strapi }) => Core.Service | Core.Service;\nexport type ServiceFactoryMap = Record<string, ServiceFactory>;\nexport type ServiceMap = Record<string, Core.Service>;\nexport type ServiceExtendFn = (service: Core.Service) => Core.Service;\n\nconst servicesRegistry = (strapi: Core.Strapi) => {\n const services: ServiceFactoryMap = {};\n const instantiatedServices: ServiceMap = {};\n\n return {\n /**\n * Returns this list of registered services uids\n */\n keys() {\n return Object.keys(services);\n },\n\n /**\n * Returns the instance of a service. Instantiate the service if not already done\n */\n get(uid: UID.Service) {\n if (instantiatedServices[uid]) {\n return instantiatedServices[uid];\n }\n\n const service = services[uid];\n if (service) {\n instantiatedServices[uid] = typeof service === 'function' ? service({ strapi }) : service;\n return instantiatedServices[uid];\n }\n },\n\n /**\n * Returns a map with all the services in a namespace\n */\n getAll(namespace: string): ServiceMap {\n const filteredServices = pickBy((_, uid) => hasNamespace(uid, namespace))(services);\n\n // create lazy accessor to avoid instantiating the services;\n const map = {};\n for (const uid of Object.keys(filteredServices)) {\n Object.defineProperty(map, uid, {\n enumerable: true,\n get: () => {\n return this.get(uid as UID.Service);\n },\n });\n }\n\n return map;\n },\n\n /**\n * Registers a service\n */\n set(uid: string, service: ServiceFactory) {\n services[uid] = service;\n delete instantiatedServices[uid];\n return this;\n },\n\n /**\n * Registers a map of services for a specific namespace\n */\n add(namespace: string, newServices: ServiceFactoryMap) {\n for (const serviceName of Object.keys(newServices)) {\n const service = newServices[serviceName];\n const uid = addNamespace(serviceName, namespace);\n\n if (has(uid, services)) {\n throw new Error(`Service ${uid} has already been registered.`);\n }\n services[uid] = service;\n }\n\n return this;\n },\n\n /**\n * Wraps a service to extend it\n */\n extend(uid: UID.Service, extendFn: ServiceExtendFn) {\n const currentService = this.get(uid);\n\n if (!currentService) {\n throw new Error(`Service ${uid} doesn't exist`);\n }\n\n const newService = extendFn(currentService);\n instantiatedServices[uid] = newService;\n\n return this;\n },\n };\n};\n\nexport default servicesRegistry;\n"],"names":["namespace","pickBy","_","hasNamespace","addNamespace","has"],"mappings":";;;AASM,MAAA,mBAAmB,CAAC,WAAwB;AAChD,QAAM,WAA8B,CAAA;AACpC,QAAM,uBAAmC,CAAA;AAElC,SAAA;AAAA;AAAA;AAAA;AAAA,IAIL,OAAO;AACE,aAAA,OAAO,KAAK,QAAQ;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAkB;AAChB,UAAA,qBAAqB,GAAG,GAAG;AAC7B,eAAO,qBAAqB,GAAG;AAAA,MACjC;AAEM,YAAA,UAAU,SAAS,GAAG;AAC5B,UAAI,SAAS;AACU,6BAAA,GAAG,IAAI,OAAO,YAAY,aAAa,QAAQ,EAAE,QAAQ,IAAI;AAClF,eAAO,qBAAqB,GAAG;AAAA,MACjC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,OAAOA,aAA+B;AAC9B,YAAA,mBAAmBC,EAAAA,OAAO,CAACC,IAAG,QAAQC,uBAAa,KAAKH,WAAS,CAAC,EAAE,QAAQ;AAGlF,YAAM,MAAM,CAAA;AACZ,iBAAW,OAAO,OAAO,KAAK,gBAAgB,GAAG;AACxC,eAAA,eAAe,KAAK,KAAK;AAAA,UAC9B,YAAY;AAAA,UACZ,KAAK,MAAM;AACF,mBAAA,KAAK,IAAI,GAAkB;AAAA,UACpC;AAAA,QAAA,CACD;AAAA,MACH;AAEO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAa,SAAyB;AACxC,eAAS,GAAG,IAAI;AAChB,aAAO,qBAAqB,GAAG;AACxB,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAIA,aAAmB,aAAgC;AACrD,iBAAW,eAAe,OAAO,KAAK,WAAW,GAAG;AAC5C,cAAA,UAAU,YAAY,WAAW;AACjC,cAAA,MAAMI,UAAAA,aAAa,aAAaJ,WAAS;AAE3C,YAAAK,EAAA,IAAI,KAAK,QAAQ,GAAG;AACtB,gBAAM,IAAI,MAAM,WAAW,GAAG,+BAA+B;AAAA,QAC/D;AACA,iBAAS,GAAG,IAAI;AAAA,MAClB;AAEO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,KAAkB,UAA2B;AAC5C,YAAA,iBAAiB,KAAK,IAAI,GAAG;AAEnC,UAAI,CAAC,gBAAgB;AACnB,cAAM,IAAI,MAAM,WAAW,GAAG,gBAAgB;AAAA,MAChD;AAEM,YAAA,aAAa,SAAS,cAAc;AAC1C,2BAAqB,GAAG,IAAI;AAErB,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"services.mjs","sources":["../../src/registries/services.ts"],"sourcesContent":["import { pickBy, has } from 'lodash/fp';\nimport type { Strapi, Common } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nexport type ServiceFactory = (params: { strapi: Strapi }) => Common.Service | Common.Service;\nexport type ServiceFactoryMap = Record<string, ServiceFactory>;\nexport type ServiceMap = Record<string, Common.Service>;\nexport type ServiceExtendFn = (service: Common.Service) => Common.Service;\n\nconst servicesRegistry = (strapi: Strapi) => {\n const services: ServiceFactoryMap = {};\n const instantiatedServices: ServiceMap = {};\n\n return {\n /**\n * Returns this list of registered services uids\n */\n keys() {\n return Object.keys(services);\n },\n\n /**\n * Returns the instance of a service. Instantiate the service if not already done\n */\n get(uid: Common.UID.Service) {\n if (instantiatedServices[uid]) {\n return instantiatedServices[uid];\n }\n\n const service = services[uid];\n if (service) {\n instantiatedServices[uid] = typeof service === 'function' ? service({ strapi }) : service;\n return instantiatedServices[uid];\n }\n },\n\n /**\n * Returns a map with all the services in a namespace\n */\n getAll(namespace: string): ServiceMap {\n const filteredServices = pickBy((_, uid) => hasNamespace(uid, namespace))(services);\n\n // create lazy accessor to avoid instantiating the services;\n const map = {};\n for (const uid of Object.keys(filteredServices)) {\n Object.defineProperty(map, uid, {\n enumerable: true,\n get: () => {\n return this.get(uid as Common.UID.Service);\n },\n });\n }\n\n return map;\n },\n\n /**\n * Registers a service\n */\n set(uid: string, service: ServiceFactory) {\n services[uid] = service;\n delete instantiatedServices[uid];\n return this;\n },\n\n /**\n * Registers a map of services for a specific namespace\n */\n add(namespace: string, newServices: ServiceFactoryMap) {\n for (const serviceName of Object.keys(newServices)) {\n const service = newServices[serviceName];\n const uid = addNamespace(serviceName, namespace);\n\n if (has(uid, services)) {\n throw new Error(`Service ${uid} has already been registered.`);\n }\n services[uid] = service;\n }\n\n return this;\n },\n\n /**\n * Wraps a service to extend it\n */\n extend(uid: Common.UID.Service, extendFn: ServiceExtendFn) {\n const currentService = this.get(uid);\n\n if (!currentService) {\n throw new Error(`Service ${uid} doesn't exist`);\n }\n\n const newService = extendFn(currentService);\n instantiatedServices[uid] = newService;\n\n return this;\n },\n };\n};\n\nexport default servicesRegistry;\n"],"names":[],"mappings":";;AASM,MAAA,mBAAmB,CAAC,WAAmB;AAC3C,QAAM,WAA8B,CAAA;AACpC,QAAM,uBAAmC,CAAA;AAElC,SAAA;AAAA;AAAA;AAAA;AAAA,IAIL,OAAO;AACE,aAAA,OAAO,KAAK,QAAQ;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAyB;AACvB,UAAA,qBAAqB,GAAG,GAAG;AAC7B,eAAO,qBAAqB,GAAG;AAAA,MACjC;AAEM,YAAA,UAAU,SAAS,GAAG;AAC5B,UAAI,SAAS;AACU,6BAAA,GAAG,IAAI,OAAO,YAAY,aAAa,QAAQ,EAAE,QAAQ,IAAI;AAClF,eAAO,qBAAqB,GAAG;AAAA,MACjC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,WAA+B;AAC9B,YAAA,mBAAmB,OAAO,CAAC,GAAG,QAAQ,aAAa,KAAK,SAAS,CAAC,EAAE,QAAQ;AAGlF,YAAM,MAAM,CAAA;AACZ,iBAAW,OAAO,OAAO,KAAK,gBAAgB,GAAG;AACxC,eAAA,eAAe,KAAK,KAAK;AAAA,UAC9B,YAAY;AAAA,UACZ,KAAK,MAAM;AACF,mBAAA,KAAK,IAAI,GAAyB;AAAA,UAC3C;AAAA,QAAA,CACD;AAAA,MACH;AAEO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAa,SAAyB;AACxC,eAAS,GAAG,IAAI;AAChB,aAAO,qBAAqB,GAAG;AACxB,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,WAAmB,aAAgC;AACrD,iBAAW,eAAe,OAAO,KAAK,WAAW,GAAG;AAC5C,cAAA,UAAU,YAAY,WAAW;AACjC,cAAA,MAAM,aAAa,aAAa,SAAS;AAE3C,YAAA,IAAI,KAAK,QAAQ,GAAG;AACtB,gBAAM,IAAI,MAAM,WAAW,GAAG,+BAA+B;AAAA,QAC/D;AACA,iBAAS,GAAG,IAAI;AAAA,MAClB;AAEO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,KAAyB,UAA2B;AACnD,YAAA,iBAAiB,KAAK,IAAI,GAAG;AAEnC,UAAI,CAAC,gBAAgB;AACnB,cAAM,IAAI,MAAM,WAAW,GAAG,gBAAgB;AAAA,MAChD;AAEM,YAAA,aAAa,SAAS,cAAc;AAC1C,2BAAqB,GAAG,IAAI;AAErB,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"services.mjs","sources":["../../src/registries/services.ts"],"sourcesContent":["import { pickBy, has } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\nexport type ServiceFactory = (params: { strapi: Core.Strapi }) => Core.Service | Core.Service;\nexport type ServiceFactoryMap = Record<string, ServiceFactory>;\nexport type ServiceMap = Record<string, Core.Service>;\nexport type ServiceExtendFn = (service: Core.Service) => Core.Service;\n\nconst servicesRegistry = (strapi: Core.Strapi) => {\n const services: ServiceFactoryMap = {};\n const instantiatedServices: ServiceMap = {};\n\n return {\n /**\n * Returns this list of registered services uids\n */\n keys() {\n return Object.keys(services);\n },\n\n /**\n * Returns the instance of a service. Instantiate the service if not already done\n */\n get(uid: UID.Service) {\n if (instantiatedServices[uid]) {\n return instantiatedServices[uid];\n }\n\n const service = services[uid];\n if (service) {\n instantiatedServices[uid] = typeof service === 'function' ? service({ strapi }) : service;\n return instantiatedServices[uid];\n }\n },\n\n /**\n * Returns a map with all the services in a namespace\n */\n getAll(namespace: string): ServiceMap {\n const filteredServices = pickBy((_, uid) => hasNamespace(uid, namespace))(services);\n\n // create lazy accessor to avoid instantiating the services;\n const map = {};\n for (const uid of Object.keys(filteredServices)) {\n Object.defineProperty(map, uid, {\n enumerable: true,\n get: () => {\n return this.get(uid as UID.Service);\n },\n });\n }\n\n return map;\n },\n\n /**\n * Registers a service\n */\n set(uid: string, service: ServiceFactory) {\n services[uid] = service;\n delete instantiatedServices[uid];\n return this;\n },\n\n /**\n * Registers a map of services for a specific namespace\n */\n add(namespace: string, newServices: ServiceFactoryMap) {\n for (const serviceName of Object.keys(newServices)) {\n const service = newServices[serviceName];\n const uid = addNamespace(serviceName, namespace);\n\n if (has(uid, services)) {\n throw new Error(`Service ${uid} has already been registered.`);\n }\n services[uid] = service;\n }\n\n return this;\n },\n\n /**\n * Wraps a service to extend it\n */\n extend(uid: UID.Service, extendFn: ServiceExtendFn) {\n const currentService = this.get(uid);\n\n if (!currentService) {\n throw new Error(`Service ${uid} doesn't exist`);\n }\n\n const newService = extendFn(currentService);\n instantiatedServices[uid] = newService;\n\n return this;\n },\n };\n};\n\nexport default servicesRegistry;\n"],"names":[],"mappings":";;AASM,MAAA,mBAAmB,CAAC,WAAwB;AAChD,QAAM,WAA8B,CAAA;AACpC,QAAM,uBAAmC,CAAA;AAElC,SAAA;AAAA;AAAA;AAAA;AAAA,IAIL,OAAO;AACE,aAAA,OAAO,KAAK,QAAQ;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAkB;AAChB,UAAA,qBAAqB,GAAG,GAAG;AAC7B,eAAO,qBAAqB,GAAG;AAAA,MACjC;AAEM,YAAA,UAAU,SAAS,GAAG;AAC5B,UAAI,SAAS;AACU,6BAAA,GAAG,IAAI,OAAO,YAAY,aAAa,QAAQ,EAAE,QAAQ,IAAI;AAClF,eAAO,qBAAqB,GAAG;AAAA,MACjC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,WAA+B;AAC9B,YAAA,mBAAmB,OAAO,CAAC,GAAG,QAAQ,aAAa,KAAK,SAAS,CAAC,EAAE,QAAQ;AAGlF,YAAM,MAAM,CAAA;AACZ,iBAAW,OAAO,OAAO,KAAK,gBAAgB,GAAG;AACxC,eAAA,eAAe,KAAK,KAAK;AAAA,UAC9B,YAAY;AAAA,UACZ,KAAK,MAAM;AACF,mBAAA,KAAK,IAAI,GAAkB;AAAA,UACpC;AAAA,QAAA,CACD;AAAA,MACH;AAEO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,KAAa,SAAyB;AACxC,eAAS,GAAG,IAAI;AAChB,aAAO,qBAAqB,GAAG;AACxB,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,WAAmB,aAAgC;AACrD,iBAAW,eAAe,OAAO,KAAK,WAAW,GAAG;AAC5C,cAAA,UAAU,YAAY,WAAW;AACjC,cAAA,MAAM,aAAa,aAAa,SAAS;AAE3C,YAAA,IAAI,KAAK,QAAQ,GAAG;AACtB,gBAAM,IAAI,MAAM,WAAW,GAAG,+BAA+B;AAAA,QAC/D;AACA,iBAAS,GAAG,IAAI;AAAA,MAClB;AAEO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,KAAkB,UAA2B;AAC5C,YAAA,iBAAiB,KAAK,IAAI,GAAG;AAEnC,UAAI,CAAC,gBAAgB;AACnB,cAAM,IAAI,MAAM,WAAW,GAAG,gBAAgB;AAAA,MAChD;AAEM,YAAA,aAAa,SAAS,cAAc;AAC1C,2BAAqB,GAAG,IAAI;AAErB,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;"}
@@ -1,4 +1,4 @@
1
- import type { Common } from '@strapi/types';
1
+ import type { Core } from '@strapi/types';
2
2
  import type { ParameterizedContext } from 'koa';
3
3
  interface AuthenticationResponse {
4
4
  authenticated?: boolean;
@@ -14,12 +14,12 @@ interface AuthenticationInfo {
14
14
  interface Strategy {
15
15
  name: string;
16
16
  authenticate: (ctx: ParameterizedContext) => Promise<AuthenticationResponse>;
17
- verify?: (auth: AuthenticationInfo, config: Common.RouteConfig['auth']) => Promise<any>;
17
+ verify?: (auth: AuthenticationInfo, config: Core.RouteConfig['auth']) => Promise<any>;
18
18
  }
19
19
  interface Authentication {
20
20
  register: (type: string, strategy: Strategy) => Authentication;
21
- authenticate: Common.MiddlewareHandler;
22
- verify: (auth: AuthenticationInfo, config?: Common.RouteConfig['auth']) => Promise<any>;
21
+ authenticate: Core.MiddlewareHandler;
22
+ verify: (auth: AuthenticationInfo, config?: Core.RouteConfig['auth']) => Promise<any>;
23
23
  }
24
24
  declare const createAuthentication: () => Authentication;
25
25
  export default createAuthentication;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/auth/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,KAAK,CAAC;AAEhD,UAAU,sBAAsB;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC7E,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACzF;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,cAAc,CAAC;IAC/D,YAAY,EAAE,MAAM,CAAC,iBAAiB,CAAC;IACvC,MAAM,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACzF;AAcD,QAAA,MAAM,oBAAoB,QAAO,cA4FhC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/auth/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,KAAK,CAAC;AAEhD,UAAU,sBAAsB;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC7E,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACvF;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,cAAc,CAAC;IAC/D,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC;IACrC,MAAM,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACvF;AAcD,QAAA,MAAM,oBAAoB,QAAO,cA4FhC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/services/auth/index.ts"],"sourcesContent":["import assert from 'assert/strict';\nimport { has } from 'lodash/fp';\n\nimport { errors } from '@strapi/utils';\nimport type { Common } from '@strapi/types';\nimport type { ParameterizedContext } from 'koa';\n\ninterface AuthenticationResponse {\n authenticated?: boolean;\n credentials?: unknown;\n ability?: unknown;\n error?: Error | null;\n}\n\ninterface AuthenticationInfo {\n strategy: Strategy;\n credentials: unknown;\n ability: unknown;\n}\n\ninterface Strategy {\n name: string;\n authenticate: (ctx: ParameterizedContext) => Promise<AuthenticationResponse>;\n verify?: (auth: AuthenticationInfo, config: Common.RouteConfig['auth']) => Promise<any>;\n}\n\ninterface Authentication {\n register: (type: string, strategy: Strategy) => Authentication;\n authenticate: Common.MiddlewareHandler;\n verify: (auth: AuthenticationInfo, config?: Common.RouteConfig['auth']) => Promise<any>;\n}\n\nconst INVALID_STRATEGY_MSG =\n 'Invalid auth strategy. Expecting an object with properties {name: string, authenticate: function, verify: function}';\n\nconst validStrategy = (strategy: Strategy) => {\n assert(has('authenticate', strategy), INVALID_STRATEGY_MSG);\n assert(typeof strategy.authenticate === 'function', INVALID_STRATEGY_MSG);\n\n if (has('verify', strategy)) {\n assert(typeof strategy.verify === 'function', INVALID_STRATEGY_MSG);\n }\n};\n\nconst createAuthentication = (): Authentication => {\n const strategies: Record<string, Strategy[]> = {};\n\n return {\n register(type, strategy) {\n validStrategy(strategy);\n\n if (!strategies[type]) {\n strategies[type] = [];\n }\n\n strategies[type].push(strategy);\n\n return this;\n },\n\n async authenticate(ctx, next) {\n const route: Common.Route = ctx.state.route;\n\n // use route strategy\n const config = route?.config?.auth;\n\n if (config === false) {\n return next();\n }\n\n const routeStrategies = route.info.type ? strategies[route.info.type] : [];\n const configStrategies = (config?.strategies ?? routeStrategies ?? []) as Array<\n string | Strategy\n >;\n\n const strategiesToUse: Strategy[] = configStrategies.reduce(\n (acc, strategy: string | Strategy) => {\n // Resolve by strategy name\n if (typeof strategy === 'string') {\n const routeStrategy = routeStrategies.find((rs) => rs.name === strategy);\n\n if (routeStrategy) {\n acc.push(routeStrategy);\n }\n }\n\n // Use the given strategy as is\n else if (typeof strategy === 'object') {\n validStrategy(strategy);\n\n acc.push(strategy);\n }\n\n return acc;\n },\n [] as Strategy[]\n );\n\n for (const strategy of strategiesToUse) {\n const result = await strategy.authenticate(ctx);\n\n const { authenticated = false, credentials, ability = null, error = null } = result || {};\n\n if (error !== null) {\n return ctx.unauthorized(error);\n }\n\n if (authenticated) {\n ctx.state.isAuthenticated = true;\n ctx.state.auth = {\n strategy,\n credentials,\n ability,\n };\n\n return next();\n }\n }\n\n return ctx.unauthorized('Missing or invalid credentials');\n },\n\n async verify(auth, config = {}) {\n if (config === false) {\n return;\n }\n\n if (!auth) {\n throw new errors.UnauthorizedError();\n }\n\n if (typeof auth.strategy.verify === 'function') {\n return auth.strategy.verify(auth, config);\n }\n },\n };\n};\n\nexport default createAuthentication;\n"],"names":["assert","has","errors"],"mappings":";;;;;;AAgCA,MAAM,uBACJ;AAEF,MAAM,gBAAgB,CAAC,aAAuB;AAC5CA,kBAAAA,QAAOC,EAAAA,IAAI,gBAAgB,QAAQ,GAAG,oBAAoB;AAC1DD,kBAAAA,QAAO,OAAO,SAAS,iBAAiB,YAAY,oBAAoB;AAEpE,MAAAC,EAAA,IAAI,UAAU,QAAQ,GAAG;AAC3BD,oBAAAA,QAAO,OAAO,SAAS,WAAW,YAAY,oBAAoB;AAAA,EACpE;AACF;AAEA,MAAM,uBAAuB,MAAsB;AACjD,QAAM,aAAyC,CAAA;AAExC,SAAA;AAAA,IACL,SAAS,MAAM,UAAU;AACvB,oBAAc,QAAQ;AAElB,UAAA,CAAC,WAAW,IAAI,GAAG;AACV,mBAAA,IAAI,IAAI;MACrB;AAEW,iBAAA,IAAI,EAAE,KAAK,QAAQ;AAEvB,aAAA;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,KAAK,MAAM;AACtB,YAAA,QAAsB,IAAI,MAAM;AAGhC,YAAA,SAAS,OAAO,QAAQ;AAE9B,UAAI,WAAW,OAAO;AACpB,eAAO,KAAK;AAAA,MACd;AAEM,YAAA,kBAAkB,MAAM,KAAK,OAAO,WAAW,MAAM,KAAK,IAAI,IAAI;AACxE,YAAM,mBAAoB,QAAQ,cAAc,mBAAmB,CAAA;AAInE,YAAM,kBAA8B,iBAAiB;AAAA,QACnD,CAAC,KAAK,aAAgC;AAEhC,cAAA,OAAO,aAAa,UAAU;AAChC,kBAAM,gBAAgB,gBAAgB,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAEvE,gBAAI,eAAe;AACjB,kBAAI,KAAK,aAAa;AAAA,YACxB;AAAA,UAAA,WAIO,OAAO,aAAa,UAAU;AACrC,0BAAc,QAAQ;AAEtB,gBAAI,KAAK,QAAQ;AAAA,UACnB;AAEO,iBAAA;AAAA,QACT;AAAA,QACA,CAAC;AAAA,MAAA;AAGH,iBAAW,YAAY,iBAAiB;AACtC,cAAM,SAAS,MAAM,SAAS,aAAa,GAAG;AAExC,cAAA,EAAE,gBAAgB,OAAO,aAAa,UAAU,MAAM,QAAQ,KAAA,IAAS,UAAU;AAEvF,YAAI,UAAU,MAAM;AACX,iBAAA,IAAI,aAAa,KAAK;AAAA,QAC/B;AAEA,YAAI,eAAe;AACjB,cAAI,MAAM,kBAAkB;AAC5B,cAAI,MAAM,OAAO;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAGF,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAEO,aAAA,IAAI,aAAa,gCAAgC;AAAA,IAC1D;AAAA,IAEA,MAAM,OAAO,MAAM,SAAS,IAAI;AAC9B,UAAI,WAAW,OAAO;AACpB;AAAA,MACF;AAEA,UAAI,CAAC,MAAM;AACH,cAAA,IAAIE,YAAAA,OAAO;MACnB;AAEA,UAAI,OAAO,KAAK,SAAS,WAAW,YAAY;AAC9C,eAAO,KAAK,SAAS,OAAO,MAAM,MAAM;AAAA,MAC1C;AAAA,IACF;AAAA,EAAA;AAEJ;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/services/auth/index.ts"],"sourcesContent":["import assert from 'assert/strict';\nimport { has } from 'lodash/fp';\n\nimport { errors } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport type { ParameterizedContext } from 'koa';\n\ninterface AuthenticationResponse {\n authenticated?: boolean;\n credentials?: unknown;\n ability?: unknown;\n error?: Error | null;\n}\n\ninterface AuthenticationInfo {\n strategy: Strategy;\n credentials: unknown;\n ability: unknown;\n}\n\ninterface Strategy {\n name: string;\n authenticate: (ctx: ParameterizedContext) => Promise<AuthenticationResponse>;\n verify?: (auth: AuthenticationInfo, config: Core.RouteConfig['auth']) => Promise<any>;\n}\n\ninterface Authentication {\n register: (type: string, strategy: Strategy) => Authentication;\n authenticate: Core.MiddlewareHandler;\n verify: (auth: AuthenticationInfo, config?: Core.RouteConfig['auth']) => Promise<any>;\n}\n\nconst INVALID_STRATEGY_MSG =\n 'Invalid auth strategy. Expecting an object with properties {name: string, authenticate: function, verify: function}';\n\nconst validStrategy = (strategy: Strategy) => {\n assert(has('authenticate', strategy), INVALID_STRATEGY_MSG);\n assert(typeof strategy.authenticate === 'function', INVALID_STRATEGY_MSG);\n\n if (has('verify', strategy)) {\n assert(typeof strategy.verify === 'function', INVALID_STRATEGY_MSG);\n }\n};\n\nconst createAuthentication = (): Authentication => {\n const strategies: Record<string, Strategy[]> = {};\n\n return {\n register(type, strategy) {\n validStrategy(strategy);\n\n if (!strategies[type]) {\n strategies[type] = [];\n }\n\n strategies[type].push(strategy);\n\n return this;\n },\n\n async authenticate(ctx, next) {\n const route: Core.Route = ctx.state.route;\n\n // use route strategy\n const config = route?.config?.auth;\n\n if (config === false) {\n return next();\n }\n\n const routeStrategies = route.info.type ? strategies[route.info.type] : [];\n const configStrategies = (config?.strategies ?? routeStrategies ?? []) as Array<\n string | Strategy\n >;\n\n const strategiesToUse: Strategy[] = configStrategies.reduce(\n (acc, strategy: string | Strategy) => {\n // Resolve by strategy name\n if (typeof strategy === 'string') {\n const routeStrategy = routeStrategies.find((rs) => rs.name === strategy);\n\n if (routeStrategy) {\n acc.push(routeStrategy);\n }\n }\n\n // Use the given strategy as is\n else if (typeof strategy === 'object') {\n validStrategy(strategy);\n\n acc.push(strategy);\n }\n\n return acc;\n },\n [] as Strategy[]\n );\n\n for (const strategy of strategiesToUse) {\n const result = await strategy.authenticate(ctx);\n\n const { authenticated = false, credentials, ability = null, error = null } = result || {};\n\n if (error !== null) {\n return ctx.unauthorized(error);\n }\n\n if (authenticated) {\n ctx.state.isAuthenticated = true;\n ctx.state.auth = {\n strategy,\n credentials,\n ability,\n };\n\n return next();\n }\n }\n\n return ctx.unauthorized('Missing or invalid credentials');\n },\n\n async verify(auth, config = {}) {\n if (config === false) {\n return;\n }\n\n if (!auth) {\n throw new errors.UnauthorizedError();\n }\n\n if (typeof auth.strategy.verify === 'function') {\n return auth.strategy.verify(auth, config);\n }\n },\n };\n};\n\nexport default createAuthentication;\n"],"names":["assert","has","errors"],"mappings":";;;;;;AAgCA,MAAM,uBACJ;AAEF,MAAM,gBAAgB,CAAC,aAAuB;AAC5CA,kBAAAA,QAAOC,EAAAA,IAAI,gBAAgB,QAAQ,GAAG,oBAAoB;AAC1DD,kBAAAA,QAAO,OAAO,SAAS,iBAAiB,YAAY,oBAAoB;AAEpE,MAAAC,EAAA,IAAI,UAAU,QAAQ,GAAG;AAC3BD,oBAAAA,QAAO,OAAO,SAAS,WAAW,YAAY,oBAAoB;AAAA,EACpE;AACF;AAEA,MAAM,uBAAuB,MAAsB;AACjD,QAAM,aAAyC,CAAA;AAExC,SAAA;AAAA,IACL,SAAS,MAAM,UAAU;AACvB,oBAAc,QAAQ;AAElB,UAAA,CAAC,WAAW,IAAI,GAAG;AACV,mBAAA,IAAI,IAAI;MACrB;AAEW,iBAAA,IAAI,EAAE,KAAK,QAAQ;AAEvB,aAAA;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,KAAK,MAAM;AACtB,YAAA,QAAoB,IAAI,MAAM;AAG9B,YAAA,SAAS,OAAO,QAAQ;AAE9B,UAAI,WAAW,OAAO;AACpB,eAAO,KAAK;AAAA,MACd;AAEM,YAAA,kBAAkB,MAAM,KAAK,OAAO,WAAW,MAAM,KAAK,IAAI,IAAI;AACxE,YAAM,mBAAoB,QAAQ,cAAc,mBAAmB,CAAA;AAInE,YAAM,kBAA8B,iBAAiB;AAAA,QACnD,CAAC,KAAK,aAAgC;AAEhC,cAAA,OAAO,aAAa,UAAU;AAChC,kBAAM,gBAAgB,gBAAgB,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAEvE,gBAAI,eAAe;AACjB,kBAAI,KAAK,aAAa;AAAA,YACxB;AAAA,UAAA,WAIO,OAAO,aAAa,UAAU;AACrC,0BAAc,QAAQ;AAEtB,gBAAI,KAAK,QAAQ;AAAA,UACnB;AAEO,iBAAA;AAAA,QACT;AAAA,QACA,CAAC;AAAA,MAAA;AAGH,iBAAW,YAAY,iBAAiB;AACtC,cAAM,SAAS,MAAM,SAAS,aAAa,GAAG;AAExC,cAAA,EAAE,gBAAgB,OAAO,aAAa,UAAU,MAAM,QAAQ,KAAA,IAAS,UAAU;AAEvF,YAAI,UAAU,MAAM;AACX,iBAAA,IAAI,aAAa,KAAK;AAAA,QAC/B;AAEA,YAAI,eAAe;AACjB,cAAI,MAAM,kBAAkB;AAC5B,cAAI,MAAM,OAAO;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAGF,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAEO,aAAA,IAAI,aAAa,gCAAgC;AAAA,IAC1D;AAAA,IAEA,MAAM,OAAO,MAAM,SAAS,IAAI;AAC9B,UAAI,WAAW,OAAO;AACpB;AAAA,MACF;AAEA,UAAI,CAAC,MAAM;AACH,cAAA,IAAIE,YAAAA,OAAO;MACnB;AAEA,UAAI,OAAO,KAAK,SAAS,WAAW,YAAY;AAC9C,eAAO,KAAK,SAAS,OAAO,MAAM,MAAM;AAAA,MAC1C;AAAA,IACF;AAAA,EAAA;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/services/auth/index.ts"],"sourcesContent":["import assert from 'assert/strict';\nimport { has } from 'lodash/fp';\n\nimport { errors } from '@strapi/utils';\nimport type { Common } from '@strapi/types';\nimport type { ParameterizedContext } from 'koa';\n\ninterface AuthenticationResponse {\n authenticated?: boolean;\n credentials?: unknown;\n ability?: unknown;\n error?: Error | null;\n}\n\ninterface AuthenticationInfo {\n strategy: Strategy;\n credentials: unknown;\n ability: unknown;\n}\n\ninterface Strategy {\n name: string;\n authenticate: (ctx: ParameterizedContext) => Promise<AuthenticationResponse>;\n verify?: (auth: AuthenticationInfo, config: Common.RouteConfig['auth']) => Promise<any>;\n}\n\ninterface Authentication {\n register: (type: string, strategy: Strategy) => Authentication;\n authenticate: Common.MiddlewareHandler;\n verify: (auth: AuthenticationInfo, config?: Common.RouteConfig['auth']) => Promise<any>;\n}\n\nconst INVALID_STRATEGY_MSG =\n 'Invalid auth strategy. Expecting an object with properties {name: string, authenticate: function, verify: function}';\n\nconst validStrategy = (strategy: Strategy) => {\n assert(has('authenticate', strategy), INVALID_STRATEGY_MSG);\n assert(typeof strategy.authenticate === 'function', INVALID_STRATEGY_MSG);\n\n if (has('verify', strategy)) {\n assert(typeof strategy.verify === 'function', INVALID_STRATEGY_MSG);\n }\n};\n\nconst createAuthentication = (): Authentication => {\n const strategies: Record<string, Strategy[]> = {};\n\n return {\n register(type, strategy) {\n validStrategy(strategy);\n\n if (!strategies[type]) {\n strategies[type] = [];\n }\n\n strategies[type].push(strategy);\n\n return this;\n },\n\n async authenticate(ctx, next) {\n const route: Common.Route = ctx.state.route;\n\n // use route strategy\n const config = route?.config?.auth;\n\n if (config === false) {\n return next();\n }\n\n const routeStrategies = route.info.type ? strategies[route.info.type] : [];\n const configStrategies = (config?.strategies ?? routeStrategies ?? []) as Array<\n string | Strategy\n >;\n\n const strategiesToUse: Strategy[] = configStrategies.reduce(\n (acc, strategy: string | Strategy) => {\n // Resolve by strategy name\n if (typeof strategy === 'string') {\n const routeStrategy = routeStrategies.find((rs) => rs.name === strategy);\n\n if (routeStrategy) {\n acc.push(routeStrategy);\n }\n }\n\n // Use the given strategy as is\n else if (typeof strategy === 'object') {\n validStrategy(strategy);\n\n acc.push(strategy);\n }\n\n return acc;\n },\n [] as Strategy[]\n );\n\n for (const strategy of strategiesToUse) {\n const result = await strategy.authenticate(ctx);\n\n const { authenticated = false, credentials, ability = null, error = null } = result || {};\n\n if (error !== null) {\n return ctx.unauthorized(error);\n }\n\n if (authenticated) {\n ctx.state.isAuthenticated = true;\n ctx.state.auth = {\n strategy,\n credentials,\n ability,\n };\n\n return next();\n }\n }\n\n return ctx.unauthorized('Missing or invalid credentials');\n },\n\n async verify(auth, config = {}) {\n if (config === false) {\n return;\n }\n\n if (!auth) {\n throw new errors.UnauthorizedError();\n }\n\n if (typeof auth.strategy.verify === 'function') {\n return auth.strategy.verify(auth, config);\n }\n },\n };\n};\n\nexport default createAuthentication;\n"],"names":[],"mappings":";;;AAgCA,MAAM,uBACJ;AAEF,MAAM,gBAAgB,CAAC,aAAuB;AAC5C,SAAO,IAAI,gBAAgB,QAAQ,GAAG,oBAAoB;AAC1D,SAAO,OAAO,SAAS,iBAAiB,YAAY,oBAAoB;AAEpE,MAAA,IAAI,UAAU,QAAQ,GAAG;AAC3B,WAAO,OAAO,SAAS,WAAW,YAAY,oBAAoB;AAAA,EACpE;AACF;AAEA,MAAM,uBAAuB,MAAsB;AACjD,QAAM,aAAyC,CAAA;AAExC,SAAA;AAAA,IACL,SAAS,MAAM,UAAU;AACvB,oBAAc,QAAQ;AAElB,UAAA,CAAC,WAAW,IAAI,GAAG;AACV,mBAAA,IAAI,IAAI;MACrB;AAEW,iBAAA,IAAI,EAAE,KAAK,QAAQ;AAEvB,aAAA;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,KAAK,MAAM;AACtB,YAAA,QAAsB,IAAI,MAAM;AAGhC,YAAA,SAAS,OAAO,QAAQ;AAE9B,UAAI,WAAW,OAAO;AACpB,eAAO,KAAK;AAAA,MACd;AAEM,YAAA,kBAAkB,MAAM,KAAK,OAAO,WAAW,MAAM,KAAK,IAAI,IAAI;AACxE,YAAM,mBAAoB,QAAQ,cAAc,mBAAmB,CAAA;AAInE,YAAM,kBAA8B,iBAAiB;AAAA,QACnD,CAAC,KAAK,aAAgC;AAEhC,cAAA,OAAO,aAAa,UAAU;AAChC,kBAAM,gBAAgB,gBAAgB,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAEvE,gBAAI,eAAe;AACjB,kBAAI,KAAK,aAAa;AAAA,YACxB;AAAA,UAAA,WAIO,OAAO,aAAa,UAAU;AACrC,0BAAc,QAAQ;AAEtB,gBAAI,KAAK,QAAQ;AAAA,UACnB;AAEO,iBAAA;AAAA,QACT;AAAA,QACA,CAAC;AAAA,MAAA;AAGH,iBAAW,YAAY,iBAAiB;AACtC,cAAM,SAAS,MAAM,SAAS,aAAa,GAAG;AAExC,cAAA,EAAE,gBAAgB,OAAO,aAAa,UAAU,MAAM,QAAQ,KAAA,IAAS,UAAU;AAEvF,YAAI,UAAU,MAAM;AACX,iBAAA,IAAI,aAAa,KAAK;AAAA,QAC/B;AAEA,YAAI,eAAe;AACjB,cAAI,MAAM,kBAAkB;AAC5B,cAAI,MAAM,OAAO;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAGF,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAEO,aAAA,IAAI,aAAa,gCAAgC;AAAA,IAC1D;AAAA,IAEA,MAAM,OAAO,MAAM,SAAS,IAAI;AAC9B,UAAI,WAAW,OAAO;AACpB;AAAA,MACF;AAEA,UAAI,CAAC,MAAM;AACH,cAAA,IAAI,OAAO;MACnB;AAEA,UAAI,OAAO,KAAK,SAAS,WAAW,YAAY;AAC9C,eAAO,KAAK,SAAS,OAAO,MAAM,MAAM;AAAA,MAC1C;AAAA,IACF;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/services/auth/index.ts"],"sourcesContent":["import assert from 'assert/strict';\nimport { has } from 'lodash/fp';\n\nimport { errors } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\nimport type { ParameterizedContext } from 'koa';\n\ninterface AuthenticationResponse {\n authenticated?: boolean;\n credentials?: unknown;\n ability?: unknown;\n error?: Error | null;\n}\n\ninterface AuthenticationInfo {\n strategy: Strategy;\n credentials: unknown;\n ability: unknown;\n}\n\ninterface Strategy {\n name: string;\n authenticate: (ctx: ParameterizedContext) => Promise<AuthenticationResponse>;\n verify?: (auth: AuthenticationInfo, config: Core.RouteConfig['auth']) => Promise<any>;\n}\n\ninterface Authentication {\n register: (type: string, strategy: Strategy) => Authentication;\n authenticate: Core.MiddlewareHandler;\n verify: (auth: AuthenticationInfo, config?: Core.RouteConfig['auth']) => Promise<any>;\n}\n\nconst INVALID_STRATEGY_MSG =\n 'Invalid auth strategy. Expecting an object with properties {name: string, authenticate: function, verify: function}';\n\nconst validStrategy = (strategy: Strategy) => {\n assert(has('authenticate', strategy), INVALID_STRATEGY_MSG);\n assert(typeof strategy.authenticate === 'function', INVALID_STRATEGY_MSG);\n\n if (has('verify', strategy)) {\n assert(typeof strategy.verify === 'function', INVALID_STRATEGY_MSG);\n }\n};\n\nconst createAuthentication = (): Authentication => {\n const strategies: Record<string, Strategy[]> = {};\n\n return {\n register(type, strategy) {\n validStrategy(strategy);\n\n if (!strategies[type]) {\n strategies[type] = [];\n }\n\n strategies[type].push(strategy);\n\n return this;\n },\n\n async authenticate(ctx, next) {\n const route: Core.Route = ctx.state.route;\n\n // use route strategy\n const config = route?.config?.auth;\n\n if (config === false) {\n return next();\n }\n\n const routeStrategies = route.info.type ? strategies[route.info.type] : [];\n const configStrategies = (config?.strategies ?? routeStrategies ?? []) as Array<\n string | Strategy\n >;\n\n const strategiesToUse: Strategy[] = configStrategies.reduce(\n (acc, strategy: string | Strategy) => {\n // Resolve by strategy name\n if (typeof strategy === 'string') {\n const routeStrategy = routeStrategies.find((rs) => rs.name === strategy);\n\n if (routeStrategy) {\n acc.push(routeStrategy);\n }\n }\n\n // Use the given strategy as is\n else if (typeof strategy === 'object') {\n validStrategy(strategy);\n\n acc.push(strategy);\n }\n\n return acc;\n },\n [] as Strategy[]\n );\n\n for (const strategy of strategiesToUse) {\n const result = await strategy.authenticate(ctx);\n\n const { authenticated = false, credentials, ability = null, error = null } = result || {};\n\n if (error !== null) {\n return ctx.unauthorized(error);\n }\n\n if (authenticated) {\n ctx.state.isAuthenticated = true;\n ctx.state.auth = {\n strategy,\n credentials,\n ability,\n };\n\n return next();\n }\n }\n\n return ctx.unauthorized('Missing or invalid credentials');\n },\n\n async verify(auth, config = {}) {\n if (config === false) {\n return;\n }\n\n if (!auth) {\n throw new errors.UnauthorizedError();\n }\n\n if (typeof auth.strategy.verify === 'function') {\n return auth.strategy.verify(auth, config);\n }\n },\n };\n};\n\nexport default createAuthentication;\n"],"names":[],"mappings":";;;AAgCA,MAAM,uBACJ;AAEF,MAAM,gBAAgB,CAAC,aAAuB;AAC5C,SAAO,IAAI,gBAAgB,QAAQ,GAAG,oBAAoB;AAC1D,SAAO,OAAO,SAAS,iBAAiB,YAAY,oBAAoB;AAEpE,MAAA,IAAI,UAAU,QAAQ,GAAG;AAC3B,WAAO,OAAO,SAAS,WAAW,YAAY,oBAAoB;AAAA,EACpE;AACF;AAEA,MAAM,uBAAuB,MAAsB;AACjD,QAAM,aAAyC,CAAA;AAExC,SAAA;AAAA,IACL,SAAS,MAAM,UAAU;AACvB,oBAAc,QAAQ;AAElB,UAAA,CAAC,WAAW,IAAI,GAAG;AACV,mBAAA,IAAI,IAAI;MACrB;AAEW,iBAAA,IAAI,EAAE,KAAK,QAAQ;AAEvB,aAAA;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,KAAK,MAAM;AACtB,YAAA,QAAoB,IAAI,MAAM;AAG9B,YAAA,SAAS,OAAO,QAAQ;AAE9B,UAAI,WAAW,OAAO;AACpB,eAAO,KAAK;AAAA,MACd;AAEM,YAAA,kBAAkB,MAAM,KAAK,OAAO,WAAW,MAAM,KAAK,IAAI,IAAI;AACxE,YAAM,mBAAoB,QAAQ,cAAc,mBAAmB,CAAA;AAInE,YAAM,kBAA8B,iBAAiB;AAAA,QACnD,CAAC,KAAK,aAAgC;AAEhC,cAAA,OAAO,aAAa,UAAU;AAChC,kBAAM,gBAAgB,gBAAgB,KAAK,CAAC,OAAO,GAAG,SAAS,QAAQ;AAEvE,gBAAI,eAAe;AACjB,kBAAI,KAAK,aAAa;AAAA,YACxB;AAAA,UAAA,WAIO,OAAO,aAAa,UAAU;AACrC,0BAAc,QAAQ;AAEtB,gBAAI,KAAK,QAAQ;AAAA,UACnB;AAEO,iBAAA;AAAA,QACT;AAAA,QACA,CAAC;AAAA,MAAA;AAGH,iBAAW,YAAY,iBAAiB;AACtC,cAAM,SAAS,MAAM,SAAS,aAAa,GAAG;AAExC,cAAA,EAAE,gBAAgB,OAAO,aAAa,UAAU,MAAM,QAAQ,KAAA,IAAS,UAAU;AAEvF,YAAI,UAAU,MAAM;AACX,iBAAA,IAAI,aAAa,KAAK;AAAA,QAC/B;AAEA,YAAI,eAAe;AACjB,cAAI,MAAM,kBAAkB;AAC5B,cAAI,MAAM,OAAO;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAGF,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAEO,aAAA,IAAI,aAAa,gCAAgC;AAAA,IAC1D;AAAA,IAEA,MAAM,OAAO,MAAM,SAAS,IAAI;AAC9B,UAAI,WAAW,OAAO;AACpB;AAAA,MACF;AAEA,UAAI,CAAC,MAAM;AACH,cAAA,IAAI,OAAO;MACnB;AAEA,UAAI,OAAO,KAAK,SAAS,WAAW,YAAY;AAC9C,eAAO,KAAK,SAAS,OAAO,MAAM,MAAM;AAAA,MAC1C;AAAA,IACF;AAAA,EAAA;AAEJ;"}
@@ -1,8 +1,9 @@
1
- import type { Strapi, Common } from '@strapi/types';
1
+ import { sanitize, validate } from '@strapi/utils';
2
+ import type { Core } from '@strapi/types';
2
3
  /**
3
4
  * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)
4
5
  */
5
- declare const createContentAPI: (strapi: Strapi) => {
6
+ declare const createContentAPI: (strapi: Core.Strapi) => {
6
7
  permissions: {
7
8
  engine: import("@strapi/permissions/dist/engine").Engine;
8
9
  providers: {
@@ -48,7 +49,24 @@ declare const createContentAPI: (strapi: Strapi) => {
48
49
  controllers: Record<string, string[]>;
49
50
  }>;
50
51
  };
51
- getRoutesMap: () => Promise<Record<string, Common.Route[]>>;
52
+ getRoutesMap: () => Promise<Record<string, Core.Route[]>>;
53
+ sanitize: {
54
+ input: sanitize.SanitizeFunc;
55
+ output: sanitize.SanitizeFunc;
56
+ query: (query: Record<string, unknown>, schema: import("@strapi/utils/dist/types").Model, { auth }?: sanitize.Options | undefined) => Promise<Record<string, unknown>>;
57
+ filters: sanitize.SanitizeFunc;
58
+ sort: sanitize.SanitizeFunc;
59
+ fields: sanitize.SanitizeFunc;
60
+ populate: sanitize.SanitizeFunc;
61
+ };
62
+ validate: {
63
+ input: validate.ValidateFunc;
64
+ query: (query: Record<string, unknown>, schema: import("@strapi/utils/dist/types").Model, { auth }?: validate.Options | undefined) => Promise<void>;
65
+ filters: validate.ValidateFunc;
66
+ sort: validate.ValidateFunc;
67
+ fields: validate.ValidateFunc;
68
+ populate: validate.ValidateFunc;
69
+ };
52
70
  };
53
71
  export default createContentAPI;
54
72
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/content-api/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAepD;;GAEG;AACH,QAAA,MAAM,gBAAgB,WAAY,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDvC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/content-api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;AAgB/C;;GAEG;AACH,QAAA,MAAM,gBAAgB,WAAY,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgF5C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  const _ = require("lodash");
3
+ const strapiUtils = require("@strapi/utils");
3
4
  const index = require("./permissions/index.js");
4
5
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
5
6
  const ___default = /* @__PURE__ */ _interopDefault(_);
@@ -15,7 +16,7 @@ const filterContentAPI = (route) => route.info.type === "content-api";
15
16
  const createContentAPI = (strapi) => {
16
17
  const getRoutesMap = async () => {
17
18
  const routesMap = {};
18
- ___default.default.forEach(strapi.api, (api, apiName) => {
19
+ ___default.default.forEach(strapi.apis, (api, apiName) => {
19
20
  const routes = ___default.default.flatMap(api.routes, (route) => {
20
21
  if ("routes" in route) {
21
22
  return route.routes;
@@ -50,9 +51,34 @@ const createContentAPI = (strapi) => {
50
51
  });
51
52
  return routesMap;
52
53
  };
54
+ const sanitizer = strapiUtils.sanitize.createAPISanitizers({
55
+ getModel(uid) {
56
+ return strapi.getModel(uid);
57
+ },
58
+ // NOTE: use lazy access to allow registration of sanitizers after the creation of the container
59
+ get sanitizers() {
60
+ return {
61
+ input: strapi.sanitizers.get("content-api.input"),
62
+ output: strapi.sanitizers.get("content-api.output")
63
+ };
64
+ }
65
+ });
66
+ const validator = strapiUtils.validate.createAPIValidators({
67
+ getModel(uid) {
68
+ return strapi.getModel(uid);
69
+ },
70
+ // NOTE: use lazy access to allow registration of validators after the creation of the container
71
+ get validators() {
72
+ return {
73
+ input: strapi.validators.get("content-api.input")
74
+ };
75
+ }
76
+ });
53
77
  return {
54
78
  permissions: index(strapi),
55
- getRoutesMap
79
+ getRoutesMap,
80
+ sanitize: sanitizer,
81
+ validate: validator
56
82
  };
57
83
  };
58
84
  module.exports = createContentAPI;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Strapi, Common } from '@strapi/types';\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Common.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Common.Route) => route.info.type === 'content-api';\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Strapi) => {\n const getRoutesMap = async () => {\n const routesMap: Record<string, Common.Route[]> = {};\n\n _.forEach(strapi.api, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return routesMap;\n };\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n };\n};\n\nexport default createContentAPI;\n"],"names":["_","instantiatePermissionsUtilities"],"mappings":";;;;;AAIA,MAAM,0BAA0B,CAAC,eAAuB,CAAC,UAAwB;AAC/E,QAAM,SAAS,MAAM,UAAU,MAAM,OAAO;AAC5C,QAAM,OAAO,WAAW,SAAY,GAAG,MAAM,GAAG,MAAM,IAAI,KAAK,IAAI,UAAU,GAAG,MAAM,IAAI;AAEnF,SAAA;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EAAA;AAEJ;AAEA,MAAM,mBAAmB,CAAC,UAAwB,MAAM,KAAK,SAAS;AAKhE,MAAA,mBAAmB,CAAC,WAAmB;AAC3C,QAAM,eAAe,YAAY;AAC/B,UAAM,YAA4C,CAAA;AAElDA,eAAA,QAAE,QAAQ,OAAO,KAAK,CAAC,KAAK,YAAY;AACtC,YAAM,SAASA,WAAAA,QAAE,QAAQ,IAAI,QAAQ,CAAC,UAAU;AAC9C,YAAI,YAAY,OAAO;AACrB,iBAAO,MAAM;AAAA,QACf;AAEO,eAAA;AAAA,MAAA,CACR,EAAE,OAAO,gBAAgB;AAEtB,UAAA,OAAO,WAAW,GAAG;AACvB;AAAA,MACF;AAEA,YAAM,YAAY,OAAO,OAAO,IAAI,iBAAiB;AACrD,gBAAU,QAAQ,OAAO,EAAE,IAAI,OAAO,IAAI,CAAC,WAAW;AAAA,QACpD,GAAG;AAAA,QACH,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,MAC/B,EAAA;AAAA,IAAA,CACH;AAEDA,eAAA,QAAE,QAAQ,OAAO,SAAS,CAAC,QAAQ,eAAe;AAC1C,YAAA,kBAAkB,wBAAwB,UAAU;AAE1D,UAAI,MAAM,QAAQ,OAAO,MAAM,GAAG;AAChC,eAAO,OAAO,OAAO,IAAI,eAAe,EAAE,OAAO,gBAAgB;AAAA,MACnE;AAEA,YAAM,SAASA,WAAA,QAAE,QAAQ,OAAO,QAAQ,CAAC,UAAU,MAAM,OAAO,IAAI,eAAe,CAAC,EAAE;AAAA,QACpF;AAAA,MAAA;AAGE,UAAA,OAAO,WAAW,GAAG;AACvB;AAAA,MACF;AAEA,YAAM,YAAY,OAAO,OAAO,IAAI,iBAAiB;AACrD,gBAAU,WAAW,UAAU,EAAE,IAAI,OAAO,IAAI,CAAC,WAAW;AAAA,QAC1D,GAAG;AAAA,QACH,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,MAC/B,EAAA;AAAA,IAAA,CACH;AAEM,WAAA;AAAA,EAAA;AAGF,SAAA;AAAA,IACL,aAAaC,MAAgC,MAAM;AAAA,IACnD;AAAA,EAAA;AAEJ;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { sanitize, validate } from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.apis, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return routesMap;\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of sanitizers after the creation of the container\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of validators after the creation of the container\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n };\n};\n\nexport default createContentAPI;\n"],"names":["_","sanitize","validate","instantiatePermissionsUtilities"],"mappings":";;;;;;AAOA,MAAM,0BAA0B,CAAC,eAAuB,CAAC,UAAsB;AAC7E,QAAM,SAAS,MAAM,UAAU,MAAM,OAAO;AAC5C,QAAM,OAAO,WAAW,SAAY,GAAG,MAAM,GAAG,MAAM,IAAI,KAAK,IAAI,UAAU,GAAG,MAAM,IAAI;AAEnF,SAAA;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EAAA;AAEJ;AAEA,MAAM,mBAAmB,CAAC,UAAsB,MAAM,KAAK,SAAS;AAK9D,MAAA,mBAAmB,CAAC,WAAwB;AAChD,QAAM,eAAe,YAAY;AAC/B,UAAM,YAA0C,CAAA;AAEhDA,eAAA,QAAE,QAAQ,OAAO,MAAM,CAAC,KAAK,YAAY;AACvC,YAAM,SAASA,WAAAA,QAAE,QAAQ,IAAI,QAAQ,CAAC,UAAU;AAC9C,YAAI,YAAY,OAAO;AACrB,iBAAO,MAAM;AAAA,QACf;AAEO,eAAA;AAAA,MAAA,CACR,EAAE,OAAO,gBAAgB;AAEtB,UAAA,OAAO,WAAW,GAAG;AACvB;AAAA,MACF;AAEA,YAAM,YAAY,OAAO,OAAO,IAAI,iBAAiB;AACrD,gBAAU,QAAQ,OAAO,EAAE,IAAI,OAAO,IAAI,CAAC,WAAW;AAAA,QACpD,GAAG;AAAA,QACH,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,MAC/B,EAAA;AAAA,IAAA,CACH;AAEDA,eAAA,QAAE,QAAQ,OAAO,SAAS,CAAC,QAAQ,eAAe;AAC1C,YAAA,kBAAkB,wBAAwB,UAAU;AAE1D,UAAI,MAAM,QAAQ,OAAO,MAAM,GAAG;AAChC,eAAO,OAAO,OAAO,IAAI,eAAe,EAAE,OAAO,gBAAgB;AAAA,MACnE;AAEA,YAAM,SAASA,WAAA,QAAE,QAAQ,OAAO,QAAQ,CAAC,UAAU,MAAM,OAAO,IAAI,eAAe,CAAC,EAAE;AAAA,QACpF;AAAA,MAAA;AAGE,UAAA,OAAO,WAAW,GAAG;AACvB;AAAA,MACF;AAEA,YAAM,YAAY,OAAO,OAAO,IAAI,iBAAiB;AACrD,gBAAU,WAAW,UAAU,EAAE,IAAI,OAAO,IAAI,CAAC,WAAW;AAAA,QAC1D,GAAG;AAAA,QACH,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI;AAAA,MAC/B,EAAA;AAAA,IAAA,CACH;AAEM,WAAA;AAAA,EAAA;AAGH,QAAA,YAAYC,qBAAS,oBAAoB;AAAA,IAC7C,SAAS,KAAa;AACb,aAAA,OAAO,SAAS,GAAiB;AAAA,IAC1C;AAAA;AAAA,IAEA,IAAI,aAAa;AACR,aAAA;AAAA,QACL,OAAO,OAAO,WAAW,IAAI,mBAAmB;AAAA,QAChD,QAAQ,OAAO,WAAW,IAAI,oBAAoB;AAAA,MAAA;AAAA,IAEtD;AAAA,EAAA,CACD;AAEK,QAAA,YAAYC,qBAAS,oBAAoB;AAAA,IAC7C,SAAS,KAAa;AACb,aAAA,OAAO,SAAS,GAAiB;AAAA,IAC1C;AAAA;AAAA,IAEA,IAAI,aAAa;AACR,aAAA;AAAA,QACL,OAAO,OAAO,WAAW,IAAI,mBAAmB;AAAA,MAAA;AAAA,IAEpD;AAAA,EAAA,CACD;AAEM,SAAA;AAAA,IACL,aAAaC,MAAgC,MAAM;AAAA,IACnD;AAAA,IACA,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAEd;;"}