@kubb/fabric-core 0.1.5 → 0.1.7

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 (76) hide show
  1. package/dist/{App-9ie0H1SF.d.ts → App-DVWD6TgC.d.cts} +28 -17
  2. package/dist/{App-KqAHuAyU.d.cts → App-_vPNh477.d.ts} +28 -17
  3. package/dist/createParser-17uGjfu3.js +11 -0
  4. package/dist/createParser-17uGjfu3.js.map +1 -0
  5. package/dist/createParser-C4IkyTs5.cjs +17 -0
  6. package/dist/createParser-C4IkyTs5.cjs.map +1 -0
  7. package/dist/{defaultParser-vwyTb1XT.js → defaultParser--HzU9LPa.js} +2 -2
  8. package/dist/{defaultParser-vwyTb1XT.js.map → defaultParser--HzU9LPa.js.map} +1 -1
  9. package/dist/{defaultParser-Dl-OrbH1.cjs → defaultParser-n9VW2iVf.cjs} +2 -2
  10. package/dist/{defaultParser-Dl-OrbH1.cjs.map → defaultParser-n9VW2iVf.cjs.map} +1 -1
  11. package/dist/defineProperty-BtekiGIK.js +332 -0
  12. package/dist/defineProperty-BtekiGIK.js.map +1 -0
  13. package/dist/defineProperty-CspRhtP3.cjs +364 -0
  14. package/dist/defineProperty-CspRhtP3.cjs.map +1 -0
  15. package/dist/getRelativePath-C6lvNCs7.cjs +26 -0
  16. package/dist/getRelativePath-C6lvNCs7.cjs.map +1 -0
  17. package/dist/getRelativePath-CERJmYkp.js +19 -0
  18. package/dist/getRelativePath-CERJmYkp.js.map +1 -0
  19. package/dist/{index-BpPNNyhl.d.ts → index-CfV-59_M.d.ts} +5 -5
  20. package/dist/{index-DLITiDO5.d.cts → index-DVok6g82.d.cts} +5 -5
  21. package/dist/index.cjs +81 -225
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +2 -2
  24. package/dist/index.d.ts +2 -2
  25. package/dist/index.js +54 -194
  26. package/dist/index.js.map +1 -1
  27. package/dist/parsers/typescript.cjs +4 -2
  28. package/dist/parsers/typescript.d.cts +2 -2
  29. package/dist/parsers/typescript.d.ts +2 -2
  30. package/dist/parsers/typescript.js +4 -2
  31. package/dist/parsers.cjs +5 -3
  32. package/dist/parsers.cjs.map +1 -1
  33. package/dist/parsers.d.cts +3 -3
  34. package/dist/parsers.d.ts +3 -3
  35. package/dist/parsers.js +5 -3
  36. package/dist/parsers.js.map +1 -1
  37. package/dist/plugins.cjs +260 -33
  38. package/dist/plugins.cjs.map +1 -1
  39. package/dist/plugins.d.cts +48 -8
  40. package/dist/plugins.d.ts +48 -8
  41. package/dist/plugins.js +249 -25
  42. package/dist/plugins.js.map +1 -1
  43. package/dist/{chunk-CUT6urMc.cjs → trimExtName-Bb4zGVF1.cjs} +14 -1
  44. package/dist/trimExtName-Bb4zGVF1.cjs.map +1 -0
  45. package/dist/trimExtName-CeOVQVbu.js +8 -0
  46. package/dist/trimExtName-CeOVQVbu.js.map +1 -0
  47. package/dist/types.d.cts +2 -2
  48. package/dist/types.d.ts +2 -2
  49. package/dist/{typescriptParser-Du4RIToQ.d.cts → typescriptParser-BM90H8Tx.d.cts} +2 -2
  50. package/dist/{typescriptParser-JawJ8wET.cjs → typescriptParser-CNHO6H2_.cjs} +10 -24
  51. package/dist/typescriptParser-CNHO6H2_.cjs.map +1 -0
  52. package/dist/{typescriptParser-CrzOv_Aw.js → typescriptParser-CWT7zCJy.js} +5 -18
  53. package/dist/typescriptParser-CWT7zCJy.js.map +1 -0
  54. package/dist/{typescriptParser-Dk1rwKyJ.d.ts → typescriptParser-Chjs-RhT.d.ts} +2 -2
  55. package/package.json +4 -2
  56. package/src/App.ts +31 -28
  57. package/src/FileManager.ts +8 -1
  58. package/src/FileProcessor.ts +48 -18
  59. package/src/defineApp.ts +5 -10
  60. package/src/parsers/createParser.ts +1 -1
  61. package/src/parsers/types.ts +2 -2
  62. package/src/plugins/barrelPlugin.ts +207 -0
  63. package/src/plugins/createPlugin.ts +1 -1
  64. package/src/plugins/fsPlugin.ts +33 -34
  65. package/src/plugins/index.ts +2 -0
  66. package/src/plugins/progressPlugin.ts +48 -0
  67. package/src/plugins/types.ts +3 -3
  68. package/src/utils/AsyncEventEmitter.ts +8 -0
  69. package/src/utils/EventEmitter.ts +8 -0
  70. package/src/utils/TreeNode.ts +118 -0
  71. package/dist/createParser-B_RpW6sx.js +0 -17
  72. package/dist/createParser-B_RpW6sx.js.map +0 -1
  73. package/dist/createParser-DZB5qExa.cjs +0 -29
  74. package/dist/createParser-DZB5qExa.cjs.map +0 -1
  75. package/dist/typescriptParser-CrzOv_Aw.js.map +0 -1
  76. package/dist/typescriptParser-JawJ8wET.cjs.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,175 +1,56 @@
1
- const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_createParser = require('./createParser-DZB5qExa.cjs');
3
- const require_defaultParser = require('./defaultParser-Dl-OrbH1.cjs');
1
+ const require_trimExtName = require('./trimExtName-Bb4zGVF1.cjs');
2
+ const require_defineProperty = require('./defineProperty-CspRhtP3.cjs');
3
+ require('./createParser-C4IkyTs5.cjs');
4
+ const require_defaultParser = require('./defaultParser-n9VW2iVf.cjs');
4
5
  let natural_orderby = require("natural-orderby");
5
- natural_orderby = require_chunk.__toESM(natural_orderby);
6
- let node_crypto = require("node:crypto");
7
- node_crypto = require_chunk.__toESM(node_crypto);
8
- let node_path = require("node:path");
9
- node_path = require_chunk.__toESM(node_path);
10
- let remeda = require("remeda");
11
- remeda = require_chunk.__toESM(remeda);
6
+ natural_orderby = require_trimExtName.__toESM(natural_orderby);
12
7
  let p_limit = require("p-limit");
13
- p_limit = require_chunk.__toESM(p_limit);
8
+ p_limit = require_trimExtName.__toESM(p_limit);
14
9
  let node_events = require("node:events");
15
- node_events = require_chunk.__toESM(node_events);
10
+ node_events = require_trimExtName.__toESM(node_events);
16
11
 
17
- //#region \0@oxc-project+runtime@0.95.0/helpers/checkPrivateRedeclaration.js
18
- function _checkPrivateRedeclaration(e, t) {
19
- if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object");
20
- }
21
-
22
- //#endregion
23
- //#region \0@oxc-project+runtime@0.95.0/helpers/classPrivateFieldInitSpec.js
24
- function _classPrivateFieldInitSpec(e, t, a) {
25
- _checkPrivateRedeclaration(e, t), t.set(e, a);
26
- }
27
-
28
- //#endregion
29
- //#region \0@oxc-project+runtime@0.95.0/helpers/assertClassBrand.js
30
- function _assertClassBrand(e, t, n) {
31
- if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;
32
- throw new TypeError("Private element is not present on this object");
33
- }
34
-
35
- //#endregion
36
- //#region \0@oxc-project+runtime@0.95.0/helpers/classPrivateFieldGet2.js
37
- function _classPrivateFieldGet2(s, a) {
38
- return s.get(_assertClassBrand(s, a));
39
- }
40
-
41
- //#endregion
42
12
  //#region src/utils/Cache.ts
43
13
  var _buffer = /* @__PURE__ */ new WeakMap();
44
14
  var Cache = class {
45
15
  constructor() {
46
- _classPrivateFieldInitSpec(this, _buffer, /* @__PURE__ */ new Map());
16
+ require_defineProperty._classPrivateFieldInitSpec(this, _buffer, /* @__PURE__ */ new Map());
47
17
  }
48
18
  get(key) {
49
19
  var _this$buffer$get;
50
- return (_this$buffer$get = _classPrivateFieldGet2(_buffer, this).get(key)) !== null && _this$buffer$get !== void 0 ? _this$buffer$get : null;
20
+ return (_this$buffer$get = require_defineProperty._classPrivateFieldGet2(_buffer, this).get(key)) !== null && _this$buffer$get !== void 0 ? _this$buffer$get : null;
51
21
  }
52
22
  set(key, value) {
53
- _classPrivateFieldGet2(_buffer, this).set(key, value);
23
+ require_defineProperty._classPrivateFieldGet2(_buffer, this).set(key, value);
54
24
  }
55
25
  delete(key) {
56
- _classPrivateFieldGet2(_buffer, this).delete(key);
26
+ require_defineProperty._classPrivateFieldGet2(_buffer, this).delete(key);
57
27
  }
58
28
  clear() {
59
- _classPrivateFieldGet2(_buffer, this).clear();
29
+ require_defineProperty._classPrivateFieldGet2(_buffer, this).clear();
60
30
  }
61
31
  keys() {
62
- return [..._classPrivateFieldGet2(_buffer, this).keys()];
32
+ return [...require_defineProperty._classPrivateFieldGet2(_buffer, this).keys()];
63
33
  }
64
34
  values() {
65
- return [..._classPrivateFieldGet2(_buffer, this).values()];
35
+ return [...require_defineProperty._classPrivateFieldGet2(_buffer, this).values()];
66
36
  }
67
37
  flush() {}
68
38
  };
69
39
 
70
40
  //#endregion
71
- //#region src/createFile.ts
72
- function hashObject(obj) {
73
- const str = JSON.stringify(obj, Object.keys(obj).sort());
74
- return (0, node_crypto.createHash)("sha256").update(str).digest("hex");
75
- }
76
- function combineSources(sources) {
77
- return (0, remeda.uniqueBy)(sources, (obj) => [
78
- obj.name,
79
- obj.isExportable,
80
- obj.isTypeOnly
81
- ]);
82
- }
83
- function combineExports(exports$1) {
84
- return (0, natural_orderby.orderBy)(exports$1, [
85
- (v) => !!Array.isArray(v.name),
86
- (v) => !v.isTypeOnly,
87
- (v) => v.path,
88
- (v) => !!v.name,
89
- (v) => Array.isArray(v.name) ? (0, natural_orderby.orderBy)(v.name) : v.name
90
- ]).reduce((prev, curr) => {
91
- const name = curr.name;
92
- const prevByPath = prev.findLast((imp) => imp.path === curr.path);
93
- if (prev.findLast((imp) => imp.path === curr.path && (0, remeda.isDeepEqual)(imp.name, name) && imp.isTypeOnly)) return prev;
94
- if (prev.findLast((imp) => imp.path === curr.path && (0, remeda.isDeepEqual)(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly && imp.asAlias === curr.asAlias) || Array.isArray(name) && !name.length || (prevByPath === null || prevByPath === void 0 ? void 0 : prevByPath.asAlias) && !curr.asAlias) return prev;
95
- if (!prevByPath) return [...prev, {
96
- ...curr,
97
- name: Array.isArray(name) ? [...new Set(name)] : name
98
- }];
99
- if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(curr.name) && prevByPath.isTypeOnly === curr.isTypeOnly) {
100
- prevByPath.name = [...new Set([...prevByPath.name, ...curr.name])];
101
- return prev;
102
- }
103
- return [...prev, curr];
104
- }, []);
105
- }
106
- function combineImports(imports, exports$1, source) {
107
- return (0, natural_orderby.orderBy)(imports, [
108
- (v) => !!Array.isArray(v.name),
109
- (v) => !v.isTypeOnly,
110
- (v) => v.path,
111
- (v) => !!v.name,
112
- (v) => Array.isArray(v.name) ? (0, natural_orderby.orderBy)(v.name) : v.name
113
- ]).reduce((prev, curr) => {
114
- let name = Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name;
115
- const hasImportInSource = (importName) => {
116
- if (!source) return true;
117
- const checker = (name$1) => {
118
- return name$1 && source.includes(name$1);
119
- };
120
- return checker(importName) || exports$1.some(({ name: name$1 }) => Array.isArray(name$1) ? name$1.some(checker) : checker(name$1));
121
- };
122
- if (curr.path === curr.root) return prev;
123
- if (Array.isArray(name)) name = name.filter((item) => typeof item === "string" ? hasImportInSource(item) : hasImportInSource(item.propertyName));
124
- const prevByPath = prev.findLast((imp) => imp.path === curr.path && imp.isTypeOnly === curr.isTypeOnly);
125
- const uniquePrev = prev.findLast((imp) => imp.path === curr.path && (0, remeda.isDeepEqual)(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly);
126
- if (prev.findLast((imp) => imp.path === curr.path && (0, remeda.isDeepEqual)(imp.name, name) && imp.isTypeOnly)) return prev;
127
- if (uniquePrev || Array.isArray(name) && !name.length) return prev;
128
- if (!prevByPath) return [...prev, {
129
- ...curr,
130
- name
131
- }];
132
- if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(name) && prevByPath.isTypeOnly === curr.isTypeOnly) {
133
- prevByPath.name = [...new Set([...prevByPath.name, ...name])];
134
- return prev;
135
- }
136
- if (!Array.isArray(name) && name && !hasImportInSource(name)) return prev;
137
- return [...prev, curr];
138
- }, []);
139
- }
140
- /**
141
- * Helper to create a file with name and id set
142
- */
143
- function createFile(file) {
144
- var _file$exports, _file$imports, _file$sources;
145
- const extname = node_path.default.extname(file.baseName);
146
- if (!extname) throw new Error(`No extname found for ${file.baseName}`);
147
- const source = file.sources.map((item) => item.value).join("\n\n");
148
- const exports$1 = ((_file$exports = file.exports) === null || _file$exports === void 0 ? void 0 : _file$exports.length) ? combineExports(file.exports) : [];
149
- const imports = ((_file$imports = file.imports) === null || _file$imports === void 0 ? void 0 : _file$imports.length) && source ? combineImports(file.imports, exports$1, source) : [];
150
- const sources = ((_file$sources = file.sources) === null || _file$sources === void 0 ? void 0 : _file$sources.length) ? combineSources(file.sources) : [];
151
- return {
152
- ...file,
153
- id: hashObject({ path: file.path }),
154
- name: require_createParser.trimExtName(file.baseName),
155
- extname,
156
- imports,
157
- exports: exports$1,
158
- sources,
159
- meta: file.meta || {}
160
- };
161
- }
41
+ //#region ../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/isFunction-BJjFuZR7.js
42
+ const e = (e$1) => typeof e$1 == `function`;
162
43
 
163
44
  //#endregion
164
45
  //#region src/utils/AsyncEventEmitter.ts
165
46
  var _emitter = /* @__PURE__ */ new WeakMap();
166
47
  var AsyncEventEmitter = class {
167
48
  constructor(maxListener = 100) {
168
- _classPrivateFieldInitSpec(this, _emitter, new node_events.EventEmitter());
169
- _classPrivateFieldGet2(_emitter, this).setMaxListeners(maxListener);
49
+ require_defineProperty._classPrivateFieldInitSpec(this, _emitter, new node_events.EventEmitter());
50
+ require_defineProperty._classPrivateFieldGet2(_emitter, this).setMaxListeners(maxListener);
170
51
  }
171
52
  async emit(eventName, ...eventArgs) {
172
- const listeners = _classPrivateFieldGet2(_emitter, this).listeners(eventName);
53
+ const listeners = require_defineProperty._classPrivateFieldGet2(_emitter, this).listeners(eventName);
173
54
  if (listeners.length === 0) return;
174
55
  await Promise.all(listeners.map(async (listener) => {
175
56
  try {
@@ -180,70 +61,39 @@ var AsyncEventEmitter = class {
180
61
  }));
181
62
  }
182
63
  on(eventName, handler) {
183
- _classPrivateFieldGet2(_emitter, this).on(eventName, handler);
64
+ require_defineProperty._classPrivateFieldGet2(_emitter, this).on(eventName, handler);
65
+ }
66
+ onOnce(eventName, handler) {
67
+ const wrapper = (...args) => {
68
+ this.off(eventName, wrapper);
69
+ handler(...args);
70
+ };
71
+ this.on(eventName, wrapper);
184
72
  }
185
73
  off(eventName, handler) {
186
- _classPrivateFieldGet2(_emitter, this).off(eventName, handler);
74
+ require_defineProperty._classPrivateFieldGet2(_emitter, this).off(eventName, handler);
187
75
  }
188
76
  removeAll() {
189
- _classPrivateFieldGet2(_emitter, this).removeAllListeners();
77
+ require_defineProperty._classPrivateFieldGet2(_emitter, this).removeAllListeners();
190
78
  }
191
79
  };
192
80
 
193
- //#endregion
194
- //#region \0@oxc-project+runtime@0.95.0/helpers/typeof.js
195
- function _typeof(o) {
196
- "@babel/helpers - typeof";
197
- return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o$1) {
198
- return typeof o$1;
199
- } : function(o$1) {
200
- return o$1 && "function" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? "symbol" : typeof o$1;
201
- }, _typeof(o);
202
- }
203
-
204
- //#endregion
205
- //#region \0@oxc-project+runtime@0.95.0/helpers/toPrimitive.js
206
- function toPrimitive(t, r) {
207
- if ("object" != _typeof(t) || !t) return t;
208
- var e = t[Symbol.toPrimitive];
209
- if (void 0 !== e) {
210
- var i = e.call(t, r || "default");
211
- if ("object" != _typeof(i)) return i;
212
- throw new TypeError("@@toPrimitive must return a primitive value.");
213
- }
214
- return ("string" === r ? String : Number)(t);
215
- }
216
-
217
- //#endregion
218
- //#region \0@oxc-project+runtime@0.95.0/helpers/toPropertyKey.js
219
- function toPropertyKey(t) {
220
- var i = toPrimitive(t, "string");
221
- return "symbol" == _typeof(i) ? i : i + "";
222
- }
223
-
224
- //#endregion
225
- //#region \0@oxc-project+runtime@0.95.0/helpers/defineProperty.js
226
- function _defineProperty(e, r, t) {
227
- return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
228
- value: t,
229
- enumerable: !0,
230
- configurable: !0,
231
- writable: !0
232
- }) : e[r] = t, e;
233
- }
234
-
235
81
  //#endregion
236
82
  //#region src/FileProcessor.ts
237
83
  var _limit = /* @__PURE__ */ new WeakMap();
238
84
  var FileProcessor = class {
239
85
  constructor({ events = new AsyncEventEmitter() } = {}) {
240
- _classPrivateFieldInitSpec(this, _limit, (0, p_limit.default)(100));
241
- _defineProperty(this, "events", void 0);
86
+ require_defineProperty._classPrivateFieldInitSpec(this, _limit, (0, p_limit.default)(100));
87
+ require_defineProperty._defineProperty(this, "events", void 0);
242
88
  this.events = events;
243
89
  return this;
244
90
  }
245
- async parse(file, { parsers = /* @__PURE__ */ new Set(), extension } = {}) {
91
+ async parse(file, { parsers, extension } = {}) {
246
92
  const parseExtName = (extension === null || extension === void 0 ? void 0 : extension[file.extname]) || void 0;
93
+ if (!parsers) {
94
+ console.warn("No parsers provided, using default parser. If you want to use a specific parser, please provide it in the options.");
95
+ return require_defaultParser.defaultParser.parse(file, { extname: parseExtName });
96
+ }
247
97
  if (!file.extname) return require_defaultParser.defaultParser.parse(file, { extname: parseExtName });
248
98
  let parser;
249
99
  for (const item of parsers) {
@@ -256,40 +106,44 @@ var FileProcessor = class {
256
106
  if (!parser) return require_defaultParser.defaultParser.parse(file, { extname: parseExtName });
257
107
  return parser.parse(file, { extname: parseExtName });
258
108
  }
259
- async run(files, { parsers, dryRun, extension } = {}) {
109
+ async run(files, { parsers, mode = "sequential", dryRun, extension } = {}) {
260
110
  await this.events.emit("process:start", { files });
261
111
  let processed = 0;
262
112
  const total = files.length;
263
- const promises = files.map((resolvedFile, index) => _classPrivateFieldGet2(_limit, this).call(this, async () => {
113
+ const processOne = async (resolvedFile, index) => {
114
+ const percentage = processed / total * 100;
264
115
  await this.events.emit("file:start", {
265
116
  file: resolvedFile,
266
117
  index,
267
118
  total
268
119
  });
269
- if (!dryRun) {
270
- const source = await this.parse(resolvedFile, {
271
- extension,
272
- parsers
273
- });
274
- const nextProcessed = processed + 1;
275
- const percentage = nextProcessed / total * 100;
276
- processed = nextProcessed;
277
- await this.events.emit("process:progress", {
278
- file: resolvedFile,
279
- source,
280
- processed,
281
- percentage,
282
- total
283
- });
284
- }
120
+ const source = dryRun ? void 0 : await this.parse(resolvedFile, {
121
+ extension,
122
+ parsers
123
+ });
124
+ await this.events.emit("process:progress", {
125
+ file: resolvedFile,
126
+ source,
127
+ processed,
128
+ percentage,
129
+ total
130
+ });
131
+ processed++;
285
132
  await this.events.emit("file:end", {
286
133
  file: resolvedFile,
287
134
  index,
288
135
  total
289
136
  });
290
- processed++;
291
- }));
292
- await Promise.all(promises);
137
+ };
138
+ if (mode === "sequential") {
139
+ async function* asyncFiles() {
140
+ for (let index = 0; index < files.length; index++) yield [files[index], index];
141
+ }
142
+ for await (const [file, index] of asyncFiles()) if (file) await processOne(file, index);
143
+ } else {
144
+ const promises = files.map((resolvedFile, index) => require_defineProperty._classPrivateFieldGet2(_limit, this).call(this, () => processOne(resolvedFile, index)));
145
+ await Promise.all(promises);
146
+ }
293
147
  await this.events.emit("process:end", { files });
294
148
  return files;
295
149
  }
@@ -308,9 +162,11 @@ function mergeFile(a, b) {
308
162
  var _cache = /* @__PURE__ */ new WeakMap();
309
163
  var FileManager = class {
310
164
  constructor({ events = new AsyncEventEmitter() } = {}) {
311
- _classPrivateFieldInitSpec(this, _cache, new Cache());
312
- _defineProperty(this, "processor", void 0);
165
+ require_defineProperty._classPrivateFieldInitSpec(this, _cache, new Cache());
166
+ require_defineProperty._defineProperty(this, "events", void 0);
167
+ require_defineProperty._defineProperty(this, "processor", void 0);
313
168
  this.processor = new FileProcessor({ events });
169
+ this.events = events;
314
170
  return this;
315
171
  }
316
172
  async add(...files) {
@@ -322,31 +178,33 @@ var FileManager = class {
322
178
  else mergedFiles.set(file.path, file);
323
179
  });
324
180
  for (const file of mergedFiles.values()) {
325
- const existing = _classPrivateFieldGet2(_cache, this).get(file.path);
326
- const resolvedFile = createFile(existing ? mergeFile(existing, file) : file);
327
- _classPrivateFieldGet2(_cache, this).set(resolvedFile.path, resolvedFile);
181
+ const existing = require_defineProperty._classPrivateFieldGet2(_cache, this).get(file.path);
182
+ const resolvedFile = require_defineProperty.createFile(existing ? mergeFile(existing, file) : file);
183
+ require_defineProperty._classPrivateFieldGet2(_cache, this).set(resolvedFile.path, resolvedFile);
328
184
  this.flush();
329
185
  resolvedFiles.push(resolvedFile);
330
186
  }
331
187
  return resolvedFiles;
332
188
  }
333
189
  flush() {
334
- _classPrivateFieldGet2(_cache, this).flush();
190
+ require_defineProperty._classPrivateFieldGet2(_cache, this).flush();
335
191
  }
336
- getByPath(path$1) {
337
- return _classPrivateFieldGet2(_cache, this).get(path$1);
192
+ getByPath(path) {
193
+ return require_defineProperty._classPrivateFieldGet2(_cache, this).get(path);
338
194
  }
339
- deleteByPath(path$1) {
340
- _classPrivateFieldGet2(_cache, this).delete(path$1);
195
+ deleteByPath(path) {
196
+ require_defineProperty._classPrivateFieldGet2(_cache, this).delete(path);
341
197
  }
342
198
  clear() {
343
- _classPrivateFieldGet2(_cache, this).clear();
199
+ require_defineProperty._classPrivateFieldGet2(_cache, this).clear();
344
200
  }
345
201
  get files() {
346
- return (0, natural_orderby.orderBy)(_classPrivateFieldGet2(_cache, this).keys(), [(v) => v.length, (v) => require_createParser.trimExtName(v).endsWith("index")]).map((key) => _classPrivateFieldGet2(_cache, this).get(key)).filter(Boolean);
202
+ return (0, natural_orderby.orderBy)(require_defineProperty._classPrivateFieldGet2(_cache, this).keys(), [(v) => v.length, (v) => require_trimExtName.trimExtName(v).endsWith("index")]).map((key) => require_defineProperty._classPrivateFieldGet2(_cache, this).get(key)).filter(Boolean);
347
203
  }
348
204
  async write(options) {
349
- return this.processor.run(this.files, options);
205
+ const resolvedFiles = await this.processor.run(this.files, options);
206
+ this.clear();
207
+ return resolvedFiles;
350
208
  }
351
209
  };
352
210
 
@@ -377,7 +235,7 @@ function defineApp(instance) {
377
235
  if (pluginOrParser.type === "plugin") {
378
236
  if (installedPlugins.has(pluginOrParser)) console.warn("Plugin has already been applied to target app.");
379
237
  else installedPlugins.add(pluginOrParser);
380
- if (pluginOrParser.inject && (0, remeda.isFunction)(pluginOrParser.inject)) {
238
+ if (pluginOrParser.inject && e(pluginOrParser.inject)) {
381
239
  const injecter = pluginOrParser.inject;
382
240
  const extraApp = injecter(app, ...args);
383
241
  Object.assign(app, extraApp);
@@ -385,16 +243,14 @@ function defineApp(instance) {
385
243
  }
386
244
  if (pluginOrParser.type === "parser") if (installedParsers.has(pluginOrParser)) console.warn("Parser has already been applied to target app.");
387
245
  else installedParsers.add(pluginOrParser);
388
- if (pluginOrParser && (0, remeda.isFunction)(pluginOrParser.install)) {
246
+ if (pluginOrParser && e(pluginOrParser.install)) {
389
247
  const installer = pluginOrParser.install;
390
248
  await installer(app, ...args);
391
249
  }
392
250
  return app;
393
251
  }
394
252
  };
395
- events.emit("start");
396
253
  if (instance) instance(app);
397
- events.emit("end");
398
254
  return app;
399
255
  }
400
256
  return createApp$1;
@@ -408,6 +264,6 @@ const createApp = defineApp();
408
264
  exports.FileManager = FileManager;
409
265
  exports.FileProcessor = FileProcessor;
410
266
  exports.createApp = createApp;
411
- exports.createFile = createFile;
267
+ exports.createFile = require_defineProperty.createFile;
412
268
  exports.defineApp = defineApp;
413
269
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["exports","name","path","trimExtName","NodeEventEmitter","defaultParser","parser: Parser | undefined","resolvedFiles: Array<KubbFile.ResolvedFile>","path","trimExtName","createApp","options"],"sources":["../src/utils/Cache.ts","../src/createFile.ts","../src/utils/AsyncEventEmitter.ts","../src/FileProcessor.ts","../src/FileManager.ts","../src/defineApp.ts","../src/createApp.ts"],"sourcesContent":["export class Cache<T> {\n #buffer = new Map<string, T>()\n\n get(key: string): T | null {\n return this.#buffer.get(key) ?? null\n }\n\n set(key: string, value: T): void {\n this.#buffer.set(key, value)\n }\n\n delete(key: string): void {\n this.#buffer.delete(key)\n }\n\n clear(): void {\n this.#buffer.clear()\n }\n\n keys(): string[] {\n return [...this.#buffer.keys()]\n }\n\n values(): Array<T> {\n return [...this.#buffer.values()]\n }\n\n flush(): void {\n // No-op for base cache\n }\n}\n","import type * as KubbFile from './KubbFile.ts'\nimport { trimExtName } from './utils/trimExtName.ts'\nimport { createHash } from 'node:crypto'\nimport path from 'node:path'\nimport { isDeepEqual, uniqueBy } from 'remeda'\nimport { orderBy } from 'natural-orderby'\n\nfunction hashObject(obj: Record<string, unknown>): string {\n const str = JSON.stringify(obj, Object.keys(obj).sort())\n return createHash('sha256').update(str).digest('hex')\n}\n\nexport function combineSources(sources: Array<KubbFile.Source>): Array<KubbFile.Source> {\n return uniqueBy(sources, (obj) => [obj.name, obj.isExportable, obj.isTypeOnly] as const)\n}\n\nexport function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {\n return orderBy(exports, [\n (v) => !!Array.isArray(v.name),\n (v) => !v.isTypeOnly,\n (v) => v.path,\n (v) => !!v.name,\n (v) => (Array.isArray(v.name) ? orderBy(v.name) : v.name),\n ]).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 // we already have an item that was unique enough or name field is empty or prev asAlias is set but current has no changes\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 // merge all names when prev and current both have the same isTypeOnly set\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\nexport function combineImports(imports: Array<KubbFile.Import>, exports: Array<KubbFile.Export>, source?: string): Array<KubbFile.Import> {\n return orderBy(imports, [\n (v) => !!Array.isArray(v.name),\n (v) => !v.isTypeOnly,\n (v) => v.path,\n (v) => !!v.name,\n (v) => (Array.isArray(v.name) ? orderBy(v.name) : v.name),\n ]).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) => {\n return name && source.includes(name)\n }\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 // merge all names and check if the importName is being used in the generated source and if not filter those imports out\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 // already unique enough or name is empty\n if (uniquePrev || (Array.isArray(name) && !name.length)) {\n return prev\n }\n\n // new item, append name\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name,\n },\n ]\n }\n\n // merge all names when prev and current both have the same isTypeOnly set\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 // no import was found in the source, ignore import\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\n/**\n * Helper to create a file with name and id set\n */\nexport function createFile<TMeta extends object = object>(file: KubbFile.File<TMeta>): KubbFile.ResolvedFile<TMeta> {\n const extname = path.extname(file.baseName) as KubbFile.Extname\n if (!extname) {\n throw new Error(`No extname found for ${file.baseName}`)\n }\n\n const source = file.sources.map((item) => item.value).join('\\n\\n')\n const exports = file.exports?.length ? combineExports(file.exports) : []\n const imports = file.imports?.length && source ? combineImports(file.imports, exports, source) : []\n const sources = file.sources?.length ? combineSources(file.sources) : []\n\n return {\n ...file,\n id: hashObject({ path: file.path }),\n name: trimExtName(file.baseName),\n extname,\n imports: imports,\n exports: exports,\n sources: sources,\n meta: file.meta || ({} as TMeta),\n }\n}\n","import { EventEmitter as NodeEventEmitter } from 'node:events'\n\nexport class AsyncEventEmitter<TEvents extends Record<string, any>> {\n constructor(maxListener = 100) {\n this.#emitter.setMaxListeners(maxListener)\n }\n #emitter = new NodeEventEmitter()\n\n async emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArgs: TEvents[TEventName]): Promise<void> {\n const listeners = this.#emitter.listeners(eventName) as Array<(...args: TEvents[TEventName]) => any>\n\n if (listeners.length === 0) {\n return undefined\n }\n\n await Promise.all(\n listeners.map(async (listener) => {\n try {\n return await listener(...eventArgs)\n } catch (err) {\n console.error(`Error in async listener for \"${eventName}\":`, err)\n }\n }),\n )\n }\n\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.on(eventName, handler as any)\n }\n\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.off(eventName, handler as any)\n }\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","import type * as KubbFile from './KubbFile.ts'\nimport pLimit from 'p-limit'\n\nimport type { Parser } from './parsers/types.ts'\nimport { defaultParser } from './parsers/defaultParser.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\nimport type { AppEvents } from './App.ts'\n\nexport type ProcessFilesProps = {\n parsers?: Set<Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n dryRun?: boolean\n}\n\ntype GetParseOptions = {\n parsers?: Set<Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n}\n\ntype Options = {\n events?: AsyncEventEmitter<AppEvents>\n}\n\nexport class FileProcessor {\n #limit = pLimit(100)\n events: AsyncEventEmitter<AppEvents>\n\n constructor({ events = new AsyncEventEmitter<AppEvents>() }: Options = {}) {\n this.events = events\n\n return this\n }\n\n async parse(file: KubbFile.ResolvedFile, { parsers = new Set(), extension }: GetParseOptions = {}): Promise<string> {\n const parseExtName = extension?.[file.extname] || undefined\n\n if (!file.extname) {\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n let parser: Parser | undefined\n for (const item of parsers) {\n if (item.extNames?.includes(file.extname)) {\n parser = item\n break\n }\n }\n\n if (!parser) {\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n return parser.parse(file, { extname: parseExtName })\n }\n\n async run(files: Array<KubbFile.ResolvedFile>, { parsers, dryRun, extension }: ProcessFilesProps = {}): Promise<KubbFile.ResolvedFile[]> {\n await this.events.emit('process:start', { files })\n\n let processed = 0\n const total = files.length\n\n const promises = files.map((resolvedFile, index) =>\n this.#limit(async () => {\n await this.events.emit('file:start', { file: resolvedFile, index, total })\n\n if (!dryRun) {\n const source = await this.parse(resolvedFile, { extension, parsers })\n const nextProcessed = processed + 1\n const percentage = (nextProcessed / total) * 100\n processed = nextProcessed\n await this.events.emit('process:progress', { file: resolvedFile, source, processed, percentage, total })\n }\n\n await this.events.emit('file:end', { file: resolvedFile, index, total })\n\n processed++\n }),\n )\n\n await Promise.all(promises)\n\n await this.events.emit('process:end', { files })\n\n return files\n }\n}\n","import type * as KubbFile from './KubbFile.ts'\nimport { Cache } from './utils/Cache.ts'\nimport { trimExtName } from './utils/trimExtName.ts'\nimport { orderBy } from 'natural-orderby'\nimport { createFile } from './createFile.ts'\nimport { FileProcessor, type ProcessFilesProps } from './FileProcessor.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\nimport type { AppEvents } from './App.ts'\n\nfunction mergeFile<TMeta extends object = object>(a: KubbFile.File<TMeta>, b: KubbFile.File<TMeta>): KubbFile.File<TMeta> {\n return {\n ...a,\n sources: [...(a.sources || []), ...(b.sources || [])],\n imports: [...(a.imports || []), ...(b.imports || [])],\n exports: [...(a.exports || []), ...(b.exports || [])],\n }\n}\n\ntype Options = {\n events?: AsyncEventEmitter<AppEvents>\n}\n\nexport class FileManager {\n #cache = new Cache<KubbFile.ResolvedFile>()\n processor: FileProcessor\n\n constructor({ events = new AsyncEventEmitter<AppEvents>() }: Options = {}) {\n this.processor = new FileProcessor({ events })\n return this\n }\n\n async add(...files: Array<KubbFile.File>) {\n const resolvedFiles: Array<KubbFile.ResolvedFile> = []\n\n const mergedFiles = new Map<string, KubbFile.File>()\n\n files.forEach((file) => {\n const existing = mergedFiles.get(file.path)\n if (existing) {\n mergedFiles.set(file.path, mergeFile(existing, file))\n } else {\n mergedFiles.set(file.path, file)\n }\n })\n\n for (const file of mergedFiles.values()) {\n const existing = this.#cache.get(file.path)\n\n const merged = existing ? mergeFile(existing, file) : file\n const resolvedFile = createFile(merged)\n\n this.#cache.set(resolvedFile.path, resolvedFile)\n this.flush()\n\n resolvedFiles.push(resolvedFile)\n }\n\n return resolvedFiles\n }\n\n flush() {\n this.#cache.flush()\n }\n\n getByPath(path: KubbFile.Path): KubbFile.ResolvedFile | null {\n return this.#cache.get(path)\n }\n\n deleteByPath(path: KubbFile.Path): void {\n this.#cache.delete(path)\n }\n\n clear(): void {\n this.#cache.clear()\n }\n\n get files(): Array<KubbFile.ResolvedFile> {\n const cachedKeys = this.#cache.keys()\n\n // order by path length and if file is a barrel file\n const keys = orderBy(cachedKeys, [(v) => v.length, (v) => trimExtName(v).endsWith('index')])\n\n const files = keys.map((key) => this.#cache.get(key))\n\n return files.filter(Boolean)\n }\n\n async write(options: ProcessFilesProps): Promise<KubbFile.ResolvedFile[]> {\n return this.processor.run(this.files, options)\n }\n}\n","import { FileManager } from './FileManager.ts'\nimport { isFunction } from 'remeda'\nimport type { Plugin } from './plugins/types.ts'\nimport type { Parser } from './parsers/types.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\nimport type { AppContext, Component, AppEvents } from './App.ts'\n\nimport type { App } from './index.ts'\n\ntype RootRenderFunction<TApp extends App> = (app: TApp) => void | Promise<void>\n\nexport type DefineApp<TOptions> = (rootComponent?: Component, options?: TOptions) => App\n\nexport function defineApp<TOptions = unknown>(instance?: RootRenderFunction<App<TOptions>>): DefineApp<TOptions> {\n function createApp(options?: TOptions): App {\n const events = new AsyncEventEmitter<AppEvents>()\n const installedPlugins = new Set<Plugin>()\n const installedParsers = new Set<Parser>()\n const fileManager = new FileManager({ events })\n const context = {\n events,\n options,\n fileManager,\n installedPlugins,\n installedParsers,\n } as AppContext<TOptions>\n\n const app = {\n context,\n get files() {\n return fileManager.files\n },\n async addFile(...newFiles) {\n await fileManager.add(...newFiles)\n },\n async use(pluginOrParser, ...options) {\n const args = options\n\n if (pluginOrParser.type === 'plugin') {\n if (installedPlugins.has(pluginOrParser)) {\n console.warn('Plugin has already been applied to target app.')\n } else {\n installedPlugins.add(pluginOrParser)\n }\n\n if (pluginOrParser.inject && isFunction(pluginOrParser.inject)) {\n const injecter = pluginOrParser.inject\n\n const extraApp = (injecter as any)(app, ...args)\n Object.assign(app, extraApp)\n }\n }\n if (pluginOrParser.type === 'parser') {\n if (installedParsers.has(pluginOrParser)) {\n console.warn('Parser has already been applied to target app.')\n } else {\n installedParsers.add(pluginOrParser)\n }\n }\n\n if (pluginOrParser && isFunction(pluginOrParser.install)) {\n const installer = pluginOrParser.install\n\n await (installer as any)(app, ...args)\n }\n\n return app\n },\n } as App<TOptions>\n\n // start\n events.emit('start')\n if (instance) {\n instance(app)\n }\n\n // end\n events.emit('end')\n\n return app\n }\n\n return createApp\n}\n","import { defineApp } from './defineApp.ts'\n\nexport const createApp = defineApp()\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["e","NodeEventEmitter","defaultParser","parser: Parser | undefined","resolvedFiles: Array<KubbFile.ResolvedFile>","createFile","trimExtName","createApp","options","isFunction"],"sources":["../src/utils/Cache.ts","../../../node_modules/.pnpm/remeda@2.32.0/node_modules/remeda/dist/isFunction-BJjFuZR7.js","../src/utils/AsyncEventEmitter.ts","../src/FileProcessor.ts","../src/FileManager.ts","../src/defineApp.ts","../src/createApp.ts"],"sourcesContent":["export class Cache<T> {\n #buffer = new Map<string, T>()\n\n get(key: string): T | null {\n return this.#buffer.get(key) ?? null\n }\n\n set(key: string, value: T): void {\n this.#buffer.set(key, value)\n }\n\n delete(key: string): void {\n this.#buffer.delete(key)\n }\n\n clear(): void {\n this.#buffer.clear()\n }\n\n keys(): string[] {\n return [...this.#buffer.keys()]\n }\n\n values(): Array<T> {\n return [...this.#buffer.values()]\n }\n\n flush(): void {\n // No-op for base cache\n }\n}\n","const e=e=>typeof e==`function`;export{e as isFunction};\n//# sourceMappingURL=isFunction-BJjFuZR7.js.map","import { EventEmitter as NodeEventEmitter } from 'node:events'\n\nexport class AsyncEventEmitter<TEvents extends Record<string, any>> {\n constructor(maxListener = 100) {\n this.#emitter.setMaxListeners(maxListener)\n }\n #emitter = new NodeEventEmitter()\n\n async emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArgs: TEvents[TEventName]): Promise<void> {\n const listeners = this.#emitter.listeners(eventName) as Array<(...args: TEvents[TEventName]) => any>\n\n if (listeners.length === 0) {\n return undefined\n }\n\n await Promise.all(\n listeners.map(async (listener) => {\n try {\n return await listener(...eventArgs)\n } catch (err) {\n console.error(`Error in async listener for \"${eventName}\":`, err)\n }\n }),\n )\n }\n\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.on(eventName, handler as any)\n }\n\n onOnce<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArgs: TEvents[TEventName]) => void): void {\n const wrapper = (...args: TEvents[TEventName]) => {\n this.off(eventName, wrapper)\n handler(...args)\n }\n this.on(eventName, wrapper)\n }\n\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.off(eventName, handler as any)\n }\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","import type * as KubbFile from './KubbFile.ts'\nimport pLimit from 'p-limit'\n\nimport type { Parser } from './parsers/types.ts'\nimport { defaultParser } from './parsers/defaultParser.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\nimport type { AppEvents, AppMode } from './App.ts'\n\nexport type ProcessFilesProps = {\n parsers?: Set<Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n dryRun?: boolean\n /**\n * @default 'sequential'\n */\n mode?: AppMode\n}\n\ntype GetParseOptions = {\n parsers?: Set<Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n}\n\ntype Options = {\n events?: AsyncEventEmitter<AppEvents>\n}\n\nexport class FileProcessor {\n #limit = pLimit(100)\n events: AsyncEventEmitter<AppEvents>\n\n constructor({ events = new AsyncEventEmitter<AppEvents>() }: Options = {}) {\n this.events = events\n\n return this\n }\n\n async parse(file: KubbFile.ResolvedFile, { parsers, extension }: GetParseOptions = {}): Promise<string> {\n const parseExtName = extension?.[file.extname] || undefined\n\n if (!parsers) {\n console.warn('No parsers provided, using default parser. If you want to use a specific parser, please provide it in the options.')\n\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n if (!file.extname) {\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n let parser: Parser | undefined\n for (const item of parsers) {\n if (item.extNames?.includes(file.extname)) {\n parser = item\n break\n }\n }\n\n if (!parser) {\n return defaultParser.parse(file, { extname: parseExtName })\n }\n\n return parser.parse(file, { extname: parseExtName })\n }\n\n async run(\n files: Array<KubbFile.ResolvedFile>,\n { parsers, mode = 'sequential', dryRun, extension }: ProcessFilesProps = {},\n ): Promise<KubbFile.ResolvedFile[]> {\n await this.events.emit('process:start', { files })\n\n let processed = 0\n const total = files.length\n\n const processOne = async (resolvedFile: KubbFile.ResolvedFile, index: number) => {\n const percentage = (processed / total) * 100\n\n await this.events.emit('file:start', { file: resolvedFile, index, total })\n\n const source = dryRun ? undefined : await this.parse(resolvedFile, { extension, parsers })\n\n await this.events.emit('process:progress', {\n file: resolvedFile,\n source,\n processed,\n percentage,\n total,\n })\n\n processed++\n\n await this.events.emit('file:end', { file: resolvedFile, index, total })\n }\n\n if (mode === 'sequential') {\n async function* asyncFiles() {\n for (let index = 0; index < files.length; index++) {\n yield [files[index], index] as const\n }\n }\n\n for await (const [file, index] of asyncFiles()) {\n if (file) {\n await processOne(file, index)\n }\n }\n } else {\n const promises = files.map((resolvedFile, index) => this.#limit(() => processOne(resolvedFile, index)))\n await Promise.all(promises)\n }\n\n await this.events.emit('process:end', { files })\n\n return files\n }\n}\n","import type * as KubbFile from './KubbFile.ts'\nimport { Cache } from './utils/Cache.ts'\nimport { trimExtName } from './utils/trimExtName.ts'\nimport { orderBy } from 'natural-orderby'\nimport { createFile } from './createFile.ts'\nimport { FileProcessor, type ProcessFilesProps } from './FileProcessor.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\nimport type { AppEvents } from './App.ts'\n\nfunction mergeFile<TMeta extends object = object>(a: KubbFile.File<TMeta>, b: KubbFile.File<TMeta>): KubbFile.File<TMeta> {\n return {\n ...a,\n sources: [...(a.sources || []), ...(b.sources || [])],\n imports: [...(a.imports || []), ...(b.imports || [])],\n exports: [...(a.exports || []), ...(b.exports || [])],\n }\n}\n\ntype Options = {\n events?: AsyncEventEmitter<AppEvents>\n}\n\nexport class FileManager {\n #cache = new Cache<KubbFile.ResolvedFile>()\n events: AsyncEventEmitter<AppEvents>\n processor: FileProcessor\n\n constructor({ events = new AsyncEventEmitter<AppEvents>() }: Options = {}) {\n this.processor = new FileProcessor({ events })\n\n this.events = events\n return this\n }\n\n async add(...files: Array<KubbFile.File>) {\n const resolvedFiles: Array<KubbFile.ResolvedFile> = []\n\n const mergedFiles = new Map<string, KubbFile.File>()\n\n files.forEach((file) => {\n const existing = mergedFiles.get(file.path)\n if (existing) {\n mergedFiles.set(file.path, mergeFile(existing, file))\n } else {\n mergedFiles.set(file.path, file)\n }\n })\n\n for (const file of mergedFiles.values()) {\n const existing = this.#cache.get(file.path)\n\n const merged = existing ? mergeFile(existing, file) : file\n const resolvedFile = createFile(merged)\n\n this.#cache.set(resolvedFile.path, resolvedFile)\n this.flush()\n\n resolvedFiles.push(resolvedFile)\n }\n\n return resolvedFiles\n }\n\n flush() {\n this.#cache.flush()\n }\n\n getByPath(path: KubbFile.Path): KubbFile.ResolvedFile | null {\n return this.#cache.get(path)\n }\n\n deleteByPath(path: KubbFile.Path): void {\n this.#cache.delete(path)\n }\n\n clear(): void {\n this.#cache.clear()\n }\n\n get files(): Array<KubbFile.ResolvedFile> {\n const cachedKeys = this.#cache.keys()\n\n // order by path length and if file is a barrel file\n const keys = orderBy(cachedKeys, [(v) => v.length, (v) => trimExtName(v).endsWith('index')])\n\n const files = keys.map((key) => this.#cache.get(key))\n\n return files.filter(Boolean)\n }\n\n async write(options: ProcessFilesProps): Promise<KubbFile.ResolvedFile[]> {\n const resolvedFiles = await this.processor.run(this.files, options)\n\n this.clear()\n\n return resolvedFiles\n }\n}\n","import { FileManager } from './FileManager.ts'\nimport { isFunction } from 'remeda'\nimport type { Plugin } from './plugins/types.ts'\nimport type { Parser } from './parsers/types.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\nimport type { AppContext, AppEvents, AppOptions } from './App.ts'\n\nimport type { App } from './index.ts'\n\ntype RootRenderFunction<TApp extends App> = (app: TApp) => void | Promise<void>\n\nexport type DefineApp<TOptions> = (options?: TOptions) => App\n\nexport function defineApp<TOptions extends AppOptions>(instance?: RootRenderFunction<App<TOptions>>): DefineApp<TOptions> {\n function createApp(options?: TOptions): App {\n const events = new AsyncEventEmitter<AppEvents>()\n const installedPlugins = new Set<Plugin<any>>()\n const installedParsers = new Set<Parser<any>>()\n const fileManager = new FileManager({ events })\n const context = {\n events,\n options,\n fileManager,\n installedPlugins,\n installedParsers,\n } as AppContext<TOptions>\n\n const app = {\n context,\n get files() {\n return fileManager.files\n },\n async addFile(...newFiles) {\n await fileManager.add(...newFiles)\n },\n async use(pluginOrParser, ...options) {\n const args = options\n\n if (pluginOrParser.type === 'plugin') {\n if (installedPlugins.has(pluginOrParser)) {\n console.warn('Plugin has already been applied to target app.')\n } else {\n installedPlugins.add(pluginOrParser)\n }\n\n if (pluginOrParser.inject && isFunction(pluginOrParser.inject)) {\n const injecter = pluginOrParser.inject\n\n const extraApp = (injecter as any)(app, ...args)\n Object.assign(app, extraApp)\n }\n }\n if (pluginOrParser.type === 'parser') {\n if (installedParsers.has(pluginOrParser)) {\n console.warn('Parser has already been applied to target app.')\n } else {\n installedParsers.add(pluginOrParser)\n }\n }\n\n if (pluginOrParser && isFunction(pluginOrParser.install)) {\n const installer = pluginOrParser.install\n\n await (installer as any)(app, ...args)\n }\n\n return app\n },\n } as App<TOptions>\n\n if (instance) {\n instance(app)\n }\n\n return app\n }\n\n return createApp\n}\n","import { defineApp } from './defineApp.ts'\n\nexport const createApp = defineApp()\n"],"x_google_ignoreList":[1],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -1,3 +1,3 @@
1
- import { a as FileProcessor, i as FileManager, t as App } from "./App-KqAHuAyU.cjs";
2
- import { i as defineApp, n as createApp, t as createFile } from "./index-DLITiDO5.cjs";
1
+ import { a as FileProcessor, i as FileManager, t as App } from "./App-DVWD6TgC.cjs";
2
+ import { i as defineApp, n as createApp, t as createFile } from "./index-DVok6g82.cjs";
3
3
  export { App, FileManager, FileProcessor, createApp, createFile, defineApp };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { a as FileProcessor, i as FileManager, t as App } from "./App-9ie0H1SF.js";
2
- import { i as defineApp, n as createApp, t as createFile } from "./index-BpPNNyhl.js";
1
+ import { a as FileProcessor, i as FileManager, t as App } from "./App-_vPNh477.js";
2
+ import { i as defineApp, n as createApp, t as createFile } from "./index-CfV-59_M.js";
3
3
  export { App, FileManager, FileProcessor, createApp, createFile, defineApp };