@kalisio/kdk 2.6.3 → 2.6.5

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 (273) hide show
  1. package/core/api/hooks/hooks.model.js +1 -1
  2. package/extras/tours/pane.top.js +9 -0
  3. package/map/client/i18n/map_en.json +2 -1
  4. package/map/client/i18n/map_fr.json +2 -1
  5. package/package.json +1 -1
  6. package/test/api/core/test-log-2026-03-26.log +0 -0
  7. package/client/css/core.variables.scss +0 -72
  8. package/client/i18n/core_en.json +0 -744
  9. package/client/i18n/core_fr.json +0 -744
  10. package/client/i18n/map_en.json +0 -800
  11. package/client/i18n/map_fr.json +0 -800
  12. package/client/kdk.client.css +0 -47
  13. package/client/kdk.client.js +0 -41097
  14. package/client/kdk.client.map.css +0 -47
  15. package/client/kdk.client.map.js +0 -38182
  16. package/client/kdk.client.map.min.css +0 -1
  17. package/client/kdk.client.map.min.js +0 -27032
  18. package/client/kdk.client.min.css +0 -1
  19. package/client/kdk.client.min.js +0 -29074
  20. package/client/schemas/capture.create.json +0 -132
  21. package/client/schemas/catalog.update.json +0 -44
  22. package/client/schemas/messages.update.json +0 -16
  23. package/client/schemas/projects.create.json +0 -52
  24. package/client/schemas/projects.update.json +0 -52
  25. package/client/schemas/settings.update.json +0 -286
  26. package/client/schemas/tags.update.json +0 -35
  27. package/client/schemas/users.update-profile.json +0 -34
  28. package/coverage/base.css +0 -224
  29. package/coverage/block-navigation.js +0 -87
  30. package/coverage/core/api/application.js.html +0 -1864
  31. package/coverage/core/api/authentication.js.html +0 -907
  32. package/coverage/core/api/db.js.html +0 -817
  33. package/coverage/core/api/hooks/hooks.authentication.js.html +0 -139
  34. package/coverage/core/api/hooks/hooks.authorisations.js.html +0 -964
  35. package/coverage/core/api/hooks/hooks.logger.js.html +0 -163
  36. package/coverage/core/api/hooks/hooks.model.js.html +0 -967
  37. package/coverage/core/api/hooks/hooks.push.js.html +0 -268
  38. package/coverage/core/api/hooks/hooks.query.js.html +0 -910
  39. package/coverage/core/api/hooks/hooks.schemas.js.html +0 -298
  40. package/coverage/core/api/hooks/hooks.service.js.html +0 -319
  41. package/coverage/core/api/hooks/hooks.storage.js.html +0 -193
  42. package/coverage/core/api/hooks/hooks.tags.js.html +0 -253
  43. package/coverage/core/api/hooks/hooks.users.js.html +0 -676
  44. package/coverage/core/api/hooks/index.html +0 -281
  45. package/coverage/core/api/hooks/index.js.html +0 -115
  46. package/coverage/core/api/index.html +0 -176
  47. package/coverage/core/api/index.js.html +0 -148
  48. package/coverage/core/api/marshall.js.html +0 -448
  49. package/coverage/core/api/models/configurations.model.mongodb.js.html +0 -97
  50. package/coverage/core/api/models/index.html +0 -161
  51. package/coverage/core/api/models/messages.model.mongodb.js.html +0 -121
  52. package/coverage/core/api/models/tags.model.mongodb.js.html +0 -109
  53. package/coverage/core/api/models/users.model.mongodb.js.html +0 -115
  54. package/coverage/core/api/services/account/account.hooks.js.html +0 -208
  55. package/coverage/core/api/services/account/account.service.js.html +0 -436
  56. package/coverage/core/api/services/account/index.html +0 -131
  57. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +0 -184
  58. package/coverage/core/api/services/authorisations/authorisations.service.js.html +0 -520
  59. package/coverage/core/api/services/authorisations/index.html +0 -131
  60. package/coverage/core/api/services/configurations/configurations.hooks.js.html +0 -184
  61. package/coverage/core/api/services/configurations/index.html +0 -116
  62. package/coverage/core/api/services/databases/databases.hooks.js.html +0 -193
  63. package/coverage/core/api/services/databases/databases.service.js.html +0 -100
  64. package/coverage/core/api/services/databases/index.html +0 -131
  65. package/coverage/core/api/services/import-export/import-export.hooks.js.html +0 -184
  66. package/coverage/core/api/services/import-export/import-export.service.js.html +0 -118
  67. package/coverage/core/api/services/import-export/index.html +0 -131
  68. package/coverage/core/api/services/index.html +0 -116
  69. package/coverage/core/api/services/index.js.html +0 -727
  70. package/coverage/core/api/services/mailer/index.html +0 -131
  71. package/coverage/core/api/services/mailer/mailer.hooks.js.html +0 -190
  72. package/coverage/core/api/services/mailer/mailer.service.js.html +0 -118
  73. package/coverage/core/api/services/messages/index.html +0 -116
  74. package/coverage/core/api/services/messages/messages.hooks.js.html +0 -220
  75. package/coverage/core/api/services/push/index.html +0 -131
  76. package/coverage/core/api/services/push/push.hooks.js.html +0 -190
  77. package/coverage/core/api/services/push/push.service.js.html +0 -121
  78. package/coverage/core/api/services/storage/index.html +0 -131
  79. package/coverage/core/api/services/storage/storage.hooks.js.html +0 -190
  80. package/coverage/core/api/services/storage/storage.service.js.html +0 -172
  81. package/coverage/core/api/services/tags/index.html +0 -116
  82. package/coverage/core/api/services/tags/tags.hooks.js.html +0 -226
  83. package/coverage/core/api/services/users/index.html +0 -131
  84. package/coverage/core/api/services/users/users.hooks.js.html +0 -310
  85. package/coverage/core/api/services/users/users.service.js.html +0 -100
  86. package/coverage/core/common/errors.js.html +0 -88
  87. package/coverage/core/common/index.html +0 -191
  88. package/coverage/core/common/index.js.html +0 -115
  89. package/coverage/core/common/permissions.js.html +0 -742
  90. package/coverage/core/common/schema.js.html +0 -190
  91. package/coverage/core/common/utils.js.html +0 -226
  92. package/coverage/core/common/utils.offline.js.html +0 -199
  93. package/coverage/favicon.png +0 -0
  94. package/coverage/index.html +0 -506
  95. package/coverage/lcov-report/base.css +0 -224
  96. package/coverage/lcov-report/block-navigation.js +0 -87
  97. package/coverage/lcov-report/core/api/application.js.html +0 -1864
  98. package/coverage/lcov-report/core/api/authentication.js.html +0 -907
  99. package/coverage/lcov-report/core/api/db.js.html +0 -817
  100. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +0 -139
  101. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +0 -964
  102. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +0 -163
  103. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +0 -967
  104. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +0 -268
  105. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +0 -910
  106. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +0 -298
  107. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +0 -319
  108. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +0 -193
  109. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +0 -253
  110. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +0 -676
  111. package/coverage/lcov-report/core/api/hooks/index.html +0 -281
  112. package/coverage/lcov-report/core/api/hooks/index.js.html +0 -115
  113. package/coverage/lcov-report/core/api/index.html +0 -176
  114. package/coverage/lcov-report/core/api/index.js.html +0 -148
  115. package/coverage/lcov-report/core/api/marshall.js.html +0 -448
  116. package/coverage/lcov-report/core/api/models/configurations.model.mongodb.js.html +0 -97
  117. package/coverage/lcov-report/core/api/models/index.html +0 -161
  118. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +0 -121
  119. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +0 -109
  120. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +0 -115
  121. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +0 -208
  122. package/coverage/lcov-report/core/api/services/account/account.service.js.html +0 -436
  123. package/coverage/lcov-report/core/api/services/account/index.html +0 -131
  124. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +0 -184
  125. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +0 -520
  126. package/coverage/lcov-report/core/api/services/authorisations/index.html +0 -131
  127. package/coverage/lcov-report/core/api/services/configurations/configurations.hooks.js.html +0 -184
  128. package/coverage/lcov-report/core/api/services/configurations/index.html +0 -116
  129. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +0 -193
  130. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +0 -100
  131. package/coverage/lcov-report/core/api/services/databases/index.html +0 -131
  132. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +0 -184
  133. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +0 -118
  134. package/coverage/lcov-report/core/api/services/import-export/index.html +0 -131
  135. package/coverage/lcov-report/core/api/services/index.html +0 -116
  136. package/coverage/lcov-report/core/api/services/index.js.html +0 -727
  137. package/coverage/lcov-report/core/api/services/mailer/index.html +0 -131
  138. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +0 -190
  139. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +0 -118
  140. package/coverage/lcov-report/core/api/services/messages/index.html +0 -116
  141. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +0 -220
  142. package/coverage/lcov-report/core/api/services/push/index.html +0 -131
  143. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +0 -190
  144. package/coverage/lcov-report/core/api/services/push/push.service.js.html +0 -121
  145. package/coverage/lcov-report/core/api/services/storage/index.html +0 -131
  146. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +0 -190
  147. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +0 -172
  148. package/coverage/lcov-report/core/api/services/tags/index.html +0 -116
  149. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +0 -226
  150. package/coverage/lcov-report/core/api/services/users/index.html +0 -131
  151. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +0 -310
  152. package/coverage/lcov-report/core/api/services/users/users.service.js.html +0 -100
  153. package/coverage/lcov-report/core/common/errors.js.html +0 -88
  154. package/coverage/lcov-report/core/common/index.html +0 -191
  155. package/coverage/lcov-report/core/common/index.js.html +0 -115
  156. package/coverage/lcov-report/core/common/permissions.js.html +0 -742
  157. package/coverage/lcov-report/core/common/schema.js.html +0 -190
  158. package/coverage/lcov-report/core/common/utils.js.html +0 -226
  159. package/coverage/lcov-report/core/common/utils.offline.js.html +0 -199
  160. package/coverage/lcov-report/favicon.png +0 -0
  161. package/coverage/lcov-report/index.html +0 -506
  162. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +0 -595
  163. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +0 -397
  164. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +0 -1309
  165. package/coverage/lcov-report/map/api/hooks/index.html +0 -161
  166. package/coverage/lcov-report/map/api/hooks/index.js.html +0 -94
  167. package/coverage/lcov-report/map/api/index.html +0 -131
  168. package/coverage/lcov-report/map/api/index.js.html +0 -139
  169. package/coverage/lcov-report/map/api/marshall.js.html +0 -178
  170. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +0 -106
  171. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +0 -202
  172. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +0 -196
  173. package/coverage/lcov-report/map/api/models/index.html +0 -176
  174. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +0 -109
  175. package/coverage/lcov-report/map/api/models/styles.model.mongodb.js.html +0 -112
  176. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +0 -274
  177. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +0 -610
  178. package/coverage/lcov-report/map/api/services/alerts/index.html +0 -131
  179. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +0 -337
  180. package/coverage/lcov-report/map/api/services/catalog/index.html +0 -116
  181. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +0 -1510
  182. package/coverage/lcov-report/map/api/services/daptiles/index.html +0 -116
  183. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +0 -316
  184. package/coverage/lcov-report/map/api/services/features/features.service.js.html +0 -544
  185. package/coverage/lcov-report/map/api/services/features/index.html +0 -131
  186. package/coverage/lcov-report/map/api/services/index.html +0 -116
  187. package/coverage/lcov-report/map/api/services/index.js.html +0 -1093
  188. package/coverage/lcov-report/map/api/services/projects/index.html +0 -116
  189. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +0 -439
  190. package/coverage/lcov-report/map/api/services/styles/index.html +0 -116
  191. package/coverage/lcov-report/map/api/services/styles/styles.hooks.js.html +0 -211
  192. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +0 -466
  193. package/coverage/lcov-report/map/common/errors.js.html +0 -94
  194. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +0 -538
  195. package/coverage/lcov-report/map/common/grid.js.html +0 -1612
  196. package/coverage/lcov-report/map/common/index.html +0 -371
  197. package/coverage/lcov-report/map/common/index.js.html +0 -172
  198. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +0 -556
  199. package/coverage/lcov-report/map/common/moment-utils.js.html +0 -157
  200. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +0 -868
  201. package/coverage/lcov-report/map/common/opendap-utils.js.html +0 -823
  202. package/coverage/lcov-report/map/common/permissions.js.html +0 -130
  203. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +0 -418
  204. package/coverage/lcov-report/map/common/tms-utils.js.html +0 -271
  205. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +0 -364
  206. package/coverage/lcov-report/map/common/wcs-utils.js.html +0 -583
  207. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +0 -1033
  208. package/coverage/lcov-report/map/common/wfs-utils.js.html +0 -571
  209. package/coverage/lcov-report/map/common/wms-utils.js.html +0 -469
  210. package/coverage/lcov-report/map/common/wmts-utils.js.html +0 -544
  211. package/coverage/lcov-report/prettify.css +0 -1
  212. package/coverage/lcov-report/prettify.js +0 -2
  213. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  214. package/coverage/lcov-report/sorter.js +0 -196
  215. package/coverage/lcov.info +0 -11012
  216. package/coverage/map/api/hooks/hooks.catalog.js.html +0 -595
  217. package/coverage/map/api/hooks/hooks.features.js.html +0 -397
  218. package/coverage/map/api/hooks/hooks.query.js.html +0 -1309
  219. package/coverage/map/api/hooks/index.html +0 -161
  220. package/coverage/map/api/hooks/index.js.html +0 -94
  221. package/coverage/map/api/index.html +0 -131
  222. package/coverage/map/api/index.js.html +0 -139
  223. package/coverage/map/api/marshall.js.html +0 -178
  224. package/coverage/map/api/models/alerts.model.mongodb.js.html +0 -106
  225. package/coverage/map/api/models/catalog.model.mongodb.js.html +0 -202
  226. package/coverage/map/api/models/features.model.mongodb.js.html +0 -196
  227. package/coverage/map/api/models/index.html +0 -176
  228. package/coverage/map/api/models/projects.model.mongodb.js.html +0 -109
  229. package/coverage/map/api/models/styles.model.mongodb.js.html +0 -112
  230. package/coverage/map/api/services/alerts/alerts.hooks.js.html +0 -274
  231. package/coverage/map/api/services/alerts/alerts.service.js.html +0 -610
  232. package/coverage/map/api/services/alerts/index.html +0 -131
  233. package/coverage/map/api/services/catalog/catalog.hooks.js.html +0 -337
  234. package/coverage/map/api/services/catalog/index.html +0 -116
  235. package/coverage/map/api/services/daptiles/daptiles.service.js.html +0 -1510
  236. package/coverage/map/api/services/daptiles/index.html +0 -116
  237. package/coverage/map/api/services/features/features.hooks.js.html +0 -316
  238. package/coverage/map/api/services/features/features.service.js.html +0 -544
  239. package/coverage/map/api/services/features/index.html +0 -131
  240. package/coverage/map/api/services/index.html +0 -116
  241. package/coverage/map/api/services/index.js.html +0 -1093
  242. package/coverage/map/api/services/projects/index.html +0 -116
  243. package/coverage/map/api/services/projects/projects.hooks.js.html +0 -439
  244. package/coverage/map/api/services/styles/index.html +0 -116
  245. package/coverage/map/api/services/styles/styles.hooks.js.html +0 -211
  246. package/coverage/map/common/dynamic-grid-source.js.html +0 -466
  247. package/coverage/map/common/errors.js.html +0 -94
  248. package/coverage/map/common/geotiff-grid-source.js.html +0 -538
  249. package/coverage/map/common/grid.js.html +0 -1612
  250. package/coverage/map/common/index.html +0 -371
  251. package/coverage/map/common/index.js.html +0 -172
  252. package/coverage/map/common/meteo-model-grid-source.js.html +0 -556
  253. package/coverage/map/common/moment-utils.js.html +0 -157
  254. package/coverage/map/common/opendap-grid-source.js.html +0 -868
  255. package/coverage/map/common/opendap-utils.js.html +0 -823
  256. package/coverage/map/common/permissions.js.html +0 -130
  257. package/coverage/map/common/time-based-grid-source.js.html +0 -418
  258. package/coverage/map/common/tms-utils.js.html +0 -271
  259. package/coverage/map/common/wcs-grid-source.js.html +0 -364
  260. package/coverage/map/common/wcs-utils.js.html +0 -583
  261. package/coverage/map/common/weacast-grid-source.js.html +0 -1033
  262. package/coverage/map/common/wfs-utils.js.html +0 -571
  263. package/coverage/map/common/wms-utils.js.html +0 -469
  264. package/coverage/map/common/wmts-utils.js.html +0 -544
  265. package/coverage/prettify.css +0 -1
  266. package/coverage/prettify.js +0 -2
  267. package/coverage/sort-arrow-sprite.png +0 -0
  268. package/coverage/sorter.js +0 -196
  269. package/coverage/tmp/coverage-222524-1765963609350-0.json +0 -1
  270. package/coverage/tmp/coverage-222536-1765963609335-0.json +0 -1
  271. package/coverage/tmp/coverage-222547-1765963609324-0.json +0 -1
  272. package/coverage/tmp/coverage-222559-1765963609309-0.json +0 -1
  273. package/coverage/tmp/coverage-222566-1765963609278-0.json +0 -1
@@ -1,298 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for core/api/hooks/hooks.schemas.js</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../../prettify.css" />
9
- <link rel="stylesheet" href="../../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../../index.html">All files</a> / <a href="index.html">core/api/hooks</a> hooks.schemas.js</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">90.14% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>64/71</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">78.94% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>15/19</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>1/1</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">90.14% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>64/71</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
138
- <span class="cline-any cline-yes">1x</span>
139
- <span class="cline-any cline-yes">1x</span>
140
- <span class="cline-any cline-yes">1x</span>
141
- <span class="cline-any cline-yes">1x</span>
142
- <span class="cline-any cline-yes">1x</span>
143
- <span class="cline-any cline-yes">1x</span>
144
- <span class="cline-any cline-yes">1x</span>
145
- <span class="cline-any cline-yes">1x</span>
146
- <span class="cline-any cline-yes">1x</span>
147
- <span class="cline-any cline-yes">1x</span>
148
- <span class="cline-any cline-yes">1x</span>
149
- <span class="cline-any cline-yes">5x</span>
150
- <span class="cline-any cline-yes">5x</span>
151
- <span class="cline-any cline-yes">5x</span>
152
- <span class="cline-any cline-yes">5x</span>
153
- <span class="cline-any cline-yes">5x</span>
154
- <span class="cline-any cline-no">&nbsp;</span>
155
- <span class="cline-any cline-no">&nbsp;</span>
156
- <span class="cline-any cline-yes">5x</span>
157
- <span class="cline-any cline-yes">5x</span>
158
- <span class="cline-any cline-yes">5x</span>
159
- <span class="cline-any cline-yes">5x</span>
160
- <span class="cline-any cline-yes">5x</span>
161
- <span class="cline-any cline-yes">5x</span>
162
- <span class="cline-any cline-yes">5x</span>
163
- <span class="cline-any cline-yes">5x</span>
164
- <span class="cline-any cline-yes">5x</span>
165
- <span class="cline-any cline-yes">5x</span>
166
- <span class="cline-any cline-yes">6x</span>
167
- <span class="cline-any cline-yes">4x</span>
168
- <span class="cline-any cline-yes">4x</span>
169
- <span class="cline-any cline-yes">4x</span>
170
- <span class="cline-any cline-yes">9x</span>
171
- <span class="cline-any cline-yes">9x</span>
172
- <span class="cline-any cline-yes">9x</span>
173
- <span class="cline-any cline-yes">9x</span>
174
- <span class="cline-any cline-yes">9x</span>
175
- <span class="cline-any cline-yes">9x</span>
176
- <span class="cline-any cline-yes">9x</span>
177
- <span class="cline-any cline-yes">9x</span>
178
- <span class="cline-any cline-yes">9x</span>
179
- <span class="cline-any cline-yes">9x</span>
180
- <span class="cline-any cline-yes">9x</span>
181
- <span class="cline-any cline-yes">9x</span>
182
- <span class="cline-any cline-yes">4x</span>
183
- <span class="cline-any cline-yes">4x</span>
184
- <span class="cline-any cline-yes">4x</span>
185
- <span class="cline-any cline-yes">5x</span>
186
- <span class="cline-any cline-yes">5x</span>
187
- <span class="cline-any cline-yes">5x</span>
188
- <span class="cline-any cline-yes">5x</span>
189
- <span class="cline-any cline-yes">5x</span>
190
- <span class="cline-any cline-yes">5x</span>
191
- <span class="cline-any cline-yes">5x</span>
192
- <span class="cline-any cline-yes">5x</span>
193
- <span class="cline-any cline-yes">5x</span>
194
- <span class="cline-any cline-yes">5x</span>
195
- <span class="cline-any cline-yes">4x</span>
196
- <span class="cline-any cline-yes">4x</span>
197
- <span class="cline-any cline-yes">4x</span>
198
- <span class="cline-any cline-no">&nbsp;</span>
199
- <span class="cline-any cline-no">&nbsp;</span>
200
- <span class="cline-any cline-no">&nbsp;</span>
201
- <span class="cline-any cline-no">&nbsp;</span>
202
- <span class="cline-any cline-no">&nbsp;</span>
203
- <span class="cline-any cline-yes">4x</span>
204
- <span class="cline-any cline-yes">5x</span>
205
- <span class="cline-any cline-yes">5x</span>
206
- <span class="cline-any cline-yes">5x</span>
207
- <span class="cline-any cline-yes">5x</span>
208
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import _ from 'lodash'
209
- import makeDebug from 'debug'
210
- import errors from '@feathersjs/errors'
211
- import commonHooks from 'feathers-hooks-common'
212
- import { schema as makeSchema } from '@feathersjs/schema'
213
- import { Schema } from '../../common/schema.js'
214
- &nbsp;
215
- const { BadRequest } = errors
216
- const { getItems, replaceItems } = commonHooks
217
- const debug = makeDebug('kdk:core:schemas:hooks')
218
- &nbsp;
219
- export function validateData (schema) {
220
- // Create Feathers wrapper with our AJV instance
221
- schema = makeSchema(schema, Schema.ajv)
222
- &nbsp;
223
- return async (hook) =&gt; {
224
- if (hook.type !== 'before') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
225
- <span class="cstat-no" title="statement not covered" > throw new Error('The \'validateData\' hook should only be used as a \'before\' hook.')</span>
226
- <span class="cstat-no" title="statement not covered" > }</span>
227
- &nbsp;
228
- let items = getItems(hook)
229
- const isArray = Array.isArray(items)
230
- items = (isArray ? items : [items])
231
- // Perform validation
232
- items = await Promise.allSettled(items.map((item) =&gt; schema.validate(item)))
233
- // Keep track of validation errors, even if invalid data will be filtered this ensure
234
- // original data with validation error will be "tagged"
235
- &nbsp;
236
- items.forEach((item, index) =&gt; {
237
- if (item.status === 'rejected') {
238
- item.validationError = {
239
- message: item.reason.message,
240
- data: item.reason.data.map(error =&gt; {
241
- // retrieve the data corresponding to the item
242
- const data = isArray <span class="branch-0 cbranch-no" title="branch not covered" >? hook.data[index] </span>: hook.data
243
- // compute the property path
244
- let propertyPath = error.instancePath
245
- if (_.startsWith(propertyPath, '/')) propertyPath = propertyPath.substring(1)
246
- propertyPath = propertyPath.replace('/', '.')
247
- // return the error
248
- return {
249
- message: error.message,
250
- propertyPath: error.instancePath,
251
- propertyValue: _.get(data, propertyPath)
252
- }
253
- })
254
- }
255
- }
256
- })
257
- // Filter errors/valid data
258
- const errors = items.filter(item =&gt; item.validationError).map(item =&gt; item.validationError)
259
- items = items.filter(item =&gt; !item.validationError).map(item =&gt; item.value)
260
- debug(`Validation performed: found ${items.length} valid item(s), found ${errors.length} invalid item(s)`)
261
- &nbsp;
262
- // Raise if no valid data is found
263
- const hasValidData = (items.length &gt; 0)
264
- const hasError = (errors.length &gt; 0)
265
- if (hasError) {
266
- const firstError = errors[0]
267
- // Single item case =&gt; raise the error
268
- if (!isArray) throw new BadRequest(firstError.message, firstError.data)
269
- <span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > // Multiple items case =&gt; raise if no valid data found</span></span>
270
- <span class="cstat-no" title="statement not covered" > else if (!hasValidData) {</span>
271
- <span class="cstat-no" title="statement not covered" > // Keep track of all errors</span>
272
- <span class="cstat-no" title="statement not covered" > throw new BadRequest(firstError.message, errors)</span>
273
- <span class="cstat-no" title="statement not covered" > }</span>
274
- }
275
- replaceItems(hook, isArray ? items <span class="branch-0 cbranch-no" title="branch not covered" >: items[0])</span>
276
- return hook
277
- }
278
- }
279
- &nbsp;</pre></td></tr></table></pre>
280
-
281
- <div class='push'></div><!-- for sticky footer -->
282
- </div><!-- /wrapper -->
283
- <div class='footer quiet pad2 space-top1 center small'>
284
- Code coverage generated by
285
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
286
- at 2025-12-17T09:26:49.744Z
287
- </div>
288
- <script src="../../../prettify.js"></script>
289
- <script>
290
- window.onload = function () {
291
- prettyPrint();
292
- };
293
- </script>
294
- <script src="../../../sorter.js"></script>
295
- <script src="../../../block-navigation.js"></script>
296
- </body>
297
- </html>
298
-
@@ -1,319 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for core/api/hooks/hooks.service.js</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../../prettify.css" />
9
- <link rel="stylesheet" href="../../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../../index.html">All files</a> / <a href="index.html">core/api/hooks</a> hooks.service.js</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">67.94% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>53/78</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">56.25% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>9/16</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">66.66% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>2/3</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">67.94% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>53/78</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line medium'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
145
- <span class="cline-any cline-yes">1x</span>
146
- <span class="cline-any cline-yes">1x</span>
147
- <span class="cline-any cline-yes">1x</span>
148
- <span class="cline-any cline-yes">1x</span>
149
- <span class="cline-any cline-yes">1x</span>
150
- <span class="cline-any cline-yes">1x</span>
151
- <span class="cline-any cline-yes">1x</span>
152
- <span class="cline-any cline-no">&nbsp;</span>
153
- <span class="cline-any cline-no">&nbsp;</span>
154
- <span class="cline-any cline-no">&nbsp;</span>
155
- <span class="cline-any cline-yes">1x</span>
156
- <span class="cline-any cline-yes">1x</span>
157
- <span class="cline-any cline-yes">1x</span>
158
- <span class="cline-any cline-yes">1x</span>
159
- <span class="cline-any cline-yes">1x</span>
160
- <span class="cline-any cline-yes">3x</span>
161
- <span class="cline-any cline-no">&nbsp;</span>
162
- <span class="cline-any cline-no">&nbsp;</span>
163
- <span class="cline-any cline-yes">3x</span>
164
- <span class="cline-any cline-yes">3x</span>
165
- <span class="cline-any cline-yes">3x</span>
166
- <span class="cline-any cline-yes">3x</span>
167
- <span class="cline-any cline-no">&nbsp;</span>
168
- <span class="cline-any cline-no">&nbsp;</span>
169
- <span class="cline-any cline-yes">3x</span>
170
- <span class="cline-any cline-no">&nbsp;</span>
171
- <span class="cline-any cline-no">&nbsp;</span>
172
- <span class="cline-any cline-yes">3x</span>
173
- <span class="cline-any cline-yes">3x</span>
174
- <span class="cline-any cline-yes">3x</span>
175
- <span class="cline-any cline-yes">3x</span>
176
- <span class="cline-any cline-yes">1x</span>
177
- <span class="cline-any cline-yes">1x</span>
178
- <span class="cline-any cline-yes">3x</span>
179
- <span class="cline-any cline-yes">2x</span>
180
- <span class="cline-any cline-yes">3x</span>
181
- <span class="cline-any cline-yes">1x</span>
182
- <span class="cline-any cline-yes">1x</span>
183
- <span class="cline-any cline-yes">1x</span>
184
- <span class="cline-any cline-yes">1x</span>
185
- <span class="cline-any cline-yes">3x</span>
186
- <span class="cline-any cline-no">&nbsp;</span>
187
- <span class="cline-any cline-no">&nbsp;</span>
188
- <span class="cline-any cline-yes">3x</span>
189
- <span class="cline-any cline-yes">3x</span>
190
- <span class="cline-any cline-yes">3x</span>
191
- <span class="cline-any cline-yes">3x</span>
192
- <span class="cline-any cline-yes">3x</span>
193
- <span class="cline-any cline-yes">3x</span>
194
- <span class="cline-any cline-yes">3x</span>
195
- <span class="cline-any cline-yes">3x</span>
196
- <span class="cline-any cline-yes">3x</span>
197
- <span class="cline-any cline-no">&nbsp;</span>
198
- <span class="cline-any cline-no">&nbsp;</span>
199
- <span class="cline-any cline-no">&nbsp;</span>
200
- <span class="cline-any cline-no">&nbsp;</span>
201
- <span class="cline-any cline-no">&nbsp;</span>
202
- <span class="cline-any cline-no">&nbsp;</span>
203
- <span class="cline-any cline-no">&nbsp;</span>
204
- <span class="cline-any cline-no">&nbsp;</span>
205
- <span class="cline-any cline-no">&nbsp;</span>
206
- <span class="cline-any cline-no">&nbsp;</span>
207
- <span class="cline-any cline-no">&nbsp;</span>
208
- <span class="cline-any cline-no">&nbsp;</span>
209
- <span class="cline-any cline-no">&nbsp;</span>
210
- <span class="cline-any cline-no">&nbsp;</span>
211
- <span class="cline-any cline-yes">3x</span>
212
- <span class="cline-any cline-yes">3x</span>
213
- <span class="cline-any cline-yes">3x</span>
214
- <span class="cline-any cline-yes">3x</span>
215
- <span class="cline-any cline-yes">3x</span>
216
- <span class="cline-any cline-yes">1x</span>
217
- <span class="cline-any cline-yes">1x</span>
218
- <span class="cline-any cline-yes">3x</span>
219
- <span class="cline-any cline-yes">2x</span>
220
- <span class="cline-any cline-yes">3x</span>
221
- <span class="cline-any cline-yes">1x</span>
222
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import errors from '@feathersjs/errors'
223
- import { RateLimiter } from 'limiter'
224
- import makeDebug from 'debug'
225
- &nbsp;
226
- const { TooManyRequests, Forbidden } = errors
227
- const debug = makeDebug('kdk:core:service:hooks')
228
- &nbsp;
229
- export <span class="fstat-no" title="function not covered" >function skipEvents (hook) {</span>
230
- <span class="cstat-no" title="statement not covered" > hook.event = null</span>
231
- <span class="cstat-no" title="statement not covered" > return hook</span>
232
- <span class="cstat-no" title="statement not covered" >}</span>
233
- &nbsp;
234
- export function rateLimit (options) {
235
- const limiter = new RateLimiter(options.tokensPerInterval, options.interval)
236
- &nbsp;
237
- return function (hook) {
238
- if (hook.type !== 'before') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
239
- <span class="cstat-no" title="statement not covered" > throw new Error('The \'rateLimit\' hook should only be used as a \'before\' hook.')</span>
240
- <span class="cstat-no" title="statement not covered" > }</span>
241
- const operation = hook.method
242
- const service = hook.service.name
243
- let rateLimit = true
244
- if (options.operation <span class="branch-0 cbranch-no" title="branch not covered" >&amp;&amp; (options.operation !== operation))</span> <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
245
- <span class="cstat-no" title="statement not covered" > rateLimit = false</span>
246
- <span class="cstat-no" title="statement not covered" > }</span>
247
- if (options.service &amp;&amp; (options.service !== service)) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
248
- <span class="cstat-no" title="statement not covered" > rateLimit = false</span>
249
- <span class="cstat-no" title="statement not covered" > }</span>
250
- &nbsp;
251
- if (rateLimit) {
252
- debug(limiter.getTokensRemaining() + ' remaining token for rateLimit hook on service ' + service)
253
- if (!limiter.tryRemoveTokens(1)) { // if exceeded
254
- throw new TooManyRequests('Too many requests in a given amount of time (rate limiting) on service ' + service, { translation: { key: 'RATE_LIMITING' } })
255
- }
256
- }
257
- return hook
258
- }
259
- }
260
- &nbsp;
261
- export function countLimit (options) {
262
- return async function (hook) {
263
- if (hook.type !== 'before') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
264
- <span class="cstat-no" title="statement not covered" > throw new Error('The \'countLimit\' hook should only be used as a \'before\' hook.')</span>
265
- <span class="cstat-no" title="statement not covered" > }</span>
266
- const app = hook.app
267
- const customMax = (typeof options.max === 'function')
268
- const max = (customMax <span class="branch-0 cbranch-no" title="branch not covered" >? await options.max(hook) :</span> options.max)
269
- // -1 means no limit
270
- if (max &gt;= 0) {
271
- let count = options.max
272
- // Either we build a count request using a service or the caller has its own count routine
273
- const customCount = (typeof options.count === 'function')
274
- if (!customCount) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
275
- <span class="cstat-no" title="statement not covered" > let service</span>
276
- <span class="cstat-no" title="statement not covered" > if (typeof options.service === 'function') {</span>
277
- <span class="cstat-no" title="statement not covered" > service = await options.service(hook)</span>
278
- <span class="cstat-no" title="statement not covered" > } else {</span>
279
- <span class="cstat-no" title="statement not covered" > service = app.getService(options.service, hook.service.context)</span>
280
- <span class="cstat-no" title="statement not covered" > }</span>
281
- <span class="cstat-no" title="statement not covered" > // Indicate we'd only like to count</span>
282
- <span class="cstat-no" title="statement not covered" > const query = { $limit: 0 }</span>
283
- <span class="cstat-no" title="statement not covered" > if (typeof options.query === 'function') {</span>
284
- <span class="cstat-no" title="statement not covered" > Object.assign(query, options.query(hook))</span>
285
- <span class="cstat-no" title="statement not covered" > } else {</span>
286
- <span class="cstat-no" title="statement not covered" > Object.assign(query, options.query)</span>
287
- <span class="cstat-no" title="statement not covered" > }</span>
288
- <span class="cstat-no" title="statement not covered" > count = service.find({ query }).total</span>
289
- } else {
290
- count = await options.count(hook)
291
- }
292
- &nbsp;
293
- if (count &gt; max) {
294
- throw new Forbidden('Resource quota exceeded (count limiting) on service ' + options.service, { translation: { key: 'COUNT_LIMITING' } })
295
- }
296
- }
297
- return hook
298
- }
299
- }
300
- &nbsp;</pre></td></tr></table></pre>
301
-
302
- <div class='push'></div><!-- for sticky footer -->
303
- </div><!-- /wrapper -->
304
- <div class='footer quiet pad2 space-top1 center small'>
305
- Code coverage generated by
306
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
307
- at 2025-12-17T09:26:49.744Z
308
- </div>
309
- <script src="../../../prettify.js"></script>
310
- <script>
311
- window.onload = function () {
312
- prettyPrint();
313
- };
314
- </script>
315
- <script src="../../../sorter.js"></script>
316
- <script src="../../../block-navigation.js"></script>
317
- </body>
318
- </html>
319
-