Validate block states

This commit is contained in:
Misode
2020-12-20 04:25:50 +01:00
parent 394dd27d85
commit a52716a80a
8 changed files with 159 additions and 29 deletions

View File

@@ -0,0 +1,36 @@
import { Errors, Hook, relativePath } from '@mcschema/core'
import { BlockStateRegistry } from '../App'
import { walk } from './walk'
export const customValidation: Hook<[any, Errors], void> = walk<[Errors]>({
base() {},
boolean() {},
choice() {},
list() {},
map({ config }, path, value) {
if (config.validation?.validator === 'block_state_map') {
const block = relativePath(path, config.validation.params.id).get()
const errors = path.getModel().errors
const requiredProps = BlockStateRegistry[block].properties ?? {}
const existingKeys = Object.keys(value ?? {})
Object.keys(requiredProps).forEach(p => {
if (!existingKeys.includes(p)) {
errors.add(path, 'error.block_state.missing_property', p)
} else if (!requiredProps[p].includes(value[p])) {
errors.add(path.push(p), 'error.invalid_enum_option', value[p])
}
})
}
},
number() {},
object() {},
string() {}
})