forked from MapComplete/MapComplete
Studio: more work on the base properties
This commit is contained in:
parent
c229b92221
commit
84dee10201
46 changed files with 11462 additions and 37927 deletions
|
@ -3,12 +3,12 @@ import { readFileSync, writeFileSync } from "fs"
|
|||
import { JsonSchema } from "../UI/Studio/jsonSchema"
|
||||
|
||||
function WalkScheme<T>(
|
||||
onEach: (schemePart: JsonSchema) => T,
|
||||
onEach: (schemePart: JsonSchema, path: string[]) => T,
|
||||
scheme: JsonSchema,
|
||||
fullScheme: JsonSchema & { definitions?: any } = undefined,
|
||||
path: string[] = [],
|
||||
isHandlingReference = [],
|
||||
required?: string[]
|
||||
required: string[]
|
||||
): { path: string[]; required: boolean; t: T }[] {
|
||||
const results: { path: string[]; required: boolean; t: T }[] = []
|
||||
if (scheme === undefined) {
|
||||
|
@ -26,18 +26,23 @@ function WalkScheme<T>(
|
|||
return []
|
||||
}
|
||||
const loadedScheme = fullScheme.definitions[definitionName]
|
||||
return WalkScheme(onEach, loadedScheme, fullScheme, path, [
|
||||
...isHandlingReference,
|
||||
definitionName,
|
||||
])
|
||||
return WalkScheme(
|
||||
onEach,
|
||||
loadedScheme,
|
||||
fullScheme,
|
||||
path,
|
||||
[...isHandlingReference, definitionName],
|
||||
required
|
||||
)
|
||||
}
|
||||
|
||||
fullScheme = fullScheme ?? scheme
|
||||
let t = onEach(scheme)
|
||||
let t = onEach(scheme, path)
|
||||
if (t !== undefined) {
|
||||
const isRequired = required?.indexOf(path.at(-1)) >= 0
|
||||
results.push({
|
||||
path,
|
||||
required: required?.indexOf(path.at(-1)) >= 0,
|
||||
required: isRequired,
|
||||
t,
|
||||
})
|
||||
}
|
||||
|
@ -46,7 +51,7 @@ function WalkScheme<T>(
|
|||
if (v === undefined) {
|
||||
return
|
||||
}
|
||||
results.push(...WalkScheme(onEach, v, fullScheme, path, isHandlingReference))
|
||||
results.push(...WalkScheme(onEach, v, fullScheme, path, isHandlingReference, v.required))
|
||||
}
|
||||
|
||||
function walkEach(scheme: JsonSchema[]) {
|
||||
|
@ -87,7 +92,7 @@ function WalkScheme<T>(
|
|||
}
|
||||
|
||||
function addMetafields(fieldnames: string[], fullSchema: JsonSchema) {
|
||||
return WalkScheme((schemePart) => {
|
||||
const onEach = (schemePart, path) => {
|
||||
if (schemePart.description === undefined) {
|
||||
return
|
||||
}
|
||||
|
@ -113,8 +118,31 @@ function addMetafields(fieldnames: string[], fullSchema: JsonSchema) {
|
|||
}
|
||||
}
|
||||
|
||||
if (hints["types"]) {
|
||||
const numberOfExpectedSubtypes = hints["types"].split(";").length
|
||||
if (!Array.isArray(type)) {
|
||||
throw (
|
||||
"At " +
|
||||
path.join(".") +
|
||||
"Invalid hint in the documentation: `types` indicates that there are " +
|
||||
numberOfExpectedSubtypes +
|
||||
" subtypes, but object does not support subtypes. Did you mean `type` instead?\n\tTypes are: " +
|
||||
hints["types"]
|
||||
)
|
||||
}
|
||||
const numberOfActualTypes = type.length
|
||||
if (numberOfActualTypes !== numberOfExpectedSubtypes) {
|
||||
throw `At ${path.join(
|
||||
"."
|
||||
)}\nInvalid hint in the documentation: \`types\` indicates that there are ${numberOfExpectedSubtypes} subtypes, but there are ${numberOfActualTypes} subtypes
|
||||
\tTypes are: ${hints["types"]}`
|
||||
}
|
||||
}
|
||||
|
||||
return { hints, type, description: description.join("\n") }
|
||||
}, fullSchema)
|
||||
}
|
||||
|
||||
return WalkScheme(onEach, fullSchema, fullSchema, [], [], fullSchema.required)
|
||||
}
|
||||
|
||||
function extractMeta(typename: string, path: string) {
|
||||
|
@ -124,7 +152,9 @@ function extractMeta(typename: string, path: string) {
|
|||
|
||||
const metainfo = {
|
||||
type: "One of the inputValidator types",
|
||||
types: "Is multiple types are allowed for this field, then first show a mapping to pick the appropriate subtype. `Types` should be `;`-separated and contain precisely the same amount of subtypes",
|
||||
group: "A kind of label. Items with the same group name will be placed in the same region",
|
||||
default: "The default value which is used if no value is specified",
|
||||
question: "The question to ask in the tagRenderingConfig",
|
||||
ifunset:
|
||||
"Only applicable if _not_ a required item. This will appear in the 'not set'-option as extra description",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue