Skip to content

Commit 4e7a641

Browse files
committed
fix(schema): use allOf when $ref and type exists on the same schema level
1 parent 0ebd178 commit 4e7a641

File tree

3 files changed

+2034
-3
lines changed

3 files changed

+2034
-3
lines changed

packages/specs/schema/src/components/default/inheritedClassMapper.ts

+19-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,23 @@ import {JsonSchemaOptions} from "../../interfaces/JsonSchemaOptions.js";
33
import {execMapper, registerJsonSchemaMapper} from "../../registries/JsonSchemaMapperContainer.js";
44
import {getInheritedStores} from "../../utils/getInheritedStores.js";
55

6+
function alterMerge(_: string, obj: any) {
7+
if (obj?.type && obj?.$ref) {
8+
const {$ref, ...schema} = obj;
9+
10+
obj = {
11+
allOf: [
12+
{
13+
$ref
14+
},
15+
schema
16+
]
17+
};
18+
}
19+
20+
return obj;
21+
}
22+
623
/**
724
* @ignore
825
*/
@@ -11,10 +28,9 @@ export function inheritedClassMapper(obj: any, {target, ...options}: JsonSchemaO
1128

1229
if (stores.length) {
1330
const schema = stores.reduce((obj, [, store]) => {
14-
return deepMerge(obj, execMapper("schema", [store.schema], options));
31+
return deepMerge(obj, execMapper("schema", [store.schema], options), {alter: alterMerge});
1532
}, {});
16-
17-
obj = deepMerge(schema, obj);
33+
obj = deepMerge(schema, obj, {alter: alterMerge});
1834
}
1935

2036
return obj;

0 commit comments

Comments
 (0)