@hey-api/openapi-ts 0.57.1 → 0.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,3 +1,29 @@
1
+ import fs from 'node:fs';
2
+ import ts from 'typescript';
3
+
4
+ interface ImportExportItemObject {
5
+ alias?: string;
6
+ asType?: boolean;
7
+ name: string;
8
+ }
9
+
10
+ type ExtractWithDiscriminator<T, Discriminator> = T extends Discriminator ? T : never;
11
+ /**
12
+ * Accepts an array of elements union and attempts to extract only objects.
13
+ * For example, Array<string | number | { id: string }> would result in
14
+ * Array<{ id: string }>.
15
+ */
16
+ type ExtractArrayOfObjects<T, Discriminator> = T extends Array<infer U> ? Array<ExtractWithDiscriminator<U, Discriminator>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<ExtractWithDiscriminator<U, Discriminator>> : never;
17
+ type Files = Record<string, TypeScriptFile>;
18
+ /**
19
+ * Transforms an array of objects into an optional object map.
20
+ * For example, Array<{ id: string }> would result in
21
+ * { [key: string]?: { id: string } }
22
+ */
23
+ type ArrayOfObjectsToObjectMap<T extends ReadonlyArray<Record<string, any>>, D extends keyof T[number]> = {
24
+ [K in T[number][D]]?: Extract<T[number], Record<D, K>>;
25
+ };
26
+
1
27
  type PluginNames =
2
28
  | '@hey-api/schemas'
3
29
  | '@hey-api/sdk'
@@ -11,17 +37,73 @@ type PluginNames =
11
37
  | 'fastify'
12
38
  | 'zod';
13
39
 
14
- interface PluginName<Name extends PluginNames> {
15
- name: Name;
16
- }
17
-
18
- interface CommonConfig {
40
+ interface BaseConfig {
19
41
  // eslint-disable-next-line @typescript-eslint/ban-types
20
42
  name: PluginNames | (string & {});
21
43
  output?: string;
22
44
  }
23
45
 
24
- type UserConfig$1<Config extends CommonConfig> = Omit<Config, 'output'>;
46
+ interface Dependencies {
47
+ /**
48
+ * Required dependencies will be always processed, regardless of whether
49
+ * a user defines them in their `plugins` config.
50
+ */
51
+ _dependencies?: ReadonlyArray<PluginNames>;
52
+ /**
53
+ * Optional dependencies are not processed unless a user explicitly defines
54
+ * them in their `plugins` config.
55
+ */
56
+ _optionalDependencies?: ReadonlyArray<PluginNames>;
57
+ }
58
+
59
+ /**
60
+ * Public Plugin API.
61
+ */
62
+ declare namespace Plugin {
63
+ export type Config<Config extends BaseConfig> = Config &
64
+ Dependencies & {
65
+ _handler: Plugin.Handler<Config>;
66
+ _handlerLegacy: Plugin.LegacyHandler<Config>;
67
+ };
68
+
69
+ export type DefineConfig<Config extends BaseConfig> = (
70
+ config?: Plugin.UserConfig<Config>,
71
+ ) => Plugin.Config<Config>;
72
+
73
+ /**
74
+ * Plugin implementation for experimental parser.
75
+ */
76
+ export type Handler<Config extends BaseConfig> = (args: {
77
+ context: IRContext;
78
+ plugin: Plugin.Instance<Config>;
79
+ }) => void;
80
+
81
+ export type Instance<Config extends BaseConfig> = Omit<
82
+ Config,
83
+ '_dependencies' | '_handler' | '_handlerLegacy' | '_optionalDependencies'
84
+ > &
85
+ Pick<Required<Config>, 'output'>;
86
+
87
+ /**
88
+ * Plugin implementation for legacy parser. Use only if you need to support
89
+ * OpenAPI 2.0 since that isn't supported by the experimental parser yet.
90
+ */
91
+ export type LegacyHandler<Config extends BaseConfig> = (args: {
92
+ client: Client;
93
+ files: Files;
94
+ openApi: OpenApi;
95
+ plugin: Plugin.Instance<Config>;
96
+ }) => void;
97
+
98
+ export interface Name<Name extends PluginNames> {
99
+ name: Name;
100
+ }
101
+
102
+ /**
103
+ * Users cannot modify output file path to avoid risk of conflicts.
104
+ */
105
+ export type UserConfig<Config extends BaseConfig> = Omit<Config, 'output'>;
106
+ }
25
107
 
26
108
  interface EnumExtensions {
27
109
  /**
@@ -3802,7 +3884,7 @@ interface XMLObject {
3802
3884
  wrapped?: boolean;
3803
3885
  }
3804
3886
 
3805
- interface Config$a extends PluginName<'@hey-api/schemas'> {
3887
+ interface Config$b extends Plugin.Name<'@hey-api/schemas'> {
3806
3888
  /**
3807
3889
  * Customise the schema name. By default, `{{name}}Schema` is used. `name` is a
3808
3890
  * valid JavaScript/TypeScript identifier, e.g. if your schema name is
@@ -3833,6 +3915,17 @@ interface Config$a extends PluginName<'@hey-api/schemas'> {
3833
3915
 
3834
3916
  type IRMediaType = 'form-data' | 'json' | 'url-search-params';
3835
3917
 
3918
+ interface IR {
3919
+ components?: IRComponentsObject;
3920
+ paths?: IRPathsObject;
3921
+ }
3922
+
3923
+ interface IRComponentsObject {
3924
+ parameters?: Record<string, IRParameterObject>;
3925
+ requestBodies?: Record<string, IRRequestBodyObject>;
3926
+ schemas?: Record<string, IRSchemaObject>;
3927
+ }
3928
+
3836
3929
  interface IRPathsObject {
3837
3930
  [path: `/${string}`]: IRPathItemObject;
3838
3931
  }
@@ -3918,6 +4011,12 @@ interface IRParameterObject
3918
4011
  | 'spaceDelimited';
3919
4012
  }
3920
4013
 
4014
+ interface IRRequestBodyObject
4015
+ extends Pick<JsonSchemaDraft2020_12, 'description'> {
4016
+ required?: boolean;
4017
+ schema: IRSchemaObject;
4018
+ }
4019
+
3921
4020
  interface IRResponsesObject {
3922
4021
  /**
3923
4022
  * Any {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#http-status-codes HTTP status code} can be used as the property name, but only one property per code, to describe the expected response for that HTTP status code. This field MUST be enclosed in quotation marks (for example, "200") for compatibility between JSON and YAML. To define a range of response codes, this field MAY contain the uppercase wildcard character `X`. For example, `2XX` represents all response codes between `[200-299]`. Only the following range definitions are allowed: `1XX`, `2XX`, `3XX`, `4XX`, and `5XX`. If a response is defined using an explicit code, the explicit code definition takes precedence over the range definition for that code.
@@ -4002,7 +4101,7 @@ interface IRSchemaObject
4002
4101
  | 'void';
4003
4102
  }
4004
4103
 
4005
- interface Config$9 extends PluginName<'@hey-api/sdk'> {
4104
+ interface Config$a extends Plugin.Name<'@hey-api/sdk'> {
4006
4105
  /**
4007
4106
  * Group operation methods into classes? When enabled, you can
4008
4107
  * select which classes to export with `sdk.include` and/or
@@ -4063,10 +4162,10 @@ interface Config$9 extends PluginName<'@hey-api/sdk'> {
4063
4162
  serviceNameBuilder?: string;
4064
4163
  }
4065
4164
 
4066
- interface Config$8 extends PluginName<'@hey-api/transformers'> {
4165
+ interface Config$9 extends Plugin.Name<'@hey-api/transformers'> {
4067
4166
  /**
4068
4167
  * Convert date strings into Date objects?
4069
- * @default false
4168
+ * @default true
4070
4169
  */
4071
4170
  dates?: boolean;
4072
4171
  /**
@@ -4076,25 +4175,43 @@ interface Config$8 extends PluginName<'@hey-api/transformers'> {
4076
4175
  output?: string;
4077
4176
  }
4078
4177
 
4079
- interface Config$7 extends PluginName<'@hey-api/typescript'> {
4178
+ interface Config$8 extends Plugin.Name<'@hey-api/typescript'> {
4080
4179
  /**
4081
4180
  * By default, enums are generated as TypeScript types. In addition to that,
4082
4181
  * you can choose to generate them as JavaScript objects, TypeScript enums,
4083
4182
  * or TypeScript enums contained within namespaces.
4183
+ *
4084
4184
  * @default false
4085
4185
  */
4086
4186
  enums?: 'javascript' | 'typescript' | 'typescript+namespace' | false;
4087
4187
  /**
4188
+ * **This feature works only with the experimental parser**
4189
+ *
4190
+ * Defines casing of the enum keys. By default, we use `SCREAMING_SNAKE_CASE`.
4191
+ * This option has effect only when `enums` is defined.
4192
+ *
4193
+ * @default 'SCREAMING_SNAKE_CASE'
4194
+ */
4195
+ enumsCase?: StringCase;
4196
+ /**
4197
+ * **This feature works only with the experimental parser**
4198
+ *
4088
4199
  * By default, inline enums (enums not defined as reusable components in
4089
4200
  * the input file) are generated as inlined union types. You can set
4090
4201
  * `exportInlineEnums` to `true` to treat inline enums as reusable components.
4091
4202
  * When `true`, the exported enums will follow the style defined in `enums`.
4092
4203
  *
4093
- * This option works only with the experimental parser.
4094
- *
4095
4204
  * @default false
4096
4205
  */
4097
4206
  exportInlineEnums?: boolean;
4207
+ /**
4208
+ * **This feature works only with the experimental parser**
4209
+ *
4210
+ * Defines casing of the identifiers. By default, we use `PascalCase`.
4211
+ *
4212
+ * @default 'PascalCase'
4213
+ */
4214
+ identifierCase?: Exclude<StringCase, 'SCREAMING_SNAKE_CASE'>;
4098
4215
  /**
4099
4216
  * Include only types matching regular expression.
4100
4217
  *
@@ -4109,13 +4226,21 @@ interface Config$7 extends PluginName<'@hey-api/typescript'> {
4109
4226
  */
4110
4227
  output?: string;
4111
4228
  /**
4229
+ * **This feature works only with the legacy parser**
4230
+ *
4112
4231
  * Use your preferred naming pattern
4232
+ *
4113
4233
  * @default 'preserve'
4234
+ *
4235
+ * @deprecated
4114
4236
  */
4115
4237
  style?: 'PascalCase' | 'preserve';
4116
4238
  /**
4239
+ * **This feature works only with the legacy parser**
4240
+ *
4117
4241
  * Generate a tree of types containing all operations? It will be named
4118
4242
  * $OpenApiTs.
4243
+ *
4119
4244
  * @default false
4120
4245
  *
4121
4246
  * @deprecated
@@ -4123,8 +4248,8 @@ interface Config$7 extends PluginName<'@hey-api/typescript'> {
4123
4248
  tree?: boolean;
4124
4249
  }
4125
4250
 
4126
- interface Config$6
4127
- extends PluginName<'@tanstack/angular-query-experimental'> {
4251
+ interface Config$7
4252
+ extends Plugin.Name<'@tanstack/angular-query-experimental'> {
4128
4253
  /**
4129
4254
  * Generate {@link https://tanstack.com/query/v5/docs/framework/angular/reference/infiniteQueryOptions `infiniteQueryOptions()`} helpers? These will be generated from GET and POST requests where a pagination parameter is detected.
4130
4255
  * @default true
@@ -4148,7 +4273,7 @@ interface Config$6
4148
4273
  queryOptions?: boolean;
4149
4274
  }
4150
4275
 
4151
- interface Config$5 extends PluginName<'@tanstack/react-query'> {
4276
+ interface Config$6 extends Plugin.Name<'@tanstack/react-query'> {
4152
4277
  /**
4153
4278
  * Generate {@link https://tanstack.com/query/v5/docs/framework/react/reference/infiniteQueryOptions `infiniteQueryOptions()`} helpers? These will be generated from GET and POST requests where a pagination parameter is detected.
4154
4279
  * @default true
@@ -4172,7 +4297,7 @@ interface Config$5 extends PluginName<'@tanstack/react-query'> {
4172
4297
  queryOptions?: boolean;
4173
4298
  }
4174
4299
 
4175
- interface Config$4 extends PluginName<'@tanstack/solid-query'> {
4300
+ interface Config$5 extends Plugin.Name<'@tanstack/solid-query'> {
4176
4301
  /**
4177
4302
  * Generate `createInfiniteQuery()` helpers? These will be generated from GET and POST requests where a pagination parameter is detected.
4178
4303
  * @default true
@@ -4196,7 +4321,7 @@ interface Config$4 extends PluginName<'@tanstack/solid-query'> {
4196
4321
  queryOptions?: boolean;
4197
4322
  }
4198
4323
 
4199
- interface Config$3 extends PluginName<'@tanstack/svelte-query'> {
4324
+ interface Config$4 extends Plugin.Name<'@tanstack/svelte-query'> {
4200
4325
  /**
4201
4326
  * Generate `createInfiniteQuery()` helpers? These will be generated from GET and POST requests where a pagination parameter is detected.
4202
4327
  * @default true
@@ -4220,7 +4345,7 @@ interface Config$3 extends PluginName<'@tanstack/svelte-query'> {
4220
4345
  queryOptions?: boolean;
4221
4346
  }
4222
4347
 
4223
- interface Config$2 extends PluginName<'@tanstack/vue-query'> {
4348
+ interface Config$3 extends Plugin.Name<'@tanstack/vue-query'> {
4224
4349
  /**
4225
4350
  * Generate {@link https://tanstack.com/query/v5/docs/framework/vue/reference/infiniteQueryOptions `infiniteQueryOptions()`} helpers? These will be generated from GET and POST requests where a pagination parameter is detected.
4226
4351
  * @default true
@@ -4244,7 +4369,7 @@ interface Config$2 extends PluginName<'@tanstack/vue-query'> {
4244
4369
  queryOptions?: boolean;
4245
4370
  }
4246
4371
 
4247
- interface Config$1 extends PluginName<'fastify'> {
4372
+ interface Config$2 extends Plugin.Name<'fastify'> {
4248
4373
  /**
4249
4374
  * Name of the generated file.
4250
4375
  * @default 'fastify'
@@ -4255,7 +4380,7 @@ interface Config$1 extends PluginName<'fastify'> {
4255
4380
  // import type { IROperationObject, IRSchemaObject } from '../../ir/ir';
4256
4381
 
4257
4382
 
4258
- interface Config extends PluginName<'zod'> {
4383
+ interface Config$1 extends Plugin.Name<'zod'> {
4259
4384
  /**
4260
4385
  * Customise the Zod schema name. By default, `z{{name}}` is used,
4261
4386
  * where `name` is a definition name or an operation name.
@@ -4271,16 +4396,18 @@ interface Config extends PluginName<'zod'> {
4271
4396
  /**
4272
4397
  * User-facing plugin types.
4273
4398
  */
4274
- type UserPlugins = UserConfig$1<Config$a> | UserConfig$1<Config$9> | UserConfig$1<Config$8> | UserConfig$1<Config$7> | UserConfig$1<Config$6> | UserConfig$1<Config$5> | UserConfig$1<Config$4> | UserConfig$1<Config$3> | UserConfig$1<Config$2> | UserConfig$1<Config$1> | UserConfig$1<Config>;
4399
+ type UserPlugins = Plugin.UserConfig<Config$b> | Plugin.UserConfig<Config$a> | Plugin.UserConfig<Config$9> | Plugin.UserConfig<Config$8> | Plugin.UserConfig<Config$7> | Plugin.UserConfig<Config$6> | Plugin.UserConfig<Config$5> | Plugin.UserConfig<Config$4> | Plugin.UserConfig<Config$3> | Plugin.UserConfig<Config$2> | Plugin.UserConfig<Config$1>;
4400
+ /**
4401
+ * Internal plugin types.
4402
+ */
4403
+ type ClientPlugins = Plugin.Config<Config$b> | Plugin.Config<Config$a> | Plugin.Config<Config$9> | Plugin.Config<Config$8> | Plugin.Config<Config$7> | Plugin.Config<Config$6> | Plugin.Config<Config$5> | Plugin.Config<Config$4> | Plugin.Config<Config$3> | Plugin.Config<Config$2> | Plugin.Config<Config$1>;
4275
4404
 
4276
4405
  declare const CLIENTS: readonly ["@hey-api/client-axios", "@hey-api/client-fetch", "legacy/angular", "legacy/axios", "legacy/fetch", "legacy/node", "legacy/xhr"];
4277
4406
  type Client$2 = (typeof CLIENTS)[number];
4407
+ type Formatters = 'biome' | 'prettier';
4408
+ type Linters = 'biome' | 'eslint' | 'oxlint';
4409
+ type StringCase = 'camelCase' | 'PascalCase' | 'preserve' | 'snake_case' | 'SCREAMING_SNAKE_CASE';
4278
4410
  interface ClientConfig {
4279
- /**
4280
- * Manually set base in OpenAPI config instead of inferring from server value
4281
- * @deprecated
4282
- */
4283
- base?: string;
4284
4411
  /**
4285
4412
  * HTTP client to generate
4286
4413
  */
@@ -4292,6 +4419,7 @@ interface ClientConfig {
4292
4419
  * package and bundled with the rest of the generated output. This is
4293
4420
  * useful if you're repackaging the output, publishing it to other users,
4294
4421
  * and you don't want them to install any dependencies.
4422
+ *
4295
4423
  * @default false
4296
4424
  */
4297
4425
  bundle?: boolean;
@@ -4305,26 +4433,18 @@ interface ClientConfig {
4305
4433
  * config file name, or it's not located in the project root.
4306
4434
  */
4307
4435
  configFile?: string;
4308
- /**
4309
- * Run in debug mode?
4310
- * @default false
4311
- */
4312
- debug?: boolean;
4313
4436
  /**
4314
4437
  * Skip writing files to disk?
4438
+ *
4315
4439
  * @default false
4316
4440
  */
4317
4441
  dryRun?: boolean;
4318
4442
  /**
4319
- * Opt-in to the experimental parser?
4443
+ * Opt in to the experimental parser?
4444
+ *
4320
4445
  * @default false
4321
4446
  */
4322
4447
  experimentalParser?: boolean;
4323
- /**
4324
- * Generate core client classes?
4325
- * @default true
4326
- */
4327
- exportCore?: boolean;
4328
4448
  /**
4329
4449
  * Path to the OpenAPI specification. This can be either local or remote path.
4330
4450
  * Both JSON and YAML file formats are supported. You can also pass the parsed
@@ -4334,6 +4454,8 @@ interface ClientConfig {
4334
4454
  */
4335
4455
  input: string | Record<string, unknown> | {
4336
4456
  /**
4457
+ * **This feature works only with the experimental parser**
4458
+ *
4337
4459
  * Prevent parts matching the regular expression from being processed.
4338
4460
  * You can select both operations and components by reference within
4339
4461
  * the bundled input. In case of conflicts, `exclude` takes precedence
@@ -4345,6 +4467,8 @@ interface ClientConfig {
4345
4467
  */
4346
4468
  exclude?: string;
4347
4469
  /**
4470
+ * **This feature works only with the experimental parser**
4471
+ *
4348
4472
  * Process only parts matching the regular expression. You can select both
4349
4473
  * operations and components by reference within the bundled input. In
4350
4474
  * case of conflicts, `exclude` takes precedence over `include`.
@@ -4362,53 +4486,330 @@ interface ClientConfig {
4362
4486
  path: string | Record<string, unknown>;
4363
4487
  };
4364
4488
  /**
4365
- * Custom client class name. Please note this option is deprecated and
4366
- * will be removed in favor of clients.
4367
- * @link https://heyapi.dev/openapi-ts/migrating.html#deprecated-name
4368
- * @deprecated
4489
+ * The relative location of the logs folder
4490
+ *
4491
+ * @default process.cwd()
4369
4492
  */
4370
- name?: string;
4493
+ logs?: string | {
4494
+ /**
4495
+ * The logging level to control the verbosity of log output.
4496
+ * Determines which messages are logged based on their severity.
4497
+ *
4498
+ * Available levels (in increasing order of severity):
4499
+ * - `trace`: Detailed debug information, primarily for development.
4500
+ * - `debug`: Diagnostic information useful during debugging.
4501
+ * - `info`: General operational messages that indicate normal application behavior.
4502
+ * - `warn`: Potentially problematic situations that require attention.
4503
+ * - `error`: Errors that prevent some functionality but do not crash the application.
4504
+ * - `fatal`: Critical errors that cause the application to terminate.
4505
+ * - `silent`: Disables all logging.
4506
+ *
4507
+ * Messages with a severity equal to or higher than the specified level will be logged.
4508
+ *
4509
+ * @default 'info'
4510
+ */
4511
+ level?: 'debug' | 'error' | 'fatal' | 'info' | 'silent' | 'trace' | 'warn';
4512
+ /**
4513
+ * The relative location of the logs folder
4514
+ *
4515
+ * @default process.cwd()
4516
+ */
4517
+ path?: string;
4518
+ };
4371
4519
  /**
4372
4520
  * The relative location of the output folder
4373
4521
  */
4374
4522
  output: string | {
4523
+ /**
4524
+ * **This feature works only with the experimental parser**
4525
+ *
4526
+ * Defines casing of the output fields. By default, we preserve `input`
4527
+ * values as data transforms incur a performance penalty at runtime.
4528
+ *
4529
+ * @default undefined
4530
+ */
4531
+ case?: Exclude<StringCase, 'SCREAMING_SNAKE_CASE'>;
4532
+ /**
4533
+ * Clean the `output` folder on every run? If disabled, this folder may
4534
+ * be used to store additional files. The default option is `true` to
4535
+ * reduce the risk of keeping outdated files around when configuration,
4536
+ * input, or package version changes.
4537
+ *
4538
+ * @default true
4539
+ */
4540
+ clean?: boolean;
4375
4541
  /**
4376
4542
  * Process output folder with formatter?
4543
+ *
4377
4544
  * @default false
4378
4545
  */
4379
- format?: 'biome' | 'prettier' | false;
4546
+ format?: Formatters | false;
4380
4547
  /**
4381
4548
  * Process output folder with linter?
4549
+ *
4382
4550
  * @default false
4383
4551
  */
4384
- lint?: 'biome' | 'eslint' | 'oxlint' | false;
4552
+ lint?: Linters | false;
4385
4553
  /**
4386
4554
  * The relative location of the output folder
4387
4555
  */
4388
4556
  path: string;
4389
4557
  };
4390
4558
  /**
4391
- * Plugins are used to generate artifacts from provided input.
4559
+ * Plugins generate artifacts from `input`. By default, we generate SDK
4560
+ * functions and TypeScript interfaces. If you manually define `plugins`,
4561
+ * you need to include the default plugins if you wish to use them.
4562
+ *
4563
+ * @default ['@hey-api/typescript', '@hey-api/sdk']
4392
4564
  */
4393
4565
  plugins?: ReadonlyArray<UserPlugins['name'] | UserPlugins>;
4566
+ /**
4567
+ * Manually set base in OpenAPI config instead of inferring from server value
4568
+ *
4569
+ * @deprecated
4570
+ */
4571
+ base?: string;
4572
+ /**
4573
+ * Generate core client classes?
4574
+ *
4575
+ * @deprecated
4576
+ *
4577
+ * @default true
4578
+ */
4579
+ exportCore?: boolean;
4580
+ /**
4581
+ * Custom client class name. Please note this option is deprecated and
4582
+ * will be removed in favor of clients.
4583
+ *
4584
+ * @link https://heyapi.dev/openapi-ts/migrating.html#deprecated-name
4585
+ *
4586
+ * @deprecated
4587
+ */
4588
+ name?: string;
4394
4589
  /**
4395
4590
  * Path to custom request file. Please note this option is deprecated and
4396
4591
  * will be removed in favor of clients.
4592
+ *
4397
4593
  * @link https://heyapi.dev/openapi-ts/migrating.html#deprecated-request
4594
+ *
4398
4595
  * @deprecated
4399
4596
  */
4400
4597
  request?: string;
4401
4598
  /**
4402
4599
  * Use options or arguments functions. Please note this option is deprecated and
4403
4600
  * will be removed in favor of clients.
4601
+ *
4404
4602
  * @link https://heyapi.dev/openapi-ts/migrating.html#deprecated-useoptions
4603
+ *
4405
4604
  * @deprecated
4605
+ *
4406
4606
  * @default true
4407
4607
  */
4408
4608
  useOptions?: boolean;
4409
4609
  }
4410
4610
  interface UserConfig extends ClientConfig {
4411
4611
  }
4612
+ type Config = Omit<Required<ClientConfig>, 'base' | 'client' | 'input' | 'logs' | 'name' | 'output' | 'plugins' | 'request'> & Pick<ClientConfig, 'base' | 'name' | 'request'> & {
4613
+ client: Extract<Required<ClientConfig>['client'], object>;
4614
+ input: ExtractWithDiscriminator<ClientConfig['input'], {
4615
+ path: unknown;
4616
+ }>;
4617
+ logs: Extract<Required<ClientConfig['logs']>, object>;
4618
+ output: Extract<ClientConfig['output'], object>;
4619
+ pluginOrder: ReadonlyArray<ClientPlugins['name']>;
4620
+ plugins: ArrayOfObjectsToObjectMap<ExtractArrayOfObjects<ReadonlyArray<ClientPlugins>, {
4621
+ name: string;
4622
+ }>, 'name'>;
4623
+ };
4624
+
4625
+ interface Identifier {
4626
+ /**
4627
+ * Did this function add a new property to the file's `identifiers` map?
4628
+ */
4629
+ created: boolean;
4630
+ /**
4631
+ * The resolved identifier name. False means the identifier has been blacklisted.
4632
+ */
4633
+ name: string | false;
4634
+ }
4635
+ type Namespace = Record<string, Pick<Identifier, 'name'> & {
4636
+ /**
4637
+ * Ref to the type in OpenAPI specification.
4638
+ */
4639
+ $ref: string;
4640
+ }>;
4641
+ interface Namespaces {
4642
+ /**
4643
+ * Type namespace. Types, interfaces, and type aliases exist here.
4644
+ * @example
4645
+ * ```ts
4646
+ * export type Foo = string;
4647
+ * ```
4648
+ */
4649
+ type: Namespace;
4650
+ /**
4651
+ * Value namespace. Variables, functions, classes, and constants exist here.
4652
+ * @example
4653
+ * ```js
4654
+ * export const foo = '';
4655
+ * ```
4656
+ */
4657
+ value: Namespace;
4658
+ }
4659
+ declare class TypeScriptFile {
4660
+ private _headers;
4661
+ private _identifierCase;
4662
+ private _imports;
4663
+ private _items;
4664
+ private _name;
4665
+ private _path;
4666
+ namespaces: Namespaces;
4667
+ /**
4668
+ * Path relative to the client output root.
4669
+ */
4670
+ constructor({ dir, header, identifierCase, name, }: {
4671
+ dir: string;
4672
+ header?: boolean;
4673
+ identifierCase?: StringCase;
4674
+ name: string;
4675
+ });
4676
+ add(...nodes: Array<ts.Node | string>): void;
4677
+ /**
4678
+ * Prevents a specific identifier from being created. This is useful for
4679
+ * transformers where we know a certain transformer won't be needed, and
4680
+ * we want to avoid attempting to create since we know it won't happen.
4681
+ */
4682
+ blockIdentifier({ $ref, namespace, }: Pick<EnsureUniqueIdentifierData, '$ref'> & {
4683
+ namespace: keyof Namespaces;
4684
+ }): Identifier;
4685
+ identifier({ namespace, ...args }: Omit<EnsureUniqueIdentifierData, 'case' | 'namespace'> & {
4686
+ namespace: keyof Namespaces;
4687
+ }): Identifier;
4688
+ /**
4689
+ * Adds an import to the provided module. Handles duplication, returns added import.
4690
+ */
4691
+ import({ module, ...importedItem }: ImportExportItemObject & {
4692
+ module: string;
4693
+ }): ImportExportItemObject;
4694
+ isEmpty(): boolean;
4695
+ nameWithoutExtension(): string;
4696
+ relativePathToFile({ context, id, }: {
4697
+ context: IRContext;
4698
+ id: string;
4699
+ }): string;
4700
+ remove(options?: Parameters<typeof fs.rmSync>[1]): void;
4701
+ /**
4702
+ * Removes last node form the stack. Works as undo.
4703
+ */
4704
+ removeNode(): void;
4705
+ private _setName;
4706
+ toString(separator?: string): string;
4707
+ write(separator?: string): void;
4708
+ }
4709
+ interface EnsureUniqueIdentifierData {
4710
+ $ref: string;
4711
+ case: StringCase | undefined;
4712
+ count?: number;
4713
+ create?: boolean;
4714
+ namespace: Namespace;
4715
+ validNameTransformer?: (value: string) => string;
4716
+ }
4717
+
4718
+ interface ContextFile {
4719
+ /**
4720
+ * Unique file identifier.
4721
+ */
4722
+ id: string;
4723
+ /**
4724
+ * Define casing for identifiers in this file.
4725
+ */
4726
+ identifierCase?: StringCase;
4727
+ /**
4728
+ * Relative file path to the output path.
4729
+ * @example
4730
+ * 'bar/foo.ts'
4731
+ */
4732
+ path: string;
4733
+ }
4734
+ interface Events {
4735
+ /**
4736
+ * Called after parsing.
4737
+ */
4738
+ after: () => void;
4739
+ /**
4740
+ * Called before parsing.
4741
+ */
4742
+ before: () => void;
4743
+ operation: (args: {
4744
+ method: keyof IRPathItemObject;
4745
+ operation: IROperationObject;
4746
+ path: string;
4747
+ }) => void;
4748
+ parameter: (args: {
4749
+ $ref: string;
4750
+ name: string;
4751
+ parameter: IRParameterObject;
4752
+ }) => void;
4753
+ requestBody: (args: {
4754
+ $ref: string;
4755
+ name: string;
4756
+ requestBody: IRRequestBodyObject;
4757
+ }) => void;
4758
+ schema: (args: {
4759
+ $ref: string;
4760
+ name: string;
4761
+ schema: IRSchemaObject;
4762
+ }) => void;
4763
+ }
4764
+ declare class IRContext<Spec extends Record<string, any> = any> {
4765
+ /**
4766
+ * Configuration for parsing and generating the output. This
4767
+ * is a mix of user-provided and default values.
4768
+ */
4769
+ config: Config;
4770
+ /**
4771
+ * A map of files that will be generated from `spec`.
4772
+ */
4773
+ files: Files;
4774
+ /**
4775
+ * Intermediate representation model obtained from `spec`.
4776
+ */
4777
+ ir: IR;
4778
+ /**
4779
+ * Resolved specification from `input`.
4780
+ */
4781
+ spec: Spec;
4782
+ /**
4783
+ * A map of event listeners.
4784
+ */
4785
+ private listeners;
4786
+ constructor({ config, spec }: {
4787
+ config: Config;
4788
+ spec: Spec;
4789
+ });
4790
+ /**
4791
+ * Notify all event listeners about `event`.
4792
+ */
4793
+ broadcast<T extends keyof Events>(event: T, ...args: Parameters<Events[T]>): Promise<void>;
4794
+ /**
4795
+ * Create and return a new TypeScript file. Also set the current file context
4796
+ * to the newly created file.
4797
+ */
4798
+ createFile(file: ContextFile): TypeScriptFile;
4799
+ /**
4800
+ * Returns a specific file by ID from `files`.
4801
+ */
4802
+ file({ id }: Pick<ContextFile, 'id'>): TypeScriptFile | undefined;
4803
+ resolveIrRef<T>($ref: string): T;
4804
+ /**
4805
+ * Returns a resolved reference from `spec`.
4806
+ */
4807
+ resolveRef<T>($ref: string): T;
4808
+ /**
4809
+ * Register a new `event` listener.
4810
+ */
4811
+ subscribe<T extends keyof Events>(event: T, callbackFn: Events[T]): void;
4812
+ }
4412
4813
 
4413
4814
  interface Dictionary<T = unknown> {
4414
4815
  [key: string]: T;
@@ -4424,7 +4825,7 @@ interface OpenApiReference$1 {
4424
4825
  /**
4425
4826
  * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#example-object
4426
4827
  */
4427
- interface OpenApiExample extends OpenApiReference$1 {
4828
+ interface OpenApiExample$1 extends OpenApiReference$1 {
4428
4829
  description?: string;
4429
4830
  externalValue?: string;
4430
4831
  summary?: string;
@@ -4520,20 +4921,20 @@ type MediaType = 'application/json';
4520
4921
  */
4521
4922
  interface MediaTypeObject {
4522
4923
  example?: unknown;
4523
- examples?: Dictionary<OpenApiExample>;
4924
+ examples?: Dictionary<OpenApiExample$1>;
4524
4925
  schema: OpenApiSchema$1;
4525
4926
  }
4526
4927
  /**
4527
4928
  * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object
4528
4929
  */
4529
- interface OpenApiParameter extends OpenApiReference$1 {
4930
+ interface OpenApiParameter$1 extends OpenApiReference$1 {
4530
4931
  allowEmptyValue?: boolean;
4531
4932
  allowReserved?: boolean;
4532
4933
  content?: Record<MediaType, MediaTypeObject>;
4533
4934
  deprecated?: boolean;
4534
4935
  description?: string;
4535
4936
  example?: unknown;
4536
- examples?: Dictionary<OpenApiExample>;
4937
+ examples?: Dictionary<OpenApiExample$1>;
4537
4938
  explode?: boolean;
4538
4939
  in: 'cookie' | 'formData' | 'header' | 'path' | 'query';
4539
4940
  name: string;
@@ -4633,7 +5034,7 @@ interface Model extends Schema {
4633
5034
  enums: Model[];
4634
5035
  export: 'all-of' | 'any-of' | 'array' | 'const' | 'dictionary' | 'enum' | 'generic' | 'interface' | 'one-of' | 'reference';
4635
5036
  imports: string[];
4636
- in: OperationParameter['in'] | OpenApiParameter['in'] | OperationResponse['in'] | '';
5037
+ in: OperationParameter['in'] | OpenApiParameter$1['in'] | OperationResponse['in'] | '';
4637
5038
  link: Model | Model[] | null;
4638
5039
  meta?: ModelMeta;
4639
5040
  /**
@@ -4666,10 +5067,62 @@ interface OpenApiExternalDocs {
4666
5067
  url: string;
4667
5068
  }
4668
5069
 
5070
+ /**
5071
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#contact-object
5072
+ */
5073
+ interface OpenApiContact$1 {
5074
+ email?: string;
5075
+ name?: string;
5076
+ url?: string;
5077
+ }
5078
+
5079
+ /**
5080
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#license-object
5081
+ */
5082
+ interface OpenApiLicense$1 {
5083
+ name: string;
5084
+ url?: string;
5085
+ }
5086
+
5087
+ /**
5088
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#info-object
5089
+ */
5090
+ interface OpenApiInfo$1 {
5091
+ contact?: OpenApiContact$1;
5092
+ description?: string;
5093
+ license?: OpenApiLicense$1;
5094
+ termsOfService?: string;
5095
+ title: string;
5096
+ version: string;
5097
+ }
5098
+
4669
5099
  interface WithNullableExtension {
4670
5100
  'x-nullable'?: boolean;
4671
5101
  }
4672
5102
 
5103
+ /**
5104
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#items-object)
5105
+ */
5106
+ interface OpenApiItems extends WithEnumExtension {
5107
+ collectionFormat?: 'csv' | 'ssv' | 'tsv' | 'pipes';
5108
+ default?: unknown;
5109
+ enum?: (string | number)[];
5110
+ exclusiveMaximum?: number;
5111
+ exclusiveMinimum?: number;
5112
+ format?: 'int32' | 'int64' | 'float' | 'double' | 'string' | 'boolean' | 'byte' | 'binary' | 'date' | 'date-time' | 'password';
5113
+ items?: OpenApiItems;
5114
+ maxItems?: number;
5115
+ maxLength?: number;
5116
+ maximum?: number;
5117
+ minItems?: number;
5118
+ minLength?: number;
5119
+ minimum?: number;
5120
+ multipleOf?: number;
5121
+ pattern?: string;
5122
+ type?: string;
5123
+ uniqueItems?: boolean;
5124
+ }
5125
+
4673
5126
  /**
4674
5127
  * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#reference-object
4675
5128
  */
@@ -4723,6 +5176,431 @@ interface OpenApiSchema extends OpenApiReference, WithEnumExtension, WithNullabl
4723
5176
  xml?: OpenApiXml;
4724
5177
  }
4725
5178
 
5179
+ /**
5180
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#parameter-object
5181
+ */
5182
+ interface OpenApiParameter extends OpenApiReference, WithEnumExtension, WithNullableExtension {
5183
+ allowEmptyValue?: boolean;
5184
+ collectionFormat?: 'csv' | 'ssv' | 'tsv' | 'pipes' | 'multi';
5185
+ default?: unknown;
5186
+ description?: string;
5187
+ enum?: (string | number)[];
5188
+ exclusiveMaximum?: boolean;
5189
+ exclusiveMinimum?: boolean;
5190
+ format?: 'int32' | 'int64' | 'float' | 'double' | 'string' | 'boolean' | 'byte' | 'binary' | 'date' | 'date-time' | 'password';
5191
+ in: 'path' | 'query' | 'header' | 'formData' | 'body';
5192
+ items?: OpenApiItems;
5193
+ maxItems?: number;
5194
+ maxLength?: number;
5195
+ maximum?: number;
5196
+ minItems?: number;
5197
+ minLength?: number;
5198
+ minimum?: number;
5199
+ multipleOf?: number;
5200
+ name: string;
5201
+ pattern?: string;
5202
+ required?: boolean;
5203
+ schema?: OpenApiSchema;
5204
+ type?: string;
5205
+ uniqueItems?: boolean;
5206
+ }
5207
+
5208
+ /**
5209
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#example-object
5210
+ */
5211
+ interface OpenApiExample {
5212
+ [mimetype: string]: unknown;
5213
+ }
5214
+
5215
+ /**
5216
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#header-object
5217
+ */
5218
+ interface OpenApiHeader$1 {
5219
+ collectionFormat?: 'csv' | 'ssv' | 'tsv' | 'pipes';
5220
+ default?: unknown;
5221
+ description?: string;
5222
+ enum?: (string | number)[];
5223
+ exclusiveMaximum?: boolean;
5224
+ exclusiveMinimum?: boolean;
5225
+ format?: 'int32' | 'int64' | 'float' | 'double' | 'string' | 'boolean' | 'byte' | 'binary' | 'date' | 'date-time' | 'password';
5226
+ items?: Dictionary<OpenApiItems>;
5227
+ maxItems?: number;
5228
+ maxLength?: number;
5229
+ maximum?: number;
5230
+ minItems?: number;
5231
+ minLength?: number;
5232
+ minimum?: number;
5233
+ multipleOf?: number;
5234
+ pattern?: string;
5235
+ type: 'string' | 'number' | 'integer' | 'boolean' | 'array';
5236
+ uniqueItems?: boolean;
5237
+ }
5238
+
5239
+ /**
5240
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#response-object
5241
+ */
5242
+ interface OpenApiResponse$1 extends OpenApiReference {
5243
+ description: string;
5244
+ examples?: OpenApiExample;
5245
+ headers?: Dictionary<OpenApiHeader$1>;
5246
+ schema?: OpenApiSchema & OpenApiReference;
5247
+ }
5248
+
5249
+ /**
5250
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#responses-object
5251
+ */
5252
+ interface Response$1 {
5253
+ [httpcode: string]: OpenApiResponse$1;
5254
+ }
5255
+ type OpenApiResponses$1 = Response$1 & {
5256
+ default?: OpenApiResponse$1;
5257
+ };
5258
+
5259
+ /**
5260
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#security-requirement-object
5261
+ */
5262
+ interface OpenApiSecurityRequirement$1 {
5263
+ [key: string]: string;
5264
+ }
5265
+
5266
+ /**
5267
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#operation-object
5268
+ */
5269
+ interface OpenApiOperation$1 {
5270
+ consumes?: string[];
5271
+ deprecated?: boolean;
5272
+ description?: string;
5273
+ externalDocs?: OpenApiExternalDocs;
5274
+ operationId?: string;
5275
+ parameters?: OpenApiParameter[];
5276
+ produces?: string[];
5277
+ responses: OpenApiResponses$1;
5278
+ schemes?: ('http' | 'https' | 'ws' | 'wss')[];
5279
+ security?: OpenApiSecurityRequirement$1[];
5280
+ summary?: string;
5281
+ tags?: string[];
5282
+ }
5283
+
5284
+ /**
5285
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#path-item-object
5286
+ */
5287
+ interface OpenApiPath$1 extends OpenApiReference {
5288
+ connect?: OpenApiOperation$1;
5289
+ delete?: OpenApiOperation$1;
5290
+ get?: OpenApiOperation$1;
5291
+ head?: OpenApiOperation$1;
5292
+ options?: OpenApiOperation$1;
5293
+ parameters?: OpenApiParameter[];
5294
+ patch?: OpenApiOperation$1;
5295
+ post?: OpenApiOperation$1;
5296
+ put?: OpenApiOperation$1;
5297
+ trace?: OpenApiOperation$1;
5298
+ }
5299
+
5300
+ /**
5301
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#security-scheme-object
5302
+ */
5303
+ interface OpenApiSecurityScheme$1 {
5304
+ authorizationUrl?: string;
5305
+ description?: string;
5306
+ flow?: 'implicit' | 'password' | 'application' | 'accessCode';
5307
+ in?: 'query' | 'header';
5308
+ name?: string;
5309
+ scopes: Dictionary<string>;
5310
+ tokenUrl?: string;
5311
+ type: 'basic' | 'apiKey' | 'oauth2';
5312
+ }
5313
+
5314
+ /**
5315
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#tag-object
5316
+ */
5317
+ interface OpenApiTag$1 {
5318
+ description?: string;
5319
+ externalDocs?: OpenApiExternalDocs;
5320
+ name: string;
5321
+ }
5322
+
5323
+ /**
5324
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md
5325
+ */
5326
+ interface OpenApi$2 {
5327
+ basePath?: string;
5328
+ consumes?: string[];
5329
+ definitions?: Dictionary<OpenApiSchema>;
5330
+ externalDocs?: OpenApiExternalDocs;
5331
+ host?: string;
5332
+ info: OpenApiInfo$1;
5333
+ parameters?: Dictionary<OpenApiParameter>;
5334
+ paths: Dictionary<OpenApiPath$1>;
5335
+ produces?: string[];
5336
+ responses?: Dictionary<OpenApiResponse$1>;
5337
+ schemes?: string[];
5338
+ security?: OpenApiSecurityRequirement$1[];
5339
+ securityDefinitions?: Dictionary<OpenApiSecurityScheme$1>;
5340
+ swagger: string;
5341
+ tags?: OpenApiTag$1[];
5342
+ }
5343
+
5344
+ /**
5345
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#header-object
5346
+ */
5347
+ interface OpenApiHeader extends OpenApiReference$1 {
5348
+ allowEmptyValue?: boolean;
5349
+ allowReserved?: boolean;
5350
+ deprecated?: boolean;
5351
+ description?: string;
5352
+ example?: unknown;
5353
+ examples?: Dictionary<OpenApiExample$1>;
5354
+ explode?: boolean;
5355
+ required?: boolean;
5356
+ schema?: OpenApiSchema$1;
5357
+ style?: string;
5358
+ }
5359
+
5360
+ /**
5361
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#encoding-object
5362
+ */
5363
+ interface OpenApiEncoding {
5364
+ allowReserved?: boolean;
5365
+ contentType?: string;
5366
+ explode?: boolean;
5367
+ headers?: Dictionary<OpenApiHeader>;
5368
+ style?: string;
5369
+ }
5370
+
5371
+ /**
5372
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object
5373
+ */
5374
+ interface OpenApiMediaType extends OpenApiReference$1 {
5375
+ encoding?: Dictionary<OpenApiEncoding>;
5376
+ example?: unknown;
5377
+ examples?: Dictionary<OpenApiExample$1>;
5378
+ schema?: OpenApiSchema$1;
5379
+ }
5380
+
5381
+ /**
5382
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#request-body-object
5383
+ */
5384
+ interface OpenApiRequestBody extends OpenApiReference$1 {
5385
+ content: Dictionary<OpenApiMediaType>;
5386
+ description?: string;
5387
+ nullable?: boolean;
5388
+ required?: boolean;
5389
+ 'x-body-name'?: string;
5390
+ }
5391
+
5392
+ /**
5393
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#server-variable-object
5394
+ */
5395
+ interface OpenApiServerVariable extends WithEnumExtension {
5396
+ default: string;
5397
+ description?: string;
5398
+ enum?: (string | number)[];
5399
+ }
5400
+
5401
+ /**
5402
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#server-object
5403
+ */
5404
+ interface OpenApiServer {
5405
+ description?: string;
5406
+ url: string;
5407
+ variables?: Dictionary<OpenApiServerVariable>;
5408
+ }
5409
+
5410
+ /**
5411
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#link-object
5412
+ */
5413
+ interface OpenApiLink extends OpenApiReference$1 {
5414
+ description?: string;
5415
+ operationId?: string;
5416
+ operationRef?: string;
5417
+ parameters?: Dictionary<unknown>;
5418
+ requestBody?: unknown;
5419
+ server?: OpenApiServer;
5420
+ }
5421
+
5422
+ /**
5423
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#response-object
5424
+ */
5425
+ interface OpenApiResponse extends OpenApiReference$1 {
5426
+ content?: Dictionary<OpenApiMediaType>;
5427
+ description: string;
5428
+ headers?: Dictionary<OpenApiHeader>;
5429
+ links?: Dictionary<OpenApiLink>;
5430
+ }
5431
+
5432
+ /**
5433
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#responses-object
5434
+ */
5435
+ interface Response {
5436
+ [httpcode: string]: OpenApiResponse;
5437
+ }
5438
+ type OpenApiResponses = OpenApiReference$1 & Response & {
5439
+ default: OpenApiResponse;
5440
+ };
5441
+
5442
+ /**
5443
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#security-requirement-object
5444
+ */
5445
+ interface OpenApiSecurityRequirement {
5446
+ [name: string]: string;
5447
+ }
5448
+
5449
+ /**
5450
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#operation-object
5451
+ */
5452
+ interface OpenApiOperation {
5453
+ callbacks?: Dictionary<OpenApiCallback>;
5454
+ deprecated?: boolean;
5455
+ description?: string;
5456
+ externalDocs?: OpenApiExternalDocs$1;
5457
+ operationId?: string;
5458
+ parameters?: OpenApiParameter$1[];
5459
+ requestBody?: OpenApiRequestBody;
5460
+ responses: OpenApiResponses;
5461
+ security?: OpenApiSecurityRequirement[];
5462
+ servers?: OpenApiServer[];
5463
+ summary?: string;
5464
+ tags?: string[];
5465
+ }
5466
+
5467
+ /**
5468
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#path-item-object
5469
+ */
5470
+ interface OpenApiPath {
5471
+ connect?: OpenApiOperation;
5472
+ delete?: OpenApiOperation;
5473
+ description?: string;
5474
+ get?: OpenApiOperation;
5475
+ head?: OpenApiOperation;
5476
+ options?: OpenApiOperation;
5477
+ parameters?: OpenApiParameter$1[];
5478
+ patch?: OpenApiOperation;
5479
+ post?: OpenApiOperation;
5480
+ put?: OpenApiOperation;
5481
+ servers?: OpenApiServer[];
5482
+ summary?: string;
5483
+ trace?: OpenApiOperation;
5484
+ }
5485
+
5486
+ /**
5487
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#callback-object
5488
+ */
5489
+ interface Callback {
5490
+ [key: string]: OpenApiPath;
5491
+ }
5492
+ type OpenApiCallback = OpenApiReference$1 & Callback;
5493
+
5494
+ /**
5495
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#oauth-flow-object
5496
+ */
5497
+ interface OpenApiOAuthFlow {
5498
+ authorizationUrl: string;
5499
+ refreshUrl?: string;
5500
+ scopes: Dictionary<string>;
5501
+ tokenUrl: string;
5502
+ }
5503
+
5504
+ /**
5505
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#oauth-flows-object
5506
+ */
5507
+ interface OpenApiOAuthFlows {
5508
+ authorizationCode?: OpenApiOAuthFlow;
5509
+ clientCredentials?: OpenApiOAuthFlow;
5510
+ implicit?: OpenApiOAuthFlow;
5511
+ password?: OpenApiOAuthFlow;
5512
+ }
5513
+
5514
+ /**
5515
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#security-scheme-object
5516
+ */
5517
+ interface OpenApiSecurityScheme extends OpenApiReference$1 {
5518
+ bearerFormat?: string;
5519
+ description?: string;
5520
+ flows?: OpenApiOAuthFlows;
5521
+ in?: 'query' | 'header' | 'cookie';
5522
+ name?: string;
5523
+ openIdConnectUrl?: string;
5524
+ scheme?: string;
5525
+ type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';
5526
+ }
5527
+
5528
+ /**
5529
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#components-object
5530
+ */
5531
+ interface OpenApiComponents {
5532
+ callbacks?: Dictionary<OpenApiCallback>;
5533
+ examples?: Dictionary<OpenApiExample$1>;
5534
+ headers?: Dictionary<OpenApiHeader>;
5535
+ links?: Dictionary<OpenApiLink>;
5536
+ parameters?: Dictionary<OpenApiParameter$1>;
5537
+ requestBodies?: Dictionary<OpenApiRequestBody>;
5538
+ responses?: Dictionary<OpenApiResponses>;
5539
+ schemas?: Dictionary<OpenApiSchema$1>;
5540
+ securitySchemes?: Dictionary<OpenApiSecurityScheme>;
5541
+ }
5542
+
5543
+ /**
5544
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#contact-object
5545
+ */
5546
+ interface OpenApiContact {
5547
+ email?: string;
5548
+ name?: string;
5549
+ url?: string;
5550
+ }
5551
+
5552
+ /**
5553
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#license-object
5554
+ */
5555
+ interface OpenApiLicense {
5556
+ name: string;
5557
+ url?: string;
5558
+ }
5559
+
5560
+ /**
5561
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#info-object
5562
+ */
5563
+ interface OpenApiInfo {
5564
+ contact?: OpenApiContact;
5565
+ description?: string;
5566
+ license?: OpenApiLicense;
5567
+ termsOfService?: string;
5568
+ title: string;
5569
+ version: string;
5570
+ }
5571
+
5572
+ /**
5573
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#paths-object
5574
+ */
5575
+ interface OpenApiPaths {
5576
+ [path: string]: OpenApiPath;
5577
+ }
5578
+
5579
+ /**
5580
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#tag-object
5581
+ */
5582
+ interface OpenApiTag {
5583
+ description?: string;
5584
+ externalDocs?: OpenApiExternalDocs$1;
5585
+ name: string;
5586
+ }
5587
+
5588
+ /**
5589
+ * {@link} https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md
5590
+ */
5591
+ interface OpenApi$1 {
5592
+ components?: OpenApiComponents;
5593
+ externalDocs?: OpenApiExternalDocs$1;
5594
+ info: OpenApiInfo;
5595
+ openapi: string;
5596
+ paths: OpenApiPaths;
5597
+ security?: OpenApiSecurityRequirement[];
5598
+ servers?: OpenApiServer[];
5599
+ tags?: OpenApiTag[];
5600
+ }
5601
+
5602
+ type OpenApi = OpenApi$2 | OpenApi$1;
5603
+
4726
5604
  interface Operation extends Omit<Operation$1, 'tags'> {
4727
5605
  service: string;
4728
5606
  }
@@ -4740,6 +5618,10 @@ interface Client extends Omit<Client$1, 'operations'> {
4740
5618
  * @param userConfig {@link UserConfig} passed to the `createClient()` method
4741
5619
  */
4742
5620
  declare function createClient(userConfig: UserConfig): Promise<ReadonlyArray<Client>>;
5621
+ /**
5622
+ * Default plugins used to generate artifacts if plugins aren't specified.
5623
+ */
5624
+ declare const defaultPlugins: readonly ["@hey-api/typescript", "@hey-api/sdk"];
4743
5625
  /**
4744
5626
  * Type helper for openapi-ts.config.ts, returns {@link UserConfig} object
4745
5627
  */
@@ -4749,4 +5631,4 @@ declare const _default: {
4749
5631
  defineConfig: (config: UserConfig) => UserConfig;
4750
5632
  };
4751
5633
 
4752
- export { type OpenApiV3_0_X, type OpenApiV3_1_X, type UserConfig, createClient, _default as default, defineConfig };
5634
+ export { type OpenApiV3_0_X, type OpenApiV3_1_X, Plugin, type UserConfig, createClient, _default as default, defaultPlugins, defineConfig };