openapi-typesafe 1.0.0-rc.3 → 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-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 +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-run.cjs +2 -2
- package/dist/api/document-run.cjs.map +1 -1
- package/dist/api/document-run.mjs +2 -2
- 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 +8 -4
- package/dist/api/openapi-ts.cjs.map +1 -1
- package/dist/api/openapi-ts.mjs +8 -5
- 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/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 +40 -10
- package/dist/api/transform-schema.cjs.map +1 -1
- package/dist/api/transform-schema.mjs +41 -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/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 +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 +6 -29
- package/dist/application/transform/document/parameters.cjs.map +1 -1
- package/dist/application/transform/document/parameters.mjs +6 -29
- 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 +5 -1
- package/dist/application/transform/document/paths.cjs.map +1 -1
- package/dist/application/transform/document/paths.mjs +6 -2
- 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-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/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/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/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 +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-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-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/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 +14 -0
- package/dist/domain/output-fixes.cjs.map +1 -1
- package/dist/domain/output-fixes.mjs +14 -0
- 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/index.d.cts +22 -4
- package/dist/index.d.mts +22 -4
- package/dist/index.d.ts +22 -4
- 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 +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 +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-run.ts +4 -3
- package/src/api/legacy-utils.ts +5 -1
- package/src/api/openapi-ts.ts +20 -5
- 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 +64 -12
- 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 +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 +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 +11 -56
- 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 +6 -2
- 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-type.ts +2 -1
- 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/object-type.ts +4 -4
- 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 +4 -2
- package/src/application/transform/schema-comment.ts +5 -1
- 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/errors.ts +14 -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/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 +21 -2
- package/src/domain/url-secrets.ts +72 -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,6 +1,13 @@
|
|
|
1
|
+
import { appendAll } from "../append-all.js";
|
|
1
2
|
import { admittedPropertyValues, resolveLocalRef } from "./admitted-values.js";
|
|
2
3
|
import { isUnionMember, unionAt } from "./discriminated-union.js";
|
|
3
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
appendPointer,
|
|
6
|
+
canonicalRef,
|
|
7
|
+
escapePointerSegment,
|
|
8
|
+
parseRefPointer,
|
|
9
|
+
ROOT_POINTER,
|
|
10
|
+
} from "./json-pointer.js";
|
|
4
11
|
|
|
5
12
|
/**
|
|
6
13
|
* Discriminator members whose discriminator value their own property does not allow. By the
|
|
@@ -45,8 +52,11 @@ function refsOf(list: unknown): string[] {
|
|
|
45
52
|
);
|
|
46
53
|
}
|
|
47
54
|
|
|
55
|
+
/** A mapping value as a canonical `$ref`: Redocly writes it percent-decoded (`canonicalRef`). */
|
|
48
56
|
function mappingTarget(target: string): string {
|
|
49
|
-
return target.startsWith("#")
|
|
57
|
+
return target.startsWith("#")
|
|
58
|
+
? canonicalRef(target)
|
|
59
|
+
: `${COMPONENT_SCHEMAS}${escapePointerSegment(target)}`;
|
|
50
60
|
}
|
|
51
61
|
|
|
52
62
|
function ownerAt(node: JsonObject, pointer: () => string): Owner | null {
|
|
@@ -76,7 +86,7 @@ function pointerOf(visit: Visit): string {
|
|
|
76
86
|
for (let current: Visit | null = visit; current?.key != null; current = current.parent) {
|
|
77
87
|
segments.unshift(current.key);
|
|
78
88
|
}
|
|
79
|
-
return
|
|
89
|
+
return appendPointer(ROOT_POINTER, segments);
|
|
80
90
|
}
|
|
81
91
|
|
|
82
92
|
function childrenOf(visit: Visit): Visit[] {
|
|
@@ -101,7 +111,7 @@ function ownersIn(document: unknown): Owner[] {
|
|
|
101
111
|
if (owner !== null) {
|
|
102
112
|
found.push(owner);
|
|
103
113
|
}
|
|
104
|
-
stack
|
|
114
|
+
appendAll(stack, childrenOf(visit).reverse());
|
|
105
115
|
}
|
|
106
116
|
return found;
|
|
107
117
|
}
|
|
@@ -200,8 +210,10 @@ function membersOf(owner: Owner, search: ConflictSearch): Member[] {
|
|
|
200
210
|
const listed = owner.memberRefs.map((ref) => ({ ref, skipped: new Set([owner.pointer]) }));
|
|
201
211
|
const members = new Map<string, Member>();
|
|
202
212
|
for (const member of [...listed, ...inheritingMembers(owner, search)]) {
|
|
203
|
-
|
|
204
|
-
|
|
213
|
+
// A member may be listed by a `$ref` and found by its pointer: both name it canonically.
|
|
214
|
+
const key = canonicalRef(member.ref);
|
|
215
|
+
if (!members.has(key)) {
|
|
216
|
+
members.set(key, member);
|
|
205
217
|
}
|
|
206
218
|
}
|
|
207
219
|
return [...members.values()];
|
|
@@ -209,7 +221,9 @@ function membersOf(owner: Owner, search: ConflictSearch): Member[] {
|
|
|
209
221
|
|
|
210
222
|
function memberValues(owner: Owner, member: string): { values: string[]; isImplicit: boolean } {
|
|
211
223
|
const values = Object.entries(owner.mapping)
|
|
212
|
-
.filter(
|
|
224
|
+
.filter(
|
|
225
|
+
([, target]) => typeof target === "string" && mappingTarget(target) === canonicalRef(member),
|
|
226
|
+
)
|
|
213
227
|
.map(([key]) => key);
|
|
214
228
|
const name = parseRefPointer(member).pop() ?? "";
|
|
215
229
|
return values.length > 0 ? { values, isImplicit: false } : { values: [name], isImplicit: true };
|
|
@@ -4,6 +4,8 @@ import type { Schema } from "./schema-object.js";
|
|
|
4
4
|
|
|
5
5
|
/** The parts of an OpenAPI document that get a root type (OpenAPI 3.1 §4.8.1). */
|
|
6
6
|
export interface DocumentObject {
|
|
7
|
+
/** The OpenAPI version: `3.0.x`, `3.1.x` or `3.2.x`. */
|
|
8
|
+
readonly openapi?: string;
|
|
7
9
|
readonly paths?: PathsObject;
|
|
8
10
|
readonly webhooks?: PathsObject;
|
|
9
11
|
readonly components?: ComponentsObject;
|
|
@@ -18,19 +18,108 @@ function unescapePointerSegment(segment: string): string {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
* Escape one segment for a JSON Pointer in a `$ref` fragment: `~` → `~0
|
|
22
|
-
* `%25
|
|
23
|
-
*
|
|
21
|
+
* Escape one segment for a JSON Pointer in a `$ref` fragment: `~` → `~0` and `/` → `~1` (RFC 6901),
|
|
22
|
+
* then `%` → `%25` and `#` → `%23`, the two characters of a key that a URI fragment cannot hold as
|
|
23
|
+
* written (RFC 6901 §6, RFC 3986). Reading a pointer back percent-decodes it, so the original's
|
|
24
|
+
* unescaped `%` threw URIError for `50%` and read `a%2Fb` as `a/b` (upstream #2251, #2828), and
|
|
25
|
+
* reading starts at the first `#/`, so an unescaped key `a#` cut the pointer short.
|
|
24
26
|
*/
|
|
25
27
|
export function escapePointerSegment(segment: string): string {
|
|
26
|
-
return segment
|
|
28
|
+
return segment
|
|
29
|
+
.replaceAll("~", "~0")
|
|
30
|
+
.replaceAll("/", "~1")
|
|
31
|
+
.replaceAll("%", "%25")
|
|
32
|
+
.replaceAll("#", "%23");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** The pointer of the document root. */
|
|
36
|
+
export const ROOT_POINTER = "#";
|
|
37
|
+
|
|
38
|
+
/** A raw pointer segment; a missing one (`undefined`, `null` or empty) is skipped. */
|
|
39
|
+
export type PointerSegment = string | number | null | undefined;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Extend the pointer `base` with raw segments: document keys, such as a path, a property name or a
|
|
43
|
+
* media type, and array indexes. Each segment is escaped and never read as a `$ref`, so a key like
|
|
44
|
+
* `#/%41` stays one segment and reads back unchanged with {@link parseRefPointer}. A missing
|
|
45
|
+
* segment, such as the absent `name` of a parameter, is skipped, as the original `createRef` did,
|
|
46
|
+
* and an empty one too, because `parseRefPointer` drops it.
|
|
47
|
+
*/
|
|
48
|
+
export function appendPointer(
|
|
49
|
+
base: string | undefined,
|
|
50
|
+
segments: readonly PointerSegment[],
|
|
51
|
+
): string {
|
|
52
|
+
let pointer = pointerBase(base);
|
|
53
|
+
for (const segment of segments) {
|
|
54
|
+
if (segment !== undefined && segment !== null && segment !== "") {
|
|
55
|
+
pointer = childPointer(pointer, String(segment));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return pointer;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The pointer of the child `key` of the node at `pointer`, with `key` escaped. Unlike
|
|
63
|
+
* {@link appendPointer}, an empty key is a child too: a document walk names every key it visits.
|
|
64
|
+
*/
|
|
65
|
+
export function childPointer(pointer: string, key: string): string {
|
|
66
|
+
return `${pointer}/${escapePointerSegment(key)}`;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* A local `$ref` or `mapping` value in the form {@link appendPointer} builds, so that pointers
|
|
71
|
+
* compare as text whatever escapes the document chose: `.../a#b` and `.../a%23b` are both
|
|
72
|
+
* `.../a%23b`. Redocly writes a bundled `mapping` value percent-decoded, which is no pointer for a
|
|
73
|
+
* key with `%` (`.../50%`), so such a text is read as written. Any other text, such as an
|
|
74
|
+
* external `$ref` or a bare schema name, is returned unchanged.
|
|
75
|
+
*/
|
|
76
|
+
export function canonicalRef(ref: string): string {
|
|
77
|
+
if (!ref.startsWith(`${ROOT_POINTER}/`)) {
|
|
78
|
+
return ref;
|
|
79
|
+
}
|
|
80
|
+
return appendPointer(ROOT_POINTER, refSegments(ref));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function refSegments(ref: string): string[] {
|
|
84
|
+
try {
|
|
85
|
+
return parseRefPointer(ref);
|
|
86
|
+
} catch (error) {
|
|
87
|
+
if (!(error instanceof URIError)) {
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
return writtenSegments(ref);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** The segments of a pointer that is not percent-encoded: only `~1` and `~0` are escapes. */
|
|
95
|
+
function writtenSegments(ref: string): string[] {
|
|
96
|
+
return ref
|
|
97
|
+
.slice(ROOT_POINTER.length + 1)
|
|
98
|
+
.split("/")
|
|
99
|
+
.filter((segment) => segment.length > 0)
|
|
100
|
+
.map((segment) => segment.replaceAll("~1", "/").replaceAll("~0", "~"));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* A pointer (`#` or `#/...`) is kept as written; a missing base is the root. Any other text is a
|
|
105
|
+
* `path` given to the exported transformers, such as `/items/{id}` or `other.yaml#/a`, which the
|
|
106
|
+
* original read as a `createRef` part, so it is read the same way here.
|
|
107
|
+
*/
|
|
108
|
+
function pointerBase(base: string | undefined): string {
|
|
109
|
+
if (base === undefined || base === "") {
|
|
110
|
+
return ROOT_POINTER;
|
|
111
|
+
}
|
|
112
|
+
return base === ROOT_POINTER || base.startsWith(`${ROOT_POINTER}/`) ? base : createRef([base]);
|
|
27
113
|
}
|
|
28
114
|
|
|
29
115
|
/**
|
|
30
|
-
* Join parts into a local `$ref` (the original `createRef
|
|
31
|
-
* is
|
|
116
|
+
* Join parts into a local `$ref` (the original `createRef`, exported for 1.x by ADR-034). Empty
|
|
117
|
+
* parts are skipped. A part that contains `#/` is parsed as a `$ref` and contributes its decoded
|
|
118
|
+
* segments, so it throws URIError for a malformed percent escape; any other part is one segment.
|
|
119
|
+
* Because of that parsing, the generator does not pass document keys here: it builds pointers
|
|
120
|
+
* with {@link appendPointer}, which never parses a segment.
|
|
32
121
|
*/
|
|
33
|
-
export function createRef(parts: readonly
|
|
122
|
+
export function createRef(parts: readonly PointerSegment[]): string {
|
|
34
123
|
let ref = "#";
|
|
35
124
|
for (const part of parts) {
|
|
36
125
|
if (part === undefined || part === null || part === "") {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The schema dialect of a document. OpenAPI 3.0 Schema Objects ignore every keyword next to a
|
|
3
|
+
* `$ref` (OpenAPI 3.0.3, Reference Object). OpenAPI 3.1 and 3.2 use JSON Schema 2020-12, where a
|
|
4
|
+
* `$ref` is one keyword among the others, and all of them apply (JSON Schema Core §8.2.3.1).
|
|
5
|
+
*/
|
|
6
|
+
export const SCHEMA_DIALECTS = {
|
|
7
|
+
OPENAPI_3_0: "openapi-3.0",
|
|
8
|
+
JSON_SCHEMA_2020_12: "json-schema-2020-12",
|
|
9
|
+
} as const;
|
|
10
|
+
|
|
11
|
+
export type SchemaDialect = (typeof SCHEMA_DIALECTS)[keyof typeof SCHEMA_DIALECTS];
|
|
12
|
+
|
|
13
|
+
const OPENAPI_3_0_RE = /^3\.0(?:\.|$)/;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The dialect of a document's `openapi` version. Without a version (a schema passed to a
|
|
17
|
+
* transformer on its own) it is OpenAPI 3.0, which keeps the output the original gives.
|
|
18
|
+
*/
|
|
19
|
+
export function schemaDialectOf(openapiVersion: unknown): SchemaDialect {
|
|
20
|
+
const isOpenApi30 = typeof openapiVersion !== "string" || OPENAPI_3_0_RE.test(openapiVersion);
|
|
21
|
+
return isOpenApi30 ? SCHEMA_DIALECTS.OPENAPI_3_0 : SCHEMA_DIALECTS.JSON_SCHEMA_2020_12;
|
|
22
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { appendPointer, parseRefPointer, ROOT_POINTER } from "./json-pointer.js";
|
|
2
2
|
import { QUERYSTRING_LOCATION } from "./parameter-object.js";
|
|
3
3
|
import { type PathItemObject, pathItemOperations } from "./path-item-object.js";
|
|
4
4
|
|
|
@@ -60,7 +60,7 @@ function locatedParameters(
|
|
|
60
60
|
}
|
|
61
61
|
return parameters.flatMap((entry, index) => {
|
|
62
62
|
const parameter = resolveLocal(document, entry);
|
|
63
|
-
const pointer =
|
|
63
|
+
const pointer = appendPointer(ROOT_POINTER, [...segments, index]);
|
|
64
64
|
return isObject(parameter) ? [{ pointer, parameter }] : [];
|
|
65
65
|
});
|
|
66
66
|
}
|
|
@@ -33,6 +33,8 @@ export const FIX = {
|
|
|
33
33
|
EXPLODED_QUERY_OBJECTS: "exploded-query-objects",
|
|
34
34
|
/** `--enum` declares an enum that lists `null` without it, and the type adds `| null`. */
|
|
35
35
|
NULLABLE_ENUMS: "nullable-enums",
|
|
36
|
+
/** A parameter with `content` instead of `schema` is typed by the schema of its media type. */
|
|
37
|
+
PARAMETER_CONTENT: "parameter-content",
|
|
36
38
|
/** `--path-params-as-types` gives each `{name}` its placeholder, `{number}` included. */
|
|
37
39
|
PATH_PARAM_TYPE_NAMES: "path-param-type-names",
|
|
38
40
|
/** A `prefixItems` tuple is open unless `items` or `unevaluatedItems` closes it (2020-12). */
|
|
@@ -44,6 +46,11 @@ export const FIX = {
|
|
|
44
46
|
* points at, also where the original type compiles through an index signature.
|
|
45
47
|
*/
|
|
46
48
|
REF_POINTERS: "ref-pointers",
|
|
49
|
+
/**
|
|
50
|
+
* OpenAPI 3.1 and 3.2: keywords next to a `$ref` (`required`, `properties`) apply too, so the
|
|
51
|
+
* type is the reference intersected with them. OpenAPI 3.0 ignores them, as its spec says.
|
|
52
|
+
*/
|
|
53
|
+
REF_SIBLINGS: "ref-siblings",
|
|
47
54
|
/** Schemas of one root type name without the prefix each get an alias, the earlier numbered. */
|
|
48
55
|
ROOT_TYPE_NUMBERING: "root-type-numbering",
|
|
49
56
|
/** `unevaluatedProperties` types the keys no other keyword declares (an index signature). */
|
|
@@ -67,8 +74,20 @@ function isOutputFixName(value: unknown): value is OutputFixName {
|
|
|
67
74
|
return typeof value === "string" && KNOWN_NAMES.has(value);
|
|
68
75
|
}
|
|
69
76
|
|
|
70
|
-
/**
|
|
71
|
-
|
|
77
|
+
/**
|
|
78
|
+
* The fix names as given; fails with `OPTION_FIX_UNKNOWN` for any other value, and for a `fix`
|
|
79
|
+
* option that is no list (`fix: "all"` from JavaScript), which must not be read letter by letter.
|
|
80
|
+
*/
|
|
81
|
+
export function outputFixNamesOf(values: unknown): readonly OutputFixName[] {
|
|
82
|
+
if (!Array.isArray(values)) {
|
|
83
|
+
throw new OpenAPITypesafeError({
|
|
84
|
+
code: ERROR_CODES.OPTION_FIX_UNKNOWN,
|
|
85
|
+
message:
|
|
86
|
+
'The fix option must be a list of fix names, such as ["all"]. ' +
|
|
87
|
+
`Got ${JSON.stringify(values)}.`,
|
|
88
|
+
details: { unknown: [values], known: [...KNOWN_NAMES] },
|
|
89
|
+
});
|
|
90
|
+
}
|
|
72
91
|
const unknown = values.filter((value) => !isOutputFixName(value));
|
|
73
92
|
if (unknown.length > 0) {
|
|
74
93
|
const names = unknown.map((value) => JSON.stringify(value)).join(", ");
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URLs can reach a message: the CLI input, a `$ref`, a redirect. Messages end up in CI job logs, so
|
|
3
|
+
* the parts of a URL that carry secrets are hidden in every one (audit B2, F12): the user info
|
|
4
|
+
* (`https://user:token@host/…`), which fetch refuses anyway, and the query, which holds API keys
|
|
5
|
+
* and signatures (`?api_key=…`, `?X-Amz-Signature=…`). Which query parameters are secret cannot be
|
|
6
|
+
* told by their names, so the whole query is hidden; the path and the fragment (a JSON pointer)
|
|
7
|
+
* stay, so the message still names the document and the place in it.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A URL in a message, from its `://` to the first space, quote or angle bracket: a serialized URL
|
|
12
|
+
* percent-encodes these, and messages put them around a URL. A match takes the rest of the URL,
|
|
13
|
+
* also a later `://` in it, so the scan never starts again inside a URL; it stays linear. It ends
|
|
14
|
+
* before punctuation that closes a sentence or a parenthesis (`… x.yaml?key=1: 404`, `(… ?key=1)`),
|
|
15
|
+
* which the message puts after the URL; a hidden query would hide it too.
|
|
16
|
+
*/
|
|
17
|
+
const URL_AFTER_SCHEME = /:\/\/[^\s"'<>]*[^\s"'<>.,:;!?)]/g;
|
|
18
|
+
|
|
19
|
+
const SCHEME_SEPARATOR = "://";
|
|
20
|
+
const AUTHORITY_END = /[/?#]/;
|
|
21
|
+
const QUERY_OR_FRAGMENT = /[?#]/;
|
|
22
|
+
const QUERY_START = "?";
|
|
23
|
+
const FRAGMENT_START = "#";
|
|
24
|
+
const USER_INFO_END = "@";
|
|
25
|
+
const HIDDEN = "***";
|
|
26
|
+
|
|
27
|
+
/** The part after `://` with the user info of its authority hidden: `***@host`. */
|
|
28
|
+
function withoutUserInfo(rest: string): string {
|
|
29
|
+
const authorityEnd = rest.search(AUTHORITY_END);
|
|
30
|
+
const authority = authorityEnd === -1 ? rest : rest.slice(0, authorityEnd);
|
|
31
|
+
const userInfoEnd = authority.lastIndexOf(USER_INFO_END);
|
|
32
|
+
return userInfoEnd === -1 ? rest : `${HIDDEN}${rest.slice(userInfoEnd)}`;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** The part after `://` with its query hidden: `/x.yaml?***#/a`. */
|
|
36
|
+
function withoutQuery(rest: string): string {
|
|
37
|
+
const fragmentStart = rest.indexOf(FRAGMENT_START);
|
|
38
|
+
const beforeFragment = fragmentStart === -1 ? rest : rest.slice(0, fragmentStart);
|
|
39
|
+
const queryStart = beforeFragment.indexOf(QUERY_START);
|
|
40
|
+
if (queryStart === -1) {
|
|
41
|
+
return rest;
|
|
42
|
+
}
|
|
43
|
+
const fragment = fragmentStart === -1 ? "" : rest.slice(fragmentStart);
|
|
44
|
+
return `${rest.slice(0, queryStart + 1)}${HIDDEN}${fragment}`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** The text with the user info and the query of every URL in it replaced by `***`. */
|
|
48
|
+
export function redactUrlSecrets(text: string): string {
|
|
49
|
+
return text.replace(URL_AFTER_SCHEME, (url) => {
|
|
50
|
+
const rest = url.slice(SCHEME_SEPARATOR.length);
|
|
51
|
+
return `${SCHEME_SEPARATOR}${withoutQuery(withoutUserInfo(rest))}`;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Text that starts like a URL but does not parse as one (`http://user:a/b@host/x`), with what may
|
|
57
|
+
* be secret hidden. Without a parse there is no telling where the authority ends, so everything
|
|
58
|
+
* from the `://` to the last `@` before the query counts as user info; the query is hidden as in
|
|
59
|
+
* `redactUrlSecrets`.
|
|
60
|
+
*/
|
|
61
|
+
export function redactUnparsedUrl(text: string): string {
|
|
62
|
+
const separator = text.indexOf(SCHEME_SEPARATOR);
|
|
63
|
+
if (separator === -1) {
|
|
64
|
+
return text;
|
|
65
|
+
}
|
|
66
|
+
const rest = text.slice(separator + SCHEME_SEPARATOR.length);
|
|
67
|
+
const queryOrFragment = rest.search(QUERY_OR_FRAGMENT);
|
|
68
|
+
const beforeQuery = queryOrFragment === -1 ? rest : rest.slice(0, queryOrFragment);
|
|
69
|
+
const userInfoEnd = beforeQuery.lastIndexOf(USER_INFO_END);
|
|
70
|
+
const shown = userInfoEnd === -1 ? rest : `${HIDDEN}${rest.slice(userInfoEnd)}`;
|
|
71
|
+
return `${text.slice(0, separator)}${SCHEME_SEPARATOR}${withoutQuery(shown)}`;
|
|
72
|
+
}
|
|
@@ -70,7 +70,7 @@ export interface OpenAPITSBaseOptions {
|
|
|
70
70
|
* still fail the run.
|
|
71
71
|
*/
|
|
72
72
|
lint?: boolean;
|
|
73
|
-
/** (
|
|
73
|
+
/** Hide warnings (default: false). Every line of the logger goes to stderr, never to stdout. */
|
|
74
74
|
silent?: boolean;
|
|
75
75
|
/** Accepted for compatibility with openapi-typescript; not read. */
|
|
76
76
|
version?: number;
|
package/dist/cli/main.d.cts
DELETED
package/dist/cli/main.d.mts
DELETED
package/dist/cli/main.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const URL_USER_INFO = /:\/\/[^\s/?#@]*@/g;
|
|
4
|
-
const REDACTED_USER_INFO = "://***@";
|
|
5
|
-
function redactUrlCredentials(text) {
|
|
6
|
-
return text.replace(URL_USER_INFO, () => REDACTED_USER_INFO);
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
exports.redactUrlCredentials = redactUrlCredentials;
|
|
10
|
-
//# sourceMappingURL=url-credentials.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"url-credentials.cjs","sources":["../../src/domain/url-credentials.ts"],"sourcesContent":["/**\n * URLs with user info (`https://user:token@host/…`) can reach a message: the CLI input, a `$ref`,\n * a redirect. Messages end up in CI job logs, so the user info is hidden in every one (audit B2,\n * F12). Fetch refuses such URLs anyway, so a message never needs the credentials.\n */\n\n/**\n * The user info after a scheme: everything up to an `@` that comes before the end of the\n * authority. The class stops at `/`, so a scan never runs past the next `://`; it stays linear.\n */\nconst URL_USER_INFO = /:\\/\\/[^\\s/?#@]*@/g;\n\nconst REDACTED_USER_INFO = \"://***@\";\n\n/** The text with the user info of every URL in it replaced by `***`. */\nexport function redactUrlCredentials(text: string): string {\n return text.replace(URL_USER_INFO, () => REDACTED_USER_INFO);\n}\n"],"names":[],"mappings":";;AAUA,MAAM,aAAA,GAAgB,mBAAA;AAEtB,MAAM,kBAAA,GAAqB,SAAA;AAGpB,SAAS,qBAAqB,IAAA,EAAsB;AACzD,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe,MAAM,kBAAkB,CAAA;AAC7D;;"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
const URL_USER_INFO = /:\/\/[^\s/?#@]*@/g;
|
|
2
|
-
const REDACTED_USER_INFO = "://***@";
|
|
3
|
-
function redactUrlCredentials(text) {
|
|
4
|
-
return text.replace(URL_USER_INFO, () => REDACTED_USER_INFO);
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export { redactUrlCredentials };
|
|
8
|
-
//# sourceMappingURL=url-credentials.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"url-credentials.mjs","sources":["../../src/domain/url-credentials.ts"],"sourcesContent":["/**\n * URLs with user info (`https://user:token@host/…`) can reach a message: the CLI input, a `$ref`,\n * a redirect. Messages end up in CI job logs, so the user info is hidden in every one (audit B2,\n * F12). Fetch refuses such URLs anyway, so a message never needs the credentials.\n */\n\n/**\n * The user info after a scheme: everything up to an `@` that comes before the end of the\n * authority. The class stops at `/`, so a scan never runs past the next `://`; it stays linear.\n */\nconst URL_USER_INFO = /:\\/\\/[^\\s/?#@]*@/g;\n\nconst REDACTED_USER_INFO = \"://***@\";\n\n/** The text with the user info of every URL in it replaced by `***`. */\nexport function redactUrlCredentials(text: string): string {\n return text.replace(URL_USER_INFO, () => REDACTED_USER_INFO);\n}\n"],"names":[],"mappings":"AAUA,MAAM,aAAA,GAAgB,mBAAA;AAEtB,MAAM,kBAAA,GAAqB,SAAA;AAGpB,SAAS,qBAAqB,IAAA,EAAsB;AACzD,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe,MAAM,kBAAkB,CAAA;AAC7D;;"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* URLs with user info (`https://user:token@host/…`) can reach a message: the CLI input, a `$ref`,
|
|
3
|
-
* a redirect. Messages end up in CI job logs, so the user info is hidden in every one (audit B2,
|
|
4
|
-
* F12). Fetch refuses such URLs anyway, so a message never needs the credentials.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* The user info after a scheme: everything up to an `@` that comes before the end of the
|
|
9
|
-
* authority. The class stops at `/`, so a scan never runs past the next `://`; it stays linear.
|
|
10
|
-
*/
|
|
11
|
-
const URL_USER_INFO = /:\/\/[^\s/?#@]*@/g;
|
|
12
|
-
|
|
13
|
-
const REDACTED_USER_INFO = "://***@";
|
|
14
|
-
|
|
15
|
-
/** The text with the user info of every URL in it replaced by `***`. */
|
|
16
|
-
export function redactUrlCredentials(text: string): string {
|
|
17
|
-
return text.replace(URL_USER_INFO, () => REDACTED_USER_INFO);
|
|
18
|
-
}
|