@kubb/core 4.5.12 → 4.5.14

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["#context","#options","fs","path","reader","fs","path","syncReader","fs","path","createLogger","pc","URLPath","definedConfig: Config","fsPlugin","typescriptParser","PluginManager","rootFile: KubbFile.File","getRelativePath","files","write","build","Queue","resolve","toPath","process","fsPromises","path","fs","path","#cache","#cwd","#SLASHES","path","mod","os","module","#match"],"sources":["../src/BaseGenerator.ts","../src/config.ts","../src/fs/clean.ts","../src/fs/exists.ts","../src/fs/read.ts","../src/build.ts","../src/definePlugin.ts","../../../node_modules/.pnpm/p-limit@4.0.0/node_modules/p-limit/index.js","../../../node_modules/.pnpm/p-locate@6.0.0/node_modules/p-locate/index.js","../../../node_modules/.pnpm/locate-path@7.2.0/node_modules/locate-path/index.js","../../../node_modules/.pnpm/unicorn-magic@0.1.0/node_modules/unicorn-magic/node.js","../../../node_modules/.pnpm/find-up@7.0.0/node_modules/find-up/index.js","../src/PackageManager.ts"],"sourcesContent":["/**\n * Abstract class that contains the building blocks for plugins to create their own Generator\n * @link idea based on https://github.com/colinhacks/zod/blob/master/src/types.ts#L137\n */\nexport abstract class BaseGenerator<TOptions = unknown, TContext = unknown> {\n #options: TOptions = {} as TOptions\n #context: TContext = {} as TContext\n\n constructor(options?: TOptions, context?: TContext) {\n if (context) {\n this.#context = context\n }\n\n if (options) {\n this.#options = options\n }\n\n return this\n }\n\n get options(): TOptions {\n return this.#options\n }\n\n get context(): TContext {\n return this.#context\n }\n\n set options(options: TOptions) {\n this.#options = { ...this.#options, ...options }\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import type { InputPath, UserConfig } from './types.ts'\nimport type { PossiblePromise } from './utils/types.ts'\n\n/**\n * CLI options derived from command-line flags.\n */\nexport type CLIOptions = {\n /** Path to `kubb.config.js` */\n config?: string\n\n /** Enable watch mode for input files */\n watch?: boolean\n\n /**\n * Logging verbosity for CLI usage.\n *\n * - `silent`: hide non-essential logs\n * - `info`: show general logs (non-plugin-related)\n * - `debug`: include detailed plugin lifecycle logs\n * @default 'silent'\n */\n logLevel?: 'silent' | 'info' | 'debug'\n\n /** Run Kubb with Bun */\n bun?: boolean\n}\n\n/**\n * Helper for defining a Kubb configuration.\n *\n * Accepts either:\n * - A config object or array of configs\n * - A function returning the config(s), optionally async,\n * receiving the CLI options as argument\n *\n * @example\n * export default defineConfig(({ logLevel }) => ({\n * root: 'src',\n * plugins: [myPlugin()],\n * }))\n */\nexport function defineConfig(\n config: PossiblePromise<UserConfig | UserConfig[]> | ((cli: CLIOptions) => PossiblePromise<UserConfig | UserConfig[]>),\n): typeof config {\n return config\n}\n\n/**\n * Type guard to check if a given config has an `input.path`.\n */\nexport function isInputPath(config: UserConfig | undefined): config is UserConfig<InputPath> {\n return typeof config?.input === 'object' && config.input !== null && 'path' in config.input\n}\n","import fs from 'fs-extra'\n\nexport async function clean(path: string): Promise<void> {\n return fs.remove(path)\n}\n","import fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.pathExists(path)\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.exists()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.pathExistsSync(path)\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function exists(path: string): Promise<boolean> {\n return reader(path)\n}\n\nexport function existsSync(path: string): boolean {\n return syncReader(path)\n}\n","import fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.readFile(path, { encoding: 'utf8' })\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.text()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.readFileSync(path, { encoding: 'utf8' })\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function read(path: string): Promise<string> {\n return reader(path)\n}\n\nexport function readSync(path: string): string {\n return syncReader(path)\n}\n","import { join, relative, resolve } from 'node:path'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport type { Fabric } from '@kubb/react-fabric'\nimport { createFabric } from '@kubb/react-fabric'\nimport { typescriptParser } from '@kubb/react-fabric/parsers'\nimport { fsPlugin } from '@kubb/react-fabric/plugins'\nimport pc from 'picocolors'\nimport { isDeepEqual } from 'remeda'\nimport { isInputPath } from './config.ts'\nimport { clean, exists, getRelativePath, write } from './fs/index.ts'\nimport type { Logger } from './logger.ts'\nimport { createLogger } from './logger.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport type { Config, Output, Plugin, UserConfig } from './types.ts'\nimport { URLPath } from './utils/URLPath.ts'\n\ntype BuildOptions = {\n config: UserConfig\n /**\n * @default Logger without the spinner\n */\n logger?: Logger\n}\n\ntype BuildOutput = {\n failedPlugins: Set<{ plugin: Plugin; error: Error }>\n fabric: Fabric\n files: Array<KubbFile.ResolvedFile>\n pluginManager: PluginManager\n // TODO check if we can remove error\n /**\n * Only for safeBuild,\n * @deprecated\n */\n error?: Error\n}\n\ntype SetupResult = {\n fabric: Fabric\n pluginManager: PluginManager\n}\n\nexport async function setup(options: BuildOptions): Promise<SetupResult> {\n const { config: userConfig, logger = createLogger() } = options\n\n if (Array.isArray(userConfig.input)) {\n console.warn(pc.yellow('This feature is still under development — use with caution'))\n }\n\n try {\n if (isInputPath(userConfig) && !new URLPath(userConfig.input.path).isURL) {\n await exists(userConfig.input.path)\n }\n } catch (e) {\n if (isInputPath(userConfig)) {\n throw new Error(\n `Cannot read file/URL defined in \\`input.path\\` or set with \\`kubb generate PATH\\` in the CLI of your Kubb config ${userConfig.input.path}`,\n {\n cause: e,\n },\n )\n }\n }\n\n const definedConfig: Config = {\n root: userConfig.root || process.cwd(),\n ...userConfig,\n output: {\n write: true,\n barrelType: 'named',\n extension: {\n '.ts': '.ts',\n },\n defaultBanner: 'simple',\n ...userConfig.output,\n },\n plugins: userConfig.plugins as Config['plugins'],\n }\n\n if (definedConfig.output.clean) {\n await clean(definedConfig.output.path)\n await clean(join(definedConfig.root, '.kubb'))\n }\n\n const fabric = createFabric()\n fabric.use(fsPlugin, { dryRun: !definedConfig.output.write })\n fabric.use(typescriptParser)\n\n const pluginManager = new PluginManager(definedConfig, { fabric, logger, concurrency: 5 })\n\n return {\n fabric,\n pluginManager,\n }\n}\n\nexport async function build(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {\n const { fabric, files, pluginManager, failedPlugins, error } = await safeBuild(options, overrides)\n\n if (error) {\n throw error\n }\n\n return {\n failedPlugins,\n fabric,\n files,\n pluginManager,\n error,\n }\n}\n\nexport async function safeBuild(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {\n const { fabric, pluginManager } = overrides ? overrides : await setup(options)\n\n const failedPlugins = new Set<{ plugin: Plugin; error: Error }>()\n const config = pluginManager.config\n\n try {\n for (const plugin of pluginManager.plugins) {\n const context = pluginManager.getContext(plugin)\n\n const installer = plugin.install.bind(context)\n\n try {\n await installer(context)\n } catch (e) {\n failedPlugins.add({ plugin, error: e as Error })\n }\n }\n\n if (config.output.barrelType) {\n const root = resolve(config.root)\n const rootPath = resolve(root, config.output.path, 'index.ts')\n\n const barrelFiles = fabric.files.filter((file) => {\n return file.sources.some((source) => source.isIndexable)\n })\n\n const rootFile: KubbFile.File = {\n path: rootPath,\n baseName: 'index.ts',\n exports: barrelFiles\n .flatMap((file) => {\n const containsOnlyTypes = file.sources?.every((source) => source.isTypeOnly)\n\n return file.sources\n ?.map((source) => {\n if (!file.path || !source.isIndexable) {\n return undefined\n }\n\n // validate of the file is coming from plugin x, needs pluginKey on every file TODO update typing\n const plugin = [...pluginManager.plugins].find((item) => {\n const meta = file.meta as any\n return isDeepEqual(item.key, meta?.pluginKey)\n })\n const pluginOptions = plugin?.options as { output?: Output<any> }\n\n if (!pluginOptions || pluginOptions?.output?.barrelType === false) {\n return undefined\n }\n\n return {\n name: config.output.barrelType === 'all' ? undefined : [source.name],\n path: getRelativePath(rootPath, file.path),\n isTypeOnly: config.output.barrelType === 'all' ? containsOnlyTypes : source.isTypeOnly,\n } as KubbFile.Export\n })\n .filter(Boolean)\n })\n .filter(Boolean),\n sources: [],\n meta: {},\n }\n\n await fabric.addFile(rootFile)\n }\n\n fabric.context.on('process:start', ({ files }) => {\n pluginManager.logger.emit('progress_start', { id: 'files', size: files.length, message: 'Writing files ...' })\n })\n\n fabric.context.on('process:progress', async ({ file, source }) => {\n const message = file ? `Writing ${relative(config.root, file.path)}` : ''\n pluginManager.logger.emit('progressed', { id: 'files', message })\n\n if (source) {\n await write(file.path, source, { sanity: false })\n }\n })\n\n fabric.context.on('process:end', () => {\n pluginManager.logger.emit('progress_stop', { id: 'files' })\n })\n const files = [...fabric.files]\n\n await fabric.write({ extension: config.output.extension })\n\n return {\n failedPlugins,\n fabric,\n files,\n pluginManager,\n }\n } catch (e) {\n return {\n failedPlugins,\n fabric,\n files: [],\n pluginManager,\n error: e as Error,\n }\n }\n}\n","import type { PluginFactoryOptions, UserPluginWithLifeCycle } from './types.ts'\n\ntype PluginBuilder<T extends PluginFactoryOptions = PluginFactoryOptions> = (options: T['options']) => UserPluginWithLifeCycle<T>\n\n/**\n * Wraps a plugin builder to make the options parameter optional.\n */\nexport function definePlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(\n build: PluginBuilder<T>,\n): (options?: T['options']) => UserPluginWithLifeCycle<T> {\n return (options) => build(options ?? ({} as T['options']))\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","import pLimit from 'p-limit';\n\nclass EndError extends Error {\n\tconstructor(value) {\n\t\tsuper();\n\t\tthis.value = value;\n\t}\n}\n\n// The input can also be a promise, so we await it.\nconst testElement = async (element, tester) => tester(await element);\n\n// The input can also be a promise, so we `Promise.all()` them both.\nconst finder = async element => {\n\tconst values = await Promise.all(element);\n\tif (values[1] === true) {\n\t\tthrow new EndError(values[0]);\n\t}\n\n\treturn false;\n};\n\nexport default async function pLocate(\n\titerable,\n\ttester,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tpreserveOrder = true,\n\t} = {},\n) {\n\tconst limit = pLimit(concurrency);\n\n\t// Start all the promises concurrently with optional limit.\n\tconst items = [...iterable].map(element => [element, limit(testElement, element, tester)]);\n\n\t// Check the promises either serially or concurrently.\n\tconst checkLimit = pLimit(preserveOrder ? 1 : Number.POSITIVE_INFINITY);\n\n\ttry {\n\t\tawait Promise.all(items.map(element => checkLimit(finder, element)));\n\t} catch (error) {\n\t\tif (error instanceof EndError) {\n\t\t\treturn error.value;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n","import process from 'node:process';\nimport path from 'node:path';\nimport fs, {promises as fsPromises} from 'node:fs';\nimport {fileURLToPath} from 'node:url';\nimport pLocate from 'p-locate';\n\nconst typeMappings = {\n\tdirectory: 'isDirectory',\n\tfile: 'isFile',\n};\n\nfunction checkType(type) {\n\tif (Object.hasOwnProperty.call(typeMappings, type)) {\n\t\treturn;\n\t}\n\n\tthrow new Error(`Invalid type specified: ${type}`);\n}\n\nconst matchType = (type, stat) => stat[typeMappings[type]]();\n\nconst toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nexport async function locatePath(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t\tconcurrency,\n\t\tpreserveOrder,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fsPromises.stat : fsPromises.lstat;\n\n\treturn pLocate(paths, async path_ => {\n\t\ttry {\n\t\t\tconst stat = await statFunction(path.resolve(cwd, path_));\n\t\t\treturn matchType(type, stat);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}, {concurrency, preserveOrder});\n}\n\nexport function locatePathSync(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fs.statSync : fs.lstatSync;\n\n\tfor (const path_ of paths) {\n\t\ttry {\n\t\t\tconst stat = statFunction(path.resolve(cwd, path_), {\n\t\t\t\tthrowIfNoEntry: false,\n\t\t\t});\n\n\t\t\tif (!stat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (matchType(type, stat)) {\n\t\t\t\treturn path_;\n\t\t\t}\n\t\t} catch {}\n\t}\n}\n","import {fileURLToPath} from 'node:url';\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport * from './default.js';\n","import path from 'node:path';\nimport {locatePath, locatePathSync} from 'locate-path';\nimport {toPath} from 'unicorn-magic';\n\nexport const findUpStop = Symbol('findUpStop');\n\nexport async function findUpMultiple(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt ?? root));\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = async locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePath(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = await name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePath([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst foundPath = await runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport function findUpMultipleSync(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt) ?? root);\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePathSync(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePathSync([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\tconst foundPath = runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport async function findUp(name, options = {}) {\n\tconst matches = await findUpMultiple(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport function findUpSync(name, options = {}) {\n\tconst matches = findUpMultipleSync(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport {\n\tpathExists,\n\tpathExistsSync,\n} from 'path-exists';\n","import mod from 'node:module'\nimport os from 'node:os'\nimport { pathToFileURL } from 'node:url'\n\nimport { findUp, findUpSync } from 'find-up'\nimport { coerce, satisfies } from 'semver'\n\nimport { read, readSync } from './fs/index.ts'\n\ntype PackageJSON = {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n}\n\ntype DependencyName = string\n\ntype DependencyVersion = string\n\nexport class PackageManager {\n static #cache: Record<DependencyName, DependencyVersion> = {}\n\n #cwd?: string\n #SLASHES = new Set(['/', '\\\\'])\n constructor(workspace?: string) {\n if (workspace) {\n this.#cwd = workspace\n }\n\n return this\n }\n\n set workspace(workspace: string) {\n this.#cwd = workspace\n }\n\n get workspace(): string | undefined {\n return this.#cwd\n }\n\n normalizeDirectory(directory: string): string {\n if (!this.#SLASHES.has(directory[directory.length - 1]!)) {\n return `${directory}/`\n }\n\n return directory\n }\n\n getLocation(path: string): string {\n let location = path\n\n if (this.#cwd) {\n const require = mod.createRequire(this.normalizeDirectory(this.#cwd))\n location = require.resolve(path)\n }\n\n return location\n }\n\n async import(path: string): Promise<any | undefined> {\n try {\n let location = this.getLocation(path)\n\n if (os.platform() === 'win32') {\n location = pathToFileURL(location).href\n }\n\n const module = await import(location)\n\n return module?.default ?? module\n } catch (e) {\n console.error(e)\n return undefined\n }\n }\n\n async getPackageJSON(): Promise<PackageJSON | undefined> {\n const pkgPath = await findUp(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = await read(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n getPackageJSONSync(): PackageJSON | undefined {\n const pkgPath = findUpSync(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = readSync(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n static setVersion(dependency: DependencyName, version: DependencyVersion): void {\n PackageManager.#cache[dependency] = version\n }\n\n #match(packageJSON: PackageJSON, dependency: DependencyName | RegExp): string | undefined {\n const dependencies = {\n ...(packageJSON['dependencies'] || {}),\n ...(packageJSON['devDependencies'] || {}),\n }\n\n if (typeof dependency === 'string' && dependencies[dependency]) {\n return dependencies[dependency]\n }\n\n const matchedDependency = Object.keys(dependencies).find((dep) => dep.match(dependency))\n\n return matchedDependency ? dependencies[matchedDependency] : undefined\n }\n\n async getVersion(dependency: DependencyName | RegExp): Promise<DependencyVersion | undefined> {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = await this.getPackageJSON()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n getVersionSync(dependency: DependencyName | RegExp): DependencyVersion | undefined {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = this.getPackageJSONSync()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n async isValid(dependency: DependencyName | RegExp, version: DependencyVersion): Promise<boolean> {\n const packageVersion = await this.getVersion(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n throw new Error(`${packageVersion} is not valid`)\n }\n\n return satisfies(semVer, version)\n }\n isValidSync(dependency: DependencyName | RegExp, version: DependencyVersion): boolean {\n const packageVersion = this.getVersionSync(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (version === 'next' && packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n return false\n }\n\n return satisfies(semVer, version)\n }\n}\n"],"x_google_ignoreList":[7,8,9,10,11],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["#context","#options","fs","path","reader","fs","path","syncReader","fs","path","createLogger","pc","URLPath","definedConfig: Config","fsPlugin","typescriptParser","PluginManager","rootFile: KubbFile.File","getRelativePath","files","write","build","Queue","resolve","toPath","process","fsPromises","path","fs","path","#cache","#cwd","#SLASHES","path","mod","os","module","#match"],"sources":["../src/BaseGenerator.ts","../src/config.ts","../src/fs/clean.ts","../src/fs/exists.ts","../src/fs/read.ts","../src/build.ts","../src/definePlugin.ts","../../../node_modules/.pnpm/p-limit@4.0.0/node_modules/p-limit/index.js","../../../node_modules/.pnpm/p-locate@6.0.0/node_modules/p-locate/index.js","../../../node_modules/.pnpm/locate-path@7.2.0/node_modules/locate-path/index.js","../../../node_modules/.pnpm/unicorn-magic@0.1.0/node_modules/unicorn-magic/node.js","../../../node_modules/.pnpm/find-up@7.0.0/node_modules/find-up/index.js","../src/PackageManager.ts"],"sourcesContent":["/**\n * Abstract class that contains the building blocks for plugins to create their own Generator\n * @link idea based on https://github.com/colinhacks/zod/blob/master/src/types.ts#L137\n */\nexport abstract class BaseGenerator<TOptions = unknown, TContext = unknown> {\n #options: TOptions = {} as TOptions\n #context: TContext = {} as TContext\n\n constructor(options?: TOptions, context?: TContext) {\n if (context) {\n this.#context = context\n }\n\n if (options) {\n this.#options = options\n }\n\n return this\n }\n\n get options(): TOptions {\n return this.#options\n }\n\n get context(): TContext {\n return this.#context\n }\n\n set options(options: TOptions) {\n this.#options = { ...this.#options, ...options }\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import type { InputPath, UserConfig } from './types.ts'\nimport type { PossiblePromise } from './utils/types.ts'\n\n/**\n * CLI options derived from command-line flags.\n */\nexport type CLIOptions = {\n /** Path to `kubb.config.js` */\n config?: string\n\n /** Enable watch mode for input files */\n watch?: boolean\n\n /**\n * Logging verbosity for CLI usage.\n *\n * - `silent`: hide non-essential logs\n * - `info`: show general logs (non-plugin-related)\n * - `debug`: include detailed plugin lifecycle logs\n * @default 'silent'\n */\n logLevel?: 'silent' | 'info' | 'debug'\n\n /** Run Kubb with Bun */\n bun?: boolean\n}\n\n/**\n * Helper for defining a Kubb configuration.\n *\n * Accepts either:\n * - A config object or array of configs\n * - A function returning the config(s), optionally async,\n * receiving the CLI options as argument\n *\n * @example\n * export default defineConfig(({ logLevel }) => ({\n * root: 'src',\n * plugins: [myPlugin()],\n * }))\n */\nexport function defineConfig(\n config: PossiblePromise<UserConfig | UserConfig[]> | ((cli: CLIOptions) => PossiblePromise<UserConfig | UserConfig[]>),\n): typeof config {\n return config\n}\n\n/**\n * Type guard to check if a given config has an `input.path`.\n */\nexport function isInputPath(config: UserConfig | undefined): config is UserConfig<InputPath> {\n return typeof config?.input === 'object' && config.input !== null && 'path' in config.input\n}\n","import fs from 'fs-extra'\n\nexport async function clean(path: string): Promise<void> {\n return fs.remove(path)\n}\n","import fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.pathExists(path)\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.exists()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.pathExistsSync(path)\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function exists(path: string): Promise<boolean> {\n return reader(path)\n}\n\nexport function existsSync(path: string): boolean {\n return syncReader(path)\n}\n","import fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.readFile(path, { encoding: 'utf8' })\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.text()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.readFileSync(path, { encoding: 'utf8' })\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function read(path: string): Promise<string> {\n return reader(path)\n}\n\nexport function readSync(path: string): string {\n return syncReader(path)\n}\n","import { join, relative, resolve } from 'node:path'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport type { Fabric } from '@kubb/react-fabric'\nimport { createFabric } from '@kubb/react-fabric'\nimport { typescriptParser } from '@kubb/react-fabric/parsers'\nimport { fsPlugin } from '@kubb/react-fabric/plugins'\nimport pc from 'picocolors'\nimport { isDeepEqual } from 'remeda'\nimport { isInputPath } from './config.ts'\nimport { clean, exists, getRelativePath, write } from './fs/index.ts'\nimport type { Logger } from './logger.ts'\nimport { createLogger } from './logger.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport type { Config, Output, Plugin, UserConfig } from './types.ts'\nimport { URLPath } from './utils/URLPath.ts'\n\ntype BuildOptions = {\n config: UserConfig\n /**\n * @default Logger without the spinner\n */\n logger?: Logger\n}\n\ntype BuildOutput = {\n failedPlugins: Set<{ plugin: Plugin; error: Error }>\n fabric: Fabric\n files: Array<KubbFile.ResolvedFile>\n pluginManager: PluginManager\n // TODO check if we can remove error\n /**\n * Only for safeBuild,\n * @deprecated\n */\n error?: Error\n}\n\ntype SetupResult = {\n fabric: Fabric\n pluginManager: PluginManager\n}\n\nexport async function setup(options: BuildOptions): Promise<SetupResult> {\n const { config: userConfig, logger = createLogger() } = options\n\n if (Array.isArray(userConfig.input)) {\n console.warn(pc.yellow('This feature is still under development — use with caution'))\n }\n\n try {\n if (isInputPath(userConfig) && !new URLPath(userConfig.input.path).isURL) {\n await exists(userConfig.input.path)\n }\n } catch (e) {\n if (isInputPath(userConfig)) {\n throw new Error(\n `Cannot read file/URL defined in \\`input.path\\` or set with \\`kubb generate PATH\\` in the CLI of your Kubb config ${userConfig.input.path}`,\n {\n cause: e,\n },\n )\n }\n }\n\n const definedConfig: Config = {\n root: userConfig.root || process.cwd(),\n ...userConfig,\n output: {\n write: true,\n barrelType: 'named',\n extension: {\n '.ts': '.ts',\n },\n defaultBanner: 'simple',\n ...userConfig.output,\n },\n plugins: userConfig.plugins as Config['plugins'],\n }\n\n if (definedConfig.output.clean) {\n await clean(definedConfig.output.path)\n await clean(join(definedConfig.root, '.kubb'))\n }\n\n const fabric = createFabric()\n fabric.use(fsPlugin, { dryRun: !definedConfig.output.write })\n fabric.use(typescriptParser)\n\n const pluginManager = new PluginManager(definedConfig, { fabric, logger, concurrency: 5 })\n\n return {\n fabric,\n pluginManager,\n }\n}\n\nexport async function build(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {\n const { fabric, files, pluginManager, failedPlugins, error } = await safeBuild(options, overrides)\n\n if (error) {\n throw error\n }\n\n return {\n failedPlugins,\n fabric,\n files,\n pluginManager,\n error,\n }\n}\n\nexport async function safeBuild(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {\n const { fabric, pluginManager } = overrides ? overrides : await setup(options)\n\n const failedPlugins = new Set<{ plugin: Plugin; error: Error }>()\n const config = pluginManager.config\n\n try {\n for (const plugin of pluginManager.plugins) {\n const context = pluginManager.getContext(plugin)\n\n const installer = plugin.install.bind(context)\n\n try {\n await installer(context)\n } catch (e) {\n failedPlugins.add({ plugin, error: e as Error })\n }\n }\n\n if (config.output.barrelType) {\n const root = resolve(config.root)\n const rootPath = resolve(root, config.output.path, 'index.ts')\n\n const barrelFiles = fabric.files.filter((file) => {\n return file.sources.some((source) => source.isIndexable)\n })\n\n const rootFile: KubbFile.File = {\n path: rootPath,\n baseName: 'index.ts',\n exports: barrelFiles\n .flatMap((file) => {\n const containsOnlyTypes = file.sources?.every((source) => source.isTypeOnly)\n\n return file.sources\n ?.map((source) => {\n if (!file.path || !source.isIndexable) {\n return undefined\n }\n\n // validate of the file is coming from plugin x, needs pluginKey on every file TODO update typing\n const plugin = [...pluginManager.plugins].find((item) => {\n const meta = file.meta as any\n return isDeepEqual(item.key, meta?.pluginKey)\n })\n const pluginOptions = plugin?.options as { output?: Output<any> }\n\n if (!pluginOptions || pluginOptions?.output?.barrelType === false) {\n return undefined\n }\n\n return {\n name: config.output.barrelType === 'all' ? undefined : [source.name],\n path: getRelativePath(rootPath, file.path),\n isTypeOnly: config.output.barrelType === 'all' ? containsOnlyTypes : source.isTypeOnly,\n } as KubbFile.Export\n })\n .filter(Boolean)\n })\n .filter(Boolean),\n sources: [],\n meta: {},\n }\n\n await fabric.upsertFile(rootFile)\n }\n\n fabric.context.on('process:start', ({ files }) => {\n pluginManager.logger.emit('progress_start', { id: 'files', size: files.length, message: 'Writing files ...' })\n })\n\n fabric.context.on('process:progress', async ({ file, source }) => {\n const message = file ? `Writing ${relative(config.root, file.path)}` : ''\n pluginManager.logger.emit('progressed', { id: 'files', message })\n\n if (source) {\n await write(file.path, source, { sanity: false })\n }\n })\n\n fabric.context.on('process:end', () => {\n pluginManager.logger.emit('progress_stop', { id: 'files' })\n })\n const files = [...fabric.files]\n\n await fabric.write({ extension: config.output.extension })\n\n return {\n failedPlugins,\n fabric,\n files,\n pluginManager,\n }\n } catch (e) {\n return {\n failedPlugins,\n fabric,\n files: [],\n pluginManager,\n error: e as Error,\n }\n }\n}\n","import type { PluginFactoryOptions, UserPluginWithLifeCycle } from './types.ts'\n\ntype PluginBuilder<T extends PluginFactoryOptions = PluginFactoryOptions> = (options: T['options']) => UserPluginWithLifeCycle<T>\n\n/**\n * Wraps a plugin builder to make the options parameter optional.\n */\nexport function definePlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(\n build: PluginBuilder<T>,\n): (options?: T['options']) => UserPluginWithLifeCycle<T> {\n return (options) => build(options ?? ({} as T['options']))\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","import pLimit from 'p-limit';\n\nclass EndError extends Error {\n\tconstructor(value) {\n\t\tsuper();\n\t\tthis.value = value;\n\t}\n}\n\n// The input can also be a promise, so we await it.\nconst testElement = async (element, tester) => tester(await element);\n\n// The input can also be a promise, so we `Promise.all()` them both.\nconst finder = async element => {\n\tconst values = await Promise.all(element);\n\tif (values[1] === true) {\n\t\tthrow new EndError(values[0]);\n\t}\n\n\treturn false;\n};\n\nexport default async function pLocate(\n\titerable,\n\ttester,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tpreserveOrder = true,\n\t} = {},\n) {\n\tconst limit = pLimit(concurrency);\n\n\t// Start all the promises concurrently with optional limit.\n\tconst items = [...iterable].map(element => [element, limit(testElement, element, tester)]);\n\n\t// Check the promises either serially or concurrently.\n\tconst checkLimit = pLimit(preserveOrder ? 1 : Number.POSITIVE_INFINITY);\n\n\ttry {\n\t\tawait Promise.all(items.map(element => checkLimit(finder, element)));\n\t} catch (error) {\n\t\tif (error instanceof EndError) {\n\t\t\treturn error.value;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n","import process from 'node:process';\nimport path from 'node:path';\nimport fs, {promises as fsPromises} from 'node:fs';\nimport {fileURLToPath} from 'node:url';\nimport pLocate from 'p-locate';\n\nconst typeMappings = {\n\tdirectory: 'isDirectory',\n\tfile: 'isFile',\n};\n\nfunction checkType(type) {\n\tif (Object.hasOwnProperty.call(typeMappings, type)) {\n\t\treturn;\n\t}\n\n\tthrow new Error(`Invalid type specified: ${type}`);\n}\n\nconst matchType = (type, stat) => stat[typeMappings[type]]();\n\nconst toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nexport async function locatePath(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t\tconcurrency,\n\t\tpreserveOrder,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fsPromises.stat : fsPromises.lstat;\n\n\treturn pLocate(paths, async path_ => {\n\t\ttry {\n\t\t\tconst stat = await statFunction(path.resolve(cwd, path_));\n\t\t\treturn matchType(type, stat);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}, {concurrency, preserveOrder});\n}\n\nexport function locatePathSync(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fs.statSync : fs.lstatSync;\n\n\tfor (const path_ of paths) {\n\t\ttry {\n\t\t\tconst stat = statFunction(path.resolve(cwd, path_), {\n\t\t\t\tthrowIfNoEntry: false,\n\t\t\t});\n\n\t\t\tif (!stat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (matchType(type, stat)) {\n\t\t\t\treturn path_;\n\t\t\t}\n\t\t} catch {}\n\t}\n}\n","import {fileURLToPath} from 'node:url';\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport * from './default.js';\n","import path from 'node:path';\nimport {locatePath, locatePathSync} from 'locate-path';\nimport {toPath} from 'unicorn-magic';\n\nexport const findUpStop = Symbol('findUpStop');\n\nexport async function findUpMultiple(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt ?? root));\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = async locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePath(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = await name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePath([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst foundPath = await runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport function findUpMultipleSync(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt) ?? root);\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePathSync(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePathSync([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\tconst foundPath = runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport async function findUp(name, options = {}) {\n\tconst matches = await findUpMultiple(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport function findUpSync(name, options = {}) {\n\tconst matches = findUpMultipleSync(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport {\n\tpathExists,\n\tpathExistsSync,\n} from 'path-exists';\n","import mod from 'node:module'\nimport os from 'node:os'\nimport { pathToFileURL } from 'node:url'\n\nimport { findUp, findUpSync } from 'find-up'\nimport { coerce, satisfies } from 'semver'\n\nimport { read, readSync } from './fs/index.ts'\n\ntype PackageJSON = {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n}\n\ntype DependencyName = string\n\ntype DependencyVersion = string\n\nexport class PackageManager {\n static #cache: Record<DependencyName, DependencyVersion> = {}\n\n #cwd?: string\n #SLASHES = new Set(['/', '\\\\'])\n constructor(workspace?: string) {\n if (workspace) {\n this.#cwd = workspace\n }\n\n return this\n }\n\n set workspace(workspace: string) {\n this.#cwd = workspace\n }\n\n get workspace(): string | undefined {\n return this.#cwd\n }\n\n normalizeDirectory(directory: string): string {\n if (!this.#SLASHES.has(directory[directory.length - 1]!)) {\n return `${directory}/`\n }\n\n return directory\n }\n\n getLocation(path: string): string {\n let location = path\n\n if (this.#cwd) {\n const require = mod.createRequire(this.normalizeDirectory(this.#cwd))\n location = require.resolve(path)\n }\n\n return location\n }\n\n async import(path: string): Promise<any | undefined> {\n try {\n let location = this.getLocation(path)\n\n if (os.platform() === 'win32') {\n location = pathToFileURL(location).href\n }\n\n const module = await import(location)\n\n return module?.default ?? module\n } catch (e) {\n console.error(e)\n return undefined\n }\n }\n\n async getPackageJSON(): Promise<PackageJSON | undefined> {\n const pkgPath = await findUp(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = await read(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n getPackageJSONSync(): PackageJSON | undefined {\n const pkgPath = findUpSync(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = readSync(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n static setVersion(dependency: DependencyName, version: DependencyVersion): void {\n PackageManager.#cache[dependency] = version\n }\n\n #match(packageJSON: PackageJSON, dependency: DependencyName | RegExp): string | undefined {\n const dependencies = {\n ...(packageJSON['dependencies'] || {}),\n ...(packageJSON['devDependencies'] || {}),\n }\n\n if (typeof dependency === 'string' && dependencies[dependency]) {\n return dependencies[dependency]\n }\n\n const matchedDependency = Object.keys(dependencies).find((dep) => dep.match(dependency))\n\n return matchedDependency ? dependencies[matchedDependency] : undefined\n }\n\n async getVersion(dependency: DependencyName | RegExp): Promise<DependencyVersion | undefined> {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = await this.getPackageJSON()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n getVersionSync(dependency: DependencyName | RegExp): DependencyVersion | undefined {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = this.getPackageJSONSync()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n async isValid(dependency: DependencyName | RegExp, version: DependencyVersion): Promise<boolean> {\n const packageVersion = await this.getVersion(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n throw new Error(`${packageVersion} is not valid`)\n }\n\n return satisfies(semVer, version)\n }\n isValidSync(dependency: DependencyName | RegExp, version: DependencyVersion): boolean {\n const packageVersion = this.getVersionSync(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (version === 'next' && packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n return false\n }\n\n return satisfies(semVer, version)\n }\n}\n"],"x_google_ignoreList":[7,8,9,10,11],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { n as Logger } from "./logger-BJDkLsF0.cjs";
2
- import { C as getMode, S as PluginManager, _ as ResolvePathParams, a as InputData, b as UserPluginWithLifeCycle, c as Plugin, d as PluginKey, f as PluginLifecycle, g as ResolveNameParams, h as PluginWithLifeCycle, i as Group, l as PluginContext, m as PluginParameter, n as Config, o as InputPath, p as PluginLifecycleHooks, r as GetPluginFactoryOptions, s as Output, t as BarrelType, u as PluginFactoryOptions, v as UserConfig, x as PossiblePromise, y as UserPlugin } from "./types-D5svukc1.cjs";
3
- import { n as getBarrelFiles, t as FileMetaBase } from "./getBarrelFiles-CQ6mFiyN.cjs";
2
+ import { C as getMode, S as PluginManager, _ as ResolvePathParams, a as InputData, b as UserPluginWithLifeCycle, c as Plugin, d as PluginKey, f as PluginLifecycle, g as ResolveNameParams, h as PluginWithLifeCycle, i as Group, l as PluginContext, m as PluginParameter, n as Config, o as InputPath, p as PluginLifecycleHooks, r as GetPluginFactoryOptions, s as Output, t as BarrelType, u as PluginFactoryOptions, v as UserConfig, x as PossiblePromise, y as UserPlugin } from "./types-tSSA1oz8.cjs";
3
+ import { n as getBarrelFiles, t as FileMetaBase } from "./getBarrelFiles-BVMBhc50.cjs";
4
4
  import { KubbFile } from "@kubb/fabric-core/types";
5
5
  import { Fabric } from "@kubb/react-fabric";
6
6
 
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { n as Logger } from "./logger-C96jDrSt.js";
2
- import { C as getMode, S as PluginManager, _ as ResolvePathParams, a as InputData, b as UserPluginWithLifeCycle, c as Plugin, d as PluginKey, f as PluginLifecycle, g as ResolveNameParams, h as PluginWithLifeCycle, i as Group, l as PluginContext, m as PluginParameter, n as Config, o as InputPath, p as PluginLifecycleHooks, r as GetPluginFactoryOptions, s as Output, t as BarrelType, u as PluginFactoryOptions, v as UserConfig, x as PossiblePromise, y as UserPlugin } from "./types-C9_e7Xu8.js";
3
- import { n as getBarrelFiles, t as FileMetaBase } from "./getBarrelFiles-CI9xyXD3.js";
2
+ import { C as getMode, S as PluginManager, _ as ResolvePathParams, a as InputData, b as UserPluginWithLifeCycle, c as Plugin, d as PluginKey, f as PluginLifecycle, g as ResolveNameParams, h as PluginWithLifeCycle, i as Group, l as PluginContext, m as PluginParameter, n as Config, o as InputPath, p as PluginLifecycleHooks, r as GetPluginFactoryOptions, s as Output, t as BarrelType, u as PluginFactoryOptions, v as UserConfig, x as PossiblePromise, y as UserPlugin } from "./types-69-evK37.js";
3
+ import { n as getBarrelFiles, t as FileMetaBase } from "./getBarrelFiles-DjQ68d4e.js";
4
4
  import { Fabric } from "@kubb/react-fabric";
5
5
  import { KubbFile } from "@kubb/fabric-core/types";
6
6
 
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { c as Queue, i as getMode, l as getRelativePath, n as URLPath, r as PluginManager, s as PromiseManager, t as getBarrelFiles } from "./getBarrelFiles-DjZ5WaX_.js";
1
+ import { c as Queue, i as getMode, l as getRelativePath, n as URLPath, r as PluginManager, s as PromiseManager, t as getBarrelFiles } from "./getBarrelFiles-a-GlnjYa.js";
2
2
  import { a as write, n as createLogger } from "./logger-DIA19Yfz.js";
3
3
  import "./EventEmitter-DlzW04T3.js";
4
4
  import "./transformers-CjdbeLAK.js";
@@ -215,7 +215,7 @@ async function safeBuild(options, overrides) {
215
215
  sources: [],
216
216
  meta: {}
217
217
  };
218
- await fabric.addFile(rootFile);
218
+ await fabric.upsertFile(rootFile);
219
219
  }
220
220
  fabric.context.on("process:start", ({ files: files$1 }) => {
221
221
  pluginManager.logger.emit("progress_start", {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["#context","#options","path","reader","path","syncReader","path","definedConfig: Config","rootFile: KubbFile.File","files","build","resolve","toPath","process","fsPromises","fs","#cache","#cwd","#SLASHES","path","#match"],"sources":["../src/BaseGenerator.ts","../src/config.ts","../src/fs/clean.ts","../src/fs/exists.ts","../src/fs/read.ts","../src/build.ts","../src/definePlugin.ts","../../../node_modules/.pnpm/p-limit@4.0.0/node_modules/p-limit/index.js","../../../node_modules/.pnpm/p-locate@6.0.0/node_modules/p-locate/index.js","../../../node_modules/.pnpm/locate-path@7.2.0/node_modules/locate-path/index.js","../../../node_modules/.pnpm/unicorn-magic@0.1.0/node_modules/unicorn-magic/node.js","../../../node_modules/.pnpm/find-up@7.0.0/node_modules/find-up/index.js","../src/PackageManager.ts"],"sourcesContent":["/**\n * Abstract class that contains the building blocks for plugins to create their own Generator\n * @link idea based on https://github.com/colinhacks/zod/blob/master/src/types.ts#L137\n */\nexport abstract class BaseGenerator<TOptions = unknown, TContext = unknown> {\n #options: TOptions = {} as TOptions\n #context: TContext = {} as TContext\n\n constructor(options?: TOptions, context?: TContext) {\n if (context) {\n this.#context = context\n }\n\n if (options) {\n this.#options = options\n }\n\n return this\n }\n\n get options(): TOptions {\n return this.#options\n }\n\n get context(): TContext {\n return this.#context\n }\n\n set options(options: TOptions) {\n this.#options = { ...this.#options, ...options }\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import type { InputPath, UserConfig } from './types.ts'\nimport type { PossiblePromise } from './utils/types.ts'\n\n/**\n * CLI options derived from command-line flags.\n */\nexport type CLIOptions = {\n /** Path to `kubb.config.js` */\n config?: string\n\n /** Enable watch mode for input files */\n watch?: boolean\n\n /**\n * Logging verbosity for CLI usage.\n *\n * - `silent`: hide non-essential logs\n * - `info`: show general logs (non-plugin-related)\n * - `debug`: include detailed plugin lifecycle logs\n * @default 'silent'\n */\n logLevel?: 'silent' | 'info' | 'debug'\n\n /** Run Kubb with Bun */\n bun?: boolean\n}\n\n/**\n * Helper for defining a Kubb configuration.\n *\n * Accepts either:\n * - A config object or array of configs\n * - A function returning the config(s), optionally async,\n * receiving the CLI options as argument\n *\n * @example\n * export default defineConfig(({ logLevel }) => ({\n * root: 'src',\n * plugins: [myPlugin()],\n * }))\n */\nexport function defineConfig(\n config: PossiblePromise<UserConfig | UserConfig[]> | ((cli: CLIOptions) => PossiblePromise<UserConfig | UserConfig[]>),\n): typeof config {\n return config\n}\n\n/**\n * Type guard to check if a given config has an `input.path`.\n */\nexport function isInputPath(config: UserConfig | undefined): config is UserConfig<InputPath> {\n return typeof config?.input === 'object' && config.input !== null && 'path' in config.input\n}\n","import fs from 'fs-extra'\n\nexport async function clean(path: string): Promise<void> {\n return fs.remove(path)\n}\n","import fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.pathExists(path)\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.exists()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.pathExistsSync(path)\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function exists(path: string): Promise<boolean> {\n return reader(path)\n}\n\nexport function existsSync(path: string): boolean {\n return syncReader(path)\n}\n","import fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.readFile(path, { encoding: 'utf8' })\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.text()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.readFileSync(path, { encoding: 'utf8' })\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function read(path: string): Promise<string> {\n return reader(path)\n}\n\nexport function readSync(path: string): string {\n return syncReader(path)\n}\n","import { join, relative, resolve } from 'node:path'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport type { Fabric } from '@kubb/react-fabric'\nimport { createFabric } from '@kubb/react-fabric'\nimport { typescriptParser } from '@kubb/react-fabric/parsers'\nimport { fsPlugin } from '@kubb/react-fabric/plugins'\nimport pc from 'picocolors'\nimport { isDeepEqual } from 'remeda'\nimport { isInputPath } from './config.ts'\nimport { clean, exists, getRelativePath, write } from './fs/index.ts'\nimport type { Logger } from './logger.ts'\nimport { createLogger } from './logger.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport type { Config, Output, Plugin, UserConfig } from './types.ts'\nimport { URLPath } from './utils/URLPath.ts'\n\ntype BuildOptions = {\n config: UserConfig\n /**\n * @default Logger without the spinner\n */\n logger?: Logger\n}\n\ntype BuildOutput = {\n failedPlugins: Set<{ plugin: Plugin; error: Error }>\n fabric: Fabric\n files: Array<KubbFile.ResolvedFile>\n pluginManager: PluginManager\n // TODO check if we can remove error\n /**\n * Only for safeBuild,\n * @deprecated\n */\n error?: Error\n}\n\ntype SetupResult = {\n fabric: Fabric\n pluginManager: PluginManager\n}\n\nexport async function setup(options: BuildOptions): Promise<SetupResult> {\n const { config: userConfig, logger = createLogger() } = options\n\n if (Array.isArray(userConfig.input)) {\n console.warn(pc.yellow('This feature is still under development — use with caution'))\n }\n\n try {\n if (isInputPath(userConfig) && !new URLPath(userConfig.input.path).isURL) {\n await exists(userConfig.input.path)\n }\n } catch (e) {\n if (isInputPath(userConfig)) {\n throw new Error(\n `Cannot read file/URL defined in \\`input.path\\` or set with \\`kubb generate PATH\\` in the CLI of your Kubb config ${userConfig.input.path}`,\n {\n cause: e,\n },\n )\n }\n }\n\n const definedConfig: Config = {\n root: userConfig.root || process.cwd(),\n ...userConfig,\n output: {\n write: true,\n barrelType: 'named',\n extension: {\n '.ts': '.ts',\n },\n defaultBanner: 'simple',\n ...userConfig.output,\n },\n plugins: userConfig.plugins as Config['plugins'],\n }\n\n if (definedConfig.output.clean) {\n await clean(definedConfig.output.path)\n await clean(join(definedConfig.root, '.kubb'))\n }\n\n const fabric = createFabric()\n fabric.use(fsPlugin, { dryRun: !definedConfig.output.write })\n fabric.use(typescriptParser)\n\n const pluginManager = new PluginManager(definedConfig, { fabric, logger, concurrency: 5 })\n\n return {\n fabric,\n pluginManager,\n }\n}\n\nexport async function build(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {\n const { fabric, files, pluginManager, failedPlugins, error } = await safeBuild(options, overrides)\n\n if (error) {\n throw error\n }\n\n return {\n failedPlugins,\n fabric,\n files,\n pluginManager,\n error,\n }\n}\n\nexport async function safeBuild(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {\n const { fabric, pluginManager } = overrides ? overrides : await setup(options)\n\n const failedPlugins = new Set<{ plugin: Plugin; error: Error }>()\n const config = pluginManager.config\n\n try {\n for (const plugin of pluginManager.plugins) {\n const context = pluginManager.getContext(plugin)\n\n const installer = plugin.install.bind(context)\n\n try {\n await installer(context)\n } catch (e) {\n failedPlugins.add({ plugin, error: e as Error })\n }\n }\n\n if (config.output.barrelType) {\n const root = resolve(config.root)\n const rootPath = resolve(root, config.output.path, 'index.ts')\n\n const barrelFiles = fabric.files.filter((file) => {\n return file.sources.some((source) => source.isIndexable)\n })\n\n const rootFile: KubbFile.File = {\n path: rootPath,\n baseName: 'index.ts',\n exports: barrelFiles\n .flatMap((file) => {\n const containsOnlyTypes = file.sources?.every((source) => source.isTypeOnly)\n\n return file.sources\n ?.map((source) => {\n if (!file.path || !source.isIndexable) {\n return undefined\n }\n\n // validate of the file is coming from plugin x, needs pluginKey on every file TODO update typing\n const plugin = [...pluginManager.plugins].find((item) => {\n const meta = file.meta as any\n return isDeepEqual(item.key, meta?.pluginKey)\n })\n const pluginOptions = plugin?.options as { output?: Output<any> }\n\n if (!pluginOptions || pluginOptions?.output?.barrelType === false) {\n return undefined\n }\n\n return {\n name: config.output.barrelType === 'all' ? undefined : [source.name],\n path: getRelativePath(rootPath, file.path),\n isTypeOnly: config.output.barrelType === 'all' ? containsOnlyTypes : source.isTypeOnly,\n } as KubbFile.Export\n })\n .filter(Boolean)\n })\n .filter(Boolean),\n sources: [],\n meta: {},\n }\n\n await fabric.addFile(rootFile)\n }\n\n fabric.context.on('process:start', ({ files }) => {\n pluginManager.logger.emit('progress_start', { id: 'files', size: files.length, message: 'Writing files ...' })\n })\n\n fabric.context.on('process:progress', async ({ file, source }) => {\n const message = file ? `Writing ${relative(config.root, file.path)}` : ''\n pluginManager.logger.emit('progressed', { id: 'files', message })\n\n if (source) {\n await write(file.path, source, { sanity: false })\n }\n })\n\n fabric.context.on('process:end', () => {\n pluginManager.logger.emit('progress_stop', { id: 'files' })\n })\n const files = [...fabric.files]\n\n await fabric.write({ extension: config.output.extension })\n\n return {\n failedPlugins,\n fabric,\n files,\n pluginManager,\n }\n } catch (e) {\n return {\n failedPlugins,\n fabric,\n files: [],\n pluginManager,\n error: e as Error,\n }\n }\n}\n","import type { PluginFactoryOptions, UserPluginWithLifeCycle } from './types.ts'\n\ntype PluginBuilder<T extends PluginFactoryOptions = PluginFactoryOptions> = (options: T['options']) => UserPluginWithLifeCycle<T>\n\n/**\n * Wraps a plugin builder to make the options parameter optional.\n */\nexport function definePlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(\n build: PluginBuilder<T>,\n): (options?: T['options']) => UserPluginWithLifeCycle<T> {\n return (options) => build(options ?? ({} as T['options']))\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","import pLimit from 'p-limit';\n\nclass EndError extends Error {\n\tconstructor(value) {\n\t\tsuper();\n\t\tthis.value = value;\n\t}\n}\n\n// The input can also be a promise, so we await it.\nconst testElement = async (element, tester) => tester(await element);\n\n// The input can also be a promise, so we `Promise.all()` them both.\nconst finder = async element => {\n\tconst values = await Promise.all(element);\n\tif (values[1] === true) {\n\t\tthrow new EndError(values[0]);\n\t}\n\n\treturn false;\n};\n\nexport default async function pLocate(\n\titerable,\n\ttester,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tpreserveOrder = true,\n\t} = {},\n) {\n\tconst limit = pLimit(concurrency);\n\n\t// Start all the promises concurrently with optional limit.\n\tconst items = [...iterable].map(element => [element, limit(testElement, element, tester)]);\n\n\t// Check the promises either serially or concurrently.\n\tconst checkLimit = pLimit(preserveOrder ? 1 : Number.POSITIVE_INFINITY);\n\n\ttry {\n\t\tawait Promise.all(items.map(element => checkLimit(finder, element)));\n\t} catch (error) {\n\t\tif (error instanceof EndError) {\n\t\t\treturn error.value;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n","import process from 'node:process';\nimport path from 'node:path';\nimport fs, {promises as fsPromises} from 'node:fs';\nimport {fileURLToPath} from 'node:url';\nimport pLocate from 'p-locate';\n\nconst typeMappings = {\n\tdirectory: 'isDirectory',\n\tfile: 'isFile',\n};\n\nfunction checkType(type) {\n\tif (Object.hasOwnProperty.call(typeMappings, type)) {\n\t\treturn;\n\t}\n\n\tthrow new Error(`Invalid type specified: ${type}`);\n}\n\nconst matchType = (type, stat) => stat[typeMappings[type]]();\n\nconst toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nexport async function locatePath(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t\tconcurrency,\n\t\tpreserveOrder,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fsPromises.stat : fsPromises.lstat;\n\n\treturn pLocate(paths, async path_ => {\n\t\ttry {\n\t\t\tconst stat = await statFunction(path.resolve(cwd, path_));\n\t\t\treturn matchType(type, stat);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}, {concurrency, preserveOrder});\n}\n\nexport function locatePathSync(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fs.statSync : fs.lstatSync;\n\n\tfor (const path_ of paths) {\n\t\ttry {\n\t\t\tconst stat = statFunction(path.resolve(cwd, path_), {\n\t\t\t\tthrowIfNoEntry: false,\n\t\t\t});\n\n\t\t\tif (!stat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (matchType(type, stat)) {\n\t\t\t\treturn path_;\n\t\t\t}\n\t\t} catch {}\n\t}\n}\n","import {fileURLToPath} from 'node:url';\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport * from './default.js';\n","import path from 'node:path';\nimport {locatePath, locatePathSync} from 'locate-path';\nimport {toPath} from 'unicorn-magic';\n\nexport const findUpStop = Symbol('findUpStop');\n\nexport async function findUpMultiple(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt ?? root));\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = async locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePath(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = await name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePath([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst foundPath = await runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport function findUpMultipleSync(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt) ?? root);\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePathSync(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePathSync([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\tconst foundPath = runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport async function findUp(name, options = {}) {\n\tconst matches = await findUpMultiple(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport function findUpSync(name, options = {}) {\n\tconst matches = findUpMultipleSync(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport {\n\tpathExists,\n\tpathExistsSync,\n} from 'path-exists';\n","import mod from 'node:module'\nimport os from 'node:os'\nimport { pathToFileURL } from 'node:url'\n\nimport { findUp, findUpSync } from 'find-up'\nimport { coerce, satisfies } from 'semver'\n\nimport { read, readSync } from './fs/index.ts'\n\ntype PackageJSON = {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n}\n\ntype DependencyName = string\n\ntype DependencyVersion = string\n\nexport class PackageManager {\n static #cache: Record<DependencyName, DependencyVersion> = {}\n\n #cwd?: string\n #SLASHES = new Set(['/', '\\\\'])\n constructor(workspace?: string) {\n if (workspace) {\n this.#cwd = workspace\n }\n\n return this\n }\n\n set workspace(workspace: string) {\n this.#cwd = workspace\n }\n\n get workspace(): string | undefined {\n return this.#cwd\n }\n\n normalizeDirectory(directory: string): string {\n if (!this.#SLASHES.has(directory[directory.length - 1]!)) {\n return `${directory}/`\n }\n\n return directory\n }\n\n getLocation(path: string): string {\n let location = path\n\n if (this.#cwd) {\n const require = mod.createRequire(this.normalizeDirectory(this.#cwd))\n location = require.resolve(path)\n }\n\n return location\n }\n\n async import(path: string): Promise<any | undefined> {\n try {\n let location = this.getLocation(path)\n\n if (os.platform() === 'win32') {\n location = pathToFileURL(location).href\n }\n\n const module = await import(location)\n\n return module?.default ?? module\n } catch (e) {\n console.error(e)\n return undefined\n }\n }\n\n async getPackageJSON(): Promise<PackageJSON | undefined> {\n const pkgPath = await findUp(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = await read(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n getPackageJSONSync(): PackageJSON | undefined {\n const pkgPath = findUpSync(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = readSync(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n static setVersion(dependency: DependencyName, version: DependencyVersion): void {\n PackageManager.#cache[dependency] = version\n }\n\n #match(packageJSON: PackageJSON, dependency: DependencyName | RegExp): string | undefined {\n const dependencies = {\n ...(packageJSON['dependencies'] || {}),\n ...(packageJSON['devDependencies'] || {}),\n }\n\n if (typeof dependency === 'string' && dependencies[dependency]) {\n return dependencies[dependency]\n }\n\n const matchedDependency = Object.keys(dependencies).find((dep) => dep.match(dependency))\n\n return matchedDependency ? dependencies[matchedDependency] : undefined\n }\n\n async getVersion(dependency: DependencyName | RegExp): Promise<DependencyVersion | undefined> {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = await this.getPackageJSON()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n getVersionSync(dependency: DependencyName | RegExp): DependencyVersion | undefined {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = this.getPackageJSONSync()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n async isValid(dependency: DependencyName | RegExp, version: DependencyVersion): Promise<boolean> {\n const packageVersion = await this.getVersion(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n throw new Error(`${packageVersion} is not valid`)\n }\n\n return satisfies(semVer, version)\n }\n isValidSync(dependency: DependencyName | RegExp, version: DependencyVersion): boolean {\n const packageVersion = this.getVersionSync(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (version === 'next' && packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n return false\n }\n\n return satisfies(semVer, version)\n }\n}\n"],"x_google_ignoreList":[7,8,9,10,11],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["#context","#options","path","reader","path","syncReader","path","definedConfig: Config","rootFile: KubbFile.File","files","build","resolve","toPath","process","fsPromises","fs","#cache","#cwd","#SLASHES","path","#match"],"sources":["../src/BaseGenerator.ts","../src/config.ts","../src/fs/clean.ts","../src/fs/exists.ts","../src/fs/read.ts","../src/build.ts","../src/definePlugin.ts","../../../node_modules/.pnpm/p-limit@4.0.0/node_modules/p-limit/index.js","../../../node_modules/.pnpm/p-locate@6.0.0/node_modules/p-locate/index.js","../../../node_modules/.pnpm/locate-path@7.2.0/node_modules/locate-path/index.js","../../../node_modules/.pnpm/unicorn-magic@0.1.0/node_modules/unicorn-magic/node.js","../../../node_modules/.pnpm/find-up@7.0.0/node_modules/find-up/index.js","../src/PackageManager.ts"],"sourcesContent":["/**\n * Abstract class that contains the building blocks for plugins to create their own Generator\n * @link idea based on https://github.com/colinhacks/zod/blob/master/src/types.ts#L137\n */\nexport abstract class BaseGenerator<TOptions = unknown, TContext = unknown> {\n #options: TOptions = {} as TOptions\n #context: TContext = {} as TContext\n\n constructor(options?: TOptions, context?: TContext) {\n if (context) {\n this.#context = context\n }\n\n if (options) {\n this.#options = options\n }\n\n return this\n }\n\n get options(): TOptions {\n return this.#options\n }\n\n get context(): TContext {\n return this.#context\n }\n\n set options(options: TOptions) {\n this.#options = { ...this.#options, ...options }\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import type { InputPath, UserConfig } from './types.ts'\nimport type { PossiblePromise } from './utils/types.ts'\n\n/**\n * CLI options derived from command-line flags.\n */\nexport type CLIOptions = {\n /** Path to `kubb.config.js` */\n config?: string\n\n /** Enable watch mode for input files */\n watch?: boolean\n\n /**\n * Logging verbosity for CLI usage.\n *\n * - `silent`: hide non-essential logs\n * - `info`: show general logs (non-plugin-related)\n * - `debug`: include detailed plugin lifecycle logs\n * @default 'silent'\n */\n logLevel?: 'silent' | 'info' | 'debug'\n\n /** Run Kubb with Bun */\n bun?: boolean\n}\n\n/**\n * Helper for defining a Kubb configuration.\n *\n * Accepts either:\n * - A config object or array of configs\n * - A function returning the config(s), optionally async,\n * receiving the CLI options as argument\n *\n * @example\n * export default defineConfig(({ logLevel }) => ({\n * root: 'src',\n * plugins: [myPlugin()],\n * }))\n */\nexport function defineConfig(\n config: PossiblePromise<UserConfig | UserConfig[]> | ((cli: CLIOptions) => PossiblePromise<UserConfig | UserConfig[]>),\n): typeof config {\n return config\n}\n\n/**\n * Type guard to check if a given config has an `input.path`.\n */\nexport function isInputPath(config: UserConfig | undefined): config is UserConfig<InputPath> {\n return typeof config?.input === 'object' && config.input !== null && 'path' in config.input\n}\n","import fs from 'fs-extra'\n\nexport async function clean(path: string): Promise<void> {\n return fs.remove(path)\n}\n","import fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.pathExists(path)\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.exists()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.pathExistsSync(path)\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function exists(path: string): Promise<boolean> {\n return reader(path)\n}\n\nexport function existsSync(path: string): boolean {\n return syncReader(path)\n}\n","import fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.readFile(path, { encoding: 'utf8' })\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.text()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.readFileSync(path, { encoding: 'utf8' })\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function read(path: string): Promise<string> {\n return reader(path)\n}\n\nexport function readSync(path: string): string {\n return syncReader(path)\n}\n","import { join, relative, resolve } from 'node:path'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport type { Fabric } from '@kubb/react-fabric'\nimport { createFabric } from '@kubb/react-fabric'\nimport { typescriptParser } from '@kubb/react-fabric/parsers'\nimport { fsPlugin } from '@kubb/react-fabric/plugins'\nimport pc from 'picocolors'\nimport { isDeepEqual } from 'remeda'\nimport { isInputPath } from './config.ts'\nimport { clean, exists, getRelativePath, write } from './fs/index.ts'\nimport type { Logger } from './logger.ts'\nimport { createLogger } from './logger.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport type { Config, Output, Plugin, UserConfig } from './types.ts'\nimport { URLPath } from './utils/URLPath.ts'\n\ntype BuildOptions = {\n config: UserConfig\n /**\n * @default Logger without the spinner\n */\n logger?: Logger\n}\n\ntype BuildOutput = {\n failedPlugins: Set<{ plugin: Plugin; error: Error }>\n fabric: Fabric\n files: Array<KubbFile.ResolvedFile>\n pluginManager: PluginManager\n // TODO check if we can remove error\n /**\n * Only for safeBuild,\n * @deprecated\n */\n error?: Error\n}\n\ntype SetupResult = {\n fabric: Fabric\n pluginManager: PluginManager\n}\n\nexport async function setup(options: BuildOptions): Promise<SetupResult> {\n const { config: userConfig, logger = createLogger() } = options\n\n if (Array.isArray(userConfig.input)) {\n console.warn(pc.yellow('This feature is still under development — use with caution'))\n }\n\n try {\n if (isInputPath(userConfig) && !new URLPath(userConfig.input.path).isURL) {\n await exists(userConfig.input.path)\n }\n } catch (e) {\n if (isInputPath(userConfig)) {\n throw new Error(\n `Cannot read file/URL defined in \\`input.path\\` or set with \\`kubb generate PATH\\` in the CLI of your Kubb config ${userConfig.input.path}`,\n {\n cause: e,\n },\n )\n }\n }\n\n const definedConfig: Config = {\n root: userConfig.root || process.cwd(),\n ...userConfig,\n output: {\n write: true,\n barrelType: 'named',\n extension: {\n '.ts': '.ts',\n },\n defaultBanner: 'simple',\n ...userConfig.output,\n },\n plugins: userConfig.plugins as Config['plugins'],\n }\n\n if (definedConfig.output.clean) {\n await clean(definedConfig.output.path)\n await clean(join(definedConfig.root, '.kubb'))\n }\n\n const fabric = createFabric()\n fabric.use(fsPlugin, { dryRun: !definedConfig.output.write })\n fabric.use(typescriptParser)\n\n const pluginManager = new PluginManager(definedConfig, { fabric, logger, concurrency: 5 })\n\n return {\n fabric,\n pluginManager,\n }\n}\n\nexport async function build(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {\n const { fabric, files, pluginManager, failedPlugins, error } = await safeBuild(options, overrides)\n\n if (error) {\n throw error\n }\n\n return {\n failedPlugins,\n fabric,\n files,\n pluginManager,\n error,\n }\n}\n\nexport async function safeBuild(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {\n const { fabric, pluginManager } = overrides ? overrides : await setup(options)\n\n const failedPlugins = new Set<{ plugin: Plugin; error: Error }>()\n const config = pluginManager.config\n\n try {\n for (const plugin of pluginManager.plugins) {\n const context = pluginManager.getContext(plugin)\n\n const installer = plugin.install.bind(context)\n\n try {\n await installer(context)\n } catch (e) {\n failedPlugins.add({ plugin, error: e as Error })\n }\n }\n\n if (config.output.barrelType) {\n const root = resolve(config.root)\n const rootPath = resolve(root, config.output.path, 'index.ts')\n\n const barrelFiles = fabric.files.filter((file) => {\n return file.sources.some((source) => source.isIndexable)\n })\n\n const rootFile: KubbFile.File = {\n path: rootPath,\n baseName: 'index.ts',\n exports: barrelFiles\n .flatMap((file) => {\n const containsOnlyTypes = file.sources?.every((source) => source.isTypeOnly)\n\n return file.sources\n ?.map((source) => {\n if (!file.path || !source.isIndexable) {\n return undefined\n }\n\n // validate of the file is coming from plugin x, needs pluginKey on every file TODO update typing\n const plugin = [...pluginManager.plugins].find((item) => {\n const meta = file.meta as any\n return isDeepEqual(item.key, meta?.pluginKey)\n })\n const pluginOptions = plugin?.options as { output?: Output<any> }\n\n if (!pluginOptions || pluginOptions?.output?.barrelType === false) {\n return undefined\n }\n\n return {\n name: config.output.barrelType === 'all' ? undefined : [source.name],\n path: getRelativePath(rootPath, file.path),\n isTypeOnly: config.output.barrelType === 'all' ? containsOnlyTypes : source.isTypeOnly,\n } as KubbFile.Export\n })\n .filter(Boolean)\n })\n .filter(Boolean),\n sources: [],\n meta: {},\n }\n\n await fabric.upsertFile(rootFile)\n }\n\n fabric.context.on('process:start', ({ files }) => {\n pluginManager.logger.emit('progress_start', { id: 'files', size: files.length, message: 'Writing files ...' })\n })\n\n fabric.context.on('process:progress', async ({ file, source }) => {\n const message = file ? `Writing ${relative(config.root, file.path)}` : ''\n pluginManager.logger.emit('progressed', { id: 'files', message })\n\n if (source) {\n await write(file.path, source, { sanity: false })\n }\n })\n\n fabric.context.on('process:end', () => {\n pluginManager.logger.emit('progress_stop', { id: 'files' })\n })\n const files = [...fabric.files]\n\n await fabric.write({ extension: config.output.extension })\n\n return {\n failedPlugins,\n fabric,\n files,\n pluginManager,\n }\n } catch (e) {\n return {\n failedPlugins,\n fabric,\n files: [],\n pluginManager,\n error: e as Error,\n }\n }\n}\n","import type { PluginFactoryOptions, UserPluginWithLifeCycle } from './types.ts'\n\ntype PluginBuilder<T extends PluginFactoryOptions = PluginFactoryOptions> = (options: T['options']) => UserPluginWithLifeCycle<T>\n\n/**\n * Wraps a plugin builder to make the options parameter optional.\n */\nexport function definePlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(\n build: PluginBuilder<T>,\n): (options?: T['options']) => UserPluginWithLifeCycle<T> {\n return (options) => build(options ?? ({} as T['options']))\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","import pLimit from 'p-limit';\n\nclass EndError extends Error {\n\tconstructor(value) {\n\t\tsuper();\n\t\tthis.value = value;\n\t}\n}\n\n// The input can also be a promise, so we await it.\nconst testElement = async (element, tester) => tester(await element);\n\n// The input can also be a promise, so we `Promise.all()` them both.\nconst finder = async element => {\n\tconst values = await Promise.all(element);\n\tif (values[1] === true) {\n\t\tthrow new EndError(values[0]);\n\t}\n\n\treturn false;\n};\n\nexport default async function pLocate(\n\titerable,\n\ttester,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tpreserveOrder = true,\n\t} = {},\n) {\n\tconst limit = pLimit(concurrency);\n\n\t// Start all the promises concurrently with optional limit.\n\tconst items = [...iterable].map(element => [element, limit(testElement, element, tester)]);\n\n\t// Check the promises either serially or concurrently.\n\tconst checkLimit = pLimit(preserveOrder ? 1 : Number.POSITIVE_INFINITY);\n\n\ttry {\n\t\tawait Promise.all(items.map(element => checkLimit(finder, element)));\n\t} catch (error) {\n\t\tif (error instanceof EndError) {\n\t\t\treturn error.value;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n","import process from 'node:process';\nimport path from 'node:path';\nimport fs, {promises as fsPromises} from 'node:fs';\nimport {fileURLToPath} from 'node:url';\nimport pLocate from 'p-locate';\n\nconst typeMappings = {\n\tdirectory: 'isDirectory',\n\tfile: 'isFile',\n};\n\nfunction checkType(type) {\n\tif (Object.hasOwnProperty.call(typeMappings, type)) {\n\t\treturn;\n\t}\n\n\tthrow new Error(`Invalid type specified: ${type}`);\n}\n\nconst matchType = (type, stat) => stat[typeMappings[type]]();\n\nconst toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nexport async function locatePath(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t\tconcurrency,\n\t\tpreserveOrder,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fsPromises.stat : fsPromises.lstat;\n\n\treturn pLocate(paths, async path_ => {\n\t\ttry {\n\t\t\tconst stat = await statFunction(path.resolve(cwd, path_));\n\t\t\treturn matchType(type, stat);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}, {concurrency, preserveOrder});\n}\n\nexport function locatePathSync(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fs.statSync : fs.lstatSync;\n\n\tfor (const path_ of paths) {\n\t\ttry {\n\t\t\tconst stat = statFunction(path.resolve(cwd, path_), {\n\t\t\t\tthrowIfNoEntry: false,\n\t\t\t});\n\n\t\t\tif (!stat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (matchType(type, stat)) {\n\t\t\t\treturn path_;\n\t\t\t}\n\t\t} catch {}\n\t}\n}\n","import {fileURLToPath} from 'node:url';\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport * from './default.js';\n","import path from 'node:path';\nimport {locatePath, locatePathSync} from 'locate-path';\nimport {toPath} from 'unicorn-magic';\n\nexport const findUpStop = Symbol('findUpStop');\n\nexport async function findUpMultiple(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt ?? root));\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = async locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePath(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = await name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePath([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst foundPath = await runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport function findUpMultipleSync(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt) ?? root);\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePathSync(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePathSync([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\tconst foundPath = runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport async function findUp(name, options = {}) {\n\tconst matches = await findUpMultiple(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport function findUpSync(name, options = {}) {\n\tconst matches = findUpMultipleSync(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport {\n\tpathExists,\n\tpathExistsSync,\n} from 'path-exists';\n","import mod from 'node:module'\nimport os from 'node:os'\nimport { pathToFileURL } from 'node:url'\n\nimport { findUp, findUpSync } from 'find-up'\nimport { coerce, satisfies } from 'semver'\n\nimport { read, readSync } from './fs/index.ts'\n\ntype PackageJSON = {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n}\n\ntype DependencyName = string\n\ntype DependencyVersion = string\n\nexport class PackageManager {\n static #cache: Record<DependencyName, DependencyVersion> = {}\n\n #cwd?: string\n #SLASHES = new Set(['/', '\\\\'])\n constructor(workspace?: string) {\n if (workspace) {\n this.#cwd = workspace\n }\n\n return this\n }\n\n set workspace(workspace: string) {\n this.#cwd = workspace\n }\n\n get workspace(): string | undefined {\n return this.#cwd\n }\n\n normalizeDirectory(directory: string): string {\n if (!this.#SLASHES.has(directory[directory.length - 1]!)) {\n return `${directory}/`\n }\n\n return directory\n }\n\n getLocation(path: string): string {\n let location = path\n\n if (this.#cwd) {\n const require = mod.createRequire(this.normalizeDirectory(this.#cwd))\n location = require.resolve(path)\n }\n\n return location\n }\n\n async import(path: string): Promise<any | undefined> {\n try {\n let location = this.getLocation(path)\n\n if (os.platform() === 'win32') {\n location = pathToFileURL(location).href\n }\n\n const module = await import(location)\n\n return module?.default ?? module\n } catch (e) {\n console.error(e)\n return undefined\n }\n }\n\n async getPackageJSON(): Promise<PackageJSON | undefined> {\n const pkgPath = await findUp(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = await read(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n getPackageJSONSync(): PackageJSON | undefined {\n const pkgPath = findUpSync(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = readSync(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n static setVersion(dependency: DependencyName, version: DependencyVersion): void {\n PackageManager.#cache[dependency] = version\n }\n\n #match(packageJSON: PackageJSON, dependency: DependencyName | RegExp): string | undefined {\n const dependencies = {\n ...(packageJSON['dependencies'] || {}),\n ...(packageJSON['devDependencies'] || {}),\n }\n\n if (typeof dependency === 'string' && dependencies[dependency]) {\n return dependencies[dependency]\n }\n\n const matchedDependency = Object.keys(dependencies).find((dep) => dep.match(dependency))\n\n return matchedDependency ? dependencies[matchedDependency] : undefined\n }\n\n async getVersion(dependency: DependencyName | RegExp): Promise<DependencyVersion | undefined> {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = await this.getPackageJSON()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n getVersionSync(dependency: DependencyName | RegExp): DependencyVersion | undefined {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = this.getPackageJSONSync()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n async isValid(dependency: DependencyName | RegExp, version: DependencyVersion): Promise<boolean> {\n const packageVersion = await this.getVersion(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n throw new Error(`${packageVersion} is not valid`)\n }\n\n return satisfies(semVer, version)\n }\n isValidSync(dependency: DependencyName | RegExp, version: DependencyVersion): boolean {\n const packageVersion = this.getVersionSync(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (version === 'next' && packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n return false\n }\n\n return satisfies(semVer, version)\n }\n}\n"],"x_google_ignoreList":[7,8,9,10,11],"mappings":"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"}
@@ -414,7 +414,14 @@ type PluginContext<TOptions extends PluginFactoryOptions = PluginFactoryOptions>
414
414
  fabric: Fabric;
415
415
  config: Config;
416
416
  pluginManager: PluginManager;
417
+ /**
418
+ * Only add when the file does not exist yet
419
+ */
417
420
  addFile: (...file: Array<KubbFile.File>) => Promise<void>;
421
+ /**
422
+ * merging multiple sources into the same output file
423
+ */
424
+ upsertFile: (...file: Array<KubbFile.File>) => Promise<void>;
418
425
  logger: Logger;
419
426
  mode: KubbFile.Mode;
420
427
  /**
@@ -459,4 +466,4 @@ type Group = {
459
466
  };
460
467
  //#endregion
461
468
  export { getMode as C, PluginManager as S, ResolvePathParams as _, InputData as a, UserPluginWithLifeCycle as b, Plugin as c, PluginKey as d, PluginLifecycle as f, ResolveNameParams as g, PluginWithLifeCycle as h, Group as i, PluginContext as l, PluginParameter as m, Config as n, InputPath as o, PluginLifecycleHooks as p, GetPluginFactoryOptions as r, Output as s, BarrelType as t, PluginFactoryOptions as u, UserConfig as v, PossiblePromise as x, UserPlugin as y };
462
- //# sourceMappingURL=types-C9_e7Xu8.d.ts.map
469
+ //# sourceMappingURL=types-69-evK37.d.ts.map
@@ -414,7 +414,14 @@ type PluginContext<TOptions extends PluginFactoryOptions = PluginFactoryOptions>
414
414
  fabric: Fabric;
415
415
  config: Config;
416
416
  pluginManager: PluginManager;
417
+ /**
418
+ * Only add when the file does not exist yet
419
+ */
417
420
  addFile: (...file: Array<KubbFile.File>) => Promise<void>;
421
+ /**
422
+ * merging multiple sources into the same output file
423
+ */
424
+ upsertFile: (...file: Array<KubbFile.File>) => Promise<void>;
418
425
  logger: Logger;
419
426
  mode: KubbFile.Mode;
420
427
  /**
@@ -459,4 +466,4 @@ type Group = {
459
466
  };
460
467
  //#endregion
461
468
  export { getMode as C, PluginManager as S, ResolvePathParams as _, InputData as a, UserPluginWithLifeCycle as b, Plugin as c, PluginKey as d, PluginLifecycle as f, ResolveNameParams as g, PluginWithLifeCycle as h, Group as i, PluginContext as l, PluginParameter as m, Config as n, InputPath as o, PluginLifecycleHooks as p, GetPluginFactoryOptions as r, Output as s, BarrelType as t, PluginFactoryOptions as u, UserConfig as v, PossiblePromise as x, UserPlugin as y };
462
- //# sourceMappingURL=types-D5svukc1.d.cts.map
469
+ //# sourceMappingURL=types-tSSA1oz8.d.cts.map
package/dist/utils.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-CbDLau6x.cjs');
2
- const require_getBarrelFiles = require('./getBarrelFiles-Oqpn6hU5.cjs');
2
+ const require_getBarrelFiles = require('./getBarrelFiles-BkDzzugQ.cjs');
3
3
  require('./EventEmitter-BwU6Ixxt.cjs');
4
4
  const require_transformers = require('./transformers-B-zCAPV-.cjs');
5
5
  let node_path = require("node:path");
@@ -165,9 +165,12 @@ function resolveModuleSource(pkgName) {
165
165
  //#region src/utils/timeout.ts
166
166
  async function timeout(ms) {
167
167
  return new Promise((resolve) => {
168
- setTimeout(() => {
169
- resolve(true);
168
+ const timeout$1 = setTimeout(() => {
169
+ resolve(timeout$1);
170
170
  }, ms);
171
+ }).then((timeout$1) => {
172
+ clearTimeout(timeout$1);
173
+ return true;
171
174
  });
172
175
  }
173
176
 
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","names":["#buffer","#items","#orderItems","#addParams","camelCase","type: string[]","name: string[]","item","path"],"sources":["../src/utils/Cache.ts","../src/utils/FunctionParams.ts","../src/utils/promise.ts","../src/utils/renderTemplate.ts","../src/utils/resolveModuleSource.ts","../src/utils/timeout.ts"],"sourcesContent":["export class Cache<T> {\n #buffer = new Map<string, T>()\n\n async get(key: string): Promise<T | null> {\n return this.#buffer.get(key) ?? null\n }\n\n async set(key: string, value: T): Promise<void> {\n this.#buffer.set(key, value)\n }\n\n async delete(key: string): Promise<void> {\n this.#buffer.delete(key)\n }\n\n async clear(): Promise<void> {\n this.#buffer.clear()\n }\n\n async keys(): Promise<string[]> {\n return [...this.#buffer.keys()]\n }\n\n async values(): Promise<T[]> {\n return [...this.#buffer.values()]\n }\n\n async flush(): Promise<void> {\n // No-op for base cache\n }\n}\n","import { orderBy } from 'natural-orderby'\n\nimport { camelCase } from '../transformers/casing.ts'\n\ntype FunctionParamsASTWithoutType = {\n name?: string\n type?: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n\ntype FunctionParamsASTWithType = {\n name?: never\n type: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n/**\n * @deprecated\n */\nexport type FunctionParamsAST = FunctionParamsASTWithoutType | FunctionParamsASTWithType\n\n/**\n * @deprecated\n */\nexport class FunctionParams {\n #items: Array<FunctionParamsAST | FunctionParamsAST[]> = []\n constructor() {\n return this\n }\n\n get items(): FunctionParamsAST[] {\n return this.#items.flat()\n }\n\n add(item: FunctionParamsAST | Array<FunctionParamsAST | FunctionParamsAST[] | undefined> | undefined): FunctionParams {\n if (!item) {\n return this\n }\n\n if (Array.isArray(item)) {\n item.filter(Boolean).forEach((it) => {\n this.#items.push(it)\n })\n return this\n }\n this.#items.push(item)\n\n return this\n }\n static #orderItems(items: Array<FunctionParamsAST | FunctionParamsAST[]>) {\n return orderBy(\n items.filter(Boolean),\n [\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return !v.default\n },\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return v.required ?? true\n },\n ],\n ['desc', 'desc'],\n )\n }\n\n static #addParams(acc: string[], item: FunctionParamsAST) {\n const { enabled = true, name, type, required = true, ...rest } = item\n\n if (!enabled) {\n return acc\n }\n\n if (!name) {\n // when name is not se we will use TypeScript generics\n acc.push(`${type}${rest.default ? ` = ${rest.default}` : ''}`)\n\n return acc\n }\n // TODO check whey we still need the camelcase here\n const parameterName = name.startsWith('{') ? name : camelCase(name)\n\n if (type) {\n if (required) {\n acc.push(`${parameterName}: ${type}${rest.default ? ` = ${rest.default}` : ''}`)\n } else {\n acc.push(`${parameterName}?: ${type}`)\n }\n } else {\n acc.push(`${parameterName}`)\n }\n\n return acc\n }\n\n static toObject(items: FunctionParamsAST[]): FunctionParamsAST {\n let type: string[] = []\n let name: string[] = []\n\n const enabled = items.every((item) => item.enabled) ? items.at(0)?.enabled : true\n const required = items.every((item) => item.required) ?? true\n\n items.forEach((item) => {\n name = FunctionParams.#addParams(name, { ...item, type: undefined })\n if (items.some((item) => item.type)) {\n type = FunctionParams.#addParams(type, item)\n }\n })\n\n return {\n name: `{ ${name.join(', ')} }`,\n type: type.length ? `{ ${type.join('; ')} }` : undefined,\n enabled,\n required,\n }\n }\n\n toObject(): FunctionParamsAST {\n const items = FunctionParams.#orderItems(this.#items).flat()\n\n return FunctionParams.toObject(items)\n }\n\n static toString(items: (FunctionParamsAST | FunctionParamsAST[])[]): string {\n const sortedData = FunctionParams.#orderItems(items)\n\n return sortedData\n .reduce((acc, item) => {\n if (Array.isArray(item)) {\n if (item.length <= 0) {\n return acc\n }\n const subItems = FunctionParams.#orderItems(item) as FunctionParamsAST[]\n const objectItem = FunctionParams.toObject(subItems)\n\n return FunctionParams.#addParams(acc, objectItem)\n }\n\n return FunctionParams.#addParams(acc, item)\n }, [] as string[])\n .join(', ')\n }\n\n toString(): string {\n const items = FunctionParams.#orderItems(this.#items)\n\n return FunctionParams.toString(items)\n }\n}\n","import type { PossiblePromise } from './types.ts'\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","export function renderTemplate<TData extends Record<string, unknown> = Record<string, unknown>>(template: string, data: TData | undefined = undefined): string {\n if (!data || !Object.keys(data).length) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n const matches = template.match(/{{(.*?)}}/g)\n\n return (\n matches?.reduce((prev, curr) => {\n const index = curr.split(/{{|}}/).filter(Boolean)[0]?.trim()\n if (index === undefined) {\n return prev\n }\n const value = data[index]\n\n if (value === undefined) {\n return prev\n }\n\n return prev\n .replace(curr, () => {\n if (typeof value === 'boolean') {\n return `${value.toString()}` || 'false'\n }\n\n return (value as string) || ''\n })\n .trim()\n }, template) || ''\n )\n}\n","import { readFileSync } from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport createJiti from 'jiti'\n\nexport function resolveModuleSource(pkgName: string) {\n const parentURL = import.meta.url\n const jiti = createJiti(parentURL)\n\n const resolved = jiti.esmResolve(pkgName, parentURL)\n const filePath = resolved.startsWith('file:') ? fileURLToPath(resolved) : resolved\n const source = readFileSync(filePath, { encoding: 'utf-8' })\n const ext = path.extname(filePath)\n return { path: filePath, source, ext } as const\n}\n","export async function timeout(ms: number): Promise<unknown> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utils.cjs","names":["#buffer","#items","#orderItems","#addParams","camelCase","type: string[]","name: string[]","item","path","timeout"],"sources":["../src/utils/Cache.ts","../src/utils/FunctionParams.ts","../src/utils/promise.ts","../src/utils/renderTemplate.ts","../src/utils/resolveModuleSource.ts","../src/utils/timeout.ts"],"sourcesContent":["export class Cache<T> {\n #buffer = new Map<string, T>()\n\n async get(key: string): Promise<T | null> {\n return this.#buffer.get(key) ?? null\n }\n\n async set(key: string, value: T): Promise<void> {\n this.#buffer.set(key, value)\n }\n\n async delete(key: string): Promise<void> {\n this.#buffer.delete(key)\n }\n\n async clear(): Promise<void> {\n this.#buffer.clear()\n }\n\n async keys(): Promise<string[]> {\n return [...this.#buffer.keys()]\n }\n\n async values(): Promise<T[]> {\n return [...this.#buffer.values()]\n }\n\n async flush(): Promise<void> {\n // No-op for base cache\n }\n}\n","import { orderBy } from 'natural-orderby'\n\nimport { camelCase } from '../transformers/casing.ts'\n\ntype FunctionParamsASTWithoutType = {\n name?: string\n type?: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n\ntype FunctionParamsASTWithType = {\n name?: never\n type: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n/**\n * @deprecated\n */\nexport type FunctionParamsAST = FunctionParamsASTWithoutType | FunctionParamsASTWithType\n\n/**\n * @deprecated\n */\nexport class FunctionParams {\n #items: Array<FunctionParamsAST | FunctionParamsAST[]> = []\n constructor() {\n return this\n }\n\n get items(): FunctionParamsAST[] {\n return this.#items.flat()\n }\n\n add(item: FunctionParamsAST | Array<FunctionParamsAST | FunctionParamsAST[] | undefined> | undefined): FunctionParams {\n if (!item) {\n return this\n }\n\n if (Array.isArray(item)) {\n item.filter(Boolean).forEach((it) => {\n this.#items.push(it)\n })\n return this\n }\n this.#items.push(item)\n\n return this\n }\n static #orderItems(items: Array<FunctionParamsAST | FunctionParamsAST[]>) {\n return orderBy(\n items.filter(Boolean),\n [\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return !v.default\n },\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return v.required ?? true\n },\n ],\n ['desc', 'desc'],\n )\n }\n\n static #addParams(acc: string[], item: FunctionParamsAST) {\n const { enabled = true, name, type, required = true, ...rest } = item\n\n if (!enabled) {\n return acc\n }\n\n if (!name) {\n // when name is not se we will use TypeScript generics\n acc.push(`${type}${rest.default ? ` = ${rest.default}` : ''}`)\n\n return acc\n }\n // TODO check whey we still need the camelcase here\n const parameterName = name.startsWith('{') ? name : camelCase(name)\n\n if (type) {\n if (required) {\n acc.push(`${parameterName}: ${type}${rest.default ? ` = ${rest.default}` : ''}`)\n } else {\n acc.push(`${parameterName}?: ${type}`)\n }\n } else {\n acc.push(`${parameterName}`)\n }\n\n return acc\n }\n\n static toObject(items: FunctionParamsAST[]): FunctionParamsAST {\n let type: string[] = []\n let name: string[] = []\n\n const enabled = items.every((item) => item.enabled) ? items.at(0)?.enabled : true\n const required = items.every((item) => item.required) ?? true\n\n items.forEach((item) => {\n name = FunctionParams.#addParams(name, { ...item, type: undefined })\n if (items.some((item) => item.type)) {\n type = FunctionParams.#addParams(type, item)\n }\n })\n\n return {\n name: `{ ${name.join(', ')} }`,\n type: type.length ? `{ ${type.join('; ')} }` : undefined,\n enabled,\n required,\n }\n }\n\n toObject(): FunctionParamsAST {\n const items = FunctionParams.#orderItems(this.#items).flat()\n\n return FunctionParams.toObject(items)\n }\n\n static toString(items: (FunctionParamsAST | FunctionParamsAST[])[]): string {\n const sortedData = FunctionParams.#orderItems(items)\n\n return sortedData\n .reduce((acc, item) => {\n if (Array.isArray(item)) {\n if (item.length <= 0) {\n return acc\n }\n const subItems = FunctionParams.#orderItems(item) as FunctionParamsAST[]\n const objectItem = FunctionParams.toObject(subItems)\n\n return FunctionParams.#addParams(acc, objectItem)\n }\n\n return FunctionParams.#addParams(acc, item)\n }, [] as string[])\n .join(', ')\n }\n\n toString(): string {\n const items = FunctionParams.#orderItems(this.#items)\n\n return FunctionParams.toString(items)\n }\n}\n","import type { PossiblePromise } from './types.ts'\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","export function renderTemplate<TData extends Record<string, unknown> = Record<string, unknown>>(template: string, data: TData | undefined = undefined): string {\n if (!data || !Object.keys(data).length) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n const matches = template.match(/{{(.*?)}}/g)\n\n return (\n matches?.reduce((prev, curr) => {\n const index = curr.split(/{{|}}/).filter(Boolean)[0]?.trim()\n if (index === undefined) {\n return prev\n }\n const value = data[index]\n\n if (value === undefined) {\n return prev\n }\n\n return prev\n .replace(curr, () => {\n if (typeof value === 'boolean') {\n return `${value.toString()}` || 'false'\n }\n\n return (value as string) || ''\n })\n .trim()\n }, template) || ''\n )\n}\n","import { readFileSync } from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport createJiti from 'jiti'\n\nexport function resolveModuleSource(pkgName: string) {\n const parentURL = import.meta.url\n const jiti = createJiti(parentURL)\n\n const resolved = jiti.esmResolve(pkgName, parentURL)\n const filePath = resolved.startsWith('file:') ? fileURLToPath(resolved) : resolved\n const source = readFileSync(filePath, { encoding: 'utf-8' })\n const ext = path.extname(filePath)\n return { path: filePath, source, ext } as const\n}\n","export async function timeout(ms: number): Promise<unknown> {\n return new Promise((resolve) => {\n const timeout = setTimeout(() => {\n resolve(timeout)\n }, ms)\n }).then((timeout) => {\n clearTimeout(timeout as NodeJS.Timeout)\n\n return true\n })\n}\n"],"mappings":"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"}
package/dist/utils.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./logger-BJDkLsF0.cjs";
2
- import { x as PossiblePromise } from "./types-D5svukc1.cjs";
3
- import { n as getBarrelFiles } from "./getBarrelFiles-CQ6mFiyN.cjs";
2
+ import { x as PossiblePromise } from "./types-tSSA1oz8.cjs";
3
+ import { n as getBarrelFiles } from "./getBarrelFiles-BVMBhc50.cjs";
4
4
 
5
5
  //#region src/utils/Cache.d.ts
6
6
  declare class Cache<T> {
package/dist/utils.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./logger-C96jDrSt.js";
2
- import { x as PossiblePromise } from "./types-C9_e7Xu8.js";
3
- import { n as getBarrelFiles } from "./getBarrelFiles-CI9xyXD3.js";
2
+ import { x as PossiblePromise } from "./types-69-evK37.js";
3
+ import { n as getBarrelFiles } from "./getBarrelFiles-DjQ68d4e.js";
4
4
 
5
5
  //#region src/utils/Cache.d.ts
6
6
  declare class Cache<T> {
package/dist/utils.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as getUniqueName, n as URLPath, o as setUniqueName, t as getBarrelFiles } from "./getBarrelFiles-DjZ5WaX_.js";
1
+ import { a as getUniqueName, n as URLPath, o as setUniqueName, t as getBarrelFiles } from "./getBarrelFiles-a-GlnjYa.js";
2
2
  import "./EventEmitter-DlzW04T3.js";
3
3
  import { m as camelCase } from "./transformers-CjdbeLAK.js";
4
4
  import path from "node:path";
@@ -162,9 +162,12 @@ function resolveModuleSource(pkgName) {
162
162
  //#region src/utils/timeout.ts
163
163
  async function timeout(ms) {
164
164
  return new Promise((resolve$1) => {
165
- setTimeout(() => {
166
- resolve$1(true);
165
+ const timeout$1 = setTimeout(() => {
166
+ resolve$1(timeout$1);
167
167
  }, ms);
168
+ }).then((timeout$1) => {
169
+ clearTimeout(timeout$1);
170
+ return true;
168
171
  });
169
172
  }
170
173
 
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["#buffer","#items","#orderItems","#addParams","type: string[]","name: string[]","item"],"sources":["../src/utils/Cache.ts","../src/utils/FunctionParams.ts","../src/utils/promise.ts","../src/utils/renderTemplate.ts","../src/utils/resolveModuleSource.ts","../src/utils/timeout.ts"],"sourcesContent":["export class Cache<T> {\n #buffer = new Map<string, T>()\n\n async get(key: string): Promise<T | null> {\n return this.#buffer.get(key) ?? null\n }\n\n async set(key: string, value: T): Promise<void> {\n this.#buffer.set(key, value)\n }\n\n async delete(key: string): Promise<void> {\n this.#buffer.delete(key)\n }\n\n async clear(): Promise<void> {\n this.#buffer.clear()\n }\n\n async keys(): Promise<string[]> {\n return [...this.#buffer.keys()]\n }\n\n async values(): Promise<T[]> {\n return [...this.#buffer.values()]\n }\n\n async flush(): Promise<void> {\n // No-op for base cache\n }\n}\n","import { orderBy } from 'natural-orderby'\n\nimport { camelCase } from '../transformers/casing.ts'\n\ntype FunctionParamsASTWithoutType = {\n name?: string\n type?: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n\ntype FunctionParamsASTWithType = {\n name?: never\n type: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n/**\n * @deprecated\n */\nexport type FunctionParamsAST = FunctionParamsASTWithoutType | FunctionParamsASTWithType\n\n/**\n * @deprecated\n */\nexport class FunctionParams {\n #items: Array<FunctionParamsAST | FunctionParamsAST[]> = []\n constructor() {\n return this\n }\n\n get items(): FunctionParamsAST[] {\n return this.#items.flat()\n }\n\n add(item: FunctionParamsAST | Array<FunctionParamsAST | FunctionParamsAST[] | undefined> | undefined): FunctionParams {\n if (!item) {\n return this\n }\n\n if (Array.isArray(item)) {\n item.filter(Boolean).forEach((it) => {\n this.#items.push(it)\n })\n return this\n }\n this.#items.push(item)\n\n return this\n }\n static #orderItems(items: Array<FunctionParamsAST | FunctionParamsAST[]>) {\n return orderBy(\n items.filter(Boolean),\n [\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return !v.default\n },\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return v.required ?? true\n },\n ],\n ['desc', 'desc'],\n )\n }\n\n static #addParams(acc: string[], item: FunctionParamsAST) {\n const { enabled = true, name, type, required = true, ...rest } = item\n\n if (!enabled) {\n return acc\n }\n\n if (!name) {\n // when name is not se we will use TypeScript generics\n acc.push(`${type}${rest.default ? ` = ${rest.default}` : ''}`)\n\n return acc\n }\n // TODO check whey we still need the camelcase here\n const parameterName = name.startsWith('{') ? name : camelCase(name)\n\n if (type) {\n if (required) {\n acc.push(`${parameterName}: ${type}${rest.default ? ` = ${rest.default}` : ''}`)\n } else {\n acc.push(`${parameterName}?: ${type}`)\n }\n } else {\n acc.push(`${parameterName}`)\n }\n\n return acc\n }\n\n static toObject(items: FunctionParamsAST[]): FunctionParamsAST {\n let type: string[] = []\n let name: string[] = []\n\n const enabled = items.every((item) => item.enabled) ? items.at(0)?.enabled : true\n const required = items.every((item) => item.required) ?? true\n\n items.forEach((item) => {\n name = FunctionParams.#addParams(name, { ...item, type: undefined })\n if (items.some((item) => item.type)) {\n type = FunctionParams.#addParams(type, item)\n }\n })\n\n return {\n name: `{ ${name.join(', ')} }`,\n type: type.length ? `{ ${type.join('; ')} }` : undefined,\n enabled,\n required,\n }\n }\n\n toObject(): FunctionParamsAST {\n const items = FunctionParams.#orderItems(this.#items).flat()\n\n return FunctionParams.toObject(items)\n }\n\n static toString(items: (FunctionParamsAST | FunctionParamsAST[])[]): string {\n const sortedData = FunctionParams.#orderItems(items)\n\n return sortedData\n .reduce((acc, item) => {\n if (Array.isArray(item)) {\n if (item.length <= 0) {\n return acc\n }\n const subItems = FunctionParams.#orderItems(item) as FunctionParamsAST[]\n const objectItem = FunctionParams.toObject(subItems)\n\n return FunctionParams.#addParams(acc, objectItem)\n }\n\n return FunctionParams.#addParams(acc, item)\n }, [] as string[])\n .join(', ')\n }\n\n toString(): string {\n const items = FunctionParams.#orderItems(this.#items)\n\n return FunctionParams.toString(items)\n }\n}\n","import type { PossiblePromise } from './types.ts'\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","export function renderTemplate<TData extends Record<string, unknown> = Record<string, unknown>>(template: string, data: TData | undefined = undefined): string {\n if (!data || !Object.keys(data).length) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n const matches = template.match(/{{(.*?)}}/g)\n\n return (\n matches?.reduce((prev, curr) => {\n const index = curr.split(/{{|}}/).filter(Boolean)[0]?.trim()\n if (index === undefined) {\n return prev\n }\n const value = data[index]\n\n if (value === undefined) {\n return prev\n }\n\n return prev\n .replace(curr, () => {\n if (typeof value === 'boolean') {\n return `${value.toString()}` || 'false'\n }\n\n return (value as string) || ''\n })\n .trim()\n }, template) || ''\n )\n}\n","import { readFileSync } from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport createJiti from 'jiti'\n\nexport function resolveModuleSource(pkgName: string) {\n const parentURL = import.meta.url\n const jiti = createJiti(parentURL)\n\n const resolved = jiti.esmResolve(pkgName, parentURL)\n const filePath = resolved.startsWith('file:') ? fileURLToPath(resolved) : resolved\n const source = readFileSync(filePath, { encoding: 'utf-8' })\n const ext = path.extname(filePath)\n return { path: filePath, source, ext } as const\n}\n","export async function timeout(ms: number): Promise<unknown> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","names":["#buffer","#items","#orderItems","#addParams","type: string[]","name: string[]","item","timeout"],"sources":["../src/utils/Cache.ts","../src/utils/FunctionParams.ts","../src/utils/promise.ts","../src/utils/renderTemplate.ts","../src/utils/resolveModuleSource.ts","../src/utils/timeout.ts"],"sourcesContent":["export class Cache<T> {\n #buffer = new Map<string, T>()\n\n async get(key: string): Promise<T | null> {\n return this.#buffer.get(key) ?? null\n }\n\n async set(key: string, value: T): Promise<void> {\n this.#buffer.set(key, value)\n }\n\n async delete(key: string): Promise<void> {\n this.#buffer.delete(key)\n }\n\n async clear(): Promise<void> {\n this.#buffer.clear()\n }\n\n async keys(): Promise<string[]> {\n return [...this.#buffer.keys()]\n }\n\n async values(): Promise<T[]> {\n return [...this.#buffer.values()]\n }\n\n async flush(): Promise<void> {\n // No-op for base cache\n }\n}\n","import { orderBy } from 'natural-orderby'\n\nimport { camelCase } from '../transformers/casing.ts'\n\ntype FunctionParamsASTWithoutType = {\n name?: string\n type?: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n\ntype FunctionParamsASTWithType = {\n name?: never\n type: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n/**\n * @deprecated\n */\nexport type FunctionParamsAST = FunctionParamsASTWithoutType | FunctionParamsASTWithType\n\n/**\n * @deprecated\n */\nexport class FunctionParams {\n #items: Array<FunctionParamsAST | FunctionParamsAST[]> = []\n constructor() {\n return this\n }\n\n get items(): FunctionParamsAST[] {\n return this.#items.flat()\n }\n\n add(item: FunctionParamsAST | Array<FunctionParamsAST | FunctionParamsAST[] | undefined> | undefined): FunctionParams {\n if (!item) {\n return this\n }\n\n if (Array.isArray(item)) {\n item.filter(Boolean).forEach((it) => {\n this.#items.push(it)\n })\n return this\n }\n this.#items.push(item)\n\n return this\n }\n static #orderItems(items: Array<FunctionParamsAST | FunctionParamsAST[]>) {\n return orderBy(\n items.filter(Boolean),\n [\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return !v.default\n },\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return v.required ?? true\n },\n ],\n ['desc', 'desc'],\n )\n }\n\n static #addParams(acc: string[], item: FunctionParamsAST) {\n const { enabled = true, name, type, required = true, ...rest } = item\n\n if (!enabled) {\n return acc\n }\n\n if (!name) {\n // when name is not se we will use TypeScript generics\n acc.push(`${type}${rest.default ? ` = ${rest.default}` : ''}`)\n\n return acc\n }\n // TODO check whey we still need the camelcase here\n const parameterName = name.startsWith('{') ? name : camelCase(name)\n\n if (type) {\n if (required) {\n acc.push(`${parameterName}: ${type}${rest.default ? ` = ${rest.default}` : ''}`)\n } else {\n acc.push(`${parameterName}?: ${type}`)\n }\n } else {\n acc.push(`${parameterName}`)\n }\n\n return acc\n }\n\n static toObject(items: FunctionParamsAST[]): FunctionParamsAST {\n let type: string[] = []\n let name: string[] = []\n\n const enabled = items.every((item) => item.enabled) ? items.at(0)?.enabled : true\n const required = items.every((item) => item.required) ?? true\n\n items.forEach((item) => {\n name = FunctionParams.#addParams(name, { ...item, type: undefined })\n if (items.some((item) => item.type)) {\n type = FunctionParams.#addParams(type, item)\n }\n })\n\n return {\n name: `{ ${name.join(', ')} }`,\n type: type.length ? `{ ${type.join('; ')} }` : undefined,\n enabled,\n required,\n }\n }\n\n toObject(): FunctionParamsAST {\n const items = FunctionParams.#orderItems(this.#items).flat()\n\n return FunctionParams.toObject(items)\n }\n\n static toString(items: (FunctionParamsAST | FunctionParamsAST[])[]): string {\n const sortedData = FunctionParams.#orderItems(items)\n\n return sortedData\n .reduce((acc, item) => {\n if (Array.isArray(item)) {\n if (item.length <= 0) {\n return acc\n }\n const subItems = FunctionParams.#orderItems(item) as FunctionParamsAST[]\n const objectItem = FunctionParams.toObject(subItems)\n\n return FunctionParams.#addParams(acc, objectItem)\n }\n\n return FunctionParams.#addParams(acc, item)\n }, [] as string[])\n .join(', ')\n }\n\n toString(): string {\n const items = FunctionParams.#orderItems(this.#items)\n\n return FunctionParams.toString(items)\n }\n}\n","import type { PossiblePromise } from './types.ts'\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","export function renderTemplate<TData extends Record<string, unknown> = Record<string, unknown>>(template: string, data: TData | undefined = undefined): string {\n if (!data || !Object.keys(data).length) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n const matches = template.match(/{{(.*?)}}/g)\n\n return (\n matches?.reduce((prev, curr) => {\n const index = curr.split(/{{|}}/).filter(Boolean)[0]?.trim()\n if (index === undefined) {\n return prev\n }\n const value = data[index]\n\n if (value === undefined) {\n return prev\n }\n\n return prev\n .replace(curr, () => {\n if (typeof value === 'boolean') {\n return `${value.toString()}` || 'false'\n }\n\n return (value as string) || ''\n })\n .trim()\n }, template) || ''\n )\n}\n","import { readFileSync } from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport createJiti from 'jiti'\n\nexport function resolveModuleSource(pkgName: string) {\n const parentURL = import.meta.url\n const jiti = createJiti(parentURL)\n\n const resolved = jiti.esmResolve(pkgName, parentURL)\n const filePath = resolved.startsWith('file:') ? fileURLToPath(resolved) : resolved\n const source = readFileSync(filePath, { encoding: 'utf-8' })\n const ext = path.extname(filePath)\n return { path: filePath, source, ext } as const\n}\n","export async function timeout(ms: number): Promise<unknown> {\n return new Promise((resolve) => {\n const timeout = setTimeout(() => {\n resolve(timeout)\n }, ms)\n }).then((timeout) => {\n clearTimeout(timeout as NodeJS.Timeout)\n\n return true\n })\n}\n"],"mappings":";;;;;;;;;;AAAA,IAAa,QAAb,MAAsB;CACpB,0BAAU,IAAI,KAAgB;CAE9B,MAAM,IAAI,KAAgC;AACxC,SAAO,MAAKA,OAAQ,IAAI,IAAI,IAAI;;CAGlC,MAAM,IAAI,KAAa,OAAyB;AAC9C,QAAKA,OAAQ,IAAI,KAAK,MAAM;;CAG9B,MAAM,OAAO,KAA4B;AACvC,QAAKA,OAAQ,OAAO,IAAI;;CAG1B,MAAM,QAAuB;AAC3B,QAAKA,OAAQ,OAAO;;CAGtB,MAAM,OAA0B;AAC9B,SAAO,CAAC,GAAG,MAAKA,OAAQ,MAAM,CAAC;;CAGjC,MAAM,SAAuB;AAC3B,SAAO,CAAC,GAAG,MAAKA,OAAQ,QAAQ,CAAC;;CAGnC,MAAM,QAAuB;;;;;;;;ACY/B,IAAa,iBAAb,MAAa,eAAe;CAC1B,SAAyD,EAAE;CAC3D,cAAc;AACZ,SAAO;;CAGT,IAAI,QAA6B;AAC/B,SAAO,MAAKC,MAAO,MAAM;;CAG3B,IAAI,MAAkH;AACpH,MAAI,CAAC,KACH,QAAO;AAGT,MAAI,MAAM,QAAQ,KAAK,EAAE;AACvB,QAAK,OAAO,QAAQ,CAAC,SAAS,OAAO;AACnC,UAAKA,MAAO,KAAK,GAAG;KACpB;AACF,UAAO;;AAET,QAAKA,MAAO,KAAK,KAAK;AAEtB,SAAO;;CAET,QAAOC,WAAY,OAAuD;AACxE,SAAO,QACL,MAAM,OAAO,QAAQ,EACrB,EACG,MAAM;AACL,OAAI,MAAM,QAAQ,EAAE,CAClB;AAEF,UAAO,CAAC,EAAE;MAEX,MAAM;AACL,OAAI,MAAM,QAAQ,EAAE,CAClB;AAEF,UAAO,EAAE,YAAY;IAExB,EACD,CAAC,QAAQ,OAAO,CACjB;;CAGH,QAAOC,UAAW,KAAe,MAAyB;EACxD,MAAM,EAAE,UAAU,MAAM,MAAM,MAAM,WAAW,MAAM,GAAG,SAAS;AAEjE,MAAI,CAAC,QACH,QAAO;AAGT,MAAI,CAAC,MAAM;AAET,OAAI,KAAK,GAAG,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,KAAK;AAE9D,UAAO;;EAGT,MAAM,gBAAgB,KAAK,WAAW,IAAI,GAAG,OAAO,UAAU,KAAK;AAEnE,MAAI,KACF,KAAI,SACF,KAAI,KAAK,GAAG,cAAc,IAAI,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,KAAK;MAEhF,KAAI,KAAK,GAAG,cAAc,KAAK,OAAO;MAGxC,KAAI,KAAK,GAAG,gBAAgB;AAG9B,SAAO;;CAGT,OAAO,SAAS,OAA+C;EAC7D,IAAIC,OAAiB,EAAE;EACvB,IAAIC,OAAiB,EAAE;EAEvB,MAAM,UAAU,MAAM,OAAO,SAAS,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE,EAAE,UAAU;EAC7E,MAAM,WAAW,MAAM,OAAO,SAAS,KAAK,SAAS,IAAI;AAEzD,QAAM,SAAS,SAAS;AACtB,UAAO,gBAAeF,UAAW,MAAM;IAAE,GAAG;IAAM,MAAM;IAAW,CAAC;AACpE,OAAI,MAAM,MAAM,WAASG,OAAK,KAAK,CACjC,QAAO,gBAAeH,UAAW,MAAM,KAAK;IAE9C;AAEF,SAAO;GACL,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC;GAC3B,MAAM,KAAK,SAAS,KAAK,KAAK,KAAK,KAAK,CAAC,MAAM;GAC/C;GACA;GACD;;CAGH,WAA8B;EAC5B,MAAM,QAAQ,gBAAeD,WAAY,MAAKD,MAAO,CAAC,MAAM;AAE5D,SAAO,eAAe,SAAS,MAAM;;CAGvC,OAAO,SAAS,OAA4D;AAG1E,SAFmB,gBAAeC,WAAY,MAAM,CAGjD,QAAQ,KAAK,SAAS;AACrB,OAAI,MAAM,QAAQ,KAAK,EAAE;AACvB,QAAI,KAAK,UAAU,EACjB,QAAO;IAET,MAAM,WAAW,gBAAeA,WAAY,KAAK;IACjD,MAAM,aAAa,eAAe,SAAS,SAAS;AAEpD,WAAO,gBAAeC,UAAW,KAAK,WAAW;;AAGnD,UAAO,gBAAeA,UAAW,KAAK,KAAK;KAC1C,EAAE,CAAa,CACjB,KAAK,KAAK;;CAGf,WAAmB;EACjB,MAAM,QAAQ,gBAAeD,WAAY,MAAKD,MAAO;AAErD,SAAO,eAAe,SAAS,MAAM;;;;;;ACnKzC,SAAgB,UAAa,QAAkD;AAC7E,QAAO,CAAC,CAAC,UAAU,OAAQ,QAA6B,SAAS;;AAGnE,SAAgB,yBAAsC,QAA4E;AAChI,QAAO,OAAO,WAAW;;AAG3B,SAAgB,wBAA2B,QAAwG;AACjJ,QAAO,OAAO,WAAW;;;;;ACX3B,SAAgB,eAAgF,UAAkB,OAA0B,QAAmB;AAC7J,KAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,OAC9B,QAAO,SAAS,QAAQ,cAAc,GAAG;AAK3C,QAFgB,SAAS,MAAM,aAAa,EAGjC,QAAQ,MAAM,SAAS;EAC9B,MAAM,QAAQ,KAAK,MAAM,QAAQ,CAAC,OAAO,QAAQ,CAAC,IAAI,MAAM;AAC5D,MAAI,UAAU,OACZ,QAAO;EAET,MAAM,QAAQ,KAAK;AAEnB,MAAI,UAAU,OACZ,QAAO;AAGT,SAAO,KACJ,QAAQ,YAAY;AACnB,OAAI,OAAO,UAAU,UACnB,QAAO,GAAG,MAAM,UAAU,MAAM;AAGlC,UAAQ,SAAoB;IAC5B,CACD,MAAM;IACR,SAAS,IAAI;;;;;ACvBpB,SAAgB,oBAAoB,SAAiB;CACnD,MAAM,YAAY,OAAO,KAAK;CAG9B,MAAM,WAFO,WAAW,UAAU,CAEZ,WAAW,SAAS,UAAU;CACpD,MAAM,WAAW,SAAS,WAAW,QAAQ,GAAG,cAAc,SAAS,GAAG;AAG1E,QAAO;EAAE,MAAM;EAAU,QAFV,aAAa,UAAU,EAAE,UAAU,SAAS,CAAC;EAE3B,KADrB,KAAK,QAAQ,SAAS;EACI;;;;;ACbxC,eAAsB,QAAQ,IAA8B;AAC1D,QAAO,IAAI,SAAS,cAAY;EAC9B,MAAMM,YAAU,iBAAiB;AAC/B,aAAQA,UAAQ;KACf,GAAG;GACN,CAAC,MAAM,cAAY;AACnB,eAAaA,UAA0B;AAEvC,SAAO;GACP"}