mirror of
https://github.com/misode/misode.github.io.git
synced 2026-04-26 08:26:51 +00:00
Validate block states
This commit is contained in:
36
src/app/hooks/customValidation.ts
Normal file
36
src/app/hooks/customValidation.ts
Normal 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() {}
|
||||
})
|
||||
Reference in New Issue
Block a user