@flaid/devmap 0.4.1 → 0.5.0

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 (69) hide show
  1. package/dist/analyzers/analysis/fileScanner.d.ts.map +1 -1
  2. package/dist/analyzers/analysis/fileScanner.js +34 -7
  3. package/dist/analyzers/analysis/fileScanner.js.map +1 -1
  4. package/dist/analyzers/analysis/filterEngine.d.ts +2 -0
  5. package/dist/analyzers/analysis/filterEngine.d.ts.map +1 -1
  6. package/dist/analyzers/analysis/filterEngine.js +57 -29
  7. package/dist/analyzers/analysis/filterEngine.js.map +1 -1
  8. package/dist/analyzers/analysis/index.d.ts +1 -0
  9. package/dist/analyzers/analysis/index.d.ts.map +1 -1
  10. package/dist/analyzers/analysis/index.js +1 -0
  11. package/dist/analyzers/analysis/index.js.map +1 -1
  12. package/dist/analyzers/analysis/jsonText.d.ts +7 -0
  13. package/dist/analyzers/analysis/jsonText.d.ts.map +1 -0
  14. package/dist/analyzers/analysis/jsonText.js +9 -0
  15. package/dist/analyzers/analysis/jsonText.js.map +1 -0
  16. package/dist/analyzers/analysis/tsMorphAnalyzer.d.ts.map +1 -1
  17. package/dist/analyzers/analysis/tsMorphAnalyzer.js +48 -11
  18. package/dist/analyzers/analysis/tsMorphAnalyzer.js.map +1 -1
  19. package/dist/analyzers/detectors/capabilityDetector.js +7 -3
  20. package/dist/analyzers/detectors/capabilityDetector.js.map +1 -1
  21. package/dist/analyzers/detectors/databaseDetector.d.ts +1 -1
  22. package/dist/analyzers/detectors/databaseDetector.d.ts.map +1 -1
  23. package/dist/analyzers/detectors/databaseDetector.js +2 -1
  24. package/dist/analyzers/detectors/databaseDetector.js.map +1 -1
  25. package/dist/analyzers/detectors/frameworkDetector.d.ts +1 -1
  26. package/dist/analyzers/detectors/frameworkDetector.d.ts.map +1 -1
  27. package/dist/analyzers/detectors/frameworkDetector.js +4 -2
  28. package/dist/analyzers/detectors/frameworkDetector.js.map +1 -1
  29. package/dist/analyzers/detectors/routeDetector.js +96 -25
  30. package/dist/analyzers/detectors/routeDetector.js.map +1 -1
  31. package/dist/analyzers/detectors/serviceDetector.d.ts +1 -1
  32. package/dist/analyzers/detectors/serviceDetector.d.ts.map +1 -1
  33. package/dist/analyzers/detectors/serviceDetector.js +2 -1
  34. package/dist/analyzers/detectors/serviceDetector.js.map +1 -1
  35. package/dist/analyzers/features/featureCandidates.d.ts.map +1 -1
  36. package/dist/analyzers/features/featureCandidates.js +48 -0
  37. package/dist/analyzers/features/featureCandidates.js.map +1 -1
  38. package/dist/analyzers/graph/aliasResolver.d.ts +28 -5
  39. package/dist/analyzers/graph/aliasResolver.d.ts.map +1 -1
  40. package/dist/analyzers/graph/aliasResolver.js +209 -34
  41. package/dist/analyzers/graph/aliasResolver.js.map +1 -1
  42. package/dist/analyzers/graph/dependencyGraph.d.ts.map +1 -1
  43. package/dist/analyzers/graph/dependencyGraph.js +71 -59
  44. package/dist/analyzers/graph/dependencyGraph.js.map +1 -1
  45. package/dist/analyzers/graph/entryPoints.d.ts.map +1 -1
  46. package/dist/analyzers/graph/entryPoints.js +16 -2
  47. package/dist/analyzers/graph/entryPoints.js.map +1 -1
  48. package/dist/analyzers/graph/index.d.ts +2 -2
  49. package/dist/analyzers/graph/index.d.ts.map +1 -1
  50. package/dist/analyzers/graph/index.js +2 -2
  51. package/dist/analyzers/graph/index.js.map +1 -1
  52. package/dist/analyzers/graph/sourceScope.d.ts +2 -0
  53. package/dist/analyzers/graph/sourceScope.d.ts.map +1 -1
  54. package/dist/analyzers/graph/sourceScope.js +23 -14
  55. package/dist/analyzers/graph/sourceScope.js.map +1 -1
  56. package/dist/analyzers/pipeline/heuristicAnalyzer.d.ts.map +1 -1
  57. package/dist/analyzers/pipeline/heuristicAnalyzer.js +10 -3
  58. package/dist/analyzers/pipeline/heuristicAnalyzer.js.map +1 -1
  59. package/dist/analyzers/pipeline/languageReaders.d.ts +8 -0
  60. package/dist/analyzers/pipeline/languageReaders.d.ts.map +1 -0
  61. package/dist/analyzers/pipeline/languageReaders.js +296 -0
  62. package/dist/analyzers/pipeline/languageReaders.js.map +1 -0
  63. package/dist/analyzers/pipeline/projectMap.d.ts.map +1 -1
  64. package/dist/analyzers/pipeline/projectMap.js +21 -28
  65. package/dist/analyzers/pipeline/projectMap.js.map +1 -1
  66. package/dist/analyzers/pipeline/projectMetadata.d.ts.map +1 -1
  67. package/dist/analyzers/pipeline/projectMetadata.js +33 -5
  68. package/dist/analyzers/pipeline/projectMetadata.js.map +1 -1
  69. package/package.json +5 -5
@@ -1,50 +1,225 @@
1
- import { readFile } from "node:fs/promises";
2
- import { join } from "node:path";
1
+ import { existsSync } from "node:fs";
2
+ import { readFile, readdir } from "node:fs/promises";
3
+ import { dirname, join, relative, resolve, sep } from "node:path";
4
+ import { ts } from "ts-morph";
5
+ const CONFIG_NAMES = ["tsconfig.json", "jsconfig.json"];
6
+ const WORKSPACE_PARENTS = ["apps", "packages", "libs", "services"];
7
+ const SVELTE_CONFIGS = ["svelte.config.js", "svelte.config.ts", "svelte.config.mjs", "svelte.config.cjs"];
3
8
  /**
4
- * Load alias mappings from tsconfig.json paths and common framework conventions.
5
- * Supports `@/*` -> `./src/*`, `~/` -> `./src/`, and `~` -> `./src/`.
9
+ * Load alias mappings from tsconfig/jsconfig (JSONC, `extends`, `baseUrl`,
10
+ * project `references`, workspace sub-packages) plus common framework
11
+ * conventions (`$lib` for SvelteKit, `@/` and `~/` -> `src/` as a last resort).
6
12
  */
7
13
  export async function loadAliasMappings(projectRoot) {
14
+ const root = resolve(projectRoot);
8
15
  const mappings = [];
9
- try {
10
- const tsconfigPath = join(projectRoot, "tsconfig.json");
11
- const raw = await readFile(tsconfigPath, "utf8");
12
- const config = JSON.parse(raw);
13
- const paths = config?.compilerOptions?.paths;
14
- if (paths) {
15
- for (const [alias, targets] of Object.entries(paths)) {
16
- if (Array.isArray(targets) && targets.length > 0) {
17
- const prefix = alias.endsWith("*") ? alias.slice(0, -1) : alias;
18
- const target = targets[0].endsWith("*")
19
- ? targets[0].slice(0, -1)
20
- : targets[0];
21
- mappings.push({ prefix, target });
16
+ for (const directory of await findConfigDirectories(root)) {
17
+ mappings.push(...(await loadDirectoryMappings(root, directory)));
18
+ }
19
+ // Framework defaults only when the project declares no aliases of its own.
20
+ if (mappings.length === 0) {
21
+ mappings.push({ prefix: "@/", target: "./src/", optional: true });
22
+ mappings.push({ prefix: "~/", target: "./src/", optional: true });
23
+ }
24
+ if (!mappings.some((mapping) => mapping.prefix === "$lib" || mapping.prefix === "$lib/")
25
+ && SVELTE_CONFIGS.some((name) => existsSync(join(root, name)))) {
26
+ mappings.push({ prefix: "$lib", target: "src/lib", exact: true, scope: "" });
27
+ mappings.push({ prefix: "$lib/", target: "src/lib/", scope: "" });
28
+ }
29
+ return mappings;
30
+ }
31
+ /**
32
+ * All root-relative path candidates for an alias specifier, best match first.
33
+ * Mirrors TypeScript: the longest matching pattern wins, an exact alias beats a
34
+ * wildcard of the same length, and the nearest tsconfig scope wins.
35
+ */
36
+ export function resolveAliasCandidates(specifier, mappings, fromFile) {
37
+ const scopes = [...new Set(mappings.map((mapping) => mapping.scope ?? ""))]
38
+ .filter((scope) => fromFile === undefined || isWithinScope(fromFile, scope))
39
+ .sort((a, b) => scopeDepth(b) - scopeDepth(a));
40
+ for (const scope of scopes) {
41
+ const matches = mappings.filter((mapping) => (mapping.scope ?? "") === scope && matchesSpecifier(mapping, specifier));
42
+ if (matches.length === 0)
43
+ continue;
44
+ const longest = Math.max(...matches.map((mapping) => mapping.prefix.length));
45
+ const best = matches.filter((mapping) => mapping.prefix.length === longest);
46
+ const exact = best.filter((mapping) => mapping.exact);
47
+ const chosen = exact.length > 0 ? exact : best;
48
+ return chosen.map((mapping) => mapping.exact ? mapping.target : mapping.target + specifier.slice(mapping.prefix.length));
49
+ }
50
+ return [];
51
+ }
52
+ /** Whether any mapping that is not just a guess claims this specifier. */
53
+ export function isDeclaredAlias(specifier, mappings, fromFile) {
54
+ return mappings.some((mapping) => !mapping.optional
55
+ && (fromFile === undefined || isWithinScope(fromFile, mapping.scope ?? ""))
56
+ && matchesSpecifier(mapping, specifier));
57
+ }
58
+ /**
59
+ * Resolve an alias import specifier to a root-relative path using configured
60
+ * mappings. Returns null if no mapping matches.
61
+ */
62
+ export function resolveAlias(specifier, mappings, fromFile) {
63
+ return resolveAliasCandidates(specifier, mappings, fromFile)[0] ?? null;
64
+ }
65
+ function matchesSpecifier(mapping, specifier) {
66
+ if (mapping.exact)
67
+ return specifier === mapping.prefix;
68
+ if (mapping.prefix === "")
69
+ return true;
70
+ return specifier.startsWith(mapping.prefix);
71
+ }
72
+ function isWithinScope(file, scope) {
73
+ return scope === "" || file === scope || file.startsWith(`${scope}/`);
74
+ }
75
+ function scopeDepth(scope) {
76
+ return scope === "" ? 0 : scope.split("/").length;
77
+ }
78
+ async function findConfigDirectories(root) {
79
+ const directories = [root];
80
+ for (const parent of WORKSPACE_PARENTS) {
81
+ try {
82
+ const entries = await readdir(join(root, parent), { withFileTypes: true });
83
+ for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
84
+ if (entry.isDirectory() && !entry.name.startsWith(".") && entry.name !== "node_modules") {
85
+ directories.push(join(root, parent, entry.name));
22
86
  }
23
87
  }
24
88
  }
89
+ catch {
90
+ // no such workspace parent
91
+ }
92
+ }
93
+ return directories;
94
+ }
95
+ async function loadDirectoryMappings(root, directory) {
96
+ const scope = toPosix(relative(root, directory));
97
+ const mappings = [];
98
+ const queue = CONFIG_NAMES.map((name) => join(directory, name));
99
+ const visited = new Set();
100
+ while (queue.length > 0) {
101
+ const configPath = queue.shift();
102
+ if (visited.has(configPath))
103
+ continue;
104
+ visited.add(configPath);
105
+ const config = await loadConfig(configPath, new Set());
106
+ if (!config)
107
+ continue;
108
+ mappings.push(...configToMappings(config, root, scope));
109
+ for (const reference of config.references) {
110
+ // `references` may point at a config file or at a directory holding one.
111
+ queue.push(reference.endsWith(".json") ? reference : join(reference, "tsconfig.json"));
112
+ }
113
+ }
114
+ return mappings;
115
+ }
116
+ async function loadConfig(configPath, seen) {
117
+ if (seen.has(configPath))
118
+ return null;
119
+ seen.add(configPath);
120
+ let text;
121
+ try {
122
+ text = await readFile(configPath, "utf8");
25
123
  }
26
124
  catch {
27
- // tsconfig.json missing or unparseable — fall through to framework defaults
125
+ return null;
28
126
  }
29
- // Common framework conventions if no tsconfig paths defined
30
- if (mappings.length === 0) {
31
- mappings.push({ prefix: "@/", target: "./src/" });
32
- mappings.push({ prefix: "~/", target: "./src/" });
33
- mappings.push({ prefix: "~", target: "./src/" });
127
+ // tsconfig is JSONC: comments and trailing commas are legal and common.
128
+ const parsed = ts.parseConfigFileTextToJson(configPath, text.replace(/^/, ""));
129
+ const json = parsed.config;
130
+ if (parsed.error || !json || typeof json !== "object")
131
+ return null;
132
+ const configDir = dirname(configPath);
133
+ const merged = { references: [] };
134
+ for (const parentPath of extendsPaths(json.extends, configDir)) {
135
+ const parent = await loadConfig(parentPath, seen);
136
+ if (!parent)
137
+ continue;
138
+ if (parent.baseUrl !== undefined)
139
+ merged.baseUrl = parent.baseUrl;
140
+ if (parent.paths !== undefined) {
141
+ merged.paths = parent.paths;
142
+ merged.pathsDir = parent.pathsDir;
143
+ }
34
144
  }
35
- return mappings;
145
+ const options = json.compilerOptions;
146
+ if (options && typeof options.baseUrl === "string") {
147
+ merged.baseUrl = resolve(configDir, options.baseUrl);
148
+ }
149
+ if (options && options.paths && typeof options.paths === "object") {
150
+ // `paths` replaces the inherited object wholesale, it is not merged.
151
+ merged.paths = options.paths;
152
+ merged.pathsDir = configDir;
153
+ }
154
+ if (Array.isArray(json.references)) {
155
+ for (const reference of json.references) {
156
+ const path = reference?.path;
157
+ if (typeof path === "string")
158
+ merged.references.push(resolve(configDir, path));
159
+ }
160
+ }
161
+ return merged;
36
162
  }
37
- /**
38
- * Resolve an alias import specifier to a relative path using configured mappings.
39
- * Returns null if no mapping matches.
40
- */
41
- export function resolveAlias(specifier, mappings) {
42
- for (const mapping of mappings) {
43
- if (mapping.prefix && specifier.startsWith(mapping.prefix)) {
44
- const remainder = specifier.slice(mapping.prefix.length);
45
- return mapping.target + remainder;
163
+ function extendsPaths(value, configDir) {
164
+ const entries = Array.isArray(value) ? value : [value];
165
+ const paths = [];
166
+ for (const entry of entries) {
167
+ // Package specifiers (`@tsconfig/node20`) carry no project aliases.
168
+ if (typeof entry !== "string" || !entry.startsWith("."))
169
+ continue;
170
+ const resolved = resolve(configDir, entry);
171
+ paths.push(resolved.endsWith(".json") ? resolved : `${resolved}.json`);
172
+ }
173
+ return paths;
174
+ }
175
+ function configToMappings(config, root, scope) {
176
+ const mappings = [];
177
+ if (config.paths) {
178
+ const base = config.baseUrl ?? config.pathsDir ?? root;
179
+ for (const [alias, targets] of Object.entries(config.paths)) {
180
+ if (!Array.isArray(targets))
181
+ continue;
182
+ const star = alias.indexOf("*");
183
+ // Only a trailing wildcard (`@/*`) or no wildcard is supported.
184
+ if (star !== -1 && star !== alias.length - 1)
185
+ continue;
186
+ for (const target of targets) {
187
+ if (typeof target !== "string")
188
+ continue;
189
+ const targetStar = target.indexOf("*");
190
+ if (targetStar !== -1 && targetStar !== target.length - 1)
191
+ continue;
192
+ const rootRelative = toRootRelative(resolve(base, targetStar === -1 ? target : target.slice(0, -1)), root);
193
+ if (rootRelative === null)
194
+ continue;
195
+ if (star === -1) {
196
+ mappings.push({ prefix: alias, target: rootRelative, exact: true, scope });
197
+ }
198
+ else {
199
+ const directory = rootRelative === "" || rootRelative.endsWith("/") ? rootRelative : `${rootRelative}/`;
200
+ mappings.push({ prefix: alias.slice(0, -1), target: directory, scope });
201
+ }
202
+ }
46
203
  }
47
204
  }
48
- return null;
205
+ if (config.baseUrl !== undefined) {
206
+ const baseRelative = toRootRelative(config.baseUrl, root);
207
+ if (baseRelative !== null) {
208
+ const directory = baseRelative === "" ? "" : `${baseRelative}/`;
209
+ // Bare specifiers resolve against baseUrl; most are npm packages.
210
+ mappings.push({ prefix: "", target: directory, scope, optional: true });
211
+ }
212
+ }
213
+ return mappings;
214
+ }
215
+ function toRootRelative(absolutePath, root) {
216
+ const relativePath = toPosix(relative(root, absolutePath));
217
+ if (relativePath === ".." || relativePath.startsWith("../") || /^[a-zA-Z]:/.test(relativePath)) {
218
+ return null;
219
+ }
220
+ return relativePath;
221
+ }
222
+ function toPosix(path) {
223
+ return sep === "/" ? path : path.split(sep).join("/");
49
224
  }
50
225
  //# sourceMappingURL=aliasResolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aliasResolver.js","sourceRoot":"","sources":["../../../src/analyzers/graph/aliasResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACzD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,EAAE,eAAe,EAAE,KAA6C,CAAC;QAErF,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;oBAChE,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;wBACrC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACzB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACf,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;IAC9E,CAAC;IAED,4DAA4D;IAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,QAAwB;IACtE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzD,OAAO,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"aliasResolver.js","sourceRoot":"","sources":["../../../src/analyzers/graph/aliasResolver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dependencyGraph.d.ts","sourceRoot":"","sources":["../../../src/analyzers/graph/dependencyGraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAEjD,MAAM,WAAW,0BAA0B;IACzC,iBAAiB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAID,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAAE,EACpB,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAM,EAC3C,aAAa,GAAE,YAAY,EAAO,GACjC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,0BAA0B,CAAA;CAAE,CAwC/D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxE"}
1
+ {"version":3,"file":"dependencyGraph.d.ts","sourceRoot":"","sources":["../../../src/analyzers/graph/dependencyGraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAEjD,MAAM,WAAW,0BAA0B;IACzC,iBAAiB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAKD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAAE,EACpB,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAM,EAC3C,aAAa,GAAE,YAAY,EAAO,GACjC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,0BAA0B,CAAA;CAAE,CA+C/D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxE"}
@@ -1,5 +1,6 @@
1
- import { resolveAlias } from "./aliasResolver.js";
2
- const IMPORT_RE = /(?:import\s+(?:[^'"]+\s+from\s+)?|export\s+[^'"]+\s+from\s+|require\()\s*['"]([^'"]+)['"]/g;
1
+ import { isDeclaredAlias, resolveAliasCandidates } from "./aliasResolver.js";
2
+ // Static imports, re-exports, require() and dynamic import() with a literal.
3
+ const IMPORT_RE = /(?:\bimport\s+(?:[^'"]+\s+from\s+)?|\bexport\s+[^'"]+\s+from\s+|\b(?:require|import)\s*\(\s*)['"]([^'"]+)['"]/g;
3
4
  export function buildDependencyGraph(files, analyses = {}, aliasMappings = []) {
4
5
  const graph = {};
5
6
  const localPaths = new Set(files.map((file) => file.path));
@@ -8,29 +9,38 @@ export function buildDependencyGraph(files, analyses = {}, aliasMappings = []) {
8
9
  parserFallbacks: [],
9
10
  };
10
11
  for (const file of files) {
11
- graph[file.path] = [];
12
+ // A file importing the same module twice (`import type` + value import,
13
+ // or a static and a dynamic import) is still one dependency edge.
14
+ const edges = new Set();
12
15
  const importSpecifiers = analyses[file.path]?.imports ?? findImportSpecifiers(file.content);
13
16
  for (const specifier of importSpecifiers) {
14
17
  if (specifier.startsWith(".")) {
15
18
  const resolved = resolveImport(file.path, specifier, localPaths);
16
- if (resolved) {
17
- graph[file.path].push(resolved);
19
+ if (resolved && resolved !== file.path) {
20
+ edges.add(resolved);
18
21
  }
19
22
  continue;
20
23
  }
21
24
  // Try alias resolution for non-relative imports
22
- const aliasResolved = resolveAlias(specifier, aliasMappings);
23
- if (aliasResolved) {
24
- const resolved = resolveAliasPath(aliasResolved, localPaths);
25
+ const candidates = resolveAliasCandidates(specifier, aliasMappings, file.path);
26
+ if (candidates.length > 0) {
27
+ const resolved = firstResolved(candidates, localPaths);
25
28
  if (resolved) {
26
- graph[file.path].push(resolved);
29
+ if (resolved !== file.path)
30
+ edges.add(resolved);
27
31
  }
28
- else {
32
+ else if (isDeclaredAlias(specifier, aliasMappings, file.path)) {
29
33
  diagnostics.unresolvedAliases.push({ file: file.path, specifier });
30
34
  }
31
35
  }
36
+ else if (file.path.endsWith(".py")) {
37
+ const resolved = resolvePythonModule(specifier, localPaths);
38
+ if (resolved && resolved !== file.path)
39
+ edges.add(resolved);
40
+ }
32
41
  // Non-relative, non-alias imports are silently skipped (npm packages etc.)
33
42
  }
43
+ graph[file.path] = [...edges];
34
44
  if (!analyses[file.path]) {
35
45
  diagnostics.parserFallbacks.push(file.path);
36
46
  }
@@ -60,64 +70,64 @@ function resolveImport(fromPath, specifier, localPaths) {
60
70
  const baseParts = fromPath.split("/");
61
71
  baseParts.pop();
62
72
  const normalized = normalizePath([...baseParts, specifier].join("/"));
63
- const candidates = [
64
- normalized,
65
- `${normalized}.ts`,
66
- `${normalized}.tsx`,
67
- `${normalized}.js`,
68
- `${normalized}.jsx`,
69
- `${normalized}.mjs`,
70
- `${normalized}.cjs`,
71
- `${normalized}.vue`,
72
- `${normalized}.svelte`,
73
- `${normalized}.astro`,
74
- `${normalized}/index.ts`,
75
- `${normalized}/index.tsx`,
76
- `${normalized}/index.js`,
77
- `${normalized}/index.jsx`,
78
- `${normalized}/index.vue`,
79
- `${normalized}/index.svelte`,
80
- `${normalized}/index.astro`
81
- ];
82
- if (normalized.endsWith(".js")) {
83
- const withoutExtension = normalized.slice(0, -3);
84
- candidates.push(`${withoutExtension}.ts`, `${withoutExtension}.tsx`);
85
- }
86
- if (normalized.endsWith(".mjs")) {
87
- candidates.push(`${normalized.slice(0, -4)}.mts`);
73
+ return normalized === null ? null : matchLocalPath(normalized, localPaths);
74
+ }
75
+ // `from app.models import User` -> app/models.py or app/models/__init__.py,
76
+ // looked up from the project root and from a conventional src/ layout.
77
+ function resolvePythonModule(specifier, localPaths) {
78
+ if (!/^[A-Za-z_][\w.]*$/.test(specifier))
79
+ return null;
80
+ const modulePath = specifier.replace(/\./g, "/");
81
+ for (const base of ["", "src/"]) {
82
+ for (const candidate of [`${base}${modulePath}.py`, `${base}${modulePath}/__init__.py`]) {
83
+ if (localPaths.has(candidate))
84
+ return candidate;
85
+ }
88
86
  }
89
- if (normalized.endsWith(".cjs")) {
90
- candidates.push(`${normalized.slice(0, -4)}.cts`);
87
+ return null;
88
+ }
89
+ function firstResolved(rootRelativePaths, localPaths) {
90
+ for (const rootRelativePath of rootRelativePaths) {
91
+ const normalized = normalizePath(rootRelativePath);
92
+ if (normalized === null)
93
+ continue;
94
+ const resolved = matchLocalPath(normalized, localPaths);
95
+ if (resolved)
96
+ return resolved;
91
97
  }
92
- return candidates.find((candidate) => localPaths.has(candidate)) ?? null;
98
+ return null;
93
99
  }
94
- function resolveAliasPath(rootRelativePath, localPaths) {
95
- const normalized = normalizePath(rootRelativePath);
100
+ const SOURCE_EXTENSIONS = [
101
+ ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts", ".vue", ".svelte", ".astro",
102
+ ".py", ".rb", ".php"
103
+ ];
104
+ const INDEX_EXTENSIONS = [
105
+ ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts", ".vue", ".svelte", ".astro",
106
+ ".py", ".rb", ".php"
107
+ ];
108
+ // TypeScript ESM writes the emitted extension in the specifier.
109
+ const EMITTED_EXTENSION_SOURCES = [
110
+ [".js", [".ts", ".tsx"]],
111
+ [".jsx", [".tsx"]],
112
+ [".mjs", [".mts"]],
113
+ [".cjs", [".cts"]]
114
+ ];
115
+ function matchLocalPath(normalized, localPaths) {
96
116
  const candidates = [
97
117
  normalized,
98
- `${normalized}.ts`,
99
- `${normalized}.tsx`,
100
- `${normalized}.js`,
101
- `${normalized}.jsx`,
102
- `${normalized}.mjs`,
103
- `${normalized}.cjs`,
104
- `${normalized}.vue`,
105
- `${normalized}.svelte`,
106
- `${normalized}.astro`,
107
- `${normalized}/index.ts`,
108
- `${normalized}/index.tsx`,
109
- `${normalized}/index.js`,
110
- `${normalized}/index.jsx`,
111
- `${normalized}/index.vue`,
112
- `${normalized}/index.svelte`,
113
- `${normalized}/index.astro`
118
+ ...SOURCE_EXTENSIONS.map((extension) => `${normalized}${extension}`),
119
+ ...INDEX_EXTENSIONS.map((extension) => `${normalized}/index${extension}`),
120
+ `${normalized}/__init__.py`
114
121
  ];
115
- if (normalized.endsWith(".js")) {
116
- const withoutExtension = normalized.slice(0, -3);
117
- candidates.push(`${withoutExtension}.ts`, `${withoutExtension}.tsx`);
122
+ for (const [emitted, sources] of EMITTED_EXTENSION_SOURCES) {
123
+ if (normalized.endsWith(emitted)) {
124
+ const withoutExtension = normalized.slice(0, -emitted.length);
125
+ candidates.push(...sources.map((source) => `${withoutExtension}${source}`));
126
+ }
118
127
  }
119
128
  return candidates.find((candidate) => localPaths.has(candidate)) ?? null;
120
129
  }
130
+ /** Collapse `.` and `..`; null when the path climbs above the project root. */
121
131
  function normalizePath(path) {
122
132
  const parts = [];
123
133
  for (const part of path.split("/")) {
@@ -125,6 +135,8 @@ function normalizePath(path) {
125
135
  continue;
126
136
  }
127
137
  if (part === "..") {
138
+ if (parts.length === 0)
139
+ return null;
128
140
  parts.pop();
129
141
  continue;
130
142
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dependencyGraph.js","sourceRoot":"","sources":["../../../src/analyzers/graph/dependencyGraph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dependencyGraph.js","sourceRoot":"","sources":["../../../src/analyzers/graph/dependencyGraph.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"entryPoints.d.ts","sourceRoot":"","sources":["../../../src/analyzers/graph/entryPoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AA2BtD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAS5D"}
1
+ {"version":3,"file":"entryPoints.d.ts","sourceRoot":"","sources":["../../../src/analyzers/graph/entryPoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AA2BtD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAyB5D"}
@@ -22,11 +22,25 @@ function entryPointScore(path) {
22
22
  return 10;
23
23
  }
24
24
  export function detectEntryPoints(graph) {
25
- const imported = new Set(Object.values(graph).flat());
25
+ // Only production code counts as a consumer: a barrel that nothing but its
26
+ // own tests imports (or a root index.ts that tests import) is still an
27
+ // entry, while a barrel re-exported through the app is just plumbing.
28
+ const imported = new Set(Object.entries(graph)
29
+ .filter(([path]) => isArchitectureSource(path))
30
+ .flatMap(([, imports]) => imports));
26
31
  return Object.keys(graph)
27
32
  .filter((path) => isSourceFile(path))
28
33
  .filter((path) => isArchitectureSource(path))
29
- .filter((path) => ENTRY_PATTERNS.some((pattern) => pattern.test(path)) || (!imported.has(path) && (graph[path]?.length ?? 0) > 0))
34
+ .filter((path) => {
35
+ const unimportedWithImports = !imported.has(path) && (graph[path]?.length ?? 0) > 0;
36
+ // index.* is also the conventional barrel file; it is an entry only when
37
+ // nothing else imports it. A top-level index (index.ts, src/index.ts) is
38
+ // the package entry even when it has no imports of its own.
39
+ if (/(^|\/)index\.[cm]?[jt]sx?$/.test(path)) {
40
+ return !imported.has(path) && ((graph[path]?.length ?? 0) > 0 || path.split("/").length <= 2);
41
+ }
42
+ return ENTRY_PATTERNS.some((pattern) => pattern.test(path)) || unimportedWithImports;
43
+ })
30
44
  .sort((a, b) => entryPointScore(a) - entryPointScore(b) || a.localeCompare(b))
31
45
  .slice(0, 20);
32
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"entryPoints.js","sourceRoot":"","sources":["../../../src/analyzers/graph/entryPoints.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,cAAc,GAAG;IACrB,sBAAsB;IACtB,wBAAwB;IACxB,0BAA0B;IAC1B,8CAA8C;IAC9C,qBAAqB;CACtB,CAAC;AAEF,MAAM,oBAAoB,GAA8C;IACtE,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC/C,EAAE,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC7C,EAAE,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC5C,EAAE,OAAO,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE;IACjD,EAAE,OAAO,EAAE,mCAAmC,EAAE,KAAK,EAAE,CAAC,EAAE;IAC1D,EAAE,OAAO,EAAE,mCAAmC,EAAE,KAAK,EAAE,CAAC,EAAE;CAC3D,CAAC;AAEF,SAAS,eAAe,CAAC,IAAY;IACnC,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,oBAAoB,EAAE,CAAC;QACtD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAgB;IAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;SACtB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SACpC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;SAC5C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SACjI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SAC7E,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"entryPoints.js","sourceRoot":"","sources":["../../../src/analyzers/graph/entryPoints.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,cAAc,GAAG;IACrB,sBAAsB;IACtB,wBAAwB;IACxB,0BAA0B;IAC1B,8CAA8C;IAC9C,qBAAqB;CACtB,CAAC;AAEF,MAAM,oBAAoB,GAA8C;IACtE,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC/C,EAAE,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC7C,EAAE,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC5C,EAAE,OAAO,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE;IACjD,EAAE,OAAO,EAAE,mCAAmC,EAAE,KAAK,EAAE,CAAC,EAAE;IAC1D,EAAE,OAAO,EAAE,mCAAmC,EAAE,KAAK,EAAE,CAAC,EAAE;CAC3D,CAAC;AAEF,SAAS,eAAe,CAAC,IAAY;IACnC,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,oBAAoB,EAAE,CAAC;QACtD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAgB;IAChD,2EAA2E;IAC3E,uEAAuE;IACvE,sEAAsE;IACtE,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;SAC9C,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CACrC,CAAC;IAEF,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;SACtB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SACpC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;SAC5C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,MAAM,qBAAqB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACpF,yEAAyE;QACzE,yEAAyE;QACzE,4DAA4D;QAC5D,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAChG,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,qBAAqB,CAAC;IACvF,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SAC7E,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC"}
@@ -1,9 +1,9 @@
1
1
  export { buildDependencyGraph, countReferences, } from "./dependencyGraph.js";
2
2
  export type { FileGraph, DependencyGraphDiagnostics, } from "./dependencyGraph.js";
3
- export { loadAliasMappings, resolveAlias, } from "./aliasResolver.js";
3
+ export { loadAliasMappings, resolveAlias, resolveAliasCandidates, isDeclaredAlias, } from "./aliasResolver.js";
4
4
  export type { AliasMapping, } from "./aliasResolver.js";
5
5
  export { detectEntryPoints, } from "./entryPoints.js";
6
- export { isArchitectureSource, } from "./sourceScope.js";
6
+ export { isArchitectureSource, isTestPath, } from "./sourceScope.js";
7
7
  export { buildReverseGraph, buildBoundedTree, collectNodesWithinDepth, DEFAULT_MAX_CHILDREN, } from "./dependencyMap.js";
8
8
  export type { MapTreeNode, } from "./dependencyMap.js";
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzers/graph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,SAAS,EACT,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzers/graph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,SAAS,EACT,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,EACtB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,oBAAoB,EACpB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export { buildDependencyGraph, countReferences, } from "./dependencyGraph.js";
2
- export { loadAliasMappings, resolveAlias, } from "./aliasResolver.js";
2
+ export { loadAliasMappings, resolveAlias, resolveAliasCandidates, isDeclaredAlias, } from "./aliasResolver.js";
3
3
  export { detectEntryPoints, } from "./entryPoints.js";
4
- export { isArchitectureSource, } from "./sourceScope.js";
4
+ export { isArchitectureSource, isTestPath, } from "./sourceScope.js";
5
5
  export { buildReverseGraph, buildBoundedTree, collectNodesWithinDepth, DEFAULT_MAX_CHILDREN, } from "./dependencyMap.js";
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyzers/graph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EACL,iBAAiB,EACjB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyzers/graph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,EACtB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,oBAAoB,EACpB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC"}
@@ -1,2 +1,4 @@
1
+ /** Test, spec, fixture and mock files, including a root-level test/ folder. */
2
+ export declare function isTestPath(path: string): boolean;
1
3
  export declare function isArchitectureSource(path: string): boolean;
2
4
  //# sourceMappingURL=sourceScope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sourceScope.d.ts","sourceRoot":"","sources":["../../../src/analyzers/graph/sourceScope.ts"],"names":[],"mappings":"AAeA,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAkB1D"}
1
+ {"version":3,"file":"sourceScope.d.ts","sourceRoot":"","sources":["../../../src/analyzers/graph/sourceScope.ts"],"names":[],"mappings":"AAmBA,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIhD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAoB1D"}