@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
@@ -1,14 +1,18 @@
1
1
  import { parse } from "@babel/parser";
2
- import { traverse } from "@component-compass/ast-utils";
3
2
  const REACT_EXTS = new Set([".tsx", ".jsx", ".ts", ".js"]);
4
3
  export function detectReactComponents(source, filePath, extension) {
5
4
  if (!REACT_EXTS.has(extension))
6
5
  return [];
6
+ // `.ts` files cannot contain JSX; enabling the jsx plugin there causes
7
+ // valid TypeScript like `return <const>{...}` to fail to parse.
8
+ const plugins = ["typescript", "decorators-legacy", "classProperties"];
9
+ if (extension !== ".ts")
10
+ plugins.push("jsx");
7
11
  const ast = (() => {
8
12
  try {
9
13
  return parse(source, {
10
14
  sourceType: "module",
11
- plugins: ["typescript", "jsx", "decorators-legacy", "classProperties"],
15
+ plugins,
12
16
  errorRecovery: true,
13
17
  });
14
18
  }
@@ -20,60 +24,232 @@ export function detectReactComponents(source, filePath, extension) {
20
24
  return [];
21
25
  const found = [];
22
26
  const filePathSource = { type: "local", filePath };
23
- traverse(ast, {
24
- ExportDefaultDeclaration(path) {
25
- const decl = path.node.declaration;
27
+ // ── Pass 1: collect top-level PascalCase declarations as candidates ──────
28
+ // "Top-level" = direct child of Program, or inline declaration inside an
29
+ // Export*Declaration that is a direct child of Program.
30
+ const candidates = new Map();
31
+ for (const stmt of ast.program.body) {
32
+ // Unwrap export wrappers to get the inner declaration (if any).
33
+ const inner = stmt.type === "ExportNamedDeclaration" && stmt.declaration
34
+ ? stmt.declaration
35
+ : stmt.type === "ExportDefaultDeclaration" && isDeclaration(stmt.declaration)
36
+ ? stmt.declaration
37
+ : stmt;
38
+ if (inner.type === "FunctionDeclaration" && inner.id && isPascalCase(inner.id.name) && returnsJsx(inner)) {
39
+ const name = inner.id.name;
40
+ candidates.set(name, {
41
+ componentId: { kind: "react-component", export: name, source: filePathSource },
42
+ detector: "react-default-fn",
43
+ loc: nodeLoc(inner, filePath),
44
+ });
45
+ }
46
+ else if (inner.type === "ClassDeclaration" && inner.id && isPascalCase(inner.id.name) && hasRenderMethod(inner)) {
47
+ const name = inner.id.name;
48
+ candidates.set(name, {
49
+ componentId: { kind: "react-component", export: name, source: filePathSource },
50
+ detector: "react-class",
51
+ loc: nodeLoc(inner, filePath),
52
+ });
53
+ }
54
+ else if (inner.type === "VariableDeclaration") {
55
+ for (const d of inner.declarations) {
56
+ if (d.id.type !== "Identifier" || !isPascalCase(d.id.name) || !d.init)
57
+ continue;
58
+ const detector = classifyVariableInit(d.init);
59
+ if (detector) {
60
+ const name = d.id.name;
61
+ candidates.set(name, {
62
+ componentId: { kind: "react-component", export: name, source: filePathSource },
63
+ detector,
64
+ loc: nodeLoc(d, filePath),
65
+ });
66
+ }
67
+ }
68
+ }
69
+ }
70
+ // ── Pass 2: walk exports and emit LocalDefinitions ───────────────────────
71
+ // Track what we've already emitted to avoid double-emission.
72
+ // Key = `${exportName}:${isDefault}` for deduplication.
73
+ const emitted = new Set();
74
+ function emitKey(exportName, isDefault) {
75
+ return `${exportName}:${isDefault}`;
76
+ }
77
+ function emit(def) {
78
+ const key = emitKey(def.exportName, def.isDefault);
79
+ if (emitted.has(key))
80
+ return;
81
+ emitted.add(key);
82
+ found.push(def);
83
+ }
84
+ for (const stmt of ast.program.body) {
85
+ // ── ExportDefaultDeclaration ──────────────────────────────────────────
86
+ if (stmt.type === "ExportDefaultDeclaration") {
87
+ const decl = stmt.declaration;
88
+ // Named function declaration: `export default function Foo() {}`
26
89
  if (decl.type === "FunctionDeclaration" && decl.id && isPascalCase(decl.id.name) && returnsJsx(decl)) {
27
- found.push({
90
+ emit({
28
91
  componentId: { kind: "react-component", export: decl.id.name, source: filePathSource },
29
92
  exportName: decl.id.name,
30
93
  isDefault: true,
31
94
  detector: "react-default-fn",
95
+ ...withLoc(nodeLoc(decl, filePath)),
96
+ });
97
+ continue;
98
+ }
99
+ // Anonymous function-declaration default: `export default function() {}`
100
+ if (decl.type === "FunctionDeclaration" && returnsJsx(decl)) {
101
+ emit({
102
+ componentId: { kind: "react-component", export: "default", source: filePathSource },
103
+ exportName: "default",
104
+ isDefault: true,
105
+ detector: "react-default-fn",
106
+ ...withLoc(nodeLoc(decl, filePath)),
107
+ });
108
+ continue;
109
+ }
110
+ // Anonymous arrow / function expression default: `export default () => <Foo/>`
111
+ if ((decl.type === "ArrowFunctionExpression" || decl.type === "FunctionExpression") &&
112
+ returnsJsx(decl)) {
113
+ emit({
114
+ componentId: { kind: "react-component", export: "default", source: filePathSource },
115
+ exportName: "default",
116
+ isDefault: true,
117
+ detector: "react-arrow",
118
+ ...withLoc(nodeLoc(decl, filePath)),
32
119
  });
120
+ continue;
33
121
  }
122
+ // Class component default: `export default class Foo extends Component { render() {} }`
34
123
  if (decl.type === "ClassDeclaration" &&
35
124
  decl.id &&
36
125
  isPascalCase(decl.id.name) &&
37
- extendsReactClass(decl)) {
38
- found.push({
126
+ hasRenderMethod(decl)) {
127
+ emit({
39
128
  componentId: { kind: "react-component", export: decl.id.name, source: filePathSource },
40
129
  exportName: decl.id.name,
41
130
  isDefault: true,
42
131
  detector: "react-class",
132
+ ...withLoc(nodeLoc(decl, filePath)),
43
133
  });
134
+ continue;
44
135
  }
45
- },
46
- ExportNamedDeclaration(path) {
47
- const decl = path.node.declaration;
48
- if (!decl)
49
- return;
50
- if (decl.type === "FunctionDeclaration" && decl.id && isPascalCase(decl.id.name) && returnsJsx(decl)) {
51
- found.push({
52
- componentId: { kind: "react-component", export: decl.id.name, source: filePathSource },
53
- exportName: decl.id.name,
54
- isDefault: false,
55
- detector: "react-default-fn",
56
- });
136
+ // NEW: `export default Identifier` — look up in candidates
137
+ if (decl.type === "Identifier") {
138
+ const candidate = candidates.get(decl.name);
139
+ if (candidate) {
140
+ emit({
141
+ componentId: candidate.componentId,
142
+ exportName: candidate.componentId.kind === "react-component" ? candidate.componentId.export : decl.name,
143
+ isDefault: true,
144
+ detector: candidate.detector,
145
+ ...withLoc(candidate.loc),
146
+ });
147
+ }
148
+ continue;
57
149
  }
58
- if (decl.type === "VariableDeclaration") {
59
- for (const d of decl.declarations) {
60
- if (d.id.type !== "Identifier" || !isPascalCase(d.id.name) || !d.init)
61
- continue;
62
- const detector = classifyVariableInit(d.init);
63
- if (detector) {
64
- found.push({
65
- componentId: { kind: "react-component", export: d.id.name, source: filePathSource },
66
- exportName: d.id.name,
67
- isDefault: false,
68
- detector,
69
- });
150
+ // NEW: `export default memo(Foo)` / `export default forwardRef(Foo)` etc.
151
+ if (decl.type === "CallExpression") {
152
+ const callee = decl.callee;
153
+ let calleeName;
154
+ if (callee.type === "Identifier")
155
+ calleeName = callee.name;
156
+ else if (callee.type === "MemberExpression" && callee.property.type === "Identifier")
157
+ calleeName = callee.property.name;
158
+ const isHoc = calleeName === "memo" || calleeName === "forwardRef" || calleeName === "observer";
159
+ if (isHoc && decl.arguments.length > 0) {
160
+ const firstArg = decl.arguments[0];
161
+ if (firstArg && firstArg.type === "Identifier") {
162
+ const candidate = candidates.get(firstArg.name);
163
+ if (candidate) {
164
+ const detector = calleeName === "forwardRef" ? "react-forward-ref" :
165
+ calleeName === "memo" ? "react-memo" :
166
+ "react-arrow";
167
+ emit({
168
+ componentId: candidate.componentId,
169
+ exportName: candidate.componentId.kind === "react-component" ? candidate.componentId.export : firstArg.name,
170
+ isDefault: true,
171
+ detector,
172
+ ...withLoc(candidate.loc),
173
+ });
174
+ }
70
175
  }
71
176
  }
177
+ continue;
72
178
  }
73
- },
74
- });
179
+ continue;
180
+ }
181
+ // ── ExportNamedDeclaration ────────────────────────────────────────────
182
+ if (stmt.type === "ExportNamedDeclaration") {
183
+ const decl = stmt.declaration;
184
+ // Inline declaration: `export function Foo() {}`, `export const Foo = ...`, etc.
185
+ if (decl) {
186
+ if (decl.type === "FunctionDeclaration" && decl.id && isPascalCase(decl.id.name) && returnsJsx(decl)) {
187
+ emit({
188
+ componentId: { kind: "react-component", export: decl.id.name, source: filePathSource },
189
+ exportName: decl.id.name,
190
+ isDefault: false,
191
+ detector: "react-default-fn",
192
+ ...withLoc(nodeLoc(decl, filePath)),
193
+ });
194
+ }
195
+ if (decl.type === "ClassDeclaration" && decl.id && isPascalCase(decl.id.name) && hasRenderMethod(decl)) {
196
+ emit({
197
+ componentId: { kind: "react-component", export: decl.id.name, source: filePathSource },
198
+ exportName: decl.id.name,
199
+ isDefault: false,
200
+ detector: "react-class",
201
+ ...withLoc(nodeLoc(decl, filePath)),
202
+ });
203
+ }
204
+ if (decl.type === "VariableDeclaration") {
205
+ for (const d of decl.declarations) {
206
+ if (d.id.type !== "Identifier" || !isPascalCase(d.id.name) || !d.init)
207
+ continue;
208
+ const detector = classifyVariableInit(d.init);
209
+ if (detector) {
210
+ emit({
211
+ componentId: { kind: "react-component", export: d.id.name, source: filePathSource },
212
+ exportName: d.id.name,
213
+ isDefault: false,
214
+ detector,
215
+ ...withLoc(nodeLoc(d, filePath)),
216
+ });
217
+ }
218
+ }
219
+ }
220
+ continue;
221
+ }
222
+ // NEW: `export { X }` or `export { X as Y }` — local re-exports (no source).
223
+ // Skip if this is a re-export from another module (`stmt.source` is non-null).
224
+ if (!stmt.source && stmt.specifiers.length > 0) {
225
+ for (const specifier of stmt.specifiers) {
226
+ if (specifier.type !== "ExportSpecifier")
227
+ continue;
228
+ const localName = specifier.local.name;
229
+ const exportedNode = specifier.exported;
230
+ const exportedName = exportedNode.type === "Identifier" ? exportedNode.name : exportedNode.value;
231
+ const isDefault = exportedName === "default";
232
+ const candidate = candidates.get(localName);
233
+ if (!candidate)
234
+ continue;
235
+ emit({
236
+ componentId: candidate.componentId,
237
+ exportName: isDefault ? "default" : exportedName,
238
+ isDefault,
239
+ detector: candidate.detector,
240
+ ...withLoc(candidate.loc),
241
+ });
242
+ }
243
+ }
244
+ }
245
+ }
75
246
  return found;
76
247
  }
248
+ // ── Helpers ────────────────────────────────────────────────────────────────
249
+ /** Narrow whether an ExportDefaultDeclaration's `.declaration` is a statement-like node */
250
+ function isDeclaration(node) {
251
+ return node.type === "FunctionDeclaration" || node.type === "ClassDeclaration";
252
+ }
77
253
  function isPascalCase(name) {
78
254
  return /^[A-Z]/.test(name);
79
255
  }
@@ -84,7 +260,9 @@ function returnsJsx(fn) {
84
260
  const block = fn.body;
85
261
  if (!block || block.type !== "BlockStatement")
86
262
  return false;
87
- return block.body.some((stmt) => stmt.type === "ReturnStatement" && stmt.argument != null && isJsxNode(stmt.argument));
263
+ return block.body.some((stmt) => stmt.type === "ReturnStatement" &&
264
+ stmt.argument != null &&
265
+ (isJsxNode(stmt.argument) || stmt.argument.type === "CallExpression"));
88
266
  }
89
267
  function isJsxNode(node) {
90
268
  if (node.type === "JSXElement" || node.type === "JSXFragment")
@@ -95,18 +273,17 @@ function isJsxNode(node) {
95
273
  return isJsxNode(node.right);
96
274
  return false;
97
275
  }
98
- function extendsReactClass(decl) {
99
- const sup = decl.superClass;
100
- if (!sup)
101
- return false;
102
- if (sup.type === "Identifier") {
103
- return sup.name === "Component" || sup.name === "PureComponent";
104
- }
105
- if (sup.type === "MemberExpression" && sup.object.type === "Identifier" && sup.object.name === "React") {
106
- return (sup.property.type === "Identifier" &&
107
- (sup.property.name === "Component" || sup.property.name === "PureComponent"));
108
- }
109
- return false;
276
+ function hasRenderMethod(decl) {
277
+ return decl.body.body.some((m) => (m.type === "ClassMethod" || m.type === "ClassProperty") &&
278
+ m.key.type === "Identifier" &&
279
+ m.key.name === "render");
280
+ }
281
+ function nodeLoc(node, filePath) {
282
+ const s = node.loc?.start;
283
+ return s ? { file: filePath, line: s.line, column: s.column } : undefined;
284
+ }
285
+ function withLoc(loc) {
286
+ return loc !== undefined ? { loc } : {};
110
287
  }
111
288
  function classifyVariableInit(init) {
112
289
  if (init.type === "ArrowFunctionExpression" || init.type === "FunctionExpression")
@@ -1 +1 @@
1
- {"version":3,"file":"detect-react.js","sourceRoot":"","sources":["../../src/local-index/detect-react.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect-react.js","sourceRoot":"","sources":["../../src/local-index/detect-react.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import { type WalkOptions } from "./walker.js";
2
2
  import type { LocalDefinitionIndex } from "./types.js";
3
- export type BuildLocalIndexOptions = WalkOptions;
3
+ import type { DiagnosticCollector } from "@component-compass/plugin-core";
4
+ export type BuildLocalIndexOptions = WalkOptions & {
5
+ collector?: DiagnosticCollector;
6
+ };
4
7
  export declare function buildLocalIndex(opts: BuildLocalIndexOptions): Promise<LocalDefinitionIndex>;
5
8
  export type { LocalDefinition, LocalDefinitionIndex, DetectorId } from "./types.js";
6
9
  export { emptyLocalIndex } from "./types.js";
@@ -2,9 +2,34 @@ import { walkLocalSources } from "./walker.js";
2
2
  import { detectReactComponents } from "./detect-react.js";
3
3
  import { detectVueComponents } from "./detect-vue.js";
4
4
  import { detectWebComponents } from "./detect-wc.js";
5
+ function indexDefinitions(definitions, collector) {
6
+ const index = { byPath: new Map(), byTag: new Map() };
7
+ for (const def of definitions) {
8
+ if (def.componentId.kind !== "custom-element")
9
+ continue;
10
+ const existing = index.byTag.get(def.componentId.tagName);
11
+ if (existing &&
12
+ existing.componentId.kind === "custom-element" &&
13
+ existing.componentId.source.type === "local" &&
14
+ def.componentId.source.type === "local" &&
15
+ existing.componentId.source.filePath !== def.componentId.source.filePath) {
16
+ collector?.emit({
17
+ code: "local-index-duplicate-tag",
18
+ severity: "warning",
19
+ filePath: def.componentId.source.filePath,
20
+ tagName: def.componentId.tagName,
21
+ conflictsWith: existing.componentId.source.filePath,
22
+ });
23
+ continue;
24
+ }
25
+ index.byTag.set(def.componentId.tagName, def);
26
+ }
27
+ return index;
28
+ }
5
29
  export async function buildLocalIndex(opts) {
6
30
  const files = await walkLocalSources(opts);
7
- const index = { byPath: new Map(), byTag: new Map() };
31
+ const byPath = new Map();
32
+ const allDefs = [];
8
33
  for (const file of files) {
9
34
  const found = [
10
35
  ...detectReactComponents(file.source, file.filePath, file.extension),
@@ -13,19 +38,11 @@ export async function buildLocalIndex(opts) {
13
38
  ];
14
39
  if (found.length === 0)
15
40
  continue;
16
- index.byPath.set(file.filePath, found);
17
- for (const def of found) {
18
- if (def.componentId.kind === "custom-element") {
19
- const existing = index.byTag.get(def.componentId.tagName);
20
- if (existing && existing.componentId.kind === "custom-element" && existing.componentId.source.type === "local" && existing.componentId.source.filePath !== file.filePath) {
21
- console.warn(`[component-compass] duplicate local custom-element <${def.componentId.tagName}> in ${file.filePath} (already registered from ${existing.componentId.source.filePath}); keeping first.`);
22
- continue;
23
- }
24
- index.byTag.set(def.componentId.tagName, def);
25
- }
26
- }
41
+ byPath.set(file.filePath, found);
42
+ allDefs.push(...found);
27
43
  }
28
- return index;
44
+ const tagIndex = indexDefinitions(allDefs, opts.collector);
45
+ return { byPath, byTag: tagIndex.byTag };
29
46
  }
30
47
  export { emptyLocalIndex } from "./types.js";
31
48
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/local-index/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAKrD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAA4B;IAChE,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAyB,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAE5E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAsB;YAC/B,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;YACpE,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;YAClE,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;SACnE,CAAC;QACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,QAAQ,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,gBAAgB,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACzK,OAAO,CAAC,IAAI,CAAC,uDAAuD,GAAG,CAAC,WAAW,CAAC,OAAO,QAAQ,IAAI,CAAC,QAAQ,6BAA6B,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,mBAAmB,CAAC,CAAC;oBACtM,SAAS;gBACX,CAAC;gBACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/local-index/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAMrD,SAAS,gBAAgB,CACvB,WAA8B,EAC9B,SAA+B;IAE/B,MAAM,KAAK,GAAyB,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAC5E,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,gBAAgB;YAAE,SAAS;QACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1D,IACE,QAAQ;YACR,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,gBAAgB;YAC9C,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;YAC5C,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;YACvC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EACxE,CAAC;YACD,SAAS,EAAE,IAAI,CAAC;gBACd,IAAI,EAAE,2BAA2B;gBACjC,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ;gBACzC,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO;gBAChC,aAAa,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ;aACpD,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAA4B;IAChE,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAmC,IAAI,GAAG,EAAE,CAAC;IACzD,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAsB;YAC/B,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;YACpE,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;YAClE,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;SACnE,CAAC;QACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3D,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC3C,CAAC;AAGD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { DerivedManifestData } from "@component-compass/plugin-core";
1
+ import type { DerivedLeafPayload } from "@component-compass/plugin-core";
2
2
  /**
3
3
  * Phase 4 hook for extracting `derived` manifest data from leaf source when
4
4
  * no authored manifest exists. Phase 1 ships the contract only — extractor
@@ -6,4 +6,4 @@ import type { DerivedManifestData } from "@component-compass/plugin-core";
6
6
  * Phase 4. Until then this returns null and `components[].manifest` stays
7
7
  * null for any leaf without an authored manifest.
8
8
  */
9
- export declare function extractDerivedManifest(_leafPackageDir: string): DerivedManifestData | null;
9
+ export declare function extractDerivedManifest(_leafPackageDir: string): DerivedLeafPayload | null;
@@ -1,4 +1,4 @@
1
- import type { ResolverDiagnostic } from "./lazy-resolver.js";
1
+ import type { Diagnostic } from "@component-compass/plugin-core";
2
2
  /**
3
3
  * Builds the predicate scan.ts uses to decide whether a resolver diagnostic
4
4
  * should reach stderr.
@@ -7,6 +7,7 @@ import type { ResolverDiagnostic } from "./lazy-resolver.js";
7
7
  * diagnostic surfaces. Otherwise the scopes act as an allowlist matched
8
8
  * against the diagnostic's `packageName`. A diagnostic with no resolvable
9
9
  * `packageName` is dropped under an active filter (we cannot prove the
10
- * source is in scope, so it is treated as out-of-scope noise).
10
+ * source is in scope, so it is treated as out-of-scope noise) — except
11
+ * scan-level codes, which are workspace-config signals and always surface.
11
12
  */
12
- export declare function buildDiagnosticGate(packageScopes: string[]): (d: ResolverDiagnostic) => boolean;
13
+ export declare function buildDiagnosticGate(packageScopes: string[]): (d: Diagnostic) => boolean;
@@ -1,4 +1,14 @@
1
1
  import picomatch from "picomatch";
2
+ /**
3
+ * Codes that describe a scan-level / config-level condition rather than a
4
+ * package-specific finding. They have no `packageName` by design and must
5
+ * pass the scope gate unconditionally — the gate's job is to drop noisy
6
+ * per-package signals from out-of-scope dependencies, not to silence the
7
+ * "your scopes matched nothing" report.
8
+ */
9
+ const SCAN_LEVEL_CODES = new Set([
10
+ "no-deps-match-scopes",
11
+ ]);
2
12
  /**
3
13
  * Builds the predicate scan.ts uses to decide whether a resolver diagnostic
4
14
  * should reach stderr.
@@ -7,14 +17,17 @@ import picomatch from "picomatch";
7
17
  * diagnostic surfaces. Otherwise the scopes act as an allowlist matched
8
18
  * against the diagnostic's `packageName`. A diagnostic with no resolvable
9
19
  * `packageName` is dropped under an active filter (we cannot prove the
10
- * source is in scope, so it is treated as out-of-scope noise).
20
+ * source is in scope, so it is treated as out-of-scope noise) — except
21
+ * scan-level codes, which are workspace-config signals and always surface.
11
22
  */
12
23
  export function buildDiagnosticGate(packageScopes) {
13
24
  if (packageScopes.length === 0)
14
25
  return () => true;
15
26
  const matchers = packageScopes.map((p) => picomatch(p));
16
27
  return (d) => {
17
- const pkg = d.packageName;
28
+ if (SCAN_LEVEL_CODES.has(d.code))
29
+ return true;
30
+ const pkg = "packageName" in d ? d.packageName : undefined;
18
31
  if (!pkg)
19
32
  return false;
20
33
  return matchers.some((m) => m(pkg));
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostic-filter.js","sourceRoot":"","sources":["../../src/manifest/diagnostic-filter.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAGlC;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,aAAuB;IAEvB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;IAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,CAAC,EAAE,EAAE;QACX,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC;QAC1B,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"diagnostic-filter.js","sourceRoot":"","sources":["../../src/manifest/diagnostic-filter.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAGlC;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAqB;IACnD,sBAAsB;CACvB,CAAC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CACjC,aAAuB;IAEvB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;IAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,CAAC,EAAE,EAAE;QACX,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9C,MAAM,GAAG,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC"}
@@ -1,27 +1,6 @@
1
- import { type IndexedComponent, type LazyResolverHit, type ManifestRef } from "@component-compass/plugin-core";
1
+ import { type IndexedComponent, type LazyResolverHit, type ManifestRef, type Diagnostic, type DiagnosticCollector } from "@component-compass/plugin-core";
2
2
  import type { ResolveImport } from "../walker/resolve-import.js";
3
- export type ResolverDiagnostic = {
4
- code: "barrel-unsupported-form";
5
- file: string;
6
- form: string;
7
- line?: number;
8
- packageName?: string;
9
- } | {
10
- code: "untraceable-barrel";
11
- packageName: string;
12
- resolvedFile: string;
13
- } | {
14
- code: "cycle-detected";
15
- file: string;
16
- exportName: string;
17
- packageName?: string;
18
- } | {
19
- code: "chain-too-deep";
20
- file: string;
21
- exportName: string;
22
- depth: number;
23
- packageName?: string;
24
- };
3
+ import type { WorkspaceGraph } from "../workspace/types.js";
25
4
  export type CreateLazyResolverOptions = {
26
5
  resolveImport: ResolveImport;
27
6
  /**
@@ -31,7 +10,20 @@ export type CreateLazyResolverOptions = {
31
10
  */
32
11
  repoRoot?: string;
33
12
  /** Phase 4 hook; defaults to the no-op stub. */
34
- extractDerivedManifest?: (leafPackageDir: string) => import("@component-compass/plugin-core").DerivedManifestData | null;
13
+ extractDerivedManifest?: (leafPackageDir: string) => import("@component-compass/plugin-core").DerivedLeafPayload | null;
14
+ /**
15
+ * Optional shared diagnostic collector. If absent, the resolver creates
16
+ * its own internal collector accessible via `diagnostics()`.
17
+ */
18
+ collector?: DiagnosticCollector;
19
+ /**
20
+ * Workspace graph for the current scan. When provided, imports whose
21
+ * importer and target both fall inside the workspace graph short-circuit
22
+ * to `null` so the parser's local-detection pipeline classifies them —
23
+ * sibling workspace packages are consumer-owned source, not vendor.
24
+ * Omitted in unit tests that don't exercise workspace-locality.
25
+ */
26
+ workspaceGraph?: WorkspaceGraph;
35
27
  };
36
28
  export interface LazyResolver {
37
29
  resolveLazyManifest(fromFile: string, specifier: string, exportName: string): LazyResolverHit | null;
@@ -40,7 +32,7 @@ export interface LazyResolver {
40
32
  }> | null;
41
33
  snapshotComponents(): IndexedComponent[];
42
34
  snapshotManifestRefs(): ManifestRef[];
43
- diagnostics(): ResolverDiagnostic[];
35
+ diagnostics(): Diagnostic[];
44
36
  /**
45
37
  * Eagerly load each named package's root CEM/CCM (if present) so the
46
38
  * `byTag` cache covers tag-only consumers (HTML / Vue templates with no