@spinajs/log 2.0.480 → 2.0.482

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 (304) hide show
  1. package/README.md +744 -0
  2. package/lib/cjs/archive/LogArchiveService.d.ts +75 -0
  3. package/lib/cjs/archive/LogArchiveService.d.ts.map +1 -0
  4. package/lib/cjs/archive/LogArchiveService.js +189 -0
  5. package/lib/cjs/archive/LogArchiveService.js.map +1 -0
  6. package/lib/cjs/archive/archive-strategy.d.ts +32 -0
  7. package/lib/cjs/archive/archive-strategy.d.ts.map +1 -0
  8. package/lib/cjs/archive/archive-strategy.js +43 -0
  9. package/lib/cjs/archive/archive-strategy.js.map +1 -0
  10. package/lib/cjs/archive/context.d.ts +50 -0
  11. package/lib/cjs/archive/context.d.ts.map +1 -0
  12. package/lib/cjs/archive/context.js +3 -0
  13. package/lib/cjs/archive/context.js.map +1 -0
  14. package/lib/cjs/archive/index.d.ts +10 -0
  15. package/lib/cjs/archive/index.d.ts.map +1 -0
  16. package/lib/cjs/archive/index.js +26 -0
  17. package/lib/cjs/archive/index.js.map +1 -0
  18. package/lib/cjs/archive/retention-strategy.d.ts +26 -0
  19. package/lib/cjs/archive/retention-strategy.d.ts.map +1 -0
  20. package/lib/cjs/archive/retention-strategy.js +42 -0
  21. package/lib/cjs/archive/retention-strategy.js.map +1 -0
  22. package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.d.ts +10 -0
  23. package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.d.ts.map +1 -0
  24. package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.js +46 -0
  25. package/lib/cjs/archive/strategies/AgeLogRetentionStrategy.js.map +1 -0
  26. package/lib/cjs/archive/strategies/CountLogRetentionStrategy.d.ts +10 -0
  27. package/lib/cjs/archive/strategies/CountLogRetentionStrategy.d.ts.map +1 -0
  28. package/lib/cjs/archive/strategies/CountLogRetentionStrategy.js +42 -0
  29. package/lib/cjs/archive/strategies/CountLogRetentionStrategy.js.map +1 -0
  30. package/lib/cjs/archive/strategies/CronLogArchiveStrategy.d.ts +15 -0
  31. package/lib/cjs/archive/strategies/CronLogArchiveStrategy.d.ts.map +1 -0
  32. package/lib/cjs/archive/strategies/CronLogArchiveStrategy.js +52 -0
  33. package/lib/cjs/archive/strategies/CronLogArchiveStrategy.js.map +1 -0
  34. package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.d.ts +18 -0
  35. package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.d.ts.map +1 -0
  36. package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.js +63 -0
  37. package/lib/cjs/archive/strategies/SizeLogArchiveStrategy.js.map +1 -0
  38. package/lib/cjs/archive/strategies/util.d.ts +28 -0
  39. package/lib/cjs/archive/strategies/util.d.ts.map +1 -0
  40. package/lib/cjs/archive/strategies/util.js +59 -0
  41. package/lib/cjs/archive/strategies/util.js.map +1 -0
  42. package/lib/cjs/bootstrap.d.ts.map +1 -1
  43. package/lib/cjs/bootstrap.js +24 -1
  44. package/lib/cjs/bootstrap.js.map +1 -1
  45. package/lib/cjs/callsite.d.ts +26 -0
  46. package/lib/cjs/callsite.d.ts.map +1 -0
  47. package/lib/cjs/callsite.js +60 -0
  48. package/lib/cjs/callsite.js.map +1 -0
  49. package/lib/cjs/config/log.d.ts +96 -0
  50. package/lib/cjs/config/log.d.ts.map +1 -0
  51. package/lib/cjs/config/log.js +75 -0
  52. package/lib/cjs/config/log.js.map +1 -0
  53. package/lib/cjs/context.browser.d.ts +46 -0
  54. package/lib/cjs/context.browser.d.ts.map +1 -0
  55. package/lib/cjs/context.browser.js +85 -0
  56. package/lib/cjs/context.browser.js.map +1 -0
  57. package/lib/cjs/context.d.ts +61 -0
  58. package/lib/cjs/context.d.ts.map +1 -0
  59. package/lib/cjs/context.js +92 -0
  60. package/lib/cjs/context.js.map +1 -0
  61. package/lib/cjs/filters/LevelFilter.d.ts +24 -0
  62. package/lib/cjs/filters/LevelFilter.d.ts.map +1 -0
  63. package/lib/cjs/filters/LevelFilter.js +39 -0
  64. package/lib/cjs/filters/LevelFilter.js.map +1 -0
  65. package/lib/cjs/filters/MatchFilter.d.ts +30 -0
  66. package/lib/cjs/filters/MatchFilter.d.ts.map +1 -0
  67. package/lib/cjs/filters/MatchFilter.js +65 -0
  68. package/lib/cjs/filters/MatchFilter.js.map +1 -0
  69. package/lib/cjs/filters/RateLimitFilter.d.ts +37 -0
  70. package/lib/cjs/filters/RateLimitFilter.d.ts.map +1 -0
  71. package/lib/cjs/filters/RateLimitFilter.js +70 -0
  72. package/lib/cjs/filters/RateLimitFilter.js.map +1 -0
  73. package/lib/cjs/filters/index.d.ts +4 -0
  74. package/lib/cjs/filters/index.d.ts.map +1 -0
  75. package/lib/cjs/filters/index.js +20 -0
  76. package/lib/cjs/filters/index.js.map +1 -0
  77. package/lib/cjs/index.browser.d.ts +14 -0
  78. package/lib/cjs/index.browser.d.ts.map +1 -0
  79. package/lib/cjs/index.browser.js +46 -0
  80. package/lib/cjs/index.browser.js.map +1 -0
  81. package/lib/cjs/index.d.ts +8 -0
  82. package/lib/cjs/index.d.ts.map +1 -1
  83. package/lib/cjs/index.js +8 -0
  84. package/lib/cjs/index.js.map +1 -1
  85. package/lib/cjs/log.d.ts +60 -1
  86. package/lib/cjs/log.d.ts.map +1 -1
  87. package/lib/cjs/log.js +294 -32
  88. package/lib/cjs/log.js.map +1 -1
  89. package/lib/cjs/perf/LogMetricSink.d.ts +28 -0
  90. package/lib/cjs/perf/LogMetricSink.d.ts.map +1 -0
  91. package/lib/cjs/perf/LogMetricSink.js +120 -0
  92. package/lib/cjs/perf/LogMetricSink.js.map +1 -0
  93. package/lib/cjs/perf/measure.d.ts +9 -0
  94. package/lib/cjs/perf/measure.d.ts.map +1 -0
  95. package/lib/cjs/perf/measure.js +21 -0
  96. package/lib/cjs/perf/measure.js.map +1 -0
  97. package/lib/cjs/perf.d.ts +9 -0
  98. package/lib/cjs/perf.d.ts.map +1 -0
  99. package/lib/cjs/perf.js +18 -0
  100. package/lib/cjs/perf.js.map +1 -0
  101. package/lib/cjs/schemas/log.configuration.d.ts +151 -18
  102. package/lib/cjs/schemas/log.configuration.d.ts.map +1 -1
  103. package/lib/cjs/schemas/log.configuration.js +154 -21
  104. package/lib/cjs/schemas/log.configuration.js.map +1 -1
  105. package/lib/cjs/targets/BrowserConsoleTarget.d.ts +48 -0
  106. package/lib/cjs/targets/BrowserConsoleTarget.d.ts.map +1 -0
  107. package/lib/cjs/targets/BrowserConsoleTarget.js +48 -0
  108. package/lib/cjs/targets/BrowserConsoleTarget.js.map +1 -0
  109. package/lib/cjs/targets/ColoredConsoleTarget.d.ts.map +1 -1
  110. package/lib/cjs/targets/ColoredConsoleTarget.js +21 -12
  111. package/lib/cjs/targets/ColoredConsoleTarget.js.map +1 -1
  112. package/lib/cjs/targets/FileTarget.d.ts +96 -20
  113. package/lib/cjs/targets/FileTarget.d.ts.map +1 -1
  114. package/lib/cjs/targets/FileTarget.js +188 -225
  115. package/lib/cjs/targets/FileTarget.js.map +1 -1
  116. package/lib/cjs/targets/JsonFileTarget.d.ts +19 -0
  117. package/lib/cjs/targets/JsonFileTarget.d.ts.map +1 -0
  118. package/lib/cjs/targets/JsonFileTarget.js +44 -0
  119. package/lib/cjs/targets/JsonFileTarget.js.map +1 -0
  120. package/lib/cjs/targets/JsonTarget.d.ts +27 -0
  121. package/lib/cjs/targets/JsonTarget.d.ts.map +1 -0
  122. package/lib/cjs/targets/JsonTarget.js +46 -0
  123. package/lib/cjs/targets/JsonTarget.js.map +1 -0
  124. package/lib/cjs/targets/MemoryTarget.d.ts +33 -0
  125. package/lib/cjs/targets/MemoryTarget.d.ts.map +1 -0
  126. package/lib/cjs/targets/MemoryTarget.js +63 -0
  127. package/lib/cjs/targets/MemoryTarget.js.map +1 -0
  128. package/lib/cjs/targets/index.d.ts +7 -0
  129. package/lib/cjs/targets/index.d.ts.map +1 -1
  130. package/lib/cjs/targets/index.js +7 -0
  131. package/lib/cjs/targets/index.js.map +1 -1
  132. package/lib/cjs/targets/wrappers/AutoFlushTarget.d.ts +37 -0
  133. package/lib/cjs/targets/wrappers/AutoFlushTarget.d.ts.map +1 -0
  134. package/lib/cjs/targets/wrappers/AutoFlushTarget.js +48 -0
  135. package/lib/cjs/targets/wrappers/AutoFlushTarget.js.map +1 -0
  136. package/lib/cjs/targets/wrappers/FallbackGroupTarget.d.ts +45 -0
  137. package/lib/cjs/targets/wrappers/FallbackGroupTarget.d.ts.map +1 -0
  138. package/lib/cjs/targets/wrappers/FallbackGroupTarget.js +94 -0
  139. package/lib/cjs/targets/wrappers/FallbackGroupTarget.js.map +1 -0
  140. package/lib/cjs/targets/wrappers/RetryingTarget.d.ts +44 -0
  141. package/lib/cjs/targets/wrappers/RetryingTarget.d.ts.map +1 -0
  142. package/lib/cjs/targets/wrappers/RetryingTarget.js +61 -0
  143. package/lib/cjs/targets/wrappers/RetryingTarget.js.map +1 -0
  144. package/lib/cjs/targets/wrappers/SplitGroupTarget.d.ts +30 -0
  145. package/lib/cjs/targets/wrappers/SplitGroupTarget.d.ts.map +1 -0
  146. package/lib/cjs/targets/wrappers/SplitGroupTarget.js +52 -0
  147. package/lib/cjs/targets/wrappers/SplitGroupTarget.js.map +1 -0
  148. package/lib/cjs/traceparent.d.ts +63 -0
  149. package/lib/cjs/traceparent.d.ts.map +1 -0
  150. package/lib/cjs/traceparent.js +107 -0
  151. package/lib/cjs/traceparent.js.map +1 -0
  152. package/lib/mjs/archive/LogArchiveService.d.ts +75 -0
  153. package/lib/mjs/archive/LogArchiveService.d.ts.map +1 -0
  154. package/lib/mjs/archive/LogArchiveService.js +186 -0
  155. package/lib/mjs/archive/LogArchiveService.js.map +1 -0
  156. package/lib/mjs/archive/archive-strategy.d.ts +32 -0
  157. package/lib/mjs/archive/archive-strategy.d.ts.map +1 -0
  158. package/lib/mjs/archive/archive-strategy.js +39 -0
  159. package/lib/mjs/archive/archive-strategy.js.map +1 -0
  160. package/lib/mjs/archive/context.d.ts +50 -0
  161. package/lib/mjs/archive/context.d.ts.map +1 -0
  162. package/lib/mjs/archive/context.js +2 -0
  163. package/lib/mjs/archive/context.js.map +1 -0
  164. package/lib/mjs/archive/index.d.ts +10 -0
  165. package/lib/mjs/archive/index.d.ts.map +1 -0
  166. package/lib/mjs/archive/index.js +10 -0
  167. package/lib/mjs/archive/index.js.map +1 -0
  168. package/lib/mjs/archive/retention-strategy.d.ts +26 -0
  169. package/lib/mjs/archive/retention-strategy.d.ts.map +1 -0
  170. package/lib/mjs/archive/retention-strategy.js +38 -0
  171. package/lib/mjs/archive/retention-strategy.js.map +1 -0
  172. package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.d.ts +10 -0
  173. package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.d.ts.map +1 -0
  174. package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.js +43 -0
  175. package/lib/mjs/archive/strategies/AgeLogRetentionStrategy.js.map +1 -0
  176. package/lib/mjs/archive/strategies/CountLogRetentionStrategy.d.ts +10 -0
  177. package/lib/mjs/archive/strategies/CountLogRetentionStrategy.d.ts.map +1 -0
  178. package/lib/mjs/archive/strategies/CountLogRetentionStrategy.js +39 -0
  179. package/lib/mjs/archive/strategies/CountLogRetentionStrategy.js.map +1 -0
  180. package/lib/mjs/archive/strategies/CronLogArchiveStrategy.d.ts +15 -0
  181. package/lib/mjs/archive/strategies/CronLogArchiveStrategy.d.ts.map +1 -0
  182. package/lib/mjs/archive/strategies/CronLogArchiveStrategy.js +49 -0
  183. package/lib/mjs/archive/strategies/CronLogArchiveStrategy.js.map +1 -0
  184. package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.d.ts +18 -0
  185. package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.d.ts.map +1 -0
  186. package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.js +60 -0
  187. package/lib/mjs/archive/strategies/SizeLogArchiveStrategy.js.map +1 -0
  188. package/lib/mjs/archive/strategies/util.d.ts +28 -0
  189. package/lib/mjs/archive/strategies/util.d.ts.map +1 -0
  190. package/lib/mjs/archive/strategies/util.js +54 -0
  191. package/lib/mjs/archive/strategies/util.js.map +1 -0
  192. package/lib/mjs/bootstrap.d.ts.map +1 -1
  193. package/lib/mjs/bootstrap.js +25 -2
  194. package/lib/mjs/bootstrap.js.map +1 -1
  195. package/lib/mjs/callsite.d.ts +26 -0
  196. package/lib/mjs/callsite.d.ts.map +1 -0
  197. package/lib/mjs/callsite.js +57 -0
  198. package/lib/mjs/callsite.js.map +1 -0
  199. package/lib/mjs/config/log.d.ts +96 -0
  200. package/lib/mjs/config/log.d.ts.map +1 -0
  201. package/lib/mjs/config/log.js +72 -0
  202. package/lib/mjs/config/log.js.map +1 -0
  203. package/lib/mjs/context.browser.d.ts +46 -0
  204. package/lib/mjs/context.browser.d.ts.map +1 -0
  205. package/lib/mjs/context.browser.js +81 -0
  206. package/lib/mjs/context.browser.js.map +1 -0
  207. package/lib/mjs/context.d.ts +61 -0
  208. package/lib/mjs/context.d.ts.map +1 -0
  209. package/lib/mjs/context.js +88 -0
  210. package/lib/mjs/context.js.map +1 -0
  211. package/lib/mjs/filters/LevelFilter.d.ts +24 -0
  212. package/lib/mjs/filters/LevelFilter.d.ts.map +1 -0
  213. package/lib/mjs/filters/LevelFilter.js +36 -0
  214. package/lib/mjs/filters/LevelFilter.js.map +1 -0
  215. package/lib/mjs/filters/MatchFilter.d.ts +30 -0
  216. package/lib/mjs/filters/MatchFilter.d.ts.map +1 -0
  217. package/lib/mjs/filters/MatchFilter.js +62 -0
  218. package/lib/mjs/filters/MatchFilter.js.map +1 -0
  219. package/lib/mjs/filters/RateLimitFilter.d.ts +37 -0
  220. package/lib/mjs/filters/RateLimitFilter.d.ts.map +1 -0
  221. package/lib/mjs/filters/RateLimitFilter.js +67 -0
  222. package/lib/mjs/filters/RateLimitFilter.js.map +1 -0
  223. package/lib/mjs/filters/index.d.ts +4 -0
  224. package/lib/mjs/filters/index.d.ts.map +1 -0
  225. package/lib/mjs/filters/index.js +4 -0
  226. package/lib/mjs/filters/index.js.map +1 -0
  227. package/lib/mjs/index.browser.d.ts +14 -0
  228. package/lib/mjs/index.browser.d.ts.map +1 -0
  229. package/lib/mjs/index.browser.js +30 -0
  230. package/lib/mjs/index.browser.js.map +1 -0
  231. package/lib/mjs/index.d.ts +8 -0
  232. package/lib/mjs/index.d.ts.map +1 -1
  233. package/lib/mjs/index.js +8 -0
  234. package/lib/mjs/index.js.map +1 -1
  235. package/lib/mjs/log.d.ts +60 -1
  236. package/lib/mjs/log.d.ts.map +1 -1
  237. package/lib/mjs/log.js +295 -33
  238. package/lib/mjs/log.js.map +1 -1
  239. package/lib/mjs/perf/LogMetricSink.d.ts +28 -0
  240. package/lib/mjs/perf/LogMetricSink.d.ts.map +1 -0
  241. package/lib/mjs/perf/LogMetricSink.js +117 -0
  242. package/lib/mjs/perf/LogMetricSink.js.map +1 -0
  243. package/lib/mjs/perf/measure.d.ts +9 -0
  244. package/lib/mjs/perf/measure.d.ts.map +1 -0
  245. package/lib/mjs/perf/measure.js +18 -0
  246. package/lib/mjs/perf/measure.js.map +1 -0
  247. package/lib/mjs/perf.d.ts +9 -0
  248. package/lib/mjs/perf.d.ts.map +1 -0
  249. package/lib/mjs/perf.js +15 -0
  250. package/lib/mjs/perf.js.map +1 -0
  251. package/lib/mjs/schemas/log.configuration.d.ts +151 -18
  252. package/lib/mjs/schemas/log.configuration.d.ts.map +1 -1
  253. package/lib/mjs/schemas/log.configuration.js +154 -21
  254. package/lib/mjs/schemas/log.configuration.js.map +1 -1
  255. package/lib/mjs/targets/BrowserConsoleTarget.d.ts +48 -0
  256. package/lib/mjs/targets/BrowserConsoleTarget.d.ts.map +1 -0
  257. package/lib/mjs/targets/BrowserConsoleTarget.js +45 -0
  258. package/lib/mjs/targets/BrowserConsoleTarget.js.map +1 -0
  259. package/lib/mjs/targets/ColoredConsoleTarget.d.ts.map +1 -1
  260. package/lib/mjs/targets/ColoredConsoleTarget.js +21 -9
  261. package/lib/mjs/targets/ColoredConsoleTarget.js.map +1 -1
  262. package/lib/mjs/targets/FileTarget.d.ts +96 -20
  263. package/lib/mjs/targets/FileTarget.d.ts.map +1 -1
  264. package/lib/mjs/targets/FileTarget.js +191 -192
  265. package/lib/mjs/targets/FileTarget.js.map +1 -1
  266. package/lib/mjs/targets/JsonFileTarget.d.ts +19 -0
  267. package/lib/mjs/targets/JsonFileTarget.d.ts.map +1 -0
  268. package/lib/mjs/targets/JsonFileTarget.js +41 -0
  269. package/lib/mjs/targets/JsonFileTarget.js.map +1 -0
  270. package/lib/mjs/targets/JsonTarget.d.ts +27 -0
  271. package/lib/mjs/targets/JsonTarget.d.ts.map +1 -0
  272. package/lib/mjs/targets/JsonTarget.js +43 -0
  273. package/lib/mjs/targets/JsonTarget.js.map +1 -0
  274. package/lib/mjs/targets/MemoryTarget.d.ts +33 -0
  275. package/lib/mjs/targets/MemoryTarget.d.ts.map +1 -0
  276. package/lib/mjs/targets/MemoryTarget.js +60 -0
  277. package/lib/mjs/targets/MemoryTarget.js.map +1 -0
  278. package/lib/mjs/targets/index.d.ts +7 -0
  279. package/lib/mjs/targets/index.d.ts.map +1 -1
  280. package/lib/mjs/targets/index.js +7 -0
  281. package/lib/mjs/targets/index.js.map +1 -1
  282. package/lib/mjs/targets/wrappers/AutoFlushTarget.d.ts +37 -0
  283. package/lib/mjs/targets/wrappers/AutoFlushTarget.d.ts.map +1 -0
  284. package/lib/mjs/targets/wrappers/AutoFlushTarget.js +45 -0
  285. package/lib/mjs/targets/wrappers/AutoFlushTarget.js.map +1 -0
  286. package/lib/mjs/targets/wrappers/FallbackGroupTarget.d.ts +45 -0
  287. package/lib/mjs/targets/wrappers/FallbackGroupTarget.d.ts.map +1 -0
  288. package/lib/mjs/targets/wrappers/FallbackGroupTarget.js +91 -0
  289. package/lib/mjs/targets/wrappers/FallbackGroupTarget.js.map +1 -0
  290. package/lib/mjs/targets/wrappers/RetryingTarget.d.ts +44 -0
  291. package/lib/mjs/targets/wrappers/RetryingTarget.d.ts.map +1 -0
  292. package/lib/mjs/targets/wrappers/RetryingTarget.js +58 -0
  293. package/lib/mjs/targets/wrappers/RetryingTarget.js.map +1 -0
  294. package/lib/mjs/targets/wrappers/SplitGroupTarget.d.ts +30 -0
  295. package/lib/mjs/targets/wrappers/SplitGroupTarget.d.ts.map +1 -0
  296. package/lib/mjs/targets/wrappers/SplitGroupTarget.js +49 -0
  297. package/lib/mjs/targets/wrappers/SplitGroupTarget.js.map +1 -0
  298. package/lib/mjs/traceparent.d.ts +63 -0
  299. package/lib/mjs/traceparent.d.ts.map +1 -0
  300. package/lib/mjs/traceparent.js +100 -0
  301. package/lib/mjs/traceparent.js.map +1 -0
  302. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  303. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  304. package/package.json +25 -15
package/lib/mjs/log.js CHANGED
@@ -12,22 +12,49 @@ var __metadata = (this && this.__metadata) || function (k, v) {
12
12
  /* eslint-disable @typescript-eslint/no-unsafe-argument */
13
13
  import { Configuration } from "@spinajs/configuration";
14
14
  import { DI, NewInstance } from "@spinajs/di";
15
- import { LogLevel, StrToLogLevel, createLogMessageObject, Log } from "@spinajs/log-common";
15
+ import { LogLevel, StrToLogLevel, createLogMessageObject, Log, readPersistedLevel } from "@spinajs/log-common";
16
16
  import GlobToRegExp from "glob-to-regexp";
17
17
  import { InvalidOperation, InvalidOption } from "@spinajs/exceptions";
18
18
  import { InternalLoggerProxy } from "@spinajs/internal-logger";
19
+ import { captureCallsite } from "./callsite.js";
19
20
  import _ from "lodash";
21
+ // Module-level cache of compiled glob->RegExp so a rule pattern is compiled ONCE
22
+ // process-wide, not once per (logger x rule) evaluation.
23
+ const GLOB_CACHE = new Map();
24
+ function globFor(pattern) {
25
+ let re = GLOB_CACHE.get(pattern);
26
+ if (!re) {
27
+ // eslint-disable-next-line security/detect-non-literal-regexp
28
+ re = GlobToRegExp(pattern);
29
+ GLOB_CACHE.set(pattern, re);
30
+ }
31
+ return re;
32
+ }
20
33
  function wrapWrite(level) {
21
34
  return (err, message, ...args) => {
35
+ // Zero-cost gating: only parse a caller frame ( which constructs an Error )
36
+ // when some target's layout references ${callsite}. Otherwise `vars` is just
37
+ // this.Variables and no Error is ever built - mirroring NLog's StackTraceUsage.
38
+ const extra = this.CaptureCallsite ? { callsite: captureCallsite() } : undefined;
39
+ const vars = extra ? { ...this.Variables, ...extra } : this.Variables;
22
40
  if (err instanceof Error) {
23
- return this.write(createLogMessageObject(err, message, level, this.Name, this.Variables, ...args));
41
+ return this.write(createLogMessageObject(err, message, level, this.Name, vars, ...args));
42
+ }
43
+ else if (err !== null && typeof err === "object" && !Array.isArray(err)) {
44
+ // merging-object form: `err` is a bag of structured fields, `message` is the
45
+ // format string, the rest are printf args. Fields are spread into Variables
46
+ // ( so a nested `error` key still runs the serializer ).
47
+ const fields = err;
48
+ const fmt = typeof message === "string" ? message : "";
49
+ return this.write(createLogMessageObject(null, fmt, level, this.Name, { ...vars, ...fields }, ...args));
24
50
  }
25
51
  else {
52
+ const sErr = err;
26
53
  if (message) {
27
- return this.write(createLogMessageObject(err, null, level, this.Name, this.Variables, ...[message, ...args]));
54
+ return this.write(createLogMessageObject(sErr, null, level, this.Name, vars, ...[message, ...args]));
28
55
  }
29
56
  else {
30
- return this.write(createLogMessageObject(err, null, level, this.Name, this.Variables, ...args));
57
+ return this.write(createLogMessageObject(sErr, null, level, this.Name, vars, ...args));
31
58
  }
32
59
  }
33
60
  };
@@ -40,6 +67,13 @@ let FrameworkLogger = class FrameworkLogger extends Log {
40
67
  super();
41
68
  this.Name = Name;
42
69
  this.Parent = Parent;
70
+ // composable per-logger filter pipeline, resolved from logger.filters ( plus a
71
+ // prepended WhenRepeatedFilter for the legacy logger.whenRepeated option ).
72
+ // Applied IN ORDER in write(); a null from any filter drops the entry.
73
+ this.Filters = [];
74
+ // Set in resolve() when some target's layout references ${callsite}. Gates the
75
+ // caller-frame capture in wrapWrite so logging stays zero-cost otherwise.
76
+ this.CaptureCallsite = false;
43
77
  this.Variables = variables ?? {};
44
78
  }
45
79
  resolve() {
@@ -47,89 +81,317 @@ let FrameworkLogger = class FrameworkLogger extends Log {
47
81
  if (!config) {
48
82
  throw new Error(`Configuration module is not avaible. Please resolve configuration module before any logging can occur`);
49
83
  }
50
- this.Options = config.get("logger", {
51
- targets: [
84
+ // read the logger config and default per-subkey - the `logger` key always
85
+ // exists now ( the package ships logger.file defaults ), so a whole-object
86
+ // fallback would never apply. targets / rules still fall back individually.
87
+ const configured = config.get("logger", {});
88
+ this.Options = {
89
+ ...configured,
90
+ targets: configured.targets ?? [
52
91
  {
53
92
  name: "Console",
54
93
  type: "ConsoleTarget",
55
94
  },
56
95
  ],
57
- rules: [{ name: "*", level: "trace", target: "Console" }],
58
- });
96
+ rules: configured.rules ?? [{ name: "*", level: "trace", target: "Console" }],
97
+ };
59
98
  // make unique targets
60
99
  // some modules may add same logger so we have multiple console loggers etc.
61
100
  this.Options.targets = _.uniqWith(this.Options.targets, (a, b) => {
62
101
  return a.name === b.name && a.type === b.type;
63
102
  });
103
+ // Composable filter pipeline. Each configured filter is resolved by its DI
104
+ // string name ( same mechanism as targets, see resolveLogTargets ) with its
105
+ // own config entry passed as options, and applied IN ORDER in write().
106
+ //
107
+ // BACKWARD COMPAT: the legacy `logger.whenRepeated` option is mapped to a
108
+ // WhenRepeatedFilter PREPENDED to the list so existing configs keep working.
109
+ const configuredFilters = this.Options.filters ?? [];
110
+ const filterSpecs = this.Options.whenRepeated ? [{ type: "WhenRepeatedFilter", ...this.Options.whenRepeated }, ...configuredFilters] : configuredFilters;
111
+ this.Filters = filterSpecs.map((f) => DI.resolve(f.type, [f]));
64
112
  this.matchRulesToLogger();
65
113
  this.resolveLogTargets();
114
+ // Gate ${callsite} capture: only turn it on when some resolved target's
115
+ // layout actually references it. When off, wrapWrite never builds an Error.
116
+ this.CaptureCallsite = this.Targets.some((t) => typeof t.instance?.Options?.layout === "string" && /\$\{callsite/.test(t.instance.Options.layout));
117
+ // MinLevel = the lowest level any matched rule ( ie. any target ) accepts.
118
+ // A call below this level would be dropped by every target, so the per-method
119
+ // isEnabled() guard can short-circuit on it without changing output.
120
+ this.MinLevel = this.Rules.length ? Math.min(...this.Rules.map((r) => StrToLogLevel[r.level])) : LogLevel.Trace;
121
+ // Load any browser-persisted runtime override ( no-op / undefined on Node ).
122
+ const persisted = readPersistedLevel(this.Name);
123
+ if (persisted !== undefined) {
124
+ this.LevelOverride = persisted;
125
+ }
66
126
  super.resolve();
67
127
  Log.Loggers.set(this.Name, this);
68
128
  }
69
129
  trace(err, message, ...args) {
130
+ if (!this.isEnabled(LogLevel.Trace))
131
+ return;
70
132
  wrapWrite.apply(this, [LogLevel.Trace])(err, message, ...args);
71
133
  }
72
134
  debug(err, message, ...args) {
135
+ if (!this.isEnabled(LogLevel.Debug))
136
+ return;
73
137
  wrapWrite.apply(this, [LogLevel.Debug])(err, message, ...args);
74
138
  }
75
139
  info(err, message, ...args) {
140
+ if (!this.isEnabled(LogLevel.Info))
141
+ return;
76
142
  wrapWrite.apply(this, [LogLevel.Info])(err, message, ...args);
77
143
  }
78
144
  warn(err, message, ...args) {
145
+ if (!this.isEnabled(LogLevel.Warn))
146
+ return;
79
147
  wrapWrite.apply(this, [LogLevel.Warn])(err, message, ...args);
80
148
  }
81
149
  error(err, message, ...args) {
150
+ if (!this.isEnabled(LogLevel.Error))
151
+ return;
82
152
  wrapWrite.apply(this, [LogLevel.Error])(err, message, ...args);
83
153
  }
84
154
  fatal(err, message, ...args) {
155
+ if (!this.isEnabled(LogLevel.Fatal))
156
+ return;
85
157
  wrapWrite.apply(this, [LogLevel.Fatal])(err, message, ...args);
86
158
  }
87
159
  security(err, message, ...args) {
160
+ if (!this.isEnabled(LogLevel.Security))
161
+ return;
88
162
  wrapWrite.apply(this, [LogLevel.Security])(err, message, ...args);
89
163
  }
90
164
  success(err, message, ...args) {
165
+ if (!this.isEnabled(LogLevel.Success))
166
+ return;
91
167
  wrapWrite.apply(this, [LogLevel.Success])(err, message, ...args);
92
168
  }
93
169
  write(entry) {
94
170
  if (entry.Variables.logger === this.Name) {
95
- return Promise.allSettled(this.Targets.filter((t) => entry.Level >= StrToLogLevel[t.rule.level]).map((t) => {
171
+ // Composable filter pipeline - run the entry through each configured filter
172
+ // IN ORDER. A filter returns the ( possibly modified ) entry to keep, or
173
+ // null to DROP it, in which case dispatch is skipped entirely. Runs AFTER
174
+ // the near-zero-cost level gate in the log methods so disabled levels never
175
+ // even reach the filters.
176
+ let filtered = entry;
177
+ for (const f of this.Filters) {
178
+ filtered = f.apply(filtered);
179
+ if (!filtered) {
180
+ return Promise.resolve([]);
181
+ }
182
+ }
183
+ const kept = filtered;
184
+ return Promise.allSettled(
185
+ // WINDOW membership: dispatch to a target when the entry's level falls in
186
+ // ANY of the target's `ranges` ( a min-only rule yields [min, Security],
187
+ // so this is unchanged for existing configs ).
188
+ this.Targets.filter((t) => t.ranges.some((w) => kept.Level >= w.min && kept.Level <= w.max)).map((t) => {
189
+ // PER-TARGET filters run AFTER the logger-level pipeline, for this
190
+ // target ONLY. A filter may MUTATE the entry ( eg. WhenRepeated's (xN) ),
191
+ // so isolate a per-target clone BEFORE applying them - only when this
192
+ // target actually has filters - so mutation never bleeds into others.
193
+ let e = kept;
194
+ if (t.filters && t.filters.length) {
195
+ e = { Level: kept.Level, Variables: { ...kept.Variables } };
196
+ for (const tf of t.filters) {
197
+ e = tf.apply(e);
198
+ if (!e)
199
+ break;
200
+ }
201
+ }
202
+ // a target filter dropped it for THIS target only
203
+ if (!e)
204
+ return Promise.resolve();
96
205
  if (!t.instance) {
97
206
  throw new InvalidOperation(`Target ${t.rule.target} for rule ${t.rule.name} not exists`);
98
207
  }
99
- return t.instance.write(entry);
208
+ return t.instance.write(e);
100
209
  }));
101
210
  }
102
211
  return Promise.resolve([]);
103
212
  }
104
213
  resolveLogTargets() {
105
- this.Targets = this.Rules.map((r) => {
214
+ // BUG 2 fix: multiple matched rules can route to the SAME target. The old
215
+ // code built one descriptor PER (rule, target) pair, so write() dispatched
216
+ // to that target once per rule - duplicating output. Collapse to ONE
217
+ // descriptor per target definition, keeping the MOST PERMISSIVE ( lowest )
218
+ // rule level so the target receives an entry if ANY routing rule allows that
219
+ // level, exactly once ( write() filters via kept.Level >= rule.level ). We
220
+ // key by the target-config object ( a stable reference in Options.targets )
221
+ // rather than the resolved instance so this is correct regardless of the
222
+ // target's DI lifetime ( a @NewInstance target would otherwise still yield
223
+ // one fresh instance per rule and never collapse ). Each unique target is
224
+ // therefore resolved exactly ONCE.
225
+ //
226
+ // WINDOWS: a rule now carries a level WINDOW `[level, maxLevel ?? Security]`
227
+ // and several rules can route to the SAME target with DIFFERENT windows, so
228
+ // one min-level is not enough. We collect ALL windows per target ( their
229
+ // UNION ) into `ranges`, and keep the representative `rule` as the one with
230
+ // the LOWEST min ( used for the "no target" error and back-compat ).
231
+ const byTarget = new Map();
232
+ for (const r of this.Rules) {
233
+ const wantedNames = Array.isArray(r.target) ? r.target : [r.target];
234
+ // Resolve the rule's target NAMES to definitions. Distinguish two cases:
235
+ // - a named target exists but is `enabled: false` -> intentionally not
236
+ // routed, skip it silently ( and do NOT instantiate it below ).
237
+ // - a name matches NO defined target at all -> misconfig ( BUG 3 ), throw.
238
+ // So `namedButMissing` = wanted names with no matching def AT ALL; disabled
239
+ // matches DO count as "the name exists" and are simply not collected.
240
+ const namedButMissing = wantedNames.filter((n) => !this.Options.targets.some((t) => t.name === n));
241
+ if (namedButMissing.length > 0) {
242
+ throw new InvalidOption(`No target matching rule ${r.name} ( wanted target(s): ${namedButMissing.join(", ")} )`);
243
+ }
244
+ // EXCLUDE disabled targets before dedupe/resolve so they are never built.
106
245
  const found = this.Options.targets.filter((t) => {
107
- return Array.isArray(r.target) ? r.target.includes(t.name) : r.target === t.name;
246
+ return wantedNames.includes(t.name) && t.enabled !== false;
108
247
  });
109
- if (!found) {
110
- throw new InvalidOption(`No target matching rule ${r.name}`);
248
+ const window = {
249
+ min: StrToLogLevel[r.level],
250
+ max: r.maxLevel ? StrToLogLevel[r.maxLevel] : LogLevel.Security,
251
+ };
252
+ for (const f of found) {
253
+ const existing = byTarget.get(f);
254
+ if (!existing) {
255
+ byTarget.set(f, { rule: r, ranges: [window] });
256
+ }
257
+ else {
258
+ existing.ranges.push(window);
259
+ // keep the representative rule as the one with the LOWEST min level
260
+ if (window.min < StrToLogLevel[existing.rule.level]) {
261
+ existing.rule = r;
262
+ }
263
+ }
111
264
  }
112
- return found.map((f) => {
113
- return {
114
- instance: DI.resolve(f.type, [f]),
115
- options: f,
116
- rule: r,
117
- };
118
- });
119
- }).reduce((prev, curr) => prev.concat(...curr), []);
265
+ }
266
+ this.Targets = [...byTarget.entries()].map(([f, r]) => this.buildTargetDesc(f, r.ranges, r.rule));
267
+ }
268
+ /**
269
+ * Build one {@link ILogTargetDesc } from a target definition, its level
270
+ * WINDOWS and a representative rule. Shared by config-time
271
+ * {@link resolveLogTargets } and the runtime {@link addTarget } so both
272
+ * resolve the target instance and its per-target filters the SAME way:
273
+ * the target class is resolved by its DI string `type`, and each per-target
274
+ * filter spec is resolved by its DI string `type` ( @NewInstance => per-use
275
+ * state ).
276
+ */
277
+ buildTargetDesc(def, ranges, rule) {
278
+ return {
279
+ instance: DI.resolve(def.type, [def]),
280
+ options: def,
281
+ rule,
282
+ ranges,
283
+ filters: (def.filters ?? []).map((spec) => DI.resolve(spec.type, [spec])),
284
+ };
285
+ }
286
+ /**
287
+ * Recompute the two cheap gates that {@link write } / the per-method
288
+ * isEnabled() guard rely on, so they stay correct after the target set
289
+ * changes at runtime ( {@link addTarget } / {@link removeTarget } ):
290
+ * - MinLevel = lowest `min` across all attached targets' windows ( floor
291
+ * Trace when there are none ), so a call below it is short-circuited.
292
+ * - CaptureCallsite = true iff some attached target's layout references
293
+ * ${callsite}, gating the caller-frame capture in wrapWrite.
294
+ */
295
+ recomputeGates() {
296
+ const mins = this.Targets.flatMap((t) => t.ranges.map((w) => w.min));
297
+ this.MinLevel = mins.length ? Math.min(...mins) : LogLevel.Trace;
298
+ this.CaptureCallsite = this.Targets.some((t) => typeof t.instance?.Options?.layout === "string" && /\$\{callsite/.test(t.instance.Options.layout));
299
+ }
300
+ /**
301
+ * Attach a sink to THIS logger AT RUNTIME, without touching config. Resolves
302
+ * the target ( and its per-target filters ) exactly as config-time routing
303
+ * does, then recomputes the MinLevel / ${callsite} gates so dispatch stays
304
+ * correct. Returns the resolved instance, or `undefined` when nothing was
305
+ * attached ( `def.enabled === false` ).
306
+ *
307
+ * A level WINDOW `[opts.level ?? "trace", opts.maxLevel ?? security]` is
308
+ * applied ( same semantics as a routing rule's window ). Adding a target
309
+ * whose name already exists REPLACES the existing descriptor(s) ( the old
310
+ * instance is flushed first ) so a name is never duplicated.
311
+ *
312
+ * `opts.filters` are APPENDED to any `def.filters` ( def first, opts last ).
313
+ */
314
+ addTarget(def, opts) {
315
+ // Consistent with config-time skip: a disabled def is never instantiated.
316
+ if (def.enabled === false) {
317
+ return undefined;
318
+ }
319
+ const levelName = opts?.level ?? "trace";
320
+ if (!(levelName in StrToLogLevel)) {
321
+ throw new InvalidOption(`addTarget: invalid level '${levelName}'`);
322
+ }
323
+ if (opts?.maxLevel !== undefined && !(opts.maxLevel in StrToLogLevel)) {
324
+ throw new InvalidOption(`addTarget: invalid maxLevel '${opts.maxLevel}'`);
325
+ }
326
+ const window = {
327
+ min: StrToLogLevel[levelName],
328
+ max: opts?.maxLevel ? StrToLogLevel[opts.maxLevel] : LogLevel.Security,
329
+ };
330
+ // Merge opts.filters AFTER def.filters ( def first, opts appended ).
331
+ const mergedDef = opts?.filters && opts.filters.length ? { ...def, filters: [...(def.filters ?? []), ...opts.filters] } : def;
332
+ // REPLACE any existing same-named descriptor(s) - flush them first so no
333
+ // buffered entry is lost, then drop them ( do NOT dispose; the instance may
334
+ // be DI-owned / shared ).
335
+ const stale = this.Targets.filter((t) => t.options?.name === def.name);
336
+ for (const t of stale) {
337
+ void t.instance.forceFlush();
338
+ }
339
+ this.Targets = this.Targets.filter((t) => t.options?.name !== def.name);
340
+ // Synthesize a representative rule mirroring the window for back-compat /
341
+ // the "no target" error path.
342
+ const rule = { name: this.Name, level: levelName, maxLevel: opts?.maxLevel, target: def.name };
343
+ const desc = this.buildTargetDesc(mergedDef, [window], rule);
344
+ this.Targets.push(desc);
345
+ this.recomputeGates();
346
+ return desc.instance;
347
+ }
348
+ /**
349
+ * Detach a runtime sink by its target `name`. Each matching descriptor's
350
+ * instance is force-flushed ( to drain buffered entries ) BEFORE removal - it
351
+ * is NOT disposed, since the instance may be shared / DI-owned. Recomputes the
352
+ * gates afterwards. No-op when no target with that name is attached.
353
+ */
354
+ async removeTarget(name) {
355
+ const matched = this.Targets.filter((t) => t.options?.name === name);
356
+ if (matched.length === 0) {
357
+ return;
358
+ }
359
+ await Promise.allSettled(matched.map((t) => t.instance.forceFlush()));
360
+ this.Targets = this.Targets.filter((t) => t.options?.name !== name);
361
+ this.recomputeGates();
120
362
  }
121
363
  matchRulesToLogger() {
122
- const matchingRules = this.Options.rules.filter((r) => {
123
- const g = GlobToRegExp(r.name);
124
- // BUG: g.test throws vscode err ?
125
- return g.test(this.Name);
126
- });
127
- // Check if there are any specific (non-wildcard) rules
128
- const hasSpecificRule = matchingRules.some((r) => r.name !== '*');
129
- // If specific rules exist, exclude wildcard rules
130
- this.Rules = hasSpecificRule
131
- ? matchingRules.filter((r) => r.name !== '*')
132
- : matchingRules;
364
+ // NLog-style ordered, ADDITIVE evaluation. Walk the rules IN CONFIG ORDER
365
+ // and collect EVERY rule whose glob matches this logger ( so a logger matched
366
+ // by both `*` and a specific rule routes to BOTH - de-duped by target in
367
+ // resolveLogTargets ). A matched rule with `final: true` STOPS evaluation of
368
+ // any LATER rules ( that final rule and all earlier matched rules still apply
369
+ // ) - place a specific `final` rule before `*` to get this-rule-only routing.
370
+ const matched = [];
371
+ for (const r of this.Options.rules) {
372
+ if (typeof r.name !== "string") {
373
+ throw new InvalidOption(`Log rule name must be a string, got ${typeof r.name}`);
374
+ }
375
+ // Guard: an invalid level would leave StrToLogLevel[level] === undefined,
376
+ // poisoning MinLevel ( Math.min(..., NaN) === NaN ) and the write() dispatch
377
+ // gate, silently killing the logger. Schema validates config; this guards
378
+ // programmatic / default rule paths too.
379
+ if (!(r.level in StrToLogLevel)) {
380
+ throw new InvalidOption(`Log rule ${r.name} has invalid level '${r.level}'`);
381
+ }
382
+ // Same guard for the optional upper bound: an invalid maxLevel would make
383
+ // StrToLogLevel[maxLevel] === undefined and poison the window test.
384
+ if (r.maxLevel !== undefined && !(r.maxLevel in StrToLogLevel)) {
385
+ throw new InvalidOption(`Log rule ${r.name} has invalid maxLevel '${r.maxLevel}'`);
386
+ }
387
+ if (globFor(r.name).test(this.Name)) {
388
+ matched.push(r);
389
+ if (r.final) {
390
+ break;
391
+ }
392
+ }
393
+ }
394
+ this.Rules = matched;
133
395
  }
134
396
  };
135
397
  FrameworkLogger = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/log.ts"],"names":[],"mappings":";;;;;;;;;AAAA,4DAA4D;AAC5D,sDAAsD;AACtD,0DAA0D;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,EAAE,EAAc,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAwB,QAAQ,EAA0B,aAAa,EAAE,sBAAsB,EAAuC,GAAG,EAAgD,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAChP,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,CAAC,MAAM,QAAQ,CAAC;AAEvB,iFAAiF;AACjF,yDAAyD;AACzD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC7C,SAAS,OAAO,CAAC,OAAe;IAC9B,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,8DAA8D;QAC9D,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAC3B,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAY,KAAe;IAC3C,OAAO,CAAC,GAA4B,EAAE,OAAuB,EAAE,GAAG,IAAW,EAAE,EAAE;QAC/E,4EAA4E;QAC5E,6EAA6E;QAC7E,gFAAgF;QAChF,MAAM,KAAK,GAAI,IAAwB,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACtG,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QAEtE,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC3F,CAAC;aAAM,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1E,6EAA6E;YAC7E,4EAA4E;YAC5E,yDAAyD;YACzD,MAAM,MAAM,GAAG,GAA8B,CAAC;YAC9C,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAW,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QACjH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,GAAa,CAAC;YAC3B,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAW,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9G,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAW,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAChG,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,GAAG;IAUtC,YAAmB,IAAY,EAAE,SAAmC,EAAY,MAAY;QAC1F,KAAK,EAAE,CAAC;QADS,SAAI,GAAJ,IAAI,CAAQ;QAAiD,WAAM,GAAN,MAAM,CAAM;QAT5F,+EAA+E;QAC/E,4EAA4E;QAC5E,uEAAuE;QAC7D,YAAO,GAAgB,EAAE,CAAC;QAEpC,+EAA+E;QAC/E,0EAA0E;QACnE,oBAAe,GAAG,KAAK,CAAC;QAK7B,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;IACnC,CAAC;IAEM,OAAO;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAEjD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uGAAuG,CAAC,CAAC;QAC3H,CAAC;QAED,0EAA0E;QAC1E,2EAA2E;QAC3E,4EAA4E;QAC5E,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAuB,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,UAAU;YACb,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI;gBAC7B;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,eAAe;iBACtB;aACF;YACD,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SAC/D,CAAC;QAEjB,sBAAsB;QACtB,4EAA4E;QAC5E,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/D,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,4EAA4E;QAC5E,uEAAuE;QACvE,EAAE;QACF,0EAA0E;QAC1E,6EAA6E;QAC7E,MAAM,iBAAiB,GAAwB,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1E,MAAM,WAAW,GAAwB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAC9K,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1E,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,wEAAwE;QACxE,4EAA4E;QAC5E,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnJ,2EAA2E;QAC3E,8EAA8E;QAC9E,qEAAqE;QACrE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEhH,6EAA6E;QAC7E,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QACjC,CAAC;QAED,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAKM,KAAK,CAAC,GAA4B,EAAE,OAAwB,EAAE,GAAG,IAAW;QACjF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAC5C,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACjE,CAAC;IAKM,KAAK,CAAC,GAA4B,EAAE,OAAwB,EAAE,GAAG,IAAW;QACjF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAC5C,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACjE,CAAC;IAKM,IAAI,CAAC,GAA4B,EAAE,OAAwB,EAAE,GAAG,IAAW;QAChF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO;QAC3C,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAChE,CAAC;IAKM,IAAI,CAAC,GAA4B,EAAE,OAAwB,EAAE,GAAG,IAAW;QAChF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO;QAC3C,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAChE,CAAC;IAKM,KAAK,CAAC,GAA4B,EAAE,OAAwB,EAAE,GAAG,IAAW;QACjF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAC5C,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACjE,CAAC;IAKM,KAAK,CAAC,GAA4B,EAAE,OAAwB,EAAE,GAAG,IAAW;QACjF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAC5C,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACjE,CAAC;IAKM,QAAQ,CAAC,GAA4B,EAAE,OAAwB,EAAE,GAAG,IAAW;QACpF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO;QAC/C,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACpE,CAAC;IAKM,OAAO,CAAC,GAA4B,EAAE,OAAwB,EAAE,GAAG,IAAW;QACnF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO;QAC9C,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACnE,CAAC;IAEM,KAAK,CAAC,KAAgB;QAC3B,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACzC,4EAA4E;YAC5E,yEAAyE;YACzE,0EAA0E;YAC1E,4EAA4E;YAC5E,0BAA0B;YAC1B,IAAI,QAAQ,GAAqB,KAAK,CAAC;YACvC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC7B,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YACD,MAAM,IAAI,GAAc,QAAQ,CAAC;YAEjC,OAAO,OAAO,CAAC,UAAU;YACvB,0EAA0E;YAC1E,yEAAyE;YACzE,+CAA+C;YAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrG,mEAAmE;gBACnE,0EAA0E;gBAC1E,sEAAsE;gBACtE,sEAAsE;gBACtE,IAAI,CAAC,GAAqB,IAAI,CAAC;gBAC/B,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBAClC,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;oBAC5D,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;wBAC3B,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAChB,IAAI,CAAC,CAAC;4BAAE,MAAM;oBAChB,CAAC;gBACH,CAAC;gBACD,kDAAkD;gBAClD,IAAI,CAAC,CAAC;oBAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;gBAEjC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAChB,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;gBAC3F,CAAC;gBAED,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAES,iBAAiB;QACzB,0EAA0E;QAC1E,2EAA2E;QAC3E,qEAAqE;QACrE,2EAA2E;QAC3E,6EAA6E;QAC7E,2EAA2E;QAC3E,4EAA4E;QAC5E,yEAAyE;QACzE,2EAA2E;QAC3E,0EAA0E;QAC1E,mCAAmC;QACnC,EAAE;QACF,6EAA6E;QAC7E,4EAA4E;QAC5E,yEAAyE;QACzE,4EAA4E;QAC5E,qEAAqE;QACrE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkF,CAAC;QAE3G,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAEpE,yEAAyE;YACzE,wEAAwE;YACxE,mEAAmE;YACnE,4EAA4E;YAC5E,4EAA4E;YAC5E,sEAAsE;YACtE,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YACnG,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,aAAa,CAAC,2BAA2B,CAAC,CAAC,IAAI,wBAAwB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnH,CAAC;YAED,0EAA0E;YAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC9C,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC;YAC7D,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG;gBACb,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC3B,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ;aAChE,CAAC;YAEF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACjD,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC7B,oEAAoE;oBACpE,IAAI,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;wBACpD,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;oBACpB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpG,CAAC;IAED;;;;;;;;OAQG;IACO,eAAe,CAAC,GAAmB,EAAE,MAA0C,EAAE,IAAc;QACvG,OAAO;YACL,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAkC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;YACtE,OAAO,EAAE,GAAG;YACZ,IAAI;YACJ,MAAM;YACN,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAY,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;SACrF,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACO,cAAc;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACjE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACrJ,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,SAAS,CAAC,GAAmB,EAAE,IAAmH;QACvJ,0EAA0E;QAC1E,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC;QACzC,IAAI,CAAC,CAAC,SAAS,IAAI,aAAa,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,aAAa,CAAC,6BAA6B,SAAS,GAAG,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,IAAI,EAAE,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,aAAa,CAAC,gCAAgC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,MAAM,GAAG;YACb,GAAG,EAAE,aAAa,CAAC,SAAS,CAAC;YAC7B,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ;SACvE,CAAC;QAEF,qEAAqE;QACrE,MAAM,SAAS,GAAmB,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAE9I,yEAAyE;QACzE,4EAA4E;QAC5E,0BAA0B;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACvE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QAExE,0EAA0E;QAC1E,8BAA8B;QAC9B,MAAM,IAAI,GAAa,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAEzG,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExB,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,YAAY,CAAC,IAAY;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;QACrE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;QAEpE,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAES,kBAAkB;QAC1B,0EAA0E;QAC1E,8EAA8E;QAC9E,yEAAyE;QACzE,6EAA6E;QAC7E,8EAA8E;QAC9E,8EAA8E;QAC9E,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,aAAa,CAAC,uCAAuC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,0EAA0E;YAC1E,6EAA6E;YAC7E,0EAA0E;YAC1E,yCAAyC;YACzC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,aAAa,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,uBAAuB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAC/E,CAAC;YACD,0EAA0E;YAC1E,oEAAoE;YACpE,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,aAAa,CAAC,EAAE,CAAC;gBAC/D,MAAM,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrF,CAAC;YACD,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;oBACZ,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;IACvB,CAAC;CACF,CAAA;AAzYY,eAAe;IAD3B,WAAW,EAAE;qDAW6E,GAAG;GAVjF,eAAe,CAyY3B;;AAED,MAAM,kBAAkB,GAAG,CAAC,SAAqB,EAAE,OAAe,EAAE,EAAE;IACpE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,OAAO,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACzE,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACjD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,SAAS,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,6CAA6C;AAC7C,2CAA2C;AAC3C,2DAA2D;AAC3D,2CAA2C;AAC3C,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAE9C,6CAA6C;AAC7C,mDAAmD;AACnD,cAAc;AACd,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAExC,uCAAuC;AACvC,8BAA8B;AAC9B,2CAA2C;AAC3C,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Log, PerfSink, IPerfMetric, IPerfRollup } from "@spinajs/log-common";
2
+ /**
3
+ * Default {@link PerfSink}: renders perf measurements as structured log entries
4
+ * through the normal targets/filters/rules pipeline, on a dedicated `perf`
5
+ * logger. Spans over their per-name threshold log at `warn`; under-threshold
6
+ * spans log at `trace` ( kept for on-demand visibility, cheaply gated out when
7
+ * trace routing is off ). Rollups log one `info` line.
8
+ */
9
+ export declare class LogMetricSink extends PerfSink {
10
+ protected Log: Log;
11
+ protected Enabled: boolean;
12
+ protected Thresholds: Record<string, number>;
13
+ protected OverLevel: "warn" | "error" | "info" | "debug" | "trace";
14
+ protected UnderLevel: "warn" | "error" | "info" | "debug" | "trace";
15
+ protected LogCounters: boolean;
16
+ private thresholdFor;
17
+ collect(metric: IPerfMetric): void;
18
+ onScopeEnd(rollup: IPerfRollup): void;
19
+ /**
20
+ * Emit through the log's MERGING-OBJECT form ( fields object FIRST, then the
21
+ * message string ) so the structured variables ( durationMs, labels, sql,
22
+ * error ) are attached to the entry. The `@spinajs/log` API treats a trailing
23
+ * object as a printf argument, so passing fields last would silently drop
24
+ * them. See the `warn(fields, message?)` overload on the `Log` base class.
25
+ */
26
+ private emitAt;
27
+ }
28
+ //# sourceMappingURL=LogMetricSink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogMetricSink.d.ts","sourceRoot":"","sources":["../../../src/perf/LogMetricSink.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEtF;;;;;;GAMG;AACH,qBAEa,aAAc,SAAQ,QAAQ;IAEzC,SAAS,CAAC,GAAG,EAAG,GAAG,CAAC;IAGpB,SAAS,CAAC,OAAO,EAAG,OAAO,CAAC;IAG5B,SAAS,CAAC,UAAU,EAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG9C,SAAS,CAAC,SAAS,EAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAGpE,SAAS,CAAC,UAAU,EAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAGrE,SAAS,CAAC,WAAW,EAAG,OAAO,CAAC;IAEhC,OAAO,CAAC,YAAY;IAKb,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IA0BlC,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAc5C;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;CAmBf"}
@@ -0,0 +1,117 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Singleton, Injectable } from "@spinajs/di";
11
+ import { Config } from "@spinajs/configuration";
12
+ import { Logger, Log, PerfSink } from "@spinajs/log-common";
13
+ /**
14
+ * Default {@link PerfSink}: renders perf measurements as structured log entries
15
+ * through the normal targets/filters/rules pipeline, on a dedicated `perf`
16
+ * logger. Spans over their per-name threshold log at `warn`; under-threshold
17
+ * spans log at `trace` ( kept for on-demand visibility, cheaply gated out when
18
+ * trace routing is off ). Rollups log one `info` line.
19
+ */
20
+ let LogMetricSink = class LogMetricSink extends PerfSink {
21
+ thresholdFor(name) {
22
+ const t = this.Thresholds ?? {};
23
+ return t[name] ?? t.default ?? 0;
24
+ }
25
+ collect(metric) {
26
+ if (!this.Enabled)
27
+ return;
28
+ if (metric.kind === "span") {
29
+ const dur = metric.durationMs ?? 0;
30
+ // `metric.fields` already carries `error` for a failed span ( set by the
31
+ // facade ), so the log's error serializer runs when this object is logged.
32
+ const fields = { durationMs: dur, ...(metric.labels ?? {}), ...(metric.fields ?? {}) };
33
+ if (metric.error !== undefined) {
34
+ this.emitAt("error", `${metric.name} failed after ${dur.toFixed(1)}ms`, fields);
35
+ return;
36
+ }
37
+ const threshold = this.thresholdFor(metric.name);
38
+ const slow = threshold > 0 && dur >= threshold;
39
+ const level = slow ? this.OverLevel : this.UnderLevel;
40
+ this.emitAt(level, `${slow ? "Slow " : ""}${metric.name}: ${dur.toFixed(1)}ms`, fields);
41
+ return;
42
+ }
43
+ if (this.LogCounters && (metric.kind === "counter" || metric.kind === "value")) {
44
+ this.emitAt("trace", `${metric.name}=${metric.value}`, { ...(metric.labels ?? {}) });
45
+ }
46
+ }
47
+ onScopeEnd(rollup) {
48
+ if (!this.Enabled)
49
+ return;
50
+ const parts = Object.entries(rollup.byName)
51
+ .map(([n, e]) => `${n} x${e.count} ${e.totalMs.toFixed(0)}ms`)
52
+ .join(", ");
53
+ const tag = rollup.requestId ? ` [${rollup.requestId}]` : "";
54
+ this.emitAt("info", `perf rollup${tag}: ${parts || "no measurements"}`, {
55
+ requestId: rollup.requestId,
56
+ totalMs: rollup.totalMs,
57
+ byName: rollup.byName,
58
+ ...(rollup.labels ?? {}),
59
+ });
60
+ }
61
+ /**
62
+ * Emit through the log's MERGING-OBJECT form ( fields object FIRST, then the
63
+ * message string ) so the structured variables ( durationMs, labels, sql,
64
+ * error ) are attached to the entry. The `@spinajs/log` API treats a trailing
65
+ * object as a printf argument, so passing fields last would silently drop
66
+ * them. See the `warn(fields, message?)` overload on the `Log` base class.
67
+ */
68
+ emitAt(level, message, fields) {
69
+ switch (level) {
70
+ case "error":
71
+ this.Log.error(fields, message);
72
+ break;
73
+ case "warn":
74
+ this.Log.warn(fields, message);
75
+ break;
76
+ case "info":
77
+ this.Log.info(fields, message);
78
+ break;
79
+ case "debug":
80
+ this.Log.debug(fields, message);
81
+ break;
82
+ default:
83
+ this.Log.trace(fields, message);
84
+ break;
85
+ }
86
+ }
87
+ };
88
+ __decorate([
89
+ Logger("perf"),
90
+ __metadata("design:type", Log)
91
+ ], LogMetricSink.prototype, "Log", void 0);
92
+ __decorate([
93
+ Config("logger.perf.enabled", { defaultValue: true }),
94
+ __metadata("design:type", Boolean)
95
+ ], LogMetricSink.prototype, "Enabled", void 0);
96
+ __decorate([
97
+ Config("logger.perf.thresholds", { defaultValue: { "orm.query": 200, "http.request": 1000, default: 0 } }),
98
+ __metadata("design:type", Object)
99
+ ], LogMetricSink.prototype, "Thresholds", void 0);
100
+ __decorate([
101
+ Config("logger.perf.overThresholdLevel", { defaultValue: "warn" }),
102
+ __metadata("design:type", String)
103
+ ], LogMetricSink.prototype, "OverLevel", void 0);
104
+ __decorate([
105
+ Config("logger.perf.underThresholdLevel", { defaultValue: "trace" }),
106
+ __metadata("design:type", String)
107
+ ], LogMetricSink.prototype, "UnderLevel", void 0);
108
+ __decorate([
109
+ Config("logger.perf.logCounters", { defaultValue: false }),
110
+ __metadata("design:type", Boolean)
111
+ ], LogMetricSink.prototype, "LogCounters", void 0);
112
+ LogMetricSink = __decorate([
113
+ Singleton(),
114
+ Injectable(PerfSink)
115
+ ], LogMetricSink);
116
+ export { LogMetricSink };
117
+ //# sourceMappingURL=LogMetricSink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogMetricSink.js","sourceRoot":"","sources":["../../../src/perf/LogMetricSink.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { IMeasureOpts } from "@spinajs/log-common";
2
+ /**
3
+ * Method decorator that times the wrapped method via {@link Perf.measure}. Name
4
+ * defaults to `${ClassName}.${method}`. Works for sync and async methods ( the
5
+ * facade awaits a returned thenable ). Uses the same legacy-decorator signature
6
+ * as the rest of the framework ( `experimentalDecorators` ).
7
+ */
8
+ export declare function Measure(name?: string, opts?: IMeasureOpts): (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => PropertyDescriptor;
9
+ //# sourceMappingURL=measure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../src/perf/measure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,IACvC,QAAQ,MAAM,EAAE,aAAa,MAAM,GAAG,MAAM,EAAE,YAAY,kBAAkB,KAAG,kBAAkB,CAQnH"}