@kubb/core 1.0.0-beta.1 → 1.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +272 -108
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +101 -31
- package/dist/index.js +268 -108
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/build.ts +34 -14
- package/src/index.ts +1 -0
- package/src/managers/fileManager/FileManager.ts +0 -57
- package/src/managers/fileManager/index.ts +1 -0
- package/src/managers/fileManager/types.ts +1 -1
- package/src/managers/fileManager/utils.ts +67 -0
- package/src/managers/pluginManager/PluginManager.ts +199 -60
- package/src/plugin.ts +9 -4
- package/src/types.ts +42 -17
- package/src/utils/getEncodedText.ts +3 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/jsdoc.ts +2 -2
- package/src/utils/renderTemplate.ts +11 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/build.ts","../src/utils/isURL.ts","../src/plugin.ts","../src/utils/isPromise.ts","../src/utils/write.ts","../src/utils/cache.ts","../src/utils/read.ts","../src/utils/objectToParameters.ts","../src/utils/nameSorter.ts","../src/utils/jsdoc.ts","../src/utils/getUniqueName.ts","../src/utils/timeout.ts","../src/utils/queue.ts","../src/managers/fileManager/FileManager.ts","../src/managers/fileManager/TreeNode.ts","../src/managers/pluginManager/PluginManager.ts","../src/managers/pluginManager/validate.ts","../src/config.ts","../src/generators/Generator.ts","../src/generators/SchemaGenerator.ts","../src/index.ts"],"names":["pathParser","fs","argument0"],"mappings":"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","sourcesContent":["/* eslint-disable no-async-promise-executor */\nimport pathParser from 'path'\n\nimport { isURL } from './utils/isURL'\nimport { PluginManager } from './managers/pluginManager'\nimport { clean, read } from './utils'\n\nimport type { QueueTask } from './utils'\nimport type { FileManager, File } from './managers/fileManager'\nimport type { PluginContext, TransformResult, LogLevel, KubbPlugin } from './types'\n\ntype BuildOutput = {\n files: FileManager['files']\n}\n\n// Same type as ora\ntype Spinner = {\n start: (text?: string) => Spinner\n succeed: (text: string) => Spinner\n fail: (text?: string) => Spinner\n stopAndPersist: (options: { text: string }) => Spinner\n render: () => Spinner\n text: string\n info: (text: string) => Spinner\n}\n\nexport type Logger = {\n log: (message: string, logLevel: LogLevel) => void\n spinner?: Spinner\n}\ntype BuildOptions = {\n config: PluginContext['config']\n logger?: Logger\n}\n\nasync function transformReducer(\n this: PluginContext,\n _previousCode: string,\n result: TransformResult | Promise<TransformResult>,\n _plugin: KubbPlugin\n): Promise<string | null> {\n if (result === null) {\n return null\n }\n return result\n}\n\nasync function buildImplementation(options: BuildOptions, done: (output: BuildOutput) => void) {\n const { config, logger } = options\n\n if (config.output.clean) {\n await clean(config.output.path)\n }\n\n const queueTask = async (id: string, file: File) => {\n const { path } = file\n\n let code = fileManager.getSource(file)\n\n const loadedResult = await pluginManager.hookFirst('load', [path])\n if (loadedResult) {\n code = loadedResult\n }\n\n if (code) {\n const transformedCode = await pluginManager.hookReduceArg0('transform', [code, path], transformReducer)\n\n if (config.output.write || config.output.write === undefined) {\n await pluginManager.hookParallel('writeFile', [transformedCode, path])\n }\n }\n }\n\n const pluginManager = new PluginManager(config, { logger, task: queueTask as QueueTask })\n const { plugins, fileManager } = pluginManager\n\n await pluginManager.hookParallel<'validate', true>('validate', [plugins])\n\n await pluginManager.hookParallel('buildStart', [config])\n\n await pluginManager.hookParallel('buildEnd')\n setTimeout(() => {\n done({ files: fileManager.files.map((file) => ({ ...file, source: fileManager.getSource(file) })) })\n }, 500)\n\n pluginManager.fileManager.add({\n path: isURL(config.input.path) ? config.input.path : pathParser.resolve(config.root, config.input.path),\n fileName: isURL(config.input.path) ? 'input' : config.input.path,\n source: isURL(config.input.path) ? config.input.path : await read(pathParser.resolve(config.root, config.input.path)),\n })\n}\n\nexport type KubbBuild = (options: BuildOptions) => Promise<BuildOutput>\n\nexport function build(options: BuildOptions): Promise<BuildOutput> {\n return new Promise(async (resolve, reject) => {\n try {\n await buildImplementation(options, resolve)\n } catch (e) {\n reject(e)\n }\n })\n}\n","export function isURL(data: string) {\n try {\n const url = new URL(data)\n if (url?.href) {\n return true\n }\n } catch (error) {\n return false\n }\n return false\n}\n","import pathParser from 'path'\n\nimport { createPluginCache } from './utils'\n\nimport type { FileManager } from './managers/fileManager'\nimport type { PluginContext, KubbPlugin, PluginFactoryOptions } from './types'\n\ntype KubbPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (\n options: T['options']\n) => T['nested'] extends true ? Array<KubbPlugin<T>> : KubbPlugin<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: KubbPluginFactory<T>) {\n return (options: T['options']) => {\n const plugin = factory(options)\n if (Array.isArray(plugin)) {\n throw new Error('Not implemented')\n }\n\n // default transform\n if (!plugin.transform) {\n plugin.transform = function transform(code) {\n return code\n }\n }\n\n return plugin\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n resolveId: PluginContext['resolveId']\n load: PluginContext['load']\n}\n\n// not publicly exported\nexport type CorePluginOptions = PluginFactoryOptions<Options, false, PluginContext>\n\nexport const name = 'core' as const\n\nexport const definePlugin = createPlugin<CorePluginOptions>((options) => {\n const { fileManager, resolveId, load } = options\n\n const api: PluginContext = {\n get config() {\n return options.config\n },\n fileManager,\n async addFile(file) {\n return fileManager.addOrAppend(file)\n },\n resolveId,\n load,\n cache: createPluginCache(Object.create(null)),\n }\n\n return {\n name,\n options,\n api,\n resolveId(fileName, directory) {\n if (!directory) {\n return null\n }\n return pathParser.resolve(directory, fileName)\n },\n }\n})\n","import type { MaybePromise } from '../types'\n\nexport function isPromise<T>(result: MaybePromise<T>): result is Promise<T> {\n return typeof (result as Promise<unknown>)?.then === 'function'\n}\n","/* eslint-disable consistent-return */\nimport { promises as fs } from 'fs'\nimport pathParser from 'path'\n\nimport rimraf from 'rimraf'\n\nasync function safeWriteFileToPath(path: string, data: string) {\n // resolve the full path and get just the directory, ignoring the file and extension\n const passedPath = pathParser.dirname(pathParser.resolve(path))\n // make the directory, recursively. Theoretically, if every directory in the path exists, this won't do anything.\n await fs.mkdir(passedPath, { recursive: true })\n // write the file to the newly created directory\n return fs.writeFile(pathParser.resolve(path), data, { encoding: 'utf-8' })\n}\n\nexport async function write(data: string, path: string) {\n try {\n await fs.stat(path)\n const oldContent = await fs.readFile(path, { encoding: 'utf-8' })\n if (oldContent?.toString() === data) {\n return\n }\n } catch (_err) {\n return safeWriteFileToPath(path, data)\n }\n\n return safeWriteFileToPath(path, data)\n}\n\nexport async function clean(path: string) {\n return new Promise((resolve, reject) => {\n rimraf(path, (err) => {\n if (err) {\n reject(err)\n } else {\n resolve(true)\n }\n })\n })\n}\n","/* eslint-disable no-param-reassign */\n/* eslint-disable consistent-return */\n\nexport interface Cache<T extends object = object> {\n delete(id: keyof T): boolean\n get(id: keyof T): T[keyof T] | null\n has(id: keyof T): boolean\n set(id: keyof T, value: unknown): void\n}\n\nexport function createPluginCache<T extends Record<string, [number, unknown]>>(cache: T): Cache<T> {\n return {\n delete(id: keyof T) {\n return delete cache[id]\n },\n get(id) {\n const item = cache[id]\n if (!item) return null\n item[0] = 0\n return item[1] as T[keyof T]\n },\n has(id) {\n const item = cache[id]\n if (!item) return false\n item[0] = 0\n return true\n },\n set(id, value) {\n cache[id] = [0, value] as T[keyof T]\n },\n }\n}\n","import pathParser from 'path'\nimport { promises as fs } from 'fs'\n\nfunction slash(path: string) {\n const isExtendedLengthPath = /^\\\\\\\\\\?\\\\/.test(path)\n\n if (isExtendedLengthPath) {\n return path\n }\n\n return path.replace(/\\\\/g, '/')\n}\n\nexport function getRelativePath(rootDir?: string | null, filePath?: string | null) {\n if (!rootDir || !filePath) {\n throw new Error('Root and file should be filled in when retrieving the relativePath')\n }\n\n const relativePath = pathParser.relative(rootDir, filePath)\n\n // On Windows, paths are separated with a \"\\\"\n // However, web browsers use \"/\" no matter the platform\n const path = slash(relativePath).replace('../', '').trimEnd()\n\n if (path.startsWith('../')) {\n return path.replace(pathParser.basename(path), pathParser.basename(path, pathParser.extname(filePath)))\n }\n\n return `./${path.replace(pathParser.basename(path), pathParser.basename(path, pathParser.extname(filePath)))}`\n}\n\nexport type PathMode = 'file' | 'directory'\n\nexport function getPathMode(path: string | undefined | null): PathMode {\n if (!path) {\n return 'directory'\n }\n return pathParser.extname(path) ? 'file' : 'directory'\n}\n\nexport async function read(path: string) {\n try {\n return fs.readFile(path, { encoding: 'utf8' })\n } catch (err) {\n console.error(err)\n throw err\n }\n}\n","type Data = string[][]\n\ntype Options = {\n typed?: boolean\n}\n\nexport function objectToParameters(data: Data, options: Options = {}) {\n return data\n .reduce((acc, [key, value]) => {\n if (options.typed) {\n acc.push(`${key}: ${value}[\"${key}\"], `)\n } else {\n acc.push(`${key},`)\n }\n\n return acc\n }, [] as string[])\n .join('')\n}\n","export function nameSorter<T extends { name: string }>(a: T, b: T) {\n if (a.name < b.name) {\n return -1\n }\n if (a.name > b.name) {\n return 1\n }\n return 0\n}\n","export function createJSDocBlockText({ comments }: { comments: Array<string | undefined> }) {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return undefined\n }\n\n const text = filteredComments.reduce((acc, comment) => {\n return `${acc}\\n* ${comment}`\n }, '/**')\n\n return `${text}\\n*/`\n}\n","/* eslint-disable no-param-reassign */\nexport function getUniqueName(originalName: string, data: Record<string, number>) {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n originalName += used\n }\n data[originalName] = 1\n return originalName\n}\n","export async function timeout(ms: number) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n","/* eslint-disable no-cond-assign */\n\nexport type QueueTask<T = unknown> = {\n (...args: unknown[]): Promise<T>\n}\n\ninterface QueueItem {\n reject: <T>(reason?: T) => void\n resolve: <T>(value: T | PromiseLike<T>) => void\n task: QueueTask<unknown>\n}\n\nexport class Queue {\n private readonly queue: QueueItem[] = []\n\n workerCount = 0\n\n private maxParallel: number\n\n constructor(maxParallel: number) {\n this.maxParallel = maxParallel\n }\n\n run<T>(task: QueueTask<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const item: QueueItem = { reject, resolve, task } as QueueItem\n this.queue.push(item)\n this.work()\n })\n }\n\n private async work(): Promise<void> {\n if (this.workerCount >= this.maxParallel) return\n this.workerCount++\n\n let entry: QueueItem | undefined\n while ((entry = this.queue.shift())) {\n const { reject, resolve, task } = entry\n task()\n .then((result) => resolve(result))\n .catch((err) => reject(err))\n }\n\n this.workerCount--\n }\n}\n","import uniq from 'lodash.uniq'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport { write, read } from '../../utils'\n\nimport type { QueueTask, Queue } from '../../utils'\nimport type { CacheStore, UUID, Status, File } from './types'\n\nexport class FileManager {\n private cache: Map<CacheStore['id'], CacheStore> = new Map()\n\n private task?: QueueTask<unknown>\n\n private queue?: Queue\n\n constructor(options?: { queue: Queue; task: QueueTask<unknown> }) {\n if (options) {\n this.task = options.task\n this.queue = options.queue\n }\n }\n\n private getCache(id: UUID) {\n return this.cache.get(id)\n }\n\n private getCacheByPath(path: string | undefined): CacheStore | undefined {\n let cache\n\n this.cache.forEach((item) => {\n if (item.file.path === path) {\n cache = item\n }\n })\n return cache as unknown as CacheStore\n }\n\n public getSource(file: File) {\n // TODO make generic check\n if (!file.fileName.endsWith('.ts')) {\n return file.source\n }\n const imports: File['imports'] = []\n\n file.imports?.forEach((curr) => {\n const exists = imports.find((imp) => imp.path === curr.path)\n if (!exists) {\n imports.push(curr)\n return\n }\n\n if (exists && Array.isArray(curr.name)) {\n exists.name = uniq([...exists.name, ...curr.name])\n }\n })\n\n const importSource = imports.reduce((prev, curr) => {\n if (Array.isArray(curr.name)) {\n return `${prev}\\nimport ${curr.isTypeOnly ? 'type ' : ''}{ ${curr.name.join(', ')} } from \"${curr.path}\";`\n }\n\n return `${prev}\\nimport ${curr.isTypeOnly ? 'type ' : ''}${curr.name} from \"${curr.path}\";`\n }, '')\n\n if (importSource) {\n return `${importSource}\\n${file.source}`\n }\n\n return file.source\n }\n\n get files() {\n const files: File[] = []\n this.cache.forEach((item) => {\n files.push(item.file)\n })\n\n return files\n }\n\n async add(file: File) {\n const cacheItem = { id: uuidv4(), file, status: 'new' as Status }\n\n this.cache.set(cacheItem.id, cacheItem)\n\n if (this.queue) {\n await this.queue.run(async () => {\n await this.task?.(cacheItem.id, file)\n })\n }\n\n return file\n }\n\n addOrAppend(file: File) {\n const previousCache = this.getCacheByPath(file.path)\n\n if (previousCache) {\n this.cache.delete(previousCache.id)\n return this.add({\n ...file,\n source: `${previousCache.file.source}\\n${file.source}`,\n imports: [...(previousCache.file.imports || []), ...(file.imports || [])],\n })\n }\n return this.add(file)\n }\n\n combine(files: Array<File | null>) {\n return files.filter(Boolean).reduce((acc, curr: File | null) => {\n if (!curr) {\n return acc\n }\n const prevIndex = acc.findIndex((item) => item.path === curr.path)\n\n if (prevIndex !== -1) {\n const prev = acc[prevIndex]\n acc[prevIndex] = {\n ...curr,\n source: `${prev.source}\\n${curr.source}`,\n imports: [...(prev.imports || []), ...(curr.imports || [])],\n }\n } else {\n acc.push(curr)\n }\n\n return acc\n }, [] as File[])\n }\n\n setStatus(id: UUID, status: Status) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n cacheItem.status = status\n this.cache.set(id, cacheItem)\n }\n\n get(id: UUID) {\n const cacheItem = this.getCache(id)\n return cacheItem?.file\n }\n\n remove(id: UUID) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n this.setStatus(id, 'removed')\n }\n\n async write(...params: Parameters<typeof write>) {\n return write(...params)\n }\n\n async read(...params: Parameters<typeof read>) {\n return read(...params)\n }\n}\n","import dirTree from 'directory-tree'\n\nimport type { DirectoryTree, DirectoryTreeOptions } from 'directory-tree'\n\nexport type TreeNodeOptions = DirectoryTreeOptions\n\nexport class TreeNode<T = unknown> {\n public data: T\n\n public parent?: TreeNode<T>\n\n public children: Array<TreeNode<T>> = []\n\n constructor(data: T, parent?: TreeNode<T>) {\n this.data = data\n this.parent = parent\n return this\n }\n\n addChild(data: T): TreeNode<T> {\n const child = new TreeNode(data, this)\n if (!this.children) {\n this.children = []\n }\n this.children.push(child)\n return child\n }\n\n find(data: T) {\n if (data === this.data) {\n return this\n }\n\n if (this.children) {\n for (let i = 0, { length } = this.children, target: unknown = null; i < length; i++) {\n target = this.children[i].find(data)\n if (target) {\n return target\n }\n }\n }\n\n return null\n }\n\n leaves(): TreeNode<T>[] {\n if (!this.children || this.children.length === 0) {\n // this is a leaf\n return [this]\n }\n\n // if not a leaf, return all children's leaves recursively\n const leaves: TreeNode<T>[] = []\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n // eslint-disable-next-line prefer-spread\n leaves.push.apply(leaves, this.children[i].leaves())\n }\n }\n return leaves\n }\n\n root(): TreeNode<T> {\n if (!this.parent) {\n return this\n }\n return this.parent.root()\n }\n\n forEach(callback: (treeNode: TreeNode<T>) => void): this {\n if (typeof callback !== 'function') {\n throw new TypeError('forEach() callback must be a function')\n }\n\n // run this node through function\n callback(this)\n\n // do the same for all children\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n this.children[i].forEach(callback)\n }\n }\n\n return this\n }\n\n public static build<T = unknown>(path: string, options: TreeNodeOptions = {}): TreeNode<T> | null {\n const filteredTree = dirTree(path, { extensions: options?.extensions, exclude: options.exclude })\n\n if (!filteredTree) {\n return null\n }\n\n const treeNode = new TreeNode({ name: filteredTree.name, path: filteredTree.path, type: filteredTree.type })\n\n const recurse = (node: typeof treeNode, item: DirectoryTree) => {\n const subNode = node.addChild({ name: item.name, path: item.path, type: item.type })\n\n if (item.children?.length) {\n item.children?.forEach((child) => {\n recurse(subNode, child)\n })\n }\n }\n\n filteredTree.children?.forEach((child) => recurse(treeNode, child))\n\n return treeNode as TreeNode<T>\n }\n}\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport { definePlugin } from '../../plugin'\nimport { FileManager } from '../fileManager'\nimport { Queue } from '../../utils/queue'\n\nimport type { QueueTask } from '../../utils/queue'\nimport type { Argument0, Strategy } from './types'\nimport type { KubbConfig, KubbPlugin, PluginLifecycleHooks, PluginLifecycle, MaybePromise, ResolveIdParams } from '../../types'\nimport type { Logger } from '../../build'\nimport type { CorePluginOptions } from '../../plugin'\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n\n// This will make sure no input hook is omitted\nconst hookNames: {\n [P in PluginLifecycleHooks]: 1\n} = {\n validate: 1,\n buildStart: 1,\n resolveId: 1,\n load: 1,\n transform: 1,\n writeFile: 1,\n buildEnd: 1,\n}\nexport const hooks = Object.keys(hookNames) as [PluginLifecycleHooks]\n\nexport class PluginManager {\n public plugins: KubbPlugin[]\n\n public readonly fileManager: FileManager\n\n private readonly logger?: Logger\n\n private readonly config: KubbConfig\n\n public readonly core: KubbPlugin<CorePluginOptions>\n\n public queue: Queue\n\n constructor(config: KubbConfig, options: { logger?: Logger; task: QueueTask }) {\n this.logger = options.logger\n this.config = config\n this.queue = new Queue(10)\n\n this.fileManager = new FileManager({ task: options.task, queue: this.queue })\n this.core = definePlugin({\n config,\n fileManager: this.fileManager,\n load: this.load,\n resolveId: this.resolveId,\n }) as KubbPlugin<CorePluginOptions> & {\n api: CorePluginOptions['api']\n }\n this.plugins = [this.core, ...(config.plugins || [])]\n }\n\n resolveId = (params: ResolveIdParams) => {\n if (params.pluginName) {\n return this.hookForPlugin(params.pluginName, 'resolveId', [params.fileName, params.directory, params.options])\n }\n return this.hookFirst('resolveId', [params.fileName, params.directory, params.options])\n }\n\n load = async (id: string) => {\n return this.hookFirst('load', [id])\n }\n\n // run only hook for a specific plugin name\n hookForPlugin<H extends PluginLifecycleHooks>(\n pluginName: string,\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n skipped?: ReadonlySet<KubbPlugin> | null\n ): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName, pluginName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run('hookFirst', hookName, parameters, plugin) as typeof result\n })\n }\n return promise\n }\n\n // chains, first non-null result stops and returns\n hookFirst<H extends PluginLifecycleHooks>(\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n skipped?: ReadonlySet<KubbPlugin> | null\n ): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run('hookFirst', hookName, parameters, plugin) as typeof result\n })\n }\n return promise\n }\n\n // parallel\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>(hookName: H, parameters?: Parameters<PluginLifecycle[H]> | undefined) {\n const parallelPromises: Promise<TOuput>[] = []\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if ((plugin[hookName] as { sequential?: boolean })?.sequential) {\n await Promise.all(parallelPromises)\n parallelPromises.length = 0\n await this.run('hookParallel', hookName, parameters, plugin)\n } else {\n const promise: Promise<TOuput> = this.run('hookParallel', hookName, parameters, plugin)\n\n parallelPromises.push(promise)\n }\n }\n return Promise.all(parallelPromises)\n }\n\n // chains, reduces returned value, handling the reduced value as the first hook argument\n hookReduceArg0<H extends PluginLifecycleHooks>(\n hookName: H,\n [argument0, ...rest]: Parameters<PluginLifecycle[H]>,\n reduce: (reduction: Argument0<H>, result: ReturnType<PluginLifecycle[H]>, plugin: KubbPlugin) => MaybePromise<Argument0<H> | null>\n ): Promise<Argument0<H>> {\n let promise: Promise<Argument0<H>> = Promise.resolve(argument0)\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then((argument0) =>\n this.run('hookReduceArg0', hookName, [argument0, ...rest] as Parameters<PluginLifecycle[H]>, plugin).then((result) =>\n reduce.call(this.core.api, argument0, result as ReturnType<PluginLifecycle[H]>, plugin)\n )\n ) as Promise<Argument0<H>>\n }\n return promise\n }\n\n // chains\n\n hookSeq<H extends PluginLifecycleHooks>(hookName: H, parameters?: Parameters<PluginLifecycle[H]>) {\n let promise: Promise<void> = Promise.resolve()\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then(() => this.run('hookSeq', hookName, parameters, plugin))\n }\n return promise.then(noReturn)\n }\n\n private getSortedPlugins(hookName: keyof PluginLifecycle, pluginName?: string): KubbPlugin[] {\n const plugins = [...this.plugins]\n\n if (pluginName) {\n const pluginsByPluginName = plugins.filter((item) => item.name === pluginName && item[hookName])\n if (pluginsByPluginName.length === 0) {\n // fallback on the core plugin when there is no match\n if (this.config.logLevel === 'warn' && this.logger?.spinner) {\n this.logger.spinner.info(`Plugin hook with ${hookName} not found for plugin ${pluginName}`)\n }\n return [this.core]\n }\n return pluginsByPluginName\n }\n\n return plugins\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n private run<H extends PluginLifecycleHooks, TResult = void>(\n strategy: Strategy,\n hookName: H,\n parameters: unknown[] | undefined,\n plugin: KubbPlugin\n ): Promise<TResult> {\n const hook = plugin[hookName]!\n\n return Promise.resolve()\n .then(() => {\n if (typeof hook !== 'function') {\n return hook\n }\n\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.text = `[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`\n }\n\n const hookResult = (hook as Function).apply(this.core.api, parameters)\n\n if (!(hookResult as Promise<unknown>)?.then) {\n // short circuit for non-thenables and non-Promises\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return hookResult\n }\n\n return Promise.resolve(hookResult).then((result) => {\n // action was fulfilled\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return result\n })\n })\n .catch((e: Error) => {\n this.catcher<H>(e, plugin, hookName)\n }) as Promise<TResult>\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n private runSync<H extends PluginLifecycleHooks>(\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n plugin: KubbPlugin\n ): ReturnType<PluginLifecycle[H]> | Error {\n const hook = plugin[hookName]!\n\n // const context = this.pluginContexts.get(plugin)!;\n\n try {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return (hook as Function).apply(this.core.api, parameters)\n } catch (error) {\n return error as Error\n }\n }\n\n private catcher<H extends PluginLifecycleHooks>(e: Error, plugin: KubbPlugin, hookName: H) {\n const text = `${e.message} (plugin: ${plugin.name}, hook: ${hookName})\\n`\n\n throw new Error(text, { cause: e })\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noReturn() {}\n","import type { KubbPlugin } from '../../types'\n\nexport class ValidationPluginError extends Error {}\n\nexport function validatePlugins(plugins: KubbPlugin[], dependedPluginNames: string | string[]): true {\n let pluginNames: string[] = []\n if (typeof dependedPluginNames === 'string') {\n pluginNames = [dependedPluginNames]\n } else {\n pluginNames = dependedPluginNames\n }\n\n pluginNames.forEach((pluginName) => {\n const exists = plugins.some((plugin) => plugin.name === pluginName)\n if (!exists) {\n throw new ValidationPluginError(`This plugin depends on the ${pluginName} plugin.`)\n }\n })\n\n return true\n}\n","import type { MaybePromise, KubbUserConfig, CLIOptions } from './types'\n\n/**\n * Type helper to make it easier to use kubb.config.ts\n * accepts a direct {@link KubbConfig} object, or a function that returns it.\n * The function receives a {@link ConfigEnv} object that exposes two properties:\n */\nexport const defineConfig = (\n options:\n | MaybePromise<KubbUserConfig>\n | ((\n /** The options derived from the CLI flags */\n cliOptions: CLIOptions\n ) => MaybePromise<KubbUserConfig>)\n) => options\n","/**\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 Generator<TOptions extends object = object> {\n private _options: TOptions = {} as TOptions\n\n constructor(options: TOptions = {} as TOptions) {\n if (options) {\n this._options = {\n ...this._options,\n ...options,\n }\n }\n return this\n }\n\n get options() {\n return this._options\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import { Generator } from './Generator'\n/**\n * Abstract class that contains the building blocks for plugins to create their own SchemaGenerator\n */\nexport abstract class SchemaGenerator<TOptions extends object, TInput, TOutput> extends Generator<TOptions> {\n abstract build(schema: TInput, name: string, description?: string): TOutput\n}\n","/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { build } from './build'\n\nexport * from './config'\nexport * from './build'\nexport { CorePluginOptions, createPlugin, name } from './plugin'\nexport * from './utils'\nexport * from './types'\nexport * from './managers'\nexport * from './generators'\nexport default build\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/build.ts","../src/utils/isURL.ts","../src/plugin.ts","../src/utils/isPromise.ts","../src/utils/write.ts","../src/utils/cache.ts","../src/utils/read.ts","../src/utils/objectToParameters.ts","../src/utils/nameSorter.ts","../src/utils/jsdoc.ts","../src/utils/getUniqueName.ts","../src/utils/timeout.ts","../src/utils/queue.ts","../src/utils/getEncodedText.ts","../src/utils/renderTemplate.ts","../src/managers/fileManager/FileManager.ts","../src/managers/fileManager/TreeNode.ts","../src/managers/fileManager/utils.ts","../src/managers/pluginManager/PluginManager.ts","../src/managers/pluginManager/validate.ts","../src/config.ts","../src/generators/Generator.ts","../src/generators/SchemaGenerator.ts","../src/index.ts"],"names":["pathParser","fs","name","argument0"],"mappings":"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","sourcesContent":["/* eslint-disable no-async-promise-executor */\nimport pathParser from 'path'\n\nimport { isURL } from './utils/isURL'\nimport { PluginManager } from './managers/pluginManager'\nimport { clean, read } from './utils'\nimport { getFileSource } from './managers/fileManager'\n\nimport type { FileManager, File } from './managers/fileManager'\nimport type { QueueTask } from './utils'\nimport type { PluginContext, TransformResult, LogLevel, KubbPlugin } from './types'\n\ntype BuildOutput = {\n files: FileManager['files']\n}\n\n// Same type as ora\ntype Spinner = {\n start: (text?: string) => Spinner\n succeed: (text: string) => Spinner\n fail: (text?: string) => Spinner\n stopAndPersist: (options: { text: string }) => Spinner\n render: () => Spinner\n text: string\n info: (text: string) => Spinner\n}\n\nexport type Logger = {\n log: (message: string, logLevel: LogLevel) => void\n spinner?: Spinner\n}\ntype BuildOptions = {\n config: PluginContext['config']\n logger?: Logger\n}\n\nasync function transformReducer(\n this: PluginContext,\n _previousCode: string,\n result: TransformResult | Promise<TransformResult>,\n _plugin: KubbPlugin\n): Promise<string | null> {\n if (result === null) {\n return null\n }\n return result\n}\n\nasync function buildImplementation(options: BuildOptions): Promise<BuildOutput> {\n const { config, logger } = options\n\n if (config.output.clean) {\n await clean(config.output.path)\n }\n\n const queueTask = async (id: string, file: File) => {\n const { path } = file\n\n let code = getFileSource(file)\n\n const loadedResult = await pluginManager.hookFirst({\n hookName: 'load',\n parameters: [path],\n })\n if (loadedResult) {\n code = loadedResult\n }\n\n if (code) {\n const transformedCode = await pluginManager.hookReduceArg0({\n hookName: 'transform',\n parameters: [code, path],\n reduce: transformReducer,\n })\n\n if (config.output.write || config.output.write === undefined) {\n await pluginManager.hookParallel({\n hookName: 'writeFile',\n parameters: [transformedCode, path],\n })\n }\n }\n }\n\n const pluginManager = new PluginManager(config, { logger, task: queueTask as QueueTask })\n const { plugins, fileManager } = pluginManager\n\n await pluginManager.hookParallel<'validate', true>({\n hookName: 'validate',\n parameters: [plugins],\n })\n\n await pluginManager.hookParallel({\n hookName: 'buildStart',\n parameters: [config],\n })\n\n pluginManager.fileManager.add({\n path: isURL(config.input.path) ? config.input.path : pathParser.resolve(config.root, config.input.path),\n fileName: isURL(config.input.path) ? 'input' : config.input.path,\n source: isURL(config.input.path) ? config.input.path : await read(pathParser.resolve(config.root, config.input.path)),\n })\n\n await pluginManager.hookParallel({ hookName: 'buildEnd' })\n\n return { files: fileManager.files.map((file) => ({ ...file, source: getFileSource(file) })) }\n}\n\nexport type KubbBuild = (options: BuildOptions) => Promise<BuildOutput>\n\nexport function build(options: BuildOptions): Promise<BuildOutput> {\n return new Promise(async (resolve, reject) => {\n try {\n const output = await buildImplementation(options)\n\n setTimeout(() => {\n resolve(output)\n }, 500)\n } catch (e) {\n reject(e)\n }\n })\n}\n","export function isURL(data: string) {\n try {\n const url = new URL(data)\n if (url?.href) {\n return true\n }\n } catch (error) {\n return false\n }\n return false\n}\n","import pathParser from 'path'\n\nimport { createPluginCache } from './utils'\n\nimport type { FileManager } from './managers/fileManager'\nimport type { PluginContext, KubbPlugin, PluginFactoryOptions } from './types'\n\ntype KubbPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (\n options: T['options']\n) => T['nested'] extends true ? Array<KubbPlugin<T>> : KubbPlugin<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: KubbPluginFactory<T>) {\n return (options: T['options']) => {\n const plugin = factory(options)\n if (Array.isArray(plugin)) {\n throw new Error('Not implemented')\n }\n\n // default transform\n if (!plugin.transform) {\n plugin.transform = function transform(code) {\n return code\n }\n }\n\n return plugin\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n resolvePath: PluginContext['resolvePath']\n resolveName: PluginContext['resolveName']\n load: PluginContext['load']\n}\n\n// not publicly exported\nexport type CorePluginOptions = PluginFactoryOptions<Options, false, PluginContext>\n\nexport const name = 'core' as const\n\nexport const definePlugin = createPlugin<CorePluginOptions>((options) => {\n const { fileManager, resolvePath, resolveName, load } = options\n\n const api: PluginContext = {\n get config() {\n return options.config\n },\n fileManager,\n async addFile(file) {\n return fileManager.addOrAppend(file)\n },\n resolvePath,\n resolveName,\n load,\n cache: createPluginCache(Object.create(null)),\n }\n\n return {\n name,\n options,\n api,\n resolvePath(fileName, directory) {\n if (!directory) {\n return null\n }\n return pathParser.resolve(directory, fileName)\n },\n resolveName(name) {\n return name\n },\n }\n})\n","import type { MaybePromise } from '../types'\n\nexport function isPromise<T>(result: MaybePromise<T>): result is Promise<T> {\n return typeof (result as Promise<unknown>)?.then === 'function'\n}\n","/* eslint-disable consistent-return */\nimport { promises as fs } from 'fs'\nimport pathParser from 'path'\n\nimport rimraf from 'rimraf'\n\nasync function safeWriteFileToPath(path: string, data: string) {\n // resolve the full path and get just the directory, ignoring the file and extension\n const passedPath = pathParser.dirname(pathParser.resolve(path))\n // make the directory, recursively. Theoretically, if every directory in the path exists, this won't do anything.\n await fs.mkdir(passedPath, { recursive: true })\n // write the file to the newly created directory\n return fs.writeFile(pathParser.resolve(path), data, { encoding: 'utf-8' })\n}\n\nexport async function write(data: string, path: string) {\n try {\n await fs.stat(path)\n const oldContent = await fs.readFile(path, { encoding: 'utf-8' })\n if (oldContent?.toString() === data) {\n return\n }\n } catch (_err) {\n return safeWriteFileToPath(path, data)\n }\n\n return safeWriteFileToPath(path, data)\n}\n\nexport async function clean(path: string) {\n return new Promise((resolve, reject) => {\n rimraf(path, (err) => {\n if (err) {\n reject(err)\n } else {\n resolve(true)\n }\n })\n })\n}\n","/* eslint-disable no-param-reassign */\n/* eslint-disable consistent-return */\n\nexport interface Cache<T extends object = object> {\n delete(id: keyof T): boolean\n get(id: keyof T): T[keyof T] | null\n has(id: keyof T): boolean\n set(id: keyof T, value: unknown): void\n}\n\nexport function createPluginCache<T extends Record<string, [number, unknown]>>(cache: T): Cache<T> {\n return {\n delete(id: keyof T) {\n return delete cache[id]\n },\n get(id) {\n const item = cache[id]\n if (!item) return null\n item[0] = 0\n return item[1] as T[keyof T]\n },\n has(id) {\n const item = cache[id]\n if (!item) return false\n item[0] = 0\n return true\n },\n set(id, value) {\n cache[id] = [0, value] as T[keyof T]\n },\n }\n}\n","import pathParser from 'path'\nimport { promises as fs } from 'fs'\n\nfunction slash(path: string) {\n const isExtendedLengthPath = /^\\\\\\\\\\?\\\\/.test(path)\n\n if (isExtendedLengthPath) {\n return path\n }\n\n return path.replace(/\\\\/g, '/')\n}\n\nexport function getRelativePath(rootDir?: string | null, filePath?: string | null) {\n if (!rootDir || !filePath) {\n throw new Error('Root and file should be filled in when retrieving the relativePath')\n }\n\n const relativePath = pathParser.relative(rootDir, filePath)\n\n // On Windows, paths are separated with a \"\\\"\n // However, web browsers use \"/\" no matter the platform\n const path = slash(relativePath).replace('../', '').trimEnd()\n\n if (path.startsWith('../')) {\n return path.replace(pathParser.basename(path), pathParser.basename(path, pathParser.extname(filePath)))\n }\n\n return `./${path.replace(pathParser.basename(path), pathParser.basename(path, pathParser.extname(filePath)))}`\n}\n\nexport type PathMode = 'file' | 'directory'\n\nexport function getPathMode(path: string | undefined | null): PathMode {\n if (!path) {\n return 'directory'\n }\n return pathParser.extname(path) ? 'file' : 'directory'\n}\n\nexport async function read(path: string) {\n try {\n return fs.readFile(path, { encoding: 'utf8' })\n } catch (err) {\n console.error(err)\n throw err\n }\n}\n","type Data = string[][]\n\ntype Options = {\n typed?: boolean\n}\n\nexport function objectToParameters(data: Data, options: Options = {}) {\n return data\n .reduce((acc, [key, value]) => {\n if (options.typed) {\n acc.push(`${key}: ${value}[\"${key}\"], `)\n } else {\n acc.push(`${key},`)\n }\n\n return acc\n }, [] as string[])\n .join('')\n}\n","export function nameSorter<T extends { name: string }>(a: T, b: T) {\n if (a.name < b.name) {\n return -1\n }\n if (a.name > b.name) {\n return 1\n }\n return 0\n}\n","export function createJSDocBlockText({ comments }: { comments: Array<string> }): string {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return ''\n }\n\n const text = filteredComments.reduce((acc, comment) => {\n return `${acc}\\n* ${comment}`\n }, '/**')\n\n return `${text}\\n*/`\n}\n","/* eslint-disable no-param-reassign */\nexport function getUniqueName(originalName: string, data: Record<string, number>) {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n originalName += used\n }\n data[originalName] = 1\n return originalName\n}\n","export async function timeout(ms: number) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n","/* eslint-disable no-cond-assign */\n\nexport type QueueTask<T = unknown> = {\n (...args: unknown[]): Promise<T>\n}\n\ninterface QueueItem {\n reject: <T>(reason?: T) => void\n resolve: <T>(value: T | PromiseLike<T>) => void\n task: QueueTask<unknown>\n}\n\nexport class Queue {\n private readonly queue: QueueItem[] = []\n\n workerCount = 0\n\n private maxParallel: number\n\n constructor(maxParallel: number) {\n this.maxParallel = maxParallel\n }\n\n run<T>(task: QueueTask<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const item: QueueItem = { reject, resolve, task } as QueueItem\n this.queue.push(item)\n this.work()\n })\n }\n\n private async work(): Promise<void> {\n if (this.workerCount >= this.maxParallel) return\n this.workerCount++\n\n let entry: QueueItem | undefined\n while ((entry = this.queue.shift())) {\n const { reject, resolve, task } = entry\n task()\n .then((result) => resolve(result))\n .catch((err) => reject(err))\n }\n\n this.workerCount--\n }\n}\n","export function getEncodedText(text?: string): string {\n return text ? text.replaceAll('`', '\\\\`') : ''\n}\n","export function renderTemplate<TData extends Record<string, string> = Record<string, string>>(template: string, data: TData | undefined = undefined) {\n if (!data) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n return template.replace(/{{(.*?)}}/g, (match) => {\n const value = data[match.split(/{{|}}/).filter(Boolean)[0].trim()]\n\n return value || ''\n })\n}\n","import { v4 as uuidv4 } from 'uuid'\n\nimport { write, read } from '../../utils'\n\nimport type { QueueTask, Queue } from '../../utils'\nimport type { CacheStore, UUID, Status, File } from './types'\n\nexport class FileManager {\n private cache: Map<CacheStore['id'], CacheStore> = new Map()\n\n private task?: QueueTask<unknown>\n\n private queue?: Queue\n\n constructor(options?: { queue: Queue; task: QueueTask<unknown> }) {\n if (options) {\n this.task = options.task\n this.queue = options.queue\n }\n }\n\n private getCache(id: UUID) {\n return this.cache.get(id)\n }\n\n private getCacheByPath(path: string | undefined): CacheStore | undefined {\n let cache\n\n this.cache.forEach((item) => {\n if (item.file.path === path) {\n cache = item\n }\n })\n return cache as unknown as CacheStore\n }\n\n get files() {\n const files: File[] = []\n this.cache.forEach((item) => {\n files.push(item.file)\n })\n\n return files\n }\n\n async add(file: File) {\n const cacheItem = { id: uuidv4(), file, status: 'new' as Status }\n\n this.cache.set(cacheItem.id, cacheItem)\n\n if (this.queue) {\n await this.queue.run(async () => {\n await this.task?.(cacheItem.id, file)\n })\n }\n\n return file\n }\n\n addOrAppend(file: File) {\n const previousCache = this.getCacheByPath(file.path)\n\n if (previousCache) {\n this.cache.delete(previousCache.id)\n return this.add({\n ...file,\n source: `${previousCache.file.source}\\n${file.source}`,\n imports: [...(previousCache.file.imports || []), ...(file.imports || [])],\n })\n }\n return this.add(file)\n }\n\n setStatus(id: UUID, status: Status) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n cacheItem.status = status\n this.cache.set(id, cacheItem)\n }\n\n get(id: UUID) {\n const cacheItem = this.getCache(id)\n return cacheItem?.file\n }\n\n remove(id: UUID) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n this.setStatus(id, 'removed')\n }\n\n async write(...params: Parameters<typeof write>) {\n return write(...params)\n }\n\n async read(...params: Parameters<typeof read>) {\n return read(...params)\n }\n}\n","import dirTree from 'directory-tree'\n\nimport type { DirectoryTree, DirectoryTreeOptions } from 'directory-tree'\n\nexport type TreeNodeOptions = DirectoryTreeOptions\n\nexport class TreeNode<T = unknown> {\n public data: T\n\n public parent?: TreeNode<T>\n\n public children: Array<TreeNode<T>> = []\n\n constructor(data: T, parent?: TreeNode<T>) {\n this.data = data\n this.parent = parent\n return this\n }\n\n addChild(data: T): TreeNode<T> {\n const child = new TreeNode(data, this)\n if (!this.children) {\n this.children = []\n }\n this.children.push(child)\n return child\n }\n\n find(data: T) {\n if (data === this.data) {\n return this\n }\n\n if (this.children) {\n for (let i = 0, { length } = this.children, target: unknown = null; i < length; i++) {\n target = this.children[i].find(data)\n if (target) {\n return target\n }\n }\n }\n\n return null\n }\n\n leaves(): TreeNode<T>[] {\n if (!this.children || this.children.length === 0) {\n // this is a leaf\n return [this]\n }\n\n // if not a leaf, return all children's leaves recursively\n const leaves: TreeNode<T>[] = []\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n // eslint-disable-next-line prefer-spread\n leaves.push.apply(leaves, this.children[i].leaves())\n }\n }\n return leaves\n }\n\n root(): TreeNode<T> {\n if (!this.parent) {\n return this\n }\n return this.parent.root()\n }\n\n forEach(callback: (treeNode: TreeNode<T>) => void): this {\n if (typeof callback !== 'function') {\n throw new TypeError('forEach() callback must be a function')\n }\n\n // run this node through function\n callback(this)\n\n // do the same for all children\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n this.children[i].forEach(callback)\n }\n }\n\n return this\n }\n\n public static build<T = unknown>(path: string, options: TreeNodeOptions = {}): TreeNode<T> | null {\n const filteredTree = dirTree(path, { extensions: options?.extensions, exclude: options.exclude })\n\n if (!filteredTree) {\n return null\n }\n\n const treeNode = new TreeNode({ name: filteredTree.name, path: filteredTree.path, type: filteredTree.type })\n\n const recurse = (node: typeof treeNode, item: DirectoryTree) => {\n const subNode = node.addChild({ name: item.name, path: item.path, type: item.type })\n\n if (item.children?.length) {\n item.children?.forEach((child) => {\n recurse(subNode, child)\n })\n }\n }\n\n filteredTree.children?.forEach((child) => recurse(treeNode, child))\n\n return treeNode as TreeNode<T>\n }\n}\n","import uniq from 'lodash.uniq'\n\nimport type { File } from './types'\n\nexport function combineFiles(files: Array<File | null>) {\n return files.filter(Boolean).reduce((acc, curr: File | null) => {\n if (!curr) {\n return acc\n }\n const prevIndex = acc.findIndex((item) => item.path === curr.path)\n\n if (prevIndex !== -1) {\n const prev = acc[prevIndex]\n acc[prevIndex] = {\n ...curr,\n source: `${prev.source}\\n${curr.source}`,\n imports: [...(prev.imports || []), ...(curr.imports || [])],\n }\n } else {\n acc.push(curr)\n }\n\n return acc\n }, [] as File[])\n}\n\nexport function getFileSource(file: File) {\n // TODO make generic check\n if (!file.fileName.endsWith('.ts')) {\n return file.source\n }\n const imports: File['imports'] = []\n\n file.imports?.forEach((curr) => {\n const exists = imports.find((imp) => imp.path === curr.path)\n if (!exists) {\n imports.push({\n ...curr,\n name: Array.isArray(curr.name) ? uniq(curr.name) : curr.name,\n })\n }\n\n if (exists && !Array.isArray(exists.name) && exists.name !== curr.name) {\n imports.push(curr)\n }\n\n if (exists && Array.isArray(exists.name)) {\n if (Array.isArray(curr.name)) {\n exists.name = uniq([...exists.name, ...curr.name])\n }\n }\n })\n\n const importSource = imports.reduce((prev, curr) => {\n if (Array.isArray(curr.name)) {\n return `${prev}\\nimport ${curr.isTypeOnly ? 'type ' : ''}{ ${curr.name.join(', ')} } from \"${curr.path}\";`\n }\n\n return `${prev}\\nimport ${curr.isTypeOnly ? 'type ' : ''}${curr.name} from \"${curr.path}\";`\n }, '')\n\n if (importSource) {\n return `${importSource}\\n${file.source}`\n }\n\n return file.source\n}\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport { definePlugin } from '../../plugin'\nimport { FileManager } from '../fileManager'\nimport { Queue } from '../../utils/queue'\n\nimport type { QueueTask } from '../../utils/queue'\nimport type { Argument0, Strategy } from './types'\nimport type { KubbConfig, KubbPlugin, PluginLifecycleHooks, PluginLifecycle, MaybePromise, ResolvePathParams, ResolveNameParams } from '../../types'\nimport type { Logger } from '../../build'\nimport type { CorePluginOptions } from '../../plugin'\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n\n// This will make sure no input hook is omitted\nconst hookNames: {\n [P in PluginLifecycleHooks]: 1\n} = {\n validate: 1,\n buildStart: 1,\n resolvePath: 1,\n resolveName: 1,\n load: 1,\n transform: 1,\n writeFile: 1,\n buildEnd: 1,\n}\nexport const hooks = Object.keys(hookNames) as [PluginLifecycleHooks]\n\nexport class PluginManager {\n public plugins: KubbPlugin[]\n\n public readonly fileManager: FileManager\n\n private readonly logger?: Logger\n\n private readonly config: KubbConfig\n\n public readonly core: KubbPlugin<CorePluginOptions>\n\n public queue: Queue\n\n constructor(config: KubbConfig, options: { logger?: Logger; task: QueueTask }) {\n this.logger = options.logger\n this.config = config\n this.queue = new Queue(10)\n\n this.fileManager = new FileManager({ task: options.task, queue: this.queue })\n this.core = definePlugin({\n config,\n fileManager: this.fileManager,\n load: this.load,\n resolvePath: this.resolvePath,\n resolveName: this.resolveName,\n }) as KubbPlugin<CorePluginOptions> & {\n api: CorePluginOptions['api']\n }\n this.plugins = [this.core, ...(config.plugins || [])]\n }\n\n resolvePath = (params: ResolvePathParams) => {\n if (params.pluginName) {\n return this.hookForPluginSync({\n pluginName: params.pluginName,\n hookName: 'resolvePath',\n parameters: [params.fileName, params.directory, params.options],\n })\n }\n return this.hookFirstSync({\n hookName: 'resolvePath',\n parameters: [params.fileName, params.directory, params.options],\n })\n }\n\n resolveName = (params: ResolveNameParams) => {\n if (params.pluginName) {\n return this.hookForPluginSync({\n pluginName: params.pluginName,\n hookName: 'resolveName',\n parameters: [params.name],\n })\n }\n return this.hookFirstSync({\n hookName: 'resolveName',\n parameters: [params.name],\n })\n }\n\n load = async (id: string) => {\n return this.hookFirst({\n hookName: 'load',\n parameters: [id],\n })\n }\n\n /**\n *\n * Run only hook for a specific plugin name\n */\n hookForPlugin<H extends PluginLifecycleHooks>({\n pluginName,\n hookName,\n parameters,\n }: {\n pluginName: string\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n }): Promise<ReturnType<PluginLifecycle[H]> | null> {\n const plugin = this.getPlugin(hookName, pluginName)\n\n return this.run({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n }\n\n hookForPluginSync<H extends PluginLifecycleHooks>({\n pluginName,\n hookName,\n parameters,\n }: {\n pluginName: string\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n }): ReturnType<PluginLifecycle[H]> | null {\n const plugin = this.getPlugin(hookName, pluginName)\n\n return this.runSync({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n }\n\n /**\n *\n * Chains, first non-null result stops and returns\n */\n hookFirst<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n }: {\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n skipped?: ReadonlySet<KubbPlugin> | null\n }): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n }) as typeof result\n })\n }\n return promise\n }\n\n /**\n *\n * Chains, first non-null result stops and returns\n */\n hookFirstSync<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n }: {\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n skipped?: ReadonlySet<KubbPlugin> | null\n }): ReturnType<PluginLifecycle[H]> | null {\n let result = null\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) continue\n\n result = this.runSync({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n\n if (result != null) {\n break\n }\n }\n return result\n }\n\n // parallel\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>({\n hookName,\n parameters,\n }: {\n hookName: H\n parameters?: Parameters<PluginLifecycle[H]> | undefined\n }) {\n const parallelPromises: Promise<TOuput>[] = []\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if ((plugin[hookName] as { sequential?: boolean })?.sequential) {\n await Promise.all(parallelPromises)\n parallelPromises.length = 0\n await this.run({\n strategy: 'hookParallel',\n hookName,\n parameters,\n plugin,\n })\n } else {\n const promise: Promise<TOuput> = this.run({ strategy: 'hookParallel', hookName, parameters, plugin })\n\n parallelPromises.push(promise)\n }\n }\n return Promise.all(parallelPromises)\n }\n\n // chains, reduces returned value, handling the reduced value as the first hook argument\n hookReduceArg0<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n reduce,\n }: {\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n reduce: (reduction: Argument0<H>, result: ReturnType<PluginLifecycle[H]>, plugin: KubbPlugin) => MaybePromise<Argument0<H> | null>\n }): Promise<Argument0<H>> {\n const [argument0, ...rest] = parameters\n\n let promise: Promise<Argument0<H>> = Promise.resolve(argument0)\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then((argument0) =>\n this.run({\n strategy: 'hookReduceArg0',\n hookName,\n parameters: [argument0, ...rest] as Parameters<PluginLifecycle[H]>,\n plugin,\n }).then((result) => reduce.call(this.core.api, argument0, result as ReturnType<PluginLifecycle[H]>, plugin))\n ) as Promise<Argument0<H>>\n }\n return promise\n }\n\n // chains\n\n hookSeq<H extends PluginLifecycleHooks>({ hookName, parameters }: { hookName: H; parameters?: Parameters<PluginLifecycle[H]> }) {\n let promise: Promise<void> = Promise.resolve()\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then(() =>\n this.run({\n strategy: 'hookSeq',\n hookName,\n parameters,\n plugin,\n })\n )\n }\n return promise.then(noReturn)\n }\n\n private getSortedPlugins(_hookName: keyof PluginLifecycle): KubbPlugin[] {\n const plugins = [...this.plugins]\n\n return plugins\n }\n\n private getPlugin(hookName: keyof PluginLifecycle, pluginName: string): KubbPlugin {\n const plugins = [...this.plugins]\n\n const pluginByPluginName = plugins.find((item) => item.name === pluginName && item[hookName])\n if (!pluginByPluginName) {\n // fallback on the core plugin when there is no match\n if (this.config.logLevel === 'warn' && this.logger?.spinner) {\n this.logger.spinner.info(`Plugin hook with ${hookName} not found for plugin ${pluginName}`)\n }\n return this.core\n }\n return pluginByPluginName\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n private run<H extends PluginLifecycleHooks, TResult = void>({\n strategy,\n hookName,\n parameters,\n plugin,\n }: {\n strategy: Strategy\n hookName: H\n parameters: unknown[] | undefined\n plugin: KubbPlugin\n }): Promise<TResult> {\n const hook = plugin[hookName]!\n\n return Promise.resolve()\n .then(() => {\n if (typeof hook !== 'function') {\n return hook\n }\n\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.text = `[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`\n }\n\n const hookResult = (hook as Function).apply(this.core.api, parameters)\n\n if (!(hookResult as Promise<unknown>)?.then) {\n // short circuit for non-thenables and non-Promises\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return hookResult\n }\n\n return Promise.resolve(hookResult).then((result) => {\n // action was fulfilled\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return result\n })\n })\n .catch((e: Error) => {\n this.catcher<H>(e, plugin, hookName)\n }) as Promise<TResult>\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n private runSync<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n }: {\n strategy: Strategy\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n plugin: KubbPlugin\n }): ReturnType<PluginLifecycle[H]> {\n const hook = plugin[hookName]!\n\n // const context = this.pluginContexts.get(plugin)!;\n\n try {\n // eslint-disable-next-line @typescript-eslint/ban-types\n if (typeof hook !== 'function') {\n return hook\n }\n\n return (hook as Function).apply(this.core.api, parameters)\n } catch (e) {\n this.catcher<H>(e as Error, plugin, hookName)\n return null as ReturnType<PluginLifecycle[H]>\n }\n }\n\n private catcher<H extends PluginLifecycleHooks>(e: Error, plugin: KubbPlugin, hookName: H) {\n const text = `${e.message} (plugin: ${plugin.name}, hook: ${hookName})\\n`\n\n throw new Error(text, { cause: e })\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noReturn() {}\n","import type { KubbPlugin } from '../../types'\n\nexport class ValidationPluginError extends Error {}\n\nexport function validatePlugins(plugins: KubbPlugin[], dependedPluginNames: string | string[]): true {\n let pluginNames: string[] = []\n if (typeof dependedPluginNames === 'string') {\n pluginNames = [dependedPluginNames]\n } else {\n pluginNames = dependedPluginNames\n }\n\n pluginNames.forEach((pluginName) => {\n const exists = plugins.some((plugin) => plugin.name === pluginName)\n if (!exists) {\n throw new ValidationPluginError(`This plugin depends on the ${pluginName} plugin.`)\n }\n })\n\n return true\n}\n","import type { MaybePromise, KubbUserConfig, CLIOptions } from './types'\n\n/**\n * Type helper to make it easier to use kubb.config.ts\n * accepts a direct {@link KubbConfig} object, or a function that returns it.\n * The function receives a {@link ConfigEnv} object that exposes two properties:\n */\nexport const defineConfig = (\n options:\n | MaybePromise<KubbUserConfig>\n | ((\n /** The options derived from the CLI flags */\n cliOptions: CLIOptions\n ) => MaybePromise<KubbUserConfig>)\n) => options\n","/**\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 Generator<TOptions extends object = object> {\n private _options: TOptions = {} as TOptions\n\n constructor(options: TOptions = {} as TOptions) {\n if (options) {\n this._options = {\n ...this._options,\n ...options,\n }\n }\n return this\n }\n\n get options() {\n return this._options\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import { Generator } from './Generator'\n/**\n * Abstract class that contains the building blocks for plugins to create their own SchemaGenerator\n */\nexport abstract class SchemaGenerator<TOptions extends object, TInput, TOutput> extends Generator<TOptions> {\n abstract build(schema: TInput, name: string, description?: string): TOutput\n}\n","/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { build } from './build'\n\nexport * from './config'\nexport * from './build'\nexport { CorePluginOptions, createPlugin, name } from './plugin'\nexport * from './utils'\nexport * from './types'\nexport * from './managers'\nexport * from './generators'\n\nexport default build\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,8 +8,10 @@ interface Cache<T extends object = object> {
|
|
|
8
8
|
}
|
|
9
9
|
declare function createPluginCache<T extends Record<string, [number, unknown]>>(cache: T): Cache<T>;
|
|
10
10
|
|
|
11
|
+
interface Register {
|
|
12
|
+
}
|
|
11
13
|
type MaybePromise<T> = Promise<T> | T;
|
|
12
|
-
type KubbUserConfig = Omit<KubbConfig, 'root'> & {
|
|
14
|
+
type KubbUserConfig = Omit<KubbConfig, 'root' | 'plugins'> & {
|
|
13
15
|
/**
|
|
14
16
|
* Project root directory. Can be an absolute path, or a path relative from
|
|
15
17
|
* the location of the config file itself.
|
|
@@ -21,7 +23,7 @@ type KubbUserConfig = Omit<KubbConfig, 'root'> & {
|
|
|
21
23
|
* Example: ['@kubb/swagger', { output: false }]
|
|
22
24
|
* Or: createSwagger({ output: false })
|
|
23
25
|
*/
|
|
24
|
-
plugins?:
|
|
26
|
+
plugins?: KubbPlugin[] | KubbJSONPlugin[] | KubbObjectPlugin;
|
|
25
27
|
};
|
|
26
28
|
/**
|
|
27
29
|
* Global/internal config used through out the full generation.
|
|
@@ -82,7 +84,10 @@ type CLIOptions = {
|
|
|
82
84
|
watch?: string;
|
|
83
85
|
};
|
|
84
86
|
type KubbPluginKind = 'schema' | 'controller';
|
|
85
|
-
type KubbJSONPlugin = [
|
|
87
|
+
type KubbJSONPlugin = [plugin: keyof Register | string, options: Register[keyof Register] | object];
|
|
88
|
+
type KubbObjectPlugin = {
|
|
89
|
+
[K in keyof Register]: Register[K] | object;
|
|
90
|
+
};
|
|
86
91
|
type KubbPlugin<TOptions extends PluginFactoryOptions = PluginFactoryOptions> = {
|
|
87
92
|
/**
|
|
88
93
|
* Unique name used for the plugin
|
|
@@ -105,11 +110,11 @@ type KubbPlugin<TOptions extends PluginFactoryOptions = PluginFactoryOptions> =
|
|
|
105
110
|
*/
|
|
106
111
|
options?: TOptions['options'];
|
|
107
112
|
} & Partial<PluginLifecycle<TOptions>>;
|
|
108
|
-
type PluginFactoryOptions<Options = unknown, Nested extends boolean = false, Api = any,
|
|
113
|
+
type PluginFactoryOptions<Options = unknown, Nested extends boolean = false, Api = any, resolvePathOptions = Record<string, any>> = {
|
|
109
114
|
options: Options;
|
|
110
|
-
resolveIdOptions: ResolveIdOptions;
|
|
111
115
|
nested: Nested;
|
|
112
116
|
api: Api;
|
|
117
|
+
resolvePathOptions: resolvePathOptions;
|
|
113
118
|
};
|
|
114
119
|
type PluginLifecycle<TOptions extends PluginFactoryOptions = PluginFactoryOptions> = {
|
|
115
120
|
/**
|
|
@@ -123,13 +128,21 @@ type PluginLifecycle<TOptions extends PluginFactoryOptions = PluginFactoryOption
|
|
|
123
128
|
*/
|
|
124
129
|
buildStart: (this: PluginContext, kubbConfig: KubbConfig) => MaybePromise<void>;
|
|
125
130
|
/**
|
|
126
|
-
* Resolve to
|
|
131
|
+
* Resolve to a Path based on a fileName(example: `./Pet.ts`) and directory(example: `./models`).
|
|
132
|
+
* Options can als be included.
|
|
133
|
+
* @type hookFirst
|
|
134
|
+
* @example ('./Pet.ts', './src/gen/') => '/src/gen/Pet.ts'
|
|
135
|
+
*/
|
|
136
|
+
resolvePath: (this: Omit<PluginContext, 'addFile'>, fileName: string, directory?: string, options?: TOptions['resolvePathOptions']) => OptionalPath;
|
|
137
|
+
/**
|
|
138
|
+
* Resolve to a name based on a string.
|
|
139
|
+
* Useful when converting to PascalCase or camelCase.
|
|
127
140
|
* @type hookFirst
|
|
128
|
-
* @example ('
|
|
141
|
+
* @example ('pet') => 'Pet'
|
|
129
142
|
*/
|
|
130
|
-
|
|
143
|
+
resolveName: (this: Omit<PluginContext, 'addFile'>, name: string) => string | null;
|
|
131
144
|
/**
|
|
132
|
-
* Makes it possible to run async logic to override the path defined previously by `
|
|
145
|
+
* Makes it possible to run async logic to override the path defined previously by `resolvePath`.
|
|
133
146
|
* @type hookFirst
|
|
134
147
|
*/
|
|
135
148
|
load: (this: Omit<PluginContext, 'addFile'>, path: Path) => MaybePromise<TransformResult | null>;
|
|
@@ -139,7 +152,7 @@ type PluginLifecycle<TOptions extends PluginFactoryOptions = PluginFactoryOption
|
|
|
139
152
|
*/
|
|
140
153
|
transform: (this: Omit<PluginContext, 'addFile'>, source: string, path: Path) => MaybePromise<TransformResult>;
|
|
141
154
|
/**
|
|
142
|
-
* Write the result to the file-system based on the id(defined by `
|
|
155
|
+
* Write the result to the file-system based on the id(defined by `resolvePath` or changed by `load`).
|
|
143
156
|
* @type hookParallel
|
|
144
157
|
*/
|
|
145
158
|
writeFile: (this: Omit<PluginContext, 'addFile'>, source: string | undefined, path: Path) => MaybePromise<void>;
|
|
@@ -150,25 +163,34 @@ type PluginLifecycle<TOptions extends PluginFactoryOptions = PluginFactoryOption
|
|
|
150
163
|
buildEnd: (this: Omit<PluginContext, 'addFile'>) => MaybePromise<void>;
|
|
151
164
|
};
|
|
152
165
|
type PluginLifecycleHooks = keyof PluginLifecycle;
|
|
153
|
-
type
|
|
154
|
-
fileName: string;
|
|
155
|
-
directory?: string | undefined;
|
|
166
|
+
type ResolvePathParams<TOptions = Record<string, any>> = {
|
|
156
167
|
/**
|
|
157
|
-
* When set,
|
|
158
|
-
* If not defined it will fall back on the
|
|
168
|
+
* When set, resolvePath will only call resolvePath of the name of the plugin set here.
|
|
169
|
+
* If not defined it will fall back on the resolvePath of the core plugin.
|
|
159
170
|
*/
|
|
160
171
|
pluginName?: string;
|
|
172
|
+
fileName: string;
|
|
173
|
+
directory?: string | undefined;
|
|
161
174
|
/**
|
|
162
|
-
* Options to be passed to '
|
|
175
|
+
* Options to be passed to 'resolvePath' 3th parameter
|
|
163
176
|
*/
|
|
164
177
|
options?: TOptions;
|
|
165
178
|
};
|
|
179
|
+
type ResolveNameParams = {
|
|
180
|
+
/**
|
|
181
|
+
* When set, resolvePath will only call resolvePath of the name of the plugin set here.
|
|
182
|
+
* If not defined it will fall back on the resolvePath of the core plugin.
|
|
183
|
+
*/
|
|
184
|
+
pluginName?: string;
|
|
185
|
+
name: string;
|
|
186
|
+
};
|
|
166
187
|
type PluginContext<TOptions = Record<string, any>> = {
|
|
167
188
|
config: KubbConfig;
|
|
168
189
|
cache: Cache;
|
|
169
190
|
fileManager: FileManager;
|
|
170
191
|
addFile: (file: File) => Promise<File>;
|
|
171
|
-
|
|
192
|
+
resolvePath: (params: ResolvePathParams<TOptions>) => OptionalPath;
|
|
193
|
+
resolveName: (params: ResolveNameParams) => string | null;
|
|
172
194
|
load: (id: string) => MaybePromise<TransformResult | void>;
|
|
173
195
|
};
|
|
174
196
|
type TransformResult = string | null;
|
|
@@ -201,11 +223,11 @@ declare function objectToParameters(data: Data, options?: Options$1): string;
|
|
|
201
223
|
|
|
202
224
|
declare function nameSorter<T extends {
|
|
203
225
|
name: string;
|
|
204
|
-
}>(a: T, b: T):
|
|
226
|
+
}>(a: T, b: T): 0 | 1 | -1;
|
|
205
227
|
|
|
206
228
|
declare function createJSDocBlockText({ comments }: {
|
|
207
|
-
comments: Array<string
|
|
208
|
-
}): string
|
|
229
|
+
comments: Array<string>;
|
|
230
|
+
}): string;
|
|
209
231
|
|
|
210
232
|
declare function getUniqueName(originalName: string, data: Record<string, number>): string;
|
|
211
233
|
|
|
@@ -223,8 +245,12 @@ declare class Queue {
|
|
|
223
245
|
private work;
|
|
224
246
|
}
|
|
225
247
|
|
|
248
|
+
declare function getEncodedText(text?: string): string;
|
|
249
|
+
|
|
250
|
+
declare function renderTemplate<TData extends Record<string, string> = Record<string, string>>(template: string, data?: TData | undefined): string;
|
|
251
|
+
|
|
226
252
|
type Import = {
|
|
227
|
-
name: string | string[];
|
|
253
|
+
name: string | string[] | readonly string[];
|
|
228
254
|
path: string;
|
|
229
255
|
isTypeOnly?: boolean;
|
|
230
256
|
};
|
|
@@ -258,11 +284,9 @@ declare class FileManager {
|
|
|
258
284
|
});
|
|
259
285
|
private getCache;
|
|
260
286
|
private getCacheByPath;
|
|
261
|
-
getSource(file: File): string;
|
|
262
287
|
get files(): File[];
|
|
263
288
|
add(file: File): Promise<File>;
|
|
264
289
|
addOrAppend(file: File): Promise<File>;
|
|
265
|
-
combine(files: Array<File | null>): File[];
|
|
266
290
|
setStatus(id: UUID, status: Status): void;
|
|
267
291
|
get(id: UUID): File | undefined;
|
|
268
292
|
remove(id: UUID): void;
|
|
@@ -284,6 +308,9 @@ declare class TreeNode<T = unknown> {
|
|
|
284
308
|
static build<T = unknown>(path: string, options?: TreeNodeOptions): TreeNode<T> | null;
|
|
285
309
|
}
|
|
286
310
|
|
|
311
|
+
declare function combineFiles(files: Array<File | null>): File[];
|
|
312
|
+
declare function getFileSource(file: File): string;
|
|
313
|
+
|
|
287
314
|
type BuildOutput = {
|
|
288
315
|
files: FileManager['files'];
|
|
289
316
|
};
|
|
@@ -321,7 +348,8 @@ declare function createPlugin<T extends PluginFactoryOptions = PluginFactoryOpti
|
|
|
321
348
|
type Options = {
|
|
322
349
|
config: PluginContext['config'];
|
|
323
350
|
fileManager: FileManager;
|
|
324
|
-
|
|
351
|
+
resolvePath: PluginContext['resolvePath'];
|
|
352
|
+
resolveName: PluginContext['resolveName'];
|
|
325
353
|
load: PluginContext['load'];
|
|
326
354
|
};
|
|
327
355
|
type CorePluginOptions = PluginFactoryOptions<Options, false, PluginContext>;
|
|
@@ -346,14 +374,56 @@ declare class PluginManager {
|
|
|
346
374
|
logger?: Logger;
|
|
347
375
|
task: QueueTask;
|
|
348
376
|
});
|
|
349
|
-
|
|
377
|
+
resolvePath: (params: ResolvePathParams) => OptionalPath;
|
|
378
|
+
resolveName: (params: ResolveNameParams) => string | null;
|
|
350
379
|
load: (id: string) => Promise<TransformResult>;
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
380
|
+
/**
|
|
381
|
+
*
|
|
382
|
+
* Run only hook for a specific plugin name
|
|
383
|
+
*/
|
|
384
|
+
hookForPlugin<H extends PluginLifecycleHooks>({ pluginName, hookName, parameters, }: {
|
|
385
|
+
pluginName: string;
|
|
386
|
+
hookName: H;
|
|
387
|
+
parameters: Parameters<PluginLifecycle[H]>;
|
|
388
|
+
}): Promise<ReturnType<PluginLifecycle[H]> | null>;
|
|
389
|
+
hookForPluginSync<H extends PluginLifecycleHooks>({ pluginName, hookName, parameters, }: {
|
|
390
|
+
pluginName: string;
|
|
391
|
+
hookName: H;
|
|
392
|
+
parameters: Parameters<PluginLifecycle[H]>;
|
|
393
|
+
}): ReturnType<PluginLifecycle[H]> | null;
|
|
394
|
+
/**
|
|
395
|
+
*
|
|
396
|
+
* Chains, first non-null result stops and returns
|
|
397
|
+
*/
|
|
398
|
+
hookFirst<H extends PluginLifecycleHooks>({ hookName, parameters, skipped, }: {
|
|
399
|
+
hookName: H;
|
|
400
|
+
parameters: Parameters<PluginLifecycle[H]>;
|
|
401
|
+
skipped?: ReadonlySet<KubbPlugin> | null;
|
|
402
|
+
}): Promise<ReturnType<PluginLifecycle[H]> | null>;
|
|
403
|
+
/**
|
|
404
|
+
*
|
|
405
|
+
* Chains, first non-null result stops and returns
|
|
406
|
+
*/
|
|
407
|
+
hookFirstSync<H extends PluginLifecycleHooks>({ hookName, parameters, skipped, }: {
|
|
408
|
+
hookName: H;
|
|
409
|
+
parameters: Parameters<PluginLifecycle[H]>;
|
|
410
|
+
skipped?: ReadonlySet<KubbPlugin> | null;
|
|
411
|
+
}): ReturnType<PluginLifecycle[H]> | null;
|
|
412
|
+
hookParallel<H extends PluginLifecycleHooks, TOuput = void>({ hookName, parameters, }: {
|
|
413
|
+
hookName: H;
|
|
414
|
+
parameters?: Parameters<PluginLifecycle[H]> | undefined;
|
|
415
|
+
}): Promise<Awaited<TOuput>[]>;
|
|
416
|
+
hookReduceArg0<H extends PluginLifecycleHooks>({ hookName, parameters, reduce, }: {
|
|
417
|
+
hookName: H;
|
|
418
|
+
parameters: Parameters<PluginLifecycle[H]>;
|
|
419
|
+
reduce: (reduction: Argument0<H>, result: ReturnType<PluginLifecycle[H]>, plugin: KubbPlugin) => MaybePromise<Argument0<H> | null>;
|
|
420
|
+
}): Promise<Argument0<H>>;
|
|
421
|
+
hookSeq<H extends PluginLifecycleHooks>({ hookName, parameters }: {
|
|
422
|
+
hookName: H;
|
|
423
|
+
parameters?: Parameters<PluginLifecycle[H]>;
|
|
424
|
+
}): Promise<void>;
|
|
356
425
|
private getSortedPlugins;
|
|
426
|
+
private getPlugin;
|
|
357
427
|
/**
|
|
358
428
|
* Run an async plugin hook and return the result.
|
|
359
429
|
* @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.
|
|
@@ -394,4 +464,4 @@ declare abstract class SchemaGenerator<TOptions extends object, TInput, TOutput>
|
|
|
394
464
|
abstract build(schema: TInput, name: string, description?: string): TOutput;
|
|
395
465
|
}
|
|
396
466
|
|
|
397
|
-
export { Argument0, CLIOptions, Cache, CacheStore, CorePluginOptions, File, FileManager, FileName, Generator, KubbBuild, KubbConfig, KubbJSONPlugin, KubbPlugin, KubbPluginKind, KubbUserConfig, LogLevel, LogType, Logger, MaybePromise, OptionalPath, Path, PathMode, PluginContext, PluginFactoryOptions, PluginLifecycle, PluginLifecycleHooks, PluginManager, Queue, QueueTask,
|
|
467
|
+
export { Argument0, CLIOptions, Cache, CacheStore, CorePluginOptions, File, FileManager, FileName, Generator, KubbBuild, KubbConfig, KubbJSONPlugin, KubbObjectPlugin, KubbPlugin, KubbPluginKind, KubbUserConfig, LogLevel, LogType, Logger, MaybePromise, OptionalPath, Path, PathMode, PluginContext, PluginFactoryOptions, PluginLifecycle, PluginLifecycleHooks, PluginManager, Queue, QueueTask, Register, ResolveNameParams, ResolvePathParams, SchemaGenerator, Status, Strategy, TransformResult, TreeNode, TreeNodeOptions, UUID, ValidationPluginError, build, clean, combineFiles, createJSDocBlockText, createPlugin, createPluginCache, build as default, defineConfig, getEncodedText, getFileSource, getPathMode, getRelativePath, getUniqueName, hooks, isPromise, isURL, name, nameSorter, objectToParameters, read, renderTemplate, timeout, validatePlugins, write };
|