@kubb/plugin-msw 5.0.0-beta.3 → 5.0.0-beta.30

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.
Files changed (38) hide show
  1. package/README.md +26 -5
  2. package/dist/{components-vO0FIb2i.js → components--7xwlHZU.js} +52 -59
  3. package/dist/components--7xwlHZU.js.map +1 -0
  4. package/dist/{components-CLQ77DVn.cjs → components-CHyTtokd.cjs} +55 -68
  5. package/dist/components-CHyTtokd.cjs.map +1 -0
  6. package/dist/components.cjs +1 -1
  7. package/dist/components.d.ts +5 -5
  8. package/dist/components.js +1 -1
  9. package/dist/{generators-BPJCs1x1.js → generators-BcGCyGBt.js} +61 -32
  10. package/dist/generators-BcGCyGBt.js.map +1 -0
  11. package/dist/{generators-CrmMwWE4.cjs → generators-DzDKzDFe.cjs} +60 -31
  12. package/dist/generators-DzDKzDFe.cjs.map +1 -0
  13. package/dist/generators.cjs +1 -1
  14. package/dist/generators.d.ts +13 -1
  15. package/dist/generators.js +1 -1
  16. package/dist/index.cjs +54 -9
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.ts +31 -1
  19. package/dist/index.js +54 -9
  20. package/dist/index.js.map +1 -1
  21. package/dist/types-CLAiv8qc.d.ts +103 -0
  22. package/extension.yaml +680 -0
  23. package/package.json +11 -14
  24. package/src/components/Handlers.tsx +1 -1
  25. package/src/components/Mock.tsx +5 -4
  26. package/src/components/MockWithFaker.tsx +5 -4
  27. package/src/components/Response.tsx +1 -1
  28. package/src/generators/handlersGenerator.tsx +18 -12
  29. package/src/generators/mswGenerator.tsx +27 -17
  30. package/src/plugin.ts +32 -4
  31. package/src/resolvers/resolverMsw.ts +19 -3
  32. package/src/types.ts +35 -21
  33. package/src/utils.ts +16 -60
  34. package/dist/components-CLQ77DVn.cjs.map +0 -1
  35. package/dist/components-vO0FIb2i.js.map +0 -1
  36. package/dist/generators-BPJCs1x1.js.map +0 -1
  37. package/dist/generators-CrmMwWE4.cjs.map +0 -1
  38. package/dist/types-Dxu0KMQ4.d.ts +0 -89
package/dist/index.cjs CHANGED
@@ -2,18 +2,25 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_components = require("./components-CLQ77DVn.cjs");
6
- const require_generators = require("./generators-CrmMwWE4.cjs");
5
+ const require_components = require("./components-CHyTtokd.cjs");
6
+ const require_generators = require("./generators-DzDKzDFe.cjs");
7
7
  let _kubb_core = require("@kubb/core");
8
8
  let _kubb_plugin_faker = require("@kubb/plugin-faker");
9
9
  let _kubb_plugin_ts = require("@kubb/plugin-ts");
10
10
  //#region src/resolvers/resolverMsw.ts
11
11
  /**
12
- * Naming convention resolver for MSW plugin.
12
+ * Default resolver used by `@kubb/plugin-msw`. Decides the names and file
13
+ * paths for every generated MSW handler. Function names get a `Handler`
14
+ * suffix; the aggregate export is always `handlers`.
13
15
  *
14
- * Provides default naming helpers using camelCase with a `handler` suffix.
16
+ * @example Resolve a handler name
17
+ * ```ts
18
+ * import { resolverMsw } from '@kubb/plugin-msw'
19
+ *
20
+ * resolverMsw.resolveName('addPet') // 'addPetHandler'
21
+ * ```
15
22
  */
16
- const resolverMsw = (0, _kubb_core.defineResolver)((_ctx) => ({
23
+ const resolverMsw = (0, _kubb_core.defineResolver)(() => ({
17
24
  name: "default",
18
25
  pluginName: "plugin-msw",
19
26
  default(name, type) {
@@ -21,27 +28,66 @@ const resolverMsw = (0, _kubb_core.defineResolver)((_ctx) => ({
21
28
  },
22
29
  resolveName(name) {
23
30
  return require_components.camelCase(name, { suffix: "handler" });
31
+ },
32
+ resolvePathName(name, type) {
33
+ return this.default(name, type);
34
+ },
35
+ resolveHandlerName(node) {
36
+ return this.resolveName(node.operationId);
37
+ },
38
+ resolveHandlersName() {
39
+ return "handlers";
24
40
  }
25
41
  }));
26
42
  //#endregion
27
43
  //#region src/plugin.ts
44
+ /**
45
+ * Canonical plugin name for `@kubb/plugin-msw`. Used for driver lookups and
46
+ * cross-plugin dependency references.
47
+ */
28
48
  const pluginMswName = "plugin-msw";
49
+ /**
50
+ * Generates MSW request handlers from an OpenAPI spec. Drop them into your
51
+ * test setup or service worker to mock the API end-to-end. Request path,
52
+ * method, status, and response body all stay in sync with the spec. Combine
53
+ * with `@kubb/plugin-faker` (via `parser: 'faker'`) to seed handlers with
54
+ * realistic data.
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * import { defineConfig } from 'kubb'
59
+ * import { pluginTs } from '@kubb/plugin-ts'
60
+ * import { pluginMsw } from '@kubb/plugin-msw'
61
+ *
62
+ * export default defineConfig({
63
+ * input: { path: './petStore.yaml' },
64
+ * output: { path: './src/gen' },
65
+ * plugins: [
66
+ * pluginTs(),
67
+ * pluginMsw({
68
+ * output: { path: './handlers' },
69
+ * handlers: true,
70
+ * }),
71
+ * ],
72
+ * })
73
+ * ```
74
+ */
29
75
  const pluginMsw = (0, _kubb_core.definePlugin)((options) => {
30
76
  const { output = {
31
77
  path: "handlers",
32
78
  barrelType: "named"
33
- }, group, exclude = [], include, override = [], transformers = {}, handlers = false, parser = "data", baseURL, resolver: userResolver, transformer: userTransformer, generators: userGenerators = [] } = options;
79
+ }, group, exclude = [], include, override = [], handlers = false, parser = "data", baseURL, resolver: userResolver, transformer: userTransformer, generators: userGenerators = [] } = options;
34
80
  const groupConfig = group ? {
35
81
  ...group,
36
82
  name: group.name ? group.name : (ctx) => {
37
83
  if (group.type === "path") return `${ctx.group.split("/")[1]}`;
38
84
  return `${require_components.camelCase(ctx.group)}Controller`;
39
85
  }
40
- } : void 0;
86
+ } : null;
41
87
  return {
42
88
  name: pluginMswName,
43
89
  options,
44
- dependencies: [_kubb_plugin_ts.pluginTsName, parser === "faker" ? _kubb_plugin_faker.pluginFakerName : void 0].filter(Boolean),
90
+ dependencies: [_kubb_plugin_ts.pluginTsName, parser === "faker" ? _kubb_plugin_faker.pluginFakerName : null].filter((dependency) => Boolean(dependency)),
45
91
  hooks: { "kubb:plugin:setup"(ctx) {
46
92
  const resolver = userResolver ? {
47
93
  ...resolverMsw,
@@ -56,7 +102,6 @@ const pluginMsw = (0, _kubb_core.definePlugin)((options) => {
56
102
  include,
57
103
  override,
58
104
  handlers,
59
- transformers,
60
105
  resolver
61
106
  });
62
107
  ctx.setResolver(resolver);
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["camelCase","camelCase","pluginTsName","pluginFakerName","mswGenerator","handlersGenerator"],"sources":["../src/resolvers/resolverMsw.ts","../src/plugin.ts"],"sourcesContent":["import { camelCase } from '@internals/utils'\nimport { defineResolver } from '@kubb/core'\nimport type { PluginMsw } from '../types.ts'\n\n/**\n * Naming convention resolver for MSW plugin.\n *\n * Provides default naming helpers using camelCase with a `handler` suffix.\n */\nexport const resolverMsw = defineResolver<PluginMsw>((_ctx) => ({\n name: 'default',\n pluginName: 'plugin-msw',\n default(name, type) {\n return camelCase(name, { isFile: type === 'file' })\n },\n resolveName(name) {\n return camelCase(name, { suffix: 'handler' })\n },\n}))\n","import { camelCase } from '@internals/utils'\nimport { definePlugin, type Group } from '@kubb/core'\nimport { pluginFakerName } from '@kubb/plugin-faker'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { handlersGenerator, mswGenerator } from './generators'\nimport { resolverMsw } from './resolvers/resolverMsw.ts'\nimport type { PluginMsw } from './types.ts'\n\nexport const pluginMswName = 'plugin-msw' satisfies PluginMsw['name']\n\nexport const pluginMsw = definePlugin<PluginMsw>((options) => {\n const {\n output = { path: 'handlers', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n transformers = {},\n handlers = false,\n parser = 'data',\n baseURL,\n resolver: userResolver,\n transformer: userTransformer,\n generators: userGenerators = [],\n } = options\n\n const groupConfig = group\n ? ({\n ...group,\n name: group.name\n ? group.name\n : (ctx: { group: string }) => {\n if (group.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n },\n } satisfies Group)\n : undefined\n\n return {\n name: pluginMswName,\n options,\n dependencies: [pluginTsName, parser === 'faker' ? pluginFakerName : undefined].filter(Boolean),\n hooks: {\n 'kubb:plugin:setup'(ctx) {\n const resolver = userResolver ? { ...resolverMsw, ...userResolver } : resolverMsw\n\n ctx.setOptions({\n output,\n parser,\n baseURL,\n group: groupConfig,\n exclude,\n include,\n override,\n handlers,\n transformers,\n resolver,\n })\n ctx.setResolver(resolver)\n if (userTransformer) {\n ctx.setTransformer(userTransformer)\n }\n\n ctx.addGenerator(mswGenerator)\n if (handlers) {\n ctx.addGenerator(handlersGenerator)\n }\n for (const gen of userGenerators) {\n ctx.addGenerator(gen)\n }\n },\n },\n }\n})\n\nexport default pluginMsw\n"],"mappings":";;;;;;;;;;;;;;;AASA,MAAa,eAAA,GAAA,WAAA,iBAAyC,UAAU;CAC9D,MAAM;CACN,YAAY;CACZ,QAAQ,MAAM,MAAM;AAClB,SAAOA,mBAAAA,UAAU,MAAM,EAAE,QAAQ,SAAS,QAAQ,CAAC;;CAErD,YAAY,MAAM;AAChB,SAAOA,mBAAAA,UAAU,MAAM,EAAE,QAAQ,WAAW,CAAC;;CAEhD,EAAE;;;ACVH,MAAa,gBAAgB;AAE7B,MAAa,aAAA,GAAA,WAAA,eAAqC,YAAY;CAC5D,MAAM,EACJ,SAAS;EAAE,MAAM;EAAY,YAAY;EAAS,EAClD,OACA,UAAU,EAAE,EACZ,SACA,WAAW,EAAE,EACb,eAAe,EAAE,EACjB,WAAW,OACX,SAAS,QACT,SACA,UAAU,cACV,aAAa,iBACb,YAAY,iBAAiB,EAAE,KAC7B;CAEJ,MAAM,cAAc,QACf;EACC,GAAG;EACH,MAAM,MAAM,OACR,MAAM,QACL,QAA2B;AAC1B,OAAI,MAAM,SAAS,OACjB,QAAO,GAAG,IAAI,MAAM,MAAM,IAAI,CAAC;AAEjC,UAAO,GAAGC,mBAAAA,UAAU,IAAI,MAAM,CAAC;;EAEtC,GACD,KAAA;AAEJ,QAAO;EACL,MAAM;EACN;EACA,cAAc,CAACC,gBAAAA,cAAc,WAAW,UAAUC,mBAAAA,kBAAkB,KAAA,EAAU,CAAC,OAAO,QAAQ;EAC9F,OAAO,EACL,oBAAoB,KAAK;GACvB,MAAM,WAAW,eAAe;IAAE,GAAG;IAAa,GAAG;IAAc,GAAG;AAEtE,OAAI,WAAW;IACb;IACA;IACA;IACA,OAAO;IACP;IACA;IACA;IACA;IACA;IACA;IACD,CAAC;AACF,OAAI,YAAY,SAAS;AACzB,OAAI,gBACF,KAAI,eAAe,gBAAgB;AAGrC,OAAI,aAAaC,mBAAAA,aAAa;AAC9B,OAAI,SACF,KAAI,aAAaC,mBAAAA,kBAAkB;AAErC,QAAK,MAAM,OAAO,eAChB,KAAI,aAAa,IAAI;KAG1B;EACF;EACD"}
1
+ {"version":3,"file":"index.cjs","names":["camelCase","camelCase","pluginTsName","pluginFakerName","mswGenerator","handlersGenerator"],"sources":["../src/resolvers/resolverMsw.ts","../src/plugin.ts"],"sourcesContent":["import { camelCase } from '@internals/utils'\nimport { defineResolver } from '@kubb/core'\nimport type { PluginMsw } from '../types.ts'\n\n/**\n * Default resolver used by `@kubb/plugin-msw`. Decides the names and file\n * paths for every generated MSW handler. Function names get a `Handler`\n * suffix; the aggregate export is always `handlers`.\n *\n * @example Resolve a handler name\n * ```ts\n * import { resolverMsw } from '@kubb/plugin-msw'\n *\n * resolverMsw.resolveName('addPet') // 'addPetHandler'\n * ```\n */\nexport const resolverMsw = defineResolver<PluginMsw>(() => ({\n name: 'default',\n pluginName: 'plugin-msw',\n default(name, type) {\n return camelCase(name, { isFile: type === 'file' })\n },\n resolveName(name) {\n return camelCase(name, { suffix: 'handler' })\n },\n resolvePathName(name, type) {\n return this.default(name, type)\n },\n resolveHandlerName(node) {\n return this.resolveName(node.operationId)\n },\n resolveHandlersName() {\n return 'handlers'\n },\n}))\n","import { camelCase } from '@internals/utils'\nimport { definePlugin, type Group } from '@kubb/core'\nimport { pluginFakerName } from '@kubb/plugin-faker'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { handlersGenerator, mswGenerator } from './generators'\nimport { resolverMsw } from './resolvers/resolverMsw.ts'\nimport type { PluginMsw } from './types.ts'\n\n/**\n * Canonical plugin name for `@kubb/plugin-msw`. Used for driver lookups and\n * cross-plugin dependency references.\n */\nexport const pluginMswName = 'plugin-msw' satisfies PluginMsw['name']\n\n/**\n * Generates MSW request handlers from an OpenAPI spec. Drop them into your\n * test setup or service worker to mock the API end-to-end. Request path,\n * method, status, and response body all stay in sync with the spec. Combine\n * with `@kubb/plugin-faker` (via `parser: 'faker'`) to seed handlers with\n * realistic data.\n *\n * @example\n * ```ts\n * import { defineConfig } from 'kubb'\n * import { pluginTs } from '@kubb/plugin-ts'\n * import { pluginMsw } from '@kubb/plugin-msw'\n *\n * export default defineConfig({\n * input: { path: './petStore.yaml' },\n * output: { path: './src/gen' },\n * plugins: [\n * pluginTs(),\n * pluginMsw({\n * output: { path: './handlers' },\n * handlers: true,\n * }),\n * ],\n * })\n * ```\n */\nexport const pluginMsw = definePlugin<PluginMsw>((options) => {\n const {\n output = { path: 'handlers', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n handlers = false,\n parser = 'data',\n baseURL,\n resolver: userResolver,\n transformer: userTransformer,\n generators: userGenerators = [],\n } = options\n\n const groupConfig = group\n ? ({\n ...group,\n name: group.name\n ? group.name\n : (ctx: { group: string }) => {\n if (group.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n },\n } satisfies Group)\n : null\n\n return {\n name: pluginMswName,\n options,\n dependencies: [pluginTsName, parser === 'faker' ? pluginFakerName : null].filter((dependency): dependency is string => Boolean(dependency)),\n hooks: {\n 'kubb:plugin:setup'(ctx) {\n const resolver = userResolver ? { ...resolverMsw, ...userResolver } : resolverMsw\n\n ctx.setOptions({\n output,\n parser,\n baseURL,\n group: groupConfig,\n exclude,\n include,\n override,\n handlers,\n resolver,\n })\n ctx.setResolver(resolver)\n if (userTransformer) {\n ctx.setTransformer(userTransformer)\n }\n\n ctx.addGenerator(mswGenerator)\n if (handlers) {\n ctx.addGenerator(handlersGenerator)\n }\n for (const gen of userGenerators) {\n ctx.addGenerator(gen)\n }\n },\n },\n }\n})\n\nexport default pluginMsw\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAa,eAAA,GAAA,WAAA,uBAA+C;CAC1D,MAAM;CACN,YAAY;CACZ,QAAQ,MAAM,MAAM;EAClB,OAAOA,mBAAAA,UAAU,MAAM,EAAE,QAAQ,SAAS,QAAQ,CAAC;;CAErD,YAAY,MAAM;EAChB,OAAOA,mBAAAA,UAAU,MAAM,EAAE,QAAQ,WAAW,CAAC;;CAE/C,gBAAgB,MAAM,MAAM;EAC1B,OAAO,KAAK,QAAQ,MAAM,KAAK;;CAEjC,mBAAmB,MAAM;EACvB,OAAO,KAAK,YAAY,KAAK,YAAY;;CAE3C,sBAAsB;EACpB,OAAO;;CAEV,EAAE;;;;;;;ACtBH,MAAa,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B7B,MAAa,aAAA,GAAA,WAAA,eAAqC,YAAY;CAC5D,MAAM,EACJ,SAAS;EAAE,MAAM;EAAY,YAAY;EAAS,EAClD,OACA,UAAU,EAAE,EACZ,SACA,WAAW,EAAE,EACb,WAAW,OACX,SAAS,QACT,SACA,UAAU,cACV,aAAa,iBACb,YAAY,iBAAiB,EAAE,KAC7B;CAEJ,MAAM,cAAc,QACf;EACC,GAAG;EACH,MAAM,MAAM,OACR,MAAM,QACL,QAA2B;GAC1B,IAAI,MAAM,SAAS,QACjB,OAAO,GAAG,IAAI,MAAM,MAAM,IAAI,CAAC;GAEjC,OAAO,GAAGC,mBAAAA,UAAU,IAAI,MAAM,CAAC;;EAEtC,GACD;CAEJ,OAAO;EACL,MAAM;EACN;EACA,cAAc,CAACC,gBAAAA,cAAc,WAAW,UAAUC,mBAAAA,kBAAkB,KAAK,CAAC,QAAQ,eAAqC,QAAQ,WAAW,CAAC;EAC3I,OAAO,EACL,oBAAoB,KAAK;GACvB,MAAM,WAAW,eAAe;IAAE,GAAG;IAAa,GAAG;IAAc,GAAG;GAEtE,IAAI,WAAW;IACb;IACA;IACA;IACA,OAAO;IACP;IACA;IACA;IACA;IACA;IACD,CAAC;GACF,IAAI,YAAY,SAAS;GACzB,IAAI,iBACF,IAAI,eAAe,gBAAgB;GAGrC,IAAI,aAAaC,mBAAAA,aAAa;GAC9B,IAAI,UACF,IAAI,aAAaC,mBAAAA,kBAAkB;GAErC,KAAK,MAAM,OAAO,gBAChB,IAAI,aAAa,IAAI;KAG1B;EACF;EACD"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,39 @@
1
1
  import { t as __name } from "./chunk--u3MIqq1.js";
2
- import { n as PluginMsw, t as Options } from "./types-Dxu0KMQ4.js";
2
+ import { n as PluginMsw, t as Options } from "./types-CLAiv8qc.js";
3
3
  import * as _$_kubb_core0 from "@kubb/core";
4
4
 
5
5
  //#region src/plugin.d.ts
6
+ /**
7
+ * Canonical plugin name for `@kubb/plugin-msw`. Used for driver lookups and
8
+ * cross-plugin dependency references.
9
+ */
6
10
  declare const pluginMswName = "plugin-msw";
11
+ /**
12
+ * Generates MSW request handlers from an OpenAPI spec. Drop them into your
13
+ * test setup or service worker to mock the API end-to-end. Request path,
14
+ * method, status, and response body all stay in sync with the spec. Combine
15
+ * with `@kubb/plugin-faker` (via `parser: 'faker'`) to seed handlers with
16
+ * realistic data.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * import { defineConfig } from 'kubb'
21
+ * import { pluginTs } from '@kubb/plugin-ts'
22
+ * import { pluginMsw } from '@kubb/plugin-msw'
23
+ *
24
+ * export default defineConfig({
25
+ * input: { path: './petStore.yaml' },
26
+ * output: { path: './src/gen' },
27
+ * plugins: [
28
+ * pluginTs(),
29
+ * pluginMsw({
30
+ * output: { path: './handlers' },
31
+ * handlers: true,
32
+ * }),
33
+ * ],
34
+ * })
35
+ * ```
36
+ */
7
37
  declare const pluginMsw: (options?: Options | undefined) => _$_kubb_core0.Plugin<PluginMsw>;
8
38
  //#endregion
9
39
  export { type PluginMsw, pluginMsw as default, pluginMsw, pluginMswName };
package/dist/index.js CHANGED
@@ -1,16 +1,23 @@
1
1
  import "./chunk--u3MIqq1.js";
2
- import { l as camelCase } from "./components-vO0FIb2i.js";
3
- import { n as handlersGenerator, t as mswGenerator } from "./generators-BPJCs1x1.js";
2
+ import { c as camelCase } from "./components--7xwlHZU.js";
3
+ import { n as handlersGenerator, t as mswGenerator } from "./generators-BcGCyGBt.js";
4
4
  import { definePlugin, defineResolver } from "@kubb/core";
5
5
  import { pluginFakerName } from "@kubb/plugin-faker";
6
6
  import { pluginTsName } from "@kubb/plugin-ts";
7
7
  //#region src/resolvers/resolverMsw.ts
8
8
  /**
9
- * Naming convention resolver for MSW plugin.
9
+ * Default resolver used by `@kubb/plugin-msw`. Decides the names and file
10
+ * paths for every generated MSW handler. Function names get a `Handler`
11
+ * suffix; the aggregate export is always `handlers`.
10
12
  *
11
- * Provides default naming helpers using camelCase with a `handler` suffix.
13
+ * @example Resolve a handler name
14
+ * ```ts
15
+ * import { resolverMsw } from '@kubb/plugin-msw'
16
+ *
17
+ * resolverMsw.resolveName('addPet') // 'addPetHandler'
18
+ * ```
12
19
  */
13
- const resolverMsw = defineResolver((_ctx) => ({
20
+ const resolverMsw = defineResolver(() => ({
14
21
  name: "default",
15
22
  pluginName: "plugin-msw",
16
23
  default(name, type) {
@@ -18,27 +25,66 @@ const resolverMsw = defineResolver((_ctx) => ({
18
25
  },
19
26
  resolveName(name) {
20
27
  return camelCase(name, { suffix: "handler" });
28
+ },
29
+ resolvePathName(name, type) {
30
+ return this.default(name, type);
31
+ },
32
+ resolveHandlerName(node) {
33
+ return this.resolveName(node.operationId);
34
+ },
35
+ resolveHandlersName() {
36
+ return "handlers";
21
37
  }
22
38
  }));
23
39
  //#endregion
24
40
  //#region src/plugin.ts
41
+ /**
42
+ * Canonical plugin name for `@kubb/plugin-msw`. Used for driver lookups and
43
+ * cross-plugin dependency references.
44
+ */
25
45
  const pluginMswName = "plugin-msw";
46
+ /**
47
+ * Generates MSW request handlers from an OpenAPI spec. Drop them into your
48
+ * test setup or service worker to mock the API end-to-end. Request path,
49
+ * method, status, and response body all stay in sync with the spec. Combine
50
+ * with `@kubb/plugin-faker` (via `parser: 'faker'`) to seed handlers with
51
+ * realistic data.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * import { defineConfig } from 'kubb'
56
+ * import { pluginTs } from '@kubb/plugin-ts'
57
+ * import { pluginMsw } from '@kubb/plugin-msw'
58
+ *
59
+ * export default defineConfig({
60
+ * input: { path: './petStore.yaml' },
61
+ * output: { path: './src/gen' },
62
+ * plugins: [
63
+ * pluginTs(),
64
+ * pluginMsw({
65
+ * output: { path: './handlers' },
66
+ * handlers: true,
67
+ * }),
68
+ * ],
69
+ * })
70
+ * ```
71
+ */
26
72
  const pluginMsw = definePlugin((options) => {
27
73
  const { output = {
28
74
  path: "handlers",
29
75
  barrelType: "named"
30
- }, group, exclude = [], include, override = [], transformers = {}, handlers = false, parser = "data", baseURL, resolver: userResolver, transformer: userTransformer, generators: userGenerators = [] } = options;
76
+ }, group, exclude = [], include, override = [], handlers = false, parser = "data", baseURL, resolver: userResolver, transformer: userTransformer, generators: userGenerators = [] } = options;
31
77
  const groupConfig = group ? {
32
78
  ...group,
33
79
  name: group.name ? group.name : (ctx) => {
34
80
  if (group.type === "path") return `${ctx.group.split("/")[1]}`;
35
81
  return `${camelCase(ctx.group)}Controller`;
36
82
  }
37
- } : void 0;
83
+ } : null;
38
84
  return {
39
85
  name: pluginMswName,
40
86
  options,
41
- dependencies: [pluginTsName, parser === "faker" ? pluginFakerName : void 0].filter(Boolean),
87
+ dependencies: [pluginTsName, parser === "faker" ? pluginFakerName : null].filter((dependency) => Boolean(dependency)),
42
88
  hooks: { "kubb:plugin:setup"(ctx) {
43
89
  const resolver = userResolver ? {
44
90
  ...resolverMsw,
@@ -53,7 +99,6 @@ const pluginMsw = definePlugin((options) => {
53
99
  include,
54
100
  override,
55
101
  handlers,
56
- transformers,
57
102
  resolver
58
103
  });
59
104
  ctx.setResolver(resolver);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/resolvers/resolverMsw.ts","../src/plugin.ts"],"sourcesContent":["import { camelCase } from '@internals/utils'\nimport { defineResolver } from '@kubb/core'\nimport type { PluginMsw } from '../types.ts'\n\n/**\n * Naming convention resolver for MSW plugin.\n *\n * Provides default naming helpers using camelCase with a `handler` suffix.\n */\nexport const resolverMsw = defineResolver<PluginMsw>((_ctx) => ({\n name: 'default',\n pluginName: 'plugin-msw',\n default(name, type) {\n return camelCase(name, { isFile: type === 'file' })\n },\n resolveName(name) {\n return camelCase(name, { suffix: 'handler' })\n },\n}))\n","import { camelCase } from '@internals/utils'\nimport { definePlugin, type Group } from '@kubb/core'\nimport { pluginFakerName } from '@kubb/plugin-faker'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { handlersGenerator, mswGenerator } from './generators'\nimport { resolverMsw } from './resolvers/resolverMsw.ts'\nimport type { PluginMsw } from './types.ts'\n\nexport const pluginMswName = 'plugin-msw' satisfies PluginMsw['name']\n\nexport const pluginMsw = definePlugin<PluginMsw>((options) => {\n const {\n output = { path: 'handlers', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n transformers = {},\n handlers = false,\n parser = 'data',\n baseURL,\n resolver: userResolver,\n transformer: userTransformer,\n generators: userGenerators = [],\n } = options\n\n const groupConfig = group\n ? ({\n ...group,\n name: group.name\n ? group.name\n : (ctx: { group: string }) => {\n if (group.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n },\n } satisfies Group)\n : undefined\n\n return {\n name: pluginMswName,\n options,\n dependencies: [pluginTsName, parser === 'faker' ? pluginFakerName : undefined].filter(Boolean),\n hooks: {\n 'kubb:plugin:setup'(ctx) {\n const resolver = userResolver ? { ...resolverMsw, ...userResolver } : resolverMsw\n\n ctx.setOptions({\n output,\n parser,\n baseURL,\n group: groupConfig,\n exclude,\n include,\n override,\n handlers,\n transformers,\n resolver,\n })\n ctx.setResolver(resolver)\n if (userTransformer) {\n ctx.setTransformer(userTransformer)\n }\n\n ctx.addGenerator(mswGenerator)\n if (handlers) {\n ctx.addGenerator(handlersGenerator)\n }\n for (const gen of userGenerators) {\n ctx.addGenerator(gen)\n }\n },\n },\n }\n})\n\nexport default pluginMsw\n"],"mappings":";;;;;;;;;;;;AASA,MAAa,cAAc,gBAA2B,UAAU;CAC9D,MAAM;CACN,YAAY;CACZ,QAAQ,MAAM,MAAM;AAClB,SAAO,UAAU,MAAM,EAAE,QAAQ,SAAS,QAAQ,CAAC;;CAErD,YAAY,MAAM;AAChB,SAAO,UAAU,MAAM,EAAE,QAAQ,WAAW,CAAC;;CAEhD,EAAE;;;ACVH,MAAa,gBAAgB;AAE7B,MAAa,YAAY,cAAyB,YAAY;CAC5D,MAAM,EACJ,SAAS;EAAE,MAAM;EAAY,YAAY;EAAS,EAClD,OACA,UAAU,EAAE,EACZ,SACA,WAAW,EAAE,EACb,eAAe,EAAE,EACjB,WAAW,OACX,SAAS,QACT,SACA,UAAU,cACV,aAAa,iBACb,YAAY,iBAAiB,EAAE,KAC7B;CAEJ,MAAM,cAAc,QACf;EACC,GAAG;EACH,MAAM,MAAM,OACR,MAAM,QACL,QAA2B;AAC1B,OAAI,MAAM,SAAS,OACjB,QAAO,GAAG,IAAI,MAAM,MAAM,IAAI,CAAC;AAEjC,UAAO,GAAG,UAAU,IAAI,MAAM,CAAC;;EAEtC,GACD,KAAA;AAEJ,QAAO;EACL,MAAM;EACN;EACA,cAAc,CAAC,cAAc,WAAW,UAAU,kBAAkB,KAAA,EAAU,CAAC,OAAO,QAAQ;EAC9F,OAAO,EACL,oBAAoB,KAAK;GACvB,MAAM,WAAW,eAAe;IAAE,GAAG;IAAa,GAAG;IAAc,GAAG;AAEtE,OAAI,WAAW;IACb;IACA;IACA;IACA,OAAO;IACP;IACA;IACA;IACA;IACA;IACA;IACD,CAAC;AACF,OAAI,YAAY,SAAS;AACzB,OAAI,gBACF,KAAI,eAAe,gBAAgB;AAGrC,OAAI,aAAa,aAAa;AAC9B,OAAI,SACF,KAAI,aAAa,kBAAkB;AAErC,QAAK,MAAM,OAAO,eAChB,KAAI,aAAa,IAAI;KAG1B;EACF;EACD"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/resolvers/resolverMsw.ts","../src/plugin.ts"],"sourcesContent":["import { camelCase } from '@internals/utils'\nimport { defineResolver } from '@kubb/core'\nimport type { PluginMsw } from '../types.ts'\n\n/**\n * Default resolver used by `@kubb/plugin-msw`. Decides the names and file\n * paths for every generated MSW handler. Function names get a `Handler`\n * suffix; the aggregate export is always `handlers`.\n *\n * @example Resolve a handler name\n * ```ts\n * import { resolverMsw } from '@kubb/plugin-msw'\n *\n * resolverMsw.resolveName('addPet') // 'addPetHandler'\n * ```\n */\nexport const resolverMsw = defineResolver<PluginMsw>(() => ({\n name: 'default',\n pluginName: 'plugin-msw',\n default(name, type) {\n return camelCase(name, { isFile: type === 'file' })\n },\n resolveName(name) {\n return camelCase(name, { suffix: 'handler' })\n },\n resolvePathName(name, type) {\n return this.default(name, type)\n },\n resolveHandlerName(node) {\n return this.resolveName(node.operationId)\n },\n resolveHandlersName() {\n return 'handlers'\n },\n}))\n","import { camelCase } from '@internals/utils'\nimport { definePlugin, type Group } from '@kubb/core'\nimport { pluginFakerName } from '@kubb/plugin-faker'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { handlersGenerator, mswGenerator } from './generators'\nimport { resolverMsw } from './resolvers/resolverMsw.ts'\nimport type { PluginMsw } from './types.ts'\n\n/**\n * Canonical plugin name for `@kubb/plugin-msw`. Used for driver lookups and\n * cross-plugin dependency references.\n */\nexport const pluginMswName = 'plugin-msw' satisfies PluginMsw['name']\n\n/**\n * Generates MSW request handlers from an OpenAPI spec. Drop them into your\n * test setup or service worker to mock the API end-to-end. Request path,\n * method, status, and response body all stay in sync with the spec. Combine\n * with `@kubb/plugin-faker` (via `parser: 'faker'`) to seed handlers with\n * realistic data.\n *\n * @example\n * ```ts\n * import { defineConfig } from 'kubb'\n * import { pluginTs } from '@kubb/plugin-ts'\n * import { pluginMsw } from '@kubb/plugin-msw'\n *\n * export default defineConfig({\n * input: { path: './petStore.yaml' },\n * output: { path: './src/gen' },\n * plugins: [\n * pluginTs(),\n * pluginMsw({\n * output: { path: './handlers' },\n * handlers: true,\n * }),\n * ],\n * })\n * ```\n */\nexport const pluginMsw = definePlugin<PluginMsw>((options) => {\n const {\n output = { path: 'handlers', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n handlers = false,\n parser = 'data',\n baseURL,\n resolver: userResolver,\n transformer: userTransformer,\n generators: userGenerators = [],\n } = options\n\n const groupConfig = group\n ? ({\n ...group,\n name: group.name\n ? group.name\n : (ctx: { group: string }) => {\n if (group.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n },\n } satisfies Group)\n : null\n\n return {\n name: pluginMswName,\n options,\n dependencies: [pluginTsName, parser === 'faker' ? pluginFakerName : null].filter((dependency): dependency is string => Boolean(dependency)),\n hooks: {\n 'kubb:plugin:setup'(ctx) {\n const resolver = userResolver ? { ...resolverMsw, ...userResolver } : resolverMsw\n\n ctx.setOptions({\n output,\n parser,\n baseURL,\n group: groupConfig,\n exclude,\n include,\n override,\n handlers,\n resolver,\n })\n ctx.setResolver(resolver)\n if (userTransformer) {\n ctx.setTransformer(userTransformer)\n }\n\n ctx.addGenerator(mswGenerator)\n if (handlers) {\n ctx.addGenerator(handlersGenerator)\n }\n for (const gen of userGenerators) {\n ctx.addGenerator(gen)\n }\n },\n },\n }\n})\n\nexport default pluginMsw\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAgBA,MAAa,cAAc,sBAAiC;CAC1D,MAAM;CACN,YAAY;CACZ,QAAQ,MAAM,MAAM;EAClB,OAAO,UAAU,MAAM,EAAE,QAAQ,SAAS,QAAQ,CAAC;;CAErD,YAAY,MAAM;EAChB,OAAO,UAAU,MAAM,EAAE,QAAQ,WAAW,CAAC;;CAE/C,gBAAgB,MAAM,MAAM;EAC1B,OAAO,KAAK,QAAQ,MAAM,KAAK;;CAEjC,mBAAmB,MAAM;EACvB,OAAO,KAAK,YAAY,KAAK,YAAY;;CAE3C,sBAAsB;EACpB,OAAO;;CAEV,EAAE;;;;;;;ACtBH,MAAa,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B7B,MAAa,YAAY,cAAyB,YAAY;CAC5D,MAAM,EACJ,SAAS;EAAE,MAAM;EAAY,YAAY;EAAS,EAClD,OACA,UAAU,EAAE,EACZ,SACA,WAAW,EAAE,EACb,WAAW,OACX,SAAS,QACT,SACA,UAAU,cACV,aAAa,iBACb,YAAY,iBAAiB,EAAE,KAC7B;CAEJ,MAAM,cAAc,QACf;EACC,GAAG;EACH,MAAM,MAAM,OACR,MAAM,QACL,QAA2B;GAC1B,IAAI,MAAM,SAAS,QACjB,OAAO,GAAG,IAAI,MAAM,MAAM,IAAI,CAAC;GAEjC,OAAO,GAAG,UAAU,IAAI,MAAM,CAAC;;EAEtC,GACD;CAEJ,OAAO;EACL,MAAM;EACN;EACA,cAAc,CAAC,cAAc,WAAW,UAAU,kBAAkB,KAAK,CAAC,QAAQ,eAAqC,QAAQ,WAAW,CAAC;EAC3I,OAAO,EACL,oBAAoB,KAAK;GACvB,MAAM,WAAW,eAAe;IAAE,GAAG;IAAa,GAAG;IAAc,GAAG;GAEtE,IAAI,WAAW;IACb;IACA;IACA;IACA,OAAO;IACP;IACA;IACA;IACA;IACA;IACD,CAAC;GACF,IAAI,YAAY,SAAS;GACzB,IAAI,iBACF,IAAI,eAAe,gBAAgB;GAGrC,IAAI,aAAa,aAAa;GAC9B,IAAI,UACF,IAAI,aAAa,kBAAkB;GAErC,KAAK,MAAM,OAAO,gBAChB,IAAI,aAAa,IAAI;KAG1B;EACF;EACD"}
@@ -0,0 +1,103 @@
1
+ import { t as __name } from "./chunk--u3MIqq1.js";
2
+ import { Exclude, Generator, Group, Include, Output, Override, PluginFactoryOptions, Resolver, ast } from "@kubb/core";
3
+
4
+ //#region src/types.d.ts
5
+ /**
6
+ * Resolver for MSW that provides naming methods for handler functions.
7
+ */
8
+ type ResolverMsw = Resolver & {
9
+ /**
10
+ * Resolves the base handler function name for an operation.
11
+ */
12
+ resolveName(this: ResolverMsw, name: string): string;
13
+ /**
14
+ * Resolves the output file name for an MSW handler module.
15
+ */
16
+ resolvePathName(this: ResolverMsw, name: string, type?: 'file' | 'function' | 'type' | 'const'): string;
17
+ /**
18
+ * Resolves the handler function name for an operation.
19
+ */
20
+ resolveHandlerName(this: ResolverMsw, node: ast.OperationNode): string;
21
+ /**
22
+ * Resolves the exported handlers collection name.
23
+ */
24
+ resolveHandlersName(this: ResolverMsw): string;
25
+ };
26
+ type Options = {
27
+ /**
28
+ * Where the generated MSW handlers are written and how they are exported.
29
+ *
30
+ * @default { path: 'handlers', barrel: { type: 'named' } }
31
+ */
32
+ output?: Output;
33
+ /**
34
+ * Base URL prepended to every handler's request URL. When omitted, falls back
35
+ * to the adapter's server URL (typically `servers[0].url`).
36
+ */
37
+ baseURL?: string;
38
+ /**
39
+ * Split generated files into subfolders based on the operation's tag.
40
+ */
41
+ group?: Group;
42
+ /**
43
+ * Skip operations matching at least one entry in the list.
44
+ */
45
+ exclude?: Array<Exclude>;
46
+ /**
47
+ * Restrict generation to operations matching at least one entry in the list.
48
+ */
49
+ include?: Array<Include>;
50
+ /**
51
+ * Apply a different options object to operations matching a pattern.
52
+ */
53
+ override?: Array<Override<ResolvedOptions>>;
54
+ /**
55
+ * Override how handler names and file paths are built.
56
+ */
57
+ resolver?: Partial<ResolverMsw> & ThisType<ResolverMsw>;
58
+ /**
59
+ * AST visitor applied to operation nodes before printing.
60
+ */
61
+ transformer?: ast.Visitor;
62
+ /**
63
+ * Emit a `handlers.ts` file that re-exports every handler grouped by HTTP method.
64
+ * Drop the file into `setupServer(...handlers)` or `setupWorker(...handlers)`.
65
+ *
66
+ * @default false
67
+ */
68
+ handlers?: boolean;
69
+ /**
70
+ * Source of the response body returned by each generated handler.
71
+ * - `'data'` — typed empty/example payload, ready for you to fill in from tests.
72
+ * - `'faker'` — value produced by `@kubb/plugin-faker`.
73
+ *
74
+ * @default 'data'
75
+ */
76
+ parser?: 'data' | 'faker';
77
+ /**
78
+ * Custom generators that run alongside the built-in MSW generators.
79
+ */
80
+ generators?: Array<Generator<PluginMsw>>;
81
+ };
82
+ type ResolvedOptions = {
83
+ output: Output;
84
+ group: Group | null;
85
+ exclude: NonNullable<Options['exclude']>;
86
+ include: Options['include'];
87
+ override: NonNullable<Options['override']>;
88
+ parser: NonNullable<Options['parser']>;
89
+ baseURL: Options['baseURL'] | undefined;
90
+ handlers: boolean;
91
+ resolver: ResolverMsw;
92
+ };
93
+ type PluginMsw = PluginFactoryOptions<'plugin-msw', Options, ResolvedOptions, ResolverMsw>;
94
+ declare global {
95
+ namespace Kubb {
96
+ interface PluginRegistry {
97
+ 'plugin-msw': PluginMsw;
98
+ }
99
+ }
100
+ }
101
+ //#endregion
102
+ export { PluginMsw as n, Options as t };
103
+ //# sourceMappingURL=types-CLAiv8qc.d.ts.map