zod-openapi 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,31 +1,48 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createNumberSchema = void 0;
3
+ exports.mapMinimum = exports.mapMaximum = exports.mapNumberChecks = exports.createNumberSchema = void 0;
4
4
  const openapi_1 = require("../../openapi");
5
5
  const createNumberSchema = (zodNumber, components) => {
6
6
  const zodNumberChecks = getZodNumberChecks(zodNumber);
7
+ const minimum = (0, exports.mapMinimum)(zodNumberChecks, components.openapi);
8
+ const maximum = (0, exports.mapMaximum)(zodNumberChecks, components.openapi);
7
9
  return {
8
10
  type: mapNumberType(zodNumberChecks),
9
- ...mapRanges(zodNumberChecks, components.openapi), // union types are too pesky to drill through
11
+ ...(minimum && minimum),
12
+ ...(maximum && maximum),
10
13
  };
11
14
  };
12
15
  exports.createNumberSchema = createNumberSchema;
13
- const mapRanges = (zodNumberChecks, openapi) => {
14
- const minimum = zodNumberChecks.min?.value;
15
- const maximum = zodNumberChecks.max?.value;
16
- const exclusiveMinimum = zodNumberChecks.min?.inclusive;
17
- const exclusiveMaximum = zodNumberChecks.max?.inclusive;
18
- return {
19
- ...(minimum !== undefined && { minimum }),
20
- ...(maximum !== undefined && { maximum }),
21
- ...(exclusiveMinimum && {
22
- exclusiveMinimum: (0, openapi_1.satisfiesVersion)(openapi, '3.1.0') ? minimum : true,
23
- }),
24
- ...(exclusiveMaximum && {
25
- exclusiveMaximum: (0, openapi_1.satisfiesVersion)(openapi, '3.1.0') ? maximum : true,
26
- }),
27
- };
16
+ const mapNumberChecks = () => { };
17
+ exports.mapNumberChecks = mapNumberChecks;
18
+ const mapMaximum = (zodNumberCheck, openapi) => {
19
+ if (!zodNumberCheck.max) {
20
+ return undefined;
21
+ }
22
+ const maximum = zodNumberCheck.max.value;
23
+ if (zodNumberCheck.max.inclusive) {
24
+ return { ...(maximum !== undefined && { maximum }) };
25
+ }
26
+ if ((0, openapi_1.satisfiesVersion)(openapi, '3.1.0')) {
27
+ return { exclusiveMaximum: maximum };
28
+ }
29
+ return { maximum, exclusiveMaximum: true };
30
+ };
31
+ exports.mapMaximum = mapMaximum;
32
+ const mapMinimum = (zodNumberCheck, openapi) => {
33
+ if (!zodNumberCheck.min) {
34
+ return undefined;
35
+ }
36
+ const minimum = zodNumberCheck.min.value;
37
+ if (zodNumberCheck.min.inclusive) {
38
+ return { ...(minimum !== undefined && { minimum }) };
39
+ }
40
+ if ((0, openapi_1.satisfiesVersion)(openapi, '3.1.0')) {
41
+ return { exclusiveMinimum: minimum };
42
+ }
43
+ return { minimum, exclusiveMinimum: true };
28
44
  };
45
+ exports.mapMinimum = mapMinimum;
29
46
  const getZodNumberChecks = (zodNumber) => zodNumber._def.checks.reduce((acc, check) => {
30
47
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
31
48
  acc[check.kind] = check;
@@ -1 +1 @@
1
- {"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/create/schema/number.ts"],"names":[],"mappings":";;;AAGA,2CAAiD;AAI1C,MAAM,kBAAkB,GAAG,CAChC,SAAoB,EACpB,UAA4B,EACR,EAAE;IACtB,MAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEtD,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC;QACpC,GAAI,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,OAAO,CAAwB,EAAE,6CAA6C;KACzH,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,kBAAkB,sBAU7B;AAEF,MAAM,SAAS,GAAG,CAChB,eAAkC,EAClC,OAA0B,EAI1B,EAAE;IACF,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC;IAC3C,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC;IAE3C,MAAM,gBAAgB,GAAG,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC;IACxD,MAAM,gBAAgB,GAAG,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC;IAExD,OAAO;QACL,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC,GAAG,CAAC,gBAAgB,IAAI;YACtB,gBAAgB,EAAE,IAAA,0BAAgB,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;SACtE,CAAC;QACF,GAAG,CAAC,gBAAgB,IAAI;YACtB,gBAAgB,EAAE,IAAA,0BAAgB,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;SACtE,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AAMF,MAAM,kBAAkB,GAAG,CAAC,SAAoB,EAAqB,EAAE,CACrE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;IAC7D,mEAAmE;IACnE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAY,CAAC;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAE,CAAC,CAAC;AAET,MAAM,aAAa,GAAG,CACpB,eAAkC,EACN,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/create/schema/number.ts"],"names":[],"mappings":";;;AAGA,2CAAiD;AAI1C,MAAM,kBAAkB,GAAG,CAChC,SAAoB,EACpB,UAA4B,EACR,EAAE;IACtB,MAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,eAAe,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,eAAe,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAEhE,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC;QACpC,GAAG,CAAC,OAAO,IAAK,OAA8B,CAAC;QAC/C,GAAG,CAAC,OAAO,IAAK,OAA8B,CAAC;KAChD,CAAC;AACJ,CAAC,CAAC;AAdW,QAAA,kBAAkB,sBAc7B;AAEK,MAAM,eAAe,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAA3B,QAAA,eAAe,mBAAY;AAEjC,MAAM,UAAU,GAAG,CACxB,cAAiC,EACjC,OAA0B,EAMd,EAAE;IACd,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;QACvB,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IACzC,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;QAChC,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;KACtD;IACD,IAAI,IAAA,0BAAgB,EAAC,OAAO,EAAE,OAAO,CAAC,EAAE;QACtC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;KACtC;IACD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC,CAAC;AArBW,QAAA,UAAU,cAqBrB;AACK,MAAM,UAAU,GAAG,CACxB,cAAiC,EACjC,OAA0B,EAMd,EAAE;IACd,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;QACvB,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IACzC,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;QAChC,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;KACtD;IACD,IAAI,IAAA,0BAAgB,EAAC,OAAO,EAAE,OAAO,CAAC,EAAE;QACtC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;KACtC;IACD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC,CAAC;AArBW,QAAA,UAAU,cAqBrB;AAMF,MAAM,kBAAkB,GAAG,CAAC,SAAoB,EAAqB,EAAE,CACrE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;IAC7D,mEAAmE;IACnE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAY,CAAC;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAE,CAAC,CAAC;AAET,MAAM,aAAa,GAAG,CACpB,eAAkC,EACN,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC"}
@@ -1,26 +1,40 @@
1
1
  import { satisfiesVersion } from '../../openapi';
2
2
  export const createNumberSchema = (zodNumber, components) => {
3
3
  const zodNumberChecks = getZodNumberChecks(zodNumber);
4
+ const minimum = mapMinimum(zodNumberChecks, components.openapi);
5
+ const maximum = mapMaximum(zodNumberChecks, components.openapi);
4
6
  return {
5
7
  type: mapNumberType(zodNumberChecks),
6
- ...mapRanges(zodNumberChecks, components.openapi), // union types are too pesky to drill through
8
+ ...(minimum && minimum),
9
+ ...(maximum && maximum),
7
10
  };
8
11
  };
9
- const mapRanges = (zodNumberChecks, openapi) => {
10
- const minimum = zodNumberChecks.min?.value;
11
- const maximum = zodNumberChecks.max?.value;
12
- const exclusiveMinimum = zodNumberChecks.min?.inclusive;
13
- const exclusiveMaximum = zodNumberChecks.max?.inclusive;
14
- return {
15
- ...(minimum !== undefined && { minimum }),
16
- ...(maximum !== undefined && { maximum }),
17
- ...(exclusiveMinimum && {
18
- exclusiveMinimum: satisfiesVersion(openapi, '3.1.0') ? minimum : true,
19
- }),
20
- ...(exclusiveMaximum && {
21
- exclusiveMaximum: satisfiesVersion(openapi, '3.1.0') ? maximum : true,
22
- }),
23
- };
12
+ export const mapNumberChecks = () => { };
13
+ export const mapMaximum = (zodNumberCheck, openapi) => {
14
+ if (!zodNumberCheck.max) {
15
+ return undefined;
16
+ }
17
+ const maximum = zodNumberCheck.max.value;
18
+ if (zodNumberCheck.max.inclusive) {
19
+ return { ...(maximum !== undefined && { maximum }) };
20
+ }
21
+ if (satisfiesVersion(openapi, '3.1.0')) {
22
+ return { exclusiveMaximum: maximum };
23
+ }
24
+ return { maximum, exclusiveMaximum: true };
25
+ };
26
+ export const mapMinimum = (zodNumberCheck, openapi) => {
27
+ if (!zodNumberCheck.min) {
28
+ return undefined;
29
+ }
30
+ const minimum = zodNumberCheck.min.value;
31
+ if (zodNumberCheck.min.inclusive) {
32
+ return { ...(minimum !== undefined && { minimum }) };
33
+ }
34
+ if (satisfiesVersion(openapi, '3.1.0')) {
35
+ return { exclusiveMinimum: minimum };
36
+ }
37
+ return { minimum, exclusiveMinimum: true };
24
38
  };
25
39
  const getZodNumberChecks = (zodNumber) => zodNumber._def.checks.reduce((acc, check) => {
26
40
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
@@ -1 +1 @@
1
- {"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/create/schema/number.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,SAAoB,EACpB,UAA4B,EACR,EAAE;IACtB,MAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEtD,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC;QACpC,GAAI,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,OAAO,CAAwB,EAAE,6CAA6C;KACzH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAChB,eAAkC,EAClC,OAA0B,EAI1B,EAAE;IACF,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC;IAC3C,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC;IAE3C,MAAM,gBAAgB,GAAG,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC;IACxD,MAAM,gBAAgB,GAAG,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC;IAExD,OAAO;QACL,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC,GAAG,CAAC,gBAAgB,IAAI;YACtB,gBAAgB,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;SACtE,CAAC;QACF,GAAG,CAAC,gBAAgB,IAAI;YACtB,gBAAgB,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;SACtE,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AAMF,MAAM,kBAAkB,GAAG,CAAC,SAAoB,EAAqB,EAAE,CACrE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;IAC7D,mEAAmE;IACnE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAY,CAAC;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAE,CAAC,CAAC;AAET,MAAM,aAAa,GAAG,CACpB,eAAkC,EACN,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/create/schema/number.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,SAAoB,EACpB,UAA4B,EACR,EAAE;IACtB,MAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAEhE,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC;QACpC,GAAG,CAAC,OAAO,IAAK,OAA8B,CAAC;QAC/C,GAAG,CAAC,OAAO,IAAK,OAA8B,CAAC;KAChD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,cAAiC,EACjC,OAA0B,EAMd,EAAE;IACd,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;QACvB,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IACzC,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;QAChC,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;KACtD;IACD,IAAI,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;QACtC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;KACtC;IACD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,cAAiC,EACjC,OAA0B,EAMd,EAAE;IACd,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;QACvB,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IACzC,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;QAChC,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;KACtD;IACD,IAAI,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;QACtC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;KACtC;IACD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC,CAAC;AAMF,MAAM,kBAAkB,GAAG,CAAC,SAAoB,EAAqB,EAAE,CACrE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;IAC7D,mEAAmE;IACnE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAY,CAAC;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAE,CAAC,CAAC;AAET,MAAM,aAAa,GAAG,CACpB,eAAkC,EACN,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC"}
@@ -1,4 +1,14 @@
1
- import { oas31 } from 'openapi3-ts';
2
- import { ZodNumber } from 'zod';
1
+ import { oas30, oas31 } from 'openapi3-ts';
2
+ import { ZodNumber, ZodNumberCheck } from 'zod';
3
3
  import { ComponentsObject } from '../components';
4
+ import { ZodOpenApiVersion } from '../document';
4
5
  export declare const createNumberSchema: (zodNumber: ZodNumber, components: ComponentsObject) => oas31.SchemaObject;
6
+ export declare const mapNumberChecks: () => void;
7
+ export declare const mapMaximum: (zodNumberCheck: ZodNumberCheckMap, openapi: ZodOpenApiVersion) => Pick<oas31.SchemaObject | oas30.SchemaObject, 'maximum' | 'exclusiveMaximum'> | undefined;
8
+ export declare const mapMinimum: (zodNumberCheck: ZodNumberCheckMap, openapi: ZodOpenApiVersion) => Pick<oas31.SchemaObject | oas30.SchemaObject, 'minimum' | 'exclusiveMinimum'> | undefined;
9
+ type ZodNumberCheckMap = {
10
+ [kind in ZodNumberCheck['kind']]?: Extract<ZodNumberCheck, {
11
+ kind: kind;
12
+ }>;
13
+ };
14
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zod-openapi",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "A library to create full OpenAPI documents from your Zod types",
5
5
  "homepage": "https://github.com/samchungy/zod-openapi#readme",
6
6
  "bugs": {