@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.
- package/README.md +227 -0
- package/build/cache/package-cache.d.ts +39 -0
- package/build/cache/package-cache.d.ts.map +1 -0
- package/build/cache/package-cache.js +90 -0
- package/build/cache/package-cache.js.map +1 -0
- package/build/extractors/api-extractor.d.ts +6 -0
- package/build/extractors/api-extractor.d.ts.map +1 -0
- package/build/extractors/api-extractor.js +191 -0
- package/build/extractors/api-extractor.js.map +1 -0
- package/build/extractors/examples-extractor.d.ts +16 -0
- package/build/extractors/examples-extractor.d.ts.map +1 -0
- package/build/extractors/examples-extractor.js +224 -0
- package/build/extractors/examples-extractor.js.map +1 -0
- package/build/extractors/jsdoc-extractor.d.ts +11 -0
- package/build/extractors/jsdoc-extractor.d.ts.map +1 -0
- package/build/extractors/jsdoc-extractor.js +115 -0
- package/build/extractors/jsdoc-extractor.js.map +1 -0
- package/build/extractors/readme-extractor.d.ts +6 -0
- package/build/extractors/readme-extractor.d.ts.map +1 -0
- package/build/extractors/readme-extractor.js +138 -0
- package/build/extractors/readme-extractor.js.map +1 -0
- package/build/formatters/markdown-formatter.d.ts +12 -0
- package/build/formatters/markdown-formatter.d.ts.map +1 -0
- package/build/formatters/markdown-formatter.js +251 -0
- package/build/formatters/markdown-formatter.js.map +1 -0
- package/build/index.d.ts +12 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +226 -0
- package/build/index.js.map +1 -0
- package/build/pipeline.d.ts +31 -0
- package/build/pipeline.d.ts.map +1 -0
- package/build/pipeline.js +203 -0
- package/build/pipeline.js.map +1 -0
- package/build/resolvers/exports-resolver.d.ts +12 -0
- package/build/resolvers/exports-resolver.d.ts.map +1 -0
- package/build/resolvers/exports-resolver.js +235 -0
- package/build/resolvers/exports-resolver.js.map +1 -0
- package/build/resolvers/package-resolver.d.ts +25 -0
- package/build/resolvers/package-resolver.d.ts.map +1 -0
- package/build/resolvers/package-resolver.js +189 -0
- package/build/resolvers/package-resolver.js.map +1 -0
- package/build/resolvers/types-resolver.d.ts +19 -0
- package/build/resolvers/types-resolver.d.ts.map +1 -0
- package/build/resolvers/types-resolver.js +155 -0
- package/build/resolvers/types-resolver.js.map +1 -0
- package/build/schemas/package-json.schema.d.ts +81 -0
- package/build/schemas/package-json.schema.d.ts.map +1 -0
- package/build/schemas/package-json.schema.js +91 -0
- package/build/schemas/package-json.schema.js.map +1 -0
- package/build/test.d.ts +6 -0
- package/build/test.d.ts.map +1 -0
- package/build/test.js.map +1 -0
- package/build/types/index.d.ts +117 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/index.js +14 -0
- package/build/types/index.js.map +1 -0
- package/package.json +48 -0
package/README.md
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# @justmpm/deps-consult
|
|
2
|
+
|
|
3
|
+
MCP server que consulta pacotes npm instalados no `node_modules` diretamente. Extrai API surfaces, JSDoc, exemplos de uso e metadados -- zero config, offline, sem API keys.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@justmpm/deps-consult)
|
|
6
|
+
[](https://github.com/Just-mpm/deps-consult/blob/main/LICENSE)
|
|
7
|
+
[](https://nodejs.org/)
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- **API surface completa** -- funcoes, classes, interfaces, tipos, enums e variaveis exportadas com assinaturas TypeScript
|
|
12
|
+
- **JSDoc rico** -- extrai `@param`, `@returns`, `@example`, `@deprecated`, `@since`, `@see`, `@throws`, `@default`
|
|
13
|
+
- **Exemplos de codigo** -- coleta de 4 fontes: JSDoc `@example`, diretorio `/examples`, blocos de codigo do README e `/docs`
|
|
14
|
+
- **Busca inteligente** -- match exato, prefixo (`Button*`), sufixo (`*Button`), contem (`*Button*`) e fuzzy matching com scoring
|
|
15
|
+
- **Zero config** -- funciona com qualquer pacote npm, sem internet, sem API keys, sem arquivos de configuracao
|
|
16
|
+
- **Deduplicacao automatica** -- pacotes com multiplos entry points (como es-toolkit) nao geram resultados duplicados
|
|
17
|
+
- **Cache LRU** -- 50 pacotes em cache com TTL de 30 minutos e invalidacao automatica por hash do package.json
|
|
18
|
+
- **Suporte completo** -- pacotes scoped, workspaces, symlinks, conditional exports e fallbacks legados
|
|
19
|
+
|
|
20
|
+
## Instalacao
|
|
21
|
+
|
|
22
|
+
### npx (sem instalar)
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"mcpServers": {
|
|
27
|
+
"deps-consult": {
|
|
28
|
+
"command": "npx",
|
|
29
|
+
"args": ["-y", "@justmpm/deps-consult"]
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Instalacao global
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npm install -g @justmpm/deps-consult
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"mcpServers": {
|
|
44
|
+
"deps-consult": {
|
|
45
|
+
"command": "deps-consult"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Como projeto local
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
git clone https://github.com/Just-mpm/deps-consult.git
|
|
55
|
+
cd deps-consult
|
|
56
|
+
npm install && npm run build
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"mcpServers": {
|
|
62
|
+
"deps-consult": {
|
|
63
|
+
"command": "node",
|
|
64
|
+
"args": ["D:/caminho/para/deps-consult/build/index.js"]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Configuracao MCP
|
|
71
|
+
|
|
72
|
+
O `deps-consult` usa transporte stdio (JSON-RPC). Adicione a configuracao acima no arquivo de configuracao do seu cliente:
|
|
73
|
+
|
|
74
|
+
| Cliente | Arquivo de configuracao |
|
|
75
|
+
|---------|------------------------|
|
|
76
|
+
| Claude Desktop | `~/.claude/claude_desktop_config.json` |
|
|
77
|
+
| OpenCode | `.opencode/config.json` |
|
|
78
|
+
| Cursor | `.cursor/mcp.json` |
|
|
79
|
+
|
|
80
|
+
## Referencia das Tools
|
|
81
|
+
|
|
82
|
+
| Tool | Descricao | Parametros |
|
|
83
|
+
|------|-----------|------------|
|
|
84
|
+
| `deps_info` | Visao geral do pacote: versao, descricao, entry points, dependencias, peer deps, tipos, tamanho | `package`, `projectDir?` |
|
|
85
|
+
| `deps_api` | API surface completa: todas as funcoes, classes, interfaces, tipos, enums e variaveis com assinaturas | `package`, `entrypoint?`, `kind?`, `limit?` |
|
|
86
|
+
| `deps_search` | Busca simbolos por nome com wildcards e fuzzy matching | `package`, `query`, `entrypoint?`, `kind?` |
|
|
87
|
+
| `deps_usage` | Detalhes de uso de um simbolo: assinatura, JSDoc, parametros, return type, exemplos, imports | `package`, `symbol`, `entrypoint?` |
|
|
88
|
+
| `deps_examples` | Exemplos de codigo extraidos de JSDoc, /examples, README e /docs | `package`, `symbol?`, `entrypoint?` |
|
|
89
|
+
|
|
90
|
+
### Parametros em detalhe
|
|
91
|
+
|
|
92
|
+
**deps_info**
|
|
93
|
+
- `package` (string, obrigatorio) -- Nome do pacote (ex: `zod`, `@mui/material`)
|
|
94
|
+
- `projectDir` (string, opcional) -- Diretorio do projeto. Default: `process.cwd()`
|
|
95
|
+
|
|
96
|
+
**deps_api**
|
|
97
|
+
- `package` (string, obrigatorio)
|
|
98
|
+
- `entrypoint` (string, opcional) -- Subpath do entry point (ex: `"hooks"`, `"utils"`)
|
|
99
|
+
- `kind` (enum, opcional) -- `all` | `functions` | `classes` | `interfaces` | `types` | `enums` | `variables`. Default: `all`
|
|
100
|
+
- `limit` (number, opcional) -- Maximo de simbolos por categoria. Range: 1-200. Default: 50
|
|
101
|
+
|
|
102
|
+
**deps_search**
|
|
103
|
+
- `package` (string, obrigatorio)
|
|
104
|
+
- `query` (string, obrigatorio) -- Suporta wildcards: `Button` (exato), `Button*` (prefixo), `*Button` (sufixo), `*Button*` (contem)
|
|
105
|
+
- `entrypoint` (string, opcional)
|
|
106
|
+
- `kind` (enum, opcional) -- Mesmas opcoes do `deps_api`
|
|
107
|
+
|
|
108
|
+
**deps_usage**
|
|
109
|
+
- `package` (string, obrigatorio)
|
|
110
|
+
- `symbol` (string, obrigatorio) -- Nome exato do simbolo. Se nao encontrar, faz busca fuzzy com score > 0.5
|
|
111
|
+
- `entrypoint` (string, opcional)
|
|
112
|
+
|
|
113
|
+
**deps_examples**
|
|
114
|
+
- `package` (string, obrigatorio)
|
|
115
|
+
- `symbol` (string, opcional) -- Filtra exemplos por simbolo
|
|
116
|
+
- `entrypoint` (string, opcional)
|
|
117
|
+
|
|
118
|
+
## Exemplos de Uso
|
|
119
|
+
|
|
120
|
+
### Conhecer um pacote novo
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
deps_info zod
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Retorna versao, descricao, entry points, dependencias, se tem tipos e tamanho no disco.
|
|
127
|
+
|
|
128
|
+
### Ver a API completa
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
deps_api es-toolkit kind=functions limit=30
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Lista as primeiras 30 funcoes exportadas com assinaturas TypeScript.
|
|
135
|
+
|
|
136
|
+
### Buscar um simbolo
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
deps_search @mui/material query="Button*"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Encontra todos os simbolos com prefixo "Button" no MUI.
|
|
143
|
+
|
|
144
|
+
### Entender como usar um simbolo
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
deps_usage zod symbol="object"
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Retorna a assinatura completa, JSDoc (params, returns), exemplos e todos os caminhos de import possiveis.
|
|
151
|
+
|
|
152
|
+
### Ver exemplos de codigo
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
deps_examples react-hook-form
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Coleta exemplos de todas as fontes: JSDoc, diretorio de exemplos, README e docs.
|
|
159
|
+
|
|
160
|
+
## Arquitetura
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
src/
|
|
164
|
+
index.ts MCP server (5 tools registradas)
|
|
165
|
+
pipeline.ts Orquestracao: resolvers -> extractors -> cache
|
|
166
|
+
types/index.ts Tipos compartilhados
|
|
167
|
+
schemas/package-json.schema.ts Zod v4 schemas (package.json + inputs)
|
|
168
|
+
cache/package-cache.ts LRU cache (50 pacotes, 30min TTL)
|
|
169
|
+
resolvers/
|
|
170
|
+
package-resolver.ts Encontra pacote no node_modules
|
|
171
|
+
exports-resolver.ts Resolve conditional exports
|
|
172
|
+
types-resolver.ts 5 estrategias para achar .d.ts
|
|
173
|
+
extractors/
|
|
174
|
+
api-extractor.ts ts-morph: extrai API surface
|
|
175
|
+
jsdoc-extractor.ts Extrai @param, @returns, @example, etc.
|
|
176
|
+
readme-extractor.ts Parser manual de markdown
|
|
177
|
+
examples-extractor.ts 4 fontes de exemplos
|
|
178
|
+
formatters/
|
|
179
|
+
markdown-formatter.ts Output otimizado para contexto de LLM
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Fluxo de dados:
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
Tool call
|
|
186
|
+
-> Cache (hit? retorna)
|
|
187
|
+
-> PackageResolver (acha no node_modules)
|
|
188
|
+
-> ExportsResolver (resolve entry points)
|
|
189
|
+
-> TypesResolver (acha .d.ts com 5 estrategias)
|
|
190
|
+
-> ApiExtractor (ts-morph: funcoes, classes, tipos...)
|
|
191
|
+
-> ReadmeExtractor (parser manual)
|
|
192
|
+
-> Deduplicacao por nome (Set)
|
|
193
|
+
-> Salva no cache
|
|
194
|
+
-> Formatter (markdown para LLM)
|
|
195
|
+
-> Response
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Desenvolvimento
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
# Instalar dependencias
|
|
202
|
+
npm install
|
|
203
|
+
|
|
204
|
+
# Build
|
|
205
|
+
npm run build
|
|
206
|
+
|
|
207
|
+
# Desenvolvimento (watch)
|
|
208
|
+
npm run dev
|
|
209
|
+
|
|
210
|
+
# Lint
|
|
211
|
+
npm run lint
|
|
212
|
+
|
|
213
|
+
# Type check
|
|
214
|
+
npm run type-check
|
|
215
|
+
|
|
216
|
+
# Testes (JSON-RPC real via stdin/stdout)
|
|
217
|
+
node test-mcp.ts
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Requisitos
|
|
221
|
+
|
|
222
|
+
- Node.js >= 22.0.0
|
|
223
|
+
- npm (ou bun)
|
|
224
|
+
|
|
225
|
+
## Licenca
|
|
226
|
+
|
|
227
|
+
[MIT](https://github.com/Just-mpm/deps-consult/blob/main/LICENSE) -- Koda AI Studio
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { CachedPackage } from '../types/index.js';
|
|
2
|
+
export declare class PackageCache {
|
|
3
|
+
private readonly cache;
|
|
4
|
+
constructor(maxPackages?: number, ttlMs?: number);
|
|
5
|
+
/**
|
|
6
|
+
* Gera a cache key: `${projectDir}:${packageName}`
|
|
7
|
+
*/
|
|
8
|
+
private getKey;
|
|
9
|
+
/**
|
|
10
|
+
* Computa hash do package.json para invalidação.
|
|
11
|
+
*/
|
|
12
|
+
computePackageJsonHash(packageDir: string): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Busca pacote no cache. Retorna null se não existe ou se o hash mudou.
|
|
15
|
+
*/
|
|
16
|
+
get(projectDir: string, packageName: string): Promise<CachedPackage | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Armazena pacote no cache.
|
|
19
|
+
*/
|
|
20
|
+
set(projectDir: string, packageName: string, data: CachedPackage): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Invalida um pacote específico.
|
|
23
|
+
*/
|
|
24
|
+
invalidate(projectDir: string, packageName: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Limpa todo o cache.
|
|
27
|
+
*/
|
|
28
|
+
clear(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Estatísticas do cache.
|
|
31
|
+
*/
|
|
32
|
+
get stats(): {
|
|
33
|
+
size: number;
|
|
34
|
+
max: number;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** Singleton compartilhado entre todas as tools */
|
|
38
|
+
export declare const packageCache: PackageCache;
|
|
39
|
+
//# sourceMappingURL=package-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-cache.d.ts","sourceRoot":"","sources":["../../src/cache/package-cache.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAUvD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;gBAEzC,WAAW,GAAE,MAA6B,EAAE,KAAK,GAAE,MAAuB;IAQtF;;OAEG;IACH,OAAO,CAAC,MAAM;IAId;;OAEG;IACG,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASjE;;OAEG;IACG,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgBjF;;OAEG;IACG,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtF;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzD;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,KAAK,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAKzC;CACF;AAED,mDAAmD;AACnD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache LRU para pacotes extraídos.
|
|
3
|
+
* Evita re-parsear pacotes já consultados na mesma sessão.
|
|
4
|
+
* Invalidação automática por TTL e por hash do package.json.
|
|
5
|
+
*/
|
|
6
|
+
import { LRUCache } from 'lru-cache';
|
|
7
|
+
import { createHash } from 'node:crypto';
|
|
8
|
+
import { readFile } from 'node:fs/promises';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
const DEFAULT_MAX_PACKAGES = 50;
|
|
11
|
+
const DEFAULT_TTL_MS = 30 * 60 * 1000; // 30 minutos
|
|
12
|
+
export class PackageCache {
|
|
13
|
+
cache;
|
|
14
|
+
constructor(maxPackages = DEFAULT_MAX_PACKAGES, ttlMs = DEFAULT_TTL_MS) {
|
|
15
|
+
this.cache = new LRUCache({
|
|
16
|
+
max: maxPackages,
|
|
17
|
+
ttl: ttlMs,
|
|
18
|
+
allowStaleOnFetchAbort: true,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Gera a cache key: `${projectDir}:${packageName}`
|
|
23
|
+
*/
|
|
24
|
+
getKey(projectDir, packageName) {
|
|
25
|
+
return `${projectDir}:${packageName}`;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Computa hash do package.json para invalidação.
|
|
29
|
+
*/
|
|
30
|
+
async computePackageJsonHash(packageDir) {
|
|
31
|
+
try {
|
|
32
|
+
const content = await readFile(join(packageDir, 'package.json'), 'utf-8');
|
|
33
|
+
return createHash('md5').update(content).digest('hex');
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return '';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Busca pacote no cache. Retorna null se não existe ou se o hash mudou.
|
|
41
|
+
*/
|
|
42
|
+
async get(projectDir, packageName) {
|
|
43
|
+
const key = this.getKey(projectDir, packageName);
|
|
44
|
+
const entry = this.cache.get(key);
|
|
45
|
+
if (!entry)
|
|
46
|
+
return null;
|
|
47
|
+
// Verificar se o package.json mudou desde o cache
|
|
48
|
+
const currentHash = await this.computePackageJsonHash(entry.data.meta.packageDir);
|
|
49
|
+
if (currentHash !== entry.packageJsonHash) {
|
|
50
|
+
this.cache.delete(key);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return entry.data;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Armazena pacote no cache.
|
|
57
|
+
*/
|
|
58
|
+
async set(projectDir, packageName, data) {
|
|
59
|
+
const key = this.getKey(projectDir, packageName);
|
|
60
|
+
const packageJsonHash = await this.computePackageJsonHash(data.meta.packageDir);
|
|
61
|
+
this.cache.set(key, {
|
|
62
|
+
data,
|
|
63
|
+
packageJsonHash,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Invalida um pacote específico.
|
|
68
|
+
*/
|
|
69
|
+
invalidate(projectDir, packageName) {
|
|
70
|
+
this.cache.delete(this.getKey(projectDir, packageName));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Limpa todo o cache.
|
|
74
|
+
*/
|
|
75
|
+
clear() {
|
|
76
|
+
this.cache.clear();
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Estatísticas do cache.
|
|
80
|
+
*/
|
|
81
|
+
get stats() {
|
|
82
|
+
return {
|
|
83
|
+
size: this.cache.size,
|
|
84
|
+
max: this.cache.max,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** Singleton compartilhado entre todas as tools */
|
|
89
|
+
export const packageCache = new PackageCache();
|
|
90
|
+
//# sourceMappingURL=package-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-cache.js","sourceRoot":"","sources":["../../src/cache/package-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ExtractedSymbol } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extrai todos os símbolos exportados de uma lista de arquivos de tipos.
|
|
4
|
+
*/
|
|
5
|
+
export declare function extractApiSurface(typeFiles: ReadonlyArray<string>, entrypoint: string | undefined, packageDir: string): ReadonlyArray<ExtractedSymbol>;
|
|
6
|
+
//# sourceMappingURL=api-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-extractor.d.ts","sourceRoot":"","sources":["../../src/extractors/api-extractor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,mBAAmB,CAAC;AAOrE;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,EAChC,UAAU,EAAE,MAAM,YAAM,EACxB,UAAU,EAAE,MAAM,GACjB,aAAa,CAAC,eAAe,CAAC,CAoChC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extrai a API surface completa de arquivos .d.ts usando ts-morph.
|
|
3
|
+
* Resolve re-exports, aliases e segue a cadeia de exports automaticamente.
|
|
4
|
+
*/
|
|
5
|
+
import { Project, SyntaxKind } from 'ts-morph';
|
|
6
|
+
import { relative } from 'node:path';
|
|
7
|
+
import { extractJSDoc } from './jsdoc-extractor.js';
|
|
8
|
+
import { uniqBy } from 'es-toolkit';
|
|
9
|
+
/** Limite de profundidade para seguir re-exports */
|
|
10
|
+
const MAX_REEXPORT_DEPTH = 10;
|
|
11
|
+
/**
|
|
12
|
+
* Extrai todos os símbolos exportados de uma lista de arquivos de tipos.
|
|
13
|
+
*/
|
|
14
|
+
export function extractApiSurface(typeFiles, entrypoint = '.', packageDir) {
|
|
15
|
+
const project = new Project({
|
|
16
|
+
skipAddingFilesFromTsConfig: true,
|
|
17
|
+
useInMemoryFileSystem: false,
|
|
18
|
+
compilerOptions: {
|
|
19
|
+
strict: true,
|
|
20
|
+
esModuleInterop: true,
|
|
21
|
+
skipLibCheck: true,
|
|
22
|
+
noEmit: true,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
// Adicionar arquivos de tipos ao projeto
|
|
26
|
+
const sourceFiles = [];
|
|
27
|
+
for (const filePath of typeFiles) {
|
|
28
|
+
try {
|
|
29
|
+
const sf = project.addSourceFileAtPath(filePath);
|
|
30
|
+
sourceFiles.push(sf);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error(`[deps-consult] Falha ao parsear ${filePath}: ${error}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const symbols = [];
|
|
37
|
+
for (const sourceFile of sourceFiles) {
|
|
38
|
+
try {
|
|
39
|
+
const fileSymbols = extractFromFile(sourceFile, entrypoint, packageDir);
|
|
40
|
+
symbols.push(...fileSymbols);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.error(`[deps-consult] Erro ao extrair de ${sourceFile.getFilePath()}: ${error}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Deduplicar (mesmo símbolo pode vir de múltiplos .d.ts)
|
|
47
|
+
return uniqBy(symbols, s => `${s.kind}:${s.name}`);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Extrai símbolos de um único source file.
|
|
51
|
+
*/
|
|
52
|
+
function extractFromFile(sourceFile, entrypoint, packageDir) {
|
|
53
|
+
const symbols = [];
|
|
54
|
+
const filePath = sourceFile.getFilePath();
|
|
55
|
+
// getExportedDeclarations() resolve re-exports automaticamente!
|
|
56
|
+
const exportedDeclarations = sourceFile.getExportedDeclarations();
|
|
57
|
+
for (const [exportName, declarations] of exportedDeclarations) {
|
|
58
|
+
// Pular export * (nome é asterisk-like ou Symbol)
|
|
59
|
+
if (!exportName || exportName === 'default')
|
|
60
|
+
continue;
|
|
61
|
+
for (const decl of declarations) {
|
|
62
|
+
const symbol = extractSymbol(exportName, decl, entrypoint, packageDir);
|
|
63
|
+
if (symbol)
|
|
64
|
+
symbols.push(symbol);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Capturar default export
|
|
68
|
+
const defaultExports = sourceFile.getExportAssignments();
|
|
69
|
+
for (const defaultExport of defaultExports) {
|
|
70
|
+
const expression = defaultExport.getExpression();
|
|
71
|
+
const decl = expression.getSymbol()?.getDeclarations()[0];
|
|
72
|
+
if (decl) {
|
|
73
|
+
const symbol = extractSymbol('default', decl, entrypoint, packageDir);
|
|
74
|
+
if (symbol)
|
|
75
|
+
symbols.push(symbol);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return symbols;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Extrai um único símbolo de uma declaração.
|
|
82
|
+
*/
|
|
83
|
+
function extractSymbol(name, decl, entrypoint, packageDir) {
|
|
84
|
+
try {
|
|
85
|
+
const kind = getSymbolKind(decl);
|
|
86
|
+
if (!kind)
|
|
87
|
+
return null;
|
|
88
|
+
const signature = getSignature(decl, name);
|
|
89
|
+
// getSourceFile() está disponível em nós que têm arquivo
|
|
90
|
+
const sourceFile = decl.getSourceFile?.();
|
|
91
|
+
if (!sourceFile)
|
|
92
|
+
return null;
|
|
93
|
+
const filePath = sourceFile.getFilePath();
|
|
94
|
+
const lineNumber = decl.getStartLineNumber?.() ?? 0;
|
|
95
|
+
const jsdoc = extractJSDoc(decl);
|
|
96
|
+
return {
|
|
97
|
+
name,
|
|
98
|
+
kind,
|
|
99
|
+
signature,
|
|
100
|
+
file: relative(packageDir, filePath).replace(/\\/g, '/'),
|
|
101
|
+
line: lineNumber,
|
|
102
|
+
entrypoint,
|
|
103
|
+
jsdoc,
|
|
104
|
+
isReExport: false,
|
|
105
|
+
originalModule: undefined,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.error(`[deps-consult] Erro ao extrair símbolo '${name}': ${error}`);
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Determina o tipo do símbolo baseado no SyntaxKind.
|
|
115
|
+
*/
|
|
116
|
+
function getSymbolKind(decl) {
|
|
117
|
+
const kind = decl.getKind();
|
|
118
|
+
switch (kind) {
|
|
119
|
+
case SyntaxKind.FunctionDeclaration:
|
|
120
|
+
case SyntaxKind.FunctionExpression:
|
|
121
|
+
case SyntaxKind.ArrowFunction:
|
|
122
|
+
case SyntaxKind.MethodDeclaration:
|
|
123
|
+
return 'function';
|
|
124
|
+
case SyntaxKind.ClassDeclaration:
|
|
125
|
+
return 'class';
|
|
126
|
+
case SyntaxKind.InterfaceDeclaration:
|
|
127
|
+
return 'interface';
|
|
128
|
+
case SyntaxKind.TypeAliasDeclaration:
|
|
129
|
+
return 'type';
|
|
130
|
+
case SyntaxKind.EnumDeclaration:
|
|
131
|
+
return 'enum';
|
|
132
|
+
case SyntaxKind.VariableDeclaration:
|
|
133
|
+
case SyntaxKind.VariableStatement: {
|
|
134
|
+
try {
|
|
135
|
+
const parent = decl.getParentIfKind?.(SyntaxKind.VariableDeclarationList);
|
|
136
|
+
if (parent) {
|
|
137
|
+
const flags = parent.getDeclarationFlags?.();
|
|
138
|
+
if (flags !== undefined && (flags & 2)) {
|
|
139
|
+
return 'constant';
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Fallback
|
|
145
|
+
}
|
|
146
|
+
return 'variable';
|
|
147
|
+
}
|
|
148
|
+
default:
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Extrai a assinatura completa do símbolo como string.
|
|
154
|
+
*/
|
|
155
|
+
function getSignature(decl, name) {
|
|
156
|
+
try {
|
|
157
|
+
const kind = decl.getKind();
|
|
158
|
+
const text = decl.getText();
|
|
159
|
+
switch (kind) {
|
|
160
|
+
case SyntaxKind.FunctionDeclaration: {
|
|
161
|
+
const bodyIndex = text.indexOf('=> {') !== -1 ? text.indexOf('=> {') : text.indexOf(') {');
|
|
162
|
+
return bodyIndex > -1 ? text.substring(0, bodyIndex).trim() : `function ${name}()`;
|
|
163
|
+
}
|
|
164
|
+
case SyntaxKind.ClassDeclaration: {
|
|
165
|
+
const className = decl.getName?.() ?? name;
|
|
166
|
+
return `class ${className}`;
|
|
167
|
+
}
|
|
168
|
+
case SyntaxKind.InterfaceDeclaration: {
|
|
169
|
+
const ifaceName = decl.getName?.() ?? name;
|
|
170
|
+
return `interface ${ifaceName}`;
|
|
171
|
+
}
|
|
172
|
+
case SyntaxKind.TypeAliasDeclaration: {
|
|
173
|
+
return text.length > 500 ? text.substring(0, 500) + '...' : text;
|
|
174
|
+
}
|
|
175
|
+
case SyntaxKind.EnumDeclaration: {
|
|
176
|
+
const enumName = decl.getName?.() ?? name;
|
|
177
|
+
return `enum ${enumName}`;
|
|
178
|
+
}
|
|
179
|
+
case SyntaxKind.VariableDeclaration: {
|
|
180
|
+
const typeText = decl.getType?.()?.getText(decl) ?? 'unknown';
|
|
181
|
+
return `const ${name}: ${typeText}`;
|
|
182
|
+
}
|
|
183
|
+
default:
|
|
184
|
+
return name;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return name;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=api-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-extractor.js","sourceRoot":"","sources":["../../src/extractors/api-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ExtractedSymbol, ReadmeData } from '../types/index.js';
|
|
2
|
+
export interface CodeExample {
|
|
3
|
+
/** Código do exemplo */
|
|
4
|
+
code: string;
|
|
5
|
+
/** Linguagem (typescript, javascript, etc) */
|
|
6
|
+
language?: string;
|
|
7
|
+
/** Contexto (qual símbolo ou seção) */
|
|
8
|
+
context?: string;
|
|
9
|
+
/** Origem do exemplo */
|
|
10
|
+
source: 'jsdoc' | 'examples-dir' | 'readme' | 'docs';
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Coleta exemplos de todas as fontes disponíveis.
|
|
14
|
+
*/
|
|
15
|
+
export declare function extractExamples(packageDir: string, symbols: ReadonlyArray<ExtractedSymbol>, readme: ReadmeData | null, targetSymbol?: string): Promise<ReadonlyArray<CodeExample>>;
|
|
16
|
+
//# sourceMappingURL=examples-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"examples-extractor.d.ts","sourceRoot":"","sources":["../../src/extractors/examples-extractor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGrE,MAAM,WAAW,WAAW;IAC1B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,MAAM,EAAE,OAAO,GAAG,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,EACvC,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAsBrC"}
|