aidoc-kit 0.1.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/LICENSE +21 -0
- package/README.md +231 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +200 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/chunker.d.ts +41 -0
- package/dist/core/chunker.d.ts.map +1 -0
- package/dist/core/chunker.js +217 -0
- package/dist/core/chunker.js.map +1 -0
- package/dist/core/config.d.ts +20 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +83 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/scanner.d.ts +10 -0
- package/dist/core/scanner.d.ts.map +1 -0
- package/dist/core/scanner.js +224 -0
- package/dist/core/scanner.js.map +1 -0
- package/dist/core/transformer.d.ts +7 -0
- package/dist/core/transformer.d.ts.map +1 -0
- package/dist/core/transformer.js +219 -0
- package/dist/core/transformer.js.map +1 -0
- package/dist/core/writer.d.ts +5 -0
- package/dist/core/writer.d.ts.map +1 -0
- package/dist/core/writer.js +99 -0
- package/dist/core/writer.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/index.d.ts +7 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +64 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/types.d.ts +67 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.chunkFile = chunkFile;
|
|
37
|
+
exports.writeChunk = writeChunk;
|
|
38
|
+
const ts = __importStar(require("typescript"));
|
|
39
|
+
const node_fs_1 = require("node:fs");
|
|
40
|
+
const node_path_1 = require("node:path");
|
|
41
|
+
// ─── Constants ─────────────────────────────────────────────────────────────
|
|
42
|
+
/** Files with fewer lines than this threshold are not chunked. */
|
|
43
|
+
const CHUNK_THRESHOLD = 150;
|
|
44
|
+
// ─── Public API ────────────────────────────────────────────────────────────
|
|
45
|
+
/**
|
|
46
|
+
* Parse a source file and return a structured chunk summary.
|
|
47
|
+
* Returns null if the file has fewer lines than CHUNK_THRESHOLD.
|
|
48
|
+
*/
|
|
49
|
+
function chunkFile(filePath, importedBy, rootDir) {
|
|
50
|
+
let source;
|
|
51
|
+
try {
|
|
52
|
+
source = (0, node_fs_1.readFileSync)(filePath, 'utf-8');
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
const lines = source.split('\n');
|
|
58
|
+
if (lines.length < CHUNK_THRESHOLD)
|
|
59
|
+
return null;
|
|
60
|
+
const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true);
|
|
61
|
+
const exports = [];
|
|
62
|
+
const imports = [];
|
|
63
|
+
const functions = [];
|
|
64
|
+
ts.forEachChild(sourceFile, (node) => {
|
|
65
|
+
// ── Imports ──────────────────────────────────────────────────────────
|
|
66
|
+
if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {
|
|
67
|
+
const from = node.moduleSpecifier.text;
|
|
68
|
+
const names = [];
|
|
69
|
+
const clause = node.importClause;
|
|
70
|
+
if (clause) {
|
|
71
|
+
if (clause.name)
|
|
72
|
+
names.push(clause.name.text);
|
|
73
|
+
if (clause.namedBindings) {
|
|
74
|
+
if (ts.isNamedImports(clause.namedBindings)) {
|
|
75
|
+
clause.namedBindings.elements.forEach(el => names.push(el.name.text));
|
|
76
|
+
}
|
|
77
|
+
else if (ts.isNamespaceImport(clause.namedBindings)) {
|
|
78
|
+
names.push(`* as ${clause.namedBindings.name.text}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
imports.push({ from, names });
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// ── Exported declarations ─────────────────────────────────────────────
|
|
86
|
+
const hasExport = ts.canHaveModifiers(node)
|
|
87
|
+
&& (ts.getModifiers(node) ?? []).some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
|
|
88
|
+
if (!hasExport)
|
|
89
|
+
return;
|
|
90
|
+
const startLine = sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1;
|
|
91
|
+
const endLine = sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1;
|
|
92
|
+
if (ts.isFunctionDeclaration(node) && node.name) {
|
|
93
|
+
exports.push({ name: node.name.text, kind: 'function', line: startLine });
|
|
94
|
+
functions.push({
|
|
95
|
+
name: node.name.text,
|
|
96
|
+
startLine,
|
|
97
|
+
endLine,
|
|
98
|
+
params: node.parameters.map(p => p.getText(sourceFile)).join(', '),
|
|
99
|
+
returnType: node.type?.getText(sourceFile) ?? 'void',
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else if (ts.isInterfaceDeclaration(node)) {
|
|
103
|
+
exports.push({ name: node.name.text, kind: 'interface', line: startLine });
|
|
104
|
+
}
|
|
105
|
+
else if (ts.isTypeAliasDeclaration(node)) {
|
|
106
|
+
exports.push({ name: node.name.text, kind: 'type', line: startLine });
|
|
107
|
+
}
|
|
108
|
+
else if (ts.isClassDeclaration(node) && node.name) {
|
|
109
|
+
exports.push({ name: node.name.text, kind: 'class', line: startLine });
|
|
110
|
+
}
|
|
111
|
+
else if (ts.isVariableStatement(node)) {
|
|
112
|
+
node.declarationList.declarations.forEach(d => {
|
|
113
|
+
if (ts.isIdentifier(d.name)) {
|
|
114
|
+
exports.push({ name: d.name.text, kind: 'const', line: startLine });
|
|
115
|
+
// Arrow functions counted as functions too
|
|
116
|
+
if (d.initializer && (ts.isArrowFunction(d.initializer) || ts.isFunctionExpression(d.initializer))) {
|
|
117
|
+
const fn = d.initializer;
|
|
118
|
+
functions.push({
|
|
119
|
+
name: d.name.text,
|
|
120
|
+
startLine,
|
|
121
|
+
endLine,
|
|
122
|
+
params: fn.parameters.map(p => p.getText(sourceFile)).join(', '),
|
|
123
|
+
returnType: fn.type?.getText(sourceFile) ?? '',
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
// ── Coarse structure blocks (every 50 lines) ──────────────────────────
|
|
131
|
+
const structure = [];
|
|
132
|
+
for (let i = 0; i < lines.length; i += 50) {
|
|
133
|
+
const blockEnd = Math.min(i + 49, lines.length - 1);
|
|
134
|
+
const blockLines = lines.slice(i, blockEnd + 1);
|
|
135
|
+
structure.push({
|
|
136
|
+
description: inferBlockDescription(blockLines, i + 1),
|
|
137
|
+
startLine: i + 1,
|
|
138
|
+
endLine: blockEnd + 1,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
filePath: (0, node_path_1.relative)(rootDir, filePath),
|
|
143
|
+
totalLines: lines.length,
|
|
144
|
+
exports,
|
|
145
|
+
imports,
|
|
146
|
+
functions,
|
|
147
|
+
structure,
|
|
148
|
+
importedBy: importedBy.map(f => (0, node_path_1.relative)(rootDir, f)),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Serialise a FileChunk to a Markdown file under `<outputDir>/chunks/<filePath>.md`.
|
|
153
|
+
*/
|
|
154
|
+
function writeChunk(chunk, outputDir) {
|
|
155
|
+
const outputPath = (0, node_path_1.join)(outputDir, 'chunks', chunk.filePath + '.md');
|
|
156
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(outputPath), { recursive: true });
|
|
157
|
+
const exportsSection = chunk.exports.length > 0
|
|
158
|
+
? chunk.exports.map(e => `- \`${e.name}\` (${e.kind}) — ligne ${e.line}`).join('\n')
|
|
159
|
+
: '_Aucun export public détecté_';
|
|
160
|
+
const importsSection = chunk.imports
|
|
161
|
+
.filter(i => !i.from.startsWith('node:'))
|
|
162
|
+
.map(i => `- ${i.from}${i.names.length > 0 ? ` (${i.names.join(', ')})` : ''}`)
|
|
163
|
+
.join('\n') || '_Aucun import externe_';
|
|
164
|
+
const structureSection = chunk.structure
|
|
165
|
+
.map(b => `- L. ${b.startLine}-${b.endLine} : ${b.description}`)
|
|
166
|
+
.join('\n');
|
|
167
|
+
const functionsTable = chunk.functions.length > 0
|
|
168
|
+
? [
|
|
169
|
+
'| Nom | Lignes | Paramètres | Retour |',
|
|
170
|
+
'|-----|--------|------------|--------|',
|
|
171
|
+
...chunk.functions.map(f => `| ${f.name} | ${f.startLine}-${f.endLine} | ${f.params || '—'} | ${f.returnType || '—'} |`),
|
|
172
|
+
].join('\n')
|
|
173
|
+
: '_Aucune fonction exportée détectée_';
|
|
174
|
+
const importedBySection = chunk.importedBy.length > 0
|
|
175
|
+
? chunk.importedBy.map(f => `- \`${f}\``).join('\n')
|
|
176
|
+
: '_Non importé (détecté)_';
|
|
177
|
+
const content = [
|
|
178
|
+
`# Chunk — ${chunk.filePath}`,
|
|
179
|
+
`> ${chunk.totalLines} lignes — généré par aidoc-kit chunk`,
|
|
180
|
+
'',
|
|
181
|
+
'## Exports publics',
|
|
182
|
+
exportsSection,
|
|
183
|
+
'',
|
|
184
|
+
'## Imports critiques',
|
|
185
|
+
importsSection,
|
|
186
|
+
'',
|
|
187
|
+
'## Structure du fichier',
|
|
188
|
+
structureSection,
|
|
189
|
+
'',
|
|
190
|
+
'## Fonctions et méthodes',
|
|
191
|
+
functionsTable,
|
|
192
|
+
'',
|
|
193
|
+
'## Importé par',
|
|
194
|
+
importedBySection,
|
|
195
|
+
'',
|
|
196
|
+
].join('\n');
|
|
197
|
+
(0, node_fs_1.writeFileSync)(outputPath, content, 'utf-8');
|
|
198
|
+
}
|
|
199
|
+
// ─── Helpers ───────────────────────────────────────────────────────────────
|
|
200
|
+
function inferBlockDescription(blockLines, startLine) {
|
|
201
|
+
const text = blockLines.join('\n');
|
|
202
|
+
if (text.includes('export default') || text.match(/export\s+(function|const|class)/)) {
|
|
203
|
+
return 'exports principaux';
|
|
204
|
+
}
|
|
205
|
+
if (text.match(/^import\s/m))
|
|
206
|
+
return 'imports';
|
|
207
|
+
if (text.match(/\binterface\b|\btype\s+\w+\s*=/))
|
|
208
|
+
return 'types et interfaces';
|
|
209
|
+
if (text.includes('useEffect') || text.includes('useState'))
|
|
210
|
+
return 'hooks React';
|
|
211
|
+
if (text.includes('async ') || text.includes('await '))
|
|
212
|
+
return 'fonctions asynchrones';
|
|
213
|
+
if (text.match(/return\s*\(/))
|
|
214
|
+
return 'rendu JSX';
|
|
215
|
+
return `lignes ${startLine}–${startLine + blockLines.length - 1}`;
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=chunker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunker.js","sourceRoot":"","sources":["../../src/core/chunker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AidocConfig } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Load `aidoc.config.js` or `aidoc.config.json` from the project root.
|
|
4
|
+
* Returns an empty object if no config file is found or if it fails to parse.
|
|
5
|
+
*
|
|
6
|
+
* TypeScript config (`aidoc.config.ts`) is supported when the CLI is run via
|
|
7
|
+
* `ts-node` or `tsx`; otherwise compile it to `.js` first.
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadConfig(rootDir: string): AidocConfig;
|
|
10
|
+
/**
|
|
11
|
+
* Test whether a workspace-relative file path matches any ignore pattern.
|
|
12
|
+
*
|
|
13
|
+
* Supported pattern forms (no external glob library needed):
|
|
14
|
+
* - `src/generated/` → prefix match (anything under that directory)
|
|
15
|
+
* - `src/generated/**` → same, with explicit glob syntax
|
|
16
|
+
* - `*.test.ts` → suffix match (any file ending in .test.ts)
|
|
17
|
+
* - `src/foo/bar.ts` → exact relative path match
|
|
18
|
+
*/
|
|
19
|
+
export declare function isIgnored(relPath: string, patterns: string[]): boolean;
|
|
20
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAI3C;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAoBvD;AAID;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CA4BtE"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadConfig = loadConfig;
|
|
4
|
+
exports.isIgnored = isIgnored;
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
// ─── Config loader ─────────────────────────────────────────────────────────
|
|
8
|
+
/**
|
|
9
|
+
* Load `aidoc.config.js` or `aidoc.config.json` from the project root.
|
|
10
|
+
* Returns an empty object if no config file is found or if it fails to parse.
|
|
11
|
+
*
|
|
12
|
+
* TypeScript config (`aidoc.config.ts`) is supported when the CLI is run via
|
|
13
|
+
* `ts-node` or `tsx`; otherwise compile it to `.js` first.
|
|
14
|
+
*/
|
|
15
|
+
function loadConfig(rootDir) {
|
|
16
|
+
const candidates = [
|
|
17
|
+
(0, node_path_1.join)(rootDir, 'aidoc.config.js'),
|
|
18
|
+
(0, node_path_1.join)(rootDir, 'aidoc.config.json'),
|
|
19
|
+
];
|
|
20
|
+
for (const candidate of candidates) {
|
|
21
|
+
if (!(0, node_fs_1.existsSync)(candidate))
|
|
22
|
+
continue;
|
|
23
|
+
try {
|
|
24
|
+
// Dynamic require works for both .js (module.exports) and .json
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
26
|
+
const mod = require(candidate);
|
|
27
|
+
const config = mod?.default ?? mod;
|
|
28
|
+
return config ?? {};
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Malformed config — skip silently
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
// ─── Ignore helper ─────────────────────────────────────────────────────────
|
|
37
|
+
/**
|
|
38
|
+
* Test whether a workspace-relative file path matches any ignore pattern.
|
|
39
|
+
*
|
|
40
|
+
* Supported pattern forms (no external glob library needed):
|
|
41
|
+
* - `src/generated/` → prefix match (anything under that directory)
|
|
42
|
+
* - `src/generated/**` → same, with explicit glob syntax
|
|
43
|
+
* - `*.test.ts` → suffix match (any file ending in .test.ts)
|
|
44
|
+
* - `src/foo/bar.ts` → exact relative path match
|
|
45
|
+
*/
|
|
46
|
+
function isIgnored(relPath, patterns) {
|
|
47
|
+
for (const raw of patterns) {
|
|
48
|
+
const pattern = raw.replace(/\\/g, '/');
|
|
49
|
+
const normalized = relPath.replace(/\\/g, '/');
|
|
50
|
+
if (pattern.endsWith('/**')) {
|
|
51
|
+
// prefix: `src/generated/**` → starts with `src/generated/`
|
|
52
|
+
const prefix = pattern.slice(0, -3);
|
|
53
|
+
if (normalized === prefix || normalized.startsWith(prefix + '/'))
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
else if (pattern.startsWith('**/')) {
|
|
57
|
+
// suffix after `**/`
|
|
58
|
+
const suffix = pattern.slice(3);
|
|
59
|
+
if (suffix.startsWith('*')) {
|
|
60
|
+
// `**/*.test.ts` → `*.test.ts` → ends with `.test.ts`
|
|
61
|
+
if (normalized.endsWith(suffix.slice(1)))
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// `**/foo.ts` → any segment equals `foo.ts`
|
|
66
|
+
if (normalized === suffix || normalized.endsWith('/' + suffix))
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (pattern.startsWith('*')) {
|
|
71
|
+
// `*.test.ts` → ends with `.test.ts`
|
|
72
|
+
if (normalized.endsWith(pattern.slice(1)))
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// exact relative path
|
|
77
|
+
if (normalized === pattern)
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":";;AAaA,gCAoBC;AAaD,8BA4BC;AA1ED,qCAAoC;AACpC,yCAAgC;AAGhC,8EAA8E;AAE9E;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,OAAe;IACxC,MAAM,UAAU,GAAG;QACjB,IAAA,gBAAI,EAAC,OAAO,EAAE,iBAAiB,CAAC;QAChC,IAAA,gBAAI,EAAC,OAAO,EAAE,mBAAmB,CAAC;KACnC,CAAA;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,IAAA,oBAAU,EAAC,SAAS,CAAC;YAAE,SAAQ;QACpC,IAAI,CAAC;YACH,gEAAgE;YAChE,iEAAiE;YACjE,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAY,CAAA;YACzC,MAAM,MAAM,GAAI,GAAiC,EAAE,OAAO,IAAK,GAAmB,CAAA;YAClF,OAAO,MAAM,IAAI,EAAE,CAAA;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC;AAED,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,SAAgB,SAAS,CAAC,OAAe,EAAE,QAAkB;IAC3D,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAE9C,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,4DAA4D;YAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACnC,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAA;QAC/E,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,qBAAqB;YACrB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC/B,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,sDAAsD;gBACtD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAA;YACvD,CAAC;iBAAM,CAAC;gBACN,4CAA4C;gBAC5C,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC;oBAAE,OAAO,IAAI,CAAA;YAC7E,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,qCAAqC;YACrC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAA;QACxD,CAAC;aAAM,CAAC;YACN,sBAAsB;YACtB,IAAI,UAAU,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAA;QACzC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AiDocBlock, ScanResult } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Build a map from each file (absolute path) → the set of files that import it.
|
|
4
|
+
* Only resolves relative imports (e.g. `./foo`, `../bar`); package imports are ignored.
|
|
5
|
+
*/
|
|
6
|
+
export declare function buildReverseImportMap(files: string[]): Map<string, string[]>;
|
|
7
|
+
export declare function scanProject(rootDir: string): ScanResult;
|
|
8
|
+
export declare function extractAiDocs(filePath: string, rootDir?: string): AiDocBlock | null;
|
|
9
|
+
export declare function walkDir(dir: string): string[];
|
|
10
|
+
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAStD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAoC5E;AAqBD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAevD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAK,GAAG,UAAU,GAAG,IAAI,CAqC/E;AAID,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CA2B7C"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.buildReverseImportMap = buildReverseImportMap;
|
|
37
|
+
exports.scanProject = scanProject;
|
|
38
|
+
exports.extractAiDocs = extractAiDocs;
|
|
39
|
+
exports.walkDir = walkDir;
|
|
40
|
+
const ts = __importStar(require("typescript"));
|
|
41
|
+
const node_fs_1 = require("node:fs");
|
|
42
|
+
const node_path_1 = require("node:path");
|
|
43
|
+
const EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx']);
|
|
44
|
+
const IGNORED_DIRS = new Set([
|
|
45
|
+
'node_modules', '.git', 'dist', '.next', 'out', 'build', '.codemod', 'coverage',
|
|
46
|
+
]);
|
|
47
|
+
// ─── Public API ────────────────────────────────────────────────────────────
|
|
48
|
+
/**
|
|
49
|
+
* Build a map from each file (absolute path) → the set of files that import it.
|
|
50
|
+
* Only resolves relative imports (e.g. `./foo`, `../bar`); package imports are ignored.
|
|
51
|
+
*/
|
|
52
|
+
function buildReverseImportMap(files) {
|
|
53
|
+
// forward: absPath → [absPath of each relative import it resolves to]
|
|
54
|
+
const forward = new Map();
|
|
55
|
+
for (const file of files) {
|
|
56
|
+
let source;
|
|
57
|
+
try {
|
|
58
|
+
source = (0, node_fs_1.readFileSync)(file, 'utf-8');
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const sf = ts.createSourceFile(file, source, ts.ScriptTarget.Latest, true);
|
|
64
|
+
const deps = [];
|
|
65
|
+
ts.forEachChild(sf, node => {
|
|
66
|
+
if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {
|
|
67
|
+
const spec = node.moduleSpecifier.text;
|
|
68
|
+
if (!spec.startsWith('.'))
|
|
69
|
+
return; // skip package imports
|
|
70
|
+
const resolved = resolveImport((0, node_path_1.dirname)(file), spec);
|
|
71
|
+
if (resolved)
|
|
72
|
+
deps.push(resolved);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
forward.set(file, deps);
|
|
76
|
+
}
|
|
77
|
+
// reverse: absPath → [absPath of files that import it]
|
|
78
|
+
const reverse = new Map();
|
|
79
|
+
for (const file of files)
|
|
80
|
+
reverse.set(file, []);
|
|
81
|
+
for (const [importer, deps] of forward) {
|
|
82
|
+
for (const dep of deps) {
|
|
83
|
+
if (!reverse.has(dep))
|
|
84
|
+
reverse.set(dep, []);
|
|
85
|
+
reverse.get(dep).push(importer);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return reverse;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Resolve a relative import specifier to an absolute file path.
|
|
92
|
+
* Tries `.ts`, `.tsx`, `.js`, `.jsx` extensions and `index.*` variants.
|
|
93
|
+
*/
|
|
94
|
+
function resolveImport(fromDir, spec) {
|
|
95
|
+
const base = (0, node_path_1.resolve)(fromDir, spec);
|
|
96
|
+
// try exact extensions first
|
|
97
|
+
for (const ext of ['.ts', '.tsx', '.js', '.jsx']) {
|
|
98
|
+
const candidate = base + ext;
|
|
99
|
+
try {
|
|
100
|
+
(0, node_fs_1.statSync)(candidate);
|
|
101
|
+
return candidate;
|
|
102
|
+
}
|
|
103
|
+
catch { /* not found */ }
|
|
104
|
+
}
|
|
105
|
+
// try as directory index
|
|
106
|
+
for (const ext of ['.ts', '.tsx', '.js', '.jsx']) {
|
|
107
|
+
const candidate = (0, node_path_1.join)(base, 'index' + ext);
|
|
108
|
+
try {
|
|
109
|
+
(0, node_fs_1.statSync)(candidate);
|
|
110
|
+
return candidate;
|
|
111
|
+
}
|
|
112
|
+
catch { /* not found */ }
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
function scanProject(rootDir) {
|
|
117
|
+
const allFiles = walkDir(rootDir);
|
|
118
|
+
const docs = [];
|
|
119
|
+
const filesWithoutDocs = [];
|
|
120
|
+
for (const file of allFiles) {
|
|
121
|
+
const block = extractAiDocs(file, rootDir);
|
|
122
|
+
if (block) {
|
|
123
|
+
docs.push(block);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
filesWithoutDocs.push((0, node_path_1.relative)(rootDir, file));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return { docs, filesWithoutDocs, totalScanned: allFiles.length };
|
|
130
|
+
}
|
|
131
|
+
function extractAiDocs(filePath, rootDir = '') {
|
|
132
|
+
let source;
|
|
133
|
+
try {
|
|
134
|
+
source = (0, node_fs_1.readFileSync)(filePath, 'utf-8');
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
if (!source.includes('@ai-agent'))
|
|
140
|
+
return null;
|
|
141
|
+
const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, /* setParentNodes */ true);
|
|
142
|
+
const firstToken = sourceFile.getFirstToken();
|
|
143
|
+
if (!firstToken)
|
|
144
|
+
return null;
|
|
145
|
+
const ranges = ts.getLeadingCommentRanges(source, 0);
|
|
146
|
+
if (!ranges)
|
|
147
|
+
return null;
|
|
148
|
+
for (const range of ranges) {
|
|
149
|
+
const comment = source.slice(range.pos, range.end);
|
|
150
|
+
if (!comment.includes('@ai-agent'))
|
|
151
|
+
continue;
|
|
152
|
+
return {
|
|
153
|
+
file: rootDir ? (0, node_path_1.relative)(rootDir, filePath) : filePath,
|
|
154
|
+
agent: extractTag(comment, 'ai-agent'),
|
|
155
|
+
related: extractTag(comment, 'ai-agents-related')
|
|
156
|
+
.split(',').map(s => s.trim()).filter(Boolean),
|
|
157
|
+
runtime: extractTag(comment, 'ai-runtime'),
|
|
158
|
+
context: extractTag(comment, 'ai-context'),
|
|
159
|
+
whenModifying: extractTagLines(comment, 'ai-when-modifying'),
|
|
160
|
+
cascade: extractTagLines(comment, 'ai-cascade'),
|
|
161
|
+
validate: extractTag(comment, 'ai-validate'),
|
|
162
|
+
neverDo: extractTagLines(comment, 'ai-never'),
|
|
163
|
+
patterns: extractCodeBlocks(comment, 'ai-pattern'),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
// ─── File walker ───────────────────────────────────────────────────────────
|
|
169
|
+
function walkDir(dir) {
|
|
170
|
+
const results = [];
|
|
171
|
+
let entries;
|
|
172
|
+
try {
|
|
173
|
+
entries = (0, node_fs_1.readdirSync)(dir);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return results;
|
|
177
|
+
}
|
|
178
|
+
for (const entry of entries) {
|
|
179
|
+
if (IGNORED_DIRS.has(entry))
|
|
180
|
+
continue;
|
|
181
|
+
const fullPath = (0, node_path_1.join)(dir, entry);
|
|
182
|
+
let stat;
|
|
183
|
+
try {
|
|
184
|
+
stat = (0, node_fs_1.statSync)(fullPath);
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (stat.isDirectory()) {
|
|
190
|
+
results.push(...walkDir(fullPath));
|
|
191
|
+
}
|
|
192
|
+
else if (EXTENSIONS.has((0, node_path_1.extname)(entry))) {
|
|
193
|
+
results.push(fullPath);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return results;
|
|
197
|
+
}
|
|
198
|
+
// ─── Comment parsers ───────────────────────────────────────────────────────
|
|
199
|
+
/** Extract single-line tag value: `@tag Some text` */
|
|
200
|
+
function extractTag(comment, tag) {
|
|
201
|
+
const match = comment.match(new RegExp(`@${tag}\\s+([^\\n@*][^\\n]*)`, ''));
|
|
202
|
+
return match?.[1]?.trim() ?? '';
|
|
203
|
+
}
|
|
204
|
+
/** Extract multi-line tag content (until next @ or end of block) */
|
|
205
|
+
function extractTagLines(comment, tag) {
|
|
206
|
+
const match = comment.match(new RegExp(`@${tag}([\\s\\S]*?)(?=\\s*\\*\\s*@|\\*\\/)`));
|
|
207
|
+
if (!match)
|
|
208
|
+
return [];
|
|
209
|
+
return match[1]
|
|
210
|
+
.split('\n')
|
|
211
|
+
.map(l => l.replace(/^\s*\*\s?/, '').trim())
|
|
212
|
+
.filter(Boolean);
|
|
213
|
+
}
|
|
214
|
+
/** Extract fenced code blocks after a given tag */
|
|
215
|
+
function extractCodeBlocks(comment, tag) {
|
|
216
|
+
const blocks = [];
|
|
217
|
+
const regex = new RegExp(`@${tag}[\\s\\S]*?\`\`\`tsx?([\\s\\S]*?)\`\`\``, 'g');
|
|
218
|
+
let m;
|
|
219
|
+
while ((m = regex.exec(comment)) !== null) {
|
|
220
|
+
blocks.push(m[1].trim());
|
|
221
|
+
}
|
|
222
|
+
return blocks;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Rule, AidocConfig } from '../types';
|
|
2
|
+
export declare function generateAiDocBlock(filePath: string, cascadeDeps?: string[], config?: AidocConfig): string;
|
|
3
|
+
export declare function applyRules(filePath: string, rules: Rule[]): {
|
|
4
|
+
changed: boolean;
|
|
5
|
+
source: string;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../src/core/transformer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAIjD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,MAAM,EAAO,EAC1B,MAAM,GAAE,WAAgB,GACvB,MAAM,CA2CR;AAID,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,IAAI,EAAE,GACZ;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAiCtC"}
|