@component-compass/cli 0.0.1 → 0.0.2

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 (71) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +8 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/init.d.ts +3 -2
  5. package/dist/commands/init.js +50 -62
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/scan.js +109 -82
  8. package/dist/commands/scan.js.map +1 -1
  9. package/dist/composition-rollup.d.ts +21 -0
  10. package/dist/composition-rollup.js +74 -0
  11. package/dist/composition-rollup.js.map +1 -0
  12. package/dist/config/loader.js +5 -3
  13. package/dist/config/loader.js.map +1 -1
  14. package/dist/config/schema.d.ts +1 -2
  15. package/dist/config/schema.js.map +1 -1
  16. package/dist/identity.d.ts +12 -0
  17. package/dist/identity.js +25 -0
  18. package/dist/identity.js.map +1 -1
  19. package/dist/manifest/barrel-parser.d.ts +20 -0
  20. package/dist/manifest/barrel-parser.js +101 -16
  21. package/dist/manifest/barrel-parser.js.map +1 -1
  22. package/dist/manifest/derived-manifest-stub.d.ts +9 -0
  23. package/dist/manifest/derived-manifest-stub.js +11 -0
  24. package/dist/manifest/derived-manifest-stub.js.map +1 -0
  25. package/dist/manifest/diagnostic-filter.d.ts +12 -0
  26. package/dist/manifest/diagnostic-filter.js +23 -0
  27. package/dist/manifest/diagnostic-filter.js.map +1 -0
  28. package/dist/manifest/lazy-resolver.d.ts +52 -0
  29. package/dist/manifest/lazy-resolver.js +405 -0
  30. package/dist/manifest/lazy-resolver.js.map +1 -0
  31. package/dist/occurrences.d.ts +17 -0
  32. package/dist/occurrences.js +73 -0
  33. package/dist/occurrences.js.map +1 -0
  34. package/dist/reporter/index.d.ts +26 -3
  35. package/dist/reporter/index.js +68 -5
  36. package/dist/reporter/index.js.map +1 -1
  37. package/dist/reporter/json.d.ts +6 -2
  38. package/dist/reporter/json.js +7 -3
  39. package/dist/reporter/json.js.map +1 -1
  40. package/dist/reporter/stdout.d.ts +2 -2
  41. package/dist/reporter/stdout.js +11 -23
  42. package/dist/reporter/stdout.js.map +1 -1
  43. package/dist/rollup.js +0 -1
  44. package/dist/rollup.js.map +1 -1
  45. package/dist/seeds.d.ts +40 -0
  46. package/dist/seeds.js +114 -0
  47. package/dist/seeds.js.map +1 -0
  48. package/dist/types.d.ts +0 -1
  49. package/package.json +9 -9
  50. package/schema/config.schema.json +2 -10
  51. package/dist/graph/builder.d.ts +0 -25
  52. package/dist/graph/builder.js +0 -176
  53. package/dist/graph/builder.js.map +0 -1
  54. package/dist/manifest/discovery.d.ts +0 -24
  55. package/dist/manifest/discovery.js +0 -194
  56. package/dist/manifest/discovery.js.map +0 -1
  57. package/dist/manifest/index.d.ts +0 -6
  58. package/dist/manifest/index.js +0 -98
  59. package/dist/manifest/index.js.map +0 -1
  60. package/dist/manifest/resolver.d.ts +0 -30
  61. package/dist/manifest/resolver.js +0 -136
  62. package/dist/manifest/resolver.js.map +0 -1
  63. package/dist/manifest/run-discovery.d.ts +0 -12
  64. package/dist/manifest/run-discovery.js +0 -46
  65. package/dist/manifest/run-discovery.js.map +0 -1
  66. package/dist/manifest/types.d.ts +0 -3
  67. package/dist/manifest/types.js +0 -2
  68. package/dist/manifest/types.js.map +0 -1
  69. package/dist/reporter/types.d.ts +0 -69
  70. package/dist/reporter/types.js +0 -2
  71. package/dist/reporter/types.js.map +0 -1
@@ -30,6 +30,9 @@ export async function loadConfig(configPath) {
30
30
  if (parsed && typeof parsed === "object" && "manifests" in parsed) {
31
31
  throw new ConfigError("CONFIG_INVALID", `${abs}: the \`manifests\` field was removed. Replace with \`packageScopes\` (array of glob patterns matching package names). See docs/usage.md.`);
32
32
  }
33
+ if (parsed && typeof parsed === "object" && "manifestSources" in parsed) {
34
+ throw new ConfigError("CONFIG_INVALID", `${abs}: the \`manifestSources\` field was removed in Phase 1 (lazy resolution). Lazy follow now handles aggregator chains automatically. Drop the field; if you have a bundled-barrel package, ship a component-compass-manifest.json at its package root. See docs/usage.md.`);
35
+ }
33
36
  if (!validateConfig(parsed)) {
34
37
  const issues = (validateConfig.errors ?? [])
35
38
  .map((e) => `${e.instancePath || "<root>"}: ${e.message}`)
@@ -37,11 +40,12 @@ export async function loadConfig(configPath) {
37
40
  throw new ConfigError("CONFIG_INVALID", `Invalid config at ${abs}: ${issues}`);
38
41
  }
39
42
  // parsed is now narrowed to ConfigFile by the typed validator.
43
+ // Default packageScopes to [] when absent (visibility-first).
40
44
  const resolved = {
41
45
  configPath: abs,
42
46
  configDir: dirname(abs),
43
47
  repoId: parsed.repoId,
44
- packageScopes: parsed.packageScopes,
48
+ packageScopes: parsed.packageScopes ?? [],
45
49
  include: parsed.include,
46
50
  exclude: parsed.exclude ?? [],
47
51
  captureValues: parsed.captureValues ?? false,
@@ -49,8 +53,6 @@ export async function loadConfig(configPath) {
49
53
  };
50
54
  // Optional passthroughs — only assigned when present so we satisfy
51
55
  // `exactOptionalPropertyTypes` (undefined ≠ absent).
52
- if (parsed.manifestSources !== undefined)
53
- resolved.manifestSources = parsed.manifestSources;
54
56
  if (parsed.tsconfigPath !== undefined)
55
57
  resolved.tsconfigPath = parsed.tsconfigPath;
56
58
  if (parsed.aliases !== undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -18,8 +18,7 @@ export type TagRule = {
18
18
  */
19
19
  export interface ConfigFile {
20
20
  repoId: string;
21
- packageScopes: string[];
22
- manifestSources?: Record<string, string[]>;
21
+ packageScopes?: string[];
23
22
  include: string[];
24
23
  exclude?: string[];
25
24
  captureValues?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,sEAAsE;AACtE,6EAA6E;AAC7E,0EAA0E;AAC1E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAA2B,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;AAE7E,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;AACzE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AA6BhE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,cAAc,GACzB,GAAG,CAAC,OAAO,CAAa,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,sEAAsE;AACtE,6EAA6E;AAC7E,0EAA0E;AAC1E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAA2B,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;AAE7E,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;AACzE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AA4BhE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,cAAc,GACzB,GAAG,CAAC,OAAO,CAAa,UAAU,CAAC,CAAC"}
@@ -32,3 +32,15 @@ export type IdentityInputs = {
32
32
  };
33
33
  export declare function computeOutputIdentity(inputs: IdentityInputs): OutputIdentity;
34
34
  export declare function computeStableId(identity: OutputIdentity): string;
35
+ /**
36
+ * Produce the same stable id as `computeStableId` from a raw `ComponentId`
37
+ * (as emitted by parsers), without needing to first build an `OutputIdentity`.
38
+ *
39
+ * This is used in `occurrences.ts` so that occurrence `componentId` fields
40
+ * hash-match the `id` values produced by `buildComponentSeeds` → `rollupOccurrencesToComponents`
41
+ * can correctly correlate occurrences to seeds.
42
+ *
43
+ * For local components, `repoId` is absent from the `ComponentId` source, so
44
+ * we use `""` — matching the `repoId: ""` convention in `buildComponentSeeds`.
45
+ */
46
+ export declare function computeStableIdFromComponentId(c: ComponentId): string;
package/dist/identity.js CHANGED
@@ -64,4 +64,29 @@ export function computeStableId(identity) {
64
64
  }
65
65
  return sha1Short(`rc::${identity.packageName}::${identity.exportName}`);
66
66
  }
67
+ /**
68
+ * Produce the same stable id as `computeStableId` from a raw `ComponentId`
69
+ * (as emitted by parsers), without needing to first build an `OutputIdentity`.
70
+ *
71
+ * This is used in `occurrences.ts` so that occurrence `componentId` fields
72
+ * hash-match the `id` values produced by `buildComponentSeeds` → `rollupOccurrencesToComponents`
73
+ * can correctly correlate occurrences to seeds.
74
+ *
75
+ * For local components, `repoId` is absent from the `ComponentId` source, so
76
+ * we use `""` — matching the `repoId: ""` convention in `buildComponentSeeds`.
77
+ */
78
+ export function computeStableIdFromComponentId(c) {
79
+ if (c.source.type === "local") {
80
+ const exportOrTag = c.kind === "custom-element" ? c.tagName : c.export;
81
+ // repoId is not carried on ComponentId.source; use "" to match the
82
+ // repoId: "" convention in buildComponentSeeds (seeds for local
83
+ // components are keyed the same way).
84
+ return sha1Short(`local::::${c.source.filePath}::${exportOrTag}::${c.kind}`);
85
+ }
86
+ const pkg = c.source.type === "external" ? c.source.package : "unknown";
87
+ if (c.kind === "custom-element") {
88
+ return sha1Short(`ce::${pkg}::${c.tagName}`);
89
+ }
90
+ return sha1Short(`rc::${pkg}::${c.export}`);
91
+ }
67
92
  //# sourceMappingURL=identity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAczC,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IAC1D,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACzD,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;QACJ,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;KACxB,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;IACtC,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"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAczC,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IAC1D,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACzD,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;QACJ,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;KACxB,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;IACtC,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"}
@@ -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 out = [];
36
+ const reExports = [];
37
+ const unsupported = [];
25
38
  for (const node of ast.program.body) {
26
- if (node.type === "ExportAllDeclaration") {
27
- out.push({ kind: "star", from: node.source.value });
39
+ if (t.isExportAllDeclaration(node)) {
40
+ reExports.push({ kind: "star", from: node.source.value });
28
41
  continue;
29
42
  }
30
- if (node.type === "ExportNamedDeclaration") {
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 && onlySpec?.type === "ExportNamespaceSpecifier") {
41
- out.push({ kind: "star", from: node.source.value });
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.type !== "ExportSpecifier")
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 = spec.exported.type === "Identifier" ? spec.exported.name : spec.exported.value;
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
- out.push({ kind: "named", from: node.source.value, names: namesPart });
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 out;
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;AAUtC;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,IAAI,GAA6B,CAAC;IAClC,IAAI,CAAC;QACH,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE;YAClB,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC;YAC9B,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YAC3C,iEAAiE;YACjE,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,SAAS;YAC3B,oCAAoC;YACpC,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM;gBAAE,SAAS;YACzC,wEAAwE;YACxE,wEAAwE;YACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,EAAE,IAAI,KAAK,0BAA0B,EAAE,CAAC;gBAClF,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACpD,SAAS;YACX,CAAC;YACD,MAAM,SAAS,GAA+C,EAAE,CAAC;YACjE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB;oBAAE,SAAS;gBAC9C,6CAA6C;gBAC7C,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM;oBAAE,SAAS;gBACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC9B,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACjF,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACrC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,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 { DerivedManifestData } 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): DerivedManifestData | 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,12 @@
1
+ import type { ResolverDiagnostic } from "./lazy-resolver.js";
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).
11
+ */
12
+ export declare function buildDiagnosticGate(packageScopes: string[]): (d: ResolverDiagnostic) => boolean;
@@ -0,0 +1,23 @@
1
+ import picomatch from "picomatch";
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).
11
+ */
12
+ export function buildDiagnosticGate(packageScopes) {
13
+ if (packageScopes.length === 0)
14
+ return () => true;
15
+ const matchers = packageScopes.map((p) => picomatch(p));
16
+ return (d) => {
17
+ const pkg = d.packageName;
18
+ if (!pkg)
19
+ return false;
20
+ return matchers.some((m) => m(pkg));
21
+ };
22
+ }
23
+ //# 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;;;;;;;;;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"}
@@ -0,0 +1,52 @@
1
+ import { type IndexedComponent, type LazyResolverHit, type ManifestRef } from "@component-compass/plugin-core";
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
+ };
25
+ export type CreateLazyResolverOptions = {
26
+ resolveImport: ResolveImport;
27
+ /**
28
+ * Anchor for `warmRoots`-style eager loads. Optional — `resolveLazyManifest`
29
+ * itself never reads it (resolution is anchored on the calling file). When
30
+ * absent, `warmRoots` falls back to `process.cwd()`.
31
+ */
32
+ repoRoot?: string;
33
+ /** Phase 4 hook; defaults to the no-op stub. */
34
+ extractDerivedManifest?: (leafPackageDir: string) => import("@component-compass/plugin-core").DerivedManifestData | null;
35
+ };
36
+ export interface LazyResolver {
37
+ resolveLazyManifest(fromFile: string, specifier: string, exportName: string): LazyResolverHit | null;
38
+ lookupByTag(tagName: string): Extract<IndexedComponent, {
39
+ kind: "custom-element";
40
+ }> | null;
41
+ snapshotComponents(): IndexedComponent[];
42
+ snapshotManifestRefs(): ManifestRef[];
43
+ diagnostics(): ResolverDiagnostic[];
44
+ /**
45
+ * Eagerly load each named package's root CEM/CCM (if present) so the
46
+ * `byTag` cache covers tag-only consumers (HTML / Vue templates with no
47
+ * JS-side import to prime the resolver). No barrel walking — just a single
48
+ * leaf-load per package, mirroring the resolver's terminal-load step.
49
+ */
50
+ warmRoots(packageNames: string[]): void;
51
+ }
52
+ export declare function createLazyResolver(opts: CreateLazyResolverOptions): LazyResolver;