33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
![]() |
import { Draft } from "./draft";
|
||
|
import { isJsonError, JsonError, JsonSchema } from "./types";
|
||
|
|
||
|
/**
|
||
|
* Returns a list of possible child-schemas for the given property key. In case of a oneOf selection, multiple schemas
|
||
|
* could be added at the given property (e.g. item-index), thus an array of options is returned. In all other cases
|
||
|
* a list with a single item will be returned
|
||
|
*
|
||
|
* @param draft - draft to use
|
||
|
* @param property - parent schema of following property
|
||
|
* @param [schema] - parent schema of following property
|
||
|
* @return
|
||
|
*/
|
||
|
export default function getChildSchemaSelection(
|
||
|
draft: Draft,
|
||
|
property: string | number,
|
||
|
schema: JsonSchema = draft.rootSchema
|
||
|
): JsonSchema[] | JsonError {
|
||
|
if (schema.oneOf) {
|
||
|
return schema.oneOf.map((item: JsonSchema) => draft.resolveRef(item));
|
||
|
}
|
||
|
if (schema.items?.oneOf) {
|
||
|
return schema.items.oneOf.map((item: JsonSchema) => draft.resolveRef(item));
|
||
|
}
|
||
|
|
||
|
const result = draft.step(property, schema, {}, "#");
|
||
|
if (isJsonError(result)) {
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
return [result];
|
||
|
}
|