@kubb/core 0.21.1 → 0.22.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.
- package/dist/index.d.ts +8 -6
- package/dist/index.js +18 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +18 -17
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -223,13 +223,19 @@ type WriteOptions = {
|
|
|
223
223
|
};
|
|
224
224
|
declare const write: (data: string, path: string, options?: WriteOptions) => Promise<void>;
|
|
225
225
|
|
|
226
|
+
declare const format: (text: string) => string;
|
|
227
|
+
|
|
228
|
+
declare const getRelativePath: (from?: string | null, to?: string | null) => string;
|
|
229
|
+
|
|
226
230
|
/**
|
|
227
231
|
* Get the type of the first argument in a function.
|
|
228
232
|
* @example Arg0<(a: string, b: number) => void> -> string
|
|
229
233
|
*/
|
|
230
234
|
type Argument0<H extends keyof PluginLifecycle> = Parameters<PluginLifecycle[H]>[0];
|
|
235
|
+
type Strategy = 'hookFirst' | 'hookParallel' | 'hookReduceArg0' | 'hookSeq';
|
|
236
|
+
|
|
231
237
|
declare const hooks: [keyof PluginLifecycle];
|
|
232
|
-
declare class
|
|
238
|
+
declare class PluginManager {
|
|
233
239
|
plugins: KubbPlugin[];
|
|
234
240
|
readonly fileManager: FileManager;
|
|
235
241
|
private readonly logger?;
|
|
@@ -266,8 +272,4 @@ declare class PluginDriver {
|
|
|
266
272
|
private runSync;
|
|
267
273
|
}
|
|
268
274
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
declare const getRelativePath: (from?: string | null, to?: string | null) => string;
|
|
272
|
-
|
|
273
|
-
export { Argument0, CLIOptions, Cache, CacheStore, CorePluginOptions, EmittedFile, File, FileManager, KubbConfig, KubbPlugin, KubbUserConfig, LogLevel, LogType, Logger, MaybePromise, PluginContext, PluginDriver, PluginFactoryOptions, PluginLifecycle, PluginLifecycleHooks, Status, TransformResult, UUID, UserFile, ValidationResult, build, createPlugin, createPluginCache, build as default, defineConfig, format, getRelativePath, hooks, isPromise, write };
|
|
275
|
+
export { Argument0, CLIOptions, Cache, CacheStore, CorePluginOptions, EmittedFile, File, FileManager, KubbConfig, KubbPlugin, KubbUserConfig, LogLevel, LogType, Logger, MaybePromise, PluginContext, PluginFactoryOptions, PluginLifecycle, PluginLifecycleHooks, PluginManager, Status, Strategy, TransformResult, UUID, UserFile, ValidationResult, build, createPlugin, createPluginCache, build as default, defineConfig, format, getRelativePath, hooks, isPromise, write };
|
package/dist/index.js
CHANGED
|
@@ -137,7 +137,7 @@ var definePlugin = createPlugin((options) => {
|
|
|
137
137
|
};
|
|
138
138
|
});
|
|
139
139
|
|
|
140
|
-
// src/managers/
|
|
140
|
+
// src/managers/fileManager/events.ts
|
|
141
141
|
var keys = {
|
|
142
142
|
getEmitFileKey: () => `emit-file`,
|
|
143
143
|
getStatusChangeKey: () => `status-change`,
|
|
@@ -185,7 +185,7 @@ var getFileManagerEvents = (emitter) => {
|
|
|
185
185
|
};
|
|
186
186
|
};
|
|
187
187
|
|
|
188
|
-
// src/managers/FileManager.ts
|
|
188
|
+
// src/managers/fileManager/FileManager.ts
|
|
189
189
|
var FileManager = class {
|
|
190
190
|
cache = /* @__PURE__ */ new Map();
|
|
191
191
|
emitter = new EventEmitter();
|
|
@@ -247,7 +247,7 @@ var FileManager = class {
|
|
|
247
247
|
}
|
|
248
248
|
};
|
|
249
249
|
|
|
250
|
-
// src/
|
|
250
|
+
// src/managers/pluginManager/PluginManager.ts
|
|
251
251
|
var hookNames = {
|
|
252
252
|
validate: 1,
|
|
253
253
|
buildStart: 1,
|
|
@@ -258,7 +258,7 @@ var hookNames = {
|
|
|
258
258
|
buildEnd: 1
|
|
259
259
|
};
|
|
260
260
|
var hooks = Object.keys(hookNames);
|
|
261
|
-
var
|
|
261
|
+
var PluginManager = class {
|
|
262
262
|
plugins;
|
|
263
263
|
fileManager = new FileManager();
|
|
264
264
|
logger;
|
|
@@ -405,9 +405,10 @@ async function buildImplementation(options, done) {
|
|
|
405
405
|
if (config.output.clean) {
|
|
406
406
|
await fse.remove(config.output.path);
|
|
407
407
|
}
|
|
408
|
-
const
|
|
408
|
+
const pluginManager = new PluginManager(config, { logger });
|
|
409
|
+
const { plugins, fileManager } = pluginManager;
|
|
409
410
|
const input = fse.readFileSync(path2.resolve(config.root, config.input.path), "utf-8");
|
|
410
|
-
const validations = await
|
|
411
|
+
const validations = await pluginManager.hookParallel("validate", [plugins]);
|
|
411
412
|
const validationsWithMessage = validations.filter(Boolean);
|
|
412
413
|
if (validationsWithMessage.some((validation) => typeof validation !== "boolean")) {
|
|
413
414
|
validationsWithMessage.forEach((validation) => {
|
|
@@ -417,30 +418,30 @@ async function buildImplementation(options, done) {
|
|
|
417
418
|
});
|
|
418
419
|
return;
|
|
419
420
|
}
|
|
420
|
-
|
|
421
|
+
fileManager.events.onAdd(async (id, file) => {
|
|
421
422
|
let fileName = file.fileName;
|
|
422
423
|
let { name: name2, source: code } = file;
|
|
423
424
|
if (!fileName && name2) {
|
|
424
425
|
fileName = path2.resolve(config.root, config.output.path, name2);
|
|
425
426
|
}
|
|
426
|
-
const loadedResult = await
|
|
427
|
+
const loadedResult = await pluginManager.hookFirst("load", [fileName]);
|
|
427
428
|
if (loadedResult) {
|
|
428
429
|
code = loadedResult;
|
|
429
430
|
}
|
|
430
431
|
if (code) {
|
|
431
|
-
const transformedCode = await
|
|
432
|
-
await
|
|
433
|
-
|
|
434
|
-
|
|
432
|
+
const transformedCode = await pluginManager.hookReduceArg0("transform", [code, fileName], transformReducer);
|
|
433
|
+
await pluginManager.hookParallel("writeFile", [transformedCode, fileName]);
|
|
434
|
+
fileManager.setStatus(id, "success");
|
|
435
|
+
fileManager.remove(id);
|
|
435
436
|
}
|
|
436
437
|
});
|
|
437
|
-
await
|
|
438
|
-
|
|
438
|
+
await pluginManager.hookParallel("buildStart", [config]);
|
|
439
|
+
fileManager.add({
|
|
439
440
|
fileName: path2.resolve(config.root, config.input.path),
|
|
440
441
|
source: input
|
|
441
442
|
});
|
|
442
|
-
|
|
443
|
-
await
|
|
443
|
+
fileManager.events.onSuccess(async () => {
|
|
444
|
+
await pluginManager.hookParallel("buildEnd");
|
|
444
445
|
setTimeout(() => {
|
|
445
446
|
done();
|
|
446
447
|
}, 1e3);
|
|
@@ -463,7 +464,7 @@ var defineConfig = (options) => options;
|
|
|
463
464
|
var src_default = build;
|
|
464
465
|
|
|
465
466
|
exports.FileManager = FileManager;
|
|
466
|
-
exports.
|
|
467
|
+
exports.PluginManager = PluginManager;
|
|
467
468
|
exports.build = build;
|
|
468
469
|
exports.createPlugin = createPlugin;
|
|
469
470
|
exports.createPluginCache = createPluginCache;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/build.ts","../src/plugin.ts","../src/utils/isPromise.ts","../src/utils/write.ts","../src/utils/format.ts","../src/utils/cache.ts","../src/utils/read.ts","../src/managers/FileManager.ts","../src/managers/utils/getFileManagerEvents.ts","../src/utils/PluginDriver.ts","../src/config.ts","../src/index.ts"],"names":["path","fse","file","argument0","name"],"mappings":"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","sourcesContent":["import path from 'path'\n\nimport fse from 'fs-extra'\n\nimport { PluginDriver } from './utils/PluginDriver'\n\nimport type { PluginContext, TransformResult, ValidationResult, LogLevel, KubbPlugin } from './types'\n\ntype BuildOutput = void\n\n// Same type as ora\ntype Spinner = {\n start: (text?: string) => Spinner\n succeed: (text: string) => Spinner\n stopAndPersist: (options: { text: string }) => Spinner\n render: () => Spinner\n text: string\n info: (text: string) => Spinner\n}\n\nexport type Logger = {\n log: (message: string, logLevel: LogLevel) => void\n spinner?: Spinner\n}\ntype BuildOptions = {\n config: PluginContext['config']\n mode: 'development' | 'production'\n logger?: Logger\n}\n\nasync function transformReducer(this: PluginContext, _previousCode: string, result: TransformResult, _plugin: KubbPlugin) {\n if (result === null) {\n return null\n }\n return result\n}\n\nasync function buildImplementation(options: BuildOptions, done: (output: BuildOutput) => void) {\n const { config, logger } = options\n\n if (config.output.clean) {\n await fse.remove(config.output.path)\n }\n\n const pluginDriver = new PluginDriver(config, { logger })\n const input = fse.readFileSync(path.resolve(config.root, config.input.path), 'utf-8')\n\n const validations = await pluginDriver.hookParallel<'validate', ValidationResult>('validate', [pluginDriver.plugins])\n const validationsWithMessage = validations.filter(Boolean)\n\n if (validationsWithMessage.some((validation) => typeof validation !== 'boolean')) {\n validationsWithMessage.forEach((validation) => {\n if (validation && typeof validation !== 'boolean' && validation?.message) {\n logger?.log(validation.message, 'warn')\n }\n })\n\n return\n }\n\n pluginDriver.fileManager.events.onAdd(async (id, file) => {\n let fileName = file.fileName as string\n let { name, source: code } = file\n\n if (!fileName && name) {\n fileName = path.resolve(config.root, config.output.path, name)\n }\n\n const loadedResult = await pluginDriver.hookFirst('load', [fileName])\n if (loadedResult) {\n code = loadedResult\n }\n\n if (code) {\n const transformedCode = await pluginDriver.hookReduceArg0('transform', [code, fileName], transformReducer)\n\n await pluginDriver.hookParallel('writeFile', [transformedCode, fileName])\n pluginDriver.fileManager.setStatus(id, 'success')\n pluginDriver.fileManager.remove(id)\n }\n })\n\n await pluginDriver.hookParallel('buildStart', [config])\n\n pluginDriver.fileManager.add({\n fileName: path.resolve(config.root, config.input.path),\n source: input,\n })\n\n pluginDriver.fileManager.events.onSuccess(async () => {\n await pluginDriver.hookParallel('buildEnd')\n setTimeout(() => {\n done()\n }, 1000)\n })\n}\n\nexport function build(options: BuildOptions): Promise<BuildOutput> {\n return new Promise((resolve, reject) => {\n try {\n buildImplementation(options, resolve)\n } catch (e) {\n reject(e)\n }\n })\n}\n","import path from 'path'\n\nimport { createPluginCache, getRelativePath, write } from './utils'\n\nimport { FileManager, File } from './managers'\nimport type { PluginContext, KubbPlugin, PluginFactoryOptions } from './types'\n\ntype KubbPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (\n options: T['options']\n) => T['nested'] extends true ? Array<KubbPlugin<T>> : KubbPlugin<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: KubbPluginFactory<T>) {\n return (options: T['options']) => {\n const plugin = factory(options)\n if (Array.isArray(plugin)) {\n throw new Error('Not implemented')\n }\n\n // default transform\n if (!plugin.transform) {\n plugin.transform = function transform(code) {\n return code\n }\n }\n\n return plugin\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n resolveId: PluginContext['resolveId']\n load: PluginContext['load']\n}\n\n// not publicly exported\nexport type CorePluginOptions = PluginFactoryOptions<Options, false, PluginContext>\n\nexport const name = 'core' as const\n\nexport const definePlugin = createPlugin<CorePluginOptions>((options) => {\n const { fileManager, resolveId, load } = options\n const indexFiles: File[] = []\n\n const api: PluginContext = {\n get config() {\n return options.config\n },\n async emitFile(emittedFile) {\n const resolvedId = await resolveId({ importee: emittedFile.id, importer: emittedFile.importer, options: emittedFile.options })\n const fileName = resolvedId || emittedFile.importer || emittedFile.id\n\n return fileManager.add({\n fileName: fileName,\n name: emittedFile.name,\n source: emittedFile.source,\n })\n },\n addToRoot: (file: File) => {\n indexFiles.push(file)\n },\n resolveId,\n load,\n cache: createPluginCache(Object.create(null)),\n }\n\n return {\n name,\n api,\n async buildEnd() {\n if (!indexFiles.length) {\n return\n }\n\n let index = ``\n\n indexFiles.forEach((item) => {\n index += `export * from \"${getRelativePath(path.resolve(this.config.root, this.config.output.path), item.fileName)}\";\\n`\n })\n\n await write(index, path.resolve(this.config.root, this.config.output.path, 'index.ts'), { format: true })\n },\n resolveId(importee, importer) {\n if (!importer) {\n return null\n }\n return path.resolve(importer, importee)\n },\n }\n})\n","import type { MaybePromise } from '../types'\n\nexport const isPromise = <T>(result: MaybePromise<T>): result is Promise<T> => {\n return typeof (result as any)?.then === 'function'\n}\n","/* eslint-disable consistent-return */\nimport fse from 'fs-extra'\n\nimport { format } from './format'\n\ntype WriteOptions = {\n format: boolean\n}\n\nexport const write = async (data: string, path: string, options: WriteOptions = { format: false }) => {\n const formattedData = options.format ? format(data) : data\n\n try {\n await fse.stat(path)\n const oldContent = await fse.readFile(path, { encoding: 'utf-8' })\n if (oldContent?.toString() === formattedData) {\n return\n }\n } catch (_err) {\n return fse.outputFile(path, formattedData)\n }\n\n return fse.outputFile(path, formattedData)\n}\n","import { format as prettierFormat } from 'prettier'\n\nimport type { Options } from 'prettier'\n\nconst formatOptions: Options = {\n tabWidth: 2,\n printWidth: 160,\n parser: 'typescript',\n singleQuote: true,\n semi: false,\n bracketSameLine: false,\n endOfLine: 'auto',\n}\nexport const format = (text: string) => {\n return prettierFormat(text, formatOptions)\n}\n","/* eslint-disable no-param-reassign */\n/* eslint-disable consistent-return */\n\nexport interface Cache<TCache = any> {\n delete(id: string): boolean\n get<T = TCache>(id: string): T\n has(id: string): boolean\n set<T = TCache>(id: string, value: T): void\n}\n\nexport function createPluginCache(cache: any): Cache {\n return {\n delete(id: string) {\n return delete cache[id]\n },\n get(id: string) {\n const item = cache[id]\n if (!item) return\n item[0] = 0\n return item[1]\n },\n has(id: string) {\n const item = cache[id]\n if (!item) return false\n item[0] = 0\n return true\n },\n set(id: string, value: any) {\n cache[id] = [0, value]\n },\n }\n}\n","import path from 'path'\n\n// TODO check for a better way or resolving the relative path\nexport const getRelativePath = (from?: string | null, to?: string | null) => {\n if (!from || !to) {\n throw new Error('From and to should be filled in when retrieving the relativePath')\n }\n const newPath = path.relative(from, to).replace('../', '').replace('.ts', '').trimEnd()\n\n return `./${newPath}`\n}\n","import EventEmitter from 'events'\nimport { randomUUID } from 'crypto'\nimport type { CacheStore, UUID, Status, File, UserFile } from './types'\nimport { getFileManagerEvents } from './utils/getFileManagerEvents'\n\nexport class FileManager {\n private cache: Map<CacheStore['id'], CacheStore> = new Map()\n emitter = new EventEmitter()\n events = getFileManagerEvents(this.emitter)\n\n constructor() {\n this.events.onStatusChange(() => {\n if (this.getCountOfStatus('removed') === this.cache.size) {\n // all files are been resolved and written to the file system\n this.events.emitSuccess()\n }\n })\n }\n\n private getCache(id: UUID) {\n return this.cache.get(id)\n }\n private getCountOfStatus(status: Status) {\n let count = 0\n\n this.cache.forEach((item) => {\n if (item.status === status) {\n count++\n }\n })\n return count\n }\n\n add(userFile: UserFile) {\n const file: File = {\n ...userFile,\n } as File\n const cacheItem = { id: randomUUID(), file, status: 'new' as Status }\n\n this.cache.set(cacheItem.id, cacheItem)\n this.events.emitFile(cacheItem.id, file)\n\n return new Promise<File>((resolve) => {\n const unsubscribe = this.events.onRemove(cacheItem.id, (file) => {\n resolve(file)\n unsubscribe()\n })\n })\n }\n\n setStatus(id: UUID, status: Status) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n cacheItem.status = status\n this.cache.set(id, cacheItem)\n this.events.emitStatusChange(cacheItem.file)\n this.events.emitStatusChangeById(id, status)\n }\n\n get(id: UUID) {\n const cacheItem = this.getCache(id)\n return cacheItem?.file\n }\n\n remove(id: UUID) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n this.setStatus(id, 'removed')\n this.events.emitRemove(id, cacheItem.file)\n }\n}\n","import EventEmitter from 'events'\n\nimport type { File, Status, UUID } from '../types'\n\nconst keys = {\n getEmitFileKey: () => `emit-file`,\n getStatusChangeKey: () => `status-change`,\n getStatusChangeByIdKey: (id: string) => `${id}-status-change`,\n getSuccessKey: () => `success`,\n getRemoveKey: (id: string) => `${id}remove`,\n} as const\n\nexport const getFileManagerEvents = (emitter: EventEmitter) => {\n return {\n /**\n * Emiter\n */\n emitFile: (id: UUID, file: File): void => {\n emitter.emit(keys.getEmitFileKey(), id, file)\n },\n emitStatusChange: (file: File): void => {\n emitter.emit(keys.getStatusChangeKey(), file)\n },\n emitStatusChangeById: (id: UUID, status: Status): void => {\n emitter.emit(keys.getStatusChangeByIdKey(id), status)\n },\n emitSuccess: (): void => {\n emitter.emit(keys.getSuccessKey())\n },\n emitRemove: (id: UUID, file: File): void => {\n emitter.emit(keys.getRemoveKey(id), file)\n },\n /**\n * Listeners\n */\n\n onAdd: (callback: (id: UUID, file: File) => void): VoidFunction => {\n emitter.on(keys.getEmitFileKey(), callback)\n return () => emitter.removeListener(keys.getEmitFileKey(), callback)\n },\n onStatusChange: (callback: (file: File) => void): VoidFunction => {\n emitter.on(keys.getStatusChangeKey(), callback)\n return () => emitter.removeListener(keys.getStatusChangeKey(), callback)\n },\n onStatusChangeById: (id: UUID, callback: (status: Status) => void): VoidFunction => {\n emitter.on(keys.getStatusChangeByIdKey(id), callback)\n return () => emitter.removeListener(keys.getStatusChangeByIdKey(id), callback)\n },\n onSuccess: (callback: () => void): VoidFunction => {\n emitter.on(keys.getSuccessKey(), callback)\n return () => emitter.removeListener(keys.getSuccessKey(), callback)\n },\n onRemove: (id: UUID, callback: (file: File) => void): VoidFunction => {\n emitter.on(keys.getRemoveKey(id), callback)\n return () => emitter.removeListener(keys.getRemoveKey(id), callback)\n },\n }\n}\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport { definePlugin } from '../plugin'\n\nimport type { KubbConfig, KubbPlugin, PluginLifecycleHooks, PluginLifecycle, MaybePromise } from '../types'\nimport type { Logger } from '../build'\nimport type { CorePluginOptions } from '../plugin'\nimport { FileManager } from '../managers'\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n/**\n * Get the type of the first argument in a function.\n * @example Arg0<(a: string, b: number) => void> -> string\n */\nexport type Argument0<H extends keyof PluginLifecycle> = Parameters<PluginLifecycle[H]>[0]\n\ntype Strategy = 'hookFirst' | 'hookParallel' | 'hookReduceArg0' | 'hookSeq'\n\n// This will make sure no input hook is omitted\nconst hookNames: {\n [P in PluginLifecycleHooks]: 1\n} = {\n validate: 1,\n buildStart: 1,\n resolveId: 1,\n load: 1,\n transform: 1,\n writeFile: 1,\n buildEnd: 1,\n}\nexport const hooks = Object.keys(hookNames) as [PluginLifecycleHooks]\n\nexport class PluginDriver {\n public plugins: KubbPlugin[]\n\n public readonly fileManager: FileManager = new FileManager()\n\n private readonly logger?: Logger\n\n private readonly config: KubbConfig\n\n public readonly core: KubbPlugin<CorePluginOptions> & { api: CorePluginOptions['api'] }\n\n constructor(config: KubbConfig, options: { logger?: Logger }) {\n this.logger = options.logger\n this.config = config\n\n this.core = definePlugin({\n config,\n fileManager: this.fileManager,\n load: this.load,\n resolveId: (params) => {\n if (params.pluginName) {\n return this.resolveIdForPlugin(params.pluginName)(params.importee, params.importer, params.options)\n }\n return this.resolveId(params.importee, params.importer, params.options)\n },\n }) as KubbPlugin<CorePluginOptions> & {\n api: CorePluginOptions['api']\n }\n this.plugins = [this.core, ...(config.plugins || [])]\n }\n\n resolveId = (importee: string, importer?: string, options?: Record<string, any> | undefined) => {\n return this.hookFirst('resolveId', [importee, importer, options])\n }\n resolveIdForPlugin = (pluginName: string) => (importee: string, importer?: string, options?: Record<string, any> | undefined) => {\n return this.hookForPlugin(pluginName, 'resolveId', [importee, importer, options])\n }\n\n load = async (id: string) => {\n return this.hookFirst('load', [id])\n }\n\n // run only hook for a specific plugin name\n hookForPlugin<H extends PluginLifecycleHooks>(\n pluginName: string,\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n skipped?: ReadonlySet<KubbPlugin> | null\n ): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName, pluginName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run('hookFirst', hookName, parameters, plugin) as any\n })\n }\n return promise\n }\n\n // chains, first non-null result stops and returns\n hookFirst<H extends PluginLifecycleHooks>(\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n skipped?: ReadonlySet<KubbPlugin> | null\n ): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run('hookFirst', hookName, parameters, plugin) as any\n })\n }\n return promise\n }\n\n // parallel\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>(hookName: H, parameters?: Parameters<PluginLifecycle[H]> | undefined) {\n const parallelPromises: Promise<TOuput>[] = []\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if ((plugin[hookName] as { sequential?: boolean })?.sequential) {\n await Promise.all(parallelPromises)\n parallelPromises.length = 0\n await this.run('hookParallel', hookName, parameters, plugin)\n } else {\n const promise: Promise<TOuput> = this.run('hookParallel', hookName, parameters, plugin)\n\n parallelPromises.push(promise)\n }\n }\n return Promise.all(parallelPromises)\n }\n\n // chains, reduces returned value, handling the reduced value as the first hook argument\n hookReduceArg0<H extends PluginLifecycleHooks>(\n hookName: H,\n [argument0, ...rest]: Parameters<PluginLifecycle[H]>,\n reduce: (reduction: Argument0<H>, result: ReturnType<PluginLifecycle[H]>, plugin: KubbPlugin) => MaybePromise<Argument0<H> | null>\n ): Promise<Argument0<H>> {\n let promise = Promise.resolve(argument0)\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then((argument0) =>\n this.run('hookReduceArg0', hookName, [argument0, ...rest] as Parameters<PluginLifecycle[H]>, plugin).then((result) =>\n reduce.call(this.core.api, argument0, result, plugin)\n )\n )\n }\n return promise\n }\n\n // chains\n\n hookSeq<H extends PluginLifecycleHooks>(hookName: H, parameters?: Parameters<PluginLifecycle[H]>) {\n let promise: Promise<void> = Promise.resolve()\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then(() => this.run('hookSeq', hookName, parameters, plugin))\n }\n return promise.then(noReturn)\n }\n\n private getSortedPlugins(_hookName: keyof PluginLifecycle, pluginName?: string): KubbPlugin[] {\n const sortedPlugins = [...this.plugins]\n\n if (pluginName) {\n return sortedPlugins.filter((item) => item.name === pluginName)\n }\n return sortedPlugins\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n private run<H extends PluginLifecycleHooks, TResult = void>(\n strategy: Strategy,\n hookName: H,\n parameters: unknown[] | undefined,\n plugin: KubbPlugin\n ): Promise<TResult> {\n const hook = plugin[hookName]!\n\n return Promise.resolve().then(() => {\n if (typeof hook !== 'function') {\n return hook\n }\n\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.text = `[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`\n }\n\n const hookResult = (hook as any).apply(this.core.api, parameters)\n\n if (!hookResult?.then) {\n // short circuit for non-thenables and non-Promises\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return hookResult\n }\n\n return Promise.resolve(hookResult).then((result) => {\n // action was fulfilled\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return result\n })\n })\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n private runSync<H extends PluginLifecycleHooks>(hookName: H, parameters: Parameters<PluginLifecycle[H]>, plugin: KubbPlugin): ReturnType<PluginLifecycle[H]> {\n const hook = plugin[hookName]!\n\n // const context = this.pluginContexts.get(plugin)!;\n\n try {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return (hook as Function).apply(this.core.api, parameters)\n } catch (error: any) {\n return error\n }\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noReturn() {}\n","import type { MaybePromise, KubbUserConfig, CLIOptions } from './types'\n\n/**\n * Type helper to make it easier to use kubb.config.ts\n * accepts a direct {@link KubbConfig} object, or a function that returns it.\n * The function receives a {@link ConfigEnv} object that exposes two properties:\n */\nexport const defineConfig = (\n options:\n | MaybePromise<KubbUserConfig>\n | ((\n /** The options derived from CLI flags */\n cliOptions: CLIOptions\n ) => MaybePromise<KubbUserConfig>)\n) => options\n","/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { build } from './build'\n\nexport * from './config'\nexport * from './build'\nexport { CorePluginOptions, createPlugin } from './plugin'\nexport * from './utils'\nexport * from './types'\nexport * from './managers'\nexport default build\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/build.ts","../src/plugin.ts","../src/utils/isPromise.ts","../src/utils/write.ts","../src/utils/format.ts","../src/utils/cache.ts","../src/utils/read.ts","../src/managers/fileManager/FileManager.ts","../src/managers/fileManager/events.ts","../src/managers/pluginManager/PluginManager.ts","../src/config.ts","../src/index.ts"],"names":["path","fse","file","argument0","name"],"mappings":";AAAA,OAAOA,WAAU;AAEjB,OAAOC,UAAS;;;ACFhB,OAAOD,WAAU;;;ACEV,IAAM,YAAY,CAAI,WAAkD;AAC7E,SAAO,OAAQ,QAAgB,SAAS;AAC1C;;;ACHA,OAAO,SAAS;;;ACDhB,SAAS,UAAU,sBAAsB;AAIzC,IAAM,gBAAyB;AAAA,EAC7B,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,WAAW;AACb;AACO,IAAM,SAAS,CAAC,SAAiB;AACtC,SAAO,eAAe,MAAM,aAAa;AAC3C;;;ADNO,IAAM,QAAQ,OAAO,MAAcA,OAAc,UAAwB,EAAE,QAAQ,MAAM,MAAM;AACpG,QAAM,gBAAgB,QAAQ,SAAS,OAAO,IAAI,IAAI;AAEtD,MAAI;AACF,UAAM,IAAI,KAAKA,KAAI;AACnB,UAAM,aAAa,MAAM,IAAI,SAASA,OAAM,EAAE,UAAU,QAAQ,CAAC;AACjE,QAAI,YAAY,SAAS,MAAM,eAAe;AAC5C;AAAA,IACF;AAAA,EACF,SAAS,MAAP;AACA,WAAO,IAAI,WAAWA,OAAM,aAAa;AAAA,EAC3C;AAEA,SAAO,IAAI,WAAWA,OAAM,aAAa;AAC3C;;;AEbO,SAAS,kBAAkB,OAAmB;AACnD,SAAO;AAAA,IACL,OAAO,IAAY;AACjB,aAAO,OAAO,MAAM;AAAA,IACtB;AAAA,IACA,IAAI,IAAY;AACd,YAAM,OAAO,MAAM;AACnB,UAAI,CAAC;AAAM;AACX,WAAK,KAAK;AACV,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,IAAY;AACd,YAAM,OAAO,MAAM;AACnB,UAAI,CAAC;AAAM,eAAO;AAClB,WAAK,KAAK;AACV,aAAO;AAAA,IACT;AAAA,IACA,IAAI,IAAY,OAAY;AAC1B,YAAM,MAAM,CAAC,GAAG,KAAK;AAAA,IACvB;AAAA,EACF;AACF;;;AC/BA,OAAO,UAAU;AAGV,IAAM,kBAAkB,CAAC,MAAsB,OAAuB;AAC3E,MAAI,CAAC,QAAQ,CAAC,IAAI;AAChB,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AACA,QAAM,UAAU,KAAK,SAAS,MAAM,EAAE,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ;AAEtF,SAAO,KAAK;AACd;;;ALCO,SAAS,aAAoE,SAA+B;AACjH,SAAO,CAAC,YAA0B;AAChC,UAAM,SAAS,QAAQ,OAAO;AAC9B,QAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AAGA,QAAI,CAAC,OAAO,WAAW;AACrB,aAAO,YAAY,SAAS,UAAU,MAAM;AAC1C,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AAYO,IAAM,OAAO;AAEb,IAAM,eAAe,aAAgC,CAAC,YAAY;AACvE,QAAM,EAAE,aAAa,WAAW,KAAK,IAAI;AACzC,QAAM,aAAqB,CAAC;AAE5B,QAAM,MAAqB;AAAA,IACzB,IAAI,SAAS;AACX,aAAO,QAAQ;AAAA,IACjB;AAAA,IACA,MAAM,SAAS,aAAa;AAC1B,YAAM,aAAa,MAAM,UAAU,EAAE,UAAU,YAAY,IAAI,UAAU,YAAY,UAAU,SAAS,YAAY,QAAQ,CAAC;AAC7H,YAAM,WAAW,cAAc,YAAY,YAAY,YAAY;AAEnE,aAAO,YAAY,IAAI;AAAA,QACrB;AAAA,QACA,MAAM,YAAY;AAAA,QAClB,QAAQ,YAAY;AAAA,MACtB,CAAC;AAAA,IACH;AAAA,IACA,WAAW,CAAC,SAAe;AACzB,iBAAW,KAAK,IAAI;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,kBAAkB,uBAAO,OAAO,IAAI,CAAC;AAAA,EAC9C;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,MAAM,WAAW;AACf,UAAI,CAAC,WAAW,QAAQ;AACtB;AAAA,MACF;AAEA,UAAI,QAAQ;AAEZ,iBAAW,QAAQ,CAAC,SAAS;AAC3B,iBAAS,kBAAkB,gBAAgBA,MAAK,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,IAAI,GAAG,KAAK,QAAQ;AAAA;AAAA,MACnH,CAAC;AAED,YAAM,MAAM,OAAOA,MAAK,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,MAAM,UAAU,GAAG,EAAE,QAAQ,KAAK,CAAC;AAAA,IAC1G;AAAA,IACA,UAAU,UAAU,UAAU;AAC5B,UAAI,CAAC,UAAU;AACb,eAAO;AAAA,MACT;AACA,aAAOA,MAAK,QAAQ,UAAU,QAAQ;AAAA,IACxC;AAAA,EACF;AACF,CAAC;;;AM1FD,OAAO,kBAAkB;AACzB,SAAS,kBAAkB;;;ACG3B,IAAM,OAAO;AAAA,EACX,gBAAgB,MAAM;AAAA,EACtB,oBAAoB,MAAM;AAAA,EAC1B,wBAAwB,CAAC,OAAe,GAAG;AAAA,EAC3C,eAAe,MAAM;AAAA,EACrB,cAAc,CAAC,OAAe,GAAG;AACnC;AAEO,IAAM,uBAAuB,CAAC,YAA0B;AAC7D,SAAO;AAAA,IAIL,UAAU,CAAC,IAAU,SAAqB;AACxC,cAAQ,KAAK,KAAK,eAAe,GAAG,IAAI,IAAI;AAAA,IAC9C;AAAA,IACA,kBAAkB,CAAC,SAAqB;AACtC,cAAQ,KAAK,KAAK,mBAAmB,GAAG,IAAI;AAAA,IAC9C;AAAA,IACA,sBAAsB,CAAC,IAAU,WAAyB;AACxD,cAAQ,KAAK,KAAK,uBAAuB,EAAE,GAAG,MAAM;AAAA,IACtD;AAAA,IACA,aAAa,MAAY;AACvB,cAAQ,KAAK,KAAK,cAAc,CAAC;AAAA,IACnC;AAAA,IACA,YAAY,CAAC,IAAU,SAAqB;AAC1C,cAAQ,KAAK,KAAK,aAAa,EAAE,GAAG,IAAI;AAAA,IAC1C;AAAA,IAKA,OAAO,CAAC,aAA2D;AACjE,cAAQ,GAAG,KAAK,eAAe,GAAG,QAAQ;AAC1C,aAAO,MAAM,QAAQ,eAAe,KAAK,eAAe,GAAG,QAAQ;AAAA,IACrE;AAAA,IACA,gBAAgB,CAAC,aAAiD;AAChE,cAAQ,GAAG,KAAK,mBAAmB,GAAG,QAAQ;AAC9C,aAAO,MAAM,QAAQ,eAAe,KAAK,mBAAmB,GAAG,QAAQ;AAAA,IACzE;AAAA,IACA,oBAAoB,CAAC,IAAU,aAAqD;AAClF,cAAQ,GAAG,KAAK,uBAAuB,EAAE,GAAG,QAAQ;AACpD,aAAO,MAAM,QAAQ,eAAe,KAAK,uBAAuB,EAAE,GAAG,QAAQ;AAAA,IAC/E;AAAA,IACA,WAAW,CAAC,aAAuC;AACjD,cAAQ,GAAG,KAAK,cAAc,GAAG,QAAQ;AACzC,aAAO,MAAM,QAAQ,eAAe,KAAK,cAAc,GAAG,QAAQ;AAAA,IACpE;AAAA,IACA,UAAU,CAAC,IAAU,aAAiD;AACpE,cAAQ,GAAG,KAAK,aAAa,EAAE,GAAG,QAAQ;AAC1C,aAAO,MAAM,QAAQ,eAAe,KAAK,aAAa,EAAE,GAAG,QAAQ;AAAA,IACrE;AAAA,EACF;AACF;;;ADpDO,IAAM,cAAN,MAAkB;AAAA,EACf,QAA2C,oBAAI,IAAI;AAAA,EAC3D,UAAU,IAAI,aAAa;AAAA,EAC3B,SAAS,qBAAqB,KAAK,OAAO;AAAA,EAE1C,cAAc;AACZ,SAAK,OAAO,eAAe,MAAM;AAC/B,UAAI,KAAK,iBAAiB,SAAS,MAAM,KAAK,MAAM,MAAM;AAExD,aAAK,OAAO,YAAY;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,SAAS,IAAU;AACzB,WAAO,KAAK,MAAM,IAAI,EAAE;AAAA,EAC1B;AAAA,EACQ,iBAAiB,QAAgB;AACvC,QAAI,QAAQ;AAEZ,SAAK,MAAM,QAAQ,CAAC,SAAS;AAC3B,UAAI,KAAK,WAAW,QAAQ;AAC1B;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAAoB;AACtB,UAAM,OAAa;AAAA,MACjB,GAAG;AAAA,IACL;AACA,UAAM,YAAY,EAAE,IAAI,WAAW,GAAG,MAAM,QAAQ,MAAgB;AAEpE,SAAK,MAAM,IAAI,UAAU,IAAI,SAAS;AACtC,SAAK,OAAO,SAAS,UAAU,IAAI,IAAI;AAEvC,WAAO,IAAI,QAAc,CAAC,YAAY;AACpC,YAAM,cAAc,KAAK,OAAO,SAAS,UAAU,IAAI,CAACE,UAAS;AAC/D,gBAAQA,KAAI;AACZ,oBAAY;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,IAAU,QAAgB;AAClC,UAAM,YAAY,KAAK,SAAS,EAAE;AAClC,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AAEA,cAAU,SAAS;AACnB,SAAK,MAAM,IAAI,IAAI,SAAS;AAC5B,SAAK,OAAO,iBAAiB,UAAU,IAAI;AAC3C,SAAK,OAAO,qBAAqB,IAAI,MAAM;AAAA,EAC7C;AAAA,EAEA,IAAI,IAAU;AACZ,UAAM,YAAY,KAAK,SAAS,EAAE;AAClC,WAAO,WAAW;AAAA,EACpB;AAAA,EAEA,OAAO,IAAU;AACf,UAAM,YAAY,KAAK,SAAS,EAAE;AAClC,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AAEA,SAAK,UAAU,IAAI,SAAS;AAC5B,SAAK,OAAO,WAAW,IAAI,UAAU,IAAI;AAAA,EAC3C;AACF;;;AE9DA,IAAM,YAEF;AAAA,EACF,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,MAAM;AAAA,EACN,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AACZ;AACO,IAAM,QAAQ,OAAO,KAAK,SAAS;AAEnC,IAAM,gBAAN,MAAoB;AAAA,EAClB;AAAA,EAES,cAA2B,IAAI,YAAY;AAAA,EAE1C;AAAA,EAEA;AAAA,EAED;AAAA,EAEhB,YAAY,QAAoB,SAA8B;AAC5D,SAAK,SAAS,QAAQ;AACtB,SAAK,SAAS;AAEd,SAAK,OAAO,aAAa;AAAA,MACvB;AAAA,MACA,aAAa,KAAK;AAAA,MAClB,MAAM,KAAK;AAAA,MACX,WAAW,CAAC,WAAW;AACrB,YAAI,OAAO,YAAY;AACrB,iBAAO,KAAK,mBAAmB,OAAO,UAAU,EAAE,OAAO,UAAU,OAAO,UAAU,OAAO,OAAO;AAAA,QACpG;AACA,eAAO,KAAK,UAAU,OAAO,UAAU,OAAO,UAAU,OAAO,OAAO;AAAA,MACxE;AAAA,IACF,CAAC;AAGD,SAAK,UAAU,CAAC,KAAK,MAAM,GAAI,OAAO,WAAW,CAAC,CAAE;AAAA,EACtD;AAAA,EAEA,YAAY,CAAC,UAAkB,UAAmB,YAA8C;AAC9F,WAAO,KAAK,UAAU,aAAa,CAAC,UAAU,UAAU,OAAO,CAAC;AAAA,EAClE;AAAA,EACA,qBAAqB,CAAC,eAAuB,CAAC,UAAkB,UAAmB,YAA8C;AAC/H,WAAO,KAAK,cAAc,YAAY,aAAa,CAAC,UAAU,UAAU,OAAO,CAAC;AAAA,EAClF;AAAA,EAEA,OAAO,OAAO,OAAe;AAC3B,WAAO,KAAK,UAAU,QAAQ,CAAC,EAAE,CAAC;AAAA,EACpC;AAAA,EAGA,cACE,YACA,UACA,YACA,SACgD;AAChD,QAAI,UAA0D,QAAQ,QAAQ,IAAI;AAClF,eAAW,UAAU,KAAK,iBAAiB,UAAU,UAAU,GAAG;AAChE,UAAI,WAAW,QAAQ,IAAI,MAAM;AAAG;AACpC,gBAAU,QAAQ,KAAK,CAAC,WAAW;AACjC,YAAI,UAAU;AAAM,iBAAO;AAC3B,eAAO,KAAK,IAAI,aAAa,UAAU,YAAY,MAAM;AAAA,MAC3D,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAGA,UACE,UACA,YACA,SACgD;AAChD,QAAI,UAA0D,QAAQ,QAAQ,IAAI;AAClF,eAAW,UAAU,KAAK,iBAAiB,QAAQ,GAAG;AACpD,UAAI,WAAW,QAAQ,IAAI,MAAM;AAAG;AACpC,gBAAU,QAAQ,KAAK,CAAC,WAAW;AACjC,YAAI,UAAU;AAAM,iBAAO;AAC3B,eAAO,KAAK,IAAI,aAAa,UAAU,YAAY,MAAM;AAAA,MAC3D,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAGA,MAAM,aAA4D,UAAa,YAAyD;AACtI,UAAM,mBAAsC,CAAC;AAE7C,eAAW,UAAU,KAAK,iBAAiB,QAAQ,GAAG;AACpD,UAAK,OAAO,WAAwC,YAAY;AAC9D,cAAM,QAAQ,IAAI,gBAAgB;AAClC,yBAAiB,SAAS;AAC1B,cAAM,KAAK,IAAI,gBAAgB,UAAU,YAAY,MAAM;AAAA,MAC7D,OAAO;AACL,cAAM,UAA2B,KAAK,IAAI,gBAAgB,UAAU,YAAY,MAAM;AAEtF,yBAAiB,KAAK,OAAO;AAAA,MAC/B;AAAA,IACF;AACA,WAAO,QAAQ,IAAI,gBAAgB;AAAA,EACrC;AAAA,EAGA,eACE,UACA,CAAC,cAAc,IAAI,GACnB,QACuB;AACvB,QAAI,UAAU,QAAQ,QAAQ,SAAS;AACvC,eAAW,UAAU,KAAK,iBAAiB,QAAQ,GAAG;AACpD,gBAAU,QAAQ;AAAA,QAAK,CAACC,eACtB,KAAK,IAAI,kBAAkB,UAAU,CAACA,YAAW,GAAG,IAAI,GAAqC,MAAM,EAAE;AAAA,UAAK,CAAC,WACzG,OAAO,KAAK,KAAK,KAAK,KAAKA,YAAW,QAAQ,MAAM;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAIA,QAAwC,UAAa,YAA6C;AAChG,QAAI,UAAyB,QAAQ,QAAQ;AAC7C,eAAW,UAAU,KAAK,iBAAiB,QAAQ,GAAG;AACpD,gBAAU,QAAQ,KAAK,MAAM,KAAK,IAAI,WAAW,UAAU,YAAY,MAAM,CAAC;AAAA,IAChF;AACA,WAAO,QAAQ,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEQ,iBAAiB,WAAkC,YAAmC;AAC5F,UAAM,gBAAgB,CAAC,GAAG,KAAK,OAAO;AAEtC,QAAI,YAAY;AACd,aAAO,cAAc,OAAO,CAAC,SAAS,KAAK,SAAS,UAAU;AAAA,IAChE;AAEA,WAAO;AAAA,EACT;AAAA,EASQ,IACN,UACA,UACA,YACA,QACkB;AAClB,UAAM,OAAO,OAAO;AAEpB,WAAO,QAAQ,QAAQ,EAAE,KAAK,MAAM;AAClC,UAAI,OAAO,SAAS,YAAY;AAC9B,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,OAAO,aAAa,UAAU,KAAK,QAAQ,SAAS;AAC3D,aAAK,OAAO,QAAQ,OAAO,IAAI,aAAa,wCAAwC,OAAO;AAAA;AAAA,MAC7F;AAEA,YAAM,aAAc,KAAa,MAAM,KAAK,KAAK,KAAK,UAAU;AAEhE,UAAI,CAAC,YAAY,MAAM;AAErB,YAAI,KAAK,OAAO,aAAa,UAAU,KAAK,QAAQ,SAAS;AAC3D,eAAK,OAAO,QAAQ,QAAQ,IAAI,aAAa,wCAAwC,OAAO;AAAA,CAAS;AAAA,QACvG;AACA,eAAO;AAAA,MACT;AAEA,aAAO,QAAQ,QAAQ,UAAU,EAAE,KAAK,CAAC,WAAW;AAElD,YAAI,KAAK,OAAO,aAAa,UAAU,KAAK,QAAQ,SAAS;AAC3D,eAAK,OAAO,QAAQ,QAAQ,IAAI,aAAa,wCAAwC,OAAO;AAAA,CAAS;AAAA,QACvG;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EASQ,QAAwC,UAAa,YAA4C,QAAoD;AAC3J,UAAM,OAAO,OAAO;AAIpB,QAAI;AAEF,aAAQ,KAAkB,MAAM,KAAK,KAAK,KAAK,UAAU;AAAA,IAC3D,SAAS,OAAP;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAGA,SAAS,WAAW;AAAC;;;ATnMrB,eAAe,iBAAsC,eAAuB,QAAyB,SAAqB;AACxH,MAAI,WAAW,MAAM;AACnB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,eAAe,oBAAoB,SAAuB,MAAqC;AAC7F,QAAM,EAAE,QAAQ,OAAO,IAAI;AAE3B,MAAI,OAAO,OAAO,OAAO;AACvB,UAAMF,KAAI,OAAO,OAAO,OAAO,IAAI;AAAA,EACrC;AAEA,QAAM,gBAAgB,IAAI,cAAc,QAAQ,EAAE,OAAO,CAAC;AAC1D,QAAM,EAAE,SAAS,YAAY,IAAI;AACjC,QAAM,QAAQA,KAAI,aAAaD,MAAK,QAAQ,OAAO,MAAM,OAAO,MAAM,IAAI,GAAG,OAAO;AAEpF,QAAM,cAAc,MAAM,cAAc,aAA2C,YAAY,CAAC,OAAO,CAAC;AACxG,QAAM,yBAAyB,YAAY,OAAO,OAAO;AAEzD,MAAI,uBAAuB,KAAK,CAAC,eAAe,OAAO,eAAe,SAAS,GAAG;AAChF,2BAAuB,QAAQ,CAAC,eAAe;AAC7C,UAAI,cAAc,OAAO,eAAe,aAAa,YAAY,SAAS;AACxE,gBAAQ,IAAI,WAAW,SAAS,MAAM;AAAA,MACxC;AAAA,IACF,CAAC;AAED;AAAA,EACF;AAEA,cAAY,OAAO,MAAM,OAAO,IAAI,SAAS;AAC3C,QAAI,WAAW,KAAK;AACpB,QAAI,EAAE,MAAAI,OAAM,QAAQ,KAAK,IAAI;AAE7B,QAAI,CAAC,YAAYA,OAAM;AACrB,iBAAWJ,MAAK,QAAQ,OAAO,MAAM,OAAO,OAAO,MAAMI,KAAI;AAAA,IAC/D;AAEA,UAAM,eAAe,MAAM,cAAc,UAAU,QAAQ,CAAC,QAAQ,CAAC;AACrE,QAAI,cAAc;AAChB,aAAO;AAAA,IACT;AAEA,QAAI,MAAM;AACR,YAAM,kBAAkB,MAAM,cAAc,eAAe,aAAa,CAAC,MAAM,QAAQ,GAAG,gBAAgB;AAE1G,YAAM,cAAc,aAAa,aAAa,CAAC,iBAAiB,QAAQ,CAAC;AACzE,kBAAY,UAAU,IAAI,SAAS;AACnC,kBAAY,OAAO,EAAE;AAAA,IACvB;AAAA,EACF,CAAC;AAED,QAAM,cAAc,aAAa,cAAc,CAAC,MAAM,CAAC;AAEvD,cAAY,IAAI;AAAA,IACd,UAAUJ,MAAK,QAAQ,OAAO,MAAM,OAAO,MAAM,IAAI;AAAA,IACrD,QAAQ;AAAA,EACV,CAAC;AAED,cAAY,OAAO,UAAU,YAAY;AACvC,UAAM,cAAc,aAAa,UAAU;AAC3C,eAAW,MAAM;AACf,WAAK;AAAA,IACP,GAAG,GAAI;AAAA,EACT,CAAC;AACH;AAEO,SAAS,MAAM,SAA6C;AACjE,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI;AACF,0BAAoB,SAAS,OAAO;AAAA,IACtC,SAAS,GAAP;AACA,aAAO,CAAC;AAAA,IACV;AAAA,EACF,CAAC;AACH;;;AUnGO,IAAM,eAAe,CAC1B,YAMG;;;ACLL,IAAO,cAAQ","sourcesContent":["import path from 'path'\n\nimport fse from 'fs-extra'\n\nimport { PluginManager } from './managers/pluginManager'\n\nimport type { PluginContext, TransformResult, ValidationResult, LogLevel, KubbPlugin } from './types'\n\ntype BuildOutput = void\n\n// Same type as ora\ntype Spinner = {\n start: (text?: string) => Spinner\n succeed: (text: string) => Spinner\n stopAndPersist: (options: { text: string }) => Spinner\n render: () => Spinner\n text: string\n info: (text: string) => Spinner\n}\n\nexport type Logger = {\n log: (message: string, logLevel: LogLevel) => void\n spinner?: Spinner\n}\ntype BuildOptions = {\n config: PluginContext['config']\n mode: 'development' | 'production'\n logger?: Logger\n}\n\nasync function transformReducer(this: PluginContext, _previousCode: string, result: TransformResult, _plugin: KubbPlugin) {\n if (result === null) {\n return null\n }\n return result\n}\n\nasync function buildImplementation(options: BuildOptions, done: (output: BuildOutput) => void) {\n const { config, logger } = options\n\n if (config.output.clean) {\n await fse.remove(config.output.path)\n }\n\n const pluginManager = new PluginManager(config, { logger })\n const { plugins, fileManager } = pluginManager\n const input = fse.readFileSync(path.resolve(config.root, config.input.path), 'utf-8')\n\n const validations = await pluginManager.hookParallel<'validate', ValidationResult>('validate', [plugins])\n const validationsWithMessage = validations.filter(Boolean)\n\n if (validationsWithMessage.some((validation) => typeof validation !== 'boolean')) {\n validationsWithMessage.forEach((validation) => {\n if (validation && typeof validation !== 'boolean' && validation?.message) {\n logger?.log(validation.message, 'warn')\n }\n })\n\n return\n }\n\n fileManager.events.onAdd(async (id, file) => {\n let fileName = file.fileName as string\n let { name, source: code } = file\n\n if (!fileName && name) {\n fileName = path.resolve(config.root, config.output.path, name)\n }\n\n const loadedResult = await pluginManager.hookFirst('load', [fileName])\n if (loadedResult) {\n code = loadedResult\n }\n\n if (code) {\n const transformedCode = await pluginManager.hookReduceArg0('transform', [code, fileName], transformReducer)\n\n await pluginManager.hookParallel('writeFile', [transformedCode, fileName])\n fileManager.setStatus(id, 'success')\n fileManager.remove(id)\n }\n })\n\n await pluginManager.hookParallel('buildStart', [config])\n\n fileManager.add({\n fileName: path.resolve(config.root, config.input.path),\n source: input,\n })\n\n fileManager.events.onSuccess(async () => {\n await pluginManager.hookParallel('buildEnd')\n setTimeout(() => {\n done()\n }, 1000)\n })\n}\n\nexport function build(options: BuildOptions): Promise<BuildOutput> {\n return new Promise((resolve, reject) => {\n try {\n buildImplementation(options, resolve)\n } catch (e) {\n reject(e)\n }\n })\n}\n","import path from 'path'\n\nimport { createPluginCache, getRelativePath, write } from './utils'\n\nimport { FileManager, File } from './managers/fileManager'\nimport type { PluginContext, KubbPlugin, PluginFactoryOptions } from './types'\n\ntype KubbPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (\n options: T['options']\n) => T['nested'] extends true ? Array<KubbPlugin<T>> : KubbPlugin<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: KubbPluginFactory<T>) {\n return (options: T['options']) => {\n const plugin = factory(options)\n if (Array.isArray(plugin)) {\n throw new Error('Not implemented')\n }\n\n // default transform\n if (!plugin.transform) {\n plugin.transform = function transform(code) {\n return code\n }\n }\n\n return plugin\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n resolveId: PluginContext['resolveId']\n load: PluginContext['load']\n}\n\n// not publicly exported\nexport type CorePluginOptions = PluginFactoryOptions<Options, false, PluginContext>\n\nexport const name = 'core' as const\n\nexport const definePlugin = createPlugin<CorePluginOptions>((options) => {\n const { fileManager, resolveId, load } = options\n const indexFiles: File[] = []\n\n const api: PluginContext = {\n get config() {\n return options.config\n },\n async emitFile(emittedFile) {\n const resolvedId = await resolveId({ importee: emittedFile.id, importer: emittedFile.importer, options: emittedFile.options })\n const fileName = resolvedId || emittedFile.importer || emittedFile.id\n\n return fileManager.add({\n fileName: fileName,\n name: emittedFile.name,\n source: emittedFile.source,\n })\n },\n addToRoot: (file: File) => {\n indexFiles.push(file)\n },\n resolveId,\n load,\n cache: createPluginCache(Object.create(null)),\n }\n\n return {\n name,\n api,\n async buildEnd() {\n if (!indexFiles.length) {\n return\n }\n\n let index = ``\n\n indexFiles.forEach((item) => {\n index += `export * from \"${getRelativePath(path.resolve(this.config.root, this.config.output.path), item.fileName)}\";\\n`\n })\n\n await write(index, path.resolve(this.config.root, this.config.output.path, 'index.ts'), { format: true })\n },\n resolveId(importee, importer) {\n if (!importer) {\n return null\n }\n return path.resolve(importer, importee)\n },\n }\n})\n","import type { MaybePromise } from '../types'\n\nexport const isPromise = <T>(result: MaybePromise<T>): result is Promise<T> => {\n return typeof (result as any)?.then === 'function'\n}\n","/* eslint-disable consistent-return */\nimport fse from 'fs-extra'\n\nimport { format } from './format'\n\ntype WriteOptions = {\n format: boolean\n}\n\nexport const write = async (data: string, path: string, options: WriteOptions = { format: false }) => {\n const formattedData = options.format ? format(data) : data\n\n try {\n await fse.stat(path)\n const oldContent = await fse.readFile(path, { encoding: 'utf-8' })\n if (oldContent?.toString() === formattedData) {\n return\n }\n } catch (_err) {\n return fse.outputFile(path, formattedData)\n }\n\n return fse.outputFile(path, formattedData)\n}\n","import { format as prettierFormat } from 'prettier'\n\nimport type { Options } from 'prettier'\n\nconst formatOptions: Options = {\n tabWidth: 2,\n printWidth: 160,\n parser: 'typescript',\n singleQuote: true,\n semi: false,\n bracketSameLine: false,\n endOfLine: 'auto',\n}\nexport const format = (text: string) => {\n return prettierFormat(text, formatOptions)\n}\n","/* eslint-disable no-param-reassign */\n/* eslint-disable consistent-return */\n\nexport interface Cache<TCache = any> {\n delete(id: string): boolean\n get<T = TCache>(id: string): T\n has(id: string): boolean\n set<T = TCache>(id: string, value: T): void\n}\n\nexport function createPluginCache(cache: any): Cache {\n return {\n delete(id: string) {\n return delete cache[id]\n },\n get(id: string) {\n const item = cache[id]\n if (!item) return\n item[0] = 0\n return item[1]\n },\n has(id: string) {\n const item = cache[id]\n if (!item) return false\n item[0] = 0\n return true\n },\n set(id: string, value: any) {\n cache[id] = [0, value]\n },\n }\n}\n","import path from 'path'\n\n// TODO check for a better way or resolving the relative path\nexport const getRelativePath = (from?: string | null, to?: string | null) => {\n if (!from || !to) {\n throw new Error('From and to should be filled in when retrieving the relativePath')\n }\n const newPath = path.relative(from, to).replace('../', '').replace('.ts', '').trimEnd()\n\n return `./${newPath}`\n}\n","import EventEmitter from 'events'\nimport { randomUUID } from 'crypto'\nimport type { CacheStore, UUID, Status, File, UserFile } from './types'\nimport { getFileManagerEvents } from './events'\n\nexport class FileManager {\n private cache: Map<CacheStore['id'], CacheStore> = new Map()\n emitter = new EventEmitter()\n events = getFileManagerEvents(this.emitter)\n\n constructor() {\n this.events.onStatusChange(() => {\n if (this.getCountOfStatus('removed') === this.cache.size) {\n // all files are been resolved and written to the file system\n this.events.emitSuccess()\n }\n })\n }\n\n private getCache(id: UUID) {\n return this.cache.get(id)\n }\n private getCountOfStatus(status: Status) {\n let count = 0\n\n this.cache.forEach((item) => {\n if (item.status === status) {\n count++\n }\n })\n return count\n }\n\n add(userFile: UserFile) {\n const file: File = {\n ...userFile,\n } as File\n const cacheItem = { id: randomUUID(), file, status: 'new' as Status }\n\n this.cache.set(cacheItem.id, cacheItem)\n this.events.emitFile(cacheItem.id, file)\n\n return new Promise<File>((resolve) => {\n const unsubscribe = this.events.onRemove(cacheItem.id, (file) => {\n resolve(file)\n unsubscribe()\n })\n })\n }\n\n setStatus(id: UUID, status: Status) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n cacheItem.status = status\n this.cache.set(id, cacheItem)\n this.events.emitStatusChange(cacheItem.file)\n this.events.emitStatusChangeById(id, status)\n }\n\n get(id: UUID) {\n const cacheItem = this.getCache(id)\n return cacheItem?.file\n }\n\n remove(id: UUID) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n this.setStatus(id, 'removed')\n this.events.emitRemove(id, cacheItem.file)\n }\n}\n","import EventEmitter from 'events'\n\nimport type { File, Status, UUID } from './types'\n\nconst keys = {\n getEmitFileKey: () => `emit-file`,\n getStatusChangeKey: () => `status-change`,\n getStatusChangeByIdKey: (id: string) => `${id}-status-change`,\n getSuccessKey: () => `success`,\n getRemoveKey: (id: string) => `${id}remove`,\n} as const\n\nexport const getFileManagerEvents = (emitter: EventEmitter) => {\n return {\n /**\n * Emiter\n */\n emitFile: (id: UUID, file: File): void => {\n emitter.emit(keys.getEmitFileKey(), id, file)\n },\n emitStatusChange: (file: File): void => {\n emitter.emit(keys.getStatusChangeKey(), file)\n },\n emitStatusChangeById: (id: UUID, status: Status): void => {\n emitter.emit(keys.getStatusChangeByIdKey(id), status)\n },\n emitSuccess: (): void => {\n emitter.emit(keys.getSuccessKey())\n },\n emitRemove: (id: UUID, file: File): void => {\n emitter.emit(keys.getRemoveKey(id), file)\n },\n /**\n * Listeners\n */\n\n onAdd: (callback: (id: UUID, file: File) => void): VoidFunction => {\n emitter.on(keys.getEmitFileKey(), callback)\n return () => emitter.removeListener(keys.getEmitFileKey(), callback)\n },\n onStatusChange: (callback: (file: File) => void): VoidFunction => {\n emitter.on(keys.getStatusChangeKey(), callback)\n return () => emitter.removeListener(keys.getStatusChangeKey(), callback)\n },\n onStatusChangeById: (id: UUID, callback: (status: Status) => void): VoidFunction => {\n emitter.on(keys.getStatusChangeByIdKey(id), callback)\n return () => emitter.removeListener(keys.getStatusChangeByIdKey(id), callback)\n },\n onSuccess: (callback: () => void): VoidFunction => {\n emitter.on(keys.getSuccessKey(), callback)\n return () => emitter.removeListener(keys.getSuccessKey(), callback)\n },\n onRemove: (id: UUID, callback: (file: File) => void): VoidFunction => {\n emitter.on(keys.getRemoveKey(id), callback)\n return () => emitter.removeListener(keys.getRemoveKey(id), callback)\n },\n }\n}\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport { definePlugin } from '../../plugin'\nimport { FileManager } from '../fileManager'\nimport { Argument0, Strategy } from './types'\n\nimport type { KubbConfig, KubbPlugin, PluginLifecycleHooks, PluginLifecycle, MaybePromise } from '../../types'\nimport type { Logger } from '../../build'\nimport type { CorePluginOptions } from '../../plugin'\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n\n// This will make sure no input hook is omitted\nconst hookNames: {\n [P in PluginLifecycleHooks]: 1\n} = {\n validate: 1,\n buildStart: 1,\n resolveId: 1,\n load: 1,\n transform: 1,\n writeFile: 1,\n buildEnd: 1,\n}\nexport const hooks = Object.keys(hookNames) as [PluginLifecycleHooks]\n\nexport class PluginManager {\n public plugins: KubbPlugin[]\n\n public readonly fileManager: FileManager = new FileManager()\n\n private readonly logger?: Logger\n\n private readonly config: KubbConfig\n\n public readonly core: KubbPlugin<CorePluginOptions> & { api: CorePluginOptions['api'] }\n\n constructor(config: KubbConfig, options: { logger?: Logger }) {\n this.logger = options.logger\n this.config = config\n\n this.core = definePlugin({\n config,\n fileManager: this.fileManager,\n load: this.load,\n resolveId: (params) => {\n if (params.pluginName) {\n return this.resolveIdForPlugin(params.pluginName)(params.importee, params.importer, params.options)\n }\n return this.resolveId(params.importee, params.importer, params.options)\n },\n }) as KubbPlugin<CorePluginOptions> & {\n api: CorePluginOptions['api']\n }\n this.plugins = [this.core, ...(config.plugins || [])]\n }\n\n resolveId = (importee: string, importer?: string, options?: Record<string, any> | undefined) => {\n return this.hookFirst('resolveId', [importee, importer, options])\n }\n resolveIdForPlugin = (pluginName: string) => (importee: string, importer?: string, options?: Record<string, any> | undefined) => {\n return this.hookForPlugin(pluginName, 'resolveId', [importee, importer, options])\n }\n\n load = async (id: string) => {\n return this.hookFirst('load', [id])\n }\n\n // run only hook for a specific plugin name\n hookForPlugin<H extends PluginLifecycleHooks>(\n pluginName: string,\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n skipped?: ReadonlySet<KubbPlugin> | null\n ): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName, pluginName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run('hookFirst', hookName, parameters, plugin) as any\n })\n }\n return promise\n }\n\n // chains, first non-null result stops and returns\n hookFirst<H extends PluginLifecycleHooks>(\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n skipped?: ReadonlySet<KubbPlugin> | null\n ): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run('hookFirst', hookName, parameters, plugin) as any\n })\n }\n return promise\n }\n\n // parallel\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>(hookName: H, parameters?: Parameters<PluginLifecycle[H]> | undefined) {\n const parallelPromises: Promise<TOuput>[] = []\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if ((plugin[hookName] as { sequential?: boolean })?.sequential) {\n await Promise.all(parallelPromises)\n parallelPromises.length = 0\n await this.run('hookParallel', hookName, parameters, plugin)\n } else {\n const promise: Promise<TOuput> = this.run('hookParallel', hookName, parameters, plugin)\n\n parallelPromises.push(promise)\n }\n }\n return Promise.all(parallelPromises)\n }\n\n // chains, reduces returned value, handling the reduced value as the first hook argument\n hookReduceArg0<H extends PluginLifecycleHooks>(\n hookName: H,\n [argument0, ...rest]: Parameters<PluginLifecycle[H]>,\n reduce: (reduction: Argument0<H>, result: ReturnType<PluginLifecycle[H]>, plugin: KubbPlugin) => MaybePromise<Argument0<H> | null>\n ): Promise<Argument0<H>> {\n let promise = Promise.resolve(argument0)\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then((argument0) =>\n this.run('hookReduceArg0', hookName, [argument0, ...rest] as Parameters<PluginLifecycle[H]>, plugin).then((result) =>\n reduce.call(this.core.api, argument0, result, plugin)\n )\n )\n }\n return promise\n }\n\n // chains\n\n hookSeq<H extends PluginLifecycleHooks>(hookName: H, parameters?: Parameters<PluginLifecycle[H]>) {\n let promise: Promise<void> = Promise.resolve()\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then(() => this.run('hookSeq', hookName, parameters, plugin))\n }\n return promise.then(noReturn)\n }\n\n private getSortedPlugins(_hookName: keyof PluginLifecycle, pluginName?: string): KubbPlugin[] {\n const sortedPlugins = [...this.plugins]\n\n if (pluginName) {\n return sortedPlugins.filter((item) => item.name === pluginName)\n }\n\n return sortedPlugins\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n private run<H extends PluginLifecycleHooks, TResult = void>(\n strategy: Strategy,\n hookName: H,\n parameters: unknown[] | undefined,\n plugin: KubbPlugin\n ): Promise<TResult> {\n const hook = plugin[hookName]!\n\n return Promise.resolve().then(() => {\n if (typeof hook !== 'function') {\n return hook\n }\n\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.text = `[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`\n }\n\n const hookResult = (hook as any).apply(this.core.api, parameters)\n\n if (!hookResult?.then) {\n // short circuit for non-thenables and non-Promises\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return hookResult\n }\n\n return Promise.resolve(hookResult).then((result) => {\n // action was fulfilled\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return result\n })\n })\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n private runSync<H extends PluginLifecycleHooks>(hookName: H, parameters: Parameters<PluginLifecycle[H]>, plugin: KubbPlugin): ReturnType<PluginLifecycle[H]> {\n const hook = plugin[hookName]!\n\n // const context = this.pluginContexts.get(plugin)!;\n\n try {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return (hook as Function).apply(this.core.api, parameters)\n } catch (error: any) {\n return error\n }\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noReturn() {}\n","import type { MaybePromise, KubbUserConfig, CLIOptions } from './types'\n\n/**\n * Type helper to make it easier to use kubb.config.ts\n * accepts a direct {@link KubbConfig} object, or a function that returns it.\n * The function receives a {@link ConfigEnv} object that exposes two properties:\n */\nexport const defineConfig = (\n options:\n | MaybePromise<KubbUserConfig>\n | ((\n /** The options derived from CLI flags */\n cliOptions: CLIOptions\n ) => MaybePromise<KubbUserConfig>)\n) => options\n","/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { build } from './build'\n\nexport * from './config'\nexport * from './build'\nexport { CorePluginOptions, createPlugin } from './plugin'\nexport * from './utils'\nexport * from './types'\nexport * from './managers'\nexport default build\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -133,7 +133,7 @@ var definePlugin = createPlugin((options) => {
|
|
|
133
133
|
};
|
|
134
134
|
});
|
|
135
135
|
|
|
136
|
-
// src/managers/
|
|
136
|
+
// src/managers/fileManager/events.ts
|
|
137
137
|
var keys = {
|
|
138
138
|
getEmitFileKey: () => `emit-file`,
|
|
139
139
|
getStatusChangeKey: () => `status-change`,
|
|
@@ -181,7 +181,7 @@ var getFileManagerEvents = (emitter) => {
|
|
|
181
181
|
};
|
|
182
182
|
};
|
|
183
183
|
|
|
184
|
-
// src/managers/FileManager.ts
|
|
184
|
+
// src/managers/fileManager/FileManager.ts
|
|
185
185
|
var FileManager = class {
|
|
186
186
|
cache = /* @__PURE__ */ new Map();
|
|
187
187
|
emitter = new EventEmitter();
|
|
@@ -243,7 +243,7 @@ var FileManager = class {
|
|
|
243
243
|
}
|
|
244
244
|
};
|
|
245
245
|
|
|
246
|
-
// src/
|
|
246
|
+
// src/managers/pluginManager/PluginManager.ts
|
|
247
247
|
var hookNames = {
|
|
248
248
|
validate: 1,
|
|
249
249
|
buildStart: 1,
|
|
@@ -254,7 +254,7 @@ var hookNames = {
|
|
|
254
254
|
buildEnd: 1
|
|
255
255
|
};
|
|
256
256
|
var hooks = Object.keys(hookNames);
|
|
257
|
-
var
|
|
257
|
+
var PluginManager = class {
|
|
258
258
|
plugins;
|
|
259
259
|
fileManager = new FileManager();
|
|
260
260
|
logger;
|
|
@@ -401,9 +401,10 @@ async function buildImplementation(options, done) {
|
|
|
401
401
|
if (config.output.clean) {
|
|
402
402
|
await fse.remove(config.output.path);
|
|
403
403
|
}
|
|
404
|
-
const
|
|
404
|
+
const pluginManager = new PluginManager(config, { logger });
|
|
405
|
+
const { plugins, fileManager } = pluginManager;
|
|
405
406
|
const input = fse.readFileSync(path2.resolve(config.root, config.input.path), "utf-8");
|
|
406
|
-
const validations = await
|
|
407
|
+
const validations = await pluginManager.hookParallel("validate", [plugins]);
|
|
407
408
|
const validationsWithMessage = validations.filter(Boolean);
|
|
408
409
|
if (validationsWithMessage.some((validation) => typeof validation !== "boolean")) {
|
|
409
410
|
validationsWithMessage.forEach((validation) => {
|
|
@@ -413,30 +414,30 @@ async function buildImplementation(options, done) {
|
|
|
413
414
|
});
|
|
414
415
|
return;
|
|
415
416
|
}
|
|
416
|
-
|
|
417
|
+
fileManager.events.onAdd(async (id, file) => {
|
|
417
418
|
let fileName = file.fileName;
|
|
418
419
|
let { name: name2, source: code } = file;
|
|
419
420
|
if (!fileName && name2) {
|
|
420
421
|
fileName = path2.resolve(config.root, config.output.path, name2);
|
|
421
422
|
}
|
|
422
|
-
const loadedResult = await
|
|
423
|
+
const loadedResult = await pluginManager.hookFirst("load", [fileName]);
|
|
423
424
|
if (loadedResult) {
|
|
424
425
|
code = loadedResult;
|
|
425
426
|
}
|
|
426
427
|
if (code) {
|
|
427
|
-
const transformedCode = await
|
|
428
|
-
await
|
|
429
|
-
|
|
430
|
-
|
|
428
|
+
const transformedCode = await pluginManager.hookReduceArg0("transform", [code, fileName], transformReducer);
|
|
429
|
+
await pluginManager.hookParallel("writeFile", [transformedCode, fileName]);
|
|
430
|
+
fileManager.setStatus(id, "success");
|
|
431
|
+
fileManager.remove(id);
|
|
431
432
|
}
|
|
432
433
|
});
|
|
433
|
-
await
|
|
434
|
-
|
|
434
|
+
await pluginManager.hookParallel("buildStart", [config]);
|
|
435
|
+
fileManager.add({
|
|
435
436
|
fileName: path2.resolve(config.root, config.input.path),
|
|
436
437
|
source: input
|
|
437
438
|
});
|
|
438
|
-
|
|
439
|
-
await
|
|
439
|
+
fileManager.events.onSuccess(async () => {
|
|
440
|
+
await pluginManager.hookParallel("buildEnd");
|
|
440
441
|
setTimeout(() => {
|
|
441
442
|
done();
|
|
442
443
|
}, 1e3);
|
|
@@ -458,6 +459,6 @@ var defineConfig = (options) => options;
|
|
|
458
459
|
// src/index.ts
|
|
459
460
|
var src_default = build;
|
|
460
461
|
|
|
461
|
-
export { FileManager,
|
|
462
|
+
export { FileManager, PluginManager, build, createPlugin, createPluginCache, src_default as default, defineConfig, format, getRelativePath, hooks, isPromise, write };
|
|
462
463
|
//# sourceMappingURL=out.js.map
|
|
463
464
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/build.ts","../src/plugin.ts","../src/utils/isPromise.ts","../src/utils/write.ts","../src/utils/format.ts","../src/utils/cache.ts","../src/utils/read.ts","../src/managers/FileManager.ts","../src/managers/utils/getFileManagerEvents.ts","../src/utils/PluginDriver.ts","../src/config.ts","../src/index.ts"],"names":["path","fse","file","argument0","name"],"mappings":"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","sourcesContent":["import path from 'path'\n\nimport fse from 'fs-extra'\n\nimport { PluginDriver } from './utils/PluginDriver'\n\nimport type { PluginContext, TransformResult, ValidationResult, LogLevel, KubbPlugin } from './types'\n\ntype BuildOutput = void\n\n// Same type as ora\ntype Spinner = {\n start: (text?: string) => Spinner\n succeed: (text: string) => Spinner\n stopAndPersist: (options: { text: string }) => Spinner\n render: () => Spinner\n text: string\n info: (text: string) => Spinner\n}\n\nexport type Logger = {\n log: (message: string, logLevel: LogLevel) => void\n spinner?: Spinner\n}\ntype BuildOptions = {\n config: PluginContext['config']\n mode: 'development' | 'production'\n logger?: Logger\n}\n\nasync function transformReducer(this: PluginContext, _previousCode: string, result: TransformResult, _plugin: KubbPlugin) {\n if (result === null) {\n return null\n }\n return result\n}\n\nasync function buildImplementation(options: BuildOptions, done: (output: BuildOutput) => void) {\n const { config, logger } = options\n\n if (config.output.clean) {\n await fse.remove(config.output.path)\n }\n\n const pluginDriver = new PluginDriver(config, { logger })\n const input = fse.readFileSync(path.resolve(config.root, config.input.path), 'utf-8')\n\n const validations = await pluginDriver.hookParallel<'validate', ValidationResult>('validate', [pluginDriver.plugins])\n const validationsWithMessage = validations.filter(Boolean)\n\n if (validationsWithMessage.some((validation) => typeof validation !== 'boolean')) {\n validationsWithMessage.forEach((validation) => {\n if (validation && typeof validation !== 'boolean' && validation?.message) {\n logger?.log(validation.message, 'warn')\n }\n })\n\n return\n }\n\n pluginDriver.fileManager.events.onAdd(async (id, file) => {\n let fileName = file.fileName as string\n let { name, source: code } = file\n\n if (!fileName && name) {\n fileName = path.resolve(config.root, config.output.path, name)\n }\n\n const loadedResult = await pluginDriver.hookFirst('load', [fileName])\n if (loadedResult) {\n code = loadedResult\n }\n\n if (code) {\n const transformedCode = await pluginDriver.hookReduceArg0('transform', [code, fileName], transformReducer)\n\n await pluginDriver.hookParallel('writeFile', [transformedCode, fileName])\n pluginDriver.fileManager.setStatus(id, 'success')\n pluginDriver.fileManager.remove(id)\n }\n })\n\n await pluginDriver.hookParallel('buildStart', [config])\n\n pluginDriver.fileManager.add({\n fileName: path.resolve(config.root, config.input.path),\n source: input,\n })\n\n pluginDriver.fileManager.events.onSuccess(async () => {\n await pluginDriver.hookParallel('buildEnd')\n setTimeout(() => {\n done()\n }, 1000)\n })\n}\n\nexport function build(options: BuildOptions): Promise<BuildOutput> {\n return new Promise((resolve, reject) => {\n try {\n buildImplementation(options, resolve)\n } catch (e) {\n reject(e)\n }\n })\n}\n","import path from 'path'\n\nimport { createPluginCache, getRelativePath, write } from './utils'\n\nimport { FileManager, File } from './managers'\nimport type { PluginContext, KubbPlugin, PluginFactoryOptions } from './types'\n\ntype KubbPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (\n options: T['options']\n) => T['nested'] extends true ? Array<KubbPlugin<T>> : KubbPlugin<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: KubbPluginFactory<T>) {\n return (options: T['options']) => {\n const plugin = factory(options)\n if (Array.isArray(plugin)) {\n throw new Error('Not implemented')\n }\n\n // default transform\n if (!plugin.transform) {\n plugin.transform = function transform(code) {\n return code\n }\n }\n\n return plugin\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n resolveId: PluginContext['resolveId']\n load: PluginContext['load']\n}\n\n// not publicly exported\nexport type CorePluginOptions = PluginFactoryOptions<Options, false, PluginContext>\n\nexport const name = 'core' as const\n\nexport const definePlugin = createPlugin<CorePluginOptions>((options) => {\n const { fileManager, resolveId, load } = options\n const indexFiles: File[] = []\n\n const api: PluginContext = {\n get config() {\n return options.config\n },\n async emitFile(emittedFile) {\n const resolvedId = await resolveId({ importee: emittedFile.id, importer: emittedFile.importer, options: emittedFile.options })\n const fileName = resolvedId || emittedFile.importer || emittedFile.id\n\n return fileManager.add({\n fileName: fileName,\n name: emittedFile.name,\n source: emittedFile.source,\n })\n },\n addToRoot: (file: File) => {\n indexFiles.push(file)\n },\n resolveId,\n load,\n cache: createPluginCache(Object.create(null)),\n }\n\n return {\n name,\n api,\n async buildEnd() {\n if (!indexFiles.length) {\n return\n }\n\n let index = ``\n\n indexFiles.forEach((item) => {\n index += `export * from \"${getRelativePath(path.resolve(this.config.root, this.config.output.path), item.fileName)}\";\\n`\n })\n\n await write(index, path.resolve(this.config.root, this.config.output.path, 'index.ts'), { format: true })\n },\n resolveId(importee, importer) {\n if (!importer) {\n return null\n }\n return path.resolve(importer, importee)\n },\n }\n})\n","import type { MaybePromise } from '../types'\n\nexport const isPromise = <T>(result: MaybePromise<T>): result is Promise<T> => {\n return typeof (result as any)?.then === 'function'\n}\n","/* eslint-disable consistent-return */\nimport fse from 'fs-extra'\n\nimport { format } from './format'\n\ntype WriteOptions = {\n format: boolean\n}\n\nexport const write = async (data: string, path: string, options: WriteOptions = { format: false }) => {\n const formattedData = options.format ? format(data) : data\n\n try {\n await fse.stat(path)\n const oldContent = await fse.readFile(path, { encoding: 'utf-8' })\n if (oldContent?.toString() === formattedData) {\n return\n }\n } catch (_err) {\n return fse.outputFile(path, formattedData)\n }\n\n return fse.outputFile(path, formattedData)\n}\n","import { format as prettierFormat } from 'prettier'\n\nimport type { Options } from 'prettier'\n\nconst formatOptions: Options = {\n tabWidth: 2,\n printWidth: 160,\n parser: 'typescript',\n singleQuote: true,\n semi: false,\n bracketSameLine: false,\n endOfLine: 'auto',\n}\nexport const format = (text: string) => {\n return prettierFormat(text, formatOptions)\n}\n","/* eslint-disable no-param-reassign */\n/* eslint-disable consistent-return */\n\nexport interface Cache<TCache = any> {\n delete(id: string): boolean\n get<T = TCache>(id: string): T\n has(id: string): boolean\n set<T = TCache>(id: string, value: T): void\n}\n\nexport function createPluginCache(cache: any): Cache {\n return {\n delete(id: string) {\n return delete cache[id]\n },\n get(id: string) {\n const item = cache[id]\n if (!item) return\n item[0] = 0\n return item[1]\n },\n has(id: string) {\n const item = cache[id]\n if (!item) return false\n item[0] = 0\n return true\n },\n set(id: string, value: any) {\n cache[id] = [0, value]\n },\n }\n}\n","import path from 'path'\n\n// TODO check for a better way or resolving the relative path\nexport const getRelativePath = (from?: string | null, to?: string | null) => {\n if (!from || !to) {\n throw new Error('From and to should be filled in when retrieving the relativePath')\n }\n const newPath = path.relative(from, to).replace('../', '').replace('.ts', '').trimEnd()\n\n return `./${newPath}`\n}\n","import EventEmitter from 'events'\nimport { randomUUID } from 'crypto'\nimport type { CacheStore, UUID, Status, File, UserFile } from './types'\nimport { getFileManagerEvents } from './utils/getFileManagerEvents'\n\nexport class FileManager {\n private cache: Map<CacheStore['id'], CacheStore> = new Map()\n emitter = new EventEmitter()\n events = getFileManagerEvents(this.emitter)\n\n constructor() {\n this.events.onStatusChange(() => {\n if (this.getCountOfStatus('removed') === this.cache.size) {\n // all files are been resolved and written to the file system\n this.events.emitSuccess()\n }\n })\n }\n\n private getCache(id: UUID) {\n return this.cache.get(id)\n }\n private getCountOfStatus(status: Status) {\n let count = 0\n\n this.cache.forEach((item) => {\n if (item.status === status) {\n count++\n }\n })\n return count\n }\n\n add(userFile: UserFile) {\n const file: File = {\n ...userFile,\n } as File\n const cacheItem = { id: randomUUID(), file, status: 'new' as Status }\n\n this.cache.set(cacheItem.id, cacheItem)\n this.events.emitFile(cacheItem.id, file)\n\n return new Promise<File>((resolve) => {\n const unsubscribe = this.events.onRemove(cacheItem.id, (file) => {\n resolve(file)\n unsubscribe()\n })\n })\n }\n\n setStatus(id: UUID, status: Status) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n cacheItem.status = status\n this.cache.set(id, cacheItem)\n this.events.emitStatusChange(cacheItem.file)\n this.events.emitStatusChangeById(id, status)\n }\n\n get(id: UUID) {\n const cacheItem = this.getCache(id)\n return cacheItem?.file\n }\n\n remove(id: UUID) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n this.setStatus(id, 'removed')\n this.events.emitRemove(id, cacheItem.file)\n }\n}\n","import EventEmitter from 'events'\n\nimport type { File, Status, UUID } from '../types'\n\nconst keys = {\n getEmitFileKey: () => `emit-file`,\n getStatusChangeKey: () => `status-change`,\n getStatusChangeByIdKey: (id: string) => `${id}-status-change`,\n getSuccessKey: () => `success`,\n getRemoveKey: (id: string) => `${id}remove`,\n} as const\n\nexport const getFileManagerEvents = (emitter: EventEmitter) => {\n return {\n /**\n * Emiter\n */\n emitFile: (id: UUID, file: File): void => {\n emitter.emit(keys.getEmitFileKey(), id, file)\n },\n emitStatusChange: (file: File): void => {\n emitter.emit(keys.getStatusChangeKey(), file)\n },\n emitStatusChangeById: (id: UUID, status: Status): void => {\n emitter.emit(keys.getStatusChangeByIdKey(id), status)\n },\n emitSuccess: (): void => {\n emitter.emit(keys.getSuccessKey())\n },\n emitRemove: (id: UUID, file: File): void => {\n emitter.emit(keys.getRemoveKey(id), file)\n },\n /**\n * Listeners\n */\n\n onAdd: (callback: (id: UUID, file: File) => void): VoidFunction => {\n emitter.on(keys.getEmitFileKey(), callback)\n return () => emitter.removeListener(keys.getEmitFileKey(), callback)\n },\n onStatusChange: (callback: (file: File) => void): VoidFunction => {\n emitter.on(keys.getStatusChangeKey(), callback)\n return () => emitter.removeListener(keys.getStatusChangeKey(), callback)\n },\n onStatusChangeById: (id: UUID, callback: (status: Status) => void): VoidFunction => {\n emitter.on(keys.getStatusChangeByIdKey(id), callback)\n return () => emitter.removeListener(keys.getStatusChangeByIdKey(id), callback)\n },\n onSuccess: (callback: () => void): VoidFunction => {\n emitter.on(keys.getSuccessKey(), callback)\n return () => emitter.removeListener(keys.getSuccessKey(), callback)\n },\n onRemove: (id: UUID, callback: (file: File) => void): VoidFunction => {\n emitter.on(keys.getRemoveKey(id), callback)\n return () => emitter.removeListener(keys.getRemoveKey(id), callback)\n },\n }\n}\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport { definePlugin } from '../plugin'\n\nimport type { KubbConfig, KubbPlugin, PluginLifecycleHooks, PluginLifecycle, MaybePromise } from '../types'\nimport type { Logger } from '../build'\nimport type { CorePluginOptions } from '../plugin'\nimport { FileManager } from '../managers'\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n/**\n * Get the type of the first argument in a function.\n * @example Arg0<(a: string, b: number) => void> -> string\n */\nexport type Argument0<H extends keyof PluginLifecycle> = Parameters<PluginLifecycle[H]>[0]\n\ntype Strategy = 'hookFirst' | 'hookParallel' | 'hookReduceArg0' | 'hookSeq'\n\n// This will make sure no input hook is omitted\nconst hookNames: {\n [P in PluginLifecycleHooks]: 1\n} = {\n validate: 1,\n buildStart: 1,\n resolveId: 1,\n load: 1,\n transform: 1,\n writeFile: 1,\n buildEnd: 1,\n}\nexport const hooks = Object.keys(hookNames) as [PluginLifecycleHooks]\n\nexport class PluginDriver {\n public plugins: KubbPlugin[]\n\n public readonly fileManager: FileManager = new FileManager()\n\n private readonly logger?: Logger\n\n private readonly config: KubbConfig\n\n public readonly core: KubbPlugin<CorePluginOptions> & { api: CorePluginOptions['api'] }\n\n constructor(config: KubbConfig, options: { logger?: Logger }) {\n this.logger = options.logger\n this.config = config\n\n this.core = definePlugin({\n config,\n fileManager: this.fileManager,\n load: this.load,\n resolveId: (params) => {\n if (params.pluginName) {\n return this.resolveIdForPlugin(params.pluginName)(params.importee, params.importer, params.options)\n }\n return this.resolveId(params.importee, params.importer, params.options)\n },\n }) as KubbPlugin<CorePluginOptions> & {\n api: CorePluginOptions['api']\n }\n this.plugins = [this.core, ...(config.plugins || [])]\n }\n\n resolveId = (importee: string, importer?: string, options?: Record<string, any> | undefined) => {\n return this.hookFirst('resolveId', [importee, importer, options])\n }\n resolveIdForPlugin = (pluginName: string) => (importee: string, importer?: string, options?: Record<string, any> | undefined) => {\n return this.hookForPlugin(pluginName, 'resolveId', [importee, importer, options])\n }\n\n load = async (id: string) => {\n return this.hookFirst('load', [id])\n }\n\n // run only hook for a specific plugin name\n hookForPlugin<H extends PluginLifecycleHooks>(\n pluginName: string,\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n skipped?: ReadonlySet<KubbPlugin> | null\n ): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName, pluginName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run('hookFirst', hookName, parameters, plugin) as any\n })\n }\n return promise\n }\n\n // chains, first non-null result stops and returns\n hookFirst<H extends PluginLifecycleHooks>(\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n skipped?: ReadonlySet<KubbPlugin> | null\n ): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run('hookFirst', hookName, parameters, plugin) as any\n })\n }\n return promise\n }\n\n // parallel\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>(hookName: H, parameters?: Parameters<PluginLifecycle[H]> | undefined) {\n const parallelPromises: Promise<TOuput>[] = []\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if ((plugin[hookName] as { sequential?: boolean })?.sequential) {\n await Promise.all(parallelPromises)\n parallelPromises.length = 0\n await this.run('hookParallel', hookName, parameters, plugin)\n } else {\n const promise: Promise<TOuput> = this.run('hookParallel', hookName, parameters, plugin)\n\n parallelPromises.push(promise)\n }\n }\n return Promise.all(parallelPromises)\n }\n\n // chains, reduces returned value, handling the reduced value as the first hook argument\n hookReduceArg0<H extends PluginLifecycleHooks>(\n hookName: H,\n [argument0, ...rest]: Parameters<PluginLifecycle[H]>,\n reduce: (reduction: Argument0<H>, result: ReturnType<PluginLifecycle[H]>, plugin: KubbPlugin) => MaybePromise<Argument0<H> | null>\n ): Promise<Argument0<H>> {\n let promise = Promise.resolve(argument0)\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then((argument0) =>\n this.run('hookReduceArg0', hookName, [argument0, ...rest] as Parameters<PluginLifecycle[H]>, plugin).then((result) =>\n reduce.call(this.core.api, argument0, result, plugin)\n )\n )\n }\n return promise\n }\n\n // chains\n\n hookSeq<H extends PluginLifecycleHooks>(hookName: H, parameters?: Parameters<PluginLifecycle[H]>) {\n let promise: Promise<void> = Promise.resolve()\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then(() => this.run('hookSeq', hookName, parameters, plugin))\n }\n return promise.then(noReturn)\n }\n\n private getSortedPlugins(_hookName: keyof PluginLifecycle, pluginName?: string): KubbPlugin[] {\n const sortedPlugins = [...this.plugins]\n\n if (pluginName) {\n return sortedPlugins.filter((item) => item.name === pluginName)\n }\n return sortedPlugins\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n private run<H extends PluginLifecycleHooks, TResult = void>(\n strategy: Strategy,\n hookName: H,\n parameters: unknown[] | undefined,\n plugin: KubbPlugin\n ): Promise<TResult> {\n const hook = plugin[hookName]!\n\n return Promise.resolve().then(() => {\n if (typeof hook !== 'function') {\n return hook\n }\n\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.text = `[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`\n }\n\n const hookResult = (hook as any).apply(this.core.api, parameters)\n\n if (!hookResult?.then) {\n // short circuit for non-thenables and non-Promises\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return hookResult\n }\n\n return Promise.resolve(hookResult).then((result) => {\n // action was fulfilled\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return result\n })\n })\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n private runSync<H extends PluginLifecycleHooks>(hookName: H, parameters: Parameters<PluginLifecycle[H]>, plugin: KubbPlugin): ReturnType<PluginLifecycle[H]> {\n const hook = plugin[hookName]!\n\n // const context = this.pluginContexts.get(plugin)!;\n\n try {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return (hook as Function).apply(this.core.api, parameters)\n } catch (error: any) {\n return error\n }\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noReturn() {}\n","import type { MaybePromise, KubbUserConfig, CLIOptions } from './types'\n\n/**\n * Type helper to make it easier to use kubb.config.ts\n * accepts a direct {@link KubbConfig} object, or a function that returns it.\n * The function receives a {@link ConfigEnv} object that exposes two properties:\n */\nexport const defineConfig = (\n options:\n | MaybePromise<KubbUserConfig>\n | ((\n /** The options derived from CLI flags */\n cliOptions: CLIOptions\n ) => MaybePromise<KubbUserConfig>)\n) => options\n","/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { build } from './build'\n\nexport * from './config'\nexport * from './build'\nexport { CorePluginOptions, createPlugin } from './plugin'\nexport * from './utils'\nexport * from './types'\nexport * from './managers'\nexport default build\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/build.ts","../src/plugin.ts","../src/utils/isPromise.ts","../src/utils/write.ts","../src/utils/format.ts","../src/utils/cache.ts","../src/utils/read.ts","../src/managers/fileManager/FileManager.ts","../src/managers/fileManager/events.ts","../src/managers/pluginManager/PluginManager.ts","../src/config.ts","../src/index.ts"],"names":["path","fse","file","argument0","name"],"mappings":";AAAA,OAAOA,WAAU;AAEjB,OAAOC,UAAS;;;ACFhB,OAAOD,WAAU;;;ACEV,IAAM,YAAY,CAAI,WAAkD;AAC7E,SAAO,OAAQ,QAAgB,SAAS;AAC1C;;;ACHA,OAAO,SAAS;;;ACDhB,SAAS,UAAU,sBAAsB;AAIzC,IAAM,gBAAyB;AAAA,EAC7B,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,WAAW;AACb;AACO,IAAM,SAAS,CAAC,SAAiB;AACtC,SAAO,eAAe,MAAM,aAAa;AAC3C;;;ADNO,IAAM,QAAQ,OAAO,MAAcA,OAAc,UAAwB,EAAE,QAAQ,MAAM,MAAM;AACpG,QAAM,gBAAgB,QAAQ,SAAS,OAAO,IAAI,IAAI;AAEtD,MAAI;AACF,UAAM,IAAI,KAAKA,KAAI;AACnB,UAAM,aAAa,MAAM,IAAI,SAASA,OAAM,EAAE,UAAU,QAAQ,CAAC;AACjE,QAAI,YAAY,SAAS,MAAM,eAAe;AAC5C;AAAA,IACF;AAAA,EACF,SAAS,MAAP;AACA,WAAO,IAAI,WAAWA,OAAM,aAAa;AAAA,EAC3C;AAEA,SAAO,IAAI,WAAWA,OAAM,aAAa;AAC3C;;;AEbO,SAAS,kBAAkB,OAAmB;AACnD,SAAO;AAAA,IACL,OAAO,IAAY;AACjB,aAAO,OAAO,MAAM;AAAA,IACtB;AAAA,IACA,IAAI,IAAY;AACd,YAAM,OAAO,MAAM;AACnB,UAAI,CAAC;AAAM;AACX,WAAK,KAAK;AACV,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,IAAY;AACd,YAAM,OAAO,MAAM;AACnB,UAAI,CAAC;AAAM,eAAO;AAClB,WAAK,KAAK;AACV,aAAO;AAAA,IACT;AAAA,IACA,IAAI,IAAY,OAAY;AAC1B,YAAM,MAAM,CAAC,GAAG,KAAK;AAAA,IACvB;AAAA,EACF;AACF;;;AC/BA,OAAO,UAAU;AAGV,IAAM,kBAAkB,CAAC,MAAsB,OAAuB;AAC3E,MAAI,CAAC,QAAQ,CAAC,IAAI;AAChB,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AACA,QAAM,UAAU,KAAK,SAAS,MAAM,EAAE,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ;AAEtF,SAAO,KAAK;AACd;;;ALCO,SAAS,aAAoE,SAA+B;AACjH,SAAO,CAAC,YAA0B;AAChC,UAAM,SAAS,QAAQ,OAAO;AAC9B,QAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AAGA,QAAI,CAAC,OAAO,WAAW;AACrB,aAAO,YAAY,SAAS,UAAU,MAAM;AAC1C,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AAYO,IAAM,OAAO;AAEb,IAAM,eAAe,aAAgC,CAAC,YAAY;AACvE,QAAM,EAAE,aAAa,WAAW,KAAK,IAAI;AACzC,QAAM,aAAqB,CAAC;AAE5B,QAAM,MAAqB;AAAA,IACzB,IAAI,SAAS;AACX,aAAO,QAAQ;AAAA,IACjB;AAAA,IACA,MAAM,SAAS,aAAa;AAC1B,YAAM,aAAa,MAAM,UAAU,EAAE,UAAU,YAAY,IAAI,UAAU,YAAY,UAAU,SAAS,YAAY,QAAQ,CAAC;AAC7H,YAAM,WAAW,cAAc,YAAY,YAAY,YAAY;AAEnE,aAAO,YAAY,IAAI;AAAA,QACrB;AAAA,QACA,MAAM,YAAY;AAAA,QAClB,QAAQ,YAAY;AAAA,MACtB,CAAC;AAAA,IACH;AAAA,IACA,WAAW,CAAC,SAAe;AACzB,iBAAW,KAAK,IAAI;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,kBAAkB,uBAAO,OAAO,IAAI,CAAC;AAAA,EAC9C;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,MAAM,WAAW;AACf,UAAI,CAAC,WAAW,QAAQ;AACtB;AAAA,MACF;AAEA,UAAI,QAAQ;AAEZ,iBAAW,QAAQ,CAAC,SAAS;AAC3B,iBAAS,kBAAkB,gBAAgBA,MAAK,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,IAAI,GAAG,KAAK,QAAQ;AAAA;AAAA,MACnH,CAAC;AAED,YAAM,MAAM,OAAOA,MAAK,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,MAAM,UAAU,GAAG,EAAE,QAAQ,KAAK,CAAC;AAAA,IAC1G;AAAA,IACA,UAAU,UAAU,UAAU;AAC5B,UAAI,CAAC,UAAU;AACb,eAAO;AAAA,MACT;AACA,aAAOA,MAAK,QAAQ,UAAU,QAAQ;AAAA,IACxC;AAAA,EACF;AACF,CAAC;;;AM1FD,OAAO,kBAAkB;AACzB,SAAS,kBAAkB;;;ACG3B,IAAM,OAAO;AAAA,EACX,gBAAgB,MAAM;AAAA,EACtB,oBAAoB,MAAM;AAAA,EAC1B,wBAAwB,CAAC,OAAe,GAAG;AAAA,EAC3C,eAAe,MAAM;AAAA,EACrB,cAAc,CAAC,OAAe,GAAG;AACnC;AAEO,IAAM,uBAAuB,CAAC,YAA0B;AAC7D,SAAO;AAAA,IAIL,UAAU,CAAC,IAAU,SAAqB;AACxC,cAAQ,KAAK,KAAK,eAAe,GAAG,IAAI,IAAI;AAAA,IAC9C;AAAA,IACA,kBAAkB,CAAC,SAAqB;AACtC,cAAQ,KAAK,KAAK,mBAAmB,GAAG,IAAI;AAAA,IAC9C;AAAA,IACA,sBAAsB,CAAC,IAAU,WAAyB;AACxD,cAAQ,KAAK,KAAK,uBAAuB,EAAE,GAAG,MAAM;AAAA,IACtD;AAAA,IACA,aAAa,MAAY;AACvB,cAAQ,KAAK,KAAK,cAAc,CAAC;AAAA,IACnC;AAAA,IACA,YAAY,CAAC,IAAU,SAAqB;AAC1C,cAAQ,KAAK,KAAK,aAAa,EAAE,GAAG,IAAI;AAAA,IAC1C;AAAA,IAKA,OAAO,CAAC,aAA2D;AACjE,cAAQ,GAAG,KAAK,eAAe,GAAG,QAAQ;AAC1C,aAAO,MAAM,QAAQ,eAAe,KAAK,eAAe,GAAG,QAAQ;AAAA,IACrE;AAAA,IACA,gBAAgB,CAAC,aAAiD;AAChE,cAAQ,GAAG,KAAK,mBAAmB,GAAG,QAAQ;AAC9C,aAAO,MAAM,QAAQ,eAAe,KAAK,mBAAmB,GAAG,QAAQ;AAAA,IACzE;AAAA,IACA,oBAAoB,CAAC,IAAU,aAAqD;AAClF,cAAQ,GAAG,KAAK,uBAAuB,EAAE,GAAG,QAAQ;AACpD,aAAO,MAAM,QAAQ,eAAe,KAAK,uBAAuB,EAAE,GAAG,QAAQ;AAAA,IAC/E;AAAA,IACA,WAAW,CAAC,aAAuC;AACjD,cAAQ,GAAG,KAAK,cAAc,GAAG,QAAQ;AACzC,aAAO,MAAM,QAAQ,eAAe,KAAK,cAAc,GAAG,QAAQ;AAAA,IACpE;AAAA,IACA,UAAU,CAAC,IAAU,aAAiD;AACpE,cAAQ,GAAG,KAAK,aAAa,EAAE,GAAG,QAAQ;AAC1C,aAAO,MAAM,QAAQ,eAAe,KAAK,aAAa,EAAE,GAAG,QAAQ;AAAA,IACrE;AAAA,EACF;AACF;;;ADpDO,IAAM,cAAN,MAAkB;AAAA,EACf,QAA2C,oBAAI,IAAI;AAAA,EAC3D,UAAU,IAAI,aAAa;AAAA,EAC3B,SAAS,qBAAqB,KAAK,OAAO;AAAA,EAE1C,cAAc;AACZ,SAAK,OAAO,eAAe,MAAM;AAC/B,UAAI,KAAK,iBAAiB,SAAS,MAAM,KAAK,MAAM,MAAM;AAExD,aAAK,OAAO,YAAY;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,SAAS,IAAU;AACzB,WAAO,KAAK,MAAM,IAAI,EAAE;AAAA,EAC1B;AAAA,EACQ,iBAAiB,QAAgB;AACvC,QAAI,QAAQ;AAEZ,SAAK,MAAM,QAAQ,CAAC,SAAS;AAC3B,UAAI,KAAK,WAAW,QAAQ;AAC1B;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAAoB;AACtB,UAAM,OAAa;AAAA,MACjB,GAAG;AAAA,IACL;AACA,UAAM,YAAY,EAAE,IAAI,WAAW,GAAG,MAAM,QAAQ,MAAgB;AAEpE,SAAK,MAAM,IAAI,UAAU,IAAI,SAAS;AACtC,SAAK,OAAO,SAAS,UAAU,IAAI,IAAI;AAEvC,WAAO,IAAI,QAAc,CAAC,YAAY;AACpC,YAAM,cAAc,KAAK,OAAO,SAAS,UAAU,IAAI,CAACE,UAAS;AAC/D,gBAAQA,KAAI;AACZ,oBAAY;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,IAAU,QAAgB;AAClC,UAAM,YAAY,KAAK,SAAS,EAAE;AAClC,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AAEA,cAAU,SAAS;AACnB,SAAK,MAAM,IAAI,IAAI,SAAS;AAC5B,SAAK,OAAO,iBAAiB,UAAU,IAAI;AAC3C,SAAK,OAAO,qBAAqB,IAAI,MAAM;AAAA,EAC7C;AAAA,EAEA,IAAI,IAAU;AACZ,UAAM,YAAY,KAAK,SAAS,EAAE;AAClC,WAAO,WAAW;AAAA,EACpB;AAAA,EAEA,OAAO,IAAU;AACf,UAAM,YAAY,KAAK,SAAS,EAAE;AAClC,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AAEA,SAAK,UAAU,IAAI,SAAS;AAC5B,SAAK,OAAO,WAAW,IAAI,UAAU,IAAI;AAAA,EAC3C;AACF;;;AE9DA,IAAM,YAEF;AAAA,EACF,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,MAAM;AAAA,EACN,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AACZ;AACO,IAAM,QAAQ,OAAO,KAAK,SAAS;AAEnC,IAAM,gBAAN,MAAoB;AAAA,EAClB;AAAA,EAES,cAA2B,IAAI,YAAY;AAAA,EAE1C;AAAA,EAEA;AAAA,EAED;AAAA,EAEhB,YAAY,QAAoB,SAA8B;AAC5D,SAAK,SAAS,QAAQ;AACtB,SAAK,SAAS;AAEd,SAAK,OAAO,aAAa;AAAA,MACvB;AAAA,MACA,aAAa,KAAK;AAAA,MAClB,MAAM,KAAK;AAAA,MACX,WAAW,CAAC,WAAW;AACrB,YAAI,OAAO,YAAY;AACrB,iBAAO,KAAK,mBAAmB,OAAO,UAAU,EAAE,OAAO,UAAU,OAAO,UAAU,OAAO,OAAO;AAAA,QACpG;AACA,eAAO,KAAK,UAAU,OAAO,UAAU,OAAO,UAAU,OAAO,OAAO;AAAA,MACxE;AAAA,IACF,CAAC;AAGD,SAAK,UAAU,CAAC,KAAK,MAAM,GAAI,OAAO,WAAW,CAAC,CAAE;AAAA,EACtD;AAAA,EAEA,YAAY,CAAC,UAAkB,UAAmB,YAA8C;AAC9F,WAAO,KAAK,UAAU,aAAa,CAAC,UAAU,UAAU,OAAO,CAAC;AAAA,EAClE;AAAA,EACA,qBAAqB,CAAC,eAAuB,CAAC,UAAkB,UAAmB,YAA8C;AAC/H,WAAO,KAAK,cAAc,YAAY,aAAa,CAAC,UAAU,UAAU,OAAO,CAAC;AAAA,EAClF;AAAA,EAEA,OAAO,OAAO,OAAe;AAC3B,WAAO,KAAK,UAAU,QAAQ,CAAC,EAAE,CAAC;AAAA,EACpC;AAAA,EAGA,cACE,YACA,UACA,YACA,SACgD;AAChD,QAAI,UAA0D,QAAQ,QAAQ,IAAI;AAClF,eAAW,UAAU,KAAK,iBAAiB,UAAU,UAAU,GAAG;AAChE,UAAI,WAAW,QAAQ,IAAI,MAAM;AAAG;AACpC,gBAAU,QAAQ,KAAK,CAAC,WAAW;AACjC,YAAI,UAAU;AAAM,iBAAO;AAC3B,eAAO,KAAK,IAAI,aAAa,UAAU,YAAY,MAAM;AAAA,MAC3D,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAGA,UACE,UACA,YACA,SACgD;AAChD,QAAI,UAA0D,QAAQ,QAAQ,IAAI;AAClF,eAAW,UAAU,KAAK,iBAAiB,QAAQ,GAAG;AACpD,UAAI,WAAW,QAAQ,IAAI,MAAM;AAAG;AACpC,gBAAU,QAAQ,KAAK,CAAC,WAAW;AACjC,YAAI,UAAU;AAAM,iBAAO;AAC3B,eAAO,KAAK,IAAI,aAAa,UAAU,YAAY,MAAM;AAAA,MAC3D,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAGA,MAAM,aAA4D,UAAa,YAAyD;AACtI,UAAM,mBAAsC,CAAC;AAE7C,eAAW,UAAU,KAAK,iBAAiB,QAAQ,GAAG;AACpD,UAAK,OAAO,WAAwC,YAAY;AAC9D,cAAM,QAAQ,IAAI,gBAAgB;AAClC,yBAAiB,SAAS;AAC1B,cAAM,KAAK,IAAI,gBAAgB,UAAU,YAAY,MAAM;AAAA,MAC7D,OAAO;AACL,cAAM,UAA2B,KAAK,IAAI,gBAAgB,UAAU,YAAY,MAAM;AAEtF,yBAAiB,KAAK,OAAO;AAAA,MAC/B;AAAA,IACF;AACA,WAAO,QAAQ,IAAI,gBAAgB;AAAA,EACrC;AAAA,EAGA,eACE,UACA,CAAC,cAAc,IAAI,GACnB,QACuB;AACvB,QAAI,UAAU,QAAQ,QAAQ,SAAS;AACvC,eAAW,UAAU,KAAK,iBAAiB,QAAQ,GAAG;AACpD,gBAAU,QAAQ;AAAA,QAAK,CAACC,eACtB,KAAK,IAAI,kBAAkB,UAAU,CAACA,YAAW,GAAG,IAAI,GAAqC,MAAM,EAAE;AAAA,UAAK,CAAC,WACzG,OAAO,KAAK,KAAK,KAAK,KAAKA,YAAW,QAAQ,MAAM;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAIA,QAAwC,UAAa,YAA6C;AAChG,QAAI,UAAyB,QAAQ,QAAQ;AAC7C,eAAW,UAAU,KAAK,iBAAiB,QAAQ,GAAG;AACpD,gBAAU,QAAQ,KAAK,MAAM,KAAK,IAAI,WAAW,UAAU,YAAY,MAAM,CAAC;AAAA,IAChF;AACA,WAAO,QAAQ,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEQ,iBAAiB,WAAkC,YAAmC;AAC5F,UAAM,gBAAgB,CAAC,GAAG,KAAK,OAAO;AAEtC,QAAI,YAAY;AACd,aAAO,cAAc,OAAO,CAAC,SAAS,KAAK,SAAS,UAAU;AAAA,IAChE;AAEA,WAAO;AAAA,EACT;AAAA,EASQ,IACN,UACA,UACA,YACA,QACkB;AAClB,UAAM,OAAO,OAAO;AAEpB,WAAO,QAAQ,QAAQ,EAAE,KAAK,MAAM;AAClC,UAAI,OAAO,SAAS,YAAY;AAC9B,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,OAAO,aAAa,UAAU,KAAK,QAAQ,SAAS;AAC3D,aAAK,OAAO,QAAQ,OAAO,IAAI,aAAa,wCAAwC,OAAO;AAAA;AAAA,MAC7F;AAEA,YAAM,aAAc,KAAa,MAAM,KAAK,KAAK,KAAK,UAAU;AAEhE,UAAI,CAAC,YAAY,MAAM;AAErB,YAAI,KAAK,OAAO,aAAa,UAAU,KAAK,QAAQ,SAAS;AAC3D,eAAK,OAAO,QAAQ,QAAQ,IAAI,aAAa,wCAAwC,OAAO;AAAA,CAAS;AAAA,QACvG;AACA,eAAO;AAAA,MACT;AAEA,aAAO,QAAQ,QAAQ,UAAU,EAAE,KAAK,CAAC,WAAW;AAElD,YAAI,KAAK,OAAO,aAAa,UAAU,KAAK,QAAQ,SAAS;AAC3D,eAAK,OAAO,QAAQ,QAAQ,IAAI,aAAa,wCAAwC,OAAO;AAAA,CAAS;AAAA,QACvG;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EASQ,QAAwC,UAAa,YAA4C,QAAoD;AAC3J,UAAM,OAAO,OAAO;AAIpB,QAAI;AAEF,aAAQ,KAAkB,MAAM,KAAK,KAAK,KAAK,UAAU;AAAA,IAC3D,SAAS,OAAP;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAGA,SAAS,WAAW;AAAC;;;ATnMrB,eAAe,iBAAsC,eAAuB,QAAyB,SAAqB;AACxH,MAAI,WAAW,MAAM;AACnB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,eAAe,oBAAoB,SAAuB,MAAqC;AAC7F,QAAM,EAAE,QAAQ,OAAO,IAAI;AAE3B,MAAI,OAAO,OAAO,OAAO;AACvB,UAAMF,KAAI,OAAO,OAAO,OAAO,IAAI;AAAA,EACrC;AAEA,QAAM,gBAAgB,IAAI,cAAc,QAAQ,EAAE,OAAO,CAAC;AAC1D,QAAM,EAAE,SAAS,YAAY,IAAI;AACjC,QAAM,QAAQA,KAAI,aAAaD,MAAK,QAAQ,OAAO,MAAM,OAAO,MAAM,IAAI,GAAG,OAAO;AAEpF,QAAM,cAAc,MAAM,cAAc,aAA2C,YAAY,CAAC,OAAO,CAAC;AACxG,QAAM,yBAAyB,YAAY,OAAO,OAAO;AAEzD,MAAI,uBAAuB,KAAK,CAAC,eAAe,OAAO,eAAe,SAAS,GAAG;AAChF,2BAAuB,QAAQ,CAAC,eAAe;AAC7C,UAAI,cAAc,OAAO,eAAe,aAAa,YAAY,SAAS;AACxE,gBAAQ,IAAI,WAAW,SAAS,MAAM;AAAA,MACxC;AAAA,IACF,CAAC;AAED;AAAA,EACF;AAEA,cAAY,OAAO,MAAM,OAAO,IAAI,SAAS;AAC3C,QAAI,WAAW,KAAK;AACpB,QAAI,EAAE,MAAAI,OAAM,QAAQ,KAAK,IAAI;AAE7B,QAAI,CAAC,YAAYA,OAAM;AACrB,iBAAWJ,MAAK,QAAQ,OAAO,MAAM,OAAO,OAAO,MAAMI,KAAI;AAAA,IAC/D;AAEA,UAAM,eAAe,MAAM,cAAc,UAAU,QAAQ,CAAC,QAAQ,CAAC;AACrE,QAAI,cAAc;AAChB,aAAO;AAAA,IACT;AAEA,QAAI,MAAM;AACR,YAAM,kBAAkB,MAAM,cAAc,eAAe,aAAa,CAAC,MAAM,QAAQ,GAAG,gBAAgB;AAE1G,YAAM,cAAc,aAAa,aAAa,CAAC,iBAAiB,QAAQ,CAAC;AACzE,kBAAY,UAAU,IAAI,SAAS;AACnC,kBAAY,OAAO,EAAE;AAAA,IACvB;AAAA,EACF,CAAC;AAED,QAAM,cAAc,aAAa,cAAc,CAAC,MAAM,CAAC;AAEvD,cAAY,IAAI;AAAA,IACd,UAAUJ,MAAK,QAAQ,OAAO,MAAM,OAAO,MAAM,IAAI;AAAA,IACrD,QAAQ;AAAA,EACV,CAAC;AAED,cAAY,OAAO,UAAU,YAAY;AACvC,UAAM,cAAc,aAAa,UAAU;AAC3C,eAAW,MAAM;AACf,WAAK;AAAA,IACP,GAAG,GAAI;AAAA,EACT,CAAC;AACH;AAEO,SAAS,MAAM,SAA6C;AACjE,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI;AACF,0BAAoB,SAAS,OAAO;AAAA,IACtC,SAAS,GAAP;AACA,aAAO,CAAC;AAAA,IACV;AAAA,EACF,CAAC;AACH;;;AUnGO,IAAM,eAAe,CAC1B,YAMG;;;ACLL,IAAO,cAAQ","sourcesContent":["import path from 'path'\n\nimport fse from 'fs-extra'\n\nimport { PluginManager } from './managers/pluginManager'\n\nimport type { PluginContext, TransformResult, ValidationResult, LogLevel, KubbPlugin } from './types'\n\ntype BuildOutput = void\n\n// Same type as ora\ntype Spinner = {\n start: (text?: string) => Spinner\n succeed: (text: string) => Spinner\n stopAndPersist: (options: { text: string }) => Spinner\n render: () => Spinner\n text: string\n info: (text: string) => Spinner\n}\n\nexport type Logger = {\n log: (message: string, logLevel: LogLevel) => void\n spinner?: Spinner\n}\ntype BuildOptions = {\n config: PluginContext['config']\n mode: 'development' | 'production'\n logger?: Logger\n}\n\nasync function transformReducer(this: PluginContext, _previousCode: string, result: TransformResult, _plugin: KubbPlugin) {\n if (result === null) {\n return null\n }\n return result\n}\n\nasync function buildImplementation(options: BuildOptions, done: (output: BuildOutput) => void) {\n const { config, logger } = options\n\n if (config.output.clean) {\n await fse.remove(config.output.path)\n }\n\n const pluginManager = new PluginManager(config, { logger })\n const { plugins, fileManager } = pluginManager\n const input = fse.readFileSync(path.resolve(config.root, config.input.path), 'utf-8')\n\n const validations = await pluginManager.hookParallel<'validate', ValidationResult>('validate', [plugins])\n const validationsWithMessage = validations.filter(Boolean)\n\n if (validationsWithMessage.some((validation) => typeof validation !== 'boolean')) {\n validationsWithMessage.forEach((validation) => {\n if (validation && typeof validation !== 'boolean' && validation?.message) {\n logger?.log(validation.message, 'warn')\n }\n })\n\n return\n }\n\n fileManager.events.onAdd(async (id, file) => {\n let fileName = file.fileName as string\n let { name, source: code } = file\n\n if (!fileName && name) {\n fileName = path.resolve(config.root, config.output.path, name)\n }\n\n const loadedResult = await pluginManager.hookFirst('load', [fileName])\n if (loadedResult) {\n code = loadedResult\n }\n\n if (code) {\n const transformedCode = await pluginManager.hookReduceArg0('transform', [code, fileName], transformReducer)\n\n await pluginManager.hookParallel('writeFile', [transformedCode, fileName])\n fileManager.setStatus(id, 'success')\n fileManager.remove(id)\n }\n })\n\n await pluginManager.hookParallel('buildStart', [config])\n\n fileManager.add({\n fileName: path.resolve(config.root, config.input.path),\n source: input,\n })\n\n fileManager.events.onSuccess(async () => {\n await pluginManager.hookParallel('buildEnd')\n setTimeout(() => {\n done()\n }, 1000)\n })\n}\n\nexport function build(options: BuildOptions): Promise<BuildOutput> {\n return new Promise((resolve, reject) => {\n try {\n buildImplementation(options, resolve)\n } catch (e) {\n reject(e)\n }\n })\n}\n","import path from 'path'\n\nimport { createPluginCache, getRelativePath, write } from './utils'\n\nimport { FileManager, File } from './managers/fileManager'\nimport type { PluginContext, KubbPlugin, PluginFactoryOptions } from './types'\n\ntype KubbPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (\n options: T['options']\n) => T['nested'] extends true ? Array<KubbPlugin<T>> : KubbPlugin<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: KubbPluginFactory<T>) {\n return (options: T['options']) => {\n const plugin = factory(options)\n if (Array.isArray(plugin)) {\n throw new Error('Not implemented')\n }\n\n // default transform\n if (!plugin.transform) {\n plugin.transform = function transform(code) {\n return code\n }\n }\n\n return plugin\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n resolveId: PluginContext['resolveId']\n load: PluginContext['load']\n}\n\n// not publicly exported\nexport type CorePluginOptions = PluginFactoryOptions<Options, false, PluginContext>\n\nexport const name = 'core' as const\n\nexport const definePlugin = createPlugin<CorePluginOptions>((options) => {\n const { fileManager, resolveId, load } = options\n const indexFiles: File[] = []\n\n const api: PluginContext = {\n get config() {\n return options.config\n },\n async emitFile(emittedFile) {\n const resolvedId = await resolveId({ importee: emittedFile.id, importer: emittedFile.importer, options: emittedFile.options })\n const fileName = resolvedId || emittedFile.importer || emittedFile.id\n\n return fileManager.add({\n fileName: fileName,\n name: emittedFile.name,\n source: emittedFile.source,\n })\n },\n addToRoot: (file: File) => {\n indexFiles.push(file)\n },\n resolveId,\n load,\n cache: createPluginCache(Object.create(null)),\n }\n\n return {\n name,\n api,\n async buildEnd() {\n if (!indexFiles.length) {\n return\n }\n\n let index = ``\n\n indexFiles.forEach((item) => {\n index += `export * from \"${getRelativePath(path.resolve(this.config.root, this.config.output.path), item.fileName)}\";\\n`\n })\n\n await write(index, path.resolve(this.config.root, this.config.output.path, 'index.ts'), { format: true })\n },\n resolveId(importee, importer) {\n if (!importer) {\n return null\n }\n return path.resolve(importer, importee)\n },\n }\n})\n","import type { MaybePromise } from '../types'\n\nexport const isPromise = <T>(result: MaybePromise<T>): result is Promise<T> => {\n return typeof (result as any)?.then === 'function'\n}\n","/* eslint-disable consistent-return */\nimport fse from 'fs-extra'\n\nimport { format } from './format'\n\ntype WriteOptions = {\n format: boolean\n}\n\nexport const write = async (data: string, path: string, options: WriteOptions = { format: false }) => {\n const formattedData = options.format ? format(data) : data\n\n try {\n await fse.stat(path)\n const oldContent = await fse.readFile(path, { encoding: 'utf-8' })\n if (oldContent?.toString() === formattedData) {\n return\n }\n } catch (_err) {\n return fse.outputFile(path, formattedData)\n }\n\n return fse.outputFile(path, formattedData)\n}\n","import { format as prettierFormat } from 'prettier'\n\nimport type { Options } from 'prettier'\n\nconst formatOptions: Options = {\n tabWidth: 2,\n printWidth: 160,\n parser: 'typescript',\n singleQuote: true,\n semi: false,\n bracketSameLine: false,\n endOfLine: 'auto',\n}\nexport const format = (text: string) => {\n return prettierFormat(text, formatOptions)\n}\n","/* eslint-disable no-param-reassign */\n/* eslint-disable consistent-return */\n\nexport interface Cache<TCache = any> {\n delete(id: string): boolean\n get<T = TCache>(id: string): T\n has(id: string): boolean\n set<T = TCache>(id: string, value: T): void\n}\n\nexport function createPluginCache(cache: any): Cache {\n return {\n delete(id: string) {\n return delete cache[id]\n },\n get(id: string) {\n const item = cache[id]\n if (!item) return\n item[0] = 0\n return item[1]\n },\n has(id: string) {\n const item = cache[id]\n if (!item) return false\n item[0] = 0\n return true\n },\n set(id: string, value: any) {\n cache[id] = [0, value]\n },\n }\n}\n","import path from 'path'\n\n// TODO check for a better way or resolving the relative path\nexport const getRelativePath = (from?: string | null, to?: string | null) => {\n if (!from || !to) {\n throw new Error('From and to should be filled in when retrieving the relativePath')\n }\n const newPath = path.relative(from, to).replace('../', '').replace('.ts', '').trimEnd()\n\n return `./${newPath}`\n}\n","import EventEmitter from 'events'\nimport { randomUUID } from 'crypto'\nimport type { CacheStore, UUID, Status, File, UserFile } from './types'\nimport { getFileManagerEvents } from './events'\n\nexport class FileManager {\n private cache: Map<CacheStore['id'], CacheStore> = new Map()\n emitter = new EventEmitter()\n events = getFileManagerEvents(this.emitter)\n\n constructor() {\n this.events.onStatusChange(() => {\n if (this.getCountOfStatus('removed') === this.cache.size) {\n // all files are been resolved and written to the file system\n this.events.emitSuccess()\n }\n })\n }\n\n private getCache(id: UUID) {\n return this.cache.get(id)\n }\n private getCountOfStatus(status: Status) {\n let count = 0\n\n this.cache.forEach((item) => {\n if (item.status === status) {\n count++\n }\n })\n return count\n }\n\n add(userFile: UserFile) {\n const file: File = {\n ...userFile,\n } as File\n const cacheItem = { id: randomUUID(), file, status: 'new' as Status }\n\n this.cache.set(cacheItem.id, cacheItem)\n this.events.emitFile(cacheItem.id, file)\n\n return new Promise<File>((resolve) => {\n const unsubscribe = this.events.onRemove(cacheItem.id, (file) => {\n resolve(file)\n unsubscribe()\n })\n })\n }\n\n setStatus(id: UUID, status: Status) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n cacheItem.status = status\n this.cache.set(id, cacheItem)\n this.events.emitStatusChange(cacheItem.file)\n this.events.emitStatusChangeById(id, status)\n }\n\n get(id: UUID) {\n const cacheItem = this.getCache(id)\n return cacheItem?.file\n }\n\n remove(id: UUID) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n this.setStatus(id, 'removed')\n this.events.emitRemove(id, cacheItem.file)\n }\n}\n","import EventEmitter from 'events'\n\nimport type { File, Status, UUID } from './types'\n\nconst keys = {\n getEmitFileKey: () => `emit-file`,\n getStatusChangeKey: () => `status-change`,\n getStatusChangeByIdKey: (id: string) => `${id}-status-change`,\n getSuccessKey: () => `success`,\n getRemoveKey: (id: string) => `${id}remove`,\n} as const\n\nexport const getFileManagerEvents = (emitter: EventEmitter) => {\n return {\n /**\n * Emiter\n */\n emitFile: (id: UUID, file: File): void => {\n emitter.emit(keys.getEmitFileKey(), id, file)\n },\n emitStatusChange: (file: File): void => {\n emitter.emit(keys.getStatusChangeKey(), file)\n },\n emitStatusChangeById: (id: UUID, status: Status): void => {\n emitter.emit(keys.getStatusChangeByIdKey(id), status)\n },\n emitSuccess: (): void => {\n emitter.emit(keys.getSuccessKey())\n },\n emitRemove: (id: UUID, file: File): void => {\n emitter.emit(keys.getRemoveKey(id), file)\n },\n /**\n * Listeners\n */\n\n onAdd: (callback: (id: UUID, file: File) => void): VoidFunction => {\n emitter.on(keys.getEmitFileKey(), callback)\n return () => emitter.removeListener(keys.getEmitFileKey(), callback)\n },\n onStatusChange: (callback: (file: File) => void): VoidFunction => {\n emitter.on(keys.getStatusChangeKey(), callback)\n return () => emitter.removeListener(keys.getStatusChangeKey(), callback)\n },\n onStatusChangeById: (id: UUID, callback: (status: Status) => void): VoidFunction => {\n emitter.on(keys.getStatusChangeByIdKey(id), callback)\n return () => emitter.removeListener(keys.getStatusChangeByIdKey(id), callback)\n },\n onSuccess: (callback: () => void): VoidFunction => {\n emitter.on(keys.getSuccessKey(), callback)\n return () => emitter.removeListener(keys.getSuccessKey(), callback)\n },\n onRemove: (id: UUID, callback: (file: File) => void): VoidFunction => {\n emitter.on(keys.getRemoveKey(id), callback)\n return () => emitter.removeListener(keys.getRemoveKey(id), callback)\n },\n }\n}\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport { definePlugin } from '../../plugin'\nimport { FileManager } from '../fileManager'\nimport { Argument0, Strategy } from './types'\n\nimport type { KubbConfig, KubbPlugin, PluginLifecycleHooks, PluginLifecycle, MaybePromise } from '../../types'\nimport type { Logger } from '../../build'\nimport type { CorePluginOptions } from '../../plugin'\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n\n// This will make sure no input hook is omitted\nconst hookNames: {\n [P in PluginLifecycleHooks]: 1\n} = {\n validate: 1,\n buildStart: 1,\n resolveId: 1,\n load: 1,\n transform: 1,\n writeFile: 1,\n buildEnd: 1,\n}\nexport const hooks = Object.keys(hookNames) as [PluginLifecycleHooks]\n\nexport class PluginManager {\n public plugins: KubbPlugin[]\n\n public readonly fileManager: FileManager = new FileManager()\n\n private readonly logger?: Logger\n\n private readonly config: KubbConfig\n\n public readonly core: KubbPlugin<CorePluginOptions> & { api: CorePluginOptions['api'] }\n\n constructor(config: KubbConfig, options: { logger?: Logger }) {\n this.logger = options.logger\n this.config = config\n\n this.core = definePlugin({\n config,\n fileManager: this.fileManager,\n load: this.load,\n resolveId: (params) => {\n if (params.pluginName) {\n return this.resolveIdForPlugin(params.pluginName)(params.importee, params.importer, params.options)\n }\n return this.resolveId(params.importee, params.importer, params.options)\n },\n }) as KubbPlugin<CorePluginOptions> & {\n api: CorePluginOptions['api']\n }\n this.plugins = [this.core, ...(config.plugins || [])]\n }\n\n resolveId = (importee: string, importer?: string, options?: Record<string, any> | undefined) => {\n return this.hookFirst('resolveId', [importee, importer, options])\n }\n resolveIdForPlugin = (pluginName: string) => (importee: string, importer?: string, options?: Record<string, any> | undefined) => {\n return this.hookForPlugin(pluginName, 'resolveId', [importee, importer, options])\n }\n\n load = async (id: string) => {\n return this.hookFirst('load', [id])\n }\n\n // run only hook for a specific plugin name\n hookForPlugin<H extends PluginLifecycleHooks>(\n pluginName: string,\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n skipped?: ReadonlySet<KubbPlugin> | null\n ): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName, pluginName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run('hookFirst', hookName, parameters, plugin) as any\n })\n }\n return promise\n }\n\n // chains, first non-null result stops and returns\n hookFirst<H extends PluginLifecycleHooks>(\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n skipped?: ReadonlySet<KubbPlugin> | null\n ): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run('hookFirst', hookName, parameters, plugin) as any\n })\n }\n return promise\n }\n\n // parallel\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>(hookName: H, parameters?: Parameters<PluginLifecycle[H]> | undefined) {\n const parallelPromises: Promise<TOuput>[] = []\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if ((plugin[hookName] as { sequential?: boolean })?.sequential) {\n await Promise.all(parallelPromises)\n parallelPromises.length = 0\n await this.run('hookParallel', hookName, parameters, plugin)\n } else {\n const promise: Promise<TOuput> = this.run('hookParallel', hookName, parameters, plugin)\n\n parallelPromises.push(promise)\n }\n }\n return Promise.all(parallelPromises)\n }\n\n // chains, reduces returned value, handling the reduced value as the first hook argument\n hookReduceArg0<H extends PluginLifecycleHooks>(\n hookName: H,\n [argument0, ...rest]: Parameters<PluginLifecycle[H]>,\n reduce: (reduction: Argument0<H>, result: ReturnType<PluginLifecycle[H]>, plugin: KubbPlugin) => MaybePromise<Argument0<H> | null>\n ): Promise<Argument0<H>> {\n let promise = Promise.resolve(argument0)\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then((argument0) =>\n this.run('hookReduceArg0', hookName, [argument0, ...rest] as Parameters<PluginLifecycle[H]>, plugin).then((result) =>\n reduce.call(this.core.api, argument0, result, plugin)\n )\n )\n }\n return promise\n }\n\n // chains\n\n hookSeq<H extends PluginLifecycleHooks>(hookName: H, parameters?: Parameters<PluginLifecycle[H]>) {\n let promise: Promise<void> = Promise.resolve()\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then(() => this.run('hookSeq', hookName, parameters, plugin))\n }\n return promise.then(noReturn)\n }\n\n private getSortedPlugins(_hookName: keyof PluginLifecycle, pluginName?: string): KubbPlugin[] {\n const sortedPlugins = [...this.plugins]\n\n if (pluginName) {\n return sortedPlugins.filter((item) => item.name === pluginName)\n }\n\n return sortedPlugins\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n private run<H extends PluginLifecycleHooks, TResult = void>(\n strategy: Strategy,\n hookName: H,\n parameters: unknown[] | undefined,\n plugin: KubbPlugin\n ): Promise<TResult> {\n const hook = plugin[hookName]!\n\n return Promise.resolve().then(() => {\n if (typeof hook !== 'function') {\n return hook\n }\n\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.text = `[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`\n }\n\n const hookResult = (hook as any).apply(this.core.api, parameters)\n\n if (!hookResult?.then) {\n // short circuit for non-thenables and non-Promises\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return hookResult\n }\n\n return Promise.resolve(hookResult).then((result) => {\n // action was fulfilled\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return result\n })\n })\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n private runSync<H extends PluginLifecycleHooks>(hookName: H, parameters: Parameters<PluginLifecycle[H]>, plugin: KubbPlugin): ReturnType<PluginLifecycle[H]> {\n const hook = plugin[hookName]!\n\n // const context = this.pluginContexts.get(plugin)!;\n\n try {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return (hook as Function).apply(this.core.api, parameters)\n } catch (error: any) {\n return error\n }\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noReturn() {}\n","import type { MaybePromise, KubbUserConfig, CLIOptions } from './types'\n\n/**\n * Type helper to make it easier to use kubb.config.ts\n * accepts a direct {@link KubbConfig} object, or a function that returns it.\n * The function receives a {@link ConfigEnv} object that exposes two properties:\n */\nexport const defineConfig = (\n options:\n | MaybePromise<KubbUserConfig>\n | ((\n /** The options derived from CLI flags */\n cliOptions: CLIOptions\n ) => MaybePromise<KubbUserConfig>)\n) => options\n","/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { build } from './build'\n\nexport * from './config'\nexport * from './build'\nexport { CorePluginOptions, createPlugin } from './plugin'\nexport * from './utils'\nexport * from './types'\nexport * from './managers'\nexport default build\n"]}
|