renovate-log-parser 0.2.0 → 0.3.1

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 (44) hide show
  1. package/README.md +208 -233
  2. package/dist/core/error-detector.d.ts +1 -1
  3. package/dist/core/error-detector.js +42 -2
  4. package/dist/core/error-detector.js.map +1 -1
  5. package/dist/core/skill-template.js +4 -0
  6. package/dist/core/skill-template.js.map +1 -1
  7. package/dist/server/api.d.ts +5 -4
  8. package/dist/server/api.js +59 -26
  9. package/dist/server/api.js.map +1 -1
  10. package/dist/server/log-registry.d.ts +17 -8
  11. package/dist/server/log-registry.js +44 -36
  12. package/dist/server/log-registry.js.map +1 -1
  13. package/package.json +7 -7
  14. package/web/.output/public/200.html +1 -1
  15. package/web/.output/public/404.html +1 -1
  16. package/web/.output/public/_nuxt/B2NJyQVk.js +3 -0
  17. package/web/.output/public/_nuxt/BLVSJtj1.js +3 -0
  18. package/web/.output/public/_nuxt/{CuOsDQlp.js → BPOwRMFI.js} +1 -1
  19. package/web/.output/public/_nuxt/BfI3t2es.js +1 -0
  20. package/web/.output/public/_nuxt/BtH4NLYu.js +2 -0
  21. package/web/.output/public/_nuxt/C66Rx7V7.js +1 -0
  22. package/web/.output/public/_nuxt/CY4Exyhk.js +1 -0
  23. package/web/.output/public/_nuxt/CaSpoKOZ.js +1 -0
  24. package/web/.output/public/_nuxt/DOmDanju.js +6 -0
  25. package/web/.output/public/_nuxt/builds/latest.json +1 -1
  26. package/web/.output/public/_nuxt/builds/meta/c947ec51-c0bb-45f2-94cf-2733560893f7.json +1 -0
  27. package/web/.output/public/_nuxt/catE3Uxr.js +28 -0
  28. package/web/.output/public/_nuxt/entry.COD7m2gp.css +2 -0
  29. package/web/.output/public/_nuxt/error-404.CuDiJL15.css +1 -0
  30. package/web/.output/public/_nuxt/error-500.DGjUVt8F.css +1 -0
  31. package/web/.output/public/index.html +1 -1
  32. package/web/.output/public/_nuxt/BjDV6v2h.js +0 -1
  33. package/web/.output/public/_nuxt/CVlqYHPc.js +0 -6
  34. package/web/.output/public/_nuxt/CztOM3Aq.js +0 -28
  35. package/web/.output/public/_nuxt/D3wuHpM_.js +0 -3
  36. package/web/.output/public/_nuxt/DUXEQ2Eh.js +0 -3
  37. package/web/.output/public/_nuxt/DVWtRbHb.js +0 -1
  38. package/web/.output/public/_nuxt/DeS15jQo.js +0 -1
  39. package/web/.output/public/_nuxt/XP9RigIT.js +0 -1
  40. package/web/.output/public/_nuxt/builds/meta/f68582c9-55a9-4352-b85a-d7f8de6f7202.json +0 -1
  41. package/web/.output/public/_nuxt/entry.BlZrUrUl.css +0 -2
  42. package/web/.output/public/_nuxt/error-404.zKZBzOko.css +0 -1
  43. package/web/.output/public/_nuxt/error-500.DwXcJPfY.css +0 -1
  44. package/web/.output/public/_nuxt/lGYp6_9X.js +0 -1
@@ -1,7 +1,7 @@
1
1
  import type { Parser } from "./parser.js";
2
2
  import { type IgnoreRule } from "./ignore-file.js";
3
3
  /** Ordered list of every known finding category (drives the `counts` map). */
4
- export declare const CATEGORIES: readonly ["host-error-abort", "log-warn", "log-error", "log-fatal", "err-object", "config-migration", "abandoned-package", "repo-problem"];
4
+ export declare const CATEGORIES: readonly ["host-error-abort", "log-warn", "log-error", "log-fatal", "err-object", "config-migration", "invalid-config", "abandoned-package", "repo-problem"];
5
5
  /** A finding category. */
6
6
  export type Category = (typeof CATEGORIES)[number];
7
7
  /** Finding severity. */
@@ -15,8 +15,8 @@
15
15
  *
16
16
  * The error/warning split is scoped to problems Renovate would *not* otherwise
17
17
  * surface in a PR comment: `host-error-abort`, `log-error`, `log-fatal`,
18
- * `config-migration`, and `abandoned-package` are errors (exit 1); `log-warn`,
19
- * `err-object`, and `repo-problem` are warnings.
18
+ * `config-migration`, `invalid-config`, and `abandoned-package` are errors
19
+ * (exit 1); `log-warn`, `err-object`, and `repo-problem` are warnings.
20
20
  */
21
21
  import { ERROR_LEVELS, WARN_LEVEL } from "./levels.js";
22
22
  import { matchIgnoreRule } from "./ignore-file.js";
@@ -29,6 +29,7 @@ export const CATEGORIES = [
29
29
  "log-fatal",
30
30
  "err-object",
31
31
  "config-migration",
32
+ "invalid-config",
32
33
  "abandoned-package",
33
34
  "repo-problem",
34
35
  ];
@@ -40,6 +41,7 @@ export const SEVERITY = {
40
41
  "log-fatal": "error",
41
42
  "err-object": "warning",
42
43
  "config-migration": "error",
44
+ "invalid-config": "error",
43
45
  "abandoned-package": "error",
44
46
  "repo-problem": "warning",
45
47
  };
@@ -49,6 +51,13 @@ const REPOSITORY_FINISHED_MSG = "Repository finished";
49
51
  const HOST_ERROR_RESULT = "external-host-error";
50
52
  /** The exact `msg` that marks a required config migration. */
51
53
  const CONFIG_MIGRATION_MSG = "Config migration necessary";
54
+ /**
55
+ * The exact `msg` Renovate logs when a repository's own Renovate config could
56
+ * not be used — either because the file is not parseable, or because it parses
57
+ * but fails schema validation. Both cases abort the repository during `init`,
58
+ * so nothing is extracted, looked up or updated.
59
+ */
60
+ const INVALID_CONFIG_MSG = "Repository has invalid config";
52
61
  /** The exact `msg` that carries abandoned-package statistics. */
53
62
  const ABANDONED_PACKAGE_MSG = "Abandoned package statistics";
54
63
  /**
@@ -80,6 +89,7 @@ export class ErrorDetector {
80
89
  values: [
81
90
  REPOSITORY_FINISHED_MSG,
82
91
  CONFIG_MIGRATION_MSG,
92
+ INVALID_CONFIG_MSG,
83
93
  ABANDONED_PACKAGE_MSG,
84
94
  ],
85
95
  },
@@ -193,6 +203,11 @@ function collectFindings(entry, line, warnLogMessages, findings) {
193
203
  entry.newConfig !== undefined) {
194
204
  push("config-migration", msg, { keys: ["oldConfig", "newConfig"] });
195
205
  }
206
+ // invalid-config — the repository's Renovate config could not be parsed or
207
+ // validated, so the run aborted during `init` without doing any work.
208
+ if (msg === INVALID_CONFIG_MSG) {
209
+ push("invalid-config", msg, validationDetails(entry));
210
+ }
196
211
  // abandoned-package — one finding per package, keyed as `datasource:package`.
197
212
  // The entry carries datasource-named objects (e.g. `npm`, `crate`) mapping a
198
213
  // package name to its last-update timestamp; string/number metadata fields are
@@ -233,4 +248,29 @@ function errDetails(entry) {
233
248
  }
234
249
  return undefined;
235
250
  }
251
+ /**
252
+ * Lift the config-validation fields off an entry's `err` object.
253
+ *
254
+ * Only the three `validation*` fields are kept, deliberately: they name the
255
+ * offending file and say what is wrong with it, which is the actionable part.
256
+ * The full `err` (including its multi-line `stack`) is already carried by the
257
+ * `err-object` finding produced for the very same line.
258
+ */
259
+ function validationDetails(entry) {
260
+ const err = entry.err;
261
+ if (err === null || typeof err !== "object" || Array.isArray(err)) {
262
+ return undefined;
263
+ }
264
+ const details = {};
265
+ for (const field of [
266
+ "validationSource",
267
+ "validationError",
268
+ "validationMessage",
269
+ ]) {
270
+ const value = err[field];
271
+ if (typeof value === "string")
272
+ details[field] = value;
273
+ }
274
+ return Object.keys(details).length > 0 ? details : undefined;
275
+ }
236
276
  //# sourceMappingURL=error-detector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-detector.js","sourceRoot":"","sources":["../../src/core/error-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"error-detector.js","sourceRoot":"","sources":["../../src/core/error-detector.ts"],"names":[],"mappings":"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"}
@@ -215,6 +215,10 @@ npx --yes renovate-log-parser detect-errors <path-to-log.jsonl>
215
215
  - \`log-fatal\`: lines with fatal level (\`level=60\`)
216
216
  - \`config-migration\`: when a repository needs a renovate.json migration; looks for a
217
217
  \`Config migration necessary\` entry carrying \`oldConfig\` + \`newConfig\`
218
+ - \`invalid-config\`: when a repository's own Renovate config could not be parsed or
219
+ failed validation, so the run aborted before extracting anything; looks for a
220
+ \`Repository has invalid config\` entry, whose \`err\` names the offending file
221
+ (\`validationSource\`) and the reason (\`validationError\`, \`validationMessage\`)
218
222
  - \`abandoned-package\`: when a repository contains one or more abandoned packages for
219
223
  which Renovate would not create a PR; reports one finding per package in an
220
224
  \`Abandoned package statistics\` entry
@@ -1 +1 @@
1
- {"version":3,"file":"skill-template.js","sourceRoot":"","sources":["../../src/core/skill-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoBH,2EAA2E;AAC3E,MAAM,WAAW,GACf,wEAAwE;IACxE,0EAA0E;IAC1E,0EAA0E;IAC1E,2DAA2D,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAgC,EAAE;IACnE,MAAM,QAAQ,GAAa;QACzB,WAAW,EAAE;QACb,OAAO,EAAE;QACT,QAAQ,EAAE;QACV,UAAU,EAAE;QACZ,SAAS,EAAE;QACX,WAAW,EAAE;QACb,aAAa,EAAE;QACf,SAAS,EAAE;QACX,QAAQ,EAAE;QACV,YAAY,EAAE;KACf,CAAC;IAEF,IAAI,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvD,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;AACxD,CAAC;AAED,8BAA8B;AAC9B,SAAS,WAAW;IAClB,OAAO;;eAEM,WAAW;;;CAGzB,CAAC;AACF,CAAC;AAED,SAAS,OAAO;IACd,OAAO;;;;;;;;;;;CAWR,CAAC;AACF,CAAC;AAED,SAAS,QAAQ;IACf,OAAO;;;;;;;;;;;;;;;;;;CAkBR,CAAC;AACF,CAAC;AAED,SAAS,UAAU;IACjB,OAAO;;;;;;;;;;;;;;;;;;CAkBR,CAAC;AACF,CAAC;AAED,SAAS,SAAS;IAChB,OAAO;;;;;;;;;;;;;;;;;CAiBR,CAAC;AACF,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;CAuBR,CAAC;AACF,CAAC;AAED,SAAS,aAAa;IACpB,OAAO;;;;;;;CAOR,CAAC;AACF,CAAC;AAED,SAAS,SAAS;IAChB,OAAO;;;;;;;;;;;;;;;;;;CAkBR,CAAC;AACF,CAAC;AAED,SAAS,QAAQ;IACf,OAAO;;;;;;;;;;;;CAYR,CAAC;AACF,CAAC;AAED,SAAS,YAAY;IACnB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BR,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,EAAY;IAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI;QACnB,CAAC,CAAC,uDAAuD,IAAI,eAAe;YAC1E,6CAA6C,IAAI,0BAA0B;YAC3E,8BAA8B,IAAI,WAAW;QAC/C,CAAC,CAAC,uDAAuD,CAAC;IAE5D,OAAO;;yBAEgB,OAAO,2BAA2B,EAAE,CAAC,QAAQ;0DACZ,QAAQ;;;;KAI7D,MAAM,0BAA0B,EAAE,CAAC,QAAQ,OAAO,OAAO;;;;KAIzD,MAAM,+BAA+B,OAAO;;;;OAI1C,MAAM,2BAA2B,OAAO;;;;;;CAM9C,CAAC;AACF,CAAC;AAED,SAAS,IAAI;IACX,OAAO;;;;;;;CAOR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"skill-template.js","sourceRoot":"","sources":["../../src/core/skill-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoBH,2EAA2E;AAC3E,MAAM,WAAW,GACf,wEAAwE;IACxE,0EAA0E;IAC1E,0EAA0E;IAC1E,2DAA2D,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAgC,EAAE;IACnE,MAAM,QAAQ,GAAa;QACzB,WAAW,EAAE;QACb,OAAO,EAAE;QACT,QAAQ,EAAE;QACV,UAAU,EAAE;QACZ,SAAS,EAAE;QACX,WAAW,EAAE;QACb,aAAa,EAAE;QACf,SAAS,EAAE;QACX,QAAQ,EAAE;QACV,YAAY,EAAE;KACf,CAAC;IAEF,IAAI,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvD,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;AACxD,CAAC;AAED,8BAA8B;AAC9B,SAAS,WAAW;IAClB,OAAO;;eAEM,WAAW;;;CAGzB,CAAC;AACF,CAAC;AAED,SAAS,OAAO;IACd,OAAO;;;;;;;;;;;CAWR,CAAC;AACF,CAAC;AAED,SAAS,QAAQ;IACf,OAAO;;;;;;;;;;;;;;;;;;CAkBR,CAAC;AACF,CAAC;AAED,SAAS,UAAU;IACjB,OAAO;;;;;;;;;;;;;;;;;;CAkBR,CAAC;AACF,CAAC;AAED,SAAS,SAAS;IAChB,OAAO;;;;;;;;;;;;;;;;;CAiBR,CAAC;AACF,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;CAuBR,CAAC;AACF,CAAC;AAED,SAAS,aAAa;IACpB,OAAO;;;;;;;CAOR,CAAC;AACF,CAAC;AAED,SAAS,SAAS;IAChB,OAAO;;;;;;;;;;;;;;;;;;CAkBR,CAAC;AACF,CAAC;AAED,SAAS,QAAQ;IACf,OAAO;;;;;;;;;;;;CAYR,CAAC;AACF,CAAC;AAED,SAAS,YAAY;IACnB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BR,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,EAAY;IAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI;QACnB,CAAC,CAAC,uDAAuD,IAAI,eAAe;YAC1E,6CAA6C,IAAI,0BAA0B;YAC3E,8BAA8B,IAAI,WAAW;QAC/C,CAAC,CAAC,uDAAuD,CAAC;IAE5D,OAAO;;yBAEgB,OAAO,2BAA2B,EAAE,CAAC,QAAQ;0DACZ,QAAQ;;;;KAI7D,MAAM,0BAA0B,EAAE,CAAC,QAAQ,OAAO,OAAO;;;;KAIzD,MAAM,+BAA+B,OAAO;;;;OAI1C,MAAM,2BAA2B,OAAO;;;;;;CAM9C,CAAC;AACF,CAAC;AAED,SAAS,IAAI;IACX,OAAO;;;;;;;CAOR,CAAC;AACF,CAAC"}
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * The `/api` Express router — the whole web backend.
3
3
  *
4
- * Every route operates on the process-wide "current log" held by the
5
- * {@link ./log-registry.js log registry}; the two POST routes are what make a
6
- * log current. Handlers throw {@link HttpError}s, which {@link apiErrorHandler}
7
- * renders as JSON.
4
+ * The reads are stateless: every GET names the log it operates on with a
5
+ * required `md5` parameter, resolved against the
6
+ * {@link ./log-registry.js log registry}. The two POST routes are what put a log
7
+ * in that registry and hand its md5 back to the client. Handlers throw
8
+ * {@link HttpError}s, which {@link apiErrorHandler} renders as JSON.
8
9
  */
9
10
  import { Router, type NextFunction, type Request, type Response } from "express";
10
11
  /** Build the API router. */
@@ -1,16 +1,17 @@
1
1
  /**
2
2
  * The `/api` Express router — the whole web backend.
3
3
  *
4
- * Every route operates on the process-wide "current log" held by the
5
- * {@link ./log-registry.js log registry}; the two POST routes are what make a
6
- * log current. Handlers throw {@link HttpError}s, which {@link apiErrorHandler}
7
- * renders as JSON.
4
+ * The reads are stateless: every GET names the log it operates on with a
5
+ * required `md5` parameter, resolved against the
6
+ * {@link ./log-registry.js log registry}. The two POST routes are what put a log
7
+ * in that registry and hand its md5 back to the client. Handlers throw
8
+ * {@link HttpError}s, which {@link apiErrorHandler} renders as JSON.
8
9
  */
9
10
  import express, { Router, } from "express";
10
11
  import { buildQuery, buildCountQuery } from "../core/query-builder.js";
11
12
  import { extractExpr } from "../core/filters.js";
12
13
  import { createError, HttpError } from "./http-error.js";
13
- import { loadLogFromBytes, loadLogFromPath, requireCurrentFindings, requireCurrentParser, } from "./log-registry.js";
14
+ import { getFindings, getLogInfo, getParser, loadLogFromBytes, loadLogFromPath, } from "./log-registry.js";
14
15
  import { parseFilterWire, translateFilters } from "./translate-filters.js";
15
16
  /** Default page size for `GET /api/rows` when the client omits a limit. */
16
17
  const DEFAULT_LIMIT = 100;
@@ -20,12 +21,12 @@ const MAX_UPLOAD_SIZE = "2gb";
20
21
  export function createApiRouter() {
21
22
  const router = Router();
22
23
  /**
23
- * GET /api/fields — the distinct set of root-level JSON keys across the
24
- * current log. Powers the "ignored fields" checkboxes in the UI. The
24
+ * GET /api/fields — the distinct set of root-level JSON keys across the log
25
+ * named by `md5`. Powers the "ignored fields" checkboxes in the UI. The
25
26
  * synthetic keys the Parser uses for blank / malformed lines are excluded.
26
27
  */
27
- router.get("/fields", (_req, res) => {
28
- const parser = requireCurrentParser();
28
+ router.get("/fields", (req, res) => {
29
+ const parser = getParser(requireMd5(req));
29
30
  const rows = parser.query("SELECT DISTINCT je.key AS key FROM logs, json_each(logs.logentry) AS je");
30
31
  const synthetic = new Set(["_blank", "_parseError", "_raw"]);
31
32
  res.json(rows
@@ -34,28 +35,28 @@ export function createApiRouter() {
34
35
  .sort());
35
36
  });
36
37
  /**
37
- * GET /api/repositories — the distinct `repository` values across the current
38
- * log, excluding git-URL sub-repos (e.g. pre-commit hooks) whose `repository`
39
- * is an `https://…` URL rather than an `owner/repo` slug — these aren't real
40
- * repos and just clutter the dropdown (mirrors the exclusion in
38
+ * GET /api/repositories — the distinct `repository` values across the log
39
+ * named by `md5`, excluding git-URL sub-repos (e.g. pre-commit hooks) whose
40
+ * `repository` is an `https://…` URL rather than an `owner/repo` slug — these
41
+ * aren't real repos and just clutter the dropdown (mirrors the exclusion in
41
42
  * `analyzer.ts`'s per-repo stats). The UI adds a "Repository-independent"
42
43
  * pseudo-entry for entries with no `repository` — that is not returned here.
43
44
  */
44
- router.get("/repositories", (_req, res) => {
45
- const parser = requireCurrentParser();
45
+ router.get("/repositories", (req, res) => {
46
+ const parser = getParser(requireMd5(req));
46
47
  const expr = extractExpr("repository");
47
48
  const rows = parser.query(`SELECT DISTINCT ${expr} AS repo FROM logs WHERE ${expr} IS NOT NULL ORDER BY repo`);
48
49
  res.json(rows.map((r) => r.repo).filter((repo) => !repo.startsWith("https://")));
49
50
  });
50
51
  /**
51
- * GET /api/findings — the error-detector report for the current log.
52
+ * GET /api/findings — the error-detector report for the log named by `md5`.
52
53
  *
53
54
  * Per-finding `details` are stripped: the Problems panel only needs
54
55
  * category/severity/message/line/repo, and the full entry is already reachable
55
56
  * via `GET /api/rows` + the details slide-over.
56
57
  */
57
- router.get("/findings", (_req, res) => {
58
- const report = requireCurrentFindings();
58
+ router.get("/findings", (req, res) => {
59
+ const report = getFindings(requireMd5(req));
59
60
  const findings = report.findings.map(
60
61
  // eslint-disable-next-line @typescript-eslint/no-unused-vars -- drop `details` from the wire payload
61
62
  ({ details, ...rest }) => rest);
@@ -66,8 +67,9 @@ export function createApiRouter() {
66
67
  });
67
68
  });
68
69
  /**
69
- * GET /api/rows — the paginated, filtered row feed for the current log.
70
+ * GET /api/rows — the paginated, filtered row feed for a log.
70
71
  * Query params:
72
+ * - `md5` : which loaded log to read (required)
71
73
  * - `filters` : URL-encoded JSON of the reactive filter object (optional)
72
74
  * - `offset` : rows to skip (default 0)
73
75
  * - `limit` : max rows to return (default 100)
@@ -78,7 +80,7 @@ export function createApiRouter() {
78
80
  * so the client can drive virtualization.
79
81
  */
80
82
  router.get("/rows", (req, res) => {
81
- const parser = requireCurrentParser();
83
+ const parser = getParser(requireMd5(req));
82
84
  const wire = parseFilterWire(queryParam(req, "filters"));
83
85
  const { filters, ignoredFields } = translateFilters(wire);
84
86
  const offset = Math.max(0, parseIntParam(queryParam(req, "offset"), 0));
@@ -92,9 +94,23 @@ export function createApiRouter() {
92
94
  res.json({ total, offset, limit, rows });
93
95
  });
94
96
  /**
95
- * POST /api/log/path — load a log from an absolute local path and make it the
96
- * current log. Body: `{ "path": "<absolute>" }`. Blocks until the log is
97
- * parsed (or a valid cache is reused). Returns the load metadata.
97
+ * GET /api/log/:md5the load metadata for an already-loaded log.
98
+ *
99
+ * Lets a tab that only remembers an md5 (it keeps one in its URL) restore
100
+ * itself after a reload without re-uploading the file. 404s once the server
101
+ * has restarted, which the client treats as "no log open".
102
+ *
103
+ * Declared before the POST routes for readability only — Express matches on
104
+ * method first, so `:md5` cannot shadow `/log/path` or `/log/contents`.
105
+ */
106
+ router.get("/log/:md5", (req, res) => {
107
+ res.json(getLogInfo(req.params.md5));
108
+ });
109
+ /**
110
+ * POST /api/log/path — load a log from an absolute local path and register
111
+ * it. Body: `{ "path": "<absolute>" }`. Blocks until the log is parsed (or a
112
+ * valid cache is reused). Returns the load metadata, whose `md5` the client
113
+ * then passes to every GET.
98
114
  *
99
115
  * This reads any local absolute path unrestricted — the tool is a local,
100
116
  * single-user utility.
@@ -110,9 +126,11 @@ export function createApiRouter() {
110
126
  res.json(loadLogFromPath(path));
111
127
  });
112
128
  /**
113
- * POST /api/log/contents — load a log from uploaded bytes (file picker). The
114
- * bytes are written to a temp file named by their md5, which becomes the log's
115
- * `path`. The file contents are sent as the raw request body.
129
+ * POST /api/log/contents — load a log from uploaded bytes (file picker) and
130
+ * register it. The bytes are written to a temp file named by their md5, which
131
+ * becomes the log's `path`. The file contents are sent as the raw request
132
+ * body. Returns the load metadata, whose `md5` the client then passes to every
133
+ * GET.
116
134
  */
117
135
  router.post("/log/contents", express.raw({ type: () => true, limit: MAX_UPLOAD_SIZE }), (req, res) => {
118
136
  const bytes = Buffer.isBuffer(req.body) ? req.body : Buffer.alloc(0);
@@ -163,6 +181,21 @@ function queryParam(req, name) {
163
181
  const value = req.query[name];
164
182
  return typeof value === "string" ? value : undefined;
165
183
  }
184
+ /**
185
+ * Read the `md5` query parameter naming the log a GET operates on. Required —
186
+ * the reads carry no server-side "current log" to fall back to, so a missing
187
+ * md5 is a client bug rather than a state to guess at.
188
+ */
189
+ function requireMd5(req) {
190
+ const md5 = queryParam(req, "md5");
191
+ if (md5 === undefined || md5.length === 0) {
192
+ throw createError({
193
+ statusCode: 400,
194
+ statusMessage: 'An "md5" query parameter is required.',
195
+ });
196
+ }
197
+ return md5;
198
+ }
166
199
  /** Parse a query-string integer, falling back to a default when absent/NaN. */
167
200
  function parseIntParam(value, fallback) {
168
201
  if (value === undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/server/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/server/api.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export interface LoadedLogInfo {
8
8
  levelCounts: Record<string, number>;
9
9
  }
10
10
  /**
11
- * Load a log from an absolute filesystem path and make it current.
11
+ * Load a log from an absolute filesystem path and register it.
12
12
  *
13
13
  * @throws {HttpError} when the path is not absolute / missing, or the parse
14
14
  * fails — the route layer maps these to HTTP responses.
@@ -20,15 +20,24 @@ export declare function loadLogFromPath(rawPath: string): LoadedLogInfo;
20
20
  */
21
21
  export declare function loadLogFromBytes(bytes: Uint8Array): LoadedLogInfo;
22
22
  /**
23
- * Return the parser for the current log, or throw a 409 when none is loaded.
24
- * The GET routes call this first.
23
+ * Return the parser for a registered log, or throw a 404 when that md5 is
24
+ * unknown (never loaded, or the server restarted since). The GET routes call
25
+ * this first with the md5 the client asked for.
25
26
  */
26
- export declare function requireCurrentParser(): Parser;
27
+ export declare function getParser(md5: string): Parser;
27
28
  /**
28
- * Return the error-detector report for the current log, computing (and caching)
29
- * it on first request. Runs without ignore rules — the web surfaces every
30
- * finding. Throws a 409 when no log is loaded (via {@link requireCurrentEntry}).
29
+ * Return the error-detector report for a registered log, computing (and
30
+ * caching) it on first request. Runs without ignore rules — the web surfaces
31
+ * every finding. Throws a 404 for an unknown md5 (via {@link requireEntry}).
31
32
  */
32
- export declare function requireCurrentFindings(): DetectionReport;
33
+ export declare function getFindings(md5: string): DetectionReport;
34
+ /**
35
+ * Rebuild the load metadata for an already-registered log. Lets a client that
36
+ * only holds an md5 (e.g. a tab restoring itself from its URL after a reload)
37
+ * recover the full {@link LoadedLogInfo} without re-uploading the file.
38
+ *
39
+ * @throws {HttpError} 404 when the md5 is not registered.
40
+ */
41
+ export declare function getLogInfo(md5: string): LoadedLogInfo;
33
42
  /** Count entries per numeric `level` via a single grouped SQL scan. */
34
43
  export declare function computeLevelCounts(parser: Parser): Record<string, number>;
@@ -1,12 +1,13 @@
1
1
  /**
2
- * Stateful, process-wide log registry for the web backend.
2
+ * Process-wide log registry for the web backend.
3
3
  *
4
4
  * The `web` command runs a single long-lived Express process for one user, so we
5
5
  * keep every loaded log's open {@link Parser} (and its SQLite handle) in memory
6
- * keyed by content md5, plus a `current` pointer. A successful load sets
7
- * `current`; the GET routes always operate on `current` there is no per-request
8
- * `md5` override. Loading a new file simply moves the pointer (the previous
9
- * handle stays cached for cheap re-selection).
6
+ * keyed by content md5. There is no "current log": the registry holds no pointer
7
+ * and the GET routes name the log they want via a required `md5` request
8
+ * parameter (see {@link getParser}). That keeps the reads stateless, so several
9
+ * browser tabs can each view a different log against the same server without
10
+ * clobbering one another.
10
11
  */
11
12
  import { createHash } from "node:crypto";
12
13
  import { existsSync, writeFileSync } from "node:fs";
@@ -18,13 +19,11 @@ import { ErrorDetector } from "../core/error-detector.js";
18
19
  import { createError } from "./http-error.js";
19
20
  /** md5 -> loaded log. Persists for the lifetime of the server process. */
20
21
  const registry = new Map();
21
- /** The md5 of the log the GET routes currently operate on. */
22
- let current = null;
23
22
  /** Prefix for uploaded-file temp copies (distinct from Parser's cache files). */
24
23
  const UPLOAD_PREFIX = "renovate-log-parser-upload-";
25
24
  const UPLOAD_SUFFIX = ".jsonl";
26
25
  /**
27
- * Load a log from an absolute filesystem path and make it current.
26
+ * Load a log from an absolute filesystem path and register it.
28
27
  *
29
28
  * @throws {HttpError} when the path is not absolute / missing, or the parse
30
29
  * fails — the route layer maps these to HTTP responses.
@@ -94,48 +93,57 @@ function loadInto(absolutePath) {
94
93
  md5 = result.md5;
95
94
  registry.set(md5, { path: absolutePath, parser });
96
95
  }
97
- current = md5;
98
- const info = parser.loaded;
99
- return {
100
- md5,
101
- path: info.path,
102
- totalLines: info.totalLines,
103
- levelCounts: computeLevelCounts(parser),
104
- };
96
+ return describe(md5, parser);
105
97
  }
106
98
  /**
107
- * Return the parser for the current log, or throw a 409 when none is loaded.
108
- * The GET routes call this first.
99
+ * Return the parser for a registered log, or throw a 404 when that md5 is
100
+ * unknown (never loaded, or the server restarted since). The GET routes call
101
+ * this first with the md5 the client asked for.
109
102
  */
110
- export function requireCurrentParser() {
111
- return requireCurrentEntry().parser;
103
+ export function getParser(md5) {
104
+ return requireEntry(md5).parser;
112
105
  }
113
106
  /**
114
- * Return the error-detector report for the current log, computing (and caching)
115
- * it on first request. Runs without ignore rules — the web surfaces every
116
- * finding. Throws a 409 when no log is loaded (via {@link requireCurrentEntry}).
107
+ * Return the error-detector report for a registered log, computing (and
108
+ * caching) it on first request. Runs without ignore rules — the web surfaces
109
+ * every finding. Throws a 404 for an unknown md5 (via {@link requireEntry}).
117
110
  */
118
- export function requireCurrentFindings() {
119
- const entry = requireCurrentEntry();
111
+ export function getFindings(md5) {
112
+ const entry = requireEntry(md5);
120
113
  if (!entry.report) {
121
114
  entry.report = new ErrorDetector(entry.parser).run();
122
115
  }
123
116
  return entry.report;
124
117
  }
125
- /** Resolve the current registry entry, or throw a 409 when none is loaded. */
126
- function requireCurrentEntry() {
127
- if (current === null) {
118
+ /**
119
+ * Rebuild the load metadata for an already-registered log. Lets a client that
120
+ * only holds an md5 (e.g. a tab restoring itself from its URL after a reload)
121
+ * recover the full {@link LoadedLogInfo} without re-uploading the file.
122
+ *
123
+ * @throws {HttpError} 404 when the md5 is not registered.
124
+ */
125
+ export function getLogInfo(md5) {
126
+ return describe(md5, requireEntry(md5).parser);
127
+ }
128
+ /** Build the client-facing metadata for a loaded parser. */
129
+ function describe(md5, parser) {
130
+ const info = parser.loaded;
131
+ return {
132
+ md5,
133
+ path: info.path,
134
+ totalLines: info.totalLines,
135
+ levelCounts: computeLevelCounts(parser),
136
+ };
137
+ }
138
+ /** Resolve a registry entry by md5, or throw a 404 when it is not loaded. */
139
+ function requireEntry(md5) {
140
+ const entry = registry.get(md5);
141
+ if (!entry) {
128
142
  throw createError({
129
- statusCode: 409,
130
- statusMessage: "No log is loaded. POST a log to /api/log/path first.",
143
+ statusCode: 404,
144
+ statusMessage: `Log ${md5} is not loaded. POST it to /api/log/path or /api/log/contents first.`,
131
145
  });
132
146
  }
133
- const entry = registry.get(current);
134
- if (!entry) {
135
- // Defensive: pointer without an entry should never happen.
136
- current = null;
137
- throw createError({ statusCode: 409, statusMessage: "No log is loaded." });
138
- }
139
147
  return entry;
140
148
  }
141
149
  /** Count entries per numeric `level` via a single grouped SQL scan. */
@@ -1 +1 @@
1
- {"version":3,"file":"log-registry.js","sourceRoot":"","sources":["../../src/server/log-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log-registry.js","sourceRoot":"","sources":["../../src/server/log-registry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "renovate-log-parser",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "A CLI that parses Renovate Bot debug logs to auto-detect issues, with an optional Nuxt-based web UI.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -59,18 +59,18 @@
59
59
  "devDependencies": {
60
60
  "@eslint/js": "10.0.1",
61
61
  "@types/express": "5.0.6",
62
- "@types/node": "26.1.2",
62
+ "@types/node": "26.2.0",
63
63
  "@types/pngjs": "6.0.5",
64
64
  "@types/yargs": "17.0.35",
65
- "eslint": "10.8.0",
65
+ "eslint": "10.8.1",
66
66
  "eslint-config-prettier": "10.1.8",
67
- "globals": "17.8.0",
67
+ "globals": "17.10.0",
68
68
  "pixelmatch": "7.2.0",
69
- "playwright-core": "1.62.0",
69
+ "playwright-core": "1.62.1",
70
70
  "pngjs": "7.0.0",
71
71
  "prettier": "3.9.6",
72
- "tsx": "4.23.1",
72
+ "tsx": "4.23.12",
73
73
  "typescript": "6.0.3",
74
- "typescript-eslint": "8.65.0"
74
+ "typescript-eslint": "8.67.0"
75
75
  }
76
76
  }
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/_nuxt/CztOM3Aq.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.BlZrUrUl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CztOM3Aq.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DUXEQ2Eh.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DVWtRbHb.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3wuHpM_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuOsDQlp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CVlqYHPc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/XP9RigIT.js"><script type="module" src="/_nuxt/CztOM3Aq.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.zKZBzOko.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BjDV6v2h.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BDNMzG2s.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.DwXcJPfY.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DeS15jQo.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"f68582c9-55a9-4352-b85a-d7f8de6f7202",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1785610471989,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/_nuxt/catE3Uxr.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.COD7m2gp.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/catE3Uxr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B2NJyQVk.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BtH4NLYu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BLVSJtj1.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPOwRMFI.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DOmDanju.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BfI3t2es.js"><script type="module" src="/_nuxt/catE3Uxr.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.CuDiJL15.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/C66Rx7V7.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BDNMzG2s.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.DGjUVt8F.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CY4Exyhk.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"c947ec51-c0bb-45f2-94cf-2733560893f7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1786767184022,false]</script></body></html>