@kubb/fabric-core 0.11.7 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/{Fabric-BoTE1-WX.d.cts → Fabric-BbVC650D.d.cts} +86 -15
  2. package/dist/{Fabric-CWquRFa2.d.ts → Fabric-eh92yS1R.d.ts} +86 -15
  3. package/dist/Root-BT59jU0W.js +931 -0
  4. package/dist/Root-BT59jU0W.js.map +1 -0
  5. package/dist/Root-SC_lWG_q.cjs +1057 -0
  6. package/dist/Root-SC_lWG_q.cjs.map +1 -0
  7. package/dist/{defaultParser-CFIT3sEE.cjs → defaultParser-2ym3KiZd.cjs} +3 -4
  8. package/dist/{defaultParser-CFIT3sEE.cjs.map → defaultParser-2ym3KiZd.cjs.map} +1 -1
  9. package/dist/{defaultParser-DZ2kzujH.js → defaultParser-DDFR9BTS.js} +2 -2
  10. package/dist/{defaultParser-DZ2kzujH.js.map → defaultParser-DDFR9BTS.js.map} +1 -1
  11. package/dist/{getRelativePath-y7WcYR5C.js → getRelativePath-COUEoqbz.js} +11 -2
  12. package/dist/getRelativePath-COUEoqbz.js.map +1 -0
  13. package/dist/{getRelativePath-BllDunh0.cjs → getRelativePath-jYLCpluV.cjs} +16 -1
  14. package/dist/getRelativePath-jYLCpluV.cjs.map +1 -0
  15. package/dist/index.cjs +129 -448
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.cts +54 -90
  18. package/dist/index.d.ts +54 -90
  19. package/dist/index.js +92 -416
  20. package/dist/index.js.map +1 -1
  21. package/dist/parsers/typescript.cjs +7 -107
  22. package/dist/parsers/typescript.d.cts +1 -1
  23. package/dist/parsers/typescript.d.ts +1 -1
  24. package/dist/parsers/typescript.js +2 -101
  25. package/dist/parsers.cjs +7 -8
  26. package/dist/parsers.cjs.map +1 -1
  27. package/dist/parsers.d.cts +1 -1
  28. package/dist/parsers.d.ts +1 -1
  29. package/dist/parsers.js +3 -3
  30. package/dist/plugins.cjs +103 -9
  31. package/dist/plugins.cjs.map +1 -1
  32. package/dist/plugins.d.cts +32 -9
  33. package/dist/plugins.d.ts +32 -9
  34. package/dist/plugins.js +96 -3
  35. package/dist/plugins.js.map +1 -1
  36. package/dist/types-BI7rICUP.d.cts +31 -0
  37. package/dist/types-DpITKjSb.d.ts +32 -0
  38. package/dist/types.cjs +6 -0
  39. package/dist/types.cjs.map +1 -1
  40. package/dist/types.d.cts +4 -3
  41. package/dist/types.d.ts +4 -3
  42. package/dist/types.js +1 -1
  43. package/dist/types.js.map +1 -1
  44. package/dist/typescriptParser-DyosyI_A.js +101 -0
  45. package/dist/typescriptParser-DyosyI_A.js.map +1 -0
  46. package/dist/typescriptParser-qjzb2pIh.cjs +137 -0
  47. package/dist/typescriptParser-qjzb2pIh.cjs.map +1 -0
  48. package/dist/{TreeNode-DomNP5og.d.cts → useNodeTree-CmXKaRqq.d.cts} +10 -3
  49. package/dist/{TreeNode-C1VnIF0o.d.ts → useNodeTree-DUdlgys5.d.ts} +10 -3
  50. package/package.json +3 -2
  51. package/src/Fabric.ts +13 -5
  52. package/src/KubbFile.ts +3 -11
  53. package/src/components/App.ts +6 -5
  54. package/src/components/Br.ts +11 -0
  55. package/src/components/Const.ts +6 -5
  56. package/src/components/Dedent.ts +10 -0
  57. package/src/components/File.ts +21 -16
  58. package/src/components/Function.ts +17 -13
  59. package/src/components/Indent.ts +7 -0
  60. package/src/components/Root.ts +6 -5
  61. package/src/components/Type.ts +6 -5
  62. package/src/components/__snapshots__/arrow_function_with_generics.ts +3 -3
  63. package/src/components/__snapshots__/async_arrow_function.ts +3 -3
  64. package/src/components/__snapshots__/async_function.ts +2 -2
  65. package/src/components/__snapshots__/async_function_with_Promise_return_type.ts +2 -2
  66. package/src/components/__snapshots__/basic_arrow_function.ts +3 -3
  67. package/src/components/__snapshots__/basic_export.ts +1 -0
  68. package/src/components/__snapshots__/basic_function.ts +2 -2
  69. package/src/components/__snapshots__/basic_import.ts +1 -0
  70. package/src/components/__snapshots__/default_exported_arrow_function.ts +3 -3
  71. package/src/components/__snapshots__/default_exported_function.ts +2 -2
  72. package/src/components/__snapshots__/exported_arrow_function.ts +3 -3
  73. package/src/components/__snapshots__/exported_function.ts +2 -2
  74. package/src/components/__snapshots__/function_with_JSDoc.ts +2 -2
  75. package/src/components/__snapshots__/function_with_generics.ts +2 -2
  76. package/src/components/__snapshots__/function_with_parameters.ts +2 -2
  77. package/src/components/__snapshots__/function_with_return_type.ts +2 -2
  78. package/src/components/__snapshots__/matches_with_root_import.ts +1 -0
  79. package/src/components/__snapshots__/named_export.ts +1 -0
  80. package/src/components/__snapshots__/named_export_(object_advanced).ts +1 -0
  81. package/src/components/__snapshots__/named_import.ts +1 -0
  82. package/src/components/__snapshots__/named_import_(object).ts +1 -0
  83. package/src/components/__snapshots__/named_import_(object_advanced).ts +1 -0
  84. package/src/components/__snapshots__/named_typed_export.ts +1 -0
  85. package/src/components/__snapshots__/named_typed_import.ts +1 -0
  86. package/src/components/__snapshots__/typed_export.ts +1 -0
  87. package/src/components/__snapshots__/typed_import.ts +1 -0
  88. package/src/contexts/RenderContext.ts +13 -0
  89. package/src/createComponent.ts +34 -0
  90. package/src/index.ts +9 -9
  91. package/src/intrinsic.ts +143 -0
  92. package/src/plugins/fsxPlugin/Runtime.ts +96 -0
  93. package/src/plugins/fsxPlugin/fsxPlugin.ts +45 -0
  94. package/src/plugins/index.ts +1 -0
  95. package/src/types.ts +4 -1
  96. package/dist/TreeNode-CC3a0Bae.js +0 -447
  97. package/dist/TreeNode-CC3a0Bae.js.map +0 -1
  98. package/dist/TreeNode-CFchatCw.cjs +0 -494
  99. package/dist/TreeNode-CFchatCw.cjs.map +0 -1
  100. package/dist/defineParser-CVCxqqzB.cjs +0 -18
  101. package/dist/defineParser-CVCxqqzB.cjs.map +0 -1
  102. package/dist/defineParser-Lco7nlj0.js +0 -13
  103. package/dist/defineParser-Lco7nlj0.js.map +0 -1
  104. package/dist/getRelativePath-BllDunh0.cjs.map +0 -1
  105. package/dist/getRelativePath-y7WcYR5C.js.map +0 -1
  106. package/dist/parsers/typescript.cjs.map +0 -1
  107. package/dist/parsers/typescript.js.map +0 -1
  108. package/dist/types-DYepTJ6F.d.cts +0 -82
  109. package/dist/types-yNaQHNUB.d.ts +0 -83
  110. package/src/components/Text.ts +0 -27
package/dist/index.cjs CHANGED
@@ -1,93 +1,16 @@
1
- const require_getRelativePath = require('./getRelativePath-BllDunh0.cjs');
2
- const require_TreeNode = require('./TreeNode-CFchatCw.cjs');
3
- const require_defaultParser = require('./defaultParser-CFIT3sEE.cjs');
4
- let natural_orderby = require("natural-orderby");
5
- let p_limit = require("p-limit");
6
- p_limit = require_getRelativePath.__toESM(p_limit);
7
- let node_events = require("node:events");
1
+ const require_getRelativePath = require('./getRelativePath-jYLCpluV.cjs');
2
+ const require_Root = require('./Root-SC_lWG_q.cjs');
3
+ const require_typescriptParser = require('./typescriptParser-qjzb2pIh.cjs');
8
4
 
9
- //#region src/context.ts
10
- /**
11
- * Context stack for tracking the current context values
12
- *
13
- * Note: This uses a global Map for simplicity in code generation scenarios.
14
- * For concurrent runtime execution, consider using AsyncLocalStorage or
15
- * instance-based context management.
16
- */
17
- const contextStack = /* @__PURE__ */ new Map();
18
- const contextDefaults = /* @__PURE__ */ new Map();
19
- /**
20
- * Provides a value to descendant components (Vue 3 style)
21
- *
22
- * @example
23
- * ```ts
24
- * const ThemeKey = Symbol('theme')
25
- * provide(ThemeKey, { color: 'blue' })
26
- * ```
27
- */
28
- function provide(key, value) {
29
- if (!contextStack.has(key)) contextStack.set(key, []);
30
- contextStack.get(key).push(value);
31
- }
32
- /**
33
- * Injects a value provided by an ancestor component (Vue 3 style)
34
- *
35
- * @example
36
- * ```ts
37
- * const theme = inject(ThemeKey, { color: 'default' })
38
- * ```
39
- */
40
- function inject(key, defaultValue) {
41
- const stack = contextStack.get(key);
42
- if (!stack || stack.length === 0) {
43
- if (defaultValue !== void 0) return defaultValue;
44
- const storedDefault = contextDefaults.get(key);
45
- if (storedDefault !== void 0) return storedDefault;
46
- throw new Error(`No value provided for key: ${key.toString()}`);
47
- }
48
- return stack[stack.length - 1];
49
- }
50
- /**
51
- * Unprovides a value (for cleanup)
52
- * @internal
53
- */
54
- function unprovide(key) {
55
- const stack = contextStack.get(key);
56
- if (stack && stack.length > 0) stack.pop();
57
- }
58
- /**
59
- * Creates a context key with a default value (React-style compatibility)
60
- *
61
- * @example
62
- * ```ts
63
- * const ThemeContext = createContext({ color: 'blue' })
64
- * // ThemeContext is now typed as Context<{ color: string }>
65
- * const theme = useContext(ThemeContext) // theme is { color: string }
66
- * ```
67
- */
68
- function createContext(defaultValue) {
69
- const key = Symbol("context");
70
- contextDefaults.set(key, defaultValue);
71
- return key;
72
- }
73
-
74
- //#endregion
75
5
  //#region src/composables/useContext.ts
76
6
  function useContext(key, defaultValue) {
77
- return inject(key, defaultValue);
7
+ return require_Root.inject(key, defaultValue);
78
8
  }
79
9
 
80
- //#endregion
81
- //#region src/contexts/NodeTreeContext.ts
82
- /**
83
- * Context for having the current NodeTree
84
- */
85
- const NodeTreeContext = createContext(null);
86
-
87
10
  //#endregion
88
11
  //#region src/composables/useNodeTree.ts
89
12
  function useNodeTree() {
90
- return useContext(NodeTreeContext);
13
+ return useContext(require_Root.NodeTreeContext);
91
14
  }
92
15
 
93
16
  //#endregion
@@ -96,7 +19,7 @@ function useNodeTree() {
96
19
  * Provides app-level metadata and lifecycle hooks (like `exit`) to
97
20
  * components and composables within a Fabric runtime.
98
21
  */
99
- const AppContext = createContext({
22
+ const AppContext = require_Root.createContext({
100
23
  exit: () => {},
101
24
  meta: {}
102
25
  });
@@ -105,305 +28,37 @@ const AppContext = createContext({
105
28
  //#region ../../node_modules/.pnpm/remeda@2.33.4/node_modules/remeda/dist/isFunction.js
106
29
  const e = (e$1) => typeof e$1 == `function`;
107
30
 
108
- //#endregion
109
- //#region src/utils/AsyncEventEmitter.ts
110
- var _emitter = /* @__PURE__ */ new WeakMap();
111
- var _mode = /* @__PURE__ */ new WeakMap();
112
- var AsyncEventEmitter = class {
113
- constructor({ maxListener = 100, mode = "sequential" } = {}) {
114
- require_TreeNode._classPrivateFieldInitSpec(this, _emitter, new node_events.EventEmitter());
115
- require_TreeNode._classPrivateFieldInitSpec(this, _mode, void 0);
116
- require_TreeNode._classPrivateFieldGet2(_emitter, this).setMaxListeners(maxListener);
117
- require_TreeNode._classPrivateFieldSet2(_mode, this, mode);
118
- }
119
- async emit(eventName, ...eventArgs) {
120
- const listeners = require_TreeNode._classPrivateFieldGet2(_emitter, this).listeners(eventName);
121
- if (listeners.length === 0) return;
122
- const errors = [];
123
- if (require_TreeNode._classPrivateFieldGet2(_mode, this) === "sequential") for (const listener of listeners) try {
124
- await listener(...eventArgs);
125
- } catch (err) {
126
- const error = err instanceof Error ? err : new Error(String(err));
127
- errors.push(error);
128
- }
129
- else {
130
- const promises = listeners.map(async (listener) => {
131
- try {
132
- await listener(...eventArgs);
133
- } catch (err) {
134
- const error = err instanceof Error ? err : new Error(String(err));
135
- errors.push(error);
136
- }
137
- });
138
- await Promise.all(promises);
139
- }
140
- if (errors.length === 1) throw errors[0];
141
- if (errors.length > 1) throw new AggregateError(errors, `Errors in async listeners for "${eventName}"`);
142
- }
143
- on(eventName, handler) {
144
- require_TreeNode._classPrivateFieldGet2(_emitter, this).on(eventName, handler);
145
- }
146
- onOnce(eventName, handler) {
147
- const wrapper = (...args) => {
148
- this.off(eventName, wrapper);
149
- handler(...args);
150
- };
151
- this.on(eventName, wrapper);
152
- }
153
- off(eventName, handler) {
154
- require_TreeNode._classPrivateFieldGet2(_emitter, this).off(eventName, handler);
155
- }
156
- removeAll() {
157
- require_TreeNode._classPrivateFieldGet2(_emitter, this).removeAllListeners();
158
- }
159
- };
160
-
161
- //#endregion
162
- //#region src/FileProcessor.ts
163
- var _limit = /* @__PURE__ */ new WeakMap();
164
- var FileProcessor = class {
165
- constructor({ events = new AsyncEventEmitter() } = {}) {
166
- require_TreeNode._classPrivateFieldInitSpec(this, _limit, (0, p_limit.default)(100));
167
- require_TreeNode._defineProperty(this, "events", void 0);
168
- this.events = events;
169
- return this;
170
- }
171
- async parse(file, { parsers, extension } = {}) {
172
- const parseExtName = (extension === null || extension === void 0 ? void 0 : extension[file.extname]) || void 0;
173
- if (!parsers) {
174
- console.warn("No parsers provided, using default parser. If you want to use a specific parser, please provide it in the options.");
175
- return require_defaultParser.defaultParser.parse(file, { extname: parseExtName });
176
- }
177
- if (!file.extname) return require_defaultParser.defaultParser.parse(file, { extname: parseExtName });
178
- const parser = parsers.get(file.extname);
179
- if (!parser) return require_defaultParser.defaultParser.parse(file, { extname: parseExtName });
180
- return parser.parse(file, { extname: parseExtName });
181
- }
182
- async run(files, { parsers, mode = "sequential", dryRun, extension } = {}) {
183
- await this.events.emit("files:processing:start", files);
184
- const total = files.length;
185
- let processed = 0;
186
- const processOne = async (resolvedFile, index) => {
187
- await this.events.emit("file:processing:start", resolvedFile, index, total);
188
- const source = dryRun ? void 0 : await this.parse(resolvedFile, {
189
- extension,
190
- parsers
191
- });
192
- const currentProcessed = ++processed;
193
- const percentage = currentProcessed / total * 100;
194
- await this.events.emit("file:processing:update", {
195
- file: resolvedFile,
196
- source,
197
- processed: currentProcessed,
198
- percentage,
199
- total
200
- });
201
- await this.events.emit("file:processing:end", resolvedFile, index, total);
202
- };
203
- if (mode === "sequential") {
204
- async function* asyncFiles() {
205
- for (let index = 0; index < files.length; index++) yield [files[index], index];
206
- }
207
- for await (const [file, index] of asyncFiles()) if (file) await processOne(file, index);
208
- } else {
209
- const promises = files.map((resolvedFile, index) => require_TreeNode._classPrivateFieldGet2(_limit, this).call(this, () => processOne(resolvedFile, index)));
210
- await Promise.all(promises);
211
- }
212
- await this.events.emit("files:processing:end", files);
213
- return files;
214
- }
215
- };
216
-
217
- //#endregion
218
- //#region src/utils/Cache.ts
219
- var _buffer = /* @__PURE__ */ new WeakMap();
220
- var Cache = class {
221
- constructor() {
222
- require_TreeNode._classPrivateFieldInitSpec(this, _buffer, /* @__PURE__ */ new Map());
223
- }
224
- get(key) {
225
- var _this$buffer$get;
226
- return (_this$buffer$get = require_TreeNode._classPrivateFieldGet2(_buffer, this).get(key)) !== null && _this$buffer$get !== void 0 ? _this$buffer$get : null;
227
- }
228
- set(key, value) {
229
- require_TreeNode._classPrivateFieldGet2(_buffer, this).set(key, value);
230
- }
231
- delete(key) {
232
- require_TreeNode._classPrivateFieldGet2(_buffer, this).delete(key);
233
- }
234
- clear() {
235
- require_TreeNode._classPrivateFieldGet2(_buffer, this).clear();
236
- }
237
- keys() {
238
- return [...require_TreeNode._classPrivateFieldGet2(_buffer, this).keys()];
239
- }
240
- values() {
241
- return [...require_TreeNode._classPrivateFieldGet2(_buffer, this).values()];
242
- }
243
- flush() {}
244
- };
245
-
246
- //#endregion
247
- //#region \0@oxc-project+runtime@0.107.0/helpers/classPrivateMethodInitSpec.js
248
- function _classPrivateMethodInitSpec(e$1, a) {
249
- require_TreeNode._checkPrivateRedeclaration(e$1, a), a.add(e$1);
250
- }
251
-
252
- //#endregion
253
- //#region src/FileManager.ts
254
- function mergeFile(a, b) {
255
- return {
256
- ...a,
257
- sources: [...a.sources || [], ...b.sources || []],
258
- imports: [...a.imports || [], ...b.imports || []],
259
- exports: [...a.exports || [], ...b.exports || []]
260
- };
261
- }
262
- var _cache = /* @__PURE__ */ new WeakMap();
263
- var _filesCache = /* @__PURE__ */ new WeakMap();
264
- var _FileManager_brand = /* @__PURE__ */ new WeakSet();
265
- var FileManager = class {
266
- constructor({ events = new AsyncEventEmitter() } = {}) {
267
- _classPrivateMethodInitSpec(this, _FileManager_brand);
268
- require_TreeNode._classPrivateFieldInitSpec(this, _cache, new Cache());
269
- require_TreeNode._classPrivateFieldInitSpec(this, _filesCache, null);
270
- require_TreeNode._defineProperty(this, "events", void 0);
271
- require_TreeNode._defineProperty(this, "processor", void 0);
272
- this.processor = new FileProcessor({ events });
273
- this.events = events;
274
- return this;
275
- }
276
- add(...files) {
277
- const resolvedFiles = [];
278
- const mergedFiles = /* @__PURE__ */ new Map();
279
- files.forEach((file) => {
280
- const existing = mergedFiles.get(file.path);
281
- if (existing) mergedFiles.set(file.path, mergeFile(existing, file));
282
- else mergedFiles.set(file.path, file);
283
- });
284
- for (let file of mergedFiles.values()) {
285
- file = require_TreeNode._assertClassBrand(_FileManager_brand, this, _resolveName).call(this, file);
286
- file = require_TreeNode._assertClassBrand(_FileManager_brand, this, _resolvePath).call(this, file);
287
- const resolvedFile = require_TreeNode.createFile(file);
288
- require_TreeNode._classPrivateFieldGet2(_cache, this).set(resolvedFile.path, resolvedFile);
289
- this.flush();
290
- resolvedFiles.push(resolvedFile);
291
- }
292
- this.events.emit("files:added", resolvedFiles);
293
- return resolvedFiles;
294
- }
295
- upsert(...files) {
296
- const resolvedFiles = [];
297
- const mergedFiles = /* @__PURE__ */ new Map();
298
- files.forEach((file) => {
299
- const existing = mergedFiles.get(file.path);
300
- if (existing) mergedFiles.set(file.path, mergeFile(existing, file));
301
- else mergedFiles.set(file.path, file);
302
- });
303
- for (let file of mergedFiles.values()) {
304
- const existing = require_TreeNode._classPrivateFieldGet2(_cache, this).get(file.path);
305
- file = require_TreeNode._assertClassBrand(_FileManager_brand, this, _resolveName).call(this, file);
306
- file = require_TreeNode._assertClassBrand(_FileManager_brand, this, _resolvePath).call(this, file);
307
- const resolvedFile = require_TreeNode.createFile(existing ? mergeFile(existing, file) : file);
308
- require_TreeNode._classPrivateFieldGet2(_cache, this).set(resolvedFile.path, resolvedFile);
309
- this.flush();
310
- resolvedFiles.push(resolvedFile);
311
- }
312
- this.events.emit("files:added", resolvedFiles);
313
- return resolvedFiles;
314
- }
315
- flush() {
316
- require_TreeNode._classPrivateFieldSet2(_filesCache, this, null);
317
- require_TreeNode._classPrivateFieldGet2(_cache, this).flush();
318
- }
319
- getByPath(path) {
320
- return require_TreeNode._classPrivateFieldGet2(_cache, this).get(path);
321
- }
322
- deleteByPath(path) {
323
- require_TreeNode._classPrivateFieldGet2(_cache, this).delete(path);
324
- require_TreeNode._classPrivateFieldSet2(_filesCache, this, null);
325
- }
326
- clear() {
327
- require_TreeNode._classPrivateFieldGet2(_cache, this).clear();
328
- require_TreeNode._classPrivateFieldSet2(_filesCache, this, null);
329
- }
330
- get files() {
331
- if (require_TreeNode._classPrivateFieldGet2(_filesCache, this)) return require_TreeNode._classPrivateFieldGet2(_filesCache, this);
332
- const keys = (0, natural_orderby.orderBy)(require_TreeNode._classPrivateFieldGet2(_cache, this).keys(), [(v) => v.length, (v) => require_getRelativePath.trimExtName(v).endsWith("index")]);
333
- const files = [];
334
- for (const key of keys) {
335
- const file = require_TreeNode._classPrivateFieldGet2(_cache, this).get(key);
336
- if (file) files.push(file);
337
- }
338
- require_TreeNode._classPrivateFieldSet2(_filesCache, this, files);
339
- return files;
340
- }
341
- async write(options) {
342
- await this.events.emit("files:writing:start", this.files);
343
- const resolvedFiles = await this.processor.run(this.files, options);
344
- this.clear();
345
- await this.events.emit("files:writing:end", resolvedFiles);
346
- return resolvedFiles;
347
- }
348
- };
349
- function _resolvePath(file) {
350
- this.events.emit("file:resolve:path", file);
351
- return file;
352
- }
353
- function _resolveName(file) {
354
- this.events.emit("file:resolve:name", file);
355
- return file;
356
- }
357
-
358
- //#endregion
359
- //#region src/contexts/RootContext.ts
360
- /**
361
- * Context providing root-level functionalities such as exit hook, tree node structure, and file management.
362
- * Define in the `render` helper of the runtime.
363
- */
364
- const RootContext = createContext({
365
- exit: () => {},
366
- treeNode: new require_TreeNode.TreeNode({
367
- type: "Root",
368
- props: {}
369
- }),
370
- fileManager: new FileManager()
371
- });
372
-
373
- //#endregion
374
- //#region src/components/Text.ts
375
- /**
376
- * Generates a text node from string or function returning string/array of strings.
377
- */
378
- function Text({ children }) {
379
- if (!children) return "";
380
- if (typeof children === "string") return children;
381
- const value = children();
382
- if (Array.isArray(value)) return value.join("\n");
383
- return value || "";
384
- }
385
-
386
31
  //#endregion
387
32
  //#region src/components/App.ts
388
33
  /**
389
34
  * App container containing the AppContext carrying `meta` and an `exit` hook.
390
35
  */
391
- function App({ children, ...props }) {
36
+ const App = require_Root.createComponent("App", ({ children, ...props }) => {
392
37
  const { meta = {} } = props;
393
- const { exit } = useContext(RootContext);
38
+ const { exit } = useContext(require_Root.RootContext);
394
39
  const nodeTree = useNodeTree();
395
- if (nodeTree) provide(NodeTreeContext, nodeTree.addChild({
40
+ if (nodeTree) require_Root.provide(require_Root.NodeTreeContext, nodeTree.addChild({
396
41
  type: "App",
397
42
  props
398
43
  }));
399
- provide(AppContext, {
44
+ require_Root.provide(AppContext, {
400
45
  exit,
401
46
  meta
402
47
  });
403
- return Text({ children });
404
- }
48
+ return children;
49
+ });
405
50
  App.displayName = "KubbApp";
406
51
 
52
+ //#endregion
53
+ //#region src/components/Br.ts
54
+ /**
55
+ * Generates a line break in the output.
56
+ */
57
+ const Br = require_Root.createComponent("br", () => {
58
+ return require_Root.createIntrinsic("br");
59
+ });
60
+ Br.displayName = "Br";
61
+
407
62
  //#endregion
408
63
  //#region src/utils/createJSDoc.ts
409
64
  /**
@@ -425,10 +80,10 @@ function createJSDoc({ comments }) {
425
80
  /**
426
81
  * Generates a TypeScript constant declaration.
427
82
  */
428
- function Const({ children, ...props }) {
83
+ const Const = require_Root.createComponent("Const", ({ children, ...props }) => {
429
84
  const { name, export: canExport, type, JSDoc, asConst } = props;
430
85
  const nodeTree = useNodeTree();
431
- if (nodeTree) provide(NodeTreeContext, nodeTree.addChild({
86
+ if (nodeTree) require_Root.provide(require_Root.NodeTreeContext, nodeTree.addChild({
432
87
  type: "Const",
433
88
  props
434
89
  }));
@@ -442,17 +97,27 @@ function Const({ children, ...props }) {
442
97
  if (type) result += `: ${type}`;
443
98
  result += ` = ${children ? children : ""}`;
444
99
  if (asConst) result += " as const";
445
- return Text({ children: result });
446
- }
100
+ return result;
101
+ });
447
102
  Const.displayName = "KubbConst";
448
103
 
104
+ //#endregion
105
+ //#region src/components/Dedent.ts
106
+ /**
107
+ * Dedent component for reducing indentation level in rendered output.
108
+ */
109
+ const Dedent = require_Root.createComponent("dedent", () => {
110
+ return require_Root.createIntrinsic("dedent");
111
+ });
112
+ Dedent.displayName = "Dedent";
113
+
449
114
  //#endregion
450
115
  //#region src/contexts/FileContext.ts
451
116
  /**
452
117
  * Provides app-level metadata and lifecycle hooks (like `exit`) to
453
118
  * components and composables within a Fabric runtime.
454
119
  */
455
- const FileContext = createContext(null);
120
+ const FileContext = require_Root.createContext(null);
456
121
 
457
122
  //#endregion
458
123
  //#region src/composables/useFile.ts
@@ -469,7 +134,7 @@ function useFile() {
469
134
  //#endregion
470
135
  //#region src/composables/useFileManager.ts
471
136
  function useFileManager() {
472
- const { fileManager } = useContext(RootContext);
137
+ const { fileManager } = useContext(require_Root.RootContext);
473
138
  return fileManager;
474
139
  }
475
140
 
@@ -478,11 +143,11 @@ function useFileManager() {
478
143
  /**
479
144
  * Adds files to the FileManager
480
145
  */
481
- function File({ children, ...props }) {
146
+ const File = require_Root.createComponent("File", ({ children, ...props }) => {
482
147
  const { baseName, path, meta = {}, footer, banner } = props;
483
148
  const fileManager = useFileManager();
484
149
  const nodeTree = useNodeTree();
485
- if (nodeTree) provide(NodeTreeContext, nodeTree.addChild({
150
+ if (nodeTree) require_Root.provide(require_Root.NodeTreeContext, nodeTree.addChild({
486
151
  type: "File",
487
152
  props
488
153
  }));
@@ -497,41 +162,42 @@ function File({ children, ...props }) {
497
162
  exports: []
498
163
  };
499
164
  const [resolvedFile] = fileManager.add(file);
500
- provide(FileContext, resolvedFile);
501
- return Text({ children });
502
- }
165
+ require_Root.provide(FileContext, resolvedFile);
166
+ return children;
167
+ });
503
168
  /**
504
169
  * FileSource - for adding source code to a file
505
170
  *
506
171
  * Returns the provided children string so the fsx renderer can collect it.
507
172
  */
508
- function FileSource({ children, ...props }) {
173
+ const FileSource = require_Root.createComponent("FileSource", ({ children, ...props }) => {
509
174
  const { name, isExportable, isIndexable, isTypeOnly } = props;
510
175
  const nodeTree = useNodeTree();
511
176
  const file = useFile();
512
- if (nodeTree) provide(NodeTreeContext, nodeTree.addChild({
177
+ if (nodeTree) require_Root.provide(require_Root.NodeTreeContext, nodeTree.addChild({
513
178
  type: "FileSource",
514
179
  props
515
180
  }));
181
+ const value = require_Root.renderIntrinsic(children);
516
182
  if (file) file.sources.push({
517
183
  name,
518
184
  isExportable,
519
185
  isIndexable,
520
186
  isTypeOnly,
521
- value: Text({ children })
187
+ value
522
188
  });
523
- return Text({ children });
524
- }
189
+ return value;
190
+ });
525
191
  /**
526
192
  * FileExport - for adding exports to a file
527
193
  *
528
194
  * No-op function used by renderers to record exports.
529
195
  */
530
- function FileExport(props) {
196
+ const FileExport = require_Root.createComponent("FileExport", (props) => {
531
197
  const { name, path, isTypeOnly, asAlias } = props;
532
198
  const nodeTree = useNodeTree();
533
199
  const file = useFile();
534
- if (nodeTree) provide(NodeTreeContext, nodeTree.addChild({
200
+ if (nodeTree) require_Root.provide(require_Root.NodeTreeContext, nodeTree.addChild({
535
201
  type: "FileExport",
536
202
  props
537
203
  }));
@@ -541,18 +207,23 @@ function FileExport(props) {
541
207
  asAlias,
542
208
  isTypeOnly
543
209
  });
544
- return Text({ children: "" });
545
- }
210
+ return require_typescriptParser.print(require_typescriptParser.createExport({
211
+ name,
212
+ path,
213
+ isTypeOnly,
214
+ asAlias
215
+ }));
216
+ });
546
217
  /**
547
218
  * FileImport - for adding imports to a file
548
219
  *
549
220
  * No-op function used by renderers to record imports.
550
221
  */
551
- function FileImport(props) {
222
+ const FileImport = require_Root.createComponent("FileImport", (props) => {
552
223
  const { name, path, root, isNameSpace, isTypeOnly } = props;
553
224
  const nodeTree = useNodeTree();
554
225
  const file = useFile();
555
- if (nodeTree) provide(NodeTreeContext, nodeTree.addChild({
226
+ if (nodeTree) require_Root.provide(require_Root.NodeTreeContext, nodeTree.addChild({
556
227
  type: "FileImport",
557
228
  props
558
229
  }));
@@ -563,21 +234,34 @@ function FileImport(props) {
563
234
  isNameSpace,
564
235
  isTypeOnly
565
236
  });
566
- return Text({ children: "" });
567
- }
237
+ return require_typescriptParser.print(require_typescriptParser.createImport({
238
+ name,
239
+ path,
240
+ root,
241
+ isNameSpace,
242
+ isTypeOnly
243
+ }));
244
+ });
568
245
  File.Source = FileSource;
569
246
  File.Import = FileImport;
570
247
  File.Export = FileExport;
571
248
 
249
+ //#endregion
250
+ //#region src/components/Indent.ts
251
+ const Indent = require_Root.createComponent("indent", () => {
252
+ return require_Root.createIntrinsic("indent");
253
+ });
254
+ Indent.displayName = "Indent";
255
+
572
256
  //#endregion
573
257
  //#region src/components/Function.ts
574
258
  /**
575
259
  * Generates a TypeScript function declaration.
576
260
  */
577
- function Function({ children, ...props }) {
261
+ const Function = require_Root.createComponent("Function", ({ children, ...props }) => {
578
262
  const { name, default: isDefault, export: canExport, async, generics, params, returnType, JSDoc } = props;
579
263
  const nodeTree = useNodeTree();
580
- if (nodeTree) provide(NodeTreeContext, nodeTree.addChild({
264
+ if (nodeTree) require_Root.provide(require_Root.NodeTreeContext, nodeTree.addChild({
581
265
  type: "Function",
582
266
  props
583
267
  }));
@@ -599,11 +283,17 @@ function Function({ children, ...props }) {
599
283
  if (returnType && !async) parts.push(`: ${returnType}`);
600
284
  if (returnType && async) parts.push(`: Promise<${returnType}>`);
601
285
  parts.push(" {");
602
- if (children) return Text({ children: `${parts.join("")}
603
- ${children}
604
- }` });
605
- return Text({ children: `${parts.join("")}}` });
606
- }
286
+ if (children) return [
287
+ parts.join(""),
288
+ Br(),
289
+ Indent(),
290
+ children,
291
+ Br(),
292
+ Dedent(),
293
+ "}"
294
+ ];
295
+ return [parts.join(""), "}"];
296
+ });
607
297
  Function.displayName = "KubbFunction";
608
298
  /**
609
299
  * ArrowFunction
@@ -612,10 +302,10 @@ Function.displayName = "KubbFunction";
612
302
  * the same options as `Function`. Use `singleLine` to produce a one-line
613
303
  * arrow expression.
614
304
  */
615
- function ArrowFunction({ children, ...props }) {
305
+ const ArrowFunction = require_Root.createComponent("ArrowFunction", ({ children, ...props }) => {
616
306
  const { name, default: isDefault, export: canExport, async, generics, params, returnType, JSDoc, singleLine } = props;
617
307
  const nodeTree = useNodeTree();
618
- if (nodeTree) provide(NodeTreeContext, nodeTree.addChild({
308
+ if (nodeTree) require_Root.provide(require_Root.NodeTreeContext, nodeTree.addChild({
619
309
  type: "ArrowFunction",
620
310
  props
621
311
  }));
@@ -638,47 +328,32 @@ function ArrowFunction({ children, ...props }) {
638
328
  if (returnType && async) parts.push(`: Promise<${returnType}>`);
639
329
  if (singleLine) {
640
330
  parts.push(` => ${children || ""}\n`);
641
- return Text({ children: parts.join("") });
642
- }
643
- if (children) return Text({ children: `${parts.join("")} => {
644
- ${children}
645
- }
646
- ` });
647
- return Text({ children: `${parts.join("")} => {}\n` });
648
- }
331
+ return parts.join("");
332
+ }
333
+ if (children) return [
334
+ parts.join(""),
335
+ " => {",
336
+ Br(),
337
+ Indent(),
338
+ children,
339
+ Br(),
340
+ Dedent(),
341
+ "}"
342
+ ];
343
+ return [parts.join(""), " => {}"];
344
+ });
649
345
  ArrowFunction.displayName = "KubbArrowFunction";
650
346
  Function.Arrow = ArrowFunction;
651
347
 
652
- //#endregion
653
- //#region src/components/Root.ts
654
- /**
655
- * This component provides the root behavior for the Fabric runtime.
656
- */
657
- function Root({ onError, onExit, treeNode, fileManager, children }) {
658
- provide(RootContext, {
659
- exit: onExit,
660
- treeNode,
661
- fileManager
662
- });
663
- provide(NodeTreeContext, treeNode);
664
- try {
665
- return Text({ children });
666
- } catch (e$1) {
667
- if (e$1 instanceof Error) onError === null || onError === void 0 || onError(e$1);
668
- return "";
669
- }
670
- }
671
- Root.displayName = "KubbRoot";
672
-
673
348
  //#endregion
674
349
  //#region src/components/Type.ts
675
350
  /**
676
351
  * Generates a TypeScript type declaration.
677
352
  */
678
- function Type({ children, ...props }) {
353
+ const Type = require_Root.createComponent("Type", ({ children, ...props }) => {
679
354
  const { name, export: canExport, JSDoc } = props;
680
355
  const nodeTree = useNodeTree();
681
- if (nodeTree) provide(NodeTreeContext, nodeTree.addChild({
356
+ if (nodeTree) require_Root.provide(require_Root.NodeTreeContext, nodeTree.addChild({
682
357
  type: "Type",
683
358
  props
684
359
  }));
@@ -690,8 +365,8 @@ function Type({ children, ...props }) {
690
365
  }
691
366
  if (canExport) result += "export ";
692
367
  result += `type ${name} = ${children || ""}`;
693
- return Text({ children: result });
694
- }
368
+ return result;
369
+ });
695
370
  Type.displayName = "KubbType";
696
371
 
697
372
  //#endregion
@@ -714,7 +389,7 @@ function useApp() {
714
389
  * for consumers to programmatically stop generation or perform teardown.
715
390
  */
716
391
  function useLifecycle() {
717
- const { exit } = useContext(RootContext);
392
+ const { exit } = useContext(require_Root.RootContext);
718
393
  return { exit };
719
394
  }
720
395
 
@@ -728,11 +403,11 @@ function useLifecycle() {
728
403
  * fabric.use(myPlugin())
729
404
  */
730
405
  function createFabric(config = { mode: "sequential" }) {
731
- const events = new AsyncEventEmitter();
406
+ const events = new require_Root.AsyncEventEmitter();
732
407
  const installedPlugins = /* @__PURE__ */ new Set();
733
408
  const installedParsers = /* @__PURE__ */ new Map();
734
409
  const installedParserNames = /* @__PURE__ */ new Set();
735
- const fileManager = new FileManager({ events });
410
+ const fileManager = new require_Root.FileManager({ events });
736
411
  const context = {
737
412
  get files() {
738
413
  return fileManager.files;
@@ -793,26 +468,32 @@ function createFabric(config = { mode: "sequential" }) {
793
468
  //#endregion
794
469
  exports.App = App;
795
470
  exports.AppContext = AppContext;
471
+ exports.Br = Br;
796
472
  exports.Const = Const;
473
+ exports.Dedent = Dedent;
797
474
  exports.File = File;
798
475
  exports.FileContext = FileContext;
799
- exports.FileManager = FileManager;
800
- exports.FileProcessor = FileProcessor;
476
+ exports.FileManager = require_Root.FileManager;
477
+ exports.FileProcessor = require_Root.FileProcessor;
801
478
  exports.Function = Function;
802
- exports.NodeTreeContext = NodeTreeContext;
803
- exports.Root = Root;
804
- exports.RootContext = RootContext;
805
- exports.Text = Text;
806
- exports.TreeNode = require_TreeNode.TreeNode;
479
+ exports.Indent = Indent;
480
+ exports.NodeTreeContext = require_Root.NodeTreeContext;
481
+ exports.RenderContext = require_Root.RenderContext;
482
+ exports.Root = require_Root.Root;
483
+ exports.RootContext = require_Root.RootContext;
484
+ exports.TreeNode = require_Root.TreeNode;
807
485
  exports.Type = Type;
808
- exports.createContext = createContext;
486
+ exports.createComponent = require_Root.createComponent;
487
+ exports.createContext = require_Root.createContext;
809
488
  exports.createFabric = createFabric;
810
- exports.createFile = require_TreeNode.createFile;
489
+ exports.createFile = require_Root.createFile;
811
490
  exports.createJSDoc = createJSDoc;
812
491
  exports.getRelativePath = require_getRelativePath.getRelativePath;
813
- exports.inject = inject;
814
- exports.provide = provide;
815
- exports.unprovide = unprovide;
492
+ exports.inject = require_Root.inject;
493
+ exports.provide = require_Root.provide;
494
+ exports.renderIndent = require_Root.renderIndent;
495
+ exports.renderIntrinsic = require_Root.renderIntrinsic;
496
+ exports.unprovide = require_Root.unprovide;
816
497
  exports.useApp = useApp;
817
498
  exports.useContext = useContext;
818
499
  exports.useFile = useFile;