@kubb/fabric-core 0.12.0 → 0.12.2

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 (49) hide show
  1. package/dist/{Fabric-eh92yS1R.d.ts → Fabric-dUuj_QO6.d.ts} +7 -6
  2. package/dist/{Fabric-BbVC650D.d.cts → Fabric-yRxItrhk.d.cts} +6 -5
  3. package/dist/{Root-SC_lWG_q.cjs → Root-DvQofGOy.cjs} +55 -161
  4. package/dist/Root-DvQofGOy.cjs.map +1 -0
  5. package/dist/{Root-BT59jU0W.js → Root-Y8o5WxXY.js} +51 -157
  6. package/dist/Root-Y8o5WxXY.js.map +1 -0
  7. package/dist/{defaultParser-DDFR9BTS.js → defaultParser-DCYPZf5F.js} +3 -3
  8. package/dist/{defaultParser-DDFR9BTS.js.map → defaultParser-DCYPZf5F.js.map} +1 -1
  9. package/dist/{getRelativePath-COUEoqbz.js → getRelativePath-DlmBsdV8.js} +5 -5
  10. package/dist/getRelativePath-DlmBsdV8.js.map +1 -0
  11. package/dist/index.cjs +5 -8
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.d.cts +3 -3
  14. package/dist/index.d.ts +4 -4
  15. package/dist/index.js +7 -10
  16. package/dist/index.js.map +1 -1
  17. package/dist/parsers/typescript.cjs +1 -1
  18. package/dist/parsers/typescript.d.cts +1 -2
  19. package/dist/parsers/typescript.d.ts +2 -2
  20. package/dist/parsers/typescript.js +1 -1
  21. package/dist/parsers.cjs +1 -1
  22. package/dist/parsers.d.cts +1 -1
  23. package/dist/parsers.d.ts +2 -2
  24. package/dist/parsers.js +4 -4
  25. package/dist/plugins.cjs +28 -28
  26. package/dist/plugins.cjs.map +1 -1
  27. package/dist/plugins.d.cts +3 -3
  28. package/dist/plugins.d.ts +4 -4
  29. package/dist/plugins.js +27 -27
  30. package/dist/plugins.js.map +1 -1
  31. package/dist/{types-BI7rICUP.d.cts → types-DHjLDbT5.d.cts} +3 -3
  32. package/dist/{types-DpITKjSb.d.ts → types-_X71gVe5.d.ts} +4 -4
  33. package/dist/types.cjs.map +1 -1
  34. package/dist/types.d.cts +3 -3
  35. package/dist/types.d.ts +3 -3
  36. package/dist/types.js.map +1 -1
  37. package/dist/{typescriptParser-qjzb2pIh.cjs → typescriptParser-3Mjce6yD.cjs} +6 -6
  38. package/dist/{typescriptParser-qjzb2pIh.cjs.map → typescriptParser-3Mjce6yD.cjs.map} +1 -1
  39. package/dist/{typescriptParser-DyosyI_A.js → typescriptParser-D8rhO8nO.js} +8 -8
  40. package/dist/typescriptParser-D8rhO8nO.js.map +1 -0
  41. package/dist/{useNodeTree-CmXKaRqq.d.cts → useNodeTree-CdlPBTwH.d.cts} +2 -2
  42. package/dist/{useNodeTree-DUdlgys5.d.ts → useNodeTree-vLaKh36n.d.ts} +3 -3
  43. package/package.json +2 -1
  44. package/src/KubbFile.ts +12 -9
  45. package/dist/Root-BT59jU0W.js.map +0 -1
  46. package/dist/Root-SC_lWG_q.cjs.map +0 -1
  47. package/dist/getRelativePath-COUEoqbz.js.map +0 -1
  48. package/dist/typescriptParser-DyosyI_A.js.map +0 -1
  49. /package/dist/{chunk-8X4u0d05.js → chunk-Cq_TCZj9.js} +0 -0
@@ -1,19 +1,20 @@
1
- import { n as __name, t as __exportAll } from "./chunk-8X4u0d05.js";
1
+ import { n as __name, t as __exportAll } from "./chunk-Cq_TCZj9.js";
2
2
 
3
3
  //#region src/KubbFile.d.ts
4
4
  declare namespace KubbFile_d_exports {
5
5
  export { BaseName, Export, Extname, File, Import, Mode, Path, ResolvedFile, Source };
6
6
  }
7
+ type ImportName = string | Array<string | {
8
+ propertyName: string;
9
+ name?: string;
10
+ }>;
7
11
  type Import = {
8
12
  /**
9
13
  * Import name to be used
10
14
  * @example ["useState"]
11
15
  * @example "React"
12
16
  */
13
- name: string | Array<string | {
14
- propertyName: string;
15
- name?: string;
16
- }>;
17
+ name: ImportName;
17
18
  /**
18
19
  * Path for the import
19
20
  * @example '@kubb/core'
@@ -489,4 +490,4 @@ interface Fabric<T extends FabricOptions = FabricOptions> extends Kubb.Fabric {
489
490
  }
490
491
  //#endregion
491
492
  export { Path as A, UserParser as C, File as D, Extname as E, Source as M, Import as O, Parser as S, Export as T, inject as _, FabricElement as a, FileManager as b, FabricOptions as c, renderIndent as d, renderIntrinsic as f, createContext as g, Context as h, FabricContext as i, ResolvedFile as j, KubbFile_d_exports as k, Plugin as l, RenderContextProps as m, FabricComponent as n, FabricMode as o, RenderContext as p, FabricConfig as r, FabricNode as s, Fabric as t, UserPlugin as u, provide as v, BaseName as w, FileProcessor as x, unprovide as y };
492
- //# sourceMappingURL=Fabric-eh92yS1R.d.ts.map
493
+ //# sourceMappingURL=Fabric-dUuj_QO6.d.ts.map
@@ -1,16 +1,17 @@
1
1
  declare namespace KubbFile_d_exports {
2
2
  export { BaseName, Export, Extname, File, Import, Mode, Path, ResolvedFile, Source };
3
3
  }
4
+ type ImportName = string | Array<string | {
5
+ propertyName: string;
6
+ name?: string;
7
+ }>;
4
8
  type Import = {
5
9
  /**
6
10
  * Import name to be used
7
11
  * @example ["useState"]
8
12
  * @example "React"
9
13
  */
10
- name: string | Array<string | {
11
- propertyName: string;
12
- name?: string;
13
- }>;
14
+ name: ImportName;
14
15
  /**
15
16
  * Path for the import
16
17
  * @example '@kubb/core'
@@ -486,4 +487,4 @@ interface Fabric<T extends FabricOptions = FabricOptions> extends Kubb.Fabric {
486
487
  }
487
488
  //#endregion
488
489
  export { Path as A, UserParser as C, File as D, Extname as E, Source as M, __name as N, Import as O, Parser as S, Export as T, inject as _, FabricElement as a, FileManager as b, FabricOptions as c, renderIndent as d, renderIntrinsic as f, createContext as g, Context as h, FabricContext as i, ResolvedFile as j, KubbFile_d_exports as k, Plugin as l, RenderContextProps as m, FabricComponent as n, FabricMode as o, RenderContext as p, FabricConfig as r, FabricNode as s, Fabric as t, UserPlugin as u, provide as v, BaseName as w, FileProcessor as x, unprovide as y };
489
- //# sourceMappingURL=Fabric-BbVC650D.d.cts.map
490
+ //# sourceMappingURL=Fabric-yRxItrhk.d.cts.map
@@ -4,6 +4,7 @@ let natural_orderby = require("natural-orderby");
4
4
  let node_crypto = require("node:crypto");
5
5
  let node_path = require("node:path");
6
6
  node_path = require_getRelativePath.__toESM(node_path);
7
+ let remeda = require("remeda");
7
8
  let p_limit = require("p-limit");
8
9
  p_limit = require_getRelativePath.__toESM(p_limit);
9
10
  let node_events = require("node:events");
@@ -80,117 +81,10 @@ function createContext(defaultValue) {
80
81
  */
81
82
  const NodeTreeContext = createContext(null);
82
83
 
83
- //#endregion
84
- //#region ../../node_modules/.pnpm/remeda@2.33.4/node_modules/remeda/dist/utilityEvaluators-D7O7U3FY.js
85
- const t$2 = {
86
- done: !1,
87
- hasNext: !1
88
- };
89
-
90
- //#endregion
91
- //#region ../../node_modules/.pnpm/remeda@2.33.4/node_modules/remeda/dist/pipe-CRsqNjLF.js
92
- function t$1(e, ...t$3) {
93
- let a = e;
94
- let o = t$3.map((e$1) => `lazy` in e$1 ? r$1(e$1) : void 0);
95
- let s = 0;
96
- for (; s < t$3.length;) {
97
- if (o[s] === void 0 || !i(a)) {
98
- let e$2 = t$3[s];
99
- a = e$2(a), s += 1;
100
- continue;
101
- }
102
- let e$1 = [];
103
- for (let n$2 = s; n$2 < t$3.length; n$2++) {
104
- let t$4 = o[n$2];
105
- if (t$4 === void 0 || (e$1.push(t$4), t$4.isSingle)) break;
106
- }
107
- let r$2 = [];
108
- for (let t$4 of a) if (n$1(t$4, r$2, e$1)) break;
109
- let { isSingle: c } = e$1.at(-1);
110
- a = c ? r$2[0] : r$2, s += e$1.length;
111
- }
112
- return a;
113
- }
114
- require_getRelativePath.__name(t$1, "t");
115
- function n$1(t$3, r$2, i$1) {
116
- if (i$1.length === 0) return r$2.push(t$3), !1;
117
- let a = t$3;
118
- let o = t$2;
119
- let s = !1;
120
- for (let [e, t$4] of i$1.entries()) {
121
- let { index: c, items: l } = t$4;
122
- if (l.push(a), o = t$4(a, c, l), t$4.index += 1, o.hasNext) {
123
- var _o$hasMany;
124
- if ((_o$hasMany = o.hasMany) !== null && _o$hasMany !== void 0 ? _o$hasMany : !1) {
125
- for (let t$5 of o.next) if (n$1(t$5, r$2, i$1.slice(e + 1))) return !0;
126
- return s;
127
- }
128
- a = o.next;
129
- }
130
- if (!o.hasNext) break;
131
- o.done && (s = !0);
132
- }
133
- return o.hasNext && r$2.push(a), s;
134
- }
135
- require_getRelativePath.__name(n$1, "n");
136
- function r$1(e) {
137
- var _t$single;
138
- let { lazy: t$3, lazyArgs: n$2 } = e;
139
- let r$2 = t$3(...n$2);
140
- return Object.assign(r$2, {
141
- isSingle: (_t$single = t$3.single) !== null && _t$single !== void 0 ? _t$single : !1,
142
- index: 0,
143
- items: []
144
- });
145
- }
146
- require_getRelativePath.__name(r$1, "r");
147
- function i(e) {
148
- return typeof e == `string` || typeof e == `object` && !!e && Symbol.iterator in e;
149
- }
150
-
151
- //#endregion
152
- //#region ../../node_modules/.pnpm/remeda@2.33.4/node_modules/remeda/dist/purryFromLazy-C1RBdBlx.js
153
- function t(t$3, n$2) {
154
- let r$2 = n$2.length - t$3.length;
155
- if (r$2 === 1) {
156
- let [r$3, ...i$1] = n$2;
157
- return t$1(r$3, {
158
- lazy: t$3,
159
- lazyArgs: i$1
160
- });
161
- }
162
- if (r$2 === 0) {
163
- let r$3 = {
164
- lazy: t$3,
165
- lazyArgs: n$2
166
- };
167
- return Object.assign((t$4) => t$1(t$4, r$3), r$3);
168
- }
169
- throw Error(`Wrong number of arguments`);
170
- }
171
-
172
- //#endregion
173
- //#region ../../node_modules/.pnpm/remeda@2.33.4/node_modules/remeda/dist/uniqueBy.js
174
- function n(...e) {
175
- return t(r, e);
176
- }
177
- function r(t$3) {
178
- let n$2 = t$3;
179
- let r$2 = /* @__PURE__ */ new Set();
180
- return (t$4, i$1, a) => {
181
- let o = n$2(t$4, i$1, a);
182
- return r$2.has(o) ? t$2 : (r$2.add(o), {
183
- done: !1,
184
- hasNext: !0,
185
- next: t$4
186
- });
187
- };
188
- }
189
-
190
84
  //#endregion
191
85
  //#region src/createFile.ts
192
86
  function combineSources(sources) {
193
- return n(sources, (obj) => {
87
+ return (0, remeda.uniqueBy)(sources, (obj) => {
194
88
  var _ref;
195
89
  var _obj$name;
196
90
  var _obj$isExportable;
@@ -198,8 +92,8 @@ function combineSources(sources) {
198
92
  return `${(_ref = (_obj$name = obj.name) !== null && _obj$name !== void 0 ? _obj$name : obj.value) !== null && _ref !== void 0 ? _ref : ""}:${(_obj$isExportable = obj.isExportable) !== null && _obj$isExportable !== void 0 ? _obj$isExportable : false}:${(_obj$isTypeOnly = obj.isTypeOnly) !== null && _obj$isTypeOnly !== void 0 ? _obj$isTypeOnly : false}`;
199
93
  });
200
94
  }
201
- function combineExports(exports$1) {
202
- const sorted = (0, natural_orderby.orderBy)(exports$1, [
95
+ function combineExports(exports) {
96
+ const sorted = (0, natural_orderby.orderBy)(exports, [
203
97
  (v) => !!Array.isArray(v.name),
204
98
  (v) => !v.isTypeOnly,
205
99
  (v) => v.path,
@@ -241,9 +135,9 @@ function combineExports(exports$1) {
241
135
  }
242
136
  return prev;
243
137
  }
244
- function combineImports(imports, exports$1, source) {
138
+ function combineImports(imports, exports, source) {
245
139
  const exportedNameLookup = /* @__PURE__ */ new Set();
246
- for (const item of exports$1) {
140
+ for (const item of exports) {
247
141
  const { name } = item;
248
142
  if (!name) continue;
249
143
  if (Array.isArray(name)) {
@@ -316,8 +210,8 @@ function createFile(file) {
316
210
  const extname = node_path.default.extname(file.baseName);
317
211
  if (!extname) throw new Error(`No extname found for ${file.baseName}`);
318
212
  const source = file.sources.map((item) => item.value).join("\n\n");
319
- const exports$1 = ((_file$exports = file.exports) === null || _file$exports === void 0 ? void 0 : _file$exports.length) ? combineExports(file.exports) : [];
320
- const imports = ((_file$imports = file.imports) === null || _file$imports === void 0 ? void 0 : _file$imports.length) && source ? combineImports(file.imports, exports$1, source) : [];
213
+ const exports = ((_file$exports = file.exports) === null || _file$exports === void 0 ? void 0 : _file$exports.length) ? combineExports(file.exports) : [];
214
+ const imports = ((_file$imports = file.imports) === null || _file$imports === void 0 ? void 0 : _file$imports.length) && source ? combineImports(file.imports, exports, source) : [];
321
215
  const sources = ((_file$sources = file.sources) === null || _file$sources === void 0 ? void 0 : _file$sources.length) ? combineSources(file.sources) : [];
322
216
  return {
323
217
  ...file,
@@ -325,41 +219,41 @@ function createFile(file) {
325
219
  name: require_getRelativePath.trimExtName(file.baseName),
326
220
  extname,
327
221
  imports,
328
- exports: exports$1,
222
+ exports,
329
223
  sources,
330
224
  meta: file.meta || {}
331
225
  };
332
226
  }
333
227
 
334
228
  //#endregion
335
- //#region \0@oxc-project+runtime@0.107.0/helpers/checkPrivateRedeclaration.js
336
- function _checkPrivateRedeclaration(e, t$3) {
337
- if (t$3.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object");
229
+ //#region \0@oxc-project+runtime@0.110.0/helpers/checkPrivateRedeclaration.js
230
+ function _checkPrivateRedeclaration(e, t) {
231
+ if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object");
338
232
  }
339
233
 
340
234
  //#endregion
341
- //#region \0@oxc-project+runtime@0.107.0/helpers/classPrivateFieldInitSpec.js
342
- function _classPrivateFieldInitSpec(e, t$3, a) {
343
- _checkPrivateRedeclaration(e, t$3), t$3.set(e, a);
235
+ //#region \0@oxc-project+runtime@0.110.0/helpers/classPrivateFieldInitSpec.js
236
+ function _classPrivateFieldInitSpec(e, t, a) {
237
+ _checkPrivateRedeclaration(e, t), t.set(e, a);
344
238
  }
345
239
 
346
240
  //#endregion
347
- //#region \0@oxc-project+runtime@0.107.0/helpers/assertClassBrand.js
348
- function _assertClassBrand(e, t$3, n$2) {
349
- if ("function" == typeof e ? e === t$3 : e.has(t$3)) return arguments.length < 3 ? t$3 : n$2;
241
+ //#region \0@oxc-project+runtime@0.110.0/helpers/assertClassBrand.js
242
+ function _assertClassBrand(e, t, n) {
243
+ if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;
350
244
  throw new TypeError("Private element is not present on this object");
351
245
  }
352
246
 
353
247
  //#endregion
354
- //#region \0@oxc-project+runtime@0.107.0/helpers/classPrivateFieldGet2.js
248
+ //#region \0@oxc-project+runtime@0.110.0/helpers/classPrivateFieldGet2.js
355
249
  function _classPrivateFieldGet2(s, a) {
356
250
  return s.get(_assertClassBrand(s, a));
357
251
  }
358
252
 
359
253
  //#endregion
360
- //#region \0@oxc-project+runtime@0.107.0/helpers/classPrivateFieldSet2.js
361
- function _classPrivateFieldSet2(s, a, r$2) {
362
- return s.set(_assertClassBrand(s, a), r$2), r$2;
254
+ //#region \0@oxc-project+runtime@0.110.0/helpers/classPrivateFieldSet2.js
255
+ function _classPrivateFieldSet2(s, a, r) {
256
+ return s.set(_assertClassBrand(s, a), r), r;
363
257
  }
364
258
 
365
259
  //#endregion
@@ -416,45 +310,45 @@ var AsyncEventEmitter = class {
416
310
  };
417
311
 
418
312
  //#endregion
419
- //#region \0@oxc-project+runtime@0.107.0/helpers/typeof.js
313
+ //#region \0@oxc-project+runtime@0.110.0/helpers/typeof.js
420
314
  function _typeof(o) {
421
315
  "@babel/helpers - typeof";
422
- return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o$1) {
423
- return typeof o$1;
424
- } : function(o$1) {
425
- return o$1 && "function" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? "symbol" : typeof o$1;
316
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
317
+ return typeof o;
318
+ } : function(o) {
319
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
426
320
  }, _typeof(o);
427
321
  }
428
322
 
429
323
  //#endregion
430
- //#region \0@oxc-project+runtime@0.107.0/helpers/toPrimitive.js
431
- function toPrimitive(t$3, r$2) {
432
- if ("object" != _typeof(t$3) || !t$3) return t$3;
433
- var e = t$3[Symbol.toPrimitive];
324
+ //#region \0@oxc-project+runtime@0.110.0/helpers/toPrimitive.js
325
+ function toPrimitive(t, r) {
326
+ if ("object" != _typeof(t) || !t) return t;
327
+ var e = t[Symbol.toPrimitive];
434
328
  if (void 0 !== e) {
435
- var i$1 = e.call(t$3, r$2 || "default");
436
- if ("object" != _typeof(i$1)) return i$1;
329
+ var i = e.call(t, r || "default");
330
+ if ("object" != _typeof(i)) return i;
437
331
  throw new TypeError("@@toPrimitive must return a primitive value.");
438
332
  }
439
- return ("string" === r$2 ? String : Number)(t$3);
333
+ return ("string" === r ? String : Number)(t);
440
334
  }
441
335
 
442
336
  //#endregion
443
- //#region \0@oxc-project+runtime@0.107.0/helpers/toPropertyKey.js
444
- function toPropertyKey(t$3) {
445
- var i$1 = toPrimitive(t$3, "string");
446
- return "symbol" == _typeof(i$1) ? i$1 : i$1 + "";
337
+ //#region \0@oxc-project+runtime@0.110.0/helpers/toPropertyKey.js
338
+ function toPropertyKey(t) {
339
+ var i = toPrimitive(t, "string");
340
+ return "symbol" == _typeof(i) ? i : i + "";
447
341
  }
448
342
 
449
343
  //#endregion
450
- //#region \0@oxc-project+runtime@0.107.0/helpers/defineProperty.js
451
- function _defineProperty(e, r$2, t$3) {
452
- return (r$2 = toPropertyKey(r$2)) in e ? Object.defineProperty(e, r$2, {
453
- value: t$3,
344
+ //#region \0@oxc-project+runtime@0.110.0/helpers/defineProperty.js
345
+ function _defineProperty(e, r, t) {
346
+ return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
347
+ value: t,
454
348
  enumerable: !0,
455
349
  configurable: !0,
456
350
  writable: !0
457
- }) : e[r$2] = t$3, e;
351
+ }) : e[r] = t, e;
458
352
  }
459
353
 
460
354
  //#endregion
@@ -543,7 +437,7 @@ var Cache = class {
543
437
  };
544
438
 
545
439
  //#endregion
546
- //#region \0@oxc-project+runtime@0.107.0/helpers/classPrivateMethodInitSpec.js
440
+ //#region \0@oxc-project+runtime@0.110.0/helpers/classPrivateMethodInitSpec.js
547
441
  function _classPrivateMethodInitSpec(e, a) {
548
442
  _checkPrivateRedeclaration(e, a), a.add(e);
549
443
  }
@@ -615,11 +509,11 @@ var FileManager = class {
615
509
  _classPrivateFieldSet2(_filesCache, this, null);
616
510
  _classPrivateFieldGet2(_cache, this).flush();
617
511
  }
618
- getByPath(path$1) {
619
- return _classPrivateFieldGet2(_cache, this).get(path$1);
512
+ getByPath(path) {
513
+ return _classPrivateFieldGet2(_cache, this).get(path);
620
514
  }
621
- deleteByPath(path$1) {
622
- _classPrivateFieldGet2(_cache, this).delete(path$1);
515
+ deleteByPath(path) {
516
+ _classPrivateFieldGet2(_cache, this).delete(path);
623
517
  _classPrivateFieldSet2(_filesCache, this, null);
624
518
  }
625
519
  clear() {
@@ -696,8 +590,8 @@ var TreeNode = class TreeNode {
696
590
  }
697
591
  forEach(callback) {
698
592
  const stack = [this];
699
- for (let i$1 = 0; i$1 < stack.length; i$1++) {
700
- const node = stack[i$1];
593
+ for (let i = 0; i < stack.length; i++) {
594
+ const node = stack[i];
701
595
  callback(node);
702
596
  if (node.children.length > 0) stack.push(...node.children);
703
597
  }
@@ -710,8 +604,8 @@ var TreeNode = class TreeNode {
710
604
  const nodes = [];
711
605
  const edges = [];
712
606
  const stack = [root];
713
- for (let i$1 = 0; i$1 < stack.length; i$1++) {
714
- const node = stack[i$1];
607
+ for (let i = 0; i < stack.length; i++) {
608
+ const node = stack[i];
715
609
  nodes.push({
716
610
  id: node.data.path,
717
611
  label: node.data.name
@@ -834,7 +728,7 @@ function renderIndent(content, renderContext) {
834
728
  const indentStr = " ".repeat(renderContext.indentLevel * renderContext.indentSize);
835
729
  const lines = content.split("\n");
836
730
  let out = "";
837
- for (const [i$1, line] of lines.entries()) {
731
+ for (const [i, line] of lines.entries()) {
838
732
  if (renderContext.currentLineLength === 0 && line.length > 0) {
839
733
  out += indentStr + line;
840
734
  renderContext.currentLineLength = indentStr.length + line.length;
@@ -842,7 +736,7 @@ function renderIndent(content, renderContext) {
842
736
  out += line;
843
737
  renderContext.currentLineLength += line.length;
844
738
  }
845
- if (i$1 !== lines.length - 1) {
739
+ if (i !== lines.length - 1) {
846
740
  out += "\n";
847
741
  renderContext.currentLineLength = 0;
848
742
  }
@@ -1054,4 +948,4 @@ Object.defineProperty(exports, 'unprovide', {
1054
948
  return unprovide;
1055
949
  }
1056
950
  });
1057
- //# sourceMappingURL=Root-SC_lWG_q.cjs.map
951
+ //# sourceMappingURL=Root-DvQofGOy.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Root-DvQofGOy.cjs","names":["path","trimExtName","NodeEventEmitter","defaultParser","trimExtName"],"sources":["../src/context.ts","../src/contexts/NodeTreeContext.ts","../src/createFile.ts","../src/utils/AsyncEventEmitter.ts","../src/FileProcessor.ts","../src/utils/Cache.ts","../src/FileManager.ts","../src/utils/TreeNode.ts","../src/contexts/RootContext.ts","../src/contexts/RenderContext.ts","../src/intrinsic.ts","../src/createComponent.ts","../src/components/Root.ts"],"sourcesContent":["/**\n * Context type that carries type information about its value\n * This is a branded symbol type that enables type-safe context usage\n */\nexport type Context<T> = symbol & { readonly __type: T }\n\n/**\n * Context stack for tracking the current context values\n *\n * Note: This uses a global Map for simplicity in code generation scenarios.\n * For concurrent runtime execution, consider using AsyncLocalStorage or\n * instance-based context management.\n */\nconst contextStack = new Map<symbol, unknown[]>()\nconst contextDefaults = new Map<symbol, unknown>()\n\n/**\n * Provides a value to descendant components (Vue 3 style)\n *\n * @example\n * ```ts\n * const ThemeKey = Symbol('theme')\n * provide(ThemeKey, { color: 'blue' })\n * ```\n */\nexport function provide<T>(key: symbol | Context<T>, value: T): void {\n if (!contextStack.has(key)) {\n contextStack.set(key, [])\n }\n contextStack.get(key)!.push(value)\n}\n\n/**\n * Injects a value provided by an ancestor component (Vue 3 style)\n *\n * @example\n * ```ts\n * const theme = inject(ThemeKey, { color: 'default' })\n * ```\n */\nexport function inject<T>(key: symbol | Context<T>, defaultValue?: T): T {\n const stack = contextStack.get(key)\n if (!stack || stack.length === 0) {\n if (defaultValue !== undefined) {\n return defaultValue\n }\n const storedDefault = contextDefaults.get(key)\n if (storedDefault !== undefined) {\n return storedDefault as T\n }\n throw new Error(`No value provided for key: ${key.toString()}`)\n }\n return stack[stack.length - 1] as T\n}\n\n/**\n * Unprovides a value (for cleanup)\n * @internal\n */\nexport function unprovide<T>(key: symbol | Context<T>): void {\n const stack = contextStack.get(key)\n if (stack && stack.length > 0) {\n stack.pop()\n }\n}\n\n/**\n * Creates a context key with a default value (React-style compatibility)\n *\n * @example\n * ```ts\n * const ThemeContext = createContext({ color: 'blue' })\n * // ThemeContext is now typed as Context<{ color: string }>\n * const theme = useContext(ThemeContext) // theme is { color: string }\n * ```\n */\nexport function createContext<T>(defaultValue: T): Context<T> {\n const key = Symbol('context') as Context<T>\n contextDefaults.set(key, defaultValue)\n\n return key\n}\n","import type { ComponentNode } from '../composables/useNodeTree.ts'\nimport { createContext } from '../context.ts'\nimport type { TreeNode } from '../utils/TreeNode.ts'\n\n/**\n * Context for having the current NodeTree\n */\nexport const NodeTreeContext = createContext<TreeNode<ComponentNode> | null>(null)\n","import { createHash } from 'node:crypto'\nimport path from 'node:path'\nimport { orderBy } from 'natural-orderby'\nimport { uniqueBy } from 'remeda'\nimport type * as KubbFile from './KubbFile.ts'\nimport { trimExtName } from './utils/trimExtName.ts'\n\nexport function combineSources(sources: Array<KubbFile.Source>): Array<KubbFile.Source> {\n return uniqueBy(sources, (obj) => {\n // For named sources, deduplicate by name, isExportable, and isTypeOnly\n // For unnamed sources, include the value to avoid deduplicating different code blocks\n // If both name and value are undefined, use an empty string as the unique identifier\n const uniqueId = obj.name ?? obj.value ?? ''\n const isExportable = obj.isExportable ?? false\n const isTypeOnly = obj.isTypeOnly ?? false\n return `${uniqueId}:${isExportable}:${isTypeOnly}`\n })\n}\n\nexport function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {\n const sorted = 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 ])\n\n const prev: Array<KubbFile.Export> = []\n // Map to track items by path for O(1) lookup\n const pathMap = new Map<string, KubbFile.Export>()\n // Map to track unique items by path+name+isTypeOnly+asAlias\n const uniqueMap = new Map<string, KubbFile.Export>()\n // Map to track items by path+name where isTypeOnly=true (for type-only check)\n const pathNameTypeTrueMap = new Map<string, KubbFile.Export>()\n\n for (const curr of sorted) {\n const name = curr.name\n const pathKey = curr.path\n const prevByPath = pathMap.get(pathKey)\n\n // Create unique key for path+name+isTypeOnly\n const nameKey = Array.isArray(name) ? JSON.stringify(name) : name || ''\n const pathNameTypeKey = `${pathKey}:${nameKey}:${curr.isTypeOnly}`\n // Check if there's already an item with the same path+name but with isTypeOnly=true\n const pathNameKey = `${pathKey}:${nameKey}`\n const prevByPathAndIsTypeOnly = pathNameTypeTrueMap.get(pathNameKey)\n\n if (prevByPathAndIsTypeOnly) {\n // we already have an export that has the same path and name but uses `isTypeOnly` (export type ...)\n continue\n }\n\n // Create unique key for path+name+isTypeOnly+asAlias\n const uniqueKey = `${pathNameTypeKey}:${curr.asAlias || ''}`\n const uniquePrev = uniqueMap.get(uniqueKey)\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 continue\n }\n\n if (!prevByPath) {\n const newItem = {\n ...curr,\n name: Array.isArray(name) ? [...new Set(name)] : name,\n }\n prev.push(newItem)\n pathMap.set(pathKey, newItem)\n uniqueMap.set(uniqueKey, newItem)\n // Track items with isTypeOnly=true for the type-only check\n if (newItem.isTypeOnly) {\n pathNameTypeTrueMap.set(pathNameKey, newItem)\n }\n continue\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 continue\n }\n\n prev.push(curr)\n uniqueMap.set(uniqueKey, curr)\n // Track items with isTypeOnly=true for the type-only check\n if (curr.isTypeOnly) {\n pathNameTypeTrueMap.set(pathNameKey, curr)\n }\n }\n\n return prev\n}\n\nexport function combineImports(imports: Array<KubbFile.Import>, exports: Array<KubbFile.Export>, source?: string): Array<KubbFile.Import> {\n const exportedNameLookup = new Set<string>()\n for (const item of exports) {\n const { name } = item\n if (!name) {\n continue\n }\n\n if (Array.isArray(name)) {\n for (const value of name) {\n if (value) {\n exportedNameLookup.add(value)\n }\n }\n continue\n }\n\n exportedNameLookup.add(name)\n }\n\n const usageCache = new Map<string, boolean>()\n const hasImportInSource = (importName: string): boolean => {\n if (!source) {\n return true\n }\n\n const cached = usageCache.get(importName)\n if (cached !== undefined) {\n return cached\n }\n\n const isUsed = source.includes(importName) || exportedNameLookup.has(importName)\n usageCache.set(importName, isUsed)\n\n return isUsed\n }\n\n const sorted = 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 ])\n\n const prev: Array<KubbFile.Import> = []\n // Map to track items by path+isTypeOnly for O(1) lookup\n const pathTypeMap = new Map<string, KubbFile.Import>()\n // Map to track unique items by path+name+isTypeOnly\n const uniqueMap = new Map<string, KubbFile.Import>()\n // Map to track items by path+name where isTypeOnly=true (for type-only check)\n const pathNameTypeTrueMap = new Map<string, KubbFile.Import>()\n\n for (const curr of sorted) {\n let name = Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name\n\n if (curr.path === curr.root) {\n // root and path are the same file, remove the \"./\" import\n continue\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 pathTypeKey = `${curr.path}:${curr.isTypeOnly}`\n const prevByPath = pathTypeMap.get(pathTypeKey)\n\n // Create key for name comparison\n const nameKey = Array.isArray(name) ? JSON.stringify(name) : name || ''\n const pathNameTypeKey = `${curr.path}:${nameKey}:${curr.isTypeOnly}`\n const uniquePrev = uniqueMap.get(pathNameTypeKey)\n // Check if there's already an item with the same path+name but with isTypeOnly=true\n const pathNameKey = `${curr.path}:${nameKey}`\n const prevByPathNameAndIsTypeOnly = pathNameTypeTrueMap.get(pathNameKey)\n\n if (prevByPathNameAndIsTypeOnly) {\n // we already have an import that has the same path and name but uses `isTypeOnly` (import type ...)\n continue\n }\n\n // already unique enough or name is empty\n if (uniquePrev || (Array.isArray(name) && !name.length)) {\n continue\n }\n\n // new item, append name\n if (!prevByPath) {\n const newItem = {\n ...curr,\n name,\n }\n prev.push(newItem)\n pathTypeMap.set(pathTypeKey, newItem)\n uniqueMap.set(pathNameTypeKey, newItem)\n // Track items with isTypeOnly=true for the type-only check\n if (newItem.isTypeOnly) {\n pathNameTypeTrueMap.set(pathNameKey, newItem)\n }\n continue\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 continue\n }\n\n // no import was found in the source, ignore import\n if (!Array.isArray(name) && name && !hasImportInSource(name)) {\n continue\n }\n\n prev.push(curr)\n uniqueMap.set(pathNameTypeKey, curr)\n // Track items with isTypeOnly=true for the type-only check\n if (curr.isTypeOnly) {\n pathNameTypeTrueMap.set(pathNameKey, curr)\n }\n }\n\n return prev\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: createHash('sha256').update(file.path).digest('hex'),\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'\nimport type { FabricMode } from '../Fabric.ts'\n\ntype Options = {\n mode?: FabricMode\n maxListener?: number\n}\n\nexport class AsyncEventEmitter<TEvents extends Record<string, any>> {\n constructor({ maxListener = 100, mode = 'sequential' }: Options = {}) {\n this.#emitter.setMaxListeners(maxListener)\n this.#mode = mode\n }\n\n #emitter = new NodeEventEmitter()\n #mode: FabricMode\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\n }\n\n const errors: Error[] = []\n\n if (this.#mode === 'sequential') {\n // Run listeners one by one, in order\n for (const listener of listeners) {\n try {\n await listener(...eventArgs)\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n errors.push(error)\n }\n }\n } else {\n // Run all listeners concurrently\n const promises = listeners.map(async (listener) => {\n try {\n await listener(...eventArgs)\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n errors.push(error)\n }\n })\n await Promise.all(promises)\n }\n\n if (errors.length === 1) {\n throw errors[0]\n }\n\n if (errors.length > 1) {\n throw new AggregateError(errors, `Errors in async listeners for \"${eventName}\"`)\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\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","import pLimit from 'p-limit'\nimport type { FabricEvents, FabricMode } from './Fabric.ts'\nimport type * as KubbFile from './KubbFile.ts'\nimport { defaultParser } from './parsers/defaultParser.ts'\nimport type { Parser } from './parsers/types.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\n\nexport type ProcessFilesProps = {\n parsers?: Map<KubbFile.Extname, Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n dryRun?: boolean\n /**\n * @default 'sequential'\n */\n mode?: FabricMode\n}\n\ntype GetParseOptions = {\n parsers?: Map<KubbFile.Extname, Parser>\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n}\n\ntype Options = {\n events?: AsyncEventEmitter<FabricEvents>\n}\n\nexport class FileProcessor {\n #limit = pLimit(100)\n events: AsyncEventEmitter<FabricEvents>\n\n constructor({ events = new AsyncEventEmitter<FabricEvents>() }: 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 const parser = parsers.get(file.extname)\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('files:processing:start', files)\n\n const total = files.length\n let processed = 0\n\n const processOne = async (resolvedFile: KubbFile.ResolvedFile, index: number) => {\n await this.events.emit('file:processing:start', resolvedFile, index, total)\n\n const source = dryRun ? undefined : await this.parse(resolvedFile, { extension, parsers })\n\n const currentProcessed = ++processed\n const percentage = (currentProcessed / total) * 100\n\n await this.events.emit('file:processing:update', {\n file: resolvedFile,\n source,\n processed: currentProcessed,\n percentage,\n total,\n })\n\n await this.events.emit('file:processing:end', 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('files:processing:end', files)\n\n return files\n }\n}\n","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 { orderBy } from 'natural-orderby'\nimport { createFile } from './createFile.ts'\nimport type { FabricEvents } from './Fabric.ts'\nimport { FileProcessor, type ProcessFilesProps } from './FileProcessor.ts'\nimport type * as KubbFile from './KubbFile.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\nimport { Cache } from './utils/Cache.ts'\nimport { trimExtName } from './utils/trimExtName.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<FabricEvents>\n}\n\nexport class FileManager {\n #cache = new Cache<KubbFile.ResolvedFile>()\n #filesCache: Array<KubbFile.ResolvedFile> | null = null\n events: AsyncEventEmitter<FabricEvents>\n processor: FileProcessor\n\n constructor({ events = new AsyncEventEmitter<FabricEvents>() }: Options = {}) {\n this.processor = new FileProcessor({ events })\n\n this.events = events\n return this\n }\n\n #resolvePath(file: KubbFile.File): KubbFile.File {\n this.events.emit('file:resolve:path', file)\n\n return file\n }\n\n #resolveName(file: KubbFile.File): KubbFile.File {\n this.events.emit('file:resolve:name', file)\n\n return file\n }\n\n add(...files: Array<KubbFile.File>): Array<KubbFile.ResolvedFile> {\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 (let file of mergedFiles.values()) {\n file = this.#resolveName(file)\n file = this.#resolvePath(file)\n\n const resolvedFile = createFile(file)\n\n this.#cache.set(resolvedFile.path, resolvedFile)\n this.flush()\n\n resolvedFiles.push(resolvedFile)\n }\n\n this.events.emit('files:added', resolvedFiles)\n\n return resolvedFiles\n }\n\n upsert(...files: Array<KubbFile.File>): Array<KubbFile.ResolvedFile> {\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 (let file of mergedFiles.values()) {\n const existing = this.#cache.get(file.path)\n\n file = this.#resolveName(file)\n file = this.#resolvePath(file)\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 this.events.emit('files:added', resolvedFiles)\n\n return resolvedFiles\n }\n\n flush() {\n this.#filesCache = null\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 this.#filesCache = null\n }\n\n clear(): void {\n this.#cache.clear()\n this.#filesCache = null\n }\n\n get files(): Array<KubbFile.ResolvedFile> {\n if (this.#filesCache) {\n return this.#filesCache\n }\n\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: Array<KubbFile.ResolvedFile> = []\n\n for (const key of keys) {\n const file = this.#cache.get(key)\n if (file) {\n files.push(file)\n }\n }\n\n this.#filesCache = files\n\n return files\n }\n\n //TODO add test and check if write of FileManager contains the newly added file\n async write(options: ProcessFilesProps): Promise<KubbFile.ResolvedFile[]> {\n await this.events.emit('files:writing:start', this.files)\n\n const resolvedFiles = await this.processor.run(this.files, options)\n\n this.clear()\n\n await this.events.emit('files:writing:end', resolvedFiles)\n\n return resolvedFiles\n }\n}\n","import type * as KubbFile from '../KubbFile.ts'\n\ntype BarrelData = {\n file?: KubbFile.File\n path: string\n name: string\n}\n\nexport type Graph = {\n nodes: Array<{ id: string; label: string }>\n edges: Array<{ from: string; to: string }>\n}\n\nexport class TreeNode<TData = unknown> {\n data: TData\n parent?: TreeNode<TData>\n children: Array<TreeNode<TData>> = []\n #childrenMap = new Map<string, TreeNode<TData>>()\n #cachedLeaves?: Array<TreeNode<TData>>\n\n constructor(data: TData, parent?: TreeNode<TData>) {\n this.data = data\n this.parent = parent\n }\n\n addChild(data: TData): TreeNode<TData> {\n const child = new TreeNode(data, this)\n this.children.push(child)\n // Update Map if data has a name property (for BarrelData)\n if (typeof data === 'object' && data !== null && 'name' in data) {\n this.#childrenMap.set((data as { name: string }).name, child)\n }\n this.#cachedLeaves = undefined // invalidate cached leaves\n return child\n }\n\n getChildByName(name: string): TreeNode<TData> | undefined {\n return this.#childrenMap.get(name)\n }\n\n get leaves(): Array<TreeNode<TData>> {\n if (this.#cachedLeaves) return this.#cachedLeaves\n if (this.children.length === 0) return [this]\n\n const result: Array<TreeNode<TData>> = []\n const stack: Array<TreeNode<TData>> = [...this.children]\n const visited = new Set<TreeNode<TData>>()\n\n while (stack.length > 0) {\n const node = stack.pop()!\n if (visited.has(node)) {\n continue\n }\n visited.add(node)\n\n if (node.children.length > 0) {\n stack.push(...node.children)\n } else {\n result.push(node)\n }\n }\n\n this.#cachedLeaves = result\n return result\n }\n\n forEach(callback: (node: TreeNode<TData>) => void): this {\n const stack: Array<TreeNode<TData>> = [this]\n\n for (let i = 0; i < stack.length; i++) {\n const node = stack[i]!\n callback(node)\n\n if (node.children.length > 0) {\n stack.push(...node.children)\n }\n }\n\n return this\n }\n\n findDeep(predicate: (node: TreeNode<TData>) => boolean): TreeNode<TData> | undefined {\n for (const leaf of this.leaves) {\n if (predicate(leaf)) return leaf\n }\n return undefined\n }\n\n static toGraph(root: TreeNode<BarrelData>): Graph {\n const nodes: Array<{ id: string; label: string }> = []\n const edges: Array<{ from: string; to: string }> = []\n\n const stack: Array<TreeNode<BarrelData>> = [root]\n\n for (let i = 0; i < stack.length; i++) {\n const node = stack[i]!\n\n nodes.push({\n id: node.data.path,\n label: node.data.name,\n })\n\n const children = node.children\n if (children.length > 0) {\n for (let j = 0, len = children.length; j < len; j++) {\n const child = children[j]!\n edges.push({\n from: node.data.path,\n to: child.data.path,\n })\n stack.push(child)\n }\n }\n }\n\n return { nodes, edges }\n }\n\n static fromFiles(files: Array<KubbFile.File>, rootFolder = ''): TreeNode<BarrelData> | null {\n const normalizePath = (p: string): string => p.replace(/\\\\/g, '/')\n const normalizedRoot = normalizePath(rootFolder)\n const rootPrefix = normalizedRoot.endsWith('/') ? normalizedRoot : `${normalizedRoot}/`\n\n const normalizedPaths = new Map<KubbFile.File, string>()\n const filteredFiles: Array<KubbFile.File> = []\n for (const file of files) {\n const filePath = normalizedPaths.get(file) ?? normalizePath(file.path)\n normalizedPaths.set(file, filePath)\n if (!filePath.endsWith('.json') && (!rootFolder || filePath.startsWith(rootPrefix))) {\n filteredFiles.push(file)\n }\n }\n\n if (filteredFiles.length === 0) {\n return null\n }\n\n const treeNode = new TreeNode<BarrelData>({\n name: rootFolder || '',\n path: rootFolder || '',\n file: undefined,\n })\n\n for (const file of filteredFiles) {\n const filePath = normalizedPaths.get(file)!\n const relPath = filePath.slice(rootPrefix.length)\n const parts = relPath.split('/')\n\n let current = treeNode\n let currentPath = rootFolder\n\n for (const [index, part] of parts.entries()) {\n const isLast = index === parts.length - 1\n currentPath += (currentPath.endsWith('/') ? '' : '/') + part\n\n let next = current.getChildByName(part)\n\n if (!next) {\n next = current.addChild({\n name: part,\n path: currentPath,\n file: isLast ? file : undefined,\n })\n }\n\n current = next\n }\n }\n\n return treeNode\n }\n}\n","import type { ComponentNode } from '../composables/useNodeTree.ts'\nimport { createContext } from '../context.ts'\nimport { FileManager } from '../FileManager.ts'\nimport { TreeNode } from '../utils/TreeNode.ts'\n\nexport type RootContextProps = {\n /**\n * Exit (unmount) the whole app.\n */\n exit: (error?: Error) => void\n /**\n * TreeNode representing the tree structure of the app.\n */\n treeNode: TreeNode<ComponentNode>\n /**\n * FileManager instance for managing files within the app.\n */\n fileManager: FileManager\n}\n\n/**\n * Context providing root-level functionalities such as exit hook, tree node structure, and file management.\n * Define in the `render` helper of the runtime.\n */\nexport const RootContext = createContext<RootContextProps>({\n exit: () => {},\n treeNode: new TreeNode({ type: 'Root', props: {} }),\n fileManager: new FileManager(),\n})\n","import { createContext } from '../context.ts'\n\nexport type RenderContextProps = {\n indentLevel: number\n indentSize: number\n currentLineLength: number\n shouldBreak: boolean\n}\n\n/**\n * Provides a context for tracking rendering state such as indentation and line length.\n */\nexport const RenderContext = createContext<RenderContextProps>({ indentLevel: 0, indentSize: 2, currentLineLength: 0, shouldBreak: false })\n","import { inject, provide } from './context.ts'\nimport { RenderContext, type RenderContextProps } from './contexts/RenderContext.ts'\nimport type { FabricElement, FabricNode } from './Fabric.ts'\n\ntype IntrinsicType =\n | 'br' // Line break - adds newline with current indentation\n | 'indent' // Increase indentation level\n | 'dedent' // Decrease indentation level\n\nexport type Intrinsic = {\n type: IntrinsicType\n __intrinsic: true\n}\n\nfunction isFabricElement<TProps extends object = object>(value: any): value is FabricElement<TProps> {\n return typeof value === 'function' && 'type' in value && 'component' in value\n}\n\n/**\n * Type guard to check if a value is an intrinsic element\n */\nexport function isIntrinsic(value: any): value is Intrinsic {\n return value && typeof value === 'object' && value.__intrinsic === true\n}\n\n/**\n * Render a single intrinsic node\n */\nfunction renderIntrinsicNode(node: Intrinsic, renderContext: RenderContextProps): string {\n switch (node.type) {\n case 'br':\n renderContext.currentLineLength = 0\n return '\\n'\n\n case 'indent':\n renderContext.indentLevel++\n return ''\n\n case 'dedent':\n renderContext.indentLevel = Math.max(0, renderContext.indentLevel - 1)\n return ''\n\n default:\n return ''\n }\n}\n\n/**\n * Helper: render a plain string while applying current indentation at the\n * start of each logical line. This ensures `${indent}` intrinsics affect\n * subsequent string content.\n */\nexport function renderIndent(content: string, renderContext: RenderContextProps): string {\n if (content.length === 0) {\n return ''\n }\n\n const indentStr = ' '.repeat(renderContext.indentLevel * renderContext.indentSize)\n const lines = content.split('\\n')\n let out = ''\n\n for (const [i, line] of lines.entries()) {\n if (renderContext.currentLineLength === 0 && line.length > 0) {\n // At start of a (logical) line: prefix indentation\n out += indentStr + line\n renderContext.currentLineLength = indentStr.length + line.length\n } else {\n out += line\n renderContext.currentLineLength += line.length\n }\n\n // If not the last line, add newline and reset line length so next line gets indentation\n if (i !== lines.length - 1) {\n out += '\\n'\n renderContext.currentLineLength = 0\n }\n }\n\n return out\n}\n\nexport function renderIntrinsic(children: FabricNode, context?: RenderContextProps): string {\n const renderContext = context || inject(RenderContext)\n\n provide(RenderContext, renderContext)\n\n if (!children) {\n return ''\n }\n\n if (isFabricElement(children)) {\n try {\n // FabricElements are already wrapped in transform by createComponent\n // Just call them and return the result (which is already a string)\n const result = children()\n return renderIntrinsic(result)\n } catch {\n return ''\n }\n }\n\n if (Array.isArray(children)) {\n return children.map((child) => renderIntrinsic(child)).join('')\n }\n\n if (isIntrinsic(children)) {\n // Render intrinsic node(s) using the shared render context\n return renderIntrinsicNode(children, renderContext)\n }\n\n if (typeof children === 'function') {\n return renderIntrinsic(children())\n }\n\n if (typeof children === 'string') {\n return renderIndent(children, renderContext)\n }\n\n if (typeof children === 'number') {\n return renderIndent(String(children), renderContext)\n }\n\n if (typeof children === 'boolean') {\n return renderIndent(children ? 'true' : 'false', renderContext)\n }\n\n // Fallback for FabricElement/object-like values\n try {\n return renderIndent(children, renderContext)\n } catch {\n return ''\n }\n}\n\n/**\n * Create an intrinsic element\n */\nexport function createIntrinsic(type: IntrinsicType): Intrinsic {\n return {\n type,\n __intrinsic: true,\n }\n}\n","import type { FabricComponent, FabricElement, FabricNode } from './Fabric.ts'\nimport { renderIntrinsic } from './intrinsic.ts'\n\ntype MakeChildrenOptional<T extends object> = T extends { children?: any } ? Omit<T, 'children'> & Partial<Pick<T, 'children'>> : T\n\nexport type ComponentBuilder<T extends object> = {\n (...args: unknown extends T ? [] : {} extends Omit<T, 'children'> ? [props?: MakeChildrenOptional<T>] : [props: MakeChildrenOptional<T>]): FabricComponent<T>\n displayName?: string | undefined\n}\n\nexport function createComponent<TProps extends object>(type: string, Component: (props: TProps) => FabricNode): ComponentBuilder<TProps> {\n return (...args) => {\n const fn: FabricComponent<TProps> = (() => renderIntrinsic(Component(args[0] as TProps) as FabricNode)) as any\n fn.component = Component\n fn.props = args[0]! as TProps\n fn.type = type\n fn.children = (...children: Array<FabricNode>) => {\n const propsWithChildren = {\n ...(args[0] ?? {}),\n children() {\n return renderIntrinsic(children)\n },\n } as unknown as TProps\n\n const fnChild = (() => renderIntrinsic(Component(propsWithChildren) as FabricNode)) as FabricElement<TProps>\n fnChild.component = Component\n fnChild.props = args[0]! as TProps\n fnChild.type = type\n return fnChild\n }\n\n return fn\n }\n}\n","import type { ComponentNode } from '../composables/useNodeTree.ts'\nimport { provide } from '../context.ts'\nimport { NodeTreeContext } from '../contexts/NodeTreeContext.ts'\nimport { RootContext } from '../contexts/RootContext.ts'\nimport { createComponent } from '../createComponent.ts'\nimport type { FabricNode } from '../Fabric.ts'\nimport type { FileManager } from '../FileManager.ts'\nimport type { TreeNode } from '../utils/TreeNode.ts'\n\nexport type RootProps = {\n /**\n * Exit (unmount) the whole app.\n */\n onExit: (error?: Error) => void\n /**\n * Error hook receiving runtime exceptions.\n */\n onError: (error: Error) => void\n /**\n * TreeNode representing the tree structure of the app.\n */\n treeNode: TreeNode<ComponentNode>\n /**\n * FileManager instance for managing files within the app.\n */\n fileManager: FileManager\n /**\n * Children nodes.\n */\n children?: FabricNode\n}\n\n/**\n * This component provides the root behavior for the Fabric runtime.\n */\nexport const Root = createComponent('Root', ({ onError, onExit, treeNode, fileManager, children }: RootProps) => {\n provide(RootContext, { exit: onExit, treeNode, fileManager })\n provide(NodeTreeContext, treeNode)\n\n try {\n return children\n } catch (e) {\n if (e instanceof Error) {\n onError?.(e)\n }\n return ''\n }\n})\n\nRoot.displayName = 'KubbRoot'\n"],"mappings":"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"}