@bemedev/codebase 0.1.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +8 -8
  2. package/lib/_virtual/_rolldown/runtime.cjs +23 -0
  3. package/lib/analyse.cjs +48 -62
  4. package/lib/analyse.cjs.map +1 -1
  5. package/lib/analyse.d.ts +21 -3
  6. package/lib/analyse.js +45 -60
  7. package/lib/analyse.js.map +1 -1
  8. package/lib/analyse.utils.cjs +154 -205
  9. package/lib/analyse.utils.cjs.map +1 -1
  10. package/lib/analyse.utils.d.ts +1 -2
  11. package/lib/analyse.utils.js +153 -203
  12. package/lib/analyse.utils.js.map +1 -1
  13. package/lib/cli/cli.cjs +28 -27
  14. package/lib/cli/cli.cjs.map +1 -1
  15. package/lib/cli/cli.d.ts +0 -1
  16. package/lib/cli/cli.js +25 -24
  17. package/lib/cli/cli.js.map +1 -1
  18. package/lib/cli/constants.cjs +6 -5
  19. package/lib/cli/constants.cjs.map +1 -1
  20. package/lib/cli/constants.d.ts +0 -1
  21. package/lib/cli/constants.js +5 -3
  22. package/lib/cli/constants.js.map +1 -1
  23. package/lib/cli/index.cjs +6 -6
  24. package/lib/cli/index.cjs.map +1 -1
  25. package/lib/cli/index.d.ts +0 -1
  26. package/lib/cli/index.js +7 -4
  27. package/lib/cli/index.js.map +1 -1
  28. package/lib/constants.cjs +26 -28
  29. package/lib/constants.cjs.map +1 -1
  30. package/lib/constants.d.ts +0 -1
  31. package/lib/constants.js +24 -26
  32. package/lib/constants.js.map +1 -1
  33. package/lib/exports.cjs +51 -72
  34. package/lib/exports.cjs.map +1 -1
  35. package/lib/exports.d.ts +1 -2
  36. package/lib/exports.js +49 -70
  37. package/lib/exports.js.map +1 -1
  38. package/lib/functions/add.cjs +71 -84
  39. package/lib/functions/add.cjs.map +1 -1
  40. package/lib/functions/add.d.ts +1 -2
  41. package/lib/functions/add.js +68 -82
  42. package/lib/functions/add.js.map +1 -1
  43. package/lib/functions/generate.cjs +53 -56
  44. package/lib/functions/generate.cjs.map +1 -1
  45. package/lib/functions/generate.d.ts +1 -2
  46. package/lib/functions/generate.js +51 -54
  47. package/lib/functions/generate.js.map +1 -1
  48. package/lib/functions/index.cjs +11 -16
  49. package/lib/functions/index.d.ts +0 -1
  50. package/lib/functions/index.js +5 -5
  51. package/lib/functions/init.cjs +68 -97
  52. package/lib/functions/init.cjs.map +1 -1
  53. package/lib/functions/init.d.ts +0 -1
  54. package/lib/functions/init.js +66 -95
  55. package/lib/functions/init.js.map +1 -1
  56. package/lib/functions/remove.cjs +85 -103
  57. package/lib/functions/remove.cjs.map +1 -1
  58. package/lib/functions/remove.d.ts +1 -2
  59. package/lib/functions/remove.js +82 -101
  60. package/lib/functions/remove.js.map +1 -1
  61. package/lib/helpers.cjs +32 -38
  62. package/lib/helpers.cjs.map +1 -1
  63. package/lib/helpers.d.ts +3 -4
  64. package/lib/helpers.js +30 -36
  65. package/lib/helpers.js.map +1 -1
  66. package/lib/imports.cjs +88 -124
  67. package/lib/imports.cjs.map +1 -1
  68. package/lib/imports.d.ts +2 -3
  69. package/lib/imports.js +86 -122
  70. package/lib/imports.js.map +1 -1
  71. package/lib/index.cjs +22 -24
  72. package/lib/index.d.ts +4 -4
  73. package/lib/index.js +8 -6
  74. package/lib/schemas.cjs +53 -64
  75. package/lib/schemas.cjs.map +1 -1
  76. package/lib/schemas.d.ts +1 -2
  77. package/lib/schemas.js +43 -36
  78. package/lib/schemas.js.map +1 -1
  79. package/lib/types.d.ts +0 -1
  80. package/lib/utils.cjs +9 -10
  81. package/lib/utils.cjs.map +1 -1
  82. package/lib/utils.d.ts +0 -1
  83. package/lib/utils.js +8 -8
  84. package/lib/utils.js.map +1 -1
  85. package/package.json +56 -44
  86. package/CHANGE_LOG.md +0 -161
  87. package/lib/analyse.d.ts.map +0 -1
  88. package/lib/analyse.utils.d.ts.map +0 -1
  89. package/lib/cli/cli.d.ts.map +0 -1
  90. package/lib/cli/constants.d.ts.map +0 -1
  91. package/lib/cli/index.d.ts.map +0 -1
  92. package/lib/constants.d.ts.map +0 -1
  93. package/lib/exports.d.ts.map +0 -1
  94. package/lib/functions/add.d.ts.map +0 -1
  95. package/lib/functions/generate.d.ts.map +0 -1
  96. package/lib/functions/index.cjs.map +0 -1
  97. package/lib/functions/index.d.ts.map +0 -1
  98. package/lib/functions/index.js.map +0 -1
  99. package/lib/functions/init.d.ts.map +0 -1
  100. package/lib/functions/remove.d.ts.map +0 -1
  101. package/lib/helpers.d.ts.map +0 -1
  102. package/lib/imports.d.ts.map +0 -1
  103. package/lib/index.cjs.map +0 -1
  104. package/lib/index.d.ts.map +0 -1
  105. package/lib/index.js.map +0 -1
  106. package/lib/schemas.d.ts.map +0 -1
  107. package/lib/types.d.ts.map +0 -1
  108. package/lib/utils.d.ts.map +0 -1
@@ -1,12 +1,11 @@
1
- 'use strict';
2
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region src/analyse.utils.ts
3
3
  /**
4
- * Génère un JSDoc pour une expression exportée générée automatiquement
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
- const kindText = declarationKind ? ` ${declarationKind}` : '';
8
- return `/**
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
- let exportName = 'export';
21
- let declarationKind;
22
- if (trimmedLine.includes('export default ')) {
23
- exportName = 'default';
24
- if (trimmedLine.includes('function'))
25
- declarationKind = 'function';
26
- else if (trimmedLine.includes('class'))
27
- declarationKind = 'class';
28
- else
29
- declarationKind = 'value';
30
- }
31
- else if (trimmedLine.includes('export const ')) {
32
- const match = trimmedLine.match(/export const (\w+)/);
33
- exportName = match ? match[1] : 'const';
34
- declarationKind = 'variable';
35
- }
36
- else if (trimmedLine.includes('export let ')) {
37
- const match = trimmedLine.match(/export let (\w+)/);
38
- exportName = match ? match[1] : 'let';
39
- declarationKind = 'variable';
40
- }
41
- else if (trimmedLine.includes('export var ')) {
42
- const match = trimmedLine.match(/export var (\w+)/);
43
- exportName = match ? match[1] : 'var';
44
- declarationKind = 'variable';
45
- }
46
- else if (trimmedLine.includes('export function ')) {
47
- const match = trimmedLine.match(/export function (\w+)/);
48
- exportName = match ? match[1] : 'function';
49
- declarationKind = 'function';
50
- }
51
- else if (trimmedLine.includes('export class ')) {
52
- const match = trimmedLine.match(/export class (\w+)/);
53
- exportName = match ? match[1] : 'class';
54
- declarationKind = 'class';
55
- }
56
- else if (trimmedLine.includes('export interface ')) {
57
- const match = trimmedLine.match(/export interface (\w+)/);
58
- exportName = match ? match[1] : 'interface';
59
- declarationKind = 'interface';
60
- }
61
- else if (trimmedLine.includes('export type ')) {
62
- const match = trimmedLine.match(/export type (\w+)/);
63
- exportName = match ? match[1] : 'type';
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
- * Vérifie si une ligne d'export contient une déclaration et non pas un simple re-export
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
- const trimmed = exportLine.trim();
78
- const falsy = trimmed.startsWith('export {') || // export { something }
79
- trimmed.startsWith('export *') || // export * from
80
- trimmed.includes('} from ') || // export { a, b } from
81
- trimmed.match(/^export\s+\{[^}]*\}\s*;?\s*$/) || // export { a, b };
82
- trimmed.match(/^export\s+default\s+[a-zA-Z_$][a-zA-Z0-9_$]*\s*;?\s*$/); // export default identifier;
83
- // Re-exports et exports simples à exclure
84
- if (falsy)
85
- return false;
86
- // Déclarations à inclure (avec mots-clés de déclaration)
87
- const keywords = [
88
- 'export const ',
89
- 'export let ',
90
- 'export var ',
91
- 'export function ',
92
- 'export class ',
93
- 'export interface ',
94
- 'export type ',
95
- 'export enum ',
96
- 'export namespace ',
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
- * Extrait le nom d'une déclaration (const, function, etc.)
109
- */
90
+ * Extrait le nom d'une déclaration (const, function, etc.)
91
+ */
110
92
  const extractDeclarationName = (line) => {
111
- const trimmed = line.trim();
112
- if (trimmed.startsWith('const ')) {
113
- const match = trimmed.match(/const\s+(\w+)/);
114
- return match ? match[1] : null;
115
- }
116
- if (trimmed.startsWith('function ')) {
117
- const match = trimmed.match(/function\s+(\w+)/);
118
- return match ? match[1] : null;
119
- }
120
- if (trimmed.startsWith('class ')) {
121
- const match = trimmed.match(/class\s+(\w+)/);
122
- return match ? match[1] : null;
123
- }
124
- if (trimmed.startsWith('interface ')) {
125
- const match = trimmed.match(/interface\s+(\w+)/);
126
- return match ? match[1] : null;
127
- }
128
- if (trimmed.startsWith('type ')) {
129
- const match = trimmed.match(/type\s+(\w+)/);
130
- return match ? match[1] : null;
131
- }
132
- if (trimmed.startsWith('enum ')) {
133
- const match = trimmed.match(/enum\s+(\w+)/);
134
- return match ? match[1] : null;
135
- }
136
- return null;
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
- * Vérifie si une déclaration est exportée plus tard dans le fichier
140
- */
121
+ * Vérifie si une déclaration est exportée plus tard dans le fichier
122
+ */
141
123
  const isExportedLater = (lines, declarationName) => {
142
- return lines.some(line => {
143
- const trimmed = line.trim();
144
- return (trimmed === `export default ${declarationName};` ||
145
- trimmed.includes(`export { ${declarationName}`) ||
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
- * Détermine le type de déclaration
151
- */
130
+ * Détermine le type de déclaration
131
+ */
152
132
  const getDeclarationKind = (line) => {
153
- const trimmed = line.trim();
154
- if (trimmed.startsWith('const '))
155
- return 'const';
156
- if (trimmed.startsWith('let '))
157
- return 'let';
158
- if (trimmed.startsWith('var '))
159
- return 'var';
160
- if (trimmed.startsWith('function '))
161
- return 'function';
162
- if (trimmed.startsWith('class '))
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
- * Ajoute des JSDoc aux expressions exportées dans le texte source
174
- */
145
+ * Ajoute des JSDoc aux expressions exportées dans le texte source
146
+ */
175
147
  const addJSDocToSourceText = (sourceFile) => {
176
- // Obtenir le texte sans les imports dès le début
177
- const fullText = sourceFile.getText();
178
- const imports = sourceFile
179
- .getImportDeclarations()
180
- .map(importDecl => importDecl.getText());
181
- const linesWithoutImports = fullText
182
- .replace(imports.join('\n'), '')
183
- .trimStart();
184
- let modifiedText = linesWithoutImports;
185
- // Collecter toutes les positions d'insertion avec leurs JSDoc
186
- const insertions = [];
187
- // Une approche plus simple : analyser le texte directement pour trouver les exports
188
- const lines = modifiedText.split('\n');
189
- lines.forEach((line, lineIndex) => {
190
- const trimmedLine = line.trim();
191
- // Détecter les lignes qui commencent par export ET contiennent une déclaration
192
- if (trimmedLine.startsWith('export ') && hasDeclaration(trimmedLine)) {
193
- // Calculer la position dans le texte original
194
- const position = lines.slice(0, lineIndex).join('\n').length +
195
- (lineIndex > 0 ? 1 : 0);
196
- // Déterminer le nom et le type d'export
197
- const { exportName, declarationKind } = extractExportDetails(trimmedLine);
198
- const jsdoc = generateJSDoc(exportName, declarationKind);
199
- insertions.push({ position, jsdoc: `${jsdoc}\n` });
200
- }
201
- // Détecter les déclarations internes (const, function, etc.) qui sont ensuite exportées
202
- if (!trimmedLine.startsWith('export ') &&
203
- (trimmedLine.startsWith('const ') ||
204
- trimmedLine.startsWith('function ') ||
205
- trimmedLine.startsWith('class ') ||
206
- trimmedLine.startsWith('interface ') ||
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
- //# sourceMappingURL=analyse.utils.cjs.map
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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"}
@@ -1,4 +1,4 @@
1
- import type { SourceFile } from 'ts-morph';
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