renovate-log-parser 0.1.0

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 (325) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +402 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +30 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/analyze.d.ts +24 -0
  7. package/dist/commands/analyze.js +114 -0
  8. package/dist/commands/analyze.js.map +1 -0
  9. package/dist/commands/detect-errors.d.ts +17 -0
  10. package/dist/commands/detect-errors.js +119 -0
  11. package/dist/commands/detect-errors.js.map +1 -0
  12. package/dist/commands/install-analyze-skill.d.ts +27 -0
  13. package/dist/commands/install-analyze-skill.js +181 -0
  14. package/dist/commands/install-analyze-skill.js.map +1 -0
  15. package/dist/commands/web.d.ts +12 -0
  16. package/dist/commands/web.js +103 -0
  17. package/dist/commands/web.js.map +1 -0
  18. package/dist/core/analyzer.d.ts +89 -0
  19. package/dist/core/analyzer.js +179 -0
  20. package/dist/core/analyzer.js.map +1 -0
  21. package/dist/core/error-detector.d.ts +56 -0
  22. package/dist/core/error-detector.js +236 -0
  23. package/dist/core/error-detector.js.map +1 -0
  24. package/dist/core/filters.d.ts +136 -0
  25. package/dist/core/filters.js +95 -0
  26. package/dist/core/filters.js.map +1 -0
  27. package/dist/core/ignore-file.d.ts +52 -0
  28. package/dist/core/ignore-file.js +104 -0
  29. package/dist/core/ignore-file.js.map +1 -0
  30. package/dist/core/levels.d.ts +33 -0
  31. package/dist/core/levels.js +35 -0
  32. package/dist/core/levels.js.map +1 -0
  33. package/dist/core/parser.d.ts +57 -0
  34. package/dist/core/parser.js +201 -0
  35. package/dist/core/parser.js.map +1 -0
  36. package/dist/core/query-builder.d.ts +47 -0
  37. package/dist/core/query-builder.js +155 -0
  38. package/dist/core/query-builder.js.map +1 -0
  39. package/dist/core/skill-template.d.ts +34 -0
  40. package/dist/core/skill-template.js +259 -0
  41. package/dist/core/skill-template.js.map +1 -0
  42. package/package.json +68 -0
  43. package/web/.output/nitro.json +15 -0
  44. package/web/.output/public/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2 +0 -0
  45. package/web/.output/public/_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2 +0 -0
  46. package/web/.output/public/_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2 +0 -0
  47. package/web/.output/public/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2 +0 -0
  48. package/web/.output/public/_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2 +0 -0
  49. package/web/.output/public/_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2 +0 -0
  50. package/web/.output/public/_nuxt/BWja8e3M.js +37 -0
  51. package/web/.output/public/_nuxt/BgApMHS1.js +1 -0
  52. package/web/.output/public/_nuxt/CGPWRqbc.js +1 -0
  53. package/web/.output/public/_nuxt/DlAUqK2U.js +1 -0
  54. package/web/.output/public/_nuxt/Sgtec1U0.js +1 -0
  55. package/web/.output/public/_nuxt/builds/latest.json +1 -0
  56. package/web/.output/public/_nuxt/builds/meta/c4723e49-0623-47af-ae79-9ab6428bdcc1.json +1 -0
  57. package/web/.output/public/_nuxt/entry.9mB-pyEY.css +1 -0
  58. package/web/.output/public/_nuxt/error-404.B_PvSG-P.css +1 -0
  59. package/web/.output/public/_nuxt/error-500.CghkKCEr.css +1 -0
  60. package/web/.output/public/_nuxt/index.BlvAG7F6.css +1 -0
  61. package/web/.output/public/favicon.ico +0 -0
  62. package/web/.output/server/chunks/_/error-500.mjs +19 -0
  63. package/web/.output/server/chunks/_/error-500.mjs.map +1 -0
  64. package/web/.output/server/chunks/_/icons.mjs +6153 -0
  65. package/web/.output/server/chunks/_/icons.mjs.map +1 -0
  66. package/web/.output/server/chunks/_/icons2.mjs +11494 -0
  67. package/web/.output/server/chunks/_/icons2.mjs.map +1 -0
  68. package/web/.output/server/chunks/build/_plugin-vue_export-helper-1tPrXgE0.mjs +10 -0
  69. package/web/.output/server/chunks/build/_plugin-vue_export-helper-1tPrXgE0.mjs.map +1 -0
  70. package/web/.output/server/chunks/build/client.precomputed.mjs +4 -0
  71. package/web/.output/server/chunks/build/client.precomputed.mjs.map +1 -0
  72. package/web/.output/server/chunks/build/error-404-DyaaQUIS.mjs +106 -0
  73. package/web/.output/server/chunks/build/error-404-DyaaQUIS.mjs.map +1 -0
  74. package/web/.output/server/chunks/build/error-404-styles.9cNA4arh.mjs +8 -0
  75. package/web/.output/server/chunks/build/error-404-styles.9cNA4arh.mjs.map +1 -0
  76. package/web/.output/server/chunks/build/error-500-CVSP-p02.mjs +89 -0
  77. package/web/.output/server/chunks/build/error-500-CVSP-p02.mjs.map +1 -0
  78. package/web/.output/server/chunks/build/error-500-styles.BX54ZlkH.mjs +8 -0
  79. package/web/.output/server/chunks/build/error-500-styles.BX54ZlkH.mjs.map +1 -0
  80. package/web/.output/server/chunks/build/index-88dXYOxO.mjs +19675 -0
  81. package/web/.output/server/chunks/build/index-88dXYOxO.mjs.map +1 -0
  82. package/web/.output/server/chunks/build/index-styles.V2iua2bE.mjs +8 -0
  83. package/web/.output/server/chunks/build/index-styles.V2iua2bE.mjs.map +1 -0
  84. package/web/.output/server/chunks/build/server.mjs +7910 -0
  85. package/web/.output/server/chunks/build/server.mjs.map +1 -0
  86. package/web/.output/server/chunks/build/styles.mjs +10 -0
  87. package/web/.output/server/chunks/build/styles.mjs.map +1 -0
  88. package/web/.output/server/chunks/nitro/nitro.mjs +6944 -0
  89. package/web/.output/server/chunks/nitro/nitro.mjs.map +1 -0
  90. package/web/.output/server/chunks/routes/api/fields.get.mjs +27 -0
  91. package/web/.output/server/chunks/routes/api/fields.get.mjs.map +1 -0
  92. package/web/.output/server/chunks/routes/api/findings.get.mjs +30 -0
  93. package/web/.output/server/chunks/routes/api/findings.get.mjs.map +1 -0
  94. package/web/.output/server/chunks/routes/api/log/contents.post.mjs +29 -0
  95. package/web/.output/server/chunks/routes/api/log/contents.post.mjs.map +1 -0
  96. package/web/.output/server/chunks/routes/api/log/path.post.mjs +30 -0
  97. package/web/.output/server/chunks/routes/api/log/path.post.mjs.map +1 -0
  98. package/web/.output/server/chunks/routes/api/repositories.get.mjs +27 -0
  99. package/web/.output/server/chunks/routes/api/repositories.get.mjs.map +1 -0
  100. package/web/.output/server/chunks/routes/api/rows.get.mjs +48 -0
  101. package/web/.output/server/chunks/routes/api/rows.get.mjs.map +1 -0
  102. package/web/.output/server/chunks/routes/renderer.mjs +451 -0
  103. package/web/.output/server/chunks/routes/renderer.mjs.map +1 -0
  104. package/web/.output/server/chunks/virtual/_virtual_spa-template.mjs +4 -0
  105. package/web/.output/server/chunks/virtual/_virtual_spa-template.mjs.map +1 -0
  106. package/web/.output/server/index.mjs +16 -0
  107. package/web/.output/server/index.mjs.map +1 -0
  108. package/web/.output/server/node_modules/.nitro/hookable@5.5.3/dist/index.mjs +290 -0
  109. package/web/.output/server/node_modules/.nitro/hookable@5.5.3/package.json +49 -0
  110. package/web/.output/server/node_modules/.nitro/hookable@6.1.1/dist/index.mjs +257 -0
  111. package/web/.output/server/node_modules/.nitro/hookable@6.1.1/package.json +53 -0
  112. package/web/.output/server/node_modules/@babel/parser/lib/index.js +14599 -0
  113. package/web/.output/server/node_modules/@babel/parser/package.json +50 -0
  114. package/web/.output/server/node_modules/@floating-ui/core/dist/floating-ui.core.mjs +1038 -0
  115. package/web/.output/server/node_modules/@floating-ui/core/package.json +63 -0
  116. package/web/.output/server/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs +789 -0
  117. package/web/.output/server/node_modules/@floating-ui/dom/package.json +72 -0
  118. package/web/.output/server/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs +165 -0
  119. package/web/.output/server/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs +136 -0
  120. package/web/.output/server/node_modules/@floating-ui/utils/package.json +70 -0
  121. package/web/.output/server/node_modules/@floating-ui/vue/dist/floating-ui.vue.mjs +190 -0
  122. package/web/.output/server/node_modules/@floating-ui/vue/package.json +71 -0
  123. package/web/.output/server/node_modules/@iconify/utils/lib/colors/index.js +295 -0
  124. package/web/.output/server/node_modules/@iconify/utils/lib/colors/keywords.js +701 -0
  125. package/web/.output/server/node_modules/@iconify/utils/lib/css/common.js +75 -0
  126. package/web/.output/server/node_modules/@iconify/utils/lib/css/format.js +39 -0
  127. package/web/.output/server/node_modules/@iconify/utils/lib/css/icon.js +47 -0
  128. package/web/.output/server/node_modules/@iconify/utils/lib/css/icons.js +128 -0
  129. package/web/.output/server/node_modules/@iconify/utils/lib/customisations/bool.js +19 -0
  130. package/web/.output/server/node_modules/@iconify/utils/lib/customisations/defaults.js +13 -0
  131. package/web/.output/server/node_modules/@iconify/utils/lib/customisations/flip.js +17 -0
  132. package/web/.output/server/node_modules/@iconify/utils/lib/customisations/merge.js +16 -0
  133. package/web/.output/server/node_modules/@iconify/utils/lib/customisations/rotate.js +30 -0
  134. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/cleanup.js +78 -0
  135. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/convert.js +100 -0
  136. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/data.js +28 -0
  137. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/format.js +58 -0
  138. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/parse.js +48 -0
  139. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/regex/base.js +203 -0
  140. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/regex/create.js +33 -0
  141. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/regex/numbers.js +132 -0
  142. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/regex/similar.js +165 -0
  143. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/regex/tree.js +79 -0
  144. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/replace/find.js +92 -0
  145. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/replace/replace.js +26 -0
  146. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/components.js +76 -0
  147. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/missing.js +66 -0
  148. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/name.js +45 -0
  149. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/parse.js +103 -0
  150. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/similar.js +36 -0
  151. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/tree.js +92 -0
  152. package/web/.output/server/node_modules/@iconify/utils/lib/emoji/test/variations.js +62 -0
  153. package/web/.output/server/node_modules/@iconify/utils/lib/icon/defaults.js +25 -0
  154. package/web/.output/server/node_modules/@iconify/utils/lib/icon/merge.js +16 -0
  155. package/web/.output/server/node_modules/@iconify/utils/lib/icon/name.js +57 -0
  156. package/web/.output/server/node_modules/@iconify/utils/lib/icon/square.js +33 -0
  157. package/web/.output/server/node_modules/@iconify/utils/lib/icon/transformations.js +12 -0
  158. package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/convert-info.js +125 -0
  159. package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/expand.js +19 -0
  160. package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/get-icon.js +25 -0
  161. package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/get-icons.js +36 -0
  162. package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/minify.js +91 -0
  163. package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/parse.js +46 -0
  164. package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/tree.js +23 -0
  165. package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/validate-basic.js +42 -0
  166. package/web/.output/server/node_modules/@iconify/utils/lib/icon-set/validate.js +123 -0
  167. package/web/.output/server/node_modules/@iconify/utils/lib/index.js +52 -0
  168. package/web/.output/server/node_modules/@iconify/utils/lib/loader/custom.js +30 -0
  169. package/web/.output/server/node_modules/@iconify/utils/lib/loader/loader.js +26 -0
  170. package/web/.output/server/node_modules/@iconify/utils/lib/loader/modern.js +27 -0
  171. package/web/.output/server/node_modules/@iconify/utils/lib/loader/utils.js +105 -0
  172. package/web/.output/server/node_modules/@iconify/utils/lib/misc/objects.js +26 -0
  173. package/web/.output/server/node_modules/@iconify/utils/lib/misc/strings.js +26 -0
  174. package/web/.output/server/node_modules/@iconify/utils/lib/misc/title.js +9 -0
  175. package/web/.output/server/node_modules/@iconify/utils/lib/svg/build.js +113 -0
  176. package/web/.output/server/node_modules/@iconify/utils/lib/svg/defs.js +31 -0
  177. package/web/.output/server/node_modules/@iconify/utils/lib/svg/encode-svg-for-css.js +13 -0
  178. package/web/.output/server/node_modules/@iconify/utils/lib/svg/html.js +9 -0
  179. package/web/.output/server/node_modules/@iconify/utils/lib/svg/id.js +41 -0
  180. package/web/.output/server/node_modules/@iconify/utils/lib/svg/inner-html.js +22 -0
  181. package/web/.output/server/node_modules/@iconify/utils/lib/svg/parse.js +67 -0
  182. package/web/.output/server/node_modules/@iconify/utils/lib/svg/pretty.js +54 -0
  183. package/web/.output/server/node_modules/@iconify/utils/lib/svg/size.js +27 -0
  184. package/web/.output/server/node_modules/@iconify/utils/lib/svg/trim.js +7 -0
  185. package/web/.output/server/node_modules/@iconify/utils/lib/svg/url.js +22 -0
  186. package/web/.output/server/node_modules/@iconify/utils/lib/svg/viewbox.js +8 -0
  187. package/web/.output/server/node_modules/@iconify/utils/package.json +119 -0
  188. package/web/.output/server/node_modules/@iconify/vue/dist/iconify.mjs +1896 -0
  189. package/web/.output/server/node_modules/@iconify/vue/package.json +62 -0
  190. package/web/.output/server/node_modules/@tanstack/virtual-core/dist/esm/index.js +1268 -0
  191. package/web/.output/server/node_modules/@tanstack/virtual-core/dist/esm/lazy-measurements.js +34 -0
  192. package/web/.output/server/node_modules/@tanstack/virtual-core/dist/esm/utils.js +74 -0
  193. package/web/.output/server/node_modules/@tanstack/virtual-core/package.json +56 -0
  194. package/web/.output/server/node_modules/@tanstack/vue-virtual/dist/esm/index.js +66 -0
  195. package/web/.output/server/node_modules/@tanstack/vue-virtual/package.json +68 -0
  196. package/web/.output/server/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js +6759 -0
  197. package/web/.output/server/node_modules/@vue/compiler-core/package.json +58 -0
  198. package/web/.output/server/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +689 -0
  199. package/web/.output/server/node_modules/@vue/compiler-dom/package.json +57 -0
  200. package/web/.output/server/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js +1413 -0
  201. package/web/.output/server/node_modules/@vue/compiler-ssr/package.json +34 -0
  202. package/web/.output/server/node_modules/@vue/devtools-api/dist/index.js +2 -0
  203. package/web/.output/server/node_modules/@vue/devtools-api/package.json +34 -0
  204. package/web/.output/server/node_modules/@vue/devtools-kit/dist/index.js +5670 -0
  205. package/web/.output/server/node_modules/@vue/devtools-kit/node_modules/hookable/dist/index.mjs +290 -0
  206. package/web/.output/server/node_modules/@vue/devtools-kit/node_modules/hookable/package.json +49 -0
  207. package/web/.output/server/node_modules/@vue/devtools-kit/package.json +44 -0
  208. package/web/.output/server/node_modules/@vue/devtools-shared/dist/index.js +239 -0
  209. package/web/.output/server/node_modules/@vue/devtools-shared/package.json +33 -0
  210. package/web/.output/server/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js +1899 -0
  211. package/web/.output/server/node_modules/@vue/reactivity/package.json +55 -0
  212. package/web/.output/server/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js +6940 -0
  213. package/web/.output/server/node_modules/@vue/runtime-core/package.json +52 -0
  214. package/web/.output/server/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js +1822 -0
  215. package/web/.output/server/node_modules/@vue/runtime-dom/package.json +60 -0
  216. package/web/.output/server/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js +896 -0
  217. package/web/.output/server/node_modules/@vue/server-renderer/package.json +55 -0
  218. package/web/.output/server/node_modules/@vue/shared/dist/shared.cjs.prod.js +604 -0
  219. package/web/.output/server/node_modules/@vue/shared/package.json +47 -0
  220. package/web/.output/server/node_modules/@vueuse/core/dist/index.js +8464 -0
  221. package/web/.output/server/node_modules/@vueuse/core/package.json +49 -0
  222. package/web/.output/server/node_modules/@vueuse/shared/dist/index.js +2013 -0
  223. package/web/.output/server/node_modules/@vueuse/shared/package.json +42 -0
  224. package/web/.output/server/node_modules/aria-hidden/dist/es5/index.js +174 -0
  225. package/web/.output/server/node_modules/aria-hidden/package.json +71 -0
  226. package/web/.output/server/node_modules/birpc/dist/index.mjs +291 -0
  227. package/web/.output/server/node_modules/birpc/package.json +57 -0
  228. package/web/.output/server/node_modules/consola/dist/chunks/prompt.mjs +280 -0
  229. package/web/.output/server/node_modules/consola/dist/core.mjs +512 -0
  230. package/web/.output/server/node_modules/consola/dist/index.mjs +651 -0
  231. package/web/.output/server/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs +72 -0
  232. package/web/.output/server/node_modules/consola/dist/shared/consola.DXBYu-KD.mjs +288 -0
  233. package/web/.output/server/node_modules/consola/package.json +136 -0
  234. package/web/.output/server/node_modules/devalue/index.js +4 -0
  235. package/web/.output/server/node_modules/devalue/package.json +40 -0
  236. package/web/.output/server/node_modules/devalue/src/base64.js +60 -0
  237. package/web/.output/server/node_modules/devalue/src/constants.js +12 -0
  238. package/web/.output/server/node_modules/devalue/src/parse.js +283 -0
  239. package/web/.output/server/node_modules/devalue/src/stringify.js +401 -0
  240. package/web/.output/server/node_modules/devalue/src/uneval.js +552 -0
  241. package/web/.output/server/node_modules/devalue/src/utils.js +160 -0
  242. package/web/.output/server/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
  243. package/web/.output/server/node_modules/entities/dist/commonjs/decode.js +568 -0
  244. package/web/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-html.js +7 -0
  245. package/web/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +7 -0
  246. package/web/.output/server/node_modules/entities/dist/commonjs/internal/bin-trie-flags.js +21 -0
  247. package/web/.output/server/node_modules/entities/dist/commonjs/internal/decode-shared.js +31 -0
  248. package/web/.output/server/node_modules/entities/dist/commonjs/package.json +3 -0
  249. package/web/.output/server/node_modules/entities/package.json +120 -0
  250. package/web/.output/server/node_modules/estree-walker/dist/umd/estree-walker.js +344 -0
  251. package/web/.output/server/node_modules/estree-walker/package.json +37 -0
  252. package/web/.output/server/node_modules/hookable/dist/index.mjs +257 -0
  253. package/web/.output/server/node_modules/hookable/package.json +53 -0
  254. package/web/.output/server/node_modules/nostics/dist/index.mjs +179 -0
  255. package/web/.output/server/node_modules/nostics/package.json +124 -0
  256. package/web/.output/server/node_modules/perfect-debounce/dist/index.mjs +89 -0
  257. package/web/.output/server/node_modules/perfect-debounce/package.json +41 -0
  258. package/web/.output/server/node_modules/rou3/dist/index.mjs +501 -0
  259. package/web/.output/server/node_modules/rou3/package.json +48 -0
  260. package/web/.output/server/node_modules/source-map-js/lib/array-set.js +121 -0
  261. package/web/.output/server/node_modules/source-map-js/lib/base64-vlq.js +140 -0
  262. package/web/.output/server/node_modules/source-map-js/lib/base64.js +67 -0
  263. package/web/.output/server/node_modules/source-map-js/lib/binary-search.js +111 -0
  264. package/web/.output/server/node_modules/source-map-js/lib/mapping-list.js +79 -0
  265. package/web/.output/server/node_modules/source-map-js/lib/quick-sort.js +132 -0
  266. package/web/.output/server/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
  267. package/web/.output/server/node_modules/source-map-js/lib/source-map-generator.js +444 -0
  268. package/web/.output/server/node_modules/source-map-js/lib/source-node.js +413 -0
  269. package/web/.output/server/node_modules/source-map-js/lib/util.js +594 -0
  270. package/web/.output/server/node_modules/source-map-js/package.json +71 -0
  271. package/web/.output/server/node_modules/source-map-js/source-map.js +8 -0
  272. package/web/.output/server/node_modules/srvx/dist/_chunks/_body-limit.mjs +39 -0
  273. package/web/.output/server/node_modules/srvx/dist/_chunks/_plugins.mjs +56 -0
  274. package/web/.output/server/node_modules/srvx/dist/_chunks/_trust-proxy.mjs +58 -0
  275. package/web/.output/server/node_modules/srvx/dist/_chunks/_url.mjs +134 -0
  276. package/web/.output/server/node_modules/srvx/dist/_chunks/_utils.mjs +15 -0
  277. package/web/.output/server/node_modules/srvx/dist/_chunks/_utils2.mjs +75 -0
  278. package/web/.output/server/node_modules/srvx/dist/adapters/node.mjs +976 -0
  279. package/web/.output/server/node_modules/srvx/package.json +102 -0
  280. package/web/.output/server/node_modules/tailwind-merge/dist/bundle-mjs.mjs +3365 -0
  281. package/web/.output/server/node_modules/tailwind-merge/package.json +93 -0
  282. package/web/.output/server/node_modules/tailwind-variants/dist/chunk-LQJYWU4O.js +112 -0
  283. package/web/.output/server/node_modules/tailwind-variants/dist/chunk-RZF76H2U.js +269 -0
  284. package/web/.output/server/node_modules/tailwind-variants/dist/index.js +38 -0
  285. package/web/.output/server/node_modules/tailwind-variants/package.json +122 -0
  286. package/web/.output/server/node_modules/tailwindcss/dist/chunk-X4GG3EDV.mjs +1 -0
  287. package/web/.output/server/node_modules/tailwindcss/dist/colors.mjs +1 -0
  288. package/web/.output/server/node_modules/tailwindcss/package.json +89 -0
  289. package/web/.output/server/node_modules/ufo/dist/index.mjs +645 -0
  290. package/web/.output/server/node_modules/ufo/package.json +48 -0
  291. package/web/.output/server/node_modules/unhead/dist/index.mjs +9 -0
  292. package/web/.output/server/node_modules/unhead/dist/parser.mjs +508 -0
  293. package/web/.output/server/node_modules/unhead/dist/plugins.mjs +101 -0
  294. package/web/.output/server/node_modules/unhead/dist/scripts.mjs +30 -0
  295. package/web/.output/server/node_modules/unhead/dist/server.mjs +180 -0
  296. package/web/.output/server/node_modules/unhead/dist/shared/unhead.B3VbJo7Y.mjs +207 -0
  297. package/web/.output/server/node_modules/unhead/dist/shared/unhead.BYvz9V1x.mjs +43 -0
  298. package/web/.output/server/node_modules/unhead/dist/shared/unhead.BnoAbrHA.mjs +269 -0
  299. package/web/.output/server/node_modules/unhead/dist/shared/unhead.CaI5ZD4O.mjs +182 -0
  300. package/web/.output/server/node_modules/unhead/dist/shared/unhead.CbpEuj3y.mjs +71 -0
  301. package/web/.output/server/node_modules/unhead/dist/shared/unhead.D4vSFytZ.mjs +236 -0
  302. package/web/.output/server/node_modules/unhead/dist/shared/unhead.DQc16pHI.mjs +196 -0
  303. package/web/.output/server/node_modules/unhead/dist/shared/unhead.Dh1cQCTe.mjs +44 -0
  304. package/web/.output/server/node_modules/unhead/dist/shared/unhead.TxTMM7cM.mjs +166 -0
  305. package/web/.output/server/node_modules/unhead/dist/shared/unhead.yem5I2v_.mjs +38 -0
  306. package/web/.output/server/node_modules/unhead/dist/utils.mjs +5 -0
  307. package/web/.output/server/node_modules/unhead/node_modules/hookable/dist/index.mjs +257 -0
  308. package/web/.output/server/node_modules/unhead/node_modules/hookable/package.json +53 -0
  309. package/web/.output/server/node_modules/unhead/package.json +105 -0
  310. package/web/.output/server/node_modules/vue/dist/vue.cjs.js +80 -0
  311. package/web/.output/server/node_modules/vue/dist/vue.cjs.prod.js +66 -0
  312. package/web/.output/server/node_modules/vue/index.js +7 -0
  313. package/web/.output/server/node_modules/vue/index.mjs +1 -0
  314. package/web/.output/server/node_modules/vue/package.json +112 -0
  315. package/web/.output/server/node_modules/vue/server-renderer/index.mjs +1 -0
  316. package/web/.output/server/node_modules/vue-bundle-renderer/dist/runtime.mjs +249 -0
  317. package/web/.output/server/node_modules/vue-bundle-renderer/package.json +57 -0
  318. package/web/.output/server/node_modules/vue-demi/lib/index.mjs +34 -0
  319. package/web/.output/server/node_modules/vue-demi/package.json +47 -0
  320. package/web/.output/server/node_modules/vue-router/dist/devtools-Bpr7ZAVB.js +1056 -0
  321. package/web/.output/server/node_modules/vue-router/dist/useApi-CROJJdhE.js +436 -0
  322. package/web/.output/server/node_modules/vue-router/dist/vue-router.js +1543 -0
  323. package/web/.output/server/node_modules/vue-router/package.json +214 -0
  324. package/web/.output/server/node_modules/vue-router/vue-router.node.mjs +2 -0
  325. package/web/.output/server/package.json +51 -0
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Shared filter model for renovate-log-parser.
3
+ *
4
+ * All three commands (detect-errors, analyze, web) describe the same kinds of
5
+ * filters. They are represented here as a small, closed set of primitives that
6
+ * the {@link QueryBuilder} translates into parameterized SQL. Filters are always
7
+ * AND'd together.
8
+ *
9
+ * Design decisions:
10
+ * - Only root-level JSON keys are addressable in v1 (`$.<key>`), though the
11
+ * helpers below already build JSON paths so nested support is a non-breaking
12
+ * extension later.
13
+ * - `equals` matches scalar (string/number/boolean) values only. Against a
14
+ * non-scalar value it simply does not match.
15
+ * - `like` is a simple, case-insensitive wildcard match on a single field
16
+ * where `*` (and only `*`) is a wildcard. It is translated to a SQLite
17
+ * `LIKE ... ESCAPE` comparison (see {@link globStarToLike}).
18
+ */
19
+ /**
20
+ * Build a SQLite JSON path for a root-level key.
21
+ *
22
+ * Uses `$."key"` quoting so keys containing dots, spaces or reserved characters
23
+ * (common in Renovate logs, e.g. datasource URLs used as keys) are handled
24
+ * safely. Embedded double quotes are escaped per the JSON path grammar.
25
+ */
26
+ export function jsonPath(field) {
27
+ const escaped = field.replace(/"/g, '""');
28
+ return `$."${escaped}"`;
29
+ }
30
+ /** SQL expression that extracts a root-level key from the `logentry` column. */
31
+ export function extractExpr(field, column = "logentry") {
32
+ return `json_extract(${column}, '${jsonPath(field)}')`;
33
+ }
34
+ /** Parse a `key:val` CLI filter token into an {@link EqualsFilter}. */
35
+ export function parseKeyValueFilter(token) {
36
+ const { field, value } = splitKeyValue(token);
37
+ return { type: "equals", field, value: coerceScalar(value) };
38
+ }
39
+ /**
40
+ * Parse a `key:pattern` CLI token into a {@link LikeFilter}, where `*` in the
41
+ * pattern is a wildcard (matching is case-insensitive; see {@link globStarToLike}).
42
+ */
43
+ export function parseWildcardFilter(token) {
44
+ const { field, value } = splitKeyValue(token);
45
+ return { type: "like", field, pattern: value };
46
+ }
47
+ /** Split a `key:value` token on its FIRST colon, validating a non-empty key. */
48
+ function splitKeyValue(token) {
49
+ const idx = token.indexOf(":");
50
+ if (idx === -1) {
51
+ throw new Error(`Invalid filter "${token}". Expected the form key:value (e.g. repository:foo/bar).`);
52
+ }
53
+ const field = token.slice(0, idx);
54
+ const value = token.slice(idx + 1);
55
+ if (field.length === 0) {
56
+ throw new Error(`Invalid filter "${token}". The key must not be empty.`);
57
+ }
58
+ return { field, value };
59
+ }
60
+ /**
61
+ * Translate a simple `*`-only user glob into a SQLite `LIKE` pattern.
62
+ *
63
+ * `LIKE`'s own metacharacters (`%`, `_`) and the escape character (`\`) are
64
+ * escaped so they match literally; then `*` is mapped to `%` (any run of
65
+ * characters). The resulting pattern must be used with `ESCAPE '\'`. Matching
66
+ * is anchored exactly as written — a leading/trailing `*` is required for
67
+ * prefix/suffix/contains behaviour.
68
+ */
69
+ export function globStarToLike(pattern) {
70
+ return pattern.replace(/[\\%_]/g, "\\$&").replace(/\*/g, "%");
71
+ }
72
+ /** Strict numeric literal: an integer or simple decimal, no leading zeros. */
73
+ const NUMERIC_LITERAL = /^-?(?:0|[1-9]\d*)(?:\.\d+)?$/;
74
+ /**
75
+ * Coerce a raw CLI string value to its scalar type so `equals` filters compare
76
+ * against the correctly-typed JSON value.
77
+ *
78
+ * Renovate stores many root fields as numbers (`level`, `pid`, `v`) or booleans,
79
+ * and SQLite never treats a numeric value as equal to a text value — so without
80
+ * this, `--filter level:30` would compare `30 = '30'` and never match.
81
+ *
82
+ * Coercion is deliberately conservative: only `true`/`false` and strict numeric
83
+ * literals are converted. Leading-zero (`007`) and dotted/version-like (`1.2.3`)
84
+ * values stay strings, since those are meaningful string identifiers.
85
+ */
86
+ export function coerceScalar(value) {
87
+ if (value === "true")
88
+ return true;
89
+ if (value === "false")
90
+ return false;
91
+ if (NUMERIC_LITERAL.test(value))
92
+ return Number(value);
93
+ return value;
94
+ }
95
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/core/filters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA+FH;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAgB;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,OAAO,MAAM,OAAO,GAAG,CAAC;AAC1B,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,WAAW,CAAC,KAAgB,EAAE,MAAM,GAAG,UAAU;IAC/D,OAAO,gBAAgB,MAAM,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AACzD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACjD,CAAC;AAED,gFAAgF;AAChF,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,mBAAmB,KAAK,2DAA2D,CACpF,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,+BAA+B,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAChE,CAAC;AAED,8EAA8E;AAC9E,MAAM,eAAe,GAAG,8BAA8B,CAAC;AAEvD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,52 @@
1
+ /** Default ignore-file location, resolved relative to the current directory. */
2
+ export declare const DEFAULT_IGNORE_FILE = "renovate-log-parser.ignore.json";
3
+ /** A single ignore rule as authored in the JSON file. */
4
+ export interface IgnoreRule {
5
+ /** Required finding category to silence (e.g. `err-object`). */
6
+ category: string;
7
+ /** Optional glob matched against `finding.message` (`*`/`?` wildcards). */
8
+ message?: string;
9
+ /** Optional exact `repository` match. */
10
+ repository?: string;
11
+ /** Optional human-facing justification (unused by matching). */
12
+ reason?: string;
13
+ /** Optional ISO date; once past, the rule is inactive. */
14
+ expires?: string;
15
+ }
16
+ /** On-disk ignore-file shape. */
17
+ export interface IgnoreFile {
18
+ version: number;
19
+ rules: IgnoreRule[];
20
+ }
21
+ /** The subset of a finding needed to evaluate ignore rules. */
22
+ export interface IgnorableFinding {
23
+ category: string;
24
+ message: string;
25
+ repository?: string;
26
+ }
27
+ /** Options controlling how the ignore file is loaded. */
28
+ export interface LoadIgnoreOptions {
29
+ /** Sink for non-fatal warnings (defaults to `console.error`). */
30
+ warn?: (message: string) => void;
31
+ /** Whether the path was explicitly supplied via `--ignore-file`. */
32
+ explicit?: boolean;
33
+ }
34
+ /**
35
+ * Load and validate the active ignore rules from a file.
36
+ *
37
+ * A missing file yields an empty rule set (missing file = no rules). Expired
38
+ * rules are dropped with a warning. A malformed file throws (surfaced by the
39
+ * caller as a tool/usage error).
40
+ */
41
+ export declare function loadIgnoreRules(path: string, options?: LoadIgnoreOptions): IgnoreRule[];
42
+ /**
43
+ * Return the first active rule that ignores the given finding, or `undefined`.
44
+ * All present rule fields must match; absent fields are wildcards.
45
+ */
46
+ export declare function matchIgnoreRule(finding: IgnorableFinding, rules: readonly IgnoreRule[]): IgnoreRule | undefined;
47
+ /**
48
+ * Compile a glob (`*` = any run, `?` = one char) into an anchored, case-
49
+ * sensitive RegExp — matching the case-sensitive `GLOB` semantics used
50
+ * elsewhere in the tool. All other characters are matched literally.
51
+ */
52
+ export declare function globToRegExp(glob: string): RegExp;
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Ignore-file support for `detect-errors`.
3
+ *
4
+ * Line numbers in a Renovate log shift as the log grows, so ignore rules key on
5
+ * stable attributes instead: a required `category`, plus optional `message`
6
+ * glob, optional exact `repository`, an optional human `reason`, and an optional
7
+ * `expires` ISO date. A finding is ignored iff an **active** rule matches on
8
+ * category AND (message glob, if present) AND (repository, if present).
9
+ *
10
+ * Expired rules (past `expires`) are inactive and reported to stderr on load, so
11
+ * a temporary silence surfaces again once its window closes.
12
+ */
13
+ import { existsSync, readFileSync } from "node:fs";
14
+ /** Default ignore-file location, resolved relative to the current directory. */
15
+ export const DEFAULT_IGNORE_FILE = "renovate-log-parser.ignore.json";
16
+ /**
17
+ * Load and validate the active ignore rules from a file.
18
+ *
19
+ * A missing file yields an empty rule set (missing file = no rules). Expired
20
+ * rules are dropped with a warning. A malformed file throws (surfaced by the
21
+ * caller as a tool/usage error).
22
+ */
23
+ export function loadIgnoreRules(path, options = {}) {
24
+ const warn = options.warn ?? ((m) => console.error(m));
25
+ if (!existsSync(path)) {
26
+ if (options.explicit) {
27
+ warn(`Ignore file not found (continuing with no rules): ${path}`);
28
+ }
29
+ return [];
30
+ }
31
+ let parsed;
32
+ try {
33
+ parsed = JSON.parse(readFileSync(path, "utf8"));
34
+ }
35
+ catch (err) {
36
+ throw new Error(`Failed to parse ignore file ${path}: ${err.message}`, { cause: err });
37
+ }
38
+ const file = parsed;
39
+ if (!file || typeof file !== "object" || !Array.isArray(file.rules)) {
40
+ throw new Error(`Invalid ignore file ${path}: expected an object with a "rules" array.`);
41
+ }
42
+ const now = Date.now();
43
+ const active = [];
44
+ for (const [index, raw] of file.rules.entries()) {
45
+ const rule = raw;
46
+ if (!rule || typeof rule.category !== "string" || rule.category === "") {
47
+ throw new Error(`Invalid ignore file ${path}: rule #${index} is missing a "category".`);
48
+ }
49
+ if (rule.expires !== undefined && isExpired(rule.expires, now)) {
50
+ warn(`Ignore rule for "${rule.category}" expired on ${rule.expires}; it is no longer active.`);
51
+ continue;
52
+ }
53
+ active.push({
54
+ category: rule.category,
55
+ message: rule.message,
56
+ repository: rule.repository,
57
+ reason: rule.reason,
58
+ expires: rule.expires,
59
+ });
60
+ }
61
+ return active;
62
+ }
63
+ /** True when `expires` is a valid date that lies in the past. */
64
+ function isExpired(expires, now) {
65
+ const ts = Date.parse(expires);
66
+ return !Number.isNaN(ts) && ts < now;
67
+ }
68
+ /**
69
+ * Return the first active rule that ignores the given finding, or `undefined`.
70
+ * All present rule fields must match; absent fields are wildcards.
71
+ */
72
+ export function matchIgnoreRule(finding, rules) {
73
+ return rules.find((rule) => {
74
+ if (rule.category !== finding.category)
75
+ return false;
76
+ if (rule.repository !== undefined &&
77
+ rule.repository !== finding.repository) {
78
+ return false;
79
+ }
80
+ if (rule.message !== undefined &&
81
+ !globToRegExp(rule.message).test(finding.message)) {
82
+ return false;
83
+ }
84
+ return true;
85
+ });
86
+ }
87
+ /**
88
+ * Compile a glob (`*` = any run, `?` = one char) into an anchored, case-
89
+ * sensitive RegExp — matching the case-sensitive `GLOB` semantics used
90
+ * elsewhere in the tool. All other characters are matched literally.
91
+ */
92
+ export function globToRegExp(glob) {
93
+ let out = "";
94
+ for (const ch of glob) {
95
+ if (ch === "*")
96
+ out += ".*";
97
+ else if (ch === "?")
98
+ out += ".";
99
+ else
100
+ out += ch.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
101
+ }
102
+ return new RegExp(`^${out}$`);
103
+ }
104
+ //# sourceMappingURL=ignore-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore-file.js","sourceRoot":"","sources":["../../src/core/ignore-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Renovate log level metadata: numeric level -> single-letter glyph + semantic
3
+ * color. Shared by the web UI (row glyphs) and any CLI text rendering.
4
+ *
5
+ * Colors are expressed as semantic tokens (not raw hex) so the web layer can
6
+ * map them onto Nuxt UI / Tailwind classes: info = green, warn = amber,
7
+ * error = red, fatal = red (filled),
8
+ * trace/debug = muted; unknown levels render their raw number.
9
+ */
10
+ /** Semantic color token for a log level. */
11
+ export type LevelColor = "muted" | "neutral" | "green" | "amber" | "red" | "red-filled";
12
+ /** Presentation metadata for a single Renovate log level. */
13
+ export interface LevelMeta {
14
+ /** Numeric level as emitted by Renovate (bunyan levels). */
15
+ level: number;
16
+ /** Human name (trace/debug/info/warn/error/fatal). */
17
+ name: string;
18
+ /** Single uppercase glyph shown in the UI. */
19
+ symbol: string;
20
+ /** Semantic color token. */
21
+ color: LevelColor;
22
+ }
23
+ /** All known Renovate log levels, keyed by numeric level. */
24
+ export declare const LEVELS: Readonly<Record<number, LevelMeta>>;
25
+ /** Levels considered build-breaking errors by `detect-errors`. */
26
+ export declare const ERROR_LEVELS: readonly number[];
27
+ /** The warn level surfaced as a (non-breaking) warning by `detect-errors`. */
28
+ export declare const WARN_LEVEL = 40;
29
+ /**
30
+ * Resolve presentation metadata for a level. Unknown/unexpected levels fall
31
+ * back to their raw number rendered in a muted color.
32
+ */
33
+ export declare function levelMeta(level: number): LevelMeta;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Renovate log level metadata: numeric level -> single-letter glyph + semantic
3
+ * color. Shared by the web UI (row glyphs) and any CLI text rendering.
4
+ *
5
+ * Colors are expressed as semantic tokens (not raw hex) so the web layer can
6
+ * map them onto Nuxt UI / Tailwind classes: info = green, warn = amber,
7
+ * error = red, fatal = red (filled),
8
+ * trace/debug = muted; unknown levels render their raw number.
9
+ */
10
+ /** All known Renovate log levels, keyed by numeric level. */
11
+ export const LEVELS = {
12
+ 10: { level: 10, name: "trace", symbol: "T", color: "muted" },
13
+ 20: { level: 20, name: "debug", symbol: "D", color: "neutral" },
14
+ 30: { level: 30, name: "info", symbol: "I", color: "green" },
15
+ 40: { level: 40, name: "warn", symbol: "W", color: "amber" },
16
+ 50: { level: 50, name: "error", symbol: "E", color: "red" },
17
+ 60: { level: 60, name: "fatal", symbol: "F", color: "red-filled" },
18
+ };
19
+ /** Levels considered build-breaking errors by `detect-errors`. */
20
+ export const ERROR_LEVELS = [50, 60];
21
+ /** The warn level surfaced as a (non-breaking) warning by `detect-errors`. */
22
+ export const WARN_LEVEL = 40;
23
+ /**
24
+ * Resolve presentation metadata for a level. Unknown/unexpected levels fall
25
+ * back to their raw number rendered in a muted color.
26
+ */
27
+ export function levelMeta(level) {
28
+ return (LEVELS[level] ?? {
29
+ level,
30
+ name: String(level),
31
+ symbol: String(level),
32
+ color: "muted",
33
+ });
34
+ }
35
+ //# sourceMappingURL=levels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levels.js","sourceRoot":"","sources":["../../src/core/levels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkBH,6DAA6D;AAC7D,MAAM,CAAC,MAAM,MAAM,GAAwC;IACzD,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;IAC7D,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;IAC/D,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;IAC5D,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;IAC5D,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;IAC3D,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE;CACnE,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,YAAY,GAAsB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAExD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,CACL,MAAM,CAAC,KAAK,CAAC,IAAI;QACf,KAAK;QACL,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;QACrB,KAAK,EAAE,OAAO;KACf,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { SqlParam } from "./query-builder.js";
2
+ /** Result of a successful {@link Parser.load}. */
3
+ export interface LoadResult {
4
+ /** Absolute path of the source log that was loaded. */
5
+ path: string;
6
+ /** md5 of the source file content (also the cache key). */
7
+ md5: string;
8
+ /** Absolute path of the backing SQLite cache file. */
9
+ dbPath: string;
10
+ /** Total number of log lines (rows) in the database. */
11
+ totalLines: number;
12
+ /** Whether an existing valid cache was reused (vs. freshly parsed). */
13
+ cached: boolean;
14
+ }
15
+ /** A synthetic entry stored for a line that was not valid JSON. */
16
+ export interface ParseErrorEntry {
17
+ _parseError: true;
18
+ _raw: string;
19
+ }
20
+ /** A synthetic entry stored for a blank line. */
21
+ export interface BlankEntry {
22
+ _blank: true;
23
+ }
24
+ export declare class Parser {
25
+ private db?;
26
+ private info?;
27
+ /** Metadata about the currently-loaded log, or `undefined` if none. */
28
+ get loaded(): LoadResult | undefined;
29
+ /** The open database handle. Throws if no log has been loaded. */
30
+ private requireDb;
31
+ /**
32
+ * Load a log file, reusing a valid cache when possible.
33
+ *
34
+ * @param absolutePath Absolute path to the Renovate JSONL log.
35
+ */
36
+ load(absolutePath: string): LoadResult;
37
+ /** Create the schema, insert every line in a transaction, then index. */
38
+ private build;
39
+ private countRows;
40
+ /**
41
+ * Run a SELECT statement and return rows as plain objects.
42
+ *
43
+ * @param sql A SELECT statement.
44
+ * @param params Bound parameters for `?` placeholders.
45
+ */
46
+ query<T = Record<string, unknown>>(sql: string, params?: readonly SqlParam[]): T[];
47
+ /**
48
+ * Run a SELECT that includes a `logentry` column and return each row's parsed
49
+ * JSON entry alongside its line number.
50
+ */
51
+ queryEntries<T = Record<string, unknown>>(sql: string, params?: readonly SqlParam[]): {
52
+ line: number;
53
+ entry: T;
54
+ }[];
55
+ /** Close the underlying database handle (idempotent). */
56
+ close(): void;
57
+ }
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Parser — loads a Renovate JSONL log into a cached SQLite database and answers
3
+ * SQL queries against it.
4
+ *
5
+ * Behaviour:
6
+ * - The cache key is the md5 of the file *content*, stored at
7
+ * `<os.tmpdir()>/renovate-log-parser-<md5>.db`. Identical logs at different
8
+ * paths share a cache; a changed file re-parses.
9
+ * - On every load, orphaned caches (zero rows — e.g. from a crashed parse) are
10
+ * deleted. Valid caches for other logs are preserved (no TTL/size cap).
11
+ * - The table has one JSON `logentry` column; `line` is an INTEGER PRIMARY KEY
12
+ * aliasing rowid and equal to the original 0-indexed file line number.
13
+ * - Parsing runs in a single transaction, so a crash leaves zero rows (which
14
+ * the orphan check then rebuilds) rather than a half-populated cache.
15
+ * - Malformed lines are stored as `{"_parseError":true,"_raw":"…"}`; blank
16
+ * lines as `{"_blank":true}`, keeping rowid == line number.
17
+ * - Expression indices back the hot filter fields (level/repository/branch and
18
+ * err-presence) so QueryBuilder-generated WHERE clauses stay fast.
19
+ */
20
+ import { DatabaseSync } from "node:sqlite";
21
+ import { createHash } from "node:crypto";
22
+ import { readFileSync, readdirSync, existsSync, rmSync } from "node:fs";
23
+ import { tmpdir } from "node:os";
24
+ import { join } from "node:path";
25
+ /** Prefix for cache database files in the temp directory. */
26
+ const DB_PREFIX = "renovate-log-parser-";
27
+ const DB_SUFFIX = ".db";
28
+ export class Parser {
29
+ db;
30
+ info;
31
+ /** Metadata about the currently-loaded log, or `undefined` if none. */
32
+ get loaded() {
33
+ return this.info;
34
+ }
35
+ /** The open database handle. Throws if no log has been loaded. */
36
+ requireDb() {
37
+ if (!this.db) {
38
+ throw new Error("No log loaded. Call load() first.");
39
+ }
40
+ return this.db;
41
+ }
42
+ /**
43
+ * Load a log file, reusing a valid cache when possible.
44
+ *
45
+ * @param absolutePath Absolute path to the Renovate JSONL log.
46
+ */
47
+ load(absolutePath) {
48
+ if (!existsSync(absolutePath)) {
49
+ throw new Error(`Log file not found: ${absolutePath}`);
50
+ }
51
+ const content = readFileSync(absolutePath);
52
+ const md5 = createHash("md5").update(content).digest("hex");
53
+ const dbPath = join(tmpdir(), `${DB_PREFIX}${md5}${DB_SUFFIX}`);
54
+ // Close any previously-opened handle before switching logs.
55
+ this.close();
56
+ // Remove orphaned (zero-row / invalid) caches across the temp dir.
57
+ cleanupOrphans();
58
+ if (existsSync(dbPath) && isValidCache(dbPath)) {
59
+ this.db = new DatabaseSync(dbPath);
60
+ const totalLines = this.countRows();
61
+ this.info = { path: absolutePath, md5, dbPath, totalLines, cached: true };
62
+ return this.info;
63
+ }
64
+ // (Re)build the cache from scratch.
65
+ if (existsSync(dbPath))
66
+ rmSync(dbPath, { force: true });
67
+ this.db = new DatabaseSync(dbPath);
68
+ const totalLines = this.build(content.toString("utf8"));
69
+ this.info = { path: absolutePath, md5, dbPath, totalLines, cached: false };
70
+ return this.info;
71
+ }
72
+ /** Create the schema, insert every line in a transaction, then index. */
73
+ build(raw) {
74
+ const db = this.requireDb();
75
+ db.exec("CREATE TABLE logs (line INTEGER PRIMARY KEY, logentry TEXT NOT NULL)");
76
+ const lines = splitLines(raw);
77
+ const insert = db.prepare("INSERT INTO logs (line, logentry) VALUES (?, ?)");
78
+ db.exec("BEGIN");
79
+ try {
80
+ for (const [i, line] of lines.entries()) {
81
+ insert.run(i, normalizeLine(line));
82
+ }
83
+ db.exec("COMMIT");
84
+ }
85
+ catch (err) {
86
+ db.exec("ROLLBACK");
87
+ throw err;
88
+ }
89
+ // Expression indices matching QueryBuilder's json_extract expressions.
90
+ db.exec("CREATE INDEX idx_level ON logs (json_extract(logentry, '$.level'))");
91
+ db.exec(`CREATE INDEX idx_repository ON logs (json_extract(logentry, '$.repository'))`);
92
+ db.exec("CREATE INDEX idx_branch ON logs (json_extract(logentry, '$.branch'))");
93
+ db.exec("CREATE INDEX idx_err ON logs (json_extract(logentry, '$.err')) WHERE json_extract(logentry, '$.err') IS NOT NULL");
94
+ return lines.length;
95
+ }
96
+ countRows() {
97
+ const row = this.requireDb()
98
+ .prepare("SELECT COUNT(*) AS n FROM logs")
99
+ .get();
100
+ return row.n;
101
+ }
102
+ /**
103
+ * Run a SELECT statement and return rows as plain objects.
104
+ *
105
+ * @param sql A SELECT statement.
106
+ * @param params Bound parameters for `?` placeholders.
107
+ */
108
+ query(sql, params = []) {
109
+ const stmt = this.requireDb().prepare(sql);
110
+ const rows = stmt.all(...params);
111
+ // node:sqlite returns null-prototype objects; normalize to plain objects.
112
+ return rows.map((r) => ({ ...r }));
113
+ }
114
+ /**
115
+ * Run a SELECT that includes a `logentry` column and return each row's parsed
116
+ * JSON entry alongside its line number.
117
+ */
118
+ queryEntries(sql, params = []) {
119
+ return this.query(sql, params).map((r) => ({ line: r.line, entry: JSON.parse(r.logentry) }));
120
+ }
121
+ /** Close the underlying database handle (idempotent). */
122
+ close() {
123
+ if (this.db) {
124
+ this.db.close();
125
+ this.db = undefined;
126
+ this.info = undefined;
127
+ }
128
+ }
129
+ }
130
+ /**
131
+ * Split raw file content into lines matching `wc -l` semantics: a single
132
+ * trailing newline does not produce an extra empty line.
133
+ */
134
+ function splitLines(raw) {
135
+ const lines = raw.split("\n");
136
+ if (lines.length > 0 && lines[lines.length - 1] === "") {
137
+ lines.pop();
138
+ }
139
+ return lines;
140
+ }
141
+ /** Map one source line to the JSON text stored in the `logentry` column. */
142
+ function normalizeLine(line) {
143
+ const trimmed = line.endsWith("\r") ? line.slice(0, -1) : line;
144
+ if (trimmed.trim().length === 0) {
145
+ return JSON.stringify({ _blank: true });
146
+ }
147
+ try {
148
+ JSON.parse(trimmed);
149
+ // Valid JSON: store as-is to preserve exact content.
150
+ return trimmed;
151
+ }
152
+ catch {
153
+ return JSON.stringify({
154
+ _parseError: true,
155
+ _raw: trimmed,
156
+ });
157
+ }
158
+ }
159
+ /** A cache is valid if it has a `logs` table containing at least one row. */
160
+ function isValidCache(dbPath) {
161
+ let db;
162
+ try {
163
+ db = new DatabaseSync(dbPath, { readOnly: true });
164
+ const row = db.prepare("SELECT COUNT(*) AS n FROM logs").get();
165
+ return row.n > 0;
166
+ }
167
+ catch {
168
+ return false;
169
+ }
170
+ finally {
171
+ db?.close();
172
+ }
173
+ }
174
+ /**
175
+ * Delete orphaned cache files (missing/empty `logs` table) from the temp dir.
176
+ * A currently-targeted cache that is invalid is removed here and rebuilt by the
177
+ * caller; valid caches (including for other logs) are preserved.
178
+ */
179
+ function cleanupOrphans() {
180
+ let entries;
181
+ try {
182
+ entries = readdirSync(tmpdir());
183
+ }
184
+ catch {
185
+ return;
186
+ }
187
+ for (const name of entries) {
188
+ if (!name.startsWith(DB_PREFIX) || !name.endsWith(DB_SUFFIX))
189
+ continue;
190
+ const full = join(tmpdir(), name);
191
+ if (!isValidCache(full)) {
192
+ try {
193
+ rmSync(full, { force: true });
194
+ }
195
+ catch {
196
+ // Best-effort cleanup; ignore files we cannot remove.
197
+ }
198
+ }
199
+ }
200
+ }
201
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * QueryBuilder — translates the shared {@link Filter} model into a single
3
+ * parameterized SQL SELECT against the parser's `logs` table.
4
+ *
5
+ * All filters are AND'd. WHERE
6
+ * fragments reuse the exact `json_extract(...)` expressions that the parser
7
+ * indexes, so the query planner can use those expression indices.
8
+ *
9
+ * The builder never interpolates user values into SQL text; every value is a
10
+ * bound parameter. Wildcard (`like`) filters compare a single field with a
11
+ * case-insensitive SQLite `LIKE ... ESCAPE`; the `*`-to-`%` translation
12
+ * and escaping happen in {@link globStarToLike}.
13
+ */
14
+ import { type Filter } from "./filters.js";
15
+ /** A parameter bound into a prepared statement. */
16
+ export type SqlParam = string | number | bigint | null | Uint8Array;
17
+ /** A fully-built, parameterized query ready for {@link Parser.query}. */
18
+ export interface BuiltQuery {
19
+ sql: string;
20
+ params: SqlParam[];
21
+ }
22
+ /** Options that shape the SELECT independent of row-matching filters. */
23
+ export interface QueryOptions {
24
+ /** Restrict to rows with rowid >= this (original 0-indexed line). */
25
+ lineFrom?: number;
26
+ /** Restrict to rows with rowid <= this (original 0-indexed line). */
27
+ lineTo?: number;
28
+ /** Maximum number of rows to return. */
29
+ limit?: number;
30
+ /** Number of matching rows to skip (for pagination). */
31
+ offset?: number;
32
+ /** Sort direction by rowid (line order). Defaults to ascending. */
33
+ order?: "asc" | "desc";
34
+ }
35
+ /**
36
+ * Build a parameterized SELECT for the given filters and options.
37
+ *
38
+ * @param filters Row-matching filters, AND'd together.
39
+ * @param options Line range, ordering, and pagination.
40
+ * @param columns SELECT list. Defaults to `rowid, logentry`.
41
+ */
42
+ export declare function buildQuery(filters?: readonly Filter[], options?: QueryOptions, columns?: string): BuiltQuery;
43
+ /**
44
+ * Build a `SELECT COUNT(*)` for the given filters (ignores pagination/order),
45
+ * used by the web `total` count.
46
+ */
47
+ export declare function buildCountQuery(filters?: readonly Filter[], options?: Pick<QueryOptions, "lineFrom" | "lineTo">): BuiltQuery;