@justmpm/deps-consult 1.0.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 (57) hide show
  1. package/README.md +227 -0
  2. package/build/cache/package-cache.d.ts +39 -0
  3. package/build/cache/package-cache.d.ts.map +1 -0
  4. package/build/cache/package-cache.js +90 -0
  5. package/build/cache/package-cache.js.map +1 -0
  6. package/build/extractors/api-extractor.d.ts +6 -0
  7. package/build/extractors/api-extractor.d.ts.map +1 -0
  8. package/build/extractors/api-extractor.js +191 -0
  9. package/build/extractors/api-extractor.js.map +1 -0
  10. package/build/extractors/examples-extractor.d.ts +16 -0
  11. package/build/extractors/examples-extractor.d.ts.map +1 -0
  12. package/build/extractors/examples-extractor.js +224 -0
  13. package/build/extractors/examples-extractor.js.map +1 -0
  14. package/build/extractors/jsdoc-extractor.d.ts +11 -0
  15. package/build/extractors/jsdoc-extractor.d.ts.map +1 -0
  16. package/build/extractors/jsdoc-extractor.js +115 -0
  17. package/build/extractors/jsdoc-extractor.js.map +1 -0
  18. package/build/extractors/readme-extractor.d.ts +6 -0
  19. package/build/extractors/readme-extractor.d.ts.map +1 -0
  20. package/build/extractors/readme-extractor.js +138 -0
  21. package/build/extractors/readme-extractor.js.map +1 -0
  22. package/build/formatters/markdown-formatter.d.ts +12 -0
  23. package/build/formatters/markdown-formatter.d.ts.map +1 -0
  24. package/build/formatters/markdown-formatter.js +251 -0
  25. package/build/formatters/markdown-formatter.js.map +1 -0
  26. package/build/index.d.ts +12 -0
  27. package/build/index.d.ts.map +1 -0
  28. package/build/index.js +226 -0
  29. package/build/index.js.map +1 -0
  30. package/build/pipeline.d.ts +31 -0
  31. package/build/pipeline.d.ts.map +1 -0
  32. package/build/pipeline.js +203 -0
  33. package/build/pipeline.js.map +1 -0
  34. package/build/resolvers/exports-resolver.d.ts +12 -0
  35. package/build/resolvers/exports-resolver.d.ts.map +1 -0
  36. package/build/resolvers/exports-resolver.js +235 -0
  37. package/build/resolvers/exports-resolver.js.map +1 -0
  38. package/build/resolvers/package-resolver.d.ts +25 -0
  39. package/build/resolvers/package-resolver.d.ts.map +1 -0
  40. package/build/resolvers/package-resolver.js +189 -0
  41. package/build/resolvers/package-resolver.js.map +1 -0
  42. package/build/resolvers/types-resolver.d.ts +19 -0
  43. package/build/resolvers/types-resolver.d.ts.map +1 -0
  44. package/build/resolvers/types-resolver.js +155 -0
  45. package/build/resolvers/types-resolver.js.map +1 -0
  46. package/build/schemas/package-json.schema.d.ts +81 -0
  47. package/build/schemas/package-json.schema.d.ts.map +1 -0
  48. package/build/schemas/package-json.schema.js +91 -0
  49. package/build/schemas/package-json.schema.js.map +1 -0
  50. package/build/test.d.ts +6 -0
  51. package/build/test.d.ts.map +1 -0
  52. package/build/test.js.map +1 -0
  53. package/build/types/index.d.ts +117 -0
  54. package/build/types/index.d.ts.map +1 -0
  55. package/build/types/index.js +14 -0
  56. package/build/types/index.js.map +1 -0
  57. package/package.json +48 -0
@@ -0,0 +1,203 @@
1
+ import { packageCache } from './cache/package-cache.js';
2
+ import { resolvePackage, computePackageSize } from './resolvers/package-resolver.js';
3
+ import { resolveEntrypoints } from './resolvers/exports-resolver.js';
4
+ import { resolveTypes } from './resolvers/types-resolver.js';
5
+ import { extractApiSurface } from './extractors/api-extractor.js';
6
+ import { extractReadme } from './extractors/readme-extractor.js';
7
+ import { extractExamples } from './extractors/examples-extractor.js';
8
+ /**
9
+ * Extrai e cacheia o pacote completo.
10
+ * Este é o ponto de entrada para todas as tools.
11
+ */
12
+ export async function getOrExtractPackage(packageName, projectDir) {
13
+ // 1. Verificar cache
14
+ const cached = await packageCache.get(projectDir, packageName);
15
+ if (cached)
16
+ return cached;
17
+ // 2. Resolver pacote
18
+ const resolution = await resolvePackage(packageName, projectDir);
19
+ const { packageDir, packageJson } = resolution;
20
+ // 3. Resolver entry points
21
+ const entrypoints = resolveEntrypoints(packageDir, packageJson);
22
+ // 4. Construir meta
23
+ const diskSize = await computePackageSize(packageDir);
24
+ const meta = {
25
+ name: packageJson.name ?? packageName,
26
+ version: packageJson.version,
27
+ description: packageJson.description,
28
+ license: typeof packageJson.license === 'string' ? packageJson.license : packageJson.license?.type,
29
+ entrypoints,
30
+ dependencies: packageJson.dependencies,
31
+ peerDependencies: packageJson.peerDependencies,
32
+ hasTypes: entrypoints.some((ep) => ep.hasTypes),
33
+ packageDir,
34
+ diskSize,
35
+ includedFiles: packageJson.files
36
+ ?.map((f) => typeof f === 'string' ? f : undefined)
37
+ .filter((f) => f !== undefined),
38
+ sideEffects: packageJson.sideEffects,
39
+ };
40
+ // 5. Extrair API surface para todos os entry points
41
+ const symbolsMap = new Map();
42
+ for (const ep of entrypoints) {
43
+ const typesRes = resolveTypes(packageDir, packageJson, ep);
44
+ if (typesRes.hasTypes && typesRes.typeFiles.length > 0) {
45
+ const symbols = extractApiSurface(typesRes.typeFiles, ep.subpath, packageDir);
46
+ symbolsMap.set(ep.subpath, [...symbols]);
47
+ }
48
+ else {
49
+ symbolsMap.set(ep.subpath, []);
50
+ }
51
+ }
52
+ // 6. Extrair README
53
+ const readme = await extractReadme(packageDir);
54
+ // 7. Construir cached package
55
+ const cachedPackage = {
56
+ meta,
57
+ symbols: symbolsMap,
58
+ readme,
59
+ extractedAt: Date.now(),
60
+ packageJsonHash: '',
61
+ };
62
+ // 8. Salvar no cache
63
+ await packageCache.set(projectDir, packageName, cachedPackage);
64
+ return cachedPackage;
65
+ }
66
+ /**
67
+ * Busca símbolos em um pacote com scoring.
68
+ */
69
+ export function searchSymbols(cached, query, options) {
70
+ const allSymbols = getAllSymbols(cached, options?.entrypoint);
71
+ const filtered = options?.kind && options.kind !== 'all'
72
+ ? allSymbols.filter(s => s.kind === options.kind)
73
+ : allSymbols;
74
+ const results = [];
75
+ const normalizedQuery = query.toLowerCase().replace(/\*/g, '');
76
+ const isPrefixWildcard = query.endsWith('*') && !query.startsWith('*');
77
+ const isSuffixWildcard = query.startsWith('*') && !query.endsWith('*');
78
+ const isContainsWildcard = query.startsWith('*') && query.endsWith('*');
79
+ const isExact = !isPrefixWildcard && !isSuffixWildcard && !isContainsWildcard;
80
+ for (const symbol of filtered) {
81
+ const nameLower = symbol.name.toLowerCase();
82
+ let matchType;
83
+ let score = 0;
84
+ if (isExact) {
85
+ if (nameLower === normalizedQuery) {
86
+ matchType = 'exact';
87
+ score = 1.0;
88
+ }
89
+ else if (nameLower.startsWith(normalizedQuery)) {
90
+ matchType = 'prefix';
91
+ score = 0.8;
92
+ }
93
+ else if (nameLower.includes(normalizedQuery)) {
94
+ matchType = 'contains';
95
+ score = 0.6;
96
+ }
97
+ }
98
+ else if (isPrefixWildcard) {
99
+ if (nameLower.startsWith(normalizedQuery)) {
100
+ matchType = 'prefix';
101
+ score = 0.8;
102
+ }
103
+ }
104
+ else if (isSuffixWildcard) {
105
+ if (nameLower.endsWith(normalizedQuery)) {
106
+ matchType = 'contains';
107
+ score = 0.7;
108
+ }
109
+ }
110
+ else if (isContainsWildcard) {
111
+ if (nameLower.includes(normalizedQuery)) {
112
+ matchType = 'contains';
113
+ score = 0.6;
114
+ }
115
+ }
116
+ if (!matchType) {
117
+ const queryTokens = tokenize(normalizedQuery);
118
+ const nameTokens = tokenize(nameLower);
119
+ const overlap = queryTokens.filter(qt => nameTokens.some(nt => nt.includes(qt) || qt.includes(nt)));
120
+ if (overlap.length > 0 && overlap.length >= queryTokens.length * 0.5) {
121
+ matchType = 'fuzzy';
122
+ score = 0.3 + (overlap.length / Math.max(queryTokens.length, 1)) * 0.3;
123
+ }
124
+ }
125
+ if (matchType) {
126
+ results.push({ symbol, score, matchType });
127
+ }
128
+ }
129
+ results.sort((a, b) => b.score - a.score);
130
+ return results;
131
+ }
132
+ /**
133
+ * Encontra um símbolo exato pelo nome.
134
+ */
135
+ export function findSymbol(cached, symbolName, entrypoint) {
136
+ const allSymbols = getAllSymbols(cached, entrypoint);
137
+ return allSymbols.find(s => s.name === symbolName);
138
+ }
139
+ /**
140
+ * Extrai exemplos para um pacote/símbolo.
141
+ */
142
+ export async function getExamples(cached, symbolName) {
143
+ const allSymbols = getAllSymbols(cached);
144
+ return extractExamples(cached.meta.packageDir, allSymbols, cached.readme, symbolName);
145
+ }
146
+ /**
147
+ * Resolve os import paths possíveis para um símbolo.
148
+ */
149
+ export function resolveImportPaths(cached, symbol) {
150
+ const packageName = cached.meta.name;
151
+ const paths = [];
152
+ paths.push(packageName);
153
+ if (symbol.entrypoint && symbol.entrypoint !== '.') {
154
+ const subpath = symbol.entrypoint.startsWith('./')
155
+ ? symbol.entrypoint
156
+ : `./${symbol.entrypoint}`;
157
+ paths.push(`${packageName}/${subpath.replace('./', '')}`);
158
+ }
159
+ for (const [subpath, symbols] of cached.symbols.entries()) {
160
+ if (symbols.some(s => s.name === symbol.name)) {
161
+ if (subpath === '.') {
162
+ if (!paths.includes(packageName))
163
+ paths.push(packageName);
164
+ }
165
+ else {
166
+ const importPath = `${packageName}/${subpath.replace('./', '')}`;
167
+ if (!paths.includes(importPath))
168
+ paths.push(importPath);
169
+ }
170
+ }
171
+ }
172
+ return paths;
173
+ }
174
+ // ─────────────────────────────────────────
175
+ // Helpers
176
+ // ─────────────────────────────────────────
177
+ function getAllSymbols(cached, entrypoint) {
178
+ if (entrypoint) {
179
+ const normalized = entrypoint.startsWith('.') ? entrypoint : `./${entrypoint}`;
180
+ const symbols = cached.symbols.get(normalized) ?? cached.symbols.get('.');
181
+ return symbols ? [...symbols] : [];
182
+ }
183
+ const seen = new Set();
184
+ const all = [];
185
+ for (const symbols of cached.symbols.values()) {
186
+ for (const sym of symbols) {
187
+ if (!seen.has(sym.name)) {
188
+ seen.add(sym.name);
189
+ all.push(sym);
190
+ }
191
+ }
192
+ }
193
+ return all;
194
+ }
195
+ function tokenize(str) {
196
+ return str
197
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
198
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
199
+ .split(/[\s_-]+/)
200
+ .filter(t => t.length > 0)
201
+ .map(t => t.toLowerCase());
202
+ }
203
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { PackageJsonData } from '../schemas/package-json.schema.ts';
2
+ import type { ResolvedEntrypoint } from '../types/index.ts';
3
+ /**
4
+ * Resolve todos os entry points de um pacote.
5
+ */
6
+ export declare function resolveEntrypoints(packageDir: string, packageJson: PackageJsonData): ReadonlyArray<ResolvedEntrypoint>;
7
+ /**
8
+ * Resolve um subpath específico.
9
+ * Ex: resolveSubpath(packageDir, pkgJson, "./hooks") -> entrypoint de hooks
10
+ */
11
+ export declare function resolveSubpath(packageDir: string, packageJson: PackageJsonData, subpath: string): ResolvedEntrypoint | undefined;
12
+ //# sourceMappingURL=exports-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports-resolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/exports-resolver.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA0B5D;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,eAAe,GAC3B,aAAa,CAAC,kBAAkB,CAAC,CASnC;AAwOD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,eAAe,EAC5B,OAAO,EAAE,MAAM,GACd,kBAAkB,GAAG,SAAS,CAMhC"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Resolve entry points de um pacote a partir do campo exports do package.json.
3
+ * Lida com conditional exports, subpath exports e fallbacks legados.
4
+ */
5
+ import { existsSync } from 'node:fs';
6
+ import { resolve } from 'node:path';
7
+ import { isString, isPlainObject, compact } from 'es-toolkit';
8
+ /**
9
+ * Ordem de prioridade das condições ao resolver exports.
10
+ * types sempre primeiro para garantir que o TypeScript encontre os tipos.
11
+ */
12
+ const CONDITION_PRIORITY = [
13
+ 'types',
14
+ 'import',
15
+ 'require',
16
+ 'node',
17
+ 'node-addons',
18
+ 'browser',
19
+ 'react-native',
20
+ 'edge-light',
21
+ 'workerd',
22
+ 'deno',
23
+ 'default',
24
+ ];
25
+ /**
26
+ * Resolve todos os entry points de um pacote.
27
+ */
28
+ export function resolveEntrypoints(packageDir, packageJson) {
29
+ const exports = packageJson.exports;
30
+ if (exports) {
31
+ return resolveFromExports(packageDir, packageJson, exports);
32
+ }
33
+ // Fallback para pacotes legados (sem campo exports)
34
+ return resolveFromLegacy(packageDir, packageJson);
35
+ }
36
+ /**
37
+ * Resolve entry points a partir do campo exports.
38
+ */
39
+ function resolveFromExports(packageDir, packageJson, exports) {
40
+ // exports pode ser uma string direta: "./dist/index.js"
41
+ if (isString(exports)) {
42
+ const resolvedJs = resolveCondition({ default: exports }, ['import', 'require', 'default', 'node']);
43
+ return [buildEntrypoint(packageDir, '.', { default: exports })];
44
+ }
45
+ if (!exports || typeof exports !== 'object') {
46
+ return resolveFromLegacy(packageDir, packageJson);
47
+ }
48
+ const entries = parseExportMap(exports);
49
+ const results = [];
50
+ for (const entry of entries) {
51
+ const resolvedJs = resolveCondition(entry.conditions, ['import', 'require', 'default', 'node']);
52
+ const resolvedTypes = resolveCondition(entry.conditions, ['types']);
53
+ // Se não achou types nas conditions, tentar inferir do js
54
+ let typesPath;
55
+ if (resolvedTypes) {
56
+ typesPath = resolveFilePath(packageDir, resolvedTypes);
57
+ }
58
+ else if (resolvedJs) {
59
+ typesPath = inferTypesFromJs(packageDir, resolvedJs);
60
+ }
61
+ results.push({
62
+ subpath: entry.subpath,
63
+ jsPath: resolvedJs ? resolveFilePath(packageDir, resolvedJs) : undefined,
64
+ typesPath,
65
+ hasTypes: typesPath !== undefined,
66
+ });
67
+ }
68
+ // Se não tem ".", adicionar o entry principal
69
+ if (!results.some(r => r.subpath === '.')) {
70
+ const legacy = resolveFromLegacy(packageDir, packageJson);
71
+ results.unshift(...legacy);
72
+ }
73
+ return results;
74
+ }
75
+ /**
76
+ * Faz parse do mapa de exports em entradas individuais.
77
+ */
78
+ function parseExportMap(exports) {
79
+ const entries = [];
80
+ for (const [subpath, value] of Object.entries(exports)) {
81
+ if (isString(value)) {
82
+ entries.push({ subpath, conditions: { default: value } });
83
+ }
84
+ else if (isPlainObject(value)) {
85
+ const conditions = flattenConditions(value);
86
+ entries.push({ subpath, conditions });
87
+ }
88
+ }
89
+ return entries;
90
+ }
91
+ /**
92
+ * Achata conditions aninhadas em um mapa plano.
93
+ * { "import": { "types": "...", "default": "..." } }
94
+ * -> { "import.types": "...", "import.default": "..." }
95
+ * Mas o mais comum é:
96
+ * { "types": "...", "import": "...", "require": "...", "default": "..." }
97
+ */
98
+ function flattenConditions(obj, prefix = '') {
99
+ const result = {};
100
+ for (const [key, value] of Object.entries(obj)) {
101
+ const fullKey = prefix ? `${prefix}.${key}` : key;
102
+ if (isString(value)) {
103
+ result[fullKey] = value;
104
+ }
105
+ else if (isPlainObject(value)) {
106
+ Object.assign(result, flattenConditions(value, fullKey));
107
+ }
108
+ }
109
+ return result;
110
+ }
111
+ /**
112
+ * Resolve o caminho correto para uma condition específica.
113
+ */
114
+ function resolveCondition(conditions, targetConditions) {
115
+ // Procurar pela condition na ordem de prioridade
116
+ for (const target of targetConditions) {
117
+ for (const priority of CONDITION_PRIORITY) {
118
+ // Match exato: "import" -> "import"
119
+ if (priority === target && conditions[priority]) {
120
+ return conditions[priority];
121
+ }
122
+ // Match combinado: "import" -> "node.import", "import.types"
123
+ for (const [key, value] of Object.entries(conditions)) {
124
+ if (key === `${target}.${priority}` || key === `${priority}.${target}`) {
125
+ return value;
126
+ }
127
+ }
128
+ }
129
+ }
130
+ // Procurar qualquer condition que bata
131
+ for (const target of targetConditions) {
132
+ for (const [key, value] of Object.entries(conditions)) {
133
+ if (key === target)
134
+ return value;
135
+ }
136
+ }
137
+ return conditions['default'];
138
+ }
139
+ /**
140
+ * Resolve entry points para pacotes legados (sem campo exports).
141
+ */
142
+ function resolveFromLegacy(packageDir, packageJson) {
143
+ const jsCandidates = compact([
144
+ packageJson.main,
145
+ packageJson.module,
146
+ 'index.js',
147
+ 'index.mjs',
148
+ 'index.cjs',
149
+ ]);
150
+ let jsPath;
151
+ for (const candidate of jsCandidates) {
152
+ const fullPath = resolveFilePath(packageDir, candidate);
153
+ if (fullPath) {
154
+ jsPath = fullPath;
155
+ break;
156
+ }
157
+ }
158
+ // Resolver tipos
159
+ const typesCandidates = compact([
160
+ packageJson.types,
161
+ packageJson.typings,
162
+ ]);
163
+ let typesPath;
164
+ for (const candidate of typesCandidates) {
165
+ const fullPath = resolveFilePath(packageDir, candidate);
166
+ if (fullPath) {
167
+ typesPath = fullPath;
168
+ break;
169
+ }
170
+ }
171
+ // Se não achou types declarados, inferir do js
172
+ if (!typesPath && jsPath) {
173
+ typesPath = inferTypesFromJs(packageDir, jsPath);
174
+ }
175
+ // Se ainda não achou, buscar index.d.ts na raiz
176
+ if (!typesPath) {
177
+ const indexDts = resolveFilePath(packageDir, 'index.d.ts');
178
+ if (indexDts)
179
+ typesPath = indexDts;
180
+ }
181
+ return [{
182
+ subpath: '.',
183
+ jsPath,
184
+ typesPath,
185
+ hasTypes: typesPath !== undefined,
186
+ }];
187
+ }
188
+ // ─────────────────────────────────────────
189
+ // Helpers
190
+ // ─────────────────────────────────────────
191
+ function resolveFilePath(baseDir, relativePath) {
192
+ const fullPath = resolve(baseDir, relativePath);
193
+ return existsSync(fullPath) ? fullPath : undefined;
194
+ }
195
+ /**
196
+ * Infere arquivo de tipos a partir do arquivo JS.
197
+ * Se jsPath é ./dist/index.js, tenta ./dist/index.d.ts
198
+ */
199
+ function inferTypesFromJs(packageDir, jsPath) {
200
+ // Se o jsPath já é absoluto, usar diretamente
201
+ const absJsPath = resolve(packageDir, jsPath);
202
+ const candidates = [
203
+ absJsPath.replace(/\.js$/, '.d.ts'),
204
+ absJsPath.replace(/\.js$/, '.d.mts'),
205
+ absJsPath.replace(/\.mjs$/, '.d.mts'),
206
+ absJsPath.replace(/\.cjs$/, '.d.cts'),
207
+ absJsPath.replace(/\.jsx$/, '.d.ts'),
208
+ ];
209
+ for (const candidate of candidates) {
210
+ if (existsSync(candidate))
211
+ return candidate;
212
+ }
213
+ return undefined;
214
+ }
215
+ function buildEntrypoint(packageDir, subpath, conditions) {
216
+ const jsPath = resolveCondition(conditions, ['import', 'require', 'default', 'node']);
217
+ const typesPath = resolveCondition(conditions, ['types']);
218
+ return {
219
+ subpath,
220
+ jsPath: jsPath ? resolveFilePath(packageDir, jsPath) : undefined,
221
+ typesPath: typesPath ? resolveFilePath(packageDir, typesPath) : undefined,
222
+ hasTypes: typesPath !== undefined || (jsPath !== undefined && inferTypesFromJs(packageDir, jsPath) !== undefined),
223
+ };
224
+ }
225
+ /**
226
+ * Resolve um subpath específico.
227
+ * Ex: resolveSubpath(packageDir, pkgJson, "./hooks") -> entrypoint de hooks
228
+ */
229
+ export function resolveSubpath(packageDir, packageJson, subpath) {
230
+ // Normalizar subpath
231
+ const normalizedSubpath = subpath.startsWith('.') ? subpath : `./${subpath}`;
232
+ const allEntrypoints = resolveEntrypoints(packageDir, packageJson);
233
+ return allEntrypoints.find(ep => ep.subpath === normalizedSubpath || ep.subpath === subpath);
234
+ }
235
+ //# sourceMappingURL=exports-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports-resolver.js","sourceRoot":"","sources":["../../src/resolvers/exports-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAQ,OAAO,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAQ,MAAM,YAAY,CAAC;AAEpE;;;GAGG;AACH,MAAM,kBAAkB,GAA0B;IAChD,OAAO;IACP,QAAQ;IACR,SAAS;IACT,MAAM;IACN,aAAa;IACb,SAAS;IACT,cAAc;IACd,YAAY;IACZ,SAAS;IACT,MAAM;IACN,SAAS;CACV,CAAC;AAOF;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAkB,EAClB,WAA4B;IAE5B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IAEpC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,kBAAkB,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,oDAAoD;IACpD,OAAO,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,UAAkB,EAClB,WAA4B,EAC5B,OAAgD;IAEhD,wDAAwD;IACxD,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QACpG,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,OAAO,GAAyB,EAAE,CAAC;IAEzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAChG,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAEpE,0DAA0D;QAC1D,IAAI,SAA6B,CAAC;QAClC,IAAI,aAAa,EAAE,CAAC;YAClB,SAAS,GAAG,eAAe,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,UAAU,EAAE,CAAC;YACtB,SAAS,GAAG,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;YACxE,SAAS;YACT,QAAQ,EAAE,SAAS,KAAK,SAAS;SAClC,CAAC,CAAC;IACL,CAAC;IAED,8CAA8C;IAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC1D,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAgC;IACtD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAgC,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,GAA4B,EAAE,MAAM,GAAG,EAAE;IAClE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAElD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QAC1B,CAAC;aAAM,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,KAAgC,EAAE,OAAO,CAAC,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,UAAkC,EAClC,gBAAuC;IAEvC,iDAAiD;IACjD,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE,CAAC;YAC1C,oCAAoC;YACpC,IAAI,QAAQ,KAAK,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;YACD,6DAA6D;YAC7D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtD,IAAI,GAAG,KAAK,GAAG,MAAM,IAAI,QAAQ,EAAE,IAAI,GAAG,KAAK,GAAG,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC;oBACvE,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,IAAI,GAAG,KAAK,MAAM;gBAAE,OAAO,KAAK,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,UAAkB,EAClB,WAA4B;IAE5B,MAAM,YAAY,GAAG,OAAO,CAAC;QAC3B,WAAW,CAAC,IAAI;QAChB,WAAW,CAAC,MAAM;QAClB,UAAU;QACV,WAAW;QACX,WAAW;KACZ,CAAC,CAAC;IAEH,IAAI,MAA0B,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,QAAQ,CAAC;YAClB,MAAM;QACR,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,MAAM,eAAe,GAAG,OAAO,CAAC;QAC9B,WAAW,CAAC,KAAK;QACjB,WAAW,CAAC,OAAO;KACpB,CAAC,CAAC;IAEH,IAAI,SAA6B,CAAC;IAClC,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,QAAQ,EAAE,CAAC;YACb,SAAS,GAAG,QAAQ,CAAC;YACrB,MAAM;QACR,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC,SAAS,IAAI,MAAM,EAAE,CAAC;QACzB,SAAS,GAAG,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,QAAQ;YAAE,SAAS,GAAG,QAAQ,CAAC;IACrC,CAAC;IAED,OAAO,CAAC;YACN,OAAO,EAAE,GAAG;YACZ,MAAM;YACN,SAAS;YACT,QAAQ,EAAE,SAAS,KAAK,SAAS;SAClC,CAAC,CAAC;AACL,CAAC;AAED,4CAA4C;AAC5C,UAAU;AACV,4CAA4C;AAE5C,SAAS,eAAe,CAAC,OAAe,EAAE,YAAoB;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,UAAkB,EAAE,MAAc;IAC1D,8CAA8C;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG;QACjB,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;QACnC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;QACpC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACrC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACrC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC;KACrC,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CACtB,UAAkB,EAClB,OAAe,EACf,UAAkC;IAElC,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACtF,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAE1D,OAAO;QACL,OAAO;QACP,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QAChE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QACzE,QAAQ,EAAE,SAAS,KAAK,SAAS,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC;KAClH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,UAAkB,EAClB,WAA4B,EAC5B,OAAe;IAEf,qBAAqB;IACrB,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;IAE7E,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACnE,OAAO,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,KAAK,iBAAiB,IAAI,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;AAC/F,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type PackageJsonData } from '../schemas/package-json.schema.js';
2
+ export interface PackageResolution {
3
+ /** Diretório raiz do pacote no node_modules */
4
+ packageDir: string;
5
+ /** package.json parseado e validado */
6
+ packageJson: PackageJsonData;
7
+ /** Caminho absoluto para o node_modules do projeto */
8
+ nodeModulesDir: string;
9
+ }
10
+ /**
11
+ * Resolve o diretório de um pacote instalado.
12
+ */
13
+ export declare function resolvePackage(packageName: string, projectDir: string): Promise<PackageResolution>;
14
+ /**
15
+ * Lista todos os pacotes instalados no node_modules do projeto.
16
+ */
17
+ export declare function listInstalledPackages(projectDir: string): Promise<ReadonlyArray<{
18
+ name: string;
19
+ version?: string;
20
+ }>>;
21
+ /**
22
+ * Calcula o tamanho no disco de um diretório de pacote.
23
+ */
24
+ export declare function computePackageSize(packageDir: string): Promise<number>;
25
+ //# sourceMappingURL=package-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-resolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/package-resolver.ts"],"names":[],"mappings":"AAQA,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAE5F,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,WAAW,EAAE,eAAe,CAAC;IAC7B,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;CACxB;AAWD;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,CAAC,CA6D5B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAkC5D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B5E"}