@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,346 @@
|
|
|
1
|
+
// Ejected from @redocly/client-generator@0.4.0 — the built-in "tanstack-query" 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 tanstack-query --update`.
|
|
5
|
+
// Emits an idiomatic TanStack Query v5 module over the generated client. The factories
|
|
6
|
+
// are built by `createQueryFactories(instance)` — bindable to any client instance (per-instance
|
|
7
|
+
// config, middleware, retry) — and the module-level exports bind the sdk's default
|
|
8
|
+
// `client`. Per query operation (GET/HEAD): `<op>QueryKey(vars?)` (the no-args form is
|
|
9
|
+
// the invalidation prefix) and `<op>Options(vars, init?)` whose `queryFn` forwards
|
|
10
|
+
// TanStack's abort `signal`. A paginated query op additionally gets
|
|
11
|
+
// `<op>InfiniteOptions(vars, init?)` with `initialPageParam`/`getNextPageParam` compiled
|
|
12
|
+
// from the pagination rule's JSON pointers. Per mutation: `<op>Mutation(init?)`. Calls go
|
|
13
|
+
// through the client instance's methods, which take one input object in either
|
|
14
|
+
// `--args-style`; only the infinite query's cursor override differs between them.
|
|
15
|
+
//
|
|
16
|
+
// The factory bodies are authored as source text — the emitted module verbatim
|
|
17
|
+
// and normalizes everything to the printer's canonical style. Every interpolated piece
|
|
18
|
+
// is generator-derived (sanitized operation names, JSON-pointer property chains built
|
|
19
|
+
// here) — never raw spec text.
|
|
20
|
+
|
|
21
|
+
import {
|
|
22
|
+
type ApiModel,
|
|
23
|
+
type ModelPagination,
|
|
24
|
+
type OperationModel,
|
|
25
|
+
type PaginationSpec,
|
|
26
|
+
resolveSchemaPointer,
|
|
27
|
+
} from '@redocly/client-generator';
|
|
28
|
+
import {
|
|
29
|
+
hasInputs,
|
|
30
|
+
isQuery,
|
|
31
|
+
variablesName,
|
|
32
|
+
wrappableOperations,
|
|
33
|
+
} from '@redocly/client-generator/contracts/typescript';
|
|
34
|
+
import {
|
|
35
|
+
codeString,
|
|
36
|
+
isSafeIdentifier,
|
|
37
|
+
safeIdent,
|
|
38
|
+
} from '@redocly/client-generator/printers/typescript';
|
|
39
|
+
|
|
40
|
+
export type TanstackOptions = {
|
|
41
|
+
/** Import specifier for the sdk entry the `client` instance and types live in. */
|
|
42
|
+
sdkModule: string;
|
|
43
|
+
/** TanStack adapter to import the option helpers from (`@tanstack/${framework}-query`). */
|
|
44
|
+
framework: 'react' | 'vue' | 'svelte' | 'solid';
|
|
45
|
+
/** The run's RESOLVED pagination — paginated query ops gain `<op>InfiniteOptions`. */
|
|
46
|
+
pagination?: ModelPagination;
|
|
47
|
+
/** Leading element for every query/mutation key — namespaces the cache when several
|
|
48
|
+
* generated APIs share one QueryClient (operationIds may collide across APIs). */
|
|
49
|
+
queryKeyPrefix?: string;
|
|
50
|
+
/** The sdk's call shape — the infinite query overrides the cursor inside it. */
|
|
51
|
+
argsStyle?: 'grouped' | 'flat';
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/** Render the full TanStack Query module source. `''` when there are no wrappable operations. */
|
|
55
|
+
export function renderTanstackModule(model: ApiModel, opts: TanstackOptions): string {
|
|
56
|
+
const ops = wrappableOperations(model, 'tanstack-query');
|
|
57
|
+
if (ops.length === 0) return '';
|
|
58
|
+
const pagination = opts.pagination ?? new Map();
|
|
59
|
+
const source = [
|
|
60
|
+
importHeader(ops, opts, pagination),
|
|
61
|
+
...ops.filter(isQuery).map((op) => queryKeySource(op, opts.queryKeyPrefix)),
|
|
62
|
+
factoriesSource(model, ops, pagination, opts.queryKeyPrefix, opts.argsStyle),
|
|
63
|
+
...defaultBindings(ops, pagination),
|
|
64
|
+
].join('\n');
|
|
65
|
+
return source;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Whether the op gets an `<op>InfiniteOptions` factory: a paginated query operation.
|
|
70
|
+
* `link`-style pagination is excluded — its next page lives in the `Link` response
|
|
71
|
+
* HEADER, which a TanStack `queryFn` (body-only) cannot see; use the sdk's
|
|
72
|
+
* `.pages()`/`.items()` iterators for those operations instead.
|
|
73
|
+
*/
|
|
74
|
+
function isInfinite(op: OperationModel, pagination: ModelPagination): boolean {
|
|
75
|
+
if (!isQuery(op)) return false;
|
|
76
|
+
const paginated = pagination.get(op.name);
|
|
77
|
+
return paginated !== undefined && paginated.spec.style !== 'link';
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The import header: the option helpers from `@tanstack/${framework}-query` (only the
|
|
82
|
+
* ones used), then the sdk's `client` instance plus the referenced types.
|
|
83
|
+
*/
|
|
84
|
+
function importHeader(
|
|
85
|
+
ops: OperationModel[],
|
|
86
|
+
opts: TanstackOptions,
|
|
87
|
+
pagination: ModelPagination
|
|
88
|
+
): string {
|
|
89
|
+
const helpers = [
|
|
90
|
+
...(ops.some((op) => isInfinite(op, pagination)) ? ['infiniteQueryOptions'] : []),
|
|
91
|
+
...(ops.some(isQuery) ? ['queryOptions'] : []),
|
|
92
|
+
];
|
|
93
|
+
const types = [...ops.filter(hasInputs).map(variablesName), 'RequestOptions']
|
|
94
|
+
.sort()
|
|
95
|
+
.map((name) => `type ${name}`);
|
|
96
|
+
const lines = [];
|
|
97
|
+
if (helpers.length > 0) {
|
|
98
|
+
lines.push(`import { ${helpers.join(', ')} } from "@tanstack/${opts.framework}-query";`);
|
|
99
|
+
}
|
|
100
|
+
lines.push(`import { client, ${types.join(', ')} } from "${opts.sdkModule}";`);
|
|
101
|
+
return lines.join('\n');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* `<op>QueryKey(vars?)` — with `vars` the exact key `<op>Options` uses; without, the
|
|
106
|
+
* one-element prefix matching every cached page/filter of the operation
|
|
107
|
+
* (`queryClient.invalidateQueries({ queryKey: getOrderQueryKey() })`).
|
|
108
|
+
*/
|
|
109
|
+
function queryKeySource(op: OperationModel, prefix: string | undefined): string {
|
|
110
|
+
const base = keyElements(op, prefix);
|
|
111
|
+
if (!hasInputs(op)) {
|
|
112
|
+
return `export const ${op.name}QueryKey = () => [${base}] as const;`;
|
|
113
|
+
}
|
|
114
|
+
return (
|
|
115
|
+
`export const ${op.name}QueryKey = (vars?: ${variablesName(op)}) =>\n` +
|
|
116
|
+
` vars === undefined ? ([${base}] as const) : ([${base}, vars] as const);`
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** The constant leading key elements: `"main", "getOrder"` with a prefix, else the id alone. */
|
|
121
|
+
function keyElements(op: OperationModel, prefix: string | undefined): string {
|
|
122
|
+
// The prefix is config-supplied text — `codeString` is the code-context escaping.
|
|
123
|
+
return prefix === undefined ? `"${op.name}"` : `${codeString(prefix)}, "${op.name}"`;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** The `createQueryFactories(instance)` declaration wrapping every option/mutation factory. */
|
|
127
|
+
function factoriesSource(
|
|
128
|
+
model: ApiModel,
|
|
129
|
+
ops: OperationModel[],
|
|
130
|
+
pagination: ModelPagination,
|
|
131
|
+
prefix: string | undefined,
|
|
132
|
+
argsStyle: TanstackOptions['argsStyle']
|
|
133
|
+
): string {
|
|
134
|
+
const members = ops.flatMap((op) => {
|
|
135
|
+
if (!isQuery(op)) return [mutationMember(op, prefix)];
|
|
136
|
+
const paginated = pagination.get(op.name);
|
|
137
|
+
return paginated !== undefined && paginated.spec.style !== 'link'
|
|
138
|
+
? [optionsMember(op), infiniteMember(model, op, paginated.spec, argsStyle)]
|
|
139
|
+
: [optionsMember(op)];
|
|
140
|
+
});
|
|
141
|
+
return (
|
|
142
|
+
'/**\n' +
|
|
143
|
+
' * Build the factories over a specific client instance — its config, middleware, and\n' +
|
|
144
|
+
' * retry apply to every call (`createQueryFactories(createClient(OPERATIONS, config))`).\n' +
|
|
145
|
+
" * The module-level exports below are these factories bound to the generated module's default `client`.\n" +
|
|
146
|
+
' */\n' +
|
|
147
|
+
'export const createQueryFactories = (instance: typeof client = client) => ({\n' +
|
|
148
|
+
members.join(',\n') +
|
|
149
|
+
'\n});'
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** `<op>Options` — `queryFn` forwards TanStack's abort `signal` into the request `init`. */
|
|
154
|
+
function optionsMember(op: OperationModel): string {
|
|
155
|
+
const { params, keyArg, callArgs } = varsPieces(op);
|
|
156
|
+
return (
|
|
157
|
+
` ${op.name}Options: (${params}) => queryOptions({\n` +
|
|
158
|
+
` queryKey: ${op.name}QueryKey(${keyArg}),\n` +
|
|
159
|
+
` queryFn: ({ signal }) => instance.${op.name}(${callArgs}, { ...init, signal, envelope: undefined }),\n` +
|
|
160
|
+
` })`
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** `<op>Mutation(init?)` — per-call options (headers, a retry override) reach the mutation. */
|
|
165
|
+
function mutationMember(op: OperationModel, prefix: string | undefined): string {
|
|
166
|
+
const mutationFn = hasInputs(op)
|
|
167
|
+
? `(vars: ${variablesName(op)}) => instance.${op.name}(vars, { ...init, envelope: undefined })`
|
|
168
|
+
: `() => instance.${op.name}({}, { ...init, envelope: undefined })`;
|
|
169
|
+
return (
|
|
170
|
+
` ${op.name}Mutation: (${INIT_PARAM}) => ({\n` +
|
|
171
|
+
` mutationKey: [${keyElements(op, prefix)}] as const,\n` +
|
|
172
|
+
` mutationFn: ${mutationFn},\n` +
|
|
173
|
+
` })`
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* `<op>InfiniteOptions` — the pagination rule compiled into TanStack's contract: the
|
|
179
|
+
* page param rides the rule's advance query parameter, `initialPageParam` resumes from
|
|
180
|
+
* the caller's own value, and `getNextPageParam` mirrors the runtime iterators' stop
|
|
181
|
+
* conditions (cursor: absent/`null`/`''`, plus the optional `hasMore === false`;
|
|
182
|
+
* offset/page: an empty items page).
|
|
183
|
+
*/
|
|
184
|
+
function infiniteMember(
|
|
185
|
+
model: ApiModel,
|
|
186
|
+
op: OperationModel,
|
|
187
|
+
spec: Exclude<PaginationSpec, { style: 'link' }>,
|
|
188
|
+
argsStyle: TanstackOptions['argsStyle']
|
|
189
|
+
): string {
|
|
190
|
+
const { params, keyArg } = varsPieces(op);
|
|
191
|
+
// The cursor is a query parameter, so it lands in the sdk's own spelling for one:
|
|
192
|
+
// inside the `query` layer, or at the top level of a merged call.
|
|
193
|
+
const cursor = safeIdent(spec.param);
|
|
194
|
+
const override =
|
|
195
|
+
argsStyle === 'flat'
|
|
196
|
+
? `{ ...vars, ${cursor}: pageParam }`
|
|
197
|
+
: `{ ...vars, query: { ...vars.query, ${cursor}: pageParam } }`;
|
|
198
|
+
return (
|
|
199
|
+
` ${op.name}InfiniteOptions: (${params}) => infiniteQueryOptions({\n` +
|
|
200
|
+
` queryKey: [...${op.name}QueryKey(${keyArg}), "infinite"] as const,\n` +
|
|
201
|
+
` queryFn: ({ pageParam, signal }) => instance.${op.name}(${override}, { ...init, signal, envelope: undefined }),\n` +
|
|
202
|
+
nextPageSource(model, op, spec, argsStyle) +
|
|
203
|
+
` })`
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/** The `initialPageParam` + `getNextPageParam` pair for one pagination style. */
|
|
208
|
+
function nextPageSource(
|
|
209
|
+
model: ApiModel,
|
|
210
|
+
op: OperationModel,
|
|
211
|
+
spec: Exclude<PaginationSpec, { style: 'link' }>,
|
|
212
|
+
argsStyle: TanstackOptions['argsStyle']
|
|
213
|
+
): string {
|
|
214
|
+
const advance = paramsAccess(spec.param);
|
|
215
|
+
// Where the caller's own starting value lives, in the sdk's spelling for a query param.
|
|
216
|
+
const given = argsStyle === 'flat' ? memberAccess('vars', spec.param) : `vars.query?.${advance}`;
|
|
217
|
+
if (spec.style === 'cursor') {
|
|
218
|
+
const stopEarly =
|
|
219
|
+
spec.hasMore === undefined
|
|
220
|
+
? ''
|
|
221
|
+
: ` if (lastPage${pointerChain(spec.hasMore)} === false) return undefined;\n`;
|
|
222
|
+
// Only the stop checks the cursor's static type admits are emitted — a `=== null`
|
|
223
|
+
// against a non-nullable string is a TS2367 in the consumer's build. TanStack v5
|
|
224
|
+
// itself stops on a returned `null`/`undefined`, so an omitted check stays safe
|
|
225
|
+
// even when the server sends a value the description says it cannot.
|
|
226
|
+
const checks = cursorStopChecks(model, op, spec.nextCursor);
|
|
227
|
+
const body =
|
|
228
|
+
checks.length === 0
|
|
229
|
+
? ` return lastPage${pointerChain(spec.nextCursor)};\n`
|
|
230
|
+
: ` const next = lastPage${pointerChain(spec.nextCursor)};\n` +
|
|
231
|
+
` return ${checks.join(' || ')} ? undefined : next;\n`;
|
|
232
|
+
return (
|
|
233
|
+
` initialPageParam: ${given},\n` +
|
|
234
|
+
` getNextPageParam: (lastPage) => {\n` +
|
|
235
|
+
stopEarly +
|
|
236
|
+
body +
|
|
237
|
+
` },\n`
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
const step = spec.style === 'offset' ? 'lastPageParam + count' : 'lastPageParam + 1';
|
|
241
|
+
const start = spec.style === 'offset' ? '0' : '1';
|
|
242
|
+
return (
|
|
243
|
+
` initialPageParam: ${given} ?? ${start},\n` +
|
|
244
|
+
` getNextPageParam: (lastPage, _allPages, lastPageParam) => {\n` +
|
|
245
|
+
` const count = ${itemsLength(spec.items)};\n` +
|
|
246
|
+
` return count === 0 ? undefined : ${step};\n` +
|
|
247
|
+
` },\n`
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* The `next === …` stop conditions whose comparison the cursor's static type allows:
|
|
253
|
+
* `undefined` when any step of the chain can miss, `null` when the cursor is nullable,
|
|
254
|
+
* `""` when it is a plain string.
|
|
255
|
+
*/
|
|
256
|
+
function cursorStopChecks(model: ApiModel, op: OperationModel, pointer: string): string[] {
|
|
257
|
+
const page = op.successResponses.find((response) =>
|
|
258
|
+
response.contentType.toLowerCase().includes('json')
|
|
259
|
+
);
|
|
260
|
+
// Both resolve — `resolveModelPagination` already verified the rule fits the operation.
|
|
261
|
+
const root = resolveSchemaPointer(page!.schema, '', model);
|
|
262
|
+
const target = resolveSchemaPointer(page!.schema, pointer, model);
|
|
263
|
+
const keys = pointer.slice(1).split('/');
|
|
264
|
+
let canBeUndefined = keys.length > 1;
|
|
265
|
+
if (!canBeUndefined && root?.kind === 'object') {
|
|
266
|
+
const property = root.properties.find((candidate) => candidate.name === keys[0]);
|
|
267
|
+
canBeUndefined = property === undefined || !property.required;
|
|
268
|
+
}
|
|
269
|
+
const members = target?.kind === 'union' ? target.members : target ? [target] : [];
|
|
270
|
+
const nullable = members.some((member) => member.kind === 'null');
|
|
271
|
+
const plainString = members.some(
|
|
272
|
+
(member) => member.kind === 'scalar' && member.scalar === 'string'
|
|
273
|
+
);
|
|
274
|
+
return [
|
|
275
|
+
...(canBeUndefined ? ['next === undefined'] : []),
|
|
276
|
+
...(nullable ? ['next === null'] : []),
|
|
277
|
+
...(plainString ? ['next === ""'] : []),
|
|
278
|
+
];
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* The `init` parameter every factory takes. The throw-only `envelope` option is
|
|
283
|
+
* excluded from the type and stripped in the forwarding calls — cached query data
|
|
284
|
+
* must stay the plain body.
|
|
285
|
+
*/
|
|
286
|
+
const INIT_PARAM = 'init?: Omit<RequestOptions, "envelope">';
|
|
287
|
+
|
|
288
|
+
/** The shared `(vars, init?)` parameter list plus how `vars` reaches the key and the call. */
|
|
289
|
+
function varsPieces(op: OperationModel): { params: string; keyArg: string; callArgs: string } {
|
|
290
|
+
if (!hasInputs(op)) {
|
|
291
|
+
return { params: INIT_PARAM, keyArg: '', callArgs: '{}' };
|
|
292
|
+
}
|
|
293
|
+
return {
|
|
294
|
+
params: `vars: ${variablesName(op)}, ${INIT_PARAM}`,
|
|
295
|
+
keyArg: 'vars',
|
|
296
|
+
callArgs: 'vars',
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/** One query-param access step: `.name`, or `["a b"]` when not a bare identifier. */
|
|
301
|
+
function paramsAccess(name: string): string {
|
|
302
|
+
return isSafeIdentifier(name) ? name : `[${safeIdent(name)}]`;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* `<base>.name`, or `<base>["wire-name"]` when the name is not an identifier — the dot form
|
|
307
|
+
* would be a syntax error there. (After `?.` either form appends directly.)
|
|
308
|
+
*/
|
|
309
|
+
function memberAccess(base: string, name: string): string {
|
|
310
|
+
return isSafeIdentifier(name) ? `${base}.${name}` : `${base}[${safeIdent(name)}]`;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/** An RFC 6901 pointer as an optional property chain: `/page/endCursor` → `.page?.endCursor`. */
|
|
314
|
+
function pointerChain(pointer: string): string {
|
|
315
|
+
const keys = pointer
|
|
316
|
+
.slice(1)
|
|
317
|
+
.split('/')
|
|
318
|
+
.map((token) => token.replaceAll('~1', '/').replaceAll('~0', '~'));
|
|
319
|
+
return keys
|
|
320
|
+
.map((key, index) => {
|
|
321
|
+
const bare = isSafeIdentifier(key);
|
|
322
|
+
if (index === 0) return bare ? `.${key}` : `[${safeIdent(key)}]`;
|
|
323
|
+
return bare ? `?.${key}` : `?.[${safeIdent(key)}]`;
|
|
324
|
+
})
|
|
325
|
+
.join('');
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/** The page's item count per the `items` pointer (`''` means the page IS the array). */
|
|
329
|
+
function itemsLength(items: string): string {
|
|
330
|
+
if (items === '') return 'lastPage?.length ?? 0';
|
|
331
|
+
return `lastPage${pointerChain(items)}?.length ?? 0`;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/** `export const <name> = defaultFactories.<name>;` per factory, bound to the default client. */
|
|
335
|
+
function defaultBindings(ops: OperationModel[], pagination: ModelPagination): string[] {
|
|
336
|
+
const names = ops.flatMap((op) => {
|
|
337
|
+
if (!isQuery(op)) return [`${op.name}Mutation`];
|
|
338
|
+
return isInfinite(op, pagination)
|
|
339
|
+
? [`${op.name}Options`, `${op.name}InfiniteOptions`]
|
|
340
|
+
: [`${op.name}Options`];
|
|
341
|
+
});
|
|
342
|
+
return [
|
|
343
|
+
'const defaultFactories = createQueryFactories();',
|
|
344
|
+
...names.map((name) => `export const ${name} = defaultFactories.${name};`),
|
|
345
|
+
];
|
|
346
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Ejected from @redocly/client-generator@0.4.0 — the built-in "transformers" 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 transformers --update`.
|
|
5
|
+
import type { Generator } from '@redocly/client-generator';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
|
|
8
|
+
import { renderTransformersModule } from './render.ts';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The transformers generator: a standalone `<stem>.transformers.ts` module of
|
|
12
|
+
* `transform<Name>(data: <Name>): <Name>` functions, one per IR named schema
|
|
13
|
+
* that (recursively) carries a `date-time`/`date` field. Each walks the value
|
|
14
|
+
* and rewrites wire ISO strings to `new Date(...)` in place, so the runtime
|
|
15
|
+
* value matches the sdk's `--date-type Date` types — pair the two.
|
|
16
|
+
*
|
|
17
|
+
* Standalone — the consumer pipes responses through it
|
|
18
|
+
* (`transformPet(await getPet(id))`); the sdk client itself stays zero-dep
|
|
19
|
+
* (Date is a web standard). The transformers import only the schema TYPES from
|
|
20
|
+
* the sdk entry (`./<stem>.js`) and call each other as siblings.
|
|
21
|
+
*
|
|
22
|
+
* Output-mode-agnostic: it reads only `model.schemas` and emits a single module
|
|
23
|
+
* beside the client regardless of how the sdk partitions its files. Emits
|
|
24
|
+
* nothing when no schema has a date field (nothing to transform).
|
|
25
|
+
*/
|
|
26
|
+
export const transformersGenerator: Generator = ({ model, output, banner, emit }) => {
|
|
27
|
+
const content = renderTransformersModule(model, {
|
|
28
|
+
sdkModule: `./${output.stem}.${emit.importExt ?? 'js'}`,
|
|
29
|
+
});
|
|
30
|
+
if (content === '') return [];
|
|
31
|
+
const header = banner.map((line) => `// ${line}`).join('\n');
|
|
32
|
+
return [
|
|
33
|
+
{
|
|
34
|
+
path: join(output.dir, `${output.stem}.transformers.ts`),
|
|
35
|
+
content: `${header}\n\n${content}`,
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export default {
|
|
41
|
+
name: 'transformers',
|
|
42
|
+
run: transformersGenerator,
|
|
43
|
+
requires: ["typescript"],
|
|
44
|
+
dateTypes: ["Date"],
|
|
45
|
+
requiresGenerator: '^0.4.0',
|
|
46
|
+
};
|