@kubb/swagger-ts 2.0.0-beta.4 → 2.0.0-beta.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/swagger-ts",
3
- "version": "2.0.0-beta.4",
3
+ "version": "2.0.0-beta.5",
4
4
  "description": "Generator swagger-ts",
5
5
  "keywords": [
6
6
  "typescript",
@@ -44,10 +44,10 @@
44
44
  ],
45
45
  "dependencies": {
46
46
  "typescript": "^5.3.2",
47
- "@kubb/core": "2.0.0-beta.4",
48
- "@kubb/parser": "2.0.0-beta.4",
49
- "@kubb/react": "2.0.0-beta.4",
50
- "@kubb/swagger": "2.0.0-beta.4"
47
+ "@kubb/core": "2.0.0-beta.5",
48
+ "@kubb/parser": "2.0.0-beta.5",
49
+ "@kubb/react": "2.0.0-beta.5",
50
+ "@kubb/swagger": "2.0.0-beta.5"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/react": "^18.2.38",
@@ -60,7 +60,7 @@
60
60
  },
61
61
  "peerDependencies": {
62
62
  "typescript": "^5.3.0",
63
- "@kubb/react": "2.0.0-beta.4"
63
+ "@kubb/react": "2.0.0-beta.5"
64
64
  },
65
65
  "packageManager": "pnpm@8.3.0",
66
66
  "engines": {
@@ -2,6 +2,7 @@ import { Generator } from '@kubb/core'
2
2
  import transformers from '@kubb/core/transformers'
3
3
  import { getUniqueName } from '@kubb/core/utils'
4
4
  import * as factory from '@kubb/parser/factory'
5
+ import { keywordTypeNodes } from '@kubb/parser/factory'
5
6
  import { getSchemaFactory, isReference } from '@kubb/swagger/utils'
6
7
 
7
8
  import { pluginKey } from './plugin.ts'
@@ -332,6 +333,29 @@ export class TypeGenerator extends Generator<PluginOptions['resolvedOptions'], C
332
333
  return this.#getTypeFromProperties(schema, baseName)
333
334
  }
334
335
 
336
+ /**
337
+ * validate "const" property as defined in JSON-Schema-Validation
338
+ *
339
+ * https://json-schema.org/draft/2020-12/json-schema-validation#name-const
340
+ *
341
+ * > 6.1.3. const
342
+ * > The value of this keyword MAY be of any type, including null.
343
+ * > Use of this keyword is functionally equivalent to an "enum" (Section 6.1.2) with a single value.
344
+ * > An instance validates successfully against this keyword if its value is equal to the value of the keyword.
345
+ */
346
+ if (version === '3.1' && 'const' in schema) {
347
+ // const keyword takes precendence over the actual type.
348
+ if (schema['const']) {
349
+ if (typeof schema['const'] === 'string') {
350
+ return factory.createLiteralTypeNode(factory.createStringLiteral(schema['const']))
351
+ } else if (typeof schema['const'] === 'number') {
352
+ return factory.createLiteralTypeNode(factory.createNumericLiteral(schema['const']))
353
+ }
354
+ } else {
355
+ return keywordTypeNodes.null
356
+ }
357
+ }
358
+
335
359
  if (schema.type) {
336
360
  if (Array.isArray(schema.type)) {
337
361
  // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0
@@ -365,11 +389,6 @@ export class TypeGenerator extends Generator<PluginOptions['resolvedOptions'], C
365
389
  return factory.createTypeReferenceNode('Blob', [])
366
390
  }
367
391
 
368
- // detect assertion "const" and define the type property as a Literal
369
- if (version === '3.1' && typeof schema['const'] === 'string') {
370
- return factory.createLiteralTypeNode(factory.createStringLiteral(schema['const']))
371
- }
372
-
373
392
  return factory.keywordTypeNodes.any
374
393
  }
375
394
  }
@@ -6,11 +6,11 @@ import { useOas, useOperation, useOperationFile, useOperationName, useSchemas }
6
6
 
7
7
  import { TypeBuilder } from '../TypeBuilder.ts'
8
8
 
9
+ import type { KubbFile } from '@kubb/core'
9
10
  import type { ts } from '@kubb/parser'
10
11
  import type { Operation, OperationSchemas } from '@kubb/swagger'
11
12
  import type { ReactNode } from 'react'
12
13
  import type { FileMeta, PluginOptions } from '../types.ts'
13
- import type { KubbFile } from '@kubb/core'
14
14
 
15
15
  type Props = {
16
16
  builder: TypeBuilder
@@ -6,11 +6,11 @@ import { useOas, useOperation, useOperationFile, useOperationName, useSchemas }
6
6
 
7
7
  import { TypeBuilder } from '../TypeBuilder.ts'
8
8
 
9
+ import type { KubbFile } from '@kubb/core'
9
10
  import type { ts } from '@kubb/parser'
10
11
  import type { Operation, OperationSchemas } from '@kubb/swagger'
11
12
  import type { ReactNode } from 'react'
12
13
  import type { FileMeta, PluginOptions } from '../types.ts'
13
- import type { KubbFile } from '@kubb/core'
14
14
 
15
15
  type Props = {
16
16
  builder: TypeBuilder
@@ -93,7 +93,6 @@ export function Query({
93
93
  )
94
94
  }
95
95
 
96
- // eslint-disable-next-line @typescript-eslint/ban-types
97
96
  type FileProps = {
98
97
  mode: KubbFile.Mode
99
98
  }