unplugin-kubb 5.0.0-beta.3 → 5.0.0-beta.31
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/README.md +8 -18
- package/dist/astro.cjs +1 -1
- package/dist/astro.cjs.map +1 -1
- package/dist/astro.js.map +1 -1
- package/dist/esbuild.cjs +1 -1
- package/dist/esbuild.js +1 -1
- package/dist/farm.cjs +1 -1
- package/dist/farm.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/nuxt.cjs +1 -1
- package/dist/nuxt.cjs.map +1 -1
- package/dist/nuxt.js.map +1 -1
- package/dist/rolldown.cjs +1 -1
- package/dist/rolldown.js +1 -1
- package/dist/rollup.cjs +1 -1
- package/dist/rollup.js +1 -1
- package/dist/rspack.cjs +1 -1
- package/dist/rspack.js +1 -1
- package/dist/{unpluginFactory-DZXC1_ds.js → unpluginFactory-CJcLLBa1.js} +59 -53
- package/dist/unpluginFactory-CJcLLBa1.js.map +1 -0
- package/dist/{unpluginFactory-BMpsKVDI.cjs → unpluginFactory-CzUql6BG.cjs} +58 -52
- package/dist/unpluginFactory-CzUql6BG.cjs.map +1 -0
- package/dist/unpluginFactory.cjs +1 -1
- package/dist/unpluginFactory.js +1 -1
- package/dist/vite.cjs +1 -1
- package/dist/vite.js +1 -1
- package/dist/webpack.cjs +1 -1
- package/dist/webpack.js +1 -1
- package/package.json +13 -16
- package/src/nuxt.ts +0 -2
- package/src/unpluginFactory.ts +71 -71
- package/dist/unpluginFactory-BMpsKVDI.cjs.map +0 -1
- package/dist/unpluginFactory-DZXC1_ds.js.map +0 -1
package/README.md
CHANGED
|
@@ -21,12 +21,16 @@
|
|
|
21
21
|
</h4>
|
|
22
22
|
</div>
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
Universal build integration for Kubb using [unplugin](https://github.com/unjs/unplugin). Runs OpenAPI code generation as part of your build pipeline in Vite, Webpack, Rollup, esbuild, Rspack, Nuxt, and Astro.
|
|
25
25
|
|
|
26
|
-
##
|
|
26
|
+
## Installation
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
|
|
29
|
+
bun add -D unplugin-kubb @kubb/core
|
|
30
|
+
# or
|
|
31
|
+
pnpm add -D unplugin-kubb @kubb/core
|
|
32
|
+
# or
|
|
33
|
+
npm install -D unplugin-kubb @kubb/core
|
|
30
34
|
```
|
|
31
35
|
|
|
32
36
|
```typescript
|
|
@@ -77,20 +81,6 @@ export default defineNuxtConfig({
|
|
|
77
81
|
})
|
|
78
82
|
```
|
|
79
83
|
|
|
80
|
-
> This module works for both Nuxt 2 and [Nuxt Vite](https://github.com/nuxt/vite)
|
|
81
|
-
|
|
82
|
-
```typescript
|
|
83
|
-
module.exports = {
|
|
84
|
-
configureWebpack: {
|
|
85
|
-
plugins: [
|
|
86
|
-
require('unplugin-kubb/webpack')({
|
|
87
|
-
/* options */
|
|
88
|
-
}),
|
|
89
|
-
],
|
|
90
|
-
},
|
|
91
|
-
}
|
|
92
|
-
```
|
|
93
|
-
|
|
94
84
|
```typescript
|
|
95
85
|
import { build } from 'esbuild'
|
|
96
86
|
import kubb from 'unplugin-kubb/esbuild'
|
|
@@ -114,7 +104,7 @@ type Options = {
|
|
|
114
104
|
|
|
115
105
|
## Supporting Kubb
|
|
116
106
|
|
|
117
|
-
Kubb
|
|
107
|
+
Kubb is an MIT-licensed open source project with its ongoing development made possible entirely by the support of Sponsors. If you would like to become a sponsor, please consider:
|
|
118
108
|
|
|
119
109
|
- [Become a Sponsor on GitHub](https://github.com/sponsors/stijnvanhulle)
|
|
120
110
|
|
package/dist/astro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_unpluginFactory = require("./unpluginFactory-
|
|
1
|
+
const require_unpluginFactory = require("./unpluginFactory-CzUql6BG.cjs");
|
|
2
2
|
const require_vite = require("./vite.cjs");
|
|
3
3
|
//#region src/astro.ts
|
|
4
4
|
var astro_default = /* @__PURE__ */ require_unpluginFactory.__name((options) => ({
|
package/dist/astro.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astro.cjs","names":["vitePlugin"],"sources":["../src/astro.ts"],"sourcesContent":["import type { Options } from './types.ts'\nimport vitePlugin from './vite.ts'\n\nexport default (options: Options): any => ({\n name: 'unplugin-kubb',\n hooks: {\n 'astro:config:setup': async (astro: any) => {\n astro.config.vite.plugins ||= []\n astro.config.vite.plugins.push(vitePlugin(options))\n },\n },\n})\n"],"mappings":";;;AAGA,IAAA,gBAAA,wCAAA,QAAgB,aAA2B;CACzC,MAAM;CACN,OAAO,EACL,sBAAsB,OAAO,UAAe;
|
|
1
|
+
{"version":3,"file":"astro.cjs","names":["vitePlugin"],"sources":["../src/astro.ts"],"sourcesContent":["import type { Options } from './types.ts'\nimport vitePlugin from './vite.ts'\n\nexport default (options: Options): any => ({\n name: 'unplugin-kubb',\n hooks: {\n 'astro:config:setup': async (astro: any) => {\n astro.config.vite.plugins ||= []\n astro.config.vite.plugins.push(vitePlugin(options))\n },\n },\n})\n"],"mappings":";;;AAGA,IAAA,gBAAA,wCAAA,QAAgB,aAA2B;CACzC,MAAM;CACN,OAAO,EACL,sBAAsB,OAAO,UAAe;EAC1C,MAAM,OAAO,KAAK,YAAY,EAAE;EAChC,MAAM,OAAO,KAAK,QAAQ,KAAKA,aAAW,QAAQ,CAAC;IAEtD;CACF,GAAA,UAAA"}
|
package/dist/astro.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astro.js","names":["vitePlugin"],"sources":["../src/astro.ts"],"sourcesContent":["import type { Options } from './types.ts'\nimport vitePlugin from './vite.ts'\n\nexport default (options: Options): any => ({\n name: 'unplugin-kubb',\n hooks: {\n 'astro:config:setup': async (astro: any) => {\n astro.config.vite.plugins ||= []\n astro.config.vite.plugins.push(vitePlugin(options))\n },\n },\n})\n"],"mappings":";;;AAGA,IAAA,gBAAA,wBAAgB,aAA2B;CACzC,MAAM;CACN,OAAO,EACL,sBAAsB,OAAO,UAAe;
|
|
1
|
+
{"version":3,"file":"astro.js","names":["vitePlugin"],"sources":["../src/astro.ts"],"sourcesContent":["import type { Options } from './types.ts'\nimport vitePlugin from './vite.ts'\n\nexport default (options: Options): any => ({\n name: 'unplugin-kubb',\n hooks: {\n 'astro:config:setup': async (astro: any) => {\n astro.config.vite.plugins ||= []\n astro.config.vite.plugins.push(vitePlugin(options))\n },\n },\n})\n"],"mappings":";;;AAGA,IAAA,gBAAA,wBAAgB,aAA2B;CACzC,MAAM;CACN,OAAO,EACL,sBAAsB,OAAO,UAAe;EAC1C,MAAM,OAAO,KAAK,YAAY,EAAE;EAChC,MAAM,OAAO,KAAK,QAAQ,KAAKA,aAAW,QAAQ,CAAC;IAEtD;CACF,GAAA,UAAA"}
|
package/dist/esbuild.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_unpluginFactory = require("./unpluginFactory-
|
|
1
|
+
const require_unpluginFactory = require("./unpluginFactory-CzUql6BG.cjs");
|
|
2
2
|
//#region src/esbuild.ts
|
|
3
3
|
var esbuild_default = (0, require("unplugin").createEsbuildPlugin)(require_unpluginFactory.unpluginFactory);
|
|
4
4
|
//#endregion
|
package/dist/esbuild.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as unpluginFactory } from "./unpluginFactory-
|
|
1
|
+
import { t as unpluginFactory } from "./unpluginFactory-CJcLLBa1.js";
|
|
2
2
|
import { createEsbuildPlugin } from "unplugin";
|
|
3
3
|
//#region src/esbuild.ts
|
|
4
4
|
var esbuild_default = createEsbuildPlugin(unpluginFactory);
|
package/dist/farm.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_unpluginFactory = require("./unpluginFactory-
|
|
1
|
+
const require_unpluginFactory = require("./unpluginFactory-CzUql6BG.cjs");
|
|
2
2
|
//#region src/farm.ts
|
|
3
3
|
var farm_default = (0, require("unplugin").createFarmPlugin)(require_unpluginFactory.unpluginFactory);
|
|
4
4
|
//#endregion
|
package/dist/farm.js
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_unpluginFactory = require("./unpluginFactory-
|
|
5
|
+
const require_unpluginFactory = require("./unpluginFactory-CzUql6BG.cjs");
|
|
6
6
|
//#region src/index.ts
|
|
7
7
|
const plugin = /* @__PURE__ */ (0, require("unplugin").createUnplugin)(require_unpluginFactory.unpluginFactory);
|
|
8
8
|
//#endregion
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as unpluginFactory } from "./unpluginFactory-
|
|
1
|
+
import { t as unpluginFactory } from "./unpluginFactory-CJcLLBa1.js";
|
|
2
2
|
import { createUnplugin } from "unplugin";
|
|
3
3
|
//#region src/index.ts
|
|
4
4
|
const plugin = /* @__PURE__ */ createUnplugin(unpluginFactory);
|
package/dist/nuxt.cjs
CHANGED
package/dist/nuxt.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt.cjs","names":["vite","webpack"],"sources":["../src/nuxt.ts"],"sourcesContent":["import { addVitePlugin, addWebpackPlugin, defineNuxtModule } from '@nuxt/kit'\nimport '@nuxt/schema'\n\nimport type { Options } from './types.ts'\nimport vite from './vite.ts'\nimport webpack from './webpack.ts'\n\nexport interface ModuleOptions extends Options {}\n\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: 'nuxt-unplugin-kubb',\n configKey: 'unpluginKubb',\n },\n defaults: undefined,\n setup(options, _nuxt) {\n addVitePlugin(() => vite(options))\n addWebpackPlugin(() => webpack(options))\n
|
|
1
|
+
{"version":3,"file":"nuxt.cjs","names":["vite","webpack"],"sources":["../src/nuxt.ts"],"sourcesContent":["import { addVitePlugin, addWebpackPlugin, defineNuxtModule } from '@nuxt/kit'\nimport '@nuxt/schema'\n\nimport type { Options } from './types.ts'\nimport vite from './vite.ts'\nimport webpack from './webpack.ts'\n\nexport interface ModuleOptions extends Options {}\n\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: 'nuxt-unplugin-kubb',\n configKey: 'unpluginKubb',\n },\n defaults: undefined,\n setup(options, _nuxt) {\n addVitePlugin(() => vite(options))\n addWebpackPlugin(() => webpack(options))\n },\n})\n"],"mappings":";;;;;;AASA,IAAA,gBAAA,GAAA,UAAA,kBAA+C;CAC7C,MAAM;EACJ,MAAM;EACN,WAAW;EACZ;CACD,UAAU,KAAA;CACV,MAAM,SAAS,OAAO;EACpB,CAAA,GAAA,UAAA,qBAAoBA,aAAK,QAAQ,CAAC;EAClC,CAAA,GAAA,UAAA,wBAAuBC,gBAAQ,QAAQ,CAAC;;CAE3C,CAAC"}
|
package/dist/nuxt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt.js","names":["vite","webpack"],"sources":["../src/nuxt.ts"],"sourcesContent":["import { addVitePlugin, addWebpackPlugin, defineNuxtModule } from '@nuxt/kit'\nimport '@nuxt/schema'\n\nimport type { Options } from './types.ts'\nimport vite from './vite.ts'\nimport webpack from './webpack.ts'\n\nexport interface ModuleOptions extends Options {}\n\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: 'nuxt-unplugin-kubb',\n configKey: 'unpluginKubb',\n },\n defaults: undefined,\n setup(options, _nuxt) {\n addVitePlugin(() => vite(options))\n addWebpackPlugin(() => webpack(options))\n
|
|
1
|
+
{"version":3,"file":"nuxt.js","names":["vite","webpack"],"sources":["../src/nuxt.ts"],"sourcesContent":["import { addVitePlugin, addWebpackPlugin, defineNuxtModule } from '@nuxt/kit'\nimport '@nuxt/schema'\n\nimport type { Options } from './types.ts'\nimport vite from './vite.ts'\nimport webpack from './webpack.ts'\n\nexport interface ModuleOptions extends Options {}\n\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: 'nuxt-unplugin-kubb',\n configKey: 'unpluginKubb',\n },\n defaults: undefined,\n setup(options, _nuxt) {\n addVitePlugin(() => vite(options))\n addWebpackPlugin(() => webpack(options))\n },\n})\n"],"mappings":";;;;;;AASA,IAAA,eAAe,iBAAgC;CAC7C,MAAM;EACJ,MAAM;EACN,WAAW;EACZ;CACD,UAAU,KAAA;CACV,MAAM,SAAS,OAAO;EACpB,oBAAoBA,aAAK,QAAQ,CAAC;EAClC,uBAAuBC,gBAAQ,QAAQ,CAAC;;CAE3C,CAAC"}
|
package/dist/rolldown.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_unpluginFactory = require("./unpluginFactory-
|
|
1
|
+
const require_unpluginFactory = require("./unpluginFactory-CzUql6BG.cjs");
|
|
2
2
|
//#region src/rolldown.ts
|
|
3
3
|
var rolldown_default = (0, require("unplugin").createRolldownPlugin)(require_unpluginFactory.unpluginFactory);
|
|
4
4
|
//#endregion
|
package/dist/rolldown.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as unpluginFactory } from "./unpluginFactory-
|
|
1
|
+
import { t as unpluginFactory } from "./unpluginFactory-CJcLLBa1.js";
|
|
2
2
|
import { createRolldownPlugin } from "unplugin";
|
|
3
3
|
//#region src/rolldown.ts
|
|
4
4
|
var rolldown_default = createRolldownPlugin(unpluginFactory);
|
package/dist/rollup.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_unpluginFactory = require("./unpluginFactory-
|
|
1
|
+
const require_unpluginFactory = require("./unpluginFactory-CzUql6BG.cjs");
|
|
2
2
|
//#region src/rollup.ts
|
|
3
3
|
var rollup_default = (0, require("unplugin").createRollupPlugin)(require_unpluginFactory.unpluginFactory);
|
|
4
4
|
//#endregion
|
package/dist/rollup.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as unpluginFactory } from "./unpluginFactory-
|
|
1
|
+
import { t as unpluginFactory } from "./unpluginFactory-CJcLLBa1.js";
|
|
2
2
|
import { createRollupPlugin } from "unplugin";
|
|
3
3
|
//#region src/rollup.ts
|
|
4
4
|
var rollup_default = createRollupPlugin(unpluginFactory);
|
package/dist/rspack.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_unpluginFactory = require("./unpluginFactory-
|
|
1
|
+
const require_unpluginFactory = require("./unpluginFactory-CzUql6BG.cjs");
|
|
2
2
|
//#region src/rspack.ts
|
|
3
3
|
var rspack_default = (0, require("unplugin").createRspackPlugin)(require_unpluginFactory.unpluginFactory);
|
|
4
4
|
//#endregion
|
package/dist/rspack.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as unpluginFactory } from "./unpluginFactory-
|
|
1
|
+
import { t as unpluginFactory } from "./unpluginFactory-CJcLLBa1.js";
|
|
2
2
|
import { createRspackPlugin } from "unplugin";
|
|
3
3
|
//#region src/rspack.ts
|
|
4
4
|
var rspack_default = createRspackPlugin(unpluginFactory);
|
|
@@ -4,7 +4,7 @@ import { EventEmitter } from "node:events";
|
|
|
4
4
|
import { adapterOas } from "@kubb/adapter-oas";
|
|
5
5
|
import { createKubb } from "@kubb/core";
|
|
6
6
|
import { middlewareBarrel, middlewareBarrelName } from "@kubb/middleware-barrel";
|
|
7
|
-
import { parserTs } from "@kubb/parser-ts";
|
|
7
|
+
import { parserTs, parserTsx } from "@kubb/parser-ts";
|
|
8
8
|
//#region ../../internals/utils/src/errors.ts
|
|
9
9
|
/**
|
|
10
10
|
* Coerces an unknown thrown value to an `Error` instance.
|
|
@@ -51,9 +51,12 @@ var AsyncEventEmitter = class {
|
|
|
51
51
|
* await emitter.emit('build', 'petstore')
|
|
52
52
|
* ```
|
|
53
53
|
*/
|
|
54
|
-
|
|
54
|
+
emit(eventName, ...eventArgs) {
|
|
55
55
|
const listeners = this.#emitter.listeners(eventName);
|
|
56
56
|
if (listeners.length === 0) return;
|
|
57
|
+
return this.#emitAll(eventName, listeners, eventArgs);
|
|
58
|
+
}
|
|
59
|
+
async #emitAll(eventName, listeners, eventArgs) {
|
|
57
60
|
for (const listener of listeners) try {
|
|
58
61
|
await listener(...eventArgs);
|
|
59
62
|
} catch (err) {
|
|
@@ -129,18 +132,46 @@ var AsyncEventEmitter = class {
|
|
|
129
132
|
};
|
|
130
133
|
//#endregion
|
|
131
134
|
//#region package.json
|
|
132
|
-
var version = "5.0.0-beta.
|
|
135
|
+
var version = "5.0.0-beta.31";
|
|
133
136
|
//#endregion
|
|
134
137
|
//#region src/unpluginFactory.ts
|
|
135
138
|
const unpluginFactory = (options, meta) => {
|
|
136
139
|
const name = "unplugin-kubb";
|
|
137
140
|
const hooks = new AsyncEventEmitter();
|
|
138
141
|
const isVite = meta.framework === "vite";
|
|
139
|
-
|
|
142
|
+
hooks.on("kubb:lifecycle:start", ({ version }) => {
|
|
143
|
+
console.log(`Kubb Unplugin ${version} 🧩`);
|
|
144
|
+
});
|
|
145
|
+
hooks.on("kubb:error", ({ error }) => {
|
|
146
|
+
console.error(`✗ ${error?.message || "failed"}`);
|
|
147
|
+
});
|
|
148
|
+
hooks.on("kubb:warn", ({ message }) => {
|
|
149
|
+
console.warn(`⚠ ${message}`);
|
|
150
|
+
});
|
|
151
|
+
hooks.on("kubb:info", ({ message }) => {
|
|
152
|
+
console.info(`ℹ ${message}`);
|
|
153
|
+
});
|
|
154
|
+
hooks.on("kubb:success", ({ message }) => {
|
|
155
|
+
console.log(`✓ ${message}`);
|
|
156
|
+
});
|
|
157
|
+
hooks.on("kubb:plugin:end", ({ plugin, duration }) => {
|
|
158
|
+
const durationStr = duration >= 1e3 ? `${(duration / 1e3).toFixed(2)}s` : `${duration}ms`;
|
|
159
|
+
console.log(`✓ ${plugin.name} completed in ${durationStr}`);
|
|
160
|
+
});
|
|
161
|
+
hooks.on("kubb:files:processing:end", () => {
|
|
162
|
+
console.log("✓ Files written successfully");
|
|
163
|
+
});
|
|
164
|
+
hooks.on("kubb:generation:end", ({ config }) => {
|
|
165
|
+
console.log(config.name ? `✓ Generation completed for ${config.name}` : "✓ Generation completed");
|
|
166
|
+
});
|
|
167
|
+
hooks.on("kubb:generation:summary", ({ config, status, failedPlugins }) => {
|
|
168
|
+
const pluginsCount = config.plugins.length;
|
|
169
|
+
const successCount = pluginsCount - failedPlugins.size;
|
|
170
|
+
console.log(status === "success" ? `Kubb Summary: ✓ ${`${successCount} successful`}, ${pluginsCount} total` : `Kubb Summary: ✓ ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total`);
|
|
171
|
+
});
|
|
140
172
|
async function runBuild(ctx) {
|
|
141
173
|
if (!options?.config) {
|
|
142
|
-
|
|
143
|
-
else console.error(`[${name}] Config is not set`);
|
|
174
|
+
(ctx.error ?? console.error)(`[${name}] Config is not set`);
|
|
144
175
|
return;
|
|
145
176
|
}
|
|
146
177
|
const middleware = options.config.middleware?.length ? options.config.middleware : [middlewareBarrel()];
|
|
@@ -152,61 +183,28 @@ const unpluginFactory = (options, meta) => {
|
|
|
152
183
|
const config = {
|
|
153
184
|
...options.config,
|
|
154
185
|
adapter: options.config.adapter ?? adapterOas(),
|
|
155
|
-
parsers: options.config.parsers?.length ? options.config.parsers : [parserTs],
|
|
186
|
+
parsers: options.config.parsers?.length ? options.config.parsers : [parserTs, parserTsx],
|
|
156
187
|
middleware,
|
|
157
188
|
output
|
|
158
189
|
};
|
|
159
|
-
|
|
160
|
-
console.log(`Kubb Unplugin ${version} 🧩`);
|
|
161
|
-
});
|
|
162
|
-
hooks.on("kubb:error", ({ error }) => {
|
|
163
|
-
console.error(`✗ ${error?.message || "failed"}`);
|
|
164
|
-
});
|
|
165
|
-
hooks.on("kubb:warn", ({ message }) => {
|
|
166
|
-
console.warn(`⚠ ${message}`);
|
|
167
|
-
});
|
|
168
|
-
hooks.on("kubb:info", ({ message }) => {
|
|
169
|
-
console.info(`ℹ ${message}`);
|
|
170
|
-
});
|
|
171
|
-
hooks.on("kubb:success", ({ message }) => {
|
|
172
|
-
console.log(`✓ ${message}`);
|
|
173
|
-
});
|
|
174
|
-
hooks.on("kubb:plugin:end", ({ plugin, duration }) => {
|
|
175
|
-
const durationStr = duration >= 1e3 ? `${(duration / 1e3).toFixed(2)}s` : `${duration}ms`;
|
|
176
|
-
console.log(`✓ ${plugin.name} completed in ${durationStr}`);
|
|
177
|
-
});
|
|
178
|
-
hooks.on("kubb:files:processing:end", () => {
|
|
179
|
-
console.log("✓ Files written successfully");
|
|
180
|
-
});
|
|
181
|
-
hooks.on("kubb:generation:end", ({ config }) => {
|
|
182
|
-
console.log(config.name ? `✓ Generation completed for ${config.name}` : "✓ Generation completed");
|
|
183
|
-
});
|
|
184
|
-
hooks.on("kubb:generation:summary", ({ config, status, failedPlugins }) => {
|
|
185
|
-
const pluginsCount = config.plugins.length;
|
|
186
|
-
const successCount = pluginsCount - failedPlugins.size;
|
|
187
|
-
console.log(status === "success" ? `Kubb Summary: ✓ ${`${successCount} successful`}, ${pluginsCount} total` : `Kubb Summary: ✓ ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total`);
|
|
188
|
-
});
|
|
190
|
+
const hrStart = process.hrtime();
|
|
189
191
|
await hooks.emit("kubb:lifecycle:start", { version });
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
}, { hooks }).safeBuild();
|
|
200
|
-
if (failedPlugins.size > 0 || error) [error, ...Array.from(failedPlugins).filter((it) => it.error).map((it) => it.error)].filter(Boolean).forEach((err) => {
|
|
192
|
+
const userConfig = config;
|
|
193
|
+
const kubb = createKubb(userConfig, { hooks });
|
|
194
|
+
await kubb.setup();
|
|
195
|
+
const resolvedConfig = kubb.config ?? userConfig;
|
|
196
|
+
await hooks.emit("kubb:generation:start", { config: resolvedConfig });
|
|
197
|
+
const { error, failedPlugins, pluginTimings, files, storage } = await kubb.safeBuild();
|
|
198
|
+
const hasFailures = failedPlugins.size > 0 || error;
|
|
199
|
+
if (hasFailures) [error, ...Array.from(failedPlugins).filter((it) => it.error).map((it) => it.error)].filter(Boolean).forEach((err) => {
|
|
201
200
|
hooks.emit("kubb:error", { error: err });
|
|
202
201
|
});
|
|
203
202
|
await hooks.emit("kubb:generation:end", {
|
|
204
|
-
config,
|
|
205
|
-
|
|
206
|
-
sources
|
|
203
|
+
config: resolvedConfig,
|
|
204
|
+
storage
|
|
207
205
|
});
|
|
208
206
|
await hooks.emit("kubb:generation:summary", {
|
|
209
|
-
config,
|
|
207
|
+
config: resolvedConfig,
|
|
210
208
|
failedPlugins,
|
|
211
209
|
filesCreated: files.length,
|
|
212
210
|
status: failedPlugins.size > 0 || error ? "failed" : "success",
|
|
@@ -214,6 +212,14 @@ const unpluginFactory = (options, meta) => {
|
|
|
214
212
|
pluginTimings
|
|
215
213
|
});
|
|
216
214
|
await hooks.emit("kubb:lifecycle:end");
|
|
215
|
+
if (hasFailures) {
|
|
216
|
+
const message = error?.message ?? `Build Error with ${failedPlugins.size} failed plugins`;
|
|
217
|
+
if (ctx.error) {
|
|
218
|
+
ctx.error(`[${name}] ${message}`);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
throw new Error(`[${name}] ${message}`, { cause: error });
|
|
222
|
+
}
|
|
217
223
|
}
|
|
218
224
|
return {
|
|
219
225
|
name,
|
|
@@ -228,4 +234,4 @@ const unpluginFactory = (options, meta) => {
|
|
|
228
234
|
//#endregion
|
|
229
235
|
export { unpluginFactory as t };
|
|
230
236
|
|
|
231
|
-
//# sourceMappingURL=unpluginFactory-
|
|
237
|
+
//# sourceMappingURL=unpluginFactory-CJcLLBa1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unpluginFactory-CJcLLBa1.js","names":["#emitter","NodeEventEmitter","#emitAll","unpluginVersion"],"sources":["../../../internals/utils/src/errors.ts","../../../internals/utils/src/asyncEventEmitter.ts","../package.json","../src/unpluginFactory.ts"],"sourcesContent":["/**\n * Thrown when one or more errors occur during a Kubb build.\n * Carries the full list of underlying errors on `errors`.\n *\n * @example\n * ```ts\n * throw new BuildError('Build failed', { errors: [err1, err2] })\n * ```\n */\nexport class BuildError extends Error {\n errors: Array<Error>\n\n constructor(message: string, options: { cause?: Error; errors: Array<Error> }) {\n super(message, { cause: options.cause })\n this.name = 'BuildError'\n this.errors = options.errors\n }\n}\n\n/**\n * Coerces an unknown thrown value to an `Error` instance.\n * Returns the value as-is when it is already an `Error`; otherwise wraps it with `String(value)`.\n *\n * @example\n * ```ts\n * try { ... } catch(err) {\n * throw new BuildError('Build failed', { cause: toError(err), errors: [] })\n * }\n * ```\n */\nexport function toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value))\n}\n\n/**\n * Extracts a human-readable message from any thrown value.\n *\n * @example\n * ```ts\n * getErrorMessage(new Error('oops')) // 'oops'\n * getErrorMessage('plain string') // 'plain string'\n * ```\n */\nexport function getErrorMessage(value: unknown): string {\n return value instanceof Error ? value.message : String(value)\n}\n\n/**\n * Extracts the `.cause` of an `Error` as an `Error`, or `undefined` when absent or not an `Error`.\n *\n * @example\n * ```ts\n * const cause = toCause(buildError) // Error | undefined\n * ```\n */\nexport function toCause(error: Error): Error | undefined {\n return error.cause instanceof Error ? error.cause : undefined\n}\n","import { EventEmitter as NodeEventEmitter } from 'node:events'\nimport { toError } from './errors.ts'\n\n/**\n * A function that can be registered as an event listener, synchronous or async.\n */\ntype AsyncListener<TArgs extends unknown[]> = (...args: TArgs) => void | Promise<void>\n\n/**\n * Typed `EventEmitter` that awaits all async listeners before resolving.\n * Wraps Node's `EventEmitter` with full TypeScript event-map inference.\n *\n * @example\n * ```ts\n * const emitter = new AsyncEventEmitter<{ build: [name: string] }>()\n * emitter.on('build', async (name) => { console.log(name) })\n * await emitter.emit('build', 'petstore') // all listeners awaited\n * ```\n */\nexport class AsyncEventEmitter<TEvents extends { [K in keyof TEvents]: unknown[] }> {\n /**\n * Maximum number of listeners per event before Node emits a memory-leak warning.\n * @default 10\n */\n constructor(maxListener = 10) {\n this.#emitter.setMaxListeners(maxListener)\n }\n\n #emitter = new NodeEventEmitter()\n\n /**\n * Emits `eventName` and awaits all registered listeners sequentially.\n * Throws if any listener rejects, wrapping the cause with the event name and serialized arguments.\n *\n * @example\n * ```ts\n * await emitter.emit('build', 'petstore')\n * ```\n */\n emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArgs: TEvents[TEventName]): Promise<void> | void {\n const listeners = this.#emitter.listeners(eventName) as Array<AsyncListener<TEvents[TEventName]>>\n\n if (listeners.length === 0) {\n return\n }\n\n return this.#emitAll(eventName, listeners, eventArgs)\n }\n\n async #emitAll<TEventName extends keyof TEvents & string>(\n eventName: TEventName,\n listeners: Array<AsyncListener<TEvents[TEventName]>>,\n eventArgs: TEvents[TEventName],\n ): Promise<void> {\n for (const listener of listeners) {\n try {\n await listener(...eventArgs)\n } catch (err) {\n let serializedArgs: string\n try {\n serializedArgs = JSON.stringify(eventArgs)\n } catch {\n serializedArgs = String(eventArgs)\n }\n throw new Error(`Error in async listener for \"${eventName}\" with eventArgs ${serializedArgs}`, { cause: toError(err) })\n }\n }\n }\n\n /**\n * Registers a persistent listener for `eventName`.\n *\n * @example\n * ```ts\n * emitter.on('build', async (name) => { console.log(name) })\n * ```\n */\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: AsyncListener<TEvents[TEventName]>): void {\n this.#emitter.on(eventName, handler as AsyncListener<unknown[]>)\n }\n\n /**\n * Registers a one-shot listener that removes itself after the first invocation.\n *\n * @example\n * ```ts\n * emitter.onOnce('build', async (name) => { console.log(name) })\n * ```\n */\n onOnce<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: AsyncListener<TEvents[TEventName]>): void {\n const wrapper: AsyncListener<TEvents[TEventName]> = (...args) => {\n this.off(eventName, wrapper)\n return handler(...args)\n }\n this.on(eventName, wrapper)\n }\n\n /**\n * Removes a previously registered listener.\n *\n * @example\n * ```ts\n * emitter.off('build', handler)\n * ```\n */\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: AsyncListener<TEvents[TEventName]>): void {\n this.#emitter.off(eventName, handler as AsyncListener<unknown[]>)\n }\n\n /**\n * Returns the number of listeners registered for `eventName`.\n *\n * @example\n * ```ts\n * emitter.on('build', handler)\n * emitter.listenerCount('build') // 1\n * ```\n */\n listenerCount<TEventName extends keyof TEvents & string>(eventName: TEventName): number {\n return this.#emitter.listenerCount(eventName)\n }\n\n /**\n * Removes all listeners from every event channel.\n *\n * @example\n * ```ts\n * emitter.removeAll()\n * ```\n */\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","","import process from 'node:process'\nimport { AsyncEventEmitter } from '@internals/utils'\nimport { adapterOas } from '@kubb/adapter-oas'\nimport { type Config, createKubb, type KubbHooks } from '@kubb/core'\nimport { middlewareBarrel, middlewareBarrelName } from '@kubb/middleware-barrel'\nimport { parserTs, parserTsx } from '@kubb/parser-ts'\nimport type { UnpluginFactory } from 'unplugin'\nimport { version as unpluginVersion } from '../package.json'\nimport type { Options } from './types.ts'\n\ntype RollupContext = {\n info?: (message: string) => void\n warn?: (message: string) => void\n error?: (message: string) => void\n}\n\nexport const unpluginFactory: UnpluginFactory<Options | undefined> = (options, meta) => {\n const name = 'unplugin-kubb' as const\n const hooks = new AsyncEventEmitter<KubbHooks>()\n const isVite = meta.framework === 'vite'\n\n hooks.on('kubb:lifecycle:start', ({ version }) => {\n console.log(`Kubb Unplugin ${version} 🧩`)\n })\n\n hooks.on('kubb:error', ({ error }) => {\n console.error(`✗ ${error?.message || 'failed'}`)\n })\n\n hooks.on('kubb:warn', ({ message }) => {\n console.warn(`⚠ ${message}`)\n })\n\n hooks.on('kubb:info', ({ message }) => {\n console.info(`ℹ ${message}`)\n })\n\n hooks.on('kubb:success', ({ message }) => {\n console.log(`✓ ${message}`)\n })\n\n hooks.on('kubb:plugin:end', ({ plugin, duration }) => {\n const durationStr = duration >= 1000 ? `${(duration / 1000).toFixed(2)}s` : `${duration}ms`\n\n console.log(`✓ ${plugin.name} completed in ${durationStr}`)\n })\n\n hooks.on('kubb:files:processing:end', () => {\n const text = '✓ Files written successfully'\n\n console.log(text)\n })\n\n hooks.on('kubb:generation:end', ({ config }) => {\n console.log(config.name ? `✓ Generation completed for ${config.name}` : '✓ Generation completed')\n })\n\n hooks.on('kubb:generation:summary', ({ config, status, failedPlugins }) => {\n const pluginsCount = config.plugins.length\n const successCount = pluginsCount - failedPlugins.size\n\n console.log(\n status === 'success'\n ? `Kubb Summary: ✓ ${`${successCount} successful`}, ${pluginsCount} total`\n : `Kubb Summary: ✓ ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total`,\n )\n })\n\n async function runBuild(ctx: RollupContext) {\n if (!options?.config) {\n ;(ctx.error ?? console.error)(`[${name}] Config is not set`)\n return\n }\n\n const middleware = options.config.middleware?.length ? options.config.middleware : [middlewareBarrel()]\n const hasBarrelMiddleware = middleware.some((m) => m.name === middlewareBarrelName)\n const output = { ...options.config.output }\n if (hasBarrelMiddleware && output.barrel === undefined) {\n output.barrel = { type: 'named' }\n }\n if (output.format === undefined) {\n output.format = false\n }\n if (output.lint === undefined) {\n output.lint = false\n }\n\n const config = {\n ...options.config,\n adapter: options.config.adapter ?? adapterOas(),\n parsers: options.config.parsers?.length ? options.config.parsers : [parserTs, parserTsx],\n middleware,\n output,\n }\n const hrStart = process.hrtime()\n\n await hooks.emit('kubb:lifecycle:start', { version: unpluginVersion })\n\n const userConfig = config as Config\n\n const kubb = createKubb(userConfig, { hooks })\n await kubb.setup()\n\n const resolvedConfig = kubb.config ?? userConfig\n\n await hooks.emit('kubb:generation:start', { config: resolvedConfig })\n\n const { error, failedPlugins, pluginTimings, files, storage } = await kubb.safeBuild()\n\n const hasFailures = failedPlugins.size > 0 || error\n if (hasFailures) {\n // Collect all errors from failed plugins and general error\n const allErrors: Array<Error> = [\n error,\n ...Array.from(failedPlugins)\n .filter((it) => it.error)\n .map((it) => it.error),\n ].filter(Boolean)\n\n allErrors.forEach((err) => {\n hooks.emit('kubb:error', { error: err })\n })\n }\n\n await hooks.emit('kubb:generation:end', { config: resolvedConfig, storage })\n await hooks.emit('kubb:generation:summary', {\n config: resolvedConfig,\n failedPlugins,\n filesCreated: files.length,\n status: failedPlugins.size > 0 || error ? 'failed' : 'success',\n hrStart,\n pluginTimings,\n })\n\n await hooks.emit('kubb:lifecycle:end')\n\n if (hasFailures) {\n const message = error?.message ?? `Build Error with ${failedPlugins.size} failed plugins`\n if (ctx.error) {\n ctx.error(`[${name}] ${message}`)\n return\n }\n\n throw new Error(`[${name}] ${message}`, { cause: error })\n }\n }\n\n return {\n name,\n enforce: 'pre',\n apply: isVite ? 'build' : undefined,\n async buildStart() {\n await runBuild(this as unknown as RollupContext)\n },\n vite: {},\n }\n}\n"],"mappings":"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"}
|
|
@@ -77,9 +77,12 @@ var AsyncEventEmitter = class {
|
|
|
77
77
|
* await emitter.emit('build', 'petstore')
|
|
78
78
|
* ```
|
|
79
79
|
*/
|
|
80
|
-
|
|
80
|
+
emit(eventName, ...eventArgs) {
|
|
81
81
|
const listeners = this.#emitter.listeners(eventName);
|
|
82
82
|
if (listeners.length === 0) return;
|
|
83
|
+
return this.#emitAll(eventName, listeners, eventArgs);
|
|
84
|
+
}
|
|
85
|
+
async #emitAll(eventName, listeners, eventArgs) {
|
|
83
86
|
for (const listener of listeners) try {
|
|
84
87
|
await listener(...eventArgs);
|
|
85
88
|
} catch (err) {
|
|
@@ -155,18 +158,46 @@ var AsyncEventEmitter = class {
|
|
|
155
158
|
};
|
|
156
159
|
//#endregion
|
|
157
160
|
//#region package.json
|
|
158
|
-
var version = "5.0.0-beta.
|
|
161
|
+
var version = "5.0.0-beta.31";
|
|
159
162
|
//#endregion
|
|
160
163
|
//#region src/unpluginFactory.ts
|
|
161
164
|
const unpluginFactory = (options, meta) => {
|
|
162
165
|
const name = "unplugin-kubb";
|
|
163
166
|
const hooks = new AsyncEventEmitter();
|
|
164
167
|
const isVite = meta.framework === "vite";
|
|
165
|
-
|
|
168
|
+
hooks.on("kubb:lifecycle:start", ({ version }) => {
|
|
169
|
+
console.log(`Kubb Unplugin ${version} 🧩`);
|
|
170
|
+
});
|
|
171
|
+
hooks.on("kubb:error", ({ error }) => {
|
|
172
|
+
console.error(`✗ ${error?.message || "failed"}`);
|
|
173
|
+
});
|
|
174
|
+
hooks.on("kubb:warn", ({ message }) => {
|
|
175
|
+
console.warn(`⚠ ${message}`);
|
|
176
|
+
});
|
|
177
|
+
hooks.on("kubb:info", ({ message }) => {
|
|
178
|
+
console.info(`ℹ ${message}`);
|
|
179
|
+
});
|
|
180
|
+
hooks.on("kubb:success", ({ message }) => {
|
|
181
|
+
console.log(`✓ ${message}`);
|
|
182
|
+
});
|
|
183
|
+
hooks.on("kubb:plugin:end", ({ plugin, duration }) => {
|
|
184
|
+
const durationStr = duration >= 1e3 ? `${(duration / 1e3).toFixed(2)}s` : `${duration}ms`;
|
|
185
|
+
console.log(`✓ ${plugin.name} completed in ${durationStr}`);
|
|
186
|
+
});
|
|
187
|
+
hooks.on("kubb:files:processing:end", () => {
|
|
188
|
+
console.log("✓ Files written successfully");
|
|
189
|
+
});
|
|
190
|
+
hooks.on("kubb:generation:end", ({ config }) => {
|
|
191
|
+
console.log(config.name ? `✓ Generation completed for ${config.name}` : "✓ Generation completed");
|
|
192
|
+
});
|
|
193
|
+
hooks.on("kubb:generation:summary", ({ config, status, failedPlugins }) => {
|
|
194
|
+
const pluginsCount = config.plugins.length;
|
|
195
|
+
const successCount = pluginsCount - failedPlugins.size;
|
|
196
|
+
console.log(status === "success" ? `Kubb Summary: ✓ ${`${successCount} successful`}, ${pluginsCount} total` : `Kubb Summary: ✓ ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total`);
|
|
197
|
+
});
|
|
166
198
|
async function runBuild(ctx) {
|
|
167
199
|
if (!options?.config) {
|
|
168
|
-
|
|
169
|
-
else console.error(`[${name}] Config is not set`);
|
|
200
|
+
(ctx.error ?? console.error)(`[${name}] Config is not set`);
|
|
170
201
|
return;
|
|
171
202
|
}
|
|
172
203
|
const middleware = options.config.middleware?.length ? options.config.middleware : [(0, _kubb_middleware_barrel.middlewareBarrel)()];
|
|
@@ -178,61 +209,28 @@ const unpluginFactory = (options, meta) => {
|
|
|
178
209
|
const config = {
|
|
179
210
|
...options.config,
|
|
180
211
|
adapter: options.config.adapter ?? (0, _kubb_adapter_oas.adapterOas)(),
|
|
181
|
-
parsers: options.config.parsers?.length ? options.config.parsers : [_kubb_parser_ts.parserTs],
|
|
212
|
+
parsers: options.config.parsers?.length ? options.config.parsers : [_kubb_parser_ts.parserTs, _kubb_parser_ts.parserTsx],
|
|
182
213
|
middleware,
|
|
183
214
|
output
|
|
184
215
|
};
|
|
185
|
-
|
|
186
|
-
console.log(`Kubb Unplugin ${version} 🧩`);
|
|
187
|
-
});
|
|
188
|
-
hooks.on("kubb:error", ({ error }) => {
|
|
189
|
-
console.error(`✗ ${error?.message || "failed"}`);
|
|
190
|
-
});
|
|
191
|
-
hooks.on("kubb:warn", ({ message }) => {
|
|
192
|
-
console.warn(`⚠ ${message}`);
|
|
193
|
-
});
|
|
194
|
-
hooks.on("kubb:info", ({ message }) => {
|
|
195
|
-
console.info(`ℹ ${message}`);
|
|
196
|
-
});
|
|
197
|
-
hooks.on("kubb:success", ({ message }) => {
|
|
198
|
-
console.log(`✓ ${message}`);
|
|
199
|
-
});
|
|
200
|
-
hooks.on("kubb:plugin:end", ({ plugin, duration }) => {
|
|
201
|
-
const durationStr = duration >= 1e3 ? `${(duration / 1e3).toFixed(2)}s` : `${duration}ms`;
|
|
202
|
-
console.log(`✓ ${plugin.name} completed in ${durationStr}`);
|
|
203
|
-
});
|
|
204
|
-
hooks.on("kubb:files:processing:end", () => {
|
|
205
|
-
console.log("✓ Files written successfully");
|
|
206
|
-
});
|
|
207
|
-
hooks.on("kubb:generation:end", ({ config }) => {
|
|
208
|
-
console.log(config.name ? `✓ Generation completed for ${config.name}` : "✓ Generation completed");
|
|
209
|
-
});
|
|
210
|
-
hooks.on("kubb:generation:summary", ({ config, status, failedPlugins }) => {
|
|
211
|
-
const pluginsCount = config.plugins.length;
|
|
212
|
-
const successCount = pluginsCount - failedPlugins.size;
|
|
213
|
-
console.log(status === "success" ? `Kubb Summary: ✓ ${`${successCount} successful`}, ${pluginsCount} total` : `Kubb Summary: ✓ ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total`);
|
|
214
|
-
});
|
|
216
|
+
const hrStart = node_process.default.hrtime();
|
|
215
217
|
await hooks.emit("kubb:lifecycle:start", { version });
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
}, { hooks }).safeBuild();
|
|
226
|
-
if (failedPlugins.size > 0 || error) [error, ...Array.from(failedPlugins).filter((it) => it.error).map((it) => it.error)].filter(Boolean).forEach((err) => {
|
|
218
|
+
const userConfig = config;
|
|
219
|
+
const kubb = (0, _kubb_core.createKubb)(userConfig, { hooks });
|
|
220
|
+
await kubb.setup();
|
|
221
|
+
const resolvedConfig = kubb.config ?? userConfig;
|
|
222
|
+
await hooks.emit("kubb:generation:start", { config: resolvedConfig });
|
|
223
|
+
const { error, failedPlugins, pluginTimings, files, storage } = await kubb.safeBuild();
|
|
224
|
+
const hasFailures = failedPlugins.size > 0 || error;
|
|
225
|
+
if (hasFailures) [error, ...Array.from(failedPlugins).filter((it) => it.error).map((it) => it.error)].filter(Boolean).forEach((err) => {
|
|
227
226
|
hooks.emit("kubb:error", { error: err });
|
|
228
227
|
});
|
|
229
228
|
await hooks.emit("kubb:generation:end", {
|
|
230
|
-
config,
|
|
231
|
-
|
|
232
|
-
sources
|
|
229
|
+
config: resolvedConfig,
|
|
230
|
+
storage
|
|
233
231
|
});
|
|
234
232
|
await hooks.emit("kubb:generation:summary", {
|
|
235
|
-
config,
|
|
233
|
+
config: resolvedConfig,
|
|
236
234
|
failedPlugins,
|
|
237
235
|
filesCreated: files.length,
|
|
238
236
|
status: failedPlugins.size > 0 || error ? "failed" : "success",
|
|
@@ -240,6 +238,14 @@ const unpluginFactory = (options, meta) => {
|
|
|
240
238
|
pluginTimings
|
|
241
239
|
});
|
|
242
240
|
await hooks.emit("kubb:lifecycle:end");
|
|
241
|
+
if (hasFailures) {
|
|
242
|
+
const message = error?.message ?? `Build Error with ${failedPlugins.size} failed plugins`;
|
|
243
|
+
if (ctx.error) {
|
|
244
|
+
ctx.error(`[${name}] ${message}`);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
throw new Error(`[${name}] ${message}`, { cause: error });
|
|
248
|
+
}
|
|
243
249
|
}
|
|
244
250
|
return {
|
|
245
251
|
name,
|
|
@@ -271,4 +277,4 @@ Object.defineProperty(exports, "unpluginFactory", {
|
|
|
271
277
|
}
|
|
272
278
|
});
|
|
273
279
|
|
|
274
|
-
//# sourceMappingURL=unpluginFactory-
|
|
280
|
+
//# sourceMappingURL=unpluginFactory-CzUql6BG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unpluginFactory-CzUql6BG.cjs","names":["#emitter","NodeEventEmitter","#emitAll","middlewareBarrelName","parserTs","parserTsx","process","unpluginVersion"],"sources":["../../../internals/utils/src/errors.ts","../../../internals/utils/src/asyncEventEmitter.ts","../package.json","../src/unpluginFactory.ts"],"sourcesContent":["/**\n * Thrown when one or more errors occur during a Kubb build.\n * Carries the full list of underlying errors on `errors`.\n *\n * @example\n * ```ts\n * throw new BuildError('Build failed', { errors: [err1, err2] })\n * ```\n */\nexport class BuildError extends Error {\n errors: Array<Error>\n\n constructor(message: string, options: { cause?: Error; errors: Array<Error> }) {\n super(message, { cause: options.cause })\n this.name = 'BuildError'\n this.errors = options.errors\n }\n}\n\n/**\n * Coerces an unknown thrown value to an `Error` instance.\n * Returns the value as-is when it is already an `Error`; otherwise wraps it with `String(value)`.\n *\n * @example\n * ```ts\n * try { ... } catch(err) {\n * throw new BuildError('Build failed', { cause: toError(err), errors: [] })\n * }\n * ```\n */\nexport function toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value))\n}\n\n/**\n * Extracts a human-readable message from any thrown value.\n *\n * @example\n * ```ts\n * getErrorMessage(new Error('oops')) // 'oops'\n * getErrorMessage('plain string') // 'plain string'\n * ```\n */\nexport function getErrorMessage(value: unknown): string {\n return value instanceof Error ? value.message : String(value)\n}\n\n/**\n * Extracts the `.cause` of an `Error` as an `Error`, or `undefined` when absent or not an `Error`.\n *\n * @example\n * ```ts\n * const cause = toCause(buildError) // Error | undefined\n * ```\n */\nexport function toCause(error: Error): Error | undefined {\n return error.cause instanceof Error ? error.cause : undefined\n}\n","import { EventEmitter as NodeEventEmitter } from 'node:events'\nimport { toError } from './errors.ts'\n\n/**\n * A function that can be registered as an event listener, synchronous or async.\n */\ntype AsyncListener<TArgs extends unknown[]> = (...args: TArgs) => void | Promise<void>\n\n/**\n * Typed `EventEmitter` that awaits all async listeners before resolving.\n * Wraps Node's `EventEmitter` with full TypeScript event-map inference.\n *\n * @example\n * ```ts\n * const emitter = new AsyncEventEmitter<{ build: [name: string] }>()\n * emitter.on('build', async (name) => { console.log(name) })\n * await emitter.emit('build', 'petstore') // all listeners awaited\n * ```\n */\nexport class AsyncEventEmitter<TEvents extends { [K in keyof TEvents]: unknown[] }> {\n /**\n * Maximum number of listeners per event before Node emits a memory-leak warning.\n * @default 10\n */\n constructor(maxListener = 10) {\n this.#emitter.setMaxListeners(maxListener)\n }\n\n #emitter = new NodeEventEmitter()\n\n /**\n * Emits `eventName` and awaits all registered listeners sequentially.\n * Throws if any listener rejects, wrapping the cause with the event name and serialized arguments.\n *\n * @example\n * ```ts\n * await emitter.emit('build', 'petstore')\n * ```\n */\n emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArgs: TEvents[TEventName]): Promise<void> | void {\n const listeners = this.#emitter.listeners(eventName) as Array<AsyncListener<TEvents[TEventName]>>\n\n if (listeners.length === 0) {\n return\n }\n\n return this.#emitAll(eventName, listeners, eventArgs)\n }\n\n async #emitAll<TEventName extends keyof TEvents & string>(\n eventName: TEventName,\n listeners: Array<AsyncListener<TEvents[TEventName]>>,\n eventArgs: TEvents[TEventName],\n ): Promise<void> {\n for (const listener of listeners) {\n try {\n await listener(...eventArgs)\n } catch (err) {\n let serializedArgs: string\n try {\n serializedArgs = JSON.stringify(eventArgs)\n } catch {\n serializedArgs = String(eventArgs)\n }\n throw new Error(`Error in async listener for \"${eventName}\" with eventArgs ${serializedArgs}`, { cause: toError(err) })\n }\n }\n }\n\n /**\n * Registers a persistent listener for `eventName`.\n *\n * @example\n * ```ts\n * emitter.on('build', async (name) => { console.log(name) })\n * ```\n */\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: AsyncListener<TEvents[TEventName]>): void {\n this.#emitter.on(eventName, handler as AsyncListener<unknown[]>)\n }\n\n /**\n * Registers a one-shot listener that removes itself after the first invocation.\n *\n * @example\n * ```ts\n * emitter.onOnce('build', async (name) => { console.log(name) })\n * ```\n */\n onOnce<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: AsyncListener<TEvents[TEventName]>): void {\n const wrapper: AsyncListener<TEvents[TEventName]> = (...args) => {\n this.off(eventName, wrapper)\n return handler(...args)\n }\n this.on(eventName, wrapper)\n }\n\n /**\n * Removes a previously registered listener.\n *\n * @example\n * ```ts\n * emitter.off('build', handler)\n * ```\n */\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: AsyncListener<TEvents[TEventName]>): void {\n this.#emitter.off(eventName, handler as AsyncListener<unknown[]>)\n }\n\n /**\n * Returns the number of listeners registered for `eventName`.\n *\n * @example\n * ```ts\n * emitter.on('build', handler)\n * emitter.listenerCount('build') // 1\n * ```\n */\n listenerCount<TEventName extends keyof TEvents & string>(eventName: TEventName): number {\n return this.#emitter.listenerCount(eventName)\n }\n\n /**\n * Removes all listeners from every event channel.\n *\n * @example\n * ```ts\n * emitter.removeAll()\n * ```\n */\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","","import process from 'node:process'\nimport { AsyncEventEmitter } from '@internals/utils'\nimport { adapterOas } from '@kubb/adapter-oas'\nimport { type Config, createKubb, type KubbHooks } from '@kubb/core'\nimport { middlewareBarrel, middlewareBarrelName } from '@kubb/middleware-barrel'\nimport { parserTs, parserTsx } from '@kubb/parser-ts'\nimport type { UnpluginFactory } from 'unplugin'\nimport { version as unpluginVersion } from '../package.json'\nimport type { Options } from './types.ts'\n\ntype RollupContext = {\n info?: (message: string) => void\n warn?: (message: string) => void\n error?: (message: string) => void\n}\n\nexport const unpluginFactory: UnpluginFactory<Options | undefined> = (options, meta) => {\n const name = 'unplugin-kubb' as const\n const hooks = new AsyncEventEmitter<KubbHooks>()\n const isVite = meta.framework === 'vite'\n\n hooks.on('kubb:lifecycle:start', ({ version }) => {\n console.log(`Kubb Unplugin ${version} 🧩`)\n })\n\n hooks.on('kubb:error', ({ error }) => {\n console.error(`✗ ${error?.message || 'failed'}`)\n })\n\n hooks.on('kubb:warn', ({ message }) => {\n console.warn(`⚠ ${message}`)\n })\n\n hooks.on('kubb:info', ({ message }) => {\n console.info(`ℹ ${message}`)\n })\n\n hooks.on('kubb:success', ({ message }) => {\n console.log(`✓ ${message}`)\n })\n\n hooks.on('kubb:plugin:end', ({ plugin, duration }) => {\n const durationStr = duration >= 1000 ? `${(duration / 1000).toFixed(2)}s` : `${duration}ms`\n\n console.log(`✓ ${plugin.name} completed in ${durationStr}`)\n })\n\n hooks.on('kubb:files:processing:end', () => {\n const text = '✓ Files written successfully'\n\n console.log(text)\n })\n\n hooks.on('kubb:generation:end', ({ config }) => {\n console.log(config.name ? `✓ Generation completed for ${config.name}` : '✓ Generation completed')\n })\n\n hooks.on('kubb:generation:summary', ({ config, status, failedPlugins }) => {\n const pluginsCount = config.plugins.length\n const successCount = pluginsCount - failedPlugins.size\n\n console.log(\n status === 'success'\n ? `Kubb Summary: ✓ ${`${successCount} successful`}, ${pluginsCount} total`\n : `Kubb Summary: ✓ ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total`,\n )\n })\n\n async function runBuild(ctx: RollupContext) {\n if (!options?.config) {\n ;(ctx.error ?? console.error)(`[${name}] Config is not set`)\n return\n }\n\n const middleware = options.config.middleware?.length ? options.config.middleware : [middlewareBarrel()]\n const hasBarrelMiddleware = middleware.some((m) => m.name === middlewareBarrelName)\n const output = { ...options.config.output }\n if (hasBarrelMiddleware && output.barrel === undefined) {\n output.barrel = { type: 'named' }\n }\n if (output.format === undefined) {\n output.format = false\n }\n if (output.lint === undefined) {\n output.lint = false\n }\n\n const config = {\n ...options.config,\n adapter: options.config.adapter ?? adapterOas(),\n parsers: options.config.parsers?.length ? options.config.parsers : [parserTs, parserTsx],\n middleware,\n output,\n }\n const hrStart = process.hrtime()\n\n await hooks.emit('kubb:lifecycle:start', { version: unpluginVersion })\n\n const userConfig = config as Config\n\n const kubb = createKubb(userConfig, { hooks })\n await kubb.setup()\n\n const resolvedConfig = kubb.config ?? userConfig\n\n await hooks.emit('kubb:generation:start', { config: resolvedConfig })\n\n const { error, failedPlugins, pluginTimings, files, storage } = await kubb.safeBuild()\n\n const hasFailures = failedPlugins.size > 0 || error\n if (hasFailures) {\n // Collect all errors from failed plugins and general error\n const allErrors: Array<Error> = [\n error,\n ...Array.from(failedPlugins)\n .filter((it) => it.error)\n .map((it) => it.error),\n ].filter(Boolean)\n\n allErrors.forEach((err) => {\n hooks.emit('kubb:error', { error: err })\n })\n }\n\n await hooks.emit('kubb:generation:end', { config: resolvedConfig, storage })\n await hooks.emit('kubb:generation:summary', {\n config: resolvedConfig,\n failedPlugins,\n filesCreated: files.length,\n status: failedPlugins.size > 0 || error ? 'failed' : 'success',\n hrStart,\n pluginTimings,\n })\n\n await hooks.emit('kubb:lifecycle:end')\n\n if (hasFailures) {\n const message = error?.message ?? `Build Error with ${failedPlugins.size} failed plugins`\n if (ctx.error) {\n ctx.error(`[${name}] ${message}`)\n return\n }\n\n throw new Error(`[${name}] ${message}`, { cause: error })\n }\n }\n\n return {\n name,\n enforce: 'pre',\n apply: isVite ? 'build' : undefined,\n async buildStart() {\n await runBuild(this as unknown as RollupContext)\n },\n vite: {},\n }\n}\n"],"mappings":"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"}
|
package/dist/unpluginFactory.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_unpluginFactory = require("./unpluginFactory-
|
|
2
|
+
const require_unpluginFactory = require("./unpluginFactory-CzUql6BG.cjs");
|
|
3
3
|
exports.unpluginFactory = require_unpluginFactory.unpluginFactory;
|
package/dist/unpluginFactory.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as unpluginFactory } from "./unpluginFactory-
|
|
1
|
+
import { t as unpluginFactory } from "./unpluginFactory-CJcLLBa1.js";
|
|
2
2
|
export { unpluginFactory };
|
package/dist/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_unpluginFactory = require("./unpluginFactory-
|
|
1
|
+
const require_unpluginFactory = require("./unpluginFactory-CzUql6BG.cjs");
|
|
2
2
|
//#region src/vite.ts
|
|
3
3
|
var vite_default = (0, require("unplugin").createVitePlugin)(require_unpluginFactory.unpluginFactory);
|
|
4
4
|
//#endregion
|
package/dist/vite.js
CHANGED
package/dist/webpack.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_unpluginFactory = require("./unpluginFactory-
|
|
1
|
+
const require_unpluginFactory = require("./unpluginFactory-CzUql6BG.cjs");
|
|
2
2
|
//#region src/webpack.ts
|
|
3
3
|
var webpack_default = (0, require("unplugin").createWebpackPlugin)(require_unpluginFactory.unpluginFactory);
|
|
4
4
|
//#endregion
|
package/dist/webpack.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as unpluginFactory } from "./unpluginFactory-
|
|
1
|
+
import { t as unpluginFactory } from "./unpluginFactory-CJcLLBa1.js";
|
|
2
2
|
import { createWebpackPlugin } from "unplugin";
|
|
3
3
|
//#region src/webpack.ts
|
|
4
4
|
var webpack_default = createWebpackPlugin(unpluginFactory);
|
package/package.json
CHANGED
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unplugin-kubb",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
4
|
-
"description": "Universal build
|
|
3
|
+
"version": "5.0.0-beta.31",
|
|
4
|
+
"description": "Universal build integration for Kubb using unplugin. Plug OpenAPI code generation into Vite, Webpack, Rollup, esbuild, Rspack, Nuxt, and Astro as part of your regular build pipeline.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"astro",
|
|
7
|
-
"
|
|
8
|
-
"bundler",
|
|
9
|
-
"code-generator",
|
|
7
|
+
"codegen",
|
|
10
8
|
"esbuild",
|
|
9
|
+
"farm",
|
|
11
10
|
"kubb",
|
|
12
11
|
"nuxt",
|
|
13
12
|
"openapi",
|
|
14
13
|
"rollup",
|
|
15
14
|
"rspack",
|
|
16
|
-
"swagger",
|
|
17
|
-
"transform",
|
|
18
15
|
"typescript",
|
|
19
16
|
"unplugin",
|
|
20
17
|
"vite",
|
|
@@ -104,20 +101,20 @@
|
|
|
104
101
|
},
|
|
105
102
|
"dependencies": {
|
|
106
103
|
"unplugin": "^3.0.0",
|
|
107
|
-
"@kubb/adapter-oas": "5.0.0-beta.
|
|
108
|
-
"@kubb/core": "5.0.0-beta.
|
|
109
|
-
"@kubb/middleware-barrel": "5.0.0-beta.
|
|
110
|
-
"@kubb/parser-ts": "5.0.0-beta.
|
|
104
|
+
"@kubb/adapter-oas": "5.0.0-beta.31",
|
|
105
|
+
"@kubb/core": "5.0.0-beta.31",
|
|
106
|
+
"@kubb/middleware-barrel": "5.0.0-beta.31",
|
|
107
|
+
"@kubb/parser-ts": "5.0.0-beta.31"
|
|
111
108
|
},
|
|
112
109
|
"devDependencies": {
|
|
113
110
|
"@farmfe/core": "^1.7.11",
|
|
114
|
-
"@nuxt/kit": "^4.4.
|
|
115
|
-
"@nuxt/schema": "^4.4.
|
|
111
|
+
"@nuxt/kit": "^4.4.6",
|
|
112
|
+
"@nuxt/schema": "^4.4.6",
|
|
116
113
|
"esbuild": "^0.28.0",
|
|
117
114
|
"rolldown": "1.0.0-rc.16",
|
|
118
|
-
"rollup": "^4.60.
|
|
119
|
-
"vite": "^8.0.
|
|
120
|
-
"webpack": "^5.
|
|
115
|
+
"rollup": "^4.60.4",
|
|
116
|
+
"vite": "^8.0.14",
|
|
117
|
+
"webpack": "^5.107.1",
|
|
121
118
|
"@internals/utils": "0.0.0"
|
|
122
119
|
},
|
|
123
120
|
"peerDependencies": {
|
package/src/nuxt.ts
CHANGED
package/src/unpluginFactory.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { AsyncEventEmitter } from '@internals/utils'
|
|
|
3
3
|
import { adapterOas } from '@kubb/adapter-oas'
|
|
4
4
|
import { type Config, createKubb, type KubbHooks } from '@kubb/core'
|
|
5
5
|
import { middlewareBarrel, middlewareBarrelName } from '@kubb/middleware-barrel'
|
|
6
|
-
import { parserTs } from '@kubb/parser-ts'
|
|
6
|
+
import { parserTs, parserTsx } from '@kubb/parser-ts'
|
|
7
7
|
import type { UnpluginFactory } from 'unplugin'
|
|
8
8
|
import { version as unpluginVersion } from '../package.json'
|
|
9
9
|
import type { Options } from './types.ts'
|
|
@@ -18,15 +18,57 @@ export const unpluginFactory: UnpluginFactory<Options | undefined> = (options, m
|
|
|
18
18
|
const name = 'unplugin-kubb' as const
|
|
19
19
|
const hooks = new AsyncEventEmitter<KubbHooks>()
|
|
20
20
|
const isVite = meta.framework === 'vite'
|
|
21
|
-
|
|
21
|
+
|
|
22
|
+
hooks.on('kubb:lifecycle:start', ({ version }) => {
|
|
23
|
+
console.log(`Kubb Unplugin ${version} 🧩`)
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
hooks.on('kubb:error', ({ error }) => {
|
|
27
|
+
console.error(`✗ ${error?.message || 'failed'}`)
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
hooks.on('kubb:warn', ({ message }) => {
|
|
31
|
+
console.warn(`⚠ ${message}`)
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
hooks.on('kubb:info', ({ message }) => {
|
|
35
|
+
console.info(`ℹ ${message}`)
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
hooks.on('kubb:success', ({ message }) => {
|
|
39
|
+
console.log(`✓ ${message}`)
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
hooks.on('kubb:plugin:end', ({ plugin, duration }) => {
|
|
43
|
+
const durationStr = duration >= 1000 ? `${(duration / 1000).toFixed(2)}s` : `${duration}ms`
|
|
44
|
+
|
|
45
|
+
console.log(`✓ ${plugin.name} completed in ${durationStr}`)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
hooks.on('kubb:files:processing:end', () => {
|
|
49
|
+
const text = '✓ Files written successfully'
|
|
50
|
+
|
|
51
|
+
console.log(text)
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
hooks.on('kubb:generation:end', ({ config }) => {
|
|
55
|
+
console.log(config.name ? `✓ Generation completed for ${config.name}` : '✓ Generation completed')
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
hooks.on('kubb:generation:summary', ({ config, status, failedPlugins }) => {
|
|
59
|
+
const pluginsCount = config.plugins.length
|
|
60
|
+
const successCount = pluginsCount - failedPlugins.size
|
|
61
|
+
|
|
62
|
+
console.log(
|
|
63
|
+
status === 'success'
|
|
64
|
+
? `Kubb Summary: ✓ ${`${successCount} successful`}, ${pluginsCount} total`
|
|
65
|
+
: `Kubb Summary: ✓ ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total`,
|
|
66
|
+
)
|
|
67
|
+
})
|
|
22
68
|
|
|
23
69
|
async function runBuild(ctx: RollupContext) {
|
|
24
70
|
if (!options?.config) {
|
|
25
|
-
|
|
26
|
-
ctx.error?.(`[${name}] Config is not set`)
|
|
27
|
-
} else {
|
|
28
|
-
console.error(`[${name}] Config is not set`)
|
|
29
|
-
}
|
|
71
|
+
;(ctx.error ?? console.error)(`[${name}] Config is not set`)
|
|
30
72
|
return
|
|
31
73
|
}
|
|
32
74
|
|
|
@@ -46,80 +88,29 @@ export const unpluginFactory: UnpluginFactory<Options | undefined> = (options, m
|
|
|
46
88
|
const config = {
|
|
47
89
|
...options.config,
|
|
48
90
|
adapter: options.config.adapter ?? adapterOas(),
|
|
49
|
-
parsers: options.config.parsers?.length ? options.config.parsers : [parserTs],
|
|
91
|
+
parsers: options.config.parsers?.length ? options.config.parsers : [parserTs, parserTsx],
|
|
50
92
|
middleware,
|
|
51
93
|
output,
|
|
52
94
|
}
|
|
95
|
+
const hrStart = process.hrtime()
|
|
53
96
|
|
|
54
|
-
hooks.
|
|
55
|
-
console.log(`Kubb Unplugin ${version} 🧩`)
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
hooks.on('kubb:error', ({ error }) => {
|
|
59
|
-
console.error(`✗ ${error?.message || 'failed'}`)
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
hooks.on('kubb:warn', ({ message }) => {
|
|
63
|
-
console.warn(`⚠ ${message}`)
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
hooks.on('kubb:info', ({ message }) => {
|
|
67
|
-
console.info(`ℹ ${message}`)
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
hooks.on('kubb:success', ({ message }) => {
|
|
71
|
-
console.log(`✓ ${message}`)
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
hooks.on('kubb:plugin:end', ({ plugin, duration }) => {
|
|
75
|
-
const durationStr = duration >= 1000 ? `${(duration / 1000).toFixed(2)}s` : `${duration}ms`
|
|
76
|
-
|
|
77
|
-
console.log(`✓ ${plugin.name} completed in ${durationStr}`)
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
hooks.on('kubb:files:processing:end', () => {
|
|
81
|
-
const text = '✓ Files written successfully'
|
|
82
|
-
|
|
83
|
-
console.log(text)
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
hooks.on('kubb:generation:end', ({ config }) => {
|
|
87
|
-
console.log(config.name ? `✓ Generation completed for ${config.name}` : '✓ Generation completed')
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
hooks.on('kubb:generation:summary', ({ config, status, failedPlugins }) => {
|
|
91
|
-
const pluginsCount = config.plugins.length
|
|
92
|
-
const successCount = pluginsCount - failedPlugins.size
|
|
97
|
+
await hooks.emit('kubb:lifecycle:start', { version: unpluginVersion })
|
|
93
98
|
|
|
94
|
-
|
|
95
|
-
status === 'success'
|
|
96
|
-
? `Kubb Summary: ✓ ${`${successCount} successful`}, ${pluginsCount} total`
|
|
97
|
-
: `Kubb Summary: ✓ ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total`,
|
|
98
|
-
)
|
|
99
|
-
})
|
|
99
|
+
const userConfig = config as Config
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
const kubb = createKubb(userConfig, { hooks })
|
|
102
|
+
await kubb.setup()
|
|
102
103
|
|
|
103
|
-
const
|
|
104
|
+
const resolvedConfig = kubb.config ?? userConfig
|
|
104
105
|
|
|
105
|
-
await hooks.emit('kubb:generation:start', { config:
|
|
106
|
+
await hooks.emit('kubb:generation:start', { config: resolvedConfig })
|
|
106
107
|
|
|
107
|
-
const { error, failedPlugins, pluginTimings, files,
|
|
108
|
-
{
|
|
109
|
-
root: process.cwd(),
|
|
110
|
-
...userConfig,
|
|
111
|
-
output: {
|
|
112
|
-
write: true,
|
|
113
|
-
...userConfig.output,
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
{ hooks },
|
|
117
|
-
).safeBuild()
|
|
108
|
+
const { error, failedPlugins, pluginTimings, files, storage } = await kubb.safeBuild()
|
|
118
109
|
|
|
119
110
|
const hasFailures = failedPlugins.size > 0 || error
|
|
120
111
|
if (hasFailures) {
|
|
121
112
|
// Collect all errors from failed plugins and general error
|
|
122
|
-
const allErrors: Error
|
|
113
|
+
const allErrors: Array<Error> = [
|
|
123
114
|
error,
|
|
124
115
|
...Array.from(failedPlugins)
|
|
125
116
|
.filter((it) => it.error)
|
|
@@ -131,9 +122,9 @@ export const unpluginFactory: UnpluginFactory<Options | undefined> = (options, m
|
|
|
131
122
|
})
|
|
132
123
|
}
|
|
133
124
|
|
|
134
|
-
await hooks.emit('kubb:generation:end', { config:
|
|
125
|
+
await hooks.emit('kubb:generation:end', { config: resolvedConfig, storage })
|
|
135
126
|
await hooks.emit('kubb:generation:summary', {
|
|
136
|
-
config:
|
|
127
|
+
config: resolvedConfig,
|
|
137
128
|
failedPlugins,
|
|
138
129
|
filesCreated: files.length,
|
|
139
130
|
status: failedPlugins.size > 0 || error ? 'failed' : 'success',
|
|
@@ -142,6 +133,16 @@ export const unpluginFactory: UnpluginFactory<Options | undefined> = (options, m
|
|
|
142
133
|
})
|
|
143
134
|
|
|
144
135
|
await hooks.emit('kubb:lifecycle:end')
|
|
136
|
+
|
|
137
|
+
if (hasFailures) {
|
|
138
|
+
const message = error?.message ?? `Build Error with ${failedPlugins.size} failed plugins`
|
|
139
|
+
if (ctx.error) {
|
|
140
|
+
ctx.error(`[${name}] ${message}`)
|
|
141
|
+
return
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
throw new Error(`[${name}] ${message}`, { cause: error })
|
|
145
|
+
}
|
|
145
146
|
}
|
|
146
147
|
|
|
147
148
|
return {
|
|
@@ -151,7 +152,6 @@ export const unpluginFactory: UnpluginFactory<Options | undefined> = (options, m
|
|
|
151
152
|
async buildStart() {
|
|
152
153
|
await runBuild(this as unknown as RollupContext)
|
|
153
154
|
},
|
|
154
|
-
|
|
155
155
|
vite: {},
|
|
156
156
|
}
|
|
157
157
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unpluginFactory-BMpsKVDI.cjs","names":["#emitter","NodeEventEmitter","process","middlewareBarrelName","parserTs","unpluginVersion"],"sources":["../../../internals/utils/src/errors.ts","../../../internals/utils/src/asyncEventEmitter.ts","../package.json","../src/unpluginFactory.ts"],"sourcesContent":["/**\n * Thrown when one or more errors occur during a Kubb build.\n * Carries the full list of underlying errors on `errors`.\n *\n * @example\n * ```ts\n * throw new BuildError('Build failed', { errors: [err1, err2] })\n * ```\n */\nexport class BuildError extends Error {\n errors: Array<Error>\n\n constructor(message: string, options: { cause?: Error; errors: Array<Error> }) {\n super(message, { cause: options.cause })\n this.name = 'BuildError'\n this.errors = options.errors\n }\n}\n\n/**\n * Coerces an unknown thrown value to an `Error` instance.\n * Returns the value as-is when it is already an `Error`; otherwise wraps it with `String(value)`.\n *\n * @example\n * ```ts\n * try { ... } catch(err) {\n * throw new BuildError('Build failed', { cause: toError(err), errors: [] })\n * }\n * ```\n */\nexport function toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value))\n}\n\n/**\n * Extracts a human-readable message from any thrown value.\n *\n * @example\n * ```ts\n * getErrorMessage(new Error('oops')) // 'oops'\n * getErrorMessage('plain string') // 'plain string'\n * ```\n */\nexport function getErrorMessage(value: unknown): string {\n return value instanceof Error ? value.message : String(value)\n}\n\n/**\n * Extracts the `.cause` of an `Error` as an `Error`, or `undefined` when absent or not an `Error`.\n *\n * @example\n * ```ts\n * const cause = toCause(buildError) // Error | undefined\n * ```\n */\nexport function toCause(error: Error): Error | undefined {\n return error.cause instanceof Error ? error.cause : undefined\n}\n","import { EventEmitter as NodeEventEmitter } from 'node:events'\nimport { toError } from './errors.ts'\n\n/**\n * A function that can be registered as an event listener, synchronous or async.\n */\ntype AsyncListener<TArgs extends unknown[]> = (...args: TArgs) => void | Promise<void>\n\n/**\n * Typed `EventEmitter` that awaits all async listeners before resolving.\n * Wraps Node's `EventEmitter` with full TypeScript event-map inference.\n *\n * @example\n * ```ts\n * const emitter = new AsyncEventEmitter<{ build: [name: string] }>()\n * emitter.on('build', async (name) => { console.log(name) })\n * await emitter.emit('build', 'petstore') // all listeners awaited\n * ```\n */\nexport class AsyncEventEmitter<TEvents extends { [K in keyof TEvents]: unknown[] }> {\n /**\n * Maximum number of listeners per event before Node emits a memory-leak warning.\n * @default 10\n */\n constructor(maxListener = 10) {\n this.#emitter.setMaxListeners(maxListener)\n }\n\n #emitter = new NodeEventEmitter()\n\n /**\n * Emits `eventName` and awaits all registered listeners sequentially.\n * Throws if any listener rejects, wrapping the cause with the event name and serialized arguments.\n *\n * @example\n * ```ts\n * await emitter.emit('build', 'petstore')\n * ```\n */\n async emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArgs: TEvents[TEventName]): Promise<void> {\n const listeners = this.#emitter.listeners(eventName) as Array<AsyncListener<TEvents[TEventName]>>\n\n if (listeners.length === 0) {\n return\n }\n\n for (const listener of listeners) {\n try {\n await listener(...eventArgs)\n } catch (err) {\n let serializedArgs: string\n try {\n serializedArgs = JSON.stringify(eventArgs)\n } catch {\n serializedArgs = String(eventArgs)\n }\n throw new Error(`Error in async listener for \"${eventName}\" with eventArgs ${serializedArgs}`, { cause: toError(err) })\n }\n }\n }\n\n /**\n * Registers a persistent listener for `eventName`.\n *\n * @example\n * ```ts\n * emitter.on('build', async (name) => { console.log(name) })\n * ```\n */\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: AsyncListener<TEvents[TEventName]>): void {\n this.#emitter.on(eventName, handler as AsyncListener<unknown[]>)\n }\n\n /**\n * Registers a one-shot listener that removes itself after the first invocation.\n *\n * @example\n * ```ts\n * emitter.onOnce('build', async (name) => { console.log(name) })\n * ```\n */\n onOnce<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: AsyncListener<TEvents[TEventName]>): void {\n const wrapper: AsyncListener<TEvents[TEventName]> = (...args) => {\n this.off(eventName, wrapper)\n return handler(...args)\n }\n this.on(eventName, wrapper)\n }\n\n /**\n * Removes a previously registered listener.\n *\n * @example\n * ```ts\n * emitter.off('build', handler)\n * ```\n */\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: AsyncListener<TEvents[TEventName]>): void {\n this.#emitter.off(eventName, handler as AsyncListener<unknown[]>)\n }\n\n /**\n * Returns the number of listeners registered for `eventName`.\n *\n * @example\n * ```ts\n * emitter.on('build', handler)\n * emitter.listenerCount('build') // 1\n * ```\n */\n listenerCount<TEventName extends keyof TEvents & string>(eventName: TEventName): number {\n return this.#emitter.listenerCount(eventName)\n }\n\n /**\n * Removes all listeners from every event channel.\n *\n * @example\n * ```ts\n * emitter.removeAll()\n * ```\n */\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","","import process from 'node:process'\nimport { AsyncEventEmitter } from '@internals/utils'\nimport { adapterOas } from '@kubb/adapter-oas'\nimport { type Config, createKubb, type KubbHooks } from '@kubb/core'\nimport { middlewareBarrel, middlewareBarrelName } from '@kubb/middleware-barrel'\nimport { parserTs } from '@kubb/parser-ts'\nimport type { UnpluginFactory } from 'unplugin'\nimport { version as unpluginVersion } from '../package.json'\nimport type { Options } from './types.ts'\n\ntype RollupContext = {\n info?: (message: string) => void\n warn?: (message: string) => void\n error?: (message: string) => void\n}\n\nexport const unpluginFactory: UnpluginFactory<Options | undefined> = (options, meta) => {\n const name = 'unplugin-kubb' as const\n const hooks = new AsyncEventEmitter<KubbHooks>()\n const isVite = meta.framework === 'vite'\n const hrStart = process.hrtime()\n\n async function runBuild(ctx: RollupContext) {\n if (!options?.config) {\n if (ctx.error) {\n ctx.error?.(`[${name}] Config is not set`)\n } else {\n console.error(`[${name}] Config is not set`)\n }\n return\n }\n\n const middleware = options.config.middleware?.length ? options.config.middleware : [middlewareBarrel()]\n const hasBarrelMiddleware = middleware.some((m) => m.name === middlewareBarrelName)\n const output = { ...options.config.output }\n if (hasBarrelMiddleware && output.barrel === undefined) {\n output.barrel = { type: 'named' }\n }\n if (output.format === undefined) {\n output.format = false\n }\n if (output.lint === undefined) {\n output.lint = false\n }\n\n const config = {\n ...options.config,\n adapter: options.config.adapter ?? adapterOas(),\n parsers: options.config.parsers?.length ? options.config.parsers : [parserTs],\n middleware,\n output,\n }\n\n hooks.on('kubb:lifecycle:start', ({ version }) => {\n console.log(`Kubb Unplugin ${version} 🧩`)\n })\n\n hooks.on('kubb:error', ({ error }) => {\n console.error(`✗ ${error?.message || 'failed'}`)\n })\n\n hooks.on('kubb:warn', ({ message }) => {\n console.warn(`⚠ ${message}`)\n })\n\n hooks.on('kubb:info', ({ message }) => {\n console.info(`ℹ ${message}`)\n })\n\n hooks.on('kubb:success', ({ message }) => {\n console.log(`✓ ${message}`)\n })\n\n hooks.on('kubb:plugin:end', ({ plugin, duration }) => {\n const durationStr = duration >= 1000 ? `${(duration / 1000).toFixed(2)}s` : `${duration}ms`\n\n console.log(`✓ ${plugin.name} completed in ${durationStr}`)\n })\n\n hooks.on('kubb:files:processing:end', () => {\n const text = '✓ Files written successfully'\n\n console.log(text)\n })\n\n hooks.on('kubb:generation:end', ({ config }) => {\n console.log(config.name ? `✓ Generation completed for ${config.name}` : '✓ Generation completed')\n })\n\n hooks.on('kubb:generation:summary', ({ config, status, failedPlugins }) => {\n const pluginsCount = config.plugins.length\n const successCount = pluginsCount - failedPlugins.size\n\n console.log(\n status === 'success'\n ? `Kubb Summary: ✓ ${`${successCount} successful`}, ${pluginsCount} total`\n : `Kubb Summary: ✓ ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total`,\n )\n })\n\n await hooks.emit('kubb:lifecycle:start', { version: unpluginVersion })\n\n const { root: _root, ...userConfig } = config as Config\n\n await hooks.emit('kubb:generation:start', { config: config as Config })\n\n const { error, failedPlugins, pluginTimings, files, sources } = await createKubb(\n {\n root: process.cwd(),\n ...userConfig,\n output: {\n write: true,\n ...userConfig.output,\n },\n },\n { hooks },\n ).safeBuild()\n\n const hasFailures = failedPlugins.size > 0 || error\n if (hasFailures) {\n // Collect all errors from failed plugins and general error\n const allErrors: Error[] = [\n error,\n ...Array.from(failedPlugins)\n .filter((it) => it.error)\n .map((it) => it.error),\n ].filter(Boolean)\n\n allErrors.forEach((err) => {\n hooks.emit('kubb:error', { error: err })\n })\n }\n\n await hooks.emit('kubb:generation:end', { config: config as Config, files, sources })\n await hooks.emit('kubb:generation:summary', {\n config: config as Config,\n failedPlugins,\n filesCreated: files.length,\n status: failedPlugins.size > 0 || error ? 'failed' : 'success',\n hrStart,\n pluginTimings,\n })\n\n await hooks.emit('kubb:lifecycle:end')\n }\n\n return {\n name,\n enforce: 'pre',\n apply: isVite ? 'build' : undefined,\n async buildStart() {\n await runBuild(this as unknown as RollupContext)\n },\n\n vite: {},\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unpluginFactory-DZXC1_ds.js","names":["#emitter","NodeEventEmitter","unpluginVersion"],"sources":["../../../internals/utils/src/errors.ts","../../../internals/utils/src/asyncEventEmitter.ts","../package.json","../src/unpluginFactory.ts"],"sourcesContent":["/**\n * Thrown when one or more errors occur during a Kubb build.\n * Carries the full list of underlying errors on `errors`.\n *\n * @example\n * ```ts\n * throw new BuildError('Build failed', { errors: [err1, err2] })\n * ```\n */\nexport class BuildError extends Error {\n errors: Array<Error>\n\n constructor(message: string, options: { cause?: Error; errors: Array<Error> }) {\n super(message, { cause: options.cause })\n this.name = 'BuildError'\n this.errors = options.errors\n }\n}\n\n/**\n * Coerces an unknown thrown value to an `Error` instance.\n * Returns the value as-is when it is already an `Error`; otherwise wraps it with `String(value)`.\n *\n * @example\n * ```ts\n * try { ... } catch(err) {\n * throw new BuildError('Build failed', { cause: toError(err), errors: [] })\n * }\n * ```\n */\nexport function toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value))\n}\n\n/**\n * Extracts a human-readable message from any thrown value.\n *\n * @example\n * ```ts\n * getErrorMessage(new Error('oops')) // 'oops'\n * getErrorMessage('plain string') // 'plain string'\n * ```\n */\nexport function getErrorMessage(value: unknown): string {\n return value instanceof Error ? value.message : String(value)\n}\n\n/**\n * Extracts the `.cause` of an `Error` as an `Error`, or `undefined` when absent or not an `Error`.\n *\n * @example\n * ```ts\n * const cause = toCause(buildError) // Error | undefined\n * ```\n */\nexport function toCause(error: Error): Error | undefined {\n return error.cause instanceof Error ? error.cause : undefined\n}\n","import { EventEmitter as NodeEventEmitter } from 'node:events'\nimport { toError } from './errors.ts'\n\n/**\n * A function that can be registered as an event listener, synchronous or async.\n */\ntype AsyncListener<TArgs extends unknown[]> = (...args: TArgs) => void | Promise<void>\n\n/**\n * Typed `EventEmitter` that awaits all async listeners before resolving.\n * Wraps Node's `EventEmitter` with full TypeScript event-map inference.\n *\n * @example\n * ```ts\n * const emitter = new AsyncEventEmitter<{ build: [name: string] }>()\n * emitter.on('build', async (name) => { console.log(name) })\n * await emitter.emit('build', 'petstore') // all listeners awaited\n * ```\n */\nexport class AsyncEventEmitter<TEvents extends { [K in keyof TEvents]: unknown[] }> {\n /**\n * Maximum number of listeners per event before Node emits a memory-leak warning.\n * @default 10\n */\n constructor(maxListener = 10) {\n this.#emitter.setMaxListeners(maxListener)\n }\n\n #emitter = new NodeEventEmitter()\n\n /**\n * Emits `eventName` and awaits all registered listeners sequentially.\n * Throws if any listener rejects, wrapping the cause with the event name and serialized arguments.\n *\n * @example\n * ```ts\n * await emitter.emit('build', 'petstore')\n * ```\n */\n async emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArgs: TEvents[TEventName]): Promise<void> {\n const listeners = this.#emitter.listeners(eventName) as Array<AsyncListener<TEvents[TEventName]>>\n\n if (listeners.length === 0) {\n return\n }\n\n for (const listener of listeners) {\n try {\n await listener(...eventArgs)\n } catch (err) {\n let serializedArgs: string\n try {\n serializedArgs = JSON.stringify(eventArgs)\n } catch {\n serializedArgs = String(eventArgs)\n }\n throw new Error(`Error in async listener for \"${eventName}\" with eventArgs ${serializedArgs}`, { cause: toError(err) })\n }\n }\n }\n\n /**\n * Registers a persistent listener for `eventName`.\n *\n * @example\n * ```ts\n * emitter.on('build', async (name) => { console.log(name) })\n * ```\n */\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: AsyncListener<TEvents[TEventName]>): void {\n this.#emitter.on(eventName, handler as AsyncListener<unknown[]>)\n }\n\n /**\n * Registers a one-shot listener that removes itself after the first invocation.\n *\n * @example\n * ```ts\n * emitter.onOnce('build', async (name) => { console.log(name) })\n * ```\n */\n onOnce<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: AsyncListener<TEvents[TEventName]>): void {\n const wrapper: AsyncListener<TEvents[TEventName]> = (...args) => {\n this.off(eventName, wrapper)\n return handler(...args)\n }\n this.on(eventName, wrapper)\n }\n\n /**\n * Removes a previously registered listener.\n *\n * @example\n * ```ts\n * emitter.off('build', handler)\n * ```\n */\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: AsyncListener<TEvents[TEventName]>): void {\n this.#emitter.off(eventName, handler as AsyncListener<unknown[]>)\n }\n\n /**\n * Returns the number of listeners registered for `eventName`.\n *\n * @example\n * ```ts\n * emitter.on('build', handler)\n * emitter.listenerCount('build') // 1\n * ```\n */\n listenerCount<TEventName extends keyof TEvents & string>(eventName: TEventName): number {\n return this.#emitter.listenerCount(eventName)\n }\n\n /**\n * Removes all listeners from every event channel.\n *\n * @example\n * ```ts\n * emitter.removeAll()\n * ```\n */\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","","import process from 'node:process'\nimport { AsyncEventEmitter } from '@internals/utils'\nimport { adapterOas } from '@kubb/adapter-oas'\nimport { type Config, createKubb, type KubbHooks } from '@kubb/core'\nimport { middlewareBarrel, middlewareBarrelName } from '@kubb/middleware-barrel'\nimport { parserTs } from '@kubb/parser-ts'\nimport type { UnpluginFactory } from 'unplugin'\nimport { version as unpluginVersion } from '../package.json'\nimport type { Options } from './types.ts'\n\ntype RollupContext = {\n info?: (message: string) => void\n warn?: (message: string) => void\n error?: (message: string) => void\n}\n\nexport const unpluginFactory: UnpluginFactory<Options | undefined> = (options, meta) => {\n const name = 'unplugin-kubb' as const\n const hooks = new AsyncEventEmitter<KubbHooks>()\n const isVite = meta.framework === 'vite'\n const hrStart = process.hrtime()\n\n async function runBuild(ctx: RollupContext) {\n if (!options?.config) {\n if (ctx.error) {\n ctx.error?.(`[${name}] Config is not set`)\n } else {\n console.error(`[${name}] Config is not set`)\n }\n return\n }\n\n const middleware = options.config.middleware?.length ? options.config.middleware : [middlewareBarrel()]\n const hasBarrelMiddleware = middleware.some((m) => m.name === middlewareBarrelName)\n const output = { ...options.config.output }\n if (hasBarrelMiddleware && output.barrel === undefined) {\n output.barrel = { type: 'named' }\n }\n if (output.format === undefined) {\n output.format = false\n }\n if (output.lint === undefined) {\n output.lint = false\n }\n\n const config = {\n ...options.config,\n adapter: options.config.adapter ?? adapterOas(),\n parsers: options.config.parsers?.length ? options.config.parsers : [parserTs],\n middleware,\n output,\n }\n\n hooks.on('kubb:lifecycle:start', ({ version }) => {\n console.log(`Kubb Unplugin ${version} 🧩`)\n })\n\n hooks.on('kubb:error', ({ error }) => {\n console.error(`✗ ${error?.message || 'failed'}`)\n })\n\n hooks.on('kubb:warn', ({ message }) => {\n console.warn(`⚠ ${message}`)\n })\n\n hooks.on('kubb:info', ({ message }) => {\n console.info(`ℹ ${message}`)\n })\n\n hooks.on('kubb:success', ({ message }) => {\n console.log(`✓ ${message}`)\n })\n\n hooks.on('kubb:plugin:end', ({ plugin, duration }) => {\n const durationStr = duration >= 1000 ? `${(duration / 1000).toFixed(2)}s` : `${duration}ms`\n\n console.log(`✓ ${plugin.name} completed in ${durationStr}`)\n })\n\n hooks.on('kubb:files:processing:end', () => {\n const text = '✓ Files written successfully'\n\n console.log(text)\n })\n\n hooks.on('kubb:generation:end', ({ config }) => {\n console.log(config.name ? `✓ Generation completed for ${config.name}` : '✓ Generation completed')\n })\n\n hooks.on('kubb:generation:summary', ({ config, status, failedPlugins }) => {\n const pluginsCount = config.plugins.length\n const successCount = pluginsCount - failedPlugins.size\n\n console.log(\n status === 'success'\n ? `Kubb Summary: ✓ ${`${successCount} successful`}, ${pluginsCount} total`\n : `Kubb Summary: ✓ ${`${successCount} successful`}, ✗ ${`${failedPlugins.size} failed`}, ${pluginsCount} total`,\n )\n })\n\n await hooks.emit('kubb:lifecycle:start', { version: unpluginVersion })\n\n const { root: _root, ...userConfig } = config as Config\n\n await hooks.emit('kubb:generation:start', { config: config as Config })\n\n const { error, failedPlugins, pluginTimings, files, sources } = await createKubb(\n {\n root: process.cwd(),\n ...userConfig,\n output: {\n write: true,\n ...userConfig.output,\n },\n },\n { hooks },\n ).safeBuild()\n\n const hasFailures = failedPlugins.size > 0 || error\n if (hasFailures) {\n // Collect all errors from failed plugins and general error\n const allErrors: Error[] = [\n error,\n ...Array.from(failedPlugins)\n .filter((it) => it.error)\n .map((it) => it.error),\n ].filter(Boolean)\n\n allErrors.forEach((err) => {\n hooks.emit('kubb:error', { error: err })\n })\n }\n\n await hooks.emit('kubb:generation:end', { config: config as Config, files, sources })\n await hooks.emit('kubb:generation:summary', {\n config: config as Config,\n failedPlugins,\n filesCreated: files.length,\n status: failedPlugins.size > 0 || error ? 'failed' : 'success',\n hrStart,\n pluginTimings,\n })\n\n await hooks.emit('kubb:lifecycle:end')\n }\n\n return {\n name,\n enforce: 'pre',\n apply: isVite ? 'build' : undefined,\n async buildStart() {\n await runBuild(this as unknown as RollupContext)\n },\n\n vite: {},\n }\n}\n"],"mappings":"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"}
|