@kubb/core 0.56.2 → 0.56.3

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.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module';
2
- import pathParser from 'path';
2
+ import pathParser2 from 'path';
3
3
  import { promises } from 'fs';
4
4
  import rimraf from 'rimraf';
5
5
  import { format as format$1 } from 'prettier';
@@ -11,7 +11,7 @@ import dirTree from 'directory-tree';
11
11
  createRequire(import.meta.url);
12
12
 
13
13
  // src/utils/isURL.ts
14
- var isURL = (data) => {
14
+ function isURL(data) {
15
15
  try {
16
16
  const url = new URL(data);
17
17
  if (url?.href) {
@@ -21,18 +21,18 @@ var isURL = (data) => {
21
21
  return false;
22
22
  }
23
23
  return false;
24
- };
24
+ }
25
25
 
26
26
  // src/utils/isPromise.ts
27
- var isPromise = (result) => {
27
+ function isPromise(result) {
28
28
  return typeof result?.then === "function";
29
- };
30
- var safeWriteFileToPath = async (path, data) => {
31
- const passedPath = pathParser.dirname(pathParser.resolve(path));
29
+ }
30
+ async function safeWriteFileToPath(path, data) {
31
+ const passedPath = pathParser2.dirname(pathParser2.resolve(path));
32
32
  await promises.mkdir(passedPath, { recursive: true });
33
- return promises.writeFile(pathParser.resolve(path), data, { encoding: "utf-8" });
34
- };
35
- var write = async (data, path) => {
33
+ return promises.writeFile(pathParser2.resolve(path), data, { encoding: "utf-8" });
34
+ }
35
+ async function write(data, path) {
36
36
  try {
37
37
  await promises.stat(path);
38
38
  const oldContent = await promises.readFile(path, { encoding: "utf-8" });
@@ -43,8 +43,8 @@ var write = async (data, path) => {
43
43
  return safeWriteFileToPath(path, data);
44
44
  }
45
45
  return safeWriteFileToPath(path, data);
46
- };
47
- var clean = async (path) => {
46
+ }
47
+ async function clean(path) {
48
48
  return new Promise((resolve, reject) => {
49
49
  rimraf(path, (err) => {
50
50
  if (err) {
@@ -54,7 +54,7 @@ var clean = async (path) => {
54
54
  }
55
55
  });
56
56
  });
57
- };
57
+ }
58
58
 
59
59
  // src/utils/cache.ts
60
60
  function createPluginCache(cache) {
@@ -81,27 +81,38 @@ function createPluginCache(cache) {
81
81
  }
82
82
  };
83
83
  }
84
- var getRelativePath = (root, file) => {
85
- if (!root || !file) {
84
+ function slash(path) {
85
+ const isExtendedLengthPath = /^\\\\\?\\/.test(path);
86
+ if (isExtendedLengthPath) {
87
+ return path;
88
+ }
89
+ return path.replace(/\\/g, "/");
90
+ }
91
+ function getRelativePath(rootDir, filePath) {
92
+ if (!rootDir || !filePath) {
86
93
  throw new Error("Root and file should be filled in when retrieving the relativePath");
87
94
  }
88
- const newPath = pathParser.relative(root, file).replace("../", "").replace(".ts", "").trimEnd();
89
- return `./${newPath}`;
90
- };
91
- var getPathMode = (path) => {
95
+ const relativePath = pathParser2.relative(rootDir, filePath);
96
+ const path = slash(relativePath).replace("../", "").trimEnd();
97
+ if (path.startsWith("../")) {
98
+ return path.replace(pathParser2.basename(path), pathParser2.basename(path, pathParser2.extname(filePath)));
99
+ }
100
+ return `./${path.replace(pathParser2.basename(path), pathParser2.basename(path, pathParser2.extname(filePath)))}`;
101
+ }
102
+ function getPathMode(path) {
92
103
  if (!path) {
93
104
  return "directory";
94
105
  }
95
- return pathParser.extname(path) ? "file" : "directory";
96
- };
97
- var read = async (path) => {
106
+ return pathParser2.extname(path) ? "file" : "directory";
107
+ }
108
+ async function read(path) {
98
109
  try {
99
110
  return promises.readFile(path, { encoding: "utf8" });
100
111
  } catch (err) {
101
112
  console.error(err);
102
113
  throw err;
103
114
  }
104
- };
115
+ }
105
116
  var formatOptions = {
106
117
  tabWidth: 2,
107
118
  printWidth: 160,
@@ -112,12 +123,12 @@ var formatOptions = {
112
123
  endOfLine: "auto"
113
124
  // plugins: [parserTypescript],
114
125
  };
115
- var format = (source) => {
126
+ function format(source) {
116
127
  return format$1(source, formatOptions);
117
- };
128
+ }
118
129
 
119
130
  // src/utils/objectToParameters.ts
120
- var objectToParameters = (data, options = {}) => {
131
+ function objectToParameters(data, options = {}) {
121
132
  return data.reduce((acc, [key, value]) => {
122
133
  if (options.typed) {
123
134
  acc.push(`${key}: ${value}["${key}"], `);
@@ -126,10 +137,10 @@ var objectToParameters = (data, options = {}) => {
126
137
  }
127
138
  return acc;
128
139
  }, []).join("");
129
- };
140
+ }
130
141
 
131
142
  // src/utils/nameSorter.ts
132
- var nameSorter = (a, b) => {
143
+ function nameSorter(a, b) {
133
144
  if (a.name < b.name) {
134
145
  return -1;
135
146
  }
@@ -137,10 +148,10 @@ var nameSorter = (a, b) => {
137
148
  return 1;
138
149
  }
139
150
  return 0;
140
- };
151
+ }
141
152
 
142
153
  // src/utils/jsdoc.ts
143
- var createJSDocBlockText = ({ comments }) => {
154
+ function createJSDocBlockText({ comments }) {
144
155
  const filteredComments = comments.filter(Boolean);
145
156
  if (!filteredComments.length) {
146
157
  return void 0;
@@ -151,7 +162,7 @@ var createJSDocBlockText = ({ comments }) => {
151
162
  }, "/**");
152
163
  return `${text}
153
164
  */`;
154
- };
165
+ }
155
166
 
156
167
  // src/plugin.ts
157
168
  function createPlugin(factory) {
@@ -191,7 +202,7 @@ var definePlugin = createPlugin((options) => {
191
202
  if (!directory) {
192
203
  return null;
193
204
  }
194
- return pathParser.resolve(directory, fileName);
205
+ return pathParser2.resolve(directory, fileName);
195
206
  }
196
207
  };
197
208
  });
@@ -204,7 +215,7 @@ var keys = {
204
215
  getSuccessKey: () => `success`,
205
216
  getRemoveKey: (id) => `${id}remove`
206
217
  };
207
- var getFileManagerEvents = (emitter) => {
218
+ function getFileManagerEvents(emitter) {
208
219
  return {
209
220
  /**
210
221
  * Emiter
@@ -248,7 +259,7 @@ var getFileManagerEvents = (emitter) => {
248
259
  return () => emitter.removeListener(keys.getRemoveKey(id), callback);
249
260
  }
250
261
  };
251
- };
262
+ }
252
263
 
253
264
  // src/managers/fileManager/FileManager.ts
254
265
  var FileManager = class {
@@ -654,7 +665,7 @@ function noReturn() {
654
665
  // src/managers/pluginManager/validate.ts
655
666
  var ValidationPluginError = class extends Error {
656
667
  };
657
- var validatePlugins = (plugins, dependedPluginNames) => {
668
+ function validatePlugins(plugins, dependedPluginNames) {
658
669
  let pluginNames = [];
659
670
  if (typeof dependedPluginNames === "string") {
660
671
  pluginNames = [dependedPluginNames];
@@ -668,7 +679,7 @@ var validatePlugins = (plugins, dependedPluginNames) => {
668
679
  }
669
680
  });
670
681
  return true;
671
- };
682
+ }
672
683
 
673
684
  // src/build.ts
674
685
  async function transformReducer(_previousCode, result, _plugin) {
@@ -709,9 +720,9 @@ async function buildImplementation(options, done) {
709
720
  });
710
721
  await pluginManager.hookParallel("buildStart", [config]);
711
722
  pluginManager.fileManager.add({
712
- path: isURL(config.input.path) ? config.input.path : pathParser.resolve(config.root, config.input.path),
723
+ path: isURL(config.input.path) ? config.input.path : pathParser2.resolve(config.root, config.input.path),
713
724
  fileName: isURL(config.input.path) ? "input" : config.input.path,
714
- source: isURL(config.input.path) ? config.input.path : await read(pathParser.resolve(config.root, config.input.path))
725
+ source: isURL(config.input.path) ? config.input.path : await read(pathParser2.resolve(config.root, config.input.path))
715
726
  });
716
727
  }
717
728
  function build(options) {
package/dist/index.js.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/format.ts","../src/utils/objectToParameters.ts","../src/utils/nameSorter.ts","../src/utils/jsdoc.ts","../src/managers/fileManager/FileManager.ts","../src/managers/fileManager/events.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","file","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 { FileManager } 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 mode: 'development' | 'production'\n logger?: Logger\n}\n\nasync function transformReducer(this: PluginContext, _previousCode: string, result: TransformResult, _plugin: KubbPlugin) {\n if (result === null) {\n return null\n }\n return result\n}\n\nasync function buildImplementation(options: BuildOptions, done: (output: BuildOutput) => void) {\n const { config, logger } = options\n\n if (config.output.clean) {\n await clean(config.output.path)\n }\n\n const pluginManager = new PluginManager(config, { logger })\n const { plugins, fileManager } = pluginManager\n\n await pluginManager.hookParallel<'validate', true>('validate', [plugins])\n\n fileManager.events.onSuccess(async () => {\n await pluginManager.hookParallel('buildEnd')\n setTimeout(() => {\n done({ files: fileManager.files.map((file) => ({ ...file, source: fileManager.getSource(file) })) })\n }, 500)\n })\n\n fileManager.events.onAdd(async (id, 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 fileManager.setStatus(id, 'success')\n fileManager.remove(id)\n }\n })\n\n await pluginManager.hookParallel('buildStart', [config])\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 const 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 const isPromise = <T>(result: MaybePromise<T>): result is Promise<T> => {\n return typeof (result as any)?.then === 'function'\n}\n","/* eslint-disable consistent-return */\nimport { promises as fs } from 'fs'\nimport pathParser from 'path'\n\nimport rimraf from 'rimraf'\n\nconst safeWriteFileToPath = async (path: string, data: any) => {\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 const write = async (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 const clean = async (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<TCache = any> {\n delete(id: string): boolean\n get<T = TCache>(id: string): T\n has(id: string): boolean\n set<T = TCache>(id: string, value: T): void\n}\n\nexport function createPluginCache(cache: any): Cache {\n return {\n delete(id: string) {\n return delete cache[id]\n },\n get(id: string) {\n const item = cache[id]\n if (!item) return\n item[0] = 0\n return item[1]\n },\n has(id: string) {\n const item = cache[id]\n if (!item) return false\n item[0] = 0\n return true\n },\n set(id: string, value: any) {\n cache[id] = [0, value]\n },\n }\n}\n","import pathParser from 'path'\nimport { promises as fs } from 'fs'\n\n// TODO check for a better way or resolving the relative path\nexport const getRelativePath = (root?: string | null, file?: string | null) => {\n if (!root || !file) {\n throw new Error('Root and file should be filled in when retrieving the relativePath')\n }\n const newPath = pathParser.relative(root, file).replace('../', '').replace('.ts', '').trimEnd()\n\n return `./${newPath}`\n}\n\nexport type PathMode = 'file' | 'directory'\n\nexport const getPathMode = (path: string | undefined | null): PathMode => {\n if (!path) {\n return 'directory'\n }\n return pathParser.extname(path) ? 'file' : 'directory'\n}\n\nexport const read = async (path: string) => {\n try {\n return fs.readFile(path, { encoding: 'utf8' })\n } catch (err) {\n console.error(err)\n throw err\n }\n}\n","import { format as prettierFormat } from 'prettier'\n// import parserTypescript from 'prettier/parser-typescript'\n\nimport type { Options } from 'prettier'\n\nconst formatOptions: Options = {\n tabWidth: 2,\n printWidth: 160,\n parser: 'typescript',\n singleQuote: true,\n semi: false,\n bracketSameLine: false,\n endOfLine: 'auto',\n // plugins: [parserTypescript],\n}\nexport const format = (source: string) => {\n return prettierFormat(source, formatOptions)\n}\n","type Data = string[][]\n\ntype Options = {\n typed?: boolean\n}\n\nexport const 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 const 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 const 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","import EventEmitter from 'eventemitter3'\nimport uniq from 'lodash.uniq'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport { getFileManagerEvents } from './events'\n\nimport { write, read, format } from '../../utils'\n\nimport type { CacheStore, UUID, Status, File } from './types'\n\nexport class FileManager {\n private cache: Map<CacheStore['id'], CacheStore> = new Map()\n\n emitter = new EventEmitter()\n\n events = getFileManagerEvents(this.emitter)\n\n constructor() {\n this.events.onStatusChange(() => {\n if (this.getCountByStatus('removed') === this.cache.size) {\n // all files are been resolved and written to the file system\n this.events.emitSuccess()\n }\n })\n }\n\n private getCache(id: UUID) {\n return this.cache.get(id)\n }\n\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 CacheStore\n }\n\n private getCountByStatus(status: Status) {\n let count = 0\n\n this.cache.forEach((item) => {\n if (item.status === status) {\n count++\n }\n })\n return count\n }\n\n public getSource(file: File, options: { format?: boolean } = { format: true }) {\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 if (options.format) {\n return format(`${importSource}\\n${file.source}`)\n }\n return `${importSource}\\n${file.source}`\n }\n\n if (options.format) {\n return format(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 add(file: File) {\n const cacheItem = { id: uuidv4(), file, status: 'new' as Status }\n\n this.cache.set(cacheItem.id, cacheItem)\n this.events.emitFile(cacheItem.id, file)\n\n return new Promise<File>((resolve) => {\n const unsubscribe = this.events.onRemove(cacheItem.id, (file) => {\n resolve(file)\n unsubscribe()\n })\n })\n }\n\n 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) => {\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 this.events.emitStatusChange(cacheItem.file)\n this.events.emitStatusChangeById(id, status)\n }\n\n get(id: UUID) {\n const cacheItem = this.getCache(id)\n return cacheItem?.file\n }\n\n remove(id: UUID) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n this.setStatus(id, 'removed')\n this.events.emitRemove(id, cacheItem.file)\n }\n\n 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 type EventEmitter from 'eventemitter3'\nimport type { File, Status, UUID } from './types'\n\nconst keys = {\n getFileKey: () => `file`,\n getStatusChangeKey: () => `status-change`,\n getStatusChangeByIdKey: (id: string) => `${id}-status-change`,\n getSuccessKey: () => `success`,\n getRemoveKey: (id: string) => `${id}remove`,\n} as const\n\ntype VoidFunction = () => void\n\nexport const getFileManagerEvents = (emitter: EventEmitter) => {\n return {\n /**\n * Emiter\n */\n emitFile: (id: UUID, file: File): void => {\n emitter.emit(keys.getFileKey(), id, file)\n },\n emitStatusChange: (file: File): void => {\n emitter.emit(keys.getStatusChangeKey(), file)\n },\n emitStatusChangeById: (id: UUID, status: Status): void => {\n emitter.emit(keys.getStatusChangeByIdKey(id), status)\n },\n emitSuccess: (): void => {\n emitter.emit(keys.getSuccessKey())\n },\n emitRemove: (id: UUID, file: File): void => {\n emitter.emit(keys.getRemoveKey(id), file)\n },\n /**\n * Listeners\n */\n\n onAdd: (callback: (id: UUID, file: File) => void): VoidFunction => {\n emitter.on(keys.getFileKey(), callback)\n return () => emitter.removeListener(keys.getFileKey(), callback)\n },\n onStatusChange: (callback: (file: File) => void): VoidFunction => {\n emitter.on(keys.getStatusChangeKey(), callback)\n return () => emitter.removeListener(keys.getStatusChangeKey(), callback)\n },\n onStatusChangeById: (id: UUID, callback: (status: Status) => void): VoidFunction => {\n emitter.on(keys.getStatusChangeByIdKey(id), callback)\n return () => emitter.removeListener(keys.getStatusChangeByIdKey(id), callback)\n },\n onSuccess: (callback: () => void): VoidFunction => {\n emitter.on(keys.getSuccessKey(), callback)\n return () => emitter.removeListener(keys.getSuccessKey(), callback)\n },\n onRemove: (id: UUID, callback: (file: File) => void): VoidFunction => {\n emitter.on(keys.getRemoveKey(id), callback)\n return () => emitter.removeListener(keys.getRemoveKey(id), callback)\n },\n }\n}\n","import dirTree from 'directory-tree'\n\nimport type { DirectoryTree, DirectoryTreeOptions } from 'directory-tree'\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) {\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: any = 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() {\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 = []\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() {\n if (!this.parent) {\n return this\n }\n return this.parent.root()\n }\n\n forEach(callback: (treeNode: TreeNode<T>) => void) {\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(path: string, options: DirectoryTreeOptions = {}) {\n const filteredTree = dirTree(path, { extensions: options?.extensions, exclude: options.exclude })\n\n if (!filteredTree) {\n return\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\n }\n}\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport { definePlugin } from '../../plugin'\nimport { FileManager } from '../fileManager'\n\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 constructor(config: KubbConfig, options: { logger?: Logger }) {\n this.logger = options.logger\n this.config = config\n\n this.fileManager = new FileManager()\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 any\n })\n }\n return promise\n }\n\n // chains, first non-null result stops and returns\n hookFirst<H extends PluginLifecycleHooks>(\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n skipped?: ReadonlySet<KubbPlugin> | null\n ): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run('hookFirst', hookName, parameters, plugin) as any\n })\n }\n return promise\n }\n\n // parallel\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>(hookName: H, parameters?: Parameters<PluginLifecycle[H]> | undefined) {\n const parallelPromises: Promise<TOuput>[] = []\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if ((plugin[hookName] as { sequential?: boolean })?.sequential) {\n await Promise.all(parallelPromises)\n parallelPromises.length = 0\n await this.run('hookParallel', hookName, parameters, plugin)\n } else {\n const promise: Promise<TOuput> = this.run('hookParallel', hookName, parameters, plugin)\n\n parallelPromises.push(promise)\n }\n }\n return Promise.all(parallelPromises)\n }\n\n // chains, reduces returned value, handling the reduced value as the first hook argument\n hookReduceArg0<H extends PluginLifecycleHooks>(\n hookName: H,\n [argument0, ...rest]: Parameters<PluginLifecycle[H]>,\n reduce: (reduction: Argument0<H>, result: ReturnType<PluginLifecycle[H]>, plugin: KubbPlugin) => MaybePromise<Argument0<H> | null>\n ): Promise<Argument0<H>> {\n let promise = Promise.resolve(argument0)\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then((argument0) =>\n this.run('hookReduceArg0', hookName, [argument0, ...rest] as Parameters<PluginLifecycle[H]>, plugin).then((result) =>\n reduce.call(this.core.api, argument0, result, plugin)\n )\n )\n }\n return promise\n }\n\n // chains\n\n hookSeq<H extends PluginLifecycleHooks>(hookName: H, parameters?: Parameters<PluginLifecycle[H]>) {\n let promise: Promise<void> = Promise.resolve()\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then(() => this.run('hookSeq', hookName, parameters, plugin))\n }\n return promise.then(noReturn)\n }\n\n private getSortedPlugins(hookName: keyof PluginLifecycle, pluginName?: string): KubbPlugin[] {\n const 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 any).apply(this.core.api, parameters)\n\n if (!hookResult?.then) {\n // short circuit for non-thenables and non-Promises\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return hookResult\n }\n\n return Promise.resolve(hookResult).then((result) => {\n // action was fulfilled\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return result\n })\n })\n .catch((e: Error) => {\n this.catcher<H>(e, plugin, hookName)\n })\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n private runSync<H extends PluginLifecycleHooks>(hookName: H, parameters: Parameters<PluginLifecycle[H]>, plugin: KubbPlugin): ReturnType<PluginLifecycle[H]> {\n const hook = plugin[hookName]!\n\n // const context = this.pluginContexts.get(plugin)!;\n\n try {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return (hook as Function).apply(this.core.api, parameters)\n } catch (error: any) {\n return error\n }\n }\n\n 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 const 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/format.ts","../src/utils/objectToParameters.ts","../src/utils/nameSorter.ts","../src/utils/jsdoc.ts","../src/managers/fileManager/FileManager.ts","../src/managers/fileManager/events.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","file","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 { FileManager } 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 mode: 'development' | 'production'\n logger?: Logger\n}\n\nasync function transformReducer(this: PluginContext, _previousCode: string, result: TransformResult, _plugin: KubbPlugin) {\n if (result === null) {\n return null\n }\n return result\n}\n\nasync function buildImplementation(options: BuildOptions, done: (output: BuildOutput) => void) {\n const { config, logger } = options\n\n if (config.output.clean) {\n await clean(config.output.path)\n }\n\n const pluginManager = new PluginManager(config, { logger })\n const { plugins, fileManager } = pluginManager\n\n await pluginManager.hookParallel<'validate', true>('validate', [plugins])\n\n fileManager.events.onSuccess(async () => {\n await pluginManager.hookParallel('buildEnd')\n setTimeout(() => {\n done({ files: fileManager.files.map((file) => ({ ...file, source: fileManager.getSource(file) })) })\n }, 500)\n })\n\n fileManager.events.onAdd(async (id, 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 fileManager.setStatus(id, 'success')\n fileManager.remove(id)\n }\n })\n\n await pluginManager.hookParallel('buildStart', [config])\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 any)?.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: any) {\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<TCache = any> {\n delete(id: string): boolean\n get<T = TCache>(id: string): T\n has(id: string): boolean\n set<T = TCache>(id: string, value: T): void\n}\n\nexport function createPluginCache(cache: any): Cache {\n return {\n delete(id: string) {\n return delete cache[id]\n },\n get(id: string) {\n const item = cache[id]\n if (!item) return\n item[0] = 0\n return item[1]\n },\n has(id: string) {\n const item = cache[id]\n if (!item) return false\n item[0] = 0\n return true\n },\n set(id: string, value: any) {\n cache[id] = [0, value]\n },\n }\n}\n","import 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","import { format as prettierFormat } from 'prettier'\n// import parserTypescript from 'prettier/parser-typescript'\n\nimport type { Options } from 'prettier'\n\nconst formatOptions: Options = {\n tabWidth: 2,\n printWidth: 160,\n parser: 'typescript',\n singleQuote: true,\n semi: false,\n bracketSameLine: false,\n endOfLine: 'auto',\n // plugins: [parserTypescript],\n}\nexport function format(source: string) {\n return prettierFormat(source, formatOptions)\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","import EventEmitter from 'eventemitter3'\nimport uniq from 'lodash.uniq'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport { getFileManagerEvents } from './events'\n\nimport { write, read, format } from '../../utils'\n\nimport type { CacheStore, UUID, Status, File } from './types'\n\nexport class FileManager {\n private cache: Map<CacheStore['id'], CacheStore> = new Map()\n\n emitter = new EventEmitter()\n\n events = getFileManagerEvents(this.emitter)\n\n constructor() {\n this.events.onStatusChange(() => {\n if (this.getCountByStatus('removed') === this.cache.size) {\n // all files are been resolved and written to the file system\n this.events.emitSuccess()\n }\n })\n }\n\n private getCache(id: UUID) {\n return this.cache.get(id)\n }\n\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 CacheStore\n }\n\n private getCountByStatus(status: Status) {\n let count = 0\n\n this.cache.forEach((item) => {\n if (item.status === status) {\n count++\n }\n })\n return count\n }\n\n public getSource(file: File, options: { format?: boolean } = { format: true }) {\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 if (options.format) {\n return format(`${importSource}\\n${file.source}`)\n }\n return `${importSource}\\n${file.source}`\n }\n\n if (options.format) {\n return format(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 add(file: File) {\n const cacheItem = { id: uuidv4(), file, status: 'new' as Status }\n\n this.cache.set(cacheItem.id, cacheItem)\n this.events.emitFile(cacheItem.id, file)\n\n return new Promise<File>((resolve) => {\n const unsubscribe = this.events.onRemove(cacheItem.id, (file) => {\n resolve(file)\n unsubscribe()\n })\n })\n }\n\n 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) => {\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 this.events.emitStatusChange(cacheItem.file)\n this.events.emitStatusChangeById(id, status)\n }\n\n get(id: UUID) {\n const cacheItem = this.getCache(id)\n return cacheItem?.file\n }\n\n remove(id: UUID) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n this.setStatus(id, 'removed')\n this.events.emitRemove(id, cacheItem.file)\n }\n\n 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 type EventEmitter from 'eventemitter3'\nimport type { File, Status, UUID } from './types'\n\nconst keys = {\n getFileKey: () => `file`,\n getStatusChangeKey: () => `status-change`,\n getStatusChangeByIdKey: (id: string) => `${id}-status-change`,\n getSuccessKey: () => `success`,\n getRemoveKey: (id: string) => `${id}remove`,\n} as const\n\ntype VoidFunction = () => void\n\nexport function getFileManagerEvents(emitter: EventEmitter) {\n return {\n /**\n * Emiter\n */\n emitFile: (id: UUID, file: File): void => {\n emitter.emit(keys.getFileKey(), id, file)\n },\n emitStatusChange: (file: File): void => {\n emitter.emit(keys.getStatusChangeKey(), file)\n },\n emitStatusChangeById: (id: UUID, status: Status): void => {\n emitter.emit(keys.getStatusChangeByIdKey(id), status)\n },\n emitSuccess: (): void => {\n emitter.emit(keys.getSuccessKey())\n },\n emitRemove: (id: UUID, file: File): void => {\n emitter.emit(keys.getRemoveKey(id), file)\n },\n /**\n * Listeners\n */\n\n onAdd: (callback: (id: UUID, file: File) => void): VoidFunction => {\n emitter.on(keys.getFileKey(), callback)\n return () => emitter.removeListener(keys.getFileKey(), callback)\n },\n onStatusChange: (callback: (file: File) => void): VoidFunction => {\n emitter.on(keys.getStatusChangeKey(), callback)\n return () => emitter.removeListener(keys.getStatusChangeKey(), callback)\n },\n onStatusChangeById: (id: UUID, callback: (status: Status) => void): VoidFunction => {\n emitter.on(keys.getStatusChangeByIdKey(id), callback)\n return () => emitter.removeListener(keys.getStatusChangeByIdKey(id), callback)\n },\n onSuccess: (callback: () => void): VoidFunction => {\n emitter.on(keys.getSuccessKey(), callback)\n return () => emitter.removeListener(keys.getSuccessKey(), callback)\n },\n onRemove: (id: UUID, callback: (file: File) => void): VoidFunction => {\n emitter.on(keys.getRemoveKey(id), callback)\n return () => emitter.removeListener(keys.getRemoveKey(id), callback)\n },\n }\n}\n","import dirTree from 'directory-tree'\n\nimport type { DirectoryTree, DirectoryTreeOptions } from 'directory-tree'\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) {\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: any = 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() {\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 = []\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() {\n if (!this.parent) {\n return this\n }\n return this.parent.root()\n }\n\n forEach(callback: (treeNode: TreeNode<T>) => void) {\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(path: string, options: DirectoryTreeOptions = {}) {\n const filteredTree = dirTree(path, { extensions: options?.extensions, exclude: options.exclude })\n\n if (!filteredTree) {\n return\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\n }\n}\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport { definePlugin } from '../../plugin'\nimport { FileManager } from '../fileManager'\n\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 constructor(config: KubbConfig, options: { logger?: Logger }) {\n this.logger = options.logger\n this.config = config\n\n this.fileManager = new FileManager()\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 any\n })\n }\n return promise\n }\n\n // chains, first non-null result stops and returns\n hookFirst<H extends PluginLifecycleHooks>(\n hookName: H,\n parameters: Parameters<PluginLifecycle[H]>,\n skipped?: ReadonlySet<KubbPlugin> | null\n ): Promise<ReturnType<PluginLifecycle[H]> | null> {\n let promise: Promise<ReturnType<PluginLifecycle[H]> | null> = Promise.resolve(null)\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) continue\n promise = promise.then((result) => {\n if (result != null) return result\n return this.run('hookFirst', hookName, parameters, plugin) as any\n })\n }\n return promise\n }\n\n // parallel\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>(hookName: H, parameters?: Parameters<PluginLifecycle[H]> | undefined) {\n const parallelPromises: Promise<TOuput>[] = []\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if ((plugin[hookName] as { sequential?: boolean })?.sequential) {\n await Promise.all(parallelPromises)\n parallelPromises.length = 0\n await this.run('hookParallel', hookName, parameters, plugin)\n } else {\n const promise: Promise<TOuput> = this.run('hookParallel', hookName, parameters, plugin)\n\n parallelPromises.push(promise)\n }\n }\n return Promise.all(parallelPromises)\n }\n\n // chains, reduces returned value, handling the reduced value as the first hook argument\n hookReduceArg0<H extends PluginLifecycleHooks>(\n hookName: H,\n [argument0, ...rest]: Parameters<PluginLifecycle[H]>,\n reduce: (reduction: Argument0<H>, result: ReturnType<PluginLifecycle[H]>, plugin: KubbPlugin) => MaybePromise<Argument0<H> | null>\n ): Promise<Argument0<H>> {\n let promise = Promise.resolve(argument0)\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then((argument0) =>\n this.run('hookReduceArg0', hookName, [argument0, ...rest] as Parameters<PluginLifecycle[H]>, plugin).then((result) =>\n reduce.call(this.core.api, argument0, result, plugin)\n )\n )\n }\n return promise\n }\n\n // chains\n\n hookSeq<H extends PluginLifecycleHooks>(hookName: H, parameters?: Parameters<PluginLifecycle[H]>) {\n let promise: Promise<void> = Promise.resolve()\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then(() => this.run('hookSeq', hookName, parameters, plugin))\n }\n return promise.then(noReturn)\n }\n\n private getSortedPlugins(hookName: keyof PluginLifecycle, pluginName?: string): KubbPlugin[] {\n const 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 any).apply(this.core.api, parameters)\n\n if (!hookResult?.then) {\n // short circuit for non-thenables and non-Promises\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return hookResult\n }\n\n return Promise.resolve(hookResult).then((result) => {\n // action was fulfilled\n if (this.config.logLevel === 'info' && this.logger?.spinner) {\n this.logger.spinner.succeed(`[${strategy}] ${hookName}: Excecuting task for plugin ${plugin.name} \\n`)\n }\n return result\n })\n })\n .catch((e: Error) => {\n this.catcher<H>(e, plugin, hookName)\n })\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n private runSync<H extends PluginLifecycleHooks>(hookName: H, parameters: Parameters<PluginLifecycle[H]>, plugin: KubbPlugin): ReturnType<PluginLifecycle[H]> {\n const hook = plugin[hookName]!\n\n // const context = this.pluginContexts.get(plugin)!;\n\n try {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return (hook as Function).apply(this.core.api, parameters)\n } catch (error: any) {\n return error\n }\n }\n\n 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/core",
3
- "version": "0.56.2",
3
+ "version": "0.56.3",
4
4
  "description": "Generator core",
5
5
  "repository": {
6
6
  "type": "git",