@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,348 @@
|
|
|
1
|
+
// Ejected from @redocly/client-generator@0.4.0 — the built-in "cli" 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 cli --update`.
|
|
5
|
+
// The cli emitter: derives pure `CliCommand[]` data from the IR and renders
|
|
6
|
+
// `<stem>.cli.ts` — a shebang entry that embeds (inline) or imports (package)
|
|
7
|
+
// the `runCli` engine and dispatches through the sibling generated client.
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
type ApiModel,
|
|
11
|
+
casing,
|
|
12
|
+
type CliAuthScheme,
|
|
13
|
+
type CliCommand,
|
|
14
|
+
type CliFlag,
|
|
15
|
+
constantCase,
|
|
16
|
+
groupSlug,
|
|
17
|
+
type ModelPagination,
|
|
18
|
+
type OperationModel,
|
|
19
|
+
type ParamModel,
|
|
20
|
+
type SchemaModel,
|
|
21
|
+
} from '@redocly/client-generator';
|
|
22
|
+
import { flatInputShape } from '@redocly/client-generator/contracts/typescript';
|
|
23
|
+
import { logger } from '@redocly/openapi-core';
|
|
24
|
+
|
|
25
|
+
import { embedCliRuntime } from './engine-source.ts';
|
|
26
|
+
|
|
27
|
+
// The generated-by banner every emitted module carries (same lines as the pipeline's
|
|
28
|
+
// `input.banner`, rendered in `//` syntax).
|
|
29
|
+
const HEADER = `// Generated by @redocly/client-generator — do not edit by hand.
|
|
30
|
+
// Source: OpenAPI description. Re-run \`redocly generate-client\` to update.`;
|
|
31
|
+
|
|
32
|
+
function kebab(name: string): string {
|
|
33
|
+
return casing.snake(name).replace(/_/g, '-');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function flagFor(param: ParamModel): CliFlag {
|
|
37
|
+
const schema = param.schema;
|
|
38
|
+
const type: CliFlag['type'] =
|
|
39
|
+
schema.kind === 'array'
|
|
40
|
+
? 'array'
|
|
41
|
+
: schema.kind === 'scalar' && (schema.scalar === 'integer' || schema.scalar === 'number')
|
|
42
|
+
? 'number'
|
|
43
|
+
: schema.kind === 'scalar' && schema.scalar === 'boolean'
|
|
44
|
+
? 'boolean'
|
|
45
|
+
: 'string';
|
|
46
|
+
return {
|
|
47
|
+
name: kebab(param.name),
|
|
48
|
+
param: param.name,
|
|
49
|
+
type,
|
|
50
|
+
required: param.required,
|
|
51
|
+
...(schema.kind === 'enum' ? { enum: schema.values.map(String) } : {}),
|
|
52
|
+
...(param.description !== undefined ? { description: param.description } : {}),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Mirrors `computeResponse`: a blob operation has binary success content and no JSON alternative. */
|
|
57
|
+
function isBlobOp(op: OperationModel): boolean {
|
|
58
|
+
const responses = op.successResponses;
|
|
59
|
+
if (responses.some((response) => response.contentType.toLowerCase().includes('json'))) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return responses.some(
|
|
63
|
+
(response) =>
|
|
64
|
+
response.contentType.startsWith('image/') ||
|
|
65
|
+
response.contentType === 'application/octet-stream'
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function jsonSuccessSchema(op: OperationModel): SchemaModel | undefined {
|
|
70
|
+
return op.successResponses.find((response) => response.contentType.toLowerCase().includes('json'))
|
|
71
|
+
?.schema;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Whether a flat-style call spells this operation's body as its own properties — the same
|
|
76
|
+
* decision the client's types make, so the dispatcher never has to guess from a value.
|
|
77
|
+
*/
|
|
78
|
+
function mergedBodyFlag(
|
|
79
|
+
op: OperationModel,
|
|
80
|
+
model: ApiModel,
|
|
81
|
+
argsStyle: 'grouped' | 'flat' | undefined
|
|
82
|
+
): { merged?: true } {
|
|
83
|
+
if (argsStyle !== 'flat') return {};
|
|
84
|
+
const shape = flatInputShape(op, model.schemas);
|
|
85
|
+
return 'mergeBody' in shape && shape.mergeBody ? { merged: true } : {};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The operations a flat-style run still addresses by layer: their merged names would
|
|
90
|
+
* collide, so the client's own input type keeps the namespaced shape and the dispatcher
|
|
91
|
+
* has to build that shape too.
|
|
92
|
+
*/
|
|
93
|
+
function groupedInputFlag(
|
|
94
|
+
op: OperationModel,
|
|
95
|
+
model: ApiModel,
|
|
96
|
+
argsStyle: 'grouped' | 'flat' | undefined
|
|
97
|
+
): { argsStyle?: 'grouped' } {
|
|
98
|
+
if (argsStyle !== 'flat') return {};
|
|
99
|
+
return 'collisions' in flatInputShape(op, model.schemas) ? { argsStyle: 'grouped' } : {};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Every operation as pure command data — the table `runCli` interprets. */
|
|
103
|
+
export function commandData(
|
|
104
|
+
model: ApiModel,
|
|
105
|
+
emit: { pagination?: ModelPagination; argsStyle?: 'grouped' | 'flat' }
|
|
106
|
+
): CliCommand[] {
|
|
107
|
+
const commands: CliCommand[] = [];
|
|
108
|
+
for (const service of model.services) {
|
|
109
|
+
for (const op of service.operations) {
|
|
110
|
+
const jsonBody = op.requestBody?.contentType.toLowerCase().includes('json')
|
|
111
|
+
? op.requestBody
|
|
112
|
+
: undefined;
|
|
113
|
+
const responseSchema = jsonSuccessSchema(op);
|
|
114
|
+
commands.push({
|
|
115
|
+
...(op.tags.length > 0 ? { group: op.tags[0] } : {}),
|
|
116
|
+
name: op.name,
|
|
117
|
+
...(op.summary !== undefined ? { summary: op.summary } : {}),
|
|
118
|
+
method: op.method.toUpperCase(),
|
|
119
|
+
path: op.path,
|
|
120
|
+
positionals: op.pathParams.map((param) => ({
|
|
121
|
+
name: param.name,
|
|
122
|
+
type: flagFor(param).type,
|
|
123
|
+
...(param.description !== undefined ? { description: param.description } : {}),
|
|
124
|
+
})),
|
|
125
|
+
flags: op.queryParams.map(flagFor),
|
|
126
|
+
...(jsonBody
|
|
127
|
+
? { body: { required: jsonBody.required, ...mergedBodyFlag(op, model, emit.argsStyle) } }
|
|
128
|
+
: {}),
|
|
129
|
+
...(jsonBody === undefined && op.requestBody !== undefined
|
|
130
|
+
? { unsupportedBody: op.requestBody.contentType }
|
|
131
|
+
: {}),
|
|
132
|
+
...(emit.pagination?.has(op.name) === true ? { paginated: true } : {}),
|
|
133
|
+
...groupedInputFlag(op, model, emit.argsStyle),
|
|
134
|
+
...(op.sse !== undefined ? { sse: true } : {}),
|
|
135
|
+
...(isBlobOp(op) ? { blob: true } : {}),
|
|
136
|
+
...(jsonBody !== undefined || responseSchema !== undefined
|
|
137
|
+
? {
|
|
138
|
+
schemas: {
|
|
139
|
+
...(jsonBody ? { request: jsonBody.schema } : {}),
|
|
140
|
+
...(responseSchema !== undefined ? { response: responseSchema } : {}),
|
|
141
|
+
},
|
|
142
|
+
}
|
|
143
|
+
: {}),
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return commands;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* The self-execution guard both generated entries share. Realpath on both sides: some
|
|
152
|
+
* runners resolve symlinks in `import.meta.url` but not in `argv[1]` (macOS temp dirs,
|
|
153
|
+
* installed bin symlinks); the catch covers an entry that is not a file (REPL, node -e).
|
|
154
|
+
*/
|
|
155
|
+
const ENTRY_GUARD = `function isProcessEntry(): boolean {
|
|
156
|
+
if (process.argv[1] === undefined) return false;
|
|
157
|
+
try {
|
|
158
|
+
return realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1]);
|
|
159
|
+
} catch {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (isProcessEntry()) {
|
|
164
|
+
process.exit(await run());
|
|
165
|
+
}`;
|
|
166
|
+
|
|
167
|
+
/** JSON as a TS expression: U+2028/U+2029 are line terminators in code contexts. */
|
|
168
|
+
function codeJson(value: unknown, indent?: number): string {
|
|
169
|
+
return JSON.stringify(value, null, indent)
|
|
170
|
+
.replace(/\u2028/g, '\\u2028')
|
|
171
|
+
.replace(/\u2029/g, '\\u2029');
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export type CliModuleOptions = {
|
|
175
|
+
stem: string;
|
|
176
|
+
importExt: string;
|
|
177
|
+
zodSelected: boolean;
|
|
178
|
+
pagination?: ModelPagination;
|
|
179
|
+
/** The sibling client's call shape, which the dispatcher builds its inputs for. */
|
|
180
|
+
argsStyle?: 'grouped' | 'flat';
|
|
181
|
+
/** `'module'` imports the engine from `./runtime/cli` instead of embedding it. */
|
|
182
|
+
runtime?: 'inline' | 'module';
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* The auth schemes as the CLI sees them: every apiKey placement is one `apiKey` kind,
|
|
187
|
+
* since the credential is read from the same env variable either way. Exported so the
|
|
188
|
+
* docs generator names the same variables the runtime reads.
|
|
189
|
+
*/
|
|
190
|
+
export function cliAuthSchemes(model: ApiModel): CliAuthScheme[] {
|
|
191
|
+
return model.securitySchemes.map((scheme) => ({
|
|
192
|
+
key: scheme.key,
|
|
193
|
+
kind: scheme.kind === 'bearer' || scheme.kind === 'basic' ? scheme.kind : 'apiKey',
|
|
194
|
+
}));
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** How an operation named after a tag is reached — the two halves of `parseInvocation`. */
|
|
198
|
+
function shadowedAddress(command: CliCommand): string {
|
|
199
|
+
return command.group === undefined
|
|
200
|
+
? `${command.name} (keeps the bare word, so the "${command.name}" group has no help page)`
|
|
201
|
+
: `${command.name} (run it as "${groupSlug(command.group)} ${command.name}")`;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* A leading group name is read as the group, so an operation whose name is also a tag name
|
|
206
|
+
* resolves unusually: a tagged one loses the bare form and runs as `<its group> <name>`,
|
|
207
|
+
* and an untagged one keeps the bare form and hides that group's help. Nothing becomes
|
|
208
|
+
* unreachable either way, but only the description's author can rename a side of the
|
|
209
|
+
* collision, so say it once at generation time.
|
|
210
|
+
*/
|
|
211
|
+
function warnShadowedCommands(commands: CliCommand[]): void {
|
|
212
|
+
const slugs = new Set(commands.filter((c) => c.group).map((c) => groupSlug(c.group as string)));
|
|
213
|
+
const shadowed = commands.filter((command) => slugs.has(command.name));
|
|
214
|
+
if (shadowed.length === 0) return;
|
|
215
|
+
logger.warn(
|
|
216
|
+
`generate-client: cli reads a leading group name as the group, so ${shadowed.length} operation(s) named after a tag resolve unusually — rename the operation or the tag: ${shadowed
|
|
217
|
+
.map(shadowedAddress)
|
|
218
|
+
.join(', ')}.\n`
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/** The whole `<stem>.cli.ts` file. */
|
|
223
|
+
export function renderCliModule(model: ApiModel, options: CliModuleOptions): string {
|
|
224
|
+
const commands = commandData(model, {
|
|
225
|
+
pagination: options.pagination,
|
|
226
|
+
argsStyle: options.argsStyle,
|
|
227
|
+
});
|
|
228
|
+
warnShadowedCommands(commands);
|
|
229
|
+
const schemes = cliAuthSchemes(model);
|
|
230
|
+
const clientModule = `./${options.stem}.${options.importExt}`;
|
|
231
|
+
const clientImports = ['client', 'configure', ...(options.zodSelected ? ['use'] : [])];
|
|
232
|
+
|
|
233
|
+
const parts = [
|
|
234
|
+
'#!/usr/bin/env node',
|
|
235
|
+
HEADER,
|
|
236
|
+
'import { readFileSync, realpathSync, writeFileSync } from "node:fs";\nimport { fileURLToPath } from "node:url";',
|
|
237
|
+
[
|
|
238
|
+
`import { ${clientImports.join(', ')} } from "${clientModule}";`,
|
|
239
|
+
...(options.zodSelected
|
|
240
|
+
? [`import { zodValidation } from "./${options.stem}.zod.${options.importExt}";`]
|
|
241
|
+
: []),
|
|
242
|
+
].join('\n'),
|
|
243
|
+
options.runtime === 'module'
|
|
244
|
+
? `import { invokedName, runCli, type CliCommand, type CliWiring } from "./runtime/cli.${options.importExt}";`
|
|
245
|
+
: '// ─── Embedded cli engine (@redocly/client-generator) ───\n' + embedCliRuntime(),
|
|
246
|
+
`export const COMMANDS: CliCommand[] = ${codeJson(commands, 2)};`,
|
|
247
|
+
...(options.zodSelected
|
|
248
|
+
? [
|
|
249
|
+
// A dry run never sends the request, so its "response" is the stub the dry-run
|
|
250
|
+
// fetch returns — validating that reports drift that does not exist. Request
|
|
251
|
+
// validation still runs, which is what makes `--dry-run` a useful preflight.
|
|
252
|
+
`use(zodValidation(process.argv.includes("--dry-run") ? { response: false } : {}));`,
|
|
253
|
+
]
|
|
254
|
+
: []),
|
|
255
|
+
`export const wiring: CliWiring = {
|
|
256
|
+
name: invokedName(process.argv[1], ${codeJson(options.stem)}),
|
|
257
|
+
envPrefix: ${codeJson(constantCase(options.stem))},
|
|
258
|
+
client,
|
|
259
|
+
${options.argsStyle === 'flat' ? ' argsStyle: "flat",\n' : ''} configure,
|
|
260
|
+
schemes: ${codeJson(schemes)},
|
|
261
|
+
env: process.env,
|
|
262
|
+
stdin: () => readFileSync(0, "utf-8"),
|
|
263
|
+
readFile: (path: string) => readFileSync(path, "utf-8"),
|
|
264
|
+
writeFile: (path: string, data: Uint8Array) => writeFileSync(path, data),
|
|
265
|
+
stdout: (line: string) => console.log(line),
|
|
266
|
+
stderr: (line: string) => console.error(line),
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
/** Run this CLI programmatically; defaults to the process argv. */
|
|
270
|
+
export const run = (argv: string[] = process.argv.slice(2)): Promise<number> =>
|
|
271
|
+
runCli(COMMANDS, wiring, argv);
|
|
272
|
+
|
|
273
|
+
// Re-exported so a composed entry can run these commands without its own runtime copy.
|
|
274
|
+
export { runCli };
|
|
275
|
+
|
|
276
|
+
// Self-execute only as the process entry, so importing this module is side-effect-safe:
|
|
277
|
+
// composed binaries and login-style wrappers import COMMANDS/wiring/run instead of
|
|
278
|
+
// editing this generated file.
|
|
279
|
+
${ENTRY_GUARD}`,
|
|
280
|
+
];
|
|
281
|
+
return parts.join('\n\n') + '\n';
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export type ComposedCliSource = {
|
|
285
|
+
/** The api alias from `apis:` — it becomes the namespace the shell types. */
|
|
286
|
+
alias: string;
|
|
287
|
+
/** Relative specifier of that api's generated cli module, extension included. */
|
|
288
|
+
modulePath: string;
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* The composed entry `client.cliOutput` produces: one binary over every api that selected
|
|
293
|
+
* `cli`, each behind its alias as the namespace, with `<BINNAME>_<ALIAS>` credential
|
|
294
|
+
* prefixes. It imports `runCli` from the first source's module — generated code, so the
|
|
295
|
+
* inline runtime's zero-dependency promise holds — and exports `SOURCES` so an adopter
|
|
296
|
+
* layers custom commands (a `login`) around it without editing a generated file.
|
|
297
|
+
*/
|
|
298
|
+
export function renderComposedCliEntry(sources: ComposedCliSource[], stem: string): string {
|
|
299
|
+
const prefix = constantCase(stem);
|
|
300
|
+
// An identifier can't start with a digit, and two aliases can sanitize identically —
|
|
301
|
+
// the underscore and the index keep every import binding legal and unique.
|
|
302
|
+
const idents = new Map<string, string>();
|
|
303
|
+
sources.forEach(({ alias }, index) => {
|
|
304
|
+
const sanitized = alias.replace(/[^A-Za-z0-9]/g, '_');
|
|
305
|
+
const legal = /^[A-Za-z_]/.test(sanitized) ? sanitized : `_${sanitized}`;
|
|
306
|
+
idents.set(alias, [...idents.values()].includes(legal) ? `${legal}_${index}` : legal);
|
|
307
|
+
});
|
|
308
|
+
const identFor = (alias: string): string => idents.get(alias)!;
|
|
309
|
+
const imports = sources.map(({ alias, modulePath }, index) => {
|
|
310
|
+
const ident = identFor(alias);
|
|
311
|
+
const runtime = index === 0 ? ', runCli' : '';
|
|
312
|
+
return `import { COMMANDS as ${ident}Commands, wiring as ${ident}Wiring${runtime} } from ${JSON.stringify(modulePath)};`;
|
|
313
|
+
});
|
|
314
|
+
const entries = sources.map(({ alias }) => {
|
|
315
|
+
const ident = identFor(alias);
|
|
316
|
+
const namespace = kebab(alias);
|
|
317
|
+
const aliasPrefix = `${prefix}_${constantCase(alias)}`;
|
|
318
|
+
return ` {
|
|
319
|
+
namespace: ${JSON.stringify(namespace)},
|
|
320
|
+
commands: ${ident}Commands,
|
|
321
|
+
wiring: { ...${ident}Wiring, envPrefix: ${JSON.stringify(aliasPrefix)} },
|
|
322
|
+
},`;
|
|
323
|
+
});
|
|
324
|
+
return (
|
|
325
|
+
[
|
|
326
|
+
'#!/usr/bin/env node',
|
|
327
|
+
HEADER,
|
|
328
|
+
[
|
|
329
|
+
'import { realpathSync } from "node:fs";',
|
|
330
|
+
'import { fileURLToPath } from "node:url";',
|
|
331
|
+
...imports,
|
|
332
|
+
].join('\n'),
|
|
333
|
+
`/** The composed sources — import SOURCES to layer custom commands around this binary. */
|
|
334
|
+
export const SOURCES = [
|
|
335
|
+
${entries.join('\n')}
|
|
336
|
+
];
|
|
337
|
+
|
|
338
|
+
/** Run the composed CLI programmatically; defaults to the process argv. */
|
|
339
|
+
export const run = (argv: string[] = process.argv.slice(2)): Promise<number> =>
|
|
340
|
+
runCli(SOURCES, argv);
|
|
341
|
+
|
|
342
|
+
// Re-exported so a wrapper (a custom \`login\` command) can run these sources itself.
|
|
343
|
+
export { runCli };
|
|
344
|
+
|
|
345
|
+
${ENTRY_GUARD}`,
|
|
346
|
+
].join('\n\n') + '\n'
|
|
347
|
+
);
|
|
348
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
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 `client` stage: one `<Name>URL` function per declared server.
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
type ApiModel,
|
|
9
|
+
identifierFor,
|
|
10
|
+
type ServerModel,
|
|
11
|
+
serverUrlParts,
|
|
12
|
+
} from '@redocly/client-generator';
|
|
13
|
+
import { exported, type GoPrinter } from '@redocly/client-generator/printers/go';
|
|
14
|
+
|
|
15
|
+
import { GO, naming } from './naming.ts';
|
|
16
|
+
|
|
17
|
+
/** The server URL as a Go expression: literals concatenated with declared-variable args. */
|
|
18
|
+
function serverUrlExpression(server: ServerModel): string {
|
|
19
|
+
const parts = serverUrlParts(server).map((part) =>
|
|
20
|
+
part.kind === 'literal'
|
|
21
|
+
? naming.string(part.value)
|
|
22
|
+
: identifierFor(part.name, { style: 'camel', reserved: GO })
|
|
23
|
+
);
|
|
24
|
+
return parts.join(' + ');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** One `<Name>URL` function per declared server; server variables become parameters. */
|
|
28
|
+
export function writeGoServers(printer: GoPrinter, model: ApiModel): void {
|
|
29
|
+
const servers = model.servers ?? [];
|
|
30
|
+
if (servers.length === 0) return;
|
|
31
|
+
const usedNames = new Set<string>();
|
|
32
|
+
servers.forEach((server, index) => {
|
|
33
|
+
let name = `${exported(server.description ?? `server${index + 1}`)}URL`;
|
|
34
|
+
if (usedNames.has(name)) name = `${name}${index + 1}`;
|
|
35
|
+
usedNames.add(name);
|
|
36
|
+
const params = server.variables.map(
|
|
37
|
+
(variable) => `${identifierFor(variable.name, { style: 'camel', reserved: GO })} string`
|
|
38
|
+
);
|
|
39
|
+
const defaults = server.variables
|
|
40
|
+
.map(
|
|
41
|
+
(variable) =>
|
|
42
|
+
`${identifierFor(variable.name, { style: 'camel', reserved: GO })} default: ${naming.string(variable.default)}`
|
|
43
|
+
)
|
|
44
|
+
.join(', ');
|
|
45
|
+
printer.line(
|
|
46
|
+
`// ${name} returns the ${naming.string(server.description ?? server.url)} base URL${defaults === '' ? '.' : ` (${defaults}).`}`
|
|
47
|
+
);
|
|
48
|
+
printer.block(
|
|
49
|
+
`func ${name}(${params.join(', ')}) string {`,
|
|
50
|
+
() => {
|
|
51
|
+
printer.line(`return ${serverUrlExpression(server)}`);
|
|
52
|
+
},
|
|
53
|
+
'}'
|
|
54
|
+
);
|
|
55
|
+
printer.blank();
|
|
56
|
+
});
|
|
57
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
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 `descriptor` stage: the operations-table composite literals — security
|
|
6
|
+
// OR-alternatives and the pagination spec.
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
type ApiModel,
|
|
10
|
+
type NeutralPaginationRule,
|
|
11
|
+
type OperationModel,
|
|
12
|
+
securityRequirements,
|
|
13
|
+
} from '@redocly/client-generator';
|
|
14
|
+
|
|
15
|
+
import { naming } from './naming.ts';
|
|
16
|
+
|
|
17
|
+
/** Go composite literal for one operation's security OR-alternatives. */
|
|
18
|
+
export function goSecurityLiteral(op: OperationModel, model: ApiModel): string | undefined {
|
|
19
|
+
const alternatives = securityRequirements(op, model).map((alternative) =>
|
|
20
|
+
alternative.map((spec) =>
|
|
21
|
+
spec.kind === 'apiKey'
|
|
22
|
+
? `{Scheme: ${naming.string(spec.scheme)}, Kind: "apiKey", Name: ${naming.string(spec.name)}, In: ${naming.string(spec.in)}}`
|
|
23
|
+
: `{Scheme: ${naming.string(spec.scheme)}, Kind: ${naming.string(spec.kind)}}`
|
|
24
|
+
)
|
|
25
|
+
);
|
|
26
|
+
if (alternatives.length === 0) return undefined;
|
|
27
|
+
return `[][]SecuritySpec{${alternatives.map((specs) => `{${specs.join(', ')}}`).join(', ')}}`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** The neutral rule as a `&PaginationSpec{…}` composite literal for the operations table. */
|
|
31
|
+
export function goPaginationLiteral(rule: NeutralPaginationRule): string {
|
|
32
|
+
const fields = [
|
|
33
|
+
`Style: ${naming.string(rule.style)}`,
|
|
34
|
+
...(rule.param !== undefined ? [`Param: ${naming.string(rule.param)}`] : []),
|
|
35
|
+
...(rule.nextCursor !== undefined ? [`NextCursor: ${naming.string(rule.nextCursor)}`] : []),
|
|
36
|
+
...(rule.hasMore !== undefined ? [`HasMore: ${naming.string(rule.hasMore)}`] : []),
|
|
37
|
+
...(rule.limitParam !== undefined ? [`LimitParam: ${naming.string(rule.limitParam)}`] : []),
|
|
38
|
+
...(rule.items !== undefined ? [`Items: ${naming.string(rule.items)}`] : []),
|
|
39
|
+
];
|
|
40
|
+
return `&PaginationSpec{${fields.join(', ')}}`;
|
|
41
|
+
}
|