@dep-radius/core 0.1.0 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"installed.d.ts","sourceRoot":"","sources":["../../src/inventory/installed.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAGV,SAAS,EAGV,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;CACf;AAGD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CA6BtC;AA8DD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,gBAAgB,EACtB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,SAAS,CAAC,CAmFpB"}
1
+ {"version":3,"file":"installed.d.ts","sourceRoot":"","sources":["../../src/inventory/installed.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAGV,SAAS,EAGV,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;CACf;AAGD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CA6BtC;AA+ED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,gBAAgB,EACtB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,SAAS,CAAC,CAqFpB"}
@@ -38,6 +38,9 @@ export async function resolveInstalled(fromDir, key, stopAt) {
38
38
  dir = parent;
39
39
  }
40
40
  }
41
+ // The nearest lockfile, from `root` up to the repository root: a package of a monorepo has none of
42
+ // its own. Outside a repository only `root` itself is looked at, so a stray lockfile in a parent
43
+ // folder never answers for a project.
41
44
  async function loadLock(root) {
42
45
  const tries = [
43
46
  ["pnpm-lock.yaml", pnpmLock],
@@ -46,20 +49,30 @@ async function loadLock(root) {
46
49
  ["yarn.lock", yarnLock],
47
50
  ["bun.lock", bunLock],
48
51
  ];
49
- for (const [file, reader] of tries) {
50
- const p = join(root, file);
51
- if (!existsSync(p))
52
- continue;
53
- try {
54
- const r = reader(await readFile(p, "utf8"));
55
- if (r)
56
- return r;
57
- }
58
- catch {
59
- // unreadable lockfile: fall through to the next source
52
+ const boundary = projectBoundary(root);
53
+ const inRepository = existsSync(join(boundary, ".git"));
54
+ let dir = root;
55
+ for (;;) {
56
+ for (const [file, reader] of tries) {
57
+ const p = join(dir, file);
58
+ if (!existsSync(p))
59
+ continue;
60
+ try {
61
+ const r = reader(await readFile(p, "utf8"));
62
+ if (r)
63
+ return { reader: r, dir };
64
+ }
65
+ catch {
66
+ // unreadable lockfile: fall through to the next source
67
+ }
60
68
  }
69
+ if (!inRepository || dir === boundary)
70
+ return undefined;
71
+ const parent = dirname(dir);
72
+ if (parent === dir)
73
+ return undefined;
74
+ dir = parent;
61
75
  }
62
- return undefined;
63
76
  }
64
77
  async function patchedNames(root) {
65
78
  const names = new Set();
@@ -117,7 +130,9 @@ export async function buildInventory(root, opts, files) {
117
130
  const manifests = await findManifests(root, projectFiles);
118
131
  const lock = await loadLock(root);
119
132
  const patched = await patchedNames(root);
120
- const hasPnp = existsSync(join(root, ".pnp.cjs")) || existsSync(join(root, ".pnp.js"));
133
+ const lockDir = lock?.dir ?? root;
134
+ const hasPnp = existsSync(join(lockDir, ".pnp.cjs")) ||
135
+ existsSync(join(lockDir, ".pnp.js"));
121
136
  const byId = new Map();
122
137
  const local = new Set();
123
138
  const notAnalyzed = new Map();
@@ -205,16 +220,16 @@ async function resolveDep(root, m, d, lock, hasPnp) {
205
220
  }
206
221
  }
207
222
  if (lock) {
208
- const hit = lock.lookup(relPath(root, m.dir), d.key, d.spec);
223
+ const hit = lock.reader.lookup(relPath(lock.dir, m.dir), d.key, d.spec);
209
224
  if (hit) {
210
225
  const flags = [];
211
226
  if (hit.name !== d.key)
212
227
  flags.push("alias");
213
228
  return {
214
- id: `${lock.source}:${hit.name}@${hit.version}`,
229
+ id: `${lock.reader.source}:${hit.name}@${hit.version}`,
215
230
  name: hit.name,
216
231
  version: hit.version,
217
- versionSource: lock.source,
232
+ versionSource: lock.reader.source,
218
233
  local: false,
219
234
  declaredBy: [],
220
235
  flags,
@@ -0,0 +1,18 @@
1
+ import type { InstalledDep, Inventory, NotAnalyzed } from "../model.ts";
2
+ export interface BaseTree {
3
+ dir: string;
4
+ ref: string;
5
+ commit: string;
6
+ cleanup: () => Promise<void>;
7
+ }
8
+ export declare function readBaseTree(root: string, ref: string): Promise<BaseTree>;
9
+ export interface SincePlan {
10
+ changed: {
11
+ dep: InstalledDep;
12
+ to: string;
13
+ }[];
14
+ unchanged: number;
15
+ added: NotAnalyzed[];
16
+ }
17
+ export declare function planSince(now: InstalledDep[], base: Pick<Inventory, "installed" | "manifests" | "root">, ref: string): SincePlan;
18
+ //# sourceMappingURL=since.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"since.d.ts","sourceRoot":"","sources":["../../src/inventory/since.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAkBvE,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAMD,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,QAAQ,CAAC,CAkDnB;AAED,MAAM,WAAW,SAAS;IAExB,OAAO,EAAE;QAAE,GAAG,EAAE,YAAY,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC5C,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,WAAW,EAAE,CAAA;CACrB;AAKD,wBAAgB,SAAS,CACvB,GAAG,EAAE,YAAY,EAAE,EACnB,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC,EACzD,GAAG,EAAE,MAAM,GACV,SAAS,CAkDX"}
@@ -0,0 +1,108 @@
1
+ import { tmpdir } from "node:os";
2
+ import { promisify } from "node:util";
3
+ import { dirname, join } from "node:path";
4
+ import { execFile } from "node:child_process";
5
+ import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
6
+ import semver from "semver";
7
+ import { relPath, SKIP_DIRS } from "./manifests.js";
8
+ const run = promisify(execFile);
9
+ // What decides a dependency's version at a commit. Source files are never needed: usage is
10
+ // always read from the working tree, the code that will run after the change.
11
+ const VERSION_FILES = new Set([
12
+ "package.json",
13
+ "pnpm-lock.yaml",
14
+ "pnpm-workspace.yaml",
15
+ "package-lock.json",
16
+ "npm-shrinkwrap.json",
17
+ "yarn.lock",
18
+ "bun.lock",
19
+ ".pnp.cjs",
20
+ ".pnp.js",
21
+ ]);
22
+ // Writes the manifests and lockfiles of the whole repository at `ref` into a temporary folder, and
23
+ // points at the folder `root` maps to inside it: a package of a monorepo reads the lockfile at the
24
+ // repository root, as it does in the working tree. Nothing is installed there, so versions come
25
+ // from the lockfile.
26
+ export async function readBaseTree(root, ref) {
27
+ const git = (args) => run("git", args, { cwd: root, maxBuffer: 256 * 1024 * 1024 });
28
+ let commit;
29
+ try {
30
+ commit = (await git(["rev-parse", "--verify", "--quiet", `${ref}^{commit}`])).stdout.trim();
31
+ }
32
+ catch {
33
+ throw new Error(`--since ${ref}: no such commit here (not a git repository, or the ref is not fetched)`);
34
+ }
35
+ const prefix = (await git(["rev-parse", "--show-prefix"])).stdout.trim();
36
+ const { stdout } = await git([
37
+ "ls-tree",
38
+ "-r",
39
+ "-z",
40
+ "--full-tree",
41
+ "--name-only",
42
+ commit,
43
+ ]);
44
+ const paths = stdout.split("\0").filter((p) => {
45
+ const segs = p.split("/");
46
+ return (VERSION_FILES.has(segs.at(-1) ?? "") &&
47
+ !segs.slice(0, -1).some((s) => SKIP_DIRS.has(s)));
48
+ });
49
+ const top = await mkdtemp(join(tmpdir(), "radius-since-"));
50
+ // bounds the node_modules and lockfile walks, as the real repository does
51
+ await mkdir(join(top, ".git"));
52
+ for (const rel of paths) {
53
+ const { stdout: content } = await run("git", ["show", `${commit}:${rel}`], {
54
+ cwd: root,
55
+ encoding: "buffer",
56
+ maxBuffer: 256 * 1024 * 1024,
57
+ });
58
+ await mkdir(dirname(join(top, rel)), { recursive: true });
59
+ await writeFile(join(top, rel), content);
60
+ }
61
+ const dir = join(top, prefix);
62
+ await mkdir(dir, { recursive: true });
63
+ return {
64
+ dir,
65
+ ref,
66
+ commit,
67
+ cleanup: () => rm(top, { recursive: true, force: true }),
68
+ };
69
+ }
70
+ // Pairs each dependency of the working tree with the same dependency at the ref, where the same
71
+ // manifest declares it under the same key. Declared somewhere new, it counts as added, even when
72
+ // another manifest has an older version: that one is paired on its own.
73
+ export function planSince(now, base, ref) {
74
+ const plan = { changed: [], unchanged: 0, added: [] };
75
+ const declaration = (manifest, key) => `${manifest}\0${key}`;
76
+ const declaredAtRef = new Set(base.manifests.flatMap((m) => m.deps.map((d) => declaration(relPath(base.root, m.path), d.key))));
77
+ for (const dep of now) {
78
+ const pool = base.installed.filter((b) => b.name === dep.name &&
79
+ b.declaredBy.some((bd) => dep.declaredBy.some((d) => d.manifest === bd.manifest && d.key === bd.key)));
80
+ if (pool.length === 0) {
81
+ plan.added.push({
82
+ pkg: dep.name,
83
+ reason: dep.declaredBy.some((d) => declaredAtRef.has(declaration(d.manifest, d.key)))
84
+ ? `its version at ${ref} is unknown (no lockfile entry), so there is nothing to compare`
85
+ : `added since ${ref}, so there is no earlier version to compare`,
86
+ });
87
+ continue;
88
+ }
89
+ if (pool.some((b) => b.version === dep.version)) {
90
+ plan.unchanged++;
91
+ continue;
92
+ }
93
+ // several earlier versions: the lowest one, so the compared range covers every change
94
+ const prev = [...pool].sort((a, b) => semver.valid(a.version) && semver.valid(b.version)
95
+ ? semver.compare(a.version, b.version)
96
+ : a.version.localeCompare(b.version))[0];
97
+ plan.changed.push({
98
+ dep: {
99
+ ...dep,
100
+ version: prev.version,
101
+ versionSource: prev.versionSource,
102
+ flags: [...new Set([...dep.flags, ...prev.flags])],
103
+ },
104
+ to: dep.version,
105
+ });
106
+ }
107
+ return plan;
108
+ }
package/dist/model.d.ts CHANGED
@@ -265,6 +265,10 @@ export interface Brief {
265
265
  };
266
266
  root: string;
267
267
  generatedAt: string;
268
+ since?: {
269
+ ref: string;
270
+ commit: string;
271
+ };
268
272
  manifests: number;
269
273
  packages: PackageBrief[];
270
274
  upToDate: number;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
package/dist/options.d.ts CHANGED
@@ -10,6 +10,7 @@ export interface Options {
10
10
  offline: boolean;
11
11
  minAgeMs: number | undefined;
12
12
  latest: boolean;
13
+ since?: string;
13
14
  notes: boolean;
14
15
  surface: boolean;
15
16
  prod: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAA;AAErD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,OAAO,CAAA;CACf;AAGD,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAElE,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,OAAO,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAE9C,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CACvB;AAaD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAI5C;AAED,eAAO,MAAM,kBAAkB,WAAa,CAAA"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAA;AAErD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,MAAM,EAAE,OAAO,CAAA;IAEf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,OAAO,CAAA;CACf;AAGD,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAElE,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,OAAO,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAE9C,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CACvB;AAaD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAI5C;AAED,eAAO,MAAM,kBAAkB,WAAa,CAAA"}
@@ -13,4 +13,5 @@ export declare function ago(iso: string, now: number): string;
13
13
  export declare function opaqueLabel(p: PackageBrief): string;
14
14
  export declare function coverageLabel(p: PackageBrief): string;
15
15
  export declare function surfaceLabel(p: PackageBrief): string;
16
+ export declare function sinceLabel(since: NonNullable<Brief["since"]>): string;
16
17
  //# sourceMappingURL=groups.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/render/groups.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAa5D,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAInD;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,MAAM,EAAE,YAAY,EAAE,CAAA;CACvB;AAID,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAUhD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAMrD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAOjE;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAIzC;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAanD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAkBrD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAkBpD"}
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/render/groups.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAa5D,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAInD;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,MAAM,EAAE,YAAY,EAAE,CAAA;CACvB;AAID,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAUhD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAMrD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAOjE;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAIzC;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAanD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAkBrD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAkBpD;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAGrE"}
@@ -103,3 +103,8 @@ export function surfaceLabel(p) {
103
103
  return `unknown (${s.detail ?? "extraction failed"})`;
104
104
  }
105
105
  }
106
+ // "main (8f74b3b)", or only the short hash when the ref already is a hash, as in a pull request
107
+ export function sinceLabel(since) {
108
+ const short = since.commit.slice(0, 7);
109
+ return since.commit.startsWith(since.ref) ? short : `${since.ref} (${short})`;
110
+ }
@@ -1,2 +1,2 @@
1
- export { ago, coverageLabel, groupBriefs, type Groups, isUnseenOnly, oneNetOnly, opaqueLabel, siteLabel, sitesFor, surfaceLabel, } from "./groups.ts";
1
+ export { ago, coverageLabel, groupBriefs, type Groups, isUnseenOnly, oneNetOnly, opaqueLabel, sinceLabel, siteLabel, sitesFor, surfaceLabel, } from "./groups.ts";
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,GAAG,EACH,aAAa,EACb,WAAW,EACX,KAAK,MAAM,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EACR,YAAY,GACb,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,GAAG,EACH,aAAa,EACb,WAAW,EACX,KAAK,MAAM,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,EACR,YAAY,GACb,MAAM,aAAa,CAAA"}
@@ -1,3 +1,3 @@
1
1
  // Building blocks for a renderer of your own: how briefs are grouped and labelled, shared by the
2
2
  // markdown renderer here and the terminal renderer of the CLI.
3
- export { ago, coverageLabel, groupBriefs, isUnseenOnly, oneNetOnly, opaqueLabel, siteLabel, sitesFor, surfaceLabel, } from "./groups.js";
3
+ export { ago, coverageLabel, groupBriefs, isUnseenOnly, oneNetOnly, opaqueLabel, sinceLabel, siteLabel, sitesFor, surfaceLabel, } from "./groups.js";
@@ -96,6 +96,10 @@ export interface BriefV1 {
96
96
  };
97
97
  root: string;
98
98
  generatedAt: string;
99
+ since?: {
100
+ ref: string;
101
+ commit: string;
102
+ };
99
103
  exitCode: 0 | 1 | 2;
100
104
  summary: {
101
105
  manifests: number;
@@ -1 +1 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/render/json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/render/json.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export function toJsonV1(brief) {
9
9
  },
10
10
  root: brief.root,
11
11
  generatedAt: brief.generatedAt,
12
+ ...(brief.since ? { since: brief.since } : {}),
12
13
  exitCode: brief.exitCode,
13
14
  summary: {
14
15
  manifests: brief.manifests,
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/render/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,aAAa,CAAA;AAatD,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAmChE"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/render/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,aAAa,CAAA;AActD,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAyChE"}
@@ -1,4 +1,4 @@
1
- import { ago, coverageLabel, groupBriefs, oneNetOnly, opaqueLabel, siteLabel, sitesFor, surfaceLabel, } from "./groups.js";
1
+ import { ago, coverageLabel, groupBriefs, oneNetOnly, opaqueLabel, sinceLabel, siteLabel, sitesFor, surfaceLabel, } from "./groups.js";
2
2
  // A pull request comment: one table, then a section per package that needs a look.
3
3
  export function renderMarkdown(brief, now) {
4
4
  const g = groupBriefs(brief);
@@ -6,8 +6,12 @@ export function renderMarkdown(brief, now) {
6
6
  const icon = { blocked: "🛑 blocked", review: "👀 review", quiet: "✅ quiet" };
7
7
  out.push("### radius");
8
8
  out.push("");
9
+ if (brief.since)
10
+ out.push(`Dependency changes since ${sinceLabel(brief.since)}.`, "");
9
11
  if (brief.packages.length === 0) {
10
- out.push("No dependency has an eligible update.");
12
+ out.push(brief.since
13
+ ? "No direct dependency changed version."
14
+ : "No dependency has an eligible update.");
11
15
  return `${out.join("\n")}\n`;
12
16
  }
13
17
  out.push("| package | update | verdict | surface changes | changes you touch | notes mentioning you |");
package/dist/run.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,KAAK,GAAG,EAER,KAAK,OAAO,EACZ,KAAK,QAAQ,EACd,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EACV,KAAK,EAMN,MAAM,YAAY,CAAA;AAEnB,wBAAgB,WAAW,IAAI,MAAM,CAQpC;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED,wBAAsB,GAAG,CACvB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,GAAG,EACR,OAAO,GAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAe,GACxC,OAAO,CAAC,KAAK,CAAC,CA4JhB"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAiBA,OAAO,EACL,KAAK,GAAG,EAER,KAAK,OAAO,EACZ,KAAK,QAAQ,EACd,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EACV,KAAK,EAMN,MAAM,YAAY,CAAA;AAEnB,wBAAgB,WAAW,IAAI,MAAM,CAQpC;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED,wBAAsB,GAAG,CACvB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,GAAG,EACR,OAAO,GAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAe,GACxC,OAAO,CAAC,KAAK,CAAC,CA4LhB"}
package/dist/run.js CHANGED
@@ -10,6 +10,7 @@ import { getPackument } from "./registry/packument.js";
10
10
  import { buildInventory } from "./inventory/installed.js";
11
11
  import { selectCandidate } from "./registry/candidates.js";
12
12
  import { listProjectFiles } from "./inventory/manifests.js";
13
+ import { planSince, readBaseTree } from "./inventory/since.js";
13
14
  import { isAgeExcluded, loadRegistryConfig } from "./registry/npmrc.js";
14
15
  import { analyzeSurface } from "./surface/analyze.js";
15
16
  import { DEFAULT_MIN_AGE_MS, } from "./options.js";
@@ -34,6 +35,8 @@ export async function run(opts, ctx, onEvent = () => { }) {
34
35
  const cfg = loadRegistryConfig(root, ctx.env);
35
36
  const minAgeMs = opts.minAgeMs ?? cfg.minimumReleaseAgeMs ?? DEFAULT_MIN_AGE_MS;
36
37
  const specs = opts.specs.map(parseSpec);
38
+ if (opts.since && (opts.latest || specs.some((s) => s.version)))
39
+ throw new Error("--since compares with a commit, so it takes package names only, without --latest or @version");
37
40
  const notAnalyzed = [...inventory.notAnalyzed];
38
41
  let targets = inventory.installed;
39
42
  if (specs.length > 0) {
@@ -49,6 +52,27 @@ export async function run(opts, ctx, onEvent = () => { }) {
49
52
  }
50
53
  }
51
54
  }
55
+ let since;
56
+ // with --since, the version a dependency has now is the target, whatever its age
57
+ const sinceTargets = new Map();
58
+ let unchanged = 0;
59
+ if (opts.since) {
60
+ const base = await readBaseTree(root, opts.since);
61
+ let baseInventory;
62
+ try {
63
+ baseInventory = await buildInventory(base.dir, { prod: opts.prod }, await listProjectFiles(base.dir));
64
+ }
65
+ finally {
66
+ await base.cleanup();
67
+ }
68
+ since = { ref: base.ref, commit: base.commit };
69
+ const plan = planSince(targets, baseInventory, base.ref);
70
+ targets = plan.changed.map((c) => c.dep);
71
+ for (const c of plan.changed)
72
+ sinceTargets.set(c.dep, c.to);
73
+ unchanged = plan.unchanged;
74
+ notAnalyzed.push(...plan.added);
75
+ }
52
76
  const scanned = targets.length > 0
53
77
  ? await scanUsage(ctx, root, files, inventory, (done, total) => onEvent({ type: "files", done, total }))
54
78
  : emptyUsage();
@@ -74,7 +98,11 @@ export async function run(opts, ctx, onEvent = () => { }) {
74
98
  minAgeMs,
75
99
  ageExcluded: (v) => isAgeExcluded(cfg, dep.name, v),
76
100
  latest: opts.latest,
77
- ...(spec?.version ? { explicit: spec.version } : {}),
101
+ ...(sinceTargets.has(dep)
102
+ ? { explicit: sinceTargets.get(dep) }
103
+ : spec?.version
104
+ ? { explicit: spec.version }
105
+ : {}),
78
106
  });
79
107
  if (choice.kind === "error") {
80
108
  notAnalyzed.push({ pkg: dep.name, reason: choice.reason });
@@ -142,9 +170,10 @@ export async function run(opts, ctx, onEvent = () => { }) {
142
170
  tool: { version: toolVersion(), typescript: ts.version },
143
171
  root,
144
172
  generatedAt: new Date(ctx.now).toISOString(),
173
+ ...(since ? { since } : {}),
145
174
  manifests: inventory.manifests.length,
146
175
  packages: briefs,
147
- upToDate,
176
+ upToDate: upToDate + unchanged,
148
177
  notAnalyzed: dedupeNotAnalyzed(notAnalyzed),
149
178
  global: scanned.global,
150
179
  limits: limitsFor(briefs, scanned.global),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dep-radius/core",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "The engine behind radius: which changes in a dependency update land on code you actually wrote.",
5
5
  "license": "MIT",
6
6
  "author": "prakticode",
@@ -33,6 +33,19 @@
33
33
  },
34
34
  "root": { "type": "string" },
35
35
  "generatedAt": { "type": "string", "description": "ISO 8601" },
36
+ "since": {
37
+ "type": "object",
38
+ "description": "Present with --since: packages are the dependencies whose version changed between this commit and the working tree, and summary.upToDate counts the unchanged ones",
39
+ "additionalProperties": false,
40
+ "required": ["ref", "commit"],
41
+ "properties": {
42
+ "ref": { "type": "string", "description": "The ref as given" },
43
+ "commit": {
44
+ "type": "string",
45
+ "description": "The full commit hash it resolved to"
46
+ }
47
+ }
48
+ },
36
49
  "exitCode": {
37
50
  "enum": [0, 1, 2],
38
51
  "description": "0 quiet, 1 review, 2 blocked: the worst verdict"