@component-compass/cli 0.0.1 → 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.
- package/README.md +1 -1
- package/dist/cli.js +12 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts +3 -2
- package/dist/commands/init.js +50 -62
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/no-deps-diagnostic.d.ts +15 -0
- package/dist/commands/no-deps-diagnostic.js +23 -0
- package/dist/commands/no-deps-diagnostic.js.map +1 -0
- package/dist/commands/scan.d.ts +1 -0
- package/dist/commands/scan.js +126 -82
- package/dist/commands/scan.js.map +1 -1
- package/dist/composition-rollup.d.ts +23 -0
- package/dist/composition-rollup.js +64 -0
- package/dist/composition-rollup.js.map +1 -0
- package/dist/config/loader.js +5 -3
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +1 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/identity.d.ts +21 -3
- package/dist/identity.js +40 -3
- package/dist/identity.js.map +1 -1
- package/dist/local-index/detect-react.js +224 -47
- package/dist/local-index/detect-react.js.map +1 -1
- package/dist/local-index/index.d.ts +4 -1
- package/dist/local-index/index.js +30 -13
- package/dist/local-index/index.js.map +1 -1
- package/dist/manifest/barrel-parser.d.ts +20 -0
- package/dist/manifest/barrel-parser.js +101 -16
- package/dist/manifest/barrel-parser.js.map +1 -1
- package/dist/manifest/derived-manifest-stub.d.ts +9 -0
- package/dist/manifest/derived-manifest-stub.js +11 -0
- package/dist/manifest/derived-manifest-stub.js.map +1 -0
- package/dist/manifest/diagnostic-filter.d.ts +13 -0
- package/dist/manifest/diagnostic-filter.js +36 -0
- package/dist/manifest/diagnostic-filter.js.map +1 -0
- package/dist/manifest/lazy-resolver.d.ts +44 -0
- package/dist/manifest/lazy-resolver.js +532 -0
- package/dist/manifest/lazy-resolver.js.map +1 -0
- package/dist/occurrences.d.ts +17 -0
- package/dist/occurrences.js +97 -0
- package/dist/occurrences.js.map +1 -0
- package/dist/reporter/index.d.ts +47 -9
- package/dist/reporter/index.js +167 -17
- package/dist/reporter/index.js.map +1 -1
- package/dist/reporter/json.d.ts +6 -2
- package/dist/reporter/json.js +7 -3
- package/dist/reporter/json.js.map +1 -1
- package/dist/reporter/stdout.d.ts +2 -2
- package/dist/reporter/stdout.js +11 -23
- package/dist/reporter/stdout.js.map +1 -1
- package/dist/rollup.d.ts +8 -2
- package/dist/rollup.js +2 -3
- package/dist/rollup.js.map +1 -1
- package/dist/seeds.d.ts +41 -0
- package/dist/seeds.js +145 -0
- package/dist/seeds.js.map +1 -0
- package/dist/types.d.ts +0 -1
- package/dist/workspace/build-graph.d.ts +2 -0
- package/dist/workspace/build-graph.js +117 -0
- package/dist/workspace/build-graph.js.map +1 -0
- package/dist/workspace/declared-deps.d.ts +5 -0
- package/dist/workspace/declared-deps.js +42 -0
- package/dist/workspace/declared-deps.js.map +1 -0
- package/dist/workspace/find-owning-package.d.ts +2 -0
- package/dist/workspace/find-owning-package.js +49 -0
- package/dist/workspace/find-owning-package.js.map +1 -0
- package/dist/workspace/index.d.ts +4 -0
- package/dist/workspace/index.js +4 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/types.d.ts +46 -0
- package/dist/workspace/types.js +13 -0
- package/dist/workspace/types.js.map +1 -0
- package/package.json +11 -9
- package/schema/config.schema.json +2 -10
- package/dist/graph/builder.d.ts +0 -25
- package/dist/graph/builder.js +0 -176
- package/dist/graph/builder.js.map +0 -1
- package/dist/manifest/discovery.d.ts +0 -24
- package/dist/manifest/discovery.js +0 -194
- package/dist/manifest/discovery.js.map +0 -1
- package/dist/manifest/index.d.ts +0 -6
- package/dist/manifest/index.js +0 -98
- package/dist/manifest/index.js.map +0 -1
- package/dist/manifest/resolver.d.ts +0 -30
- package/dist/manifest/resolver.js +0 -136
- package/dist/manifest/resolver.js.map +0 -1
- package/dist/manifest/run-discovery.d.ts +0 -12
- package/dist/manifest/run-discovery.js +0 -46
- package/dist/manifest/run-discovery.js.map +0 -1
- package/dist/manifest/types.d.ts +0 -3
- package/dist/manifest/types.js +0 -2
- package/dist/manifest/types.js.map +0 -1
- package/dist/reporter/types.d.ts +0 -69
- package/dist/reporter/types.js +0 -2
- package/dist/reporter/types.js.map +0 -1
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { type WalkOptions } from "./walker.js";
|
|
2
2
|
import type { LocalDefinitionIndex } from "./types.js";
|
|
3
|
-
|
|
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
|
|
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
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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;
|
|
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"}
|
|
@@ -20,3 +20,23 @@ export type BarrelReExport = {
|
|
|
20
20
|
* Returns [] on parse failure rather than throwing.
|
|
21
21
|
*/
|
|
22
22
|
export declare function parseBarrelTopLevel(source: string): BarrelReExport[];
|
|
23
|
+
export type BarrelUnsupportedForm = {
|
|
24
|
+
form: "cjs-reexport";
|
|
25
|
+
line?: number;
|
|
26
|
+
} | {
|
|
27
|
+
form: "conditional-reexport";
|
|
28
|
+
line?: number;
|
|
29
|
+
};
|
|
30
|
+
export type BarrelParseResult = {
|
|
31
|
+
reExports: BarrelReExport[];
|
|
32
|
+
unsupported: BarrelUnsupportedForm[];
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Like {@link parseBarrelTopLevel}, but also returns a list of unsupported
|
|
36
|
+
* top-level shapes encountered (e.g. CJS re-exports, conditional re-exports)
|
|
37
|
+
* so callers can surface diagnostics rather than silently dropping leaves.
|
|
38
|
+
*
|
|
39
|
+
* Returns `{ reExports: [], unsupported: [] }` on parse failure rather than
|
|
40
|
+
* throwing.
|
|
41
|
+
*/
|
|
42
|
+
export declare function parseBarrelTopLevelDetailed(source: string): BarrelParseResult;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { parse } from "@babel/parser";
|
|
2
|
+
import * as t from "@babel/types";
|
|
2
3
|
/**
|
|
3
4
|
* Extract top-level re-exports from a JS/TS source file. Returns only
|
|
4
5
|
* `export * from "X"`, `export * as NS from "X"`, and
|
|
@@ -10,6 +11,17 @@ import { parse } from "@babel/parser";
|
|
|
10
11
|
* Returns [] on parse failure rather than throwing.
|
|
11
12
|
*/
|
|
12
13
|
export function parseBarrelTopLevel(source) {
|
|
14
|
+
return parseBarrelTopLevelDetailed(source).reExports;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Like {@link parseBarrelTopLevel}, but also returns a list of unsupported
|
|
18
|
+
* top-level shapes encountered (e.g. CJS re-exports, conditional re-exports)
|
|
19
|
+
* so callers can surface diagnostics rather than silently dropping leaves.
|
|
20
|
+
*
|
|
21
|
+
* Returns `{ reExports: [], unsupported: [] }` on parse failure rather than
|
|
22
|
+
* throwing.
|
|
23
|
+
*/
|
|
24
|
+
export function parseBarrelTopLevelDetailed(source) {
|
|
13
25
|
let ast;
|
|
14
26
|
try {
|
|
15
27
|
ast = parse(source, {
|
|
@@ -19,44 +31,117 @@ export function parseBarrelTopLevel(source) {
|
|
|
19
31
|
});
|
|
20
32
|
}
|
|
21
33
|
catch {
|
|
22
|
-
return [];
|
|
34
|
+
return { reExports: [], unsupported: [] };
|
|
23
35
|
}
|
|
24
|
-
const
|
|
36
|
+
const reExports = [];
|
|
37
|
+
const unsupported = [];
|
|
25
38
|
for (const node of ast.program.body) {
|
|
26
|
-
if (node
|
|
27
|
-
|
|
39
|
+
if (t.isExportAllDeclaration(node)) {
|
|
40
|
+
reExports.push({ kind: "star", from: node.source.value });
|
|
28
41
|
continue;
|
|
29
42
|
}
|
|
30
|
-
if (node
|
|
31
|
-
// export { local } — no `from` clause, ignore (not a re-export).
|
|
43
|
+
if (t.isExportNamedDeclaration(node)) {
|
|
32
44
|
if (!node.source)
|
|
33
45
|
continue;
|
|
34
|
-
// export type { ... } from — strip.
|
|
35
46
|
if (node.exportKind === "type")
|
|
36
47
|
continue;
|
|
37
|
-
// export * as NS from "X" — Babel parses this as ExportNamedDeclaration
|
|
38
|
-
// with a single ExportNamespaceSpecifier; treat it as a star re-export.
|
|
39
48
|
const onlySpec = node.specifiers[0];
|
|
40
|
-
if (node.specifiers.length === 1 &&
|
|
41
|
-
|
|
49
|
+
if (node.specifiers.length === 1 &&
|
|
50
|
+
onlySpec &&
|
|
51
|
+
t.isExportNamespaceSpecifier(onlySpec)) {
|
|
52
|
+
reExports.push({ kind: "star", from: node.source.value });
|
|
42
53
|
continue;
|
|
43
54
|
}
|
|
44
55
|
const namesPart = [];
|
|
45
56
|
for (const spec of node.specifiers) {
|
|
46
|
-
if (spec
|
|
57
|
+
if (!t.isExportSpecifier(spec))
|
|
47
58
|
continue;
|
|
48
|
-
// Strip per-specifier `export type { Foo }`.
|
|
49
59
|
if (spec.exportKind === "type")
|
|
50
60
|
continue;
|
|
51
61
|
const local = spec.local.name;
|
|
52
|
-
const exported =
|
|
62
|
+
const exported = t.isIdentifier(spec.exported)
|
|
63
|
+
? spec.exported.name
|
|
64
|
+
: spec.exported.value;
|
|
53
65
|
namesPart.push({ local, exported });
|
|
54
66
|
}
|
|
55
67
|
if (namesPart.length === 0)
|
|
56
68
|
continue;
|
|
57
|
-
|
|
69
|
+
reExports.push({ kind: "named", from: node.source.value, names: namesPart });
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
// CommonJS top-level reassignment: `module.exports = require(...)` /
|
|
73
|
+
// `module.exports = ...` covered by ExpressionStatement at top level.
|
|
74
|
+
if (t.isExpressionStatement(node) && isCjsReexport(node.expression)) {
|
|
75
|
+
const entry = { form: "cjs-reexport" };
|
|
76
|
+
if (typeof node.loc?.start.line === "number")
|
|
77
|
+
entry.line = node.loc.start.line;
|
|
78
|
+
unsupported.push(entry);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
// Anything wrapping a CJS reassignment in a conditional.
|
|
82
|
+
if (t.isIfStatement(node) && containsCjsReexport(node)) {
|
|
83
|
+
const entry = { form: "conditional-reexport" };
|
|
84
|
+
if (typeof node.loc?.start.line === "number")
|
|
85
|
+
entry.line = node.loc.start.line;
|
|
86
|
+
unsupported.push(entry);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return { reExports, unsupported };
|
|
90
|
+
}
|
|
91
|
+
function isCjsReexport(expr) {
|
|
92
|
+
if (!expr || !t.isAssignmentExpression(expr))
|
|
93
|
+
return false;
|
|
94
|
+
if (!t.isMemberExpression(expr.left))
|
|
95
|
+
return false;
|
|
96
|
+
return (t.isIdentifier(expr.left.object, { name: "module" }) &&
|
|
97
|
+
t.isIdentifier(expr.left.property, { name: "exports" }));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Walk an `IfStatement` looking for a top-level `module.exports = ...`
|
|
101
|
+
* inside the consequent / alternate.
|
|
102
|
+
*
|
|
103
|
+
* The walk is type-aware: it descends only into structural children that
|
|
104
|
+
* execute when the if branch executes. Function and class bodies are
|
|
105
|
+
* treated as opaque boundaries — `module.exports = ...` defined inside a
|
|
106
|
+
* nested function declaration / arrow / class method does not run when the
|
|
107
|
+
* `if` body runs, so it would be a false positive to flag it.
|
|
108
|
+
*/
|
|
109
|
+
function containsCjsReexport(node) {
|
|
110
|
+
return visitConditionalBody(node.consequent) || visitConditionalBody(node.alternate);
|
|
111
|
+
}
|
|
112
|
+
function visitConditionalBody(node) {
|
|
113
|
+
if (!node)
|
|
114
|
+
return false;
|
|
115
|
+
// Direct CJS reassignment.
|
|
116
|
+
if (t.isExpressionStatement(node) && isCjsReexport(node.expression)) {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
// Function / class scopes don't execute now — opaque boundary.
|
|
120
|
+
if (t.isFunctionDeclaration(node) ||
|
|
121
|
+
t.isFunctionExpression(node) ||
|
|
122
|
+
t.isArrowFunctionExpression(node) ||
|
|
123
|
+
t.isObjectMethod(node) ||
|
|
124
|
+
t.isClassMethod(node) ||
|
|
125
|
+
t.isClassDeclaration(node) ||
|
|
126
|
+
t.isClassExpression(node)) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
if (t.isBlockStatement(node)) {
|
|
130
|
+
for (const stmt of node.body) {
|
|
131
|
+
if (visitConditionalBody(stmt))
|
|
132
|
+
return true;
|
|
58
133
|
}
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
if (t.isIfStatement(node)) {
|
|
137
|
+
return (visitConditionalBody(node.consequent) || visitConditionalBody(node.alternate));
|
|
138
|
+
}
|
|
139
|
+
if (t.isLabeledStatement(node) || t.isWithStatement(node)) {
|
|
140
|
+
return visitConditionalBody(node.body);
|
|
59
141
|
}
|
|
60
|
-
return
|
|
142
|
+
// Other statement types (loops, try/catch, switch, return, throw, ...) are
|
|
143
|
+
// not unwrapped here. The Phase 1 spec is IfStatement-only; broader
|
|
144
|
+
// detection (try/catch, switch) is tracked as a follow-up.
|
|
145
|
+
return false;
|
|
61
146
|
}
|
|
62
147
|
//# sourceMappingURL=barrel-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"barrel-parser.js","sourceRoot":"","sources":["../../src/manifest/barrel-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"barrel-parser.js","sourceRoot":"","sources":["../../src/manifest/barrel-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DerivedLeafPayload } from "@component-compass/plugin-core";
|
|
2
|
+
/**
|
|
3
|
+
* Phase 4 hook for extracting `derived` manifest data from leaf source when
|
|
4
|
+
* no authored manifest exists. Phase 1 ships the contract only — extractor
|
|
5
|
+
* implementations live in `manifest-react` / `manifest-vue` and land in
|
|
6
|
+
* Phase 4. Until then this returns null and `components[].manifest` stays
|
|
7
|
+
* null for any leaf without an authored manifest.
|
|
8
|
+
*/
|
|
9
|
+
export declare function extractDerivedManifest(_leafPackageDir: string): DerivedLeafPayload | null;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 4 hook for extracting `derived` manifest data from leaf source when
|
|
3
|
+
* no authored manifest exists. Phase 1 ships the contract only — extractor
|
|
4
|
+
* implementations live in `manifest-react` / `manifest-vue` and land in
|
|
5
|
+
* Phase 4. Until then this returns null and `components[].manifest` stays
|
|
6
|
+
* null for any leaf without an authored manifest.
|
|
7
|
+
*/
|
|
8
|
+
export function extractDerivedManifest(_leafPackageDir) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=derived-manifest-stub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derived-manifest-stub.js","sourceRoot":"","sources":["../../src/manifest/derived-manifest-stub.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,eAAuB;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Diagnostic } from "@component-compass/plugin-core";
|
|
2
|
+
/**
|
|
3
|
+
* Builds the predicate scan.ts uses to decide whether a resolver diagnostic
|
|
4
|
+
* should reach stderr.
|
|
5
|
+
*
|
|
6
|
+
* Empty `packageScopes` is the explicit "no filter" signal — every
|
|
7
|
+
* diagnostic surfaces. Otherwise the scopes act as an allowlist matched
|
|
8
|
+
* against the diagnostic's `packageName`. A diagnostic with no resolvable
|
|
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) — except
|
|
11
|
+
* scan-level codes, which are workspace-config signals and always surface.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildDiagnosticGate(packageScopes: string[]): (d: Diagnostic) => boolean;
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
]);
|
|
12
|
+
/**
|
|
13
|
+
* Builds the predicate scan.ts uses to decide whether a resolver diagnostic
|
|
14
|
+
* should reach stderr.
|
|
15
|
+
*
|
|
16
|
+
* Empty `packageScopes` is the explicit "no filter" signal — every
|
|
17
|
+
* diagnostic surfaces. Otherwise the scopes act as an allowlist matched
|
|
18
|
+
* against the diagnostic's `packageName`. A diagnostic with no resolvable
|
|
19
|
+
* `packageName` is dropped under an active filter (we cannot prove the
|
|
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.
|
|
22
|
+
*/
|
|
23
|
+
export function buildDiagnosticGate(packageScopes) {
|
|
24
|
+
if (packageScopes.length === 0)
|
|
25
|
+
return () => true;
|
|
26
|
+
const matchers = packageScopes.map((p) => picomatch(p));
|
|
27
|
+
return (d) => {
|
|
28
|
+
if (SCAN_LEVEL_CODES.has(d.code))
|
|
29
|
+
return true;
|
|
30
|
+
const pkg = "packageName" in d ? d.packageName : undefined;
|
|
31
|
+
if (!pkg)
|
|
32
|
+
return false;
|
|
33
|
+
return matchers.some((m) => m(pkg));
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=diagnostic-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type IndexedComponent, type LazyResolverHit, type ManifestRef, type Diagnostic, type DiagnosticCollector } from "@component-compass/plugin-core";
|
|
2
|
+
import type { ResolveImport } from "../walker/resolve-import.js";
|
|
3
|
+
import type { WorkspaceGraph } from "../workspace/types.js";
|
|
4
|
+
export type CreateLazyResolverOptions = {
|
|
5
|
+
resolveImport: ResolveImport;
|
|
6
|
+
/**
|
|
7
|
+
* Anchor for `warmRoots`-style eager loads. Optional — `resolveLazyManifest`
|
|
8
|
+
* itself never reads it (resolution is anchored on the calling file). When
|
|
9
|
+
* absent, `warmRoots` falls back to `process.cwd()`.
|
|
10
|
+
*/
|
|
11
|
+
repoRoot?: string;
|
|
12
|
+
/** Phase 4 hook; defaults to the no-op stub. */
|
|
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;
|
|
27
|
+
};
|
|
28
|
+
export interface LazyResolver {
|
|
29
|
+
resolveLazyManifest(fromFile: string, specifier: string, exportName: string): LazyResolverHit | null;
|
|
30
|
+
lookupByTag(tagName: string): Extract<IndexedComponent, {
|
|
31
|
+
kind: "custom-element";
|
|
32
|
+
}> | null;
|
|
33
|
+
snapshotComponents(): IndexedComponent[];
|
|
34
|
+
snapshotManifestRefs(): ManifestRef[];
|
|
35
|
+
diagnostics(): Diagnostic[];
|
|
36
|
+
/**
|
|
37
|
+
* Eagerly load each named package's root CEM/CCM (if present) so the
|
|
38
|
+
* `byTag` cache covers tag-only consumers (HTML / Vue templates with no
|
|
39
|
+
* JS-side import to prime the resolver). No barrel walking — just a single
|
|
40
|
+
* leaf-load per package, mirroring the resolver's terminal-load step.
|
|
41
|
+
*/
|
|
42
|
+
warmRoots(packageNames: string[]): void;
|
|
43
|
+
}
|
|
44
|
+
export declare function createLazyResolver(opts: CreateLazyResolverOptions): LazyResolver;
|