@redocly/client-generator 0.3.7 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -54
- package/eject-assets/AGENTS.md +137 -0
- package/eject-assets/generators/cli/docs.ts +224 -0
- package/eject-assets/generators/cli/engine-source.ts +21 -0
- package/eject-assets/generators/cli/index.ts +90 -0
- package/eject-assets/generators/cli/render.ts +348 -0
- package/eject-assets/generators/go/client.ts +57 -0
- package/eject-assets/generators/go/descriptor.ts +41 -0
- package/eject-assets/generators/go/index.ts +336 -0
- package/eject-assets/generators/go/models.ts +179 -0
- package/eject-assets/generators/go/naming.ts +49 -0
- package/eject-assets/generators/go/operations.ts +296 -0
- package/eject-assets/generators/go/pagination.ts +194 -0
- package/eject-assets/generators/go/types.ts +60 -0
- package/eject-assets/generators/mock/faker.ts +214 -0
- package/eject-assets/generators/mock/index.ts +35 -0
- package/eject-assets/generators/mock/render.ts +282 -0
- package/eject-assets/generators/mock/sample.ts +316 -0
- package/eject-assets/generators/mock/values.ts +63 -0
- package/eject-assets/generators/php/client.ts +63 -0
- package/eject-assets/generators/php/descriptor.ts +58 -0
- package/eject-assets/generators/php/index.ts +237 -0
- package/eject-assets/generators/php/models.ts +275 -0
- package/eject-assets/generators/php/naming.ts +51 -0
- package/eject-assets/generators/php/operations.ts +232 -0
- package/eject-assets/generators/php/pagination.ts +133 -0
- package/eject-assets/generators/php/types.ts +148 -0
- package/eject-assets/generators/python/client.ts +123 -0
- package/eject-assets/generators/python/descriptor.ts +52 -0
- package/eject-assets/generators/python/index.ts +251 -0
- package/eject-assets/generators/python/models.ts +242 -0
- package/eject-assets/generators/python/naming.ts +46 -0
- package/eject-assets/generators/python/operations.ts +147 -0
- package/eject-assets/generators/python/pagination.ts +128 -0
- package/eject-assets/generators/python/types.ts +54 -0
- package/eject-assets/generators/swr/index.ts +37 -0
- package/eject-assets/generators/swr/render.ts +78 -0
- package/eject-assets/generators/tanstack-query/index.ts +48 -0
- package/eject-assets/generators/tanstack-query/render.ts +346 -0
- package/eject-assets/generators/transformers/index.ts +46 -0
- package/eject-assets/generators/transformers/render.ts +506 -0
- package/eject-assets/generators/typescript/banner.ts +35 -0
- package/eject-assets/generators/typescript/client.ts +254 -0
- package/eject-assets/generators/typescript/descriptor.ts +137 -0
- package/eject-assets/generators/typescript/index.ts +101 -0
- package/eject-assets/generators/typescript/inline-runtime.ts +135 -0
- package/eject-assets/generators/typescript/operation-signature.ts +62 -0
- package/eject-assets/generators/typescript/operation-types.ts +17 -0
- package/eject-assets/generators/typescript/operations.ts +524 -0
- package/eject-assets/generators/typescript/response-headers.ts +74 -0
- package/eject-assets/generators/typescript/type-guards.ts +159 -0
- package/eject-assets/generators/typescript/types.ts +172 -0
- package/eject-assets/generators/zod/index.ts +32 -0
- package/eject-assets/generators/zod/schemas.ts +456 -0
- package/eject-assets/skills/cli-generator/SKILL.md +121 -0
- package/eject-assets/skills/client-generators/SKILL.md +142 -0
- package/eject-assets/skills/go-generator/SKILL.md +96 -0
- package/eject-assets/skills/mock-generator/SKILL.md +50 -0
- package/eject-assets/skills/php-generator/SKILL.md +112 -0
- package/eject-assets/skills/python-generator/SKILL.md +110 -0
- package/eject-assets/skills/swr-generator/SKILL.md +50 -0
- package/eject-assets/skills/tanstack-query-generator/SKILL.md +55 -0
- package/eject-assets/skills/transformers-generator/SKILL.md +47 -0
- package/eject-assets/skills/typescript-generator/SKILL.md +95 -0
- package/eject-assets/skills/zod-generator/SKILL.md +54 -0
- package/lib/authoring/index.d.ts +11 -0
- package/lib/authoring/index.d.ts.map +1 -0
- package/lib/authoring/index.js +42 -0
- package/lib/authoring/index.js.map +1 -0
- package/lib/authoring/naming.d.ts +34 -0
- package/lib/authoring/naming.d.ts.map +1 -0
- package/lib/authoring/naming.js +104 -0
- package/lib/authoring/naming.js.map +1 -0
- package/lib/authoring/operation.d.ts +47 -0
- package/lib/authoring/operation.d.ts.map +1 -0
- package/lib/authoring/operation.js +86 -0
- package/lib/authoring/operation.js.map +1 -0
- package/lib/authoring/options.d.ts +9 -0
- package/lib/authoring/options.d.ts.map +1 -0
- package/lib/authoring/options.js +5 -0
- package/lib/authoring/options.js.map +1 -0
- package/lib/authoring/pagination.d.ts +19 -0
- package/lib/authoring/pagination.d.ts.map +1 -0
- package/lib/authoring/pagination.js +45 -0
- package/lib/authoring/pagination.js.map +1 -0
- package/lib/authoring/printer.d.ts +16 -0
- package/lib/authoring/printer.d.ts.map +1 -0
- package/lib/authoring/printer.js +36 -0
- package/lib/authoring/printer.js.map +1 -0
- package/lib/authoring/reference-page.d.ts +31 -0
- package/lib/authoring/reference-page.d.ts.map +1 -0
- package/lib/authoring/reference-page.js +160 -0
- package/lib/authoring/reference-page.js.map +1 -0
- package/lib/authoring/schema.d.ts +51 -0
- package/lib/authoring/schema.d.ts.map +1 -0
- package/lib/authoring/schema.js +190 -0
- package/lib/authoring/schema.js.map +1 -0
- package/lib/cli-contract.d.ts +126 -0
- package/lib/cli-contract.d.ts.map +1 -0
- package/lib/cli-contract.js +25 -0
- package/lib/cli-contract.js.map +1 -0
- package/lib/{emitters/wrapper-support.d.ts → contracts/typescript.d.ts} +13 -24
- package/lib/contracts/typescript.d.ts.map +1 -0
- package/lib/contracts/typescript.js +87 -0
- package/lib/contracts/typescript.js.map +1 -0
- package/lib/generate.d.ts +10 -10
- package/lib/generate.d.ts.map +1 -1
- package/lib/generate.js +25 -106
- package/lib/generate.js.map +1 -1
- package/lib/generators/cli/docs.d.ts +19 -0
- package/lib/generators/cli/docs.d.ts.map +1 -0
- package/lib/generators/cli/docs.js +187 -0
- package/lib/generators/cli/docs.js.map +1 -0
- package/lib/generators/cli/engine-source.d.ts +5 -0
- package/lib/generators/cli/engine-source.d.ts.map +1 -0
- package/lib/generators/cli/engine-source.js +12 -0
- package/lib/generators/cli/engine-source.js.map +1 -0
- package/lib/generators/cli/index.d.ts +18 -0
- package/lib/generators/cli/index.d.ts.map +1 -0
- package/lib/generators/cli/index.js +67 -0
- package/lib/generators/cli/index.js.map +1 -0
- package/lib/generators/cli/render.d.ts +39 -0
- package/lib/generators/cli/render.d.ts.map +1 -0
- package/lib/generators/cli/render.js +281 -0
- package/lib/generators/cli/render.js.map +1 -0
- package/lib/generators/cli/runtime/cli.d.ts +42 -0
- package/lib/generators/cli/runtime/cli.d.ts.map +1 -0
- package/lib/generators/cli/runtime/cli.js +582 -0
- package/lib/generators/cli/runtime/cli.js.map +1 -0
- package/lib/generators/compatibility.d.ts +10 -0
- package/lib/generators/compatibility.d.ts.map +1 -0
- package/lib/generators/compatibility.js +45 -0
- package/lib/generators/compatibility.js.map +1 -0
- package/lib/generators/go/client.d.ts +5 -0
- package/lib/generators/go/client.d.ts.map +1 -0
- package/lib/generators/go/client.js +34 -0
- package/lib/generators/go/client.js.map +1 -0
- package/lib/generators/go/descriptor.d.ts +6 -0
- package/lib/generators/go/descriptor.d.ts.map +1 -0
- package/lib/generators/go/descriptor.js +26 -0
- package/lib/generators/go/descriptor.js.map +1 -0
- package/lib/generators/go/index.d.ts +14 -0
- package/lib/generators/go/index.d.ts.map +1 -0
- package/lib/generators/go/index.js +240 -0
- package/lib/generators/go/index.js.map +1 -0
- package/lib/generators/go/models.d.ts +4 -0
- package/lib/generators/go/models.d.ts.map +1 -0
- package/lib/generators/go/models.js +125 -0
- package/lib/generators/go/models.js.map +1 -0
- package/lib/generators/go/naming.d.ts +15 -0
- package/lib/generators/go/naming.d.ts.map +1 -0
- package/lib/generators/go/naming.js +36 -0
- package/lib/generators/go/naming.js.map +1 -0
- package/lib/generators/go/operations.d.ts +16 -0
- package/lib/generators/go/operations.d.ts.map +1 -0
- package/lib/generators/go/operations.js +200 -0
- package/lib/generators/go/operations.js.map +1 -0
- package/lib/generators/go/pagination.d.ts +5 -0
- package/lib/generators/go/pagination.d.ts.map +1 -0
- package/lib/generators/go/pagination.js +93 -0
- package/lib/generators/go/pagination.js.map +1 -0
- package/lib/generators/go/types.d.ts +4 -0
- package/lib/generators/go/types.d.ts.map +1 -0
- package/lib/generators/go/types.js +48 -0
- package/lib/generators/go/types.js.map +1 -0
- package/lib/generators/index.d.ts +2 -3
- package/lib/generators/index.d.ts.map +1 -1
- package/lib/generators/index.js +31 -53
- package/lib/generators/index.js.map +1 -1
- package/lib/generators/meta.d.ts +13 -0
- package/lib/generators/meta.d.ts.map +1 -0
- package/lib/generators/meta.js +157 -0
- package/lib/generators/meta.js.map +1 -0
- package/lib/{emitters → generators/mock}/faker.d.ts +4 -5
- package/lib/generators/mock/faker.d.ts.map +1 -0
- package/lib/generators/mock/faker.js +180 -0
- package/lib/generators/mock/faker.js.map +1 -0
- package/lib/generators/{mock.d.ts → mock/index.d.ts} +2 -2
- package/lib/generators/mock/index.d.ts.map +1 -0
- package/lib/generators/{mock.js → mock/index.js} +8 -8
- package/lib/generators/mock/index.js.map +1 -0
- package/lib/{emitters/mock.d.ts → generators/mock/render.d.ts} +2 -3
- package/lib/generators/mock/render.d.ts.map +1 -0
- package/lib/generators/mock/render.js +228 -0
- package/lib/generators/mock/render.js.map +1 -0
- package/lib/{emitters → generators/mock}/sample.d.ts +1 -2
- package/lib/generators/mock/sample.d.ts.map +1 -0
- package/lib/generators/mock/sample.js.map +1 -0
- package/lib/generators/mock/values.d.ts +33 -0
- package/lib/generators/mock/values.d.ts.map +1 -0
- package/lib/generators/mock/values.js +46 -0
- package/lib/generators/mock/values.js.map +1 -0
- package/lib/generators/options.d.ts +7 -0
- package/lib/generators/options.d.ts.map +1 -0
- package/lib/generators/options.js +74 -0
- package/lib/generators/options.js.map +1 -0
- package/lib/generators/php/client.d.ts +5 -0
- package/lib/generators/php/client.d.ts.map +1 -0
- package/lib/generators/php/client.js +38 -0
- package/lib/generators/php/client.js.map +1 -0
- package/lib/generators/php/descriptor.d.ts +7 -0
- package/lib/generators/php/descriptor.d.ts.map +1 -0
- package/lib/generators/php/descriptor.js +42 -0
- package/lib/generators/php/descriptor.js.map +1 -0
- package/lib/generators/php/index.d.ts +14 -0
- package/lib/generators/php/index.d.ts.map +1 -0
- package/lib/generators/php/index.js +166 -0
- package/lib/generators/php/index.js.map +1 -0
- package/lib/generators/php/models.d.ts +8 -0
- package/lib/generators/php/models.d.ts.map +1 -0
- package/lib/generators/php/models.js +200 -0
- package/lib/generators/php/models.js.map +1 -0
- package/lib/generators/php/naming.d.ts +16 -0
- package/lib/generators/php/naming.d.ts.map +1 -0
- package/lib/generators/php/naming.js +31 -0
- package/lib/generators/php/naming.js.map +1 -0
- package/lib/generators/php/operations.d.ts +21 -0
- package/lib/generators/php/operations.d.ts.map +1 -0
- package/lib/generators/php/operations.js +156 -0
- package/lib/generators/php/operations.js.map +1 -0
- package/lib/generators/php/pagination.d.ts +5 -0
- package/lib/generators/php/pagination.d.ts.map +1 -0
- package/lib/generators/php/pagination.js +68 -0
- package/lib/generators/php/pagination.js.map +1 -0
- package/lib/generators/php/types.d.ts +27 -0
- package/lib/generators/php/types.d.ts.map +1 -0
- package/lib/generators/php/types.js +128 -0
- package/lib/generators/php/types.js.map +1 -0
- package/lib/generators/python/client.d.ts +6 -0
- package/lib/generators/python/client.d.ts.map +1 -0
- package/lib/generators/python/client.js +80 -0
- package/lib/generators/python/client.js.map +1 -0
- package/lib/generators/python/descriptor.d.ts +9 -0
- package/lib/generators/python/descriptor.d.ts.map +1 -0
- package/lib/generators/python/descriptor.js +38 -0
- package/lib/generators/python/descriptor.js.map +1 -0
- package/lib/generators/python/index.d.ts +15 -0
- package/lib/generators/python/index.d.ts.map +1 -0
- package/lib/generators/python/index.js +197 -0
- package/lib/generators/python/index.js.map +1 -0
- package/lib/generators/python/models.d.ts +31 -0
- package/lib/generators/python/models.d.ts.map +1 -0
- package/lib/generators/python/models.js +203 -0
- package/lib/generators/python/models.js.map +1 -0
- package/lib/generators/python/naming.d.ts +22 -0
- package/lib/generators/python/naming.d.ts.map +1 -0
- package/lib/generators/python/naming.js +28 -0
- package/lib/generators/python/naming.js.map +1 -0
- package/lib/generators/python/operations.d.ts +4 -0
- package/lib/generators/python/operations.d.ts.map +1 -0
- package/lib/generators/python/operations.js +108 -0
- package/lib/generators/python/operations.js.map +1 -0
- package/lib/generators/python/pagination.d.ts +5 -0
- package/lib/generators/python/pagination.d.ts.map +1 -0
- package/lib/generators/python/pagination.js +95 -0
- package/lib/generators/python/pagination.js.map +1 -0
- package/lib/generators/python/types.d.ts +4 -0
- package/lib/generators/python/types.d.ts.map +1 -0
- package/lib/generators/python/types.js +45 -0
- package/lib/generators/python/types.js.map +1 -0
- package/lib/generators/resolve.d.ts.map +1 -1
- package/lib/generators/resolve.js +92 -13
- package/lib/generators/resolve.js.map +1 -1
- package/lib/generators/{swr.d.ts → swr/index.d.ts} +3 -3
- package/lib/generators/swr/index.d.ts.map +1 -0
- package/lib/generators/{swr.js → swr/index.js} +7 -10
- package/lib/generators/swr/index.js.map +1 -0
- package/lib/{emitters/swr.d.ts → generators/swr/render.d.ts} +2 -4
- package/lib/generators/swr/render.d.ts.map +1 -0
- package/lib/generators/swr/render.js +57 -0
- package/lib/generators/swr/render.js.map +1 -0
- package/lib/generators/{tanstack-query.d.ts → tanstack-query/index.d.ts} +3 -3
- package/lib/generators/tanstack-query/index.d.ts.map +1 -0
- package/lib/generators/{tanstack-query.js → tanstack-query/index.js} +11 -10
- package/lib/generators/tanstack-query/index.js.map +1 -0
- package/lib/{emitters/tanstack-query.d.ts → generators/tanstack-query/render.d.ts} +6 -5
- package/lib/generators/tanstack-query/render.d.ts.map +1 -0
- package/lib/{emitters/tanstack-query.js → generators/tanstack-query/render.js} +33 -21
- package/lib/generators/tanstack-query/render.js.map +1 -0
- package/lib/generators/{transformers.d.ts → transformers/index.d.ts} +2 -2
- package/lib/generators/transformers/index.d.ts.map +1 -0
- package/lib/generators/{transformers.js → transformers/index.js} +11 -8
- package/lib/generators/transformers/index.js.map +1 -0
- package/lib/{emitters/transformers.d.ts → generators/transformers/render.d.ts} +2 -2
- package/lib/generators/transformers/render.d.ts.map +1 -0
- package/lib/{emitters/transformers.js → generators/transformers/render.js} +125 -165
- package/lib/generators/transformers/render.js.map +1 -0
- package/lib/generators/types.d.ts +190 -12
- package/lib/generators/types.d.ts.map +1 -1
- package/lib/generators/typescript/banner.d.ts +12 -0
- package/lib/generators/typescript/banner.d.ts.map +1 -0
- package/lib/{emitters/emit-options.js → generators/typescript/banner.js} +2 -3
- package/lib/generators/typescript/banner.js.map +1 -0
- package/lib/generators/typescript/client.d.ts +25 -0
- package/lib/generators/typescript/client.d.ts.map +1 -0
- package/lib/generators/typescript/client.js +207 -0
- package/lib/generators/typescript/client.js.map +1 -0
- package/lib/generators/typescript/descriptor.d.ts +11 -0
- package/lib/generators/typescript/descriptor.d.ts.map +1 -0
- package/lib/generators/typescript/descriptor.js +97 -0
- package/lib/generators/typescript/descriptor.js.map +1 -0
- package/lib/generators/typescript/index.d.ts +20 -0
- package/lib/generators/typescript/index.d.ts.map +1 -0
- package/lib/generators/typescript/index.js +80 -0
- package/lib/generators/typescript/index.js.map +1 -0
- package/lib/generators/typescript/inline-runtime.d.ts +21 -0
- package/lib/generators/typescript/inline-runtime.d.ts.map +1 -0
- package/lib/generators/typescript/inline-runtime.js +114 -0
- package/lib/generators/typescript/inline-runtime.js.map +1 -0
- package/lib/generators/typescript/operation-signature.d.ts +23 -0
- package/lib/generators/typescript/operation-signature.d.ts.map +1 -0
- package/lib/generators/typescript/operation-signature.js +41 -0
- package/lib/generators/typescript/operation-signature.js.map +1 -0
- package/lib/generators/typescript/operation-types.d.ts +9 -0
- package/lib/generators/typescript/operation-types.d.ts.map +1 -0
- package/lib/generators/typescript/operation-types.js +11 -0
- package/lib/generators/typescript/operation-types.js.map +1 -0
- package/lib/generators/typescript/operations.d.ts +60 -0
- package/lib/generators/typescript/operations.d.ts.map +1 -0
- package/lib/generators/typescript/operations.js +386 -0
- package/lib/generators/typescript/operations.js.map +1 -0
- package/lib/generators/typescript/response-headers.d.ts +12 -0
- package/lib/generators/typescript/response-headers.d.ts.map +1 -0
- package/lib/generators/typescript/response-headers.js +40 -0
- package/lib/generators/typescript/response-headers.js.map +1 -0
- package/lib/generators/typescript/runtime/auth.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/auth.js.map +1 -0
- package/lib/{runtime → generators/typescript/runtime}/create-client.d.ts +7 -2
- package/lib/generators/typescript/runtime/create-client.d.ts.map +1 -0
- package/lib/{runtime → generators/typescript/runtime}/create-client.js +84 -30
- package/lib/generators/typescript/runtime/create-client.js.map +1 -0
- package/lib/generators/typescript/runtime/errors.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/errors.js.map +1 -0
- package/lib/generators/typescript/runtime/index.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/index.js.map +1 -0
- package/lib/generators/typescript/runtime/multipart.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/multipart.js.map +1 -0
- package/lib/{runtime → generators/typescript/runtime}/paginate.d.ts +2 -2
- package/lib/generators/typescript/runtime/paginate.d.ts.map +1 -0
- package/lib/{runtime → generators/typescript/runtime}/paginate.js +12 -12
- package/lib/generators/typescript/runtime/paginate.js.map +1 -0
- package/lib/generators/typescript/runtime/parse.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/parse.js.map +1 -0
- package/lib/generators/typescript/runtime/retry.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/retry.js.map +1 -0
- package/lib/generators/typescript/runtime/send.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/send.js.map +1 -0
- package/lib/generators/typescript/runtime/setup.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/setup.js.map +1 -0
- package/lib/generators/typescript/runtime/sse.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/sse.js.map +1 -0
- package/lib/{runtime → generators/typescript/runtime}/types.d.ts +17 -95
- package/lib/generators/typescript/runtime/types.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/types.js.map +1 -0
- package/lib/generators/typescript/runtime/url.d.ts.map +1 -0
- package/lib/generators/typescript/runtime/url.js.map +1 -0
- package/lib/generators/typescript/type-guards.d.ts +4 -0
- package/lib/generators/typescript/type-guards.d.ts.map +1 -0
- package/lib/{emitters → generators/typescript}/type-guards.js +18 -52
- package/lib/generators/typescript/type-guards.js.map +1 -0
- package/lib/generators/typescript/types.d.ts +8 -0
- package/lib/generators/typescript/types.d.ts.map +1 -0
- package/lib/generators/typescript/types.js +132 -0
- package/lib/generators/typescript/types.js.map +1 -0
- package/lib/generators/{zod.d.ts → zod/index.d.ts} +2 -2
- package/lib/generators/zod/index.d.ts.map +1 -0
- package/lib/generators/{zod.js → zod/index.js} +5 -7
- package/lib/generators/zod/index.js.map +1 -0
- package/lib/{emitters/zod.d.ts → generators/zod/schemas.d.ts} +4 -5
- package/lib/generators/zod/schemas.d.ts.map +1 -0
- package/lib/{emitters/zod.js → generators/zod/schemas.js} +118 -154
- package/lib/generators/zod/schemas.js.map +1 -0
- package/lib/index.d.ts +8 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +18 -11
- package/lib/index.js.map +1 -1
- package/lib/intermediate-representation/build.d.ts +8 -1
- package/lib/intermediate-representation/build.d.ts.map +1 -1
- package/lib/intermediate-representation/build.js +59 -4
- package/lib/intermediate-representation/build.js.map +1 -1
- package/lib/intermediate-representation/model.d.ts +26 -1
- package/lib/intermediate-representation/model.d.ts.map +1 -1
- package/lib/intermediate-representation/model.js.map +1 -1
- package/lib/intermediate-representation/sanitize-identifiers.d.ts +1 -10
- package/lib/intermediate-representation/sanitize-identifiers.d.ts.map +1 -1
- package/lib/intermediate-representation/sanitize-identifiers.js +37 -38
- package/lib/intermediate-representation/sanitize-identifiers.js.map +1 -1
- package/lib/{emitters/pagination.d.ts → pagination.d.ts} +39 -15
- package/lib/pagination.d.ts.map +1 -0
- package/lib/{emitters/pagination.js → pagination.js} +13 -52
- package/lib/pagination.js.map +1 -0
- package/lib/pipeline.d.ts +17 -0
- package/lib/pipeline.d.ts.map +1 -0
- package/lib/pipeline.js +244 -0
- package/lib/pipeline.js.map +1 -0
- package/lib/plugin.d.ts +4 -4
- package/lib/plugin.d.ts.map +1 -1
- package/lib/plugin.js +12 -9
- package/lib/plugin.js.map +1 -1
- package/lib/printers/go.d.ts +33 -0
- package/lib/printers/go.d.ts.map +1 -0
- package/lib/printers/go.js +209 -0
- package/lib/printers/go.js.map +1 -0
- package/lib/printers/index.d.ts +5 -0
- package/lib/printers/index.d.ts.map +1 -0
- package/lib/printers/index.js +9 -0
- package/lib/printers/index.js.map +1 -0
- package/lib/printers/php.d.ts +21 -0
- package/lib/printers/php.d.ts.map +1 -0
- package/lib/printers/php.js +68 -0
- package/lib/printers/php.js.map +1 -0
- package/lib/printers/python.d.ts +31 -0
- package/lib/printers/python.d.ts.map +1 -0
- package/lib/printers/python.js +101 -0
- package/lib/printers/python.js.map +1 -0
- package/lib/printers/typescript.d.ts +82 -0
- package/lib/printers/typescript.d.ts.map +1 -0
- package/lib/printers/typescript.js +268 -0
- package/lib/printers/typescript.js.map +1 -0
- package/lib/reserved-names.d.ts +8 -0
- package/lib/reserved-names.d.ts.map +1 -0
- package/lib/{emitters/reserved-names.js → reserved-names.js} +16 -27
- package/lib/reserved-names.js.map +1 -0
- package/lib/runtime-contract.d.ts +62 -2
- package/lib/runtime-contract.d.ts.map +1 -1
- package/lib/runtime-contract.js +3 -3
- package/lib/runtime-contract.js.map +1 -1
- package/lib/runtime-sources/go.d.ts +2 -0
- package/lib/runtime-sources/go.d.ts.map +1 -0
- package/lib/runtime-sources/go.js +3 -0
- package/lib/runtime-sources/go.js.map +1 -0
- package/lib/runtime-sources/php.d.ts +2 -0
- package/lib/runtime-sources/php.d.ts.map +1 -0
- package/lib/runtime-sources/php.js +3 -0
- package/lib/runtime-sources/php.js.map +1 -0
- package/lib/runtime-sources/python.d.ts +12 -0
- package/lib/runtime-sources/python.d.ts.map +1 -0
- package/lib/runtime-sources/python.js +12 -0
- package/lib/runtime-sources/python.js.map +1 -0
- package/lib/runtime-sources/typescript.d.ts +36 -0
- package/lib/runtime-sources/typescript.d.ts.map +1 -0
- package/lib/runtime-sources/typescript.js +152 -0
- package/lib/runtime-sources/typescript.js.map +1 -0
- package/lib/runtime-sources.d.ts +5 -0
- package/lib/runtime-sources.d.ts.map +1 -0
- package/lib/runtime-sources.js +10 -0
- package/lib/runtime-sources.js.map +1 -0
- package/lib/setup-bake.d.ts.map +1 -0
- package/lib/{emitters/setup-bake.js → setup-bake.js} +11 -2
- package/lib/setup-bake.js.map +1 -0
- package/lib/types.d.ts +38 -8
- package/lib/types.d.ts.map +1 -1
- package/package.json +40 -4
- package/lib/emitters/auth.d.ts +0 -14
- package/lib/emitters/auth.d.ts.map +0 -1
- package/lib/emitters/auth.js +0 -30
- package/lib/emitters/auth.js.map +0 -1
- package/lib/emitters/client-assembly.d.ts +0 -15
- package/lib/emitters/client-assembly.d.ts.map +0 -1
- package/lib/emitters/client-assembly.js +0 -358
- package/lib/emitters/client-assembly.js.map +0 -1
- package/lib/emitters/descriptor.d.ts +0 -22
- package/lib/emitters/descriptor.d.ts.map +0 -1
- package/lib/emitters/descriptor.js +0 -199
- package/lib/emitters/descriptor.js.map +0 -1
- package/lib/emitters/emit-options.d.ts +0 -67
- package/lib/emitters/emit-options.d.ts.map +0 -1
- package/lib/emitters/emit-options.js.map +0 -1
- package/lib/emitters/faker.d.ts.map +0 -1
- package/lib/emitters/faker.js +0 -221
- package/lib/emitters/faker.js.map +0 -1
- package/lib/emitters/identifier.d.ts +0 -34
- package/lib/emitters/identifier.d.ts.map +0 -1
- package/lib/emitters/identifier.js +0 -104
- package/lib/emitters/identifier.js.map +0 -1
- package/lib/emitters/inline-runtime.d.ts +0 -11
- package/lib/emitters/inline-runtime.d.ts.map +0 -1
- package/lib/emitters/inline-runtime.js +0 -99
- package/lib/emitters/inline-runtime.js.map +0 -1
- package/lib/emitters/jsdoc.d.ts +0 -9
- package/lib/emitters/jsdoc.d.ts.map +0 -1
- package/lib/emitters/jsdoc.js +0 -83
- package/lib/emitters/jsdoc.js.map +0 -1
- package/lib/emitters/mock.d.ts.map +0 -1
- package/lib/emitters/mock.js +0 -265
- package/lib/emitters/mock.js.map +0 -1
- package/lib/emitters/operation-aliases.d.ts +0 -27
- package/lib/emitters/operation-aliases.d.ts.map +0 -1
- package/lib/emitters/operation-aliases.js +0 -150
- package/lib/emitters/operation-aliases.js.map +0 -1
- package/lib/emitters/operation-signature.d.ts +0 -24
- package/lib/emitters/operation-signature.d.ts.map +0 -1
- package/lib/emitters/operation-signature.js +0 -42
- package/lib/emitters/operation-signature.js.map +0 -1
- package/lib/emitters/operation-types.d.ts +0 -32
- package/lib/emitters/operation-types.d.ts.map +0 -1
- package/lib/emitters/operation-types.js +0 -117
- package/lib/emitters/operation-types.js.map +0 -1
- package/lib/emitters/operations.d.ts +0 -41
- package/lib/emitters/operations.d.ts.map +0 -1
- package/lib/emitters/operations.js +0 -35
- package/lib/emitters/operations.js.map +0 -1
- package/lib/emitters/pagination.d.ts.map +0 -1
- package/lib/emitters/pagination.js.map +0 -1
- package/lib/emitters/reserved-names.d.ts +0 -5
- package/lib/emitters/reserved-names.d.ts.map +0 -1
- package/lib/emitters/reserved-names.js.map +0 -1
- package/lib/emitters/response-headers.d.ts +0 -14
- package/lib/emitters/response-headers.d.ts.map +0 -1
- package/lib/emitters/response-headers.js +0 -91
- package/lib/emitters/response-headers.js.map +0 -1
- package/lib/emitters/runtime-sources.d.ts +0 -16
- package/lib/emitters/runtime-sources.d.ts.map +0 -1
- package/lib/emitters/runtime-sources.js +0 -16
- package/lib/emitters/runtime-sources.js.map +0 -1
- package/lib/emitters/sample.d.ts.map +0 -1
- package/lib/emitters/sample.js.map +0 -1
- package/lib/emitters/setup-bake.d.ts.map +0 -1
- package/lib/emitters/setup-bake.js.map +0 -1
- package/lib/emitters/sse.d.ts +0 -10
- package/lib/emitters/sse.d.ts.map +0 -1
- package/lib/emitters/sse.js +0 -46
- package/lib/emitters/sse.js.map +0 -1
- package/lib/emitters/support.d.ts +0 -18
- package/lib/emitters/support.d.ts.map +0 -1
- package/lib/emitters/support.js +0 -37
- package/lib/emitters/support.js.map +0 -1
- package/lib/emitters/swr.d.ts.map +0 -1
- package/lib/emitters/swr.js +0 -88
- package/lib/emitters/swr.js.map +0 -1
- package/lib/emitters/tanstack-query.d.ts.map +0 -1
- package/lib/emitters/tanstack-query.js.map +0 -1
- package/lib/emitters/transformers.d.ts.map +0 -1
- package/lib/emitters/transformers.js.map +0 -1
- package/lib/emitters/ts.d.ts +0 -42
- package/lib/emitters/ts.d.ts.map +0 -1
- package/lib/emitters/ts.js +0 -116
- package/lib/emitters/ts.js.map +0 -1
- package/lib/emitters/type-guards.d.ts +0 -21
- package/lib/emitters/type-guards.d.ts.map +0 -1
- package/lib/emitters/type-guards.js.map +0 -1
- package/lib/emitters/types.d.ts +0 -15
- package/lib/emitters/types.d.ts.map +0 -1
- package/lib/emitters/types.js +0 -125
- package/lib/emitters/types.js.map +0 -1
- package/lib/emitters/wrapper-support.d.ts.map +0 -1
- package/lib/emitters/wrapper-support.js +0 -127
- package/lib/emitters/wrapper-support.js.map +0 -1
- package/lib/emitters/zod.d.ts.map +0 -1
- package/lib/emitters/zod.js.map +0 -1
- package/lib/generators/anchor.d.ts +0 -9
- package/lib/generators/anchor.d.ts.map +0 -1
- package/lib/generators/anchor.js +0 -10
- package/lib/generators/anchor.js.map +0 -1
- package/lib/generators/mock.d.ts.map +0 -1
- package/lib/generators/mock.js.map +0 -1
- package/lib/generators/sdk.d.ts +0 -12
- package/lib/generators/sdk.d.ts.map +0 -1
- package/lib/generators/sdk.js +0 -26
- package/lib/generators/sdk.js.map +0 -1
- package/lib/generators/swr.d.ts.map +0 -1
- package/lib/generators/swr.js.map +0 -1
- package/lib/generators/tanstack-query.d.ts.map +0 -1
- package/lib/generators/tanstack-query.js.map +0 -1
- package/lib/generators/transformers.d.ts.map +0 -1
- package/lib/generators/transformers.js.map +0 -1
- package/lib/generators/zod.d.ts.map +0 -1
- package/lib/generators/zod.js.map +0 -1
- package/lib/runtime/auth.d.ts.map +0 -1
- package/lib/runtime/auth.js.map +0 -1
- package/lib/runtime/create-client.d.ts.map +0 -1
- package/lib/runtime/create-client.js.map +0 -1
- package/lib/runtime/errors.d.ts.map +0 -1
- package/lib/runtime/errors.js.map +0 -1
- package/lib/runtime/index.d.ts.map +0 -1
- package/lib/runtime/index.js.map +0 -1
- package/lib/runtime/multipart.d.ts.map +0 -1
- package/lib/runtime/multipart.js.map +0 -1
- package/lib/runtime/paginate.d.ts.map +0 -1
- package/lib/runtime/paginate.js.map +0 -1
- package/lib/runtime/parse.d.ts.map +0 -1
- package/lib/runtime/parse.js.map +0 -1
- package/lib/runtime/retry.d.ts.map +0 -1
- package/lib/runtime/retry.js.map +0 -1
- package/lib/runtime/send.d.ts.map +0 -1
- package/lib/runtime/send.js.map +0 -1
- package/lib/runtime/setup.d.ts.map +0 -1
- package/lib/runtime/setup.js.map +0 -1
- package/lib/runtime/sse.d.ts.map +0 -1
- package/lib/runtime/sse.js.map +0 -1
- package/lib/runtime/types.d.ts.map +0 -1
- package/lib/runtime/types.js.map +0 -1
- package/lib/runtime/url.d.ts.map +0 -1
- package/lib/runtime/url.js.map +0 -1
- /package/lib/{emitters → generators/mock}/sample.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/auth.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/auth.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/errors.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/errors.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/index.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/index.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/multipart.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/multipart.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/parse.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/parse.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/retry.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/retry.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/send.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/send.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/setup.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/setup.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/sse.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/sse.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/types.js +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/url.d.ts +0 -0
- /package/lib/{runtime → generators/typescript/runtime}/url.js +0 -0
- /package/lib/{emitters/setup-bake.d.ts → setup-bake.d.ts} +0 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
// Ejected from @redocly/client-generator@0.4.0 — the built-in "mock" 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 mock --update`.
|
|
5
|
+
import {
|
|
6
|
+
type DateType,
|
|
7
|
+
type NamedSchemaModel,
|
|
8
|
+
type ScalarKind,
|
|
9
|
+
type SchemaMetadata,
|
|
10
|
+
type SchemaModel,
|
|
11
|
+
} from '@redocly/client-generator';
|
|
12
|
+
import { isPlainObject } from '@redocly/openapi-core';
|
|
13
|
+
|
|
14
|
+
/** A sampled value the emitter must print as a raw TS expression rather than a JSON
|
|
15
|
+
* literal — e.g. a `format: binary` field, whose generated type is `Blob`. The `code`
|
|
16
|
+
* strings are generator-authored constants (never spec-derived), so emitting them
|
|
17
|
+
* verbatim is safe. */
|
|
18
|
+
export class SampleExpression {
|
|
19
|
+
constructor(readonly code: string) {}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Options for `sampleValue`. `dateType` mirrors the type emitter's `--date-type`
|
|
23
|
+
* knob: when `'Date'`, date/date-time fields are typed `Date` (not `string`), so
|
|
24
|
+
* the sample must be a `new Date(...)` expression to match. Defaults to `'string'`. */
|
|
25
|
+
export type SampleOptions = { dateType?: DateType };
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Turn an IR schema into a single deterministic JS value for static mocks. Prefers
|
|
29
|
+
* a spec `example`, then `default`, then a type/format-aware synthesized value —
|
|
30
|
+
* EXCEPT for type-demanding fields (binary, or date/date-time under `dateType: 'Date'`)
|
|
31
|
+
* whose generated type is not a JSON literal: those emit a fixed raw expression that
|
|
32
|
+
* matches the type, regardless of any example/default (see `typeDemandedExpression`).
|
|
33
|
+
* Refs resolve against `schemas`; recursion is cut with a visited-set so cyclic
|
|
34
|
+
* schemas terminate (`null` at the cycle) instead of looping forever.
|
|
35
|
+
*/
|
|
36
|
+
export function sampleValue(
|
|
37
|
+
schema: SchemaModel,
|
|
38
|
+
schemas: NamedSchemaModel[],
|
|
39
|
+
opts: SampleOptions = {}
|
|
40
|
+
): unknown {
|
|
41
|
+
const byName = new Map(schemas.map((s) => [s.name, s.schema]));
|
|
42
|
+
const value = walk(schema, byName, new Set(), opts.dateType ?? 'string');
|
|
43
|
+
// A `CYCLE` that propagates all the way to the root has no container to absorb it
|
|
44
|
+
// into a valid empty value (e.g. a self-referential union); fall back to null.
|
|
45
|
+
return value === CYCLE ? null : value;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Sentinel returned by `walk` when a `$ref` re-enters a name already on the stack.
|
|
50
|
+
* Containers turn it into the type-correct empty value for their position — an array
|
|
51
|
+
* to `[]`, a record to `{}`, an optional property to omission — so a recursive schema
|
|
52
|
+
* yields data that still satisfies its (non-nullable) generated type. Only a required,
|
|
53
|
+
* non-container self-reference (a genuinely uninhabitable schema) degrades to null.
|
|
54
|
+
*/
|
|
55
|
+
const CYCLE = Symbol('cycle');
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The expression a field MUST sample to because its generated type is not a JSON
|
|
59
|
+
* literal — so it takes precedence over any spec `example`/`default` (baking those
|
|
60
|
+
* would not type-check). The returned `code` is a generator-authored CONSTANT and
|
|
61
|
+
* is NEVER interpolated from spec data: it flows verbatim into `parseExpression`,
|
|
62
|
+
* so feeding a spec example string in here would be an injection vector. `undefined`
|
|
63
|
+
* when the field has no type demand (the normal example/default/synthesis path applies).
|
|
64
|
+
*/
|
|
65
|
+
function typeDemandedExpression(
|
|
66
|
+
schema: SchemaModel,
|
|
67
|
+
dateType: DateType
|
|
68
|
+
): SampleExpression | undefined {
|
|
69
|
+
// A nullable field (`type: ['string', 'null']`) wraps the demanding scalar in a
|
|
70
|
+
// union — the demand (and its precedence over any example) applies to the member.
|
|
71
|
+
if (schema.kind === 'union') {
|
|
72
|
+
for (const member of schema.members) {
|
|
73
|
+
const demanded = typeDemandedExpression(member, dateType);
|
|
74
|
+
if (demanded) return demanded;
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
if (schema.kind !== 'scalar') return undefined;
|
|
79
|
+
const format = schema.metadata?.format;
|
|
80
|
+
if (format === 'binary') return new SampleExpression('new Blob([])');
|
|
81
|
+
if (dateType === 'Date') {
|
|
82
|
+
if (format === 'date-time') return new SampleExpression('new Date("2024-01-01T00:00:00Z")');
|
|
83
|
+
if (format === 'date') return new SampleExpression('new Date("2024-01-01")');
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Split intersection members for sampling: object-shaped members (inline, or refs
|
|
90
|
+
* resolving to objects) merge into ONE synthetic object schema whose conflicting
|
|
91
|
+
* properties are resolved by SPECIFICITY — mirroring TS intersection algebra, where
|
|
92
|
+
* `string & "Apple Pay"` is `"Apple Pay"` regardless of member order. Constraint-only
|
|
93
|
+
* `unknown` members (`not`, unmodeled keywords) are dropped; everything else is
|
|
94
|
+
* returned in `rest` untouched.
|
|
95
|
+
*/
|
|
96
|
+
export function splitIntersection(
|
|
97
|
+
members: SchemaModel[],
|
|
98
|
+
byName: Map<string, SchemaModel>
|
|
99
|
+
): { merged: SchemaModel | undefined; rest: SchemaModel[] } {
|
|
100
|
+
const properties = new Map<string, { schema: SchemaModel; required: boolean; rank: number }>();
|
|
101
|
+
const rest: SchemaModel[] = [];
|
|
102
|
+
let sawObject = false;
|
|
103
|
+
for (const member of members) {
|
|
104
|
+
if (member.kind === 'unknown') continue;
|
|
105
|
+
const resolved = derefChain(member, byName);
|
|
106
|
+
if (resolved?.kind !== 'object') {
|
|
107
|
+
rest.push(member);
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
sawObject = true;
|
|
111
|
+
for (const property of resolved.properties) {
|
|
112
|
+
const rank = specificity(property.schema, byName, new Set());
|
|
113
|
+
const existing = properties.get(property.name);
|
|
114
|
+
// Higher specificity wins; a tie goes to the later member (extension over base).
|
|
115
|
+
if (existing === undefined || rank >= existing.rank) {
|
|
116
|
+
properties.set(property.name, {
|
|
117
|
+
schema: property.schema,
|
|
118
|
+
required: property.required || (existing?.required ?? false),
|
|
119
|
+
rank,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!sawObject) return { merged: undefined, rest };
|
|
125
|
+
return {
|
|
126
|
+
merged: {
|
|
127
|
+
kind: 'object',
|
|
128
|
+
properties: [...properties.entries()].map(([name, p]) => ({
|
|
129
|
+
name,
|
|
130
|
+
schema: p.schema,
|
|
131
|
+
required: p.required,
|
|
132
|
+
})),
|
|
133
|
+
},
|
|
134
|
+
rest,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** Follow a ref chain to its target (cycle-safe); `undefined` on a miss or cycle. */
|
|
139
|
+
function derefChain(
|
|
140
|
+
schema: SchemaModel,
|
|
141
|
+
byName: Map<string, SchemaModel>
|
|
142
|
+
): SchemaModel | undefined {
|
|
143
|
+
const seen = new Set<string>();
|
|
144
|
+
let current: SchemaModel | undefined = schema;
|
|
145
|
+
while (current?.kind === 'ref') {
|
|
146
|
+
if (seen.has(current.name)) return undefined;
|
|
147
|
+
seen.add(current.name);
|
|
148
|
+
current = byName.get(current.name);
|
|
149
|
+
}
|
|
150
|
+
return current;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* How narrowly a schema types its values — the winner of an intersection property
|
|
155
|
+
* conflict. Literals and single-value enums (both emitted as literal types) beat
|
|
156
|
+
* enums, which beat everything else; `null`/`unknown` lose to any real shape, and
|
|
157
|
+
* a union ranks just below its narrowest member (so `T | null` loses to `T`).
|
|
158
|
+
*/
|
|
159
|
+
function specificity(
|
|
160
|
+
schema: SchemaModel,
|
|
161
|
+
byName: Map<string, SchemaModel>,
|
|
162
|
+
seen: Set<string>
|
|
163
|
+
): number {
|
|
164
|
+
switch (schema.kind) {
|
|
165
|
+
case 'literal':
|
|
166
|
+
return 40;
|
|
167
|
+
case 'enum':
|
|
168
|
+
return schema.values.length === 1 ? 40 : 30;
|
|
169
|
+
case 'union':
|
|
170
|
+
return Math.max(0, ...schema.members.map((m) => specificity(m, byName, seen))) - 1;
|
|
171
|
+
case 'ref': {
|
|
172
|
+
if (seen.has(schema.name)) return 20;
|
|
173
|
+
const target = byName.get(schema.name);
|
|
174
|
+
return target === undefined
|
|
175
|
+
? 20
|
|
176
|
+
: specificity(target, byName, new Set(seen).add(schema.name));
|
|
177
|
+
}
|
|
178
|
+
case 'null':
|
|
179
|
+
case 'unknown':
|
|
180
|
+
return 10;
|
|
181
|
+
default:
|
|
182
|
+
return 20;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function walk(
|
|
187
|
+
schema: SchemaModel,
|
|
188
|
+
byName: Map<string, SchemaModel>,
|
|
189
|
+
visiting: Set<string>,
|
|
190
|
+
dateType: DateType
|
|
191
|
+
): unknown {
|
|
192
|
+
const demanded = typeDemandedExpression(schema, dateType);
|
|
193
|
+
if (demanded) return demanded;
|
|
194
|
+
|
|
195
|
+
const meta = schema.metadata;
|
|
196
|
+
// An example/default is honored only when it inhabits the generated type — real specs
|
|
197
|
+
// carry `example: null` on non-nullable fields and defaults outside a narrowed enum
|
|
198
|
+
// (`enum: [cram-md5], default: none`); baking those would not type-check.
|
|
199
|
+
const inhabits = (value: unknown): boolean => {
|
|
200
|
+
if (value === null) {
|
|
201
|
+
return (
|
|
202
|
+
schema.kind === 'null' ||
|
|
203
|
+
(schema.kind === 'union' && schema.members.some((member) => member.kind === 'null'))
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
if (schema.kind === 'enum') return (schema.values as unknown[]).includes(value);
|
|
207
|
+
if (schema.kind === 'literal') return value === schema.value;
|
|
208
|
+
return true;
|
|
209
|
+
};
|
|
210
|
+
if (meta?.example !== undefined && inhabits(meta.example)) return meta.example;
|
|
211
|
+
if (meta?.default !== undefined && inhabits(meta.default)) return meta.default;
|
|
212
|
+
|
|
213
|
+
switch (schema.kind) {
|
|
214
|
+
case 'scalar':
|
|
215
|
+
return scalarSample(schema.scalar, meta);
|
|
216
|
+
case 'array': {
|
|
217
|
+
// A cyclic item type collapses the array to `[]` — itself a valid `T[]`.
|
|
218
|
+
const item = walk(schema.items, byName, visiting, dateType);
|
|
219
|
+
return item === CYCLE ? [] : [item];
|
|
220
|
+
}
|
|
221
|
+
case 'object':
|
|
222
|
+
return Object.fromEntries(
|
|
223
|
+
schema.properties.flatMap((p) => {
|
|
224
|
+
const value = walk(p.schema, byName, visiting, dateType);
|
|
225
|
+
// A cyclic optional property is omitted (a null would not satisfy `T | undefined`);
|
|
226
|
+
// a cyclic required property is uninhabitable, so null is the only stand-in.
|
|
227
|
+
if (value === CYCLE) return p.required ? [[p.name, null]] : [];
|
|
228
|
+
return [[p.name, value]];
|
|
229
|
+
})
|
|
230
|
+
);
|
|
231
|
+
case 'record': {
|
|
232
|
+
const value = walk(schema.value, byName, visiting, dateType);
|
|
233
|
+
return value === CYCLE ? {} : { key: value };
|
|
234
|
+
}
|
|
235
|
+
case 'enum':
|
|
236
|
+
return schema.values[0];
|
|
237
|
+
case 'literal':
|
|
238
|
+
return schema.value;
|
|
239
|
+
case 'union': {
|
|
240
|
+
// Pick the first member that is not itself a cycle; if every member cycles the
|
|
241
|
+
// union is uninhabitable, so propagate `CYCLE` for a container/root to absorb.
|
|
242
|
+
for (const member of schema.members) {
|
|
243
|
+
const value = walk(member, byName, visiting, dateType);
|
|
244
|
+
if (value !== CYCLE) return value;
|
|
245
|
+
}
|
|
246
|
+
return schema.members.length > 0 ? CYCLE : null;
|
|
247
|
+
}
|
|
248
|
+
case 'intersection': {
|
|
249
|
+
const { merged, rest } = splitIntersection(schema.members, byName);
|
|
250
|
+
const parts = rest
|
|
251
|
+
.map((member) => walk(member, byName, visiting, dateType))
|
|
252
|
+
.filter((part) => part !== CYCLE);
|
|
253
|
+
if (merged) {
|
|
254
|
+
const value = walk(merged, byName, visiting, dateType);
|
|
255
|
+
const base = isPlainObject(value) ? (value as Record<string, unknown>) : {};
|
|
256
|
+
// Fold in plain-object samples of non-object members (records, omits).
|
|
257
|
+
for (const part of parts) if (isPlainObject(part)) Object.assign(base, part);
|
|
258
|
+
return base;
|
|
259
|
+
}
|
|
260
|
+
const objects = parts.filter(isPlainObject);
|
|
261
|
+
if (objects.length > 0) {
|
|
262
|
+
return objects.reduce<Record<string, unknown>>((acc, part) => Object.assign(acc, part), {});
|
|
263
|
+
}
|
|
264
|
+
// No object member: a scalar-narrowing intersection (e.g. an enum ref constrained
|
|
265
|
+
// by `not`) — the first member's sample IS the value.
|
|
266
|
+
return parts.length > 0 ? parts[0] : {};
|
|
267
|
+
}
|
|
268
|
+
case 'omit': {
|
|
269
|
+
// base is a named schema reference (string), resolve it then drop the listed keys
|
|
270
|
+
const target = byName.get(schema.base);
|
|
271
|
+
if (!target) return null;
|
|
272
|
+
const base = walk(target, byName, visiting, dateType);
|
|
273
|
+
if (isPlainObject(base)) {
|
|
274
|
+
const copy = { ...(base as Record<string, unknown>) };
|
|
275
|
+
for (const key of schema.keys) delete copy[key];
|
|
276
|
+
return copy;
|
|
277
|
+
}
|
|
278
|
+
return base;
|
|
279
|
+
}
|
|
280
|
+
case 'ref': {
|
|
281
|
+
if (visiting.has(schema.name)) return CYCLE;
|
|
282
|
+
const target = byName.get(schema.name);
|
|
283
|
+
if (!target) return null;
|
|
284
|
+
visiting.add(schema.name);
|
|
285
|
+
const result = walk(target, byName, visiting, dateType);
|
|
286
|
+
visiting.delete(schema.name);
|
|
287
|
+
return result;
|
|
288
|
+
}
|
|
289
|
+
case 'null':
|
|
290
|
+
case 'unknown':
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
function scalarSample(scalar: ScalarKind, meta: SchemaMetadata | undefined): unknown {
|
|
296
|
+
if (scalar === 'boolean') return true;
|
|
297
|
+
if (scalar === 'integer' || scalar === 'number') return 0;
|
|
298
|
+
// Type-demanding formats (binary, and date/date-time under `dateType: 'Date'`) are
|
|
299
|
+
// handled earlier in `walk` via `typeDemandedExpression`; here the date formats fall
|
|
300
|
+
// through to the ISO-string path (the `dateType: 'string'` types them as `string`).
|
|
301
|
+
switch (meta?.format) {
|
|
302
|
+
case 'email':
|
|
303
|
+
return 'user@example.com';
|
|
304
|
+
case 'uuid':
|
|
305
|
+
return '00000000-0000-4000-8000-000000000000';
|
|
306
|
+
case 'date-time':
|
|
307
|
+
return '2024-01-01T00:00:00Z';
|
|
308
|
+
case 'date':
|
|
309
|
+
return '2024-01-01';
|
|
310
|
+
case 'uri':
|
|
311
|
+
case 'url':
|
|
312
|
+
return 'https://example.com';
|
|
313
|
+
default:
|
|
314
|
+
return 'string';
|
|
315
|
+
}
|
|
316
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// Ejected from @redocly/client-generator@0.4.0 — the built-in "mock" 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 mock --update`.
|
|
5
|
+
// The value tree the mock/faker emitters build and render: keeps object structure
|
|
6
|
+
// (for intersection merging and `...overrides` spreading) until the final render,
|
|
7
|
+
// where indentation is threaded. Deliberately tiny.
|
|
8
|
+
|
|
9
|
+
import { safeIdent, sanitizeCodeString } from '@redocly/client-generator/printers/typescript';
|
|
10
|
+
|
|
11
|
+
export type MockEntry = { key: string; value: MockValue } | { spread: string };
|
|
12
|
+
|
|
13
|
+
export type MockValue =
|
|
14
|
+
| { kind: 'object'; entries: MockEntry[] }
|
|
15
|
+
| { kind: 'array'; items: MockValue[] }
|
|
16
|
+
| { kind: 'expr'; text: string }
|
|
17
|
+
/** A textual wrapper around a nested value (`faker.helpers.multiple(() => <v>, …)`). */
|
|
18
|
+
| { kind: 'wrap'; before: string; value: MockValue; after: string };
|
|
19
|
+
|
|
20
|
+
export const expr = (text: string): MockValue => ({ kind: 'expr', text });
|
|
21
|
+
export const objectValue = (entries: MockEntry[]): MockValue => ({ kind: 'object', entries });
|
|
22
|
+
|
|
23
|
+
export function isObjectValue(value: MockValue): value is Extract<MockValue, { kind: 'object' }> {
|
|
24
|
+
return value.kind === 'object';
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Spread `<name>` into an object value; non-objects pass through unchanged. */
|
|
28
|
+
export function spreadInto(value: MockValue, name: string): MockValue {
|
|
29
|
+
if (!isObjectValue(value)) return value;
|
|
30
|
+
return objectValue([...value.entries, { spread: name }]);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const INDENT = ' ';
|
|
34
|
+
|
|
35
|
+
/** Render at `indent` (the containing line's indent): objects/arrays multiline, printer-style. */
|
|
36
|
+
export function renderMockValue(value: MockValue, indent: string): string {
|
|
37
|
+
switch (value.kind) {
|
|
38
|
+
case 'expr':
|
|
39
|
+
return value.text;
|
|
40
|
+
case 'wrap':
|
|
41
|
+
return `${value.before}${renderMockValue(value.value, indent)}${value.after}`;
|
|
42
|
+
case 'array': {
|
|
43
|
+
if (value.items.length === 0) return '[]';
|
|
44
|
+
const inner = indent + INDENT;
|
|
45
|
+
const lines = value.items.map(
|
|
46
|
+
(item, index) =>
|
|
47
|
+
`${inner}${renderMockValue(item, inner)}${index === value.items.length - 1 ? '' : ','}`
|
|
48
|
+
);
|
|
49
|
+
return `[\n${lines.join('\n')}\n${indent}]`;
|
|
50
|
+
}
|
|
51
|
+
case 'object': {
|
|
52
|
+
if (value.entries.length === 0) return '{}';
|
|
53
|
+
const inner = indent + INDENT;
|
|
54
|
+
const lines = value.entries.map((entry, index) => {
|
|
55
|
+
const comma = index === value.entries.length - 1 ? '' : ',';
|
|
56
|
+
if ('spread' in entry) return `${inner}...${entry.spread}${comma}`;
|
|
57
|
+
const key = safeIdent(entry.key) === entry.key ? entry.key : sanitizeCodeString(entry.key);
|
|
58
|
+
return `${inner}${key}: ${renderMockValue(entry.value, inner)}${comma}`;
|
|
59
|
+
});
|
|
60
|
+
return `{\n${lines.join('\n')}\n${indent}}`;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// Ejected from @redocly/client-generator@0.4.0 — the built-in "php" 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 php --update`.
|
|
5
|
+
// The `client` stage: the `Servers` helper class of one static method per
|
|
6
|
+
// declared server.
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
type ApiModel,
|
|
10
|
+
identifierFor,
|
|
11
|
+
type ServerModel,
|
|
12
|
+
serverUrlParts,
|
|
13
|
+
} from '@redocly/client-generator';
|
|
14
|
+
import type { PhpPrinter } from '@redocly/client-generator/printers/php';
|
|
15
|
+
|
|
16
|
+
import { PHP, phpString, propertyName } from './naming.ts';
|
|
17
|
+
|
|
18
|
+
/** The server URL as a PHP expression: literals concatenated with declared-variable args. */
|
|
19
|
+
function serverUrlExpression(server: ServerModel): string {
|
|
20
|
+
const parts = serverUrlParts(server).map((part) =>
|
|
21
|
+
part.kind === 'literal' ? phpString(part.value) : `${'$'}${propertyName(part.name)}`
|
|
22
|
+
);
|
|
23
|
+
return parts.join(' . ');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** One static method per declared server; server variables become named string arguments. */
|
|
27
|
+
export function writeServers(printer: PhpPrinter, model: ApiModel): void {
|
|
28
|
+
const servers = model.servers ?? [];
|
|
29
|
+
if (servers.length === 0) return;
|
|
30
|
+
const usedNames = new Set<string>();
|
|
31
|
+
printer.line(
|
|
32
|
+
'/** The declared servers; variables default to the values from the description. */'
|
|
33
|
+
);
|
|
34
|
+
printer.line('final class Servers');
|
|
35
|
+
printer.block(
|
|
36
|
+
'{',
|
|
37
|
+
() => {
|
|
38
|
+
servers.forEach((server, index) => {
|
|
39
|
+
let name = identifierFor(server.description ?? `server${index + 1}`, {
|
|
40
|
+
style: 'camel',
|
|
41
|
+
reserved: PHP,
|
|
42
|
+
});
|
|
43
|
+
if (usedNames.has(name)) name = `${name}${index + 1}`;
|
|
44
|
+
usedNames.add(name);
|
|
45
|
+
const params = server.variables.map(
|
|
46
|
+
(variable) =>
|
|
47
|
+
`string ${'$'}${propertyName(variable.name)} = ${phpString(variable.default)}`
|
|
48
|
+
);
|
|
49
|
+
if (index > 0) printer.blank();
|
|
50
|
+
printer.line(`public static function ${name}(${params.join(', ')}): string`);
|
|
51
|
+
printer.block(
|
|
52
|
+
'{',
|
|
53
|
+
() => {
|
|
54
|
+
printer.line(`return ${serverUrlExpression(server)};`);
|
|
55
|
+
},
|
|
56
|
+
'}'
|
|
57
|
+
);
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
'}'
|
|
61
|
+
);
|
|
62
|
+
printer.blank();
|
|
63
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Ejected from @redocly/client-generator@0.4.0 — the built-in "php" 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 php --update`.
|
|
5
|
+
// The `descriptor` stage: the operations-table array literals — security
|
|
6
|
+
// OR-alternatives, the pagination spec, and envelope-header coerce specs.
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
type ApiModel,
|
|
10
|
+
headerCoerceType,
|
|
11
|
+
identifierFor,
|
|
12
|
+
type NeutralPaginationRule,
|
|
13
|
+
type OperationModel,
|
|
14
|
+
securityRequirements,
|
|
15
|
+
} from '@redocly/client-generator';
|
|
16
|
+
|
|
17
|
+
import { PHP, phpString } from './naming.ts';
|
|
18
|
+
|
|
19
|
+
/** Security literal for the operations table, denormalized from the model's schemes. */
|
|
20
|
+
export function phpSecurityLiteral(op: OperationModel, model: ApiModel): string | undefined {
|
|
21
|
+
const alternatives = securityRequirements(op, model).map((alternative) => {
|
|
22
|
+
const specs = alternative.map((spec) =>
|
|
23
|
+
spec.kind === 'apiKey'
|
|
24
|
+
? `['kind' => 'apiKey', 'scheme' => ${phpString(spec.scheme)}, 'name' => ${phpString(spec.name)}, 'in' => ${phpString(spec.in)}]`
|
|
25
|
+
: `['kind' => ${phpString(spec.kind)}, 'scheme' => ${phpString(spec.scheme)}]`
|
|
26
|
+
);
|
|
27
|
+
return `[${specs.join(', ')}]`;
|
|
28
|
+
});
|
|
29
|
+
if (alternatives.length === 0) return undefined;
|
|
30
|
+
return `[${alternatives.join(', ')}]`;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function phpPaginationLiteral(rule: NeutralPaginationRule): string {
|
|
34
|
+
const fields = [
|
|
35
|
+
`'style' => ${phpString(rule.style)}`,
|
|
36
|
+
...(rule.param !== undefined ? [`'param' => ${phpString(rule.param)}`] : []),
|
|
37
|
+
...(rule.nextCursor !== undefined ? [`'nextCursor' => ${phpString(rule.nextCursor)}`] : []),
|
|
38
|
+
...(rule.hasMore !== undefined ? [`'hasMore' => ${phpString(rule.hasMore)}`] : []),
|
|
39
|
+
...(rule.limitParam !== undefined ? [`'limitParam' => ${phpString(rule.limitParam)}`] : []),
|
|
40
|
+
...(rule.items !== undefined ? [`'items' => ${phpString(rule.items)}`] : []),
|
|
41
|
+
];
|
|
42
|
+
return `[${fields.join(', ')}]`;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Declared response headers as runtime coerce specs: `[wire name, camelCase key, type]`. */
|
|
46
|
+
export function envelopeHeaderSpecs(op: OperationModel, model: ApiModel): string {
|
|
47
|
+
const used = new Set<string>();
|
|
48
|
+
const specs = (op.successResponseHeaders ?? []).map((header) => {
|
|
49
|
+
let key = identifierFor(header.name, { style: 'camel', reserved: PHP });
|
|
50
|
+
let suffix = 2;
|
|
51
|
+
while (used.has(key))
|
|
52
|
+
key = `${identifierFor(header.name, { style: 'camel', reserved: PHP })}_${suffix++}`;
|
|
53
|
+
used.add(key);
|
|
54
|
+
const type = headerCoerceType(header.schema, model);
|
|
55
|
+
return `[${phpString(header.name)}, ${phpString(key)}, ${phpString(type)}]`;
|
|
56
|
+
});
|
|
57
|
+
return `[${specs.join(', ')}]`;
|
|
58
|
+
}
|