openapi-typesafe 1.0.0-rc.2 → 1.0.0-rc.4
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 +1831 -0
- package/dist/adapters/node-deprecations/node-deprecations.cjs +14 -0
- package/dist/adapters/node-deprecations/node-deprecations.cjs.map +1 -0
- package/dist/adapters/node-deprecations/node-deprecations.mjs +12 -0
- package/dist/adapters/node-deprecations/node-deprecations.mjs.map +1 -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 +90 -14
- package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -1
- package/dist/adapters/node-file-system/node-file-system.mjs +90 -14
- package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -1
- package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs +75 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs +72 -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/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/redocly-schema-loader.cjs +14 -15
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -1
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +12 -13
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-access.cjs +31 -3
- package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-access.mjs +31 -3
- package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-holders.cjs +2 -2
- package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-holders.mjs +3 -3
- 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 +35 -6
- package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-fetch.mjs +35 -6
- package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-node-limit.cjs +47 -0
- package/dist/adapters/redocly-loader/remote-node-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-node-limit.mjs +44 -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 +11 -7
- package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-source.mjs +12 -8
- 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 +6 -4
- package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -1
- package/dist/adapters/terminal-logger/terminal-logger.mjs +6 -4
- package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -1
- package/dist/api/default-ports.cjs +19 -2
- package/dist/api/default-ports.cjs.map +1 -1
- package/dist/api/default-ports.mjs +19 -3
- package/dist/api/default-ports.mjs.map +1 -1
- package/dist/api/discriminator-conflict-warnings.cjs +1 -1
- package/dist/api/discriminator-conflict-warnings.cjs.map +1 -1
- package/dist/api/discriminator-conflict-warnings.mjs +2 -2
- package/dist/api/discriminator-conflict-warnings.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 +8 -4
- package/dist/api/discriminator-patch.cjs.map +1 -1
- package/dist/api/discriminator-patch.mjs +9 -5
- package/dist/api/discriminator-patch.mjs.map +1 -1
- package/dist/api/discriminator-scan.cjs +17 -10
- package/dist/api/discriminator-scan.cjs.map +1 -1
- package/dist/api/discriminator-scan.mjs +18 -11
- package/dist/api/discriminator-scan.mjs.map +1 -1
- package/dist/api/document-run.cjs +4 -3
- package/dist/api/document-run.cjs.map +1 -1
- package/dist/api/document-run.mjs +4 -3
- package/dist/api/document-run.mjs.map +1 -1
- package/dist/api/legacy-callback-warning.cjs +7 -4
- package/dist/api/legacy-callback-warning.cjs.map +1 -1
- package/dist/api/legacy-callback-warning.mjs +8 -5
- package/dist/api/legacy-callback-warning.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 -5
- package/dist/api/openapi-ts.cjs.map +1 -1
- package/dist/api/openapi-ts.mjs +10 -7
- package/dist/api/openapi-ts.mjs.map +1 -1
- 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/string-to-ast.cjs +7 -9
- package/dist/api/string-to-ast.cjs.map +1 -1
- package/dist/api/string-to-ast.mjs +8 -9
- package/dist/api/string-to-ast.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 +42 -12
- package/dist/api/transform-schema.cjs.map +1 -1
- package/dist/api/transform-schema.mjs +44 -14
- 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/document/components.cjs +2 -2
- package/dist/application/transform/document/components.cjs.map +1 -1
- package/dist/application/transform/document/components.mjs +4 -4
- 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 +4 -1
- package/dist/application/transform/document/document.cjs.map +1 -1
- package/dist/application/transform/document/document.mjs +3 -2
- 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/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/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 +7 -30
- package/dist/application/transform/document/parameters.cjs.map +1 -1
- package/dist/application/transform/document/parameters.mjs +8 -31
- package/dist/application/transform/document/parameters.mjs.map +1 -1
- package/dist/application/transform/document/path-item.cjs +11 -14
- package/dist/application/transform/document/path-item.cjs.map +1 -1
- package/dist/application/transform/document/path-item.mjs +12 -16
- package/dist/application/transform/document/path-item.mjs.map +1 -1
- package/dist/application/transform/document/paths-enum.cjs +1 -0
- package/dist/application/transform/document/paths-enum.cjs.map +1 -1
- package/dist/application/transform/document/paths-enum.mjs +1 -1
- package/dist/application/transform/document/paths-enum.mjs.map +1 -1
- package/dist/application/transform/document/paths.cjs +6 -2
- package/dist/application/transform/document/paths.cjs.map +1 -1
- package/dist/application/transform/document/paths.mjs +8 -4
- 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 +1 -1
- package/dist/application/transform/document/webhooks.cjs.map +1 -1
- package/dist/application/transform/document/webhooks.mjs +2 -2
- package/dist/application/transform/document/webhooks.mjs.map +1 -1
- package/dist/application/transform/footer/document-footer.cjs +10 -2
- package/dist/application/transform/footer/document-footer.cjs.map +1 -1
- package/dist/application/transform/footer/document-footer.mjs +10 -2
- 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 +1 -1
- package/dist/application/transform/helper-types.cjs.map +1 -1
- package/dist/application/transform/helper-types.mjs +1 -1
- 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 +1 -1
- package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-location.mjs +2 -2
- package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-type.cjs +1 -1
- package/dist/application/transform/ref-pointer/pointer-type.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-type.mjs +2 -2
- package/dist/application/transform/ref-pointer/pointer-type.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 +1 -1
- package/dist/application/transform/schema/access-flags.cjs.map +1 -1
- package/dist/application/transform/schema/access-flags.mjs +2 -2
- package/dist/application/transform/schema/access-flags.mjs.map +1 -1
- package/dist/application/transform/schema/array-type.cjs +2 -2
- package/dist/application/transform/schema/array-type.cjs.map +1 -1
- package/dist/application/transform/schema/array-type.mjs +3 -3
- package/dist/application/transform/schema/array-type.mjs.map +1 -1
- package/dist/application/transform/schema/composition-type.cjs +4 -4
- package/dist/application/transform/schema/composition-type.cjs.map +1 -1
- package/dist/application/transform/schema/composition-type.mjs +6 -6
- package/dist/application/transform/schema/composition-type.mjs.map +1 -1
- package/dist/application/transform/schema/enum-rule.cjs +4 -6
- package/dist/application/transform/schema/enum-rule.cjs.map +1 -1
- package/dist/application/transform/schema/enum-rule.mjs +6 -8
- package/dist/application/transform/schema/enum-rule.mjs.map +1 -1
- package/dist/application/transform/schema/object-type.cjs +3 -3
- package/dist/application/transform/schema/object-type.cjs.map +1 -1
- package/dist/application/transform/schema/object-type.mjs +4 -4
- package/dist/application/transform/schema/object-type.mjs.map +1 -1
- package/dist/application/transform/schema/presence-members.cjs +1 -1
- package/dist/application/transform/schema/presence-members.cjs.map +1 -1
- package/dist/application/transform/schema/presence-members.mjs +2 -2
- package/dist/application/transform/schema/presence-members.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/required-variants.cjs +2 -2
- package/dist/application/transform/schema/required-variants.cjs.map +1 -1
- package/dist/application/transform/schema/required-variants.mjs +3 -3
- package/dist/application/transform/schema/required-variants.mjs.map +1 -1
- package/dist/application/transform/schema/schema-transform.cjs +4 -2
- package/dist/application/transform/schema/schema-transform.cjs.map +1 -1
- package/dist/application/transform/schema/schema-transform.mjs +4 -2
- package/dist/application/transform/schema/schema-transform.mjs.map +1 -1
- package/dist/application/transform/schema/unevaluated-properties.cjs +1 -1
- package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -1
- package/dist/application/transform/schema/unevaluated-properties.mjs +2 -2
- package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -1
- package/dist/application/transform/schema-comment.cjs +6 -2
- package/dist/application/transform/schema-comment.cjs.map +1 -1
- package/dist/application/transform/schema-comment.mjs +7 -3
- package/dist/application/transform/schema-comment.mjs.map +1 -1
- package/dist/cli/api-settings.cjs +62 -6
- package/dist/cli/api-settings.cjs.map +1 -1
- package/dist/cli/api-settings.mjs +60 -7
- 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-errors.cjs +12 -1
- package/dist/cli/cli-errors.cjs.map +1 -1
- package/dist/cli/cli-errors.mjs +12 -1
- package/dist/cli/cli-errors.mjs.map +1 -1
- package/dist/cli/cli-output.cjs +106 -1
- package/dist/cli/cli-output.cjs.map +1 -1
- package/dist/cli/cli-output.mjs +99 -2
- package/dist/cli/cli-output.mjs.map +1 -1
- package/dist/cli/main.cjs +5 -1
- package/dist/cli/main.cjs.map +1 -1
- package/dist/cli/main.mjs +6 -2
- package/dist/cli/main.mjs.map +1 -1
- package/dist/cli/redocly-apis.cjs +82 -36
- package/dist/cli/redocly-apis.cjs.map +1 -1
- package/dist/cli/redocly-apis.mjs +85 -39
- package/dist/cli/redocly-apis.mjs.map +1 -1
- package/dist/cli/run-cli.cjs +13 -7
- package/dist/cli/run-cli.cjs.map +1 -1
- package/dist/cli/run-cli.mjs +14 -8
- 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 +37 -0
- package/dist/domain/cause-secrets.cjs.map +1 -0
- package/dist/domain/cause-secrets.mjs +35 -0
- package/dist/domain/cause-secrets.mjs.map +1 -0
- package/dist/domain/deprecations.cjs +11 -0
- package/dist/domain/deprecations.cjs.map +1 -0
- package/dist/domain/deprecations.mjs +9 -0
- package/dist/domain/deprecations.mjs.map +1 -0
- package/dist/domain/errors.cjs +9 -3
- package/dist/domain/errors.cjs.map +1 -1
- package/dist/domain/errors.mjs +9 -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/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/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 +25 -14
- package/dist/domain/output-fixes.cjs.map +1 -1
- package/dist/domain/output-fixes.mjs +25 -13
- package/dist/domain/output-fixes.mjs.map +1 -1
- 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 +0 -1
- package/dist/domain/warnings.cjs.map +1 -1
- package/dist/domain/warnings.mjs +0 -1
- package/dist/domain/warnings.mjs.map +1 -1
- package/dist/index.cjs +2 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +57 -20
- package/dist/index.d.mts +57 -20
- package/dist/index.d.ts +57 -20
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -6
- package/src/adapters/node-deprecations/node-deprecations.ts +14 -0
- 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 +145 -18
- package/src/adapters/redocly-loader/bundled-mapping-copies.ts +95 -0
- package/src/adapters/redocly-loader/bundled-ref-repair.ts +2 -2
- package/src/adapters/redocly-loader/loaded-documents.ts +46 -0
- package/src/adapters/redocly-loader/redocly-schema-loader.ts +18 -24
- package/src/adapters/redocly-loader/ref-access.ts +37 -3
- package/src/adapters/redocly-loader/ref-holders.ts +3 -3
- package/src/adapters/redocly-loader/remote-body-limit.ts +66 -0
- package/src/adapters/redocly-loader/remote-fetch.ts +74 -11
- package/src/adapters/redocly-loader/remote-node-limit.ts +62 -0
- package/src/adapters/redocly-loader/schema-load-errors.ts +52 -13
- package/src/adapters/redocly-loader/schema-source.ts +20 -8
- package/src/adapters/redocly-loader/unsupported-keys.ts +3 -7
- package/src/adapters/terminal-logger/terminal-logger.ts +10 -5
- package/src/api/default-ports.ts +40 -4
- package/src/api/discriminator-conflict-warnings.ts +2 -2
- package/src/api/discriminator-enum-parent.ts +3 -3
- package/src/api/discriminator-other-owners.ts +5 -3
- package/src/api/discriminator-patch.ts +9 -6
- package/src/api/discriminator-scan.ts +19 -11
- package/src/api/document-run.ts +9 -3
- package/src/api/legacy-callback-warning.ts +13 -6
- package/src/api/legacy-utils.ts +5 -1
- package/src/api/openapi-ts.ts +26 -7
- package/src/api/run-context.ts +6 -0
- package/src/api/schema-callbacks.ts +60 -17
- package/src/api/string-to-ast.ts +11 -15
- package/src/api/transform-context.ts +7 -3
- package/src/api/transform-schema.ts +67 -15
- package/src/application/ports/deprecation-reporter.ts +9 -0
- package/src/application/ports/file-system.ts +39 -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/document/components.ts +4 -4
- 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 +4 -3
- package/src/application/transform/document/enum-names-given-back.ts +91 -0
- package/src/application/transform/document/global-type-references.ts +1 -1
- 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 +13 -58
- package/src/application/transform/document/path-item.ts +13 -31
- package/src/application/transform/document/paths-enum.ts +1 -1
- package/src/application/transform/document/paths.ts +8 -4
- 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 +2 -2
- package/src/application/transform/footer/document-footer.ts +18 -1
- 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 +6 -5
- package/src/application/transform/numbered-names.ts +15 -0
- package/src/application/transform/ref-pointer/generated-location.ts +2 -2
- package/src/application/transform/ref-pointer/pointer-type.ts +2 -4
- package/src/application/transform/ref-type.ts +2 -1
- package/src/application/transform/schema/access-flags.ts +2 -2
- package/src/application/transform/schema/array-type.ts +3 -5
- package/src/application/transform/schema/composition-type.ts +6 -6
- package/src/application/transform/schema/enum-rule.ts +10 -8
- package/src/application/transform/schema/object-type.ts +4 -4
- package/src/application/transform/schema/presence-members.ts +2 -2
- package/src/application/transform/schema/ref-siblings.ts +76 -0
- package/src/application/transform/schema/required-variants.ts +3 -3
- package/src/application/transform/schema/schema-context.ts +3 -0
- package/src/application/transform/schema/schema-transform.ts +4 -2
- package/src/application/transform/schema/unevaluated-properties.ts +2 -2
- package/src/application/transform/schema-comment.ts +7 -3
- package/src/application/transform/transform-context.ts +5 -0
- package/src/cli/api-settings.ts +82 -7
- package/src/cli/api-writes.ts +117 -0
- package/src/cli/cli-dependencies.ts +21 -4
- package/src/cli/cli-errors.ts +20 -1
- package/src/cli/cli-output.ts +186 -7
- package/src/cli/main.ts +6 -3
- package/src/cli/redocly-apis.ts +153 -48
- package/src/cli/run-cli.ts +37 -8
- package/src/domain/append-all.ts +10 -0
- package/src/domain/cause-secrets.ts +52 -0
- package/src/domain/deprecations.ts +15 -0
- package/src/domain/errors.ts +22 -7
- 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/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/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 +37 -18
- package/src/domain/url-secrets.ts +72 -0
- package/src/domain/warnings.ts +0 -1
- package/src/index.ts +2 -6
- 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,35 +1,111 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import { fileURLToPath } from 'node:url';
|
|
3
3
|
import { OpenAPITypesafeError, ERROR_CODES } from '../../domain/errors.mjs';
|
|
4
|
+
import { writeFileAt, claimFileAt } from './file-claims.mjs';
|
|
5
|
+
import { isSameFileNumber, fileIdentityKey } from './file-identity.mjs';
|
|
4
6
|
|
|
5
7
|
function causeMessage(cause) {
|
|
6
8
|
return cause instanceof Error ? cause.message : String(cause);
|
|
7
9
|
}
|
|
10
|
+
function statusOf(filePath) {
|
|
11
|
+
try {
|
|
12
|
+
const status = fs.statSync(filePath, { bigint: true });
|
|
13
|
+
return { device: status.dev, file: status.ino };
|
|
14
|
+
} catch {
|
|
15
|
+
return void 0;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function realPathOf(filePath) {
|
|
19
|
+
try {
|
|
20
|
+
return fs.realpathSync.native(filePath);
|
|
21
|
+
} catch {
|
|
22
|
+
return filePath;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function entriesOf(directory) {
|
|
26
|
+
try {
|
|
27
|
+
return fs.readdirSync(directory);
|
|
28
|
+
} catch {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function linkTargetOf(filePath) {
|
|
33
|
+
try {
|
|
34
|
+
return fs.readlinkSync(filePath);
|
|
35
|
+
} catch {
|
|
36
|
+
return void 0;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const NODE_PATH_QUERIES = {
|
|
40
|
+
status: statusOf,
|
|
41
|
+
realPath: realPathOf,
|
|
42
|
+
entries: entriesOf,
|
|
43
|
+
linkTarget: linkTargetOf
|
|
44
|
+
};
|
|
45
|
+
function localPathOf(file) {
|
|
46
|
+
try {
|
|
47
|
+
return fileURLToPath(file);
|
|
48
|
+
} catch {
|
|
49
|
+
return void 0;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function fileError(code, verb, file, cause) {
|
|
53
|
+
const name = localPathOf(file) ?? file.href;
|
|
54
|
+
return new OpenAPITypesafeError({
|
|
55
|
+
code,
|
|
56
|
+
message: `Cannot ${verb} ${name}: ${causeMessage(cause)}`,
|
|
57
|
+
details: { file: name },
|
|
58
|
+
cause
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function typedWrite(file, step) {
|
|
62
|
+
try {
|
|
63
|
+
return step();
|
|
64
|
+
} catch (cause) {
|
|
65
|
+
throw fileError(ERROR_CODES.OUTPUT_WRITE_FAILED, "write", file, cause);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
8
68
|
class NodeFileSystem {
|
|
9
69
|
readText(file) {
|
|
10
70
|
try {
|
|
11
71
|
return fs.readFileSync(file, "utf8");
|
|
12
72
|
} catch (cause) {
|
|
13
|
-
throw
|
|
14
|
-
code: ERROR_CODES.OUTPUT_READ_FAILED,
|
|
15
|
-
message: `Cannot read ${fileURLToPath(file)}: ${causeMessage(cause)}`,
|
|
16
|
-
details: { file: fileURLToPath(file) },
|
|
17
|
-
cause
|
|
18
|
-
});
|
|
73
|
+
throw fileError(ERROR_CODES.OUTPUT_READ_FAILED, "read", file, cause);
|
|
19
74
|
}
|
|
20
75
|
}
|
|
21
76
|
writeText(file, contents) {
|
|
22
77
|
try {
|
|
23
|
-
|
|
24
|
-
fs.writeFileSync(file, contents, "utf8");
|
|
78
|
+
writeFileAt(fileURLToPath(file), contents, NODE_PATH_QUERIES);
|
|
25
79
|
} catch (cause) {
|
|
26
|
-
throw
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
80
|
+
throw fileError(ERROR_CODES.OUTPUT_WRITE_FAILED, "write", file, cause);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
claimFile(file) {
|
|
84
|
+
const claim = typedWrite(file, () => claimFileAt(fileURLToPath(file), NODE_PATH_QUERIES));
|
|
85
|
+
return {
|
|
86
|
+
identity: claim.identity,
|
|
87
|
+
release: () => typedWrite(file, () => claim.release())
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
isDirectory(file) {
|
|
91
|
+
try {
|
|
92
|
+
return fs.statSync(file).isDirectory();
|
|
93
|
+
} catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
isSameFile(left, right) {
|
|
98
|
+
const leftPath = fileURLToPath(left);
|
|
99
|
+
const rightPath = fileURLToPath(right);
|
|
100
|
+
if (leftPath === rightPath) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
const leftStatus = statusOf(leftPath);
|
|
104
|
+
const rightStatus = statusOf(rightPath);
|
|
105
|
+
if (leftStatus && rightStatus && isSameFileNumber(leftStatus, rightStatus)) {
|
|
106
|
+
return true;
|
|
32
107
|
}
|
|
108
|
+
return fileIdentityKey(leftPath, NODE_PATH_QUERIES) === fileIdentityKey(rightPath, NODE_PATH_QUERIES);
|
|
33
109
|
}
|
|
34
110
|
}
|
|
35
111
|
function createNodeFileSystem() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-file-system.mjs","sources":["../../../src/adapters/node-file-system/node-file-system.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport type {
|
|
1
|
+
{"version":3,"file":"node-file-system.mjs","sources":["../../../src/adapters/node-file-system/node-file-system.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport type {\n ClaimedFile,\n DirectoryCheck,\n FileClaims,\n FileIdentity,\n FileReader,\n FileWriter,\n} from \"../../application/ports/file-system.js\";\nimport { ERROR_CODES, type ErrorCode, OpenAPITypesafeError } from \"../../domain/errors.js\";\nimport { claimFileAt, writeFileAt } from \"./file-claims.js\";\nimport {\n type FileNumber,\n fileIdentityKey,\n isSameFileNumber,\n type PathQueries,\n} from \"./file-identity.js\";\n\n/** The file ports on Node's `fs`, with the failures as typed errors (ADR-011). */\n\nfunction causeMessage(cause: unknown): string {\n return cause instanceof Error ? cause.message : String(cause);\n}\n\n/**\n * The file number of a path, or undefined when it cannot be read. A missing output is the common\n * case; any other failure (no access, a file used as a directory) is reported by the read or write\n * that follows, so the identity check does not report it a second time.\n */\nfunction statusOf(filePath: string): FileNumber | undefined {\n try {\n const status = fs.statSync(filePath, { bigint: true });\n return { device: status.dev, file: status.ino };\n } catch {\n return undefined;\n }\n}\n\n/**\n * The native `realpath` resolves symbolic links and returns the letter case stored on disk, which\n * the JavaScript one does not do on a case-insensitive file system. A path that vanished since its\n * status was read keeps its own spelling.\n */\nfunction realPathOf(filePath: string): string {\n try {\n return fs.realpathSync.native(filePath);\n } catch {\n return filePath;\n }\n}\n\n/** A directory that cannot be listed has no entry to tell its letter case rules by. */\nfunction entriesOf(directory: string): readonly string[] {\n try {\n return fs.readdirSync(directory);\n } catch {\n return [];\n }\n}\n\n/**\n * The target of a symbolic link, as written in it; undefined for a path that is no link or cannot\n * be read. The key then treats the path as missing, and the claim at write time decides.\n */\nfunction linkTargetOf(filePath: string): string | undefined {\n try {\n return fs.readlinkSync(filePath);\n } catch {\n return undefined;\n }\n}\n\nconst NODE_PATH_QUERIES: PathQueries = {\n status: statusOf,\n realPath: realPathOf,\n entries: entriesOf,\n linkTarget: linkTargetOf,\n};\n\n/** The path of a `file:` URL, or undefined for a URL that names no file on this platform. */\nfunction localPathOf(file: URL): string | undefined {\n try {\n return fileURLToPath(file);\n } catch {\n return undefined;\n }\n}\n\n/**\n * A failed read or write as a typed error. The location is named by its path, or by the URL when\n * it names no local file: computing the path must not throw a second, untyped error here.\n */\nfunction fileError(code: ErrorCode, verb: string, file: URL, cause: unknown): OpenAPITypesafeError {\n const name = localPathOf(file) ?? file.href;\n return new OpenAPITypesafeError({\n code,\n message: `Cannot ${verb} ${name}: ${causeMessage(cause)}`,\n details: { file: name },\n cause,\n });\n}\n\n/** Run a step that writes `file`, with its failure as `OUTPUT_WRITE_FAILED`. */\nfunction typedWrite<T>(file: URL, step: () => T): T {\n try {\n return step();\n } catch (cause) {\n throw fileError(ERROR_CODES.OUTPUT_WRITE_FAILED, \"write\", file, cause);\n }\n}\n\nclass NodeFileSystem implements FileReader, FileWriter, FileIdentity, DirectoryCheck, FileClaims {\n readText(file: URL): string {\n try {\n return fs.readFileSync(file, \"utf8\");\n } catch (cause) {\n throw fileError(ERROR_CODES.OUTPUT_READ_FAILED, \"read\", file, cause);\n }\n }\n\n writeText(file: URL, contents: string): void {\n try {\n writeFileAt(fileURLToPath(file), contents, NODE_PATH_QUERIES);\n } catch (cause) {\n throw fileError(ERROR_CODES.OUTPUT_WRITE_FAILED, \"write\", file, cause);\n }\n }\n\n claimFile(file: URL): ClaimedFile {\n const claim = typedWrite(file, () => claimFileAt(fileURLToPath(file), NODE_PATH_QUERIES));\n return {\n identity: claim.identity,\n release: () => typedWrite(file, () => claim.release()),\n };\n }\n\n isDirectory(file: URL): boolean {\n try {\n return fs.statSync(file).isDirectory();\n } catch {\n // Missing or unreadable: not a directory; the write that follows reports a failure.\n return false;\n }\n }\n\n isSameFile(left: URL, right: URL): boolean {\n const leftPath = fileURLToPath(left);\n const rightPath = fileURLToPath(right);\n if (leftPath === rightPath) {\n return true;\n }\n const leftStatus = statusOf(leftPath);\n const rightStatus = statusOf(rightPath);\n if (leftStatus && rightStatus && isSameFileNumber(leftStatus, rightStatus)) {\n return true;\n }\n return (\n fileIdentityKey(leftPath, NODE_PATH_QUERIES) === fileIdentityKey(rightPath, NODE_PATH_QUERIES)\n );\n }\n}\n\n/** File access for the CLI. */\nexport function createNodeFileSystem(): FileReader &\n FileWriter &\n FileIdentity &\n DirectoryCheck &\n FileClaims {\n return new NodeFileSystem();\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const jsonPointer = require('../../domain/openapi/json-pointer.cjs');
|
|
4
|
+
const refHolders = require('./ref-holders.cjs');
|
|
5
|
+
|
|
6
|
+
const SCHEMAS_POINTER = jsonPointer.childPointer(jsonPointer.childPointer(jsonPointer.ROOT_POINTER, "components"), "schemas");
|
|
7
|
+
function isContainer(value) {
|
|
8
|
+
return typeof value === "object" && value !== null;
|
|
9
|
+
}
|
|
10
|
+
function schemasOf(document) {
|
|
11
|
+
const components = isContainer(document) ? document.components : void 0;
|
|
12
|
+
const schemas = isContainer(components) ? components.schemas : void 0;
|
|
13
|
+
return isContainer(schemas) ? schemas : void 0;
|
|
14
|
+
}
|
|
15
|
+
function schemaKeysOf(document) {
|
|
16
|
+
return new Set(Object.keys(schemasOf(document) ?? {}));
|
|
17
|
+
}
|
|
18
|
+
function copiesIn(schemas, keysBefore) {
|
|
19
|
+
const originals = /* @__PURE__ */ new Map();
|
|
20
|
+
for (const key of keysBefore) {
|
|
21
|
+
if (Object.hasOwn(schemas, key) && !originals.has(schemas[key])) {
|
|
22
|
+
originals.set(schemas[key], key);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const copies = /* @__PURE__ */ new Map();
|
|
26
|
+
for (const [key, value] of Object.entries(schemas)) {
|
|
27
|
+
const original = keysBefore.has(key) ? void 0 : originals.get(value);
|
|
28
|
+
if (original !== void 0) {
|
|
29
|
+
copies.set(`${SCHEMAS_POINTER}/${key}`, jsonPointer.childPointer(SCHEMAS_POINTER, original));
|
|
30
|
+
delete schemas[key];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return copies;
|
|
34
|
+
}
|
|
35
|
+
function mappingsOf(document) {
|
|
36
|
+
const mappings = [];
|
|
37
|
+
const visited = /* @__PURE__ */ new WeakSet();
|
|
38
|
+
const pending = [document];
|
|
39
|
+
for (let next = pending.pop(); next !== void 0; next = pending.pop()) {
|
|
40
|
+
if (!isContainer(next) || visited.has(next)) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
visited.add(next);
|
|
44
|
+
const mapping = isContainer(next.discriminator) ? next.discriminator.mapping : void 0;
|
|
45
|
+
if (isContainer(mapping)) {
|
|
46
|
+
mappings.push(mapping);
|
|
47
|
+
}
|
|
48
|
+
for (const child of Object.values(next)) {
|
|
49
|
+
pending.push(child);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return mappings;
|
|
53
|
+
}
|
|
54
|
+
function removeBundledMappingCopies(bundled, keysBefore) {
|
|
55
|
+
const schemas = schemasOf(bundled);
|
|
56
|
+
const copies = schemas === void 0 ? /* @__PURE__ */ new Map() : copiesIn(schemas, keysBefore);
|
|
57
|
+
if (copies.size === 0) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
for (const mapping of mappingsOf(bundled)) {
|
|
61
|
+
for (const [name, value] of Object.entries(mapping)) {
|
|
62
|
+
const original = typeof value === "string" ? copies.get(value) : void 0;
|
|
63
|
+
if (original !== void 0) {
|
|
64
|
+
mapping[name] = original;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
for (const { node } of refHolders.findRefHolders(bundled)) {
|
|
69
|
+
node.$ref = copies.get(node.$ref) ?? node.$ref;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
exports.removeBundledMappingCopies = removeBundledMappingCopies;
|
|
74
|
+
exports.schemaKeysOf = schemaKeysOf;
|
|
75
|
+
//# sourceMappingURL=bundled-mapping-copies.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundled-mapping-copies.cjs","sources":["../../../src/adapters/redocly-loader/bundled-mapping-copies.ts"],"sourcesContent":["import { childPointer, ROOT_POINTER } from \"../../domain/openapi/json-pointer.js\";\nimport { findRefHolders } from \"./ref-holders.js\";\n\n/**\n * Redocly 1.x bundles every discriminator `mapping` value as if it were an external `$ref`: it\n * stores the target schema under the raw last segment of the pointer. For a local schema whose\n * key needs an escape (`a~b`, written `a~0b`; `c/d`, written `c~1d`) that segment is no existing\n * key, so the bundle added `a~0b` and `c~1d` to `components.schemas` as copies of `a~b` and\n * `c/d`, and the generator wrote each type twice. A copy is the very object of the schema it\n * copies, so a key the bundle added whose value is the value of a key the document had is removed,\n * and the mapping values and `$ref`s that name it point at the original.\n */\n\ntype Schemas = Record<string, unknown>;\n\nconst SCHEMAS_POINTER = childPointer(childPointer(ROOT_POINTER, \"components\"), \"schemas\");\n\nfunction isContainer(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction schemasOf(document: unknown): Schemas | undefined {\n const components = isContainer(document) ? document.components : undefined;\n const schemas = isContainer(components) ? components.schemas : undefined;\n return isContainer(schemas) ? schemas : undefined;\n}\n\n/** The keys of `components.schemas` before bundling: the bundle edits the document in place. */\nexport function schemaKeysOf(document: unknown): ReadonlySet<string> {\n return new Set(Object.keys(schemasOf(document) ?? {}));\n}\n\n/** Each key the bundle added as a copy, with the pointer of the schema it copies. */\nfunction copiesIn(schemas: Schemas, keysBefore: ReadonlySet<string>): Map<string, string> {\n const originals = new Map<unknown, string>();\n for (const key of keysBefore) {\n if (Object.hasOwn(schemas, key) && !originals.has(schemas[key])) {\n originals.set(schemas[key], key);\n }\n }\n const copies = new Map<string, string>();\n for (const [key, value] of Object.entries(schemas)) {\n const original = keysBefore.has(key) ? undefined : originals.get(value);\n if (original !== undefined) {\n copies.set(`${SCHEMAS_POINTER}/${key}`, childPointer(SCHEMAS_POINTER, original));\n delete schemas[key];\n }\n }\n return copies;\n}\n\n/** Every `discriminator.mapping` object of the document; the walk has its own stack. */\nfunction mappingsOf(document: unknown): Record<string, unknown>[] {\n const mappings: Record<string, unknown>[] = [];\n const visited = new WeakSet<object>();\n const pending: unknown[] = [document];\n for (let next = pending.pop(); next !== undefined; next = pending.pop()) {\n if (!isContainer(next) || visited.has(next)) {\n continue;\n }\n visited.add(next);\n const mapping = isContainer(next.discriminator) ? next.discriminator.mapping : undefined;\n if (isContainer(mapping)) {\n mappings.push(mapping);\n }\n // One push per child: spreading an array of millions of children overflows the stack.\n for (const child of Object.values(next)) {\n pending.push(child);\n }\n }\n return mappings;\n}\n\n/** Remove the bundle's copies of the document's own schemas, in place. */\nexport function removeBundledMappingCopies(\n bundled: unknown,\n keysBefore: ReadonlySet<string>,\n): void {\n const schemas = schemasOf(bundled);\n const copies = schemas === undefined ? new Map<string, string>() : copiesIn(schemas, keysBefore);\n if (copies.size === 0) {\n return;\n }\n for (const mapping of mappingsOf(bundled)) {\n for (const [name, value] of Object.entries(mapping)) {\n const original = typeof value === \"string\" ? copies.get(value) : undefined;\n if (original !== undefined) {\n mapping[name] = original;\n }\n }\n }\n for (const { node } of findRefHolders(bundled)) {\n node.$ref = copies.get(node.$ref) ?? node.$ref;\n }\n}\n"],"names":["childPointer","ROOT_POINTER","findRefHolders"],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { childPointer, ROOT_POINTER } from '../../domain/openapi/json-pointer.mjs';
|
|
2
|
+
import { findRefHolders } from './ref-holders.mjs';
|
|
3
|
+
|
|
4
|
+
const SCHEMAS_POINTER = childPointer(childPointer(ROOT_POINTER, "components"), "schemas");
|
|
5
|
+
function isContainer(value) {
|
|
6
|
+
return typeof value === "object" && value !== null;
|
|
7
|
+
}
|
|
8
|
+
function schemasOf(document) {
|
|
9
|
+
const components = isContainer(document) ? document.components : void 0;
|
|
10
|
+
const schemas = isContainer(components) ? components.schemas : void 0;
|
|
11
|
+
return isContainer(schemas) ? schemas : void 0;
|
|
12
|
+
}
|
|
13
|
+
function schemaKeysOf(document) {
|
|
14
|
+
return new Set(Object.keys(schemasOf(document) ?? {}));
|
|
15
|
+
}
|
|
16
|
+
function copiesIn(schemas, keysBefore) {
|
|
17
|
+
const originals = /* @__PURE__ */ new Map();
|
|
18
|
+
for (const key of keysBefore) {
|
|
19
|
+
if (Object.hasOwn(schemas, key) && !originals.has(schemas[key])) {
|
|
20
|
+
originals.set(schemas[key], key);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const copies = /* @__PURE__ */ new Map();
|
|
24
|
+
for (const [key, value] of Object.entries(schemas)) {
|
|
25
|
+
const original = keysBefore.has(key) ? void 0 : originals.get(value);
|
|
26
|
+
if (original !== void 0) {
|
|
27
|
+
copies.set(`${SCHEMAS_POINTER}/${key}`, childPointer(SCHEMAS_POINTER, original));
|
|
28
|
+
delete schemas[key];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return copies;
|
|
32
|
+
}
|
|
33
|
+
function mappingsOf(document) {
|
|
34
|
+
const mappings = [];
|
|
35
|
+
const visited = /* @__PURE__ */ new WeakSet();
|
|
36
|
+
const pending = [document];
|
|
37
|
+
for (let next = pending.pop(); next !== void 0; next = pending.pop()) {
|
|
38
|
+
if (!isContainer(next) || visited.has(next)) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
visited.add(next);
|
|
42
|
+
const mapping = isContainer(next.discriminator) ? next.discriminator.mapping : void 0;
|
|
43
|
+
if (isContainer(mapping)) {
|
|
44
|
+
mappings.push(mapping);
|
|
45
|
+
}
|
|
46
|
+
for (const child of Object.values(next)) {
|
|
47
|
+
pending.push(child);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return mappings;
|
|
51
|
+
}
|
|
52
|
+
function removeBundledMappingCopies(bundled, keysBefore) {
|
|
53
|
+
const schemas = schemasOf(bundled);
|
|
54
|
+
const copies = schemas === void 0 ? /* @__PURE__ */ new Map() : copiesIn(schemas, keysBefore);
|
|
55
|
+
if (copies.size === 0) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
for (const mapping of mappingsOf(bundled)) {
|
|
59
|
+
for (const [name, value] of Object.entries(mapping)) {
|
|
60
|
+
const original = typeof value === "string" ? copies.get(value) : void 0;
|
|
61
|
+
if (original !== void 0) {
|
|
62
|
+
mapping[name] = original;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
for (const { node } of findRefHolders(bundled)) {
|
|
67
|
+
node.$ref = copies.get(node.$ref) ?? node.$ref;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export { removeBundledMappingCopies, schemaKeysOf };
|
|
72
|
+
//# sourceMappingURL=bundled-mapping-copies.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundled-mapping-copies.mjs","sources":["../../../src/adapters/redocly-loader/bundled-mapping-copies.ts"],"sourcesContent":["import { childPointer, ROOT_POINTER } from \"../../domain/openapi/json-pointer.js\";\nimport { findRefHolders } from \"./ref-holders.js\";\n\n/**\n * Redocly 1.x bundles every discriminator `mapping` value as if it were an external `$ref`: it\n * stores the target schema under the raw last segment of the pointer. For a local schema whose\n * key needs an escape (`a~b`, written `a~0b`; `c/d`, written `c~1d`) that segment is no existing\n * key, so the bundle added `a~0b` and `c~1d` to `components.schemas` as copies of `a~b` and\n * `c/d`, and the generator wrote each type twice. A copy is the very object of the schema it\n * copies, so a key the bundle added whose value is the value of a key the document had is removed,\n * and the mapping values and `$ref`s that name it point at the original.\n */\n\ntype Schemas = Record<string, unknown>;\n\nconst SCHEMAS_POINTER = childPointer(childPointer(ROOT_POINTER, \"components\"), \"schemas\");\n\nfunction isContainer(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction schemasOf(document: unknown): Schemas | undefined {\n const components = isContainer(document) ? document.components : undefined;\n const schemas = isContainer(components) ? components.schemas : undefined;\n return isContainer(schemas) ? schemas : undefined;\n}\n\n/** The keys of `components.schemas` before bundling: the bundle edits the document in place. */\nexport function schemaKeysOf(document: unknown): ReadonlySet<string> {\n return new Set(Object.keys(schemasOf(document) ?? {}));\n}\n\n/** Each key the bundle added as a copy, with the pointer of the schema it copies. */\nfunction copiesIn(schemas: Schemas, keysBefore: ReadonlySet<string>): Map<string, string> {\n const originals = new Map<unknown, string>();\n for (const key of keysBefore) {\n if (Object.hasOwn(schemas, key) && !originals.has(schemas[key])) {\n originals.set(schemas[key], key);\n }\n }\n const copies = new Map<string, string>();\n for (const [key, value] of Object.entries(schemas)) {\n const original = keysBefore.has(key) ? undefined : originals.get(value);\n if (original !== undefined) {\n copies.set(`${SCHEMAS_POINTER}/${key}`, childPointer(SCHEMAS_POINTER, original));\n delete schemas[key];\n }\n }\n return copies;\n}\n\n/** Every `discriminator.mapping` object of the document; the walk has its own stack. */\nfunction mappingsOf(document: unknown): Record<string, unknown>[] {\n const mappings: Record<string, unknown>[] = [];\n const visited = new WeakSet<object>();\n const pending: unknown[] = [document];\n for (let next = pending.pop(); next !== undefined; next = pending.pop()) {\n if (!isContainer(next) || visited.has(next)) {\n continue;\n }\n visited.add(next);\n const mapping = isContainer(next.discriminator) ? next.discriminator.mapping : undefined;\n if (isContainer(mapping)) {\n mappings.push(mapping);\n }\n // One push per child: spreading an array of millions of children overflows the stack.\n for (const child of Object.values(next)) {\n pending.push(child);\n }\n }\n return mappings;\n}\n\n/** Remove the bundle's copies of the document's own schemas, in place. */\nexport function removeBundledMappingCopies(\n bundled: unknown,\n keysBefore: ReadonlySet<string>,\n): void {\n const schemas = schemasOf(bundled);\n const copies = schemas === undefined ? new Map<string, string>() : copiesIn(schemas, keysBefore);\n if (copies.size === 0) {\n return;\n }\n for (const mapping of mappingsOf(bundled)) {\n for (const [name, value] of Object.entries(mapping)) {\n const original = typeof value === \"string\" ? copies.get(value) : undefined;\n if (original !== undefined) {\n mapping[name] = original;\n }\n }\n }\n for (const { node } of findRefHolders(bundled)) {\n node.$ref = copies.get(node.$ref) ?? node.$ref;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ function repairedRef(document, ref) {
|
|
|
35
35
|
if (!resolves(document, raw)) {
|
|
36
36
|
return null;
|
|
37
37
|
}
|
|
38
|
-
return
|
|
38
|
+
return raw.reduce((pointer, key) => jsonPointer.childPointer(pointer, key), jsonPointer.ROOT_POINTER);
|
|
39
39
|
}
|
|
40
40
|
function repairBundledRefs(document) {
|
|
41
41
|
for (const { node } of refHolders.findRefHolders(document)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundled-ref-repair.cjs","sources":["../../../src/adapters/redocly-loader/bundled-ref-repair.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"bundled-ref-repair.cjs","sources":["../../../src/adapters/redocly-loader/bundled-ref-repair.ts"],"sourcesContent":["import { childPointer, parseRefPointer, ROOT_POINTER } from \"../../domain/openapi/json-pointer.js\";\nimport { findRefHolders } from \"./ref-holders.js\";\n\n/**\n * Redocly 1.x bundles an external `$ref` into a component named after the raw segment of the\n * original pointer (`a~0b`, `50%`), and writes the new local `$ref` without escaping it. Read as a\n * JSON Pointer, `#/components/schemas/a~0b` names the key `a~b`, which does not exist, and\n * `#/components/schemas/50%` is malformed, so the generator failed on it. This rewrites every\n * local `$ref` that does not resolve as a pointer but does resolve segment by segment as written.\n */\n\nconst LOCAL_REF_PREFIX = \"#/\";\n\nfunction isContainer(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction childAt(node: unknown, segment: string): unknown {\n if (!isContainer(node) || !Object.hasOwn(node, segment)) {\n return undefined;\n }\n return (node as Record<string, unknown>)[segment];\n}\n\nfunction resolves(document: unknown, segments: readonly string[]): boolean {\n return segments.reduce<unknown>(childAt, document) !== undefined;\n}\n\n/** The pointer's segments, or null when the pointer has a malformed percent escape. */\nfunction decodedSegments(ref: string): string[] | null {\n try {\n return parseRefPointer(ref);\n } catch (error) {\n if (error instanceof URIError) {\n return null;\n }\n throw error;\n }\n}\n\n/** The repaired `$ref`, or null when the ref resolves already or cannot be repaired. */\nfunction repairedRef(document: unknown, ref: string): string | null {\n const decoded = decodedSegments(ref);\n if (decoded && resolves(document, decoded)) {\n return null;\n }\n const raw = ref.slice(LOCAL_REF_PREFIX.length).split(\"/\").filter(Boolean);\n if (!resolves(document, raw)) {\n return null;\n }\n return raw.reduce((pointer, key) => childPointer(pointer, key), ROOT_POINTER);\n}\n\n/** Repair the local `$ref`s of a bundled document in place, as Redocly's bundle edits it. */\nexport function repairBundledRefs(document: unknown): void {\n for (const { node } of findRefHolders(document)) {\n if (!node.$ref.startsWith(LOCAL_REF_PREFIX)) {\n continue;\n }\n const repaired = repairedRef(document, node.$ref);\n if (repaired !== null) {\n node.$ref = repaired;\n }\n }\n}\n"],"names":["parseRefPointer","childPointer","ROOT_POINTER","findRefHolders"],"mappings":";;;;;AAWA,MAAM,gBAAA,GAAmB,IAAA;AAEzB,SAAS,YAAY,KAAA,EAAiC;AACpD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAEA,SAAS,OAAA,CAAQ,MAAe,OAAA,EAA0B;AACxD,EAAA,IAAI,CAAC,YAAY,IAAI,CAAA,IAAK,CAAC,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA,EAAG;AACvD,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAQ,KAAiC,OAAO,CAAA;AAClD;AAEA,SAAS,QAAA,CAAS,UAAmB,QAAA,EAAsC;AACzE,EAAA,OAAO,QAAA,CAAS,MAAA,CAAgB,OAAA,EAAS,QAAQ,CAAA,KAAM,MAAA;AACzD;AAGA,SAAS,gBAAgB,GAAA,EAA8B;AACrD,EAAA,IAAI;AACF,IAAA,OAAOA,4BAAgB,GAAG,CAAA;AAAA,EAC5B,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAGA,SAAS,WAAA,CAAY,UAAmB,GAAA,EAA4B;AAClE,EAAA,MAAM,OAAA,GAAU,gBAAgB,GAAG,CAAA;AACnC,EAAA,IAAI,OAAA,IAAW,QAAA,CAAS,QAAA,EAAU,OAAO,CAAA,EAAG;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,gBAAA,CAAiB,MAAM,EAAE,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,QAAA,CAAS,QAAA,EAAU,GAAG,CAAA,EAAG;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAA,CAAI,OAAO,CAAC,OAAA,EAAS,QAAQC,wBAAA,CAAa,OAAA,EAAS,GAAG,CAAA,EAAGC,wBAAY,CAAA;AAC9E;AAGO,SAAS,kBAAkB,QAAA,EAAyB;AACzD,EAAA,KAAA,MAAW,EAAE,IAAA,EAAK,IAAKC,yBAAA,CAAe,QAAQ,CAAA,EAAG;AAC/C,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,gBAAgB,CAAA,EAAG;AAC3C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,QAAA,EAAU,IAAA,CAAK,IAAI,CAAA;AAChD,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,IAAA,CAAK,IAAA,GAAO,QAAA;AAAA,IACd;AAAA,EACF;AACF;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { childPointer, ROOT_POINTER, parseRefPointer } from '../../domain/openapi/json-pointer.mjs';
|
|
2
2
|
import { findRefHolders } from './ref-holders.mjs';
|
|
3
3
|
|
|
4
4
|
const LOCAL_REF_PREFIX = "#/";
|
|
@@ -33,7 +33,7 @@ function repairedRef(document, ref) {
|
|
|
33
33
|
if (!resolves(document, raw)) {
|
|
34
34
|
return null;
|
|
35
35
|
}
|
|
36
|
-
return
|
|
36
|
+
return raw.reduce((pointer, key) => childPointer(pointer, key), ROOT_POINTER);
|
|
37
37
|
}
|
|
38
38
|
function repairBundledRefs(document) {
|
|
39
39
|
for (const { node } of findRefHolders(document)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundled-ref-repair.mjs","sources":["../../../src/adapters/redocly-loader/bundled-ref-repair.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"bundled-ref-repair.mjs","sources":["../../../src/adapters/redocly-loader/bundled-ref-repair.ts"],"sourcesContent":["import { childPointer, parseRefPointer, ROOT_POINTER } from \"../../domain/openapi/json-pointer.js\";\nimport { findRefHolders } from \"./ref-holders.js\";\n\n/**\n * Redocly 1.x bundles an external `$ref` into a component named after the raw segment of the\n * original pointer (`a~0b`, `50%`), and writes the new local `$ref` without escaping it. Read as a\n * JSON Pointer, `#/components/schemas/a~0b` names the key `a~b`, which does not exist, and\n * `#/components/schemas/50%` is malformed, so the generator failed on it. This rewrites every\n * local `$ref` that does not resolve as a pointer but does resolve segment by segment as written.\n */\n\nconst LOCAL_REF_PREFIX = \"#/\";\n\nfunction isContainer(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction childAt(node: unknown, segment: string): unknown {\n if (!isContainer(node) || !Object.hasOwn(node, segment)) {\n return undefined;\n }\n return (node as Record<string, unknown>)[segment];\n}\n\nfunction resolves(document: unknown, segments: readonly string[]): boolean {\n return segments.reduce<unknown>(childAt, document) !== undefined;\n}\n\n/** The pointer's segments, or null when the pointer has a malformed percent escape. */\nfunction decodedSegments(ref: string): string[] | null {\n try {\n return parseRefPointer(ref);\n } catch (error) {\n if (error instanceof URIError) {\n return null;\n }\n throw error;\n }\n}\n\n/** The repaired `$ref`, or null when the ref resolves already or cannot be repaired. */\nfunction repairedRef(document: unknown, ref: string): string | null {\n const decoded = decodedSegments(ref);\n if (decoded && resolves(document, decoded)) {\n return null;\n }\n const raw = ref.slice(LOCAL_REF_PREFIX.length).split(\"/\").filter(Boolean);\n if (!resolves(document, raw)) {\n return null;\n }\n return raw.reduce((pointer, key) => childPointer(pointer, key), ROOT_POINTER);\n}\n\n/** Repair the local `$ref`s of a bundled document in place, as Redocly's bundle edits it. */\nexport function repairBundledRefs(document: unknown): void {\n for (const { node } of findRefHolders(document)) {\n if (!node.$ref.startsWith(LOCAL_REF_PREFIX)) {\n continue;\n }\n const repaired = repairedRef(document, node.$ref);\n if (repaired !== null) {\n node.$ref = repaired;\n }\n }\n}\n"],"names":[],"mappings":";;;AAWA,MAAM,gBAAA,GAAmB,IAAA;AAEzB,SAAS,YAAY,KAAA,EAAiC;AACpD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAEA,SAAS,OAAA,CAAQ,MAAe,OAAA,EAA0B;AACxD,EAAA,IAAI,CAAC,YAAY,IAAI,CAAA,IAAK,CAAC,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA,EAAG;AACvD,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAQ,KAAiC,OAAO,CAAA;AAClD;AAEA,SAAS,QAAA,CAAS,UAAmB,QAAA,EAAsC;AACzE,EAAA,OAAO,QAAA,CAAS,MAAA,CAAgB,OAAA,EAAS,QAAQ,CAAA,KAAM,MAAA;AACzD;AAGA,SAAS,gBAAgB,GAAA,EAA8B;AACrD,EAAA,IAAI;AACF,IAAA,OAAO,gBAAgB,GAAG,CAAA;AAAA,EAC5B,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAGA,SAAS,WAAA,CAAY,UAAmB,GAAA,EAA4B;AAClE,EAAA,MAAM,OAAA,GAAU,gBAAgB,GAAG,CAAA;AACnC,EAAA,IAAI,OAAA,IAAW,QAAA,CAAS,QAAA,EAAU,OAAO,CAAA,EAAG;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,gBAAA,CAAiB,MAAM,EAAE,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,QAAA,CAAS,QAAA,EAAU,GAAG,CAAA,EAAG;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAA,CAAI,OAAO,CAAC,OAAA,EAAS,QAAQ,YAAA,CAAa,OAAA,EAAS,GAAG,CAAA,EAAG,YAAY,CAAA;AAC9E;AAGO,SAAS,kBAAkB,QAAA,EAAyB;AACzD,EAAA,KAAA,MAAW,EAAE,IAAA,EAAK,IAAK,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC/C,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,gBAAgB,CAAA,EAAG;AAC3C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,QAAA,EAAU,IAAA,CAAK,IAAI,CAAA;AAChD,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,IAAA,CAAK,IAAA,GAAO,QAAA;AAAA,IACd;AAAA,EACF;AACF;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const path = require('node:path');
|
|
4
|
+
const node_url = require('node:url');
|
|
5
|
+
|
|
6
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
|
|
7
|
+
|
|
8
|
+
const path__default = /*#__PURE__*/_interopDefaultCompat(path);
|
|
9
|
+
|
|
10
|
+
async function loadedDocuments(root, resolver) {
|
|
11
|
+
const settled = await Promise.allSettled(resolver.cache.values());
|
|
12
|
+
const cached = settled.flatMap((entry) => entry.status === "fulfilled" ? [entry.value] : []);
|
|
13
|
+
const bySource = /* @__PURE__ */ new Map([[root.source.absoluteRef, root.parsed]]);
|
|
14
|
+
for (const document of cached) {
|
|
15
|
+
if ("parsed" in document && !bySource.has(document.source.absoluteRef)) {
|
|
16
|
+
bySource.set(document.source.absoluteRef, document.parsed);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return [...bySource].map(([source, parsed]) => ({ source, parsed }));
|
|
20
|
+
}
|
|
21
|
+
async function localFilesRead(root, resolver, isRootAFile) {
|
|
22
|
+
const documents = await loadedDocuments(root, resolver);
|
|
23
|
+
return documents.map(({ source }) => source).filter((source) => path__default.isAbsolute(source)).filter((source) => isRootAFile || source !== root.source.absoluteRef).map((source) => node_url.pathToFileURL(source));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
exports.loadedDocuments = loadedDocuments;
|
|
27
|
+
exports.localFilesRead = localFilesRead;
|
|
28
|
+
//# sourceMappingURL=loaded-documents.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loaded-documents.cjs","sources":["../../../src/adapters/redocly-loader/loaded-documents.ts"],"sourcesContent":["import path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { BaseResolver, Document } from \"@redocly/openapi-core\";\nimport type { LoadedDocument } from \"./unsupported-keys.js\";\n\n/** The documents one load read, from the Redocly resolver's cache. */\n\n/**\n * The root document and every other document the resolver loaded, as far as they parsed. A root\n * read from a file or URL is in the resolver cache too, and is listed once. A `$ref` that failed\n * to load leaves a rejected entry in the cache, also when bundling did not need it (an example's\n * `$ref`): that entry is no document, and must not fail the listing.\n */\nexport async function loadedDocuments(\n root: Document,\n resolver: BaseResolver,\n): Promise<LoadedDocument[]> {\n const settled = await Promise.allSettled(resolver.cache.values());\n const cached = settled.flatMap((entry) => (entry.status === \"fulfilled\" ? [entry.value] : []));\n const bySource = new Map<string, unknown>([[root.source.absoluteRef, root.parsed]]);\n for (const document of cached) {\n if (\"parsed\" in document && !bySource.has(document.source.absoluteRef)) {\n bySource.set(document.source.absoluteRef, document.parsed);\n }\n }\n return [...bySource].map(([source, parsed]) => ({ source, parsed }));\n}\n\n/**\n * The local files the load read: the root, when it is a file, and every `$ref`'d file. Redocly\n * names a local document by its absolute path and a remote one by its URL. An inline root (a\n * string, object, buffer or stream) has a made-up path in the working directory, so it is left\n * out unless it was read from a file.\n */\nexport async function localFilesRead(\n root: Document,\n resolver: BaseResolver,\n isRootAFile: boolean,\n): Promise<URL[]> {\n const documents = await loadedDocuments(root, resolver);\n return documents\n .map(({ source }) => source)\n .filter((source) => path.isAbsolute(source))\n .filter((source) => isRootAFile || source !== root.source.absoluteRef)\n .map((source) => pathToFileURL(source));\n}\n"],"names":["path","pathToFileURL"],"mappings":";;;;;;;;;AAaA,eAAsB,eAAA,CACpB,MACA,QAAA,EAC2B;AAC3B,EAAA,MAAM,UAAU,MAAM,OAAA,CAAQ,WAAW,QAAA,CAAS,KAAA,CAAM,QAAQ,CAAA;AAChE,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,KAAW,KAAA,CAAM,MAAA,KAAW,WAAA,GAAc,CAAC,KAAA,CAAM,KAAK,CAAA,GAAI,EAAG,CAAA;AAC7F,EAAA,MAAM,QAAA,mBAAW,IAAI,GAAA,CAAqB,CAAC,CAAC,IAAA,CAAK,MAAA,CAAO,WAAA,EAAa,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA;AAClF,EAAA,KAAA,MAAW,YAAY,MAAA,EAAQ;AAC7B,IAAA,IAAI,QAAA,IAAY,YAAY,CAAC,QAAA,CAAS,IAAI,QAAA,CAAS,MAAA,CAAO,WAAW,CAAA,EAAG;AACtE,MAAA,QAAA,CAAS,GAAA,CAAI,QAAA,CAAS,MAAA,CAAO,WAAA,EAAa,SAAS,MAAM,CAAA;AAAA,IAC3D;AAAA,EACF;AACA,EAAA,OAAO,CAAC,GAAG,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,MAAA,EAAQ,MAAM,CAAA,MAAO,EAAE,MAAA,EAAQ,QAAO,CAAE,CAAA;AACrE;AAQA,eAAsB,cAAA,CACpB,IAAA,EACA,QAAA,EACA,WAAA,EACgB;AAChB,EAAA,MAAM,SAAA,GAAY,MAAM,eAAA,CAAgB,IAAA,EAAM,QAAQ,CAAA;AACtD,EAAA,OAAO,SAAA,CACJ,GAAA,CAAI,CAAC,EAAE,MAAA,EAAO,KAAM,MAAM,CAAA,CAC1B,MAAA,CAAO,CAAC,MAAA,KAAWA,aAAA,CAAK,WAAW,MAAM,CAAC,CAAA,CAC1C,MAAA,CAAO,CAAC,MAAA,KAAW,WAAA,IAAe,MAAA,KAAW,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,CACpE,GAAA,CAAI,CAAC,MAAA,KAAWC,sBAAA,CAAc,MAAM,CAAC,CAAA;AAC1C;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { pathToFileURL } from 'node:url';
|
|
3
|
+
|
|
4
|
+
async function loadedDocuments(root, resolver) {
|
|
5
|
+
const settled = await Promise.allSettled(resolver.cache.values());
|
|
6
|
+
const cached = settled.flatMap((entry) => entry.status === "fulfilled" ? [entry.value] : []);
|
|
7
|
+
const bySource = /* @__PURE__ */ new Map([[root.source.absoluteRef, root.parsed]]);
|
|
8
|
+
for (const document of cached) {
|
|
9
|
+
if ("parsed" in document && !bySource.has(document.source.absoluteRef)) {
|
|
10
|
+
bySource.set(document.source.absoluteRef, document.parsed);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return [...bySource].map(([source, parsed]) => ({ source, parsed }));
|
|
14
|
+
}
|
|
15
|
+
async function localFilesRead(root, resolver, isRootAFile) {
|
|
16
|
+
const documents = await loadedDocuments(root, resolver);
|
|
17
|
+
return documents.map(({ source }) => source).filter((source) => path.isAbsolute(source)).filter((source) => isRootAFile || source !== root.source.absoluteRef).map((source) => pathToFileURL(source));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { loadedDocuments, localFilesRead };
|
|
21
|
+
//# sourceMappingURL=loaded-documents.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loaded-documents.mjs","sources":["../../../src/adapters/redocly-loader/loaded-documents.ts"],"sourcesContent":["import path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { BaseResolver, Document } from \"@redocly/openapi-core\";\nimport type { LoadedDocument } from \"./unsupported-keys.js\";\n\n/** The documents one load read, from the Redocly resolver's cache. */\n\n/**\n * The root document and every other document the resolver loaded, as far as they parsed. A root\n * read from a file or URL is in the resolver cache too, and is listed once. A `$ref` that failed\n * to load leaves a rejected entry in the cache, also when bundling did not need it (an example's\n * `$ref`): that entry is no document, and must not fail the listing.\n */\nexport async function loadedDocuments(\n root: Document,\n resolver: BaseResolver,\n): Promise<LoadedDocument[]> {\n const settled = await Promise.allSettled(resolver.cache.values());\n const cached = settled.flatMap((entry) => (entry.status === \"fulfilled\" ? [entry.value] : []));\n const bySource = new Map<string, unknown>([[root.source.absoluteRef, root.parsed]]);\n for (const document of cached) {\n if (\"parsed\" in document && !bySource.has(document.source.absoluteRef)) {\n bySource.set(document.source.absoluteRef, document.parsed);\n }\n }\n return [...bySource].map(([source, parsed]) => ({ source, parsed }));\n}\n\n/**\n * The local files the load read: the root, when it is a file, and every `$ref`'d file. Redocly\n * names a local document by its absolute path and a remote one by its URL. An inline root (a\n * string, object, buffer or stream) has a made-up path in the working directory, so it is left\n * out unless it was read from a file.\n */\nexport async function localFilesRead(\n root: Document,\n resolver: BaseResolver,\n isRootAFile: boolean,\n): Promise<URL[]> {\n const documents = await loadedDocuments(root, resolver);\n return documents\n .map(({ source }) => source)\n .filter((source) => path.isAbsolute(source))\n .filter((source) => isRootAFile || source !== root.source.absoluteRef)\n .map((source) => pathToFileURL(source));\n}\n"],"names":[],"mappings":";;;AAaA,eAAsB,eAAA,CACpB,MACA,QAAA,EAC2B;AAC3B,EAAA,MAAM,UAAU,MAAM,OAAA,CAAQ,WAAW,QAAA,CAAS,KAAA,CAAM,QAAQ,CAAA;AAChE,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,KAAW,KAAA,CAAM,MAAA,KAAW,WAAA,GAAc,CAAC,KAAA,CAAM,KAAK,CAAA,GAAI,EAAG,CAAA;AAC7F,EAAA,MAAM,QAAA,mBAAW,IAAI,GAAA,CAAqB,CAAC,CAAC,IAAA,CAAK,MAAA,CAAO,WAAA,EAAa,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA;AAClF,EAAA,KAAA,MAAW,YAAY,MAAA,EAAQ;AAC7B,IAAA,IAAI,QAAA,IAAY,YAAY,CAAC,QAAA,CAAS,IAAI,QAAA,CAAS,MAAA,CAAO,WAAW,CAAA,EAAG;AACtE,MAAA,QAAA,CAAS,GAAA,CAAI,QAAA,CAAS,MAAA,CAAO,WAAA,EAAa,SAAS,MAAM,CAAA;AAAA,IAC3D;AAAA,EACF;AACA,EAAA,OAAO,CAAC,GAAG,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,MAAA,EAAQ,MAAM,CAAA,MAAO,EAAE,MAAA,EAAQ,QAAO,CAAE,CAAA;AACrE;AAQA,eAAsB,cAAA,CACpB,IAAA,EACA,QAAA,EACA,WAAA,EACgB;AAChB,EAAA,MAAM,SAAA,GAAY,MAAM,eAAA,CAAgB,IAAA,EAAM,QAAQ,CAAA;AACtD,EAAA,OAAO,SAAA,CACJ,GAAA,CAAI,CAAC,EAAE,MAAA,EAAO,KAAM,MAAM,CAAA,CAC1B,MAAA,CAAO,CAAC,MAAA,KAAW,IAAA,CAAK,WAAW,MAAM,CAAC,CAAA,CAC1C,MAAA,CAAO,CAAC,MAAA,KAAW,WAAA,IAAe,MAAA,KAAW,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,CACpE,GAAA,CAAI,CAAC,MAAA,KAAW,aAAA,CAAc,MAAM,CAAC,CAAA;AAC1C;;"}
|
|
@@ -4,7 +4,9 @@ const node_url = require('node:url');
|
|
|
4
4
|
const openapiCore = require('@redocly/openapi-core');
|
|
5
5
|
const stackOverflow = require('../../application/stack-overflow.cjs');
|
|
6
6
|
const warnings = require('../../domain/warnings.cjs');
|
|
7
|
+
const bundledMappingCopies = require('./bundled-mapping-copies.cjs');
|
|
7
8
|
const bundledRefRepair = require('./bundled-ref-repair.cjs');
|
|
9
|
+
const loadedDocuments = require('./loaded-documents.cjs');
|
|
8
10
|
const malformedRefs = require('./malformed-refs.cjs');
|
|
9
11
|
const refAccess = require('./ref-access.cjs');
|
|
10
12
|
const refResolutionCheck = require('./ref-resolution-check.cjs');
|
|
@@ -51,25 +53,15 @@ function sourceFilePath(source) {
|
|
|
51
53
|
throw schemaLoadErrors.loadFailedError(source.href, error);
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
|
-
async function loadedDocuments(root, resolver) {
|
|
55
|
-
const cached = await Promise.all(resolver.cache.values());
|
|
56
|
-
const bySource = /* @__PURE__ */ new Map([[root.source.absoluteRef, root.parsed]]);
|
|
57
|
-
for (const document of cached) {
|
|
58
|
-
if ("parsed" in document && !bySource.has(document.source.absoluteRef)) {
|
|
59
|
-
bySource.set(document.source.absoluteRef, document.parsed);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return [...bySource].map(([source, parsed]) => ({ source, parsed }));
|
|
63
|
-
}
|
|
64
56
|
async function rethrowDocumentError(error, root, resolver) {
|
|
65
57
|
if (error instanceof Error && error.message === refResolutionSteps.REF_CYCLE_MESSAGE) {
|
|
66
58
|
throw schemaLoadErrors.refCycleError(error);
|
|
67
59
|
}
|
|
68
60
|
if (error instanceof URIError) {
|
|
69
|
-
throw malformedRefs.malformedRefsError(malformedRefs.findMalformedRefs(await loadedDocuments(root, resolver)), error);
|
|
61
|
+
throw malformedRefs.malformedRefsError(malformedRefs.findMalformedRefs(await loadedDocuments.loadedDocuments(root, resolver)), error);
|
|
70
62
|
}
|
|
71
63
|
if (error instanceof TypeError) {
|
|
72
|
-
const keys = unsupportedKeys.findUnsupportedKeys(await loadedDocuments(root, resolver));
|
|
64
|
+
const keys = unsupportedKeys.findUnsupportedKeys(await loadedDocuments.loadedDocuments(root, resolver));
|
|
73
65
|
throw keys.length === 0 ? error : unsupportedKeys.unsupportedKeysError(keys, error);
|
|
74
66
|
}
|
|
75
67
|
throw error;
|
|
@@ -101,18 +93,23 @@ class RedoclySchemaLoader {
|
|
|
101
93
|
const document = await schemaSource.parseSchema(request.source, { absoluteRef, resolver });
|
|
102
94
|
logger.debug("Parsed schema", "redoc", now() - parseStartedAt);
|
|
103
95
|
assertOpenAPI3(document.parsed);
|
|
104
|
-
|
|
96
|
+
const bundled = await this.#lintAndBundle(document, resolver, request.shouldLint);
|
|
97
|
+
const isRootAFile = request.source instanceof URL && request.source.protocol === "file:";
|
|
98
|
+
const localFiles = await loadedDocuments.localFilesRead(document, resolver, isRootAFile);
|
|
99
|
+
return { document: bundled, localFiles };
|
|
105
100
|
}
|
|
106
101
|
#resolver(request) {
|
|
107
102
|
const { redoc, remoteRefTimeoutMs, remoteDocumentLimits } = this.#options;
|
|
108
103
|
const config = remoteFetch.resolveConfigWithAccess(redoc.resolve, {
|
|
109
104
|
timeoutMs: remoteRefTimeoutMs,
|
|
110
105
|
access: request.refAccess,
|
|
111
|
-
maxParallelFetches: remoteDocumentLimits.maxParallelFetches
|
|
106
|
+
maxParallelFetches: remoteDocumentLimits.maxParallelFetches,
|
|
107
|
+
bodyLimits: remoteDocumentLimits
|
|
112
108
|
});
|
|
113
109
|
return new refAccess.RefAccessResolver(config, {
|
|
114
110
|
access: request.refAccess,
|
|
115
|
-
maxRemoteDocuments: remoteDocumentLimits.maxDocuments
|
|
111
|
+
maxRemoteDocuments: remoteDocumentLimits.maxDocuments,
|
|
112
|
+
maxRemoteNodes: remoteDocumentLimits.maxNodes
|
|
116
113
|
});
|
|
117
114
|
}
|
|
118
115
|
async #lintAndBundle(document, resolver, shouldLint) {
|
|
@@ -135,6 +132,7 @@ class RedoclySchemaLoader {
|
|
|
135
132
|
}
|
|
136
133
|
async #bundle(document, resolver) {
|
|
137
134
|
const startedAt = this.#options.now();
|
|
135
|
+
const schemaKeys = bundledMappingCopies.schemaKeysOf(document.parsed);
|
|
138
136
|
const bundled = await openapiCore.bundle({
|
|
139
137
|
config: this.#options.redoc,
|
|
140
138
|
dereference: false,
|
|
@@ -142,6 +140,7 @@ class RedoclySchemaLoader {
|
|
|
142
140
|
externalRefResolver: resolver
|
|
143
141
|
});
|
|
144
142
|
this.#report(bundled.problems);
|
|
143
|
+
bundledMappingCopies.removeBundledMappingCopies(bundled.bundle.parsed, schemaKeys);
|
|
145
144
|
bundledRefRepair.repairBundledRefs(bundled.bundle.parsed);
|
|
146
145
|
this.#options.logger.debug("Bundled schema", "bundle", this.#options.now() - startedAt);
|
|
147
146
|
return bundled.bundle.parsed;
|