@kubb/fabric-core 0.0.0-canary-20251021185909 → 0.0.0-canary-20251022151827
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App-DZuROf6f.d.ts +292 -0
- package/dist/App-zyf9KG3p.d.cts +292 -0
- package/dist/chunk-CUT6urMc.cjs +30 -0
- package/dist/defineApp-D3B0bU-z.d.cts +14 -0
- package/dist/defineApp-DJVMk9lc.d.ts +14 -0
- package/dist/index.cjs +133 -93
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -8
- package/dist/index.d.ts +4 -8
- package/dist/index.js +122 -82
- package/dist/index.js.map +1 -1
- package/dist/parsers/typescript.cjs +5 -6
- package/dist/parsers/typescript.d.cts +3 -51
- package/dist/parsers/typescript.d.ts +3 -51
- package/dist/parsers/typescript.js +2 -3
- package/dist/parsers.cjs +7 -0
- package/dist/parsers.d.cts +14 -0
- package/dist/parsers.d.ts +14 -0
- package/dist/parsers.js +4 -0
- package/dist/plugins.cjs +76 -0
- package/dist/plugins.cjs.map +1 -0
- package/dist/plugins.d.cts +28 -0
- package/dist/plugins.d.ts +28 -0
- package/dist/plugins.js +71 -0
- package/dist/plugins.js.map +1 -0
- package/dist/tsxParser-C741ZKCN.js +26 -0
- package/dist/tsxParser-C741ZKCN.js.map +1 -0
- package/dist/tsxParser-HDf_3TMc.cjs +37 -0
- package/dist/tsxParser-HDf_3TMc.cjs.map +1 -0
- package/dist/types.d.cts +2 -2
- package/dist/types.d.ts +2 -2
- package/dist/{typescript-C60gWBu8.js → typescriptParser-BBGeFKlP.js} +52 -69
- package/dist/typescriptParser-BBGeFKlP.js.map +1 -0
- package/dist/{typescript-Z90jN87k.cjs → typescriptParser-BBbbmG5W.cjs} +61 -108
- package/dist/typescriptParser-BBbbmG5W.cjs.map +1 -0
- package/dist/typescriptParser-C-sBy1iR.d.cts +50 -0
- package/dist/typescriptParser-CtMmz0UV.d.ts +50 -0
- package/package.json +13 -13
- package/src/App.ts +91 -0
- package/src/FileManager.ts +10 -3
- package/src/FileProcessor.ts +49 -46
- package/src/createFile.ts +1 -1
- package/src/defineApp.ts +47 -72
- package/src/index.ts +1 -1
- package/src/parsers/createParser.ts +8 -0
- package/src/parsers/defaultParser.ts +10 -0
- package/src/parsers/index.ts +5 -0
- package/src/parsers/tsxParser.ts +11 -0
- package/src/parsers/types.ts +12 -2
- package/src/parsers/{typescript.ts → typescriptParser.ts} +8 -4
- package/src/plugins/createPlugin.ts +10 -0
- package/src/plugins/fsPlugin.ts +112 -0
- package/src/plugins/index.ts +3 -0
- package/src/plugins/types.ts +15 -0
- package/src/types.ts +4 -1
- package/src/utils/AsyncEventEmitter.ts +37 -0
- package/src/utils/getRelativePath.ts +32 -0
- package/src/utils/trimExtName.ts +3 -0
- package/dist/KubbFile-BrN7Wwp6.d.cts +0 -119
- package/dist/KubbFile-BzVkcu9M.d.ts +0 -119
- package/dist/createFileParser-BD8yn0LT.cjs +0 -14
- package/dist/createFileParser-BD8yn0LT.cjs.map +0 -1
- package/dist/createFileParser-Cix3AMLd.js +0 -8
- package/dist/createFileParser-Cix3AMLd.js.map +0 -1
- package/dist/default-DCpuPmrL.js +0 -10
- package/dist/default-DCpuPmrL.js.map +0 -1
- package/dist/default-DNBu_jsL.cjs +0 -15
- package/dist/default-DNBu_jsL.cjs.map +0 -1
- package/dist/defineApp-CpGKyn6q.d.cts +0 -100
- package/dist/defineApp-ms3Tog4-.d.ts +0 -100
- package/dist/parsers/default.cjs +0 -4
- package/dist/parsers/default.d.cts +0 -8
- package/dist/parsers/default.d.ts +0 -8
- package/dist/parsers/default.js +0 -4
- package/dist/parsers/tsx.cjs +0 -5
- package/dist/parsers/tsx.d.cts +0 -8
- package/dist/parsers/tsx.d.ts +0 -8
- package/dist/parsers/tsx.js +0 -5
- package/dist/tsx-BSUaIML3.cjs +0 -16
- package/dist/tsx-BSUaIML3.cjs.map +0 -1
- package/dist/tsx-DBAk9dqS.js +0 -11
- package/dist/tsx-DBAk9dqS.js.map +0 -1
- package/dist/types-CkbelZaS.d.ts +0 -15
- package/dist/types-GueHciQ3.d.cts +0 -15
- package/dist/typescript-C60gWBu8.js.map +0 -1
- package/dist/typescript-Z90jN87k.cjs.map +0 -1
- package/src/fs.ts +0 -167
- package/src/parsers/createFileParser.ts +0 -5
- package/src/parsers/default.ts +0 -7
- package/src/parsers/tsx.ts +0 -8
package/dist/index.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as
|
|
3
|
-
import { t as tsxParser } from "./tsx-DBAk9dqS.js";
|
|
4
|
-
import { t as defaultParser } from "./default-DCpuPmrL.js";
|
|
5
|
-
import path from "node:path";
|
|
1
|
+
import { i as typescriptParser, o as trimExtName } from "./typescriptParser-BBGeFKlP.js";
|
|
2
|
+
import { n as defaultParser, t as tsxParser } from "./tsxParser-C741ZKCN.js";
|
|
6
3
|
import { orderBy } from "natural-orderby";
|
|
7
4
|
import { createHash } from "node:crypto";
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { isDeepEqual, isFunction, isPromise, uniqueBy } from "remeda";
|
|
10
7
|
import pLimit from "p-limit";
|
|
8
|
+
import { EventEmitter } from "node:events";
|
|
11
9
|
|
|
12
10
|
//#region \0@oxc-project+runtime@0.95.0/helpers/checkPrivateRedeclaration.js
|
|
13
11
|
function _checkPrivateRedeclaration(e, t) {
|
|
@@ -156,15 +154,23 @@ function createFile(file) {
|
|
|
156
154
|
}
|
|
157
155
|
|
|
158
156
|
//#endregion
|
|
159
|
-
//#region src/utils/
|
|
157
|
+
//#region src/utils/AsyncEventEmitter.ts
|
|
160
158
|
var _emitter = /* @__PURE__ */ new WeakMap();
|
|
161
|
-
var
|
|
159
|
+
var AsyncEventEmitter = class {
|
|
162
160
|
constructor(maxListener = 100) {
|
|
163
161
|
_classPrivateFieldInitSpec(this, _emitter, new EventEmitter());
|
|
164
162
|
_classPrivateFieldGet2(_emitter, this).setMaxListeners(maxListener);
|
|
165
163
|
}
|
|
166
|
-
emit(eventName, ...
|
|
167
|
-
_classPrivateFieldGet2(_emitter, this).
|
|
164
|
+
async emit(eventName, ...eventArgs) {
|
|
165
|
+
const listeners = _classPrivateFieldGet2(_emitter, this).listeners(eventName);
|
|
166
|
+
if (listeners.length === 0) return;
|
|
167
|
+
await Promise.all(listeners.map(async (listener) => {
|
|
168
|
+
try {
|
|
169
|
+
return await listener(...eventArgs);
|
|
170
|
+
} catch (err) {
|
|
171
|
+
console.error(`Error in async listener for "${eventName}":`, err);
|
|
172
|
+
}
|
|
173
|
+
}));
|
|
168
174
|
}
|
|
169
175
|
on(eventName, handler) {
|
|
170
176
|
_classPrivateFieldGet2(_emitter, this).on(eventName, handler);
|
|
@@ -178,46 +184,10 @@ var EventEmitter$1 = class {
|
|
|
178
184
|
};
|
|
179
185
|
|
|
180
186
|
//#endregion
|
|
181
|
-
//#region
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
".ts": typeScriptParser,
|
|
185
|
-
".js": typeScriptParser,
|
|
186
|
-
".jsx": tsxParser,
|
|
187
|
-
".tsx": tsxParser,
|
|
188
|
-
".json": defaultParser
|
|
189
|
-
};
|
|
190
|
-
if (!extname) return defaultParser;
|
|
191
|
-
const parser = parsers[extname];
|
|
192
|
-
if (!parser) console.warn(`[parser] No parser found for ${extname}, default parser will be used`);
|
|
193
|
-
return parser || defaultParser;
|
|
187
|
+
//#region \0@oxc-project+runtime@0.95.0/helpers/classPrivateMethodInitSpec.js
|
|
188
|
+
function _classPrivateMethodInitSpec(e, a) {
|
|
189
|
+
_checkPrivateRedeclaration(e, a), a.add(e);
|
|
194
190
|
}
|
|
195
|
-
var _limit = /* @__PURE__ */ new WeakMap();
|
|
196
|
-
var FileProcessor = class extends EventEmitter$1 {
|
|
197
|
-
constructor(maxListener = 1e3) {
|
|
198
|
-
super(maxListener);
|
|
199
|
-
_classPrivateFieldInitSpec(this, _limit, pLimit(100));
|
|
200
|
-
return this;
|
|
201
|
-
}
|
|
202
|
-
async parse(file, { extname } = {}) {
|
|
203
|
-
return (await getParser(file.extname)).print(file, { extname });
|
|
204
|
-
}
|
|
205
|
-
async run(files, { dryRun, extension } = {}) {
|
|
206
|
-
this.emit("start", { files });
|
|
207
|
-
const promises = files.map((resolvedFile) => _classPrivateFieldGet2(_limit, this).call(this, async () => {
|
|
208
|
-
const extname = (extension === null || extension === void 0 ? void 0 : extension[resolvedFile.extname]) || void 0;
|
|
209
|
-
this.emit("file:start", { file: resolvedFile });
|
|
210
|
-
if (!dryRun) {
|
|
211
|
-
const source = await this.parse(resolvedFile, { extname });
|
|
212
|
-
await write(resolvedFile.path, source, { sanity: false });
|
|
213
|
-
}
|
|
214
|
-
this.emit("file:finish", { file: resolvedFile });
|
|
215
|
-
}));
|
|
216
|
-
await Promise.all(promises);
|
|
217
|
-
this.emit("finish", { files });
|
|
218
|
-
return files;
|
|
219
|
-
}
|
|
220
|
-
};
|
|
221
191
|
|
|
222
192
|
//#endregion
|
|
223
193
|
//#region \0@oxc-project+runtime@0.95.0/helpers/typeof.js
|
|
@@ -261,6 +231,78 @@ function _defineProperty(e, r, t) {
|
|
|
261
231
|
}) : e[r] = t, e;
|
|
262
232
|
}
|
|
263
233
|
|
|
234
|
+
//#endregion
|
|
235
|
+
//#region src/FileProcessor.ts
|
|
236
|
+
var _limit = /* @__PURE__ */ new WeakMap();
|
|
237
|
+
var _FileProcessor_brand = /* @__PURE__ */ new WeakSet();
|
|
238
|
+
var FileProcessor = class {
|
|
239
|
+
constructor({ events = new AsyncEventEmitter() } = {}) {
|
|
240
|
+
_classPrivateMethodInitSpec(this, _FileProcessor_brand);
|
|
241
|
+
_classPrivateFieldInitSpec(this, _limit, pLimit(100));
|
|
242
|
+
_defineProperty(this, "events", void 0);
|
|
243
|
+
this.events = events;
|
|
244
|
+
return this;
|
|
245
|
+
}
|
|
246
|
+
async parse(file, { parsers = _get_defaultParser.call(_assertClassBrand(_FileProcessor_brand, this)), extname } = {}) {
|
|
247
|
+
if (!extname) {
|
|
248
|
+
console.warn("[parser] No extname found, default parser will be used");
|
|
249
|
+
return defaultParser.parse(file, { extname });
|
|
250
|
+
}
|
|
251
|
+
const parser = [...parsers].find((item) => {
|
|
252
|
+
var _item$extNames;
|
|
253
|
+
return (_item$extNames = item.extNames) === null || _item$extNames === void 0 ? void 0 : _item$extNames.includes(extname);
|
|
254
|
+
});
|
|
255
|
+
if (!parser) {
|
|
256
|
+
console.warn(`[parser] No parser found for ${extname}, default parser will be used`);
|
|
257
|
+
return defaultParser.parse(file, { extname });
|
|
258
|
+
}
|
|
259
|
+
return parser.parse(file, { extname });
|
|
260
|
+
}
|
|
261
|
+
async run(files, { parsers, dryRun, extension } = {}) {
|
|
262
|
+
await this.events.emit("process:start", { files });
|
|
263
|
+
let processed = 0;
|
|
264
|
+
const total = files.length;
|
|
265
|
+
const promises = files.map((resolvedFile, index) => _classPrivateFieldGet2(_limit, this).call(this, async () => {
|
|
266
|
+
const extname = (extension === null || extension === void 0 ? void 0 : extension[resolvedFile.extname]) || path.extname(resolvedFile.path);
|
|
267
|
+
await this.events.emit("file:start", {
|
|
268
|
+
file: resolvedFile,
|
|
269
|
+
index,
|
|
270
|
+
total
|
|
271
|
+
});
|
|
272
|
+
if (!dryRun) {
|
|
273
|
+
const source = await this.parse(resolvedFile, {
|
|
274
|
+
extname,
|
|
275
|
+
parsers
|
|
276
|
+
});
|
|
277
|
+
await this.events.emit("process:progress", {
|
|
278
|
+
file: resolvedFile,
|
|
279
|
+
source,
|
|
280
|
+
processed,
|
|
281
|
+
percentage: processed / total * 100,
|
|
282
|
+
total
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
await this.events.emit("file:end", {
|
|
286
|
+
file: resolvedFile,
|
|
287
|
+
index,
|
|
288
|
+
total
|
|
289
|
+
});
|
|
290
|
+
processed++;
|
|
291
|
+
}));
|
|
292
|
+
await Promise.all(promises);
|
|
293
|
+
await this.events.emit("process:end", { files });
|
|
294
|
+
return files;
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
function _get_defaultParser() {
|
|
298
|
+
console.warn(`[parser] using default parsers, please consider using the "use" method to add custom parsers.`);
|
|
299
|
+
return new Set([
|
|
300
|
+
typescriptParser,
|
|
301
|
+
tsxParser,
|
|
302
|
+
defaultParser
|
|
303
|
+
]);
|
|
304
|
+
}
|
|
305
|
+
|
|
264
306
|
//#endregion
|
|
265
307
|
//#region src/FileManager.ts
|
|
266
308
|
function mergeFile(a, b) {
|
|
@@ -273,9 +315,10 @@ function mergeFile(a, b) {
|
|
|
273
315
|
}
|
|
274
316
|
var _cache = /* @__PURE__ */ new WeakMap();
|
|
275
317
|
var FileManager = class {
|
|
276
|
-
constructor() {
|
|
318
|
+
constructor({ events = new AsyncEventEmitter() } = {}) {
|
|
277
319
|
_classPrivateFieldInitSpec(this, _cache, new Cache());
|
|
278
|
-
_defineProperty(this, "processor",
|
|
320
|
+
_defineProperty(this, "processor", void 0);
|
|
321
|
+
this.processor = new FileProcessor({ events });
|
|
279
322
|
return this;
|
|
280
323
|
}
|
|
281
324
|
async add(...files) {
|
|
@@ -317,23 +360,18 @@ var FileManager = class {
|
|
|
317
360
|
|
|
318
361
|
//#endregion
|
|
319
362
|
//#region src/defineApp.ts
|
|
320
|
-
const isFunction = (val) => typeof val === "function";
|
|
321
363
|
function defineApp(instance) {
|
|
322
364
|
function createApp$1(rootComponent, options) {
|
|
323
|
-
const
|
|
324
|
-
const
|
|
365
|
+
const events = new AsyncEventEmitter();
|
|
366
|
+
const installedPlugins = /* @__PURE__ */ new Set();
|
|
367
|
+
const installedParsers = /* @__PURE__ */ new Set();
|
|
368
|
+
const fileManager = new FileManager({ events });
|
|
325
369
|
const context = {
|
|
370
|
+
events,
|
|
326
371
|
options,
|
|
327
372
|
fileManager,
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
},
|
|
331
|
-
clear() {
|
|
332
|
-
context.fileManager.clear();
|
|
333
|
-
},
|
|
334
|
-
get files() {
|
|
335
|
-
return fileManager.files;
|
|
336
|
-
}
|
|
373
|
+
installedPlugins,
|
|
374
|
+
installedParsers
|
|
337
375
|
};
|
|
338
376
|
const { render, renderToString, waitUntilExit } = instance.call(context, rootComponent, context);
|
|
339
377
|
const app = {
|
|
@@ -349,28 +387,30 @@ function defineApp(instance) {
|
|
|
349
387
|
return fileManager.files;
|
|
350
388
|
},
|
|
351
389
|
waitUntilExit,
|
|
352
|
-
addFile
|
|
353
|
-
|
|
354
|
-
extension: { ".ts": ".ts" },
|
|
355
|
-
dryRun: false
|
|
356
|
-
}) {
|
|
357
|
-
await fileManager.write({
|
|
358
|
-
extension: options$1.extension,
|
|
359
|
-
dryRun: options$1.dryRun
|
|
360
|
-
});
|
|
390
|
+
async addFile(...newFiles) {
|
|
391
|
+
await fileManager.add(...newFiles);
|
|
361
392
|
},
|
|
362
|
-
use(
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
installedPlugins.
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
393
|
+
use(pluginOrParser, ...options$1) {
|
|
394
|
+
const args = Array.isArray(options$1) ? options$1 : [options$1[0]];
|
|
395
|
+
if (pluginOrParser.type === "plugin") {
|
|
396
|
+
if (installedPlugins.has(pluginOrParser)) console.warn("Plugin has already been applied to target app.");
|
|
397
|
+
else installedPlugins.add(pluginOrParser);
|
|
398
|
+
if (pluginOrParser.override && isFunction(pluginOrParser.override)) {
|
|
399
|
+
const overrider = pluginOrParser.override;
|
|
400
|
+
const extraApp = overrider(app, context, ...args);
|
|
401
|
+
Object.assign(app, extraApp);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
if (pluginOrParser.type === "parser") if (installedParsers.has(pluginOrParser)) console.warn("Parser has already been applied to target app.");
|
|
405
|
+
else installedParsers.add(pluginOrParser);
|
|
406
|
+
if (pluginOrParser && isFunction(pluginOrParser.install)) {
|
|
407
|
+
const installer = pluginOrParser.install;
|
|
408
|
+
installer(app, context, ...args);
|
|
370
409
|
}
|
|
371
410
|
return app;
|
|
372
411
|
}
|
|
373
412
|
};
|
|
413
|
+
events.emit("start", { app });
|
|
374
414
|
return app;
|
|
375
415
|
}
|
|
376
416
|
return createApp$1;
|
|
@@ -393,5 +433,5 @@ const createApp = defineApp(() => {
|
|
|
393
433
|
});
|
|
394
434
|
|
|
395
435
|
//#endregion
|
|
396
|
-
export { FileManager, FileProcessor, createApp, createFile,
|
|
436
|
+
export { FileManager, FileProcessor, createApp, createFile, defineApp };
|
|
397
437
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["name","EventEmitter","NodeEventEmitter","parsers: Record<KubbFile.Extname, Parser<any>>","EventEmitter","resolvedFiles: Array<KubbFile.ResolvedFile>","path","createApp","app: App","options"],"sources":["../src/utils/Cache.ts","../src/createFile.ts","../src/utils/EventEmitter.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 './fs.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 EventEmitter<TEvents extends Record<string, any>> {\n constructor(maxListener = 100) {\n this.#emitter.setMaxListeners(maxListener)\n }\n #emitter = new NodeEventEmitter()\n\n emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArg: TEvents[TEventName]): void {\n this.#emitter.emit(eventName, ...(eventArg as any))\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 { EventEmitter } from './utils/EventEmitter.ts'\nimport { write } from './fs.ts'\nimport pLimit from 'p-limit'\nimport type { Parser } from './parsers/types.ts'\nimport { typeScriptParser } from './parsers/typescript.ts'\nimport { tsxParser } from './parsers/tsx.ts'\nimport { defaultParser } from './parsers/default.ts'\n\ntype FileProcessorEvents = {\n start: [{ files: KubbFile.ResolvedFile[] }]\n finish: [{ files: KubbFile.ResolvedFile[] }]\n 'file:start': [{ file: KubbFile.ResolvedFile }]\n 'file:finish': [{ file: KubbFile.ResolvedFile }]\n}\n\nexport type ProcessFilesProps = {\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n dryRun?: boolean\n}\n\ntype GetSourceOptions = {\n extname?: KubbFile.Extname\n}\n\nasync function getParser<TMeta extends object = object>(extname: KubbFile.Extname | undefined): Promise<Parser<TMeta>> {\n const parsers: Record<KubbFile.Extname, Parser<any>> = {\n '.ts': typeScriptParser,\n '.js': typeScriptParser,\n '.jsx': tsxParser,\n '.tsx': tsxParser,\n '.json': defaultParser,\n }\n\n if (!extname) {\n return defaultParser\n }\n\n const parser = parsers[extname]\n\n if (!parser) {\n console.warn(`[parser] No parser found for ${extname}, default parser will be used`)\n }\n\n return parser || defaultParser\n}\n\nexport class FileProcessor extends EventEmitter<FileProcessorEvents> {\n #limit = pLimit(100)\n\n constructor(maxListener = 1000) {\n super(maxListener)\n return this\n }\n\n async parse(file: KubbFile.ResolvedFile, { extname }: GetSourceOptions = {}): Promise<string> {\n const parser = await getParser(file.extname)\n\n return parser.print(file, { extname })\n }\n\n async run(files: Array<KubbFile.ResolvedFile>, { dryRun, extension }: ProcessFilesProps = {}): Promise<KubbFile.ResolvedFile[]> {\n this.emit('start', { files })\n\n const promises = files.map((resolvedFile) =>\n this.#limit(async () => {\n const extname = extension?.[resolvedFile.extname] || undefined\n\n this.emit('file:start', { file: resolvedFile })\n\n if (!dryRun) {\n const source = await this.parse(resolvedFile, { extname })\n await write(resolvedFile.path, source, { sanity: false })\n }\n\n this.emit('file:finish', { file: resolvedFile })\n }),\n )\n\n await Promise.all(promises)\n\n this.emit('finish', { files })\n\n return files\n }\n}\n","import type * as KubbFile from './KubbFile.ts'\nimport { Cache } from './utils/Cache.ts'\nimport { trimExtName } from './fs.ts'\nimport { orderBy } from 'natural-orderby'\nimport { createFile } from './createFile.ts'\nimport { FileProcessor, type ProcessFilesProps } from './FileProcessor.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\nexport class FileManager {\n #cache = new Cache<KubbFile.ResolvedFile>()\n processor = new FileProcessor()\n\n constructor() {\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 type * as KubbFile from './KubbFile.ts'\nimport { FileManager } from './FileManager.ts'\nimport { isPromise } from 'remeda'\n\nconst isFunction = (val: unknown): val is Function => typeof val === 'function'\n\ntype Component = any\n\ntype PluginInstallFunction<Options = any[]> = Options extends unknown[] ? (app: App, ...options: Options) => any : (app: App, options: Options) => any\n\nexport type ObjectPlugin<Options = any[]> = {\n install: PluginInstallFunction<Options>\n}\nexport type FunctionPlugin<Options = any[]> = PluginInstallFunction<Options> & Partial<ObjectPlugin<Options>>\n\ntype AppRenderer = {\n render(): Promise<void> | void\n renderToString(): Promise<string> | string\n waitUntilExit(): Promise<void>\n}\n\nexport type AppContext<TOptions = unknown> = {\n options?: TOptions\n fileManager: FileManager\n addFile(...files: Array<KubbFile.File>): Promise<void>\n files: Array<KubbFile.ResolvedFile>\n clear: () => void\n}\n\ntype RootRenderFunction<THostElement, TContext extends AppContext> = (this: TContext, container: THostElement, context: TContext) => AppRenderer\n\ntype Plugin<Options = any[], P extends unknown[] = Options extends unknown[] ? Options : [Options]> = FunctionPlugin<P> | ObjectPlugin<P>\n\ntype WriteOptions = {\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n dryRun?: boolean\n}\n\nexport interface App {\n _component: Component\n render(): Promise<void>\n renderToString(): Promise<string>\n files: Array<KubbFile.ResolvedFile>\n use<Options>(plugin: Plugin<Options>, options: NoInfer<Options>): this\n write(options?: WriteOptions): Promise<void>\n addFile(...files: Array<KubbFile.File>): Promise<void>\n waitUntilExit(): Promise<void>\n}\n\nexport type DefineApp<TContext extends AppContext> = (rootComponent?: Component, options?: TContext['options']) => App\n\nexport function defineApp<THostElement, TContext extends AppContext>(instance: RootRenderFunction<THostElement, TContext>): DefineApp<TContext> {\n function createApp(rootComponent: Component, options?: TContext['options']): App {\n const installedPlugins = new WeakSet()\n const fileManager = new FileManager()\n const context = {\n options,\n fileManager,\n async addFile(...newFiles) {\n await fileManager.add(...newFiles)\n },\n clear() {\n context.fileManager.clear()\n },\n get files() {\n return fileManager.files\n },\n } as TContext\n\n const { render, renderToString, waitUntilExit } = instance.call(context, rootComponent, context)\n\n const app: App = {\n _component: rootComponent,\n async render() {\n if (isPromise(render)) {\n await render()\n } else {\n render()\n }\n },\n async renderToString() {\n return renderToString()\n },\n get files() {\n return fileManager.files\n },\n waitUntilExit,\n addFile: context.addFile,\n async write(\n options = {\n extension: { '.ts': '.ts' },\n dryRun: false,\n },\n ) {\n await fileManager.write({\n extension: options.extension,\n dryRun: options.dryRun,\n })\n },\n use(plugin: Plugin, ...options: any[]) {\n if (installedPlugins.has(plugin)) {\n console.warn('Plugin has already been applied to target app.')\n } else if (plugin && isFunction(plugin.install)) {\n installedPlugins.add(plugin)\n plugin.install(app, ...options)\n } else if (isFunction(plugin)) {\n installedPlugins.add(plugin)\n plugin(app, ...options)\n }\n\n return app\n },\n }\n\n return app\n }\n\n return createApp\n}\n","import { defineApp } from './defineApp.ts'\n\nexport const createApp = defineApp(() => {\n return {\n async render() {\n throw new Error('Method not implemented')\n },\n async renderToString() {\n throw new Error('Method not implemented')\n },\n async waitUntilExit() {\n throw new Error('Method not implemented')\n },\n }\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["name","NodeEventEmitter","resolvedFiles: Array<KubbFile.ResolvedFile>","path","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'\nimport path from 'node:path'\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'\nimport { typescriptParser } from './parsers/typescriptParser.ts'\nimport { tsxParser } from './parsers/tsxParser.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 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 get #defaultParser(): Set<Parser> {\n console.warn(`[parser] using default parsers, please consider using the \"use\" method to add custom parsers.`)\n\n return new Set<Parser>([typescriptParser, tsxParser, defaultParser])\n }\n\n async parse(file: KubbFile.ResolvedFile, { parsers = this.#defaultParser, extname }: GetParseOptions = {}): Promise<string> {\n if (!extname) {\n console.warn('[parser] No extname found, default parser will be used')\n return defaultParser.parse(file, { extname })\n }\n\n const parser = [...parsers].find((item) => item.extNames?.includes(extname))\n\n if (!parser) {\n console.warn(`[parser] No parser found for ${extname}, default parser will be used`)\n\n return defaultParser.parse(file, { extname })\n }\n\n return parser.parse(file, { extname })\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 const extname = extension?.[resolvedFile.extname] || (path.extname(resolvedFile.path) as KubbFile.Extname)\n\n await this.events.emit('file:start', { file: resolvedFile, index, total })\n\n if (!dryRun) {\n const source = await this.parse(resolvedFile, { extname, parsers })\n await this.events.emit('process:progress', { file: resolvedFile, source, processed, percentage: (processed / total) * 100, 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, isPromise } from 'remeda'\nimport type { Plugin } from './plugins/types.ts'\nimport type { Parser } from './parsers/types.ts'\nimport { AsyncEventEmitter } from './utils/AsyncEventEmitter.ts'\nimport type { App, AppContext, Component, AppEvents } from './App.ts'\n\ntype AppRenderer = {\n render(): Promise<void> | void\n renderToString(): Promise<string> | string\n waitUntilExit(): Promise<void>\n}\n\ntype RootRenderFunction<THostElement, TContext extends AppContext> = (this: TContext, container: THostElement, context: TContext) => AppRenderer\n\nexport type DefineApp<TContext extends AppContext> = (rootComponent?: Component, options?: TContext['options']) => App\n\nexport function defineApp<THostElement, TContext extends AppContext>(instance: RootRenderFunction<THostElement, TContext>): DefineApp<TContext> {\n function createApp(rootComponent: Component, options?: TContext['options']): 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 TContext\n\n const { render, renderToString, waitUntilExit } = instance.call(context, rootComponent, context)\n\n const app = {\n _component: rootComponent,\n async render() {\n if (isPromise(render)) {\n await render()\n } else {\n render()\n }\n },\n async renderToString() {\n return renderToString()\n },\n get files() {\n return fileManager.files\n },\n waitUntilExit,\n async addFile(...newFiles) {\n await fileManager.add(...newFiles)\n },\n use(pluginOrParser, ...options) {\n const args = Array.isArray(options) ? options : [options[0]]\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.override && isFunction(pluginOrParser.override)) {\n const overrider = pluginOrParser.override\n\n const extraApp = (overrider as any)(app, context, ...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 ;(installer as any)(app, context, ...args)\n }\n\n return app\n },\n } as App\n\n events.emit('start', { app })\n\n return app\n }\n\n return createApp\n}\n","import { defineApp } from './defineApp.ts'\n\nexport const createApp = defineApp(() => {\n return {\n async render() {\n throw new Error('Method not implemented')\n },\n async renderToString() {\n throw new Error('Method not implemented')\n },\n async waitUntilExit() {\n throw new Error('Method not implemented')\n },\n }\n})\n"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
const
|
|
2
|
-
require('../createFileParser-BD8yn0LT.cjs');
|
|
1
|
+
const require_typescriptParser = require('../typescriptParser-BBbbmG5W.cjs');
|
|
3
2
|
|
|
4
|
-
exports.createExport =
|
|
5
|
-
exports.createImport =
|
|
6
|
-
exports.print =
|
|
7
|
-
exports.
|
|
3
|
+
exports.createExport = require_typescriptParser.createExport;
|
|
4
|
+
exports.createImport = require_typescriptParser.createImport;
|
|
5
|
+
exports.print = require_typescriptParser.print;
|
|
6
|
+
exports.typescriptParser = require_typescriptParser.typescriptParser;
|
|
@@ -1,51 +1,3 @@
|
|
|
1
|
-
import "../
|
|
2
|
-
import { t as
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
//#region src/parsers/typescript.d.ts
|
|
6
|
-
type PrintOptions = {
|
|
7
|
-
source?: string;
|
|
8
|
-
baseName?: string;
|
|
9
|
-
scriptKind?: ts.ScriptKind;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Convert AST TypeScript/TSX nodes to a string based on the TypeScript printer.
|
|
13
|
-
* Ensures consistent output across environments.
|
|
14
|
-
* Also works as a formatter when `source` is provided without `elements`.
|
|
15
|
-
*/
|
|
16
|
-
declare function print(elements?: Array<ts.Node>, {
|
|
17
|
-
source,
|
|
18
|
-
baseName,
|
|
19
|
-
scriptKind
|
|
20
|
-
}?: PrintOptions): string;
|
|
21
|
-
declare function createImport({
|
|
22
|
-
name,
|
|
23
|
-
path,
|
|
24
|
-
root,
|
|
25
|
-
isTypeOnly,
|
|
26
|
-
isNameSpace
|
|
27
|
-
}: {
|
|
28
|
-
name: string | Array<string | {
|
|
29
|
-
propertyName: string;
|
|
30
|
-
name?: string;
|
|
31
|
-
}>;
|
|
32
|
-
path: string;
|
|
33
|
-
root?: string;
|
|
34
|
-
isTypeOnly?: boolean;
|
|
35
|
-
isNameSpace?: boolean;
|
|
36
|
-
}): ts.ImportDeclaration;
|
|
37
|
-
declare function createExport({
|
|
38
|
-
path,
|
|
39
|
-
asAlias,
|
|
40
|
-
isTypeOnly,
|
|
41
|
-
name
|
|
42
|
-
}: {
|
|
43
|
-
path: string;
|
|
44
|
-
asAlias?: boolean;
|
|
45
|
-
isTypeOnly?: boolean;
|
|
46
|
-
name?: string | Array<ts.Identifier | string>;
|
|
47
|
-
}): ts.ExportDeclaration;
|
|
48
|
-
declare const typeScriptParser: Parser<object>;
|
|
49
|
-
//#endregion
|
|
50
|
-
export { createExport, createImport, print, typeScriptParser };
|
|
51
|
-
//# sourceMappingURL=typescript.d.cts.map
|
|
1
|
+
import "../App-zyf9KG3p.cjs";
|
|
2
|
+
import { i as typescriptParser, n as createImport, r as print, t as createExport } from "../typescriptParser-C-sBy1iR.cjs";
|
|
3
|
+
export { createExport, createImport, print, typescriptParser };
|
|
@@ -1,51 +1,3 @@
|
|
|
1
|
-
import "../
|
|
2
|
-
import { t as
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
//#region src/parsers/typescript.d.ts
|
|
6
|
-
type PrintOptions = {
|
|
7
|
-
source?: string;
|
|
8
|
-
baseName?: string;
|
|
9
|
-
scriptKind?: ts.ScriptKind;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Convert AST TypeScript/TSX nodes to a string based on the TypeScript printer.
|
|
13
|
-
* Ensures consistent output across environments.
|
|
14
|
-
* Also works as a formatter when `source` is provided without `elements`.
|
|
15
|
-
*/
|
|
16
|
-
declare function print(elements?: Array<ts.Node>, {
|
|
17
|
-
source,
|
|
18
|
-
baseName,
|
|
19
|
-
scriptKind
|
|
20
|
-
}?: PrintOptions): string;
|
|
21
|
-
declare function createImport({
|
|
22
|
-
name,
|
|
23
|
-
path,
|
|
24
|
-
root,
|
|
25
|
-
isTypeOnly,
|
|
26
|
-
isNameSpace
|
|
27
|
-
}: {
|
|
28
|
-
name: string | Array<string | {
|
|
29
|
-
propertyName: string;
|
|
30
|
-
name?: string;
|
|
31
|
-
}>;
|
|
32
|
-
path: string;
|
|
33
|
-
root?: string;
|
|
34
|
-
isTypeOnly?: boolean;
|
|
35
|
-
isNameSpace?: boolean;
|
|
36
|
-
}): ts.ImportDeclaration;
|
|
37
|
-
declare function createExport({
|
|
38
|
-
path,
|
|
39
|
-
asAlias,
|
|
40
|
-
isTypeOnly,
|
|
41
|
-
name
|
|
42
|
-
}: {
|
|
43
|
-
path: string;
|
|
44
|
-
asAlias?: boolean;
|
|
45
|
-
isTypeOnly?: boolean;
|
|
46
|
-
name?: string | Array<ts.Identifier | string>;
|
|
47
|
-
}): ts.ExportDeclaration;
|
|
48
|
-
declare const typeScriptParser: Parser<object>;
|
|
49
|
-
//#endregion
|
|
50
|
-
export { createExport, createImport, print, typeScriptParser };
|
|
51
|
-
//# sourceMappingURL=typescript.d.ts.map
|
|
1
|
+
import "../App-DZuROf6f.js";
|
|
2
|
+
import { i as typescriptParser, n as createImport, r as print, t as createExport } from "../typescriptParser-CtMmz0UV.js";
|
|
3
|
+
export { createExport, createImport, print, typescriptParser };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { i as
|
|
2
|
-
import "../createFileParser-Cix3AMLd.js";
|
|
1
|
+
import { i as typescriptParser, n as createImport, r as print, t as createExport } from "../typescriptParser-BBGeFKlP.js";
|
|
3
2
|
|
|
4
|
-
export { createExport, createImport, print,
|
|
3
|
+
export { createExport, createImport, print, typescriptParser };
|
package/dist/parsers.cjs
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const require_typescriptParser = require('./typescriptParser-BBbbmG5W.cjs');
|
|
2
|
+
const require_tsxParser = require('./tsxParser-HDf_3TMc.cjs');
|
|
3
|
+
|
|
4
|
+
exports.createParser = require_typescriptParser.createParser;
|
|
5
|
+
exports.defaultParser = require_tsxParser.defaultParser;
|
|
6
|
+
exports.tsxParser = require_tsxParser.tsxParser;
|
|
7
|
+
exports.typescriptParser = require_typescriptParser.typescriptParser;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { o as Parser, s as UserParser } from "./App-zyf9KG3p.cjs";
|
|
2
|
+
import { i as typescriptParser } from "./typescriptParser-C-sBy1iR.cjs";
|
|
3
|
+
|
|
4
|
+
//#region src/parsers/createParser.d.ts
|
|
5
|
+
declare function createParser<TOptions = any[], TMeta extends object = any>(parser: UserParser<TOptions, TMeta>): Parser<TOptions, TMeta>;
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region src/parsers/defaultParser.d.ts
|
|
8
|
+
declare const defaultParser: Parser<[], any>;
|
|
9
|
+
//#endregion
|
|
10
|
+
//#region src/parsers/tsxParser.d.ts
|
|
11
|
+
declare const tsxParser: Parser<[], any>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { createParser, defaultParser, tsxParser, typescriptParser };
|
|
14
|
+
//# sourceMappingURL=parsers.d.cts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { o as Parser, s as UserParser } from "./App-DZuROf6f.js";
|
|
2
|
+
import { i as typescriptParser } from "./typescriptParser-CtMmz0UV.js";
|
|
3
|
+
|
|
4
|
+
//#region src/parsers/createParser.d.ts
|
|
5
|
+
declare function createParser<TOptions = any[], TMeta extends object = any>(parser: UserParser<TOptions, TMeta>): Parser<TOptions, TMeta>;
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region src/parsers/defaultParser.d.ts
|
|
8
|
+
declare const defaultParser: Parser<[], any>;
|
|
9
|
+
//#endregion
|
|
10
|
+
//#region src/parsers/tsxParser.d.ts
|
|
11
|
+
declare const tsxParser: Parser<[], any>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { createParser, defaultParser, tsxParser, typescriptParser };
|
|
14
|
+
//# sourceMappingURL=parsers.d.ts.map
|
package/dist/parsers.js
ADDED
package/dist/plugins.cjs
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
|
+
let node_path = require("node:path");
|
|
3
|
+
node_path = require_chunk.__toESM(node_path);
|
|
4
|
+
let js_runtime = require("js-runtime");
|
|
5
|
+
js_runtime = require_chunk.__toESM(js_runtime);
|
|
6
|
+
let fs_extra = require("fs-extra");
|
|
7
|
+
fs_extra = require_chunk.__toESM(fs_extra);
|
|
8
|
+
|
|
9
|
+
//#region src/plugins/createPlugin.ts
|
|
10
|
+
function createPlugin(plugin) {
|
|
11
|
+
return {
|
|
12
|
+
type: "plugin",
|
|
13
|
+
...plugin
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region src/plugins/fsPlugin.ts
|
|
19
|
+
async function write(path, data, options = {}) {
|
|
20
|
+
if (data.trim() === "") return;
|
|
21
|
+
return (0, js_runtime.switcher)({
|
|
22
|
+
node: async (path$1, data$1, { sanity }) => {
|
|
23
|
+
try {
|
|
24
|
+
const oldContent = await fs_extra.default.readFile((0, node_path.resolve)(path$1), { encoding: "utf-8" });
|
|
25
|
+
if ((oldContent === null || oldContent === void 0 ? void 0 : oldContent.toString()) === (data$1 === null || data$1 === void 0 ? void 0 : data$1.toString())) return;
|
|
26
|
+
} catch (_err) {}
|
|
27
|
+
await fs_extra.default.outputFile((0, node_path.resolve)(path$1), data$1, { encoding: "utf-8" });
|
|
28
|
+
if (sanity) {
|
|
29
|
+
const savedData = await fs_extra.default.readFile((0, node_path.resolve)(path$1), { encoding: "utf-8" });
|
|
30
|
+
if ((savedData === null || savedData === void 0 ? void 0 : savedData.toString()) !== (data$1 === null || data$1 === void 0 ? void 0 : data$1.toString())) throw new Error(`Sanity check failed for ${path$1}\n\nData[${data$1.length}]:\n${data$1}\n\nSaved[${savedData.length}]:\n${savedData}\n`);
|
|
31
|
+
return savedData;
|
|
32
|
+
}
|
|
33
|
+
return data$1;
|
|
34
|
+
},
|
|
35
|
+
bun: async (path$1, data$1, { sanity }) => {
|
|
36
|
+
try {
|
|
37
|
+
await Bun.write((0, node_path.resolve)(path$1), data$1);
|
|
38
|
+
if (sanity) {
|
|
39
|
+
const savedData = await Bun.file((0, node_path.resolve)(path$1)).text();
|
|
40
|
+
if ((savedData === null || savedData === void 0 ? void 0 : savedData.toString()) !== (data$1 === null || data$1 === void 0 ? void 0 : data$1.toString())) throw new Error(`Sanity check failed for ${path$1}\n\nData[${path$1.length}]:\n${path$1}\n\nSaved[${savedData.length}]:\n${savedData}\n`);
|
|
41
|
+
return savedData;
|
|
42
|
+
}
|
|
43
|
+
return data$1;
|
|
44
|
+
} catch (e) {
|
|
45
|
+
console.error(e);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}, "node")(path, data.trim(), options);
|
|
49
|
+
}
|
|
50
|
+
const fsPlugin = createPlugin({
|
|
51
|
+
name: "fs",
|
|
52
|
+
scope: "write",
|
|
53
|
+
async install(_app, context, options) {
|
|
54
|
+
context.events.on("process:progress", async ({ file, source }) => {
|
|
55
|
+
if (options === null || options === void 0 ? void 0 : options.onWrite) await options.onWrite(file.path, source);
|
|
56
|
+
await write(file.path, source, { sanity: false });
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
override(_app, context) {
|
|
60
|
+
return { async write(options = {
|
|
61
|
+
extension: { ".ts": ".ts" },
|
|
62
|
+
dryRun: false
|
|
63
|
+
}) {
|
|
64
|
+
await context.fileManager.write({
|
|
65
|
+
extension: options.extension,
|
|
66
|
+
dryRun: options.dryRun,
|
|
67
|
+
parsers: context.installedParsers
|
|
68
|
+
});
|
|
69
|
+
} };
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
//#endregion
|
|
74
|
+
exports.createPlugin = createPlugin;
|
|
75
|
+
exports.fsPlugin = fsPlugin;
|
|
76
|
+
//# sourceMappingURL=plugins.cjs.map
|