@redocly/client-generator 0.3.7 → 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
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
// The built-in `python` generator — the first non-TypeScript library entry,
|
|
2
|
+
// authored the way the AGENTS.md skill teaches users' agents to author theirs:
|
|
3
|
+
// with the language-neutral toolkit only (Printer + schema/naming helpers).
|
|
4
|
+
// A guard test pins that this module never imports the TS emitter toolkit.
|
|
5
|
+
// One file per pipeline stage (ADR-0020); this entry assembles them.
|
|
6
|
+
import { identifierFor, renderReferencePage, securityRequirements, } from '@redocly/client-generator';
|
|
7
|
+
import { PythonPrinter } from '@redocly/client-generator/printers/python';
|
|
8
|
+
import { PYTHON_RUNTIME_SOURCES } from '@redocly/client-generator/runtime-sources';
|
|
9
|
+
import { writeClientClass, writePythonServers } from "./client.js";
|
|
10
|
+
import { paginationSpec, pythonLiteral } from "./descriptor.js";
|
|
11
|
+
import { discriminatorRegistrations, pydanticDiscriminators, renderPythonModels, } from "./models.js";
|
|
12
|
+
import { operationIdents, PY } from "./naming.js";
|
|
13
|
+
export { renderPythonModels } from "./models.js";
|
|
14
|
+
export { pythonType } from "./types.js";
|
|
15
|
+
export const pythonOptions = {
|
|
16
|
+
type: 'object',
|
|
17
|
+
properties: {
|
|
18
|
+
models: {
|
|
19
|
+
enum: ['dataclass', 'pydantic'],
|
|
20
|
+
default: 'dataclass',
|
|
21
|
+
description: 'Model style: standard-library dataclasses (default, httpx is the only dependency), or pydantic BaseModel classes (adds pydantic).',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
additionalProperties: false,
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* The output path with an IMPORTABLE module name. The `--output` stem follows the
|
|
28
|
+
* TypeScript convention (`openapi.client.ts`), and `openapi.client.py` cannot be
|
|
29
|
+
* imported by name — nor can a hyphen or a leading digit — so the stem is converted
|
|
30
|
+
* to a legal module identifier (`openapi_client.py`). The directory is untouched.
|
|
31
|
+
*/
|
|
32
|
+
function pythonModulePath(outputPath) {
|
|
33
|
+
const separator = outputPath.lastIndexOf('/') >= 0 ? '/' : '\\';
|
|
34
|
+
const cut = outputPath.lastIndexOf(separator);
|
|
35
|
+
const dir = cut >= 0 ? outputPath.slice(0, cut + 1) : '';
|
|
36
|
+
const stem = (cut >= 0 ? outputPath.slice(cut + 1) : outputPath).replace(/\.[^.]+$/, '');
|
|
37
|
+
return `${dir}${identifierFor(stem, { style: 'snake', reserved: PY })}.py`;
|
|
38
|
+
}
|
|
39
|
+
/** The whole generated file: header, models, embedded runtime, descriptors, clients. */
|
|
40
|
+
export const pythonGenerator = ({ model, output, banner, emit, options, pagination, }) => {
|
|
41
|
+
const errorMode = emit.errorMode ?? 'throw';
|
|
42
|
+
const dateType = emit.dateType ?? 'string';
|
|
43
|
+
const models = options?.models ?? 'dataclass';
|
|
44
|
+
const pydantic = models === 'pydantic' ? pydanticDiscriminators(model) : undefined;
|
|
45
|
+
const printer = new PythonPrinter();
|
|
46
|
+
printer.line(`# Generated by @redocly/client-generator (python) from "${model.title}" ${model.version}.`);
|
|
47
|
+
printer.line('# Do not edit by hand — regenerate with `redocly generate-client`.');
|
|
48
|
+
printer.line(models === 'pydantic'
|
|
49
|
+
? '# Requires Python >= 3.9, httpx, and pydantic: pip install httpx pydantic'
|
|
50
|
+
: '# Requires Python >= 3.9 and httpx: pip install httpx');
|
|
51
|
+
printer.blank();
|
|
52
|
+
// Models (with the shared imports header).
|
|
53
|
+
printer.line(renderPythonModels(model, dateType, models).trimEnd());
|
|
54
|
+
printer.blank();
|
|
55
|
+
printer.blank();
|
|
56
|
+
writePythonServers(printer, model);
|
|
57
|
+
if (emit.runtime === 'module') {
|
|
58
|
+
// The runtime lives in real sibling modules; star imports rebind the same
|
|
59
|
+
// public names the inline stitching would have defined at this position.
|
|
60
|
+
printer.line('# ─── Runtime (real modules beside this file, written by the same run) ───');
|
|
61
|
+
for (const name of Object.keys(PYTHON_RUNTIME_SOURCES)) {
|
|
62
|
+
printer.line(`from ${name.replace(/\.py$/, '')} import *`);
|
|
63
|
+
}
|
|
64
|
+
printer.blank();
|
|
65
|
+
printer.blank();
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// The embedded runtime, stitched into one module: `from __future__` may appear
|
|
69
|
+
// only at the top of a file, and the intra-runtime relative imports resolve to
|
|
70
|
+
// this same file — both are dropped; duplicate stdlib imports are legal Python.
|
|
71
|
+
printer.line('# ─── Embedded runtime (@redocly/client-generator python runtime) ───');
|
|
72
|
+
for (const source of Object.values(PYTHON_RUNTIME_SOURCES)) {
|
|
73
|
+
const stitched = source
|
|
74
|
+
.split('\n')
|
|
75
|
+
.filter((line) => !line.startsWith('from __future__') && !line.startsWith('from ._'))
|
|
76
|
+
.join('\n')
|
|
77
|
+
.trim();
|
|
78
|
+
printer.line(stitched);
|
|
79
|
+
printer.blank();
|
|
80
|
+
}
|
|
81
|
+
printer.blank();
|
|
82
|
+
}
|
|
83
|
+
const registrations = discriminatorRegistrations(model, new Set(pydantic?.unions.keys()));
|
|
84
|
+
if (registrations.length > 0) {
|
|
85
|
+
printer.line('# Discriminated unions dispatch by their property inside decode().');
|
|
86
|
+
for (const registration of registrations)
|
|
87
|
+
printer.line(registration);
|
|
88
|
+
printer.blank();
|
|
89
|
+
}
|
|
90
|
+
printer.block('def _safe_json(response: httpx.Response) -> Any:', () => {
|
|
91
|
+
printer.block('try:', () => {
|
|
92
|
+
printer.line('return response.json()');
|
|
93
|
+
});
|
|
94
|
+
printer.block('except Exception:', () => {
|
|
95
|
+
printer.line('return None');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
printer.blank();
|
|
99
|
+
// The wire-shape descriptor table the runtime routes by.
|
|
100
|
+
const paginationSpecs = new Map();
|
|
101
|
+
for (const { op, ident } of operationIdents(model)) {
|
|
102
|
+
paginationSpecs.set(ident, paginationSpec(pagination?.get(op.name)?.spec));
|
|
103
|
+
}
|
|
104
|
+
printer.line('_OPERATIONS = {');
|
|
105
|
+
printer.indent(() => {
|
|
106
|
+
for (const { op, ident } of operationIdents(model)) {
|
|
107
|
+
const descriptor = {
|
|
108
|
+
id: op.specName ?? op.name,
|
|
109
|
+
method: op.method.toUpperCase(),
|
|
110
|
+
path: op.path,
|
|
111
|
+
...(securityRequirements(op, model).length > 0
|
|
112
|
+
? { security: securityRequirements(op, model) }
|
|
113
|
+
: {}),
|
|
114
|
+
...(paginationSpecs.get(ident) !== undefined
|
|
115
|
+
? { pagination: paginationSpecs.get(ident) }
|
|
116
|
+
: {}),
|
|
117
|
+
};
|
|
118
|
+
printer.line(`"${ident}": ${pythonLiteral(descriptor)},`);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
printer.line('}');
|
|
122
|
+
printer.blank();
|
|
123
|
+
printer.blank();
|
|
124
|
+
// The `serverUrl` option overrides the description's server, like the TS sdk.
|
|
125
|
+
const serverUrl = emit.serverUrl ?? model.serverUrl ?? '';
|
|
126
|
+
writeClientClass(printer, model, errorMode, false, paginationSpecs, serverUrl, dateType);
|
|
127
|
+
writeClientClass(printer, model, errorMode, true, paginationSpecs, serverUrl, dateType);
|
|
128
|
+
const entry = { path: pythonModulePath(output.path), content: printer.toString() };
|
|
129
|
+
if (emit.runtime !== 'module')
|
|
130
|
+
return [entry];
|
|
131
|
+
// The runtime modules, verbatim except the package-relative imports: the flat
|
|
132
|
+
// sibling layout has no package, so `from ._x` becomes the sibling `from _x`.
|
|
133
|
+
const header = banner.map((line) => `# ${line}`).join('\n');
|
|
134
|
+
const dir = pythonModulePath(output.path).replace(/[^\\/]+$/, '');
|
|
135
|
+
const runtimeFiles = Object.entries(PYTHON_RUNTIME_SOURCES).map(([name, source]) => ({
|
|
136
|
+
path: `${dir}${name}`,
|
|
137
|
+
content: `${header}\n\n${source
|
|
138
|
+
.split('\n')
|
|
139
|
+
.map((line) => (line.startsWith('from ._') ? line.replace('from ._', 'from _') : line))
|
|
140
|
+
.join('\n')
|
|
141
|
+
.trim()}\n`,
|
|
142
|
+
}));
|
|
143
|
+
return [entry, ...runtimeFiles];
|
|
144
|
+
};
|
|
145
|
+
/** One idiomatic Python call per operation — feeds `x-codeSamples` for docs. */
|
|
146
|
+
export function pythonSample(op, ctx) {
|
|
147
|
+
// The module name this run writes, not a guess: `openapi.client.ts` becomes
|
|
148
|
+
// `openapi_client.py`, so `from client import Client` would not import.
|
|
149
|
+
const module = pythonModulePath(ctx.outputPath)
|
|
150
|
+
.replace(/^.*[\\/]/, '')
|
|
151
|
+
.replace(/\.py$/, '');
|
|
152
|
+
// The DEDUPED name: on a collision the method is `get_user_2`, and a snippet naming
|
|
153
|
+
// the raw `get_user` would show a call that goes to a different operation.
|
|
154
|
+
const ident = operationIdents(ctx.model).find((entry) => entry.op.name === op.name)?.ident ??
|
|
155
|
+
identifierFor(op.name, { style: 'snake', reserved: PY });
|
|
156
|
+
const args = [
|
|
157
|
+
...op.pathParams.map((param) => {
|
|
158
|
+
const python = identifierFor(param.name, { style: 'snake', reserved: PY });
|
|
159
|
+
return `${python}="<${python}>"`;
|
|
160
|
+
}),
|
|
161
|
+
...op.queryParams
|
|
162
|
+
.filter((param) => param.required)
|
|
163
|
+
.map((param) => {
|
|
164
|
+
const python = identifierFor(param.name, { style: 'snake', reserved: PY });
|
|
165
|
+
return `${python}=...`;
|
|
166
|
+
}),
|
|
167
|
+
...(op.requestBody ? ['body=...'] : []),
|
|
168
|
+
];
|
|
169
|
+
return {
|
|
170
|
+
lang: 'python',
|
|
171
|
+
label: 'Python SDK',
|
|
172
|
+
source: `from ${module} import Client\n\nclient = Client()\nresult = client.${ident}(${args.join(', ')})\n`,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* The SDK's own reference page, written when `client.docs` is on. The call snippets come
|
|
177
|
+
* from `pythonSample` — this generator's own hook — so the page can only ever show the syntax
|
|
178
|
+
* of the SDK beside it, and ejecting this generator takes the page with it.
|
|
179
|
+
*/
|
|
180
|
+
export const pythonDocs = ({ model, output, emit, pagination }) => [
|
|
181
|
+
{
|
|
182
|
+
path: output.path.replace(/\.[^.\\/]+$/, '.python.md'),
|
|
183
|
+
content: renderReferencePage(model, {
|
|
184
|
+
title: `${model.title} Python SDK reference`,
|
|
185
|
+
frontmatter: emit.docsFrontmatter === true,
|
|
186
|
+
language: {
|
|
187
|
+
name: 'python',
|
|
188
|
+
label: 'Python',
|
|
189
|
+
fence: 'python',
|
|
190
|
+
requires: 'The SDK needs `httpx`.',
|
|
191
|
+
},
|
|
192
|
+
sample: (op) => pythonSample(op, { model, emit, outputPath: output.path }),
|
|
193
|
+
paginated: new Set(pagination?.keys() ?? []),
|
|
194
|
+
}),
|
|
195
|
+
},
|
|
196
|
+
];
|
|
197
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/python/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type ApiModel, type DateType } from '@redocly/client-generator';
|
|
2
|
+
/** The model style the generator emits: plain dataclasses, or pydantic `BaseModel`s. */
|
|
3
|
+
export type PythonModels = 'dataclass' | 'pydantic';
|
|
4
|
+
/** The wire property and value a union's discriminator mapping pins on one member class. */
|
|
5
|
+
export type DiscriminatorPin = {
|
|
6
|
+
property: string;
|
|
7
|
+
value: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Under `models: pydantic` the decoder hands a whole object tree to `model_validate`, so a
|
|
11
|
+
* union nested in a model is resolved by pydantic and never reaches the `DISCRIMINATORS`
|
|
12
|
+
* table. Pydantic resolves it correctly when the annotation carries the discriminator, which
|
|
13
|
+
* it accepts only if every member types that property as a `Literal` — and the mapping
|
|
14
|
+
* already pins one value per member. This pass works out which unions qualify: every member
|
|
15
|
+
* must declare the property, and no member may be pinned to two different values (a schema
|
|
16
|
+
* reused by two unions).
|
|
17
|
+
*/
|
|
18
|
+
export declare function pydanticDiscriminators(model: ApiModel): {
|
|
19
|
+
pins: Map<string, DiscriminatorPin>;
|
|
20
|
+
unions: Map<string, string>;
|
|
21
|
+
};
|
|
22
|
+
/** Render every named schema: Enum classes, dataclasses (allOf flattened), union aliases. */
|
|
23
|
+
export declare function renderPythonModels(model: ApiModel, dateType?: DateType, models?: PythonModels): string;
|
|
24
|
+
/**
|
|
25
|
+
* `DISCRIMINATORS[Pet] = ("petType", {"cat": Cat, ...})` registration lines, which `decode`
|
|
26
|
+
* dispatches through. A union whose annotation already carries the discriminator is left
|
|
27
|
+
* out: pydantic resolves it at any depth, and the `Literal` on each member makes the
|
|
28
|
+
* decoder's member probe exact.
|
|
29
|
+
*/
|
|
30
|
+
export declare function discriminatorRegistrations(model: ApiModel, annotated: Set<string>): string[];
|
|
31
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/generators/python/models.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,QAAQ,EAKd,MAAM,2BAA2B,CAAC;AAMnC,wFAAwF;AACxF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;AAEpD,4FAA4F;AAC5F,MAAM,MAAM,gBAAgB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,GAAG;IACvD,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,CAmCA;AA0DD,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EACf,QAAQ,GAAE,QAAmB,EAC7B,MAAM,GAAE,YAA0B,GACjC,MAAM,CAmFR;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAc5F"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
// The `models` stage: named schemas as Enum classes, dataclasses/pydantic models
|
|
2
|
+
// (allOf flattened), union aliases, and the decoder's discriminator registrations.
|
|
3
|
+
import { discriminatorCases, enumValues, flattenAllOf, } from '@redocly/client-generator';
|
|
4
|
+
import { PythonPrinter } from '@redocly/client-generator/printers/python';
|
|
5
|
+
import { className, fieldName, naming } from "./naming.js";
|
|
6
|
+
import { pythonType } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Under `models: pydantic` the decoder hands a whole object tree to `model_validate`, so a
|
|
9
|
+
* union nested in a model is resolved by pydantic and never reaches the `DISCRIMINATORS`
|
|
10
|
+
* table. Pydantic resolves it correctly when the annotation carries the discriminator, which
|
|
11
|
+
* it accepts only if every member types that property as a `Literal` — and the mapping
|
|
12
|
+
* already pins one value per member. This pass works out which unions qualify: every member
|
|
13
|
+
* must declare the property, and no member may be pinned to two different values (a schema
|
|
14
|
+
* reused by two unions).
|
|
15
|
+
*/
|
|
16
|
+
export function pydanticDiscriminators(model) {
|
|
17
|
+
const pins = new Map();
|
|
18
|
+
const conflicted = new Set();
|
|
19
|
+
const candidates = [];
|
|
20
|
+
for (const { name, schema } of model.schemas) {
|
|
21
|
+
const cases = discriminatorCases(schema, model);
|
|
22
|
+
if (cases === undefined)
|
|
23
|
+
continue;
|
|
24
|
+
const declares = cases.cases.every((entry) => flattenAllOf(entry.schema, model)?.properties.some((property) => property.name === cases.property) === true);
|
|
25
|
+
if (!declares)
|
|
26
|
+
continue;
|
|
27
|
+
for (const entry of cases.cases) {
|
|
28
|
+
const existing = pins.get(entry.schemaName);
|
|
29
|
+
if (existing !== undefined && existing.value !== entry.value) {
|
|
30
|
+
conflicted.add(entry.schemaName);
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
pins.set(entry.schemaName, { property: cases.property, value: entry.value });
|
|
34
|
+
}
|
|
35
|
+
candidates.push({
|
|
36
|
+
name,
|
|
37
|
+
property: cases.property,
|
|
38
|
+
members: cases.cases.map((entry) => entry.schemaName),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const unions = new Map();
|
|
42
|
+
for (const candidate of candidates) {
|
|
43
|
+
if (candidate.members.some((member) => conflicted.has(member)))
|
|
44
|
+
continue;
|
|
45
|
+
unions.set(candidate.name, fieldName(candidate.property).python);
|
|
46
|
+
}
|
|
47
|
+
for (const member of conflicted)
|
|
48
|
+
pins.delete(member);
|
|
49
|
+
return { pins, unions };
|
|
50
|
+
}
|
|
51
|
+
function writeDataclass(printer, name, properties, dateType, models, description,
|
|
52
|
+
/** The discriminator value this class is mapped to, pinned as a `Literal` (pydantic). */
|
|
53
|
+
pinned) {
|
|
54
|
+
const pydantic = models === 'pydantic';
|
|
55
|
+
if (!pydantic)
|
|
56
|
+
printer.line('@dataclass');
|
|
57
|
+
const header = pydantic ? `class ${className(name)}(BaseModel):` : `class ${className(name)}:`;
|
|
58
|
+
printer.block(header, () => {
|
|
59
|
+
printer.doc(description);
|
|
60
|
+
// A wire name that is not a legal field name travels as an alias, so the model
|
|
61
|
+
// accepts both spellings; without this, populating by field name would fail.
|
|
62
|
+
if (pydantic) {
|
|
63
|
+
printer.line('model_config = ConfigDict(populate_by_name=True)');
|
|
64
|
+
printer.blank();
|
|
65
|
+
}
|
|
66
|
+
// Required fields first — a dataclass field without a default may not follow one with.
|
|
67
|
+
const ordered = [
|
|
68
|
+
...properties.filter((property) => property.required),
|
|
69
|
+
...properties.filter((property) => !property.required),
|
|
70
|
+
];
|
|
71
|
+
const fieldMap = [];
|
|
72
|
+
if (ordered.length === 0)
|
|
73
|
+
printer.line('pass');
|
|
74
|
+
for (const property of ordered) {
|
|
75
|
+
const { python, renamed } = fieldName(property.name);
|
|
76
|
+
if (renamed && !pydantic)
|
|
77
|
+
fieldMap.push([python, property.name]);
|
|
78
|
+
const alias = renamed && pydantic ? `alias=${naming.string(property.name)}` : undefined;
|
|
79
|
+
const baseType = pinned?.property === property.name
|
|
80
|
+
? `Literal[${naming.literal(pinned.value)}]`
|
|
81
|
+
: pythonType(property.schema, dateType);
|
|
82
|
+
if (property.required) {
|
|
83
|
+
const value = alias === undefined ? '' : ` = Field(${alias})`;
|
|
84
|
+
printer.line(`${python}: ${baseType}${value}`);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const optional = baseType.startsWith('Optional[') ? baseType : `Optional[${baseType}]`;
|
|
88
|
+
const value = alias === undefined ? 'None' : `Field(default=None, ${alias})`;
|
|
89
|
+
printer.line(`${python}: ${optional} = ${value}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (fieldMap.length > 0) {
|
|
93
|
+
printer.blank();
|
|
94
|
+
printer.line('# Python field name -> wire (JSON) name, for (de)serialization.');
|
|
95
|
+
const entries = fieldMap.map(([py, wire]) => `"${py}": ${naming.string(wire)}`).join(', ');
|
|
96
|
+
printer.line(`_field_map: ClassVar[Dict[str, str]] = {${entries}}`);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
printer.blank();
|
|
100
|
+
printer.blank();
|
|
101
|
+
}
|
|
102
|
+
/** Render every named schema: Enum classes, dataclasses (allOf flattened), union aliases. */
|
|
103
|
+
export function renderPythonModels(model, dateType = 'string', models = 'dataclass') {
|
|
104
|
+
const printer = new PythonPrinter();
|
|
105
|
+
const { pins, unions } = models === 'pydantic'
|
|
106
|
+
? pydanticDiscriminators(model)
|
|
107
|
+
: { pins: new Map(), unions: new Map() };
|
|
108
|
+
printer.line('from __future__ import annotations');
|
|
109
|
+
printer.blank();
|
|
110
|
+
if (models === 'dataclass')
|
|
111
|
+
printer.line('from dataclasses import dataclass');
|
|
112
|
+
printer.line('from enum import Enum');
|
|
113
|
+
// `ClassVar` types the `_field_map` of a dataclass model, which pydantic mode
|
|
114
|
+
// replaces with field aliases — importing it there would be an unused import.
|
|
115
|
+
const typingNames = [
|
|
116
|
+
'Any',
|
|
117
|
+
'AsyncIterator',
|
|
118
|
+
'Dict',
|
|
119
|
+
'Iterator',
|
|
120
|
+
'List',
|
|
121
|
+
'Literal',
|
|
122
|
+
'Optional',
|
|
123
|
+
'Tuple',
|
|
124
|
+
'Union',
|
|
125
|
+
];
|
|
126
|
+
if (models === 'dataclass')
|
|
127
|
+
typingNames.splice(2, 0, 'ClassVar');
|
|
128
|
+
if (unions.size > 0)
|
|
129
|
+
typingNames.unshift('Annotated');
|
|
130
|
+
printer.line(`from typing import ${typingNames.join(', ')}`);
|
|
131
|
+
if (models === 'pydantic')
|
|
132
|
+
printer.line('from pydantic import BaseModel, ConfigDict, Field');
|
|
133
|
+
// Only under `dateType: Date` — an unused import in every other client would be noise.
|
|
134
|
+
if (dateType === 'Date')
|
|
135
|
+
printer.line('from datetime import date, datetime');
|
|
136
|
+
printer.blank();
|
|
137
|
+
printer.blank();
|
|
138
|
+
const aliases = [];
|
|
139
|
+
for (const { name, schema } of model.schemas) {
|
|
140
|
+
const asEnum = enumValues(schema);
|
|
141
|
+
if (asEnum !== undefined) {
|
|
142
|
+
const base = asEnum.scalar === 'string' ? 'str, Enum' : 'int, Enum';
|
|
143
|
+
printer.block(`class ${className(name)}(${base}):`, () => {
|
|
144
|
+
printer.doc(schema.description);
|
|
145
|
+
asEnum.values.forEach((value, index) => {
|
|
146
|
+
printer.line(`${asEnum.memberNames[index]} = ${naming.literal(value)}`);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
printer.blank();
|
|
150
|
+
printer.blank();
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (schema.kind === 'object' || schema.kind === 'intersection') {
|
|
154
|
+
const flat = flattenAllOf(schema, model);
|
|
155
|
+
if (flat !== undefined) {
|
|
156
|
+
writeDataclass(printer, name, flat.properties, dateType, models, flat.description ?? schema.description, pins.get(name));
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Everything else (unions, scalar aliases, records) becomes a module-level alias,
|
|
161
|
+
// emitted AFTER the classes it references so the assignment evaluates.
|
|
162
|
+
aliases.push(() => {
|
|
163
|
+
const cases = discriminatorCases(schema, model);
|
|
164
|
+
if (cases !== undefined) {
|
|
165
|
+
const table = cases.cases
|
|
166
|
+
.map((entry) => `${entry.value} -> ${className(entry.schemaName)}`)
|
|
167
|
+
.join(', ');
|
|
168
|
+
printer.line(`# Discriminated by "${cases.property}": ${table}`);
|
|
169
|
+
}
|
|
170
|
+
const field = unions.get(name);
|
|
171
|
+
const union = field === undefined
|
|
172
|
+
? pythonType(schema, dateType)
|
|
173
|
+
: `Annotated[${pythonType(schema, dateType)}, Field(discriminator=${naming.string(field)})]`;
|
|
174
|
+
printer.line(`${className(name)} = ${union}`);
|
|
175
|
+
printer.blank();
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
for (const emit of aliases)
|
|
179
|
+
emit();
|
|
180
|
+
return printer.toString();
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* `DISCRIMINATORS[Pet] = ("petType", {"cat": Cat, ...})` registration lines, which `decode`
|
|
184
|
+
* dispatches through. A union whose annotation already carries the discriminator is left
|
|
185
|
+
* out: pydantic resolves it at any depth, and the `Literal` on each member makes the
|
|
186
|
+
* decoder's member probe exact.
|
|
187
|
+
*/
|
|
188
|
+
export function discriminatorRegistrations(model, annotated) {
|
|
189
|
+
const lines = [];
|
|
190
|
+
for (const { name, schema } of model.schemas) {
|
|
191
|
+
if (annotated.has(name))
|
|
192
|
+
continue;
|
|
193
|
+
const cases = discriminatorCases(schema, model);
|
|
194
|
+
if (cases === undefined)
|
|
195
|
+
continue;
|
|
196
|
+
const mapping = cases.cases
|
|
197
|
+
.map((entry) => `${naming.string(entry.value)}: ${className(entry.schemaName)}`)
|
|
198
|
+
.join(', ');
|
|
199
|
+
lines.push(`DISCRIMINATORS[${className(name)}] = (${naming.string(cases.property)}, {${mapping}})`);
|
|
200
|
+
}
|
|
201
|
+
return lines;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/generators/python/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ApiModel, type OperationModel } from '@redocly/client-generator';
|
|
2
|
+
import { PythonPrinter } from '@redocly/client-generator/printers/python';
|
|
3
|
+
export declare const PY: ReadonlySet<string>;
|
|
4
|
+
export declare const naming: PythonPrinter;
|
|
5
|
+
/** A named schema's Python class name. */
|
|
6
|
+
export declare function className(name: string): string;
|
|
7
|
+
/** A field/parameter name, with the wire name preserved when sanitization renames it. */
|
|
8
|
+
export declare function fieldName(name: string): {
|
|
9
|
+
python: string;
|
|
10
|
+
renamed: boolean;
|
|
11
|
+
};
|
|
12
|
+
/** Every operation with its collision-free snake_case Python method name. */
|
|
13
|
+
export declare function operationIdents(model: ApiModel): Array<{
|
|
14
|
+
op: OperationModel;
|
|
15
|
+
ident: string;
|
|
16
|
+
}>;
|
|
17
|
+
/**
|
|
18
|
+
* The argument names every request method declares itself. A parameter named after one of
|
|
19
|
+
* them takes a suffixed binding instead, so the slot keeps its meaning.
|
|
20
|
+
*/
|
|
21
|
+
export declare const METHOD_ARG_SLOTS: string[];
|
|
22
|
+
//# sourceMappingURL=naming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../../src/generators/python/naming.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,cAAc,EAGpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,eAAO,MAAM,EAAE,qBAAwB,CAAC;AAGxC,eAAO,MAAM,MAAM,eAAsB,CAAC;AAE1C,0CAA0C;AAC1C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAG5E;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC;IAAE,EAAE,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAO7F;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,UAAqE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// The `naming` stage: the shared printer/naming instance and the collision-free
|
|
2
|
+
// identifier derivations every other stage builds on.
|
|
3
|
+
import { RESERVED_WORDS, uniqueIdentifiers, } from '@redocly/client-generator';
|
|
4
|
+
import { PythonPrinter } from '@redocly/client-generator/printers/python';
|
|
5
|
+
export const PY = RESERVED_WORDS.python;
|
|
6
|
+
// Naming delegates to the printer — one implementation, used here and by any ejected copy.
|
|
7
|
+
export const naming = new PythonPrinter();
|
|
8
|
+
/** A named schema's Python class name. */
|
|
9
|
+
export function className(name) {
|
|
10
|
+
return naming.typeName(name);
|
|
11
|
+
}
|
|
12
|
+
/** A field/parameter name, with the wire name preserved when sanitization renames it. */
|
|
13
|
+
export function fieldName(name) {
|
|
14
|
+
const { identifier, renamed } = naming.memberName(name);
|
|
15
|
+
return { python: identifier, renamed };
|
|
16
|
+
}
|
|
17
|
+
/** Every operation with its collision-free snake_case Python method name. */
|
|
18
|
+
export function operationIdents(model) {
|
|
19
|
+
const operations = model.services.flatMap((service) => service.operations);
|
|
20
|
+
const idents = uniqueIdentifiers(operations.map((op) => op.name), { style: 'snake', reserved: PY });
|
|
21
|
+
return operations.map((op, index) => ({ op, ident: idents[index] }));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The argument names every request method declares itself. A parameter named after one of
|
|
25
|
+
* them takes a suffixed binding instead, so the slot keeps its meaning.
|
|
26
|
+
*/
|
|
27
|
+
export const METHOD_ARG_SLOTS = ['self', 'body', 'headers', 'timeout', 'retry', 'idempotency_key'];
|
|
28
|
+
//# sourceMappingURL=naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../../src/generators/python/naming.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,sDAAsD;AAEtD,OAAO,EAGL,cAAc,EACd,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,MAAM,CAAC,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC;AAExC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;AAE1C,0CAA0C;AAC1C,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,KAAe;IAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,iBAAiB,CAC9B,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAC/B,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CACjC,CAAC;IACF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ApiModel, type DateType, type OperationModel } from '@redocly/client-generator';
|
|
2
|
+
import type { PythonPrinter } from '@redocly/client-generator/printers/python';
|
|
3
|
+
export declare function writeMethod(printer: PythonPrinter, op: OperationModel, ident: string, errorMode: 'throw' | 'result', isAsync: boolean, dateType: DateType, model?: ApiModel, envelope?: boolean): void;
|
|
4
|
+
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../src/generators/python/operations.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,QAAQ,EAGb,KAAK,cAAc,EAGpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAM/E,wBAAgB,WAAW,CACzB,OAAO,EAAE,aAAa,EACtB,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,OAAO,GAAG,QAAQ,EAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,CAAC,EAAE,QAAQ,EAChB,QAAQ,UAAQ,GACf,IAAI,CAmHN"}
|