openapi-typesafe 1.0.0-rc.3 → 1.0.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1831 -0
- package/dist/adapters/node-file-system/file-claims.cjs +105 -0
- package/dist/adapters/node-file-system/file-claims.cjs.map +1 -0
- package/dist/adapters/node-file-system/file-claims.mjs +95 -0
- package/dist/adapters/node-file-system/file-claims.mjs.map +1 -0
- package/dist/adapters/node-file-system/file-identity.cjs +82 -0
- package/dist/adapters/node-file-system/file-identity.cjs.map +1 -0
- package/dist/adapters/node-file-system/file-identity.mjs +74 -0
- package/dist/adapters/node-file-system/file-identity.mjs.map +1 -0
- package/dist/adapters/node-file-system/node-file-system.cjs +90 -14
- package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -1
- package/dist/adapters/node-file-system/node-file-system.mjs +90 -14
- package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -1
- package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs +75 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs +72 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +1 -1
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -1
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +2 -2
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -1
- package/dist/adapters/redocly-loader/loaded-documents.cjs +28 -0
- package/dist/adapters/redocly-loader/loaded-documents.cjs.map +1 -0
- package/dist/adapters/redocly-loader/loaded-documents.mjs +21 -0
- package/dist/adapters/redocly-loader/loaded-documents.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +14 -15
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -1
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +12 -13
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-access.cjs +31 -3
- package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-access.mjs +31 -3
- package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-holders.cjs +2 -2
- package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-holders.mjs +3 -3
- package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-body-limit.cjs +50 -0
- package/dist/adapters/redocly-loader/remote-body-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-body-limit.mjs +48 -0
- package/dist/adapters/redocly-loader/remote-body-limit.mjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-fetch.cjs +35 -6
- package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-fetch.mjs +35 -6
- package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-node-limit.cjs +47 -0
- package/dist/adapters/redocly-loader/remote-node-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-node-limit.mjs +44 -0
- package/dist/adapters/redocly-loader/remote-node-limit.mjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-load-errors.cjs +32 -8
- package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-load-errors.mjs +32 -9
- package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-source.cjs +11 -7
- package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-source.mjs +12 -8
- package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -1
- package/dist/adapters/redocly-loader/unsupported-keys.cjs +3 -5
- package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -1
- package/dist/adapters/redocly-loader/unsupported-keys.mjs +3 -5
- package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -1
- package/dist/adapters/terminal-logger/terminal-logger.cjs +6 -4
- package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -1
- package/dist/adapters/terminal-logger/terminal-logger.mjs +6 -4
- package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -1
- package/dist/api/default-ports.cjs +14 -2
- package/dist/api/default-ports.cjs.map +1 -1
- package/dist/api/default-ports.mjs +14 -2
- package/dist/api/default-ports.mjs.map +1 -1
- package/dist/api/discriminator-enum-parent.cjs +2 -2
- package/dist/api/discriminator-enum-parent.cjs.map +1 -1
- package/dist/api/discriminator-enum-parent.mjs +3 -3
- package/dist/api/discriminator-enum-parent.mjs.map +1 -1
- package/dist/api/discriminator-other-owners.cjs +5 -3
- package/dist/api/discriminator-other-owners.cjs.map +1 -1
- package/dist/api/discriminator-other-owners.mjs +5 -3
- package/dist/api/discriminator-other-owners.mjs.map +1 -1
- package/dist/api/discriminator-patch.cjs +5 -1
- package/dist/api/discriminator-patch.cjs.map +1 -1
- package/dist/api/discriminator-patch.mjs +5 -1
- package/dist/api/discriminator-patch.mjs.map +1 -1
- package/dist/api/discriminator-scan.cjs +15 -8
- package/dist/api/discriminator-scan.cjs.map +1 -1
- package/dist/api/discriminator-scan.mjs +15 -8
- package/dist/api/discriminator-scan.mjs.map +1 -1
- package/dist/api/document-run.cjs +2 -2
- package/dist/api/document-run.cjs.map +1 -1
- package/dist/api/document-run.mjs +2 -2
- package/dist/api/document-run.mjs.map +1 -1
- package/dist/api/legacy-utils.cjs.map +1 -1
- package/dist/api/legacy-utils.mjs.map +1 -1
- package/dist/api/openapi-ts.cjs +8 -4
- package/dist/api/openapi-ts.cjs.map +1 -1
- package/dist/api/openapi-ts.mjs +8 -5
- package/dist/api/openapi-ts.mjs.map +1 -1
- package/dist/api/schema-callbacks.cjs +36 -12
- package/dist/api/schema-callbacks.cjs.map +1 -1
- package/dist/api/schema-callbacks.mjs +36 -12
- package/dist/api/schema-callbacks.mjs.map +1 -1
- package/dist/api/transform-context.cjs +7 -3
- package/dist/api/transform-context.cjs.map +1 -1
- package/dist/api/transform-context.mjs +7 -3
- package/dist/api/transform-context.mjs.map +1 -1
- package/dist/api/transform-schema.cjs +40 -10
- package/dist/api/transform-schema.cjs.map +1 -1
- package/dist/api/transform-schema.mjs +41 -11
- package/dist/api/transform-schema.mjs.map +1 -1
- package/dist/application/print/text-writer.cjs +10 -3
- package/dist/application/print/text-writer.cjs.map +1 -1
- package/dist/application/print/text-writer.mjs +10 -3
- package/dist/application/print/text-writer.mjs.map +1 -1
- package/dist/application/stack-overflow.cjs +2 -1
- package/dist/application/stack-overflow.cjs.map +1 -1
- package/dist/application/stack-overflow.mjs +2 -1
- package/dist/application/stack-overflow.mjs.map +1 -1
- package/dist/application/transform/document/components.cjs +1 -1
- package/dist/application/transform/document/components.cjs.map +1 -1
- package/dist/application/transform/document/components.mjs +2 -2
- package/dist/application/transform/document/components.mjs.map +1 -1
- package/dist/application/transform/document/declared-type-names.cjs +23 -0
- package/dist/application/transform/document/declared-type-names.cjs.map +1 -0
- package/dist/application/transform/document/declared-type-names.mjs +20 -0
- package/dist/application/transform/document/declared-type-names.mjs.map +1 -0
- package/dist/application/transform/document/defs-root.cjs +1 -1
- package/dist/application/transform/document/defs-root.cjs.map +1 -1
- package/dist/application/transform/document/defs-root.mjs +2 -2
- package/dist/application/transform/document/defs-root.mjs.map +1 -1
- package/dist/application/transform/document/document.cjs +4 -1
- package/dist/application/transform/document/document.cjs.map +1 -1
- package/dist/application/transform/document/document.mjs +3 -2
- package/dist/application/transform/document/document.mjs.map +1 -1
- package/dist/application/transform/document/enum-names-given-back.cjs +62 -0
- package/dist/application/transform/document/enum-names-given-back.cjs.map +1 -0
- package/dist/application/transform/document/enum-names-given-back.mjs +58 -0
- package/dist/application/transform/document/enum-names-given-back.mjs.map +1 -0
- package/dist/application/transform/document/global-type-references.cjs +1 -0
- package/dist/application/transform/document/global-type-references.cjs.map +1 -1
- package/dist/application/transform/document/global-type-references.mjs +1 -1
- package/dist/application/transform/document/global-type-references.mjs.map +1 -1
- package/dist/application/transform/document/media-type.cjs +2 -2
- package/dist/application/transform/document/media-type.cjs.map +1 -1
- package/dist/application/transform/document/media-type.mjs +3 -3
- package/dist/application/transform/document/media-type.mjs.map +1 -1
- package/dist/application/transform/document/operation-keys-written.cjs +26 -0
- package/dist/application/transform/document/operation-keys-written.cjs.map +1 -0
- package/dist/application/transform/document/operation-keys-written.mjs +24 -0
- package/dist/application/transform/document/operation-keys-written.mjs.map +1 -0
- package/dist/application/transform/document/operation.cjs +1 -1
- package/dist/application/transform/document/operation.cjs.map +1 -1
- package/dist/application/transform/document/operation.mjs +2 -2
- package/dist/application/transform/document/operation.mjs.map +1 -1
- package/dist/application/transform/document/parameter-entries.cjs +34 -0
- package/dist/application/transform/document/parameter-entries.cjs.map +1 -0
- package/dist/application/transform/document/parameter-entries.mjs +30 -0
- package/dist/application/transform/document/parameter-entries.mjs.map +1 -0
- package/dist/application/transform/document/parameter.cjs +12 -4
- package/dist/application/transform/document/parameter.cjs.map +1 -1
- package/dist/application/transform/document/parameter.mjs +13 -5
- package/dist/application/transform/document/parameter.mjs.map +1 -1
- package/dist/application/transform/document/parameters.cjs +6 -29
- package/dist/application/transform/document/parameters.cjs.map +1 -1
- package/dist/application/transform/document/parameters.mjs +6 -29
- package/dist/application/transform/document/parameters.mjs.map +1 -1
- package/dist/application/transform/document/path-item.cjs +11 -14
- package/dist/application/transform/document/path-item.cjs.map +1 -1
- package/dist/application/transform/document/path-item.mjs +12 -16
- package/dist/application/transform/document/path-item.mjs.map +1 -1
- package/dist/application/transform/document/paths-enum.cjs +1 -0
- package/dist/application/transform/document/paths-enum.cjs.map +1 -1
- package/dist/application/transform/document/paths-enum.mjs +1 -1
- package/dist/application/transform/document/paths-enum.mjs.map +1 -1
- package/dist/application/transform/document/paths.cjs +5 -1
- package/dist/application/transform/document/paths.cjs.map +1 -1
- package/dist/application/transform/document/paths.mjs +6 -2
- package/dist/application/transform/document/paths.mjs.map +1 -1
- package/dist/application/transform/document/referenced-parameter.cjs +80 -0
- package/dist/application/transform/document/referenced-parameter.cjs.map +1 -0
- package/dist/application/transform/document/referenced-parameter.mjs +78 -0
- package/dist/application/transform/document/referenced-parameter.mjs.map +1 -0
- package/dist/application/transform/document/request-body.cjs +1 -1
- package/dist/application/transform/document/request-body.cjs.map +1 -1
- package/dist/application/transform/document/request-body.mjs +2 -2
- package/dist/application/transform/document/request-body.mjs.map +1 -1
- package/dist/application/transform/document/response.cjs +2 -2
- package/dist/application/transform/document/response.cjs.map +1 -1
- package/dist/application/transform/document/response.mjs +3 -3
- package/dist/application/transform/document/response.mjs.map +1 -1
- package/dist/application/transform/document/responses.cjs +1 -1
- package/dist/application/transform/document/responses.cjs.map +1 -1
- package/dist/application/transform/document/responses.mjs +2 -2
- package/dist/application/transform/document/responses.mjs.map +1 -1
- package/dist/application/transform/document/root-type-aliases.cjs +8 -23
- package/dist/application/transform/document/root-type-aliases.cjs.map +1 -1
- package/dist/application/transform/document/root-type-aliases.mjs +8 -24
- package/dist/application/transform/document/root-type-aliases.mjs.map +1 -1
- package/dist/application/transform/document/type-resolution.cjs +3 -1
- package/dist/application/transform/document/type-resolution.cjs.map +1 -1
- package/dist/application/transform/document/type-resolution.mjs +3 -1
- package/dist/application/transform/document/type-resolution.mjs.map +1 -1
- package/dist/application/transform/document/webhooks.cjs +1 -1
- package/dist/application/transform/document/webhooks.cjs.map +1 -1
- package/dist/application/transform/document/webhooks.mjs +2 -2
- package/dist/application/transform/document/webhooks.mjs.map +1 -1
- package/dist/application/transform/footer/document-footer.cjs +10 -2
- package/dist/application/transform/footer/document-footer.cjs.map +1 -1
- package/dist/application/transform/footer/document-footer.mjs +10 -2
- package/dist/application/transform/footer/document-footer.mjs.map +1 -1
- package/dist/application/transform/footer/enum-name-claims.cjs +48 -0
- package/dist/application/transform/footer/enum-name-claims.cjs.map +1 -0
- package/dist/application/transform/footer/enum-name-claims.mjs +46 -0
- package/dist/application/transform/footer/enum-name-claims.mjs.map +1 -0
- package/dist/application/transform/footer/operation-keys.cjs +23 -0
- package/dist/application/transform/footer/operation-keys.cjs.map +1 -0
- package/dist/application/transform/footer/operation-keys.mjs +21 -0
- package/dist/application/transform/footer/operation-keys.mjs.map +1 -0
- package/dist/application/transform/footer/type-evaluation.cjs +4 -4
- package/dist/application/transform/footer/type-evaluation.cjs.map +1 -1
- package/dist/application/transform/footer/type-evaluation.mjs +4 -4
- package/dist/application/transform/footer/type-evaluation.mjs.map +1 -1
- package/dist/application/transform/helper-types.cjs +1 -1
- package/dist/application/transform/helper-types.cjs.map +1 -1
- package/dist/application/transform/helper-types.mjs +1 -1
- package/dist/application/transform/helper-types.mjs.map +1 -1
- package/dist/application/transform/numbered-names.cjs +9 -0
- package/dist/application/transform/numbered-names.cjs.map +1 -1
- package/dist/application/transform/numbered-names.mjs +9 -1
- package/dist/application/transform/numbered-names.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-location.cjs +1 -1
- package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-location.mjs +2 -2
- package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -1
- package/dist/application/transform/ref-type.cjs +2 -1
- package/dist/application/transform/ref-type.cjs.map +1 -1
- package/dist/application/transform/ref-type.mjs +2 -1
- package/dist/application/transform/ref-type.mjs.map +1 -1
- package/dist/application/transform/schema/composition-type.cjs +1 -1
- package/dist/application/transform/schema/composition-type.cjs.map +1 -1
- package/dist/application/transform/schema/composition-type.mjs +2 -2
- package/dist/application/transform/schema/composition-type.mjs.map +1 -1
- package/dist/application/transform/schema/enum-rule.cjs +1 -1
- package/dist/application/transform/schema/enum-rule.cjs.map +1 -1
- package/dist/application/transform/schema/enum-rule.mjs +2 -2
- package/dist/application/transform/schema/enum-rule.mjs.map +1 -1
- package/dist/application/transform/schema/object-type.cjs +3 -3
- package/dist/application/transform/schema/object-type.cjs.map +1 -1
- package/dist/application/transform/schema/object-type.mjs +4 -4
- package/dist/application/transform/schema/object-type.mjs.map +1 -1
- package/dist/application/transform/schema/ref-siblings.cjs +47 -0
- package/dist/application/transform/schema/ref-siblings.cjs.map +1 -0
- package/dist/application/transform/schema/ref-siblings.mjs +45 -0
- package/dist/application/transform/schema/ref-siblings.mjs.map +1 -0
- package/dist/application/transform/schema/schema-transform.cjs +4 -2
- package/dist/application/transform/schema/schema-transform.cjs.map +1 -1
- package/dist/application/transform/schema/schema-transform.mjs +4 -2
- package/dist/application/transform/schema/schema-transform.mjs.map +1 -1
- package/dist/application/transform/schema-comment.cjs +5 -1
- package/dist/application/transform/schema-comment.cjs.map +1 -1
- package/dist/application/transform/schema-comment.mjs +5 -1
- package/dist/application/transform/schema-comment.mjs.map +1 -1
- package/dist/cli/api-settings.cjs +62 -6
- package/dist/cli/api-settings.cjs.map +1 -1
- package/dist/cli/api-settings.mjs +60 -7
- package/dist/cli/api-settings.mjs.map +1 -1
- package/dist/cli/api-writes.cjs +72 -0
- package/dist/cli/api-writes.cjs.map +1 -0
- package/dist/cli/api-writes.mjs +69 -0
- package/dist/cli/api-writes.mjs.map +1 -0
- package/dist/cli/cli-errors.cjs +12 -1
- package/dist/cli/cli-errors.cjs.map +1 -1
- package/dist/cli/cli-errors.mjs +12 -1
- package/dist/cli/cli-errors.mjs.map +1 -1
- package/dist/cli/cli-output.cjs +106 -1
- package/dist/cli/cli-output.cjs.map +1 -1
- package/dist/cli/cli-output.mjs +99 -2
- package/dist/cli/cli-output.mjs.map +1 -1
- package/dist/cli/main.cjs +5 -1
- package/dist/cli/main.cjs.map +1 -1
- package/dist/cli/main.mjs +6 -2
- package/dist/cli/main.mjs.map +1 -1
- package/dist/cli/redocly-apis.cjs +82 -36
- package/dist/cli/redocly-apis.cjs.map +1 -1
- package/dist/cli/redocly-apis.mjs +85 -39
- package/dist/cli/redocly-apis.mjs.map +1 -1
- package/dist/cli/run-cli.cjs +13 -7
- package/dist/cli/run-cli.cjs.map +1 -1
- package/dist/cli/run-cli.mjs +14 -8
- package/dist/cli/run-cli.mjs.map +1 -1
- package/dist/domain/append-all.cjs +10 -0
- package/dist/domain/append-all.cjs.map +1 -0
- package/dist/domain/append-all.mjs +8 -0
- package/dist/domain/append-all.mjs.map +1 -0
- package/dist/domain/cause-secrets.cjs +37 -0
- package/dist/domain/cause-secrets.cjs.map +1 -0
- package/dist/domain/cause-secrets.mjs +35 -0
- package/dist/domain/cause-secrets.mjs.map +1 -0
- package/dist/domain/errors.cjs +9 -3
- package/dist/domain/errors.cjs.map +1 -1
- package/dist/domain/errors.mjs +9 -3
- package/dist/domain/errors.mjs.map +1 -1
- package/dist/domain/ir/identifier-text.cjs.map +1 -1
- package/dist/domain/ir/identifier-text.mjs +1 -1
- package/dist/domain/ir/identifier-text.mjs.map +1 -1
- package/dist/domain/ir/ir-shape.cjs +187 -0
- package/dist/domain/ir/ir-shape.cjs.map +1 -0
- package/dist/domain/ir/ir-shape.mjs +184 -0
- package/dist/domain/ir/ir-shape.mjs.map +1 -0
- package/dist/domain/ir/newer-identifier-ranges.cjs +182 -29
- package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -1
- package/dist/domain/ir/newer-identifier-ranges.mjs +182 -29
- package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -1
- package/dist/domain/openapi/alias-expansion.cjs +3 -1
- package/dist/domain/openapi/alias-expansion.cjs.map +1 -1
- package/dist/domain/openapi/alias-expansion.mjs +3 -1
- package/dist/domain/openapi/alias-expansion.mjs.map +1 -1
- package/dist/domain/openapi/discriminated-union.cjs +3 -3
- package/dist/domain/openapi/discriminated-union.cjs.map +1 -1
- package/dist/domain/openapi/discriminated-union.mjs +4 -4
- package/dist/domain/openapi/discriminated-union.mjs.map +1 -1
- package/dist/domain/openapi/discriminator-conflicts.cjs +10 -6
- package/dist/domain/openapi/discriminator-conflicts.cjs.map +1 -1
- package/dist/domain/openapi/discriminator-conflicts.mjs +11 -7
- package/dist/domain/openapi/discriminator-conflicts.mjs.map +1 -1
- package/dist/domain/openapi/json-pointer.cjs +43 -1
- package/dist/domain/openapi/json-pointer.cjs.map +1 -1
- package/dist/domain/openapi/json-pointer.mjs +40 -2
- package/dist/domain/openapi/json-pointer.mjs.map +1 -1
- package/dist/domain/openapi/schema-dialect.cjs +15 -0
- package/dist/domain/openapi/schema-dialect.cjs.map +1 -0
- package/dist/domain/openapi/schema-dialect.mjs +12 -0
- package/dist/domain/openapi/schema-dialect.mjs.map +1 -0
- package/dist/domain/openapi/unsupported-features.cjs +1 -1
- package/dist/domain/openapi/unsupported-features.cjs.map +1 -1
- package/dist/domain/openapi/unsupported-features.mjs +2 -2
- package/dist/domain/openapi/unsupported-features.mjs.map +1 -1
- package/dist/domain/output-fixes.cjs +14 -0
- package/dist/domain/output-fixes.cjs.map +1 -1
- package/dist/domain/output-fixes.mjs +14 -0
- package/dist/domain/output-fixes.mjs.map +1 -1
- package/dist/domain/url-secrets.cjs +48 -0
- package/dist/domain/url-secrets.cjs.map +1 -0
- package/dist/domain/url-secrets.mjs +45 -0
- package/dist/domain/url-secrets.mjs.map +1 -0
- package/dist/index.d.cts +22 -4
- package/dist/index.d.mts +22 -4
- package/dist/index.d.ts +22 -4
- package/package.json +4 -5
- package/src/adapters/node-file-system/file-claims.ts +138 -0
- package/src/adapters/node-file-system/file-identity.ts +137 -0
- package/src/adapters/node-file-system/node-file-system.ts +145 -18
- package/src/adapters/redocly-loader/bundled-mapping-copies.ts +95 -0
- package/src/adapters/redocly-loader/bundled-ref-repair.ts +2 -2
- package/src/adapters/redocly-loader/loaded-documents.ts +46 -0
- package/src/adapters/redocly-loader/redocly-schema-loader.ts +18 -24
- package/src/adapters/redocly-loader/ref-access.ts +37 -3
- package/src/adapters/redocly-loader/ref-holders.ts +3 -3
- package/src/adapters/redocly-loader/remote-body-limit.ts +66 -0
- package/src/adapters/redocly-loader/remote-fetch.ts +74 -11
- package/src/adapters/redocly-loader/remote-node-limit.ts +62 -0
- package/src/adapters/redocly-loader/schema-load-errors.ts +52 -13
- package/src/adapters/redocly-loader/schema-source.ts +20 -8
- package/src/adapters/redocly-loader/unsupported-keys.ts +3 -7
- package/src/adapters/terminal-logger/terminal-logger.ts +10 -5
- package/src/api/default-ports.ts +33 -4
- package/src/api/discriminator-enum-parent.ts +3 -3
- package/src/api/discriminator-other-owners.ts +5 -3
- package/src/api/discriminator-patch.ts +5 -1
- package/src/api/discriminator-scan.ts +16 -8
- package/src/api/document-run.ts +4 -3
- package/src/api/legacy-utils.ts +5 -1
- package/src/api/openapi-ts.ts +20 -5
- package/src/api/run-context.ts +3 -0
- package/src/api/schema-callbacks.ts +60 -17
- package/src/api/transform-context.ts +7 -3
- package/src/api/transform-schema.ts +64 -12
- package/src/application/ports/file-system.ts +39 -0
- package/src/application/ports/schema-loader.ts +11 -1
- package/src/application/print/text-writer.ts +10 -3
- package/src/application/stack-overflow.ts +9 -5
- package/src/application/transform/document/components.ts +2 -2
- package/src/application/transform/document/declared-type-names.ts +36 -0
- package/src/application/transform/document/defs-root.ts +2 -2
- package/src/application/transform/document/document.ts +4 -3
- package/src/application/transform/document/enum-names-given-back.ts +91 -0
- package/src/application/transform/document/global-type-references.ts +1 -1
- package/src/application/transform/document/media-type.ts +4 -3
- package/src/application/transform/document/operation-keys-written.ts +27 -0
- package/src/application/transform/document/operation.ts +2 -2
- package/src/application/transform/document/parameter-entries.ts +70 -0
- package/src/application/transform/document/parameter.ts +21 -9
- package/src/application/transform/document/parameters.ts +11 -56
- package/src/application/transform/document/path-item.ts +13 -31
- package/src/application/transform/document/paths-enum.ts +1 -1
- package/src/application/transform/document/paths.ts +6 -2
- package/src/application/transform/document/referenced-parameter.ts +146 -0
- package/src/application/transform/document/request-body.ts +2 -2
- package/src/application/transform/document/response.ts +3 -3
- package/src/application/transform/document/responses.ts +2 -2
- package/src/application/transform/document/root-type-aliases.ts +17 -38
- package/src/application/transform/document/type-resolution.ts +2 -1
- package/src/application/transform/document/webhooks.ts +2 -2
- package/src/application/transform/footer/document-footer.ts +18 -1
- package/src/application/transform/footer/enum-name-claims.ts +62 -0
- package/src/application/transform/footer/operation-keys.ts +28 -0
- package/src/application/transform/footer/type-evaluation.ts +4 -4
- package/src/application/transform/helper-types.ts +6 -5
- package/src/application/transform/numbered-names.ts +15 -0
- package/src/application/transform/ref-pointer/generated-location.ts +2 -2
- package/src/application/transform/ref-type.ts +2 -1
- package/src/application/transform/schema/composition-type.ts +2 -2
- package/src/application/transform/schema/enum-rule.ts +6 -2
- package/src/application/transform/schema/object-type.ts +4 -4
- package/src/application/transform/schema/ref-siblings.ts +76 -0
- package/src/application/transform/schema/schema-context.ts +3 -0
- package/src/application/transform/schema/schema-transform.ts +4 -2
- package/src/application/transform/schema-comment.ts +5 -1
- package/src/application/transform/transform-context.ts +5 -0
- package/src/cli/api-settings.ts +82 -7
- package/src/cli/api-writes.ts +117 -0
- package/src/cli/cli-dependencies.ts +21 -4
- package/src/cli/cli-errors.ts +20 -1
- package/src/cli/cli-output.ts +186 -7
- package/src/cli/main.ts +6 -3
- package/src/cli/redocly-apis.ts +153 -48
- package/src/cli/run-cli.ts +37 -8
- package/src/domain/append-all.ts +10 -0
- package/src/domain/cause-secrets.ts +52 -0
- package/src/domain/errors.ts +14 -5
- package/src/domain/ir/identifier-text.ts +6 -5
- package/src/domain/ir/ir-shape.ts +299 -0
- package/src/domain/ir/newer-identifier-ranges.ts +183 -30
- package/src/domain/openapi/alias-expansion.ts +4 -1
- package/src/domain/openapi/discriminated-union.ts +6 -4
- package/src/domain/openapi/discriminator-conflicts.ts +21 -7
- package/src/domain/openapi/document-object.ts +2 -0
- package/src/domain/openapi/json-pointer.ts +96 -7
- package/src/domain/openapi/schema-dialect.ts +22 -0
- package/src/domain/openapi/unsupported-features.ts +2 -2
- package/src/domain/output-fixes.ts +21 -2
- package/src/domain/url-secrets.ts +72 -0
- package/src/types/generator-options.ts +1 -1
- package/dist/cli/main.d.cts +0 -2
- package/dist/cli/main.d.mts +0 -2
- package/dist/cli/main.d.ts +0 -2
- package/dist/domain/url-credentials.cjs +0 -10
- package/dist/domain/url-credentials.cjs.map +0 -1
- package/dist/domain/url-credentials.mjs +0 -8
- package/dist/domain/url-credentials.mjs.map +0 -1
- package/src/domain/url-credentials.ts +0 -18
|
@@ -1,18 +1,48 @@
|
|
|
1
1
|
const NEWER_IDENTIFIER_START = [
|
|
2
|
-
"\\u{
|
|
3
|
-
"\\u{
|
|
4
|
-
"\\u{
|
|
2
|
+
"\\u{870}-\\u{887}",
|
|
3
|
+
"\\u{889}-\\u{88F}",
|
|
4
|
+
"\\u{8B5}",
|
|
5
|
+
"\\u{8BE}-\\u{8C9}",
|
|
6
|
+
"\\u{C5C}-\\u{C5D}",
|
|
7
|
+
"\\u{CDC}-\\u{CDD}",
|
|
8
|
+
"\\u{D04}",
|
|
9
|
+
"\\u{170D}",
|
|
10
|
+
"\\u{171F}",
|
|
11
|
+
"\\u{1B4C}",
|
|
5
12
|
"\\u{1C89}-\\u{1C8A}",
|
|
6
|
-
"\\u{
|
|
7
|
-
"\\u{
|
|
8
|
-
"\\u{
|
|
9
|
-
"\\u{
|
|
10
|
-
"\\u{
|
|
13
|
+
"\\u{2C2F}",
|
|
14
|
+
"\\u{2C5F}",
|
|
15
|
+
"\\u{31BB}-\\u{31BF}",
|
|
16
|
+
"\\u{4DB6}-\\u{4DBF}",
|
|
17
|
+
"\\u{9FF0}-\\u{9FFF}",
|
|
18
|
+
"\\u{A7C0}-\\u{A7C1}",
|
|
19
|
+
"\\u{A7C7}-\\u{A7DC}",
|
|
20
|
+
"\\u{A7F1}-\\u{A7F6}",
|
|
21
|
+
"\\u{AB68}-\\u{AB69}",
|
|
22
|
+
"\\u{10570}-\\u{1057A}",
|
|
23
|
+
"\\u{1057C}-\\u{1058A}",
|
|
24
|
+
"\\u{1058C}-\\u{10592}",
|
|
25
|
+
"\\u{10594}-\\u{10595}",
|
|
26
|
+
"\\u{10597}-\\u{105A1}",
|
|
27
|
+
"\\u{105A3}-\\u{105B1}",
|
|
28
|
+
"\\u{105B3}-\\u{105B9}",
|
|
29
|
+
"\\u{105BB}-\\u{105BC}",
|
|
11
30
|
"\\u{105C0}-\\u{105F3}",
|
|
31
|
+
"\\u{10780}-\\u{10785}",
|
|
32
|
+
"\\u{10787}-\\u{107B0}",
|
|
33
|
+
"\\u{107B2}-\\u{107BA}",
|
|
12
34
|
"\\u{10940}-\\u{10959}",
|
|
13
35
|
"\\u{10D4A}-\\u{10D65}",
|
|
14
36
|
"\\u{10D6F}-\\u{10D85}",
|
|
37
|
+
"\\u{10E80}-\\u{10EA9}",
|
|
38
|
+
"\\u{10EB0}-\\u{10EB1}",
|
|
15
39
|
"\\u{10EC2}-\\u{10EC7}",
|
|
40
|
+
"\\u{10F70}-\\u{10F81}",
|
|
41
|
+
"\\u{10FB0}-\\u{10FC4}",
|
|
42
|
+
"\\u{11071}-\\u{11072}",
|
|
43
|
+
"\\u{11075}",
|
|
44
|
+
"\\u{11147}",
|
|
45
|
+
"\\u{1123F}-\\u{11240}",
|
|
16
46
|
"\\u{11380}-\\u{11389}",
|
|
17
47
|
"\\u{1138B}",
|
|
18
48
|
"\\u{1138E}",
|
|
@@ -20,18 +50,47 @@ const NEWER_IDENTIFIER_START = [
|
|
|
20
50
|
"\\u{113B7}",
|
|
21
51
|
"\\u{113D1}",
|
|
22
52
|
"\\u{113D3}",
|
|
53
|
+
"\\u{11460}-\\u{11461}",
|
|
54
|
+
"\\u{11740}-\\u{11746}",
|
|
55
|
+
"\\u{11900}-\\u{11906}",
|
|
56
|
+
"\\u{11909}",
|
|
57
|
+
"\\u{1190C}-\\u{11913}",
|
|
58
|
+
"\\u{11915}-\\u{11916}",
|
|
59
|
+
"\\u{11918}-\\u{1192F}",
|
|
60
|
+
"\\u{1193F}",
|
|
61
|
+
"\\u{11941}",
|
|
62
|
+
"\\u{11AB0}-\\u{11ABF}",
|
|
23
63
|
"\\u{11BC0}-\\u{11BE0}",
|
|
24
64
|
"\\u{11DB0}-\\u{11DDB}",
|
|
65
|
+
"\\u{11F02}",
|
|
66
|
+
"\\u{11F04}-\\u{11F10}",
|
|
67
|
+
"\\u{11F12}-\\u{11F33}",
|
|
68
|
+
"\\u{11FB0}",
|
|
69
|
+
"\\u{12F90}-\\u{12FF0}",
|
|
70
|
+
"\\u{1342F}",
|
|
71
|
+
"\\u{13441}-\\u{13446}",
|
|
25
72
|
"\\u{13460}-\\u{143FA}",
|
|
26
73
|
"\\u{16100}-\\u{1611D}",
|
|
74
|
+
"\\u{16A70}-\\u{16ABE}",
|
|
27
75
|
"\\u{16D40}-\\u{16D6C}",
|
|
28
76
|
"\\u{16EA0}-\\u{16EB8}",
|
|
29
77
|
"\\u{16EBB}-\\u{16ED3}",
|
|
30
78
|
"\\u{16FF2}-\\u{16FF6}",
|
|
31
79
|
"\\u{187F8}-\\u{187FF}",
|
|
32
|
-
"\\u{
|
|
33
|
-
"\\u{
|
|
80
|
+
"\\u{18AF3}-\\u{18CD5}",
|
|
81
|
+
"\\u{18CFF}-\\u{18D1E}",
|
|
34
82
|
"\\u{18D80}-\\u{18DF2}",
|
|
83
|
+
"\\u{1AFF0}-\\u{1AFF3}",
|
|
84
|
+
"\\u{1AFF5}-\\u{1AFFB}",
|
|
85
|
+
"\\u{1AFFD}-\\u{1AFFE}",
|
|
86
|
+
"\\u{1B11F}-\\u{1B122}",
|
|
87
|
+
"\\u{1B132}",
|
|
88
|
+
"\\u{1B155}",
|
|
89
|
+
"\\u{1DF00}-\\u{1DF1E}",
|
|
90
|
+
"\\u{1DF25}-\\u{1DF2A}",
|
|
91
|
+
"\\u{1E030}-\\u{1E06D}",
|
|
92
|
+
"\\u{1E290}-\\u{1E2AD}",
|
|
93
|
+
"\\u{1E4D0}-\\u{1E4EB}",
|
|
35
94
|
"\\u{1E5D0}-\\u{1E5ED}",
|
|
36
95
|
"\\u{1E5F0}",
|
|
37
96
|
"\\u{1E6C0}-\\u{1E6DE}",
|
|
@@ -40,30 +99,81 @@ const NEWER_IDENTIFIER_START = [
|
|
|
40
99
|
"\\u{1E6E7}-\\u{1E6ED}",
|
|
41
100
|
"\\u{1E6F0}-\\u{1E6F4}",
|
|
42
101
|
"\\u{1E6FE}-\\u{1E6FF}",
|
|
43
|
-
"\\u{
|
|
102
|
+
"\\u{1E7E0}-\\u{1E7E6}",
|
|
103
|
+
"\\u{1E7E8}-\\u{1E7EB}",
|
|
104
|
+
"\\u{1E7ED}-\\u{1E7EE}",
|
|
105
|
+
"\\u{1E7F0}-\\u{1E7FE}",
|
|
106
|
+
"\\u{2A6D7}-\\u{2A6DF}",
|
|
107
|
+
"\\u{2B735}-\\u{2B73F}",
|
|
44
108
|
"\\u{2CEA2}-\\u{2CEAD}",
|
|
45
|
-
"\\u{
|
|
109
|
+
"\\u{2EBF0}-\\u{2EE5D}",
|
|
110
|
+
"\\u{30000}-\\u{3134A}",
|
|
111
|
+
"\\u{31350}-\\u{33479}"
|
|
46
112
|
];
|
|
47
113
|
const NEWER_IDENTIFIER_PART = [
|
|
48
|
-
"\\u{
|
|
49
|
-
"\\u{
|
|
50
|
-
"\\u{
|
|
51
|
-
"\\u{
|
|
52
|
-
"\\u{
|
|
114
|
+
"\\u{870}-\\u{887}",
|
|
115
|
+
"\\u{889}-\\u{88F}",
|
|
116
|
+
"\\u{897}-\\u{89F}",
|
|
117
|
+
"\\u{8B5}",
|
|
118
|
+
"\\u{8BE}-\\u{8D2}",
|
|
119
|
+
"\\u{B55}",
|
|
120
|
+
"\\u{C3C}",
|
|
121
|
+
"\\u{C5C}-\\u{C5D}",
|
|
122
|
+
"\\u{CDC}-\\u{CDD}",
|
|
123
|
+
"\\u{CF3}",
|
|
124
|
+
"\\u{D04}",
|
|
125
|
+
"\\u{D81}",
|
|
126
|
+
"\\u{ECE}",
|
|
127
|
+
"\\u{170D}",
|
|
128
|
+
"\\u{1715}",
|
|
129
|
+
"\\u{171F}",
|
|
130
|
+
"\\u{180F}",
|
|
131
|
+
"\\u{1ABF}-\\u{1ADD}",
|
|
53
132
|
"\\u{1AE0}-\\u{1AEB}",
|
|
133
|
+
"\\u{1B4C}",
|
|
54
134
|
"\\u{1C89}-\\u{1C8A}",
|
|
55
|
-
"\\u{
|
|
56
|
-
"\\u{
|
|
57
|
-
"\\u{
|
|
58
|
-
"\\u{
|
|
59
|
-
"\\u{
|
|
135
|
+
"\\u{1DFA}",
|
|
136
|
+
"\\u{200C}-\\u{200D}",
|
|
137
|
+
"\\u{2C2F}",
|
|
138
|
+
"\\u{2C5F}",
|
|
139
|
+
"\\u{30FB}",
|
|
140
|
+
"\\u{31BB}-\\u{31BF}",
|
|
141
|
+
"\\u{4DB6}-\\u{4DBF}",
|
|
142
|
+
"\\u{9FF0}-\\u{9FFF}",
|
|
143
|
+
"\\u{A7C0}-\\u{A7C1}",
|
|
144
|
+
"\\u{A7C7}-\\u{A7DC}",
|
|
145
|
+
"\\u{A7F1}-\\u{A7F6}",
|
|
146
|
+
"\\u{A82C}",
|
|
147
|
+
"\\u{AB68}-\\u{AB69}",
|
|
148
|
+
"\\u{FF65}",
|
|
149
|
+
"\\u{10570}-\\u{1057A}",
|
|
150
|
+
"\\u{1057C}-\\u{1058A}",
|
|
151
|
+
"\\u{1058C}-\\u{10592}",
|
|
152
|
+
"\\u{10594}-\\u{10595}",
|
|
153
|
+
"\\u{10597}-\\u{105A1}",
|
|
154
|
+
"\\u{105A3}-\\u{105B1}",
|
|
155
|
+
"\\u{105B3}-\\u{105B9}",
|
|
156
|
+
"\\u{105BB}-\\u{105BC}",
|
|
60
157
|
"\\u{105C0}-\\u{105F3}",
|
|
158
|
+
"\\u{10780}-\\u{10785}",
|
|
159
|
+
"\\u{10787}-\\u{107B0}",
|
|
160
|
+
"\\u{107B2}-\\u{107BA}",
|
|
61
161
|
"\\u{10940}-\\u{10959}",
|
|
62
162
|
"\\u{10D40}-\\u{10D65}",
|
|
63
163
|
"\\u{10D69}-\\u{10D6D}",
|
|
64
164
|
"\\u{10D6F}-\\u{10D85}",
|
|
165
|
+
"\\u{10E80}-\\u{10EA9}",
|
|
166
|
+
"\\u{10EAB}-\\u{10EAC}",
|
|
167
|
+
"\\u{10EB0}-\\u{10EB1}",
|
|
65
168
|
"\\u{10EC2}-\\u{10EC7}",
|
|
66
|
-
"\\u{10EFA}-\\u{
|
|
169
|
+
"\\u{10EFA}-\\u{10EFF}",
|
|
170
|
+
"\\u{10F70}-\\u{10F85}",
|
|
171
|
+
"\\u{10FB0}-\\u{10FC4}",
|
|
172
|
+
"\\u{11070}-\\u{11075}",
|
|
173
|
+
"\\u{110C2}",
|
|
174
|
+
"\\u{11147}",
|
|
175
|
+
"\\u{111CE}-\\u{111CF}",
|
|
176
|
+
"\\u{1123F}-\\u{11241}",
|
|
67
177
|
"\\u{11380}-\\u{11389}",
|
|
68
178
|
"\\u{1138B}",
|
|
69
179
|
"\\u{1138E}",
|
|
@@ -74,32 +184,75 @@ const NEWER_IDENTIFIER_PART = [
|
|
|
74
184
|
"\\u{113C7}-\\u{113CA}",
|
|
75
185
|
"\\u{113CC}-\\u{113D3}",
|
|
76
186
|
"\\u{113E1}-\\u{113E2}",
|
|
187
|
+
"\\u{11460}-\\u{11461}",
|
|
77
188
|
"\\u{116D0}-\\u{116E3}",
|
|
189
|
+
"\\u{11740}-\\u{11746}",
|
|
190
|
+
"\\u{11900}-\\u{11906}",
|
|
191
|
+
"\\u{11909}",
|
|
192
|
+
"\\u{1190C}-\\u{11913}",
|
|
193
|
+
"\\u{11915}-\\u{11916}",
|
|
194
|
+
"\\u{11918}-\\u{11935}",
|
|
195
|
+
"\\u{11937}-\\u{11938}",
|
|
196
|
+
"\\u{1193B}-\\u{11943}",
|
|
197
|
+
"\\u{11950}-\\u{11959}",
|
|
198
|
+
"\\u{11AB0}-\\u{11ABF}",
|
|
78
199
|
"\\u{11B60}-\\u{11B67}",
|
|
79
200
|
"\\u{11BC0}-\\u{11BE0}",
|
|
80
201
|
"\\u{11BF0}-\\u{11BF9}",
|
|
81
202
|
"\\u{11DB0}-\\u{11DDB}",
|
|
82
203
|
"\\u{11DE0}-\\u{11DE9}",
|
|
83
|
-
"\\u{
|
|
204
|
+
"\\u{11F00}-\\u{11F10}",
|
|
205
|
+
"\\u{11F12}-\\u{11F3A}",
|
|
206
|
+
"\\u{11F3E}-\\u{11F42}",
|
|
207
|
+
"\\u{11F50}-\\u{11F5A}",
|
|
208
|
+
"\\u{11FB0}",
|
|
209
|
+
"\\u{12F90}-\\u{12FF0}",
|
|
210
|
+
"\\u{1342F}",
|
|
211
|
+
"\\u{13440}-\\u{13455}",
|
|
84
212
|
"\\u{13460}-\\u{143FA}",
|
|
85
213
|
"\\u{16100}-\\u{16139}",
|
|
214
|
+
"\\u{16A70}-\\u{16ABE}",
|
|
215
|
+
"\\u{16AC0}-\\u{16AC9}",
|
|
86
216
|
"\\u{16D40}-\\u{16D6C}",
|
|
87
217
|
"\\u{16D70}-\\u{16D79}",
|
|
88
218
|
"\\u{16EA0}-\\u{16EB8}",
|
|
89
219
|
"\\u{16EBB}-\\u{16ED3}",
|
|
90
|
-
"\\u{
|
|
220
|
+
"\\u{16FE4}",
|
|
221
|
+
"\\u{16FF0}-\\u{16FF6}",
|
|
91
222
|
"\\u{187F8}-\\u{187FF}",
|
|
92
|
-
"\\u{
|
|
93
|
-
"\\u{
|
|
223
|
+
"\\u{18AF3}-\\u{18CD5}",
|
|
224
|
+
"\\u{18CFF}-\\u{18D1E}",
|
|
94
225
|
"\\u{18D80}-\\u{18DF2}",
|
|
226
|
+
"\\u{1AFF0}-\\u{1AFF3}",
|
|
227
|
+
"\\u{1AFF5}-\\u{1AFFB}",
|
|
228
|
+
"\\u{1AFFD}-\\u{1AFFE}",
|
|
229
|
+
"\\u{1B11F}-\\u{1B122}",
|
|
230
|
+
"\\u{1B132}",
|
|
231
|
+
"\\u{1B155}",
|
|
95
232
|
"\\u{1CCF0}-\\u{1CCF9}",
|
|
233
|
+
"\\u{1CF00}-\\u{1CF2D}",
|
|
234
|
+
"\\u{1CF30}-\\u{1CF46}",
|
|
235
|
+
"\\u{1DF00}-\\u{1DF1E}",
|
|
236
|
+
"\\u{1DF25}-\\u{1DF2A}",
|
|
237
|
+
"\\u{1E030}-\\u{1E06D}",
|
|
238
|
+
"\\u{1E08F}",
|
|
239
|
+
"\\u{1E290}-\\u{1E2AE}",
|
|
240
|
+
"\\u{1E4D0}-\\u{1E4F9}",
|
|
96
241
|
"\\u{1E5D0}-\\u{1E5FA}",
|
|
97
242
|
"\\u{1E6C0}-\\u{1E6DE}",
|
|
98
243
|
"\\u{1E6E0}-\\u{1E6F5}",
|
|
99
244
|
"\\u{1E6FE}-\\u{1E6FF}",
|
|
100
|
-
"\\u{
|
|
245
|
+
"\\u{1E7E0}-\\u{1E7E6}",
|
|
246
|
+
"\\u{1E7E8}-\\u{1E7EB}",
|
|
247
|
+
"\\u{1E7ED}-\\u{1E7EE}",
|
|
248
|
+
"\\u{1E7F0}-\\u{1E7FE}",
|
|
249
|
+
"\\u{1FBF0}-\\u{1FBF9}",
|
|
250
|
+
"\\u{2A6D7}-\\u{2A6DF}",
|
|
251
|
+
"\\u{2B735}-\\u{2B73F}",
|
|
101
252
|
"\\u{2CEA2}-\\u{2CEAD}",
|
|
102
|
-
"\\u{
|
|
253
|
+
"\\u{2EBF0}-\\u{2EE5D}",
|
|
254
|
+
"\\u{30000}-\\u{3134A}",
|
|
255
|
+
"\\u{31350}-\\u{33479}"
|
|
103
256
|
];
|
|
104
257
|
|
|
105
258
|
export { NEWER_IDENTIFIER_PART, NEWER_IDENTIFIER_START };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"newer-identifier-ranges.mjs","sources":["../../../src/domain/ir/newer-identifier-ranges.ts"],"sourcesContent":["// Generated by scripts/identifier-ranges.ts (Node.js 26.0.0, Unicode\n// 17.0, TypeScript 5.9.3). Do not edit.\n\n/** `ID_Start` code points that TypeScript's scanner does not accept, as regex class items. */\nexport const NEWER_IDENTIFIER_START: readonly string[] = [\n \"\\\\u{88F}\",\n \"\\\\u{C5C}\",\n \"\\\\u{CDC}\",\n \"\\\\u{1C89}-\\\\u{1C8A}\",\n \"\\\\u{A7CB}-\\\\u{A7CF}\",\n \"\\\\u{A7D2}\",\n \"\\\\u{A7D4}\",\n \"\\\\u{A7DA}-\\\\u{A7DC}\",\n \"\\\\u{A7F1}\",\n \"\\\\u{105C0}-\\\\u{105F3}\",\n \"\\\\u{10940}-\\\\u{10959}\",\n \"\\\\u{10D4A}-\\\\u{10D65}\",\n \"\\\\u{10D6F}-\\\\u{10D85}\",\n \"\\\\u{10EC2}-\\\\u{10EC7}\",\n \"\\\\u{11380}-\\\\u{11389}\",\n \"\\\\u{1138B}\",\n \"\\\\u{1138E}\",\n \"\\\\u{11390}-\\\\u{113B5}\",\n \"\\\\u{113B7}\",\n \"\\\\u{113D1}\",\n \"\\\\u{113D3}\",\n \"\\\\u{11BC0}-\\\\u{11BE0}\",\n \"\\\\u{11DB0}-\\\\u{11DDB}\",\n \"\\\\u{13460}-\\\\u{143FA}\",\n \"\\\\u{16100}-\\\\u{1611D}\",\n \"\\\\u{16D40}-\\\\u{16D6C}\",\n \"\\\\u{16EA0}-\\\\u{16EB8}\",\n \"\\\\u{16EBB}-\\\\u{16ED3}\",\n \"\\\\u{16FF2}-\\\\u{16FF6}\",\n \"\\\\u{187F8}-\\\\u{187FF}\",\n \"\\\\u{18CFF}\",\n \"\\\\u{18D09}-\\\\u{18D1E}\",\n \"\\\\u{18D80}-\\\\u{18DF2}\",\n \"\\\\u{1E5D0}-\\\\u{1E5ED}\",\n \"\\\\u{1E5F0}\",\n \"\\\\u{1E6C0}-\\\\u{1E6DE}\",\n \"\\\\u{1E6E0}-\\\\u{1E6E2}\",\n \"\\\\u{1E6E4}-\\\\u{1E6E5}\",\n \"\\\\u{1E6E7}-\\\\u{1E6ED}\",\n \"\\\\u{1E6F0}-\\\\u{1E6F4}\",\n \"\\\\u{1E6FE}-\\\\u{1E6FF}\",\n \"\\\\u{2B73A}-\\\\u{2B73F}\",\n \"\\\\u{2CEA2}-\\\\u{2CEAD}\",\n \"\\\\u{323B0}-\\\\u{33479}\",\n];\n\n/** `ID_Continue` code points that TypeScript's scanner does not accept, as regex class items. */\nexport const NEWER_IDENTIFIER_PART: readonly string[] = [\n \"\\\\u{88F}\",\n \"\\\\u{897}\",\n \"\\\\u{C5C}\",\n \"\\\\u{CDC}\",\n \"\\\\u{1ACF}-\\\\u{1ADD}\",\n \"\\\\u{1AE0}-\\\\u{1AEB}\",\n \"\\\\u{1C89}-\\\\u{1C8A}\",\n \"\\\\u{A7CB}-\\\\u{A7CF}\",\n \"\\\\u{A7D2}\",\n \"\\\\u{A7D4}\",\n \"\\\\u{A7DA}-\\\\u{A7DC}\",\n \"\\\\u{A7F1}\",\n \"\\\\u{105C0}-\\\\u{105F3}\",\n \"\\\\u{10940}-\\\\u{10959}\",\n \"\\\\u{10D40}-\\\\u{10D65}\",\n \"\\\\u{10D69}-\\\\u{10D6D}\",\n \"\\\\u{10D6F}-\\\\u{10D85}\",\n \"\\\\u{10EC2}-\\\\u{10EC7}\",\n \"\\\\u{10EFA}-\\\\u{10EFC}\",\n \"\\\\u{11380}-\\\\u{11389}\",\n \"\\\\u{1138B}\",\n \"\\\\u{1138E}\",\n \"\\\\u{11390}-\\\\u{113B5}\",\n \"\\\\u{113B7}-\\\\u{113C0}\",\n \"\\\\u{113C2}\",\n \"\\\\u{113C5}\",\n \"\\\\u{113C7}-\\\\u{113CA}\",\n \"\\\\u{113CC}-\\\\u{113D3}\",\n \"\\\\u{113E1}-\\\\u{113E2}\",\n \"\\\\u{116D0}-\\\\u{116E3}\",\n \"\\\\u{11B60}-\\\\u{11B67}\",\n \"\\\\u{11BC0}-\\\\u{11BE0}\",\n \"\\\\u{11BF0}-\\\\u{11BF9}\",\n \"\\\\u{11DB0}-\\\\u{11DDB}\",\n \"\\\\u{11DE0}-\\\\u{11DE9}\",\n \"\\\\u{11F5A}\",\n \"\\\\u{13460}-\\\\u{143FA}\",\n \"\\\\u{16100}-\\\\u{16139}\",\n \"\\\\u{16D40}-\\\\u{16D6C}\",\n \"\\\\u{16D70}-\\\\u{16D79}\",\n \"\\\\u{16EA0}-\\\\u{16EB8}\",\n \"\\\\u{16EBB}-\\\\u{16ED3}\",\n \"\\\\u{16FF2}-\\\\u{16FF6}\",\n \"\\\\u{187F8}-\\\\u{187FF}\",\n \"\\\\u{18CFF}\",\n \"\\\\u{18D09}-\\\\u{18D1E}\",\n \"\\\\u{18D80}-\\\\u{18DF2}\",\n \"\\\\u{1CCF0}-\\\\u{1CCF9}\",\n \"\\\\u{1E5D0}-\\\\u{1E5FA}\",\n \"\\\\u{1E6C0}-\\\\u{1E6DE}\",\n \"\\\\u{1E6E0}-\\\\u{1E6F5}\",\n \"\\\\u{1E6FE}-\\\\u{1E6FF}\",\n \"\\\\u{2B73A}-\\\\u{2B73F}\",\n \"\\\\u{2CEA2}-\\\\u{2CEAD}\",\n \"\\\\u{323B0}-\\\\u{33479}\",\n];\n"],"names":[],"mappings":"AAIO,MAAM,sBAAA,GAA4C;AAAA,EACvD,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,qBAAA;AAAA,EACA,WAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF;AAGO,MAAM,qBAAA,GAA2C;AAAA,EACtD,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,qBAAA;AAAA,EACA,WAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF;;"}
|
|
1
|
+
{"version":3,"file":"newer-identifier-ranges.mjs","sources":["../../../src/domain/ir/newer-identifier-ranges.ts"],"sourcesContent":["// Generated by scripts/identifier-ranges.ts (Node.js 26.0.0, Unicode\n// 17.0, TypeScript 5.4.5). Do not edit.\n\n/** `ID_Start` code points that TypeScript's scanner does not accept, as regex class items. */\nexport const NEWER_IDENTIFIER_START: readonly string[] = [\n \"\\\\u{870}-\\\\u{887}\",\n \"\\\\u{889}-\\\\u{88F}\",\n \"\\\\u{8B5}\",\n \"\\\\u{8BE}-\\\\u{8C9}\",\n \"\\\\u{C5C}-\\\\u{C5D}\",\n \"\\\\u{CDC}-\\\\u{CDD}\",\n \"\\\\u{D04}\",\n \"\\\\u{170D}\",\n \"\\\\u{171F}\",\n \"\\\\u{1B4C}\",\n \"\\\\u{1C89}-\\\\u{1C8A}\",\n \"\\\\u{2C2F}\",\n \"\\\\u{2C5F}\",\n \"\\\\u{31BB}-\\\\u{31BF}\",\n \"\\\\u{4DB6}-\\\\u{4DBF}\",\n \"\\\\u{9FF0}-\\\\u{9FFF}\",\n \"\\\\u{A7C0}-\\\\u{A7C1}\",\n \"\\\\u{A7C7}-\\\\u{A7DC}\",\n \"\\\\u{A7F1}-\\\\u{A7F6}\",\n \"\\\\u{AB68}-\\\\u{AB69}\",\n \"\\\\u{10570}-\\\\u{1057A}\",\n \"\\\\u{1057C}-\\\\u{1058A}\",\n \"\\\\u{1058C}-\\\\u{10592}\",\n \"\\\\u{10594}-\\\\u{10595}\",\n \"\\\\u{10597}-\\\\u{105A1}\",\n \"\\\\u{105A3}-\\\\u{105B1}\",\n \"\\\\u{105B3}-\\\\u{105B9}\",\n \"\\\\u{105BB}-\\\\u{105BC}\",\n \"\\\\u{105C0}-\\\\u{105F3}\",\n \"\\\\u{10780}-\\\\u{10785}\",\n \"\\\\u{10787}-\\\\u{107B0}\",\n \"\\\\u{107B2}-\\\\u{107BA}\",\n \"\\\\u{10940}-\\\\u{10959}\",\n \"\\\\u{10D4A}-\\\\u{10D65}\",\n \"\\\\u{10D6F}-\\\\u{10D85}\",\n \"\\\\u{10E80}-\\\\u{10EA9}\",\n \"\\\\u{10EB0}-\\\\u{10EB1}\",\n \"\\\\u{10EC2}-\\\\u{10EC7}\",\n \"\\\\u{10F70}-\\\\u{10F81}\",\n \"\\\\u{10FB0}-\\\\u{10FC4}\",\n \"\\\\u{11071}-\\\\u{11072}\",\n \"\\\\u{11075}\",\n \"\\\\u{11147}\",\n \"\\\\u{1123F}-\\\\u{11240}\",\n \"\\\\u{11380}-\\\\u{11389}\",\n \"\\\\u{1138B}\",\n \"\\\\u{1138E}\",\n \"\\\\u{11390}-\\\\u{113B5}\",\n \"\\\\u{113B7}\",\n \"\\\\u{113D1}\",\n \"\\\\u{113D3}\",\n \"\\\\u{11460}-\\\\u{11461}\",\n \"\\\\u{11740}-\\\\u{11746}\",\n \"\\\\u{11900}-\\\\u{11906}\",\n \"\\\\u{11909}\",\n \"\\\\u{1190C}-\\\\u{11913}\",\n \"\\\\u{11915}-\\\\u{11916}\",\n \"\\\\u{11918}-\\\\u{1192F}\",\n \"\\\\u{1193F}\",\n \"\\\\u{11941}\",\n \"\\\\u{11AB0}-\\\\u{11ABF}\",\n \"\\\\u{11BC0}-\\\\u{11BE0}\",\n \"\\\\u{11DB0}-\\\\u{11DDB}\",\n \"\\\\u{11F02}\",\n \"\\\\u{11F04}-\\\\u{11F10}\",\n \"\\\\u{11F12}-\\\\u{11F33}\",\n \"\\\\u{11FB0}\",\n \"\\\\u{12F90}-\\\\u{12FF0}\",\n \"\\\\u{1342F}\",\n \"\\\\u{13441}-\\\\u{13446}\",\n \"\\\\u{13460}-\\\\u{143FA}\",\n \"\\\\u{16100}-\\\\u{1611D}\",\n \"\\\\u{16A70}-\\\\u{16ABE}\",\n \"\\\\u{16D40}-\\\\u{16D6C}\",\n \"\\\\u{16EA0}-\\\\u{16EB8}\",\n \"\\\\u{16EBB}-\\\\u{16ED3}\",\n \"\\\\u{16FF2}-\\\\u{16FF6}\",\n \"\\\\u{187F8}-\\\\u{187FF}\",\n \"\\\\u{18AF3}-\\\\u{18CD5}\",\n \"\\\\u{18CFF}-\\\\u{18D1E}\",\n \"\\\\u{18D80}-\\\\u{18DF2}\",\n \"\\\\u{1AFF0}-\\\\u{1AFF3}\",\n \"\\\\u{1AFF5}-\\\\u{1AFFB}\",\n \"\\\\u{1AFFD}-\\\\u{1AFFE}\",\n \"\\\\u{1B11F}-\\\\u{1B122}\",\n \"\\\\u{1B132}\",\n \"\\\\u{1B155}\",\n \"\\\\u{1DF00}-\\\\u{1DF1E}\",\n \"\\\\u{1DF25}-\\\\u{1DF2A}\",\n \"\\\\u{1E030}-\\\\u{1E06D}\",\n \"\\\\u{1E290}-\\\\u{1E2AD}\",\n \"\\\\u{1E4D0}-\\\\u{1E4EB}\",\n \"\\\\u{1E5D0}-\\\\u{1E5ED}\",\n \"\\\\u{1E5F0}\",\n \"\\\\u{1E6C0}-\\\\u{1E6DE}\",\n \"\\\\u{1E6E0}-\\\\u{1E6E2}\",\n \"\\\\u{1E6E4}-\\\\u{1E6E5}\",\n \"\\\\u{1E6E7}-\\\\u{1E6ED}\",\n \"\\\\u{1E6F0}-\\\\u{1E6F4}\",\n \"\\\\u{1E6FE}-\\\\u{1E6FF}\",\n \"\\\\u{1E7E0}-\\\\u{1E7E6}\",\n \"\\\\u{1E7E8}-\\\\u{1E7EB}\",\n \"\\\\u{1E7ED}-\\\\u{1E7EE}\",\n \"\\\\u{1E7F0}-\\\\u{1E7FE}\",\n \"\\\\u{2A6D7}-\\\\u{2A6DF}\",\n \"\\\\u{2B735}-\\\\u{2B73F}\",\n \"\\\\u{2CEA2}-\\\\u{2CEAD}\",\n \"\\\\u{2EBF0}-\\\\u{2EE5D}\",\n \"\\\\u{30000}-\\\\u{3134A}\",\n \"\\\\u{31350}-\\\\u{33479}\",\n];\n\n/** `ID_Continue` code points that TypeScript's scanner does not accept, as regex class items. */\nexport const NEWER_IDENTIFIER_PART: readonly string[] = [\n \"\\\\u{870}-\\\\u{887}\",\n \"\\\\u{889}-\\\\u{88F}\",\n \"\\\\u{897}-\\\\u{89F}\",\n \"\\\\u{8B5}\",\n \"\\\\u{8BE}-\\\\u{8D2}\",\n \"\\\\u{B55}\",\n \"\\\\u{C3C}\",\n \"\\\\u{C5C}-\\\\u{C5D}\",\n \"\\\\u{CDC}-\\\\u{CDD}\",\n \"\\\\u{CF3}\",\n \"\\\\u{D04}\",\n \"\\\\u{D81}\",\n \"\\\\u{ECE}\",\n \"\\\\u{170D}\",\n \"\\\\u{1715}\",\n \"\\\\u{171F}\",\n \"\\\\u{180F}\",\n \"\\\\u{1ABF}-\\\\u{1ADD}\",\n \"\\\\u{1AE0}-\\\\u{1AEB}\",\n \"\\\\u{1B4C}\",\n \"\\\\u{1C89}-\\\\u{1C8A}\",\n \"\\\\u{1DFA}\",\n \"\\\\u{200C}-\\\\u{200D}\",\n \"\\\\u{2C2F}\",\n \"\\\\u{2C5F}\",\n \"\\\\u{30FB}\",\n \"\\\\u{31BB}-\\\\u{31BF}\",\n \"\\\\u{4DB6}-\\\\u{4DBF}\",\n \"\\\\u{9FF0}-\\\\u{9FFF}\",\n \"\\\\u{A7C0}-\\\\u{A7C1}\",\n \"\\\\u{A7C7}-\\\\u{A7DC}\",\n \"\\\\u{A7F1}-\\\\u{A7F6}\",\n \"\\\\u{A82C}\",\n \"\\\\u{AB68}-\\\\u{AB69}\",\n \"\\\\u{FF65}\",\n \"\\\\u{10570}-\\\\u{1057A}\",\n \"\\\\u{1057C}-\\\\u{1058A}\",\n \"\\\\u{1058C}-\\\\u{10592}\",\n \"\\\\u{10594}-\\\\u{10595}\",\n \"\\\\u{10597}-\\\\u{105A1}\",\n \"\\\\u{105A3}-\\\\u{105B1}\",\n \"\\\\u{105B3}-\\\\u{105B9}\",\n \"\\\\u{105BB}-\\\\u{105BC}\",\n \"\\\\u{105C0}-\\\\u{105F3}\",\n \"\\\\u{10780}-\\\\u{10785}\",\n \"\\\\u{10787}-\\\\u{107B0}\",\n \"\\\\u{107B2}-\\\\u{107BA}\",\n \"\\\\u{10940}-\\\\u{10959}\",\n \"\\\\u{10D40}-\\\\u{10D65}\",\n \"\\\\u{10D69}-\\\\u{10D6D}\",\n \"\\\\u{10D6F}-\\\\u{10D85}\",\n \"\\\\u{10E80}-\\\\u{10EA9}\",\n \"\\\\u{10EAB}-\\\\u{10EAC}\",\n \"\\\\u{10EB0}-\\\\u{10EB1}\",\n \"\\\\u{10EC2}-\\\\u{10EC7}\",\n \"\\\\u{10EFA}-\\\\u{10EFF}\",\n \"\\\\u{10F70}-\\\\u{10F85}\",\n \"\\\\u{10FB0}-\\\\u{10FC4}\",\n \"\\\\u{11070}-\\\\u{11075}\",\n \"\\\\u{110C2}\",\n \"\\\\u{11147}\",\n \"\\\\u{111CE}-\\\\u{111CF}\",\n \"\\\\u{1123F}-\\\\u{11241}\",\n \"\\\\u{11380}-\\\\u{11389}\",\n \"\\\\u{1138B}\",\n \"\\\\u{1138E}\",\n \"\\\\u{11390}-\\\\u{113B5}\",\n \"\\\\u{113B7}-\\\\u{113C0}\",\n \"\\\\u{113C2}\",\n \"\\\\u{113C5}\",\n \"\\\\u{113C7}-\\\\u{113CA}\",\n \"\\\\u{113CC}-\\\\u{113D3}\",\n \"\\\\u{113E1}-\\\\u{113E2}\",\n \"\\\\u{11460}-\\\\u{11461}\",\n \"\\\\u{116D0}-\\\\u{116E3}\",\n \"\\\\u{11740}-\\\\u{11746}\",\n \"\\\\u{11900}-\\\\u{11906}\",\n \"\\\\u{11909}\",\n \"\\\\u{1190C}-\\\\u{11913}\",\n \"\\\\u{11915}-\\\\u{11916}\",\n \"\\\\u{11918}-\\\\u{11935}\",\n \"\\\\u{11937}-\\\\u{11938}\",\n \"\\\\u{1193B}-\\\\u{11943}\",\n \"\\\\u{11950}-\\\\u{11959}\",\n \"\\\\u{11AB0}-\\\\u{11ABF}\",\n \"\\\\u{11B60}-\\\\u{11B67}\",\n \"\\\\u{11BC0}-\\\\u{11BE0}\",\n \"\\\\u{11BF0}-\\\\u{11BF9}\",\n \"\\\\u{11DB0}-\\\\u{11DDB}\",\n \"\\\\u{11DE0}-\\\\u{11DE9}\",\n \"\\\\u{11F00}-\\\\u{11F10}\",\n \"\\\\u{11F12}-\\\\u{11F3A}\",\n \"\\\\u{11F3E}-\\\\u{11F42}\",\n \"\\\\u{11F50}-\\\\u{11F5A}\",\n \"\\\\u{11FB0}\",\n \"\\\\u{12F90}-\\\\u{12FF0}\",\n \"\\\\u{1342F}\",\n \"\\\\u{13440}-\\\\u{13455}\",\n \"\\\\u{13460}-\\\\u{143FA}\",\n \"\\\\u{16100}-\\\\u{16139}\",\n \"\\\\u{16A70}-\\\\u{16ABE}\",\n \"\\\\u{16AC0}-\\\\u{16AC9}\",\n \"\\\\u{16D40}-\\\\u{16D6C}\",\n \"\\\\u{16D70}-\\\\u{16D79}\",\n \"\\\\u{16EA0}-\\\\u{16EB8}\",\n \"\\\\u{16EBB}-\\\\u{16ED3}\",\n \"\\\\u{16FE4}\",\n \"\\\\u{16FF0}-\\\\u{16FF6}\",\n \"\\\\u{187F8}-\\\\u{187FF}\",\n \"\\\\u{18AF3}-\\\\u{18CD5}\",\n \"\\\\u{18CFF}-\\\\u{18D1E}\",\n \"\\\\u{18D80}-\\\\u{18DF2}\",\n \"\\\\u{1AFF0}-\\\\u{1AFF3}\",\n \"\\\\u{1AFF5}-\\\\u{1AFFB}\",\n \"\\\\u{1AFFD}-\\\\u{1AFFE}\",\n \"\\\\u{1B11F}-\\\\u{1B122}\",\n \"\\\\u{1B132}\",\n \"\\\\u{1B155}\",\n \"\\\\u{1CCF0}-\\\\u{1CCF9}\",\n \"\\\\u{1CF00}-\\\\u{1CF2D}\",\n \"\\\\u{1CF30}-\\\\u{1CF46}\",\n \"\\\\u{1DF00}-\\\\u{1DF1E}\",\n \"\\\\u{1DF25}-\\\\u{1DF2A}\",\n \"\\\\u{1E030}-\\\\u{1E06D}\",\n \"\\\\u{1E08F}\",\n \"\\\\u{1E290}-\\\\u{1E2AE}\",\n \"\\\\u{1E4D0}-\\\\u{1E4F9}\",\n \"\\\\u{1E5D0}-\\\\u{1E5FA}\",\n \"\\\\u{1E6C0}-\\\\u{1E6DE}\",\n \"\\\\u{1E6E0}-\\\\u{1E6F5}\",\n \"\\\\u{1E6FE}-\\\\u{1E6FF}\",\n \"\\\\u{1E7E0}-\\\\u{1E7E6}\",\n \"\\\\u{1E7E8}-\\\\u{1E7EB}\",\n \"\\\\u{1E7ED}-\\\\u{1E7EE}\",\n \"\\\\u{1E7F0}-\\\\u{1E7FE}\",\n \"\\\\u{1FBF0}-\\\\u{1FBF9}\",\n \"\\\\u{2A6D7}-\\\\u{2A6DF}\",\n \"\\\\u{2B735}-\\\\u{2B73F}\",\n \"\\\\u{2CEA2}-\\\\u{2CEAD}\",\n \"\\\\u{2EBF0}-\\\\u{2EE5D}\",\n \"\\\\u{30000}-\\\\u{3134A}\",\n \"\\\\u{31350}-\\\\u{33479}\",\n];\n"],"names":[],"mappings":"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AAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF;;"}
|
|
@@ -27,7 +27,9 @@ function countNodes(root) {
|
|
|
27
27
|
entered.add(node);
|
|
28
28
|
const pending = isFirstVisit ? childrenOf(node).filter((child) => isContainer(child) && !entered.has(child)) : [];
|
|
29
29
|
if (pending.length > 0) {
|
|
30
|
-
|
|
30
|
+
for (const child of pending) {
|
|
31
|
+
stack.push(child);
|
|
32
|
+
}
|
|
31
33
|
continue;
|
|
32
34
|
}
|
|
33
35
|
stack.pop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alias-expansion.cjs","sources":["../../../src/domain/openapi/alias-expansion.ts"],"sourcesContent":["/**\n * YAML aliases (`*name`) make the parsed document share objects. A \"billion laughs\" document,\n * where each level refers to the previous one ten times, parses into a few hundred objects that\n * every walk over the document (Redocly's resolver, the generator) visits as 10^9 nodes: the run\n * took minutes and ended with \"RangeError: Set maximum size exceeded\" (pre-beta test plan 10.2).\n * A document is refused when its aliases expand it far beyond what it stores.\n */\n\n/** Expansion below this many nodes is allowed whatever the ratio: large real documents pass. */\nexport const ALIAS_EXPANSION_MIN_NODES = 1_000_000;\n/** Real documents reuse anchors a few times; a bomb multiplies its size by orders of magnitude. */\nexport const ALIAS_EXPANSION_MAX_RATIO = 100;\n\nexport interface NodeCounts {\n /** Nodes of the document as written: each object once, with its entries. */\n readonly stored: number;\n /** Nodes a walk visits when it follows every shared object again. */\n readonly expanded: number;\n}\n\nfunction childrenOf(node: object): unknown[] {\n return Array.isArray(node) ? node : Object.values(node);\n}\n\nfunction isContainer(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\n/** The expanded size of `node`, whose container children are all sized (or in a cycle). */\nfunction sizeOf(node: object, sizes: ReadonlyMap<object, number>): number {\n return childrenOf(node).reduce<number>(\n (total, child) => total + (isContainer(child) ? (sizes.get(child) ?? 1) : 1),\n 1,\n );\n}\n\n/**\n * Count stored and expanded nodes without recursion (documents can be thousands of levels deep)\n * and without expanding: each shared object is sized once. A cycle counts its back edge once.\n */\nexport function countNodes(root: unknown): NodeCounts {\n if (!isContainer(root)) {\n return { stored: 1, expanded: 1 };\n }\n const sizes = new Map<object, number>();\n const entered = new Set<object>();\n const stack: object[] = [root];\n while (stack.length > 0) {\n const node = stack[stack.length - 1] as object;\n const isFirstVisit = !entered.has(node);\n entered.add(node);\n const pending = isFirstVisit\n ? childrenOf(node).filter((child) => isContainer(child) && !entered.has(child))\n : [];\n if (pending.length > 0) {\n stack
|
|
1
|
+
{"version":3,"file":"alias-expansion.cjs","sources":["../../../src/domain/openapi/alias-expansion.ts"],"sourcesContent":["/**\n * YAML aliases (`*name`) make the parsed document share objects. A \"billion laughs\" document,\n * where each level refers to the previous one ten times, parses into a few hundred objects that\n * every walk over the document (Redocly's resolver, the generator) visits as 10^9 nodes: the run\n * took minutes and ended with \"RangeError: Set maximum size exceeded\" (pre-beta test plan 10.2).\n * A document is refused when its aliases expand it far beyond what it stores.\n */\n\n/** Expansion below this many nodes is allowed whatever the ratio: large real documents pass. */\nexport const ALIAS_EXPANSION_MIN_NODES = 1_000_000;\n/** Real documents reuse anchors a few times; a bomb multiplies its size by orders of magnitude. */\nexport const ALIAS_EXPANSION_MAX_RATIO = 100;\n\nexport interface NodeCounts {\n /** Nodes of the document as written: each object once, with its entries. */\n readonly stored: number;\n /** Nodes a walk visits when it follows every shared object again. */\n readonly expanded: number;\n}\n\nfunction childrenOf(node: object): unknown[] {\n return Array.isArray(node) ? node : Object.values(node);\n}\n\nfunction isContainer(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\n/** The expanded size of `node`, whose container children are all sized (or in a cycle). */\nfunction sizeOf(node: object, sizes: ReadonlyMap<object, number>): number {\n return childrenOf(node).reduce<number>(\n (total, child) => total + (isContainer(child) ? (sizes.get(child) ?? 1) : 1),\n 1,\n );\n}\n\n/**\n * Count stored and expanded nodes without recursion (documents can be thousands of levels deep)\n * and without expanding: each shared object is sized once. A cycle counts its back edge once.\n */\nexport function countNodes(root: unknown): NodeCounts {\n if (!isContainer(root)) {\n return { stored: 1, expanded: 1 };\n }\n const sizes = new Map<object, number>();\n const entered = new Set<object>();\n const stack: object[] = [root];\n while (stack.length > 0) {\n const node = stack[stack.length - 1] as object;\n const isFirstVisit = !entered.has(node);\n entered.add(node);\n const pending = isFirstVisit\n ? childrenOf(node).filter((child) => isContainer(child) && !entered.has(child))\n : [];\n if (pending.length > 0) {\n // One push per child: spreading an array of millions of children overflows the stack.\n for (const child of pending as object[]) {\n stack.push(child);\n }\n continue;\n }\n stack.pop();\n sizes.set(node, sizeOf(node, sizes));\n }\n let stored = 0;\n for (const node of sizes.keys()) {\n stored += 1 + childrenOf(node).filter((child) => !isContainer(child)).length;\n }\n return { stored, expanded: sizes.get(root) ?? 1 };\n}\n\n/** Whether the aliases of a parsed document expand it beyond the limits above. */\nexport function isAliasExpansionExcessive({ stored, expanded }: NodeCounts): boolean {\n return expanded > Math.max(ALIAS_EXPANSION_MIN_NODES, stored * ALIAS_EXPANSION_MAX_RATIO);\n}\n"],"names":[],"mappings":";;AASO,MAAM,yBAAA,GAA4B;AAElC,MAAM,yBAAA,GAA4B;AASzC,SAAS,WAAW,IAAA,EAAyB;AAC3C,EAAA,OAAO,MAAM,OAAA,CAAQ,IAAI,IAAI,IAAA,GAAO,MAAA,CAAO,OAAO,IAAI,CAAA;AACxD;AAEA,SAAS,YAAY,KAAA,EAAiC;AACpD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAGA,SAAS,MAAA,CAAO,MAAc,KAAA,EAA4C;AACxE,EAAA,OAAO,UAAA,CAAW,IAAI,CAAA,CAAE,MAAA;AAAA,IACtB,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,IAAS,WAAA,CAAY,KAAK,CAAA,GAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA,IAAK,CAAA,GAAK,CAAA,CAAA;AAAA,IAC1E;AAAA,GACF;AACF;AAMO,SAAS,WAAW,IAAA,EAA2B;AACpD,EAAA,IAAI,CAAC,WAAA,CAAY,IAAI,CAAA,EAAG;AACtB,IAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE;AAAA,EAClC;AACA,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,MAAM,KAAA,GAAkB,CAAC,IAAI,CAAA;AAC7B,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACtC,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,IAAA,MAAM,UAAU,YAAA,GACZ,UAAA,CAAW,IAAI,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,WAAA,CAAY,KAAK,KAAK,CAAC,OAAA,CAAQ,IAAI,KAAK,CAAC,IAC5E,EAAC;AACL,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AAEtB,MAAA,KAAA,MAAW,SAAS,OAAA,EAAqB;AACvC,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,GAAA,EAAI;AACV,IAAA,KAAA,CAAM,GAAA,CAAI,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,EAAG;AAC/B,IAAA,MAAA,IAAU,CAAA,GAAI,UAAA,CAAW,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,KAAU,CAAC,WAAA,CAAY,KAAK,CAAC,CAAA,CAAE,MAAA;AAAA,EACxE;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,MAAM,GAAA,CAAI,IAAI,KAAK,CAAA,EAAE;AAClD;AAGO,SAAS,yBAAA,CAA0B,EAAE,MAAA,EAAQ,QAAA,EAAS,EAAwB;AACnF,EAAA,OAAO,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,yBAAA,EAA2B,SAAS,yBAAyB,CAAA;AAC1F;;;;;"}
|
|
@@ -25,7 +25,9 @@ function countNodes(root) {
|
|
|
25
25
|
entered.add(node);
|
|
26
26
|
const pending = isFirstVisit ? childrenOf(node).filter((child) => isContainer(child) && !entered.has(child)) : [];
|
|
27
27
|
if (pending.length > 0) {
|
|
28
|
-
|
|
28
|
+
for (const child of pending) {
|
|
29
|
+
stack.push(child);
|
|
30
|
+
}
|
|
29
31
|
continue;
|
|
30
32
|
}
|
|
31
33
|
stack.pop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alias-expansion.mjs","sources":["../../../src/domain/openapi/alias-expansion.ts"],"sourcesContent":["/**\n * YAML aliases (`*name`) make the parsed document share objects. A \"billion laughs\" document,\n * where each level refers to the previous one ten times, parses into a few hundred objects that\n * every walk over the document (Redocly's resolver, the generator) visits as 10^9 nodes: the run\n * took minutes and ended with \"RangeError: Set maximum size exceeded\" (pre-beta test plan 10.2).\n * A document is refused when its aliases expand it far beyond what it stores.\n */\n\n/** Expansion below this many nodes is allowed whatever the ratio: large real documents pass. */\nexport const ALIAS_EXPANSION_MIN_NODES = 1_000_000;\n/** Real documents reuse anchors a few times; a bomb multiplies its size by orders of magnitude. */\nexport const ALIAS_EXPANSION_MAX_RATIO = 100;\n\nexport interface NodeCounts {\n /** Nodes of the document as written: each object once, with its entries. */\n readonly stored: number;\n /** Nodes a walk visits when it follows every shared object again. */\n readonly expanded: number;\n}\n\nfunction childrenOf(node: object): unknown[] {\n return Array.isArray(node) ? node : Object.values(node);\n}\n\nfunction isContainer(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\n/** The expanded size of `node`, whose container children are all sized (or in a cycle). */\nfunction sizeOf(node: object, sizes: ReadonlyMap<object, number>): number {\n return childrenOf(node).reduce<number>(\n (total, child) => total + (isContainer(child) ? (sizes.get(child) ?? 1) : 1),\n 1,\n );\n}\n\n/**\n * Count stored and expanded nodes without recursion (documents can be thousands of levels deep)\n * and without expanding: each shared object is sized once. A cycle counts its back edge once.\n */\nexport function countNodes(root: unknown): NodeCounts {\n if (!isContainer(root)) {\n return { stored: 1, expanded: 1 };\n }\n const sizes = new Map<object, number>();\n const entered = new Set<object>();\n const stack: object[] = [root];\n while (stack.length > 0) {\n const node = stack[stack.length - 1] as object;\n const isFirstVisit = !entered.has(node);\n entered.add(node);\n const pending = isFirstVisit\n ? childrenOf(node).filter((child) => isContainer(child) && !entered.has(child))\n : [];\n if (pending.length > 0) {\n stack
|
|
1
|
+
{"version":3,"file":"alias-expansion.mjs","sources":["../../../src/domain/openapi/alias-expansion.ts"],"sourcesContent":["/**\n * YAML aliases (`*name`) make the parsed document share objects. A \"billion laughs\" document,\n * where each level refers to the previous one ten times, parses into a few hundred objects that\n * every walk over the document (Redocly's resolver, the generator) visits as 10^9 nodes: the run\n * took minutes and ended with \"RangeError: Set maximum size exceeded\" (pre-beta test plan 10.2).\n * A document is refused when its aliases expand it far beyond what it stores.\n */\n\n/** Expansion below this many nodes is allowed whatever the ratio: large real documents pass. */\nexport const ALIAS_EXPANSION_MIN_NODES = 1_000_000;\n/** Real documents reuse anchors a few times; a bomb multiplies its size by orders of magnitude. */\nexport const ALIAS_EXPANSION_MAX_RATIO = 100;\n\nexport interface NodeCounts {\n /** Nodes of the document as written: each object once, with its entries. */\n readonly stored: number;\n /** Nodes a walk visits when it follows every shared object again. */\n readonly expanded: number;\n}\n\nfunction childrenOf(node: object): unknown[] {\n return Array.isArray(node) ? node : Object.values(node);\n}\n\nfunction isContainer(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\n/** The expanded size of `node`, whose container children are all sized (or in a cycle). */\nfunction sizeOf(node: object, sizes: ReadonlyMap<object, number>): number {\n return childrenOf(node).reduce<number>(\n (total, child) => total + (isContainer(child) ? (sizes.get(child) ?? 1) : 1),\n 1,\n );\n}\n\n/**\n * Count stored and expanded nodes without recursion (documents can be thousands of levels deep)\n * and without expanding: each shared object is sized once. A cycle counts its back edge once.\n */\nexport function countNodes(root: unknown): NodeCounts {\n if (!isContainer(root)) {\n return { stored: 1, expanded: 1 };\n }\n const sizes = new Map<object, number>();\n const entered = new Set<object>();\n const stack: object[] = [root];\n while (stack.length > 0) {\n const node = stack[stack.length - 1] as object;\n const isFirstVisit = !entered.has(node);\n entered.add(node);\n const pending = isFirstVisit\n ? childrenOf(node).filter((child) => isContainer(child) && !entered.has(child))\n : [];\n if (pending.length > 0) {\n // One push per child: spreading an array of millions of children overflows the stack.\n for (const child of pending as object[]) {\n stack.push(child);\n }\n continue;\n }\n stack.pop();\n sizes.set(node, sizeOf(node, sizes));\n }\n let stored = 0;\n for (const node of sizes.keys()) {\n stored += 1 + childrenOf(node).filter((child) => !isContainer(child)).length;\n }\n return { stored, expanded: sizes.get(root) ?? 1 };\n}\n\n/** Whether the aliases of a parsed document expand it beyond the limits above. */\nexport function isAliasExpansionExcessive({ stored, expanded }: NodeCounts): boolean {\n return expanded > Math.max(ALIAS_EXPANSION_MIN_NODES, stored * ALIAS_EXPANSION_MAX_RATIO);\n}\n"],"names":[],"mappings":"AASO,MAAM,yBAAA,GAA4B;AAElC,MAAM,yBAAA,GAA4B;AASzC,SAAS,WAAW,IAAA,EAAyB;AAC3C,EAAA,OAAO,MAAM,OAAA,CAAQ,IAAI,IAAI,IAAA,GAAO,MAAA,CAAO,OAAO,IAAI,CAAA;AACxD;AAEA,SAAS,YAAY,KAAA,EAAiC;AACpD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAGA,SAAS,MAAA,CAAO,MAAc,KAAA,EAA4C;AACxE,EAAA,OAAO,UAAA,CAAW,IAAI,CAAA,CAAE,MAAA;AAAA,IACtB,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,IAAS,WAAA,CAAY,KAAK,CAAA,GAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA,IAAK,CAAA,GAAK,CAAA,CAAA;AAAA,IAC1E;AAAA,GACF;AACF;AAMO,SAAS,WAAW,IAAA,EAA2B;AACpD,EAAA,IAAI,CAAC,WAAA,CAAY,IAAI,CAAA,EAAG;AACtB,IAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE;AAAA,EAClC;AACA,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,MAAM,KAAA,GAAkB,CAAC,IAAI,CAAA;AAC7B,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACtC,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,IAAA,MAAM,UAAU,YAAA,GACZ,UAAA,CAAW,IAAI,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,WAAA,CAAY,KAAK,KAAK,CAAC,OAAA,CAAQ,IAAI,KAAK,CAAC,IAC5E,EAAC;AACL,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AAEtB,MAAA,KAAA,MAAW,SAAS,OAAA,EAAqB;AACvC,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,GAAA,EAAI;AACV,IAAA,KAAA,CAAM,GAAA,CAAI,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAK,EAAG;AAC/B,IAAA,MAAA,IAAU,CAAA,GAAI,UAAA,CAAW,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,KAAU,CAAC,WAAA,CAAY,KAAK,CAAC,CAAA,CAAE,MAAA;AAAA,EACxE;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,MAAM,GAAA,CAAI,IAAI,KAAK,CAAA,EAAE;AAClD;AAGO,SAAS,yBAAA,CAA0B,EAAE,MAAA,EAAQ,QAAA,EAAS,EAAwB;AACnF,EAAA,OAAO,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,yBAAA,EAA2B,SAAS,yBAAyB,CAAA;AAC1F;;"}
|
|
@@ -27,7 +27,7 @@ function reaches(schema, search) {
|
|
|
27
27
|
}
|
|
28
28
|
const ref = schema.$ref;
|
|
29
29
|
if (typeof ref === "string") {
|
|
30
|
-
if (ref === search.target) {
|
|
30
|
+
if (jsonPointer.canonicalRef(ref) === jsonPointer.canonicalRef(search.target)) {
|
|
31
31
|
return true;
|
|
32
32
|
}
|
|
33
33
|
if (search.visited.has(ref)) {
|
|
@@ -47,14 +47,14 @@ function mappingRef(target) {
|
|
|
47
47
|
if (typeof target !== "string") {
|
|
48
48
|
return void 0;
|
|
49
49
|
}
|
|
50
|
-
return target.startsWith("#") ? target : `${COMPONENT_SCHEMAS}${jsonPointer.escapePointerSegment(target)}`;
|
|
50
|
+
return target.startsWith("#") ? jsonPointer.canonicalRef(target) : `${COMPONENT_SCHEMAS}${jsonPointer.escapePointerSegment(target)}`;
|
|
51
51
|
}
|
|
52
52
|
function unionMaps(union, target) {
|
|
53
53
|
const mapping = union.discriminator?.mapping;
|
|
54
54
|
if (!isSchemaObject(mapping)) {
|
|
55
55
|
return false;
|
|
56
56
|
}
|
|
57
|
-
return Object.values(mapping).some((value) => mappingRef(value) === target);
|
|
57
|
+
return Object.values(mapping).some((value) => mappingRef(value) === jsonPointer.canonicalRef(target));
|
|
58
58
|
}
|
|
59
59
|
function isUnionMember(union, target, resolve) {
|
|
60
60
|
return unionMaps(union, target) || unionReaches(union, target, resolve);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discriminated-union.cjs","sources":["../../../src/domain/openapi/discriminated-union.ts"],"sourcesContent":["import { escapePointerSegment } from \"./json-pointer.js\";\nimport type { Schema, SchemaObject } from \"./schema-object.js\";\n\n/**\n * A discriminator owner is either a parent that its members `allOf` (an object with the\n * discriminator property) or a union (`oneOf` / `anyOf` of the members). The generated type of a\n * union is a TypeScript union, so it cannot be used like a parent: `Omit<Union, \"kind\">` keeps\n * only the keys that every member has, and a member that intersects the union it belongs to\n * refers to itself (TS2502, upstream #1665).\n */\n\n/** Resolves a `$ref` of the document; `undefined` when it points nowhere. */\nexport type ResolveSchemaRef = (ref: string) => unknown;\n\nconst UNION_KEYWORDS = [\"oneOf\", \"anyOf\"] as const;\nconst COMPOSITION_KEYWORDS = [\"allOf\", ...UNION_KEYWORDS] as const;\n\nfunction isSchemaObject(value: unknown): value is SchemaObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction keywordItems(schema: SchemaObject, keywords: readonly string[]): readonly Schema[] {\n const record = schema as Readonly<Record<string, unknown>>;\n return keywords.flatMap((keyword) => {\n const items = record[keyword];\n return Array.isArray(items) ? (items as readonly Schema[]) : [];\n });\n}\n\n/** The `oneOf` and `anyOf` members of a schema; empty when it is not a union. */\nexport function unionMembers(schema: unknown): readonly Schema[] {\n return isSchemaObject(schema) ? keywordItems(schema, UNION_KEYWORDS) : [];\n}\n\n/** The schema at `ref` when it is a union (has `oneOf` or `anyOf` members), else undefined. */\nexport function unionAt(ref: string, resolve: ResolveSchemaRef): SchemaObject | undefined {\n const schema = resolve(ref);\n return isSchemaObject(schema) && unionMembers(schema).length > 0 ? schema : undefined;\n}\n\n/** What one search for a `$ref` has seen, so that a `$ref` cycle ends. */\ninterface Search {\n readonly target: string;\n readonly resolve: ResolveSchemaRef;\n readonly visited: Set<string>;\n}\n\nfunction reaches(schema: Schema, search: Search): boolean {\n if (!isSchemaObject(schema)) {\n return false;\n }\n const ref = (schema as { readonly $ref?: unknown }).$ref;\n if (typeof ref === \"string\") {\n if (ref === search.target) {\n return true;\n }\n if (search.visited.has(ref)) {\n return false;\n }\n search.visited.add(ref);\n return reaches(search.resolve(ref) as Schema, search);\n }\n return keywordItems(schema, COMPOSITION_KEYWORDS).some((item) => reaches(item, search));\n}\n\n/**\n * Whether the type of `union` contains the schema at `target` without an object in between: one\n * of its members is a `$ref` to it, or `allOf` / `oneOf` / `anyOf` such a `$ref`, at any depth.\n * Such a reference is resolved at once by TypeScript, unlike one in a property or an array.\n */\nexport function unionReaches(\n union: SchemaObject,\n target: string,\n resolve: ResolveSchemaRef,\n): boolean {\n const search = { target, resolve, visited: new Set<string>() };\n return unionMembers(union).some((member) => reaches(member, search));\n}\n\nconst COMPONENT_SCHEMAS = \"#/components/schemas/\";\n\n/** A mapping value as a `$ref`: a bare name is a component schema's name. */\nfunction mappingRef(target: unknown): string | undefined {\n if (typeof target !== \"string\") {\n return undefined;\n }\n return target.startsWith(\"#\")
|
|
1
|
+
{"version":3,"file":"discriminated-union.cjs","sources":["../../../src/domain/openapi/discriminated-union.ts"],"sourcesContent":["import { canonicalRef, escapePointerSegment } from \"./json-pointer.js\";\nimport type { Schema, SchemaObject } from \"./schema-object.js\";\n\n/**\n * A discriminator owner is either a parent that its members `allOf` (an object with the\n * discriminator property) or a union (`oneOf` / `anyOf` of the members). The generated type of a\n * union is a TypeScript union, so it cannot be used like a parent: `Omit<Union, \"kind\">` keeps\n * only the keys that every member has, and a member that intersects the union it belongs to\n * refers to itself (TS2502, upstream #1665).\n */\n\n/** Resolves a `$ref` of the document; `undefined` when it points nowhere. */\nexport type ResolveSchemaRef = (ref: string) => unknown;\n\nconst UNION_KEYWORDS = [\"oneOf\", \"anyOf\"] as const;\nconst COMPOSITION_KEYWORDS = [\"allOf\", ...UNION_KEYWORDS] as const;\n\nfunction isSchemaObject(value: unknown): value is SchemaObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction keywordItems(schema: SchemaObject, keywords: readonly string[]): readonly Schema[] {\n const record = schema as Readonly<Record<string, unknown>>;\n return keywords.flatMap((keyword) => {\n const items = record[keyword];\n return Array.isArray(items) ? (items as readonly Schema[]) : [];\n });\n}\n\n/** The `oneOf` and `anyOf` members of a schema; empty when it is not a union. */\nexport function unionMembers(schema: unknown): readonly Schema[] {\n return isSchemaObject(schema) ? keywordItems(schema, UNION_KEYWORDS) : [];\n}\n\n/** The schema at `ref` when it is a union (has `oneOf` or `anyOf` members), else undefined. */\nexport function unionAt(ref: string, resolve: ResolveSchemaRef): SchemaObject | undefined {\n const schema = resolve(ref);\n return isSchemaObject(schema) && unionMembers(schema).length > 0 ? schema : undefined;\n}\n\n/** What one search for a `$ref` has seen, so that a `$ref` cycle ends. */\ninterface Search {\n readonly target: string;\n readonly resolve: ResolveSchemaRef;\n readonly visited: Set<string>;\n}\n\nfunction reaches(schema: Schema, search: Search): boolean {\n if (!isSchemaObject(schema)) {\n return false;\n }\n const ref = (schema as { readonly $ref?: unknown }).$ref;\n if (typeof ref === \"string\") {\n if (canonicalRef(ref) === canonicalRef(search.target)) {\n return true;\n }\n if (search.visited.has(ref)) {\n return false;\n }\n search.visited.add(ref);\n return reaches(search.resolve(ref) as Schema, search);\n }\n return keywordItems(schema, COMPOSITION_KEYWORDS).some((item) => reaches(item, search));\n}\n\n/**\n * Whether the type of `union` contains the schema at `target` without an object in between: one\n * of its members is a `$ref` to it, or `allOf` / `oneOf` / `anyOf` such a `$ref`, at any depth.\n * Such a reference is resolved at once by TypeScript, unlike one in a property or an array.\n */\nexport function unionReaches(\n union: SchemaObject,\n target: string,\n resolve: ResolveSchemaRef,\n): boolean {\n const search = { target, resolve, visited: new Set<string>() };\n return unionMembers(union).some((member) => reaches(member, search));\n}\n\nconst COMPONENT_SCHEMAS = \"#/components/schemas/\";\n\n/** A mapping value as a `$ref`: a bare name is a component schema's name. */\nfunction mappingRef(target: unknown): string | undefined {\n if (typeof target !== \"string\") {\n return undefined;\n }\n return target.startsWith(\"#\")\n ? canonicalRef(target)\n : `${COMPONENT_SCHEMAS}${escapePointerSegment(target)}`;\n}\n\n/** Whether the discriminator `mapping` of `union` names the schema at `target`. */\nexport function unionMaps(union: SchemaObject, target: string): boolean {\n const mapping = (union.discriminator as { readonly mapping?: unknown } | undefined)?.mapping;\n if (!isSchemaObject(mapping)) {\n return false;\n }\n return Object.values(mapping).some((value) => mappingRef(value) === canonicalRef(target));\n}\n\n/**\n * Whether the schema at `target` is a member of `union`: the union's type contains it, or the\n * discriminator `mapping` names it, which gives it a value of the union as a member does.\n */\nexport function isUnionMember(\n union: SchemaObject,\n target: string,\n resolve: ResolveSchemaRef,\n): boolean {\n return unionMaps(union, target) || unionReaches(union, target, resolve);\n}\n"],"names":["canonicalRef","escapePointerSegment"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { escapePointerSegment } from './json-pointer.mjs';
|
|
1
|
+
import { canonicalRef, escapePointerSegment } from './json-pointer.mjs';
|
|
2
2
|
|
|
3
3
|
const UNION_KEYWORDS = ["oneOf", "anyOf"];
|
|
4
4
|
const COMPOSITION_KEYWORDS = ["allOf", ...UNION_KEYWORDS];
|
|
@@ -25,7 +25,7 @@ function reaches(schema, search) {
|
|
|
25
25
|
}
|
|
26
26
|
const ref = schema.$ref;
|
|
27
27
|
if (typeof ref === "string") {
|
|
28
|
-
if (ref === search.target) {
|
|
28
|
+
if (canonicalRef(ref) === canonicalRef(search.target)) {
|
|
29
29
|
return true;
|
|
30
30
|
}
|
|
31
31
|
if (search.visited.has(ref)) {
|
|
@@ -45,14 +45,14 @@ function mappingRef(target) {
|
|
|
45
45
|
if (typeof target !== "string") {
|
|
46
46
|
return void 0;
|
|
47
47
|
}
|
|
48
|
-
return target.startsWith("#") ? target : `${COMPONENT_SCHEMAS}${escapePointerSegment(target)}`;
|
|
48
|
+
return target.startsWith("#") ? canonicalRef(target) : `${COMPONENT_SCHEMAS}${escapePointerSegment(target)}`;
|
|
49
49
|
}
|
|
50
50
|
function unionMaps(union, target) {
|
|
51
51
|
const mapping = union.discriminator?.mapping;
|
|
52
52
|
if (!isSchemaObject(mapping)) {
|
|
53
53
|
return false;
|
|
54
54
|
}
|
|
55
|
-
return Object.values(mapping).some((value) => mappingRef(value) === target);
|
|
55
|
+
return Object.values(mapping).some((value) => mappingRef(value) === canonicalRef(target));
|
|
56
56
|
}
|
|
57
57
|
function isUnionMember(union, target, resolve) {
|
|
58
58
|
return unionMaps(union, target) || unionReaches(union, target, resolve);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discriminated-union.mjs","sources":["../../../src/domain/openapi/discriminated-union.ts"],"sourcesContent":["import { escapePointerSegment } from \"./json-pointer.js\";\nimport type { Schema, SchemaObject } from \"./schema-object.js\";\n\n/**\n * A discriminator owner is either a parent that its members `allOf` (an object with the\n * discriminator property) or a union (`oneOf` / `anyOf` of the members). The generated type of a\n * union is a TypeScript union, so it cannot be used like a parent: `Omit<Union, \"kind\">` keeps\n * only the keys that every member has, and a member that intersects the union it belongs to\n * refers to itself (TS2502, upstream #1665).\n */\n\n/** Resolves a `$ref` of the document; `undefined` when it points nowhere. */\nexport type ResolveSchemaRef = (ref: string) => unknown;\n\nconst UNION_KEYWORDS = [\"oneOf\", \"anyOf\"] as const;\nconst COMPOSITION_KEYWORDS = [\"allOf\", ...UNION_KEYWORDS] as const;\n\nfunction isSchemaObject(value: unknown): value is SchemaObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction keywordItems(schema: SchemaObject, keywords: readonly string[]): readonly Schema[] {\n const record = schema as Readonly<Record<string, unknown>>;\n return keywords.flatMap((keyword) => {\n const items = record[keyword];\n return Array.isArray(items) ? (items as readonly Schema[]) : [];\n });\n}\n\n/** The `oneOf` and `anyOf` members of a schema; empty when it is not a union. */\nexport function unionMembers(schema: unknown): readonly Schema[] {\n return isSchemaObject(schema) ? keywordItems(schema, UNION_KEYWORDS) : [];\n}\n\n/** The schema at `ref` when it is a union (has `oneOf` or `anyOf` members), else undefined. */\nexport function unionAt(ref: string, resolve: ResolveSchemaRef): SchemaObject | undefined {\n const schema = resolve(ref);\n return isSchemaObject(schema) && unionMembers(schema).length > 0 ? schema : undefined;\n}\n\n/** What one search for a `$ref` has seen, so that a `$ref` cycle ends. */\ninterface Search {\n readonly target: string;\n readonly resolve: ResolveSchemaRef;\n readonly visited: Set<string>;\n}\n\nfunction reaches(schema: Schema, search: Search): boolean {\n if (!isSchemaObject(schema)) {\n return false;\n }\n const ref = (schema as { readonly $ref?: unknown }).$ref;\n if (typeof ref === \"string\") {\n if (ref === search.target) {\n return true;\n }\n if (search.visited.has(ref)) {\n return false;\n }\n search.visited.add(ref);\n return reaches(search.resolve(ref) as Schema, search);\n }\n return keywordItems(schema, COMPOSITION_KEYWORDS).some((item) => reaches(item, search));\n}\n\n/**\n * Whether the type of `union` contains the schema at `target` without an object in between: one\n * of its members is a `$ref` to it, or `allOf` / `oneOf` / `anyOf` such a `$ref`, at any depth.\n * Such a reference is resolved at once by TypeScript, unlike one in a property or an array.\n */\nexport function unionReaches(\n union: SchemaObject,\n target: string,\n resolve: ResolveSchemaRef,\n): boolean {\n const search = { target, resolve, visited: new Set<string>() };\n return unionMembers(union).some((member) => reaches(member, search));\n}\n\nconst COMPONENT_SCHEMAS = \"#/components/schemas/\";\n\n/** A mapping value as a `$ref`: a bare name is a component schema's name. */\nfunction mappingRef(target: unknown): string | undefined {\n if (typeof target !== \"string\") {\n return undefined;\n }\n return target.startsWith(\"#\")
|
|
1
|
+
{"version":3,"file":"discriminated-union.mjs","sources":["../../../src/domain/openapi/discriminated-union.ts"],"sourcesContent":["import { canonicalRef, escapePointerSegment } from \"./json-pointer.js\";\nimport type { Schema, SchemaObject } from \"./schema-object.js\";\n\n/**\n * A discriminator owner is either a parent that its members `allOf` (an object with the\n * discriminator property) or a union (`oneOf` / `anyOf` of the members). The generated type of a\n * union is a TypeScript union, so it cannot be used like a parent: `Omit<Union, \"kind\">` keeps\n * only the keys that every member has, and a member that intersects the union it belongs to\n * refers to itself (TS2502, upstream #1665).\n */\n\n/** Resolves a `$ref` of the document; `undefined` when it points nowhere. */\nexport type ResolveSchemaRef = (ref: string) => unknown;\n\nconst UNION_KEYWORDS = [\"oneOf\", \"anyOf\"] as const;\nconst COMPOSITION_KEYWORDS = [\"allOf\", ...UNION_KEYWORDS] as const;\n\nfunction isSchemaObject(value: unknown): value is SchemaObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction keywordItems(schema: SchemaObject, keywords: readonly string[]): readonly Schema[] {\n const record = schema as Readonly<Record<string, unknown>>;\n return keywords.flatMap((keyword) => {\n const items = record[keyword];\n return Array.isArray(items) ? (items as readonly Schema[]) : [];\n });\n}\n\n/** The `oneOf` and `anyOf` members of a schema; empty when it is not a union. */\nexport function unionMembers(schema: unknown): readonly Schema[] {\n return isSchemaObject(schema) ? keywordItems(schema, UNION_KEYWORDS) : [];\n}\n\n/** The schema at `ref` when it is a union (has `oneOf` or `anyOf` members), else undefined. */\nexport function unionAt(ref: string, resolve: ResolveSchemaRef): SchemaObject | undefined {\n const schema = resolve(ref);\n return isSchemaObject(schema) && unionMembers(schema).length > 0 ? schema : undefined;\n}\n\n/** What one search for a `$ref` has seen, so that a `$ref` cycle ends. */\ninterface Search {\n readonly target: string;\n readonly resolve: ResolveSchemaRef;\n readonly visited: Set<string>;\n}\n\nfunction reaches(schema: Schema, search: Search): boolean {\n if (!isSchemaObject(schema)) {\n return false;\n }\n const ref = (schema as { readonly $ref?: unknown }).$ref;\n if (typeof ref === \"string\") {\n if (canonicalRef(ref) === canonicalRef(search.target)) {\n return true;\n }\n if (search.visited.has(ref)) {\n return false;\n }\n search.visited.add(ref);\n return reaches(search.resolve(ref) as Schema, search);\n }\n return keywordItems(schema, COMPOSITION_KEYWORDS).some((item) => reaches(item, search));\n}\n\n/**\n * Whether the type of `union` contains the schema at `target` without an object in between: one\n * of its members is a `$ref` to it, or `allOf` / `oneOf` / `anyOf` such a `$ref`, at any depth.\n * Such a reference is resolved at once by TypeScript, unlike one in a property or an array.\n */\nexport function unionReaches(\n union: SchemaObject,\n target: string,\n resolve: ResolveSchemaRef,\n): boolean {\n const search = { target, resolve, visited: new Set<string>() };\n return unionMembers(union).some((member) => reaches(member, search));\n}\n\nconst COMPONENT_SCHEMAS = \"#/components/schemas/\";\n\n/** A mapping value as a `$ref`: a bare name is a component schema's name. */\nfunction mappingRef(target: unknown): string | undefined {\n if (typeof target !== \"string\") {\n return undefined;\n }\n return target.startsWith(\"#\")\n ? canonicalRef(target)\n : `${COMPONENT_SCHEMAS}${escapePointerSegment(target)}`;\n}\n\n/** Whether the discriminator `mapping` of `union` names the schema at `target`. */\nexport function unionMaps(union: SchemaObject, target: string): boolean {\n const mapping = (union.discriminator as { readonly mapping?: unknown } | undefined)?.mapping;\n if (!isSchemaObject(mapping)) {\n return false;\n }\n return Object.values(mapping).some((value) => mappingRef(value) === canonicalRef(target));\n}\n\n/**\n * Whether the schema at `target` is a member of `union`: the union's type contains it, or the\n * discriminator `mapping` names it, which gives it a value of the union as a member does.\n */\nexport function isUnionMember(\n union: SchemaObject,\n target: string,\n resolve: ResolveSchemaRef,\n): boolean {\n return unionMaps(union, target) || unionReaches(union, target, resolve);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const appendAll = require('../append-all.cjs');
|
|
3
4
|
const admittedValues = require('./admitted-values.cjs');
|
|
4
5
|
const discriminatedUnion = require('./discriminated-union.cjs');
|
|
5
6
|
const jsonPointer = require('./json-pointer.cjs');
|
|
@@ -14,7 +15,7 @@ function refsOf(list) {
|
|
|
14
15
|
);
|
|
15
16
|
}
|
|
16
17
|
function mappingTarget(target) {
|
|
17
|
-
return target.startsWith("#") ? target : `${COMPONENT_SCHEMAS}${jsonPointer.escapePointerSegment(target)}`;
|
|
18
|
+
return target.startsWith("#") ? jsonPointer.canonicalRef(target) : `${COMPONENT_SCHEMAS}${jsonPointer.escapePointerSegment(target)}`;
|
|
18
19
|
}
|
|
19
20
|
function ownerAt(node, pointer) {
|
|
20
21
|
const discriminator = node.discriminator;
|
|
@@ -31,7 +32,7 @@ function pointerOf(visit) {
|
|
|
31
32
|
for (let current = visit; current?.key != null; current = current.parent) {
|
|
32
33
|
segments.unshift(current.key);
|
|
33
34
|
}
|
|
34
|
-
return jsonPointer.
|
|
35
|
+
return jsonPointer.appendPointer(jsonPointer.ROOT_POINTER, segments);
|
|
35
36
|
}
|
|
36
37
|
function childrenOf(visit) {
|
|
37
38
|
const { node } = visit;
|
|
@@ -46,7 +47,7 @@ function ownersIn(document) {
|
|
|
46
47
|
if (owner !== null) {
|
|
47
48
|
found.push(owner);
|
|
48
49
|
}
|
|
49
|
-
|
|
50
|
+
appendAll.appendAll(stack, childrenOf(visit).reverse());
|
|
50
51
|
}
|
|
51
52
|
return found;
|
|
52
53
|
}
|
|
@@ -99,14 +100,17 @@ function membersOf(owner, search) {
|
|
|
99
100
|
const listed = owner.memberRefs.map((ref) => ({ ref, skipped: /* @__PURE__ */ new Set([owner.pointer]) }));
|
|
100
101
|
const members = /* @__PURE__ */ new Map();
|
|
101
102
|
for (const member of [...listed, ...inheritingMembers(owner, search)]) {
|
|
102
|
-
|
|
103
|
-
|
|
103
|
+
const key = jsonPointer.canonicalRef(member.ref);
|
|
104
|
+
if (!members.has(key)) {
|
|
105
|
+
members.set(key, member);
|
|
104
106
|
}
|
|
105
107
|
}
|
|
106
108
|
return [...members.values()];
|
|
107
109
|
}
|
|
108
110
|
function memberValues(owner, member) {
|
|
109
|
-
const values = Object.entries(owner.mapping).filter(
|
|
111
|
+
const values = Object.entries(owner.mapping).filter(
|
|
112
|
+
([, target]) => typeof target === "string" && mappingTarget(target) === jsonPointer.canonicalRef(member)
|
|
113
|
+
).map(([key]) => key);
|
|
110
114
|
const name = jsonPointer.parseRefPointer(member).pop() ?? "";
|
|
111
115
|
return values.length > 0 ? { values, isImplicit: false } : { values: [name], isImplicit: true };
|
|
112
116
|
}
|