openapi-typesafe 1.0.0-rc.3 → 1.0.0-rc.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1972 -0
- package/dist/adapters/node-file-system/file-claims.cjs +105 -0
- package/dist/adapters/node-file-system/file-claims.cjs.map +1 -0
- package/dist/adapters/node-file-system/file-claims.mjs +95 -0
- package/dist/adapters/node-file-system/file-claims.mjs.map +1 -0
- package/dist/adapters/node-file-system/file-identity.cjs +82 -0
- package/dist/adapters/node-file-system/file-identity.cjs.map +1 -0
- package/dist/adapters/node-file-system/file-identity.mjs +74 -0
- package/dist/adapters/node-file-system/file-identity.mjs.map +1 -0
- package/dist/adapters/node-file-system/node-file-system.cjs +97 -14
- package/dist/adapters/node-file-system/node-file-system.cjs.map +1 -1
- package/dist/adapters/node-file-system/node-file-system.mjs +97 -14
- package/dist/adapters/node-file-system/node-file-system.mjs.map +1 -1
- package/dist/adapters/pipe-safe-writer/pipe-safe-writer.cjs +19 -0
- package/dist/adapters/pipe-safe-writer/pipe-safe-writer.cjs.map +1 -0
- package/dist/adapters/pipe-safe-writer/pipe-safe-writer.mjs +17 -0
- package/dist/adapters/pipe-safe-writer/pipe-safe-writer.mjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs +48 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.cjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs +45 -0
- package/dist/adapters/redocly-loader/bundled-mapping-copies.mjs.map +1 -0
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs +1 -1
- package/dist/adapters/redocly-loader/bundled-ref-repair.cjs.map +1 -1
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs +2 -2
- package/dist/adapters/redocly-loader/bundled-ref-repair.mjs.map +1 -1
- package/dist/adapters/redocly-loader/component-schemas.cjs +17 -0
- package/dist/adapters/redocly-loader/component-schemas.cjs.map +1 -0
- package/dist/adapters/redocly-loader/component-schemas.mjs +14 -0
- package/dist/adapters/redocly-loader/component-schemas.mjs.map +1 -0
- package/dist/adapters/redocly-loader/loaded-documents.cjs +28 -0
- package/dist/adapters/redocly-loader/loaded-documents.cjs.map +1 -0
- package/dist/adapters/redocly-loader/loaded-documents.mjs +21 -0
- package/dist/adapters/redocly-loader/loaded-documents.mjs.map +1 -0
- package/dist/adapters/redocly-loader/mapping-schema-names.cjs +22 -0
- package/dist/adapters/redocly-loader/mapping-schema-names.cjs.map +1 -0
- package/dist/adapters/redocly-loader/mapping-schema-names.mjs +20 -0
- package/dist/adapters/redocly-loader/mapping-schema-names.mjs.map +1 -0
- package/dist/adapters/redocly-loader/query-named-components.cjs +137 -0
- package/dist/adapters/redocly-loader/query-named-components.cjs.map +1 -0
- package/dist/adapters/redocly-loader/query-named-components.mjs +134 -0
- package/dist/adapters/redocly-loader/query-named-components.mjs.map +1 -0
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs +40 -29
- package/dist/adapters/redocly-loader/redocly-schema-loader.cjs.map +1 -1
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs +38 -27
- package/dist/adapters/redocly-loader/redocly-schema-loader.mjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-access.cjs +45 -4
- package/dist/adapters/redocly-loader/ref-access.cjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-access.mjs +45 -4
- package/dist/adapters/redocly-loader/ref-access.mjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-holders.cjs +52 -10
- package/dist/adapters/redocly-loader/ref-holders.cjs.map +1 -1
- package/dist/adapters/redocly-loader/ref-holders.mjs +53 -12
- package/dist/adapters/redocly-loader/ref-holders.mjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-body-limit.cjs +50 -0
- package/dist/adapters/redocly-loader/remote-body-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-body-limit.mjs +48 -0
- package/dist/adapters/redocly-loader/remote-body-limit.mjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-fetch.cjs +40 -9
- package/dist/adapters/redocly-loader/remote-fetch.cjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-fetch.mjs +40 -9
- package/dist/adapters/redocly-loader/remote-fetch.mjs.map +1 -1
- package/dist/adapters/redocly-loader/remote-node-limit.cjs +61 -0
- package/dist/adapters/redocly-loader/remote-node-limit.cjs.map +1 -0
- package/dist/adapters/redocly-loader/remote-node-limit.mjs +58 -0
- package/dist/adapters/redocly-loader/remote-node-limit.mjs.map +1 -0
- package/dist/adapters/redocly-loader/schema-load-errors.cjs +32 -8
- package/dist/adapters/redocly-loader/schema-load-errors.cjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-load-errors.mjs +32 -9
- package/dist/adapters/redocly-loader/schema-load-errors.mjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-source.cjs +18 -9
- package/dist/adapters/redocly-loader/schema-source.cjs.map +1 -1
- package/dist/adapters/redocly-loader/schema-source.mjs +20 -11
- package/dist/adapters/redocly-loader/schema-source.mjs.map +1 -1
- package/dist/adapters/redocly-loader/unsupported-keys.cjs +3 -5
- package/dist/adapters/redocly-loader/unsupported-keys.cjs.map +1 -1
- package/dist/adapters/redocly-loader/unsupported-keys.mjs +3 -5
- package/dist/adapters/redocly-loader/unsupported-keys.mjs.map +1 -1
- package/dist/adapters/terminal-logger/terminal-logger.cjs +10 -4
- package/dist/adapters/terminal-logger/terminal-logger.cjs.map +1 -1
- package/dist/adapters/terminal-logger/terminal-logger.mjs +10 -4
- package/dist/adapters/terminal-logger/terminal-logger.mjs.map +1 -1
- package/dist/api/default-ports.cjs +14 -2
- package/dist/api/default-ports.cjs.map +1 -1
- package/dist/api/default-ports.mjs +14 -2
- package/dist/api/default-ports.mjs.map +1 -1
- package/dist/api/discriminator-enum-parent.cjs +2 -2
- package/dist/api/discriminator-enum-parent.cjs.map +1 -1
- package/dist/api/discriminator-enum-parent.mjs +3 -3
- package/dist/api/discriminator-enum-parent.mjs.map +1 -1
- package/dist/api/discriminator-other-owners.cjs +5 -3
- package/dist/api/discriminator-other-owners.cjs.map +1 -1
- package/dist/api/discriminator-other-owners.mjs +5 -3
- package/dist/api/discriminator-other-owners.mjs.map +1 -1
- package/dist/api/discriminator-patch.cjs +5 -1
- package/dist/api/discriminator-patch.cjs.map +1 -1
- package/dist/api/discriminator-patch.mjs +5 -1
- package/dist/api/discriminator-patch.mjs.map +1 -1
- package/dist/api/discriminator-scan.cjs +15 -8
- package/dist/api/discriminator-scan.cjs.map +1 -1
- package/dist/api/discriminator-scan.mjs +15 -8
- package/dist/api/discriminator-scan.mjs.map +1 -1
- package/dist/api/document-refs.cjs +16 -1
- package/dist/api/document-refs.cjs.map +1 -1
- package/dist/api/document-refs.mjs +16 -1
- package/dist/api/document-refs.mjs.map +1 -1
- package/dist/api/document-run.cjs +6 -12
- package/dist/api/document-run.cjs.map +1 -1
- package/dist/api/document-run.mjs +6 -12
- package/dist/api/document-run.mjs.map +1 -1
- package/dist/api/legacy-utils.cjs.map +1 -1
- package/dist/api/legacy-utils.mjs.map +1 -1
- package/dist/api/openapi-ts.cjs +9 -6
- package/dist/api/openapi-ts.cjs.map +1 -1
- package/dist/api/openapi-ts.mjs +10 -8
- package/dist/api/openapi-ts.mjs.map +1 -1
- package/dist/api/ref-limit-options.cjs +63 -0
- package/dist/api/ref-limit-options.cjs.map +1 -0
- package/dist/api/ref-limit-options.mjs +57 -0
- package/dist/api/ref-limit-options.mjs.map +1 -0
- package/dist/api/schema-callbacks.cjs +36 -12
- package/dist/api/schema-callbacks.cjs.map +1 -1
- package/dist/api/schema-callbacks.mjs +36 -12
- package/dist/api/schema-callbacks.mjs.map +1 -1
- package/dist/api/transform-context.cjs +7 -3
- package/dist/api/transform-context.cjs.map +1 -1
- package/dist/api/transform-context.mjs +7 -3
- package/dist/api/transform-context.mjs.map +1 -1
- package/dist/api/transform-schema.cjs +47 -10
- package/dist/api/transform-schema.cjs.map +1 -1
- package/dist/api/transform-schema.mjs +48 -11
- package/dist/api/transform-schema.mjs.map +1 -1
- package/dist/application/print/text-writer.cjs +10 -3
- package/dist/application/print/text-writer.cjs.map +1 -1
- package/dist/application/print/text-writer.mjs +10 -3
- package/dist/application/print/text-writer.mjs.map +1 -1
- package/dist/application/stack-overflow.cjs +2 -1
- package/dist/application/stack-overflow.cjs.map +1 -1
- package/dist/application/stack-overflow.mjs +2 -1
- package/dist/application/stack-overflow.mjs.map +1 -1
- package/dist/application/transform/declared-value-types.cjs +36 -0
- package/dist/application/transform/declared-value-types.cjs.map +1 -0
- package/dist/application/transform/declared-value-types.mjs +34 -0
- package/dist/application/transform/declared-value-types.mjs.map +1 -0
- package/dist/application/transform/document/components.cjs +1 -1
- package/dist/application/transform/document/components.cjs.map +1 -1
- package/dist/application/transform/document/components.mjs +2 -2
- package/dist/application/transform/document/components.mjs.map +1 -1
- package/dist/application/transform/document/declared-type-names.cjs +23 -0
- package/dist/application/transform/document/declared-type-names.cjs.map +1 -0
- package/dist/application/transform/document/declared-type-names.mjs +20 -0
- package/dist/application/transform/document/declared-type-names.mjs.map +1 -0
- package/dist/application/transform/document/defs-root.cjs +1 -1
- package/dist/application/transform/document/defs-root.cjs.map +1 -1
- package/dist/application/transform/document/defs-root.mjs +2 -2
- package/dist/application/transform/document/defs-root.mjs.map +1 -1
- package/dist/application/transform/document/document.cjs +7 -2
- package/dist/application/transform/document/document.cjs.map +1 -1
- package/dist/application/transform/document/document.mjs +6 -3
- package/dist/application/transform/document/document.mjs.map +1 -1
- package/dist/application/transform/document/enum-names-given-back.cjs +62 -0
- package/dist/application/transform/document/enum-names-given-back.cjs.map +1 -0
- package/dist/application/transform/document/enum-names-given-back.mjs +58 -0
- package/dist/application/transform/document/enum-names-given-back.mjs.map +1 -0
- package/dist/application/transform/document/exploded-query-values.cjs +63 -0
- package/dist/application/transform/document/exploded-query-values.cjs.map +1 -0
- package/dist/application/transform/document/exploded-query-values.mjs +59 -0
- package/dist/application/transform/document/exploded-query-values.mjs.map +1 -0
- package/dist/application/transform/document/global-type-references.cjs +1 -0
- package/dist/application/transform/document/global-type-references.cjs.map +1 -1
- package/dist/application/transform/document/global-type-references.mjs +1 -1
- package/dist/application/transform/document/global-type-references.mjs.map +1 -1
- package/dist/application/transform/document/header.cjs +11 -3
- package/dist/application/transform/document/header.cjs.map +1 -1
- package/dist/application/transform/document/header.mjs +10 -2
- package/dist/application/transform/document/header.mjs.map +1 -1
- package/dist/application/transform/document/media-type.cjs +2 -2
- package/dist/application/transform/document/media-type.cjs.map +1 -1
- package/dist/application/transform/document/media-type.mjs +3 -3
- package/dist/application/transform/document/media-type.mjs.map +1 -1
- package/dist/application/transform/document/operation-keys-written.cjs +26 -0
- package/dist/application/transform/document/operation-keys-written.cjs.map +1 -0
- package/dist/application/transform/document/operation-keys-written.mjs +24 -0
- package/dist/application/transform/document/operation-keys-written.mjs.map +1 -0
- package/dist/application/transform/document/operation.cjs +1 -1
- package/dist/application/transform/document/operation.cjs.map +1 -1
- package/dist/application/transform/document/operation.mjs +2 -2
- package/dist/application/transform/document/operation.mjs.map +1 -1
- package/dist/application/transform/document/parameter-entries.cjs +34 -0
- package/dist/application/transform/document/parameter-entries.cjs.map +1 -0
- package/dist/application/transform/document/parameter-entries.mjs +30 -0
- package/dist/application/transform/document/parameter-entries.mjs.map +1 -0
- package/dist/application/transform/document/parameter.cjs +12 -4
- package/dist/application/transform/document/parameter.cjs.map +1 -1
- package/dist/application/transform/document/parameter.mjs +13 -5
- package/dist/application/transform/document/parameter.mjs.map +1 -1
- package/dist/application/transform/document/parameters.cjs +29 -34
- package/dist/application/transform/document/parameters.cjs.map +1 -1
- package/dist/application/transform/document/parameters.mjs +29 -34
- package/dist/application/transform/document/parameters.mjs.map +1 -1
- package/dist/application/transform/document/path-item.cjs +15 -17
- package/dist/application/transform/document/path-item.cjs.map +1 -1
- package/dist/application/transform/document/path-item.mjs +15 -19
- package/dist/application/transform/document/path-item.mjs.map +1 -1
- package/dist/application/transform/document/path-template-key.cjs +84 -0
- package/dist/application/transform/document/path-template-key.cjs.map +1 -0
- package/dist/application/transform/document/path-template-key.mjs +79 -0
- package/dist/application/transform/document/path-template-key.mjs.map +1 -0
- package/dist/application/transform/document/path-template-refs.cjs +70 -0
- package/dist/application/transform/document/path-template-refs.cjs.map +1 -0
- package/dist/application/transform/document/path-template-refs.mjs +67 -0
- package/dist/application/transform/document/path-template-refs.mjs.map +1 -0
- package/dist/application/transform/document/paths-enum.cjs +8 -6
- package/dist/application/transform/document/paths-enum.cjs.map +1 -1
- package/dist/application/transform/document/paths-enum.mjs +8 -7
- package/dist/application/transform/document/paths-enum.mjs.map +1 -1
- package/dist/application/transform/document/paths.cjs +43 -67
- package/dist/application/transform/document/paths.cjs.map +1 -1
- package/dist/application/transform/document/paths.mjs +42 -68
- package/dist/application/transform/document/paths.mjs.map +1 -1
- package/dist/application/transform/document/referenced-parameter.cjs +80 -0
- package/dist/application/transform/document/referenced-parameter.cjs.map +1 -0
- package/dist/application/transform/document/referenced-parameter.mjs +78 -0
- package/dist/application/transform/document/referenced-parameter.mjs.map +1 -0
- package/dist/application/transform/document/request-body.cjs +1 -1
- package/dist/application/transform/document/request-body.cjs.map +1 -1
- package/dist/application/transform/document/request-body.mjs +2 -2
- package/dist/application/transform/document/request-body.mjs.map +1 -1
- package/dist/application/transform/document/response.cjs +2 -2
- package/dist/application/transform/document/response.cjs.map +1 -1
- package/dist/application/transform/document/response.mjs +3 -3
- package/dist/application/transform/document/response.mjs.map +1 -1
- package/dist/application/transform/document/responses.cjs +1 -1
- package/dist/application/transform/document/responses.cjs.map +1 -1
- package/dist/application/transform/document/responses.mjs +2 -2
- package/dist/application/transform/document/responses.mjs.map +1 -1
- package/dist/application/transform/document/root-type-aliases.cjs +8 -23
- package/dist/application/transform/document/root-type-aliases.cjs.map +1 -1
- package/dist/application/transform/document/root-type-aliases.mjs +8 -24
- package/dist/application/transform/document/root-type-aliases.mjs.map +1 -1
- package/dist/application/transform/document/type-resolution.cjs +3 -1
- package/dist/application/transform/document/type-resolution.cjs.map +1 -1
- package/dist/application/transform/document/type-resolution.mjs +3 -1
- package/dist/application/transform/document/type-resolution.mjs.map +1 -1
- package/dist/application/transform/document/webhooks.cjs +10 -3
- package/dist/application/transform/document/webhooks.cjs.map +1 -1
- package/dist/application/transform/document/webhooks.mjs +10 -3
- package/dist/application/transform/document/webhooks.mjs.map +1 -1
- package/dist/application/transform/footer/document-footer.cjs +16 -5
- package/dist/application/transform/footer/document-footer.cjs.map +1 -1
- package/dist/application/transform/footer/document-footer.mjs +16 -5
- package/dist/application/transform/footer/document-footer.mjs.map +1 -1
- package/dist/application/transform/footer/enum-name-claims.cjs +48 -0
- package/dist/application/transform/footer/enum-name-claims.cjs.map +1 -0
- package/dist/application/transform/footer/enum-name-claims.mjs +46 -0
- package/dist/application/transform/footer/enum-name-claims.mjs.map +1 -0
- package/dist/application/transform/footer/operation-keys.cjs +23 -0
- package/dist/application/transform/footer/operation-keys.cjs.map +1 -0
- package/dist/application/transform/footer/operation-keys.mjs +21 -0
- package/dist/application/transform/footer/operation-keys.mjs.map +1 -0
- package/dist/application/transform/footer/type-evaluation.cjs +4 -4
- package/dist/application/transform/footer/type-evaluation.cjs.map +1 -1
- package/dist/application/transform/footer/type-evaluation.mjs +4 -4
- package/dist/application/transform/footer/type-evaluation.mjs.map +1 -1
- package/dist/application/transform/helper-types.cjs +3 -3
- package/dist/application/transform/helper-types.cjs.map +1 -1
- package/dist/application/transform/helper-types.mjs +3 -3
- package/dist/application/transform/helper-types.mjs.map +1 -1
- package/dist/application/transform/numbered-names.cjs +9 -0
- package/dist/application/transform/numbered-names.cjs.map +1 -1
- package/dist/application/transform/numbered-names.mjs +9 -1
- package/dist/application/transform/numbered-names.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-location.cjs +5 -5
- package/dist/application/transform/ref-pointer/generated-location.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-location.mjs +3 -3
- package/dist/application/transform/ref-pointer/generated-location.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-shape.cjs +47 -66
- package/dist/application/transform/ref-pointer/generated-shape.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/generated-shape.mjs +36 -50
- package/dist/application/transform/ref-pointer/generated-shape.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/inline-cycles.cjs +2 -2
- package/dist/application/transform/ref-pointer/inline-cycles.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/inline-cycles.mjs +1 -1
- package/dist/application/transform/ref-pointer/inline-cycles.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/located-node.cjs +23 -0
- package/dist/application/transform/ref-pointer/located-node.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/located-node.mjs +18 -0
- package/dist/application/transform/ref-pointer/located-node.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/original-index.cjs +68 -13
- package/dist/application/transform/ref-pointer/original-index.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/original-index.mjs +70 -15
- package/dist/application/transform/ref-pointer/original-index.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-type.cjs +2 -2
- package/dist/application/transform/ref-pointer/pointer-type.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-type.mjs +1 -1
- package/dist/application/transform/ref-pointer/pointer-type.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-walk.cjs +54 -13
- package/dist/application/transform/ref-pointer/pointer-walk.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/pointer-walk.mjs +46 -7
- package/dist/application/transform/ref-pointer/pointer-walk.mjs.map +1 -1
- package/dist/application/transform/ref-pointer/property-shape.cjs +52 -0
- package/dist/application/transform/ref-pointer/property-shape.cjs.map +1 -0
- package/dist/application/transform/ref-pointer/property-shape.mjs +45 -0
- package/dist/application/transform/ref-pointer/property-shape.mjs.map +1 -0
- package/dist/application/transform/ref-pointer/typed-walk.cjs +79 -21
- package/dist/application/transform/ref-pointer/typed-walk.cjs.map +1 -1
- package/dist/application/transform/ref-pointer/typed-walk.mjs +76 -18
- package/dist/application/transform/ref-pointer/typed-walk.mjs.map +1 -1
- package/dist/application/transform/ref-type.cjs +2 -1
- package/dist/application/transform/ref-type.cjs.map +1 -1
- package/dist/application/transform/ref-type.mjs +2 -1
- package/dist/application/transform/ref-type.mjs.map +1 -1
- package/dist/application/transform/schema/access-flags.cjs.map +1 -1
- package/dist/application/transform/schema/access-flags.mjs.map +1 -1
- package/dist/application/transform/schema/composition-type.cjs +1 -1
- package/dist/application/transform/schema/composition-type.cjs.map +1 -1
- package/dist/application/transform/schema/composition-type.mjs +2 -2
- package/dist/application/transform/schema/composition-type.mjs.map +1 -1
- package/dist/application/transform/schema/enum-rule.cjs +1 -1
- package/dist/application/transform/schema/enum-rule.cjs.map +1 -1
- package/dist/application/transform/schema/enum-rule.mjs +2 -2
- package/dist/application/transform/schema/enum-rule.mjs.map +1 -1
- package/dist/application/transform/schema/index-signature-type.cjs +21 -0
- package/dist/application/transform/schema/index-signature-type.cjs.map +1 -0
- package/dist/application/transform/schema/index-signature-type.mjs +19 -0
- package/dist/application/transform/schema/index-signature-type.mjs.map +1 -0
- package/dist/application/transform/schema/input-location.cjs +23 -0
- package/dist/application/transform/schema/input-location.cjs.map +1 -0
- package/dist/application/transform/schema/input-location.mjs +21 -0
- package/dist/application/transform/schema/input-location.mjs.map +1 -0
- package/dist/application/transform/schema/object-type.cjs +18 -8
- package/dist/application/transform/schema/object-type.cjs.map +1 -1
- package/dist/application/transform/schema/object-type.mjs +19 -9
- package/dist/application/transform/schema/object-type.mjs.map +1 -1
- package/dist/application/transform/schema/ref-siblings.cjs +47 -0
- package/dist/application/transform/schema/ref-siblings.cjs.map +1 -0
- package/dist/application/transform/schema/ref-siblings.mjs +45 -0
- package/dist/application/transform/schema/ref-siblings.mjs.map +1 -0
- package/dist/application/transform/schema/schema-transform.cjs +6 -3
- package/dist/application/transform/schema/schema-transform.cjs.map +1 -1
- package/dist/application/transform/schema/schema-transform.mjs +6 -3
- package/dist/application/transform/schema/schema-transform.mjs.map +1 -1
- package/dist/application/transform/schema/unevaluated-properties.cjs +2 -30
- package/dist/application/transform/schema/unevaluated-properties.cjs.map +1 -1
- package/dist/application/transform/schema/unevaluated-properties.mjs +3 -31
- package/dist/application/transform/schema/unevaluated-properties.mjs.map +1 -1
- package/dist/application/transform/schema-comment.cjs +5 -1
- package/dist/application/transform/schema-comment.cjs.map +1 -1
- package/dist/application/transform/schema-comment.mjs +5 -1
- package/dist/application/transform/schema-comment.mjs.map +1 -1
- package/dist/cli/api-logger.cjs +13 -0
- package/dist/cli/api-logger.cjs.map +1 -0
- package/dist/cli/api-logger.mjs +11 -0
- package/dist/cli/api-logger.mjs.map +1 -0
- package/dist/cli/api-settings.cjs +57 -9
- package/dist/cli/api-settings.cjs.map +1 -1
- package/dist/cli/api-settings.mjs +56 -11
- package/dist/cli/api-settings.mjs.map +1 -1
- package/dist/cli/api-writes.cjs +72 -0
- package/dist/cli/api-writes.cjs.map +1 -0
- package/dist/cli/api-writes.mjs +69 -0
- package/dist/cli/api-writes.mjs.map +1 -0
- package/dist/cli/cli-arguments.cjs +51 -11
- package/dist/cli/cli-arguments.cjs.map +1 -1
- package/dist/cli/cli-arguments.mjs +51 -11
- package/dist/cli/cli-arguments.mjs.map +1 -1
- package/dist/cli/cli-errors.cjs +29 -1
- package/dist/cli/cli-errors.cjs.map +1 -1
- package/dist/cli/cli-errors.mjs +29 -2
- package/dist/cli/cli-errors.mjs.map +1 -1
- package/dist/cli/cli-output.cjs +111 -4
- package/dist/cli/cli-output.cjs.map +1 -1
- package/dist/cli/cli-output.mjs +104 -5
- package/dist/cli/cli-output.mjs.map +1 -1
- package/dist/cli/main.cjs +13 -3
- package/dist/cli/main.cjs.map +1 -1
- package/dist/cli/main.mjs +14 -4
- package/dist/cli/main.mjs.map +1 -1
- package/dist/cli/redocly-apis.cjs +94 -37
- package/dist/cli/redocly-apis.cjs.map +1 -1
- package/dist/cli/redocly-apis.mjs +99 -42
- package/dist/cli/redocly-apis.mjs.map +1 -1
- package/dist/cli/ref-limits.cjs +15 -1
- package/dist/cli/ref-limits.cjs.map +1 -1
- package/dist/cli/ref-limits.mjs +15 -2
- package/dist/cli/ref-limits.mjs.map +1 -1
- package/dist/cli/run-cli.cjs +37 -14
- package/dist/cli/run-cli.cjs.map +1 -1
- package/dist/cli/run-cli.mjs +39 -16
- package/dist/cli/run-cli.mjs.map +1 -1
- package/dist/domain/append-all.cjs +10 -0
- package/dist/domain/append-all.cjs.map +1 -0
- package/dist/domain/append-all.mjs +8 -0
- package/dist/domain/append-all.mjs.map +1 -0
- package/dist/domain/cause-secrets.cjs +52 -0
- package/dist/domain/cause-secrets.cjs.map +1 -0
- package/dist/domain/cause-secrets.mjs +50 -0
- package/dist/domain/cause-secrets.mjs.map +1 -0
- package/dist/domain/errors.cjs +11 -3
- package/dist/domain/errors.cjs.map +1 -1
- package/dist/domain/errors.mjs +11 -3
- package/dist/domain/errors.mjs.map +1 -1
- package/dist/domain/ir/identifier-text.cjs.map +1 -1
- package/dist/domain/ir/identifier-text.mjs +1 -1
- package/dist/domain/ir/identifier-text.mjs.map +1 -1
- package/dist/domain/ir/ir-shape.cjs +187 -0
- package/dist/domain/ir/ir-shape.cjs.map +1 -0
- package/dist/domain/ir/ir-shape.mjs +184 -0
- package/dist/domain/ir/ir-shape.mjs.map +1 -0
- package/dist/domain/ir/newer-identifier-ranges.cjs +182 -29
- package/dist/domain/ir/newer-identifier-ranges.cjs.map +1 -1
- package/dist/domain/ir/newer-identifier-ranges.mjs +182 -29
- package/dist/domain/ir/newer-identifier-ranges.mjs.map +1 -1
- package/dist/domain/location-text.cjs +9 -0
- package/dist/domain/location-text.cjs.map +1 -0
- package/dist/domain/location-text.mjs +7 -0
- package/dist/domain/location-text.mjs.map +1 -0
- package/dist/domain/openapi/alias-expansion.cjs +3 -1
- package/dist/domain/openapi/alias-expansion.cjs.map +1 -1
- package/dist/domain/openapi/alias-expansion.mjs +3 -1
- package/dist/domain/openapi/alias-expansion.mjs.map +1 -1
- package/dist/domain/openapi/discriminated-union.cjs +3 -3
- package/dist/domain/openapi/discriminated-union.cjs.map +1 -1
- package/dist/domain/openapi/discriminated-union.mjs +4 -4
- package/dist/domain/openapi/discriminated-union.mjs.map +1 -1
- package/dist/domain/openapi/discriminator-conflicts.cjs +10 -6
- package/dist/domain/openapi/discriminator-conflicts.cjs.map +1 -1
- package/dist/domain/openapi/discriminator-conflicts.mjs +11 -7
- package/dist/domain/openapi/discriminator-conflicts.mjs.map +1 -1
- package/dist/domain/openapi/document-places.cjs +55 -0
- package/dist/domain/openapi/document-places.cjs.map +1 -0
- package/dist/domain/openapi/document-places.mjs +53 -0
- package/dist/domain/openapi/document-places.mjs.map +1 -0
- package/dist/domain/openapi/json-pointer.cjs +43 -1
- package/dist/domain/openapi/json-pointer.cjs.map +1 -1
- package/dist/domain/openapi/json-pointer.mjs +40 -2
- package/dist/domain/openapi/json-pointer.mjs.map +1 -1
- package/dist/domain/openapi/schema-dialect.cjs +15 -0
- package/dist/domain/openapi/schema-dialect.cjs.map +1 -0
- package/dist/domain/openapi/schema-dialect.mjs +12 -0
- package/dist/domain/openapi/schema-dialect.mjs.map +1 -0
- package/dist/domain/openapi/unsupported-features.cjs +1 -1
- package/dist/domain/openapi/unsupported-features.cjs.map +1 -1
- package/dist/domain/openapi/unsupported-features.mjs +2 -2
- package/dist/domain/openapi/unsupported-features.mjs.map +1 -1
- package/dist/domain/output-fixes.cjs +20 -0
- package/dist/domain/output-fixes.cjs.map +1 -1
- package/dist/domain/output-fixes.mjs +20 -0
- package/dist/domain/output-fixes.mjs.map +1 -1
- package/dist/domain/terminal-text.cjs +31 -0
- package/dist/domain/terminal-text.cjs.map +1 -0
- package/dist/domain/terminal-text.mjs +29 -0
- package/dist/domain/terminal-text.mjs.map +1 -0
- package/dist/domain/url-secrets.cjs +48 -0
- package/dist/domain/url-secrets.cjs.map +1 -0
- package/dist/domain/url-secrets.mjs +45 -0
- package/dist/domain/url-secrets.mjs.map +1 -0
- package/dist/domain/warnings.cjs +1 -0
- package/dist/domain/warnings.cjs.map +1 -1
- package/dist/domain/warnings.mjs +1 -0
- package/dist/domain/warnings.mjs.map +1 -1
- package/dist/index.d.cts +46 -20
- package/dist/index.d.mts +46 -20
- package/dist/index.d.ts +46 -20
- package/package.json +4 -5
- package/src/adapters/node-file-system/file-claims.ts +138 -0
- package/src/adapters/node-file-system/file-identity.ts +137 -0
- package/src/adapters/node-file-system/node-file-system.ts +158 -18
- package/src/adapters/pipe-safe-writer/pipe-safe-writer.ts +29 -0
- package/src/adapters/redocly-loader/bundled-mapping-copies.ts +60 -0
- package/src/adapters/redocly-loader/bundled-ref-repair.ts +2 -2
- package/src/adapters/redocly-loader/component-schemas.ts +19 -0
- package/src/adapters/redocly-loader/loaded-documents.ts +46 -0
- package/src/adapters/redocly-loader/mapping-schema-names.ts +25 -0
- package/src/adapters/redocly-loader/query-named-components.ts +201 -0
- package/src/adapters/redocly-loader/redocly-schema-loader.ts +64 -38
- package/src/adapters/redocly-loader/ref-access.ts +51 -4
- package/src/adapters/redocly-loader/ref-holders.ts +76 -15
- package/src/adapters/redocly-loader/remote-body-limit.ts +66 -0
- package/src/adapters/redocly-loader/remote-fetch.ts +85 -13
- package/src/adapters/redocly-loader/remote-node-limit.ts +102 -0
- package/src/adapters/redocly-loader/schema-load-errors.ts +52 -13
- package/src/adapters/redocly-loader/schema-source.ts +35 -11
- package/src/adapters/redocly-loader/unsupported-keys.ts +3 -7
- package/src/adapters/terminal-logger/terminal-logger.ts +17 -6
- package/src/api/default-ports.ts +33 -4
- package/src/api/discriminator-enum-parent.ts +3 -3
- package/src/api/discriminator-other-owners.ts +5 -3
- package/src/api/discriminator-patch.ts +5 -1
- package/src/api/discriminator-scan.ts +16 -8
- package/src/api/document-refs.ts +29 -1
- package/src/api/document-run.ts +10 -19
- package/src/api/legacy-utils.ts +5 -1
- package/src/api/openapi-ts.ts +26 -8
- package/src/api/ref-limit-options.ts +76 -0
- package/src/api/run-context.ts +3 -0
- package/src/api/schema-callbacks.ts +60 -17
- package/src/api/transform-context.ts +7 -3
- package/src/api/transform-schema.ts +79 -12
- package/src/application/ports/file-system.ts +47 -0
- package/src/application/ports/schema-loader.ts +11 -1
- package/src/application/print/text-writer.ts +10 -3
- package/src/application/stack-overflow.ts +9 -5
- package/src/application/transform/declared-value-types.ts +42 -0
- package/src/application/transform/document/components.ts +2 -2
- package/src/application/transform/document/declared-type-names.ts +36 -0
- package/src/application/transform/document/defs-root.ts +2 -2
- package/src/application/transform/document/document.ts +8 -5
- package/src/application/transform/document/enum-names-given-back.ts +91 -0
- package/src/application/transform/document/exploded-query-values.ts +88 -0
- package/src/application/transform/document/global-type-references.ts +1 -1
- package/src/application/transform/document/header.ts +25 -5
- package/src/application/transform/document/media-type.ts +4 -3
- package/src/application/transform/document/operation-keys-written.ts +27 -0
- package/src/application/transform/document/operation.ts +2 -2
- package/src/application/transform/document/parameter-entries.ts +70 -0
- package/src/application/transform/document/parameter.ts +21 -9
- package/src/application/transform/document/parameters.ts +56 -66
- package/src/application/transform/document/path-item.ts +16 -34
- package/src/application/transform/document/path-template-key.ts +152 -0
- package/src/application/transform/document/path-template-refs.ts +106 -0
- package/src/application/transform/document/paths-enum.ts +24 -10
- package/src/application/transform/document/paths.ts +59 -125
- package/src/application/transform/document/referenced-parameter.ts +146 -0
- package/src/application/transform/document/request-body.ts +2 -2
- package/src/application/transform/document/response.ts +3 -3
- package/src/application/transform/document/responses.ts +2 -2
- package/src/application/transform/document/root-type-aliases.ts +17 -38
- package/src/application/transform/document/type-resolution.ts +2 -1
- package/src/application/transform/document/webhooks.ts +19 -6
- package/src/application/transform/footer/document-footer.ts +36 -9
- package/src/application/transform/footer/enum-name-claims.ts +62 -0
- package/src/application/transform/footer/operation-keys.ts +28 -0
- package/src/application/transform/footer/type-evaluation.ts +4 -4
- package/src/application/transform/helper-types.ts +8 -7
- package/src/application/transform/numbered-names.ts +15 -0
- package/src/application/transform/ref-pointer/generated-location.ts +3 -3
- package/src/application/transform/ref-pointer/generated-shape.ts +67 -78
- package/src/application/transform/ref-pointer/inline-cycles.ts +1 -1
- package/src/application/transform/ref-pointer/located-node.ts +38 -0
- package/src/application/transform/ref-pointer/original-index.ts +100 -17
- package/src/application/transform/ref-pointer/pointer-type.ts +1 -1
- package/src/application/transform/ref-pointer/pointer-walk.ts +82 -8
- package/src/application/transform/ref-pointer/property-shape.ts +97 -0
- package/src/application/transform/ref-pointer/typed-walk.ts +117 -25
- package/src/application/transform/ref-type.ts +2 -1
- package/src/application/transform/schema/access-flags.ts +5 -2
- package/src/application/transform/schema/composition-type.ts +2 -2
- package/src/application/transform/schema/enum-rule.ts +6 -2
- package/src/application/transform/schema/index-signature-type.ts +31 -0
- package/src/application/transform/schema/input-location.ts +35 -0
- package/src/application/transform/schema/object-type.ts +22 -12
- package/src/application/transform/schema/ref-siblings.ts +76 -0
- package/src/application/transform/schema/schema-context.ts +3 -0
- package/src/application/transform/schema/schema-transform.ts +6 -3
- package/src/application/transform/schema/unevaluated-properties.ts +4 -44
- package/src/application/transform/schema-comment.ts +5 -1
- package/src/application/transform/transform-context.ts +5 -0
- package/src/cli/api-logger.ts +17 -0
- package/src/cli/api-settings.ts +80 -13
- package/src/cli/api-writes.ts +117 -0
- package/src/cli/cli-arguments.ts +90 -14
- package/src/cli/cli-dependencies.ts +26 -4
- package/src/cli/cli-errors.ts +42 -1
- package/src/cli/cli-output.ts +195 -15
- package/src/cli/main.ts +14 -5
- package/src/cli/redocly-apis.ts +177 -52
- package/src/cli/ref-limits.ts +21 -2
- package/src/cli/run-cli.ts +76 -15
- package/src/domain/append-all.ts +10 -0
- package/src/domain/cause-secrets.ts +86 -0
- package/src/domain/errors.ts +16 -5
- package/src/domain/ir/identifier-text.ts +6 -5
- package/src/domain/ir/ir-shape.ts +299 -0
- package/src/domain/ir/newer-identifier-ranges.ts +183 -30
- package/src/domain/location-text.ts +12 -0
- package/src/domain/openapi/alias-expansion.ts +4 -1
- package/src/domain/openapi/discriminated-union.ts +6 -4
- package/src/domain/openapi/discriminator-conflicts.ts +21 -7
- package/src/domain/openapi/document-object.ts +2 -0
- package/src/domain/openapi/document-places.ts +78 -0
- package/src/domain/openapi/json-pointer.ts +96 -7
- package/src/domain/openapi/schema-dialect.ts +22 -0
- package/src/domain/openapi/unsupported-features.ts +2 -2
- package/src/domain/output-fixes.ts +28 -2
- package/src/domain/terminal-text.ts +44 -0
- package/src/domain/url-secrets.ts +72 -0
- package/src/domain/warnings.ts +1 -0
- package/src/types/generator-options.ts +1 -1
- package/dist/cli/main.d.cts +0 -2
- package/dist/cli/main.d.mts +0 -2
- package/dist/cli/main.d.ts +0 -2
- package/dist/domain/url-credentials.cjs +0 -10
- package/dist/domain/url-credentials.cjs.map +0 -1
- package/dist/domain/url-credentials.mjs +0 -8
- package/dist/domain/url-credentials.mjs.map +0 -1
- package/src/domain/url-credentials.ts +0 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper-types.cjs","sources":["../../../src/application/transform/helper-types.ts"],"sourcesContent":["/**\n * The helper type aliases the generator adds to the footer, declared once each. The text is the\n * original's source text as the TypeScript printer printed it, so printing it as written gives\n * the original output (ENGINEERING_PLAN 6.2 and 6.6), except for the fixes noted below.\n */\nexport interface HelperType {\n readonly name: string;\n readonly text: string;\n}\n\nfunction lines(...parts: readonly string[]): string {\n return parts.join(\"\\n\");\n}\n\nexport const HELPER_TYPES = {\n withRequired: {\n name: \"WithRequired\",\n text: lines(\"type WithRequired<T, K extends keyof T> = T & {\", \" [P in K]-?: T[P];\", \"};\"),\n },\n // `unevaluated-properties` (roadmap R11): the value types of every member of a union, so a\n // `$ref` to a `oneOf` schema gives the values of each variant, not only of the shared keys.\n propertyValues: {\n name: \"PropertyValues\",\n text: \"type PropertyValues<T> = T extends unknown ? T[keyof T] : never;\",\n },\n // Task 7.4 changes the original text on purpose: `readonly unknown[]` also flattens the arrays\n // of `--immutable` (upstream #2714, #2749), and `NonNullable` looks through nullable parents\n // (upstream #2737). The old text did not compile for those schemas.\n flattenedDeepRequired: {\n name: \"FlattenedDeepRequired\",\n text: lines(\n \"type FlattenedDeepRequired<T> = {\",\n \" [K in keyof T]-?: FlattenedDeepRequired<T[K] extends readonly unknown[] | undefined | \" +\n \"null ? Extract<T[K], readonly unknown[]>[number] : NonNullable<T[K]>>;\",\n \"};\",\n ),\n },\n // `readonly unknown[]`: a readonly array value type stays as is (upstream #2749).\n readonlyArray: {\n name: \"ReadonlyArray\",\n text: lines(\n \"type ReadonlyArray<T> = [\",\n \" Exclude<T, undefined>\",\n \"] extends [\",\n \" readonly unknown[]\",\n \"] ? Readonly<Exclude<T, undefined>> : Readonly<Exclude<T, undefined>[]>;\",\n ),\n },\n} as const satisfies Readonly<Record<string, HelperType>>;\n\n/**\n * The `--read-write-markers` helper types, written before the root types. Task 7.6 replaces the\n * original text on purpose (ADR-014): primitives (also branded), readonly arrays, tuples,\n * intersected arrays
|
|
1
|
+
{"version":3,"file":"helper-types.cjs","sources":["../../../src/application/transform/helper-types.ts"],"sourcesContent":["/**\n * The helper type aliases the generator adds to the footer, declared once each. The text is the\n * original's source text as the TypeScript printer printed it, so printing it as written gives\n * the original output (ENGINEERING_PLAN 6.2 and 6.6), except for the fixes noted below.\n */\nexport interface HelperType {\n readonly name: string;\n readonly text: string;\n}\n\nfunction lines(...parts: readonly string[]): string {\n return parts.join(\"\\n\");\n}\n\nexport const HELPER_TYPES = {\n withRequired: {\n name: \"WithRequired\",\n text: lines(\"type WithRequired<T, K extends keyof T> = T & {\", \" [P in K]-?: T[P];\", \"};\"),\n },\n // `unevaluated-properties` (roadmap R11): the value types of every member of a union, so a\n // `$ref` to a `oneOf` schema gives the values of each variant, not only of the shared keys.\n propertyValues: {\n name: \"PropertyValues\",\n text: \"type PropertyValues<T> = T extends unknown ? T[keyof T] : never;\",\n },\n // Task 7.4 changes the original text on purpose: `readonly unknown[]` also flattens the arrays\n // of `--immutable` (upstream #2714, #2749), and `NonNullable` looks through nullable parents\n // (upstream #2737). The old text did not compile for those schemas.\n flattenedDeepRequired: {\n name: \"FlattenedDeepRequired\",\n text: lines(\n \"type FlattenedDeepRequired<T> = {\",\n \" [K in keyof T]-?: FlattenedDeepRequired<T[K] extends readonly unknown[] | undefined | \" +\n \"null ? Extract<T[K], readonly unknown[]>[number] : NonNullable<T[K]>>;\",\n \"};\",\n ),\n },\n // `readonly unknown[]`: a readonly array value type stays as is (upstream #2749).\n readonlyArray: {\n name: \"ReadonlyArray\",\n text: lines(\n \"type ReadonlyArray<T> = [\",\n \" Exclude<T, undefined>\",\n \"] extends [\",\n \" readonly unknown[]\",\n \"] ? Readonly<Exclude<T, undefined>> : Readonly<Exclude<T, undefined>[]>;\",\n ),\n },\n} as const satisfies Readonly<Record<string, HelperType>>;\n\n/**\n * The `--read-write-markers` helper types, written before the root types. Task 7.6 replaces the\n * original text on purpose (ADR-014): primitives (also branded), readonly arrays, tuples,\n * intersected arrays, null-only and `any` properties keep their types (upstream #2615, #2620,\n * #2632, #2717, #2765). The declarations equal the `Readable` / `Writable` that\n * openapi-typesafe-fetch declares (`test/api/read-write-marker-types.test.ts`); the text is what\n * the TypeScript printer prints.\n */\nexport const READ_WRITE_MARKER_TYPES = lines(\n \"export type $Read<T> = {\",\n \" readonly $read: T;\",\n \"};\",\n \"export type $Write<T> = {\",\n \" readonly $write: T;\",\n \"};\",\n \"type ReadWritePrimitive = string | number | boolean | bigint | symbol | null | undefined;\",\n \"type ReadWriteLeaf = ReadWritePrimitive | ((...args: never) => unknown);\",\n \"type ReadWriteMarkedKeys<T, Marker> = keyof {\",\n \" [K in keyof T as 0 extends 1 & T[K] ? never : NonNullable<T[K]> extends never ? never : \" +\n \"NonNullable<T[K]> extends Marker ? K : never]: never;\",\n \"};\",\n 'type ReadWriteResolveArray<T extends readonly unknown[], Resolved extends \"read\" | ' +\n '\"write\"> = T[number][] extends T ? T extends unknown[] ? ReadWriteResolve<T[number], ' +\n \"Resolved>[] : readonly ReadWriteResolve<T[number], Resolved>[] : {\",\n \" [K in keyof T]: ReadWriteResolve<T[K], Resolved>;\",\n \"};\",\n 'type ReadWriteResolve<T, Resolved extends \"read\" | \"write\"> = Resolved extends \"read\" ? ' +\n \"Readable<T> : Writable<T>;\",\n \"export type Readable<T> = T extends $Write<any> ? never : T extends $Read<infer U> ? \" +\n \"Readable<U> : T extends ReadWriteLeaf ? T : T extends readonly unknown[] ? \" +\n 'ReadWriteResolveArray<T, \"read\"> : T extends object ? {',\n \" [K in keyof T as K extends ReadWriteMarkedKeys<T, $Write<any>> ? never : K]: \" +\n \"Readable<T[K]>;\",\n \"} : T;\",\n \"export type Writable<T> = T extends $Read<any> ? never : T extends $Write<infer U> ? \" +\n \"Writable<U> : T extends ReadWriteLeaf ? T : T extends readonly unknown[] ? \" +\n 'ReadWriteResolveArray<T, \"write\"> : T extends object ? {',\n \" [K in keyof T as K extends ReadWriteMarkedKeys<T, $Read<any>> ? never : K]: \" +\n \"Writable<T[K]>;\",\n \"} & {\",\n \" [K in ReadWriteMarkedKeys<T, $Read<any>>]?: never;\",\n \"} : T;\",\n);\n"],"names":[],"mappings":";;AAUA,SAAS,SAAS,KAAA,EAAkC;AAClD,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEO,MAAM,YAAA,GAAe;AAAA,EAC1B,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,KAAA,CAAM,iDAAA,EAAmD,uBAAA,EAAyB,IAAI;AAAA,GAC9F;AAAA;AAAA;AAAA,EAGA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA;AAAA;AAAA;AAAA,EAIA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,uBAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,MACJ,mCAAA;AAAA,MACA,kKAAA;AAAA,MAEA;AAAA;AACF,GACF;AAAA;AAAA,EAEA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,eAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,MACJ,2BAAA;AAAA,MACA,2BAAA;AAAA,MACA,aAAA;AAAA,MACA,wBAAA;AAAA,MACA;AAAA;AACF;AAEJ;AAUO,MAAM,uBAAA,GAA0B,KAAA;AAAA,EACrC,0BAAA;AAAA,EACA,wBAAA;AAAA,EACA,IAAA;AAAA,EACA,2BAAA;AAAA,EACA,yBAAA;AAAA,EACA,IAAA;AAAA,EACA,2FAAA;AAAA,EACA,0EAAA;AAAA,EACA,+CAAA;AAAA,EACA,mJAAA;AAAA,EAEA,IAAA;AAAA,EACA,4OAAA;AAAA,EAGA,uDAAA;AAAA,EACA,IAAA;AAAA,EACA,oHAAA;AAAA,EAEA,yNAAA;AAAA,EAGA,kGAAA;AAAA,EAEA,QAAA;AAAA,EACA,0NAAA;AAAA,EAGA,iGAAA;AAAA,EAEA,OAAA;AAAA,EACA,wDAAA;AAAA,EACA;AACF;;;"}
|
|
@@ -44,9 +44,9 @@ const READ_WRITE_MARKER_TYPES = lines(
|
|
|
44
44
|
"};",
|
|
45
45
|
"type ReadWritePrimitive = string | number | boolean | bigint | symbol | null | undefined;",
|
|
46
46
|
"type ReadWriteLeaf = ReadWritePrimitive | ((...args: never) => unknown);",
|
|
47
|
-
"type ReadWriteMarkedKeys<T, Marker> = {",
|
|
48
|
-
" [K in keyof T]
|
|
49
|
-
"}
|
|
47
|
+
"type ReadWriteMarkedKeys<T, Marker> = keyof {",
|
|
48
|
+
" [K in keyof T as 0 extends 1 & T[K] ? never : NonNullable<T[K]> extends never ? never : NonNullable<T[K]> extends Marker ? K : never]: never;",
|
|
49
|
+
"};",
|
|
50
50
|
'type ReadWriteResolveArray<T extends readonly unknown[], Resolved extends "read" | "write"> = T[number][] extends T ? T extends unknown[] ? ReadWriteResolve<T[number], Resolved>[] : readonly ReadWriteResolve<T[number], Resolved>[] : {',
|
|
51
51
|
" [K in keyof T]: ReadWriteResolve<T[K], Resolved>;",
|
|
52
52
|
"};",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper-types.mjs","sources":["../../../src/application/transform/helper-types.ts"],"sourcesContent":["/**\n * The helper type aliases the generator adds to the footer, declared once each. The text is the\n * original's source text as the TypeScript printer printed it, so printing it as written gives\n * the original output (ENGINEERING_PLAN 6.2 and 6.6), except for the fixes noted below.\n */\nexport interface HelperType {\n readonly name: string;\n readonly text: string;\n}\n\nfunction lines(...parts: readonly string[]): string {\n return parts.join(\"\\n\");\n}\n\nexport const HELPER_TYPES = {\n withRequired: {\n name: \"WithRequired\",\n text: lines(\"type WithRequired<T, K extends keyof T> = T & {\", \" [P in K]-?: T[P];\", \"};\"),\n },\n // `unevaluated-properties` (roadmap R11): the value types of every member of a union, so a\n // `$ref` to a `oneOf` schema gives the values of each variant, not only of the shared keys.\n propertyValues: {\n name: \"PropertyValues\",\n text: \"type PropertyValues<T> = T extends unknown ? T[keyof T] : never;\",\n },\n // Task 7.4 changes the original text on purpose: `readonly unknown[]` also flattens the arrays\n // of `--immutable` (upstream #2714, #2749), and `NonNullable` looks through nullable parents\n // (upstream #2737). The old text did not compile for those schemas.\n flattenedDeepRequired: {\n name: \"FlattenedDeepRequired\",\n text: lines(\n \"type FlattenedDeepRequired<T> = {\",\n \" [K in keyof T]-?: FlattenedDeepRequired<T[K] extends readonly unknown[] | undefined | \" +\n \"null ? Extract<T[K], readonly unknown[]>[number] : NonNullable<T[K]>>;\",\n \"};\",\n ),\n },\n // `readonly unknown[]`: a readonly array value type stays as is (upstream #2749).\n readonlyArray: {\n name: \"ReadonlyArray\",\n text: lines(\n \"type ReadonlyArray<T> = [\",\n \" Exclude<T, undefined>\",\n \"] extends [\",\n \" readonly unknown[]\",\n \"] ? Readonly<Exclude<T, undefined>> : Readonly<Exclude<T, undefined>[]>;\",\n ),\n },\n} as const satisfies Readonly<Record<string, HelperType>>;\n\n/**\n * The `--read-write-markers` helper types, written before the root types. Task 7.6 replaces the\n * original text on purpose (ADR-014): primitives (also branded), readonly arrays, tuples,\n * intersected arrays
|
|
1
|
+
{"version":3,"file":"helper-types.mjs","sources":["../../../src/application/transform/helper-types.ts"],"sourcesContent":["/**\n * The helper type aliases the generator adds to the footer, declared once each. The text is the\n * original's source text as the TypeScript printer printed it, so printing it as written gives\n * the original output (ENGINEERING_PLAN 6.2 and 6.6), except for the fixes noted below.\n */\nexport interface HelperType {\n readonly name: string;\n readonly text: string;\n}\n\nfunction lines(...parts: readonly string[]): string {\n return parts.join(\"\\n\");\n}\n\nexport const HELPER_TYPES = {\n withRequired: {\n name: \"WithRequired\",\n text: lines(\"type WithRequired<T, K extends keyof T> = T & {\", \" [P in K]-?: T[P];\", \"};\"),\n },\n // `unevaluated-properties` (roadmap R11): the value types of every member of a union, so a\n // `$ref` to a `oneOf` schema gives the values of each variant, not only of the shared keys.\n propertyValues: {\n name: \"PropertyValues\",\n text: \"type PropertyValues<T> = T extends unknown ? T[keyof T] : never;\",\n },\n // Task 7.4 changes the original text on purpose: `readonly unknown[]` also flattens the arrays\n // of `--immutable` (upstream #2714, #2749), and `NonNullable` looks through nullable parents\n // (upstream #2737). The old text did not compile for those schemas.\n flattenedDeepRequired: {\n name: \"FlattenedDeepRequired\",\n text: lines(\n \"type FlattenedDeepRequired<T> = {\",\n \" [K in keyof T]-?: FlattenedDeepRequired<T[K] extends readonly unknown[] | undefined | \" +\n \"null ? Extract<T[K], readonly unknown[]>[number] : NonNullable<T[K]>>;\",\n \"};\",\n ),\n },\n // `readonly unknown[]`: a readonly array value type stays as is (upstream #2749).\n readonlyArray: {\n name: \"ReadonlyArray\",\n text: lines(\n \"type ReadonlyArray<T> = [\",\n \" Exclude<T, undefined>\",\n \"] extends [\",\n \" readonly unknown[]\",\n \"] ? Readonly<Exclude<T, undefined>> : Readonly<Exclude<T, undefined>[]>;\",\n ),\n },\n} as const satisfies Readonly<Record<string, HelperType>>;\n\n/**\n * The `--read-write-markers` helper types, written before the root types. Task 7.6 replaces the\n * original text on purpose (ADR-014): primitives (also branded), readonly arrays, tuples,\n * intersected arrays, null-only and `any` properties keep their types (upstream #2615, #2620,\n * #2632, #2717, #2765). The declarations equal the `Readable` / `Writable` that\n * openapi-typesafe-fetch declares (`test/api/read-write-marker-types.test.ts`); the text is what\n * the TypeScript printer prints.\n */\nexport const READ_WRITE_MARKER_TYPES = lines(\n \"export type $Read<T> = {\",\n \" readonly $read: T;\",\n \"};\",\n \"export type $Write<T> = {\",\n \" readonly $write: T;\",\n \"};\",\n \"type ReadWritePrimitive = string | number | boolean | bigint | symbol | null | undefined;\",\n \"type ReadWriteLeaf = ReadWritePrimitive | ((...args: never) => unknown);\",\n \"type ReadWriteMarkedKeys<T, Marker> = keyof {\",\n \" [K in keyof T as 0 extends 1 & T[K] ? never : NonNullable<T[K]> extends never ? never : \" +\n \"NonNullable<T[K]> extends Marker ? K : never]: never;\",\n \"};\",\n 'type ReadWriteResolveArray<T extends readonly unknown[], Resolved extends \"read\" | ' +\n '\"write\"> = T[number][] extends T ? T extends unknown[] ? ReadWriteResolve<T[number], ' +\n \"Resolved>[] : readonly ReadWriteResolve<T[number], Resolved>[] : {\",\n \" [K in keyof T]: ReadWriteResolve<T[K], Resolved>;\",\n \"};\",\n 'type ReadWriteResolve<T, Resolved extends \"read\" | \"write\"> = Resolved extends \"read\" ? ' +\n \"Readable<T> : Writable<T>;\",\n \"export type Readable<T> = T extends $Write<any> ? never : T extends $Read<infer U> ? \" +\n \"Readable<U> : T extends ReadWriteLeaf ? T : T extends readonly unknown[] ? \" +\n 'ReadWriteResolveArray<T, \"read\"> : T extends object ? {',\n \" [K in keyof T as K extends ReadWriteMarkedKeys<T, $Write<any>> ? never : K]: \" +\n \"Readable<T[K]>;\",\n \"} : T;\",\n \"export type Writable<T> = T extends $Read<any> ? never : T extends $Write<infer U> ? \" +\n \"Writable<U> : T extends ReadWriteLeaf ? T : T extends readonly unknown[] ? \" +\n 'ReadWriteResolveArray<T, \"write\"> : T extends object ? {',\n \" [K in keyof T as K extends ReadWriteMarkedKeys<T, $Read<any>> ? never : K]: \" +\n \"Writable<T[K]>;\",\n \"} & {\",\n \" [K in ReadWriteMarkedKeys<T, $Read<any>>]?: never;\",\n \"} : T;\",\n);\n"],"names":[],"mappings":"AAUA,SAAS,SAAS,KAAA,EAAkC;AAClD,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEO,MAAM,YAAA,GAAe;AAAA,EAC1B,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAM,KAAA,CAAM,iDAAA,EAAmD,uBAAA,EAAyB,IAAI;AAAA,GAC9F;AAAA;AAAA;AAAA,EAGA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA;AAAA;AAAA;AAAA,EAIA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,uBAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,MACJ,mCAAA;AAAA,MACA,kKAAA;AAAA,MAEA;AAAA;AACF,GACF;AAAA;AAAA,EAEA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,eAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,MACJ,2BAAA;AAAA,MACA,2BAAA;AAAA,MACA,aAAA;AAAA,MACA,wBAAA;AAAA,MACA;AAAA;AACF;AAEJ;AAUO,MAAM,uBAAA,GAA0B,KAAA;AAAA,EACrC,0BAAA;AAAA,EACA,wBAAA;AAAA,EACA,IAAA;AAAA,EACA,2BAAA;AAAA,EACA,yBAAA;AAAA,EACA,IAAA;AAAA,EACA,2FAAA;AAAA,EACA,0EAAA;AAAA,EACA,+CAAA;AAAA,EACA,mJAAA;AAAA,EAEA,IAAA;AAAA,EACA,4OAAA;AAAA,EAGA,uDAAA;AAAA,EACA,IAAA;AAAA,EACA,oHAAA;AAAA,EAEA,yNAAA;AAAA,EAGA,kGAAA;AAAA,EAEA,QAAA;AAAA,EACA,0NAAA;AAAA,EAGA,iGAAA;AAAA,EAEA,OAAA;AAAA,EACA,wDAAA;AAAA,EACA;AACF;;"}
|
|
@@ -13,6 +13,15 @@ function withNumberedRepeats(names, numbered) {
|
|
|
13
13
|
return unique;
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
+
const DECLARATION_NUMBER_SEPARATOR = "_";
|
|
17
|
+
function freeNumberedName(name, taken) {
|
|
18
|
+
let count = 2;
|
|
19
|
+
while (taken.has(`${name}${DECLARATION_NUMBER_SEPARATOR}${count}`)) {
|
|
20
|
+
count += 1;
|
|
21
|
+
}
|
|
22
|
+
return `${name}${DECLARATION_NUMBER_SEPARATOR}${count}`;
|
|
23
|
+
}
|
|
16
24
|
|
|
25
|
+
exports.freeNumberedName = freeNumberedName;
|
|
17
26
|
exports.withNumberedRepeats = withNumberedRepeats;
|
|
18
27
|
//# sourceMappingURL=numbered-names.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numbered-names.cjs","sources":["../../../src/application/transform/numbered-names.ts"],"sourcesContent":["/** Builds the name for the `count`-th use of `name` (2, 3…). */\nexport type NumberedName = (name: string, count: number) => string;\n\n/**\n * Names made unique, in order: the first use of a name keeps it, each repeat gets the lowest\n * number from 2 whose name is not written anywhere in the list.\n */\nexport function withNumberedRepeats(names: readonly string[], numbered: NumberedName): string[] {\n const written = new Set(names);\n const taken = new Set<string>();\n return names.map((name) => {\n let unique = name;\n for (let count = 2; taken.has(unique); count += 1) {\n const candidate = numbered(name, count);\n unique = written.has(candidate) ? unique : candidate;\n }\n taken.add(unique);\n return unique;\n });\n}\n"],"names":[],"mappings":";;AAOO,SAAS,mBAAA,CAAoB,OAA0B,QAAA,EAAkC;AAC9F,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAK,CAAA;AAC7B,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,CAAM,IAAI,MAAM,CAAA,EAAG,SAAS,CAAA,EAAG;AACjD,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,EAAM,KAAK,CAAA;AACtC,MAAA,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,GAAI,MAAA,GAAS,SAAA;AAAA,IAC7C;AACA,IAAA,KAAA,CAAM,IAAI,MAAM,CAAA;AAChB,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH
|
|
1
|
+
{"version":3,"file":"numbered-names.cjs","sources":["../../../src/application/transform/numbered-names.ts"],"sourcesContent":["/** Builds the name for the `count`-th use of `name` (2, 3…). */\nexport type NumberedName = (name: string, count: number) => string;\n\n/**\n * Names made unique, in order: the first use of a name keeps it, each repeat gets the lowest\n * number from 2 whose name is not written anywhere in the list.\n */\nexport function withNumberedRepeats(names: readonly string[], numbered: NumberedName): string[] {\n const written = new Set(names);\n const taken = new Set<string>();\n return names.map((name) => {\n let unique = name;\n for (let count = 2; taken.has(unique); count += 1) {\n const candidate = numbered(name, count);\n unique = written.has(candidate) ? unique : candidate;\n }\n taken.add(unique);\n return unique;\n });\n}\n\n/** Separates a repeated declaration name from its number: `Status` → `Status_2`. */\nconst DECLARATION_NUMBER_SEPARATOR = \"_\";\n\n/**\n * The first of `Name_2`, `Name_3`, … that `taken` does not hold: the suffix `--root-types` uses for\n * its own conflicts, and every other declaration that must give way to another name.\n */\nexport function freeNumberedName(name: string, taken: ReadonlySet<string>): string {\n let count = 2;\n while (taken.has(`${name}${DECLARATION_NUMBER_SEPARATOR}${count}`)) {\n count += 1;\n }\n return `${name}${DECLARATION_NUMBER_SEPARATOR}${count}`;\n}\n"],"names":[],"mappings":";;AAOO,SAAS,mBAAA,CAAoB,OAA0B,QAAA,EAAkC;AAC9F,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAK,CAAA;AAC7B,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,CAAM,IAAI,MAAM,CAAA,EAAG,SAAS,CAAA,EAAG;AACjD,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,EAAM,KAAK,CAAA;AACtC,MAAA,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,GAAI,MAAA,GAAS,SAAA;AAAA,IAC7C;AACA,IAAA,KAAA,CAAM,IAAI,MAAM,CAAA;AAChB,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH;AAGA,MAAM,4BAAA,GAA+B,GAAA;AAM9B,SAAS,gBAAA,CAAiB,MAAc,KAAA,EAAoC;AACjF,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,OAAO,KAAA,CAAM,IAAI,CAAA,EAAG,IAAI,GAAG,4BAA4B,CAAA,EAAG,KAAK,CAAA,CAAE,CAAA,EAAG;AAClE,IAAA,KAAA,IAAS,CAAA;AAAA,EACX;AACA,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,4BAA4B,GAAG,KAAK,CAAA,CAAA;AACvD;;;"}
|
|
@@ -11,6 +11,14 @@ function withNumberedRepeats(names, numbered) {
|
|
|
11
11
|
return unique;
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
|
+
const DECLARATION_NUMBER_SEPARATOR = "_";
|
|
15
|
+
function freeNumberedName(name, taken) {
|
|
16
|
+
let count = 2;
|
|
17
|
+
while (taken.has(`${name}${DECLARATION_NUMBER_SEPARATOR}${count}`)) {
|
|
18
|
+
count += 1;
|
|
19
|
+
}
|
|
20
|
+
return `${name}${DECLARATION_NUMBER_SEPARATOR}${count}`;
|
|
21
|
+
}
|
|
14
22
|
|
|
15
|
-
export { withNumberedRepeats };
|
|
23
|
+
export { freeNumberedName, withNumberedRepeats };
|
|
16
24
|
//# sourceMappingURL=numbered-names.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numbered-names.mjs","sources":["../../../src/application/transform/numbered-names.ts"],"sourcesContent":["/** Builds the name for the `count`-th use of `name` (2, 3…). */\nexport type NumberedName = (name: string, count: number) => string;\n\n/**\n * Names made unique, in order: the first use of a name keeps it, each repeat gets the lowest\n * number from 2 whose name is not written anywhere in the list.\n */\nexport function withNumberedRepeats(names: readonly string[], numbered: NumberedName): string[] {\n const written = new Set(names);\n const taken = new Set<string>();\n return names.map((name) => {\n let unique = name;\n for (let count = 2; taken.has(unique); count += 1) {\n const candidate = numbered(name, count);\n unique = written.has(candidate) ? unique : candidate;\n }\n taken.add(unique);\n return unique;\n });\n}\n"],"names":[],"mappings":"AAOO,SAAS,mBAAA,CAAoB,OAA0B,QAAA,EAAkC;AAC9F,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAK,CAAA;AAC7B,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,CAAM,IAAI,MAAM,CAAA,EAAG,SAAS,CAAA,EAAG;AACjD,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,EAAM,KAAK,CAAA;AACtC,MAAA,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,GAAI,MAAA,GAAS,SAAA;AAAA,IAC7C;AACA,IAAA,KAAA,CAAM,IAAI,MAAM,CAAA;AAChB,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH;;"}
|
|
1
|
+
{"version":3,"file":"numbered-names.mjs","sources":["../../../src/application/transform/numbered-names.ts"],"sourcesContent":["/** Builds the name for the `count`-th use of `name` (2, 3…). */\nexport type NumberedName = (name: string, count: number) => string;\n\n/**\n * Names made unique, in order: the first use of a name keeps it, each repeat gets the lowest\n * number from 2 whose name is not written anywhere in the list.\n */\nexport function withNumberedRepeats(names: readonly string[], numbered: NumberedName): string[] {\n const written = new Set(names);\n const taken = new Set<string>();\n return names.map((name) => {\n let unique = name;\n for (let count = 2; taken.has(unique); count += 1) {\n const candidate = numbered(name, count);\n unique = written.has(candidate) ? unique : candidate;\n }\n taken.add(unique);\n return unique;\n });\n}\n\n/** Separates a repeated declaration name from its number: `Status` → `Status_2`. */\nconst DECLARATION_NUMBER_SEPARATOR = \"_\";\n\n/**\n * The first of `Name_2`, `Name_3`, … that `taken` does not hold: the suffix `--root-types` uses for\n * its own conflicts, and every other declaration that must give way to another name.\n */\nexport function freeNumberedName(name: string, taken: ReadonlySet<string>): string {\n let count = 2;\n while (taken.has(`${name}${DECLARATION_NUMBER_SEPARATOR}${count}`)) {\n count += 1;\n }\n return `${name}${DECLARATION_NUMBER_SEPARATOR}${count}`;\n}\n"],"names":[],"mappings":"AAOO,SAAS,mBAAA,CAAoB,OAA0B,QAAA,EAAkC;AAC9F,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAK,CAAA;AAC7B,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,CAAM,IAAI,MAAM,CAAA,EAAG,SAAS,CAAA,EAAG;AACjD,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,EAAM,KAAK,CAAA;AACtC,MAAA,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,GAAI,MAAA,GAAS,SAAA;AAAA,IAC7C;AACA,IAAA,KAAA,CAAM,IAAI,MAAM,CAAA;AAChB,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH;AAGA,MAAM,4BAAA,GAA+B,GAAA;AAM9B,SAAS,gBAAA,CAAiB,MAAc,KAAA,EAAoC;AACjF,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,OAAO,KAAA,CAAM,IAAI,CAAA,EAAG,IAAI,GAAG,4BAA4B,CAAA,EAAG,KAAK,CAAA,CAAE,CAAA,EAAG;AAClE,IAAA,KAAA,IAAS,CAAA;AAAA,EACX;AACA,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,4BAA4B,GAAG,KAAK,CAAA,CAAA;AACvD;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const jsonPointer = require('../../../domain/openapi/json-pointer.cjs');
|
|
4
|
-
const
|
|
4
|
+
const locatedNode = require('./located-node.cjs');
|
|
5
5
|
const pointerWalk = require('./pointer-walk.cjs');
|
|
6
6
|
|
|
7
7
|
const PARENT_LOCATION_PAIRS = /* @__PURE__ */ new Set([
|
|
@@ -17,7 +17,7 @@ const KEPT_PAIRS = /* @__PURE__ */ new Set(["anyOf", "oneOf", "$defs"]);
|
|
|
17
17
|
const PARENT_LOCATION_KEYWORDS = /* @__PURE__ */ new Set(["items", ...RECORD_VALUE_KEYWORDS]);
|
|
18
18
|
const INDEX_RE = /^\d+$/;
|
|
19
19
|
function childOf(node, segment) {
|
|
20
|
-
return (
|
|
20
|
+
return (locatedNode.isJsonObject(node) || Array.isArray(node)) && segment !== void 0 ? node[segment] : void 0;
|
|
21
21
|
}
|
|
22
22
|
function pairStep(value, next, path) {
|
|
23
23
|
return { path, child: childOf(value, next), length: 2, isSchema: true };
|
|
@@ -52,7 +52,7 @@ function isPathItem(path) {
|
|
|
52
52
|
}
|
|
53
53
|
function parameterStep(walk, next) {
|
|
54
54
|
const entry = childOf(childOf(walk.node, "parameters"), next);
|
|
55
|
-
const where =
|
|
55
|
+
const where = locatedNode.isJsonObject(entry) ? [String(entry.in), String(entry.name)] : [];
|
|
56
56
|
const prefix = isPathItem(walk.path) ? ["parameters"] : [];
|
|
57
57
|
return { path: [...prefix, "parameters", ...where], child: entry, length: 2, isSchema: false };
|
|
58
58
|
}
|
|
@@ -82,7 +82,7 @@ function stepAt(walk, pointer, index) {
|
|
|
82
82
|
return walk.isSchema ? schemaStep(walk.node, segment, segments[index + 1]) : documentStep(walk, segments, index);
|
|
83
83
|
}
|
|
84
84
|
function refOf(node) {
|
|
85
|
-
return
|
|
85
|
+
return locatedNode.isJsonObject(node) && typeof node.$ref === "string" ? node.$ref : null;
|
|
86
86
|
}
|
|
87
87
|
function crossed(walk, ref, refs, seen) {
|
|
88
88
|
if (seen.includes(ref)) {
|
|
@@ -129,7 +129,7 @@ function walkTo(ref, refs, seen) {
|
|
|
129
129
|
function generatedLocationOf(ref, refs) {
|
|
130
130
|
const walk = walkTo(ref, refs, []);
|
|
131
131
|
return {
|
|
132
|
-
path: walk === null ? ref : jsonPointer.
|
|
132
|
+
path: walk === null ? ref : jsonPointer.appendPointer(jsonPointer.ROOT_POINTER, walk.path),
|
|
133
133
|
isFromAdditionalProperties: walk?.isFromAdditionalProperties ?? false
|
|
134
134
|
};
|
|
135
135
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generated-location.cjs","sources":["../../../../src/application/transform/ref-pointer/generated-location.ts"],"sourcesContent":["import { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { RefResolver } from \"../schema/schema-context.js\";\nimport { isJsonObject } from \"./generated-shape.js\";\nimport {\n leadingSegmentsOf,\n type RefPointer,\n refPointerOf,\n startsInSchema,\n} from \"./pointer-walk.js\";\n\n/**\n * Where the generator types the node a `$ref` points at: the location path it passes down, which\n * also names the node's `--enum` declaration and `--enum-values` array. A target written inline\n * (ADR-026) is typed there, so it shares the generator's enum instead of declaring a second one\n * named after the pointer: two TypeScript enums with the same members are not assignable.\n *\n * The path follows the generator: `properties` is skipped; `allOf/N`, `items`, `prefixItems/N`,\n * `patternProperties/P` and `additionalProperties` type their schema at the parent's location;\n * the `schema` of a parameter, header or media type is typed at the container's; a positional\n * parameter is named by `in` and `name`. A `$ref` crossed on the way continues at its target's\n * location. A node under a schema keyword the generator does not type (`definitions/A`, `not`) is\n * typed nowhere else, so it keeps its pointer as its location.\n */\n\nexport interface GeneratedLocation {\n readonly path: string;\n /** The node is an `additionalProperties` value, as `transformNested` is told. */\n readonly isFromAdditionalProperties: boolean;\n}\n\ninterface LocationWalk {\n readonly path: readonly string[];\n readonly node: unknown;\n readonly isSchema: boolean;\n readonly isFromAdditionalProperties: boolean;\n}\n\n/** One step: the segments it adds to the path, the node it moves to, the segments it reads. */\ninterface Step {\n readonly path: readonly string[];\n readonly child: unknown;\n readonly length: 1 | 2;\n readonly isSchema: boolean;\n readonly isFromAdditionalProperties?: boolean;\n}\n\n/** Keywords followed by a name or position whose schema is typed at the parent's location. */\nconst PARENT_LOCATION_PAIRS: ReadonlySet<string> = new Set([\n \"allOf\",\n \"prefixItems\",\n \"patternProperties\",\n]);\n/** Keywords whose schema is typed at the parent's location as a record value. */\nconst RECORD_VALUE_KEYWORDS: ReadonlySet<string> = new Set([\n \"additionalProperties\",\n \"unevaluatedProperties\",\n]);\n/** Keywords followed by a name or position that both stay in the location. */\nconst KEPT_PAIRS: ReadonlySet<string> = new Set([\"anyOf\", \"oneOf\", \"$defs\"]);\n/** The other schema keywords the generator types: at the parent's location. */\nconst PARENT_LOCATION_KEYWORDS: ReadonlySet<string> = new Set([\"items\", ...RECORD_VALUE_KEYWORDS]);\nconst INDEX_RE = /^\\d+$/;\n\nfunction childOf(node: unknown, segment: string | undefined): unknown {\n return (isJsonObject(node) || Array.isArray(node)) && segment !== undefined\n ? (node as Readonly<Record<string, unknown>>)[segment]\n : undefined;\n}\n\nfunction pairStep(value: unknown, next: string | undefined, path: readonly string[]): Step {\n return { path, child: childOf(value, next), length: 2, isSchema: true };\n}\n\n/** The step through a schema keyword; null for a keyword the generator does not type. */\nfunction schemaStep(node: unknown, segment: string, next: string | undefined): Step | null {\n const value = childOf(node, segment);\n const named = next === undefined ? [] : [next];\n if (segment === \"properties\") {\n return pairStep(value, next, named);\n }\n if (PARENT_LOCATION_PAIRS.has(segment) || (segment === \"items\" && Array.isArray(value))) {\n return pairStep(value, next, []);\n }\n if (KEPT_PAIRS.has(segment)) {\n return pairStep(value, next, [segment, ...named]);\n }\n if (!PARENT_LOCATION_KEYWORDS.has(segment)) {\n return null;\n }\n const isRecordValue = RECORD_VALUE_KEYWORDS.has(segment);\n return {\n path: [],\n child: value,\n length: 1,\n isSchema: true,\n isFromAdditionalProperties: isRecordValue,\n };\n}\n\n/** A path item's own parameters sit under one more `parameters` segment (`pathItemType`). */\nfunction isPathItem(path: readonly string[]): boolean {\n const [root, section] = path;\n return (\n (path.length === 2 && (root === \"paths\" || root === \"webhooks\")) ||\n (path.length === 3 && root === \"components\" && section === \"pathItems\")\n );\n}\n\n/** `parameters/N`: the parameter is named by `in` and `name` (a `$ref` one is crossed later). */\nfunction parameterStep(walk: LocationWalk, next: string): Step {\n const entry = childOf(childOf(walk.node, \"parameters\"), next);\n const where = isJsonObject(entry) ? [String(entry.in), String(entry.name)] : [];\n const prefix = isPathItem(walk.path) ? [\"parameters\"] : [];\n return { path: [...prefix, \"parameters\", ...where], child: entry, length: 2, isSchema: false };\n}\n\nfunction documentStep(walk: LocationWalk, segments: readonly string[], index: number): Step {\n const segment = segments[index] as string;\n const next = segments[index + 1];\n const value = childOf(walk.node, segment);\n if (segment === \"schema\") {\n return { path: [], child: value, length: 1, isSchema: true };\n }\n if (segment === \"parameters\" && next !== undefined && INDEX_RE.test(next)) {\n return parameterStep(walk, next);\n }\n // A header's `content` entries are typed at `headers/<name>/<media type>` (`headerType`).\n if (segment === \"content\" && segments[index - 2] === \"headers\") {\n const path = next === undefined ? [] : [next];\n return { path, child: childOf(value, next), length: 2, isSchema: false };\n }\n return { path: [segment], child: value, length: 1, isSchema: false };\n}\n\nfunction stepAt(walk: LocationWalk, pointer: RefPointer, index: number): Step | null {\n const { segments } = pointer;\n const segment = segments[index] as string;\n if (index < leadingSegmentsOf(pointer)) {\n const child = childOf(walk.node, segment);\n return { path: [segment], child, length: 1, isSchema: startsInSchema(pointer) };\n }\n return walk.isSchema\n ? schemaStep(walk.node, segment, segments[index + 1])\n : documentStep(walk, segments, index);\n}\n\nfunction refOf(node: unknown): string | null {\n return isJsonObject(node) && typeof node.$ref === \"string\" ? node.$ref : null;\n}\n\n/**\n * The walk at a crossed `$ref`'s target, through `$ref`s to `$ref`s; null where the target has\n * no generated location. A cycle of `$ref`s has no node.\n */\nfunction crossed(\n walk: LocationWalk,\n ref: string,\n refs: RefResolver,\n seen: readonly string[],\n): LocationWalk | null {\n if (seen.includes(ref)) {\n return { ...walk, node: undefined };\n }\n const target = walkTo(ref, refs, seen);\n const inner = refOf(target?.node);\n return target === null || inner === null ? target : crossed(target, inner, refs, [...seen, ref]);\n}\n\nfunction walkTo(ref: string, refs: RefResolver, seen: readonly string[]): LocationWalk | null {\n const pointer = refPointerOf(ref);\n if (pointer === null || seen.includes(ref)) {\n return null;\n }\n const root = pointer.rootSegment;\n let walk: LocationWalk = {\n path: [root],\n node: refs.resolve(`#/${root}`),\n isSchema: false,\n isFromAdditionalProperties: false,\n };\n for (let index = 0; index < pointer.segments.length; ) {\n const step = stepAt(walk, pointer, index);\n if (step === null) {\n return null;\n }\n index += step.length;\n walk = {\n path: [...walk.path, ...step.path],\n node: step.child,\n isSchema: step.isSchema,\n isFromAdditionalProperties: step.isFromAdditionalProperties === true,\n };\n const inner = refOf(walk.node);\n const target = inner !== null && index < pointer.segments.length;\n const next = target ? crossed(walk, inner, refs, [...seen, ref]) : walk;\n if (next === null) {\n return null;\n }\n walk = next;\n }\n return walk;\n}\n\n/** The location the generator types the node at `ref` with; see the module comment. */\nexport function generatedLocationOf(ref: string, refs: RefResolver): GeneratedLocation {\n const walk = walkTo(ref, refs, []);\n return {\n path: walk === null ? ref : createRef(walk.path),\n isFromAdditionalProperties: walk?.isFromAdditionalProperties ?? false,\n };\n}\n"],"names":["isJsonObject","leadingSegmentsOf","startsInSchema","refPointerOf","createRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generated-location.cjs","sources":["../../../../src/application/transform/ref-pointer/generated-location.ts"],"sourcesContent":["import { appendPointer, ROOT_POINTER } from \"../../../domain/openapi/json-pointer.js\";\nimport type { RefResolver } from \"../schema/schema-context.js\";\nimport { isJsonObject } from \"./located-node.js\";\nimport {\n leadingSegmentsOf,\n type RefPointer,\n refPointerOf,\n startsInSchema,\n} from \"./pointer-walk.js\";\n\n/**\n * Where the generator types the node a `$ref` points at: the location path it passes down, which\n * also names the node's `--enum` declaration and `--enum-values` array. A target written inline\n * (ADR-026) is typed there, so it shares the generator's enum instead of declaring a second one\n * named after the pointer: two TypeScript enums with the same members are not assignable.\n *\n * The path follows the generator: `properties` is skipped; `allOf/N`, `items`, `prefixItems/N`,\n * `patternProperties/P` and `additionalProperties` type their schema at the parent's location;\n * the `schema` of a parameter, header or media type is typed at the container's; a positional\n * parameter is named by `in` and `name`. A `$ref` crossed on the way continues at its target's\n * location. A node under a schema keyword the generator does not type (`definitions/A`, `not`) is\n * typed nowhere else, so it keeps its pointer as its location.\n */\n\nexport interface GeneratedLocation {\n readonly path: string;\n /** The node is an `additionalProperties` value, as `transformNested` is told. */\n readonly isFromAdditionalProperties: boolean;\n}\n\ninterface LocationWalk {\n readonly path: readonly string[];\n readonly node: unknown;\n readonly isSchema: boolean;\n readonly isFromAdditionalProperties: boolean;\n}\n\n/** One step: the segments it adds to the path, the node it moves to, the segments it reads. */\ninterface Step {\n readonly path: readonly string[];\n readonly child: unknown;\n readonly length: 1 | 2;\n readonly isSchema: boolean;\n readonly isFromAdditionalProperties?: boolean;\n}\n\n/** Keywords followed by a name or position whose schema is typed at the parent's location. */\nconst PARENT_LOCATION_PAIRS: ReadonlySet<string> = new Set([\n \"allOf\",\n \"prefixItems\",\n \"patternProperties\",\n]);\n/** Keywords whose schema is typed at the parent's location as a record value. */\nconst RECORD_VALUE_KEYWORDS: ReadonlySet<string> = new Set([\n \"additionalProperties\",\n \"unevaluatedProperties\",\n]);\n/** Keywords followed by a name or position that both stay in the location. */\nconst KEPT_PAIRS: ReadonlySet<string> = new Set([\"anyOf\", \"oneOf\", \"$defs\"]);\n/** The other schema keywords the generator types: at the parent's location. */\nconst PARENT_LOCATION_KEYWORDS: ReadonlySet<string> = new Set([\"items\", ...RECORD_VALUE_KEYWORDS]);\nconst INDEX_RE = /^\\d+$/;\n\nfunction childOf(node: unknown, segment: string | undefined): unknown {\n return (isJsonObject(node) || Array.isArray(node)) && segment !== undefined\n ? (node as Readonly<Record<string, unknown>>)[segment]\n : undefined;\n}\n\nfunction pairStep(value: unknown, next: string | undefined, path: readonly string[]): Step {\n return { path, child: childOf(value, next), length: 2, isSchema: true };\n}\n\n/** The step through a schema keyword; null for a keyword the generator does not type. */\nfunction schemaStep(node: unknown, segment: string, next: string | undefined): Step | null {\n const value = childOf(node, segment);\n const named = next === undefined ? [] : [next];\n if (segment === \"properties\") {\n return pairStep(value, next, named);\n }\n if (PARENT_LOCATION_PAIRS.has(segment) || (segment === \"items\" && Array.isArray(value))) {\n return pairStep(value, next, []);\n }\n if (KEPT_PAIRS.has(segment)) {\n return pairStep(value, next, [segment, ...named]);\n }\n if (!PARENT_LOCATION_KEYWORDS.has(segment)) {\n return null;\n }\n const isRecordValue = RECORD_VALUE_KEYWORDS.has(segment);\n return {\n path: [],\n child: value,\n length: 1,\n isSchema: true,\n isFromAdditionalProperties: isRecordValue,\n };\n}\n\n/** A path item's own parameters sit under one more `parameters` segment (`pathItemType`). */\nfunction isPathItem(path: readonly string[]): boolean {\n const [root, section] = path;\n return (\n (path.length === 2 && (root === \"paths\" || root === \"webhooks\")) ||\n (path.length === 3 && root === \"components\" && section === \"pathItems\")\n );\n}\n\n/** `parameters/N`: the parameter is named by `in` and `name` (a `$ref` one is crossed later). */\nfunction parameterStep(walk: LocationWalk, next: string): Step {\n const entry = childOf(childOf(walk.node, \"parameters\"), next);\n const where = isJsonObject(entry) ? [String(entry.in), String(entry.name)] : [];\n const prefix = isPathItem(walk.path) ? [\"parameters\"] : [];\n return { path: [...prefix, \"parameters\", ...where], child: entry, length: 2, isSchema: false };\n}\n\nfunction documentStep(walk: LocationWalk, segments: readonly string[], index: number): Step {\n const segment = segments[index] as string;\n const next = segments[index + 1];\n const value = childOf(walk.node, segment);\n if (segment === \"schema\") {\n return { path: [], child: value, length: 1, isSchema: true };\n }\n if (segment === \"parameters\" && next !== undefined && INDEX_RE.test(next)) {\n return parameterStep(walk, next);\n }\n // A header's `content` entries are typed at `headers/<name>/<media type>` (`headerType`).\n if (segment === \"content\" && segments[index - 2] === \"headers\") {\n const path = next === undefined ? [] : [next];\n return { path, child: childOf(value, next), length: 2, isSchema: false };\n }\n return { path: [segment], child: value, length: 1, isSchema: false };\n}\n\nfunction stepAt(walk: LocationWalk, pointer: RefPointer, index: number): Step | null {\n const { segments } = pointer;\n const segment = segments[index] as string;\n if (index < leadingSegmentsOf(pointer)) {\n const child = childOf(walk.node, segment);\n return { path: [segment], child, length: 1, isSchema: startsInSchema(pointer) };\n }\n return walk.isSchema\n ? schemaStep(walk.node, segment, segments[index + 1])\n : documentStep(walk, segments, index);\n}\n\nfunction refOf(node: unknown): string | null {\n return isJsonObject(node) && typeof node.$ref === \"string\" ? node.$ref : null;\n}\n\n/**\n * The walk at a crossed `$ref`'s target, through `$ref`s to `$ref`s; null where the target has\n * no generated location. A cycle of `$ref`s has no node.\n */\nfunction crossed(\n walk: LocationWalk,\n ref: string,\n refs: RefResolver,\n seen: readonly string[],\n): LocationWalk | null {\n if (seen.includes(ref)) {\n return { ...walk, node: undefined };\n }\n const target = walkTo(ref, refs, seen);\n const inner = refOf(target?.node);\n return target === null || inner === null ? target : crossed(target, inner, refs, [...seen, ref]);\n}\n\nfunction walkTo(ref: string, refs: RefResolver, seen: readonly string[]): LocationWalk | null {\n const pointer = refPointerOf(ref);\n if (pointer === null || seen.includes(ref)) {\n return null;\n }\n const root = pointer.rootSegment;\n let walk: LocationWalk = {\n path: [root],\n node: refs.resolve(`#/${root}`),\n isSchema: false,\n isFromAdditionalProperties: false,\n };\n for (let index = 0; index < pointer.segments.length; ) {\n const step = stepAt(walk, pointer, index);\n if (step === null) {\n return null;\n }\n index += step.length;\n walk = {\n path: [...walk.path, ...step.path],\n node: step.child,\n isSchema: step.isSchema,\n isFromAdditionalProperties: step.isFromAdditionalProperties === true,\n };\n const inner = refOf(walk.node);\n const target = inner !== null && index < pointer.segments.length;\n const next = target ? crossed(walk, inner, refs, [...seen, ref]) : walk;\n if (next === null) {\n return null;\n }\n walk = next;\n }\n return walk;\n}\n\n/** The location the generator types the node at `ref` with; see the module comment. */\nexport function generatedLocationOf(ref: string, refs: RefResolver): GeneratedLocation {\n const walk = walkTo(ref, refs, []);\n return {\n path: walk === null ? ref : appendPointer(ROOT_POINTER, walk.path),\n isFromAdditionalProperties: walk?.isFromAdditionalProperties ?? false,\n };\n}\n"],"names":["isJsonObject","leadingSegmentsOf","startsInSchema","refPointerOf","appendPointer","ROOT_POINTER"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isJsonObject } from './
|
|
1
|
+
import { appendPointer, ROOT_POINTER } from '../../../domain/openapi/json-pointer.mjs';
|
|
2
|
+
import { isJsonObject } from './located-node.mjs';
|
|
3
3
|
import { refPointerOf, leadingSegmentsOf, startsInSchema } from './pointer-walk.mjs';
|
|
4
4
|
|
|
5
5
|
const PARENT_LOCATION_PAIRS = /* @__PURE__ */ new Set([
|
|
@@ -127,7 +127,7 @@ function walkTo(ref, refs, seen) {
|
|
|
127
127
|
function generatedLocationOf(ref, refs) {
|
|
128
128
|
const walk = walkTo(ref, refs, []);
|
|
129
129
|
return {
|
|
130
|
-
path: walk === null ? ref :
|
|
130
|
+
path: walk === null ? ref : appendPointer(ROOT_POINTER, walk.path),
|
|
131
131
|
isFromAdditionalProperties: walk?.isFromAdditionalProperties ?? false
|
|
132
132
|
};
|
|
133
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generated-location.mjs","sources":["../../../../src/application/transform/ref-pointer/generated-location.ts"],"sourcesContent":["import { createRef } from \"../../../domain/openapi/json-pointer.js\";\nimport type { RefResolver } from \"../schema/schema-context.js\";\nimport { isJsonObject } from \"./generated-shape.js\";\nimport {\n leadingSegmentsOf,\n type RefPointer,\n refPointerOf,\n startsInSchema,\n} from \"./pointer-walk.js\";\n\n/**\n * Where the generator types the node a `$ref` points at: the location path it passes down, which\n * also names the node's `--enum` declaration and `--enum-values` array. A target written inline\n * (ADR-026) is typed there, so it shares the generator's enum instead of declaring a second one\n * named after the pointer: two TypeScript enums with the same members are not assignable.\n *\n * The path follows the generator: `properties` is skipped; `allOf/N`, `items`, `prefixItems/N`,\n * `patternProperties/P` and `additionalProperties` type their schema at the parent's location;\n * the `schema` of a parameter, header or media type is typed at the container's; a positional\n * parameter is named by `in` and `name`. A `$ref` crossed on the way continues at its target's\n * location. A node under a schema keyword the generator does not type (`definitions/A`, `not`) is\n * typed nowhere else, so it keeps its pointer as its location.\n */\n\nexport interface GeneratedLocation {\n readonly path: string;\n /** The node is an `additionalProperties` value, as `transformNested` is told. */\n readonly isFromAdditionalProperties: boolean;\n}\n\ninterface LocationWalk {\n readonly path: readonly string[];\n readonly node: unknown;\n readonly isSchema: boolean;\n readonly isFromAdditionalProperties: boolean;\n}\n\n/** One step: the segments it adds to the path, the node it moves to, the segments it reads. */\ninterface Step {\n readonly path: readonly string[];\n readonly child: unknown;\n readonly length: 1 | 2;\n readonly isSchema: boolean;\n readonly isFromAdditionalProperties?: boolean;\n}\n\n/** Keywords followed by a name or position whose schema is typed at the parent's location. */\nconst PARENT_LOCATION_PAIRS: ReadonlySet<string> = new Set([\n \"allOf\",\n \"prefixItems\",\n \"patternProperties\",\n]);\n/** Keywords whose schema is typed at the parent's location as a record value. */\nconst RECORD_VALUE_KEYWORDS: ReadonlySet<string> = new Set([\n \"additionalProperties\",\n \"unevaluatedProperties\",\n]);\n/** Keywords followed by a name or position that both stay in the location. */\nconst KEPT_PAIRS: ReadonlySet<string> = new Set([\"anyOf\", \"oneOf\", \"$defs\"]);\n/** The other schema keywords the generator types: at the parent's location. */\nconst PARENT_LOCATION_KEYWORDS: ReadonlySet<string> = new Set([\"items\", ...RECORD_VALUE_KEYWORDS]);\nconst INDEX_RE = /^\\d+$/;\n\nfunction childOf(node: unknown, segment: string | undefined): unknown {\n return (isJsonObject(node) || Array.isArray(node)) && segment !== undefined\n ? (node as Readonly<Record<string, unknown>>)[segment]\n : undefined;\n}\n\nfunction pairStep(value: unknown, next: string | undefined, path: readonly string[]): Step {\n return { path, child: childOf(value, next), length: 2, isSchema: true };\n}\n\n/** The step through a schema keyword; null for a keyword the generator does not type. */\nfunction schemaStep(node: unknown, segment: string, next: string | undefined): Step | null {\n const value = childOf(node, segment);\n const named = next === undefined ? [] : [next];\n if (segment === \"properties\") {\n return pairStep(value, next, named);\n }\n if (PARENT_LOCATION_PAIRS.has(segment) || (segment === \"items\" && Array.isArray(value))) {\n return pairStep(value, next, []);\n }\n if (KEPT_PAIRS.has(segment)) {\n return pairStep(value, next, [segment, ...named]);\n }\n if (!PARENT_LOCATION_KEYWORDS.has(segment)) {\n return null;\n }\n const isRecordValue = RECORD_VALUE_KEYWORDS.has(segment);\n return {\n path: [],\n child: value,\n length: 1,\n isSchema: true,\n isFromAdditionalProperties: isRecordValue,\n };\n}\n\n/** A path item's own parameters sit under one more `parameters` segment (`pathItemType`). */\nfunction isPathItem(path: readonly string[]): boolean {\n const [root, section] = path;\n return (\n (path.length === 2 && (root === \"paths\" || root === \"webhooks\")) ||\n (path.length === 3 && root === \"components\" && section === \"pathItems\")\n );\n}\n\n/** `parameters/N`: the parameter is named by `in` and `name` (a `$ref` one is crossed later). */\nfunction parameterStep(walk: LocationWalk, next: string): Step {\n const entry = childOf(childOf(walk.node, \"parameters\"), next);\n const where = isJsonObject(entry) ? [String(entry.in), String(entry.name)] : [];\n const prefix = isPathItem(walk.path) ? [\"parameters\"] : [];\n return { path: [...prefix, \"parameters\", ...where], child: entry, length: 2, isSchema: false };\n}\n\nfunction documentStep(walk: LocationWalk, segments: readonly string[], index: number): Step {\n const segment = segments[index] as string;\n const next = segments[index + 1];\n const value = childOf(walk.node, segment);\n if (segment === \"schema\") {\n return { path: [], child: value, length: 1, isSchema: true };\n }\n if (segment === \"parameters\" && next !== undefined && INDEX_RE.test(next)) {\n return parameterStep(walk, next);\n }\n // A header's `content` entries are typed at `headers/<name>/<media type>` (`headerType`).\n if (segment === \"content\" && segments[index - 2] === \"headers\") {\n const path = next === undefined ? [] : [next];\n return { path, child: childOf(value, next), length: 2, isSchema: false };\n }\n return { path: [segment], child: value, length: 1, isSchema: false };\n}\n\nfunction stepAt(walk: LocationWalk, pointer: RefPointer, index: number): Step | null {\n const { segments } = pointer;\n const segment = segments[index] as string;\n if (index < leadingSegmentsOf(pointer)) {\n const child = childOf(walk.node, segment);\n return { path: [segment], child, length: 1, isSchema: startsInSchema(pointer) };\n }\n return walk.isSchema\n ? schemaStep(walk.node, segment, segments[index + 1])\n : documentStep(walk, segments, index);\n}\n\nfunction refOf(node: unknown): string | null {\n return isJsonObject(node) && typeof node.$ref === \"string\" ? node.$ref : null;\n}\n\n/**\n * The walk at a crossed `$ref`'s target, through `$ref`s to `$ref`s; null where the target has\n * no generated location. A cycle of `$ref`s has no node.\n */\nfunction crossed(\n walk: LocationWalk,\n ref: string,\n refs: RefResolver,\n seen: readonly string[],\n): LocationWalk | null {\n if (seen.includes(ref)) {\n return { ...walk, node: undefined };\n }\n const target = walkTo(ref, refs, seen);\n const inner = refOf(target?.node);\n return target === null || inner === null ? target : crossed(target, inner, refs, [...seen, ref]);\n}\n\nfunction walkTo(ref: string, refs: RefResolver, seen: readonly string[]): LocationWalk | null {\n const pointer = refPointerOf(ref);\n if (pointer === null || seen.includes(ref)) {\n return null;\n }\n const root = pointer.rootSegment;\n let walk: LocationWalk = {\n path: [root],\n node: refs.resolve(`#/${root}`),\n isSchema: false,\n isFromAdditionalProperties: false,\n };\n for (let index = 0; index < pointer.segments.length; ) {\n const step = stepAt(walk, pointer, index);\n if (step === null) {\n return null;\n }\n index += step.length;\n walk = {\n path: [...walk.path, ...step.path],\n node: step.child,\n isSchema: step.isSchema,\n isFromAdditionalProperties: step.isFromAdditionalProperties === true,\n };\n const inner = refOf(walk.node);\n const target = inner !== null && index < pointer.segments.length;\n const next = target ? crossed(walk, inner, refs, [...seen, ref]) : walk;\n if (next === null) {\n return null;\n }\n walk = next;\n }\n return walk;\n}\n\n/** The location the generator types the node at `ref` with; see the module comment. */\nexport function generatedLocationOf(ref: string, refs: RefResolver): GeneratedLocation {\n const walk = walkTo(ref, refs, []);\n return {\n path: walk === null ? ref : createRef(walk.path),\n isFromAdditionalProperties: walk?.isFromAdditionalProperties ?? false,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generated-location.mjs","sources":["../../../../src/application/transform/ref-pointer/generated-location.ts"],"sourcesContent":["import { appendPointer, ROOT_POINTER } from \"../../../domain/openapi/json-pointer.js\";\nimport type { RefResolver } from \"../schema/schema-context.js\";\nimport { isJsonObject } from \"./located-node.js\";\nimport {\n leadingSegmentsOf,\n type RefPointer,\n refPointerOf,\n startsInSchema,\n} from \"./pointer-walk.js\";\n\n/**\n * Where the generator types the node a `$ref` points at: the location path it passes down, which\n * also names the node's `--enum` declaration and `--enum-values` array. A target written inline\n * (ADR-026) is typed there, so it shares the generator's enum instead of declaring a second one\n * named after the pointer: two TypeScript enums with the same members are not assignable.\n *\n * The path follows the generator: `properties` is skipped; `allOf/N`, `items`, `prefixItems/N`,\n * `patternProperties/P` and `additionalProperties` type their schema at the parent's location;\n * the `schema` of a parameter, header or media type is typed at the container's; a positional\n * parameter is named by `in` and `name`. A `$ref` crossed on the way continues at its target's\n * location. A node under a schema keyword the generator does not type (`definitions/A`, `not`) is\n * typed nowhere else, so it keeps its pointer as its location.\n */\n\nexport interface GeneratedLocation {\n readonly path: string;\n /** The node is an `additionalProperties` value, as `transformNested` is told. */\n readonly isFromAdditionalProperties: boolean;\n}\n\ninterface LocationWalk {\n readonly path: readonly string[];\n readonly node: unknown;\n readonly isSchema: boolean;\n readonly isFromAdditionalProperties: boolean;\n}\n\n/** One step: the segments it adds to the path, the node it moves to, the segments it reads. */\ninterface Step {\n readonly path: readonly string[];\n readonly child: unknown;\n readonly length: 1 | 2;\n readonly isSchema: boolean;\n readonly isFromAdditionalProperties?: boolean;\n}\n\n/** Keywords followed by a name or position whose schema is typed at the parent's location. */\nconst PARENT_LOCATION_PAIRS: ReadonlySet<string> = new Set([\n \"allOf\",\n \"prefixItems\",\n \"patternProperties\",\n]);\n/** Keywords whose schema is typed at the parent's location as a record value. */\nconst RECORD_VALUE_KEYWORDS: ReadonlySet<string> = new Set([\n \"additionalProperties\",\n \"unevaluatedProperties\",\n]);\n/** Keywords followed by a name or position that both stay in the location. */\nconst KEPT_PAIRS: ReadonlySet<string> = new Set([\"anyOf\", \"oneOf\", \"$defs\"]);\n/** The other schema keywords the generator types: at the parent's location. */\nconst PARENT_LOCATION_KEYWORDS: ReadonlySet<string> = new Set([\"items\", ...RECORD_VALUE_KEYWORDS]);\nconst INDEX_RE = /^\\d+$/;\n\nfunction childOf(node: unknown, segment: string | undefined): unknown {\n return (isJsonObject(node) || Array.isArray(node)) && segment !== undefined\n ? (node as Readonly<Record<string, unknown>>)[segment]\n : undefined;\n}\n\nfunction pairStep(value: unknown, next: string | undefined, path: readonly string[]): Step {\n return { path, child: childOf(value, next), length: 2, isSchema: true };\n}\n\n/** The step through a schema keyword; null for a keyword the generator does not type. */\nfunction schemaStep(node: unknown, segment: string, next: string | undefined): Step | null {\n const value = childOf(node, segment);\n const named = next === undefined ? [] : [next];\n if (segment === \"properties\") {\n return pairStep(value, next, named);\n }\n if (PARENT_LOCATION_PAIRS.has(segment) || (segment === \"items\" && Array.isArray(value))) {\n return pairStep(value, next, []);\n }\n if (KEPT_PAIRS.has(segment)) {\n return pairStep(value, next, [segment, ...named]);\n }\n if (!PARENT_LOCATION_KEYWORDS.has(segment)) {\n return null;\n }\n const isRecordValue = RECORD_VALUE_KEYWORDS.has(segment);\n return {\n path: [],\n child: value,\n length: 1,\n isSchema: true,\n isFromAdditionalProperties: isRecordValue,\n };\n}\n\n/** A path item's own parameters sit under one more `parameters` segment (`pathItemType`). */\nfunction isPathItem(path: readonly string[]): boolean {\n const [root, section] = path;\n return (\n (path.length === 2 && (root === \"paths\" || root === \"webhooks\")) ||\n (path.length === 3 && root === \"components\" && section === \"pathItems\")\n );\n}\n\n/** `parameters/N`: the parameter is named by `in` and `name` (a `$ref` one is crossed later). */\nfunction parameterStep(walk: LocationWalk, next: string): Step {\n const entry = childOf(childOf(walk.node, \"parameters\"), next);\n const where = isJsonObject(entry) ? [String(entry.in), String(entry.name)] : [];\n const prefix = isPathItem(walk.path) ? [\"parameters\"] : [];\n return { path: [...prefix, \"parameters\", ...where], child: entry, length: 2, isSchema: false };\n}\n\nfunction documentStep(walk: LocationWalk, segments: readonly string[], index: number): Step {\n const segment = segments[index] as string;\n const next = segments[index + 1];\n const value = childOf(walk.node, segment);\n if (segment === \"schema\") {\n return { path: [], child: value, length: 1, isSchema: true };\n }\n if (segment === \"parameters\" && next !== undefined && INDEX_RE.test(next)) {\n return parameterStep(walk, next);\n }\n // A header's `content` entries are typed at `headers/<name>/<media type>` (`headerType`).\n if (segment === \"content\" && segments[index - 2] === \"headers\") {\n const path = next === undefined ? [] : [next];\n return { path, child: childOf(value, next), length: 2, isSchema: false };\n }\n return { path: [segment], child: value, length: 1, isSchema: false };\n}\n\nfunction stepAt(walk: LocationWalk, pointer: RefPointer, index: number): Step | null {\n const { segments } = pointer;\n const segment = segments[index] as string;\n if (index < leadingSegmentsOf(pointer)) {\n const child = childOf(walk.node, segment);\n return { path: [segment], child, length: 1, isSchema: startsInSchema(pointer) };\n }\n return walk.isSchema\n ? schemaStep(walk.node, segment, segments[index + 1])\n : documentStep(walk, segments, index);\n}\n\nfunction refOf(node: unknown): string | null {\n return isJsonObject(node) && typeof node.$ref === \"string\" ? node.$ref : null;\n}\n\n/**\n * The walk at a crossed `$ref`'s target, through `$ref`s to `$ref`s; null where the target has\n * no generated location. A cycle of `$ref`s has no node.\n */\nfunction crossed(\n walk: LocationWalk,\n ref: string,\n refs: RefResolver,\n seen: readonly string[],\n): LocationWalk | null {\n if (seen.includes(ref)) {\n return { ...walk, node: undefined };\n }\n const target = walkTo(ref, refs, seen);\n const inner = refOf(target?.node);\n return target === null || inner === null ? target : crossed(target, inner, refs, [...seen, ref]);\n}\n\nfunction walkTo(ref: string, refs: RefResolver, seen: readonly string[]): LocationWalk | null {\n const pointer = refPointerOf(ref);\n if (pointer === null || seen.includes(ref)) {\n return null;\n }\n const root = pointer.rootSegment;\n let walk: LocationWalk = {\n path: [root],\n node: refs.resolve(`#/${root}`),\n isSchema: false,\n isFromAdditionalProperties: false,\n };\n for (let index = 0; index < pointer.segments.length; ) {\n const step = stepAt(walk, pointer, index);\n if (step === null) {\n return null;\n }\n index += step.length;\n walk = {\n path: [...walk.path, ...step.path],\n node: step.child,\n isSchema: step.isSchema,\n isFromAdditionalProperties: step.isFromAdditionalProperties === true,\n };\n const inner = refOf(walk.node);\n const target = inner !== null && index < pointer.segments.length;\n const next = target ? crossed(walk, inner, refs, [...seen, ref]) : walk;\n if (next === null) {\n return null;\n }\n walk = next;\n }\n return walk;\n}\n\n/** The location the generator types the node at `ref` with; see the module comment. */\nexport function generatedLocationOf(ref: string, refs: RefResolver): GeneratedLocation {\n const walk = walkTo(ref, refs, []);\n return {\n path: walk === null ? ref : appendPointer(ROOT_POINTER, walk.path),\n isFromAdditionalProperties: walk?.isFromAdditionalProperties ?? false,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const binaryContent = require('../../../domain/openapi/binary-content.cjs');
|
|
4
|
+
const locatedNode = require('./located-node.cjs');
|
|
5
|
+
const propertyShape = require('./property-shape.cjs');
|
|
4
6
|
|
|
5
7
|
const OPAQUE_KEYS = ["not", "enum", "const", "$ref"];
|
|
6
8
|
const MAX_DEPTH = 8;
|
|
7
9
|
const INDEX_RE = /^\d+$/;
|
|
8
10
|
const MISSING = { kind: "missing" };
|
|
9
11
|
const OPAQUE = { kind: "opaque" };
|
|
10
|
-
function isJsonObject(value) {
|
|
11
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
12
|
-
}
|
|
13
|
-
function followRefs(node, refs) {
|
|
14
|
-
return isJsonObject(node) && typeof node.$ref === "string" ? refs.resolve(node.$ref) : node;
|
|
15
|
-
}
|
|
16
|
-
function isNullableSchema(node) {
|
|
17
|
-
if (!isJsonObject(node)) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
return node.nullable === true || Array.isArray(node.type) && node.type.includes("null");
|
|
21
|
-
}
|
|
22
12
|
function typeNames(node) {
|
|
23
13
|
return Array.isArray(node.type) ? node.type : [node.type];
|
|
24
14
|
}
|
|
@@ -35,7 +25,7 @@ function isArrayShape(node) {
|
|
|
35
25
|
return typeNames(node).includes("array") || "items" in node;
|
|
36
26
|
}
|
|
37
27
|
function hasObjectKeywords(node) {
|
|
38
|
-
const hasProperties = isJsonObject(node.properties) && Object.keys(node.properties).length > 0;
|
|
28
|
+
const hasProperties = locatedNode.isJsonObject(node.properties) && Object.keys(node.properties).length > 0;
|
|
39
29
|
return hasProperties || Boolean(node.additionalProperties || node.patternProperties || node.$defs);
|
|
40
30
|
}
|
|
41
31
|
function emptyObjectMember(node, options) {
|
|
@@ -44,61 +34,57 @@ function emptyObjectMember(node, options) {
|
|
|
44
34
|
function isBuiltInMember(key, prototype) {
|
|
45
35
|
return key in prototype;
|
|
46
36
|
}
|
|
47
|
-
function indexMember(
|
|
48
|
-
const { additionalProperties: values, patternProperties: patterns } = node;
|
|
49
|
-
if (isJsonObject(patterns) && Object.keys(patterns).length > 0) {
|
|
37
|
+
function indexMember(owner, options) {
|
|
38
|
+
const { additionalProperties: values, patternProperties: patterns } = owner.node;
|
|
39
|
+
if (locatedNode.isJsonObject(patterns) && Object.keys(patterns).length > 0) {
|
|
50
40
|
return OPAQUE;
|
|
51
41
|
}
|
|
52
|
-
if (isJsonObject(values) && Object.keys(values).length > 0) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
return
|
|
71
|
-
}
|
|
72
|
-
const isUnknownShape = isJsonObject(node.discriminator) || node.unevaluatedProperties !== void 0;
|
|
42
|
+
if (locatedNode.isJsonObject(values) && Object.keys(values).length > 0) {
|
|
43
|
+
const location = locatedNode.childLocation(owner.location, "additionalProperties");
|
|
44
|
+
return { kind: "index", node: values, location };
|
|
45
|
+
}
|
|
46
|
+
const isImplicit = values === true || locatedNode.isJsonObject(values) && Object.keys(values).length === 0;
|
|
47
|
+
return isImplicit || !values && options.additionalProperties ? { kind: "index", node: void 0, location: void 0 } : null;
|
|
48
|
+
}
|
|
49
|
+
function objectMember(owner, key, input) {
|
|
50
|
+
const { options } = input;
|
|
51
|
+
const { node } = owner;
|
|
52
|
+
const properties = locatedNode.isJsonObject(node.properties) ? node.properties : {};
|
|
53
|
+
if (Object.hasOwn(properties, key) && !propertyShape.isExcludedProperty(properties[key], options, input.refs)) {
|
|
54
|
+
if (locatedNode.isJsonObject(node.discriminator)) {
|
|
55
|
+
return OPAQUE;
|
|
56
|
+
}
|
|
57
|
+
const location = locatedNode.childLocation(owner.location, "properties", key);
|
|
58
|
+
const isOptional = propertyShape.isOptionalProperty(owner, key, options);
|
|
59
|
+
const isMarked = propertyShape.isMarkedProperty(properties[key], options, input.refs);
|
|
60
|
+
return { kind: "property", node: properties[key], location, isOptional, isMarked };
|
|
61
|
+
}
|
|
62
|
+
const isUnknownShape = locatedNode.isJsonObject(node.discriminator) || node.unevaluatedProperties !== void 0;
|
|
73
63
|
if (isBuiltInMember(key, {}) || key === "$defs" || isUnknownShape) {
|
|
74
64
|
return OPAQUE;
|
|
75
65
|
}
|
|
76
|
-
return hasObjectKeywords(node) ? indexMember(
|
|
77
|
-
}
|
|
78
|
-
function schemaPresence(schema, refs) {
|
|
79
|
-
return isNullableSchema(followRefs(schema, refs)) ? "absent" : "present";
|
|
80
|
-
}
|
|
81
|
-
function propertyPresence(schema, key, options, refs) {
|
|
82
|
-
const node = followRefs(schema, refs);
|
|
83
|
-
const properties = isJsonObject(node) && isJsonObject(node.properties) ? node.properties : {};
|
|
84
|
-
if (!isJsonObject(node) || !Object.hasOwn(properties, key)) {
|
|
85
|
-
return "unknown";
|
|
86
|
-
}
|
|
87
|
-
return isOptionalProperty(node, key, options) ? "absent" : schemaPresence(properties[key], refs);
|
|
66
|
+
return hasObjectKeywords(node) ? indexMember(owner, options) ?? MISSING : emptyObjectMember(node, options);
|
|
88
67
|
}
|
|
89
68
|
function membersOf(node, keyword) {
|
|
90
69
|
const members = node[keyword];
|
|
91
70
|
return Array.isArray(members) ? members : [];
|
|
92
71
|
}
|
|
72
|
+
function locatedMembers(owner, keyword) {
|
|
73
|
+
return membersOf(owner.node, keyword).map((node, index) => ({
|
|
74
|
+
node,
|
|
75
|
+
location: locatedNode.childLocation(owner.location, keyword, String(index))
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
93
78
|
function withoutComposition(node) {
|
|
94
79
|
const { allOf: _allOf, anyOf: _anyOf, oneOf: _oneOf, ...own } = node;
|
|
95
80
|
return own;
|
|
96
81
|
}
|
|
97
82
|
function hasOwnObjectType(own) {
|
|
98
|
-
return isObjectShape(own) && (hasObjectKeywords(own) || isJsonObject(own.discriminator));
|
|
83
|
+
return isObjectShape(own) && (hasObjectKeywords(own) || locatedNode.isJsonObject(own.discriminator));
|
|
99
84
|
}
|
|
100
|
-
function composedMember(
|
|
101
|
-
const
|
|
85
|
+
function composedMember(owner, key, input) {
|
|
86
|
+
const { node } = owner;
|
|
87
|
+
const variants = [...locatedMembers(owner, "anyOf"), ...locatedMembers(owner, "oneOf")];
|
|
102
88
|
const own = withoutComposition(node);
|
|
103
89
|
const hasOwn = hasOwnObjectType(own);
|
|
104
90
|
if (variants.length > 0) {
|
|
@@ -106,7 +92,8 @@ function composedMember(node, key, input) {
|
|
|
106
92
|
const members = variants.map((variant) => memberAt(variant, key, input));
|
|
107
93
|
return isAlone && members.some((member) => member.kind === "missing") ? MISSING : OPAQUE;
|
|
108
94
|
}
|
|
109
|
-
const
|
|
95
|
+
const ownPart = { node: own, location: owner.location };
|
|
96
|
+
const parts = [...locatedMembers(owner, "allOf"), ...hasOwn ? [ownPart] : []];
|
|
110
97
|
return intersectionMember(parts.map((part) => memberAt(part, key, input)));
|
|
111
98
|
}
|
|
112
99
|
function isUnknownIndex(member) {
|
|
@@ -122,21 +109,20 @@ function intersectionMember(members) {
|
|
|
122
109
|
return typed.length === 1 && only.kind !== "opaque" ? only : OPAQUE;
|
|
123
110
|
}
|
|
124
111
|
function memberAt(schema, key, input) {
|
|
125
|
-
const
|
|
126
|
-
|
|
112
|
+
const followed = locatedNode.followLocated(schema, input.refs);
|
|
113
|
+
const { node } = followed;
|
|
114
|
+
if (!locatedNode.isJsonObject(node) || OPAQUE_KEYS.some((name) => name in node) || input.depth > MAX_DEPTH) {
|
|
127
115
|
return OPAQUE;
|
|
128
116
|
}
|
|
129
|
-
|
|
117
|
+
const owner = { ...followed, node };
|
|
118
|
+
if (propertyShape.isNullableSchema(node)) {
|
|
130
119
|
return isObjectShape(node) || isArrayShape(node) ? MISSING : OPAQUE;
|
|
131
120
|
}
|
|
132
|
-
if (input.options.readWriteMarkers) {
|
|
133
|
-
return OPAQUE;
|
|
134
|
-
}
|
|
135
121
|
if ("allOf" in node || "anyOf" in node || "oneOf" in node) {
|
|
136
|
-
return composedMember(
|
|
122
|
+
return composedMember(owner, key, { ...input, depth: input.depth + 1 });
|
|
137
123
|
}
|
|
138
124
|
if (isObjectShape(node)) {
|
|
139
|
-
return objectMember(
|
|
125
|
+
return objectMember(owner, key, input);
|
|
140
126
|
}
|
|
141
127
|
if (isArrayShape(node)) {
|
|
142
128
|
return INDEX_RE.test(key) || isBuiltInMember(key, []) ? OPAQUE : MISSING;
|
|
@@ -160,12 +146,7 @@ function generatedMember(schema, key, options, refs) {
|
|
|
160
146
|
return memberAt(schema, key, { options, refs, depth: 0 });
|
|
161
147
|
}
|
|
162
148
|
|
|
163
|
-
exports.followRefs = followRefs;
|
|
164
149
|
exports.generatedMember = generatedMember;
|
|
165
150
|
exports.isArrayShape = isArrayShape;
|
|
166
|
-
exports.isJsonObject = isJsonObject;
|
|
167
|
-
exports.isNullableSchema = isNullableSchema;
|
|
168
151
|
exports.isObjectShape = isObjectShape;
|
|
169
|
-
exports.propertyPresence = propertyPresence;
|
|
170
|
-
exports.schemaPresence = schemaPresence;
|
|
171
152
|
//# sourceMappingURL=generated-shape.cjs.map
|