@kubb/core 3.0.0-alpha.3 → 3.0.0-alpha.5
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/dist/{FileManager-BW--rO8q.d.ts → FileManager-jZpqETKU.d.cts} +15 -20
- package/dist/{FileManager-Bw-FNS3q.d.cts → FileManager-tzl0YsYE.d.ts} +15 -20
- package/dist/{chunk-SA2GZKXS.js → chunk-CEWT73XF.js} +110 -69
- package/dist/chunk-CEWT73XF.js.map +1 -0
- package/dist/{chunk-ADC5UNZ5.cjs → chunk-FWU62YO5.cjs} +319 -281
- package/dist/chunk-FWU62YO5.cjs.map +1 -0
- package/dist/{chunk-LM2YQC3T.cjs → chunk-RBP2ASUX.cjs} +38 -23
- package/dist/chunk-RBP2ASUX.cjs.map +1 -0
- package/dist/{chunk-3OXCZ5DJ.js → chunk-Z5CHJQJB.js} +29 -21
- package/dist/chunk-Z5CHJQJB.js.map +1 -0
- package/dist/index.cjs +43 -130
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -15
- package/dist/index.d.ts +4 -15
- package/dist/index.js +25 -105
- package/dist/index.js.map +1 -1
- package/dist/{logger-DChjnJMn.d.cts → logger-BnWJh6Yq.d.cts} +17 -19
- package/dist/{logger-DChjnJMn.d.ts → logger-BnWJh6Yq.d.ts} +17 -19
- package/dist/logger.cjs +3 -4
- package/dist/logger.cjs.map +1 -1
- package/dist/logger.d.cts +2 -2
- package/dist/logger.d.ts +2 -2
- package/dist/logger.js +2 -3
- package/dist/mocks.cjs +3 -3
- package/dist/mocks.cjs.map +1 -1
- package/dist/mocks.d.cts +2 -4
- package/dist/mocks.d.ts +2 -4
- package/dist/mocks.js +4 -4
- package/dist/mocks.js.map +1 -1
- package/package.json +7 -8
- package/src/BarrelManager.ts +10 -1
- package/src/FileManager.ts +107 -63
- package/src/PluginManager.ts +6 -22
- package/src/build.ts +19 -101
- package/src/errors.ts +0 -11
- package/src/index.ts +0 -1
- package/src/logger.ts +43 -33
- package/dist/chunk-3OXCZ5DJ.js.map +0 -1
- package/dist/chunk-ADC5UNZ5.cjs.map +0 -1
- package/dist/chunk-LM2YQC3T.cjs.map +0 -1
- package/dist/chunk-SA2GZKXS.js.map +0 -1
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import PQueue from 'p-queue';
|
|
2
1
|
import { write, read } from '@kubb/fs';
|
|
3
2
|
import * as KubbFile from '@kubb/fs/types';
|
|
4
3
|
import { BaseName, File, UUID } from '@kubb/fs/src/types.ts';
|
|
5
4
|
import { PossiblePromise, GreaterThan } from '@kubb/types';
|
|
6
5
|
import { DirectoryTreeOptions } from 'directory-tree';
|
|
7
|
-
import { E as EventEmitter, L as Logger } from './logger-
|
|
6
|
+
import { E as EventEmitter, L as Logger } from './logger-BnWJh6Yq.cjs';
|
|
8
7
|
|
|
9
8
|
type BarrelManagerOptions = {
|
|
10
9
|
treeNode?: DirectoryTreeOptions;
|
|
@@ -34,12 +33,8 @@ type SafeParseResult<H extends PluginLifecycleHooks, Result = ReturnType<ParseRe
|
|
|
34
33
|
result: Result;
|
|
35
34
|
plugin: Plugin;
|
|
36
35
|
};
|
|
37
|
-
type Options
|
|
36
|
+
type Options = {
|
|
38
37
|
logger: Logger;
|
|
39
|
-
/**
|
|
40
|
-
* Task for the FileManager
|
|
41
|
-
*/
|
|
42
|
-
task: (file: ResolvedFile) => Promise<ResolvedFile>;
|
|
43
38
|
};
|
|
44
39
|
type Events = {
|
|
45
40
|
execute: [executer: Executer];
|
|
@@ -61,8 +56,7 @@ declare class PluginManager {
|
|
|
61
56
|
readonly config: Config;
|
|
62
57
|
readonly executed: Array<Executer>;
|
|
63
58
|
readonly logger: Logger;
|
|
64
|
-
|
|
65
|
-
constructor(config: Config, options: Options$1);
|
|
59
|
+
constructor(config: Config, options: Options);
|
|
66
60
|
getFile<TOptions = object>({ name, mode, extName, pluginKey, options }: GetFileProps<TOptions>): KubbFile.File<{
|
|
67
61
|
pluginKey: Plugin['key'];
|
|
68
62
|
}>;
|
|
@@ -409,29 +403,30 @@ type AddIndexesProps = {
|
|
|
409
403
|
};
|
|
410
404
|
logger: Logger;
|
|
411
405
|
options?: BarrelManagerOptions;
|
|
412
|
-
|
|
413
|
-
};
|
|
414
|
-
type Options = {
|
|
415
|
-
queue?: PQueue;
|
|
416
|
-
task?: (file: ResolvedFile) => Promise<ResolvedFile>;
|
|
406
|
+
plugin: Plugin;
|
|
417
407
|
};
|
|
418
408
|
declare class FileManager {
|
|
419
409
|
#private;
|
|
420
|
-
constructor(
|
|
410
|
+
constructor();
|
|
421
411
|
get files(): Array<FileWithMeta>;
|
|
422
|
-
get isExecuting(): boolean;
|
|
423
412
|
add<T extends Array<FileWithMeta> = Array<FileWithMeta>>(...files: T): AddResult<T>;
|
|
424
|
-
|
|
413
|
+
getIndexFiles({ plugin, root, output, logger, options }: AddIndexesProps): Promise<ResolvedFile[]>;
|
|
425
414
|
getCacheByUUID(UUID: KubbFile.UUID): FileWithMeta | undefined;
|
|
426
415
|
get(path: KubbFile.Path): Array<FileWithMeta> | undefined;
|
|
427
416
|
remove(path: KubbFile.Path): void;
|
|
428
|
-
write(...params: Parameters<typeof write>):
|
|
429
|
-
read(...params: Parameters<typeof read>):
|
|
430
|
-
|
|
417
|
+
write(...params: Parameters<typeof write>): ReturnType<typeof write>;
|
|
418
|
+
read(...params: Parameters<typeof read>): ReturnType<typeof read>;
|
|
419
|
+
processFiles(...params: Parameters<typeof processFiles>): ReturnType<typeof processFiles>;
|
|
431
420
|
static combineFiles<TMeta extends FileMetaBase = FileMetaBase>(files: Array<FileWithMeta<TMeta> | null>): Array<FileWithMeta<TMeta>>;
|
|
432
421
|
static getMode(path: string | undefined | null): KubbFile.Mode;
|
|
433
422
|
static get extensions(): Array<KubbFile.Extname>;
|
|
434
423
|
static isJavascript(baseName: string): boolean;
|
|
435
424
|
}
|
|
425
|
+
type WriteFilesProps = {
|
|
426
|
+
files: KubbFile.File[];
|
|
427
|
+
logger: Logger;
|
|
428
|
+
dryRun?: boolean;
|
|
429
|
+
};
|
|
430
|
+
declare function processFiles({ dryRun, logger, files }: WriteFilesProps): Promise<KubbFile.File<FileMetaBase>[]>;
|
|
436
431
|
|
|
437
432
|
export { type Config as C, FileManager as F, type GetPluginFactoryOptions as G, type InputPath as I, type PluginContext as P, type ResolvePathParams as R, type UserConfig as U, PluginManager as a, type PluginFactoryOptions as b, type UserPluginWithLifeCycle as c, type FileMetaBase as d, type InputData as e, type PluginKey as f, type UserPlugin as g, type Plugin as h, type PluginWithLifeCycle as i, type PluginLifecycle as j, type PluginLifecycleHooks as k, type PluginParameter as l, type PluginCache as m, type ResolveNameParams as n };
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import PQueue from 'p-queue';
|
|
2
1
|
import { write, read } from '@kubb/fs';
|
|
3
2
|
import * as KubbFile from '@kubb/fs/types';
|
|
4
3
|
import { BaseName, File, UUID } from '@kubb/fs/src/types.ts';
|
|
5
4
|
import { PossiblePromise, GreaterThan } from '@kubb/types';
|
|
6
5
|
import { DirectoryTreeOptions } from 'directory-tree';
|
|
7
|
-
import { E as EventEmitter, L as Logger } from './logger-
|
|
6
|
+
import { E as EventEmitter, L as Logger } from './logger-BnWJh6Yq.js';
|
|
8
7
|
|
|
9
8
|
type BarrelManagerOptions = {
|
|
10
9
|
treeNode?: DirectoryTreeOptions;
|
|
@@ -34,12 +33,8 @@ type SafeParseResult<H extends PluginLifecycleHooks, Result = ReturnType<ParseRe
|
|
|
34
33
|
result: Result;
|
|
35
34
|
plugin: Plugin;
|
|
36
35
|
};
|
|
37
|
-
type Options
|
|
36
|
+
type Options = {
|
|
38
37
|
logger: Logger;
|
|
39
|
-
/**
|
|
40
|
-
* Task for the FileManager
|
|
41
|
-
*/
|
|
42
|
-
task: (file: ResolvedFile) => Promise<ResolvedFile>;
|
|
43
38
|
};
|
|
44
39
|
type Events = {
|
|
45
40
|
execute: [executer: Executer];
|
|
@@ -61,8 +56,7 @@ declare class PluginManager {
|
|
|
61
56
|
readonly config: Config;
|
|
62
57
|
readonly executed: Array<Executer>;
|
|
63
58
|
readonly logger: Logger;
|
|
64
|
-
|
|
65
|
-
constructor(config: Config, options: Options$1);
|
|
59
|
+
constructor(config: Config, options: Options);
|
|
66
60
|
getFile<TOptions = object>({ name, mode, extName, pluginKey, options }: GetFileProps<TOptions>): KubbFile.File<{
|
|
67
61
|
pluginKey: Plugin['key'];
|
|
68
62
|
}>;
|
|
@@ -409,29 +403,30 @@ type AddIndexesProps = {
|
|
|
409
403
|
};
|
|
410
404
|
logger: Logger;
|
|
411
405
|
options?: BarrelManagerOptions;
|
|
412
|
-
|
|
413
|
-
};
|
|
414
|
-
type Options = {
|
|
415
|
-
queue?: PQueue;
|
|
416
|
-
task?: (file: ResolvedFile) => Promise<ResolvedFile>;
|
|
406
|
+
plugin: Plugin;
|
|
417
407
|
};
|
|
418
408
|
declare class FileManager {
|
|
419
409
|
#private;
|
|
420
|
-
constructor(
|
|
410
|
+
constructor();
|
|
421
411
|
get files(): Array<FileWithMeta>;
|
|
422
|
-
get isExecuting(): boolean;
|
|
423
412
|
add<T extends Array<FileWithMeta> = Array<FileWithMeta>>(...files: T): AddResult<T>;
|
|
424
|
-
|
|
413
|
+
getIndexFiles({ plugin, root, output, logger, options }: AddIndexesProps): Promise<ResolvedFile[]>;
|
|
425
414
|
getCacheByUUID(UUID: KubbFile.UUID): FileWithMeta | undefined;
|
|
426
415
|
get(path: KubbFile.Path): Array<FileWithMeta> | undefined;
|
|
427
416
|
remove(path: KubbFile.Path): void;
|
|
428
|
-
write(...params: Parameters<typeof write>):
|
|
429
|
-
read(...params: Parameters<typeof read>):
|
|
430
|
-
|
|
417
|
+
write(...params: Parameters<typeof write>): ReturnType<typeof write>;
|
|
418
|
+
read(...params: Parameters<typeof read>): ReturnType<typeof read>;
|
|
419
|
+
processFiles(...params: Parameters<typeof processFiles>): ReturnType<typeof processFiles>;
|
|
431
420
|
static combineFiles<TMeta extends FileMetaBase = FileMetaBase>(files: Array<FileWithMeta<TMeta> | null>): Array<FileWithMeta<TMeta>>;
|
|
432
421
|
static getMode(path: string | undefined | null): KubbFile.Mode;
|
|
433
422
|
static get extensions(): Array<KubbFile.Extname>;
|
|
434
423
|
static isJavascript(baseName: string): boolean;
|
|
435
424
|
}
|
|
425
|
+
type WriteFilesProps = {
|
|
426
|
+
files: KubbFile.File[];
|
|
427
|
+
logger: Logger;
|
|
428
|
+
dryRun?: boolean;
|
|
429
|
+
};
|
|
430
|
+
declare function processFiles({ dryRun, logger, files }: WriteFilesProps): Promise<KubbFile.File<FileMetaBase>[]>;
|
|
436
431
|
|
|
437
432
|
export { type Config as C, FileManager as F, type GetPluginFactoryOptions as G, type InputPath as I, type PluginContext as P, type ResolvePathParams as R, type UserConfig as U, PluginManager as a, type PluginFactoryOptions as b, type UserPluginWithLifeCycle as c, type FileMetaBase as d, type InputData as e, type PluginKey as f, type UserPlugin as g, type Plugin as h, type PluginWithLifeCycle as i, type PluginLifecycle as j, type PluginLifecycleHooks as k, type PluginParameter as l, type PluginCache as m, type ResolveNameParams as n };
|
|
@@ -18,8 +18,7 @@ import {
|
|
|
18
18
|
|
|
19
19
|
// src/FileManager.ts
|
|
20
20
|
import crypto from "crypto";
|
|
21
|
-
import { extname, resolve } from "path";
|
|
22
|
-
import PQueue from "p-queue";
|
|
21
|
+
import path2, { extname, resolve } from "path";
|
|
23
22
|
import { isDeepEqual } from "remeda";
|
|
24
23
|
import { getRelativePath, read, write } from "@kubb/fs";
|
|
25
24
|
|
|
@@ -91,10 +90,10 @@ var TreeNode = class _TreeNode {
|
|
|
91
90
|
}
|
|
92
91
|
return this;
|
|
93
92
|
}
|
|
94
|
-
static build(
|
|
93
|
+
static build(path3, options = {}) {
|
|
95
94
|
try {
|
|
96
95
|
const exclude = Array.isArray(options.exclude) ? options.exclude : [options.exclude].filter(Boolean);
|
|
97
|
-
const filteredTree = dirTree(
|
|
96
|
+
const filteredTree = dirTree(path3, {
|
|
98
97
|
extensions: options.extensions,
|
|
99
98
|
exclude: [/node_modules/, ...exclude]
|
|
100
99
|
});
|
|
@@ -134,12 +133,16 @@ var BarrelManager = class {
|
|
|
134
133
|
__privateSet(this, _options, options);
|
|
135
134
|
return this;
|
|
136
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Loop through the file and find all exports(with the help of the ts printer)
|
|
138
|
+
* Important: a real file is needed(cannot work from memory/FileManager)
|
|
139
|
+
*/
|
|
137
140
|
getNamedExport(root, item) {
|
|
138
141
|
const exportedNames = getExports(path.resolve(root, item.path));
|
|
139
142
|
if (!exportedNames) {
|
|
140
143
|
return [item];
|
|
141
144
|
}
|
|
142
|
-
|
|
145
|
+
const exports = exportedNames.reduce(
|
|
143
146
|
(prev, curr) => {
|
|
144
147
|
if (!prev[0]?.name || !prev[1]?.name) {
|
|
145
148
|
return prev;
|
|
@@ -164,6 +167,7 @@ var BarrelManager = class {
|
|
|
164
167
|
}
|
|
165
168
|
]
|
|
166
169
|
);
|
|
170
|
+
return exports;
|
|
167
171
|
}
|
|
168
172
|
getNamedExports(root, exports) {
|
|
169
173
|
return exports?.flatMap((item) => {
|
|
@@ -228,15 +232,12 @@ var BarrelManager = class {
|
|
|
228
232
|
_options = new WeakMap();
|
|
229
233
|
|
|
230
234
|
// src/FileManager.ts
|
|
231
|
-
|
|
235
|
+
import PQueue from "p-queue";
|
|
236
|
+
var _cache, _FileManager_instances, add_fn, addOrAppend_fn;
|
|
232
237
|
var _FileManager = class _FileManager {
|
|
233
|
-
constructor(
|
|
238
|
+
constructor() {
|
|
234
239
|
__privateAdd(this, _FileManager_instances);
|
|
235
240
|
__privateAdd(this, _cache, /* @__PURE__ */ new Map());
|
|
236
|
-
__privateAdd(this, _task);
|
|
237
|
-
__privateAdd(this, _queue);
|
|
238
|
-
__privateSet(this, _task, task);
|
|
239
|
-
__privateSet(this, _queue, queue);
|
|
240
241
|
return this;
|
|
241
242
|
}
|
|
242
243
|
get files() {
|
|
@@ -246,9 +247,6 @@ var _FileManager = class _FileManager {
|
|
|
246
247
|
});
|
|
247
248
|
return files;
|
|
248
249
|
}
|
|
249
|
-
get isExecuting() {
|
|
250
|
-
return __privateGet(this, _queue).size !== 0 && __privateGet(this, _queue).pending !== 0;
|
|
251
|
-
}
|
|
252
250
|
async add(...files) {
|
|
253
251
|
const promises = combineFiles(files).map((file) => {
|
|
254
252
|
if (file.override) {
|
|
@@ -262,15 +260,15 @@ var _FileManager = class _FileManager {
|
|
|
262
260
|
}
|
|
263
261
|
return resolvedFiles[0];
|
|
264
262
|
}
|
|
265
|
-
async
|
|
263
|
+
async getIndexFiles({ plugin, root, output, logger, options = {} }) {
|
|
266
264
|
const { exportType = "barrel" } = output;
|
|
267
265
|
if (exportType === false) {
|
|
268
|
-
return
|
|
266
|
+
return [];
|
|
269
267
|
}
|
|
270
268
|
const pathToBuildFrom = resolve(root, output.path);
|
|
271
269
|
if (transformers_default.trimExtName(pathToBuildFrom).endsWith("index")) {
|
|
272
270
|
logger.emit("warning", "Output has the same fileName as the barrelFiles, please disable barrel generation");
|
|
273
|
-
return;
|
|
271
|
+
return [];
|
|
274
272
|
}
|
|
275
273
|
const exportPath = output.path.startsWith("./") ? trimExtName(output.path) : `./${trimExtName(output.path)}`;
|
|
276
274
|
const mode = _FileManager.getMode(output.path);
|
|
@@ -280,27 +278,8 @@ var _FileManager = class _FileManager {
|
|
|
280
278
|
});
|
|
281
279
|
let files = barrelManager.getIndexes(pathToBuildFrom);
|
|
282
280
|
if (!files) {
|
|
283
|
-
return
|
|
281
|
+
return [];
|
|
284
282
|
}
|
|
285
|
-
if (exportType === "barrelNamed") {
|
|
286
|
-
files = files.map((file) => {
|
|
287
|
-
if (file.exports) {
|
|
288
|
-
return {
|
|
289
|
-
...file,
|
|
290
|
-
exports: barrelManager.getNamedExports(pathToBuildFrom, file.exports)
|
|
291
|
-
};
|
|
292
|
-
}
|
|
293
|
-
return file;
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
await Promise.all(
|
|
297
|
-
files.map((file) => {
|
|
298
|
-
return __privateMethod(this, _FileManager_instances, addOrAppend_fn).call(this, {
|
|
299
|
-
...file,
|
|
300
|
-
meta: meta ? meta : file.meta
|
|
301
|
-
});
|
|
302
|
-
})
|
|
303
|
-
);
|
|
304
283
|
const rootPath = mode === "split" ? `${exportPath}/index${output.extName || ""}` : `${exportPath}${output.extName || ""}`;
|
|
305
284
|
const rootFile = {
|
|
306
285
|
path: resolve(root, "index.ts"),
|
|
@@ -319,13 +298,49 @@ var _FileManager = class _FileManager {
|
|
|
319
298
|
],
|
|
320
299
|
exportable: true
|
|
321
300
|
};
|
|
322
|
-
if (exportType === "barrelNamed"
|
|
323
|
-
|
|
301
|
+
if (exportType === "barrelNamed") {
|
|
302
|
+
files = files.map((file) => {
|
|
303
|
+
if (file.exports) {
|
|
304
|
+
return {
|
|
305
|
+
...file,
|
|
306
|
+
exports: barrelManager.getNamedExports(pathToBuildFrom, file.exports)
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
return file;
|
|
310
|
+
});
|
|
311
|
+
const barrelExportRoot = rootFile.exports?.[0];
|
|
312
|
+
if (!output.exportAs && barrelExportRoot) {
|
|
313
|
+
const exportFile = files.find((file) => {
|
|
314
|
+
return trimExtName(file.path) === path2.resolve(root, barrelExportRoot.path);
|
|
315
|
+
});
|
|
316
|
+
if (exportFile?.exports) {
|
|
317
|
+
rootFile.exports = exportFile.exports.map((exportItem) => {
|
|
318
|
+
return {
|
|
319
|
+
...exportItem,
|
|
320
|
+
path: getRelativePath(rootFile.path, exportFile.path)
|
|
321
|
+
};
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
}
|
|
324
325
|
}
|
|
325
|
-
|
|
326
|
-
...
|
|
327
|
-
|
|
328
|
-
|
|
326
|
+
return [
|
|
327
|
+
...await Promise.all(
|
|
328
|
+
files.map((file) => {
|
|
329
|
+
return __privateMethod(this, _FileManager_instances, addOrAppend_fn).call(this, {
|
|
330
|
+
...file,
|
|
331
|
+
meta: {
|
|
332
|
+
pluginKey: plugin.key
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
})
|
|
336
|
+
),
|
|
337
|
+
await __privateMethod(this, _FileManager_instances, addOrAppend_fn).call(this, {
|
|
338
|
+
...rootFile,
|
|
339
|
+
meta: {
|
|
340
|
+
pluginKey: plugin.key
|
|
341
|
+
}
|
|
342
|
+
})
|
|
343
|
+
];
|
|
329
344
|
}
|
|
330
345
|
getCacheByUUID(UUID) {
|
|
331
346
|
let cache;
|
|
@@ -334,15 +349,15 @@ var _FileManager = class _FileManager {
|
|
|
334
349
|
});
|
|
335
350
|
return cache;
|
|
336
351
|
}
|
|
337
|
-
get(
|
|
338
|
-
return __privateGet(this, _cache).get(
|
|
352
|
+
get(path3) {
|
|
353
|
+
return __privateGet(this, _cache).get(path3);
|
|
339
354
|
}
|
|
340
|
-
remove(
|
|
341
|
-
const cacheItem = this.get(
|
|
355
|
+
remove(path3) {
|
|
356
|
+
const cacheItem = this.get(path3);
|
|
342
357
|
if (!cacheItem) {
|
|
343
358
|
return;
|
|
344
359
|
}
|
|
345
|
-
__privateGet(this, _cache).delete(
|
|
360
|
+
__privateGet(this, _cache).delete(path3);
|
|
346
361
|
}
|
|
347
362
|
async write(...params) {
|
|
348
363
|
return write(...params);
|
|
@@ -350,18 +365,18 @@ var _FileManager = class _FileManager {
|
|
|
350
365
|
async read(...params) {
|
|
351
366
|
return read(...params);
|
|
352
367
|
}
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
return getSource(file);
|
|
368
|
+
async processFiles(...params) {
|
|
369
|
+
return processFiles(...params);
|
|
356
370
|
}
|
|
371
|
+
// statics
|
|
357
372
|
static combineFiles(files) {
|
|
358
373
|
return combineFiles(files);
|
|
359
374
|
}
|
|
360
|
-
static getMode(
|
|
361
|
-
if (!
|
|
375
|
+
static getMode(path3) {
|
|
376
|
+
if (!path3) {
|
|
362
377
|
return "split";
|
|
363
378
|
}
|
|
364
|
-
return extname(
|
|
379
|
+
return extname(path3) ? "single" : "split";
|
|
365
380
|
}
|
|
366
381
|
static get extensions() {
|
|
367
382
|
return [".js", ".ts", ".tsx"];
|
|
@@ -371,8 +386,6 @@ var _FileManager = class _FileManager {
|
|
|
371
386
|
}
|
|
372
387
|
};
|
|
373
388
|
_cache = new WeakMap();
|
|
374
|
-
_task = new WeakMap();
|
|
375
|
-
_queue = new WeakMap();
|
|
376
389
|
_FileManager_instances = new WeakSet();
|
|
377
390
|
add_fn = async function(file) {
|
|
378
391
|
const controller = new AbortController();
|
|
@@ -392,13 +405,7 @@ add_fn = async function(file) {
|
|
|
392
405
|
});
|
|
393
406
|
}
|
|
394
407
|
__privateGet(this, _cache).set(resolvedFile.path, [{ cancel: () => controller.abort(), ...resolvedFile }]);
|
|
395
|
-
return
|
|
396
|
-
async () => {
|
|
397
|
-
var _a;
|
|
398
|
-
return (_a = __privateGet(this, _task)) == null ? void 0 : _a.call(this, resolvedFile);
|
|
399
|
-
},
|
|
400
|
-
{ signal: controller.signal }
|
|
401
|
-
);
|
|
408
|
+
return resolvedFile;
|
|
402
409
|
};
|
|
403
410
|
addOrAppend_fn = async function(file) {
|
|
404
411
|
const previousCaches = __privateGet(this, _cache).get(file.path);
|
|
@@ -456,13 +463,13 @@ async function getSource(file) {
|
|
|
456
463
|
const exports = file.exports ? combineExports(file.exports) : [];
|
|
457
464
|
const imports = file.imports && file.source ? combineImports(file.imports, exports, file.source) : [];
|
|
458
465
|
const importNodes = imports.filter((item) => {
|
|
459
|
-
const
|
|
460
|
-
return
|
|
466
|
+
const path3 = item.root ? getRelativePath(item.root, item.path) : item.path;
|
|
467
|
+
return path3 !== trimExtName(file.path);
|
|
461
468
|
}).map((item) => {
|
|
462
|
-
const
|
|
469
|
+
const path3 = item.root ? getRelativePath(item.root, item.path) : item.path;
|
|
463
470
|
return parser.factory.createImportDeclaration({
|
|
464
471
|
name: item.name,
|
|
465
|
-
path: item.extName ? `${
|
|
472
|
+
path: item.extName ? `${path3}${item.extName}` : path3,
|
|
466
473
|
isTypeOnly: item.isTypeOnly
|
|
467
474
|
});
|
|
468
475
|
});
|
|
@@ -589,8 +596,42 @@ function getEnvSource(source, env) {
|
|
|
589
596
|
return prev;
|
|
590
597
|
}, source);
|
|
591
598
|
}
|
|
599
|
+
var queue = new PQueue({ concurrency: 10 });
|
|
600
|
+
async function processFiles({ dryRun, logger, files }) {
|
|
601
|
+
const mergedFiles = await Promise.all(
|
|
602
|
+
files.map(async (file) => ({
|
|
603
|
+
...file,
|
|
604
|
+
source: await getSource(file)
|
|
605
|
+
}))
|
|
606
|
+
);
|
|
607
|
+
const orderedFiles = orderBy(mergedFiles, [(v) => !v.meta?.pluginKey, (v) => v.path.length, (v) => trimExtName(v.path).endsWith("index")], ["desc", "desc"]);
|
|
608
|
+
logger.emit(
|
|
609
|
+
"debug",
|
|
610
|
+
orderedFiles.map((item) => `[${item.meta?.pluginKey || "unknown"}]${item.path}:
|
|
611
|
+
${item.source}`)
|
|
612
|
+
);
|
|
613
|
+
if (!dryRun) {
|
|
614
|
+
logger.consola?.pauseLogs();
|
|
615
|
+
const size = orderedFiles.length;
|
|
616
|
+
const promises = orderedFiles.map(async (file, index) => {
|
|
617
|
+
await queue.add(async () => {
|
|
618
|
+
logger.emit("progress", { count: index, size, file });
|
|
619
|
+
await write(file.path, file.source, { sanity: false });
|
|
620
|
+
await new Promise((resolve2) => {
|
|
621
|
+
setTimeout(resolve2, 0);
|
|
622
|
+
});
|
|
623
|
+
logger.emit("progress", { count: index + 1, size, file });
|
|
624
|
+
});
|
|
625
|
+
});
|
|
626
|
+
await Promise.all(promises);
|
|
627
|
+
logger.consola?.resumeLogs();
|
|
628
|
+
}
|
|
629
|
+
return mergedFiles;
|
|
630
|
+
}
|
|
592
631
|
|
|
593
632
|
export {
|
|
594
|
-
FileManager
|
|
633
|
+
FileManager,
|
|
634
|
+
getSource,
|
|
635
|
+
processFiles
|
|
595
636
|
};
|
|
596
|
-
//# sourceMappingURL=chunk-
|
|
637
|
+
//# sourceMappingURL=chunk-CEWT73XF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/FileManager.ts","../src/BarrelManager.ts","../src/utils/TreeNode.ts"],"sourcesContent":["import crypto from 'node:crypto'\nimport path, { extname, resolve } from 'node:path'\n\nimport { orderBy } from 'natural-orderby'\nimport { isDeepEqual } from 'remeda'\n\nimport { getRelativePath, read, write } from '@kubb/fs'\nimport { BarrelManager } from './BarrelManager.ts'\nimport { searchAndReplace } from './transformers/searchAndReplace.ts'\nimport { trimExtName } from './transformers/trim.ts'\n\nimport type * as KubbFile from '@kubb/fs/types'\n\nimport type { BaseName, File, UUID } from '@kubb/fs/src/types.ts'\nimport type { GreaterThan } from '@kubb/types'\nimport type { BarrelManagerOptions } from './BarrelManager.ts'\nimport type { Logger } from './logger.ts'\nimport transformers from './transformers/index.ts'\nimport type { Plugin } from './types.ts'\nimport { getParser } from './utils'\nimport PQueue from 'p-queue'\n\nexport type ResolvedFile<TMeta extends FileMetaBase = FileMetaBase, TBaseName extends BaseName = BaseName> = File<TMeta, TBaseName> & {\n /**\n * @default crypto.randomUUID()\n */\n id: UUID\n /**\n * Contains the first part of the baseName, generated based on baseName\n * @link https://nodejs.org/api/path.html#pathformatpathobject\n */\n\n name: string\n}\n\nexport type FileMetaBase = {\n pluginKey?: Plugin['key']\n}\n\ntype FileWithMeta<TMeta extends FileMetaBase = FileMetaBase> = KubbFile.File<TMeta>\n\ntype CacheItem = ResolvedFile & {\n cancel?: () => void\n}\n\ntype AddResult<T extends Array<FileWithMeta>> = Promise<Awaited<GreaterThan<T['length'], 1> extends true ? Promise<ResolvedFile[]> : Promise<ResolvedFile>>>\n\ntype AddIndexesProps = {\n /**\n * Root based on root and output.path specified in the config\n */\n root: string\n /**\n * Output for plugin\n */\n output: {\n path: string\n exportAs?: string\n extName?: KubbFile.Extname\n exportType?: 'barrel' | 'barrelNamed' | false\n }\n logger: Logger\n options?: BarrelManagerOptions\n plugin: Plugin\n}\n\nexport class FileManager {\n #cache: Map<KubbFile.Path, CacheItem[]> = new Map()\n constructor() {\n return this\n }\n\n get files(): Array<FileWithMeta> {\n const files: Array<FileWithMeta> = []\n this.#cache.forEach((item) => {\n files.push(...item.flat(1))\n })\n\n return files\n }\n\n async add<T extends Array<FileWithMeta> = Array<FileWithMeta>>(...files: T): AddResult<T> {\n const promises = combineFiles(files).map((file) => {\n if (file.override) {\n return this.#add(file)\n }\n\n return this.#addOrAppend(file)\n })\n\n const resolvedFiles = await Promise.all(promises)\n\n if (files.length > 1) {\n return resolvedFiles as unknown as AddResult<T>\n }\n\n return resolvedFiles[0] as unknown as AddResult<T>\n }\n\n async #add(file: FileWithMeta): Promise<ResolvedFile> {\n const controller = new AbortController()\n const resolvedFile: ResolvedFile = {\n id: crypto.randomUUID(),\n name: trimExtName(file.baseName),\n ...file,\n }\n\n if (resolvedFile.exports?.length) {\n const folder = resolvedFile.path.replace(resolvedFile.baseName, '')\n\n resolvedFile.exports = resolvedFile.exports.filter((exportItem) => {\n const exportedFile = this.files.find((file) => file.path.includes(resolve(folder, exportItem.path)))\n\n if (exportedFile) {\n return exportedFile.exportable\n }\n\n return true\n })\n }\n\n this.#cache.set(resolvedFile.path, [{ cancel: () => controller.abort(), ...resolvedFile }])\n\n return resolvedFile\n }\n\n async #addOrAppend(file: FileWithMeta): Promise<ResolvedFile> {\n const previousCaches = this.#cache.get(file.path)\n const previousCache = previousCaches ? previousCaches.at(previousCaches.length - 1) : undefined\n\n if (previousCache) {\n this.#cache.delete(previousCache.path)\n\n return this.#add({\n ...file,\n source: previousCache.source && file.source ? `${previousCache.source}\\n${file.source}` : '',\n imports: [...(previousCache.imports || []), ...(file.imports || [])],\n exports: [...(previousCache.exports || []), ...(file.exports || [])],\n env: { ...(previousCache.env || {}), ...(file.env || {}) },\n })\n }\n return this.#add(file)\n }\n\n async getIndexFiles({ plugin, root, output, logger, options = {} }: AddIndexesProps): Promise<ResolvedFile[]> {\n const { exportType = 'barrel' } = output\n if (exportType === false) {\n return []\n }\n\n const pathToBuildFrom = resolve(root, output.path)\n\n if (transformers.trimExtName(pathToBuildFrom).endsWith('index')) {\n logger.emit('warning', 'Output has the same fileName as the barrelFiles, please disable barrel generation')\n return []\n }\n\n const exportPath = output.path.startsWith('./') ? trimExtName(output.path) : `./${trimExtName(output.path)}`\n const mode = FileManager.getMode(output.path)\n const barrelManager = new BarrelManager({\n extName: output.extName,\n ...options,\n })\n let files = barrelManager.getIndexes(pathToBuildFrom)\n\n if (!files) {\n return []\n }\n\n const rootPath = mode === 'split' ? `${exportPath}/index${output.extName || ''}` : `${exportPath}${output.extName || ''}`\n const rootFile: FileWithMeta = {\n path: resolve(root, 'index.ts'),\n baseName: 'index.ts',\n source: '',\n exports: [\n output.exportAs\n ? {\n name: output.exportAs,\n asAlias: true,\n path: rootPath,\n isTypeOnly: options.isTypeOnly,\n }\n : {\n path: rootPath,\n isTypeOnly: options.isTypeOnly,\n },\n ],\n exportable: true,\n }\n\n if (exportType === 'barrelNamed') {\n files = files.map((file) => {\n if (file.exports) {\n return {\n ...file,\n exports: barrelManager.getNamedExports(pathToBuildFrom, file.exports),\n }\n }\n return file\n })\n\n const barrelExportRoot = rootFile.exports?.[0]\n\n if (!output.exportAs && barrelExportRoot) {\n const exportFile = files.find((file) => {\n return trimExtName(file.path) === path.resolve(root, barrelExportRoot.path)\n })\n\n if (exportFile?.exports) {\n rootFile.exports = exportFile.exports.map((exportItem) => {\n return {\n ...exportItem,\n path: getRelativePath(rootFile.path, exportFile.path),\n }\n })\n }\n }\n }\n\n return [\n ...(await Promise.all(\n files.map((file) => {\n return this.#addOrAppend({\n ...file,\n meta: {\n pluginKey: plugin.key,\n },\n })\n }),\n )),\n await this.#addOrAppend({\n ...rootFile,\n meta: {\n pluginKey: plugin.key,\n },\n }),\n ]\n }\n\n getCacheByUUID(UUID: KubbFile.UUID): FileWithMeta | undefined {\n let cache: FileWithMeta | undefined\n\n this.#cache.forEach((files) => {\n cache = files.find((item) => item.id === UUID)\n })\n return cache\n }\n\n get(path: KubbFile.Path): Array<FileWithMeta> | undefined {\n return this.#cache.get(path)\n }\n\n remove(path: KubbFile.Path): void {\n const cacheItem = this.get(path)\n if (!cacheItem) {\n return\n }\n\n this.#cache.delete(path)\n }\n\n async write(...params: Parameters<typeof write>): ReturnType<typeof write> {\n return write(...params)\n }\n\n async read(...params: Parameters<typeof read>): ReturnType<typeof read> {\n return read(...params)\n }\n\n async processFiles(...params: Parameters<typeof processFiles>): ReturnType<typeof processFiles> {\n return processFiles(...params)\n }\n\n // statics\n\n static combineFiles<TMeta extends FileMetaBase = FileMetaBase>(files: Array<FileWithMeta<TMeta> | null>): Array<FileWithMeta<TMeta>> {\n return combineFiles<TMeta>(files)\n }\n static getMode(path: string | undefined | null): KubbFile.Mode {\n if (!path) {\n return 'split'\n }\n return extname(path) ? 'single' : 'split'\n }\n\n static get extensions(): Array<KubbFile.Extname> {\n return ['.js', '.ts', '.tsx']\n }\n\n static isJavascript(baseName: string): boolean {\n return FileManager.extensions.some((extension) => baseName.endsWith(extension))\n }\n}\n\nfunction combineFiles<TMeta extends FileMetaBase = FileMetaBase>(files: Array<FileWithMeta<TMeta> | null>): Array<FileWithMeta<TMeta>> {\n return files.filter(Boolean).reduce(\n (acc, file: FileWithMeta<TMeta>) => {\n const prevIndex = acc.findIndex((item) => item.path === file.path)\n\n if (prevIndex === -1) {\n return [...acc, file]\n }\n\n const prev = acc[prevIndex]\n\n if (prev && file.override) {\n acc[prevIndex] = {\n imports: [],\n exports: [],\n ...file,\n }\n return acc\n }\n\n if (prev) {\n acc[prevIndex] = {\n ...file,\n source: prev.source && file.source ? `${prev.source}\\n${file.source}` : '',\n imports: [...(prev.imports || []), ...(file.imports || [])],\n exports: [...(prev.exports || []), ...(file.exports || [])],\n env: { ...(prev.env || {}), ...(file.env || {}) },\n }\n }\n\n return acc\n },\n [] as Array<FileWithMeta<TMeta>>,\n )\n}\n\nexport async function getSource<TMeta extends FileMetaBase = FileMetaBase>(file: FileWithMeta<TMeta>): Promise<string> {\n // only use .js, .ts or .tsx files for ESM imports\n\n if (file.language ? !['typescript', 'javascript'].includes(file.language) : !FileManager.isJavascript(file.baseName)) {\n return file.source\n }\n\n const parser = await getParser(file.language)\n\n const exports = file.exports ? combineExports(file.exports) : []\n // imports should be defined and source should contain code or we have imports without them being used\n const imports = file.imports && file.source ? combineImports(file.imports, exports, file.source) : []\n\n const importNodes = imports\n .filter((item) => {\n const path = item.root ? getRelativePath(item.root, item.path) : item.path\n // trim extName\n return path !== trimExtName(file.path)\n })\n .map((item) => {\n const path = item.root ? getRelativePath(item.root, item.path) : item.path\n\n return parser.factory.createImportDeclaration({\n name: item.name,\n path: item.extName ? `${path}${item.extName}` : path,\n isTypeOnly: item.isTypeOnly,\n })\n })\n const exportNodes = exports.map((item) =>\n parser.factory.createExportDeclaration({\n name: item.name,\n path: item.extName ? `${item.path}${item.extName}` : item.path,\n isTypeOnly: item.isTypeOnly,\n asAlias: item.asAlias,\n }),\n )\n\n const source = [parser.print([...importNodes, ...exportNodes]), getEnvSource(file.source, file.env)].join('\\n')\n\n // do some basic linting with the ts compiler\n return parser.print([], { source, noEmitHelpers: false })\n}\n\nexport function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {\n const combinedExports = orderBy(exports, [(v) => !v.isTypeOnly], ['asc']).reduce(\n (prev, curr) => {\n const name = curr.name\n const prevByPath = prev.findLast((imp) => imp.path === curr.path)\n const prevByPathAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (export type ...)\n return prev\n }\n\n const uniquePrev = prev.findLast(\n (imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly && imp.asAlias === curr.asAlias,\n )\n\n if (uniquePrev || (Array.isArray(name) && !name.length) || (prevByPath?.asAlias && !curr.asAlias)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name: Array.isArray(name) ? [...new Set(name)] : name,\n },\n ]\n }\n\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(curr.name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...curr.name])]\n\n return prev\n }\n\n return [...prev, curr]\n },\n [] as Array<KubbFile.Export>,\n )\n\n return orderBy(combinedExports, [(v) => !v.isTypeOnly, (v) => v.asAlias], ['desc', 'desc'])\n}\n\nexport function combineImports(imports: Array<KubbFile.Import>, exports: Array<KubbFile.Export>, source?: string): Array<KubbFile.Import> {\n const combinedImports = orderBy(imports, [(v) => !v.isTypeOnly], ['asc']).reduce(\n (prev, curr) => {\n let name = Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name\n\n const hasImportInSource = (importName: string) => {\n if (!source) {\n return true\n }\n\n const checker = (name?: string) => name && !!source.includes(name)\n\n return checker(importName) || exports.some(({ name }) => (Array.isArray(name) ? name.some(checker) : checker(name)))\n }\n\n if (curr.path === curr.root) {\n // root and path are the same file, remove the \"./\" import\n return prev\n }\n\n if (Array.isArray(name)) {\n name = name.filter((item) => (typeof item === 'string' ? hasImportInSource(item) : hasImportInSource(item.propertyName)))\n }\n\n const prevByPath = prev.findLast((imp) => imp.path === curr.path && imp.isTypeOnly === curr.isTypeOnly)\n const uniquePrev = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly)\n const prevByPathNameAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathNameAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (import type ...)\n return prev\n }\n\n if (uniquePrev || (Array.isArray(name) && !name.length)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name,\n },\n ]\n }\n\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...name])]\n\n return prev\n }\n\n if (!Array.isArray(name) && name && !hasImportInSource(name)) {\n return prev\n }\n\n return [...prev, curr]\n },\n [] as Array<KubbFile.Import>,\n )\n\n return orderBy(combinedImports, [(v) => !v.isTypeOnly], ['desc'])\n}\n\nfunction getEnvSource(source: string, env: NodeJS.ProcessEnv | undefined): string {\n if (!env) {\n return source\n }\n\n const keys = Object.keys(env)\n\n if (!keys.length) {\n return source\n }\n\n return keys.reduce((prev, key: string) => {\n const environmentValue = env[key]\n const replaceBy = environmentValue ? `'${environmentValue.replaceAll('\"', '')?.replaceAll(\"'\", '')}'` : 'undefined'\n\n if (key.toUpperCase() !== key) {\n throw new TypeError(`Environment should be in upperCase for ${key}`)\n }\n\n if (typeof replaceBy === 'string') {\n prev = searchAndReplace({\n text: prev.replaceAll(`process.env.${key}`, replaceBy),\n replaceBy,\n prefix: 'process.env',\n key,\n })\n // removes `declare const ...`\n prev = searchAndReplace({\n text: prev.replaceAll(/(declare const).*\\n/gi, ''),\n replaceBy,\n key,\n })\n }\n\n return prev\n }, source)\n}\n\ntype WriteFilesProps = {\n files: KubbFile.File[]\n logger: Logger\n dryRun?: boolean\n}\n/**\n * Global queue\n */\nconst queue = new PQueue({ concurrency: 10 })\n\nexport async function processFiles({ dryRun, logger, files }: WriteFilesProps) {\n const mergedFiles: Array<KubbFile.File<FileMetaBase>> = await Promise.all(\n files.map(async (file) => ({\n ...file,\n source: await getSource(file),\n })),\n )\n const orderedFiles = orderBy(mergedFiles, [(v) => !v.meta?.pluginKey, (v) => v.path.length, (v) => trimExtName(v.path).endsWith('index')], ['desc', 'desc'])\n\n logger.emit(\n 'debug',\n orderedFiles.map((item) => `[${item.meta?.pluginKey || 'unknown'}]${item.path}: \\n${item.source}`),\n )\n\n if (!dryRun) {\n logger.consola?.pauseLogs()\n const size = orderedFiles.length\n\n const promises = orderedFiles.map(async (file, index) => {\n await queue.add(async () => {\n logger.emit('progress', { count: index, size, file })\n await write(file.path, file.source, { sanity: false })\n await new Promise((resolve) => {\n setTimeout(resolve, 0)\n })\n logger.emit('progress', { count: index + 1, size, file })\n })\n })\n\n await Promise.all(promises)\n\n logger.consola?.resumeLogs()\n }\n\n return mergedFiles\n}\n","import { getExports } from '@kubb/parser-ts'\n\nimport path from 'node:path'\n\nimport { trimExtName } from './transformers/trim.ts'\nimport { TreeNode } from './utils/TreeNode.ts'\n\nimport type * as KubbFile from '@kubb/fs/types'\nimport type { DirectoryTreeOptions } from 'directory-tree'\n\nexport type BarrelManagerOptions = {\n treeNode?: DirectoryTreeOptions\n isTypeOnly?: boolean\n /**\n * Add .ts or .js\n */\n extName?: KubbFile.Extname\n}\n\n/**\n * Replace with the use of the FileManager exports/imports\n */\nexport class BarrelManager {\n #options: BarrelManagerOptions\n\n constructor(options: BarrelManagerOptions = {}) {\n this.#options = options\n\n return this\n }\n\n /**\n * Loop through the file and find all exports(with the help of the ts printer)\n * Important: a real file is needed(cannot work from memory/FileManager)\n */\n getNamedExport(root: string, item: KubbFile.Export): KubbFile.Export[] {\n const exportedNames = getExports(path.resolve(root, item.path))\n\n if (!exportedNames) {\n return [item]\n }\n\n const exports = exportedNames.reduce(\n (prev, curr) => {\n if (!prev[0]?.name || !prev[1]?.name) {\n return prev\n }\n\n if (curr.isTypeOnly) {\n prev[1] = { ...prev[1], name: [...prev[1].name, curr.name] }\n } else {\n prev[0] = { ...prev[0], name: [...prev[0].name, curr.name] }\n }\n\n return prev\n },\n [\n {\n ...item,\n name: [],\n isTypeOnly: false,\n },\n {\n ...item,\n name: [],\n isTypeOnly: true,\n },\n ] as KubbFile.Export[],\n )\n\n return exports\n }\n\n getNamedExports(root: string, exports: KubbFile.Export[]): KubbFile.Export[] {\n return exports?.flatMap((item) => {\n return this.getNamedExport(root, item)\n })\n }\n\n getIndexes(root: string): Array<KubbFile.File> | null {\n const { treeNode = {}, isTypeOnly, extName } = this.#options\n const tree = TreeNode.build(root, treeNode)\n\n if (!tree) {\n return null\n }\n\n const fileReducer = (files: Array<KubbFile.File>, treeNode: TreeNode) => {\n if (!treeNode.children) {\n return []\n }\n\n if (treeNode.children.length > 1) {\n const indexPath: KubbFile.Path = path.resolve(treeNode.data.path, 'index.ts')\n\n const exports: Array<KubbFile.Export> = treeNode.children\n .filter(Boolean)\n .map((file) => {\n const importPath: string = file.data.type === 'split' ? `./${file.data.name}/index` : `./${trimExtName(file.data.name)}`\n\n if (importPath.endsWith('index') && file.data.type === 'single') {\n return undefined\n }\n\n return {\n path: extName ? `${importPath}${extName}` : importPath,\n isTypeOnly,\n } as KubbFile.Export\n })\n .filter(Boolean)\n\n files.push({\n path: indexPath,\n baseName: 'index.ts',\n source: '',\n exports,\n exportable: true,\n })\n } else if (treeNode.children.length === 1) {\n const [treeNodeChild] = treeNode.children as [TreeNode]\n\n const indexPath = path.resolve(treeNode.data.path, 'index.ts')\n const importPath = treeNodeChild.data.type === 'split' ? `./${treeNodeChild.data.name}/index` : `./${trimExtName(treeNodeChild.data.name)}`\n\n const exports = [\n {\n path: extName ? `${importPath}${extName}` : importPath,\n isTypeOnly,\n },\n ]\n\n files.push({\n path: indexPath,\n baseName: 'index.ts',\n source: '',\n exports,\n exportable: true,\n })\n }\n\n treeNode.children.forEach((childItem) => {\n fileReducer(files, childItem)\n })\n\n return files\n }\n\n return fileReducer([], tree).reverse()\n }\n}\n","import dirTree from 'directory-tree'\n\nimport { FileManager } from '../FileManager.ts'\n\nimport type * as KubbFile from '@kubb/fs/types'\nimport type { DirectoryTree, DirectoryTreeOptions } from 'directory-tree'\n\nexport type TreeNodeOptions = DirectoryTreeOptions\n\ntype BarrelData = { type: KubbFile.Mode; path: KubbFile.Path; name: string }\n\nexport class TreeNode<T = BarrelData> {\n public data: T\n\n public parent?: TreeNode<T>\n\n public children: Array<TreeNode<T>> = []\n\n constructor(data: T, parent?: TreeNode<T>) {\n this.data = data\n this.parent = parent\n return this\n }\n\n addChild(data: T): TreeNode<T> {\n const child = new TreeNode(data, this)\n if (!this.children) {\n this.children = []\n }\n this.children.push(child)\n return child\n }\n\n find(data?: T): TreeNode<T> | null {\n if (!data) {\n return null\n }\n\n if (data === this.data) {\n return this\n }\n\n if (this.children?.length) {\n for (let i = 0, { length } = this.children, target: TreeNode<T> | null = null; i < length; i++) {\n target = this.children[i]!.find(data)\n if (target) {\n return target\n }\n }\n }\n\n return null\n }\n\n get leaves(): TreeNode<T>[] {\n if (!this.children || this.children.length === 0) {\n // this is a leaf\n return [this]\n }\n\n // if not a leaf, return all children's leaves recursively\n const leaves: TreeNode<T>[] = []\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n leaves.push.apply(leaves, this.children[i]!.leaves)\n }\n }\n return leaves\n }\n\n get root(): TreeNode<T> {\n if (!this.parent) {\n return this\n }\n return this.parent.root\n }\n\n forEach(callback: (treeNode: TreeNode<T>) => void): this {\n if (typeof callback !== 'function') {\n throw new TypeError('forEach() callback must be a function')\n }\n\n // run this node through function\n callback(this)\n\n // do the same for all children\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n this.children[i]?.forEach(callback)\n }\n }\n\n return this\n }\n\n public static build(path: string, options: TreeNodeOptions = {}): TreeNode | null {\n try {\n const exclude = Array.isArray(options.exclude) ? options.exclude : [options.exclude].filter(Boolean)\n const filteredTree = dirTree(path, {\n extensions: options.extensions,\n exclude: [/node_modules/, ...exclude],\n })\n\n if (!filteredTree) {\n return null\n }\n\n const treeNode = new TreeNode({\n name: filteredTree.name,\n path: filteredTree.path,\n type: FileManager.getMode(filteredTree.path),\n })\n\n const recurse = (node: typeof treeNode, item: DirectoryTree) => {\n const subNode = node.addChild({\n name: item.name,\n path: item.path,\n type: FileManager.getMode(item.path),\n })\n\n if (item.children?.length) {\n item.children?.forEach((child) => {\n recurse(subNode, child)\n })\n }\n }\n\n filteredTree.children?.forEach((child) => recurse(treeNode, child))\n\n return treeNode\n } catch (e) {\n throw new Error('Something went wrong with creating index files with the TreehNode class', { cause: e })\n }\n }\n}\n"],"mappings":"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","names":["path","path","treeNode","path","file","name","resolve"]}
|