openapi-typesafe 1.0.0-rc.3 → 1.0.0-rc.5
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/CHANGELOG.md +1972 -0
- package/dist/adapters/node-file-system/file-claims.cjs +105 -0
- package/dist/adapters/node-file-system/file-claims.cjs.map +1 -0
- package/dist/adapters/node-file-system/file-claims.mjs +95 -0
- package/dist/adapters/node-file-system/file-claims.mjs.map +1 -0
- package/dist/adapters/node-file-system/file-identity.cjs +82 -0
- package/dist/adapters/node-file-system/file-identity.cjs.map +1 -0
- package/dist/adapters/node-file-system/file-identity.mjs +74 -0
- package/dist/adapters/node-file-system/file-identity.mjs.map +1 -0
- package/dist/adapters/node-file-system/node-file-system.cjs +97 -14
- package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -1
- package/dist/adapters/node-file-system/node-file-system.mjs +97 -14
- package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -1
- package/dist/adapters/pipe-safe-writer/pipe-safe-writer.cjs +19 -0
- package/dist/adapters/pipe-safe-writer/pipe-safe-writer.cjs.map +1 -0
- package/dist/adapters/pipe-safe-writer/pipe-safe-writer.mjs +17 -0
- package/dist/adapters/pipe-safe-writer/pipe-safe-writer.mjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs +48 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs +45 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +1 -1
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -1
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +2 -2
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -1
- package/dist/adapters/redocly-loader/component-schemas.cjs +17 -0
- package/dist/adapters/redocly-loader/component-schemas.cjs.map +1 -0
- package/dist/adapters/redocly-loader/component-schemas.mjs +14 -0
- package/dist/adapters/redocly-loader/component-schemas.mjs.map +1 -0
- package/dist/adapters/redocly-loader/loaded-documents.cjs +28 -0
- package/dist/adapters/redocly-loader/loaded-documents.cjs.map +1 -0
- package/dist/adapters/redocly-loader/loaded-documents.mjs +21 -0
- package/dist/adapters/redocly-loader/loaded-documents.mjs.map +1 -0
- package/dist/adapters/redocly-loader/mapping-schema-names.cjs +22 -0
- package/dist/adapters/redocly-loader/mapping-schema-names.cjs.map +1 -0
- package/dist/adapters/redocly-loader/mapping-schema-names.mjs +20 -0
- package/dist/adapters/redocly-loader/mapping-schema-names.mjs.map +1 -0
- package/dist/adapters/redocly-loader/query-named-components.cjs +137 -0
- package/dist/adapters/redocly-loader/query-named-components.cjs.map +1 -0
- package/dist/adapters/redocly-loader/query-named-components.mjs +134 -0
- package/dist/adapters/redocly-loader/query-named-components.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +40 -29
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -1
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +38 -27
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-access.cjs +45 -4
- package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-access.mjs +45 -4
- package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-holders.cjs +52 -10
- package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-holders.mjs +53 -12
- package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-body-limit.cjs +50 -0
- package/dist/adapters/redocly-loader/remote-body-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-body-limit.mjs +48 -0
- package/dist/adapters/redocly-loader/remote-body-limit.mjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-fetch.cjs +40 -9
- package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-fetch.mjs +40 -9
- package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-node-limit.cjs +61 -0
- package/dist/adapters/redocly-loader/remote-node-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-node-limit.mjs +58 -0
- package/dist/adapters/redocly-loader/remote-node-limit.mjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-load-errors.cjs +32 -8
- package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-load-errors.mjs +32 -9
- package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-source.cjs +18 -9
- package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-source.mjs +20 -11
- package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -1
- package/dist/adapters/redocly-loader/unsupported-keys.cjs +3 -5
- package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -1
- package/dist/adapters/redocly-loader/unsupported-keys.mjs +3 -5
- package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -1
- package/dist/adapters/terminal-logger/terminal-logger.cjs +10 -4
- package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -1
- package/dist/adapters/terminal-logger/terminal-logger.mjs +10 -4
- package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -1
- package/dist/api/default-ports.cjs +14 -2
- package/dist/api/default-ports.cjs.map +1 -1
- package/dist/api/default-ports.mjs +14 -2
- package/dist/api/default-ports.mjs.map +1 -1
- package/dist/api/discriminator-enum-parent.cjs +2 -2
- package/dist/api/discriminator-enum-parent.cjs.map +1 -1
- package/dist/api/discriminator-enum-parent.mjs +3 -3
- package/dist/api/discriminator-enum-parent.mjs.map +1 -1
- package/dist/api/discriminator-other-owners.cjs +5 -3
- package/dist/api/discriminator-other-owners.cjs.map +1 -1
- package/dist/api/discriminator-other-owners.mjs +5 -3
- package/dist/api/discriminator-other-owners.mjs.map +1 -1
- package/dist/api/discriminator-patch.cjs +5 -1
- package/dist/api/discriminator-patch.cjs.map +1 -1
- package/dist/api/discriminator-patch.mjs +5 -1
- package/dist/api/discriminator-patch.mjs.map +1 -1
- package/dist/api/discriminator-scan.cjs +15 -8
- package/dist/api/discriminator-scan.cjs.map +1 -1
- package/dist/api/discriminator-scan.mjs +15 -8
- package/dist/api/discriminator-scan.mjs.map +1 -1
- package/dist/api/document-refs.cjs +16 -1
- package/dist/api/document-refs.cjs.map +1 -1
- package/dist/api/document-refs.mjs +16 -1
- package/dist/api/document-refs.mjs.map +1 -1
- package/dist/api/document-run.cjs +6 -12
- package/dist/api/document-run.cjs.map +1 -1
- package/dist/api/document-run.mjs +6 -12
- package/dist/api/document-run.mjs.map +1 -1
- package/dist/api/legacy-utils.cjs.map +1 -1
- package/dist/api/legacy-utils.mjs.map +1 -1
- package/dist/api/openapi-ts.cjs +9 -6
- package/dist/api/openapi-ts.cjs.map +1 -1
- package/dist/api/openapi-ts.mjs +10 -8
- package/dist/api/openapi-ts.mjs.map +1 -1
- package/dist/api/ref-limit-options.cjs +63 -0
- package/dist/api/ref-limit-options.cjs.map +1 -0
- package/dist/api/ref-limit-options.mjs +57 -0
- package/dist/api/ref-limit-options.mjs.map +1 -0
- package/dist/api/schema-callbacks.cjs +36 -12
- package/dist/api/schema-callbacks.cjs.map +1 -1
- package/dist/api/schema-callbacks.mjs +36 -12
- package/dist/api/schema-callbacks.mjs.map +1 -1
- package/dist/api/transform-context.cjs +7 -3
- package/dist/api/transform-context.cjs.map +1 -1
- package/dist/api/transform-context.mjs +7 -3
- package/dist/api/transform-context.mjs.map +1 -1
- package/dist/api/transform-schema.cjs +47 -10
- package/dist/api/transform-schema.cjs.map +1 -1
- package/dist/api/transform-schema.mjs +48 -11
- package/dist/api/transform-schema.mjs.map +1 -1
- package/dist/application/print/text-writer.cjs +10 -3
- package/dist/application/print/text-writer.cjs.map +1 -1
- package/dist/application/print/text-writer.mjs +10 -3
- package/dist/application/print/text-writer.mjs.map +1 -1
- package/dist/application/stack-overflow.cjs +2 -1
- package/dist/application/stack-overflow.cjs.map +1 -1
- package/dist/application/stack-overflow.mjs +2 -1
- package/dist/application/stack-overflow.mjs.map +1 -1
- package/dist/application/transform/declared-value-types.cjs +36 -0
- package/dist/application/transform/declared-value-types.cjs.map +1 -0
- package/dist/application/transform/declared-value-types.mjs +34 -0
- package/dist/application/transform/declared-value-types.mjs.map +1 -0
- package/dist/application/transform/document/components.cjs +1 -1
- package/dist/application/transform/document/components.cjs.map +1 -1
- package/dist/application/transform/document/components.mjs +2 -2
- package/dist/application/transform/document/components.mjs.map +1 -1
- package/dist/application/transform/document/declared-type-names.cjs +23 -0
- package/dist/application/transform/document/declared-type-names.cjs.map +1 -0
- package/dist/application/transform/document/declared-type-names.mjs +20 -0
- package/dist/application/transform/document/declared-type-names.mjs.map +1 -0
- package/dist/application/transform/document/defs-root.cjs +1 -1
- package/dist/application/transform/document/defs-root.cjs.map +1 -1
- package/dist/application/transform/document/defs-root.mjs +2 -2
- package/dist/application/transform/document/defs-root.mjs.map +1 -1
- package/dist/application/transform/document/document.cjs +7 -2
- package/dist/application/transform/document/document.cjs.map +1 -1
- package/dist/application/transform/document/document.mjs +6 -3
- package/dist/application/transform/document/document.mjs.map +1 -1
- package/dist/application/transform/document/enum-names-given-back.cjs +62 -0
- package/dist/application/transform/document/enum-names-given-back.cjs.map +1 -0
- package/dist/application/transform/document/enum-names-given-back.mjs +58 -0
- package/dist/application/transform/document/enum-names-given-back.mjs.map +1 -0
- package/dist/application/transform/document/exploded-query-values.cjs +63 -0
- package/dist/application/transform/document/exploded-query-values.cjs.map +1 -0
- package/dist/application/transform/document/exploded-query-values.mjs +59 -0
- package/dist/application/transform/document/exploded-query-values.mjs.map +1 -0
- package/dist/application/transform/document/global-type-references.cjs +1 -0
- package/dist/application/transform/document/global-type-references.cjs.map +1 -1
- package/dist/application/transform/document/global-type-references.mjs +1 -1
- package/dist/application/transform/document/global-type-references.mjs.map +1 -1
- package/dist/application/transform/document/header.cjs +11 -3
- package/dist/application/transform/document/header.cjs.map +1 -1
- package/dist/application/transform/document/header.mjs +10 -2
- package/dist/application/transform/document/header.mjs.map +1 -1
- package/dist/application/transform/document/media-type.cjs +2 -2
- package/dist/application/transform/document/media-type.cjs.map +1 -1
- package/dist/application/transform/document/media-type.mjs +3 -3
- package/dist/application/transform/document/media-type.mjs.map +1 -1
- package/dist/application/transform/document/operation-keys-written.cjs +26 -0
- package/dist/application/transform/document/operation-keys-written.cjs.map +1 -0
- package/dist/application/transform/document/operation-keys-written.mjs +24 -0
- package/dist/application/transform/document/operation-keys-written.mjs.map +1 -0
- package/dist/application/transform/document/operation.cjs +1 -1
- package/dist/application/transform/document/operation.cjs.map +1 -1
- package/dist/application/transform/document/operation.mjs +2 -2
- package/dist/application/transform/document/operation.mjs.map +1 -1
- package/dist/application/transform/document/parameter-entries.cjs +34 -0
- package/dist/application/transform/document/parameter-entries.cjs.map +1 -0
- package/dist/application/transform/document/parameter-entries.mjs +30 -0
- package/dist/application/transform/document/parameter-entries.mjs.map +1 -0
- package/dist/application/transform/document/parameter.cjs +12 -4
- package/dist/application/transform/document/parameter.cjs.map +1 -1
- package/dist/application/transform/document/parameter.mjs +13 -5
- package/dist/application/transform/document/parameter.mjs.map +1 -1
- package/dist/application/transform/document/parameters.cjs +29 -34
- package/dist/application/transform/document/parameters.cjs.map +1 -1
- package/dist/application/transform/document/parameters.mjs +29 -34
- package/dist/application/transform/document/parameters.mjs.map +1 -1
- package/dist/application/transform/document/path-item.cjs +15 -17
- package/dist/application/transform/document/path-item.cjs.map +1 -1
- package/dist/application/transform/document/path-item.mjs +15 -19
- package/dist/application/transform/document/path-item.mjs.map +1 -1
- package/dist/application/transform/document/path-template-key.cjs +84 -0
- package/dist/application/transform/document/path-template-key.cjs.map +1 -0
- package/dist/application/transform/document/path-template-key.mjs +79 -0
- package/dist/application/transform/document/path-template-key.mjs.map +1 -0
- package/dist/application/transform/document/path-template-refs.cjs +70 -0
- package/dist/application/transform/document/path-template-refs.cjs.map +1 -0
- package/dist/application/transform/document/path-template-refs.mjs +67 -0
- package/dist/application/transform/document/path-template-refs.mjs.map +1 -0
- package/dist/application/transform/document/paths-enum.cjs +8 -6
- package/dist/application/transform/document/paths-enum.cjs.map +1 -1
- package/dist/application/transform/document/paths-enum.mjs +8 -7
- package/dist/application/transform/document/paths-enum.mjs.map +1 -1
- package/dist/application/transform/document/paths.cjs +43 -67
- package/dist/application/transform/document/paths.cjs.map +1 -1
- package/dist/application/transform/document/paths.mjs +42 -68
- package/dist/application/transform/document/paths.mjs.map +1 -1
- package/dist/application/transform/document/referenced-parameter.cjs +80 -0
- package/dist/application/transform/document/referenced-parameter.cjs.map +1 -0
- package/dist/application/transform/document/referenced-parameter.mjs +78 -0
- package/dist/application/transform/document/referenced-parameter.mjs.map +1 -0
- package/dist/application/transform/document/request-body.cjs +1 -1
- package/dist/application/transform/document/request-body.cjs.map +1 -1
- package/dist/application/transform/document/request-body.mjs +2 -2
- package/dist/application/transform/document/request-body.mjs.map +1 -1
- package/dist/application/transform/document/response.cjs +2 -2
- package/dist/application/transform/document/response.cjs.map +1 -1
- package/dist/application/transform/document/response.mjs +3 -3
- package/dist/application/transform/document/response.mjs.map +1 -1
- package/dist/application/transform/document/responses.cjs +1 -1
- package/dist/application/transform/document/responses.cjs.map +1 -1
- package/dist/application/transform/document/responses.mjs +2 -2
- package/dist/application/transform/document/responses.mjs.map +1 -1
- package/dist/application/transform/document/root-type-aliases.cjs +8 -23
- package/dist/application/transform/document/root-type-aliases.cjs.map +1 -1
- package/dist/application/transform/document/root-type-aliases.mjs +8 -24
- package/dist/application/transform/document/root-type-aliases.mjs.map +1 -1
- package/dist/application/transform/document/type-resolution.cjs +3 -1
- package/dist/application/transform/document/type-resolution.cjs.map +1 -1
- package/dist/application/transform/document/type-resolution.mjs +3 -1
- package/dist/application/transform/document/type-resolution.mjs.map +1 -1
- package/dist/application/transform/document/webhooks.cjs +10 -3
- package/dist/application/transform/document/webhooks.cjs.map +1 -1
- package/dist/application/transform/document/webhooks.mjs +10 -3
- package/dist/application/transform/document/webhooks.mjs.map +1 -1
- package/dist/application/transform/footer/document-footer.cjs +16 -5
- package/dist/application/transform/footer/document-footer.cjs.map +1 -1
- package/dist/application/transform/footer/document-footer.mjs +16 -5
- package/dist/application/transform/footer/document-footer.mjs.map +1 -1
- package/dist/application/transform/footer/enum-name-claims.cjs +48 -0
- package/dist/application/transform/footer/enum-name-claims.cjs.map +1 -0
- package/dist/application/transform/footer/enum-name-claims.mjs +46 -0
- package/dist/application/transform/footer/enum-name-claims.mjs.map +1 -0
- package/dist/application/transform/footer/operation-keys.cjs +23 -0
- package/dist/application/transform/footer/operation-keys.cjs.map +1 -0
- package/dist/application/transform/footer/operation-keys.mjs +21 -0
- package/dist/application/transform/footer/operation-keys.mjs.map +1 -0
- package/dist/application/transform/footer/type-evaluation.cjs +4 -4
- package/dist/application/transform/footer/type-evaluation.cjs.map +1 -1
- package/dist/application/transform/footer/type-evaluation.mjs +4 -4
- package/dist/application/transform/footer/type-evaluation.mjs.map +1 -1
- package/dist/application/transform/helper-types.cjs +3 -3
- package/dist/application/transform/helper-types.cjs.map +1 -1
- package/dist/application/transform/helper-types.mjs +3 -3
- package/dist/application/transform/helper-types.mjs.map +1 -1
- package/dist/application/transform/numbered-names.cjs +9 -0
- package/dist/application/transform/numbered-names.cjs.map +1 -1
- package/dist/application/transform/numbered-names.mjs +9 -1
- package/dist/application/transform/numbered-names.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-location.cjs +5 -5
- package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-location.mjs +3 -3
- package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-shape.cjs +47 -66
- package/dist/application/transform/ref-pointer/generated-shape.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-shape.mjs +36 -50
- package/dist/application/transform/ref-pointer/generated-shape.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/inline-cycles.cjs +2 -2
- package/dist/application/transform/ref-pointer/inline-cycles.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/inline-cycles.mjs +1 -1
- package/dist/application/transform/ref-pointer/inline-cycles.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/located-node.cjs +23 -0
- package/dist/application/transform/ref-pointer/located-node.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/located-node.mjs +18 -0
- package/dist/application/transform/ref-pointer/located-node.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/original-index.cjs +68 -13
- package/dist/application/transform/ref-pointer/original-index.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/original-index.mjs +70 -15
- package/dist/application/transform/ref-pointer/original-index.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-type.cjs +2 -2
- package/dist/application/transform/ref-pointer/pointer-type.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-type.mjs +1 -1
- package/dist/application/transform/ref-pointer/pointer-type.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-walk.cjs +54 -13
- package/dist/application/transform/ref-pointer/pointer-walk.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-walk.mjs +46 -7
- package/dist/application/transform/ref-pointer/pointer-walk.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/property-shape.cjs +52 -0
- package/dist/application/transform/ref-pointer/property-shape.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/property-shape.mjs +45 -0
- package/dist/application/transform/ref-pointer/property-shape.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/typed-walk.cjs +79 -21
- package/dist/application/transform/ref-pointer/typed-walk.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/typed-walk.mjs +76 -18
- package/dist/application/transform/ref-pointer/typed-walk.mjs.map +1 -1
- package/dist/application/transform/ref-type.cjs +2 -1
- package/dist/application/transform/ref-type.cjs.map +1 -1
- package/dist/application/transform/ref-type.mjs +2 -1
- package/dist/application/transform/ref-type.mjs.map +1 -1
- package/dist/application/transform/schema/access-flags.cjs.map +1 -1
- package/dist/application/transform/schema/access-flags.mjs.map +1 -1
- package/dist/application/transform/schema/composition-type.cjs +1 -1
- package/dist/application/transform/schema/composition-type.cjs.map +1 -1
- package/dist/application/transform/schema/composition-type.mjs +2 -2
- package/dist/application/transform/schema/composition-type.mjs.map +1 -1
- package/dist/application/transform/schema/enum-rule.cjs +1 -1
- package/dist/application/transform/schema/enum-rule.cjs.map +1 -1
- package/dist/application/transform/schema/enum-rule.mjs +2 -2
- package/dist/application/transform/schema/enum-rule.mjs.map +1 -1
- package/dist/application/transform/schema/index-signature-type.cjs +21 -0
- package/dist/application/transform/schema/index-signature-type.cjs.map +1 -0
- package/dist/application/transform/schema/index-signature-type.mjs +19 -0
- package/dist/application/transform/schema/index-signature-type.mjs.map +1 -0
- package/dist/application/transform/schema/input-location.cjs +23 -0
- package/dist/application/transform/schema/input-location.cjs.map +1 -0
- package/dist/application/transform/schema/input-location.mjs +21 -0
- package/dist/application/transform/schema/input-location.mjs.map +1 -0
- package/dist/application/transform/schema/object-type.cjs +18 -8
- package/dist/application/transform/schema/object-type.cjs.map +1 -1
- package/dist/application/transform/schema/object-type.mjs +19 -9
- package/dist/application/transform/schema/object-type.mjs.map +1 -1
- package/dist/application/transform/schema/ref-siblings.cjs +47 -0
- package/dist/application/transform/schema/ref-siblings.cjs.map +1 -0
- package/dist/application/transform/schema/ref-siblings.mjs +45 -0
- package/dist/application/transform/schema/ref-siblings.mjs.map +1 -0
- package/dist/application/transform/schema/schema-transform.cjs +6 -3
- package/dist/application/transform/schema/schema-transform.cjs.map +1 -1
- package/dist/application/transform/schema/schema-transform.mjs +6 -3
- package/dist/application/transform/schema/schema-transform.mjs.map +1 -1
- package/dist/application/transform/schema/unevaluated-properties.cjs +2 -30
- package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -1
- package/dist/application/transform/schema/unevaluated-properties.mjs +3 -31
- package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -1
- package/dist/application/transform/schema-comment.cjs +5 -1
- package/dist/application/transform/schema-comment.cjs.map +1 -1
- package/dist/application/transform/schema-comment.mjs +5 -1
- package/dist/application/transform/schema-comment.mjs.map +1 -1
- package/dist/cli/api-logger.cjs +13 -0
- package/dist/cli/api-logger.cjs.map +1 -0
- package/dist/cli/api-logger.mjs +11 -0
- package/dist/cli/api-logger.mjs.map +1 -0
- package/dist/cli/api-settings.cjs +57 -9
- package/dist/cli/api-settings.cjs.map +1 -1
- package/dist/cli/api-settings.mjs +56 -11
- package/dist/cli/api-settings.mjs.map +1 -1
- package/dist/cli/api-writes.cjs +72 -0
- package/dist/cli/api-writes.cjs.map +1 -0
- package/dist/cli/api-writes.mjs +69 -0
- package/dist/cli/api-writes.mjs.map +1 -0
- package/dist/cli/cli-arguments.cjs +51 -11
- package/dist/cli/cli-arguments.cjs.map +1 -1
- package/dist/cli/cli-arguments.mjs +51 -11
- package/dist/cli/cli-arguments.mjs.map +1 -1
- package/dist/cli/cli-errors.cjs +29 -1
- package/dist/cli/cli-errors.cjs.map +1 -1
- package/dist/cli/cli-errors.mjs +29 -2
- package/dist/cli/cli-errors.mjs.map +1 -1
- package/dist/cli/cli-output.cjs +111 -4
- package/dist/cli/cli-output.cjs.map +1 -1
- package/dist/cli/cli-output.mjs +104 -5
- package/dist/cli/cli-output.mjs.map +1 -1
- package/dist/cli/main.cjs +13 -3
- package/dist/cli/main.cjs.map +1 -1
- package/dist/cli/main.mjs +14 -4
- package/dist/cli/main.mjs.map +1 -1
- package/dist/cli/redocly-apis.cjs +94 -37
- package/dist/cli/redocly-apis.cjs.map +1 -1
- package/dist/cli/redocly-apis.mjs +99 -42
- package/dist/cli/redocly-apis.mjs.map +1 -1
- package/dist/cli/ref-limits.cjs +15 -1
- package/dist/cli/ref-limits.cjs.map +1 -1
- package/dist/cli/ref-limits.mjs +15 -2
- package/dist/cli/ref-limits.mjs.map +1 -1
- package/dist/cli/run-cli.cjs +37 -14
- package/dist/cli/run-cli.cjs.map +1 -1
- package/dist/cli/run-cli.mjs +39 -16
- package/dist/cli/run-cli.mjs.map +1 -1
- package/dist/domain/append-all.cjs +10 -0
- package/dist/domain/append-all.cjs.map +1 -0
- package/dist/domain/append-all.mjs +8 -0
- package/dist/domain/append-all.mjs.map +1 -0
- package/dist/domain/cause-secrets.cjs +52 -0
- package/dist/domain/cause-secrets.cjs.map +1 -0
- package/dist/domain/cause-secrets.mjs +50 -0
- package/dist/domain/cause-secrets.mjs.map +1 -0
- package/dist/domain/errors.cjs +11 -3
- package/dist/domain/errors.cjs.map +1 -1
- package/dist/domain/errors.mjs +11 -3
- package/dist/domain/errors.mjs.map +1 -1
- package/dist/domain/ir/identifier-text.cjs.map +1 -1
- package/dist/domain/ir/identifier-text.mjs +1 -1
- package/dist/domain/ir/identifier-text.mjs.map +1 -1
- package/dist/domain/ir/ir-shape.cjs +187 -0
- package/dist/domain/ir/ir-shape.cjs.map +1 -0
- package/dist/domain/ir/ir-shape.mjs +184 -0
- package/dist/domain/ir/ir-shape.mjs.map +1 -0
- package/dist/domain/ir/newer-identifier-ranges.cjs +182 -29
- package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -1
- package/dist/domain/ir/newer-identifier-ranges.mjs +182 -29
- package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -1
- package/dist/domain/location-text.cjs +9 -0
- package/dist/domain/location-text.cjs.map +1 -0
- package/dist/domain/location-text.mjs +7 -0
- package/dist/domain/location-text.mjs.map +1 -0
- package/dist/domain/openapi/alias-expansion.cjs +3 -1
- package/dist/domain/openapi/alias-expansion.cjs.map +1 -1
- package/dist/domain/openapi/alias-expansion.mjs +3 -1
- package/dist/domain/openapi/alias-expansion.mjs.map +1 -1
- package/dist/domain/openapi/discriminated-union.cjs +3 -3
- package/dist/domain/openapi/discriminated-union.cjs.map +1 -1
- package/dist/domain/openapi/discriminated-union.mjs +4 -4
- package/dist/domain/openapi/discriminated-union.mjs.map +1 -1
- package/dist/domain/openapi/discriminator-conflicts.cjs +10 -6
- package/dist/domain/openapi/discriminator-conflicts.cjs.map +1 -1
- package/dist/domain/openapi/discriminator-conflicts.mjs +11 -7
- package/dist/domain/openapi/discriminator-conflicts.mjs.map +1 -1
- package/dist/domain/openapi/document-places.cjs +55 -0
- package/dist/domain/openapi/document-places.cjs.map +1 -0
- package/dist/domain/openapi/document-places.mjs +53 -0
- package/dist/domain/openapi/document-places.mjs.map +1 -0
- package/dist/domain/openapi/json-pointer.cjs +43 -1
- package/dist/domain/openapi/json-pointer.cjs.map +1 -1
- package/dist/domain/openapi/json-pointer.mjs +40 -2
- package/dist/domain/openapi/json-pointer.mjs.map +1 -1
- package/dist/domain/openapi/schema-dialect.cjs +15 -0
- package/dist/domain/openapi/schema-dialect.cjs.map +1 -0
- package/dist/domain/openapi/schema-dialect.mjs +12 -0
- package/dist/domain/openapi/schema-dialect.mjs.map +1 -0
- package/dist/domain/openapi/unsupported-features.cjs +1 -1
- package/dist/domain/openapi/unsupported-features.cjs.map +1 -1
- package/dist/domain/openapi/unsupported-features.mjs +2 -2
- package/dist/domain/openapi/unsupported-features.mjs.map +1 -1
- package/dist/domain/output-fixes.cjs +20 -0
- package/dist/domain/output-fixes.cjs.map +1 -1
- package/dist/domain/output-fixes.mjs +20 -0
- package/dist/domain/output-fixes.mjs.map +1 -1
- package/dist/domain/terminal-text.cjs +31 -0
- package/dist/domain/terminal-text.cjs.map +1 -0
- package/dist/domain/terminal-text.mjs +29 -0
- package/dist/domain/terminal-text.mjs.map +1 -0
- package/dist/domain/url-secrets.cjs +48 -0
- package/dist/domain/url-secrets.cjs.map +1 -0
- package/dist/domain/url-secrets.mjs +45 -0
- package/dist/domain/url-secrets.mjs.map +1 -0
- package/dist/domain/warnings.cjs +1 -0
- package/dist/domain/warnings.cjs.map +1 -1
- package/dist/domain/warnings.mjs +1 -0
- package/dist/domain/warnings.mjs.map +1 -1
- package/dist/index.d.cts +46 -20
- package/dist/index.d.mts +46 -20
- package/dist/index.d.ts +46 -20
- package/package.json +4 -5
- package/src/adapters/node-file-system/file-claims.ts +138 -0
- package/src/adapters/node-file-system/file-identity.ts +137 -0
- package/src/adapters/node-file-system/node-file-system.ts +158 -18
- package/src/adapters/pipe-safe-writer/pipe-safe-writer.ts +29 -0
- package/src/adapters/redocly-loader/bundled-mapping-copies.ts +60 -0
- package/src/adapters/redocly-loader/bundled-ref-repair.ts +2 -2
- package/src/adapters/redocly-loader/component-schemas.ts +19 -0
- package/src/adapters/redocly-loader/loaded-documents.ts +46 -0
- package/src/adapters/redocly-loader/mapping-schema-names.ts +25 -0
- package/src/adapters/redocly-loader/query-named-components.ts +201 -0
- package/src/adapters/redocly-loader/redocly-schema-loader.ts +64 -38
- package/src/adapters/redocly-loader/ref-access.ts +51 -4
- package/src/adapters/redocly-loader/ref-holders.ts +76 -15
- package/src/adapters/redocly-loader/remote-body-limit.ts +66 -0
- package/src/adapters/redocly-loader/remote-fetch.ts +85 -13
- package/src/adapters/redocly-loader/remote-node-limit.ts +102 -0
- package/src/adapters/redocly-loader/schema-load-errors.ts +52 -13
- package/src/adapters/redocly-loader/schema-source.ts +35 -11
- package/src/adapters/redocly-loader/unsupported-keys.ts +3 -7
- package/src/adapters/terminal-logger/terminal-logger.ts +17 -6
- package/src/api/default-ports.ts +33 -4
- package/src/api/discriminator-enum-parent.ts +3 -3
- package/src/api/discriminator-other-owners.ts +5 -3
- package/src/api/discriminator-patch.ts +5 -1
- package/src/api/discriminator-scan.ts +16 -8
- package/src/api/document-refs.ts +29 -1
- package/src/api/document-run.ts +10 -19
- package/src/api/legacy-utils.ts +5 -1
- package/src/api/openapi-ts.ts +26 -8
- package/src/api/ref-limit-options.ts +76 -0
- package/src/api/run-context.ts +3 -0
- package/src/api/schema-callbacks.ts +60 -17
- package/src/api/transform-context.ts +7 -3
- package/src/api/transform-schema.ts +79 -12
- package/src/application/ports/file-system.ts +47 -0
- package/src/application/ports/schema-loader.ts +11 -1
- package/src/application/print/text-writer.ts +10 -3
- package/src/application/stack-overflow.ts +9 -5
- package/src/application/transform/declared-value-types.ts +42 -0
- package/src/application/transform/document/components.ts +2 -2
- package/src/application/transform/document/declared-type-names.ts +36 -0
- package/src/application/transform/document/defs-root.ts +2 -2
- package/src/application/transform/document/document.ts +8 -5
- package/src/application/transform/document/enum-names-given-back.ts +91 -0
- package/src/application/transform/document/exploded-query-values.ts +88 -0
- package/src/application/transform/document/global-type-references.ts +1 -1
- package/src/application/transform/document/header.ts +25 -5
- package/src/application/transform/document/media-type.ts +4 -3
- package/src/application/transform/document/operation-keys-written.ts +27 -0
- package/src/application/transform/document/operation.ts +2 -2
- package/src/application/transform/document/parameter-entries.ts +70 -0
- package/src/application/transform/document/parameter.ts +21 -9
- package/src/application/transform/document/parameters.ts +56 -66
- package/src/application/transform/document/path-item.ts +16 -34
- package/src/application/transform/document/path-template-key.ts +152 -0
- package/src/application/transform/document/path-template-refs.ts +106 -0
- package/src/application/transform/document/paths-enum.ts +24 -10
- package/src/application/transform/document/paths.ts +59 -125
- package/src/application/transform/document/referenced-parameter.ts +146 -0
- package/src/application/transform/document/request-body.ts +2 -2
- package/src/application/transform/document/response.ts +3 -3
- package/src/application/transform/document/responses.ts +2 -2
- package/src/application/transform/document/root-type-aliases.ts +17 -38
- package/src/application/transform/document/type-resolution.ts +2 -1
- package/src/application/transform/document/webhooks.ts +19 -6
- package/src/application/transform/footer/document-footer.ts +36 -9
- package/src/application/transform/footer/enum-name-claims.ts +62 -0
- package/src/application/transform/footer/operation-keys.ts +28 -0
- package/src/application/transform/footer/type-evaluation.ts +4 -4
- package/src/application/transform/helper-types.ts +8 -7
- package/src/application/transform/numbered-names.ts +15 -0
- package/src/application/transform/ref-pointer/generated-location.ts +3 -3
- package/src/application/transform/ref-pointer/generated-shape.ts +67 -78
- package/src/application/transform/ref-pointer/inline-cycles.ts +1 -1
- package/src/application/transform/ref-pointer/located-node.ts +38 -0
- package/src/application/transform/ref-pointer/original-index.ts +100 -17
- package/src/application/transform/ref-pointer/pointer-type.ts +1 -1
- package/src/application/transform/ref-pointer/pointer-walk.ts +82 -8
- package/src/application/transform/ref-pointer/property-shape.ts +97 -0
- package/src/application/transform/ref-pointer/typed-walk.ts +117 -25
- package/src/application/transform/ref-type.ts +2 -1
- package/src/application/transform/schema/access-flags.ts +5 -2
- package/src/application/transform/schema/composition-type.ts +2 -2
- package/src/application/transform/schema/enum-rule.ts +6 -2
- package/src/application/transform/schema/index-signature-type.ts +31 -0
- package/src/application/transform/schema/input-location.ts +35 -0
- package/src/application/transform/schema/object-type.ts +22 -12
- package/src/application/transform/schema/ref-siblings.ts +76 -0
- package/src/application/transform/schema/schema-context.ts +3 -0
- package/src/application/transform/schema/schema-transform.ts +6 -3
- package/src/application/transform/schema/unevaluated-properties.ts +4 -44
- package/src/application/transform/schema-comment.ts +5 -1
- package/src/application/transform/transform-context.ts +5 -0
- package/src/cli/api-logger.ts +17 -0
- package/src/cli/api-settings.ts +80 -13
- package/src/cli/api-writes.ts +117 -0
- package/src/cli/cli-arguments.ts +90 -14
- package/src/cli/cli-dependencies.ts +26 -4
- package/src/cli/cli-errors.ts +42 -1
- package/src/cli/cli-output.ts +195 -15
- package/src/cli/main.ts +14 -5
- package/src/cli/redocly-apis.ts +177 -52
- package/src/cli/ref-limits.ts +21 -2
- package/src/cli/run-cli.ts +76 -15
- package/src/domain/append-all.ts +10 -0
- package/src/domain/cause-secrets.ts +86 -0
- package/src/domain/errors.ts +16 -5
- package/src/domain/ir/identifier-text.ts +6 -5
- package/src/domain/ir/ir-shape.ts +299 -0
- package/src/domain/ir/newer-identifier-ranges.ts +183 -30
- package/src/domain/location-text.ts +12 -0
- package/src/domain/openapi/alias-expansion.ts +4 -1
- package/src/domain/openapi/discriminated-union.ts +6 -4
- package/src/domain/openapi/discriminator-conflicts.ts +21 -7
- package/src/domain/openapi/document-object.ts +2 -0
- package/src/domain/openapi/document-places.ts +78 -0
- package/src/domain/openapi/json-pointer.ts +96 -7
- package/src/domain/openapi/schema-dialect.ts +22 -0
- package/src/domain/openapi/unsupported-features.ts +2 -2
- package/src/domain/output-fixes.ts +28 -2
- package/src/domain/terminal-text.ts +44 -0
- package/src/domain/url-secrets.ts +72 -0
- package/src/domain/warnings.ts +1 -0
- package/src/types/generator-options.ts +1 -1
- package/dist/cli/main.d.cts +0 -2
- package/dist/cli/main.d.mts +0 -2
- package/dist/cli/main.d.ts +0 -2
- package/dist/domain/url-credentials.cjs +0 -10
- package/dist/domain/url-credentials.cjs.map +0 -1
- package/dist/domain/url-credentials.mjs +0 -8
- package/dist/domain/url-credentials.mjs.map +0 -1
- package/src/domain/url-credentials.ts +0 -18
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { irKeyword, irObject, irProperty } from "../../../domain/ir/constructors.js";
|
|
2
2
|
import type { IrMember, IrPropertySignature, IrType } from "../../../domain/ir/nodes.js";
|
|
3
3
|
import { toPropertyName } from "../../../domain/ir/property-name.js";
|
|
4
|
-
import {
|
|
4
|
+
import { appendPointer, ROOT_POINTER } from "../../../domain/openapi/json-pointer.js";
|
|
5
5
|
import type { OperationObject } from "../../../domain/openapi/operation-object.js";
|
|
6
|
-
import type {
|
|
7
|
-
ParameterObject,
|
|
8
|
-
ParameterOrReference,
|
|
9
|
-
} from "../../../domain/openapi/parameter-object.js";
|
|
10
6
|
import {
|
|
11
7
|
ADDITIONAL_OPERATIONS_KEY,
|
|
12
8
|
HTTP_METHODS,
|
|
@@ -21,13 +17,19 @@ import type { SchemaLocation } from "../schema/schema-context.js";
|
|
|
21
17
|
import type { TransformContext } from "../transform-context.js";
|
|
22
18
|
import { documentMember } from "./document-member.js";
|
|
23
19
|
import { operationMembers } from "./operation.js";
|
|
20
|
+
import { mergedParameters } from "./parameter-entries.js";
|
|
24
21
|
import { parametersMember } from "./parameters.js";
|
|
25
22
|
|
|
26
23
|
/** Redocly reads `#` in an operation ID as a pointer, so it is replaced (upstream issue #1542). */
|
|
27
24
|
const HASH_RE = /#/g;
|
|
28
25
|
|
|
26
|
+
/** The `operations` key an `operationId` asks for, before a repeated one gets a number. */
|
|
27
|
+
export function operationKeyOf(operationId: string): string {
|
|
28
|
+
return operationId.replace(HASH_RE, "/");
|
|
29
|
+
}
|
|
30
|
+
|
|
29
31
|
/** Whether the method has an operation, not removed by `--exclude-deprecated`. */
|
|
30
|
-
function
|
|
32
|
+
export function isIncludedOperation(
|
|
31
33
|
operation: OperationEntry | undefined,
|
|
32
34
|
context: TransformContext,
|
|
33
35
|
): operation is OperationEntry {
|
|
@@ -41,26 +43,6 @@ function isIncluded(
|
|
|
41
43
|
return !(context.options.excludeDeprecated && resolved?.deprecated);
|
|
42
44
|
}
|
|
43
45
|
|
|
44
|
-
/**
|
|
45
|
-
* Path item parameters followed by the operation's, keyed by location and name, so an operation
|
|
46
|
-
* parameter replaces the path item parameter it redefines (upstream issue #1798).
|
|
47
|
-
*/
|
|
48
|
-
function mergedParameters(
|
|
49
|
-
pathItem: PathItemObject,
|
|
50
|
-
operation: OperationObject,
|
|
51
|
-
context: TransformContext,
|
|
52
|
-
): ParameterOrReference[] {
|
|
53
|
-
const byKey = new Map<string, ParameterOrReference>();
|
|
54
|
-
for (const parameter of [...(pathItem.parameters ?? []), ...(operation.parameters ?? [])]) {
|
|
55
|
-
const resolved =
|
|
56
|
-
"$ref" in parameter
|
|
57
|
-
? (context.refs.resolve(parameter.$ref) as ParameterObject | undefined)
|
|
58
|
-
: parameter;
|
|
59
|
-
byKey.set(`${resolved?.in}-${resolved?.name}`, parameter);
|
|
60
|
-
}
|
|
61
|
-
return [...byKey.values()];
|
|
62
|
-
}
|
|
63
|
-
|
|
64
46
|
/**
|
|
65
47
|
* An operation with an `operationId` goes into the `operations` interface and is referenced from
|
|
66
48
|
* the path item; others are written inline.
|
|
@@ -71,17 +53,17 @@ function operationType(
|
|
|
71
53
|
location: SchemaLocation,
|
|
72
54
|
context: TransformContext,
|
|
73
55
|
): IrType {
|
|
74
|
-
const merged = { ...operation, parameters: mergedParameters(pathItem, operation, context) };
|
|
56
|
+
const merged = { ...operation, parameters: mergedParameters(pathItem, operation, context.refs) };
|
|
75
57
|
if (!operation.operationId) {
|
|
76
58
|
return irObject(operationMembers(merged, location, context));
|
|
77
59
|
}
|
|
78
|
-
const operationId = operation.operationId
|
|
60
|
+
const operationId = context.footer.operationKey(operationKeyOf(operation.operationId));
|
|
79
61
|
context.footer.addOperation(() =>
|
|
80
62
|
irProperty(toPropertyName(operationId), irObject(operationMembers(merged, location, context)), {
|
|
81
63
|
isReadonly: context.options.immutable,
|
|
82
64
|
}),
|
|
83
65
|
);
|
|
84
|
-
return refType(
|
|
66
|
+
return refType(appendPointer(ROOT_POINTER, ["operations", operationId]));
|
|
85
67
|
}
|
|
86
68
|
|
|
87
69
|
/** An included operation, the member name it gets and its location below the path item. */
|
|
@@ -112,11 +94,11 @@ function methodMember(
|
|
|
112
94
|
context: TransformContext,
|
|
113
95
|
): IrPropertySignature {
|
|
114
96
|
const operation = pathItem[method];
|
|
115
|
-
if (!
|
|
97
|
+
if (!isIncludedOperation(operation, context)) {
|
|
116
98
|
const isReadonly = context.options.immutable;
|
|
117
99
|
return irProperty(toPropertyName(method), irKeyword("never"), { isOptional: true, isReadonly });
|
|
118
100
|
}
|
|
119
|
-
const path =
|
|
101
|
+
const path = appendPointer(location.path, [method]);
|
|
120
102
|
return operationMember({ name: method, operation, path }, pathItem, location, context);
|
|
121
103
|
}
|
|
122
104
|
|
|
@@ -131,9 +113,9 @@ function additionalOperationsMember(
|
|
|
131
113
|
): IrPropertySignature | null {
|
|
132
114
|
const entries = documentEntries(pathItem.additionalOperations ?? {}, context.options);
|
|
133
115
|
const members = entries
|
|
134
|
-
.filter(([, operation]) =>
|
|
116
|
+
.filter(([, operation]) => isIncludedOperation(operation, context))
|
|
135
117
|
.map(([method, operation]) => {
|
|
136
|
-
const path =
|
|
118
|
+
const path = appendPointer(location.path, [ADDITIONAL_OPERATIONS_KEY, method]);
|
|
137
119
|
return operationMember({ name: method, operation, path }, pathItem, location, context);
|
|
138
120
|
});
|
|
139
121
|
return members.length > 0
|
|
@@ -152,7 +134,7 @@ export function pathItemType(
|
|
|
152
134
|
location: SchemaLocation,
|
|
153
135
|
context: TransformContext,
|
|
154
136
|
): IrType {
|
|
155
|
-
const parametersLocation = { ...location, path:
|
|
137
|
+
const parametersLocation = { ...location, path: appendPointer(location.path, ["parameters"]) };
|
|
156
138
|
const members: IrMember[] = [
|
|
157
139
|
parametersMember(pathItem.parameters ?? [], parametersLocation, context),
|
|
158
140
|
...HTTP_METHODS.map((method) => methodMember(method, pathItem, location, context)),
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { escapeTemplateText } from "../../../domain/ir/raw-text-escapes.js";
|
|
2
|
+
import type { OperationObject } from "../../../domain/openapi/operation-object.js";
|
|
3
|
+
import type {
|
|
4
|
+
ParameterObject,
|
|
5
|
+
ParameterOrReference,
|
|
6
|
+
} from "../../../domain/openapi/parameter-object.js";
|
|
7
|
+
import {
|
|
8
|
+
type PathItemObject,
|
|
9
|
+
pathItemOperations,
|
|
10
|
+
} from "../../../domain/openapi/path-item-object.js";
|
|
11
|
+
import type { ReferenceSchema, SchemaObject } from "../../../domain/openapi/schema-object.js";
|
|
12
|
+
import { FIX } from "../../../domain/output-fixes.js";
|
|
13
|
+
import type { TransformContext } from "../transform-context.js";
|
|
14
|
+
import type { PathKeyPart, PathPlaceholder } from "./path-key-overlaps.js";
|
|
15
|
+
import {
|
|
16
|
+
type PathParameterMatch,
|
|
17
|
+
placeholderText,
|
|
18
|
+
replacedTemplateParts,
|
|
19
|
+
} from "./path-template-replace.js";
|
|
20
|
+
|
|
21
|
+
/** The `--path-params-as-types` key of a path: its URL with a placeholder per parameter. */
|
|
22
|
+
|
|
23
|
+
/** `[^{}]` keeps the scan linear: `[^}]` retried from every `{` of a long run of them. */
|
|
24
|
+
const PATH_PARAMETER_RE = /\{[^{}]+\}/g;
|
|
25
|
+
|
|
26
|
+
/** Placeholders by parameter schema type; anything else is a string placeholder. */
|
|
27
|
+
const PLACEHOLDERS: ReadonlyMap<unknown, PathPlaceholder> = new Map([
|
|
28
|
+
["number", "number"],
|
|
29
|
+
["integer", "number"],
|
|
30
|
+
["boolean", "boolean"],
|
|
31
|
+
]);
|
|
32
|
+
const STRING_PLACEHOLDER: PathPlaceholder = "string";
|
|
33
|
+
|
|
34
|
+
function resolvedParameter(
|
|
35
|
+
parameter: ParameterOrReference,
|
|
36
|
+
context: TransformContext,
|
|
37
|
+
): ParameterObject | undefined {
|
|
38
|
+
return "$ref" in parameter && parameter.$ref
|
|
39
|
+
? (context.refs.resolve(parameter.$ref) as ParameterObject | undefined)
|
|
40
|
+
: (parameter as ParameterObject);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function addPathParameters(
|
|
44
|
+
parameters: readonly ParameterOrReference[],
|
|
45
|
+
byName: Map<string, ParameterObject>,
|
|
46
|
+
context: TransformContext,
|
|
47
|
+
): void {
|
|
48
|
+
for (const parameter of parameters) {
|
|
49
|
+
const resolved = resolvedParameter(parameter, context);
|
|
50
|
+
if (resolved && resolved.in === "path") {
|
|
51
|
+
byName.set(resolved.name, resolved);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Path parameters of the path item and of its operations; later definitions win. */
|
|
57
|
+
function pathParameters(
|
|
58
|
+
pathItem: PathItemObject,
|
|
59
|
+
context: TransformContext,
|
|
60
|
+
): Map<string, ParameterObject> {
|
|
61
|
+
const byName = new Map<string, ParameterObject>();
|
|
62
|
+
addPathParameters(pathItem.parameters ?? [], byName, context);
|
|
63
|
+
for (const { operation: entry } of pathItemOperations(pathItem)) {
|
|
64
|
+
const operation = (entry as ReferenceSchema).$ref
|
|
65
|
+
? (context.refs.resolve((entry as ReferenceSchema).$ref) as OperationObject | undefined)
|
|
66
|
+
: (entry as OperationObject);
|
|
67
|
+
addPathParameters(operation?.parameters ?? [], byName, context);
|
|
68
|
+
}
|
|
69
|
+
return byName;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Each `{name}` of the URL and its own placeholder, from the URL split at the matches. */
|
|
73
|
+
function splitTemplateParts(url: string, matches: readonly PathParameterMatch[]): PathKeyPart[] {
|
|
74
|
+
return url.split(PATH_PARAMETER_RE).flatMap((text, index): PathKeyPart[] => {
|
|
75
|
+
const type = matches[index]?.type;
|
|
76
|
+
const textPart: PathKeyPart = { kind: "text", text };
|
|
77
|
+
return type === undefined ? [textPart] : [textPart, { kind: "placeholder", type }];
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* `--path-params-as-types`: the URL as template parts, each `{name}` replaced by a placeholder for
|
|
83
|
+
* its parameter's type, the way the original replaces them unless the `path-param-type-names` fix
|
|
84
|
+
* is on (see `replacedTemplateParts`). Null when the URL has no complete `{…}` placeholder.
|
|
85
|
+
*/
|
|
86
|
+
export function pathTemplateParts(
|
|
87
|
+
url: string,
|
|
88
|
+
pathItem: PathItemObject,
|
|
89
|
+
context: TransformContext,
|
|
90
|
+
): PathKeyPart[] | null {
|
|
91
|
+
const found = url.match(PATH_PARAMETER_RE);
|
|
92
|
+
if (!found) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
const parameters = pathParameters(pathItem, context);
|
|
96
|
+
const matches = found.map((match): PathParameterMatch => {
|
|
97
|
+
const schema = parameters.get(match.slice(1, -1))?.schema as SchemaObject | undefined;
|
|
98
|
+
return { match, type: PLACEHOLDERS.get(schema?.type) ?? STRING_PLACEHOLDER };
|
|
99
|
+
});
|
|
100
|
+
return context.options.fixes.has(FIX.PATH_PARAM_TYPE_NAMES)
|
|
101
|
+
? splitTemplateParts(url, matches)
|
|
102
|
+
: replacedTemplateParts(url, matches);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The template literal type of the parts. The original escaped only backticks: a backslash or
|
|
107
|
+
* `${` in the URL could end the literal or open a placeholder, and add code to the generated file
|
|
108
|
+
* (intentional fix). So the text parts are escaped.
|
|
109
|
+
*/
|
|
110
|
+
export function templateText(parts: readonly PathKeyPart[]): string {
|
|
111
|
+
const text = parts
|
|
112
|
+
.map((part) =>
|
|
113
|
+
part.kind === "text" ? escapeTemplateText(part.text) : placeholderText(part.type),
|
|
114
|
+
)
|
|
115
|
+
.join("");
|
|
116
|
+
return `\`${text}\``;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const BOOLEAN_TEXTS = ["true", "false"] as const;
|
|
120
|
+
|
|
121
|
+
const isBooleanPlaceholder = (part: PathKeyPart): boolean =>
|
|
122
|
+
part.kind === "placeholder" && part.type === "boolean";
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* The keys of a template whose only placeholders are `${boolean}`, with each written as `true`
|
|
126
|
+
* and as `false`. Such a template is a union of literals, and an index signature takes none
|
|
127
|
+
* (TS1337), so the original's `` [path: `/flags/${boolean}`] `` did not compile. A path with n
|
|
128
|
+
* boolean parameters gets 2ⁿ plain URLs (`/flags/true`), all with the same path item type. Next to
|
|
129
|
+
* another placeholder the template is a pattern, a valid signature that admits the same URLs, so
|
|
130
|
+
* those parts stay one key.
|
|
131
|
+
*/
|
|
132
|
+
export function booleanExpandedKeys(parts: readonly PathKeyPart[]): PathKeyPart[][] {
|
|
133
|
+
const isBooleanOnly = parts.every((part) => part.kind === "text" || isBooleanPlaceholder(part));
|
|
134
|
+
if (!isBooleanOnly) {
|
|
135
|
+
return [[...parts]];
|
|
136
|
+
}
|
|
137
|
+
return parts.reduce<PathKeyPart[][]>(
|
|
138
|
+
(keys, part) => {
|
|
139
|
+
const choices: readonly PathKeyPart[] = isBooleanPlaceholder(part)
|
|
140
|
+
? BOOLEAN_TEXTS.map((text) => ({ kind: "text", text }))
|
|
141
|
+
: [part];
|
|
142
|
+
return keys.flatMap((key) => choices.map((choice) => [...key, choice]));
|
|
143
|
+
},
|
|
144
|
+
[[]],
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** The URL of parts without placeholders; null when one is left. */
|
|
149
|
+
export function plainUrlOf(parts: readonly PathKeyPart[]): string | null {
|
|
150
|
+
const texts = parts.map((part) => (part.kind === "text" ? part.text : null));
|
|
151
|
+
return texts.includes(null) ? null : texts.join("");
|
|
152
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { irRaw } from "../../../domain/ir/constructors.js";
|
|
2
|
+
import type { IrDeclaration } from "../../../domain/ir/nodes.js";
|
|
3
|
+
import type { PathsObject } from "../../../domain/openapi/path-item-object.js";
|
|
4
|
+
import { documentEntries } from "../document-entries.js";
|
|
5
|
+
import type { TransformContext } from "../transform-context.js";
|
|
6
|
+
import type { PathKeyPart } from "./path-key-overlaps.js";
|
|
7
|
+
import { booleanExpandedKeys, pathTemplateParts, templateText } from "./path-template-key.js";
|
|
8
|
+
import { isUntakenKey, pathKeyOf } from "./paths.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* `--path-params-as-types` and `$ref`s into a templated path. Such a path is an index signature
|
|
12
|
+
* of `paths` (`` [path: `/pets/${number}`] ``), so `paths["/pets/{id}"]`, the type of a `$ref`
|
|
13
|
+
* to it, names no key: `{id}` is no number (TS2339). The reference indexes `paths` by the
|
|
14
|
+
* template instead, which reaches the signature. With only `${string}` placeholders the URL
|
|
15
|
+
* itself matches the template and the output compiles, so it stays as it is.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const PATHS_TYPE_NAME = "paths";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The index of a templated path: the union of the keys it is written with. A `${boolean}` key the
|
|
22
|
+
* document's own path took (`/flags/true` next to `/flags/{enabled}`) is left out, so the index
|
|
23
|
+
* names only this path's members. Undefined when every key was taken: the path has no member.
|
|
24
|
+
*/
|
|
25
|
+
function templateIndexText(url: string, parts: readonly PathKeyPart[], takenUrls: Set<string>) {
|
|
26
|
+
const keys = booleanExpandedKeys(parts)
|
|
27
|
+
.map(pathKeyOf)
|
|
28
|
+
.filter((key) => isUntakenKey(url, key, takenUrls));
|
|
29
|
+
const texts = keys.map((key) =>
|
|
30
|
+
key.kind === "literal" ? JSON.stringify(key.url) : templateText(key.parts),
|
|
31
|
+
);
|
|
32
|
+
return texts.length === 0 ? undefined : texts.join(" | ");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** The index of each templated path whose URL does not match its keys, by URL. */
|
|
36
|
+
export function unmatchedTemplateKeys(
|
|
37
|
+
paths: PathsObject | null | undefined,
|
|
38
|
+
context: TransformContext,
|
|
39
|
+
): ReadonlyMap<string, string> {
|
|
40
|
+
const keys = new Map<string, string>();
|
|
41
|
+
// A document may hold any value as `paths`; one that is no object has no paths.
|
|
42
|
+
if (!context.options.pathParamsAsTypes || typeof paths !== "object" || paths === null) {
|
|
43
|
+
return keys;
|
|
44
|
+
}
|
|
45
|
+
// The same walk as `pathMembers`, so a URL is taken by the same path as there.
|
|
46
|
+
const takenUrls = new Set(Object.keys(paths));
|
|
47
|
+
for (const [url, pathItem] of documentEntries(paths, context.options)) {
|
|
48
|
+
if (!pathItem || typeof pathItem !== "object" || "$ref" in pathItem || !url.includes("{")) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const parts = pathTemplateParts(url, pathItem, context);
|
|
52
|
+
const index = parts === null ? undefined : templateIndexText(url, parts, takenUrls);
|
|
53
|
+
const isUnmatched = parts?.some(
|
|
54
|
+
(part) => part.kind === "placeholder" && part.type !== "string",
|
|
55
|
+
);
|
|
56
|
+
if (isUnmatched && index !== undefined) {
|
|
57
|
+
keys.set(url, index);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return keys;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function isNode(value: unknown): value is Readonly<Record<string, unknown>> {
|
|
64
|
+
return typeof value === "object" && value !== null;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** `paths["<url>"]`: an index of the `paths` root by a string literal. */
|
|
68
|
+
function pathsIndexUrl(node: Readonly<Record<string, unknown>>): string | undefined {
|
|
69
|
+
const object = node.object as Readonly<Record<string, unknown>> | undefined;
|
|
70
|
+
const index = node.index as Readonly<Record<string, unknown>> | undefined;
|
|
71
|
+
const isPathsIndex =
|
|
72
|
+
node.kind === "indexedAccess" &&
|
|
73
|
+
object?.kind === "reference" &&
|
|
74
|
+
object.name === PATHS_TYPE_NAME &&
|
|
75
|
+
(object.typeArguments as readonly unknown[] | undefined)?.length === 0 &&
|
|
76
|
+
index?.kind === "stringLiteral";
|
|
77
|
+
return isPathsIndex ? (index.value as string) : undefined;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function rewrittenNode(value: unknown, keys: ReadonlyMap<string, string>): unknown {
|
|
81
|
+
if (Array.isArray(value)) {
|
|
82
|
+
return value.map((item) => rewrittenNode(item, keys));
|
|
83
|
+
}
|
|
84
|
+
if (!isNode(value)) {
|
|
85
|
+
return value;
|
|
86
|
+
}
|
|
87
|
+
const template = keys.get(pathsIndexUrl(value) ?? "");
|
|
88
|
+
if (template !== undefined) {
|
|
89
|
+
return { ...value, index: irRaw(template) };
|
|
90
|
+
}
|
|
91
|
+
// `origin` holds the compiler node a raw type was printed from; it is not IR.
|
|
92
|
+
return Object.fromEntries(
|
|
93
|
+
Object.entries(value).map(([key, child]) => [
|
|
94
|
+
key,
|
|
95
|
+
key === "origin" ? child : rewrittenNode(child, keys),
|
|
96
|
+
]),
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** The declarations with each `paths["<url>"]` of an unmatched template indexed by it. */
|
|
101
|
+
export function withTemplatePathRefs<T extends IrDeclaration>(
|
|
102
|
+
declarations: readonly T[],
|
|
103
|
+
keys: ReadonlyMap<string, string>,
|
|
104
|
+
): T[] {
|
|
105
|
+
return keys.size === 0 ? [...declarations] : (rewrittenNode(declarations, keys) as T[]);
|
|
106
|
+
}
|
|
@@ -3,6 +3,7 @@ import type { OperationObject } from "../../../domain/openapi/operation-object.j
|
|
|
3
3
|
import {
|
|
4
4
|
ADDITIONAL_OPERATIONS_KEY,
|
|
5
5
|
HTTP_METHODS,
|
|
6
|
+
type OperationEntry,
|
|
6
7
|
type PathItemMethod,
|
|
7
8
|
type PathsObject,
|
|
8
9
|
QUERY_METHOD,
|
|
@@ -15,7 +16,7 @@ import type { EnumMemberMetadata } from "../schema/schema-context.js";
|
|
|
15
16
|
const PARAMETER_SEGMENT_RE = /^(?:{(.+)}|:(.+))$/;
|
|
16
17
|
/** Characters not allowed in an enum key, or a `{param}` / `:param` part (first match only). */
|
|
17
18
|
const INVALID_KEY_PART_RE = /{.*}|:.*|[^a-zA-Z\d_]+/;
|
|
18
|
-
const API_PATHS_NAME = "ApiPaths";
|
|
19
|
+
export const API_PATHS_NAME = "ApiPaths";
|
|
19
20
|
const METHODS: ReadonlySet<string> = new Set<PathItemMethod>([...HTTP_METHODS, QUERY_METHOD]);
|
|
20
21
|
|
|
21
22
|
/** The members of the `ApiPaths` enum (`--make-paths-enum`). */
|
|
@@ -72,12 +73,19 @@ function pathItemEntries(pathItem: object): [string, unknown][] {
|
|
|
72
73
|
});
|
|
73
74
|
}
|
|
74
75
|
|
|
75
|
-
|
|
76
|
+
/** Which operations get a member; the generator leaves out those `--exclude-deprecated` drops. */
|
|
77
|
+
export type OperationFilter = (operation: OperationEntry) => boolean;
|
|
78
|
+
|
|
79
|
+
const INCLUDES_EVERY_OPERATION: OperationFilter = () => true;
|
|
80
|
+
|
|
81
|
+
function pathOperations(paths: PathsObject, isIncluded: OperationFilter): PathOperation[] {
|
|
76
82
|
return Object.entries(paths).flatMap(([url, pathItem]) =>
|
|
77
|
-
pathItemEntries(pathItem)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
83
|
+
pathItemEntries(pathItem)
|
|
84
|
+
.filter(([, operation]) => isIncluded(operation as OperationEntry))
|
|
85
|
+
.map(([method, operation]) => {
|
|
86
|
+
const operationId = (operation as OperationObject).operationId || undefined;
|
|
87
|
+
return { url, method, operationId };
|
|
88
|
+
}),
|
|
81
89
|
);
|
|
82
90
|
}
|
|
83
91
|
|
|
@@ -108,8 +116,11 @@ function uniqueNames(operations: readonly PathOperation[]): string[] {
|
|
|
108
116
|
* One enum member per operation: the URL as the value, the operation ID (or a key built from the
|
|
109
117
|
* method and URL) as the name. Paths are in document order; `--alphabetize` does not apply.
|
|
110
118
|
*/
|
|
111
|
-
export function apiPathsEnum(
|
|
112
|
-
|
|
119
|
+
export function apiPathsEnum(
|
|
120
|
+
paths: PathsObject,
|
|
121
|
+
isIncluded: OperationFilter = INCLUDES_EVERY_OPERATION,
|
|
122
|
+
): ApiPathsEnum {
|
|
123
|
+
const operations = pathOperations(paths, isIncluded);
|
|
113
124
|
const names = uniqueNames(operations);
|
|
114
125
|
return {
|
|
115
126
|
values: operations.map((operation) => operation.url),
|
|
@@ -121,7 +132,10 @@ export function apiPathsEnum(paths: PathsObject): ApiPathsEnum {
|
|
|
121
132
|
* The `ApiPaths` enum declaration. Its own naming state is equivalent to the run's: the name is a
|
|
122
133
|
* valid identifier, and member names only reset the state, never read it.
|
|
123
134
|
*/
|
|
124
|
-
export function apiPathsEnumDeclaration(
|
|
135
|
+
export function apiPathsEnumDeclaration(
|
|
136
|
+
paths: PathsObject,
|
|
137
|
+
isIncluded: OperationFilter = INCLUDES_EVERY_OPERATION,
|
|
138
|
+
): IrEnumDeclaration {
|
|
125
139
|
const naming = new EnumNaming();
|
|
126
|
-
return enumDeclaration(naming.enumName(API_PATHS_NAME), apiPathsEnum(paths), naming);
|
|
140
|
+
return enumDeclaration(naming.enumName(API_PATHS_NAME), apiPathsEnum(paths, isIncluded), naming);
|
|
127
141
|
}
|