( node: unknown, transform: (schema: Record<string, unknown>) => Record<string, unknown> )
| 848 | } |
| 849 | |
| 850 | function transformSchema( |
| 851 | node: unknown, |
| 852 | transform: (schema: Record<string, unknown>) => Record<string, unknown> |
| 853 | ): unknown { |
| 854 | return walk(node) |
| 855 | |
| 856 | function walk(node: unknown): unknown { |
| 857 | if (!Predicate.isObject(node)) return node |
| 858 | |
| 859 | const out: Record<string, unknown> = {} |
| 860 | for (const key of Object.keys(node)) { |
| 861 | const value = node[key] |
| 862 | let transformed = value |
| 863 | switch (key) { |
| 864 | case "$defs": |
| 865 | case "properties": |
| 866 | case "patternProperties": |
| 867 | case "dependentSchemas": |
| 868 | transformed = mapObject(value, walk) ?? value |
| 869 | break |
| 870 | case "allOf": |
| 871 | case "anyOf": |
| 872 | case "oneOf": |
| 873 | case "prefixItems": |
| 874 | transformed = Array.isArray(value) ? value.map(walk) : value |
| 875 | break |
| 876 | case "not": |
| 877 | case "additionalProperties": |
| 878 | case "propertyNames": |
| 879 | case "unevaluatedProperties": |
| 880 | case "items": |
| 881 | case "contains": |
| 882 | case "unevaluatedItems": |
| 883 | case "if": |
| 884 | case "then": |
| 885 | case "else": |
| 886 | case "contentSchema": |
| 887 | transformed = walk(value) |
| 888 | } |
| 889 | InternalRecord.assignProperty(out, key, transformed) |
| 890 | } |
| 891 | return transform(out) |
| 892 | } |
| 893 | } |
| 894 | |
| 895 | /** @internal */ |
| 896 | export function rewriteRefs(schema: JsonSchema, rewrite: ($ref: string) => string): JsonSchema { |
no test coverage detected