@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
|
@@ -6,12 +6,10 @@
|
|
|
6
6
|
//
|
|
7
7
|
// Pairs with the sdk generated under `dateType: 'Date'`; the client itself
|
|
8
8
|
// stays zero-dep (Date is standard). Transformers compose across refs:
|
|
9
|
-
// `transformPet` calls `
|
|
10
|
-
// `
|
|
11
|
-
import { safeIdent } from '
|
|
12
|
-
|
|
13
|
-
import { arrow, exportConstStatement, parseStatements, printStatements, ts } from './ts.js';
|
|
14
|
-
const { factory } = ts;
|
|
9
|
+
// `transformPet` calls `transformOwner(data["owner"])` when `Pet.owner` is an
|
|
10
|
+
// `Owner` that has dates. Source-text templates throughout.
|
|
11
|
+
import { pascalCase, safeIdent } from '@redocly/client-generator/printers/typescript';
|
|
12
|
+
const INDENT = ' ';
|
|
15
13
|
/** `transform<Name>` — the function bound to a named schema. */
|
|
16
14
|
function transformName(name) {
|
|
17
15
|
return `transform${pascalCase(name)}`;
|
|
@@ -23,6 +21,13 @@ function transformName(name) {
|
|
|
23
21
|
const WRITABLE_DECL = 'type __Writable<T> = { -readonly [K in keyof T]: T[K] };';
|
|
24
22
|
/** Set by `writableLhs` during a render; `renderTransformersModule` resets and reads it. */
|
|
25
23
|
let writableUsed = false;
|
|
24
|
+
function ident(name) {
|
|
25
|
+
return { text: name, path: [name] };
|
|
26
|
+
}
|
|
27
|
+
/** `<target>["key"]` — bracket access, robust for any (incl. non-identifier) key. */
|
|
28
|
+
function index(target, key) {
|
|
29
|
+
return { text: `${target.text}[${JSON.stringify(key)}]`, path: [...target.path, key] };
|
|
30
|
+
}
|
|
26
31
|
/**
|
|
27
32
|
* Whether transforming a value of `schema` REPLACES it (so the result must be
|
|
28
33
|
* assigned back) rather than mutating it in place: date scalars, arrays of
|
|
@@ -81,80 +86,51 @@ function hasDates(schema, byName, seen) {
|
|
|
81
86
|
return false;
|
|
82
87
|
}
|
|
83
88
|
}
|
|
84
|
-
/**
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
function
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function isStringGuard(expr) {
|
|
94
|
-
return factory.createBinaryExpression(factory.createTypeOfExpression(expr), factory.createToken(ts.SyntaxKind.EqualsEqualsEqualsToken), factory.createStringLiteral('string'));
|
|
95
|
-
}
|
|
96
|
-
/** `Array.isArray(<expr>)`. */
|
|
97
|
-
function isArrayGuard(expr) {
|
|
98
|
-
return factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier('Array'), 'isArray'), undefined, [expr]);
|
|
99
|
-
}
|
|
100
|
-
/** `<expr> && typeof <expr> === "object"` — truthy and a (non-null) object. */
|
|
101
|
-
function isObjectGuard(expr) {
|
|
102
|
-
return factory.createBinaryExpression(expr, factory.createToken(ts.SyntaxKind.AmpersandAmpersandToken), factory.createBinaryExpression(factory.createTypeOfExpression(expr), factory.createToken(ts.SyntaxKind.EqualsEqualsEqualsToken), factory.createStringLiteral('object')));
|
|
103
|
-
}
|
|
104
|
-
/** `<expr> as <Type>` — a type assertion, to satisfy a union-narrowing transform. */
|
|
105
|
-
function asType(expr, typeName) {
|
|
106
|
-
return factory.createAsExpression(expr, factory.createTypeReferenceNode(typeName));
|
|
107
|
-
}
|
|
108
|
-
/** `if (<cond>) <then>;`. */
|
|
109
|
-
function ifThen(cond, then) {
|
|
110
|
-
return factory.createIfStatement(cond, then);
|
|
111
|
-
}
|
|
112
|
-
function exprStatement(expr) {
|
|
113
|
-
return factory.createExpressionStatement(expr);
|
|
89
|
+
/**
|
|
90
|
+
* `if (<cond>) …` — a brace-less single-statement `then` prints on the next line one
|
|
91
|
+
* level deeper (`block: false`), a braced one wraps in `{ … }` (`block: true`);
|
|
92
|
+
* `then` receives the indent its lines must start at.
|
|
93
|
+
*/
|
|
94
|
+
function ifThen(cond, then, indent, block = false) {
|
|
95
|
+
if (block)
|
|
96
|
+
return [`${indent}if (${cond}) {`, ...then(indent + INDENT), `${indent}}`];
|
|
97
|
+
return [`${indent}if (${cond})`, ...then(indent + INDENT)];
|
|
114
98
|
}
|
|
115
99
|
/** `<target> = <value>;` — the LHS cast writable when it is a `readonly` property. */
|
|
116
100
|
function assign(target, value, readonlyLhs = false) {
|
|
117
|
-
const lhs = readonlyLhs ? writableLhs(target) : target;
|
|
118
|
-
return
|
|
101
|
+
const lhs = readonlyLhs ? writableLhs(target) : target.text;
|
|
102
|
+
return (indent) => [`${indent}${lhs} = ${value};`];
|
|
103
|
+
}
|
|
104
|
+
function statement(expr) {
|
|
105
|
+
return (indent) => [`${indent}${expr};`];
|
|
119
106
|
}
|
|
120
107
|
/**
|
|
121
108
|
* The write target for a `readonly`-typed property:
|
|
122
109
|
* `(recv as __Writable<NonNullable<typeof recv>>)["key"]`. `readonly` is shallow —
|
|
123
110
|
* it blocks only the direct assignment — so nested writes stay uncast.
|
|
124
111
|
*/
|
|
125
|
-
function writableLhs(
|
|
126
|
-
if (
|
|
127
|
-
return
|
|
112
|
+
function writableLhs(target) {
|
|
113
|
+
if (target.path.length < 2)
|
|
114
|
+
return target.text; // a parameter reassignment is never readonly
|
|
128
115
|
writableUsed = true;
|
|
129
|
-
const receiver =
|
|
130
|
-
|
|
116
|
+
const receiver = {
|
|
117
|
+
text: target.text.slice(0, target.text.lastIndexOf('[')),
|
|
118
|
+
path: target.path.slice(0, -1),
|
|
119
|
+
};
|
|
120
|
+
const key = target.path[target.path.length - 1];
|
|
121
|
+
return `(${receiver.text} as __Writable<${nonNullTypeOf(receiver)}>)[${JSON.stringify(key)}]`;
|
|
131
122
|
}
|
|
132
123
|
/**
|
|
133
|
-
* `NonNullable<typeof <expr>>` for the
|
|
134
|
-
*
|
|
135
|
-
*
|
|
124
|
+
* `NonNullable<typeof <expr>>` for the access paths this emitter builds, with
|
|
125
|
+
* `NonNullable` applied at every step so optional intermediate properties don't
|
|
126
|
+
* poison the indexed type.
|
|
136
127
|
*/
|
|
137
|
-
function nonNullTypeOf(
|
|
138
|
-
let
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
else if (ts.isElementAccessExpression(expr) && ts.isStringLiteral(expr.argumentExpression)) {
|
|
143
|
-
base = factory.createIndexedAccessTypeNode(nonNullTypeOf(expr.expression), factory.createLiteralTypeNode(factory.createStringLiteral(expr.argumentExpression.text)));
|
|
128
|
+
function nonNullTypeOf(target) {
|
|
129
|
+
let type = `typeof ${target.path[0]}`;
|
|
130
|
+
for (const key of target.path.slice(1)) {
|
|
131
|
+
type = `NonNullable<${type}>[${JSON.stringify(key)}]`;
|
|
144
132
|
}
|
|
145
|
-
|
|
146
|
-
// Every write target is built here from `data`/loop identifiers + string-literal
|
|
147
|
-
// element access (`index`), so any other shape is an emitter bug.
|
|
148
|
-
throw new Error('transformers: unsupported write-target expression');
|
|
149
|
-
}
|
|
150
|
-
return factory.createTypeReferenceNode('NonNullable', [base]);
|
|
151
|
-
}
|
|
152
|
-
/** `<recv>.<method>(<args>)`. */
|
|
153
|
-
function method(recv, name, args) {
|
|
154
|
-
return factory.createCallExpression(factory.createPropertyAccessExpression(recv, name), undefined, args);
|
|
155
|
-
}
|
|
156
|
-
function param(name) {
|
|
157
|
-
return factory.createParameterDeclaration(undefined, undefined, name);
|
|
133
|
+
return `NonNullable<${type}>`;
|
|
158
134
|
}
|
|
159
135
|
/** Next nested loop variable: `item`, `item2`, `item3`, … (avoids shadowing). */
|
|
160
136
|
function nextItemVar(current) {
|
|
@@ -163,45 +139,40 @@ function nextItemVar(current) {
|
|
|
163
139
|
return `item${Number(current.slice('item'.length)) + 1}`;
|
|
164
140
|
}
|
|
165
141
|
/**
|
|
166
|
-
* Conversion
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* Covers the shapes a date can hide in: date scalars, arrays of them, refs to
|
|
172
|
-
* date-bearing schemas (composed via `transform<Ref>`), arrays of such refs,
|
|
173
|
-
* records, nested inline objects, and the date-bearing members of a
|
|
174
|
-
* union/intersection.
|
|
142
|
+
* Conversion lines that, given the runtime value at `target` typed by `schema`,
|
|
143
|
+
* rewrite date leaves in place. Each branch self-gates by returning `[]` when
|
|
144
|
+
* nothing under it carries a date, so callers need no pre-check. `seen` follows
|
|
145
|
+
* refs and guards cycles; `itemVar` names nested loop variables.
|
|
175
146
|
*/
|
|
176
|
-
function convert(target, schema, byName, seen, itemVar, readonlyLhs = false) {
|
|
147
|
+
function convert(target, schema, byName, seen, itemVar, indent, readonlyLhs = false) {
|
|
177
148
|
if (isDateScalar(schema)) {
|
|
178
|
-
return
|
|
149
|
+
return ifThen(`typeof ${target.text} === "string"`, assign(target, `new Date(${target.text})`, readonlyLhs), indent);
|
|
179
150
|
}
|
|
180
151
|
switch (schema.kind) {
|
|
181
152
|
case 'ref':
|
|
182
|
-
return convertRef(target, schema.name, byName, seen, readonlyLhs);
|
|
153
|
+
return convertRef(target, schema.name, byName, seen, indent, readonlyLhs);
|
|
183
154
|
case 'object': {
|
|
184
|
-
const
|
|
155
|
+
const lines = [];
|
|
185
156
|
for (const p of schema.properties) {
|
|
186
|
-
|
|
157
|
+
lines.push(...convertProperty(index(target, p.name), p.schema, byName, seen, itemVar, indent, p.readOnly === true));
|
|
187
158
|
}
|
|
188
|
-
return
|
|
159
|
+
return lines;
|
|
189
160
|
}
|
|
190
161
|
case 'array':
|
|
191
|
-
return convertArray(target, schema.items, byName, seen, itemVar, readonlyLhs);
|
|
162
|
+
return convertArray(target, schema.items, byName, seen, itemVar, indent, readonlyLhs);
|
|
192
163
|
case 'record':
|
|
193
|
-
return convertCollection(target, schema.value, byName, seen, itemVar, true);
|
|
164
|
+
return convertCollection(target, schema.value, byName, seen, itemVar, indent, true);
|
|
194
165
|
case 'intersection': {
|
|
195
166
|
// An intersection value satisfies *every* member type, so each member's
|
|
196
167
|
// transform applies directly to `target` with no narrowing needed.
|
|
197
|
-
const
|
|
168
|
+
const lines = [];
|
|
198
169
|
for (const m of schema.members) {
|
|
199
|
-
|
|
170
|
+
lines.push(...convert(target, m, byName, seen, itemVar, indent, readonlyLhs));
|
|
200
171
|
}
|
|
201
|
-
return
|
|
172
|
+
return lines;
|
|
202
173
|
}
|
|
203
174
|
case 'union':
|
|
204
|
-
return convertUnion(target, schema.members, byName, seen, itemVar, readonlyLhs);
|
|
175
|
+
return convertUnion(target, schema.members, byName, seen, itemVar, indent, readonlyLhs);
|
|
205
176
|
default:
|
|
206
177
|
return [];
|
|
207
178
|
}
|
|
@@ -220,30 +191,34 @@ function convert(target, schema, byName, seen, itemVar, readonlyLhs = false) {
|
|
|
220
191
|
* members keep their `typeof === "string"` guard (their type is `Date` under
|
|
221
192
|
* `--date-type Date`, so the assignment type-checks).
|
|
222
193
|
*/
|
|
223
|
-
function convertUnion(target, members, byName, seen, itemVar, readonlyLhs = false) {
|
|
224
|
-
const
|
|
194
|
+
function convertUnion(target, members, byName, seen, itemVar, indent, readonlyLhs = false) {
|
|
195
|
+
const lines = [];
|
|
196
|
+
const guardedIndent = indent + INDENT;
|
|
225
197
|
const objectGuarded = [];
|
|
226
198
|
for (const m of members) {
|
|
227
199
|
if (isDateScalar(m)) {
|
|
228
|
-
|
|
200
|
+
lines.push(...convert(target, m, byName, seen, itemVar, indent, readonlyLhs));
|
|
229
201
|
}
|
|
230
202
|
else if (m.kind === 'ref') {
|
|
231
203
|
if (!hasDates(m, byName, seen))
|
|
232
204
|
continue;
|
|
233
|
-
const call =
|
|
205
|
+
const call = `${transformName(m.name)}(${target.text} as ${m.name})`;
|
|
234
206
|
// A replace-by-value ref (scalar dates) must be assigned back; an object
|
|
235
207
|
// ref mutates in place, so its return can be dropped.
|
|
236
|
-
|
|
208
|
+
const build = needsReassign(m, byName, seen)
|
|
209
|
+
? assign(target, call, readonlyLhs)
|
|
210
|
+
: statement(call);
|
|
211
|
+
objectGuarded.push(...build(guardedIndent));
|
|
237
212
|
}
|
|
238
213
|
else {
|
|
239
214
|
// Object/array/record members: recurse under the shared object guard.
|
|
240
|
-
objectGuarded.push(...convert(target, m, byName, seen, itemVar, readonlyLhs));
|
|
215
|
+
objectGuarded.push(...convert(target, m, byName, seen, itemVar, guardedIndent, readonlyLhs));
|
|
241
216
|
}
|
|
242
217
|
}
|
|
243
218
|
if (objectGuarded.length > 0) {
|
|
244
|
-
|
|
219
|
+
lines.push(...ifThen(`${target.text} && typeof ${target.text} === "object"`, () => objectGuarded, indent, true));
|
|
245
220
|
}
|
|
246
|
-
return
|
|
221
|
+
return lines;
|
|
247
222
|
}
|
|
248
223
|
/**
|
|
249
224
|
* A ref position, emitted only when the ref target carries dates (so the
|
|
@@ -252,29 +227,30 @@ function convertUnion(target, members, byName, seen, itemVar, readonlyLhs = fals
|
|
|
252
227
|
* scalar (or an array/union of them) is replace-by-value, so its result is
|
|
253
228
|
* assigned back: `if (<target>) <target> = transform<Ref>(<target>);`.
|
|
254
229
|
*/
|
|
255
|
-
function convertRef(target, name, byName, seen, readonlyLhs = false) {
|
|
230
|
+
function convertRef(target, name, byName, seen, indent, readonlyLhs = false) {
|
|
256
231
|
const ref = { kind: 'ref', name };
|
|
257
232
|
if (!hasDates(ref, byName, seen))
|
|
258
233
|
return [];
|
|
259
|
-
const call =
|
|
260
|
-
return
|
|
261
|
-
ifThen(target, needsReassign(ref, byName, seen) ? assign(target, call, readonlyLhs) : exprStatement(call)),
|
|
262
|
-
];
|
|
234
|
+
const call = `${transformName(name)}(${target.text})`;
|
|
235
|
+
return ifThen(target.text, needsReassign(ref, byName, seen) ? assign(target, call, readonlyLhs) : statement(call), indent);
|
|
263
236
|
}
|
|
264
237
|
/**
|
|
265
238
|
* A property position: a nested inline object guards presence and recurses
|
|
266
239
|
* inside a block; everything else (scalars, refs, arrays, …) delegates to
|
|
267
240
|
* `convert`, which guards itself.
|
|
268
241
|
*/
|
|
269
|
-
function convertProperty(target, schema, byName, seen, itemVar, readonlyLhs = false) {
|
|
270
|
-
if (schema.kind === 'ref')
|
|
271
|
-
return convertRef(target, schema.name, byName, seen, readonlyLhs);
|
|
242
|
+
function convertProperty(target, schema, byName, seen, itemVar, indent, readonlyLhs = false) {
|
|
243
|
+
if (schema.kind === 'ref') {
|
|
244
|
+
return convertRef(target, schema.name, byName, seen, indent, readonlyLhs);
|
|
245
|
+
}
|
|
272
246
|
if (schema.kind === 'object') {
|
|
273
247
|
// Nested writes go one level inside — `readonly` is shallow, so no cast needed.
|
|
274
|
-
const inner = convert(target, schema, byName, seen, itemVar);
|
|
275
|
-
|
|
248
|
+
const inner = convert(target, schema, byName, seen, itemVar, indent + INDENT);
|
|
249
|
+
if (inner.length === 0)
|
|
250
|
+
return [];
|
|
251
|
+
return ifThen(target.text, () => inner, indent, true);
|
|
276
252
|
}
|
|
277
|
-
return convert(target, schema, byName, seen, itemVar, readonlyLhs);
|
|
253
|
+
return convert(target, schema, byName, seen, itemVar, indent, readonlyLhs);
|
|
278
254
|
}
|
|
279
255
|
/**
|
|
280
256
|
* A "replace-by-value" element is one a transform must overwrite wholesale
|
|
@@ -282,29 +258,24 @@ function convertProperty(target, schema, byName, seen, itemVar, readonlyLhs = fa
|
|
|
282
258
|
* such elements (`v.map(...)`). Returns the expression that yields the replaced
|
|
283
259
|
* value for the element bound to `value`, or `null` when the element instead
|
|
284
260
|
* mutates in place (object/ref/record). Recurses for arrays-of-arrays.
|
|
285
|
-
*
|
|
286
|
-
* Reassigning a loop *variable* is a no-op, so date scalars (and arrays of
|
|
287
|
-
* them) can only be converted by reassigning their container slot — an array
|
|
288
|
-
* via `slot = slot.map(...)`, a record via per-key assignment. This builds the
|
|
289
|
-
* per-element value for those write-backs.
|
|
290
261
|
*/
|
|
291
262
|
function replacer(value, element, byName, seen, depth = 0) {
|
|
292
263
|
if (isDateScalar(element))
|
|
293
|
-
return
|
|
264
|
+
return `new Date(${value})`;
|
|
294
265
|
// A ref resolving to a replace-by-value shape (a scalar-date named schema):
|
|
295
266
|
// its sibling transform returns the converted value — `transform<Ref>(v)`.
|
|
296
267
|
if (element.kind === 'ref' && needsReassign(element, byName, seen)) {
|
|
297
|
-
return
|
|
268
|
+
return `${transformName(element.name)}(${value})`;
|
|
298
269
|
}
|
|
299
270
|
if (element.kind === 'array') {
|
|
300
271
|
// Map var for the level below: `v` over the scalar leaf, else `row`, `row2`,
|
|
301
272
|
// … per array level — distinct names by depth avoid shadowing. Yields
|
|
302
|
-
// `.map(
|
|
273
|
+
// `.map(v => new Date(v))` and `.map(row => row.map(v => new Date(v)))`.
|
|
303
274
|
const varName = element.items.kind === 'array' ? rowVar(depth + 1) : 'v';
|
|
304
|
-
const inner = replacer(
|
|
275
|
+
const inner = replacer(varName, element.items, byName, seen, depth + 1);
|
|
305
276
|
if (inner === null)
|
|
306
277
|
return null;
|
|
307
|
-
return
|
|
278
|
+
return `${value}.map(${varName} => ${inner})`;
|
|
308
279
|
}
|
|
309
280
|
return null;
|
|
310
281
|
}
|
|
@@ -313,27 +284,22 @@ function rowVar(depth) {
|
|
|
313
284
|
return depth <= 1 ? 'row' : `row${depth}`;
|
|
314
285
|
}
|
|
315
286
|
/** Conversions for `target` being an array whose elements are typed by `items`. */
|
|
316
|
-
function convertArray(target, items, byName, seen, itemVar, readonlyLhs = false) {
|
|
287
|
+
function convertArray(target, items, byName, seen, itemVar, indent, readonlyLhs = false) {
|
|
317
288
|
// Date scalars / arrays-of-date-scalars are replace-by-value: map over the
|
|
318
289
|
// array and reassign the slot (reassigning a loop var would be lost).
|
|
319
290
|
const varName = items.kind === 'array' ? rowVar(1) : 'v';
|
|
320
|
-
const mapped = replacer(
|
|
291
|
+
const mapped = replacer(varName, items, byName, seen, 1);
|
|
321
292
|
if (mapped !== null) {
|
|
322
|
-
// `if (Array.isArray(t)) t = t.map(
|
|
323
|
-
return
|
|
324
|
-
ifThen(isArrayGuard(target), assign(target, method(target, 'map', [arrow([param(varName)], mapped)]), readonlyLhs)),
|
|
325
|
-
];
|
|
293
|
+
// `if (Array.isArray(t)) t = t.map(v => new Date(v));` (or nested `row`)
|
|
294
|
+
return ifThen(`Array.isArray(${target.text})`, assign(target, `${target.text}.map(${varName} => ${mapped})`, readonlyLhs), indent);
|
|
326
295
|
}
|
|
327
296
|
if (items.kind === 'ref') {
|
|
328
297
|
if (!hasDates(items, byName, seen))
|
|
329
298
|
return [];
|
|
330
299
|
// `if (Array.isArray(t)) t.forEach(transformRef);`
|
|
331
|
-
|
|
332
|
-
factory.createIdentifier(transformName(items.name)),
|
|
333
|
-
]);
|
|
334
|
-
return [ifThen(isArrayGuard(target), exprStatement(forEach))];
|
|
300
|
+
return ifThen(`Array.isArray(${target.text})`, statement(`${target.text}.forEach(${transformName(items.name)})`), indent);
|
|
335
301
|
}
|
|
336
|
-
return convertCollection(target, items, byName, seen, itemVar, false);
|
|
302
|
+
return convertCollection(target, items, byName, seen, itemVar, indent, false);
|
|
337
303
|
}
|
|
338
304
|
/**
|
|
339
305
|
* Iterate a collection (array or record) of mutate-in-place elements (objects,
|
|
@@ -344,53 +310,47 @@ function convertArray(target, items, byName, seen, itemVar, readonlyLhs = false)
|
|
|
344
310
|
* Replace-by-value elements (date scalars) never reach the array path here —
|
|
345
311
|
* `convertArray` handles them via map-and-reassign. A *record* of date scalars
|
|
346
312
|
* does land here: a `forEach` loop variable can't write back, so we iterate the
|
|
347
|
-
* keys and assign back into the record (`rec[
|
|
313
|
+
* keys and assign back into the record (`rec[__k] = new Date(rec[__k])`).
|
|
348
314
|
*/
|
|
349
|
-
function convertCollection(target, element, byName, seen, itemVar, isRecord) {
|
|
315
|
+
function convertCollection(target, element, byName, seen, itemVar, indent, isRecord) {
|
|
350
316
|
if (isRecord) {
|
|
351
317
|
// Replace-by-value elements (date scalars, arrays of them) can't be written
|
|
352
318
|
// through a `forEach` loop var, so iterate the keys and assign back into the
|
|
353
319
|
// record slot. Date scalars are string-guarded; nested arrays array-guarded.
|
|
354
|
-
const slot =
|
|
355
|
-
const replaced = replacer(slot, element, byName, seen);
|
|
320
|
+
const slot = { text: `${target.text}[__k]`, path: [...target.path, '__k'] };
|
|
321
|
+
const replaced = replacer(slot.text, element, byName, seen);
|
|
356
322
|
if (replaced !== null) {
|
|
357
|
-
const guard = isDateScalar(element)
|
|
358
|
-
|
|
323
|
+
const guard = isDateScalar(element)
|
|
324
|
+
? `typeof ${slot.text} === "string"`
|
|
325
|
+
: `Array.isArray(${slot.text})`;
|
|
326
|
+
return ifThen(target.text, (loopIndent) => [
|
|
327
|
+
`${loopIndent}for (const __k of Object.keys(${target.text}))`,
|
|
328
|
+
...ifThen(guard, (inner) => [`${inner}${slot.text} = ${replaced};`], loopIndent + INDENT),
|
|
329
|
+
], indent);
|
|
359
330
|
}
|
|
360
331
|
}
|
|
361
332
|
const next = nextItemVar(itemVar);
|
|
362
|
-
|
|
333
|
+
// The loop sits one `if` level in, and the forEach body one more.
|
|
334
|
+
const body = convert(ident(next), element, byName, seen, next, indent + INDENT + INDENT);
|
|
363
335
|
if (body.length === 0)
|
|
364
336
|
return [];
|
|
365
|
-
const iterable = isRecord
|
|
366
|
-
|
|
367
|
-
: target;
|
|
368
|
-
const forEach = method(iterable, 'forEach', [
|
|
369
|
-
arrow([param(next)], factory.createBlock(body, true)),
|
|
370
|
-
]);
|
|
371
|
-
return [ifThen(isRecord ? target : isArrayGuard(target), exprStatement(forEach))];
|
|
372
|
-
}
|
|
373
|
-
/** `for (const __k of Object.keys(<target>)) <body>`. */
|
|
374
|
-
function keyLoop(target, body) {
|
|
375
|
-
return factory.createForOfStatement(undefined, factory.createVariableDeclarationList([factory.createVariableDeclaration('__k')], ts.NodeFlags.Const), method(factory.createIdentifier('Object'), 'keys', [target]), body);
|
|
337
|
+
const iterable = isRecord ? `Object.values(${target.text})` : target.text;
|
|
338
|
+
return ifThen(isRecord ? target.text : `Array.isArray(${target.text})`, (inner) => [`${inner}${iterable}.forEach(${next} => {`, ...body, `${inner}});`], indent);
|
|
376
339
|
}
|
|
377
340
|
/** `export const transform<Name> = (data: <Name>): <Name> => { … };`. */
|
|
378
|
-
function
|
|
341
|
+
function transformBlock(named, byName) {
|
|
379
342
|
// The sdk exports the type verbatim; only the `transform<Pascal>` NAME is PascalCased.
|
|
380
343
|
const typeName = named.name;
|
|
381
|
-
const data =
|
|
344
|
+
const data = ident('data');
|
|
382
345
|
const body = named.schema.kind === 'ref'
|
|
383
|
-
? convertRef(data, named.schema.name, byName, new Set())
|
|
384
|
-
: convert(data, named.schema, byName, new Set(), 'data');
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
/** `import type { <Name>, … } from "<module>";`. */
|
|
392
|
-
function typeImport(names, module) {
|
|
393
|
-
return factory.createImportDeclaration(undefined, factory.createImportClause(true, undefined, factory.createNamedImports(names.map((n) => factory.createImportSpecifier(false, undefined, factory.createIdentifier(safeIdent(n)))))), factory.createStringLiteral(module));
|
|
346
|
+
? convertRef(data, named.schema.name, byName, new Set(), INDENT)
|
|
347
|
+
: convert(data, named.schema, byName, new Set(), 'data', INDENT);
|
|
348
|
+
return [
|
|
349
|
+
`export const ${transformName(named.name)} = (data: ${typeName}): ${typeName} => {`,
|
|
350
|
+
...body,
|
|
351
|
+
`${INDENT}return data;`,
|
|
352
|
+
'};',
|
|
353
|
+
].join('\n');
|
|
394
354
|
}
|
|
395
355
|
/**
|
|
396
356
|
* Render the transformers module. Emits one `transform<Name>` per named schema
|
|
@@ -403,14 +363,14 @@ export function renderTransformersModule(model, opts) {
|
|
|
403
363
|
const dated = model.schemas.filter((s) => hasDates(s.schema, byName, new Set()));
|
|
404
364
|
if (dated.length === 0)
|
|
405
365
|
return '';
|
|
406
|
-
const types = dated.map((s) => s.name);
|
|
366
|
+
const types = dated.map((s) => safeIdent(s.name)).join(', ');
|
|
407
367
|
writableUsed = false; // reset the per-render flag `writableLhs` sets
|
|
408
|
-
const transforms = dated.map((s) =>
|
|
409
|
-
const
|
|
410
|
-
|
|
411
|
-
...(writableUsed ?
|
|
368
|
+
const transforms = dated.map((s) => transformBlock(s, byName));
|
|
369
|
+
const blocks = [
|
|
370
|
+
`import type { ${types} } from ${JSON.stringify(opts.sdkModule)};`,
|
|
371
|
+
...(writableUsed ? [WRITABLE_DECL] : []),
|
|
412
372
|
...transforms,
|
|
413
373
|
];
|
|
414
|
-
return
|
|
374
|
+
return blocks.join('\n\n');
|
|
415
375
|
}
|
|
416
|
-
//# sourceMappingURL=
|
|
376
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/generators/transformers/render.ts"],"names":[],"mappings":"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"}
|