@bemedev/codebase 0.1.3 → 0.2.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 +8 -8
- package/lib/_virtual/_rolldown/runtime.cjs +23 -0
- package/lib/analyse.cjs +48 -62
- package/lib/analyse.cjs.map +1 -1
- package/lib/analyse.d.ts +21 -3
- package/lib/analyse.js +45 -60
- package/lib/analyse.js.map +1 -1
- package/lib/analyse.utils.cjs +154 -205
- package/lib/analyse.utils.cjs.map +1 -1
- package/lib/analyse.utils.d.ts +1 -2
- package/lib/analyse.utils.js +153 -203
- package/lib/analyse.utils.js.map +1 -1
- package/lib/cli/cli.cjs +28 -27
- package/lib/cli/cli.cjs.map +1 -1
- package/lib/cli/cli.d.ts +0 -1
- package/lib/cli/cli.js +25 -24
- package/lib/cli/cli.js.map +1 -1
- package/lib/cli/constants.cjs +6 -5
- package/lib/cli/constants.cjs.map +1 -1
- package/lib/cli/constants.d.ts +0 -1
- package/lib/cli/constants.js +5 -3
- package/lib/cli/constants.js.map +1 -1
- package/lib/cli/index.cjs +6 -6
- package/lib/cli/index.cjs.map +1 -1
- package/lib/cli/index.d.ts +0 -1
- package/lib/cli/index.js +7 -4
- package/lib/cli/index.js.map +1 -1
- package/lib/constants.cjs +26 -28
- package/lib/constants.cjs.map +1 -1
- package/lib/constants.d.ts +0 -1
- package/lib/constants.js +24 -26
- package/lib/constants.js.map +1 -1
- package/lib/exports.cjs +51 -72
- package/lib/exports.cjs.map +1 -1
- package/lib/exports.d.ts +1 -2
- package/lib/exports.js +49 -70
- package/lib/exports.js.map +1 -1
- package/lib/functions/add.cjs +71 -84
- package/lib/functions/add.cjs.map +1 -1
- package/lib/functions/add.d.ts +1 -2
- package/lib/functions/add.js +68 -82
- package/lib/functions/add.js.map +1 -1
- package/lib/functions/generate.cjs +53 -56
- package/lib/functions/generate.cjs.map +1 -1
- package/lib/functions/generate.d.ts +1 -2
- package/lib/functions/generate.js +51 -54
- package/lib/functions/generate.js.map +1 -1
- package/lib/functions/index.cjs +11 -16
- package/lib/functions/index.d.ts +0 -1
- package/lib/functions/index.js +5 -5
- package/lib/functions/init.cjs +68 -97
- package/lib/functions/init.cjs.map +1 -1
- package/lib/functions/init.d.ts +1 -2
- package/lib/functions/init.js +66 -95
- package/lib/functions/init.js.map +1 -1
- package/lib/functions/remove.cjs +85 -103
- package/lib/functions/remove.cjs.map +1 -1
- package/lib/functions/remove.d.ts +1 -2
- package/lib/functions/remove.js +82 -101
- package/lib/functions/remove.js.map +1 -1
- package/lib/helpers.cjs +32 -38
- package/lib/helpers.cjs.map +1 -1
- package/lib/helpers.d.ts +3 -4
- package/lib/helpers.js +30 -36
- package/lib/helpers.js.map +1 -1
- package/lib/imports.cjs +88 -124
- package/lib/imports.cjs.map +1 -1
- package/lib/imports.d.ts +2 -3
- package/lib/imports.js +86 -122
- package/lib/imports.js.map +1 -1
- package/lib/index.cjs +22 -24
- package/lib/index.d.ts +4 -4
- package/lib/index.js +8 -6
- package/lib/schemas.cjs +53 -64
- package/lib/schemas.cjs.map +1 -1
- package/lib/schemas.d.ts +1 -2
- package/lib/schemas.js +43 -36
- package/lib/schemas.js.map +1 -1
- package/lib/types.d.ts +0 -1
- package/lib/utils.cjs +9 -10
- package/lib/utils.cjs.map +1 -1
- package/lib/utils.d.ts +0 -1
- package/lib/utils.js +8 -8
- package/lib/utils.js.map +1 -1
- package/package.json +56 -44
- package/CHANGE_LOG.md +0 -161
- package/lib/analyse.d.ts.map +0 -1
- package/lib/analyse.utils.d.ts.map +0 -1
- package/lib/cli/cli.d.ts.map +0 -1
- package/lib/cli/constants.d.ts.map +0 -1
- package/lib/cli/index.d.ts.map +0 -1
- package/lib/constants.d.ts.map +0 -1
- package/lib/exports.d.ts.map +0 -1
- package/lib/functions/add.d.ts.map +0 -1
- package/lib/functions/generate.d.ts.map +0 -1
- package/lib/functions/index.cjs.map +0 -1
- package/lib/functions/index.d.ts.map +0 -1
- package/lib/functions/index.js.map +0 -1
- package/lib/functions/init.d.ts.map +0 -1
- package/lib/functions/remove.d.ts.map +0 -1
- package/lib/helpers.d.ts.map +0 -1
- package/lib/imports.d.ts.map +0 -1
- package/lib/index.cjs.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/schemas.d.ts.map +0 -1
- package/lib/types.d.ts.map +0 -1
- package/lib/utils.d.ts.map +0 -1
package/lib/analyse.utils.cjs
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
//#region src/analyse.utils.ts
|
|
3
3
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
* Génère un JSDoc pour une expression exportée générée automatiquement
|
|
5
|
+
*/
|
|
6
6
|
const generateJSDoc = (exportName, declarationKind) => {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
* ${exportName}${kindText} - Auto-generated expression
|
|
7
|
+
return `/**
|
|
8
|
+
* ${exportName}${declarationKind ? ` ${declarationKind}` : ""} - Auto-generated expression
|
|
10
9
|
*
|
|
11
10
|
* ⚠️ WARNING: This expression is auto-generated and should not be modified.
|
|
12
11
|
* Any manual changes will be overwritten during the next generation.
|
|
@@ -17,219 +16,168 @@ const generateJSDoc = (exportName, declarationKind) => {
|
|
|
17
16
|
*/`;
|
|
18
17
|
};
|
|
19
18
|
const extractExportDetails = (trimmedLine) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
declarationKind = 'type';
|
|
65
|
-
}
|
|
66
|
-
else if (trimmedLine.includes('export enum ')) {
|
|
67
|
-
const match = trimmedLine.match(/export enum (\w+)/);
|
|
68
|
-
exportName = match ? match[1] : 'enum';
|
|
69
|
-
declarationKind = 'enum';
|
|
70
|
-
}
|
|
71
|
-
return { exportName, declarationKind };
|
|
19
|
+
let exportName = "export";
|
|
20
|
+
let declarationKind;
|
|
21
|
+
if (trimmedLine.includes("export default ")) {
|
|
22
|
+
exportName = "default";
|
|
23
|
+
if (trimmedLine.includes("function")) declarationKind = "function";
|
|
24
|
+
else if (trimmedLine.includes("class")) declarationKind = "class";
|
|
25
|
+
else declarationKind = "value";
|
|
26
|
+
} else if (trimmedLine.includes("export const ")) {
|
|
27
|
+
const match = trimmedLine.match(/export const (\w+)/);
|
|
28
|
+
exportName = match ? match[1] : "const";
|
|
29
|
+
declarationKind = "variable";
|
|
30
|
+
} else if (trimmedLine.includes("export let ")) {
|
|
31
|
+
const match = trimmedLine.match(/export let (\w+)/);
|
|
32
|
+
exportName = match ? match[1] : "let";
|
|
33
|
+
declarationKind = "variable";
|
|
34
|
+
} else if (trimmedLine.includes("export var ")) {
|
|
35
|
+
const match = trimmedLine.match(/export var (\w+)/);
|
|
36
|
+
exportName = match ? match[1] : "var";
|
|
37
|
+
declarationKind = "variable";
|
|
38
|
+
} else if (trimmedLine.includes("export function ")) {
|
|
39
|
+
const match = trimmedLine.match(/export function (\w+)/);
|
|
40
|
+
exportName = match ? match[1] : "function";
|
|
41
|
+
declarationKind = "function";
|
|
42
|
+
} else if (trimmedLine.includes("export class ")) {
|
|
43
|
+
const match = trimmedLine.match(/export class (\w+)/);
|
|
44
|
+
exportName = match ? match[1] : "class";
|
|
45
|
+
declarationKind = "class";
|
|
46
|
+
} else if (trimmedLine.includes("export interface ")) {
|
|
47
|
+
const match = trimmedLine.match(/export interface (\w+)/);
|
|
48
|
+
exportName = match ? match[1] : "interface";
|
|
49
|
+
declarationKind = "interface";
|
|
50
|
+
} else if (trimmedLine.includes("export type ")) {
|
|
51
|
+
const match = trimmedLine.match(/export type (\w+)/);
|
|
52
|
+
exportName = match ? match[1] : "type";
|
|
53
|
+
declarationKind = "type";
|
|
54
|
+
} else if (trimmedLine.includes("export enum ")) {
|
|
55
|
+
const match = trimmedLine.match(/export enum (\w+)/);
|
|
56
|
+
exportName = match ? match[1] : "enum";
|
|
57
|
+
declarationKind = "enum";
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
exportName,
|
|
61
|
+
declarationKind
|
|
62
|
+
};
|
|
72
63
|
};
|
|
73
64
|
/**
|
|
74
|
-
|
|
75
|
-
|
|
65
|
+
* Vérifie si une ligne d'export contient une déclaration et non pas un simple re-export
|
|
66
|
+
*/
|
|
76
67
|
const hasDeclaration = (exportLine) => {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
'export default function ',
|
|
98
|
-
'export default class ',
|
|
99
|
-
'export default interface ',
|
|
100
|
-
'export default enum ',
|
|
101
|
-
'export default const ',
|
|
102
|
-
'export default let ',
|
|
103
|
-
'export default var ',
|
|
104
|
-
];
|
|
105
|
-
return keywords.some(kw => trimmed.includes(kw));
|
|
68
|
+
const trimmed = exportLine.trim();
|
|
69
|
+
if (trimmed.startsWith("export {") || trimmed.startsWith("export *") || trimmed.includes("} from ") || trimmed.match(/^export\s+\{[^}]*\}\s*;?\s*$/) || trimmed.match(/^export\s+default\s+[a-zA-Z_$][a-zA-Z0-9_$]*\s*;?\s*$/)) return false;
|
|
70
|
+
return [
|
|
71
|
+
"export const ",
|
|
72
|
+
"export let ",
|
|
73
|
+
"export var ",
|
|
74
|
+
"export function ",
|
|
75
|
+
"export class ",
|
|
76
|
+
"export interface ",
|
|
77
|
+
"export type ",
|
|
78
|
+
"export enum ",
|
|
79
|
+
"export namespace ",
|
|
80
|
+
"export default function ",
|
|
81
|
+
"export default class ",
|
|
82
|
+
"export default interface ",
|
|
83
|
+
"export default enum ",
|
|
84
|
+
"export default const ",
|
|
85
|
+
"export default let ",
|
|
86
|
+
"export default var "
|
|
87
|
+
].some((kw) => trimmed.includes(kw));
|
|
106
88
|
};
|
|
107
89
|
/**
|
|
108
|
-
|
|
109
|
-
|
|
90
|
+
* Extrait le nom d'une déclaration (const, function, etc.)
|
|
91
|
+
*/
|
|
110
92
|
const extractDeclarationName = (line) => {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
93
|
+
const trimmed = line.trim();
|
|
94
|
+
if (trimmed.startsWith("const ")) {
|
|
95
|
+
const match = trimmed.match(/const\s+(\w+)/);
|
|
96
|
+
return match ? match[1] : null;
|
|
97
|
+
}
|
|
98
|
+
if (trimmed.startsWith("function ")) {
|
|
99
|
+
const match = trimmed.match(/function\s+(\w+)/);
|
|
100
|
+
return match ? match[1] : null;
|
|
101
|
+
}
|
|
102
|
+
if (trimmed.startsWith("class ")) {
|
|
103
|
+
const match = trimmed.match(/class\s+(\w+)/);
|
|
104
|
+
return match ? match[1] : null;
|
|
105
|
+
}
|
|
106
|
+
if (trimmed.startsWith("interface ")) {
|
|
107
|
+
const match = trimmed.match(/interface\s+(\w+)/);
|
|
108
|
+
return match ? match[1] : null;
|
|
109
|
+
}
|
|
110
|
+
if (trimmed.startsWith("type ")) {
|
|
111
|
+
const match = trimmed.match(/type\s+(\w+)/);
|
|
112
|
+
return match ? match[1] : null;
|
|
113
|
+
}
|
|
114
|
+
if (trimmed.startsWith("enum ")) {
|
|
115
|
+
const match = trimmed.match(/enum\s+(\w+)/);
|
|
116
|
+
return match ? match[1] : null;
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
137
119
|
};
|
|
138
120
|
/**
|
|
139
|
-
|
|
140
|
-
|
|
121
|
+
* Vérifie si une déclaration est exportée plus tard dans le fichier
|
|
122
|
+
*/
|
|
141
123
|
const isExportedLater = (lines, declarationName) => {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
trimmed.includes(`export * as ${declarationName}`));
|
|
147
|
-
});
|
|
124
|
+
return lines.some((line) => {
|
|
125
|
+
const trimmed = line.trim();
|
|
126
|
+
return trimmed === `export default ${declarationName};` || trimmed.includes(`export { ${declarationName}`) || trimmed.includes(`export * as ${declarationName}`);
|
|
127
|
+
});
|
|
148
128
|
};
|
|
149
129
|
/**
|
|
150
|
-
|
|
151
|
-
|
|
130
|
+
* Détermine le type de déclaration
|
|
131
|
+
*/
|
|
152
132
|
const getDeclarationKind = (line) => {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
return 'class';
|
|
164
|
-
if (trimmed.startsWith('interface '))
|
|
165
|
-
return 'interface';
|
|
166
|
-
if (trimmed.startsWith('type '))
|
|
167
|
-
return 'type';
|
|
168
|
-
if (trimmed.startsWith('enum '))
|
|
169
|
-
return 'enum';
|
|
170
|
-
return 'variable';
|
|
133
|
+
const trimmed = line.trim();
|
|
134
|
+
if (trimmed.startsWith("const ")) return "const";
|
|
135
|
+
if (trimmed.startsWith("let ")) return "let";
|
|
136
|
+
if (trimmed.startsWith("var ")) return "var";
|
|
137
|
+
if (trimmed.startsWith("function ")) return "function";
|
|
138
|
+
if (trimmed.startsWith("class ")) return "class";
|
|
139
|
+
if (trimmed.startsWith("interface ")) return "interface";
|
|
140
|
+
if (trimmed.startsWith("type ")) return "type";
|
|
141
|
+
if (trimmed.startsWith("enum ")) return "enum";
|
|
142
|
+
return "variable";
|
|
171
143
|
};
|
|
172
144
|
/**
|
|
173
|
-
|
|
174
|
-
|
|
145
|
+
* Ajoute des JSDoc aux expressions exportées dans le texte source
|
|
146
|
+
*/
|
|
175
147
|
const addJSDocToSourceText = (sourceFile) => {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
trimmedLine.startsWith('type ') ||
|
|
208
|
-
trimmedLine.startsWith('enum '))) {
|
|
209
|
-
// Vérifier si cette déclaration est exportée plus tard dans le fichier
|
|
210
|
-
const declarationName = extractDeclarationName(trimmedLine);
|
|
211
|
-
if (declarationName && isExportedLater(lines, declarationName)) {
|
|
212
|
-
// Calculer la position dans le texte original
|
|
213
|
-
const position = lines.slice(0, lineIndex).join('\n').length +
|
|
214
|
-
(lineIndex > 0 ? 1 : 0);
|
|
215
|
-
const declarationKind = getDeclarationKind(trimmedLine);
|
|
216
|
-
const jsdoc = generateJSDoc(declarationName, declarationKind);
|
|
217
|
-
insertions.push({ position, jsdoc: `${jsdoc}\n` });
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
// Trier par position décroissante pour insérer de la fin vers le début
|
|
222
|
-
insertions.sort((a, b) => b.position - a.position);
|
|
223
|
-
// Insérer les JSDoc
|
|
224
|
-
for (const insertion of insertions) {
|
|
225
|
-
modifiedText =
|
|
226
|
-
modifiedText.slice(0, insertion.position) +
|
|
227
|
-
insertion.jsdoc +
|
|
228
|
-
modifiedText.slice(insertion.position);
|
|
229
|
-
}
|
|
230
|
-
return modifiedText;
|
|
148
|
+
const fullText = sourceFile.getText();
|
|
149
|
+
const imports = sourceFile.getImportDeclarations().map((importDecl) => importDecl.getText());
|
|
150
|
+
let modifiedText = fullText.replace(imports.join("\n"), "").trimStart();
|
|
151
|
+
const insertions = [];
|
|
152
|
+
const lines = modifiedText.split("\n");
|
|
153
|
+
lines.forEach((line, lineIndex) => {
|
|
154
|
+
const trimmedLine = line.trim();
|
|
155
|
+
if (trimmedLine.startsWith("export ") && hasDeclaration(trimmedLine)) {
|
|
156
|
+
const position = lines.slice(0, lineIndex).join("\n").length + (lineIndex > 0 ? 1 : 0);
|
|
157
|
+
const { exportName, declarationKind } = extractExportDetails(trimmedLine);
|
|
158
|
+
const jsdoc = generateJSDoc(exportName, declarationKind);
|
|
159
|
+
insertions.push({
|
|
160
|
+
position,
|
|
161
|
+
jsdoc: `${jsdoc}\n`
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
if (!trimmedLine.startsWith("export ") && (trimmedLine.startsWith("const ") || trimmedLine.startsWith("function ") || trimmedLine.startsWith("class ") || trimmedLine.startsWith("interface ") || trimmedLine.startsWith("type ") || trimmedLine.startsWith("enum "))) {
|
|
165
|
+
const declarationName = extractDeclarationName(trimmedLine);
|
|
166
|
+
if (declarationName && isExportedLater(lines, declarationName)) {
|
|
167
|
+
const position = lines.slice(0, lineIndex).join("\n").length + (lineIndex > 0 ? 1 : 0);
|
|
168
|
+
const jsdoc = generateJSDoc(declarationName, getDeclarationKind(trimmedLine));
|
|
169
|
+
insertions.push({
|
|
170
|
+
position,
|
|
171
|
+
jsdoc: `${jsdoc}\n`
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
insertions.sort((a, b) => b.position - a.position);
|
|
177
|
+
for (const insertion of insertions) modifiedText = modifiedText.slice(0, insertion.position) + insertion.jsdoc + modifiedText.slice(insertion.position);
|
|
178
|
+
return modifiedText;
|
|
231
179
|
};
|
|
232
|
-
|
|
180
|
+
//#endregion
|
|
233
181
|
exports.addJSDocToSourceText = addJSDocToSourceText;
|
|
234
182
|
exports.extractDeclarationName = extractDeclarationName;
|
|
235
183
|
exports.extractExportDetails = extractExportDetails;
|
|
@@ -237,4 +185,5 @@ exports.generateJSDoc = generateJSDoc;
|
|
|
237
185
|
exports.getDeclarationKind = getDeclarationKind;
|
|
238
186
|
exports.hasDeclaration = hasDeclaration;
|
|
239
187
|
exports.isExportedLater = isExportedLater;
|
|
240
|
-
|
|
188
|
+
|
|
189
|
+
//# sourceMappingURL=analyse.utils.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyse.utils.cjs","sources":["../src/analyse.utils.ts"],"sourcesContent":["import type { SourceFile } from 'ts-morph';\n\n/**\n * Génère un JSDoc pour une expression exportée générée automatiquement\n */\nexport const generateJSDoc = (\n exportName: string,\n declarationKind?: string,\n): string => {\n const kindText = declarationKind ? ` ${declarationKind}` : '';\n return `/**\n * ${exportName}${kindText} - Auto-generated expression\n * \n * ⚠️ WARNING: This expression is auto-generated and should not be modified.\n * Any manual changes will be overwritten during the next generation.\n * \n * @generated\n * @readonly\n * @author chlbri (bri_lvi@icloud.com)\n */`;\n};\n\nexport const extractExportDetails = (trimmedLine: string) => {\n let exportName = 'export';\n let declarationKind: string | undefined;\n\n if (trimmedLine.includes('export default ')) {\n exportName = 'default';\n if (trimmedLine.includes('function')) declarationKind = 'function';\n else if (trimmedLine.includes('class')) declarationKind = 'class';\n else declarationKind = 'value';\n } else if (trimmedLine.includes('export const ')) {\n const match = trimmedLine.match(/export const (\\w+)/);\n exportName = match ? match[1] : 'const';\n declarationKind = 'variable';\n } else if (trimmedLine.includes('export let ')) {\n const match = trimmedLine.match(/export let (\\w+)/);\n exportName = match ? match[1] : 'let';\n declarationKind = 'variable';\n } else if (trimmedLine.includes('export var ')) {\n const match = trimmedLine.match(/export var (\\w+)/);\n exportName = match ? match[1] : 'var';\n declarationKind = 'variable';\n } else if (trimmedLine.includes('export function ')) {\n const match = trimmedLine.match(/export function (\\w+)/);\n exportName = match ? match[1] : 'function';\n declarationKind = 'function';\n } else if (trimmedLine.includes('export class ')) {\n const match = trimmedLine.match(/export class (\\w+)/);\n exportName = match ? match[1] : 'class';\n declarationKind = 'class';\n } else if (trimmedLine.includes('export interface ')) {\n const match = trimmedLine.match(/export interface (\\w+)/);\n exportName = match ? match[1] : 'interface';\n declarationKind = 'interface';\n } else if (trimmedLine.includes('export type ')) {\n const match = trimmedLine.match(/export type (\\w+)/);\n exportName = match ? match[1] : 'type';\n declarationKind = 'type';\n } else if (trimmedLine.includes('export enum ')) {\n const match = trimmedLine.match(/export enum (\\w+)/);\n exportName = match ? match[1] : 'enum';\n declarationKind = 'enum';\n }\n return { exportName, declarationKind };\n};\n\n/**\n * Vérifie si une ligne d'export contient une déclaration et non pas un simple re-export\n */\nexport const hasDeclaration = (exportLine: string): boolean => {\n const trimmed = exportLine.trim();\n const falsy =\n trimmed.startsWith('export {') || // export { something }\n trimmed.startsWith('export *') || // export * from\n trimmed.includes('} from ') || // export { a, b } from\n trimmed.match(/^export\\s+\\{[^}]*\\}\\s*;?\\s*$/) || // export { a, b };\n trimmed.match(/^export\\s+default\\s+[a-zA-Z_$][a-zA-Z0-9_$]*\\s*;?\\s*$/); // export default identifier;\n\n // Re-exports et exports simples à exclure\n if (falsy) return false;\n\n // Déclarations à inclure (avec mots-clés de déclaration)\n const keywords = [\n 'export const ',\n 'export let ',\n 'export var ',\n 'export function ',\n 'export class ',\n 'export interface ',\n 'export type ',\n 'export enum ',\n 'export namespace ',\n 'export default function ',\n 'export default class ',\n 'export default interface ',\n 'export default enum ',\n 'export default const ',\n 'export default let ',\n 'export default var ',\n ];\n\n return keywords.some(kw => trimmed.includes(kw));\n};\n\n/**\n * Extrait le nom d'une déclaration (const, function, etc.)\n */\nexport const extractDeclarationName = (line: string): string | null => {\n const trimmed = line.trim();\n\n if (trimmed.startsWith('const ')) {\n const match = trimmed.match(/const\\s+(\\w+)/);\n return match ? match[1] : null;\n }\n if (trimmed.startsWith('function ')) {\n const match = trimmed.match(/function\\s+(\\w+)/);\n return match ? match[1] : null;\n }\n if (trimmed.startsWith('class ')) {\n const match = trimmed.match(/class\\s+(\\w+)/);\n return match ? match[1] : null;\n }\n if (trimmed.startsWith('interface ')) {\n const match = trimmed.match(/interface\\s+(\\w+)/);\n return match ? match[1] : null;\n }\n if (trimmed.startsWith('type ')) {\n const match = trimmed.match(/type\\s+(\\w+)/);\n return match ? match[1] : null;\n }\n if (trimmed.startsWith('enum ')) {\n const match = trimmed.match(/enum\\s+(\\w+)/);\n return match ? match[1] : null;\n }\n\n return null;\n};\n\n/**\n * Vérifie si une déclaration est exportée plus tard dans le fichier\n */\nexport const isExportedLater = (\n lines: string[],\n declarationName: string,\n): boolean => {\n return lines.some(line => {\n const trimmed = line.trim();\n return (\n trimmed === `export default ${declarationName};` ||\n trimmed.includes(`export { ${declarationName}`) ||\n trimmed.includes(`export * as ${declarationName}`)\n );\n });\n};\n\n/**\n * Détermine le type de déclaration\n */\nexport const getDeclarationKind = (line: string): string => {\n const trimmed = line.trim();\n\n if (trimmed.startsWith('const ')) return 'const';\n if (trimmed.startsWith('let ')) return 'let';\n if (trimmed.startsWith('var ')) return 'var';\n if (trimmed.startsWith('function ')) return 'function';\n if (trimmed.startsWith('class ')) return 'class';\n if (trimmed.startsWith('interface ')) return 'interface';\n if (trimmed.startsWith('type ')) return 'type';\n if (trimmed.startsWith('enum ')) return 'enum';\n\n return 'variable';\n};\n\n/**\n * Ajoute des JSDoc aux expressions exportées dans le texte source\n */\nexport const addJSDocToSourceText = (sourceFile: SourceFile): string => {\n // Obtenir le texte sans les imports dès le début\n const fullText = sourceFile.getText();\n const imports = sourceFile\n .getImportDeclarations()\n .map(importDecl => importDecl.getText());\n\n const linesWithoutImports = fullText\n .replace(imports.join('\\n'), '')\n .trimStart();\n\n let modifiedText = linesWithoutImports;\n\n // Collecter toutes les positions d'insertion avec leurs JSDoc\n const insertions: Array<{ position: number; jsdoc: string }> = [];\n\n // Une approche plus simple : analyser le texte directement pour trouver les exports\n const lines = modifiedText.split('\\n');\n\n lines.forEach((line, lineIndex) => {\n const trimmedLine = line.trim();\n\n // Détecter les lignes qui commencent par export ET contiennent une déclaration\n if (trimmedLine.startsWith('export ') && hasDeclaration(trimmedLine)) {\n // Calculer la position dans le texte original\n const position =\n lines.slice(0, lineIndex).join('\\n').length +\n (lineIndex > 0 ? 1 : 0);\n\n // Déterminer le nom et le type d'export\n const { exportName, declarationKind } =\n extractExportDetails(trimmedLine);\n\n const jsdoc = generateJSDoc(exportName, declarationKind);\n insertions.push({ position, jsdoc: `${jsdoc}\\n` });\n }\n\n // Détecter les déclarations internes (const, function, etc.) qui sont ensuite exportées\n if (\n !trimmedLine.startsWith('export ') &&\n (trimmedLine.startsWith('const ') ||\n trimmedLine.startsWith('function ') ||\n trimmedLine.startsWith('class ') ||\n trimmedLine.startsWith('interface ') ||\n trimmedLine.startsWith('type ') ||\n trimmedLine.startsWith('enum '))\n ) {\n // Vérifier si cette déclaration est exportée plus tard dans le fichier\n const declarationName = extractDeclarationName(trimmedLine);\n if (declarationName && isExportedLater(lines, declarationName)) {\n // Calculer la position dans le texte original\n const position =\n lines.slice(0, lineIndex).join('\\n').length +\n (lineIndex > 0 ? 1 : 0);\n\n const declarationKind = getDeclarationKind(trimmedLine);\n const jsdoc = generateJSDoc(declarationName, declarationKind);\n insertions.push({ position, jsdoc: `${jsdoc}\\n` });\n }\n }\n });\n\n // Trier par position décroissante pour insérer de la fin vers le début\n insertions.sort((a, b) => b.position - a.position);\n\n // Insérer les JSDoc\n for (const insertion of insertions) {\n modifiedText =\n modifiedText.slice(0, insertion.position) +\n insertion.jsdoc +\n modifiedText.slice(insertion.position);\n }\n\n return modifiedText;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analyse.utils.cjs","names":[],"sources":["../src/analyse.utils.ts"],"sourcesContent":["import type { SourceFile } from \"ts-morph\";\n\n/**\n * Génère un JSDoc pour une expression exportée générée automatiquement\n */\nexport const generateJSDoc = (\n exportName: string,\n declarationKind?: string,\n): string => {\n const kindText = declarationKind ? ` ${declarationKind}` : \"\";\n return `/**\n * ${exportName}${kindText} - Auto-generated expression\n * \n * ⚠️ WARNING: This expression is auto-generated and should not be modified.\n * Any manual changes will be overwritten during the next generation.\n * \n * @generated\n * @readonly\n * @author chlbri (bri_lvi@icloud.com)\n */`;\n};\n\nexport const extractExportDetails = (trimmedLine: string) => {\n let exportName = \"export\";\n let declarationKind: string | undefined;\n\n if (trimmedLine.includes(\"export default \")) {\n exportName = \"default\";\n if (trimmedLine.includes(\"function\")) declarationKind = \"function\";\n else if (trimmedLine.includes(\"class\")) declarationKind = \"class\";\n else declarationKind = \"value\";\n } else if (trimmedLine.includes(\"export const \")) {\n const match = trimmedLine.match(/export const (\\w+)/);\n exportName = match ? match[1] : \"const\";\n declarationKind = \"variable\";\n } else if (trimmedLine.includes(\"export let \")) {\n const match = trimmedLine.match(/export let (\\w+)/);\n exportName = match ? match[1] : \"let\";\n declarationKind = \"variable\";\n } else if (trimmedLine.includes(\"export var \")) {\n const match = trimmedLine.match(/export var (\\w+)/);\n exportName = match ? match[1] : \"var\";\n declarationKind = \"variable\";\n } else if (trimmedLine.includes(\"export function \")) {\n const match = trimmedLine.match(/export function (\\w+)/);\n exportName = match ? match[1] : \"function\";\n declarationKind = \"function\";\n } else if (trimmedLine.includes(\"export class \")) {\n const match = trimmedLine.match(/export class (\\w+)/);\n exportName = match ? match[1] : \"class\";\n declarationKind = \"class\";\n } else if (trimmedLine.includes(\"export interface \")) {\n const match = trimmedLine.match(/export interface (\\w+)/);\n exportName = match ? match[1] : \"interface\";\n declarationKind = \"interface\";\n } else if (trimmedLine.includes(\"export type \")) {\n const match = trimmedLine.match(/export type (\\w+)/);\n exportName = match ? match[1] : \"type\";\n declarationKind = \"type\";\n } else if (trimmedLine.includes(\"export enum \")) {\n const match = trimmedLine.match(/export enum (\\w+)/);\n exportName = match ? match[1] : \"enum\";\n declarationKind = \"enum\";\n }\n return { exportName, declarationKind };\n};\n\n/**\n * Vérifie si une ligne d'export contient une déclaration et non pas un simple re-export\n */\nexport const hasDeclaration = (exportLine: string): boolean => {\n const trimmed = exportLine.trim();\n const falsy =\n trimmed.startsWith(\"export {\") || // export { something }\n trimmed.startsWith(\"export *\") || // export * from\n trimmed.includes(\"} from \") || // export { a, b } from\n trimmed.match(/^export\\s+\\{[^}]*\\}\\s*;?\\s*$/) || // export { a, b };\n trimmed.match(/^export\\s+default\\s+[a-zA-Z_$][a-zA-Z0-9_$]*\\s*;?\\s*$/); // export default identifier;\n\n // Re-exports et exports simples à exclure\n if (falsy) return false;\n\n // Déclarations à inclure (avec mots-clés de déclaration)\n const keywords = [\n \"export const \",\n \"export let \",\n \"export var \",\n \"export function \",\n \"export class \",\n \"export interface \",\n \"export type \",\n \"export enum \",\n \"export namespace \",\n \"export default function \",\n \"export default class \",\n \"export default interface \",\n \"export default enum \",\n \"export default const \",\n \"export default let \",\n \"export default var \",\n ];\n\n return keywords.some((kw) => trimmed.includes(kw));\n};\n\n/**\n * Extrait le nom d'une déclaration (const, function, etc.)\n */\nexport const extractDeclarationName = (line: string): string | null => {\n const trimmed = line.trim();\n\n if (trimmed.startsWith(\"const \")) {\n const match = trimmed.match(/const\\s+(\\w+)/);\n return match ? match[1] : null;\n }\n if (trimmed.startsWith(\"function \")) {\n const match = trimmed.match(/function\\s+(\\w+)/);\n return match ? match[1] : null;\n }\n if (trimmed.startsWith(\"class \")) {\n const match = trimmed.match(/class\\s+(\\w+)/);\n return match ? match[1] : null;\n }\n if (trimmed.startsWith(\"interface \")) {\n const match = trimmed.match(/interface\\s+(\\w+)/);\n return match ? match[1] : null;\n }\n if (trimmed.startsWith(\"type \")) {\n const match = trimmed.match(/type\\s+(\\w+)/);\n return match ? match[1] : null;\n }\n if (trimmed.startsWith(\"enum \")) {\n const match = trimmed.match(/enum\\s+(\\w+)/);\n return match ? match[1] : null;\n }\n\n return null;\n};\n\n/**\n * Vérifie si une déclaration est exportée plus tard dans le fichier\n */\nexport const isExportedLater = (\n lines: string[],\n declarationName: string,\n): boolean => {\n return lines.some((line) => {\n const trimmed = line.trim();\n return (\n trimmed === `export default ${declarationName};` ||\n trimmed.includes(`export { ${declarationName}`) ||\n trimmed.includes(`export * as ${declarationName}`)\n );\n });\n};\n\n/**\n * Détermine le type de déclaration\n */\nexport const getDeclarationKind = (line: string): string => {\n const trimmed = line.trim();\n\n if (trimmed.startsWith(\"const \")) return \"const\";\n if (trimmed.startsWith(\"let \")) return \"let\";\n if (trimmed.startsWith(\"var \")) return \"var\";\n if (trimmed.startsWith(\"function \")) return \"function\";\n if (trimmed.startsWith(\"class \")) return \"class\";\n if (trimmed.startsWith(\"interface \")) return \"interface\";\n if (trimmed.startsWith(\"type \")) return \"type\";\n if (trimmed.startsWith(\"enum \")) return \"enum\";\n\n return \"variable\";\n};\n\n/**\n * Ajoute des JSDoc aux expressions exportées dans le texte source\n */\nexport const addJSDocToSourceText = (sourceFile: SourceFile): string => {\n // Obtenir le texte sans les imports dès le début\n const fullText = sourceFile.getText();\n const imports = sourceFile\n .getImportDeclarations()\n .map((importDecl) => importDecl.getText());\n\n const linesWithoutImports = fullText\n .replace(imports.join(\"\\n\"), \"\")\n .trimStart();\n\n let modifiedText = linesWithoutImports;\n\n // Collecter toutes les positions d'insertion avec leurs JSDoc\n const insertions: Array<{ position: number; jsdoc: string }> = [];\n\n // Une approche plus simple : analyser le texte directement pour trouver les exports\n const lines = modifiedText.split(\"\\n\");\n\n lines.forEach((line, lineIndex) => {\n const trimmedLine = line.trim();\n\n // Détecter les lignes qui commencent par export ET contiennent une déclaration\n if (trimmedLine.startsWith(\"export \") && hasDeclaration(trimmedLine)) {\n // Calculer la position dans le texte original\n const position =\n lines.slice(0, lineIndex).join(\"\\n\").length + (lineIndex > 0 ? 1 : 0);\n\n // Déterminer le nom et le type d'export\n const { exportName, declarationKind } = extractExportDetails(trimmedLine);\n\n const jsdoc = generateJSDoc(exportName, declarationKind);\n insertions.push({ position, jsdoc: `${jsdoc}\\n` });\n }\n\n // Détecter les déclarations internes (const, function, etc.) qui sont ensuite exportées\n if (\n !trimmedLine.startsWith(\"export \") &&\n (trimmedLine.startsWith(\"const \") ||\n trimmedLine.startsWith(\"function \") ||\n trimmedLine.startsWith(\"class \") ||\n trimmedLine.startsWith(\"interface \") ||\n trimmedLine.startsWith(\"type \") ||\n trimmedLine.startsWith(\"enum \"))\n ) {\n // Vérifier si cette déclaration est exportée plus tard dans le fichier\n const declarationName = extractDeclarationName(trimmedLine);\n if (declarationName && isExportedLater(lines, declarationName)) {\n // Calculer la position dans le texte original\n const position =\n lines.slice(0, lineIndex).join(\"\\n\").length + (lineIndex > 0 ? 1 : 0);\n\n const declarationKind = getDeclarationKind(trimmedLine);\n const jsdoc = generateJSDoc(declarationName, declarationKind);\n insertions.push({ position, jsdoc: `${jsdoc}\\n` });\n }\n }\n });\n\n // Trier par position décroissante pour insérer de la fin vers le début\n insertions.sort((a, b) => b.position - a.position);\n\n // Insérer les JSDoc\n for (const insertion of insertions) {\n modifiedText =\n modifiedText.slice(0, insertion.position) +\n insertion.jsdoc +\n modifiedText.slice(insertion.position);\n }\n\n return modifiedText;\n};\n"],"mappings":"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"}
|
package/lib/analyse.utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SourceFile } from
|
|
1
|
+
import type { SourceFile } from "ts-morph";
|
|
2
2
|
/**
|
|
3
3
|
* Génère un JSDoc pour une expression exportée générée automatiquement
|
|
4
4
|
*/
|
|
@@ -27,4 +27,3 @@ export declare const getDeclarationKind: (line: string) => string;
|
|
|
27
27
|
* Ajoute des JSDoc aux expressions exportées dans le texte source
|
|
28
28
|
*/
|
|
29
29
|
export declare const addJSDocToSourceText: (sourceFile: SourceFile) => string;
|
|
30
|
-
//# sourceMappingURL=analyse.utils.d.ts.map
|