@component-compass/cli 0.0.2 → 0.0.3

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 (54) hide show
  1. package/dist/cli.js +4 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/no-deps-diagnostic.d.ts +15 -0
  4. package/dist/commands/no-deps-diagnostic.js +23 -0
  5. package/dist/commands/no-deps-diagnostic.js.map +1 -0
  6. package/dist/commands/scan.d.ts +1 -0
  7. package/dist/commands/scan.js +69 -52
  8. package/dist/commands/scan.js.map +1 -1
  9. package/dist/composition-rollup.d.ts +16 -14
  10. package/dist/composition-rollup.js +33 -43
  11. package/dist/composition-rollup.js.map +1 -1
  12. package/dist/identity.d.ts +9 -3
  13. package/dist/identity.js +15 -3
  14. package/dist/identity.js.map +1 -1
  15. package/dist/local-index/detect-react.js +224 -47
  16. package/dist/local-index/detect-react.js.map +1 -1
  17. package/dist/local-index/index.d.ts +4 -1
  18. package/dist/local-index/index.js +30 -13
  19. package/dist/local-index/index.js.map +1 -1
  20. package/dist/manifest/derived-manifest-stub.d.ts +2 -2
  21. package/dist/manifest/diagnostic-filter.d.ts +4 -3
  22. package/dist/manifest/diagnostic-filter.js +15 -2
  23. package/dist/manifest/diagnostic-filter.js.map +1 -1
  24. package/dist/manifest/lazy-resolver.d.ts +17 -25
  25. package/dist/manifest/lazy-resolver.js +175 -48
  26. package/dist/manifest/lazy-resolver.js.map +1 -1
  27. package/dist/occurrences.d.ts +4 -4
  28. package/dist/occurrences.js +29 -5
  29. package/dist/occurrences.js.map +1 -1
  30. package/dist/reporter/index.d.ts +27 -12
  31. package/dist/reporter/index.js +105 -18
  32. package/dist/reporter/index.js.map +1 -1
  33. package/dist/rollup.d.ts +8 -2
  34. package/dist/rollup.js +2 -2
  35. package/dist/rollup.js.map +1 -1
  36. package/dist/seeds.d.ts +3 -2
  37. package/dist/seeds.js +61 -30
  38. package/dist/seeds.js.map +1 -1
  39. package/dist/workspace/build-graph.d.ts +2 -0
  40. package/dist/workspace/build-graph.js +117 -0
  41. package/dist/workspace/build-graph.js.map +1 -0
  42. package/dist/workspace/declared-deps.d.ts +5 -0
  43. package/dist/workspace/declared-deps.js +42 -0
  44. package/dist/workspace/declared-deps.js.map +1 -0
  45. package/dist/workspace/find-owning-package.d.ts +2 -0
  46. package/dist/workspace/find-owning-package.js +49 -0
  47. package/dist/workspace/find-owning-package.js.map +1 -0
  48. package/dist/workspace/index.d.ts +4 -0
  49. package/dist/workspace/index.js +4 -0
  50. package/dist/workspace/index.js.map +1 -0
  51. package/dist/workspace/types.d.ts +46 -0
  52. package/dist/workspace/types.js +13 -0
  53. package/dist/workspace/types.js.map +1 -0
  54. package/package.json +9 -7
package/dist/cli.js CHANGED
@@ -17,6 +17,7 @@ Scan options:
17
17
  --quiet Suppress STDOUT summary
18
18
  --json Print JSON to stdout (implies --quiet)
19
19
  --fail-on <metric> CI gate (e.g. deprecated-usage)
20
+ --strict Exit non-zero if any warning-severity diagnostics fire
20
21
  --repo-id <value> Override scan envelope repoId (else env COMPONENT_COMPASS_REPO_ID, git remote, package.json name, or cwd hash)
21
22
 
22
23
  Other:
@@ -43,6 +44,7 @@ async function main(argv) {
43
44
  const scanOpts = {
44
45
  configPath: flags.config ?? "./component-compass.config.json",
45
46
  quiet: Boolean(flags.quiet || flags.json),
47
+ strict: Boolean(flags.strict),
46
48
  };
47
49
  if (flags.output)
48
50
  scanOpts.outputOverride = flags.output;
@@ -90,6 +92,8 @@ function parseFlags(args) {
90
92
  out.quiet = true;
91
93
  else if (a === "--json")
92
94
  out.json = true;
95
+ else if (a === "--strict")
96
+ out.strict = true;
93
97
  else if (a === "--fail-on") {
94
98
  const next = args[++i];
95
99
  if (next)
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Diagnostic } from "@component-compass/plugin-core";
2
+ import type { WorkspaceGraph } from "../workspace/types.js";
3
+ export type NoDepsMatchScopesDiagnostic = Extract<Diagnostic, {
4
+ code: "no-deps-match-scopes";
5
+ }>;
6
+ /**
7
+ * Surfaces a common configuration mistake: the user declared `packageScopes`
8
+ * but none of the declared deps across root + workspace siblings matched any
9
+ * scope. Typical causes are a typo in the glob, scanning outside the
10
+ * directory containing the monorepo's package.json, or deps not installed.
11
+ *
12
+ * Returns `null` when there is nothing to report (no scopes declared, or at
13
+ * least one dep matched). Caller is responsible for emission.
14
+ */
15
+ export declare function computeNoDepsMatchScopes(packageScopes: readonly string[], warmedRoots: readonly string[], graph: WorkspaceGraph): NoDepsMatchScopesDiagnostic | null;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Surfaces a common configuration mistake: the user declared `packageScopes`
3
+ * but none of the declared deps across root + workspace siblings matched any
4
+ * scope. Typical causes are a typo in the glob, scanning outside the
5
+ * directory containing the monorepo's package.json, or deps not installed.
6
+ *
7
+ * Returns `null` when there is nothing to report (no scopes declared, or at
8
+ * least one dep matched). Caller is responsible for emission.
9
+ */
10
+ export function computeNoDepsMatchScopes(packageScopes, warmedRoots, graph) {
11
+ if (packageScopes.length === 0)
12
+ return null;
13
+ if (warmedRoots.length > 0)
14
+ return null;
15
+ return {
16
+ code: "no-deps-match-scopes",
17
+ severity: "info",
18
+ packageScopes,
19
+ packageManager: graph.packageManager,
20
+ workspacePackageCount: graph.packages.length,
21
+ };
22
+ }
23
+ //# sourceMappingURL=no-deps-diagnostic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-deps-diagnostic.js","sourceRoot":"","sources":["../../src/commands/no-deps-diagnostic.ts"],"names":[],"mappings":"AAQA;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAAgC,EAChC,WAA8B,EAC9B,KAAqB;IAErB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,MAAM;QAChB,aAAa;QACb,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,qBAAqB,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;KAC7C,CAAC;AACJ,CAAC"}
@@ -4,6 +4,7 @@ export type ScanOptions = {
4
4
  captureValuesOverride?: boolean;
5
5
  quiet?: boolean;
6
6
  failOn?: string;
7
+ strict?: boolean;
7
8
  repoId?: string;
8
9
  };
9
10
  export type ScanResult = {
@@ -1,10 +1,11 @@
1
1
  import { performance } from "node:perf_hooks";
2
- import { isAbsolute, join, resolve } from "node:path";
2
+ import { isAbsolute, resolve } from "node:path";
3
3
  import { readFile } from "node:fs/promises";
4
- import { readFileSync } from "node:fs";
4
+ import picomatch from "picomatch";
5
5
  import { loadConfig, ConfigError } from "../config/loader.js";
6
6
  import { createLazyResolver } from "../manifest/lazy-resolver.js";
7
7
  import { buildDiagnosticGate } from "../manifest/diagnostic-filter.js";
8
+ import { computeNoDepsMatchScopes } from "./no-deps-diagnostic.js";
8
9
  import { buildLocalIndex } from "../local-index/index.js";
9
10
  import { walkFiles } from "../walker/files.js";
10
11
  import { createImportResolver } from "../walker/resolve-import.js";
@@ -22,6 +23,8 @@ import { errorMessage } from "@component-compass/ast-utils";
22
23
  import { buildComponentSeeds } from "../seeds.js";
23
24
  import { parseResultsToOccurrences } from "../occurrences.js";
24
25
  import { buildScanOutput } from "../reporter/index.js";
26
+ import { buildWorkspaceGraph, declaredDeps } from "../workspace/index.js";
27
+ import { createDiagnosticCollector } from "@component-compass/plugin-core";
25
28
  export async function runScan(opts) {
26
29
  const log = new Logger(opts.quiet);
27
30
  const t0 = performance.now();
@@ -55,15 +58,30 @@ export async function runScan(opts) {
55
58
  : resolve(cfg.configDir, cfg.tsconfigPath);
56
59
  }
57
60
  const resolveImport = createImportResolver(resolveImportOpts);
58
- const lazyResolver = createLazyResolver({ resolveImport, repoRoot: cfg.configDir });
61
+ const collector = createDiagnosticCollector();
62
+ const workspaceGraph = buildWorkspaceGraph(cfg.configDir);
63
+ const lazyResolver = createLazyResolver({
64
+ resolveImport,
65
+ repoRoot: cfg.configDir,
66
+ collector,
67
+ workspaceGraph,
68
+ });
59
69
  // Warm-up: load each declared dep's root CEM/CCM (if any) so tag-only
60
70
  // consumers (HTML files, Vue templates with no JS-side import for the tag)
61
71
  // can resolve external custom elements via lookupByTag. Cheap (one
62
72
  // package.json + one manifest read per dep) and matches the lazy
63
73
  // resolver's terminal-load step in depth — no barrel walking, no
64
74
  // re-export chasing.
65
- lazyResolver.warmRoots(declaredDeps(cfg.configDir));
66
- const localIndex = await buildLocalIndex({ repoRoot: cfg.configDir });
75
+ const declared = declaredDeps(workspaceGraph);
76
+ lazyResolver.warmRoots(declared);
77
+ // Surface a config-error diagnostic when the user declared `packageScopes`
78
+ // but none of the declared deps matched. Reuses the same picomatch-based
79
+ // matching as the diagnostic gate so the two filters can't drift.
80
+ const warmedMatchingScopes = filterByScopes(declared, cfg.packageScopes);
81
+ const noDepsDiagnostic = computeNoDepsMatchScopes(cfg.packageScopes, warmedMatchingScopes, workspaceGraph);
82
+ if (noDepsDiagnostic)
83
+ collector.emit(noDepsDiagnostic);
84
+ const localIndex = await buildLocalIndex({ repoRoot: cfg.configDir, collector });
67
85
  const files = await walkFiles({
68
86
  root: cfg.configDir,
69
87
  include: cfg.include,
@@ -95,6 +113,7 @@ export async function runScan(opts) {
95
113
  resolveLazyManifest: lazyResolver.resolveLazyManifest,
96
114
  lookupByTag: lazyResolver.lookupByTag,
97
115
  repoRoot: cfg.configDir,
116
+ collector,
98
117
  }));
99
118
  }
100
119
  catch (err) {
@@ -103,29 +122,15 @@ export async function runScan(opts) {
103
122
  }
104
123
  }
105
124
  const t1 = performance.now();
106
- // Diagnostics are gated twice: `--quiet` suppresses them entirely, and
107
- // when `packageScopes` is configured we drop diagnostics whose
108
- // `packageName` falls outside the same allowlist `buildScanOutput` uses
109
- // for the artifact. Real-world scans against multi-package consumer apps
110
- // showed unfiltered diagnostics flooding stderr with warnings about
111
- // dependencies the user never asked about.
125
+ // Drain the shared collector. Diagnostics are gated: when `packageScopes`
126
+ // is configured we drop diagnostics whose `packageName` falls outside the
127
+ // same allowlist `buildScanOutput` uses for the artifact.
128
+ const allDiagnostics = collector.drain();
129
+ const allowDiagnostic = buildDiagnosticGate(cfg.packageScopes);
130
+ const diagnostics = allDiagnostics.filter(allowDiagnostic);
112
131
  if (!opts.quiet) {
113
- const allowDiagnostic = buildDiagnosticGate(cfg.packageScopes);
114
- for (const d of lazyResolver.diagnostics()) {
115
- if (!allowDiagnostic(d))
116
- continue;
117
- if (d.code === "barrel-unsupported-form") {
118
- log.warn(`[component-compass] ${d.file} contains an unsupported re-export form (${d.form}); treating file as terminal.`);
119
- }
120
- else if (d.code === "untraceable-barrel") {
121
- log.warn(`[component-compass] "${d.packageName}" resolved to ${d.resolvedFile} which has no statically-traceable re-exports (likely bundled). Components from this package will surface with manifest: null. Add a component-compass-manifest.json at the package root to enrich.`);
122
- }
123
- else if (d.code === "cycle-detected") {
124
- log.warn(`[component-compass] cycle detected in re-export chain at ${d.file} (export: ${d.exportName}). Truncating.`);
125
- }
126
- else if (d.code === "chain-too-deep") {
127
- log.warn(`[component-compass] re-export chain at ${d.file} exceeded ${d.depth} hops; bailing. (export: ${d.exportName})`);
128
- }
132
+ for (const d of diagnostics) {
133
+ log.warn(formatDiagnostic(d));
129
134
  }
130
135
  }
131
136
  const envelope = buildScanEnvelope({
@@ -137,14 +142,14 @@ export async function runScan(opts) {
137
142
  .map((c) => ({ component: c, enrichmentSource: "authored" }));
138
143
  // Phase 4 will mark some entries `derived`; in Phase 1 the stub never returns one.
139
144
  const manifests = lazyResolver.snapshotManifestRefs();
140
- const seeds = buildComponentSeeds(snapshot, results, cfg.tagRules);
141
- const occurrences = parseResultsToOccurrences(results, cfg.captureValues);
145
+ const seeds = buildComponentSeeds(snapshot, results, cfg.tagRules, localIndex, cfg.configDir, workspaceGraph);
146
+ const occurrences = parseResultsToOccurrences(results, cfg.captureValues, cfg.configDir);
142
147
  const partialStats = {
143
148
  filesScanned: files.length,
144
149
  filesWithUsage: countFilesWithUsage(occurrences),
145
150
  scanDurationMs: Math.round(t1 - t0),
146
151
  };
147
- const scanOutput = buildScanOutput(envelope, manifests, partialStats, seeds, occurrences, cfg.packageScopes);
152
+ const scanOutput = buildScanOutput(envelope, manifests, partialStats, seeds, occurrences, cfg.packageScopes, diagnostics);
148
153
  const outputPath = isAbsolute(cfg.output) ? cfg.output : resolve(cfg.configDir, cfg.output);
149
154
  await writeJson(scanOutput, outputPath);
150
155
  if (!opts.quiet) {
@@ -152,40 +157,52 @@ export async function runScan(opts) {
152
157
  }
153
158
  let exitCode = 0;
154
159
  if (opts.failOn === "deprecated-usage") {
155
- const hasDeprecated = scanOutput.components.some((c) => c.manifest?.lifecycle?.status === "deprecated" &&
160
+ const hasDeprecated = scanOutput.components.some((c) => c.manifest?.data?.lifecycle?.status === "deprecated" &&
156
161
  c.stats.occurrenceCount > 0);
157
162
  if (hasDeprecated)
158
163
  exitCode = 1;
159
164
  }
165
+ if (opts.strict && diagnostics.some((d) => d.severity === "warning")) {
166
+ exitCode = 1;
167
+ }
160
168
  return { exitCode };
161
169
  }
170
+ function filterByScopes(deps, scopes) {
171
+ if (scopes.length === 0)
172
+ return [...deps];
173
+ const matchers = scopes.map((s) => picomatch(s));
174
+ return deps.filter((d) => matchers.some((m) => m(d)));
175
+ }
162
176
  function countFilesWithUsage(occurrences) {
163
177
  const files = new Set();
164
178
  for (const o of occurrences)
165
179
  files.add(o.filePath);
166
180
  return files.size;
167
181
  }
168
- /**
169
- * Returns every package name declared in <repoRoot>/package.json across all
170
- * dep buckets (regular / dev / peer / optional). Used to warm the lazy
171
- * resolver's by-tag cache so tag-only consumers don't need a JS-side import
172
- * to surface the leaf identity.
173
- */
174
- function declaredDeps(repoRoot) {
175
- let pkg;
176
- try {
177
- pkg = JSON.parse(readFileSync(join(repoRoot, "package.json"), "utf8"));
178
- }
179
- catch {
180
- return [];
181
- }
182
- const all = new Set();
183
- for (const m of [pkg.dependencies, pkg.devDependencies, pkg.peerDependencies, pkg.optionalDependencies]) {
184
- if (!m)
185
- continue;
186
- for (const name of Object.keys(m))
187
- all.add(name);
182
+ function assertUnreachable(x) {
183
+ throw new Error(`Unhandled diagnostic code: ${x.code}`);
184
+ }
185
+ function formatDiagnostic(d) {
186
+ const tag = d.severity === "warning" ? "warn " : "info ";
187
+ switch (d.code) {
188
+ case "jsx-shape-unsupported":
189
+ return `${tag} [component-compass] ${d.code} at ${d.filePath}:${d.line ?? "?"} — ${d.detail}`;
190
+ case "vue-tag-low-confidence":
191
+ return `${tag} [component-compass] ${d.code} at ${d.filePath}:${d.line ?? "?"} — emitted <${d.tagName}> as ${d.emittedAs}`;
192
+ case "local-index-duplicate-tag":
193
+ return `${tag} [component-compass] ${d.code} at ${d.filePath} — <${d.tagName}> conflicts with ${d.conflictsWith}`;
194
+ case "barrel-unsupported-form":
195
+ return `${tag} [component-compass] ${d.code} at ${d.filePath}:${d.line ?? "?"} — ${d.form}`;
196
+ case "untraceable-barrel":
197
+ return `${tag} [component-compass] ${d.code} — "${d.packageName}" resolved to ${d.resolvedFile} (no static re-exports)`;
198
+ case "cycle-detected":
199
+ return `${tag} [component-compass] ${d.code} at ${d.filePath} (export: ${d.exportName})`;
200
+ case "chain-too-deep":
201
+ return `${tag} [component-compass] ${d.code} at ${d.filePath} (export: ${d.exportName}, depth: ${d.depth})`;
202
+ case "no-deps-match-scopes":
203
+ return `${tag} [component-compass] ${d.code} — no workspace packages matched scopes [${d.packageScopes.join(", ")}] (${d.packageManager}, ${d.workspacePackageCount} workspace packages)`;
204
+ default:
205
+ return assertUnreachable(d);
188
206
  }
189
- return [...all];
190
207
  }
191
208
  //# sourceMappingURL=scan.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,23 @@
1
1
  /**
2
- * Phase 2: per-component composition rollup. Pure two-pass fold over the flat
3
- * occurrence stream — does not mutate inputs.
2
+ * Owner-edge composition rollup. Pure two-pass fold over the flat occurrence
3
+ * stream — does not mutate inputs.
4
4
  *
5
- * Pass 1 builds an index of children grouped by their parent's occurrenceId
6
- * (and by the child's componentId, so rendersByCount aggregates cleanly).
5
+ * Pass 1 indexes occurrences by their ownerComponentId so we can compute
6
+ * rendersByCount per owner without re-scanning the occurrence list once per
7
+ * component.
7
8
  *
8
- * Pass 2 visits each component's occurrences and accumulates the rollup:
9
- * - renderedByCount: count of times this component sat under each parent
10
- * componentId (one increment per occurrence with that parentComponentId).
11
- * - rendersByCount: sum of childCompId → count maps across this component's
12
- * occurrences, drawn from the pass-1 index.
13
- * - isRootCount: occurrences with no parentOccurrenceId.
14
- * - isLeafCount: occurrences with no entries in the pass-1 index for them.
15
- * - depth metrics: avg + max over occurrence.depth (defaults to 0 when absent).
16
- * - childCount metrics: avg + max children per occurrence.
9
+ * Pass 2 visits each component and accumulates:
10
+ * - rendersByCount: child componentId → count of occurrences this component
11
+ * owns. Built from the pass-1 index.
12
+ * - renderedByCount: parent componentId → count of times this component
13
+ * appears with that owner.
14
+ * - isRootCount: occurrences of this component with no ownerComponentId.
15
+ * - isLeafCount: this component's own occurrences whose rendersByCount is
16
+ * empty (i.e. the component doesn't own anything).
17
17
  *
18
- * Components with no occurrences are returned unchanged (no `composition` field).
18
+ * Every component receives a composition block even when it has zero
19
+ * occurrences and owns nothing — so downstream graph traversals always find
20
+ * the field present.
19
21
  */
20
22
  import type { OutputComponent, OutputOccurrence } from "@component-compass/plugin-core";
21
23
  export declare function applyCompositionRollup(components: OutputComponent[], occurrences: OutputOccurrence[]): OutputComponent[];
@@ -1,17 +1,26 @@
1
1
  export function applyCompositionRollup(components, occurrences) {
2
- // Pass 1: index children by parent occurrenceId, grouped by child componentId.
3
- const childrenByParent = new Map();
2
+ const childrenByOwner = new Map();
3
+ const ownersByChild = new Map();
4
+ const rootCountByChild = new Map();
4
5
  for (const o of occurrences) {
5
- if (o.parentOccurrenceId) {
6
- let m = childrenByParent.get(o.parentOccurrenceId);
6
+ if (o.ownerComponentId) {
7
+ let m = childrenByOwner.get(o.ownerComponentId);
7
8
  if (!m) {
8
9
  m = new Map();
9
- childrenByParent.set(o.parentOccurrenceId, m);
10
+ childrenByOwner.set(o.ownerComponentId, m);
10
11
  }
11
12
  m.set(o.componentId, (m.get(o.componentId) ?? 0) + 1);
13
+ let m2 = ownersByChild.get(o.componentId);
14
+ if (!m2) {
15
+ m2 = new Map();
16
+ ownersByChild.set(o.componentId, m2);
17
+ }
18
+ m2.set(o.ownerComponentId, (m2.get(o.ownerComponentId) ?? 0) + 1);
19
+ }
20
+ else {
21
+ rootCountByChild.set(o.componentId, (rootCountByChild.get(o.componentId) ?? 0) + 1);
12
22
  }
13
23
  }
14
- // Group occurrences by componentId once, for per-component aggregation.
15
24
  const occsByComp = new Map();
16
25
  for (const o of occurrences) {
17
26
  const list = occsByComp.get(o.componentId);
@@ -20,53 +29,34 @@ export function applyCompositionRollup(components, occurrences) {
20
29
  else
21
30
  occsByComp.set(o.componentId, [o]);
22
31
  }
32
+ const validIds = new Set(components.map((c) => c.id));
23
33
  return components.map((c) => {
24
- const occs = occsByComp.get(c.id) ?? [];
25
- if (occs.length === 0)
26
- return c;
27
34
  const rendersByCount = {};
28
35
  const renderedByCount = {};
29
- let isRootCount = 0;
36
+ const isRootCount = rootCountByChild.get(c.id) ?? 0;
30
37
  let isLeafCount = 0;
31
- let depthSum = 0;
32
- let maxDepth = 0;
33
- let totalChildCount = 0;
34
- let maxChildCount = 0;
35
- for (const o of occs) {
36
- const childMap = childrenByParent.get(o.occurrenceId);
37
- const childCount = childMap
38
- ? Array.from(childMap.values()).reduce((a, b) => a + b, 0)
39
- : 0;
40
- if (childMap) {
41
- for (const [childId, count] of childMap) {
42
- rendersByCount[childId] = (rendersByCount[childId] ?? 0) + count;
43
- }
44
- }
45
- if (o.parentComponentId) {
46
- renderedByCount[o.parentComponentId] = (renderedByCount[o.parentComponentId] ?? 0) + 1;
47
- }
48
- else {
49
- isRootCount++;
50
- }
51
- if (childCount === 0)
52
- isLeafCount++;
53
- const d = o.depth ?? 0;
54
- depthSum += d;
55
- if (d > maxDepth)
56
- maxDepth = d;
57
- totalChildCount += childCount;
58
- if (childCount > maxChildCount)
59
- maxChildCount = childCount;
38
+ const renders = childrenByOwner.get(c.id);
39
+ if (renders)
40
+ for (const [childId, n] of renders)
41
+ rendersByCount[childId] = n;
42
+ const owners = ownersByChild.get(c.id);
43
+ if (owners)
44
+ for (const [ownerId, n] of owners)
45
+ renderedByCount[ownerId] = n;
46
+ for (const k of Object.keys(rendersByCount))
47
+ if (!validIds.has(k))
48
+ delete rendersByCount[k];
49
+ for (const k of Object.keys(renderedByCount))
50
+ if (!validIds.has(k))
51
+ delete renderedByCount[k];
52
+ if (Object.keys(rendersByCount).length === 0) {
53
+ isLeafCount = (occsByComp.get(c.id) ?? []).length;
60
54
  }
61
55
  const composition = {
62
56
  rendersByCount,
63
57
  renderedByCount,
64
58
  isRootCount,
65
59
  isLeafCount,
66
- avgDepth: depthSum / occs.length,
67
- maxDepth,
68
- avgChildCount: totalChildCount / occs.length,
69
- maxChildCount,
70
60
  };
71
61
  return { ...c, composition };
72
62
  });
@@ -1 +1 @@
1
- {"version":3,"file":"composition-rollup.js","sourceRoot":"","sources":["../src/composition-rollup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"composition-rollup.js","sourceRoot":"","sources":["../src/composition-rollup.ts"],"names":[],"mappings":"AA2BA,MAAM,UAAU,sBAAsB,CACpC,UAA6B,EAC7B,WAA+B;IAE/B,MAAM,eAAe,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC/D,MAAM,aAAa,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC7D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEnD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAChD,IAAI,CAAC,CAAC,EAAE,CAAC;gBACP,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;gBACd,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAEtD,IAAI,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;gBACf,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAC;IACzD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YAClB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,MAAM,cAAc,GAA2B,EAAE,CAAC;QAClD,MAAM,eAAe,GAA2B,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,OAAO;YAAE,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,OAAO;gBAAE,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE7E,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,MAAM;YAAE,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,MAAM;gBAAE,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE5E,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;QAC5F,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;QAE9F,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,WAAW,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACpD,CAAC;QAED,MAAM,WAAW,GAAsB;YACrC,cAAc;YACd,eAAe;YACf,WAAW;YACX,WAAW;SACZ,CAAC;QAEF,OAAO,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Three-lane identity derivation + stable id keying.
3
3
  *
4
- * Two pure functions that translate a per-occurrence `ComponentId + via +
4
+ * Two pure functions that translate a per-occurrence `ComponentId +
5
5
  * derivedTags + repoId` tuple into the rolled-up `OutputIdentity` and a
6
6
  * deterministic short hash used as the component's `id` in the emitted
7
7
  * artifact.
@@ -23,12 +23,18 @@
23
23
  *
24
24
  * NOT yet wired into the scan pipeline — wiring is a separate task.
25
25
  */
26
- import type { ComponentId, OccurrenceVia, OutputIdentity } from "@component-compass/plugin-core";
26
+ import type { ComponentId, OutputIdentity } from "@component-compass/plugin-core";
27
+ import type { WorkspaceGraph } from "./workspace/types.js";
27
28
  export type IdentityInputs = {
28
29
  componentId: ComponentId;
29
- via: OccurrenceVia;
30
30
  derivedTags: readonly string[];
31
31
  repoId: string;
32
+ workspaceGraph?: WorkspaceGraph;
33
+ /** Optional declaration position (only meaningful for local scope). */
34
+ definitionLoc?: {
35
+ line: number;
36
+ column: number;
37
+ };
32
38
  };
33
39
  export declare function computeOutputIdentity(inputs: IdentityInputs): OutputIdentity;
34
40
  export declare function computeStableId(identity: OutputIdentity): string;
package/dist/identity.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Three-lane identity derivation + stable id keying.
3
3
  *
4
- * Two pure functions that translate a per-occurrence `ComponentId + via +
4
+ * Two pure functions that translate a per-occurrence `ComponentId +
5
5
  * derivedTags + repoId` tuple into the rolled-up `OutputIdentity` and a
6
6
  * deterministic short hash used as the component's `id` in the emitted
7
7
  * artifact.
@@ -24,8 +24,10 @@
24
24
  * NOT yet wired into the scan pipeline — wiring is a separate task.
25
25
  */
26
26
  import { createHash } from "node:crypto";
27
+ import { join } from "node:path";
28
+ import { findOwningPackage } from "./workspace/find-owning-package.js";
27
29
  export function computeOutputIdentity(inputs) {
28
- const { componentId, via, derivedTags, repoId } = inputs;
30
+ const { componentId, derivedTags, repoId, definitionLoc } = inputs;
29
31
  const { source, kind } = componentId;
30
32
  const isLocal = source.type === "local";
31
33
  const scope = isLocal
@@ -36,7 +38,6 @@ export function computeOutputIdentity(inputs) {
36
38
  const identity = {
37
39
  scope,
38
40
  kind,
39
- via: { kind: via.kind },
40
41
  };
41
42
  if (source.type === "external") {
42
43
  identity.packageName = source.package;
@@ -51,6 +52,17 @@ export function computeOutputIdentity(inputs) {
51
52
  if (isLocal && source.type === "local") {
52
53
  identity.repoId = repoId;
53
54
  identity.filePath = source.filePath;
55
+ if (inputs.workspaceGraph) {
56
+ // findOwningPackage operates on absolute paths; source.filePath is
57
+ // repo-relative, so resolve against workspaceGraph.rootPath.
58
+ const abs = join(inputs.workspaceGraph.rootPath, source.filePath);
59
+ const owning = findOwningPackage(inputs.workspaceGraph, abs);
60
+ if (owning)
61
+ identity.packageName = owning.name;
62
+ }
63
+ if (definitionLoc !== undefined) {
64
+ identity.definition = definitionLoc;
65
+ }
54
66
  }
55
67
  return identity;
56
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAWvE,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IAC1D,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IACnE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;IAErC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;IACxC,MAAM,KAAK,GAA4B,OAAO;QAC5C,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,UAAU,CAAC;IAEjB,MAAM,QAAQ,GAAmB;QAC/B,KAAK;QACL,IAAI;KACL,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;IACxC,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC1C,QAAQ,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,kCAAkC;QAClC,QAAQ,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACvC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACpC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,mEAAmE;YACnE,6DAA6D;YAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YAC7D,IAAI,MAAM;gBAAE,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;QACjD,CAAC;QACD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,QAAQ,CAAC,UAAU,GAAG,aAAa,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE,CACtC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,QAAwB;IACtD,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,SAAS,CACd,UAAU,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,EAAE,CAC5F,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,SAAS,CAAC,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,8BAA8B,CAAC,CAAc;IAC3D,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACvE,mEAAmE;QACnE,gEAAgE;QAChE,sCAAsC;QACtC,OAAO,SAAS,CACd,YAAY,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,WAAW,KAAK,CAAC,CAAC,IAAI,EAAE,CAC3D,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9C,CAAC"}