@redocly/client-generator 0.3.8 → 0.4.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/README.md +32 -54
- package/eject-assets/AGENTS.md +137 -0
- package/eject-assets/generators/cli/docs.ts +224 -0
- package/eject-assets/generators/cli/engine-source.ts +21 -0
- package/eject-assets/generators/cli/index.ts +90 -0
- package/eject-assets/generators/cli/render.ts +348 -0
- package/eject-assets/generators/go/client.ts +57 -0
- package/eject-assets/generators/go/descriptor.ts +41 -0
- package/eject-assets/generators/go/index.ts +336 -0
- package/eject-assets/generators/go/models.ts +179 -0
- package/eject-assets/generators/go/naming.ts +49 -0
- package/eject-assets/generators/go/operations.ts +296 -0
- package/eject-assets/generators/go/pagination.ts +194 -0
- package/eject-assets/generators/go/types.ts +60 -0
- package/eject-assets/generators/mock/faker.ts +214 -0
- package/eject-assets/generators/mock/index.ts +35 -0
- package/eject-assets/generators/mock/render.ts +282 -0
- package/eject-assets/generators/mock/sample.ts +316 -0
- package/eject-assets/generators/mock/values.ts +63 -0
- package/eject-assets/generators/php/client.ts +63 -0
- package/eject-assets/generators/php/descriptor.ts +58 -0
- package/eject-assets/generators/php/index.ts +237 -0
- package/eject-assets/generators/php/models.ts +275 -0
- package/eject-assets/generators/php/naming.ts +51 -0
- package/eject-assets/generators/php/operations.ts +232 -0
- package/eject-assets/generators/php/pagination.ts +133 -0
- package/eject-assets/generators/php/types.ts +148 -0
- package/eject-assets/generators/python/client.ts +123 -0
- package/eject-assets/generators/python/descriptor.ts +52 -0
- package/eject-assets/generators/python/index.ts +251 -0
- package/eject-assets/generators/python/models.ts +242 -0
- package/eject-assets/generators/python/naming.ts +46 -0
- package/eject-assets/generators/python/operations.ts +147 -0
- package/eject-assets/generators/python/pagination.ts +128 -0
- package/eject-assets/generators/python/types.ts +54 -0
- package/eject-assets/generators/swr/index.ts +37 -0
- package/eject-assets/generators/swr/render.ts +78 -0
- package/eject-assets/generators/tanstack-query/index.ts +48 -0
- package/eject-assets/generators/tanstack-query/render.ts +346 -0
- package/eject-assets/generators/transformers/index.ts +46 -0
- package/eject-assets/generators/transformers/render.ts +506 -0
- package/eject-assets/generators/typescript/banner.ts +35 -0
- package/eject-assets/generators/typescript/client.ts +254 -0
- package/eject-assets/generators/typescript/descriptor.ts +137 -0
- package/eject-assets/generators/typescript/index.ts +101 -0
- package/eject-assets/generators/typescript/inline-runtime.ts +135 -0
- package/eject-assets/generators/typescript/operation-signature.ts +62 -0
- package/eject-assets/generators/typescript/operation-types.ts +17 -0
- package/eject-assets/generators/typescript/operations.ts +524 -0
- package/eject-assets/generators/typescript/response-headers.ts +74 -0
- package/eject-assets/generators/typescript/type-guards.ts +159 -0
- package/eject-assets/generators/typescript/types.ts +172 -0
- package/eject-assets/generators/zod/index.ts +32 -0
- package/eject-assets/generators/zod/schemas.ts +456 -0
- package/eject-assets/skills/cli-generator/SKILL.md +121 -0
- package/eject-assets/skills/client-generators/SKILL.md +142 -0
- package/eject-assets/skills/go-generator/SKILL.md +96 -0
- package/eject-assets/skills/mock-generator/SKILL.md +50 -0
- package/eject-assets/skills/php-generator/SKILL.md +112 -0
- package/eject-assets/skills/python-generator/SKILL.md +110 -0
- package/eject-assets/skills/swr-generator/SKILL.md +50 -0
- package/eject-assets/skills/tanstack-query-generator/SKILL.md +55 -0
- package/eject-assets/skills/transformers-generator/SKILL.md +47 -0
- package/eject-assets/skills/typescript-generator/SKILL.md +95 -0
- package/eject-assets/skills/zod-generator/SKILL.md +54 -0
- package/lib/authoring/index.d.ts +11 -0
- package/lib/authoring/index.d.ts.map +1 -0
- package/lib/authoring/index.js +42 -0
- package/lib/authoring/index.js.map +1 -0
- package/lib/authoring/naming.d.ts +34 -0
- package/lib/authoring/naming.d.ts.map +1 -0
- package/lib/authoring/naming.js +104 -0
- package/lib/authoring/naming.js.map +1 -0
- package/lib/authoring/operation.d.ts +47 -0
- package/lib/authoring/operation.d.ts.map +1 -0
- package/lib/authoring/operation.js +86 -0
- package/lib/authoring/operation.js.map +1 -0
- package/lib/authoring/options.d.ts +9 -0
- package/lib/authoring/options.d.ts.map +1 -0
- package/lib/authoring/options.js +5 -0
- package/lib/authoring/options.js.map +1 -0
- package/lib/authoring/pagination.d.ts +19 -0
- package/lib/authoring/pagination.d.ts.map +1 -0
- package/lib/authoring/pagination.js +45 -0
- package/lib/authoring/pagination.js.map +1 -0
- package/lib/authoring/printer.d.ts +16 -0
- package/lib/authoring/printer.d.ts.map +1 -0
- package/lib/authoring/printer.js +36 -0
- package/lib/authoring/printer.js.map +1 -0
- package/lib/authoring/reference-page.d.ts +31 -0
- package/lib/authoring/reference-page.d.ts.map +1 -0
- package/lib/authoring/reference-page.js +160 -0
- package/lib/authoring/reference-page.js.map +1 -0
- package/lib/authoring/schema.d.ts +51 -0
- package/lib/authoring/schema.d.ts.map +1 -0
- package/lib/authoring/schema.js +190 -0
- package/lib/authoring/schema.js.map +1 -0
- package/lib/cli-contract.d.ts +126 -0
- package/lib/cli-contract.d.ts.map +1 -0
- package/lib/cli-contract.js +25 -0
- package/lib/cli-contract.js.map +1 -0
- package/lib/{emitters/wrapper-support.d.ts → contracts/typescript.d.ts} +13 -24
- package/lib/contracts/typescript.d.ts.map +1 -0
- package/lib/contracts/typescript.js +87 -0
- package/lib/contracts/typescript.js.map +1 -0
- package/lib/generate.d.ts +10 -10
- package/lib/generate.d.ts.map +1 -1
- package/lib/generate.js +25 -106
- package/lib/generate.js.map +1 -1
- package/lib/generators/cli/docs.d.ts +19 -0
- package/lib/generators/cli/docs.d.ts.map +1 -0
- package/lib/generators/cli/docs.js +187 -0
- package/lib/generators/cli/docs.js.map +1 -0
- package/lib/generators/cli/engine-source.d.ts +5 -0
- package/lib/generators/cli/engine-source.d.ts.map +1 -0
- package/lib/generators/cli/engine-source.js +12 -0
- package/lib/generators/cli/engine-source.js.map +1 -0
- package/lib/generators/cli/index.d.ts +18 -0
- package/lib/generators/cli/index.d.ts.map +1 -0
- package/lib/generators/cli/index.js +67 -0
- package/lib/generators/cli/index.js.map +1 -0
- package/lib/generators/cli/render.d.ts +39 -0
- package/lib/generators/cli/render.d.ts.map +1 -0
- package/lib/generators/cli/render.js +281 -0
- package/lib/generators/cli/render.js.map +1 -0
- package/lib/generators/cli/runtime/cli.d.ts +42 -0
- package/lib/generators/cli/runtime/cli.d.ts.map +1 -0
- package/lib/generators/cli/runtime/cli.js +582 -0
- package/lib/generators/cli/runtime/cli.js.map +1 -0
- package/lib/generators/compatibility.d.ts +10 -0
- package/lib/generators/compatibility.d.ts.map +1 -0
- package/lib/generators/compatibility.js +45 -0
- package/lib/generators/compatibility.js.map +1 -0
- package/lib/generators/go/client.d.ts +5 -0
- package/lib/generators/go/client.d.ts.map +1 -0
- package/lib/generators/go/client.js +34 -0
- package/lib/generators/go/client.js.map +1 -0
- package/lib/generators/go/descriptor.d.ts +6 -0
- package/lib/generators/go/descriptor.d.ts.map +1 -0
- package/lib/generators/go/descriptor.js +26 -0
- package/lib/generators/go/descriptor.js.map +1 -0
- package/lib/generators/go/index.d.ts +14 -0
- package/lib/generators/go/index.d.ts.map +1 -0
- package/lib/generators/go/index.js +240 -0
- package/lib/generators/go/index.js.map +1 -0
- package/lib/generators/go/models.d.ts +4 -0
- package/lib/generators/go/models.d.ts.map +1 -0
- package/lib/generators/go/models.js +125 -0
- package/lib/generators/go/models.js.map +1 -0
- package/lib/generators/go/naming.d.ts +15 -0
- package/lib/generators/go/naming.d.ts.map +1 -0
- package/lib/generators/go/naming.js +36 -0
- package/lib/generators/go/naming.js.map +1 -0
- package/lib/generators/go/operations.d.ts +16 -0
- package/lib/generators/go/operations.d.ts.map +1 -0
- package/lib/generators/go/operations.js +200 -0
- package/lib/generators/go/operations.js.map +1 -0
- package/lib/generators/go/pagination.d.ts +5 -0
- package/lib/generators/go/pagination.d.ts.map +1 -0
- package/lib/generators/go/pagination.js +93 -0
- package/lib/generators/go/pagination.js.map +1 -0
- package/lib/generators/go/types.d.ts +4 -0
- package/lib/generators/go/types.d.ts.map +1 -0
- package/lib/generators/go/types.js +48 -0
- package/lib/generators/go/types.js.map +1 -0
- package/lib/generators/index.d.ts +2 -3
- package/lib/generators/index.d.ts.map +1 -1
- package/lib/generators/index.js +31 -53
- package/lib/generators/index.js.map +1 -1
- package/lib/generators/meta.d.ts +13 -0
- package/lib/generators/meta.d.ts.map +1 -0
- package/lib/generators/meta.js +157 -0
- package/lib/generators/meta.js.map +1 -0
- package/lib/{emitters → generators/mock}/faker.d.ts +4 -5
- package/lib/generators/mock/faker.d.ts.map +1 -0
- package/lib/generators/mock/faker.js +180 -0
- package/lib/generators/mock/faker.js.map +1 -0
- package/lib/generators/{mock.d.ts → mock/index.d.ts} +2 -2
- package/lib/generators/mock/index.d.ts.map +1 -0
- package/lib/generators/{mock.js → mock/index.js} +8 -8
- package/lib/generators/mock/index.js.map +1 -0
- package/lib/{emitters/mock.d.ts → generators/mock/render.d.ts} +2 -3
- package/lib/generators/mock/render.d.ts.map +1 -0
- package/lib/generators/mock/render.js +228 -0
- package/lib/generators/mock/render.js.map +1 -0
- package/lib/{emitters → generators/mock}/sample.d.ts +1 -2
- package/lib/generators/mock/sample.d.ts.map +1 -0
- package/lib/generators/mock/sample.js.map +1 -0
- package/lib/generators/mock/values.d.ts +33 -0
- package/lib/generators/mock/values.d.ts.map +1 -0
- package/lib/generators/mock/values.js +46 -0
- package/lib/generators/mock/values.js.map +1 -0
- package/lib/generators/options.d.ts +7 -0
- package/lib/generators/options.d.ts.map +1 -0
- package/lib/generators/options.js +74 -0
- package/lib/generators/options.js.map +1 -0
- package/lib/generators/php/client.d.ts +5 -0
- package/lib/generators/php/client.d.ts.map +1 -0
- package/lib/generators/php/client.js +38 -0
- package/lib/generators/php/client.js.map +1 -0
- package/lib/generators/php/descriptor.d.ts +7 -0
- package/lib/generators/php/descriptor.d.ts.map +1 -0
- package/lib/generators/php/descriptor.js +42 -0
- package/lib/generators/php/descriptor.js.map +1 -0
- package/lib/generators/php/index.d.ts +14 -0
- package/lib/generators/php/index.d.ts.map +1 -0
- package/lib/generators/php/index.js +166 -0
- package/lib/generators/php/index.js.map +1 -0
- package/lib/generators/php/models.d.ts +8 -0
- package/lib/generators/php/models.d.ts.map +1 -0
- package/lib/generators/php/models.js +200 -0
- package/lib/generators/php/models.js.map +1 -0
- package/lib/generators/php/naming.d.ts +16 -0
- package/lib/generators/php/naming.d.ts.map +1 -0
- package/lib/generators/php/naming.js +31 -0
- package/lib/generators/php/naming.js.map +1 -0
- package/lib/generators/php/operations.d.ts +21 -0
- package/lib/generators/php/operations.d.ts.map +1 -0
- package/lib/generators/php/operations.js +156 -0
- package/lib/generators/php/operations.js.map +1 -0
- package/lib/generators/php/pagination.d.ts +5 -0
- package/lib/generators/php/pagination.d.ts.map +1 -0
- package/lib/generators/php/pagination.js +68 -0
- package/lib/generators/php/pagination.js.map +1 -0
- package/lib/generators/php/types.d.ts +27 -0
- package/lib/generators/php/types.d.ts.map +1 -0
- package/lib/generators/php/types.js +128 -0
- package/lib/generators/php/types.js.map +1 -0
- package/lib/generators/python/client.d.ts +6 -0
- package/lib/generators/python/client.d.ts.map +1 -0
- package/lib/generators/python/client.js +80 -0
- package/lib/generators/python/client.js.map +1 -0
- package/lib/generators/python/descriptor.d.ts +9 -0
- package/lib/generators/python/descriptor.d.ts.map +1 -0
- package/lib/generators/python/descriptor.js +38 -0
- package/lib/generators/python/descriptor.js.map +1 -0
- package/lib/generators/python/index.d.ts +15 -0
- package/lib/generators/python/index.d.ts.map +1 -0
- package/lib/generators/python/index.js +197 -0
- package/lib/generators/python/index.js.map +1 -0
- package/lib/generators/python/models.d.ts +31 -0
- package/lib/generators/python/models.d.ts.map +1 -0
- package/lib/generators/python/models.js +203 -0
- package/lib/generators/python/models.js.map +1 -0
- package/lib/generators/python/naming.d.ts +22 -0
- package/lib/generators/python/naming.d.ts.map +1 -0
- package/lib/generators/python/naming.js +28 -0
- package/lib/generators/python/naming.js.map +1 -0
- package/lib/generators/python/operations.d.ts +4 -0
- package/lib/generators/python/operations.d.ts.map +1 -0
- package/lib/generators/python/operations.js +108 -0
- package/lib/generators/python/operations.js.map +1 -0
- package/lib/generators/python/pagination.d.ts +5 -0
- package/lib/generators/python/pagination.d.ts.map +1 -0
- package/lib/generators/python/pagination.js +95 -0
- package/lib/generators/python/pagination.js.map +1 -0
- package/lib/generators/python/types.d.ts +4 -0
- package/lib/generators/python/types.d.ts.map +1 -0
- package/lib/generators/python/types.js +45 -0
- package/lib/generators/python/types.js.map +1 -0
- package/lib/generators/resolve.d.ts.map +1 -1
- package/lib/generators/resolve.js +92 -13
- package/lib/generators/resolve.js.map +1 -1
- package/lib/generators/{swr.d.ts → swr/index.d.ts} +3 -3
- package/lib/generators/swr/index.d.ts.map +1 -0
- package/lib/generators/{swr.js → swr/index.js} +7 -10
- package/lib/generators/swr/index.js.map +1 -0
- package/lib/{emitters/swr.d.ts → generators/swr/render.d.ts} +2 -4
- package/lib/generators/swr/render.d.ts.map +1 -0
- package/lib/generators/swr/render.js +57 -0
- package/lib/generators/swr/render.js.map +1 -0
- package/lib/generators/{tanstack-query.d.ts → tanstack-query/index.d.ts} +3 -3
- package/lib/generators/tanstack-query/index.d.ts.map +1 -0
- package/lib/generators/{tanstack-query.js → tanstack-query/index.js} +11 -10
- package/lib/generators/tanstack-query/index.js.map +1 -0
- package/lib/{emitters/tanstack-query.d.ts → generators/tanstack-query/render.d.ts} +6 -5
- package/lib/generators/tanstack-query/render.d.ts.map +1 -0
- package/lib/{emitters/tanstack-query.js → generators/tanstack-query/render.js} +33 -21
- package/lib/generators/tanstack-query/render.js.map +1 -0
- package/lib/generators/{transformers.d.ts → transformers/index.d.ts} +2 -2
- package/lib/generators/transformers/index.d.ts.map +1 -0
- package/lib/generators/{transformers.js → transformers/index.js} +11 -8
- package/lib/generators/transformers/index.js.map +1 -0
- package/lib/{emitters/transformers.d.ts → generators/transformers/render.d.ts} +2 -2
- package/lib/generators/transformers/render.d.ts.map +1 -0
- package/lib/{emitters/transformers.js → generators/transformers/render.js} +125 -165
- package/lib/generators/transformers/render.js.map +1 -0
- package/lib/generators/types.d.ts +190 -12
- package/lib/generators/types.d.ts.map +1 -1
- package/lib/generators/typescript/banner.d.ts +12 -0
- package/lib/generators/typescript/banner.d.ts.map +1 -0
- package/lib/{emitters/emit-options.js → generators/typescript/banner.js} +2 -3
- package/lib/generators/typescript/banner.js.map +1 -0
- package/lib/generators/typescript/client.d.ts +25 -0
- package/lib/generators/typescript/client.d.ts.map +1 -0
- package/lib/generators/typescript/client.js +207 -0
- package/lib/generators/typescript/client.js.map +1 -0
- package/lib/generators/typescript/descriptor.d.ts +11 -0
- package/lib/generators/typescript/descriptor.d.ts.map +1 -0
- package/lib/generators/typescript/descriptor.js +97 -0
- package/lib/generators/typescript/descriptor.js.map +1 -0
- package/lib/generators/typescript/index.d.ts +20 -0
- package/lib/generators/typescript/index.d.ts.map +1 -0
- package/lib/generators/typescript/index.js +80 -0
- package/lib/generators/typescript/index.js.map +1 -0
- package/lib/generators/typescript/inline-runtime.d.ts +21 -0
- package/lib/generators/typescript/inline-runtime.d.ts.map +1 -0
- package/lib/generators/typescript/inline-runtime.js +114 -0
- package/lib/generators/typescript/inline-runtime.js.map +1 -0
- package/lib/generators/typescript/operation-signature.d.ts +23 -0
- package/lib/generators/typescript/operation-signature.d.ts.map +1 -0
- package/lib/generators/typescript/operation-signature.js +41 -0
- package/lib/generators/typescript/operation-signature.js.map +1 -0
- package/lib/generators/typescript/operation-types.d.ts +9 -0
- package/lib/generators/typescript/operation-types.d.ts.map +1 -0
- package/lib/generators/typescript/operation-types.js +11 -0
- package/lib/generators/typescript/operation-types.js.map +1 -0
- package/lib/generators/typescript/operations.d.ts +60 -0
- package/lib/generators/typescript/operations.d.ts.map +1 -0
- package/lib/generators/typescript/operations.js +386 -0
- package/lib/generators/typescript/operations.js.map +1 -0
- package/lib/generators/typescript/response-headers.d.ts +12 -0
- package/lib/generators/typescript/response-headers.d.ts.map +1 -0
- package/lib/generators/typescript/response-headers.js +40 -0
- package/lib/generators/typescript/response-headers.js.map +1 -0
- package/lib/generators/typescript/runtime/auth.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/auth.js.map +1 -0
- package/lib/{runtime → generators/typescript/runtime}/create-client.d.ts +7 -2
- package/lib/generators/typescript/runtime/create-client.d.ts.map +1 -0
- package/lib/{runtime → generators/typescript/runtime}/create-client.js +84 -30
- package/lib/generators/typescript/runtime/create-client.js.map +1 -0
- package/lib/generators/typescript/runtime/errors.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/errors.js.map +1 -0
- package/lib/generators/typescript/runtime/index.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/index.js.map +1 -0
- package/lib/generators/typescript/runtime/multipart.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/multipart.js.map +1 -0
- package/lib/{runtime → generators/typescript/runtime}/paginate.d.ts +2 -2
- package/lib/generators/typescript/runtime/paginate.d.ts.map +1 -0
- package/lib/{runtime → generators/typescript/runtime}/paginate.js +12 -12
- package/lib/generators/typescript/runtime/paginate.js.map +1 -0
- package/lib/generators/typescript/runtime/parse.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/parse.js.map +1 -0
- package/lib/generators/typescript/runtime/retry.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/retry.js.map +1 -0
- package/lib/generators/typescript/runtime/send.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/send.js.map +1 -0
- package/lib/generators/typescript/runtime/setup.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/setup.js.map +1 -0
- package/lib/generators/typescript/runtime/sse.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/sse.js.map +1 -0
- package/lib/{runtime → generators/typescript/runtime}/types.d.ts +17 -95
- package/lib/generators/typescript/runtime/types.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/types.js.map +1 -0
- package/lib/generators/typescript/runtime/url.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/url.js.map +1 -0
- package/lib/generators/typescript/type-guards.d.ts +4 -0
- package/lib/generators/typescript/type-guards.d.ts.map +1 -0
- package/lib/{emitters → generators/typescript}/type-guards.js +18 -52
- package/lib/generators/typescript/type-guards.js.map +1 -0
- package/lib/generators/typescript/types.d.ts +8 -0
- package/lib/generators/typescript/types.d.ts.map +1 -0
- package/lib/generators/typescript/types.js +132 -0
- package/lib/generators/typescript/types.js.map +1 -0
- package/lib/generators/{zod.d.ts → zod/index.d.ts} +2 -2
- package/lib/generators/zod/index.d.ts.map +1 -0
- package/lib/generators/{zod.js → zod/index.js} +5 -7
- package/lib/generators/zod/index.js.map +1 -0
- package/lib/{emitters/zod.d.ts → generators/zod/schemas.d.ts} +4 -5
- package/lib/generators/zod/schemas.d.ts.map +1 -0
- package/lib/{emitters/zod.js → generators/zod/schemas.js} +118 -154
- package/lib/generators/zod/schemas.js.map +1 -0
- package/lib/index.d.ts +8 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +18 -11
- package/lib/index.js.map +1 -1
- package/lib/intermediate-representation/build.d.ts +8 -1
- package/lib/intermediate-representation/build.d.ts.map +1 -1
- package/lib/intermediate-representation/build.js +59 -4
- package/lib/intermediate-representation/build.js.map +1 -1
- package/lib/intermediate-representation/model.d.ts +26 -1
- package/lib/intermediate-representation/model.d.ts.map +1 -1
- package/lib/intermediate-representation/model.js.map +1 -1
- package/lib/intermediate-representation/sanitize-identifiers.d.ts +1 -10
- package/lib/intermediate-representation/sanitize-identifiers.d.ts.map +1 -1
- package/lib/intermediate-representation/sanitize-identifiers.js +37 -38
- package/lib/intermediate-representation/sanitize-identifiers.js.map +1 -1
- package/lib/{emitters/pagination.d.ts → pagination.d.ts} +39 -15
- package/lib/pagination.d.ts.map +1 -0
- package/lib/{emitters/pagination.js → pagination.js} +13 -52
- package/lib/pagination.js.map +1 -0
- package/lib/pipeline.d.ts +17 -0
- package/lib/pipeline.d.ts.map +1 -0
- package/lib/pipeline.js +244 -0
- package/lib/pipeline.js.map +1 -0
- package/lib/plugin.d.ts +4 -4
- package/lib/plugin.d.ts.map +1 -1
- package/lib/plugin.js +12 -9
- package/lib/plugin.js.map +1 -1
- package/lib/printers/go.d.ts +33 -0
- package/lib/printers/go.d.ts.map +1 -0
- package/lib/printers/go.js +209 -0
- package/lib/printers/go.js.map +1 -0
- package/lib/printers/index.d.ts +5 -0
- package/lib/printers/index.d.ts.map +1 -0
- package/lib/printers/index.js +9 -0
- package/lib/printers/index.js.map +1 -0
- package/lib/printers/php.d.ts +21 -0
- package/lib/printers/php.d.ts.map +1 -0
- package/lib/printers/php.js +68 -0
- package/lib/printers/php.js.map +1 -0
- package/lib/printers/python.d.ts +31 -0
- package/lib/printers/python.d.ts.map +1 -0
- package/lib/printers/python.js +101 -0
- package/lib/printers/python.js.map +1 -0
- package/lib/printers/typescript.d.ts +82 -0
- package/lib/printers/typescript.d.ts.map +1 -0
- package/lib/printers/typescript.js +268 -0
- package/lib/printers/typescript.js.map +1 -0
- package/lib/reserved-names.d.ts +8 -0
- package/lib/reserved-names.d.ts.map +1 -0
- package/lib/{emitters/reserved-names.js → reserved-names.js} +16 -27
- package/lib/reserved-names.js.map +1 -0
- package/lib/runtime-contract.d.ts +62 -2
- package/lib/runtime-contract.d.ts.map +1 -1
- package/lib/runtime-contract.js +3 -3
- package/lib/runtime-contract.js.map +1 -1
- package/lib/runtime-sources/go.d.ts +2 -0
- package/lib/runtime-sources/go.d.ts.map +1 -0
- package/lib/runtime-sources/go.js +3 -0
- package/lib/runtime-sources/go.js.map +1 -0
- package/lib/runtime-sources/php.d.ts +2 -0
- package/lib/runtime-sources/php.d.ts.map +1 -0
- package/lib/runtime-sources/php.js +3 -0
- package/lib/runtime-sources/php.js.map +1 -0
- package/lib/runtime-sources/python.d.ts +12 -0
- package/lib/runtime-sources/python.d.ts.map +1 -0
- package/lib/runtime-sources/python.js +12 -0
- package/lib/runtime-sources/python.js.map +1 -0
- package/lib/runtime-sources/typescript.d.ts +36 -0
- package/lib/runtime-sources/typescript.d.ts.map +1 -0
- package/lib/runtime-sources/typescript.js +152 -0
- package/lib/runtime-sources/typescript.js.map +1 -0
- package/lib/runtime-sources.d.ts +5 -0
- package/lib/runtime-sources.d.ts.map +1 -0
- package/lib/runtime-sources.js +10 -0
- package/lib/runtime-sources.js.map +1 -0
- package/lib/setup-bake.d.ts.map +1 -0
- package/lib/{emitters/setup-bake.js → setup-bake.js} +11 -2
- package/lib/setup-bake.js.map +1 -0
- package/lib/types.d.ts +38 -8
- package/lib/types.d.ts.map +1 -1
- package/package.json +40 -4
- package/lib/emitters/auth.d.ts +0 -14
- package/lib/emitters/auth.d.ts.map +0 -1
- package/lib/emitters/auth.js +0 -30
- package/lib/emitters/auth.js.map +0 -1
- package/lib/emitters/client-assembly.d.ts +0 -15
- package/lib/emitters/client-assembly.d.ts.map +0 -1
- package/lib/emitters/client-assembly.js +0 -358
- package/lib/emitters/client-assembly.js.map +0 -1
- package/lib/emitters/descriptor.d.ts +0 -22
- package/lib/emitters/descriptor.d.ts.map +0 -1
- package/lib/emitters/descriptor.js +0 -199
- package/lib/emitters/descriptor.js.map +0 -1
- package/lib/emitters/emit-options.d.ts +0 -67
- package/lib/emitters/emit-options.d.ts.map +0 -1
- package/lib/emitters/emit-options.js.map +0 -1
- package/lib/emitters/faker.d.ts.map +0 -1
- package/lib/emitters/faker.js +0 -221
- package/lib/emitters/faker.js.map +0 -1
- package/lib/emitters/identifier.d.ts +0 -34
- package/lib/emitters/identifier.d.ts.map +0 -1
- package/lib/emitters/identifier.js +0 -104
- package/lib/emitters/identifier.js.map +0 -1
- package/lib/emitters/inline-runtime.d.ts +0 -11
- package/lib/emitters/inline-runtime.d.ts.map +0 -1
- package/lib/emitters/inline-runtime.js +0 -99
- package/lib/emitters/inline-runtime.js.map +0 -1
- package/lib/emitters/jsdoc.d.ts +0 -9
- package/lib/emitters/jsdoc.d.ts.map +0 -1
- package/lib/emitters/jsdoc.js +0 -83
- package/lib/emitters/jsdoc.js.map +0 -1
- package/lib/emitters/mock.d.ts.map +0 -1
- package/lib/emitters/mock.js +0 -265
- package/lib/emitters/mock.js.map +0 -1
- package/lib/emitters/operation-aliases.d.ts +0 -27
- package/lib/emitters/operation-aliases.d.ts.map +0 -1
- package/lib/emitters/operation-aliases.js +0 -150
- package/lib/emitters/operation-aliases.js.map +0 -1
- package/lib/emitters/operation-signature.d.ts +0 -24
- package/lib/emitters/operation-signature.d.ts.map +0 -1
- package/lib/emitters/operation-signature.js +0 -42
- package/lib/emitters/operation-signature.js.map +0 -1
- package/lib/emitters/operation-types.d.ts +0 -32
- package/lib/emitters/operation-types.d.ts.map +0 -1
- package/lib/emitters/operation-types.js +0 -117
- package/lib/emitters/operation-types.js.map +0 -1
- package/lib/emitters/operations.d.ts +0 -41
- package/lib/emitters/operations.d.ts.map +0 -1
- package/lib/emitters/operations.js +0 -35
- package/lib/emitters/operations.js.map +0 -1
- package/lib/emitters/pagination.d.ts.map +0 -1
- package/lib/emitters/pagination.js.map +0 -1
- package/lib/emitters/reserved-names.d.ts +0 -5
- package/lib/emitters/reserved-names.d.ts.map +0 -1
- package/lib/emitters/reserved-names.js.map +0 -1
- package/lib/emitters/response-headers.d.ts +0 -14
- package/lib/emitters/response-headers.d.ts.map +0 -1
- package/lib/emitters/response-headers.js +0 -91
- package/lib/emitters/response-headers.js.map +0 -1
- package/lib/emitters/runtime-sources.d.ts +0 -16
- package/lib/emitters/runtime-sources.d.ts.map +0 -1
- package/lib/emitters/runtime-sources.js +0 -16
- package/lib/emitters/runtime-sources.js.map +0 -1
- package/lib/emitters/sample.d.ts.map +0 -1
- package/lib/emitters/sample.js.map +0 -1
- package/lib/emitters/setup-bake.d.ts.map +0 -1
- package/lib/emitters/setup-bake.js.map +0 -1
- package/lib/emitters/sse.d.ts +0 -10
- package/lib/emitters/sse.d.ts.map +0 -1
- package/lib/emitters/sse.js +0 -46
- package/lib/emitters/sse.js.map +0 -1
- package/lib/emitters/support.d.ts +0 -18
- package/lib/emitters/support.d.ts.map +0 -1
- package/lib/emitters/support.js +0 -37
- package/lib/emitters/support.js.map +0 -1
- package/lib/emitters/swr.d.ts.map +0 -1
- package/lib/emitters/swr.js +0 -88
- package/lib/emitters/swr.js.map +0 -1
- package/lib/emitters/tanstack-query.d.ts.map +0 -1
- package/lib/emitters/tanstack-query.js.map +0 -1
- package/lib/emitters/transformers.d.ts.map +0 -1
- package/lib/emitters/transformers.js.map +0 -1
- package/lib/emitters/ts.d.ts +0 -42
- package/lib/emitters/ts.d.ts.map +0 -1
- package/lib/emitters/ts.js +0 -116
- package/lib/emitters/ts.js.map +0 -1
- package/lib/emitters/type-guards.d.ts +0 -21
- package/lib/emitters/type-guards.d.ts.map +0 -1
- package/lib/emitters/type-guards.js.map +0 -1
- package/lib/emitters/types.d.ts +0 -15
- package/lib/emitters/types.d.ts.map +0 -1
- package/lib/emitters/types.js +0 -125
- package/lib/emitters/types.js.map +0 -1
- package/lib/emitters/wrapper-support.d.ts.map +0 -1
- package/lib/emitters/wrapper-support.js +0 -127
- package/lib/emitters/wrapper-support.js.map +0 -1
- package/lib/emitters/zod.d.ts.map +0 -1
- package/lib/emitters/zod.js.map +0 -1
- package/lib/generators/anchor.d.ts +0 -9
- package/lib/generators/anchor.d.ts.map +0 -1
- package/lib/generators/anchor.js +0 -10
- package/lib/generators/anchor.js.map +0 -1
- package/lib/generators/mock.d.ts.map +0 -1
- package/lib/generators/mock.js.map +0 -1
- package/lib/generators/sdk.d.ts +0 -12
- package/lib/generators/sdk.d.ts.map +0 -1
- package/lib/generators/sdk.js +0 -26
- package/lib/generators/sdk.js.map +0 -1
- package/lib/generators/swr.d.ts.map +0 -1
- package/lib/generators/swr.js.map +0 -1
- package/lib/generators/tanstack-query.d.ts.map +0 -1
- package/lib/generators/tanstack-query.js.map +0 -1
- package/lib/generators/transformers.d.ts.map +0 -1
- package/lib/generators/transformers.js.map +0 -1
- package/lib/generators/zod.d.ts.map +0 -1
- package/lib/generators/zod.js.map +0 -1
- package/lib/runtime/auth.d.ts.map +0 -1
- package/lib/runtime/auth.js.map +0 -1
- package/lib/runtime/create-client.d.ts.map +0 -1
- package/lib/runtime/create-client.js.map +0 -1
- package/lib/runtime/errors.d.ts.map +0 -1
- package/lib/runtime/errors.js.map +0 -1
- package/lib/runtime/index.d.ts.map +0 -1
- package/lib/runtime/index.js.map +0 -1
- package/lib/runtime/multipart.d.ts.map +0 -1
- package/lib/runtime/multipart.js.map +0 -1
- package/lib/runtime/paginate.d.ts.map +0 -1
- package/lib/runtime/paginate.js.map +0 -1
- package/lib/runtime/parse.d.ts.map +0 -1
- package/lib/runtime/parse.js.map +0 -1
- package/lib/runtime/retry.d.ts.map +0 -1
- package/lib/runtime/retry.js.map +0 -1
- package/lib/runtime/send.d.ts.map +0 -1
- package/lib/runtime/send.js.map +0 -1
- package/lib/runtime/setup.d.ts.map +0 -1
- package/lib/runtime/setup.js.map +0 -1
- package/lib/runtime/sse.d.ts.map +0 -1
- package/lib/runtime/sse.js.map +0 -1
- package/lib/runtime/types.d.ts.map +0 -1
- package/lib/runtime/types.js.map +0 -1
- package/lib/runtime/url.d.ts.map +0 -1
- package/lib/runtime/url.js.map +0 -1
- /package/lib/{emitters → generators/mock}/sample.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/auth.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/auth.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/errors.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/errors.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/index.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/index.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/multipart.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/multipart.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/parse.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/parse.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/retry.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/retry.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/send.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/send.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/setup.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/setup.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/sse.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/sse.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/types.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/url.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/url.js +0 -0
- /package/lib/{emitters/setup-bake.d.ts → setup-bake.d.ts} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Emits Zod schemas from the IR. Each named schema becomes an
|
|
2
|
-
// `export const <Name>Schema = z.<…>;`
|
|
3
|
-
// type
|
|
2
|
+
// `export const <Name>Schema = z.<…>;` — source-text templates mirroring the
|
|
3
|
+
// type renderer (`typescript/types.ts`) but targeting runtime validators instead of types.
|
|
4
4
|
// Operations with a JSON request or response body additionally land in the
|
|
5
5
|
// `operationSchemas` map, which powers the `zodValidation` client middleware.
|
|
6
6
|
//
|
|
@@ -8,134 +8,105 @@
|
|
|
8
8
|
// (`.min/.max/.int/.gt/.lt/.regex`); format helpers (`.email/.uuid/.url`) diverge
|
|
9
9
|
// between major versions and are deferred. Refs become `z.lazy(() => …Schema)`,
|
|
10
10
|
// which sidesteps declaration ordering and recursion uniformly.
|
|
11
|
-
import { allOperations, } from '
|
|
12
|
-
import { safeIdent } from '
|
|
13
|
-
|
|
14
|
-
import { pascalCase } from './support.js';
|
|
15
|
-
import { jsdoc, literalExpression, printStatements, ts } from './ts.js';
|
|
16
|
-
const { factory } = ts;
|
|
11
|
+
import { allOperations, } from '@redocly/client-generator';
|
|
12
|
+
import { codeLiteral, pascalCase, safeIdent } from '@redocly/client-generator/printers/typescript';
|
|
13
|
+
const INDENT = ' ';
|
|
17
14
|
/** `<Name>Schema` — the const identifier a named schema is bound to. */
|
|
18
15
|
function schemaConstName(name) {
|
|
19
16
|
return `${pascalCase(name)}Schema`;
|
|
20
17
|
}
|
|
21
|
-
/** `z` member access: `z.<method>`. */
|
|
22
|
-
function zMember(method) {
|
|
23
|
-
return factory.createPropertyAccessExpression(factory.createIdentifier('z'), method);
|
|
24
|
-
}
|
|
25
|
-
/** `z.<method>(...args)`. */
|
|
26
|
-
function zCall(method, args = []) {
|
|
27
|
-
return factory.createCallExpression(zMember(method), undefined, args);
|
|
28
|
-
}
|
|
29
|
-
/** `<expr>.<method>(...args)` — chains a refinement onto a base expression. */
|
|
30
|
-
function chain(expr, method, args = []) {
|
|
31
|
-
return factory.createCallExpression(factory.createPropertyAccessExpression(expr, method), undefined, args);
|
|
32
|
-
}
|
|
33
18
|
const NO_SCHEMAS = new Map();
|
|
34
|
-
/** Map an IR schema to the Zod expression that validates it. */
|
|
35
|
-
export function schemaToZodExpression(schema, byName = NO_SCHEMAS) {
|
|
36
|
-
return withRefinements(baseExpression(schema, byName), schema);
|
|
19
|
+
/** Map an IR schema to the Zod expression (source text) that validates it. */
|
|
20
|
+
export function schemaToZodExpression(schema, byName = NO_SCHEMAS, indent = '') {
|
|
21
|
+
return withRefinements(baseExpression(schema, byName, indent), schema);
|
|
37
22
|
}
|
|
38
|
-
function baseExpression(schema, byName) {
|
|
23
|
+
function baseExpression(schema, byName, indent) {
|
|
39
24
|
switch (schema.kind) {
|
|
40
25
|
case 'scalar':
|
|
41
26
|
return scalarExpression(schema.scalar, schema.metadata);
|
|
42
27
|
case 'object':
|
|
43
|
-
return objectExpression(schema.properties, byName);
|
|
28
|
+
return objectExpression(schema.properties, byName, indent);
|
|
44
29
|
case 'array':
|
|
45
|
-
return
|
|
30
|
+
return `z.array(${schemaToZodExpression(schema.items, byName, indent)})`;
|
|
46
31
|
case 'record':
|
|
47
|
-
return
|
|
32
|
+
return `z.record(z.string(), ${schemaToZodExpression(schema.value, byName, indent)})`;
|
|
48
33
|
case 'ref':
|
|
49
|
-
return
|
|
34
|
+
return `z.lazy(() => ${schemaConstName(schema.name)})`;
|
|
50
35
|
case 'literal':
|
|
51
|
-
return
|
|
36
|
+
return `z.literal(${codeLiteral(schema.value)})`;
|
|
52
37
|
case 'enum':
|
|
53
38
|
return enumExpression(schema.values);
|
|
54
39
|
case 'union':
|
|
55
|
-
return unionExpression(schema.members, byName);
|
|
40
|
+
return unionExpression(schema.members, byName, indent);
|
|
56
41
|
case 'intersection':
|
|
57
|
-
return
|
|
42
|
+
return schema.members
|
|
43
|
+
.map((member) => schemaToZodExpression(member, byName, indent))
|
|
44
|
+
.reduce((acc, next) => `${acc}.and(${next})`);
|
|
58
45
|
case 'null':
|
|
59
|
-
return
|
|
46
|
+
return 'z.null()';
|
|
60
47
|
case 'unknown':
|
|
61
|
-
return
|
|
48
|
+
return 'z.unknown()';
|
|
62
49
|
case 'omit':
|
|
63
|
-
return omitExpression(schema.base, schema.keys, byName);
|
|
50
|
+
return omitExpression(schema.base, schema.keys, byName, indent);
|
|
64
51
|
}
|
|
65
52
|
}
|
|
66
53
|
function scalarExpression(scalar, metadata) {
|
|
67
54
|
switch (scalar) {
|
|
68
55
|
case 'string':
|
|
69
|
-
// `format: binary` is typed as `Blob` (see types.ts); validate it as one so the
|
|
70
|
-
// schema agrees with the generated type instead of expecting a string.
|
|
71
|
-
|
|
72
|
-
return zCall('instanceof', [factory.createIdentifier('Blob')]);
|
|
73
|
-
}
|
|
74
|
-
return zCall('string');
|
|
56
|
+
// `format: binary` is typed as `Blob` (see typescript/types.ts); validate it as one so the
|
|
57
|
+
// zod schema agrees with the generated type instead of expecting a string.
|
|
58
|
+
return metadata?.format === 'binary' ? 'z.instanceof(Blob)' : 'z.string()';
|
|
75
59
|
case 'integer':
|
|
76
|
-
return
|
|
60
|
+
return 'z.number().int()';
|
|
77
61
|
case 'number':
|
|
78
|
-
return
|
|
62
|
+
return 'z.number()';
|
|
79
63
|
case 'boolean':
|
|
80
|
-
return
|
|
64
|
+
return 'z.boolean()';
|
|
81
65
|
}
|
|
82
66
|
}
|
|
83
|
-
/**
|
|
84
|
-
function
|
|
85
|
-
|
|
86
|
-
const value = p.required
|
|
87
|
-
? schemaToZodExpression(p.schema, byName)
|
|
88
|
-
: chain(schemaToZodExpression(p.schema, byName), 'optional');
|
|
89
|
-
const safe = safeIdent(p.name);
|
|
90
|
-
const key = safe === p.name ? factory.createIdentifier(p.name) : factory.createStringLiteral(p.name);
|
|
91
|
-
return factory.createPropertyAssignment(key, value);
|
|
92
|
-
});
|
|
93
|
-
return zCall('object', [factory.createObjectLiteralExpression(props, props.length > 0)]);
|
|
67
|
+
/** A bare identifier key when valid, a quoted key otherwise. */
|
|
68
|
+
function propertyKeyText(name) {
|
|
69
|
+
return safeIdent(name) === name ? name : JSON.stringify(name);
|
|
94
70
|
}
|
|
95
|
-
/** `z.
|
|
96
|
-
function
|
|
97
|
-
|
|
98
|
-
|
|
71
|
+
/** `z.object({ <key>: <expr>(.optional() when !required), … })` — multiline when non-empty. */
|
|
72
|
+
function objectExpression(properties, byName, indent) {
|
|
73
|
+
if (properties.length === 0)
|
|
74
|
+
return 'z.object({})';
|
|
75
|
+
const inner = indent + INDENT;
|
|
76
|
+
const lines = properties.map((property, index) => {
|
|
77
|
+
const expr = schemaToZodExpression(property.schema, byName, inner);
|
|
78
|
+
const value = property.required ? expr : `${expr}.optional()`;
|
|
79
|
+
const comma = index === properties.length - 1 ? '' : ',';
|
|
80
|
+
return `${inner}${propertyKeyText(property.name)}: ${value}${comma}`;
|
|
81
|
+
});
|
|
82
|
+
return `z.object({\n${lines.join('\n')}\n${indent}})`;
|
|
99
83
|
}
|
|
100
84
|
/** All-string values → `z.enum([…])`; otherwise → a union of literals. */
|
|
101
85
|
function enumExpression(values) {
|
|
102
|
-
if (values.every((
|
|
103
|
-
return
|
|
104
|
-
factory.createArrayLiteralExpression(values.map((v) => factory.createStringLiteral(v)), false),
|
|
105
|
-
]);
|
|
86
|
+
if (values.every((value) => typeof value === 'string')) {
|
|
87
|
+
return `z.enum([${values.map((value) => JSON.stringify(value)).join(', ')}])`;
|
|
106
88
|
}
|
|
107
|
-
return
|
|
108
|
-
factory.createArrayLiteralExpression(values.map((v) => zCall('literal', [literalExpression(v)])), false),
|
|
109
|
-
]);
|
|
89
|
+
return `z.union([${values.map((value) => `z.literal(${codeLiteral(value)})`).join(', ')}])`;
|
|
110
90
|
}
|
|
111
91
|
/** `z.union([…])`; a single member collapses to that member's expression. */
|
|
112
|
-
function unionExpression(members, byName) {
|
|
113
|
-
const exprs = members.map((member) => schemaToZodExpression(member, byName));
|
|
92
|
+
function unionExpression(members, byName, indent) {
|
|
93
|
+
const exprs = members.map((member) => schemaToZodExpression(member, byName, indent));
|
|
114
94
|
if (exprs.length === 1)
|
|
115
95
|
return exprs[0];
|
|
116
|
-
return
|
|
117
|
-
}
|
|
118
|
-
/** `a.and(b).and(c)` — left-folds `.and` over the members. */
|
|
119
|
-
function intersectionExpression(members, byName) {
|
|
120
|
-
const exprs = members.map((member) => schemaToZodExpression(member, byName));
|
|
121
|
-
return exprs.reduce((acc, next) => chain(acc, 'and', [next]));
|
|
96
|
+
return `z.union([${exprs.join(', ')}])`;
|
|
122
97
|
}
|
|
123
98
|
/**
|
|
124
99
|
* `<Base>Schema.omit({ k1: true, … })` when the base is a plain object schema.
|
|
125
100
|
* `.omit` exists only on `ZodObject` — for any other base (an `allOf` intersection,
|
|
126
101
|
* a union, …) the omission is distributed into the base's object members instead.
|
|
127
102
|
*/
|
|
128
|
-
function omitExpression(base, keys, byName) {
|
|
103
|
+
function omitExpression(base, keys, byName, indent) {
|
|
129
104
|
const target = byName.get(base);
|
|
130
105
|
if (target && target.kind !== 'object') {
|
|
131
|
-
return schemaToZodExpression(applyOmit(target, keys, byName, new Set([base])), byName);
|
|
106
|
+
return schemaToZodExpression(applyOmit(target, keys, byName, new Set([base])), byName, indent);
|
|
132
107
|
}
|
|
133
|
-
const mask =
|
|
134
|
-
|
|
135
|
-
const key = safe === k ? factory.createIdentifier(k) : factory.createStringLiteral(k);
|
|
136
|
-
return factory.createPropertyAssignment(key, factory.createTrue());
|
|
137
|
-
}), false);
|
|
138
|
-
return chain(factory.createIdentifier(schemaConstName(base)), 'omit', [mask]);
|
|
108
|
+
const mask = keys.map((key) => `${propertyKeyText(key)}: true`).join(', ');
|
|
109
|
+
return `${schemaConstName(base)}.omit({ ${mask} })`;
|
|
139
110
|
}
|
|
140
111
|
/**
|
|
141
112
|
* Remove `keys` from a schema that is not a plain object: objects drop the properties,
|
|
@@ -182,64 +153,43 @@ function withRefinements(expr, schema) {
|
|
|
182
153
|
let out = expr;
|
|
183
154
|
if (schema.kind === 'scalar' && schema.scalar === 'string') {
|
|
184
155
|
if (m.minLength !== undefined)
|
|
185
|
-
out =
|
|
156
|
+
out = `${out}.min(${m.minLength})`;
|
|
186
157
|
if (m.maxLength !== undefined)
|
|
187
|
-
out =
|
|
158
|
+
out = `${out}.max(${m.maxLength})`;
|
|
188
159
|
if (m.pattern !== undefined)
|
|
189
|
-
out =
|
|
160
|
+
out = `${out}.regex(new RegExp(${JSON.stringify(m.pattern)}))`;
|
|
190
161
|
}
|
|
191
162
|
if (schema.kind === 'scalar' && (schema.scalar === 'number' || schema.scalar === 'integer')) {
|
|
192
|
-
|
|
163
|
+
if (m.minimum !== undefined)
|
|
164
|
+
out = `${out}.min(${m.minimum})`;
|
|
165
|
+
if (m.maximum !== undefined)
|
|
166
|
+
out = `${out}.max(${m.maximum})`;
|
|
167
|
+
if (m.exclusiveMinimum !== undefined)
|
|
168
|
+
out = `${out}.gt(${m.exclusiveMinimum})`;
|
|
169
|
+
if (m.exclusiveMaximum !== undefined)
|
|
170
|
+
out = `${out}.lt(${m.exclusiveMaximum})`;
|
|
193
171
|
}
|
|
194
172
|
if (schema.kind === 'array') {
|
|
195
173
|
if (m.minItems !== undefined)
|
|
196
|
-
out =
|
|
174
|
+
out = `${out}.min(${m.minItems})`;
|
|
197
175
|
if (m.maxItems !== undefined)
|
|
198
|
-
out =
|
|
176
|
+
out = `${out}.max(${m.maxItems})`;
|
|
199
177
|
}
|
|
200
178
|
return out;
|
|
201
179
|
}
|
|
202
|
-
function numericRefinements(expr, m) {
|
|
203
|
-
let out = expr;
|
|
204
|
-
if (m.minimum !== undefined)
|
|
205
|
-
out = chain(out, 'min', [literalExpression(m.minimum)]);
|
|
206
|
-
if (m.maximum !== undefined)
|
|
207
|
-
out = chain(out, 'max', [literalExpression(m.maximum)]);
|
|
208
|
-
if (m.exclusiveMinimum !== undefined)
|
|
209
|
-
out = chain(out, 'gt', [literalExpression(m.exclusiveMinimum)]);
|
|
210
|
-
if (m.exclusiveMaximum !== undefined)
|
|
211
|
-
out = chain(out, 'lt', [literalExpression(m.exclusiveMaximum)]);
|
|
212
|
-
return out;
|
|
213
|
-
}
|
|
214
|
-
/** `new RegExp("<pattern>")` — robust across printers regardless of pattern content. */
|
|
215
|
-
function regexExpression(pattern) {
|
|
216
|
-
return factory.createNewExpression(factory.createIdentifier('RegExp'), undefined, [
|
|
217
|
-
factory.createStringLiteral(pattern),
|
|
218
|
-
]);
|
|
219
|
-
}
|
|
220
|
-
/** `export const <Name>Schema = <expr>;` for one named schema. */
|
|
221
|
-
function schemaConstStatement(named, byName) {
|
|
222
|
-
return factory.createVariableStatement([factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([
|
|
223
|
-
factory.createVariableDeclaration(schemaConstName(named.name), undefined, undefined, schemaToZodExpression(named.schema, byName)),
|
|
224
|
-
], ts.NodeFlags.Const));
|
|
225
|
-
}
|
|
226
|
-
/** `import { z } from 'zod';` */
|
|
227
|
-
function zodImport() {
|
|
228
|
-
return factory.createImportDeclaration(undefined, factory.createImportClause(false, undefined, factory.createNamedImports([
|
|
229
|
-
factory.createImportSpecifier(false, undefined, factory.createIdentifier('z')),
|
|
230
|
-
])), factory.createStringLiteral('zod'));
|
|
231
|
-
}
|
|
232
180
|
function operationSchemaEntries(model, byName) {
|
|
233
181
|
const entries = [];
|
|
234
182
|
for (const op of allOperations(model.services)) {
|
|
235
|
-
if (
|
|
183
|
+
if (op.sse !== undefined)
|
|
236
184
|
continue;
|
|
237
185
|
const requestBody = op.requestBody;
|
|
238
186
|
const request = requestBody && requestBody.contentType.toLowerCase().includes('json')
|
|
239
|
-
? schemaToZodExpression(requestBody.schema, byName)
|
|
187
|
+
? schemaToZodExpression(requestBody.schema, byName, INDENT)
|
|
240
188
|
: undefined;
|
|
241
189
|
const jsonResponse = op.successResponses.find((response) => response.contentType.toLowerCase().includes('json'));
|
|
242
|
-
const response = jsonResponse
|
|
190
|
+
const response = jsonResponse
|
|
191
|
+
? schemaToZodExpression(jsonResponse.schema, byName, INDENT)
|
|
192
|
+
: undefined;
|
|
243
193
|
if (!request && !response)
|
|
244
194
|
continue;
|
|
245
195
|
// The SPEC operationId — the middleware looks entries up by `ctx.operation.id`,
|
|
@@ -248,32 +198,34 @@ function operationSchemaEntries(model, byName) {
|
|
|
248
198
|
}
|
|
249
199
|
return entries;
|
|
250
200
|
}
|
|
251
|
-
|
|
252
|
-
function entryKey(name) {
|
|
253
|
-
return safeIdent(name) === name
|
|
254
|
-
? factory.createIdentifier(name)
|
|
255
|
-
: factory.createStringLiteral(name);
|
|
256
|
-
}
|
|
257
|
-
function operationSchemasStatement(entries) {
|
|
258
|
-
const zodTypeNode = () => factory.createTypeReferenceNode(factory.createQualifiedName(factory.createIdentifier('z'), 'ZodType'));
|
|
201
|
+
function operationSchemasBlock(entries) {
|
|
259
202
|
// The explicit `z.ZodType` annotation keeps the declaration-emit size proportional to
|
|
260
203
|
// the operation count: the inferred type would serialize every schema's zod generics
|
|
261
204
|
// and overflow tsc's limit (TS7056) on large APIs under `declaration: true`.
|
|
262
|
-
const
|
|
263
|
-
entry.
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
205
|
+
const typeLines = entries.flatMap((entry) => [
|
|
206
|
+
`${INDENT}${propertyKeyText(entry.name)}: {`,
|
|
207
|
+
...(entry.request ? [`${INDENT}${INDENT}request: z.ZodType;`] : []),
|
|
208
|
+
...(entry.response ? [`${INDENT}${INDENT}response: z.ZodType;`] : []),
|
|
209
|
+
`${INDENT}};`,
|
|
210
|
+
]);
|
|
211
|
+
const valueLines = entries.map((entry, index) => {
|
|
212
|
+
const fields = [
|
|
213
|
+
...(entry.request ? [`request: ${entry.request}`] : []),
|
|
214
|
+
...(entry.response ? [`response: ${entry.response}`] : []),
|
|
215
|
+
].join(', ');
|
|
216
|
+
const comma = index === entries.length - 1 ? '' : ',';
|
|
217
|
+
return `${INDENT}${propertyKeyText(entry.name)}: { ${fields} }${comma}`;
|
|
218
|
+
});
|
|
219
|
+
return [
|
|
220
|
+
'/**',
|
|
221
|
+
' * Request/response validators by operationId — powers `zodValidation`, or import one directly.',
|
|
222
|
+
' */',
|
|
223
|
+
'export const operationSchemas: {',
|
|
224
|
+
...typeLines,
|
|
225
|
+
'} = {',
|
|
226
|
+
...valueLines,
|
|
227
|
+
'};',
|
|
228
|
+
].join('\n');
|
|
277
229
|
}
|
|
278
230
|
// The validation middleware, spliced verbatim after the schemas (matches the printer's
|
|
279
231
|
// double-quote/4-space style). Structurally compatible with the client's `Middleware`
|
|
@@ -288,11 +240,19 @@ export type ZodViolation = { path: string; message: string; received: string };
|
|
|
288
240
|
|
|
289
241
|
/** A request or response payload failed validation. Requests throw it; response handling is configurable. */
|
|
290
242
|
export class ZodValidationError extends Error {
|
|
243
|
+
// Declared and assigned in the body, NOT as constructor parameter properties: those
|
|
244
|
+
// need a transform, so they break \`node --experimental-strip-types\` for anything
|
|
245
|
+
// importing this module (the generated CLI runs that way).
|
|
246
|
+
readonly operationId: string;
|
|
247
|
+
readonly direction: "request" | "response";
|
|
248
|
+
readonly issues: z.ZodError["issues"];
|
|
249
|
+
readonly violations: ZodViolation[];
|
|
250
|
+
|
|
291
251
|
constructor(
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
252
|
+
operationId: string,
|
|
253
|
+
direction: "request" | "response",
|
|
254
|
+
issues: z.ZodError["issues"],
|
|
255
|
+
violations: ZodViolation[]
|
|
296
256
|
) {
|
|
297
257
|
const detail = violations
|
|
298
258
|
.slice(0, 5)
|
|
@@ -300,6 +260,10 @@ export class ZodValidationError extends Error {
|
|
|
300
260
|
.join("; ");
|
|
301
261
|
const more = violations.length > 5 ? \`; …and \${violations.length - 5} more\` : "";
|
|
302
262
|
super(\`\${direction === "request" ? "Request" : "Response"} validation failed for operation "\${operationId}": \${detail}\${more}\`);
|
|
263
|
+
this.operationId = operationId;
|
|
264
|
+
this.direction = direction;
|
|
265
|
+
this.issues = issues;
|
|
266
|
+
this.violations = violations;
|
|
303
267
|
this.name = "ZodValidationError";
|
|
304
268
|
}
|
|
305
269
|
}
|
|
@@ -434,13 +398,13 @@ export function renderZodModule(model) {
|
|
|
434
398
|
const entries = operationSchemaEntries(model, byName);
|
|
435
399
|
if (model.schemas.length === 0 && entries.length === 0)
|
|
436
400
|
return '';
|
|
437
|
-
const
|
|
438
|
-
|
|
439
|
-
...model.schemas.map((named) =>
|
|
401
|
+
const blocks = [
|
|
402
|
+
'import { z } from "zod";',
|
|
403
|
+
...model.schemas.map((named) => `export const ${schemaConstName(named.name)} = ${schemaToZodExpression(named.schema, byName)};`),
|
|
440
404
|
];
|
|
441
405
|
if (entries.length === 0)
|
|
442
|
-
return
|
|
443
|
-
|
|
444
|
-
return `${
|
|
406
|
+
return blocks.join('\n\n');
|
|
407
|
+
blocks.push(operationSchemasBlock(entries));
|
|
408
|
+
return `${blocks.join('\n\n')}\n${VALIDATION_SUPPORT}\n`;
|
|
445
409
|
}
|
|
446
|
-
//# sourceMappingURL=
|
|
410
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/generators/zod/schemas.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
export * from './authoring/index.js';
|
|
1
2
|
export { NotSupportedError } from './errors.js';
|
|
2
3
|
export { defineClientSetup } from './runtime-contract.js';
|
|
3
4
|
export type { ClientSetup, ClientSetupConfig, Middleware, OperationContext, RequestContext, RetryConfig, RetryContext, RetryStrategy, } from './runtime-contract.js';
|
|
4
|
-
export {
|
|
5
|
-
export type {
|
|
6
|
-
export
|
|
5
|
+
export type { ResponseHeaderSpec } from './runtime-contract.js';
|
|
6
|
+
export type { ModelPagination, PaginationSpec } from './pagination.js';
|
|
7
|
+
export { resolveSchemaPointer } from './pagination.js';
|
|
8
|
+
export { WIRING_NAMES } from './reserved-names.js';
|
|
9
|
+
export { constantCase, groupSlug } from './cli-contract.js';
|
|
10
|
+
export type { CliAuthScheme, CliCommand, CliFlag, CliGlobals, CliWiring, CommandContext, CommandSource, CustomCommand, } from './cli-contract.js';
|
|
11
|
+
export type { PaginationConfig, PaginationRule, PaginationStyle } from './pagination.js';
|
|
7
12
|
export type { GenerateClientConfig, GenerateClientOptions, GenerateClientResult, LoadResult, } from './types.js';
|
|
8
13
|
export { mergeConfig } from './config-file.js';
|
|
9
14
|
export * from './plugin.js';
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,aAAa,GACd,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EACV,aAAa,EACb,UAAU,EACV,OAAO,EACP,UAAU,EACV,SAAS,EACT,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzF,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,cAAc,aAAa,CAAC;AAE5B,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE9E,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAG/B"}
|
package/lib/index.js
CHANGED
|
@@ -1,20 +1,27 @@
|
|
|
1
|
-
// The package ROOT entry —
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
// import inside `generateClient`
|
|
1
|
+
// The package ROOT entry — the authoring surface: the language-neutral toolkit, the
|
|
2
|
+
// plugin API, the user-facing config types, and the setup contract. Nothing imports
|
|
3
|
+
// this entry at app runtime — generated clients embed their runtime (ADR-0022) — and
|
|
4
|
+
// the TypeScript-emitting stack lives behind the dynamic import inside `generateClient`
|
|
5
|
+
// and the `@redocly/client-generator/generate` entry.
|
|
6
|
+
// The language-neutral generator-authoring toolkit — pure functions over the IR.
|
|
7
|
+
export * from './authoring/index.js';
|
|
5
8
|
export { NotSupportedError } from './errors.js';
|
|
6
9
|
export { defineClientSetup } from './runtime-contract.js';
|
|
7
|
-
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
export { resolveSchemaPointer } from './pagination.js';
|
|
11
|
+
// Names the generated sdk wiring reserves — the typescript descriptor keeps schema
|
|
12
|
+
// identifiers clear of them.
|
|
13
|
+
export { WIRING_NAMES } from './reserved-names.js';
|
|
14
|
+
// The generated-CLI authoring contract — the command/wiring shapes a wrapper around a
|
|
15
|
+
// generated or composed CLI is written against, plus the two casing helpers CLI-flavored
|
|
16
|
+
// generators share; the engine itself (`runCli`) is embedded in, and re-exported by,
|
|
17
|
+
// every generated cli module.
|
|
18
|
+
export { constantCase, groupSlug } from './cli-contract.js';
|
|
12
19
|
export { mergeConfig } from './config-file.js';
|
|
13
20
|
// The custom-generator authoring API (`defineGenerator` + the IR types); the
|
|
14
21
|
// TypeScript-emitting toolkit lives in `@redocly/client-generator/generate`.
|
|
15
22
|
export * from './plugin.js';
|
|
16
23
|
export async function generateClient(options) {
|
|
17
|
-
const
|
|
18
|
-
return
|
|
24
|
+
const pipeline = await import('./pipeline.js');
|
|
25
|
+
return pipeline.generateClient(options);
|
|
19
26
|
}
|
|
20
27
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,oFAAoF;AACpF,qFAAqF;AACrF,wFAAwF;AACxF,sDAAsD;AAEtD,iFAAiF;AACjF,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAc1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,mFAAmF;AACnF,6BAA6B;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,sFAAsF;AACtF,yFAAyF;AACzF,qFAAqF;AACrF,8BAA8B;AAC9B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAmB5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,6EAA6E;AAC7E,6EAA6E;AAC7E,cAAc,aAAa,CAAC;AAI5B,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA8B;IAE9B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAC/C,OAAO,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { type Oas3Definition } from '@redocly/openapi-core';
|
|
2
|
-
import type { ApiModel } from './model.js';
|
|
2
|
+
import type { ApiModel, ResponseBodyModel, SseModel } from './model.js';
|
|
3
3
|
export declare function buildApiModel(doc: Oas3Definition): ApiModel;
|
|
4
|
+
/**
|
|
5
|
+
* The operation's SSE facts, from its `text/event-stream` success response (exact media
|
|
6
|
+
* type, parameters and case ignored). The event schema prefers the 3.2 `itemSchema` over
|
|
7
|
+
* the response `schema`, skipping typeless slots; structured kinds stream as JSON,
|
|
8
|
+
* scalar-ish ones as raw text.
|
|
9
|
+
*/
|
|
10
|
+
export declare function sseFromResponses(successResponses: ResponseBodyModel[]): SseModel | undefined;
|
|
4
11
|
//# sourceMappingURL=build.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/intermediate-representation/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EAQpB,MAAM,uBAAuB,CAAC;AAS/B,OAAO,KAAK,EACV,QAAQ,
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/intermediate-representation/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EAQpB,MAAM,uBAAuB,CAAC;AAS/B,OAAO,KAAK,EACV,QAAQ,EAOR,iBAAiB,EACjB,QAAQ,EAOT,MAAM,YAAY,CAAC;AAkLpB,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,QAAQ,CAuC3D;AAsTD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,QAAQ,GAAG,SAAS,CAoB5F"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isPlainObject, isRef, logger, } from '@redocly/openapi-core';
|
|
2
2
|
import { NotSupportedError } from '../errors.js';
|
|
3
|
-
import {
|
|
3
|
+
import { assertSafeIdentifiers, sanitizeIdentifiers } from './sanitize-identifiers.js';
|
|
4
4
|
const HTTP_METHODS = ['get', 'post', 'put', 'delete', 'patch', 'head', 'options'];
|
|
5
5
|
function resolveRef(doc, ref) {
|
|
6
6
|
if (!ref.startsWith('#/')) {
|
|
@@ -162,6 +162,15 @@ export function buildApiModel(doc) {
|
|
|
162
162
|
const version = doc.info?.version ?? '0.0.0';
|
|
163
163
|
const description = doc.info?.description;
|
|
164
164
|
const serverUrl = resolveServerUrl(doc.servers?.[0]);
|
|
165
|
+
const servers = (doc.servers ?? []).map((server) => ({
|
|
166
|
+
url: server.url,
|
|
167
|
+
description: server.description,
|
|
168
|
+
variables: Object.entries(server.variables ?? {}).map(([name, variable]) => ({
|
|
169
|
+
name,
|
|
170
|
+
default: variable.default,
|
|
171
|
+
description: variable.description,
|
|
172
|
+
})),
|
|
173
|
+
}));
|
|
165
174
|
const schemas = buildNamedSchemas(doc);
|
|
166
175
|
const securitySchemes = buildSecuritySchemes(doc);
|
|
167
176
|
const services = buildServices(doc, securitySchemes);
|
|
@@ -170,6 +179,7 @@ export function buildApiModel(doc) {
|
|
|
170
179
|
version,
|
|
171
180
|
description,
|
|
172
181
|
serverUrl,
|
|
182
|
+
servers,
|
|
173
183
|
services,
|
|
174
184
|
schemas,
|
|
175
185
|
securitySchemes,
|
|
@@ -182,7 +192,6 @@ export function buildApiModel(doc) {
|
|
|
182
192
|
// Hard gate: no unsafe name may reach the printer (see sanitize-identifiers.ts).
|
|
183
193
|
assertSafeIdentifiers(model);
|
|
184
194
|
// A path parameter named like a request-args slot cannot be routed — fail loudly.
|
|
185
|
-
assertPathParamsAvoidArgSlots(model);
|
|
186
195
|
return model;
|
|
187
196
|
}
|
|
188
197
|
/**
|
|
@@ -421,7 +430,9 @@ function buildOperation(method, path, operation, name, pathLevelParams, doc, inj
|
|
|
421
430
|
const errorResponses = buildErrorResponses(operation, path, doc);
|
|
422
431
|
const security = resolveOperationSecurity(operation, doc, injectable);
|
|
423
432
|
// Extensions aren't in the @redocly operation type — read loosely, like `deprecated`.
|
|
424
|
-
const
|
|
433
|
+
const extensions = operation;
|
|
434
|
+
const paginationExtension = extensions['x-redoclyPagination'];
|
|
435
|
+
const sse = sseFromResponses(successResponses);
|
|
425
436
|
return {
|
|
426
437
|
name,
|
|
427
438
|
method,
|
|
@@ -439,8 +450,34 @@ function buildOperation(method, path, operation, name, pathLevelParams, doc, inj
|
|
|
439
450
|
security,
|
|
440
451
|
tags: Array.isArray(operation.tags) ? operation.tags.filter((t) => typeof t === 'string') : [],
|
|
441
452
|
...(paginationExtension !== undefined ? { paginationExtension } : {}),
|
|
453
|
+
...(sse === undefined ? {} : { sse }),
|
|
442
454
|
};
|
|
443
455
|
}
|
|
456
|
+
/**
|
|
457
|
+
* The operation's SSE facts, from its `text/event-stream` success response (exact media
|
|
458
|
+
* type, parameters and case ignored). The event schema prefers the 3.2 `itemSchema` over
|
|
459
|
+
* the response `schema`, skipping typeless slots; structured kinds stream as JSON,
|
|
460
|
+
* scalar-ish ones as raw text.
|
|
461
|
+
*/
|
|
462
|
+
export function sseFromResponses(successResponses) {
|
|
463
|
+
const response = successResponses.find((candidate) => candidate.contentType.split(';')[0].trim().toLowerCase() === 'text/event-stream');
|
|
464
|
+
if (response === undefined)
|
|
465
|
+
return undefined;
|
|
466
|
+
const declared = response.itemSchema && response.itemSchema.kind !== 'unknown'
|
|
467
|
+
? response.itemSchema
|
|
468
|
+
: response.schema.kind !== 'unknown'
|
|
469
|
+
? response.schema
|
|
470
|
+
: undefined;
|
|
471
|
+
if (declared === undefined)
|
|
472
|
+
return { dataKind: 'text' };
|
|
473
|
+
const streamsJson = declared.kind === 'object' ||
|
|
474
|
+
declared.kind === 'ref' ||
|
|
475
|
+
declared.kind === 'array' ||
|
|
476
|
+
declared.kind === 'record' ||
|
|
477
|
+
declared.kind === 'union' ||
|
|
478
|
+
declared.kind === 'intersection';
|
|
479
|
+
return { eventSchema: declared, dataKind: streamsJson ? 'json' : 'text' };
|
|
480
|
+
}
|
|
444
481
|
function buildParameter(param, location, doc) {
|
|
445
482
|
if (!param.in) {
|
|
446
483
|
throw new NotSupportedError(`Parameter ${param.name} at ${location} is missing "in"`);
|
|
@@ -774,11 +811,29 @@ function scalarForEnumValues(values, location) {
|
|
|
774
811
|
return 'boolean';
|
|
775
812
|
return 'string';
|
|
776
813
|
}
|
|
814
|
+
/**
|
|
815
|
+
* Whether keywords beside a `$ref` apply. OpenAPI 3.1 is JSON Schema 2020-12, where
|
|
816
|
+
* `$ref` is an ordinary keyword and its siblings take effect; 3.0 and 2.0 predate that
|
|
817
|
+
* and a `$ref` replaces the whole schema object, so siblings mean nothing (the
|
|
818
|
+
* `spec-ref-siblings` lint rule reports them). Swagger 2 arrives here normalized to
|
|
819
|
+
* `3.0.3`, so it takes the 3.0 path.
|
|
820
|
+
*/
|
|
821
|
+
function refSiblingsApply(doc) {
|
|
822
|
+
return !(doc.openapi ?? '').startsWith('3.0');
|
|
823
|
+
}
|
|
777
824
|
function buildProperties(schema, location, doc) {
|
|
778
825
|
const props = schema.properties ?? {};
|
|
779
826
|
const required = new Set(schema.required ?? []);
|
|
827
|
+
const siblingsApply = refSiblingsApply(doc);
|
|
780
828
|
return Object.entries(props).map(([name, sub]) => {
|
|
781
|
-
const
|
|
829
|
+
const declared = sub.readOnly === true;
|
|
830
|
+
// A `readOnly` sibling on a 3.0 `$ref` is a no-op the author almost certainly did
|
|
831
|
+
// not intend — it leaves a server-computed property in every request body — so it
|
|
832
|
+
// is reported rather than dropped in silence.
|
|
833
|
+
if (declared && isRef(sub) && !siblingsApply) {
|
|
834
|
+
logger.warn(`generate-client: "${name}" declares readOnly beside a $ref, which OpenAPI ${doc.openapi} ignores — the property stays in request bodies. Inline the schema, wrap the $ref in allOf, or move the description to OpenAPI 3.1.\n`);
|
|
835
|
+
}
|
|
836
|
+
const readOnly = declared && (siblingsApply || !isRef(sub));
|
|
782
837
|
return {
|
|
783
838
|
name,
|
|
784
839
|
schema: schemaFromSlot(sub, `${location}.${name}`, doc),
|