openapi-typesafe 1.0.0-rc.3 → 1.0.0-rc.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1972 -0
- package/dist/adapters/node-file-system/file-claims.cjs +105 -0
- package/dist/adapters/node-file-system/file-claims.cjs.map +1 -0
- package/dist/adapters/node-file-system/file-claims.mjs +95 -0
- package/dist/adapters/node-file-system/file-claims.mjs.map +1 -0
- package/dist/adapters/node-file-system/file-identity.cjs +82 -0
- package/dist/adapters/node-file-system/file-identity.cjs.map +1 -0
- package/dist/adapters/node-file-system/file-identity.mjs +74 -0
- package/dist/adapters/node-file-system/file-identity.mjs.map +1 -0
- package/dist/adapters/node-file-system/node-file-system.cjs +97 -14
- package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -1
- package/dist/adapters/node-file-system/node-file-system.mjs +97 -14
- package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -1
- package/dist/adapters/pipe-safe-writer/pipe-safe-writer.cjs +19 -0
- package/dist/adapters/pipe-safe-writer/pipe-safe-writer.cjs.map +1 -0
- package/dist/adapters/pipe-safe-writer/pipe-safe-writer.mjs +17 -0
- package/dist/adapters/pipe-safe-writer/pipe-safe-writer.mjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs +48 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs +45 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +1 -1
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -1
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +2 -2
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -1
- package/dist/adapters/redocly-loader/component-schemas.cjs +17 -0
- package/dist/adapters/redocly-loader/component-schemas.cjs.map +1 -0
- package/dist/adapters/redocly-loader/component-schemas.mjs +14 -0
- package/dist/adapters/redocly-loader/component-schemas.mjs.map +1 -0
- package/dist/adapters/redocly-loader/loaded-documents.cjs +28 -0
- package/dist/adapters/redocly-loader/loaded-documents.cjs.map +1 -0
- package/dist/adapters/redocly-loader/loaded-documents.mjs +21 -0
- package/dist/adapters/redocly-loader/loaded-documents.mjs.map +1 -0
- package/dist/adapters/redocly-loader/mapping-schema-names.cjs +22 -0
- package/dist/adapters/redocly-loader/mapping-schema-names.cjs.map +1 -0
- package/dist/adapters/redocly-loader/mapping-schema-names.mjs +20 -0
- package/dist/adapters/redocly-loader/mapping-schema-names.mjs.map +1 -0
- package/dist/adapters/redocly-loader/query-named-components.cjs +137 -0
- package/dist/adapters/redocly-loader/query-named-components.cjs.map +1 -0
- package/dist/adapters/redocly-loader/query-named-components.mjs +134 -0
- package/dist/adapters/redocly-loader/query-named-components.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +40 -29
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -1
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +38 -27
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-access.cjs +45 -4
- package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-access.mjs +45 -4
- package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-holders.cjs +52 -10
- package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-holders.mjs +53 -12
- package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-body-limit.cjs +50 -0
- package/dist/adapters/redocly-loader/remote-body-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-body-limit.mjs +48 -0
- package/dist/adapters/redocly-loader/remote-body-limit.mjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-fetch.cjs +40 -9
- package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-fetch.mjs +40 -9
- package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-node-limit.cjs +61 -0
- package/dist/adapters/redocly-loader/remote-node-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-node-limit.mjs +58 -0
- package/dist/adapters/redocly-loader/remote-node-limit.mjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-load-errors.cjs +32 -8
- package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-load-errors.mjs +32 -9
- package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-source.cjs +18 -9
- package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-source.mjs +20 -11
- package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -1
- package/dist/adapters/redocly-loader/unsupported-keys.cjs +3 -5
- package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -1
- package/dist/adapters/redocly-loader/unsupported-keys.mjs +3 -5
- package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -1
- package/dist/adapters/terminal-logger/terminal-logger.cjs +10 -4
- package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -1
- package/dist/adapters/terminal-logger/terminal-logger.mjs +10 -4
- package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -1
- package/dist/api/default-ports.cjs +14 -2
- package/dist/api/default-ports.cjs.map +1 -1
- package/dist/api/default-ports.mjs +14 -2
- package/dist/api/default-ports.mjs.map +1 -1
- package/dist/api/discriminator-enum-parent.cjs +2 -2
- package/dist/api/discriminator-enum-parent.cjs.map +1 -1
- package/dist/api/discriminator-enum-parent.mjs +3 -3
- package/dist/api/discriminator-enum-parent.mjs.map +1 -1
- package/dist/api/discriminator-other-owners.cjs +5 -3
- package/dist/api/discriminator-other-owners.cjs.map +1 -1
- package/dist/api/discriminator-other-owners.mjs +5 -3
- package/dist/api/discriminator-other-owners.mjs.map +1 -1
- package/dist/api/discriminator-patch.cjs +5 -1
- package/dist/api/discriminator-patch.cjs.map +1 -1
- package/dist/api/discriminator-patch.mjs +5 -1
- package/dist/api/discriminator-patch.mjs.map +1 -1
- package/dist/api/discriminator-scan.cjs +15 -8
- package/dist/api/discriminator-scan.cjs.map +1 -1
- package/dist/api/discriminator-scan.mjs +15 -8
- package/dist/api/discriminator-scan.mjs.map +1 -1
- package/dist/api/document-refs.cjs +16 -1
- package/dist/api/document-refs.cjs.map +1 -1
- package/dist/api/document-refs.mjs +16 -1
- package/dist/api/document-refs.mjs.map +1 -1
- package/dist/api/document-run.cjs +6 -12
- package/dist/api/document-run.cjs.map +1 -1
- package/dist/api/document-run.mjs +6 -12
- package/dist/api/document-run.mjs.map +1 -1
- package/dist/api/legacy-utils.cjs.map +1 -1
- package/dist/api/legacy-utils.mjs.map +1 -1
- package/dist/api/openapi-ts.cjs +9 -6
- package/dist/api/openapi-ts.cjs.map +1 -1
- package/dist/api/openapi-ts.mjs +10 -8
- package/dist/api/openapi-ts.mjs.map +1 -1
- package/dist/api/ref-limit-options.cjs +63 -0
- package/dist/api/ref-limit-options.cjs.map +1 -0
- package/dist/api/ref-limit-options.mjs +57 -0
- package/dist/api/ref-limit-options.mjs.map +1 -0
- package/dist/api/schema-callbacks.cjs +36 -12
- package/dist/api/schema-callbacks.cjs.map +1 -1
- package/dist/api/schema-callbacks.mjs +36 -12
- package/dist/api/schema-callbacks.mjs.map +1 -1
- package/dist/api/transform-context.cjs +7 -3
- package/dist/api/transform-context.cjs.map +1 -1
- package/dist/api/transform-context.mjs +7 -3
- package/dist/api/transform-context.mjs.map +1 -1
- package/dist/api/transform-schema.cjs +47 -10
- package/dist/api/transform-schema.cjs.map +1 -1
- package/dist/api/transform-schema.mjs +48 -11
- package/dist/api/transform-schema.mjs.map +1 -1
- package/dist/application/print/text-writer.cjs +10 -3
- package/dist/application/print/text-writer.cjs.map +1 -1
- package/dist/application/print/text-writer.mjs +10 -3
- package/dist/application/print/text-writer.mjs.map +1 -1
- package/dist/application/stack-overflow.cjs +2 -1
- package/dist/application/stack-overflow.cjs.map +1 -1
- package/dist/application/stack-overflow.mjs +2 -1
- package/dist/application/stack-overflow.mjs.map +1 -1
- package/dist/application/transform/declared-value-types.cjs +36 -0
- package/dist/application/transform/declared-value-types.cjs.map +1 -0
- package/dist/application/transform/declared-value-types.mjs +34 -0
- package/dist/application/transform/declared-value-types.mjs.map +1 -0
- package/dist/application/transform/document/components.cjs +1 -1
- package/dist/application/transform/document/components.cjs.map +1 -1
- package/dist/application/transform/document/components.mjs +2 -2
- package/dist/application/transform/document/components.mjs.map +1 -1
- package/dist/application/transform/document/declared-type-names.cjs +23 -0
- package/dist/application/transform/document/declared-type-names.cjs.map +1 -0
- package/dist/application/transform/document/declared-type-names.mjs +20 -0
- package/dist/application/transform/document/declared-type-names.mjs.map +1 -0
- package/dist/application/transform/document/defs-root.cjs +1 -1
- package/dist/application/transform/document/defs-root.cjs.map +1 -1
- package/dist/application/transform/document/defs-root.mjs +2 -2
- package/dist/application/transform/document/defs-root.mjs.map +1 -1
- package/dist/application/transform/document/document.cjs +7 -2
- package/dist/application/transform/document/document.cjs.map +1 -1
- package/dist/application/transform/document/document.mjs +6 -3
- package/dist/application/transform/document/document.mjs.map +1 -1
- package/dist/application/transform/document/enum-names-given-back.cjs +62 -0
- package/dist/application/transform/document/enum-names-given-back.cjs.map +1 -0
- package/dist/application/transform/document/enum-names-given-back.mjs +58 -0
- package/dist/application/transform/document/enum-names-given-back.mjs.map +1 -0
- package/dist/application/transform/document/exploded-query-values.cjs +63 -0
- package/dist/application/transform/document/exploded-query-values.cjs.map +1 -0
- package/dist/application/transform/document/exploded-query-values.mjs +59 -0
- package/dist/application/transform/document/exploded-query-values.mjs.map +1 -0
- package/dist/application/transform/document/global-type-references.cjs +1 -0
- package/dist/application/transform/document/global-type-references.cjs.map +1 -1
- package/dist/application/transform/document/global-type-references.mjs +1 -1
- package/dist/application/transform/document/global-type-references.mjs.map +1 -1
- package/dist/application/transform/document/header.cjs +11 -3
- package/dist/application/transform/document/header.cjs.map +1 -1
- package/dist/application/transform/document/header.mjs +10 -2
- package/dist/application/transform/document/header.mjs.map +1 -1
- package/dist/application/transform/document/media-type.cjs +2 -2
- package/dist/application/transform/document/media-type.cjs.map +1 -1
- package/dist/application/transform/document/media-type.mjs +3 -3
- package/dist/application/transform/document/media-type.mjs.map +1 -1
- package/dist/application/transform/document/operation-keys-written.cjs +26 -0
- package/dist/application/transform/document/operation-keys-written.cjs.map +1 -0
- package/dist/application/transform/document/operation-keys-written.mjs +24 -0
- package/dist/application/transform/document/operation-keys-written.mjs.map +1 -0
- package/dist/application/transform/document/operation.cjs +1 -1
- package/dist/application/transform/document/operation.cjs.map +1 -1
- package/dist/application/transform/document/operation.mjs +2 -2
- package/dist/application/transform/document/operation.mjs.map +1 -1
- package/dist/application/transform/document/parameter-entries.cjs +34 -0
- package/dist/application/transform/document/parameter-entries.cjs.map +1 -0
- package/dist/application/transform/document/parameter-entries.mjs +30 -0
- package/dist/application/transform/document/parameter-entries.mjs.map +1 -0
- package/dist/application/transform/document/parameter.cjs +12 -4
- package/dist/application/transform/document/parameter.cjs.map +1 -1
- package/dist/application/transform/document/parameter.mjs +13 -5
- package/dist/application/transform/document/parameter.mjs.map +1 -1
- package/dist/application/transform/document/parameters.cjs +29 -34
- package/dist/application/transform/document/parameters.cjs.map +1 -1
- package/dist/application/transform/document/parameters.mjs +29 -34
- package/dist/application/transform/document/parameters.mjs.map +1 -1
- package/dist/application/transform/document/path-item.cjs +15 -17
- package/dist/application/transform/document/path-item.cjs.map +1 -1
- package/dist/application/transform/document/path-item.mjs +15 -19
- package/dist/application/transform/document/path-item.mjs.map +1 -1
- package/dist/application/transform/document/path-template-key.cjs +84 -0
- package/dist/application/transform/document/path-template-key.cjs.map +1 -0
- package/dist/application/transform/document/path-template-key.mjs +79 -0
- package/dist/application/transform/document/path-template-key.mjs.map +1 -0
- package/dist/application/transform/document/path-template-refs.cjs +70 -0
- package/dist/application/transform/document/path-template-refs.cjs.map +1 -0
- package/dist/application/transform/document/path-template-refs.mjs +67 -0
- package/dist/application/transform/document/path-template-refs.mjs.map +1 -0
- package/dist/application/transform/document/paths-enum.cjs +8 -6
- package/dist/application/transform/document/paths-enum.cjs.map +1 -1
- package/dist/application/transform/document/paths-enum.mjs +8 -7
- package/dist/application/transform/document/paths-enum.mjs.map +1 -1
- package/dist/application/transform/document/paths.cjs +43 -67
- package/dist/application/transform/document/paths.cjs.map +1 -1
- package/dist/application/transform/document/paths.mjs +42 -68
- package/dist/application/transform/document/paths.mjs.map +1 -1
- package/dist/application/transform/document/referenced-parameter.cjs +80 -0
- package/dist/application/transform/document/referenced-parameter.cjs.map +1 -0
- package/dist/application/transform/document/referenced-parameter.mjs +78 -0
- package/dist/application/transform/document/referenced-parameter.mjs.map +1 -0
- package/dist/application/transform/document/request-body.cjs +1 -1
- package/dist/application/transform/document/request-body.cjs.map +1 -1
- package/dist/application/transform/document/request-body.mjs +2 -2
- package/dist/application/transform/document/request-body.mjs.map +1 -1
- package/dist/application/transform/document/response.cjs +2 -2
- package/dist/application/transform/document/response.cjs.map +1 -1
- package/dist/application/transform/document/response.mjs +3 -3
- package/dist/application/transform/document/response.mjs.map +1 -1
- package/dist/application/transform/document/responses.cjs +1 -1
- package/dist/application/transform/document/responses.cjs.map +1 -1
- package/dist/application/transform/document/responses.mjs +2 -2
- package/dist/application/transform/document/responses.mjs.map +1 -1
- package/dist/application/transform/document/root-type-aliases.cjs +8 -23
- package/dist/application/transform/document/root-type-aliases.cjs.map +1 -1
- package/dist/application/transform/document/root-type-aliases.mjs +8 -24
- package/dist/application/transform/document/root-type-aliases.mjs.map +1 -1
- package/dist/application/transform/document/type-resolution.cjs +3 -1
- package/dist/application/transform/document/type-resolution.cjs.map +1 -1
- package/dist/application/transform/document/type-resolution.mjs +3 -1
- package/dist/application/transform/document/type-resolution.mjs.map +1 -1
- package/dist/application/transform/document/webhooks.cjs +10 -3
- package/dist/application/transform/document/webhooks.cjs.map +1 -1
- package/dist/application/transform/document/webhooks.mjs +10 -3
- package/dist/application/transform/document/webhooks.mjs.map +1 -1
- package/dist/application/transform/footer/document-footer.cjs +16 -5
- package/dist/application/transform/footer/document-footer.cjs.map +1 -1
- package/dist/application/transform/footer/document-footer.mjs +16 -5
- package/dist/application/transform/footer/document-footer.mjs.map +1 -1
- package/dist/application/transform/footer/enum-name-claims.cjs +48 -0
- package/dist/application/transform/footer/enum-name-claims.cjs.map +1 -0
- package/dist/application/transform/footer/enum-name-claims.mjs +46 -0
- package/dist/application/transform/footer/enum-name-claims.mjs.map +1 -0
- package/dist/application/transform/footer/operation-keys.cjs +23 -0
- package/dist/application/transform/footer/operation-keys.cjs.map +1 -0
- package/dist/application/transform/footer/operation-keys.mjs +21 -0
- package/dist/application/transform/footer/operation-keys.mjs.map +1 -0
- package/dist/application/transform/footer/type-evaluation.cjs +4 -4
- package/dist/application/transform/footer/type-evaluation.cjs.map +1 -1
- package/dist/application/transform/footer/type-evaluation.mjs +4 -4
- package/dist/application/transform/footer/type-evaluation.mjs.map +1 -1
- package/dist/application/transform/helper-types.cjs +3 -3
- package/dist/application/transform/helper-types.cjs.map +1 -1
- package/dist/application/transform/helper-types.mjs +3 -3
- package/dist/application/transform/helper-types.mjs.map +1 -1
- package/dist/application/transform/numbered-names.cjs +9 -0
- package/dist/application/transform/numbered-names.cjs.map +1 -1
- package/dist/application/transform/numbered-names.mjs +9 -1
- package/dist/application/transform/numbered-names.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-location.cjs +5 -5
- package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-location.mjs +3 -3
- package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-shape.cjs +47 -66
- package/dist/application/transform/ref-pointer/generated-shape.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-shape.mjs +36 -50
- package/dist/application/transform/ref-pointer/generated-shape.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/inline-cycles.cjs +2 -2
- package/dist/application/transform/ref-pointer/inline-cycles.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/inline-cycles.mjs +1 -1
- package/dist/application/transform/ref-pointer/inline-cycles.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/located-node.cjs +23 -0
- package/dist/application/transform/ref-pointer/located-node.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/located-node.mjs +18 -0
- package/dist/application/transform/ref-pointer/located-node.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/original-index.cjs +68 -13
- package/dist/application/transform/ref-pointer/original-index.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/original-index.mjs +70 -15
- package/dist/application/transform/ref-pointer/original-index.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-type.cjs +2 -2
- package/dist/application/transform/ref-pointer/pointer-type.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-type.mjs +1 -1
- package/dist/application/transform/ref-pointer/pointer-type.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-walk.cjs +54 -13
- package/dist/application/transform/ref-pointer/pointer-walk.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-walk.mjs +46 -7
- package/dist/application/transform/ref-pointer/pointer-walk.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/property-shape.cjs +52 -0
- package/dist/application/transform/ref-pointer/property-shape.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/property-shape.mjs +45 -0
- package/dist/application/transform/ref-pointer/property-shape.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/typed-walk.cjs +79 -21
- package/dist/application/transform/ref-pointer/typed-walk.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/typed-walk.mjs +76 -18
- package/dist/application/transform/ref-pointer/typed-walk.mjs.map +1 -1
- package/dist/application/transform/ref-type.cjs +2 -1
- package/dist/application/transform/ref-type.cjs.map +1 -1
- package/dist/application/transform/ref-type.mjs +2 -1
- package/dist/application/transform/ref-type.mjs.map +1 -1
- package/dist/application/transform/schema/access-flags.cjs.map +1 -1
- package/dist/application/transform/schema/access-flags.mjs.map +1 -1
- package/dist/application/transform/schema/composition-type.cjs +1 -1
- package/dist/application/transform/schema/composition-type.cjs.map +1 -1
- package/dist/application/transform/schema/composition-type.mjs +2 -2
- package/dist/application/transform/schema/composition-type.mjs.map +1 -1
- package/dist/application/transform/schema/enum-rule.cjs +1 -1
- package/dist/application/transform/schema/enum-rule.cjs.map +1 -1
- package/dist/application/transform/schema/enum-rule.mjs +2 -2
- package/dist/application/transform/schema/enum-rule.mjs.map +1 -1
- package/dist/application/transform/schema/index-signature-type.cjs +21 -0
- package/dist/application/transform/schema/index-signature-type.cjs.map +1 -0
- package/dist/application/transform/schema/index-signature-type.mjs +19 -0
- package/dist/application/transform/schema/index-signature-type.mjs.map +1 -0
- package/dist/application/transform/schema/input-location.cjs +23 -0
- package/dist/application/transform/schema/input-location.cjs.map +1 -0
- package/dist/application/transform/schema/input-location.mjs +21 -0
- package/dist/application/transform/schema/input-location.mjs.map +1 -0
- package/dist/application/transform/schema/object-type.cjs +18 -8
- package/dist/application/transform/schema/object-type.cjs.map +1 -1
- package/dist/application/transform/schema/object-type.mjs +19 -9
- package/dist/application/transform/schema/object-type.mjs.map +1 -1
- package/dist/application/transform/schema/ref-siblings.cjs +47 -0
- package/dist/application/transform/schema/ref-siblings.cjs.map +1 -0
- package/dist/application/transform/schema/ref-siblings.mjs +45 -0
- package/dist/application/transform/schema/ref-siblings.mjs.map +1 -0
- package/dist/application/transform/schema/schema-transform.cjs +6 -3
- package/dist/application/transform/schema/schema-transform.cjs.map +1 -1
- package/dist/application/transform/schema/schema-transform.mjs +6 -3
- package/dist/application/transform/schema/schema-transform.mjs.map +1 -1
- package/dist/application/transform/schema/unevaluated-properties.cjs +2 -30
- package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -1
- package/dist/application/transform/schema/unevaluated-properties.mjs +3 -31
- package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -1
- package/dist/application/transform/schema-comment.cjs +5 -1
- package/dist/application/transform/schema-comment.cjs.map +1 -1
- package/dist/application/transform/schema-comment.mjs +5 -1
- package/dist/application/transform/schema-comment.mjs.map +1 -1
- package/dist/cli/api-logger.cjs +13 -0
- package/dist/cli/api-logger.cjs.map +1 -0
- package/dist/cli/api-logger.mjs +11 -0
- package/dist/cli/api-logger.mjs.map +1 -0
- package/dist/cli/api-settings.cjs +57 -9
- package/dist/cli/api-settings.cjs.map +1 -1
- package/dist/cli/api-settings.mjs +56 -11
- package/dist/cli/api-settings.mjs.map +1 -1
- package/dist/cli/api-writes.cjs +72 -0
- package/dist/cli/api-writes.cjs.map +1 -0
- package/dist/cli/api-writes.mjs +69 -0
- package/dist/cli/api-writes.mjs.map +1 -0
- package/dist/cli/cli-arguments.cjs +51 -11
- package/dist/cli/cli-arguments.cjs.map +1 -1
- package/dist/cli/cli-arguments.mjs +51 -11
- package/dist/cli/cli-arguments.mjs.map +1 -1
- package/dist/cli/cli-errors.cjs +29 -1
- package/dist/cli/cli-errors.cjs.map +1 -1
- package/dist/cli/cli-errors.mjs +29 -2
- package/dist/cli/cli-errors.mjs.map +1 -1
- package/dist/cli/cli-output.cjs +111 -4
- package/dist/cli/cli-output.cjs.map +1 -1
- package/dist/cli/cli-output.mjs +104 -5
- package/dist/cli/cli-output.mjs.map +1 -1
- package/dist/cli/main.cjs +13 -3
- package/dist/cli/main.cjs.map +1 -1
- package/dist/cli/main.mjs +14 -4
- package/dist/cli/main.mjs.map +1 -1
- package/dist/cli/redocly-apis.cjs +94 -37
- package/dist/cli/redocly-apis.cjs.map +1 -1
- package/dist/cli/redocly-apis.mjs +99 -42
- package/dist/cli/redocly-apis.mjs.map +1 -1
- package/dist/cli/ref-limits.cjs +15 -1
- package/dist/cli/ref-limits.cjs.map +1 -1
- package/dist/cli/ref-limits.mjs +15 -2
- package/dist/cli/ref-limits.mjs.map +1 -1
- package/dist/cli/run-cli.cjs +37 -14
- package/dist/cli/run-cli.cjs.map +1 -1
- package/dist/cli/run-cli.mjs +39 -16
- package/dist/cli/run-cli.mjs.map +1 -1
- package/dist/domain/append-all.cjs +10 -0
- package/dist/domain/append-all.cjs.map +1 -0
- package/dist/domain/append-all.mjs +8 -0
- package/dist/domain/append-all.mjs.map +1 -0
- package/dist/domain/cause-secrets.cjs +52 -0
- package/dist/domain/cause-secrets.cjs.map +1 -0
- package/dist/domain/cause-secrets.mjs +50 -0
- package/dist/domain/cause-secrets.mjs.map +1 -0
- package/dist/domain/errors.cjs +11 -3
- package/dist/domain/errors.cjs.map +1 -1
- package/dist/domain/errors.mjs +11 -3
- package/dist/domain/errors.mjs.map +1 -1
- package/dist/domain/ir/identifier-text.cjs.map +1 -1
- package/dist/domain/ir/identifier-text.mjs +1 -1
- package/dist/domain/ir/identifier-text.mjs.map +1 -1
- package/dist/domain/ir/ir-shape.cjs +187 -0
- package/dist/domain/ir/ir-shape.cjs.map +1 -0
- package/dist/domain/ir/ir-shape.mjs +184 -0
- package/dist/domain/ir/ir-shape.mjs.map +1 -0
- package/dist/domain/ir/newer-identifier-ranges.cjs +182 -29
- package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -1
- package/dist/domain/ir/newer-identifier-ranges.mjs +182 -29
- package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -1
- package/dist/domain/location-text.cjs +9 -0
- package/dist/domain/location-text.cjs.map +1 -0
- package/dist/domain/location-text.mjs +7 -0
- package/dist/domain/location-text.mjs.map +1 -0
- package/dist/domain/openapi/alias-expansion.cjs +3 -1
- package/dist/domain/openapi/alias-expansion.cjs.map +1 -1
- package/dist/domain/openapi/alias-expansion.mjs +3 -1
- package/dist/domain/openapi/alias-expansion.mjs.map +1 -1
- package/dist/domain/openapi/discriminated-union.cjs +3 -3
- package/dist/domain/openapi/discriminated-union.cjs.map +1 -1
- package/dist/domain/openapi/discriminated-union.mjs +4 -4
- package/dist/domain/openapi/discriminated-union.mjs.map +1 -1
- package/dist/domain/openapi/discriminator-conflicts.cjs +10 -6
- package/dist/domain/openapi/discriminator-conflicts.cjs.map +1 -1
- package/dist/domain/openapi/discriminator-conflicts.mjs +11 -7
- package/dist/domain/openapi/discriminator-conflicts.mjs.map +1 -1
- package/dist/domain/openapi/document-places.cjs +55 -0
- package/dist/domain/openapi/document-places.cjs.map +1 -0
- package/dist/domain/openapi/document-places.mjs +53 -0
- package/dist/domain/openapi/document-places.mjs.map +1 -0
- package/dist/domain/openapi/json-pointer.cjs +43 -1
- package/dist/domain/openapi/json-pointer.cjs.map +1 -1
- package/dist/domain/openapi/json-pointer.mjs +40 -2
- package/dist/domain/openapi/json-pointer.mjs.map +1 -1
- package/dist/domain/openapi/schema-dialect.cjs +15 -0
- package/dist/domain/openapi/schema-dialect.cjs.map +1 -0
- package/dist/domain/openapi/schema-dialect.mjs +12 -0
- package/dist/domain/openapi/schema-dialect.mjs.map +1 -0
- package/dist/domain/openapi/unsupported-features.cjs +1 -1
- package/dist/domain/openapi/unsupported-features.cjs.map +1 -1
- package/dist/domain/openapi/unsupported-features.mjs +2 -2
- package/dist/domain/openapi/unsupported-features.mjs.map +1 -1
- package/dist/domain/output-fixes.cjs +20 -0
- package/dist/domain/output-fixes.cjs.map +1 -1
- package/dist/domain/output-fixes.mjs +20 -0
- package/dist/domain/output-fixes.mjs.map +1 -1
- package/dist/domain/terminal-text.cjs +31 -0
- package/dist/domain/terminal-text.cjs.map +1 -0
- package/dist/domain/terminal-text.mjs +29 -0
- package/dist/domain/terminal-text.mjs.map +1 -0
- package/dist/domain/url-secrets.cjs +48 -0
- package/dist/domain/url-secrets.cjs.map +1 -0
- package/dist/domain/url-secrets.mjs +45 -0
- package/dist/domain/url-secrets.mjs.map +1 -0
- package/dist/domain/warnings.cjs +1 -0
- package/dist/domain/warnings.cjs.map +1 -1
- package/dist/domain/warnings.mjs +1 -0
- package/dist/domain/warnings.mjs.map +1 -1
- package/dist/index.d.cts +46 -20
- package/dist/index.d.mts +46 -20
- package/dist/index.d.ts +46 -20
- package/package.json +4 -5
- package/src/adapters/node-file-system/file-claims.ts +138 -0
- package/src/adapters/node-file-system/file-identity.ts +137 -0
- package/src/adapters/node-file-system/node-file-system.ts +158 -18
- package/src/adapters/pipe-safe-writer/pipe-safe-writer.ts +29 -0
- package/src/adapters/redocly-loader/bundled-mapping-copies.ts +60 -0
- package/src/adapters/redocly-loader/bundled-ref-repair.ts +2 -2
- package/src/adapters/redocly-loader/component-schemas.ts +19 -0
- package/src/adapters/redocly-loader/loaded-documents.ts +46 -0
- package/src/adapters/redocly-loader/mapping-schema-names.ts +25 -0
- package/src/adapters/redocly-loader/query-named-components.ts +201 -0
- package/src/adapters/redocly-loader/redocly-schema-loader.ts +64 -38
- package/src/adapters/redocly-loader/ref-access.ts +51 -4
- package/src/adapters/redocly-loader/ref-holders.ts +76 -15
- package/src/adapters/redocly-loader/remote-body-limit.ts +66 -0
- package/src/adapters/redocly-loader/remote-fetch.ts +85 -13
- package/src/adapters/redocly-loader/remote-node-limit.ts +102 -0
- package/src/adapters/redocly-loader/schema-load-errors.ts +52 -13
- package/src/adapters/redocly-loader/schema-source.ts +35 -11
- package/src/adapters/redocly-loader/unsupported-keys.ts +3 -7
- package/src/adapters/terminal-logger/terminal-logger.ts +17 -6
- package/src/api/default-ports.ts +33 -4
- package/src/api/discriminator-enum-parent.ts +3 -3
- package/src/api/discriminator-other-owners.ts +5 -3
- package/src/api/discriminator-patch.ts +5 -1
- package/src/api/discriminator-scan.ts +16 -8
- package/src/api/document-refs.ts +29 -1
- package/src/api/document-run.ts +10 -19
- package/src/api/legacy-utils.ts +5 -1
- package/src/api/openapi-ts.ts +26 -8
- package/src/api/ref-limit-options.ts +76 -0
- package/src/api/run-context.ts +3 -0
- package/src/api/schema-callbacks.ts +60 -17
- package/src/api/transform-context.ts +7 -3
- package/src/api/transform-schema.ts +79 -12
- package/src/application/ports/file-system.ts +47 -0
- package/src/application/ports/schema-loader.ts +11 -1
- package/src/application/print/text-writer.ts +10 -3
- package/src/application/stack-overflow.ts +9 -5
- package/src/application/transform/declared-value-types.ts +42 -0
- package/src/application/transform/document/components.ts +2 -2
- package/src/application/transform/document/declared-type-names.ts +36 -0
- package/src/application/transform/document/defs-root.ts +2 -2
- package/src/application/transform/document/document.ts +8 -5
- package/src/application/transform/document/enum-names-given-back.ts +91 -0
- package/src/application/transform/document/exploded-query-values.ts +88 -0
- package/src/application/transform/document/global-type-references.ts +1 -1
- package/src/application/transform/document/header.ts +25 -5
- package/src/application/transform/document/media-type.ts +4 -3
- package/src/application/transform/document/operation-keys-written.ts +27 -0
- package/src/application/transform/document/operation.ts +2 -2
- package/src/application/transform/document/parameter-entries.ts +70 -0
- package/src/application/transform/document/parameter.ts +21 -9
- package/src/application/transform/document/parameters.ts +56 -66
- package/src/application/transform/document/path-item.ts +16 -34
- package/src/application/transform/document/path-template-key.ts +152 -0
- package/src/application/transform/document/path-template-refs.ts +106 -0
- package/src/application/transform/document/paths-enum.ts +24 -10
- package/src/application/transform/document/paths.ts +59 -125
- package/src/application/transform/document/referenced-parameter.ts +146 -0
- package/src/application/transform/document/request-body.ts +2 -2
- package/src/application/transform/document/response.ts +3 -3
- package/src/application/transform/document/responses.ts +2 -2
- package/src/application/transform/document/root-type-aliases.ts +17 -38
- package/src/application/transform/document/type-resolution.ts +2 -1
- package/src/application/transform/document/webhooks.ts +19 -6
- package/src/application/transform/footer/document-footer.ts +36 -9
- package/src/application/transform/footer/enum-name-claims.ts +62 -0
- package/src/application/transform/footer/operation-keys.ts +28 -0
- package/src/application/transform/footer/type-evaluation.ts +4 -4
- package/src/application/transform/helper-types.ts +8 -7
- package/src/application/transform/numbered-names.ts +15 -0
- package/src/application/transform/ref-pointer/generated-location.ts +3 -3
- package/src/application/transform/ref-pointer/generated-shape.ts +67 -78
- package/src/application/transform/ref-pointer/inline-cycles.ts +1 -1
- package/src/application/transform/ref-pointer/located-node.ts +38 -0
- package/src/application/transform/ref-pointer/original-index.ts +100 -17
- package/src/application/transform/ref-pointer/pointer-type.ts +1 -1
- package/src/application/transform/ref-pointer/pointer-walk.ts +82 -8
- package/src/application/transform/ref-pointer/property-shape.ts +97 -0
- package/src/application/transform/ref-pointer/typed-walk.ts +117 -25
- package/src/application/transform/ref-type.ts +2 -1
- package/src/application/transform/schema/access-flags.ts +5 -2
- package/src/application/transform/schema/composition-type.ts +2 -2
- package/src/application/transform/schema/enum-rule.ts +6 -2
- package/src/application/transform/schema/index-signature-type.ts +31 -0
- package/src/application/transform/schema/input-location.ts +35 -0
- package/src/application/transform/schema/object-type.ts +22 -12
- package/src/application/transform/schema/ref-siblings.ts +76 -0
- package/src/application/transform/schema/schema-context.ts +3 -0
- package/src/application/transform/schema/schema-transform.ts +6 -3
- package/src/application/transform/schema/unevaluated-properties.ts +4 -44
- package/src/application/transform/schema-comment.ts +5 -1
- package/src/application/transform/transform-context.ts +5 -0
- package/src/cli/api-logger.ts +17 -0
- package/src/cli/api-settings.ts +80 -13
- package/src/cli/api-writes.ts +117 -0
- package/src/cli/cli-arguments.ts +90 -14
- package/src/cli/cli-dependencies.ts +26 -4
- package/src/cli/cli-errors.ts +42 -1
- package/src/cli/cli-output.ts +195 -15
- package/src/cli/main.ts +14 -5
- package/src/cli/redocly-apis.ts +177 -52
- package/src/cli/ref-limits.ts +21 -2
- package/src/cli/run-cli.ts +76 -15
- package/src/domain/append-all.ts +10 -0
- package/src/domain/cause-secrets.ts +86 -0
- package/src/domain/errors.ts +16 -5
- package/src/domain/ir/identifier-text.ts +6 -5
- package/src/domain/ir/ir-shape.ts +299 -0
- package/src/domain/ir/newer-identifier-ranges.ts +183 -30
- package/src/domain/location-text.ts +12 -0
- package/src/domain/openapi/alias-expansion.ts +4 -1
- package/src/domain/openapi/discriminated-union.ts +6 -4
- package/src/domain/openapi/discriminator-conflicts.ts +21 -7
- package/src/domain/openapi/document-object.ts +2 -0
- package/src/domain/openapi/document-places.ts +78 -0
- package/src/domain/openapi/json-pointer.ts +96 -7
- package/src/domain/openapi/schema-dialect.ts +22 -0
- package/src/domain/openapi/unsupported-features.ts +2 -2
- package/src/domain/output-fixes.ts +28 -2
- package/src/domain/terminal-text.ts +44 -0
- package/src/domain/url-secrets.ts +72 -0
- package/src/domain/warnings.ts +1 -0
- package/src/types/generator-options.ts +1 -1
- package/dist/cli/main.d.cts +0 -2
- package/dist/cli/main.d.mts +0 -2
- package/dist/cli/main.d.ts +0 -2
- package/dist/domain/url-credentials.cjs +0 -10
- package/dist/domain/url-credentials.cjs.map +0 -1
- package/dist/domain/url-credentials.mjs +0 -8
- package/dist/domain/url-credentials.mjs.map +0 -1
- package/src/domain/url-credentials.ts +0 -18
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"append-all.mjs","sources":["../../src/domain/append-all.ts"],"sourcesContent":["/**\n * Append every item of `items` to `target`. `target.push(...items)` passes each item as an\n * argument, and engines limit the arguments of a call (V8 throws a RangeError from about 125,000),\n * so a list as long as a document allows (an `enum`, an `anyOf`, `examples`) must not be spread.\n */\nexport function appendAll<T>(target: T[], items: Iterable<T>): void {\n for (const item of items) {\n target.push(item);\n }\n}\n"],"names":[],"mappings":"AAKO,SAAS,SAAA,CAAa,QAAa,KAAA,EAA0B;AAClE,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,EAClB;AACF;;"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const urlSecrets = require('./url-secrets.cjs');
|
|
4
|
+
|
|
5
|
+
const MAX_CAUSE_DEPTH = 8;
|
|
6
|
+
function deeper(walk, value) {
|
|
7
|
+
return { path: /* @__PURE__ */ new Set([...walk.path, value]), depth: walk.depth + 1 };
|
|
8
|
+
}
|
|
9
|
+
function redactedArray(array, walk) {
|
|
10
|
+
const inner = deeper(walk, array);
|
|
11
|
+
const items = array.map((item) => redactedValue(item, inner));
|
|
12
|
+
return items.every((item, index) => item === array[index]) ? array : items;
|
|
13
|
+
}
|
|
14
|
+
function redactedObject(value, walk) {
|
|
15
|
+
const inner = deeper(walk, value);
|
|
16
|
+
const copy = value instanceof Error ? Object.setPrototypeOf(new Error(), Object.getPrototypeOf(value)) : Object.create(Object.getPrototypeOf(value));
|
|
17
|
+
let isChanged = false;
|
|
18
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
19
|
+
const property = Reflect.get(value, key);
|
|
20
|
+
const shown = redactedValue(property, inner);
|
|
21
|
+
isChanged ||= shown !== property;
|
|
22
|
+
const enumerable = Object.getOwnPropertyDescriptor(value, key)?.enumerable === true;
|
|
23
|
+
Object.defineProperty(copy, key, {
|
|
24
|
+
value: shown,
|
|
25
|
+
enumerable,
|
|
26
|
+
writable: true,
|
|
27
|
+
configurable: true
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return isChanged ? copy : value;
|
|
31
|
+
}
|
|
32
|
+
function isOpaque(value) {
|
|
33
|
+
return typeof value === "function" || ArrayBuffer.isView(value) || value instanceof ArrayBuffer;
|
|
34
|
+
}
|
|
35
|
+
function redactedValue(value, walk) {
|
|
36
|
+
if (typeof value === "string") {
|
|
37
|
+
return urlSecrets.redactUrlSecrets(value);
|
|
38
|
+
}
|
|
39
|
+
if (typeof value !== "object" || value === null || isOpaque(value)) {
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
if (walk.path.has(value) || walk.depth >= MAX_CAUSE_DEPTH) {
|
|
43
|
+
return void 0;
|
|
44
|
+
}
|
|
45
|
+
return Array.isArray(value) ? redactedArray(value, walk) : redactedObject(value, walk);
|
|
46
|
+
}
|
|
47
|
+
function redactCauseSecrets(cause) {
|
|
48
|
+
return redactedValue(cause, { path: /* @__PURE__ */ new Set(), depth: 0 });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
exports.redactCauseSecrets = redactCauseSecrets;
|
|
52
|
+
//# sourceMappingURL=cause-secrets.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cause-secrets.cjs","sources":["../../src/domain/cause-secrets.ts"],"sourcesContent":["import { redactUrlSecrets } from \"./url-secrets.js\";\n\n/**\n * The `cause` of a typed error is shown wherever the error is: `console.error(error)` and\n * `util.inspect` print the whole chain, and error trackers send it. A lower-level error names the\n * URL it failed on (fetch refuses `https://user:token@host/…` and quotes it), and may keep it in\n * nested objects too (Redocly's parse error holds `originalError.mark.name` and\n * `source.absoluteRef`), so the chain must hide the same secrets as the message (url-secrets.ts)\n * at every depth.\n */\n\n/**\n * How deep the walk copies a cause. The data of a cause is shallow (Redocly's deepest URL is three\n * levels below the error); a value below this depth is dropped, so no secret is kept unread.\n */\nconst MAX_CAUSE_DEPTH = 8;\n\ninterface Walk {\n /** The objects on the way from the cause to the value, so a cycle is cut where it closes. */\n readonly path: ReadonlySet<object>;\n readonly depth: number;\n}\n\nfunction deeper(walk: Walk, value: object): Walk {\n return { path: new Set([...walk.path, value]), depth: walk.depth + 1 };\n}\n\n/** An array with each item hidden, or the array itself when no item holds a secret. */\nfunction redactedArray(array: readonly unknown[], walk: Walk): readonly unknown[] {\n const inner = deeper(walk, array);\n const items = array.map((item) => redactedValue(item, inner));\n return items.every((item, index) => item === array[index]) ? array : items;\n}\n\n/**\n * A copy of `value` with the same prototype, its own properties (`message`, `stack`, `code`,\n * `input`, a nested `cause` or object) with URL secrets hidden, or `value` itself when none of\n * them holds one. Each property is read through its getter (V8 keeps `stack` behind one) and\n * copied as a value.\n */\nfunction redactedObject(value: object, walk: Walk): object {\n const inner = deeper(walk, value);\n // An error is copied as a real error, so `util.inspect` and `util.types.isNativeError` treat\n // the copy as one.\n const copy: object =\n value instanceof Error\n ? Object.setPrototypeOf(new Error(), Object.getPrototypeOf(value))\n : Object.create(Object.getPrototypeOf(value) as object | null);\n let isChanged = false;\n for (const key of Reflect.ownKeys(value)) {\n const property: unknown = Reflect.get(value, key);\n const shown = redactedValue(property, inner);\n isChanged ||= shown !== property;\n const enumerable = Object.getOwnPropertyDescriptor(value, key)?.enumerable === true;\n Object.defineProperty(copy, key, {\n value: shown,\n enumerable,\n writable: true,\n configurable: true,\n });\n }\n return isChanged ? copy : value;\n}\n\n/** Binary data and functions hold no text to hide, so they are kept as they are. */\nfunction isOpaque(value: object): boolean {\n return typeof value === \"function\" || ArrayBuffer.isView(value) || value instanceof ArrayBuffer;\n}\n\nfunction redactedValue(value: unknown, walk: Walk): unknown {\n if (typeof value === \"string\") {\n return redactUrlSecrets(value);\n }\n if (typeof value !== \"object\" || value === null || isOpaque(value)) {\n return value;\n }\n if (walk.path.has(value) || walk.depth >= MAX_CAUSE_DEPTH) {\n return undefined;\n }\n return Array.isArray(value) ? redactedArray(value, walk) : redactedObject(value, walk);\n}\n\n/** The cause of a typed error with the URL secrets of its whole chain hidden. */\nexport function redactCauseSecrets(cause: unknown): unknown {\n return redactedValue(cause, { path: new Set(), depth: 0 });\n}\n"],"names":["redactUrlSecrets"],"mappings":";;;;AAeA,MAAM,eAAA,GAAkB,CAAA;AAQxB,SAAS,MAAA,CAAO,MAAY,KAAA,EAAqB;AAC/C,EAAA,OAAO,EAAE,IAAA,kBAAM,IAAI,GAAA,CAAI,CAAC,GAAG,IAAA,CAAK,IAAA,EAAM,KAAK,CAAC,CAAA,EAAG,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA,EAAE;AACvE;AAGA,SAAS,aAAA,CAAc,OAA2B,IAAA,EAAgC;AAChF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,CAAC,SAAS,aAAA,CAAc,IAAA,EAAM,KAAK,CAAC,CAAA;AAC5D,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,EAAM,KAAA,KAAU,SAAS,KAAA,CAAM,KAAK,CAAC,CAAA,GAAI,KAAA,GAAQ,KAAA;AACvE;AAQA,SAAS,cAAA,CAAe,OAAe,IAAA,EAAoB;AACzD,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AAGhC,EAAA,MAAM,OACJ,KAAA,YAAiB,KAAA,GACb,OAAO,cAAA,CAAe,IAAI,OAAM,EAAG,MAAA,CAAO,cAAA,CAAe,KAAK,CAAC,CAAA,GAC/D,MAAA,CAAO,OAAO,MAAA,CAAO,cAAA,CAAe,KAAK,CAAkB,CAAA;AACjE,EAAA,IAAI,SAAA,GAAY,KAAA;AAChB,EAAA,KAAA,MAAW,GAAA,IAAO,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxC,IAAA,MAAM,QAAA,GAAoB,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,GAAG,CAAA;AAChD,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,QAAA,EAAU,KAAK,CAAA;AAC3C,IAAA,SAAA,KAAc,KAAA,KAAU,QAAA;AACxB,IAAA,MAAM,aAAa,MAAA,CAAO,wBAAA,CAAyB,KAAA,EAAO,GAAG,GAAG,UAAA,KAAe,IAAA;AAC/E,IAAA,MAAA,CAAO,cAAA,CAAe,MAAM,GAAA,EAAK;AAAA,MAC/B,KAAA,EAAO,KAAA;AAAA,MACP,UAAA;AAAA,MACA,QAAA,EAAU,IAAA;AAAA,MACV,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH;AACA,EAAA,OAAO,YAAY,IAAA,GAAO,KAAA;AAC5B;AAGA,SAAS,SAAS,KAAA,EAAwB;AACxC,EAAA,OAAO,OAAO,KAAA,KAAU,UAAA,IAAc,YAAY,MAAA,CAAO,KAAK,KAAK,KAAA,YAAiB,WAAA;AACtF;AAEA,SAAS,aAAA,CAAc,OAAgB,IAAA,EAAqB;AAC1D,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAOA,4BAAiB,KAAK,CAAA;AAAA,EAC/B;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,IAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAClE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAS,eAAA,EAAiB;AACzD,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,aAAA,CAAc,OAAO,IAAI,CAAA,GAAI,cAAA,CAAe,KAAA,EAAO,IAAI,CAAA;AACvF;AAGO,SAAS,mBAAmB,KAAA,EAAyB;AAC1D,EAAA,OAAO,aAAA,CAAc,OAAO,EAAE,IAAA,sBAAU,GAAA,EAAI,EAAG,KAAA,EAAO,CAAA,EAAG,CAAA;AAC3D;;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { redactUrlSecrets } from './url-secrets.mjs';
|
|
2
|
+
|
|
3
|
+
const MAX_CAUSE_DEPTH = 8;
|
|
4
|
+
function deeper(walk, value) {
|
|
5
|
+
return { path: /* @__PURE__ */ new Set([...walk.path, value]), depth: walk.depth + 1 };
|
|
6
|
+
}
|
|
7
|
+
function redactedArray(array, walk) {
|
|
8
|
+
const inner = deeper(walk, array);
|
|
9
|
+
const items = array.map((item) => redactedValue(item, inner));
|
|
10
|
+
return items.every((item, index) => item === array[index]) ? array : items;
|
|
11
|
+
}
|
|
12
|
+
function redactedObject(value, walk) {
|
|
13
|
+
const inner = deeper(walk, value);
|
|
14
|
+
const copy = value instanceof Error ? Object.setPrototypeOf(new Error(), Object.getPrototypeOf(value)) : Object.create(Object.getPrototypeOf(value));
|
|
15
|
+
let isChanged = false;
|
|
16
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
17
|
+
const property = Reflect.get(value, key);
|
|
18
|
+
const shown = redactedValue(property, inner);
|
|
19
|
+
isChanged ||= shown !== property;
|
|
20
|
+
const enumerable = Object.getOwnPropertyDescriptor(value, key)?.enumerable === true;
|
|
21
|
+
Object.defineProperty(copy, key, {
|
|
22
|
+
value: shown,
|
|
23
|
+
enumerable,
|
|
24
|
+
writable: true,
|
|
25
|
+
configurable: true
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return isChanged ? copy : value;
|
|
29
|
+
}
|
|
30
|
+
function isOpaque(value) {
|
|
31
|
+
return typeof value === "function" || ArrayBuffer.isView(value) || value instanceof ArrayBuffer;
|
|
32
|
+
}
|
|
33
|
+
function redactedValue(value, walk) {
|
|
34
|
+
if (typeof value === "string") {
|
|
35
|
+
return redactUrlSecrets(value);
|
|
36
|
+
}
|
|
37
|
+
if (typeof value !== "object" || value === null || isOpaque(value)) {
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
if (walk.path.has(value) || walk.depth >= MAX_CAUSE_DEPTH) {
|
|
41
|
+
return void 0;
|
|
42
|
+
}
|
|
43
|
+
return Array.isArray(value) ? redactedArray(value, walk) : redactedObject(value, walk);
|
|
44
|
+
}
|
|
45
|
+
function redactCauseSecrets(cause) {
|
|
46
|
+
return redactedValue(cause, { path: /* @__PURE__ */ new Set(), depth: 0 });
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { redactCauseSecrets };
|
|
50
|
+
//# sourceMappingURL=cause-secrets.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cause-secrets.mjs","sources":["../../src/domain/cause-secrets.ts"],"sourcesContent":["import { redactUrlSecrets } from \"./url-secrets.js\";\n\n/**\n * The `cause` of a typed error is shown wherever the error is: `console.error(error)` and\n * `util.inspect` print the whole chain, and error trackers send it. A lower-level error names the\n * URL it failed on (fetch refuses `https://user:token@host/…` and quotes it), and may keep it in\n * nested objects too (Redocly's parse error holds `originalError.mark.name` and\n * `source.absoluteRef`), so the chain must hide the same secrets as the message (url-secrets.ts)\n * at every depth.\n */\n\n/**\n * How deep the walk copies a cause. The data of a cause is shallow (Redocly's deepest URL is three\n * levels below the error); a value below this depth is dropped, so no secret is kept unread.\n */\nconst MAX_CAUSE_DEPTH = 8;\n\ninterface Walk {\n /** The objects on the way from the cause to the value, so a cycle is cut where it closes. */\n readonly path: ReadonlySet<object>;\n readonly depth: number;\n}\n\nfunction deeper(walk: Walk, value: object): Walk {\n return { path: new Set([...walk.path, value]), depth: walk.depth + 1 };\n}\n\n/** An array with each item hidden, or the array itself when no item holds a secret. */\nfunction redactedArray(array: readonly unknown[], walk: Walk): readonly unknown[] {\n const inner = deeper(walk, array);\n const items = array.map((item) => redactedValue(item, inner));\n return items.every((item, index) => item === array[index]) ? array : items;\n}\n\n/**\n * A copy of `value` with the same prototype, its own properties (`message`, `stack`, `code`,\n * `input`, a nested `cause` or object) with URL secrets hidden, or `value` itself when none of\n * them holds one. Each property is read through its getter (V8 keeps `stack` behind one) and\n * copied as a value.\n */\nfunction redactedObject(value: object, walk: Walk): object {\n const inner = deeper(walk, value);\n // An error is copied as a real error, so `util.inspect` and `util.types.isNativeError` treat\n // the copy as one.\n const copy: object =\n value instanceof Error\n ? Object.setPrototypeOf(new Error(), Object.getPrototypeOf(value))\n : Object.create(Object.getPrototypeOf(value) as object | null);\n let isChanged = false;\n for (const key of Reflect.ownKeys(value)) {\n const property: unknown = Reflect.get(value, key);\n const shown = redactedValue(property, inner);\n isChanged ||= shown !== property;\n const enumerable = Object.getOwnPropertyDescriptor(value, key)?.enumerable === true;\n Object.defineProperty(copy, key, {\n value: shown,\n enumerable,\n writable: true,\n configurable: true,\n });\n }\n return isChanged ? copy : value;\n}\n\n/** Binary data and functions hold no text to hide, so they are kept as they are. */\nfunction isOpaque(value: object): boolean {\n return typeof value === \"function\" || ArrayBuffer.isView(value) || value instanceof ArrayBuffer;\n}\n\nfunction redactedValue(value: unknown, walk: Walk): unknown {\n if (typeof value === \"string\") {\n return redactUrlSecrets(value);\n }\n if (typeof value !== \"object\" || value === null || isOpaque(value)) {\n return value;\n }\n if (walk.path.has(value) || walk.depth >= MAX_CAUSE_DEPTH) {\n return undefined;\n }\n return Array.isArray(value) ? redactedArray(value, walk) : redactedObject(value, walk);\n}\n\n/** The cause of a typed error with the URL secrets of its whole chain hidden. */\nexport function redactCauseSecrets(cause: unknown): unknown {\n return redactedValue(cause, { path: new Set(), depth: 0 });\n}\n"],"names":[],"mappings":";;AAeA,MAAM,eAAA,GAAkB,CAAA;AAQxB,SAAS,MAAA,CAAO,MAAY,KAAA,EAAqB;AAC/C,EAAA,OAAO,EAAE,IAAA,kBAAM,IAAI,GAAA,CAAI,CAAC,GAAG,IAAA,CAAK,IAAA,EAAM,KAAK,CAAC,CAAA,EAAG,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA,EAAE;AACvE;AAGA,SAAS,aAAA,CAAc,OAA2B,IAAA,EAAgC;AAChF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,CAAC,SAAS,aAAA,CAAc,IAAA,EAAM,KAAK,CAAC,CAAA;AAC5D,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,EAAM,KAAA,KAAU,SAAS,KAAA,CAAM,KAAK,CAAC,CAAA,GAAI,KAAA,GAAQ,KAAA;AACvE;AAQA,SAAS,cAAA,CAAe,OAAe,IAAA,EAAoB;AACzD,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AAGhC,EAAA,MAAM,OACJ,KAAA,YAAiB,KAAA,GACb,OAAO,cAAA,CAAe,IAAI,OAAM,EAAG,MAAA,CAAO,cAAA,CAAe,KAAK,CAAC,CAAA,GAC/D,MAAA,CAAO,OAAO,MAAA,CAAO,cAAA,CAAe,KAAK,CAAkB,CAAA;AACjE,EAAA,IAAI,SAAA,GAAY,KAAA;AAChB,EAAA,KAAA,MAAW,GAAA,IAAO,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxC,IAAA,MAAM,QAAA,GAAoB,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,GAAG,CAAA;AAChD,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,QAAA,EAAU,KAAK,CAAA;AAC3C,IAAA,SAAA,KAAc,KAAA,KAAU,QAAA;AACxB,IAAA,MAAM,aAAa,MAAA,CAAO,wBAAA,CAAyB,KAAA,EAAO,GAAG,GAAG,UAAA,KAAe,IAAA;AAC/E,IAAA,MAAA,CAAO,cAAA,CAAe,MAAM,GAAA,EAAK;AAAA,MAC/B,KAAA,EAAO,KAAA;AAAA,MACP,UAAA;AAAA,MACA,QAAA,EAAU,IAAA;AAAA,MACV,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH;AACA,EAAA,OAAO,YAAY,IAAA,GAAO,KAAA;AAC5B;AAGA,SAAS,SAAS,KAAA,EAAwB;AACxC,EAAA,OAAO,OAAO,KAAA,KAAU,UAAA,IAAc,YAAY,MAAA,CAAO,KAAK,KAAK,KAAA,YAAiB,WAAA;AACtF;AAEA,SAAS,aAAA,CAAc,OAAgB,IAAA,EAAqB;AAC1D,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,iBAAiB,KAAK,CAAA;AAAA,EAC/B;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,IAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAClE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,IAAK,IAAA,CAAK,SAAS,eAAA,EAAiB;AACzD,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,aAAA,CAAc,OAAO,IAAI,CAAA,GAAI,cAAA,CAAe,KAAA,EAAO,IAAI,CAAA;AACvF;AAGO,SAAS,mBAAmB,KAAA,EAAyB;AAC1D,EAAA,OAAO,aAAA,CAAc,OAAO,EAAE,IAAA,sBAAU,GAAA,EAAI,EAAG,KAAA,EAAO,CAAA,EAAG,CAAA;AAC3D;;"}
|
package/dist/domain/errors.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const causeSecrets = require('./cause-secrets.cjs');
|
|
4
|
+
const urlSecrets = require('./url-secrets.cjs');
|
|
4
5
|
|
|
5
6
|
const ERROR_CODES = {
|
|
6
7
|
SCHEMA_SOURCE_EMPTY: "SCHEMA_SOURCE_EMPTY",
|
|
@@ -18,14 +19,20 @@ const ERROR_CODES = {
|
|
|
18
19
|
ENUM_NAME_EMPTY: "ENUM_NAME_EMPTY",
|
|
19
20
|
CALLBACK_RESULT_UNREADABLE: "CALLBACK_RESULT_UNREADABLE",
|
|
20
21
|
OPTION_FIX_UNKNOWN: "OPTION_FIX_UNKNOWN",
|
|
22
|
+
OPTION_INVALID: "OPTION_INVALID",
|
|
21
23
|
TYPESCRIPT_NOT_FOUND: "TYPESCRIPT_NOT_FOUND",
|
|
22
24
|
CLI_FLAG_REMOVED: "CLI_FLAG_REMOVED",
|
|
25
|
+
CLI_FLAG_INVALID: "CLI_FLAG_INVALID",
|
|
23
26
|
CLI_GLOB_UNSUPPORTED: "CLI_GLOB_UNSUPPORTED",
|
|
24
27
|
CLI_CONFIG_NOT_FOUND: "CLI_CONFIG_NOT_FOUND",
|
|
25
28
|
CLI_CONFIG_INVALID: "CLI_CONFIG_INVALID",
|
|
26
29
|
CLI_CONFIG_OUTPUT_MISSING: "CLI_CONFIG_OUTPUT_MISSING",
|
|
27
30
|
CLI_CHECK_OUTPUT_MISSING: "CLI_CHECK_OUTPUT_MISSING",
|
|
28
31
|
CLI_INPUT_MISSING: "CLI_INPUT_MISSING",
|
|
32
|
+
CLI_OUTPUT_IS_INPUT: "CLI_OUTPUT_IS_INPUT",
|
|
33
|
+
CLI_OUTPUT_DUPLICATE: "CLI_OUTPUT_DUPLICATE",
|
|
34
|
+
CLI_OUTPUT_INVALID: "CLI_OUTPUT_INVALID",
|
|
35
|
+
CLI_LOCATION_INVALID: "CLI_LOCATION_INVALID",
|
|
29
36
|
OUTPUT_STALE: "OUTPUT_STALE",
|
|
30
37
|
OUTPUT_READ_FAILED: "OUTPUT_READ_FAILED",
|
|
31
38
|
OUTPUT_WRITE_FAILED: "OUTPUT_WRITE_FAILED"
|
|
@@ -34,8 +41,9 @@ class OpenAPITypesafeError extends Error {
|
|
|
34
41
|
code;
|
|
35
42
|
details;
|
|
36
43
|
constructor(init) {
|
|
37
|
-
const message =
|
|
38
|
-
|
|
44
|
+
const message = urlSecrets.redactUrlSecrets(init.message);
|
|
45
|
+
const cause = causeSecrets.redactCauseSecrets(init.cause);
|
|
46
|
+
super(message, cause === void 0 ? void 0 : { cause });
|
|
39
47
|
this.name = "OpenAPITypesafeError";
|
|
40
48
|
this.code = init.code;
|
|
41
49
|
this.details = init.details ?? {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.cjs","sources":["../../src/domain/errors.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"errors.cjs","sources":["../../src/domain/errors.ts"],"sourcesContent":["import { redactCauseSecrets } from \"./cause-secrets.js\";\nimport { redactUrlSecrets } from \"./url-secrets.js\";\n\n/**\n * Typed errors (ENGINEERING_PLAN 4.6, ADR-011). Every expected failure of the generator and the CLI\n * is an `OpenAPITypesafeError` with a stable machine-readable `code` and structured `details`. The\n * `message` is English text for people; programs and the CLI decide by `code`. A bug (a broken\n * invariant) is a plain `Error`, not one of these.\n */\n\n/**\n * Every error code. A minor release may add codes (ADR-034); each one needs a row in the CLI's\n * exit-code table, which the compiler checks.\n */\nexport const ERROR_CODES = {\n SCHEMA_SOURCE_EMPTY: \"SCHEMA_SOURCE_EMPTY\",\n SCHEMA_SOURCE_INVALID: \"SCHEMA_SOURCE_INVALID\",\n SCHEMA_LOAD_FAILED: \"SCHEMA_LOAD_FAILED\",\n SCHEMA_PARSE_FAILED: \"SCHEMA_PARSE_FAILED\",\n SCHEMA_VERSION_UNSUPPORTED: \"SCHEMA_VERSION_UNSUPPORTED\",\n SCHEMA_INVALID: \"SCHEMA_INVALID\",\n SCHEMA_REF_INVALID: \"SCHEMA_REF_INVALID\",\n SCHEMA_REF_FORBIDDEN: \"SCHEMA_REF_FORBIDDEN\",\n SCHEMA_OBJECT_INVALID: \"SCHEMA_OBJECT_INVALID\",\n SCHEMA_PROPERTY_INVALID: \"SCHEMA_PROPERTY_INVALID\",\n SCHEMA_TOO_DEEP: \"SCHEMA_TOO_DEEP\",\n SCHEMA_KEY_UNSUPPORTED: \"SCHEMA_KEY_UNSUPPORTED\",\n ENUM_NAME_EMPTY: \"ENUM_NAME_EMPTY\",\n CALLBACK_RESULT_UNREADABLE: \"CALLBACK_RESULT_UNREADABLE\",\n OPTION_FIX_UNKNOWN: \"OPTION_FIX_UNKNOWN\",\n OPTION_INVALID: \"OPTION_INVALID\",\n TYPESCRIPT_NOT_FOUND: \"TYPESCRIPT_NOT_FOUND\",\n CLI_FLAG_REMOVED: \"CLI_FLAG_REMOVED\",\n CLI_FLAG_INVALID: \"CLI_FLAG_INVALID\",\n CLI_GLOB_UNSUPPORTED: \"CLI_GLOB_UNSUPPORTED\",\n CLI_CONFIG_NOT_FOUND: \"CLI_CONFIG_NOT_FOUND\",\n CLI_CONFIG_INVALID: \"CLI_CONFIG_INVALID\",\n CLI_CONFIG_OUTPUT_MISSING: \"CLI_CONFIG_OUTPUT_MISSING\",\n CLI_CHECK_OUTPUT_MISSING: \"CLI_CHECK_OUTPUT_MISSING\",\n CLI_INPUT_MISSING: \"CLI_INPUT_MISSING\",\n CLI_OUTPUT_IS_INPUT: \"CLI_OUTPUT_IS_INPUT\",\n CLI_OUTPUT_DUPLICATE: \"CLI_OUTPUT_DUPLICATE\",\n CLI_OUTPUT_INVALID: \"CLI_OUTPUT_INVALID\",\n CLI_LOCATION_INVALID: \"CLI_LOCATION_INVALID\",\n OUTPUT_STALE: \"OUTPUT_STALE\",\n OUTPUT_READ_FAILED: \"OUTPUT_READ_FAILED\",\n OUTPUT_WRITE_FAILED: \"OUTPUT_WRITE_FAILED\",\n} as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\n/**\n * Structured, JSON-serializable facts about a failure, for programs and logs. Only the keys that\n * docs/node.md (Errors) lists are stable (ADR-034, amendment of 2026-11-08).\n */\nexport type ErrorDetails = Readonly<Record<string, unknown>>;\n\nexport interface OpenAPITypesafeErrorInit {\n readonly code: ErrorCode;\n readonly message: string;\n readonly details?: ErrorDetails;\n /**\n * The lower-level error this one reports, if any (kept as the standard `cause`; a copy with URL\n * secrets hidden when its chain names one, see cause-secrets.ts).\n */\n readonly cause?: unknown;\n}\n\n/**\n * The base of every expected failure; check `code`, not the class or the message. The message\n * and the `cause` chain never show the user info or the query of a URL (`url-secrets.ts`).\n */\nexport class OpenAPITypesafeError extends Error {\n readonly code: ErrorCode;\n readonly details: ErrorDetails;\n\n constructor(init: OpenAPITypesafeErrorInit) {\n const message = redactUrlSecrets(init.message);\n const cause = redactCauseSecrets(init.cause);\n super(message, cause === undefined ? undefined : { cause });\n this.name = \"OpenAPITypesafeError\";\n this.code = init.code;\n this.details = init.details ?? {};\n }\n}\n\n/** Whether a thrown value is one of our typed errors (also across bundled copies of the class). */\nexport function isOpenAPITypesafeError(value: unknown): value is OpenAPITypesafeError {\n if (value instanceof OpenAPITypesafeError) {\n return true;\n }\n const code = (value as { code?: unknown } | null)?.code;\n return (\n value instanceof Error &&\n typeof code === \"string\" &&\n Object.hasOwn(ERROR_CODES, code) &&\n typeof (value as { details?: unknown }).details === \"object\"\n );\n}\n"],"names":["redactUrlSecrets","redactCauseSecrets"],"mappings":";;;;;AAcO,MAAM,WAAA,GAAc;AAAA,EACzB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,qBAAA,EAAuB,uBAAA;AAAA,EACvB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,0BAAA,EAA4B,4BAAA;AAAA,EAC5B,cAAA,EAAgB,gBAAA;AAAA,EAChB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,qBAAA,EAAuB,uBAAA;AAAA,EACvB,uBAAA,EAAyB,yBAAA;AAAA,EACzB,eAAA,EAAiB,iBAAA;AAAA,EACjB,sBAAA,EAAwB,wBAAA;AAAA,EACxB,eAAA,EAAiB,iBAAA;AAAA,EACjB,0BAAA,EAA4B,4BAAA;AAAA,EAC5B,kBAAA,EAAoB,oBAAA;AAAA,EACpB,cAAA,EAAgB,gBAAA;AAAA,EAChB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,yBAAA,EAA2B,2BAAA;AAAA,EAC3B,wBAAA,EAA0B,0BAAA;AAAA,EAC1B,iBAAA,EAAmB,mBAAA;AAAA,EACnB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,YAAA,EAAc,cAAA;AAAA,EACd,kBAAA,EAAoB,oBAAA;AAAA,EACpB,mBAAA,EAAqB;AACvB;AAyBO,MAAM,6BAA6B,KAAA,CAAM;AAAA,EACrC,IAAA;AAAA,EACA,OAAA;AAAA,EAET,YAAY,IAAA,EAAgC;AAC1C,IAAA,MAAM,OAAA,GAAUA,2BAAA,CAAiB,IAAA,CAAK,OAAO,CAAA;AAC7C,IAAA,MAAM,KAAA,GAAQC,+BAAA,CAAmB,IAAA,CAAK,KAAK,CAAA;AAC3C,IAAA,KAAA,CAAM,SAAS,KAAA,KAAU,MAAA,GAAY,MAAA,GAAY,EAAE,OAAO,CAAA;AAC1D,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AACZ,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AACjB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,EAAC;AAAA,EAClC;AACF;AAGO,SAAS,uBAAuB,KAAA,EAA+C;AACpF,EAAA,IAAI,iBAAiB,oBAAA,EAAsB;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAQ,KAAA,EAAqC,IAAA;AACnD,EAAA,OACE,KAAA,YAAiB,KAAA,IACjB,OAAO,IAAA,KAAS,QAAA,IAChB,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,IAAI,CAAA,IAC/B,OAAQ,KAAA,CAAgC,OAAA,KAAY,QAAA;AAExD;;;;"}
|
package/dist/domain/errors.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { redactCauseSecrets } from './cause-secrets.mjs';
|
|
2
|
+
import { redactUrlSecrets } from './url-secrets.mjs';
|
|
2
3
|
|
|
3
4
|
const ERROR_CODES = {
|
|
4
5
|
SCHEMA_SOURCE_EMPTY: "SCHEMA_SOURCE_EMPTY",
|
|
@@ -16,14 +17,20 @@ const ERROR_CODES = {
|
|
|
16
17
|
ENUM_NAME_EMPTY: "ENUM_NAME_EMPTY",
|
|
17
18
|
CALLBACK_RESULT_UNREADABLE: "CALLBACK_RESULT_UNREADABLE",
|
|
18
19
|
OPTION_FIX_UNKNOWN: "OPTION_FIX_UNKNOWN",
|
|
20
|
+
OPTION_INVALID: "OPTION_INVALID",
|
|
19
21
|
TYPESCRIPT_NOT_FOUND: "TYPESCRIPT_NOT_FOUND",
|
|
20
22
|
CLI_FLAG_REMOVED: "CLI_FLAG_REMOVED",
|
|
23
|
+
CLI_FLAG_INVALID: "CLI_FLAG_INVALID",
|
|
21
24
|
CLI_GLOB_UNSUPPORTED: "CLI_GLOB_UNSUPPORTED",
|
|
22
25
|
CLI_CONFIG_NOT_FOUND: "CLI_CONFIG_NOT_FOUND",
|
|
23
26
|
CLI_CONFIG_INVALID: "CLI_CONFIG_INVALID",
|
|
24
27
|
CLI_CONFIG_OUTPUT_MISSING: "CLI_CONFIG_OUTPUT_MISSING",
|
|
25
28
|
CLI_CHECK_OUTPUT_MISSING: "CLI_CHECK_OUTPUT_MISSING",
|
|
26
29
|
CLI_INPUT_MISSING: "CLI_INPUT_MISSING",
|
|
30
|
+
CLI_OUTPUT_IS_INPUT: "CLI_OUTPUT_IS_INPUT",
|
|
31
|
+
CLI_OUTPUT_DUPLICATE: "CLI_OUTPUT_DUPLICATE",
|
|
32
|
+
CLI_OUTPUT_INVALID: "CLI_OUTPUT_INVALID",
|
|
33
|
+
CLI_LOCATION_INVALID: "CLI_LOCATION_INVALID",
|
|
27
34
|
OUTPUT_STALE: "OUTPUT_STALE",
|
|
28
35
|
OUTPUT_READ_FAILED: "OUTPUT_READ_FAILED",
|
|
29
36
|
OUTPUT_WRITE_FAILED: "OUTPUT_WRITE_FAILED"
|
|
@@ -32,8 +39,9 @@ class OpenAPITypesafeError extends Error {
|
|
|
32
39
|
code;
|
|
33
40
|
details;
|
|
34
41
|
constructor(init) {
|
|
35
|
-
const message =
|
|
36
|
-
|
|
42
|
+
const message = redactUrlSecrets(init.message);
|
|
43
|
+
const cause = redactCauseSecrets(init.cause);
|
|
44
|
+
super(message, cause === void 0 ? void 0 : { cause });
|
|
37
45
|
this.name = "OpenAPITypesafeError";
|
|
38
46
|
this.code = init.code;
|
|
39
47
|
this.details = init.details ?? {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.mjs","sources":["../../src/domain/errors.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"errors.mjs","sources":["../../src/domain/errors.ts"],"sourcesContent":["import { redactCauseSecrets } from \"./cause-secrets.js\";\nimport { redactUrlSecrets } from \"./url-secrets.js\";\n\n/**\n * Typed errors (ENGINEERING_PLAN 4.6, ADR-011). Every expected failure of the generator and the CLI\n * is an `OpenAPITypesafeError` with a stable machine-readable `code` and structured `details`. The\n * `message` is English text for people; programs and the CLI decide by `code`. A bug (a broken\n * invariant) is a plain `Error`, not one of these.\n */\n\n/**\n * Every error code. A minor release may add codes (ADR-034); each one needs a row in the CLI's\n * exit-code table, which the compiler checks.\n */\nexport const ERROR_CODES = {\n SCHEMA_SOURCE_EMPTY: \"SCHEMA_SOURCE_EMPTY\",\n SCHEMA_SOURCE_INVALID: \"SCHEMA_SOURCE_INVALID\",\n SCHEMA_LOAD_FAILED: \"SCHEMA_LOAD_FAILED\",\n SCHEMA_PARSE_FAILED: \"SCHEMA_PARSE_FAILED\",\n SCHEMA_VERSION_UNSUPPORTED: \"SCHEMA_VERSION_UNSUPPORTED\",\n SCHEMA_INVALID: \"SCHEMA_INVALID\",\n SCHEMA_REF_INVALID: \"SCHEMA_REF_INVALID\",\n SCHEMA_REF_FORBIDDEN: \"SCHEMA_REF_FORBIDDEN\",\n SCHEMA_OBJECT_INVALID: \"SCHEMA_OBJECT_INVALID\",\n SCHEMA_PROPERTY_INVALID: \"SCHEMA_PROPERTY_INVALID\",\n SCHEMA_TOO_DEEP: \"SCHEMA_TOO_DEEP\",\n SCHEMA_KEY_UNSUPPORTED: \"SCHEMA_KEY_UNSUPPORTED\",\n ENUM_NAME_EMPTY: \"ENUM_NAME_EMPTY\",\n CALLBACK_RESULT_UNREADABLE: \"CALLBACK_RESULT_UNREADABLE\",\n OPTION_FIX_UNKNOWN: \"OPTION_FIX_UNKNOWN\",\n OPTION_INVALID: \"OPTION_INVALID\",\n TYPESCRIPT_NOT_FOUND: \"TYPESCRIPT_NOT_FOUND\",\n CLI_FLAG_REMOVED: \"CLI_FLAG_REMOVED\",\n CLI_FLAG_INVALID: \"CLI_FLAG_INVALID\",\n CLI_GLOB_UNSUPPORTED: \"CLI_GLOB_UNSUPPORTED\",\n CLI_CONFIG_NOT_FOUND: \"CLI_CONFIG_NOT_FOUND\",\n CLI_CONFIG_INVALID: \"CLI_CONFIG_INVALID\",\n CLI_CONFIG_OUTPUT_MISSING: \"CLI_CONFIG_OUTPUT_MISSING\",\n CLI_CHECK_OUTPUT_MISSING: \"CLI_CHECK_OUTPUT_MISSING\",\n CLI_INPUT_MISSING: \"CLI_INPUT_MISSING\",\n CLI_OUTPUT_IS_INPUT: \"CLI_OUTPUT_IS_INPUT\",\n CLI_OUTPUT_DUPLICATE: \"CLI_OUTPUT_DUPLICATE\",\n CLI_OUTPUT_INVALID: \"CLI_OUTPUT_INVALID\",\n CLI_LOCATION_INVALID: \"CLI_LOCATION_INVALID\",\n OUTPUT_STALE: \"OUTPUT_STALE\",\n OUTPUT_READ_FAILED: \"OUTPUT_READ_FAILED\",\n OUTPUT_WRITE_FAILED: \"OUTPUT_WRITE_FAILED\",\n} as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\n/**\n * Structured, JSON-serializable facts about a failure, for programs and logs. Only the keys that\n * docs/node.md (Errors) lists are stable (ADR-034, amendment of 2026-11-08).\n */\nexport type ErrorDetails = Readonly<Record<string, unknown>>;\n\nexport interface OpenAPITypesafeErrorInit {\n readonly code: ErrorCode;\n readonly message: string;\n readonly details?: ErrorDetails;\n /**\n * The lower-level error this one reports, if any (kept as the standard `cause`; a copy with URL\n * secrets hidden when its chain names one, see cause-secrets.ts).\n */\n readonly cause?: unknown;\n}\n\n/**\n * The base of every expected failure; check `code`, not the class or the message. The message\n * and the `cause` chain never show the user info or the query of a URL (`url-secrets.ts`).\n */\nexport class OpenAPITypesafeError extends Error {\n readonly code: ErrorCode;\n readonly details: ErrorDetails;\n\n constructor(init: OpenAPITypesafeErrorInit) {\n const message = redactUrlSecrets(init.message);\n const cause = redactCauseSecrets(init.cause);\n super(message, cause === undefined ? undefined : { cause });\n this.name = \"OpenAPITypesafeError\";\n this.code = init.code;\n this.details = init.details ?? {};\n }\n}\n\n/** Whether a thrown value is one of our typed errors (also across bundled copies of the class). */\nexport function isOpenAPITypesafeError(value: unknown): value is OpenAPITypesafeError {\n if (value instanceof OpenAPITypesafeError) {\n return true;\n }\n const code = (value as { code?: unknown } | null)?.code;\n return (\n value instanceof Error &&\n typeof code === \"string\" &&\n Object.hasOwn(ERROR_CODES, code) &&\n typeof (value as { details?: unknown }).details === \"object\"\n );\n}\n"],"names":[],"mappings":";;;AAcO,MAAM,WAAA,GAAc;AAAA,EACzB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,qBAAA,EAAuB,uBAAA;AAAA,EACvB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,0BAAA,EAA4B,4BAAA;AAAA,EAC5B,cAAA,EAAgB,gBAAA;AAAA,EAChB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,qBAAA,EAAuB,uBAAA;AAAA,EACvB,uBAAA,EAAyB,yBAAA;AAAA,EACzB,eAAA,EAAiB,iBAAA;AAAA,EACjB,sBAAA,EAAwB,wBAAA;AAAA,EACxB,eAAA,EAAiB,iBAAA;AAAA,EACjB,0BAAA,EAA4B,4BAAA;AAAA,EAC5B,kBAAA,EAAoB,oBAAA;AAAA,EACpB,cAAA,EAAgB,gBAAA;AAAA,EAChB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,yBAAA,EAA2B,2BAAA;AAAA,EAC3B,wBAAA,EAA0B,0BAAA;AAAA,EAC1B,iBAAA,EAAmB,mBAAA;AAAA,EACnB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,YAAA,EAAc,cAAA;AAAA,EACd,kBAAA,EAAoB,oBAAA;AAAA,EACpB,mBAAA,EAAqB;AACvB;AAyBO,MAAM,6BAA6B,KAAA,CAAM;AAAA,EACrC,IAAA;AAAA,EACA,OAAA;AAAA,EAET,YAAY,IAAA,EAAgC;AAC1C,IAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,IAAA,CAAK,OAAO,CAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAA;AAC3C,IAAA,KAAA,CAAM,SAAS,KAAA,KAAU,MAAA,GAAY,MAAA,GAAY,EAAE,OAAO,CAAA;AAC1D,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AACZ,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AACjB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,EAAC;AAAA,EAClC;AACF;AAGO,SAAS,uBAAuB,KAAA,EAA+C;AACpF,EAAA,IAAI,iBAAiB,oBAAA,EAAsB;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAQ,KAAA,EAAqC,IAAA;AACnD,EAAA,OACE,KAAA,YAAiB,KAAA,IACjB,OAAO,IAAA,KAAS,QAAA,IAChB,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,IAAI,CAAA,IAC/B,OAAQ,KAAA,CAAgC,OAAA,KAAY,QAAA;AAExD;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identifier-text.cjs","sources":["../../../src/domain/ir/identifier-text.ts"],"sourcesContent":["import { NEWER_IDENTIFIER_PART, NEWER_IDENTIFIER_START } from \"./newer-identifier-ranges.js\";\n\n/**\n * Identifier rules of ECMAScript (Unicode `ID_Start` / `ID_Continue`, plus `$`, `_`, ZWNJ and\n * ZWJ), for names built from document text, without the characters that
|
|
1
|
+
{"version":3,"file":"identifier-text.cjs","sources":["../../../src/domain/ir/identifier-text.ts"],"sourcesContent":["import { NEWER_IDENTIFIER_PART, NEWER_IDENTIFIER_START } from \"./newer-identifier-ranges.js\";\n\n/**\n * Identifier rules of ECMAScript (Unicode `ID_Start` / `ID_Continue`, plus `$`, `_`, ZWNJ and\n * ZWJ), for names built from document text, without the characters that the scanner of the lowest\n * supported TypeScript (5.4) does not know. Node.js follows a newer Unicode version than\n * TypeScript's identifier tables, so a name such as `Name` (Unicode 17) passed here and failed to\n * parse with \"Invalid character\" (ADR-019); TypeScript 5.4 also rejects ZWJ and characters that\n * TypeScript 6 accepts. Removing these also gives the same names on every supported Node.js\n * version.\n */\n\nconst IDENTIFIER_START_RE = new RegExp(\n `^[[\\\\p{ID_Start}$_]--[${NEWER_IDENTIFIER_START.join(\"\")}]]`,\n \"v\",\n);\nconst INVALID_IDENTIFIER_PART_RE = new RegExp(\n `[^[\\\\p{ID_Continue}$\\\\u{200C}\\\\u{200D}]--[${NEWER_IDENTIFIER_PART.join(\"\")}]]`,\n \"gv\",\n);\n\n/** Whether the text starts with a character that may start an identifier. */\nexport function hasIdentifierStart(text: string): boolean {\n return IDENTIFIER_START_RE.test(text);\n}\n\n/** The text with each character that cannot be part of an identifier replaced by `_`. */\nexport function withIdentifierParts(text: string): string {\n return text.replace(INVALID_IDENTIFIER_PART_RE, \"_\");\n}\n\n/**\n * The names TypeScript does not accept as a type alias name: reserved words, strict mode and\n * module reserved words, and predefined type names (`void`, `string`, …). Checked with the\n * TypeScript 6.0 compiler on `export type <name> = 1;` in a module.\n */\nconst RESERVED_TYPE_NAMES: ReadonlySet<string> = new Set(\n (\n \"any as await bigint boolean break case catch class const continue debugger default delete \" +\n \"do else enum export extends false finally for function if implements import in instanceof \" +\n \"interface let never new null number object package private protected public return static \" +\n \"string super switch symbol this throw true try typeof undefined unknown var void while with \" +\n \"yield\"\n ).split(\" \"),\n);\n\n/** Whether TypeScript rejects the text as the name of a type alias. */\nexport function isReservedTypeName(text: string): boolean {\n return RESERVED_TYPE_NAMES.has(text);\n}\n"],"names":["NEWER_IDENTIFIER_START","NEWER_IDENTIFIER_PART"],"mappings":";;;;AAYA,MAAM,sBAAsB,IAAI,MAAA;AAAA,EAC9B,CAAA,sBAAA,EAAyBA,4CAAA,CAAuB,IAAA,CAAK,EAAE,CAAC,CAAA,EAAA,CAAA;AAAA,EACxD;AACF,CAAA;AACA,MAAM,6BAA6B,IAAI,MAAA;AAAA,EACrC,CAAA,0CAAA,EAA6CC,2CAAA,CAAsB,IAAA,CAAK,EAAE,CAAC,CAAA,EAAA,CAAA;AAAA,EAC3E;AACF,CAAA;AAGO,SAAS,mBAAmB,IAAA,EAAuB;AACxD,EAAA,OAAO,mBAAA,CAAoB,KAAK,IAAI,CAAA;AACtC;AAGO,SAAS,oBAAoB,IAAA,EAAsB;AACxD,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,0BAAA,EAA4B,GAAG,CAAA;AACrD;AAOA,MAAM,sBAA2C,IAAI,GAAA;AAAA,EAEjD,iXAAA,CAKA,MAAM,GAAG;AACb,CAAA;AAGO,SAAS,mBAAmB,IAAA,EAAuB;AACxD,EAAA,OAAO,mBAAA,CAAoB,IAAI,IAAI,CAAA;AACrC;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NEWER_IDENTIFIER_START, NEWER_IDENTIFIER_PART } from './newer-identifier-ranges.mjs';
|
|
2
2
|
|
|
3
3
|
const IDENTIFIER_START_RE = new RegExp(
|
|
4
4
|
`^[[\\p{ID_Start}$_]--[${NEWER_IDENTIFIER_START.join("")}]]`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identifier-text.mjs","sources":["../../../src/domain/ir/identifier-text.ts"],"sourcesContent":["import { NEWER_IDENTIFIER_PART, NEWER_IDENTIFIER_START } from \"./newer-identifier-ranges.js\";\n\n/**\n * Identifier rules of ECMAScript (Unicode `ID_Start` / `ID_Continue`, plus `$`, `_`, ZWNJ and\n * ZWJ), for names built from document text, without the characters that
|
|
1
|
+
{"version":3,"file":"identifier-text.mjs","sources":["../../../src/domain/ir/identifier-text.ts"],"sourcesContent":["import { NEWER_IDENTIFIER_PART, NEWER_IDENTIFIER_START } from \"./newer-identifier-ranges.js\";\n\n/**\n * Identifier rules of ECMAScript (Unicode `ID_Start` / `ID_Continue`, plus `$`, `_`, ZWNJ and\n * ZWJ), for names built from document text, without the characters that the scanner of the lowest\n * supported TypeScript (5.4) does not know. Node.js follows a newer Unicode version than\n * TypeScript's identifier tables, so a name such as `Name` (Unicode 17) passed here and failed to\n * parse with \"Invalid character\" (ADR-019); TypeScript 5.4 also rejects ZWJ and characters that\n * TypeScript 6 accepts. Removing these also gives the same names on every supported Node.js\n * version.\n */\n\nconst IDENTIFIER_START_RE = new RegExp(\n `^[[\\\\p{ID_Start}$_]--[${NEWER_IDENTIFIER_START.join(\"\")}]]`,\n \"v\",\n);\nconst INVALID_IDENTIFIER_PART_RE = new RegExp(\n `[^[\\\\p{ID_Continue}$\\\\u{200C}\\\\u{200D}]--[${NEWER_IDENTIFIER_PART.join(\"\")}]]`,\n \"gv\",\n);\n\n/** Whether the text starts with a character that may start an identifier. */\nexport function hasIdentifierStart(text: string): boolean {\n return IDENTIFIER_START_RE.test(text);\n}\n\n/** The text with each character that cannot be part of an identifier replaced by `_`. */\nexport function withIdentifierParts(text: string): string {\n return text.replace(INVALID_IDENTIFIER_PART_RE, \"_\");\n}\n\n/**\n * The names TypeScript does not accept as a type alias name: reserved words, strict mode and\n * module reserved words, and predefined type names (`void`, `string`, …). Checked with the\n * TypeScript 6.0 compiler on `export type <name> = 1;` in a module.\n */\nconst RESERVED_TYPE_NAMES: ReadonlySet<string> = new Set(\n (\n \"any as await bigint boolean break case catch class const continue debugger default delete \" +\n \"do else enum export extends false finally for function if implements import in instanceof \" +\n \"interface let never new null number object package private protected public return static \" +\n \"string super switch symbol this throw true try typeof undefined unknown var void while with \" +\n \"yield\"\n ).split(\" \"),\n);\n\n/** Whether TypeScript rejects the text as the name of a type alias. */\nexport function isReservedTypeName(text: string): boolean {\n return RESERVED_TYPE_NAMES.has(text);\n}\n"],"names":[],"mappings":";;AAYA,MAAM,sBAAsB,IAAI,MAAA;AAAA,EAC9B,CAAA,sBAAA,EAAyB,sBAAA,CAAuB,IAAA,CAAK,EAAE,CAAC,CAAA,EAAA,CAAA;AAAA,EACxD;AACF,CAAA;AACA,MAAM,6BAA6B,IAAI,MAAA;AAAA,EACrC,CAAA,0CAAA,EAA6C,qBAAA,CAAsB,IAAA,CAAK,EAAE,CAAC,CAAA,EAAA,CAAA;AAAA,EAC3E;AACF,CAAA;AAGO,SAAS,mBAAmB,IAAA,EAAuB;AACxD,EAAA,OAAO,mBAAA,CAAoB,KAAK,IAAI,CAAA;AACtC;AAGO,SAAS,oBAAoB,IAAA,EAAsB;AACxD,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,0BAAA,EAA4B,GAAG,CAAA;AACrD;AAOA,MAAM,sBAA2C,IAAI,GAAA;AAAA,EAEjD,iXAAA,CAKA,MAAM,GAAG;AACb,CAAA;AAGO,SAAS,mBAAmB,IAAA,EAAuB;AACxD,EAAA,OAAO,mBAAA,CAAoB,IAAI,IAAI,CAAA;AACrC;;"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const identifierText = require('./identifier-text.cjs');
|
|
4
|
+
|
|
5
|
+
const KEYWORDS = /* @__PURE__ */ new Set([
|
|
6
|
+
"string",
|
|
7
|
+
"number",
|
|
8
|
+
"boolean",
|
|
9
|
+
"null",
|
|
10
|
+
"undefined",
|
|
11
|
+
"unknown",
|
|
12
|
+
"never"
|
|
13
|
+
]);
|
|
14
|
+
const STRING_ENCODINGS = /* @__PURE__ */ new Set([void 0, "json", "escaped"]);
|
|
15
|
+
function isFields(value) {
|
|
16
|
+
return typeof value === "object" && value !== null;
|
|
17
|
+
}
|
|
18
|
+
function isText(value) {
|
|
19
|
+
return typeof value === "string" && value.trim() !== "";
|
|
20
|
+
}
|
|
21
|
+
function isIdentifier(text) {
|
|
22
|
+
return typeof text === "string" && identifierText.hasIdentifierStart(text) && identifierText.withIdentifierParts(text) === text;
|
|
23
|
+
}
|
|
24
|
+
const TYPE_QUERY_PREFIX = "typeof ";
|
|
25
|
+
const NOT_TYPE_QUERY_START = new Set(
|
|
26
|
+
"import implements interface let package private protected public static yield".split(" ")
|
|
27
|
+
);
|
|
28
|
+
const NOT_TYPE_REFERENCE_START = /* @__PURE__ */ new Set([
|
|
29
|
+
...NOT_TYPE_QUERY_START,
|
|
30
|
+
..."new typeof infer keyof readonly unique".split(" ")
|
|
31
|
+
]);
|
|
32
|
+
function isTypeName(text) {
|
|
33
|
+
if (typeof text !== "string") {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
const isQuery = text.startsWith(TYPE_QUERY_PREFIX);
|
|
37
|
+
const names = (isQuery ? text.slice(TYPE_QUERY_PREFIX.length) : text).split(".");
|
|
38
|
+
const reserved = isQuery ? NOT_TYPE_QUERY_START : NOT_TYPE_REFERENCE_START;
|
|
39
|
+
return names.every(isIdentifier) && !reserved.has(names[0]);
|
|
40
|
+
}
|
|
41
|
+
function isNumberName(text) {
|
|
42
|
+
return typeof text === "string" && String(Number(text)) === text && !text.startsWith("-");
|
|
43
|
+
}
|
|
44
|
+
class IrShapeCheck {
|
|
45
|
+
#ancestors = /* @__PURE__ */ new Set();
|
|
46
|
+
isType(value) {
|
|
47
|
+
return this.#within(value, (node) => {
|
|
48
|
+
const check = TYPE_CHECKS[node.kind];
|
|
49
|
+
return Object.hasOwn(TYPE_CHECKS, String(node.kind)) && check(node, this);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
isTypeList(value, isEmptyAllowed) {
|
|
53
|
+
return Array.isArray(value) && (isEmptyAllowed || value.length > 0) && value.every((entry) => this.isType(entry));
|
|
54
|
+
}
|
|
55
|
+
isMember(value) {
|
|
56
|
+
return isFields(value) && value.kind === "indexSignature" ? this.#within(value, (node) => this.#isIndexSignature(node)) : this.isProperty(value);
|
|
57
|
+
}
|
|
58
|
+
isProperty(value) {
|
|
59
|
+
return this.#within(
|
|
60
|
+
value,
|
|
61
|
+
(node) => node.kind === "property" && isPropertyName(node.name) && this.isType(node.type) && typeof node.isOptional === "boolean" && typeof node.isReadonly === "boolean" && areComments(node.comments)
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
#isIndexSignature(node) {
|
|
65
|
+
return isIdentifier(node.parameterName) && this.isType(node.parameterType) && isIndexParameterType(node.parameterType) && this.isType(node.type) && typeof node.isReadonly === "boolean" && areComments(node.comments);
|
|
66
|
+
}
|
|
67
|
+
#within(value, check) {
|
|
68
|
+
if (!isFields(value) || this.#ancestors.has(value)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
this.#ancestors.add(value);
|
|
72
|
+
try {
|
|
73
|
+
return check(value);
|
|
74
|
+
} finally {
|
|
75
|
+
this.#ancestors.delete(value);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const INDEX_KEYWORD_ATOMS = /* @__PURE__ */ new Map([
|
|
80
|
+
["string", "string"],
|
|
81
|
+
["number", "number"]
|
|
82
|
+
]);
|
|
83
|
+
const TAG = "tag";
|
|
84
|
+
const UNRESOLVED = "unresolved";
|
|
85
|
+
function intersectAtoms(left, right) {
|
|
86
|
+
if (left === right || right === TAG) {
|
|
87
|
+
return left;
|
|
88
|
+
}
|
|
89
|
+
return left === TAG ? right : void 0;
|
|
90
|
+
}
|
|
91
|
+
function intersectKeys(left, right) {
|
|
92
|
+
if (left === UNRESOLVED || right === UNRESOLVED) {
|
|
93
|
+
return UNRESOLVED;
|
|
94
|
+
}
|
|
95
|
+
const atoms = [...left].flatMap((atom) => [...right].map((other) => intersectAtoms(atom, other)));
|
|
96
|
+
return new Set(atoms.filter((atom) => atom !== void 0));
|
|
97
|
+
}
|
|
98
|
+
function unionKeys(left, right) {
|
|
99
|
+
return left === UNRESOLVED || right === UNRESOLVED ? UNRESOLVED : /* @__PURE__ */ new Set([...left, ...right]);
|
|
100
|
+
}
|
|
101
|
+
function combineKeys(types, combine) {
|
|
102
|
+
let combined;
|
|
103
|
+
for (const member of types) {
|
|
104
|
+
const keys = indexKeys(member);
|
|
105
|
+
if (keys === void 0) {
|
|
106
|
+
return void 0;
|
|
107
|
+
}
|
|
108
|
+
combined = combined === void 0 ? keys : combine(combined, keys);
|
|
109
|
+
}
|
|
110
|
+
return combined;
|
|
111
|
+
}
|
|
112
|
+
function indexKeys(type) {
|
|
113
|
+
switch (type.kind) {
|
|
114
|
+
case "keyword": {
|
|
115
|
+
const atom = INDEX_KEYWORD_ATOMS.get(type.keyword);
|
|
116
|
+
return atom === void 0 ? void 0 : /* @__PURE__ */ new Set([atom]);
|
|
117
|
+
}
|
|
118
|
+
case "object":
|
|
119
|
+
return /* @__PURE__ */ new Set([TAG]);
|
|
120
|
+
case "reference":
|
|
121
|
+
case "indexedAccess":
|
|
122
|
+
case "raw":
|
|
123
|
+
return UNRESOLVED;
|
|
124
|
+
case "union":
|
|
125
|
+
return combineKeys(type.types, unionKeys);
|
|
126
|
+
case "intersection":
|
|
127
|
+
return combineKeys(type.types, intersectKeys);
|
|
128
|
+
default:
|
|
129
|
+
return void 0;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function isIndexParameterType(type) {
|
|
133
|
+
const keys = indexKeys(type);
|
|
134
|
+
return keys === UNRESOLVED || keys !== void 0 && keys.size > 0 && !keys.has(TAG);
|
|
135
|
+
}
|
|
136
|
+
function isPropertyName(value) {
|
|
137
|
+
if (!isFields(value)) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
switch (value.kind) {
|
|
141
|
+
case "identifier":
|
|
142
|
+
return isIdentifier(value.text);
|
|
143
|
+
case "number":
|
|
144
|
+
return isNumberName(value.text);
|
|
145
|
+
case "string":
|
|
146
|
+
return typeof value.value === "string";
|
|
147
|
+
default:
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function isComment(value) {
|
|
152
|
+
if (!isFields(value) || typeof value.text !== "string") {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
return value.kind === "block" ? !value.text.includes("*/") : value.kind === "line" && !/[\n\r\u2028\u2029]/.test(value.text);
|
|
156
|
+
}
|
|
157
|
+
function areComments(value) {
|
|
158
|
+
return Array.isArray(value) && value.every(isComment);
|
|
159
|
+
}
|
|
160
|
+
function isTupleElement(value, check) {
|
|
161
|
+
return isFields(value) && check.isType(value.type) && typeof value.isRest === "boolean" && typeof value.isOptional === "boolean" && !(value.isRest && value.isOptional);
|
|
162
|
+
}
|
|
163
|
+
const TYPE_CHECKS = {
|
|
164
|
+
keyword: (node) => KEYWORDS.has(node.keyword),
|
|
165
|
+
stringLiteral: (node) => typeof node.value === "string" && STRING_ENCODINGS.has(node.encoding),
|
|
166
|
+
numberLiteral: (node) => Number.isFinite(node.value),
|
|
167
|
+
booleanLiteral: (node) => typeof node.value === "boolean",
|
|
168
|
+
reference: (node, check) => isTypeName(node.name) && check.isTypeList(node.typeArguments, true),
|
|
169
|
+
array: (node, check) => check.isType(node.element),
|
|
170
|
+
tuple: (node, check) => Array.isArray(node.elements) && node.elements.every((entry) => isTupleElement(entry, check)),
|
|
171
|
+
union: (node, check) => check.isTypeList(node.types, false),
|
|
172
|
+
intersection: (node, check) => check.isTypeList(node.types, false),
|
|
173
|
+
object: (node, check) => Array.isArray(node.members) && node.members.every((member) => check.isMember(member)),
|
|
174
|
+
indexedAccess: (node, check) => check.isType(node.object) && check.isType(node.index),
|
|
175
|
+
readonly: (node, check) => check.isType(node.type),
|
|
176
|
+
raw: (node) => isText(node.text)
|
|
177
|
+
};
|
|
178
|
+
function isPrintableIrType(value) {
|
|
179
|
+
return new IrShapeCheck().isType(value);
|
|
180
|
+
}
|
|
181
|
+
function isPrintableIrProperty(value) {
|
|
182
|
+
return new IrShapeCheck().isProperty(value);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
exports.isPrintableIrProperty = isPrintableIrProperty;
|
|
186
|
+
exports.isPrintableIrType = isPrintableIrType;
|
|
187
|
+
//# sourceMappingURL=ir-shape.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir-shape.cjs","sources":["../../../src/domain/ir/ir-shape.ts"],"sourcesContent":["import { hasIdentifierStart, withIdentifierParts } from \"./identifier-text.js\";\nimport type { IrKeyword, IrPropertySignature, IrType } from \"./nodes.js\";\n\n/**\n * Whether a value from outside the package (an IR callback's result) is IR the printer writes as\n * valid TypeScript. JavaScript callers can return any value, and the type checker of a\n * TypeScript caller does not stop `{ kind: \"union\", types: [] }` or an empty type text either:\n * without this check such a result crashed the printer with an untyped error, or printed text\n * such as `a?: ;`. Raw type text is printed as written, so only blank text is rejected; the text\n * itself is the caller's TypeScript, which the caller's compiler checks.\n */\n\ntype Fields = Readonly<Record<string, unknown>>;\n\nconst KEYWORDS: ReadonlySet<string> = new Set<IrKeyword>([\n \"string\",\n \"number\",\n \"boolean\",\n \"null\",\n \"undefined\",\n \"unknown\",\n \"never\",\n]);\n\nconst STRING_ENCODINGS: ReadonlySet<unknown> = new Set([undefined, \"json\", \"escaped\"]);\n\nfunction isFields(value: unknown): value is Fields {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isText(value: unknown): value is string {\n return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction isIdentifier(text: unknown): boolean {\n return typeof text === \"string\" && hasIdentifierStart(text) && withIdentifierParts(text) === text;\n}\n\n/** The prefix of a type query: the generator writes `typeof Status` as a reference name. */\nconst TYPE_QUERY_PREFIX = \"typeof \";\n\n/**\n * Words that cannot start the name of a type query (`typeof <name>`): `import` starts an import\n * type, and strict mode reserves the others. Found with the TypeScript 5.4 and 6.0 compilers\n * (syntax and grammar errors) on `type A = { a?: typeof <name> }`, over every reserved word and\n * contextual keyword. A name after a `.` may be any identifier, reserved words included.\n */\nconst NOT_TYPE_QUERY_START: ReadonlySet<string> = new Set(\n \"import implements interface let package private protected public static yield\".split(\" \"),\n);\n/** Words that cannot start a type reference either: they are operators of a type there. */\nconst NOT_TYPE_REFERENCE_START: ReadonlySet<string> = new Set([\n ...NOT_TYPE_QUERY_START,\n ...\"new typeof infer keyof readonly unique\".split(\" \"),\n]);\n\n/**\n * A name TypeScript reads as the name of a type: identifiers joined by `.` (`Status`,\n * `Status.active`), optionally as a type query (`typeof Status`). Text such as `a b` or `A<B>`\n * would print as other or invalid TypeScript, and so would `keyof` or `let` as the first name;\n * type arguments go in `typeArguments`.\n */\nfunction isTypeName(text: unknown): boolean {\n if (typeof text !== \"string\") {\n return false;\n }\n const isQuery = text.startsWith(TYPE_QUERY_PREFIX);\n const names = (isQuery ? text.slice(TYPE_QUERY_PREFIX.length) : text).split(\".\");\n const reserved = isQuery ? NOT_TYPE_QUERY_START : NOT_TYPE_REFERENCE_START;\n return names.every(isIdentifier) && !reserved.has(names[0] as string);\n}\n\n/** A non-negative number written as JavaScript writes it, as `toPropertyName` makes them. */\nfunction isNumberName(text: unknown): boolean {\n return typeof text === \"string\" && String(Number(text)) === text && !text.startsWith(\"-\");\n}\n\n/** Walks one value; `ancestors` makes a cycle invalid instead of an endless recursion. */\nclass IrShapeCheck {\n readonly #ancestors = new Set<object>();\n\n isType(value: unknown): boolean {\n return this.#within(value, (node) => {\n const check = TYPE_CHECKS[node.kind as IrType[\"kind\"]];\n return Object.hasOwn(TYPE_CHECKS, String(node.kind)) && check(node, this);\n });\n }\n\n isTypeList(value: unknown, isEmptyAllowed: boolean): boolean {\n return (\n Array.isArray(value) &&\n (isEmptyAllowed || value.length > 0) &&\n value.every((entry) => this.isType(entry))\n );\n }\n\n isMember(value: unknown): boolean {\n return isFields(value) && value.kind === \"indexSignature\"\n ? this.#within(value, (node) => this.#isIndexSignature(node))\n : this.isProperty(value);\n }\n\n isProperty(value: unknown): boolean {\n return this.#within(\n value,\n (node) =>\n node.kind === \"property\" &&\n isPropertyName(node.name) &&\n this.isType(node.type) &&\n typeof node.isOptional === \"boolean\" &&\n typeof node.isReadonly === \"boolean\" &&\n areComments(node.comments),\n );\n }\n\n #isIndexSignature(node: Fields): boolean {\n return (\n isIdentifier(node.parameterName) &&\n this.isType(node.parameterType) &&\n isIndexParameterType(node.parameterType as IrType) &&\n this.isType(node.type) &&\n typeof node.isReadonly === \"boolean\" &&\n areComments(node.comments)\n );\n }\n\n #within(value: unknown, check: (node: Fields) => boolean): boolean {\n if (!isFields(value) || this.#ancestors.has(value)) {\n return false;\n }\n this.#ancestors.add(value);\n try {\n return check(value);\n } finally {\n this.#ancestors.delete(value);\n }\n }\n}\n\n/**\n * What an index signature parameter type reduces to: `string`, `number`, or an object type that\n * tags one of them (`string & {}`), each as an atom; `unresolved` for a name, an indexed access\n * (`K[\"a\"]`) or type text, which only TypeScript can resolve; undefined for a type that can never\n * be one (a literal, an array, a tuple, `readonly`, another keyword).\n */\ntype IndexAtom = \"string\" | \"number\" | \"tag\";\ntype IndexKeys = ReadonlySet<IndexAtom> | \"unresolved\";\n\n/** The keywords an index signature takes as its parameter type, as atoms. */\nconst INDEX_KEYWORD_ATOMS: ReadonlyMap<string, IndexAtom> = new Map([\n [\"string\", \"string\"],\n [\"number\", \"number\"],\n]);\n\nconst TAG: IndexAtom = \"tag\";\nconst UNRESOLVED = \"unresolved\";\n\n/** One atom of each side together: a tag keeps the other side, two keys must be the same. */\nfunction intersectAtoms(left: IndexAtom, right: IndexAtom): IndexAtom | undefined {\n if (left === right || right === TAG) {\n return left;\n }\n return left === TAG ? right : undefined;\n}\n\n/** `A & B` over atoms, as TypeScript spreads an intersection over the members of a union. */\nfunction intersectKeys(left: IndexKeys, right: IndexKeys): IndexKeys {\n if (left === UNRESOLVED || right === UNRESOLVED) {\n return UNRESOLVED;\n }\n const atoms = [...left].flatMap((atom) => [...right].map((other) => intersectAtoms(atom, other)));\n return new Set(atoms.filter((atom) => atom !== undefined));\n}\n\n/** `A | B` over atoms. */\nfunction unionKeys(left: IndexKeys, right: IndexKeys): IndexKeys {\n return left === UNRESOLVED || right === UNRESOLVED ? UNRESOLVED : new Set([...left, ...right]);\n}\n\n/** The keys of each member combined, or undefined when one member can never be a key. */\nfunction combineKeys(\n types: readonly IrType[],\n combine: (left: IndexKeys, right: IndexKeys) => IndexKeys,\n): IndexKeys | undefined {\n let combined: IndexKeys | undefined;\n for (const member of types) {\n const keys = indexKeys(member);\n if (keys === undefined) {\n return undefined;\n }\n combined = combined === undefined ? keys : combine(combined, keys);\n }\n return combined;\n}\n\nfunction indexKeys(type: IrType): IndexKeys | undefined {\n switch (type.kind) {\n case \"keyword\": {\n const atom = INDEX_KEYWORD_ATOMS.get(type.keyword);\n return atom === undefined ? undefined : new Set([atom]);\n }\n case \"object\":\n return new Set([TAG]);\n case \"reference\":\n case \"indexedAccess\":\n case \"raw\":\n return UNRESOLVED;\n case \"union\":\n return combineKeys(type.types, unionKeys);\n case \"intersection\":\n return combineKeys(type.types, intersectKeys);\n default:\n return undefined;\n }\n}\n\n/**\n * Whether a type can be the parameter type of an index signature. TypeScript takes `string`,\n * `number`, `symbol`, a template literal type, a union of these, or one of them tagged by an\n * intersection (`string & {}`); anything else fails with TS1268 or TS1337. It decides by the\n * resolved type, so `string & \"a\"` (the literal `\"a\"`), `string & number` (`never`) and an\n * object type alone are refused, and a name, an indexed access and type text pass for TypeScript\n * to check.\n */\nfunction isIndexParameterType(type: IrType): boolean {\n const keys = indexKeys(type);\n return keys === UNRESOLVED || (keys !== undefined && keys.size > 0 && !keys.has(TAG));\n}\n\nfunction isPropertyName(value: unknown): boolean {\n if (!isFields(value)) {\n return false;\n }\n switch (value.kind) {\n case \"identifier\":\n return isIdentifier(value.text);\n case \"number\":\n return isNumberName(value.text);\n case \"string\":\n return typeof value.value === \"string\";\n default:\n return false;\n }\n}\n\n/** A block comment must not end itself early (`*\\/`); a line comment must stay on its line. */\nfunction isComment(value: unknown): boolean {\n if (!isFields(value) || typeof value.text !== \"string\") {\n return false;\n }\n return value.kind === \"block\"\n ? !value.text.includes(\"*/\")\n : value.kind === \"line\" && !/[\\n\\r\\u2028\\u2029]/.test(value.text);\n}\n\nfunction areComments(value: unknown): boolean {\n return Array.isArray(value) && value.every(isComment);\n}\n\nfunction isTupleElement(value: unknown, check: IrShapeCheck): boolean {\n return (\n isFields(value) &&\n check.isType(value.type) &&\n typeof value.isRest === \"boolean\" &&\n typeof value.isOptional === \"boolean\" &&\n !(value.isRest && value.isOptional)\n );\n}\n\n/** One check per kind; the `Record` makes a new kind fail to compile until it is checked. */\nconst TYPE_CHECKS: Readonly<\n Record<IrType[\"kind\"], (node: Fields, check: IrShapeCheck) => boolean>\n> = {\n keyword: (node) => KEYWORDS.has(node.keyword as string),\n stringLiteral: (node) => typeof node.value === \"string\" && STRING_ENCODINGS.has(node.encoding),\n numberLiteral: (node) => Number.isFinite(node.value),\n booleanLiteral: (node) => typeof node.value === \"boolean\",\n reference: (node, check) => isTypeName(node.name) && check.isTypeList(node.typeArguments, true),\n array: (node, check) => check.isType(node.element),\n tuple: (node, check) =>\n Array.isArray(node.elements) && node.elements.every((entry) => isTupleElement(entry, check)),\n union: (node, check) => check.isTypeList(node.types, false),\n intersection: (node, check) => check.isTypeList(node.types, false),\n object: (node, check) =>\n Array.isArray(node.members) && node.members.every((member) => check.isMember(member)),\n indexedAccess: (node, check) => check.isType(node.object) && check.isType(node.index),\n readonly: (node, check) => check.isType(node.type),\n raw: (node) => isText(node.text),\n};\n\n/** Whether `value` is an IR type the printer writes as valid TypeScript. */\nexport function isPrintableIrType(value: unknown): value is IrType {\n return new IrShapeCheck().isType(value);\n}\n\n/** Whether `value` is an IR property signature the printer writes as valid TypeScript. */\nexport function isPrintableIrProperty(value: unknown): value is IrPropertySignature {\n return new IrShapeCheck().isProperty(value);\n}\n"],"names":["hasIdentifierStart","withIdentifierParts"],"mappings":"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"}
|