@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
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
// Ejected from @redocly/client-generator@0.4.0 — the built-in "go" generator.
|
|
2
|
+
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
|
+
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
|
+
// `redocly eject-generator go --update`.
|
|
5
|
+
// The built-in `go` generator — the second non-TypeScript library entry,
|
|
6
|
+
// authored with the language-neutral toolkit only (same dogfooding invariant as
|
|
7
|
+
// the python generator, pinned by its guard test). Output is a single
|
|
8
|
+
// stdlib-only Go file: structs with json tags, typed-const enums, discriminated
|
|
9
|
+
// unions with unmarshal dispatchers, and a Client over the embedded runtime.
|
|
10
|
+
// One file per pipeline stage (ADR-0020); this entry assembles them.
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
type ApiModel,
|
|
14
|
+
type CodeSample,
|
|
15
|
+
type DateType,
|
|
16
|
+
type EmitOptions,
|
|
17
|
+
type Generator,
|
|
18
|
+
identifierFor,
|
|
19
|
+
jsonSuccessSchema,
|
|
20
|
+
type NeutralPaginationRule,
|
|
21
|
+
type OperationModel,
|
|
22
|
+
paginationItemSchema,
|
|
23
|
+
renderReferencePage,
|
|
24
|
+
type SampleContext,
|
|
25
|
+
sseResponse,
|
|
26
|
+
} from '@redocly/client-generator';
|
|
27
|
+
import { exported, GoPrinter } from '@redocly/client-generator/printers/go';
|
|
28
|
+
import { GO_RUNTIME_SOURCE } from '@redocly/client-generator/runtime-sources';
|
|
29
|
+
|
|
30
|
+
import { writeGoServers } from './client.ts';
|
|
31
|
+
import { goPaginationLiteral, goSecurityLiteral } from './descriptor.ts';
|
|
32
|
+
import { renderGoModels } from './models.ts';
|
|
33
|
+
import { GO, goOperationIdents, goPackageName, naming } from './naming.ts';
|
|
34
|
+
import { writeGoMethod } from './operations.ts';
|
|
35
|
+
import { writeGoPaginationWrappers } from './pagination.ts';
|
|
36
|
+
import { goType } from './types.ts';
|
|
37
|
+
|
|
38
|
+
export { renderGoModels } from './models.ts';
|
|
39
|
+
export { goType } from './types.ts';
|
|
40
|
+
|
|
41
|
+
/** Strip the package clause and import lines/blocks so a section stitches into one file. */
|
|
42
|
+
function stripHeader(source: string): string {
|
|
43
|
+
const lines = source.split('\n');
|
|
44
|
+
const out: string[] = [];
|
|
45
|
+
let inImportBlock = false;
|
|
46
|
+
for (const line of lines) {
|
|
47
|
+
if (line.startsWith('package ')) continue;
|
|
48
|
+
if (line.startsWith('import (')) {
|
|
49
|
+
inImportBlock = true;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (inImportBlock) {
|
|
53
|
+
if (line.startsWith(')')) inImportBlock = false;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (line.startsWith('import ')) continue;
|
|
57
|
+
out.push(line);
|
|
58
|
+
}
|
|
59
|
+
return out.join('\n').trim();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Every stdlib package the merged inline file needs (the runtime dominates the list). */
|
|
63
|
+
const GO_STDLIB_IMPORTS = [
|
|
64
|
+
'bytes',
|
|
65
|
+
'context',
|
|
66
|
+
'encoding/base64',
|
|
67
|
+
'encoding/json',
|
|
68
|
+
'errors',
|
|
69
|
+
'fmt',
|
|
70
|
+
'io',
|
|
71
|
+
'math/rand',
|
|
72
|
+
'mime/multipart',
|
|
73
|
+
'net/http',
|
|
74
|
+
'net/url',
|
|
75
|
+
'strconv',
|
|
76
|
+
'strings',
|
|
77
|
+
'time',
|
|
78
|
+
];
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Everything below the import block: models, servers, the (optionally embedded)
|
|
82
|
+
* runtime, the operations table, and the Client — one emission path for both
|
|
83
|
+
* runtime modes, so module mode cannot drift from the inline layout.
|
|
84
|
+
*/
|
|
85
|
+
function writeGoBody(
|
|
86
|
+
printer: GoPrinter,
|
|
87
|
+
model: ApiModel,
|
|
88
|
+
emit: EmitOptions,
|
|
89
|
+
dateType: DateType,
|
|
90
|
+
paginationRules: Map<string, NeutralPaginationRule>,
|
|
91
|
+
embedRuntime: boolean
|
|
92
|
+
): void {
|
|
93
|
+
printer.line(stripHeader(renderGoModels(model, dateType)));
|
|
94
|
+
printer.blank();
|
|
95
|
+
writeGoServers(printer, model);
|
|
96
|
+
if (embedRuntime) {
|
|
97
|
+
printer.line('// ─── Embedded runtime (@redocly/client-generator go runtime) ───');
|
|
98
|
+
printer.line(stripHeader(GO_RUNTIME_SOURCE));
|
|
99
|
+
printer.blank();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
printer.block(
|
|
103
|
+
'type operationMeta struct {',
|
|
104
|
+
() => {
|
|
105
|
+
printer.line('ID string');
|
|
106
|
+
printer.line('Method string');
|
|
107
|
+
printer.line('Path string');
|
|
108
|
+
printer.line('Security [][]SecuritySpec');
|
|
109
|
+
printer.line('Pagination *PaginationSpec');
|
|
110
|
+
},
|
|
111
|
+
'}'
|
|
112
|
+
);
|
|
113
|
+
printer.blank();
|
|
114
|
+
printer.block(
|
|
115
|
+
'var operations = map[string]operationMeta{',
|
|
116
|
+
() => {
|
|
117
|
+
for (const { op, ident } of goOperationIdents(model)) {
|
|
118
|
+
const id = op.specName ?? op.name;
|
|
119
|
+
const security = goSecurityLiteral(op, model);
|
|
120
|
+
const rule = paginationRules.get(ident);
|
|
121
|
+
const fields = [
|
|
122
|
+
`ID: ${naming.string(id)}`,
|
|
123
|
+
`Method: ${naming.string(op.method.toUpperCase())}`,
|
|
124
|
+
`Path: ${naming.string(op.path)}`,
|
|
125
|
+
...(security !== undefined ? [`Security: ${security}`] : []),
|
|
126
|
+
...(rule !== undefined ? [`Pagination: ${goPaginationLiteral(rule)}`] : []),
|
|
127
|
+
];
|
|
128
|
+
printer.line(`${naming.string(id)}: {${fields.join(', ')}},`);
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
'}'
|
|
132
|
+
);
|
|
133
|
+
printer.blank();
|
|
134
|
+
|
|
135
|
+
// Per-operation query-parameter structs (pointer fields: absent = not sent).
|
|
136
|
+
for (const { op, ident } of goOperationIdents(model)) {
|
|
137
|
+
if (op.queryParams.length === 0) continue;
|
|
138
|
+
printer.block(
|
|
139
|
+
`type ${ident}Params struct {`,
|
|
140
|
+
() => {
|
|
141
|
+
for (const param of op.queryParams) {
|
|
142
|
+
const fieldType = goType(param.schema, dateType);
|
|
143
|
+
printer.line(
|
|
144
|
+
`${exported(param.name)} ${fieldType.startsWith('*') ? fieldType : `*${fieldType}`}`
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
'}'
|
|
149
|
+
);
|
|
150
|
+
printer.blank();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
printer.doc('Client', `Client for ${model.title} (${model.version}).`);
|
|
154
|
+
printer.block(
|
|
155
|
+
'type Client struct {',
|
|
156
|
+
() => {
|
|
157
|
+
printer.line('config Config');
|
|
158
|
+
},
|
|
159
|
+
'}'
|
|
160
|
+
);
|
|
161
|
+
printer.blank();
|
|
162
|
+
printer.block(
|
|
163
|
+
'func New(config Config) *Client {',
|
|
164
|
+
() => {
|
|
165
|
+
printer.block(
|
|
166
|
+
'if config.ServerURL == "" {',
|
|
167
|
+
() => {
|
|
168
|
+
printer.line(
|
|
169
|
+
`config.ServerURL = ${naming.string(emit.serverUrl ?? model.serverUrl ?? '')}`
|
|
170
|
+
);
|
|
171
|
+
},
|
|
172
|
+
'}'
|
|
173
|
+
);
|
|
174
|
+
printer.line('return &Client{config: config}');
|
|
175
|
+
},
|
|
176
|
+
'}'
|
|
177
|
+
);
|
|
178
|
+
printer.blank();
|
|
179
|
+
|
|
180
|
+
for (const { op, ident } of goOperationIdents(model)) {
|
|
181
|
+
writeGoMethod(printer, op, ident, dateType);
|
|
182
|
+
if (sseResponse(op) === undefined && (op.successResponseHeaders?.length ?? 0) > 0) {
|
|
183
|
+
writeGoMethod(printer, op, ident, dateType, model, true);
|
|
184
|
+
}
|
|
185
|
+
const rule = paginationRules.get(ident);
|
|
186
|
+
if (rule === undefined) continue;
|
|
187
|
+
const success = jsonSuccessSchema(op);
|
|
188
|
+
const pageType = success === undefined ? 'any' : goType(success, dateType);
|
|
189
|
+
const element = paginationItemSchema(success, rule.items, model);
|
|
190
|
+
writeGoPaginationWrappers(
|
|
191
|
+
printer,
|
|
192
|
+
op,
|
|
193
|
+
ident,
|
|
194
|
+
dateType,
|
|
195
|
+
pageType,
|
|
196
|
+
element === undefined ? 'any' : goType(element, dateType)
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** The whole generated file: models + embedded runtime + operations table + Client. */
|
|
202
|
+
export const goGenerator: Generator = ({ model, output, banner, emit, pagination }) => {
|
|
203
|
+
const printer = new GoPrinter();
|
|
204
|
+
const dateType = emit.dateType ?? 'string';
|
|
205
|
+
const packageName = goPackageName(emit.goPackage);
|
|
206
|
+
// Pagination arrives RESOLVED from the pipeline — one fit-verified answer per run.
|
|
207
|
+
const paginationRules = new Map<string, NeutralPaginationRule>();
|
|
208
|
+
for (const { op, ident } of goOperationIdents(model)) {
|
|
209
|
+
const spec = pagination?.get(op.name)?.spec;
|
|
210
|
+
if (spec !== undefined) paginationRules.set(ident, spec);
|
|
211
|
+
}
|
|
212
|
+
printer.line(
|
|
213
|
+
`// Code generated by @redocly/client-generator (go) from "${model.title}" ${model.version}. DO NOT EDIT.`
|
|
214
|
+
);
|
|
215
|
+
printer.line(
|
|
216
|
+
'// Regenerate with `redocly generate-client`. Standard library only — zero dependencies.'
|
|
217
|
+
);
|
|
218
|
+
printer.line(`package ${packageName}`);
|
|
219
|
+
printer.blank();
|
|
220
|
+
const embedRuntime = emit.runtime !== 'module';
|
|
221
|
+
// One merged import block. Inline: the runtime uses every entry. Module: the runtime
|
|
222
|
+
// imports for itself, so the client lists only the packages its own body references —
|
|
223
|
+
// an unused import is a Go compile error, so the subset is derived from the body text.
|
|
224
|
+
const imports = embedRuntime
|
|
225
|
+
? GO_STDLIB_IMPORTS
|
|
226
|
+
: (() => {
|
|
227
|
+
const scratch = new GoPrinter();
|
|
228
|
+
writeGoBody(scratch, model, emit, dateType, paginationRules, false);
|
|
229
|
+
const body = scratch.toString();
|
|
230
|
+
return GO_STDLIB_IMPORTS.filter((spec) =>
|
|
231
|
+
new RegExp(`\\b${spec.split('/').pop()}\\.`).test(body)
|
|
232
|
+
);
|
|
233
|
+
})();
|
|
234
|
+
printer.block(
|
|
235
|
+
'import (',
|
|
236
|
+
() => {
|
|
237
|
+
for (const spec of imports) {
|
|
238
|
+
printer.line(naming.string(spec));
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
')'
|
|
242
|
+
);
|
|
243
|
+
printer.blank();
|
|
244
|
+
|
|
245
|
+
writeGoBody(printer, model, emit, dateType, paginationRules, embedRuntime);
|
|
246
|
+
|
|
247
|
+
const entry = {
|
|
248
|
+
path: output.path.replace(/\.[^.\\/]+$/, '.go'),
|
|
249
|
+
// Sections are stitched with their own trailing blanks; gofmt allows at most one
|
|
250
|
+
// between declarations and none at the end of the file.
|
|
251
|
+
content: printer.toString(),
|
|
252
|
+
};
|
|
253
|
+
if (embedRuntime) return [entry];
|
|
254
|
+
// The runtime, verbatim except the package clause — same directory, same Go package.
|
|
255
|
+
const header = banner.map((line) => `// ${line}`).join('\n');
|
|
256
|
+
const runtimeSource = GO_RUNTIME_SOURCE.replace(/^package .*$/m, `package ${packageName}`);
|
|
257
|
+
return [
|
|
258
|
+
entry,
|
|
259
|
+
{
|
|
260
|
+
path: entry.path.replace(/[^\\/]+$/, 'runtime.go'),
|
|
261
|
+
content: `${header}\n${runtimeSource.trimEnd()}\n`,
|
|
262
|
+
},
|
|
263
|
+
];
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
/** One idiomatic Go call per operation — feeds `x-codeSamples` for docs. */
|
|
267
|
+
export function goSample(op: OperationModel, ctx: SampleContext): CodeSample {
|
|
268
|
+
const dateType = ctx.emit.dateType ?? 'string';
|
|
269
|
+
// `goPackage` renames the package clause, and the snippet qualifies with it.
|
|
270
|
+
const pkg = ctx.emit.goPackage ?? 'client';
|
|
271
|
+
// The DEDUPED name: on a collision the method is `GetUser2`, and a snippet naming the
|
|
272
|
+
// raw `GetUser` would show a call that goes to a different operation.
|
|
273
|
+
const ident =
|
|
274
|
+
goOperationIdents(ctx.model).find((entry) => entry.op.name === op.name)?.ident ??
|
|
275
|
+
exported(op.name);
|
|
276
|
+
const args = [
|
|
277
|
+
'ctx',
|
|
278
|
+
...op.pathParams.map(
|
|
279
|
+
(param) => `"<${identifierFor(param.name, { style: 'camel', reserved: GO })}>"`
|
|
280
|
+
),
|
|
281
|
+
...(op.requestBody ? [`${goType(op.requestBody.schema, dateType)}{ /* … */ }`] : []),
|
|
282
|
+
...(op.queryParams.length > 0 ? ['nil'] : []),
|
|
283
|
+
];
|
|
284
|
+
// The assignment matches the return shape: an SSE method returns one iterator, a void
|
|
285
|
+
// method returns `error` alone — `result, err :=` would not compile against either.
|
|
286
|
+
const call = `client.${ident}(${args.join(', ')})`;
|
|
287
|
+
const statement =
|
|
288
|
+
sseResponse(op) !== undefined
|
|
289
|
+
? `stream := ${call}`
|
|
290
|
+
: jsonSuccessSchema(op) === undefined
|
|
291
|
+
? `err := ${call}`
|
|
292
|
+
: `result, err := ${call}`;
|
|
293
|
+
return {
|
|
294
|
+
lang: 'go',
|
|
295
|
+
label: 'Go SDK',
|
|
296
|
+
source: `client := ${pkg}.New(${pkg}.Config{})\n${statement}\n`,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* The SDK's own reference page, written when `client.docs` is on. The call snippets come
|
|
302
|
+
* from `goSample` — this generator's own hook — so the page can only ever show the syntax
|
|
303
|
+
* of the SDK beside it, and ejecting this generator takes the page with it.
|
|
304
|
+
*/
|
|
305
|
+
export const goDocs: Generator = ({ model, output, emit, pagination }) => [
|
|
306
|
+
{
|
|
307
|
+
path: output.path.replace(/\.[^.\\/]+$/, '.go.md'),
|
|
308
|
+
content: renderReferencePage(model, {
|
|
309
|
+
title: `${model.title} Go SDK reference`,
|
|
310
|
+
frontmatter: emit.docsFrontmatter === true,
|
|
311
|
+
language: {
|
|
312
|
+
name: 'go',
|
|
313
|
+
label: 'Go',
|
|
314
|
+
fence: 'go',
|
|
315
|
+
requires: 'The SDK needs the standard library only.',
|
|
316
|
+
},
|
|
317
|
+
sample: (op) => goSample(op, { model, emit, outputPath: output.path }),
|
|
318
|
+
paginated: new Set(pagination?.keys() ?? []),
|
|
319
|
+
}),
|
|
320
|
+
},
|
|
321
|
+
];
|
|
322
|
+
|
|
323
|
+
export default {
|
|
324
|
+
name: 'go',
|
|
325
|
+
run: goGenerator,
|
|
326
|
+
sample: goSample,
|
|
327
|
+
docs: goDocs,
|
|
328
|
+
errorModes: ["throw"],
|
|
329
|
+
notApplicable: {
|
|
330
|
+
"outputMode": "it always emits one self-contained file",
|
|
331
|
+
"runtime": "the runtime is always embedded in the generated file",
|
|
332
|
+
"argsStyle": "inputs follow the target language's own idiom",
|
|
333
|
+
"importExt": "the generated file has no relative imports"
|
|
334
|
+
},
|
|
335
|
+
requiresGenerator: '^0.4.0',
|
|
336
|
+
};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// Ejected from @redocly/client-generator@0.4.0 — the built-in "go" generator.
|
|
2
|
+
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
|
+
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
|
+
// `redocly eject-generator go --update`.
|
|
5
|
+
// The `models` stage: named schemas as typed-const enums, structs with json tags
|
|
6
|
+
// (allOf flattened), and discriminated unions with unmarshal dispatchers.
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
type ApiModel,
|
|
10
|
+
casing,
|
|
11
|
+
type DateType,
|
|
12
|
+
discriminatorCases,
|
|
13
|
+
enumValues,
|
|
14
|
+
flattenAllOf,
|
|
15
|
+
type PropertyModel,
|
|
16
|
+
} from '@redocly/client-generator';
|
|
17
|
+
import { exported, GoPrinter } from '@redocly/client-generator/printers/go';
|
|
18
|
+
|
|
19
|
+
import { naming } from './naming.ts';
|
|
20
|
+
import { goType } from './types.ts';
|
|
21
|
+
|
|
22
|
+
function writeStruct(
|
|
23
|
+
printer: GoPrinter,
|
|
24
|
+
name: string,
|
|
25
|
+
properties: PropertyModel[],
|
|
26
|
+
dateType: DateType,
|
|
27
|
+
description?: string
|
|
28
|
+
): void {
|
|
29
|
+
printer.doc(exported(name), description);
|
|
30
|
+
printer.block(
|
|
31
|
+
`type ${exported(name)} struct {`,
|
|
32
|
+
() => {
|
|
33
|
+
for (const property of properties) {
|
|
34
|
+
const field = exported(property.name);
|
|
35
|
+
let fieldType = goType(property.schema, dateType);
|
|
36
|
+
let tag = `\`json:"${property.name}"\``;
|
|
37
|
+
if (!property.required) {
|
|
38
|
+
if (
|
|
39
|
+
!fieldType.startsWith('*') &&
|
|
40
|
+
!fieldType.startsWith('[]') &&
|
|
41
|
+
!fieldType.startsWith('map[') &&
|
|
42
|
+
fieldType !== 'any'
|
|
43
|
+
) {
|
|
44
|
+
fieldType = `*${fieldType}`;
|
|
45
|
+
}
|
|
46
|
+
tag = `\`json:"${property.name},omitempty"\``;
|
|
47
|
+
}
|
|
48
|
+
printer.line(`${field} ${fieldType} ${tag}`);
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
'}'
|
|
52
|
+
);
|
|
53
|
+
printer.blank();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Render every named schema: typed-const enums, structs (allOf flattened), union dispatchers. */
|
|
57
|
+
export function renderGoModels(model: ApiModel, dateType: DateType = 'string'): string {
|
|
58
|
+
const printer = new GoPrinter();
|
|
59
|
+
printer.line('package client');
|
|
60
|
+
printer.blank();
|
|
61
|
+
const needsJSON = model.schemas.some(
|
|
62
|
+
({ schema }) => discriminatorCases(schema, model) !== undefined
|
|
63
|
+
);
|
|
64
|
+
if (needsJSON) {
|
|
65
|
+
printer.line('import "encoding/json"');
|
|
66
|
+
printer.blank();
|
|
67
|
+
}
|
|
68
|
+
// The models section also compiles standalone (see the unit bars), so it declares
|
|
69
|
+
// its own `time` import when a field is a date.
|
|
70
|
+
const body = renderGoModelBodies(model, dateType);
|
|
71
|
+
if (dateType === 'Date' && body.includes('time.Time')) {
|
|
72
|
+
printer.line('import "time"');
|
|
73
|
+
printer.blank();
|
|
74
|
+
}
|
|
75
|
+
printer.line(body);
|
|
76
|
+
return printer.toString();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** The struct/enum/union declarations themselves — the header is renderGoModels' job. */
|
|
80
|
+
function renderGoModelBodies(model: ApiModel, dateType: DateType): string {
|
|
81
|
+
const printer = new GoPrinter();
|
|
82
|
+
|
|
83
|
+
for (const { name, schema } of model.schemas) {
|
|
84
|
+
const asEnum = enumValues(schema);
|
|
85
|
+
if (asEnum !== undefined) {
|
|
86
|
+
const base = asEnum.scalar === 'string' ? 'string' : 'int64';
|
|
87
|
+
printer.doc(exported(name), schema.description);
|
|
88
|
+
printer.line(`type ${exported(name)} ${base}`);
|
|
89
|
+
printer.blank();
|
|
90
|
+
printer.block(
|
|
91
|
+
'const (',
|
|
92
|
+
() => {
|
|
93
|
+
// Two values may fold to one pascal name (`1.5` and `15`) — a duplicate const
|
|
94
|
+
// would not compile, so the names are made unique per enum. A digit-leading
|
|
95
|
+
// value needs no `_` prefix here: the member starts with the type name.
|
|
96
|
+
const used = new Set<string>();
|
|
97
|
+
asEnum.values.forEach((value) => {
|
|
98
|
+
const base = casing.pascal(String(value)) || 'Value';
|
|
99
|
+
let suffix = '';
|
|
100
|
+
for (let n = 2; used.has(base + suffix); n++) suffix = String(n);
|
|
101
|
+
used.add(base + suffix);
|
|
102
|
+
const member = exported(name) + base + suffix;
|
|
103
|
+
printer.line(`${member} ${exported(name)} = ${naming.literal(value)}`);
|
|
104
|
+
});
|
|
105
|
+
},
|
|
106
|
+
')'
|
|
107
|
+
);
|
|
108
|
+
printer.blank();
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (schema.kind === 'object' || schema.kind === 'intersection') {
|
|
112
|
+
const flat = flattenAllOf(schema, model);
|
|
113
|
+
if (flat !== undefined) {
|
|
114
|
+
writeStruct(
|
|
115
|
+
printer,
|
|
116
|
+
name,
|
|
117
|
+
flat.properties,
|
|
118
|
+
dateType,
|
|
119
|
+
flat.description ?? schema.description
|
|
120
|
+
);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const cases = discriminatorCases(schema, model);
|
|
125
|
+
if (cases !== undefined) {
|
|
126
|
+
const typeName = exported(name);
|
|
127
|
+
const table = cases.cases
|
|
128
|
+
.map((entry) => `${entry.value} -> ${exported(entry.schemaName)}`)
|
|
129
|
+
.join(', ');
|
|
130
|
+
printer.line(`// ${typeName} is a discriminated union ("${cases.property}"): ${table}.`);
|
|
131
|
+
printer.line(`type ${typeName} = any`);
|
|
132
|
+
printer.blank();
|
|
133
|
+
printer.line(
|
|
134
|
+
`// Unmarshal${typeName} decodes into the member selected by "${cases.property}".`
|
|
135
|
+
);
|
|
136
|
+
printer.block(
|
|
137
|
+
`func Unmarshal${typeName}(data []byte) (${typeName}, error) {`,
|
|
138
|
+
() => {
|
|
139
|
+
printer.block(
|
|
140
|
+
'var probe struct {',
|
|
141
|
+
() => {
|
|
142
|
+
printer.line(`Discriminant string \`json:"${cases.property}"\``);
|
|
143
|
+
},
|
|
144
|
+
'}'
|
|
145
|
+
);
|
|
146
|
+
printer.block(
|
|
147
|
+
'if err := json.Unmarshal(data, &probe); err != nil {',
|
|
148
|
+
() => {
|
|
149
|
+
printer.line('return nil, err');
|
|
150
|
+
},
|
|
151
|
+
'}'
|
|
152
|
+
);
|
|
153
|
+
// gofmt keeps `case` at the switch's own indent, so the switch body is NOT
|
|
154
|
+
// indented as a block — only each case's statements are.
|
|
155
|
+
printer.line('switch probe.Discriminant {');
|
|
156
|
+
for (const entry of cases.cases) {
|
|
157
|
+
printer.block(`case ${naming.string(entry.value)}:`, () => {
|
|
158
|
+
printer.line(`var value ${exported(entry.schemaName)}`);
|
|
159
|
+
printer.line('err := json.Unmarshal(data, &value)');
|
|
160
|
+
printer.line('return value, err');
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
printer.line('}');
|
|
164
|
+
printer.line('var fallback any');
|
|
165
|
+
printer.line('err := json.Unmarshal(data, &fallback)');
|
|
166
|
+
printer.line('return fallback, err');
|
|
167
|
+
},
|
|
168
|
+
'}'
|
|
169
|
+
);
|
|
170
|
+
printer.blank();
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
// Everything else (plain unions, scalar aliases, records) becomes a type alias.
|
|
174
|
+
printer.doc(exported(name), schema.description);
|
|
175
|
+
printer.line(`type ${exported(name)} = ${goType(schema, dateType)}`);
|
|
176
|
+
printer.blank();
|
|
177
|
+
}
|
|
178
|
+
return printer.toString();
|
|
179
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Ejected from @redocly/client-generator@0.4.0 — the built-in "go" generator.
|
|
2
|
+
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
|
+
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
|
+
// `redocly eject-generator go --update`.
|
|
5
|
+
// The `naming` stage: the shared printer/naming instance, the package clause, and
|
|
6
|
+
// the collision-free operation identifiers every other stage builds on.
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
type ApiModel,
|
|
10
|
+
NotSupportedError,
|
|
11
|
+
type OperationModel,
|
|
12
|
+
RESERVED_WORDS,
|
|
13
|
+
} from '@redocly/client-generator';
|
|
14
|
+
import { exported, GoPrinter } from '@redocly/client-generator/printers/go';
|
|
15
|
+
|
|
16
|
+
// One escaping policy for every Go string literal this generator prints.
|
|
17
|
+
export const naming = new GoPrinter();
|
|
18
|
+
|
|
19
|
+
export const GO = RESERVED_WORDS.go;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The package clause the output declares. Rewriting an invalid name would hide the
|
|
23
|
+
* publisher's typo behind a package their imports don't mention, so this rejects it.
|
|
24
|
+
*/
|
|
25
|
+
export function goPackageName(configured: string | undefined): string {
|
|
26
|
+
if (configured === undefined) return 'client';
|
|
27
|
+
if (!/^[a-z_][a-z0-9_]*$/.test(configured) || GO.has(configured)) {
|
|
28
|
+
throw new NotSupportedError(
|
|
29
|
+
`goPackage "${configured}" is not a valid Go package name: use lowercase letters, digits, and underscores, don't start with a digit, and avoid Go keywords.`
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
return configured;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Every operation with its collision-free exported Go method name. */
|
|
36
|
+
export function goOperationIdents(model: ApiModel): Array<{ op: OperationModel; ident: string }> {
|
|
37
|
+
const used = new Set<string>();
|
|
38
|
+
const out: Array<{ op: OperationModel; ident: string }> = [];
|
|
39
|
+
for (const service of model.services) {
|
|
40
|
+
for (const op of service.operations) {
|
|
41
|
+
let ident = exported(op.name);
|
|
42
|
+
let suffix = 2;
|
|
43
|
+
while (used.has(ident)) ident = `${exported(op.name)}${suffix++}`;
|
|
44
|
+
used.add(ident);
|
|
45
|
+
out.push({ op, ident });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|