@superblocksteam/sdk 2.0.149 → 2.0.150-next.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 (49) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/cli-replacement/dependency-install-classifier.d.mts +3 -1
  3. package/dist/cli-replacement/dependency-install-classifier.d.mts.map +1 -1
  4. package/dist/cli-replacement/dependency-install-classifier.mjs +16 -5
  5. package/dist/cli-replacement/dependency-install-classifier.mjs.map +1 -1
  6. package/dist/cli-replacement/dev-s3-restore.test.mjs +73 -14
  7. package/dist/cli-replacement/dev-s3-restore.test.mjs.map +1 -1
  8. package/dist/cli-replacement/dev-startup-git-before-dbfs-order.test.mjs +4 -0
  9. package/dist/cli-replacement/dev-startup-git-before-dbfs-order.test.mjs.map +1 -1
  10. package/dist/cli-replacement/dev.d.mts.map +1 -1
  11. package/dist/cli-replacement/dev.mjs +130 -12
  12. package/dist/cli-replacement/dev.mjs.map +1 -1
  13. package/dist/cli-replacement/install-packages.npm-registry.test.mjs +153 -0
  14. package/dist/cli-replacement/install-packages.npm-registry.test.mjs.map +1 -1
  15. package/dist/cli-replacement/npm-install-summary.d.mts +30 -0
  16. package/dist/cli-replacement/npm-install-summary.d.mts.map +1 -0
  17. package/dist/cli-replacement/npm-install-summary.mjs +67 -0
  18. package/dist/cli-replacement/npm-install-summary.mjs.map +1 -0
  19. package/dist/cli-replacement/npm-install-summary.test.d.mts +2 -0
  20. package/dist/cli-replacement/npm-install-summary.test.d.mts.map +1 -0
  21. package/dist/cli-replacement/npm-install-summary.test.mjs +70 -0
  22. package/dist/cli-replacement/npm-install-summary.test.mjs.map +1 -0
  23. package/dist/cli-replacement/npm-install-timing.d.mts +16 -0
  24. package/dist/cli-replacement/npm-install-timing.d.mts.map +1 -0
  25. package/dist/cli-replacement/npm-install-timing.mjs +104 -0
  26. package/dist/cli-replacement/npm-install-timing.mjs.map +1 -0
  27. package/dist/cli-replacement/npm-install-timing.test.d.mts +2 -0
  28. package/dist/cli-replacement/npm-install-timing.test.d.mts.map +1 -0
  29. package/dist/cli-replacement/npm-install-timing.test.mjs +151 -0
  30. package/dist/cli-replacement/npm-install-timing.test.mjs.map +1 -0
  31. package/dist/telemetry/logging.d.ts +7 -0
  32. package/dist/telemetry/logging.d.ts.map +1 -1
  33. package/dist/telemetry/logging.js +13 -0
  34. package/dist/telemetry/logging.js.map +1 -1
  35. package/dist/telemetry/logging.test.js +40 -0
  36. package/dist/telemetry/logging.test.js.map +1 -1
  37. package/package.json +6 -6
  38. package/src/cli-replacement/dependency-install-classifier.mts +38 -6
  39. package/src/cli-replacement/dev-s3-restore.test.mts +98 -14
  40. package/src/cli-replacement/dev-startup-git-before-dbfs-order.test.mts +4 -0
  41. package/src/cli-replacement/dev.mts +155 -11
  42. package/src/cli-replacement/install-packages.npm-registry.test.mts +235 -0
  43. package/src/cli-replacement/npm-install-summary.mts +82 -0
  44. package/src/cli-replacement/npm-install-summary.test.mts +94 -0
  45. package/src/cli-replacement/npm-install-timing.mts +121 -0
  46. package/src/cli-replacement/npm-install-timing.test.mts +199 -0
  47. package/src/telemetry/logging.test.ts +55 -0
  48. package/src/telemetry/logging.ts +21 -0
  49. package/tsconfig.tsbuildinfo +1 -1
@@ -31,6 +31,15 @@ const resolveCommandMock = vi.fn();
31
31
  vi.mock("package-manager-detector", () => ({
32
32
  resolveCommand: (...args) => resolveCommandMock(...args),
33
33
  }));
34
+ const recoverFromDiskFullMock = vi.fn();
35
+ vi.mock("./disk-space.mjs", async (importOriginal) => {
36
+ const actual = await importOriginal();
37
+ return {
38
+ ...actual,
39
+ getDiskSpace: vi.fn(async () => null),
40
+ recoverFromDiskFull: (...args) => recoverFromDiskFullMock(...args),
41
+ };
42
+ });
34
43
  vi.mock("node:fs/promises", () => ({
35
44
  readFile: vi.fn(async () => "{}"),
36
45
  writeFile: vi.fn(async () => undefined),
@@ -38,8 +47,16 @@ vi.mock("node:fs/promises", () => ({
38
47
  // before spawning the install (npm's `logs-dir` target).
39
48
  mkdir: vi.fn(async () => undefined),
40
49
  }));
50
+ // npm's `--timing` phase breakdown is read back from a file on disk. The
51
+ // parser has its own coverage in `npm-install-timing.test.mts`; here we only
52
+ // care that whatever it returns reaches the success log line.
53
+ const consumeTimingMock = vi.fn(async () => null);
54
+ vi.mock("./npm-install-timing.mjs", () => ({
55
+ consumeNpmInstallTimingAttributes: (logsDir) => consumeTimingMock(logsDir),
56
+ }));
41
57
  const mockLogger = {
42
58
  info: vi.fn(),
59
+ infoStructured: vi.fn(),
43
60
  warn: vi.fn(),
44
61
  error: vi.fn(),
45
62
  debug: vi.fn(),
@@ -86,6 +103,8 @@ beforeAll(async () => {
86
103
  });
87
104
  beforeEach(() => {
88
105
  vi.clearAllMocks();
106
+ mockLogger.infoStructured.mockReset();
107
+ mockLogger.warn.mockReset();
89
108
  // Default: npm package manager, install resolves to a real command so we
90
109
  // can read back the args the call site passed in.
91
110
  detectMock.mockResolvedValue({
@@ -107,6 +126,8 @@ beforeEach(() => {
107
126
  cb(null, { stdout: "ok" });
108
127
  }
109
128
  });
129
+ recoverFromDiskFullMock.mockResolvedValue(undefined);
130
+ consumeTimingMock.mockResolvedValue(null);
110
131
  });
111
132
  function getResolveCommandArgs() {
112
133
  expect(resolveCommandMock).toHaveBeenCalledTimes(1);
@@ -131,6 +152,7 @@ describe("installPackages honors allow_install_scripts policy", () => {
131
152
  // Existing baseline npm flags must survive.
132
153
  expect(args).toContain("--fund=false");
133
154
  expect(args).toContain("--audit=false");
155
+ expect(args).toContain("--timing");
134
156
  });
135
157
  it("does NOT append --ignore-scripts when allow_install_scripts === true", async () => {
136
158
  const { installPackages } = await import("./dev.mjs");
@@ -180,6 +202,8 @@ describe("installPackages honors allow_install_scripts policy", () => {
180
202
  expect(args).toContain("--ignore-scripts");
181
203
  expect(args).not.toContain("--fund=false");
182
204
  expect(args).not.toContain("--audit=false");
205
+ // pnpm has no equivalent of npm's phase timing.
206
+ expect(args).not.toContain("--timing");
183
207
  });
184
208
  });
185
209
  // ---------------------------------------------------------------------------
@@ -257,4 +281,133 @@ describe("installPackages userconfig env plumbing", () => {
257
281
  // (`userconfig-env.integration.test.mts`) would fail to resolve
258
282
  // `npm`/`pnpm` on PATH if the overlay clobbered it.
259
283
  });
284
+ describe("installPackages success logging", () => {
285
+ it("keeps unrecognized package-manager output out of structured attributes", async () => {
286
+ const { installPackages } = await import("./dev.mjs");
287
+ await installPackages("/tmp/app", mockLogger);
288
+ expect(mockLogger.infoStructured).toHaveBeenCalledWith("Package installation completed successfully", {
289
+ "superblocks.npm.install.disk_recovered": false,
290
+ "superblocks.npm.install.duration_seconds": expect.any(Number),
291
+ "superblocks.npm.install.summary_parsed": false,
292
+ });
293
+ expect(mockLogger.info).toHaveBeenCalledWith("ok");
294
+ });
295
+ it("marks parsed npm summaries and emits their counts", async () => {
296
+ const stdout = JSON.stringify({
297
+ added: 8,
298
+ audited: 432,
299
+ changed: 2,
300
+ removed: 0,
301
+ });
302
+ execMock.mockImplementation((_cmd, _opts, cb) => cb?.(null, { stdout }));
303
+ const { installPackages } = await import("./dev.mjs");
304
+ await installPackages("/tmp/app", mockLogger);
305
+ expect(mockLogger.infoStructured).toHaveBeenCalledWith("Package installation completed successfully", {
306
+ "superblocks.npm.install.added": 8,
307
+ "superblocks.npm.install.audited": 432,
308
+ "superblocks.npm.install.changed": 2,
309
+ "superblocks.npm.install.disk_recovered": false,
310
+ "superblocks.npm.install.duration_seconds": expect.any(Number),
311
+ "superblocks.npm.install.removed": 0,
312
+ "superblocks.npm.install.summary_parsed": true,
313
+ });
314
+ expect(mockLogger.info).not.toHaveBeenCalledWith(stdout);
315
+ });
316
+ it("joins npm's phase timings to the same success log line", async () => {
317
+ consumeTimingMock.mockResolvedValue({
318
+ "superblocks.npm.install.ideal_tree_seconds": 0.23,
319
+ "superblocks.npm.install.unpack_seconds": 23.2,
320
+ });
321
+ const stdout = JSON.stringify({
322
+ added: 0,
323
+ audited: 432,
324
+ changed: 5,
325
+ removed: 0,
326
+ });
327
+ execMock.mockImplementation((_cmd, _opts, cb) => cb?.(null, { stdout }));
328
+ const { installPackages } = await import("./dev.mjs");
329
+ await installPackages("/tmp/app", mockLogger);
330
+ // npm writes the timing file into the same dir as its debug log.
331
+ expect(consumeTimingMock).toHaveBeenCalledWith("/tmp/app/.superblocks/logs");
332
+ expect(mockLogger.infoStructured).toHaveBeenCalledWith("Package installation completed successfully", {
333
+ "superblocks.npm.install.added": 0,
334
+ "superblocks.npm.install.audited": 432,
335
+ "superblocks.npm.install.changed": 5,
336
+ "superblocks.npm.install.disk_recovered": false,
337
+ "superblocks.npm.install.duration_seconds": expect.any(Number),
338
+ "superblocks.npm.install.ideal_tree_seconds": 0.23,
339
+ "superblocks.npm.install.removed": 0,
340
+ "superblocks.npm.install.summary_parsed": true,
341
+ "superblocks.npm.install.unpack_seconds": 23.2,
342
+ });
343
+ });
344
+ it("still logs the counts when there is no timing file to read", async () => {
345
+ consumeTimingMock.mockResolvedValue(null);
346
+ const { installPackages } = await import("./dev.mjs");
347
+ await installPackages("/tmp/app", mockLogger);
348
+ expect(mockLogger.infoStructured).toHaveBeenCalledWith("Package installation completed successfully", {
349
+ "superblocks.npm.install.disk_recovered": false,
350
+ "superblocks.npm.install.duration_seconds": expect.any(Number),
351
+ "superblocks.npm.install.summary_parsed": false,
352
+ });
353
+ });
354
+ it("does not read a timing file under pnpm, which cannot write one", async () => {
355
+ detectMock.mockResolvedValue({
356
+ name: "pnpm",
357
+ agent: "pnpm",
358
+ version: "11.0.0",
359
+ });
360
+ resolveCommandMock.mockImplementation((_agent, _action, args) => ({
361
+ command: "pnpm",
362
+ args: ["install", ...args],
363
+ }));
364
+ const { installPackages } = await import("./dev.mjs");
365
+ await installPackages("/tmp/app", mockLogger);
366
+ // A leftover npm timing file must not be reported as pnpm's timings.
367
+ expect(consumeTimingMock).not.toHaveBeenCalled();
368
+ });
369
+ it("does not fail a completed install when the timing read rejects", async () => {
370
+ consumeTimingMock.mockRejectedValue(new Error("logs dir unreadable"));
371
+ const { installPackages } = await import("./dev.mjs");
372
+ await expect(installPackages("/tmp/app", mockLogger)).resolves.toBeUndefined();
373
+ expect(execMock).toHaveBeenCalledTimes(1);
374
+ expect(mockLogger.infoStructured).toHaveBeenCalledWith("Package installation completed successfully", expect.objectContaining({
375
+ "superblocks.npm.install.duration_seconds": expect.any(Number),
376
+ }));
377
+ });
378
+ it("does not fail or retry when success logging throws", async () => {
379
+ mockLogger.infoStructured.mockImplementationOnce(() => {
380
+ throw new Error("telemetry unavailable");
381
+ });
382
+ mockLogger.warn.mockImplementation((message) => {
383
+ if (message === "Could not emit package installation success telemetry") {
384
+ throw new Error("warning unavailable");
385
+ }
386
+ });
387
+ const { installPackages } = await import("./dev.mjs");
388
+ await expect(installPackages("/tmp/app", mockLogger)).resolves.toBeUndefined();
389
+ expect(execMock).toHaveBeenCalledTimes(1);
390
+ expect(mockLogger.error).not.toHaveBeenCalledWith("Error during package installation", expect.anything());
391
+ });
392
+ it("does not fail after disk recovery when success logging throws", async () => {
393
+ execMock.mockImplementation((_cmd, _opts, cb) => {
394
+ const error = new Error("no space left on device");
395
+ error.code = "ENOSPC";
396
+ cb?.(error);
397
+ });
398
+ recoverFromDiskFullMock.mockResolvedValue({ recovered: true });
399
+ mockLogger.infoStructured.mockImplementationOnce(() => {
400
+ throw new Error("telemetry unavailable");
401
+ });
402
+ mockLogger.warn.mockImplementation((message) => {
403
+ if (message === "Could not emit package installation success telemetry") {
404
+ throw new Error("warning unavailable");
405
+ }
406
+ });
407
+ const { installPackages } = await import("./dev.mjs");
408
+ await expect(installPackages("/tmp/app", mockLogger)).resolves.toBeUndefined();
409
+ expect(recoverFromDiskFullMock).toHaveBeenCalledTimes(1);
410
+ expect(mockLogger.error).not.toHaveBeenCalledWith("Error during package installation", expect.anything());
411
+ });
412
+ });
260
413
  //# sourceMappingURL=install-packages.npm-registry.test.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-packages.npm-registry.test.mjs","sourceRoot":"","sources":["../../src/cli-replacement/install-packages.npm-registry.test.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-packages.npm-registry.test.mjs","sourceRoot":"","sources":["../../src/cli-replacement/install-packages.npm-registry.test.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * `npm install` already runs with `--json` so a failure can be classified from
3
+ * the structured error envelope. On the SUCCESS path that same JSON was passed
4
+ * straight to `logger.info(stdout)` as the log MESSAGE, which is why Datadog
5
+ * shows an empty line after "Package installation completed successfully" and
6
+ * the counts never reached anyone.
7
+ *
8
+ * Those counts are the only evidence of what an install actually did. Deciding
9
+ * whether to persist a node_modules delta, and whether the trade is worth it,
10
+ * needs to distinguish "added 8 packages" from "added nothing and still spent
11
+ * 52 seconds".
12
+ */
13
+ export type NpmInstallSummary = {
14
+ added: number;
15
+ removed: number;
16
+ changed: number;
17
+ audited: number;
18
+ };
19
+ /**
20
+ * Parse npm's `--json` install summary.
21
+ *
22
+ * Returns null when there is nothing parseable — no output, output that is
23
+ * not a JSON object, or a JSON object that carries none of npm's summary keys
24
+ * (the install may have run under yarn/pnpm, whose JSON output would otherwise
25
+ * masquerade as a confidently-measured no-op npm install). Callers should fall
26
+ * back to logging the raw text so an unrecognized shape is still recoverable
27
+ * from logs.
28
+ */
29
+ export declare function parseNpmInstallSummary(stdout: string): NpmInstallSummary | null;
30
+ //# sourceMappingURL=npm-install-summary.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-install-summary.d.mts","sourceRoot":"","sources":["../../src/cli-replacement/npm-install-summary.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAoBF;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,GACb,iBAAiB,GAAG,IAAI,CA+B1B"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * `npm install` already runs with `--json` so a failure can be classified from
3
+ * the structured error envelope. On the SUCCESS path that same JSON was passed
4
+ * straight to `logger.info(stdout)` as the log MESSAGE, which is why Datadog
5
+ * shows an empty line after "Package installation completed successfully" and
6
+ * the counts never reached anyone.
7
+ *
8
+ * Those counts are the only evidence of what an install actually did. Deciding
9
+ * whether to persist a node_modules delta, and whether the trade is worth it,
10
+ * needs to distinguish "added 8 packages" from "added nothing and still spent
11
+ * 52 seconds".
12
+ */
13
+ /**
14
+ * npm reports affected packages either as counts or as arrays of package
15
+ * objects, depending on version. Normalize both to a count and treat anything
16
+ * else as zero, so a shape change upstream degrades to an under-count rather
17
+ * than `NaN` in telemetry.
18
+ */
19
+ function toCount(value) {
20
+ if (typeof value === "number" && Number.isFinite(value)) {
21
+ // Clamp: a negative count is meaningless and would skew any aggregation
22
+ // built on these attributes.
23
+ return Math.max(0, Math.trunc(value));
24
+ }
25
+ if (Array.isArray(value)) {
26
+ return value.length;
27
+ }
28
+ return 0;
29
+ }
30
+ /**
31
+ * Parse npm's `--json` install summary.
32
+ *
33
+ * Returns null when there is nothing parseable — no output, output that is
34
+ * not a JSON object, or a JSON object that carries none of npm's summary keys
35
+ * (the install may have run under yarn/pnpm, whose JSON output would otherwise
36
+ * masquerade as a confidently-measured no-op npm install). Callers should fall
37
+ * back to logging the raw text so an unrecognized shape is still recoverable
38
+ * from logs.
39
+ */
40
+ export function parseNpmInstallSummary(stdout) {
41
+ const trimmed = stdout.trim();
42
+ if (trimmed === "") {
43
+ return null;
44
+ }
45
+ let parsed;
46
+ try {
47
+ parsed = JSON.parse(trimmed);
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
53
+ return null;
54
+ }
55
+ const record = parsed;
56
+ const hasNpmSummaryKey = ["added", "removed", "changed", "audited"].some((key) => key in record);
57
+ if (!hasNpmSummaryKey) {
58
+ return null;
59
+ }
60
+ return {
61
+ added: toCount(record.added),
62
+ removed: toCount(record.removed),
63
+ changed: toCount(record.changed),
64
+ audited: toCount(record.audited),
65
+ };
66
+ }
67
+ //# sourceMappingURL=npm-install-summary.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-install-summary.mjs","sourceRoot":"","sources":["../../src/cli-replacement/npm-install-summary.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH;;;;;GAKG;AACH,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,wEAAwE;QACxE,6BAA6B;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAc;IAEd,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,CACtE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,MAAM,CACvB,CAAC;IACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAChC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAChC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;KACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=npm-install-summary.test.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-install-summary.test.d.mts","sourceRoot":"","sources":["../../src/cli-replacement/npm-install-summary.test.mts"],"names":[],"mappings":""}
@@ -0,0 +1,70 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { parseNpmInstallSummary } from "./npm-install-summary.mjs";
3
+ describe("parseNpmInstallSummary", () => {
4
+ it("reads npm's numeric count summary", () => {
5
+ expect(parseNpmInstallSummary(JSON.stringify({
6
+ added: 8,
7
+ removed: 0,
8
+ changed: 2,
9
+ audited: 432,
10
+ funding: 12,
11
+ }))).toEqual({ added: 8, removed: 0, changed: 2, audited: 432 });
12
+ });
13
+ // Some npm versions emit the affected packages as arrays instead of counts.
14
+ it("reads the array form by taking lengths", () => {
15
+ expect(parseNpmInstallSummary(JSON.stringify({
16
+ added: [{ name: "@dnd-kit/core" }, { name: "@dnd-kit/utilities" }],
17
+ removed: [],
18
+ changed: [{ name: "react" }],
19
+ audited: 432,
20
+ }))).toEqual({ added: 2, removed: 0, changed: 1, audited: 432 });
21
+ });
22
+ // `{}` carries none of npm's summary keys, so it is indistinguishable from
23
+ // another tool's JSON output. Treat it as unrecognized: the caller's
24
+ // raw_output fallback keeps the text recoverable instead of logging a
25
+ // confident all-zero install that never happened.
26
+ it("returns null for a JSON object without any npm summary keys", () => {
27
+ expect(parseNpmInstallSummary("{}")).toBeNull();
28
+ // e.g. a different package manager honoring --json with its own shape
29
+ expect(parseNpmInstallSummary(JSON.stringify({ success: true, warnings: [], elapsed: 3200 }))).toBeNull();
30
+ });
31
+ it("tolerates surrounding whitespace and npm's trailing newline", () => {
32
+ expect(parseNpmInstallSummary('\n {"added": 1}\n')).toEqual({
33
+ added: 1,
34
+ removed: 0,
35
+ changed: 0,
36
+ audited: 0,
37
+ });
38
+ });
39
+ it("returns null for empty output", () => {
40
+ expect(parseNpmInstallSummary("")).toBeNull();
41
+ expect(parseNpmInstallSummary(" \n ")).toBeNull();
42
+ });
43
+ it("returns null for non-JSON output rather than throwing", () => {
44
+ expect(parseNpmInstallSummary("added 8 packages in 32s")).toBeNull();
45
+ });
46
+ it("returns null for JSON that is not an object", () => {
47
+ expect(parseNpmInstallSummary("[]")).toBeNull();
48
+ expect(parseNpmInstallSummary('"done"')).toBeNull();
49
+ });
50
+ it("clamps a negative count so aggregations cannot be skewed", () => {
51
+ expect(parseNpmInstallSummary(JSON.stringify({ added: -3 }))).toEqual({
52
+ added: 0,
53
+ removed: 0,
54
+ changed: 0,
55
+ audited: 0,
56
+ });
57
+ });
58
+ it("truncates a fractional count to an integer", () => {
59
+ expect(parseNpmInstallSummary(JSON.stringify({ audited: 12.9 }))).toEqual({
60
+ added: 0,
61
+ removed: 0,
62
+ changed: 0,
63
+ audited: 12,
64
+ });
65
+ });
66
+ it("ignores unexpected value types instead of emitting NaN", () => {
67
+ expect(parseNpmInstallSummary(JSON.stringify({ added: "eight", removed: null }))).toEqual({ added: 0, removed: 0, changed: 0, audited: 0 });
68
+ });
69
+ });
70
+ //# sourceMappingURL=npm-install-summary.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-install-summary.test.mjs","sourceRoot":"","sources":["../../src/cli-replacement/npm-install-summary.test.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Read the phase durations npm recorded for the most recent install, then
3
+ * delete the timing files so the logs dir stays bounded.
4
+ *
5
+ * Returns null when there is nothing usable - no timing file, an unreadable or
6
+ * non-JSON file, or a file carrying none of the whitelisted timers. A timer
7
+ * npm did not record is omitted rather than reported as 0, because "npm
8
+ * unpacked nothing" and "npm never got as far as unpacking" are different
9
+ * facts; a recorded 0 IS emitted, since an install that unpacked nothing is
10
+ * exactly the case worth telling apart from a slow one.
11
+ *
12
+ * Never throws: this runs on the success path of a completed install, and no
13
+ * telemetry read may turn that into a failure.
14
+ */
15
+ export declare function consumeNpmInstallTimingAttributes(logsDir: string): Promise<Record<string, number> | null>;
16
+ //# sourceMappingURL=npm-install-timing.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-install-timing.d.mts","sourceRoot":"","sources":["../../src/cli-replacement/npm-install-timing.mts"],"names":[],"mappings":"AA4EA;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iCAAiC,CACrD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CA4BxC"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * npm's `--json` install summary says how many packages changed, but not where
3
+ * the time went. A real install reported `changed: 5, added: 0` alongside a
4
+ * 27 second duration - the counts cannot explain that. Measuring the same pod
5
+ * by hand showed the time was `reify:unpack` writing about 65,000 files (23.2s
6
+ * of 24.5s), while resolving metadata (`idealTree`) took 230ms. Without that
7
+ * split, a slow install is indistinguishable from a slow registry.
8
+ *
9
+ * npm records the split itself when run with `--timing`. It does NOT go to
10
+ * stdout: npm writes `<logs-dir>/<log id>-timing.json`, shaped
11
+ * `{ metadata, timers, unfinishedTimers }`, where `timers` is a flat object of
12
+ * timer name to milliseconds.
13
+ */
14
+ import nodeFs from "node:fs/promises";
15
+ import path from "node:path";
16
+ /**
17
+ * The only timers we are willing to emit, paired with their attribute name.
18
+ *
19
+ * This has to be a fixed list rather than a pass-through of `timers`, because
20
+ * npm also records one `reifyNode:node_modules/<package>` timer per package it
21
+ * touched. Emitting those would mean unbounded attribute cardinality and would
22
+ * put dependency names into telemetry.
23
+ *
24
+ * Seconds, to match the `superblocks.npm.install.duration_seconds` attribute
25
+ * these sit next to.
26
+ */
27
+ const TIMER_ATTRIBUTES = [
28
+ ["idealTree", "superblocks.npm.install.ideal_tree_seconds"],
29
+ ["reify", "superblocks.npm.install.reify_seconds"],
30
+ ["reify:build", "superblocks.npm.install.build_seconds"],
31
+ ["reify:loadTrees", "superblocks.npm.install.load_trees_seconds"],
32
+ ["reify:unpack", "superblocks.npm.install.unpack_seconds"],
33
+ ];
34
+ const TIMING_FILE_SUFFIX = "-timing.json";
35
+ function isRecord(value) {
36
+ return typeof value === "object" && value !== null && !Array.isArray(value);
37
+ }
38
+ /**
39
+ * npm's log ids are fixed-width ISO timestamps (`2026-08-07T12_00_00_000Z`),
40
+ * so sorting the names alphabetically orders them by time. Cheaper and more
41
+ * predictable than stat-ing every file for an mtime.
42
+ */
43
+ async function listTimingFiles(logsDir) {
44
+ const entries = await nodeFs.readdir(logsDir);
45
+ return entries.filter((name) => name.endsWith(TIMING_FILE_SUFFIX)).sort();
46
+ }
47
+ /**
48
+ * npm's own `logs-max` pruning covers its debug logs but leaves timing files
49
+ * alone, so they would pile up on the app volume for the life of the pod. We
50
+ * only ever need the one we just read, so drop them all once it is read.
51
+ */
52
+ async function removeTimingFiles(logsDir, names) {
53
+ await Promise.all(names.map((name) => nodeFs.unlink(path.join(logsDir, name)).catch(() => undefined)));
54
+ }
55
+ function toSeconds(value) {
56
+ if (typeof value !== "number" || !Number.isFinite(value)) {
57
+ return undefined;
58
+ }
59
+ // A negative duration is meaningless and would skew any aggregation built on
60
+ // these attributes.
61
+ return Math.max(0, value) / 1000;
62
+ }
63
+ /**
64
+ * Read the phase durations npm recorded for the most recent install, then
65
+ * delete the timing files so the logs dir stays bounded.
66
+ *
67
+ * Returns null when there is nothing usable - no timing file, an unreadable or
68
+ * non-JSON file, or a file carrying none of the whitelisted timers. A timer
69
+ * npm did not record is omitted rather than reported as 0, because "npm
70
+ * unpacked nothing" and "npm never got as far as unpacking" are different
71
+ * facts; a recorded 0 IS emitted, since an install that unpacked nothing is
72
+ * exactly the case worth telling apart from a slow one.
73
+ *
74
+ * Never throws: this runs on the success path of a completed install, and no
75
+ * telemetry read may turn that into a failure.
76
+ */
77
+ export async function consumeNpmInstallTimingAttributes(logsDir) {
78
+ try {
79
+ const names = await listTimingFiles(logsDir);
80
+ const newest = names.at(-1);
81
+ if (newest === undefined) {
82
+ return null;
83
+ }
84
+ const raw = await nodeFs.readFile(path.join(logsDir, newest), "utf8");
85
+ await removeTimingFiles(logsDir, names);
86
+ const parsed = JSON.parse(raw);
87
+ if (!isRecord(parsed) || !isRecord(parsed.timers)) {
88
+ return null;
89
+ }
90
+ const timers = parsed.timers;
91
+ const attributes = {};
92
+ for (const [timer, attribute] of TIMER_ATTRIBUTES) {
93
+ const seconds = toSeconds(timers[timer]);
94
+ if (seconds !== undefined) {
95
+ attributes[attribute] = seconds;
96
+ }
97
+ }
98
+ return Object.keys(attributes).length > 0 ? attributes : null;
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ }
104
+ //# sourceMappingURL=npm-install-timing.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-install-timing.mjs","sourceRoot":"","sources":["../../src/cli-replacement/npm-install-timing.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=npm-install-timing.test.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-install-timing.test.d.mts","sourceRoot":"","sources":["../../src/cli-replacement/npm-install-timing.test.mts"],"names":[],"mappings":""}