@component-compass/cli 0.1.7 → 0.1.9

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 (42) hide show
  1. package/dist/cli/help.js +1 -0
  2. package/dist/cli/help.js.map +1 -1
  3. package/dist/cli/parse.js +1 -0
  4. package/dist/cli/parse.js.map +1 -1
  5. package/dist/cli.js +3 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/scan.d.ts +7 -0
  8. package/dist/commands/scan.js +112 -42
  9. package/dist/commands/scan.js.map +1 -1
  10. package/dist/identity.d.ts +9 -1
  11. package/dist/identity.js +5 -3
  12. package/dist/identity.js.map +1 -1
  13. package/dist/manifest/lazy-resolver.d.ts +10 -0
  14. package/dist/manifest/lazy-resolver.js +62 -11
  15. package/dist/manifest/lazy-resolver.js.map +1 -1
  16. package/dist/seeds.js +3 -0
  17. package/dist/seeds.js.map +1 -1
  18. package/dist/util/git.d.ts +1 -0
  19. package/dist/util/git.js +9 -0
  20. package/dist/util/git.js.map +1 -1
  21. package/dist/walker/bounded-definition-resolver.d.ts +9 -0
  22. package/dist/walker/bounded-definition-resolver.js +125 -0
  23. package/dist/walker/bounded-definition-resolver.js.map +1 -0
  24. package/dist/walker/package-alias-layers.d.ts +7 -0
  25. package/dist/walker/package-alias-layers.js +40 -0
  26. package/dist/walker/package-alias-layers.js.map +1 -0
  27. package/dist/walker/resolve-import.d.ts +4 -0
  28. package/dist/walker/resolve-import.js +32 -9
  29. package/dist/walker/resolve-import.js.map +1 -1
  30. package/dist/walker/tsconfig-discovery.d.ts +4 -2
  31. package/dist/walker/tsconfig-discovery.js +4 -2
  32. package/dist/walker/tsconfig-discovery.js.map +1 -1
  33. package/dist/walker/workspace-exports.js +103 -39
  34. package/dist/walker/workspace-exports.js.map +1 -1
  35. package/dist/workspace/build-graph.d.ts +14 -1
  36. package/dist/workspace/build-graph.js +4 -1
  37. package/dist/workspace/build-graph.js.map +1 -1
  38. package/dist/workspace/find-workspace-root.d.ts +1 -0
  39. package/dist/workspace/find-workspace-root.js +60 -0
  40. package/dist/workspace/find-workspace-root.js.map +1 -0
  41. package/dist/workspace/types.d.ts +3 -1
  42. package/package.json +8 -8
@@ -1,4 +1,4 @@
1
- import { statSync } from "node:fs";
1
+ import { realpathSync, statSync } from "node:fs";
2
2
  import { createRequire } from "node:module";
3
3
  import { dirname, isAbsolute, resolve as pathResolve } from "node:path";
4
4
  import { loadTsconfigChain, compileAliasPattern } from "./tsconfig-loader.js";
@@ -8,9 +8,11 @@ import { buildWorkspaceExportEntries } from "./workspace-exports.js";
8
8
  *
9
9
  * Resolution order (first hit wins):
10
10
  * 1. Config `aliases` (explicit user-supplied alias map).
11
- * 2. `compilerOptions.paths` from the tsconfig at `tsconfigPath`.
12
- * 3. `package.json#exports` from each workspace package (when `workspaceGraph` provided).
13
- * 4. Node module resolution via `require.resolve`.
11
+ * 2. The owning workspace package's own tsconfig `paths` layer (when
12
+ * `packageAliasLayers` provided and `from` sits inside a member).
13
+ * 3. `compilerOptions.paths` from the tsconfig at `tsconfigPath`.
14
+ * 4. `package.json#exports` from each workspace package (when `workspaceGraph` provided).
15
+ * 5. Node module resolution via `require.resolve`.
14
16
  *
15
17
  * Returns the absolute path of the resolved file, or `null` if no layer
16
18
  * matches. See spec §3.5.
@@ -31,6 +33,28 @@ export function createImportResolver(opts) {
31
33
  const workspaceExportEntries = opts.workspaceGraph
32
34
  ? buildWorkspaceExportEntries(opts.workspaceGraph)
33
35
  : [];
36
+ const pkgLayers = opts.packageAliasLayers ?? [];
37
+ const fromDirRealCache = new Map();
38
+ const ownerEntriesFor = (fromDir) => {
39
+ if (pkgLayers.length === 0)
40
+ return [];
41
+ let real = fromDirRealCache.get(fromDir);
42
+ if (real === undefined) {
43
+ try {
44
+ real = realpathSync(fromDir);
45
+ }
46
+ catch {
47
+ real = fromDir;
48
+ }
49
+ fromDirRealCache.set(fromDir, real);
50
+ }
51
+ for (const layer of pkgLayers) {
52
+ const withSep = layer.pkgRealPath.endsWith("/") ? layer.pkgRealPath : `${layer.pkgRealPath}/`;
53
+ if (real === layer.pkgRealPath || real.startsWith(withSep))
54
+ return layer.entries;
55
+ }
56
+ return [];
57
+ };
34
58
  // Reused for `require.resolve` fallback. Anchoring at <repoRoot>/_ ensures
35
59
  // Node walks up through <repoRoot>/node_modules and parents.
36
60
  const requireFromRepo = createRequire(pathResolve(opts.repoRoot, "_"));
@@ -50,7 +74,7 @@ export function createImportResolver(opts) {
50
74
  return result;
51
75
  };
52
76
  function resolveUncached(fromDir, spec) {
53
- for (const layers of [configEntries, tsconfigEntries, workspaceExportEntries]) {
77
+ for (const layers of [configEntries, ownerEntriesFor(fromDir), tsconfigEntries, workspaceExportEntries]) {
54
78
  for (const entry of layers) {
55
79
  const m = entry.pattern.exec(spec);
56
80
  if (!m)
@@ -67,8 +91,8 @@ export function createImportResolver(opts) {
67
91
  // Plain relative/bare resolution via Node. require.resolve doesn't try
68
92
  // TS/JSX/Vue extensions by default, so probe them on first failure —
69
93
  // mirrors the alias-branch tryFileWithExtensions behaviour and preserves
70
- // the extensionless-relative-TS-import contract that classifyImportOrigin
71
- // used to enforce via its own (now-deleted) tryResolve.
94
+ // the extensionless-relative-TS-import contract this resolver must honour
95
+ // for its consumers.
72
96
  try {
73
97
  return requireFromRepo.resolve(spec, { paths: [fromDir, opts.repoRoot] });
74
98
  }
@@ -84,8 +108,7 @@ export function createImportResolver(opts) {
84
108
  // Directory-with-index fallback: Node only auto-resolves `index.js`/`.json`/`.node`.
85
109
  // Consumer codebases use `index.jsx`/`.tsx`/`.vue`/`.ts` too; probe them explicitly so
86
110
  // `import "./modal"` resolves when `modal/index.jsx` exists. Without this, the structural
87
- // lazy-import detector (and any classifyImportOrigin caller) reports unresolved on a
88
- // target that does exist on disk.
111
+ // lazy-import detector reports unresolved on a target that does exist on disk.
89
112
  for (const ext of FILE_EXTENSIONS) {
90
113
  try {
91
114
  return requireFromRepo.resolve(`${spec}/index${ext}`, { paths: [fromDir, opts.repoRoot] });
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-import.js","sourceRoot":"","sources":["../../src/walker/resolve-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAmB,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAIrE;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC;AAoBxE,MAAM,UAAU,oBAAoB,CAAC,IAAiC;IACpE,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/E,MAAM,sBAAsB,GAAiB,IAAI,CAAC,cAAc;QAC9D,CAAC,CAAC,2BAA2B,CAAC,IAAI,CAAC,cAAc,CAAC;QAClD,CAAC,CAAC,EAAE,CAAC;IAEP,2EAA2E;IAC3E,6DAA6D;IAC7D,MAAM,eAAe,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAEvE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE/C,OAAO,SAAS,aAAa,CAAC,IAAY,EAAE,IAAY;QACtD,sEAAsE;QACtE,0EAA0E;QAC1E,uCAAuC;QACvC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,GAAG,OAAO,KAAK,IAAI,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAExC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9C,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,SAAS,eAAe,CAAC,OAAe,EAAE,IAAY;QACpD,KAAK,MAAM,MAAM,IAAI,CAAC,aAAa,EAAE,eAAe,EAAE,sBAAsB,CAAC,EAAE,CAAC;YAC9E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC,CAAC;oBAAE,SAAS;gBACjB,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAC1E,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;oBAC5C,IAAI,GAAG;wBAAE,OAAO,GAAG,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,qEAAqE;QACrE,yEAAyE;QACzE,0EAA0E;QAC1E,wDAAwD;QACxD,IAAI,CAAC;YACH,OAAO,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACH,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACvF,CAAC;gBAAC,MAAM,CAAC;oBACP,WAAW;gBACb,CAAC;YACH,CAAC;YACD,qFAAqF;YACrF,uFAAuF;YACvF,0FAA0F;YAC1F,qFAAqF;YACrF,kCAAkC;YAClC,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACH,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG,IAAI,SAAS,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC7F,CAAC;gBAAC,MAAM,CAAC;oBACP,WAAW;gBACb,CAAC;YACH,CAAC;YACD,oEAAoE;YACpE,uEAAuE;YACvE,wDAAwD;YACxD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC/C,IAAI,QAAQ,EAAE,CAAC;oBACb,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;wBAClC,IAAI,CAAC;4BACH,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,QAAQ,GAAG,GAAG,EAAE,EAAE;gCAC1D,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;6BAChC,CAAC,CAAC;wBACL,CAAC;wBAAC,MAAM,CAAC;4BACP,WAAW;wBACb,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,OAA6C,EAC7C,IAAY;IAEZ,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAC1B,YAAgC,EAChC,SAAqC;IAErC,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC;IAC7B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC9D,IAAI,SAAS;QAAE,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,OAAe;IAC5C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,OAAO,GAAG,GAAG,CAAC;QAC9B,IAAI,MAAM,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;IACtC,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC1C,CAAC;IACD,qEAAqE;IACrE,0EAA0E;IAC1E,uEAAuE;IACvE,aAAa;IACb,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC;YAC/D,IAAI,MAAM,CAAC,YAAY,CAAC;gBAAE,OAAO,YAAY,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"resolve-import.js","sourceRoot":"","sources":["../../src/walker/resolve-import.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,9 @@ export type TsconfigDiscoveryInput = {
28
28
  * handles `extends` from there. Deliberately does NOT walk up from configDir
29
29
  * or repoRoot.
30
30
  *
31
- * Per-package tsconfigs in monorepos (e.g. the aperture fixtures' nextjs-app-v14/
32
- * tsconfig.json) are out of scope — see spec R5.
31
+ * Per-package tsconfigs in monorepos are handled separately by
32
+ * `buildPackageAliasLayers` (walker/package-alias-layers.ts), which calls
33
+ * this function once per workspace member with configDir = repoRoot = the
34
+ * member's own directory.
33
35
  */
34
36
  export declare function resolveTsconfigPath(input: TsconfigDiscoveryInput): string | null;
@@ -17,8 +17,10 @@ import { isAbsolute, resolve, join } from "node:path";
17
17
  * handles `extends` from there. Deliberately does NOT walk up from configDir
18
18
  * or repoRoot.
19
19
  *
20
- * Per-package tsconfigs in monorepos (e.g. the aperture fixtures' nextjs-app-v14/
21
- * tsconfig.json) are out of scope — see spec R5.
20
+ * Per-package tsconfigs in monorepos are handled separately by
21
+ * `buildPackageAliasLayers` (walker/package-alias-layers.ts), which calls
22
+ * this function once per workspace member with configDir = repoRoot = the
23
+ * member's own directory.
22
24
  */
23
25
  export function resolveTsconfigPath(input) {
24
26
  if (input.tsconfigPath) {
@@ -1 +1 @@
1
- {"version":3,"file":"tsconfig-discovery.js","sourceRoot":"","sources":["../../src/walker/tsconfig-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAgBtD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA6B;IAC/D,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;YACnC,CAAC,CAAC,KAAK,CAAC,YAAY;YACpB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IACD,wEAAwE;IACxE,uEAAuE;IACvE,2EAA2E;IAC3E,sEAAsE;IACtE,wEAAwE;IACxE,qCAAqC;IACrC,MAAM,UAAU,GAAG,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;IAC3D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5D,IAAI,UAAU,CAAC,kBAAkB,CAAC;YAAE,OAAO,kBAAkB,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;QACvC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC1D,IAAI,UAAU,CAAC,iBAAiB,CAAC;gBAAE,OAAO,iBAAiB,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"tsconfig-discovery.js","sourceRoot":"","sources":["../../src/walker/tsconfig-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAgBtD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA6B;IAC/D,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;YACnC,CAAC,CAAC,KAAK,CAAC,YAAY;YACpB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IACD,wEAAwE;IACxE,uEAAuE;IACvE,2EAA2E;IAC3E,sEAAsE;IACtE,wEAAwE;IACxE,qCAAqC;IACrC,MAAM,UAAU,GAAG,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;IAC3D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5D,IAAI,UAAU,CAAC,kBAAkB,CAAC;YAAE,OAAO,kBAAkB,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;QACvC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC1D,IAAI,UAAU,CAAC,iBAAiB,CAAC;gBAAE,OAAO,iBAAiB,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,54 +1,118 @@
1
1
  import { compileAliasPattern } from "./tsconfig-loader.js";
2
- // Compile each workspace package's `package.json#exports` map into a flat list
3
- // of AliasEntrys for the resolver. Supports two shapes:
2
+ // The workspace-member name→source resolution seam. For every member, emit
3
+ // resolver entries so any import of the member's name resolves to its source
4
+ // on disk — independent of install state (no symlink needed) and winning over
5
+ // a version-pinned published copy in node_modules (this layer precedes Node
6
+ // resolution). Per member, in precedence order:
4
7
  //
5
- // - Constant: "./types" -> "./types.ts" matches <pkgName>/types exactly.
6
- // - Pattern: "./icons/<star>" -> "./icons/<star>.tsx" matches <pkgName>/icons/X,
7
- // substituting X into the target.
8
+ // 1. Declared `exports` subpaths (existing behaviour):
9
+ // - Constant: "./types" -> "./types.ts" matches <pkgName>/types exactly.
10
+ // - Pattern: "./icons/<star>" -> "./icons/<star>.tsx".
11
+ // Skipped shapes (follow-ups if a real consumer hits them): conditional
12
+ // objects, null targets, multi-wildcard targets, non-subpath keys.
13
+ // Note: a `null` (deny) subpath is deliberately overridden by the
14
+ // wildcard source probe below — this seam attributes usage to source;
15
+ // it does not enforce publish-time encapsulation.
16
+ // 2. One bare-name entry: <pkgName> -> [exports["."], module, main, ".", "./src"].
17
+ // The "." / "./src" directory targets rely on tryFileWithExtensions'
18
+ // index probing. Conditional exports["."] contributes its first string
19
+ // among import/module/default (one level deep).
20
+ // 3. One wildcard fallback: <pkgName>/<star> -> ./<star> (source-tree probe).
8
21
  //
9
- // Skipped (filed as follow-ups if a real consumer hits them):
10
- // - Conditional exports ({"import":..., "require":...} non-string value)
11
- // - null targets (Node's deny form)
12
- // - Multi-wildcard targets (subpath or target containing more than one *)
13
- // - Non-subpath keys (the "." self-reference, "#imports", conditional roots)
14
- // - Bare-string exports (sugar for the "." main-entry case)
15
- //
16
- // Within a package, entries sort by static-prefix length descending so more-
17
- // specific subpaths (e.g. "./icons/special") beat patterns (e.g. "./icons/<star>")
18
- // for the same spec — matches the Node.js exports-map specificity rule.
22
+ // Within a package, subpath entries sort by static-prefix length descending so
23
+ // more-specific subpaths beat patternsmatches Node's exports specificity
24
+ // rule; the bare-name and wildcard entries follow, so declared exports always
25
+ // win when their targets exist on disk.
19
26
  export function buildWorkspaceExportEntries(graph) {
20
27
  const out = [];
21
28
  for (const pkg of graph.packages) {
22
- const exports = pkg.packageJson.exports;
23
- if (exports === null || exports === undefined)
29
+ out.push(...subpathExportEntries(pkg));
30
+ out.push(bareNameEntry(pkg));
31
+ out.push({
32
+ pattern: wildcardPattern(pkg.name),
33
+ targets: ["./*"],
34
+ base: pkg.absolutePath,
35
+ });
36
+ }
37
+ return out;
38
+ }
39
+ function subpathExportEntries(pkg) {
40
+ const exports = pkg.packageJson.exports;
41
+ if (exports === null || exports === undefined)
42
+ return [];
43
+ if (typeof exports !== "object")
44
+ return [];
45
+ if (Array.isArray(exports))
46
+ return [];
47
+ const out = [];
48
+ const subpaths = Object.entries(exports)
49
+ .filter(([key]) => key.startsWith("./") && key !== "./")
50
+ .sort(([a], [b]) => staticPrefixLength(b) - staticPrefixLength(a));
51
+ for (const [subpath, target] of subpaths) {
52
+ if (target === null)
24
53
  continue;
25
- if (typeof exports !== "object")
54
+ if (typeof target !== "string")
26
55
  continue;
27
- if (Array.isArray(exports))
56
+ if (target.includes("**"))
28
57
  continue;
29
- const subpaths = Object.entries(exports)
30
- .filter(([key]) => key.startsWith("./") && key !== "./")
31
- .sort(([a], [b]) => staticPrefixLength(b) - staticPrefixLength(a));
32
- for (const [subpath, target] of subpaths) {
33
- if (target === null)
34
- continue;
35
- if (typeof target !== "string")
36
- continue;
37
- if (target.includes("**"))
38
- continue;
39
- if (target.split("*").length > 2)
40
- continue;
41
- // "./icons/*" + "@example/icons" → "@example/icons/icons/*"
42
- const fullPattern = `${pkg.name}${subpath.slice(1)}`;
43
- out.push({
44
- pattern: compileAliasPattern(fullPattern),
45
- targets: [target],
46
- base: pkg.absolutePath,
47
- });
48
- }
58
+ if (target.split("*").length > 2)
59
+ continue;
60
+ // "./icons/*" + "@example/icons" "@example/icons/icons/*"
61
+ const fullPattern = `${pkg.name}${subpath.slice(1)}`;
62
+ out.push({
63
+ pattern: compileAliasPattern(fullPattern),
64
+ targets: [target],
65
+ base: pkg.absolutePath,
66
+ });
49
67
  }
50
68
  return out;
51
69
  }
70
+ function bareNameEntry(pkg) {
71
+ const targets = [];
72
+ const dot = dotExportTarget(pkg.packageJson.exports);
73
+ if (dot !== null)
74
+ targets.push(dot);
75
+ if (typeof pkg.packageJson.module === "string")
76
+ targets.push(pkg.packageJson.module);
77
+ if (typeof pkg.packageJson.main === "string")
78
+ targets.push(pkg.packageJson.main);
79
+ targets.push(".", "./src");
80
+ return {
81
+ pattern: compileAliasPattern(pkg.name),
82
+ targets,
83
+ base: pkg.absolutePath,
84
+ };
85
+ }
86
+ // `<pkgName>/*` with `..` path segments rejected, so the source-tree probe
87
+ // cannot expand outside the member directory (`@ws/ui/../secret` falls through
88
+ // to Node resolution instead). `..` inside a segment name (`a..b`) stays legal.
89
+ // Reuses compileAliasPattern for the name's regex escaping; the name itself
90
+ // contains no `*`, so the compiled source is the escaped literal.
91
+ function wildcardPattern(pkgName) {
92
+ const escapedName = compileAliasPattern(pkgName).source.slice(1, -1);
93
+ return new RegExp(`^${escapedName}/((?!\\.\\.(?:/|$))(?:(?!/\\.\\.(?:/|$)).)*)$`);
94
+ }
95
+ // exports["."] as an entry-point target: string form, the bare-string sugar,
96
+ // or (one level deep) the first string among import/module/default in a
97
+ // conditional object. Anything else → null (bare-name entry falls through to
98
+ // module/main/directory probes).
99
+ function dotExportTarget(exports) {
100
+ if (typeof exports === "string")
101
+ return exports;
102
+ if (exports === null || typeof exports !== "object" || Array.isArray(exports))
103
+ return null;
104
+ const dot = exports["."];
105
+ if (typeof dot === "string")
106
+ return dot;
107
+ if (dot !== null && typeof dot === "object" && !Array.isArray(dot)) {
108
+ for (const key of ["import", "module", "default"]) {
109
+ const value = dot[key];
110
+ if (typeof value === "string")
111
+ return value;
112
+ }
113
+ }
114
+ return null;
115
+ }
52
116
  function staticPrefixLength(subpath) {
53
117
  const starIdx = subpath.indexOf("*");
54
118
  return starIdx === -1 ? subpath.length : starIdx;
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-exports.js","sourceRoot":"","sources":["../../src/walker/workspace-exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,+EAA+E;AAC/E,wDAAwD;AACxD,EAAE;AACF,4EAA4E;AAC5E,qFAAqF;AACrF,sCAAsC;AACtC,EAAE;AACF,8DAA8D;AAC9D,6EAA6E;AAC7E,sCAAsC;AACtC,4EAA4E;AAC5E,+EAA+E;AAC/E,8DAA8D;AAC9D,EAAE;AACF,6EAA6E;AAC7E,mFAAmF;AACnF,wEAAwE;AACxE,MAAM,UAAU,2BAA2B,CAAC,KAAqB;IAC/D,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC;QACxC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS;QACxD,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,SAAS;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,SAAS;QAErC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAkC,CAAC;aAChE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC;aACvD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzC,IAAI,MAAM,KAAK,IAAI;gBAAE,SAAS;YAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACzC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YACpC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAE3C,4DAA4D;YAC5D,MAAM,WAAW,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,mBAAmB,CAAC,WAAW,CAAC;gBACzC,OAAO,EAAE,CAAC,MAAM,CAAC;gBACjB,IAAI,EAAE,GAAG,CAAC,YAAY;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"workspace-exports.js","sourceRoot":"","sources":["../../src/walker/workspace-exports.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,15 @@
1
- import type { WorkspaceGraph } from "./types.js";
1
+ import type { WorkspaceGraph, WorkspacePackage } from "./types.js";
2
2
  export declare function buildWorkspaceGraph(rootPath: string): WorkspaceGraph;
3
+ /**
4
+ * Loosened input for `detectWorkspacePackages`: only the `workspaces` field
5
+ * is typed, plus an index signature so callers can pass any freshly-parsed,
6
+ * unvalidated `package.json` (e.g. `findWorkspaceRoot` walking arbitrary
7
+ * ancestor directories) without casting at the call site.
8
+ */
9
+ export type DetectWorkspacePackagesInput = Record<string, unknown> & {
10
+ workspaces?: WorkspacePackage["packageJson"]["workspaces"];
11
+ };
12
+ /**
13
+ * pnpm-workspace.yaml → package.json#workspaces → empty array.
14
+ */
15
+ export declare function detectWorkspacePackages(absRoot: string, rootPkg: DetectWorkspacePackagesInput): WorkspacePackage[];
@@ -35,7 +35,10 @@ function sniffPackageManager(absRoot) {
35
35
  return "yarn";
36
36
  return "unknown";
37
37
  }
38
- function detectWorkspacePackages(absRoot, rootPkg) {
38
+ /**
39
+ * pnpm-workspace.yaml → package.json#workspaces → empty array.
40
+ */
41
+ export function detectWorkspacePackages(absRoot, rootPkg) {
39
42
  // pnpm-workspace.yaml wins when both configs present.
40
43
  const pnpmYamlPath = join(absRoot, "pnpm-workspace.yaml");
41
44
  if (existsSync(pnpmYamlPath)) {
@@ -1 +1 @@
1
- {"version":3,"file":"build-graph.js","sourceRoot":"","sources":["../../src/workspace/build-graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-graph.js","sourceRoot":"","sources":["../../src/workspace/build-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function findWorkspaceRoot(scanRoot: string, stopAt?: string): string | null;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Walk up from scanRoot to the nearest ancestor that declares workspaces
3
+ * (pnpm-workspace.yaml or package.json#workspaces) AND whose expanded member
4
+ * globs include scanRoot. Spec Piece 1: ownership/resolution anchor at the
5
+ * true workspace root, independent of where the scan is pointed.
6
+ *
7
+ * The walk starts at dirname(scanRoot): a scanRoot that is itself a workspace
8
+ * root needs no promotion (caller falls back to scanRoot).
9
+ * Bounded by stopAt (inclusive; typically the git toplevel) and the fs root.
10
+ */
11
+ import { existsSync, readFileSync, realpathSync } from "node:fs";
12
+ import { dirname, join, resolve } from "node:path";
13
+ import { detectWorkspacePackages } from "./build-graph.js";
14
+ export function findWorkspaceRoot(scanRoot, stopAt) {
15
+ const absScan = safeRealpath(resolve(scanRoot));
16
+ const stop = stopAt ? safeRealpath(resolve(stopAt)) : null;
17
+ let dir = dirname(absScan);
18
+ // stopAt below scanRoot's parent → nothing to walk.
19
+ for (;;) {
20
+ if (stop && !isPathPrefix(stop, dir))
21
+ return null;
22
+ const pkgJsonPath = join(dir, "package.json");
23
+ const hasPnpmYaml = existsSync(join(dir, "pnpm-workspace.yaml"));
24
+ if (hasPnpmYaml || existsSync(pkgJsonPath)) {
25
+ const rootPkg = readJsonSafely(pkgJsonPath) ?? {};
26
+ const members = detectWorkspacePackages(dir, rootPkg);
27
+ if (members.some((m) => safeRealpath(m.absolutePath) === absScan))
28
+ return dir;
29
+ }
30
+ const parent = dirname(dir);
31
+ if (parent === dir)
32
+ return null;
33
+ dir = parent;
34
+ }
35
+ }
36
+ function readJsonSafely(p) {
37
+ try {
38
+ // JSON.parse returns `any`, which assigns to DetectWorkspacePackagesInput
39
+ // without a cast — matches build-graph.ts's own local readJsonSafely.
40
+ return JSON.parse(readFileSync(p, "utf8"));
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ }
46
+ function safeRealpath(p) {
47
+ try {
48
+ return realpathSync(p);
49
+ }
50
+ catch {
51
+ return p;
52
+ }
53
+ }
54
+ function isPathPrefix(prefix, candidate) {
55
+ if (candidate === prefix)
56
+ return true;
57
+ const withSep = prefix.endsWith("/") ? prefix : `${prefix}/`;
58
+ return candidate.startsWith(withSep);
59
+ }
60
+ //# sourceMappingURL=find-workspace-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-workspace-root.js","sourceRoot":"","sources":["../../src/workspace/find-workspace-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAqC,MAAM,kBAAkB,CAAC;AAE9F,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,MAAe;IACjE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,oDAAoD;IACpD,SAAS,CAAC;QACR,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC;QACjE,IAAI,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACtD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC;gBAAE,OAAO,GAAG,CAAC;QAChF,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,CAAS;IAC/B,IAAI,CAAC;QACH,0EAA0E;QAC1E,sEAAsE;QACtE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,SAAiB;IACrD,IAAI,SAAS,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC;IAC7D,OAAO,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC"}
@@ -18,6 +18,8 @@ export type WorkspacePackage = {
18
18
  /** Parsed `package.json` contents. Cached for `declaredDeps`. */
19
19
  packageJson: {
20
20
  name?: string;
21
+ main?: string;
22
+ module?: string;
21
23
  dependencies?: Record<string, string>;
22
24
  devDependencies?: Record<string, string>;
23
25
  peerDependencies?: Record<string, string>;
@@ -35,7 +37,7 @@ export type WorkspaceGraph = {
35
37
  * detection — set even for single-package repos.
36
38
  */
37
39
  packageManager: PackageManager;
38
- /** Absolute path to the scan's configDir (the workspace root). */
40
+ /** Absolute path to the discovered workspace root. */
39
41
  rootPath: string;
40
42
  /** Root package name; "<unnamed>" if missing. */
41
43
  rootPackageName: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@component-compass/cli",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "Open-source CLI for measuring design-system component usage across multi-framework consumer repos.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -36,13 +36,13 @@
36
36
  "@babel/parser": "7.29.3",
37
37
  "@babel/types": "7.29.0",
38
38
  "@clack/prompts": "^1.5.1",
39
- "@component-compass/ast-utils": "0.1.7",
40
- "@component-compass/parser-html": "0.1.7",
41
- "@component-compass/parser-lit": "0.1.7",
42
- "@component-compass/parser-react": "0.1.7",
43
- "@component-compass/parser-vue": "0.1.7",
44
- "@component-compass/plugin-core": "0.1.7",
45
- "@component-compass/reference-graph": "0.1.7",
39
+ "@component-compass/ast-utils": "0.1.9",
40
+ "@component-compass/parser-html": "0.1.9",
41
+ "@component-compass/parser-lit": "0.1.9",
42
+ "@component-compass/parser-react": "0.1.9",
43
+ "@component-compass/parser-vue": "0.1.9",
44
+ "@component-compass/plugin-core": "0.1.9",
45
+ "@component-compass/reference-graph": "0.1.9",
46
46
  "@vue/compiler-sfc": "3.5.33",
47
47
  "ajv": "8.20.0",
48
48
  "glob": "13.0.6",