@codenotch/codenotch.cli 1.0.36 → 1.0.37
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 +2 -2
- package/dist/commands/generate/app.d.ts +2 -0
- package/dist/commands/generate/app.js +45 -0
- package/dist/commands/generate/app.js.map +1 -0
- package/dist/commands/generate/appmanifest.d.ts +2 -0
- package/dist/commands/generate/appmanifest.js +34 -0
- package/dist/commands/generate/appmanifest.js.map +1 -0
- package/dist/commands/generate/dbcontext.d.ts +2 -0
- package/dist/commands/generate/dbcontext.js +32 -0
- package/dist/commands/generate/dbcontext.js.map +1 -0
- package/dist/commands/generate/i18n.d.ts +2 -0
- package/dist/commands/generate/i18n.js +29 -0
- package/dist/commands/generate/i18n.js.map +1 -0
- package/dist/commands/generate/index.d.ts +0 -1
- package/dist/commands/generate/index.js +14 -33
- package/dist/commands/generate/index.js.map +1 -1
- package/dist/commands/generate/manifest.d.ts +2 -0
- package/dist/commands/generate/manifest.js +29 -0
- package/dist/commands/generate/manifest.js.map +1 -0
- package/dist/commands/generate/openapi.d.ts +2 -0
- package/dist/commands/generate/openapi.js +32 -0
- package/dist/commands/generate/openapi.js.map +1 -0
- package/dist/commands/generate/pkg.d.ts +2 -0
- package/dist/commands/generate/pkg.js +34 -0
- package/dist/commands/generate/pkg.js.map +1 -0
- package/dist/commands/generate/shared.d.ts +17 -0
- package/dist/commands/generate/shared.js +70 -0
- package/dist/commands/generate/shared.js.map +1 -0
- package/dist/commands/project/new.js +108 -96
- package/dist/commands/project/new.js.map +1 -1
- package/dist/commands/react/build.js +11 -5
- package/dist/commands/react/build.js.map +1 -1
- package/dist/commands/react/clean.d.ts +2 -0
- package/dist/commands/react/clean.js +46 -0
- package/dist/commands/react/clean.js.map +1 -0
- package/dist/commands/react/dev.d.ts +2 -0
- package/dist/commands/react/dev.js +27 -0
- package/dist/commands/react/dev.js.map +1 -0
- package/dist/commands/react/index.js +5 -1
- package/dist/commands/react/index.js.map +1 -1
- package/dist/commands/react/serve.js +33 -4
- package/dist/commands/react/serve.js.map +1 -1
- package/dist/commands/react/shared.d.ts +21 -0
- package/dist/commands/react/shared.js +80 -0
- package/dist/commands/react/shared.js.map +1 -0
- package/dist/commands/validation/ValidationUtils.d.ts +1 -1
- package/dist/commands/validation/ValidationUtils.js +3 -0
- package/dist/commands/validation/ValidationUtils.js.map +1 -1
- package/dist/commands/validation/files/I18nValidator.d.ts +29 -0
- package/dist/commands/validation/files/I18nValidator.js +198 -0
- package/dist/commands/validation/files/I18nValidator.js.map +1 -0
- package/dist/commands/validation/files/ProjectManifestValidator.d.ts +5 -0
- package/dist/commands/validation/files/ProjectManifestValidator.js +31 -0
- package/dist/commands/validation/files/ProjectManifestValidator.js.map +1 -0
- package/dist/commands/validation/files/ScriptValidator.js +1 -1
- package/dist/commands/validation/files/ScriptValidator.js.map +1 -1
- package/dist/commands/validation/validate.js +11 -6
- package/dist/commands/validation/validate.js.map +1 -1
- package/dist/utils/BuildUtils.d.ts +61 -7
- package/dist/utils/BuildUtils.js +289 -222
- package/dist/utils/BuildUtils.js.map +1 -1
- package/dist/utils/ConsoleUtils.d.ts +8 -0
- package/dist/utils/ConsoleUtils.js +25 -0
- package/dist/utils/ConsoleUtils.js.map +1 -1
- package/dist/utils/DbSchemaUtils.d.ts +49 -0
- package/dist/utils/DbSchemaUtils.js +246 -0
- package/dist/utils/DbSchemaUtils.js.map +1 -0
- package/dist/utils/FileUtils.d.ts +104 -15
- package/dist/utils/FileUtils.js +285 -100
- package/dist/utils/FileUtils.js.map +1 -1
- package/dist/utils/I18nTsUtils.d.ts +66 -0
- package/dist/utils/I18nTsUtils.js +221 -0
- package/dist/utils/I18nTsUtils.js.map +1 -0
- package/dist/utils/OpenApiUtils.d.ts +81 -0
- package/dist/utils/OpenApiUtils.js +123 -0
- package/dist/utils/OpenApiUtils.js.map +1 -0
- package/dist/utils/ProjectCompilationUtils.d.ts +0 -1
- package/dist/utils/ProjectCompilationUtils.js +4 -52
- package/dist/utils/ProjectCompilationUtils.js.map +1 -1
- package/dist/utils/ProjectGeneratorUtils.d.ts +35 -0
- package/dist/utils/ProjectGeneratorUtils.js +119 -0
- package/dist/utils/ProjectGeneratorUtils.js.map +1 -0
- package/dist/utils/ProjectTemplates.d.ts +102 -0
- package/dist/utils/ProjectTemplates.js +284 -0
- package/dist/utils/ProjectTemplates.js.map +1 -0
- package/dist/utils/ProjectUtils.d.ts +216 -3
- package/dist/utils/ProjectUtils.js +387 -22
- package/dist/utils/ProjectUtils.js.map +1 -1
- package/dist/utils/RuntimeUtils.js +14 -8
- package/dist/utils/RuntimeUtils.js.map +1 -1
- package/dist/utils/ScriptDeclarationUtils.d.ts +169 -0
- package/dist/utils/ScriptDeclarationUtils.js +398 -0
- package/dist/utils/ScriptDeclarationUtils.js.map +1 -0
- package/dist/utils/ServeUtils.js +10 -5
- package/dist/utils/ServeUtils.js.map +1 -1
- package/dist/utils/ShellUtils.d.ts +6 -0
- package/dist/utils/ShellUtils.js +13 -0
- package/dist/utils/ShellUtils.js.map +1 -1
- package/dist/utils/TemplateUtils.d.ts +62 -0
- package/dist/utils/TemplateUtils.js +218 -0
- package/dist/utils/TemplateUtils.js.map +1 -0
- package/dist/utils/TypeSchemaUtils.d.ts +42 -0
- package/dist/utils/TypeSchemaUtils.js +171 -0
- package/dist/utils/TypeSchemaUtils.js.map +1 -0
- package/package.json +3 -2
package/dist/utils/FileUtils.js
CHANGED
|
@@ -9,8 +9,9 @@ const path_1 = __importDefault(require("path"));
|
|
|
9
9
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
10
10
|
const os_1 = require("os");
|
|
11
11
|
const adm_zip_1 = __importDefault(require("adm-zip"));
|
|
12
|
+
const ignore_1 = __importDefault(require("ignore"));
|
|
12
13
|
class FileUtils {
|
|
13
|
-
static
|
|
14
|
+
static zipFolder(targetPath, zipFilePath) {
|
|
14
15
|
try {
|
|
15
16
|
targetPath = FileUtils.normalize(targetPath);
|
|
16
17
|
zipFilePath = FileUtils.normalize(zipFilePath);
|
|
@@ -35,15 +36,20 @@ class FileUtils {
|
|
|
35
36
|
return false;
|
|
36
37
|
}
|
|
37
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Returns the current OS path slash
|
|
41
|
+
* TODO: Use 'path' intead ?
|
|
42
|
+
*/
|
|
38
43
|
static slash() {
|
|
39
44
|
return (0, os_1.platform)() === 'win32' ? '\\' : '/';
|
|
40
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Fix path slashs depending on the current OS
|
|
48
|
+
* TODO: Use 'path' intead ?
|
|
49
|
+
*/
|
|
41
50
|
static normalize(path) {
|
|
42
|
-
if (path
|
|
51
|
+
if (!path)
|
|
43
52
|
return '';
|
|
44
|
-
if (path.startsWith("http")) {
|
|
45
|
-
return path.replaceAll('\\', '/');
|
|
46
|
-
}
|
|
47
53
|
let os = (0, os_1.platform)();
|
|
48
54
|
if (os === 'win32') {
|
|
49
55
|
path = path.replaceAll("/", '\\');
|
|
@@ -53,27 +59,52 @@ class FileUtils {
|
|
|
53
59
|
}
|
|
54
60
|
return path;
|
|
55
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Returns true if the specified path exists.
|
|
64
|
+
*/
|
|
56
65
|
static async exists(filePath) {
|
|
57
|
-
filePath = FileUtils.normalize(filePath);
|
|
58
66
|
try {
|
|
59
|
-
await fs_1.default.promises.access(filePath, fs_1.default.constants.F_OK);
|
|
67
|
+
await fs_1.default.promises.access(this.normalize(filePath), fs_1.default.constants.F_OK);
|
|
60
68
|
return true;
|
|
61
69
|
}
|
|
62
70
|
catch (e) {
|
|
63
71
|
return false;
|
|
64
72
|
}
|
|
65
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Reads a file and returns undefined if not exists (or other errors)
|
|
76
|
+
*/
|
|
66
77
|
static async readFileAsync(filePath) {
|
|
67
|
-
filePath =
|
|
68
|
-
|
|
78
|
+
filePath = this.normalize(filePath);
|
|
79
|
+
try {
|
|
80
|
+
return await fs_1.default.promises.readFile(filePath, { encoding: "utf-8" });
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
console.log(`Could not read file '${filePath}'.`, e);
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Reads a file that is allowed to be missing, without the error {@link FileUtils.readFileAsync} logs
|
|
89
|
+
*/
|
|
90
|
+
static async readFileIfExists(filePath) {
|
|
91
|
+
if (await this.exists(filePath) === false) {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
return await this.readFileAsync(filePath);
|
|
69
95
|
}
|
|
70
96
|
static async readJsonFileAsync(filePath) {
|
|
71
|
-
filePath =
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
97
|
+
filePath = this.normalize(filePath);
|
|
98
|
+
try {
|
|
99
|
+
const content = await fs_1.default.promises.readFile(filePath, { encoding: "utf-8" });
|
|
100
|
+
if (!content || content.trim() === '') {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
return JSON.parse(content);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return undefined;
|
|
75
107
|
}
|
|
76
|
-
return JSON.parse(content);
|
|
77
108
|
}
|
|
78
109
|
static writeFileSync(filePath, content) {
|
|
79
110
|
try {
|
|
@@ -90,35 +121,56 @@ class FileUtils {
|
|
|
90
121
|
return false;
|
|
91
122
|
}
|
|
92
123
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
124
|
+
/**
|
|
125
|
+
* Copy a folder to an destination path.
|
|
126
|
+
*/
|
|
127
|
+
static async copyFolder(folderPath, copyInto, ignoredFolderNames = []) {
|
|
128
|
+
folderPath = this.normalize(folderPath);
|
|
129
|
+
copyInto = this.normalize(copyInto);
|
|
99
130
|
if (!fs_extra_1.default.existsSync(copyInto)) {
|
|
100
131
|
// Create destination folder
|
|
101
132
|
fs_extra_1.default.mkdirSync(copyInto, { recursive: true });
|
|
102
133
|
}
|
|
134
|
+
// Compared as whole names, so that ignoring 'out' does not also drop 'layout/', 'about.tsx',
|
|
135
|
+
// nor every entry when the source itself lives under a folder named 'out'
|
|
136
|
+
const ignoredNames = new Set(ignoredFolderNames.map(name => this.toComparable(name)));
|
|
137
|
+
const rootPath = path_1.default.resolve(folderPath);
|
|
103
138
|
let options = {
|
|
104
139
|
recursive: true,
|
|
105
140
|
overwrite: true,
|
|
106
|
-
filter: (
|
|
141
|
+
filter: (source) => {
|
|
142
|
+
// The copied root is always kept, even when its own name is one of the ignored ones
|
|
143
|
+
if (path_1.default.resolve(source) === rootPath) {
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
if (!ignoredNames.has(this.toComparable(path_1.default.basename(source)))) {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
// Only folders are ignored: a file that happens to bear the same name is copied
|
|
151
|
+
return !fs_extra_1.default.lstatSync(source).isDirectory();
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
107
157
|
};
|
|
108
158
|
// if destination is a subdirectory of the copies folder we need to handle things differently
|
|
109
159
|
if (copyInto.includes(folderPath)) {
|
|
110
|
-
|
|
160
|
+
const destFolderName = this.toComparable(path_1.default.basename(copyInto));
|
|
111
161
|
// We cannot use copy directly on the root folder because it won't work "to" is a subdirectory of the root folder
|
|
112
|
-
|
|
113
|
-
for (
|
|
162
|
+
const entries = await fs_extra_1.default.readdir(folderPath, { withFileTypes: true });
|
|
163
|
+
for (const entry of entries) {
|
|
114
164
|
// Ignore destination if it is a subdirectory
|
|
115
|
-
if (
|
|
165
|
+
if (this.toComparable(entry.name) === destFolderName) {
|
|
116
166
|
continue;
|
|
117
|
-
|
|
118
|
-
|
|
167
|
+
}
|
|
168
|
+
// Or if it is one of the ignored folders
|
|
169
|
+
if (entry.isDirectory() && ignoredNames.has(this.toComparable(entry.name))) {
|
|
119
170
|
continue;
|
|
120
|
-
|
|
121
|
-
|
|
171
|
+
}
|
|
172
|
+
const from = path_1.default.join(folderPath, entry.name);
|
|
173
|
+
const to = path_1.default.join(copyInto, entry.name);
|
|
122
174
|
await fs_extra_1.default.copy(from, to, options);
|
|
123
175
|
}
|
|
124
176
|
}
|
|
@@ -126,41 +178,10 @@ class FileUtils {
|
|
|
126
178
|
await fs_extra_1.default.copy(folderPath, copyInto, options);
|
|
127
179
|
}
|
|
128
180
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
if (!fs_extra_1.default.existsSync(moveInto)) {
|
|
136
|
-
// Create destination folder
|
|
137
|
-
fs_extra_1.default.mkdirSync(moveInto, { recursive: true });
|
|
138
|
-
}
|
|
139
|
-
let options = {
|
|
140
|
-
overwrite: true
|
|
141
|
-
};
|
|
142
|
-
// if destination is a subdirectory of the copies folder we need to handle things differently
|
|
143
|
-
if (moveInto.includes(folderPath)) {
|
|
144
|
-
let destFolderName = path_1.default.basename(moveInto);
|
|
145
|
-
// We cannot use copy directly on the root folder because it won't work "to" is a subdirectory of the root folder
|
|
146
|
-
let files = await fs_extra_1.default.readdir(folderPath);
|
|
147
|
-
for (let f of files) {
|
|
148
|
-
// Ignore destination if it is a subdirectory
|
|
149
|
-
if (f === destFolderName)
|
|
150
|
-
continue;
|
|
151
|
-
// Or if it belongs to the ignored files/folders
|
|
152
|
-
if (ignoreFolders.some(folder => f === folder)) // ignore specified folders
|
|
153
|
-
continue;
|
|
154
|
-
let from = path_1.default.join(folderPath, f);
|
|
155
|
-
let to = path_1.default.join(moveInto, f);
|
|
156
|
-
await fs_extra_1.default.move(from, to, options);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
await fs_extra_1.default.move(folderPath, moveInto, options);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
static delete(path) {
|
|
181
|
+
/**
|
|
182
|
+
* Delete a file or a folder recursively
|
|
183
|
+
*/
|
|
184
|
+
static deleteRecursively(path) {
|
|
164
185
|
path = StringUtils_1.default.normalizePath(path);
|
|
165
186
|
if (fs_1.default.existsSync(path)) {
|
|
166
187
|
if (fs_1.default.lstatSync(path).isDirectory()) {
|
|
@@ -171,54 +192,123 @@ class FileUtils {
|
|
|
171
192
|
}
|
|
172
193
|
}
|
|
173
194
|
}
|
|
174
|
-
|
|
195
|
+
/**
|
|
196
|
+
* Lists every file under a path, recursively.
|
|
197
|
+
*
|
|
198
|
+
* The returned paths are absolute and use the separators of the current platform.
|
|
199
|
+
* Symbolic links are not followed, and a folder that cannot be read is skipped
|
|
200
|
+
* instead of aborting the whole walk.
|
|
201
|
+
*
|
|
202
|
+
* @param targetPath file or folder to walk. A file is returned alone, but is still filtered by the options.
|
|
203
|
+
* @param options filters to apply, all of them optional. An option left out filters nothing.
|
|
204
|
+
*/
|
|
205
|
+
static listFilesRecursively(targetPath, options) {
|
|
206
|
+
const filters = this.createFileFilters(options);
|
|
175
207
|
try {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (isDirectory) {
|
|
179
|
-
if (
|
|
208
|
+
// Absolute so that the results can be compared with the absolute paths of the options
|
|
209
|
+
targetPath = this.normalize(path_1.default.resolve(targetPath));
|
|
210
|
+
if (fs_1.default.lstatSync(targetPath).isDirectory()) {
|
|
211
|
+
if (this.isIgnoredFolder(targetPath, filters)) {
|
|
180
212
|
return [];
|
|
181
213
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
return [path];
|
|
214
|
+
const results = [];
|
|
215
|
+
this.collectFiles(targetPath, filters, results);
|
|
216
|
+
return results;
|
|
186
217
|
}
|
|
218
|
+
return this.isIgnoredFile(targetPath, filters) ? [] : [targetPath];
|
|
187
219
|
}
|
|
188
220
|
catch {
|
|
221
|
+
// Missing path, or not enough rights to stat it
|
|
189
222
|
return [];
|
|
190
223
|
}
|
|
191
224
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
225
|
+
/**
|
|
226
|
+
* Walks a folder and appends its files to `results`
|
|
227
|
+
*/
|
|
228
|
+
static collectFiles(folderPath, filters, results) {
|
|
229
|
+
let entries;
|
|
230
|
+
try {
|
|
231
|
+
entries = fs_1.default.readdirSync(folderPath, { withFileTypes: true });
|
|
196
232
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
else {
|
|
207
|
-
arrayOfFiles = this.getAllFiles(nextPath, ignoreFolders, arrayOfFiles, (level ?? 0) + 1);
|
|
233
|
+
catch {
|
|
234
|
+
// An unreadable folder must not abort the walk of its siblings
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
for (const entry of entries) {
|
|
238
|
+
const entryPath = this.normalize(path_1.default.join(folderPath, entry.name));
|
|
239
|
+
if (entry.isDirectory()) {
|
|
240
|
+
if (!this.isIgnoredFolder(entryPath, filters)) {
|
|
241
|
+
this.collectFiles(entryPath, filters, results);
|
|
208
242
|
}
|
|
209
243
|
}
|
|
210
|
-
else {
|
|
211
|
-
|
|
244
|
+
else if (!this.isIgnoredFile(entryPath, filters)) {
|
|
245
|
+
results.push(entryPath);
|
|
212
246
|
}
|
|
213
247
|
}
|
|
214
|
-
return arrayOfFiles;
|
|
215
248
|
}
|
|
216
|
-
|
|
249
|
+
/**
|
|
250
|
+
* Prepares the options once, so that the comparisons of the walk are simple lookups
|
|
251
|
+
*/
|
|
252
|
+
static createFileFilters(options) {
|
|
253
|
+
return {
|
|
254
|
+
folderNames: new Set((options?.ignoredFolderNames ?? []).map(name => this.toComparable(name))),
|
|
255
|
+
folderPaths: new Set((options?.ignoredFolderPaths ?? []).map(folderPath => this.toComparablePath(folderPath))),
|
|
256
|
+
fileNames: new Set((options?.ignoredFileNames ?? []).map(name => this.toComparable(name))),
|
|
257
|
+
filePaths: new Set((options?.ignoredFilePaths ?? []).map(filePath => this.toComparablePath(filePath))),
|
|
258
|
+
// Kept as suffixes ('.ts', '.i18n.csv'), the dot being optional in the option itself
|
|
259
|
+
extensions: (options?.fileExtensions ?? []).map(extension => {
|
|
260
|
+
const comparable = this.toComparable(extension);
|
|
261
|
+
return comparable.startsWith('.') ? comparable : `.${comparable}`;
|
|
262
|
+
})
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
static isIgnoredFolder(folderPath, filters) {
|
|
266
|
+
return filters.folderNames.has(this.toComparable(this.getNameFromPath(folderPath)))
|
|
267
|
+
|| filters.folderPaths.has(this.toComparablePath(folderPath));
|
|
268
|
+
}
|
|
269
|
+
static isIgnoredFile(filePath, filters) {
|
|
270
|
+
if (filters.fileNames.has(this.toComparable(this.getNameFromPath(filePath)))) {
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
if (filters.filePaths.has(this.toComparablePath(filePath))) {
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
// Compared on the whole name so that composed extensions work too ('.i18n.csv', '.manifest.json').
|
|
277
|
+
// An empty list keeps every file, a file without extension never matches a non empty list.
|
|
278
|
+
if (filters.extensions.length > 0) {
|
|
279
|
+
const fileName = this.toComparable(this.getNameFromPath(filePath));
|
|
280
|
+
if (!filters.extensions.some(extension => fileName.endsWith(extension))) {
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Windows paths are case insensitive, posix ones are not
|
|
288
|
+
*/
|
|
289
|
+
static toComparable(value) {
|
|
290
|
+
return (0, os_1.platform)() === 'win32' ? value.toLowerCase() : value;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Comparable form of a path: separators of the platform, no trailing separator
|
|
294
|
+
*/
|
|
295
|
+
static toComparablePath(value) {
|
|
296
|
+
return this.toComparable(this.normalize(value).replace(/[\\/]+$/, ''));
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Return the folder or file name from a path.
|
|
300
|
+
*/
|
|
301
|
+
static getNameFromPath(path, removeExtensions = false) {
|
|
217
302
|
path = path.replaceAll('\\', '/');
|
|
218
|
-
|
|
219
|
-
|
|
303
|
+
let result = path;
|
|
304
|
+
if (result.includes('/')) {
|
|
305
|
+
result = result.split('/').pop();
|
|
220
306
|
}
|
|
221
|
-
|
|
307
|
+
if (removeExtensions && result.includes('.')) {
|
|
308
|
+
const dotIndex = result.lastIndexOf('.');
|
|
309
|
+
result = result.substring(0, dotIndex);
|
|
310
|
+
}
|
|
311
|
+
return result;
|
|
222
312
|
}
|
|
223
313
|
/**
|
|
224
314
|
* Returns the extension excluding the dot. Or an empty string if the name doesn't contains dot.
|
|
@@ -234,14 +324,109 @@ class FileUtils {
|
|
|
234
324
|
return '';
|
|
235
325
|
}
|
|
236
326
|
}
|
|
237
|
-
|
|
238
|
-
|
|
327
|
+
/** Folders that are never worth walking, whatever the workspace declares */
|
|
328
|
+
static ALWAYS_IGNORED_FOLDER_NAMES = [
|
|
329
|
+
'node_modules',
|
|
330
|
+
'.codenotch',
|
|
331
|
+
'.git',
|
|
332
|
+
'.vscode',
|
|
333
|
+
'.claude',
|
|
334
|
+
'.github'
|
|
335
|
+
];
|
|
336
|
+
/**
|
|
337
|
+
* Absolute paths of the folders that should not be walked in a workspace: the usual suspects
|
|
338
|
+
* (node_modules, .git, ...), those ignored by its '.gitignore' and those excluded by its 'tsconfig.json'.
|
|
339
|
+
*
|
|
340
|
+
* Gitignore patterns are recursive, so the folders are looked up at any depth ('src/generated/' is
|
|
341
|
+
* reported), but an ignored folder is never entered.
|
|
342
|
+
*
|
|
343
|
+
* Meant to feed the 'ignoredFolderPaths' option of {@link FileUtils.listFilesRecursively}.
|
|
344
|
+
*/
|
|
345
|
+
static async getIgnoredFolderPaths(workspacePath) {
|
|
346
|
+
workspacePath = this.normalize(path_1.default.resolve(workspacePath));
|
|
347
|
+
const results = this.ALWAYS_IGNORED_FOLDER_NAMES
|
|
348
|
+
.map(name => this.normalize(path_1.default.join(workspacePath, name)));
|
|
349
|
+
// .gitignore
|
|
350
|
+
const gitignore = await this.readFileIfExists(path_1.default.join(workspacePath, '.gitignore'));
|
|
351
|
+
if (gitignore) {
|
|
352
|
+
this.collectIgnoredFolders(workspacePath, workspacePath, (0, ignore_1.default)().add(gitignore), results);
|
|
353
|
+
}
|
|
354
|
+
// tsconfig.json
|
|
355
|
+
const tsconfig = await this.readFileIfExists(path_1.default.join(workspacePath, 'tsconfig.json'));
|
|
356
|
+
if (tsconfig) {
|
|
357
|
+
for (const excluded of this.getExcludedFolders(tsconfig)) {
|
|
358
|
+
results.push(this.normalize(path_1.default.join(workspacePath, excluded)));
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return [...new Set(results)];
|
|
239
362
|
}
|
|
240
363
|
/**
|
|
241
|
-
*
|
|
242
|
-
*
|
|
364
|
+
* Walks the folders of a workspace and collects those matching the gitignore patterns.
|
|
365
|
+
* An ignored folder is reported but not entered, so its content costs nothing.
|
|
243
366
|
*/
|
|
244
|
-
static
|
|
367
|
+
static collectIgnoredFolders(workspacePath, folderPath, matcher, results) {
|
|
368
|
+
let entries;
|
|
369
|
+
try {
|
|
370
|
+
entries = fs_1.default.readdirSync(folderPath, { withFileTypes: true });
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
// An unreadable folder must not abort the walk of its siblings
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
for (const entry of entries) {
|
|
377
|
+
// isDirectory() is false for a symbolic link, which keeps this walk free of cycles
|
|
378
|
+
if (!entry.isDirectory()) {
|
|
379
|
+
continue;
|
|
380
|
+
}
|
|
381
|
+
const childPath = path_1.default.join(folderPath, entry.name);
|
|
382
|
+
if (this.ALWAYS_IGNORED_FOLDER_NAMES.includes(this.toComparable(entry.name))) {
|
|
383
|
+
results.push(this.normalize(childPath));
|
|
384
|
+
continue;
|
|
385
|
+
}
|
|
386
|
+
// 'ignore' expects a path relative to the workspace, with posix separators and a trailing slash for a folder
|
|
387
|
+
const relativePath = path_1.default.relative(workspacePath, childPath).replaceAll('\\', '/');
|
|
388
|
+
if (matcher.ignores(`${relativePath}/`)) {
|
|
389
|
+
results.push(this.normalize(childPath));
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
this.collectIgnoredFolders(workspacePath, childPath, matcher, results);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Folders designated by the "exclude" of a tsconfig, relative to the workspace.
|
|
398
|
+
* 'dist', './dist', 'dist/**' and '**\/dist' all give 'dist', while entries that do not
|
|
399
|
+
* designate a folder ('**\/*.test.ts', '*.tmp', '**') are dropped.
|
|
400
|
+
*/
|
|
401
|
+
static getExcludedFolders(tsconfigContent) {
|
|
402
|
+
let exclude;
|
|
403
|
+
try {
|
|
404
|
+
exclude = JSON.parse(tsconfigContent)?.exclude;
|
|
405
|
+
}
|
|
406
|
+
catch {
|
|
407
|
+
// A tsconfig that does not even parse is not this function's problem
|
|
408
|
+
return [];
|
|
409
|
+
}
|
|
410
|
+
if (!Array.isArray(exclude)) {
|
|
411
|
+
return [];
|
|
412
|
+
}
|
|
413
|
+
const folders = [];
|
|
414
|
+
for (const entry of exclude) {
|
|
415
|
+
if (typeof entry !== 'string') {
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
const folder = entry.trim()
|
|
419
|
+
.replaceAll('\\', '/')
|
|
420
|
+
.replace(/^\.\//, '') // './dist'
|
|
421
|
+
.replace(/^\*\*\//, '') // '**/dist'
|
|
422
|
+
.replace(/\/\*{1,2}$/, '') // 'dist/**'
|
|
423
|
+
.replace(/\/+$/, ''); // 'dist/'
|
|
424
|
+
// What remains must designate a folder of the workspace: no glob and no escape from the workspace
|
|
425
|
+
if (folder !== '' && !/[*?]/.test(folder) && !folder.split('/').includes('..')) {
|
|
426
|
+
folders.push(folder);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
return folders;
|
|
245
430
|
}
|
|
246
431
|
}
|
|
247
432
|
exports.default = FileUtils;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileUtils.js","sourceRoot":"","sources":["../../src/utils/FileUtils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FileUtils.js","sourceRoot":"","sources":["../../src/utils/FileUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One row of a *.i18n.csv: its key, plus one property per language column.
|
|
3
|
+
* Declared here since the core no longer ships an i18n compiler.
|
|
4
|
+
*/
|
|
5
|
+
export interface ILocalizationEntry {
|
|
6
|
+
key: string;
|
|
7
|
+
[lang: string]: string;
|
|
8
|
+
}
|
|
9
|
+
export interface I18nTsGenerationResult {
|
|
10
|
+
content: string;
|
|
11
|
+
warnings: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generate an importable TypeScript class from the entries of a *.i18n.csv file.
|
|
15
|
+
*
|
|
16
|
+
* The generated class exposes one static method per translation key, e.g. for:
|
|
17
|
+
* key,en,de
|
|
18
|
+
* ,,
|
|
19
|
+
* userWelcome,hello,hallo
|
|
20
|
+
* hiMr,hello mister {0},hallo herr {0}
|
|
21
|
+
* we get `hello.userWelcome()` and `hello.hiMr(arg1)`.
|
|
22
|
+
*
|
|
23
|
+
* The file is fully regenerated on each run, it must not be edited by hand.
|
|
24
|
+
*/
|
|
25
|
+
export default abstract class I18nTsUtils {
|
|
26
|
+
private static readonly RESERVED_MEMBERS;
|
|
27
|
+
private static readonly PLACEHOLDER_REGEX;
|
|
28
|
+
private static readonly INDENT;
|
|
29
|
+
/**
|
|
30
|
+
* Converts a *.i18n.csv file name (or path) into a valid class name, e.g. 'src/hello.i18n.csv' => 'hello'
|
|
31
|
+
*/
|
|
32
|
+
static getClassName(fileNameOrPath: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Keeps only the real translation entries of a parsed csv: the rows without key are ignored
|
|
35
|
+
* (the csv may still contain a leading empty row, kept for readability).
|
|
36
|
+
*/
|
|
37
|
+
static getEntries(lines: ILocalizationEntry[]): ILocalizationEntry[];
|
|
38
|
+
/**
|
|
39
|
+
* Generates the TypeScript class.
|
|
40
|
+
* @param className name of the generated class
|
|
41
|
+
* @param sourceFileName name of the *.i18n.csv the class is generated from (mentioned in the file header)
|
|
42
|
+
* @param entries translation entries (see getEntries)
|
|
43
|
+
*/
|
|
44
|
+
static generate(className: string, sourceFileName: string, entries: ILocalizationEntry[]): I18nTsGenerationResult;
|
|
45
|
+
/**
|
|
46
|
+
* Languages in csv column order (every column except 'key', papaparse internals are ignored)
|
|
47
|
+
*/
|
|
48
|
+
static getLanguages(entries: ILocalizationEntry[]): string[];
|
|
49
|
+
private static generateValuesBlock;
|
|
50
|
+
private static generateMethodsBlock;
|
|
51
|
+
/**
|
|
52
|
+
* Number of arguments needed by a translation: highest {n} placeholder + 1 over all languages
|
|
53
|
+
*/
|
|
54
|
+
private static getArgCount;
|
|
55
|
+
/**
|
|
56
|
+
* Makes a translation value safe inside a JSDoc comment: single line, no comment terminator
|
|
57
|
+
*/
|
|
58
|
+
private static toCommentText;
|
|
59
|
+
private static toIdentifier;
|
|
60
|
+
/**
|
|
61
|
+
* Header written at the top of the generated file
|
|
62
|
+
*/
|
|
63
|
+
private static generateHeader;
|
|
64
|
+
private static getCliVersion;
|
|
65
|
+
private static generateTemplate;
|
|
66
|
+
}
|