exodus/schemasafe
Form validator implementation based on @exodus/schemasafe a code-generating JSON Schema validator.
Installation
Section titled “Installation”npm i @sjsf/schemasafe-validatorpnpm add @sjsf/schemasafe-validatoryarn add @sjsf/schemasafe-validatorbun add @sjsf/schemasafe-validatordeno add @sjsf/schemasafe-validatorRequired peer dependencies: @exodus/schemasafe@1.3.0 @sjsf/form@3.5.0
Example
Section titled “Example”<script lang="ts">
import {
ON_INPUT,
BasicForm,
createForm,
ON_CHANGE,
ON_ARRAY_CHANGE,
getValueSnapshot,
} from "@sjsf/form";
import { createFormValidator } from "@sjsf/schemasafe-validator";
import * as defaults from "$lib/sjsf/defaults";
import { initialValue, schema, uiSchema } from "../demo-schema";
const form = createForm({
...defaults,
schema,
uiSchema,
validator: createFormValidator,
fieldsValidationMode: ON_INPUT | ON_CHANGE | ON_ARRAY_CHANGE,
initialValue,
});
</script>
<BasicForm {form} novalidate />
<pre>{JSON.stringify(getValueSnapshot(form), null, 2)}</pre>
Async validation
Section titled “Async validation”This validator does not support async validation.
Precompiled validation
Section titled “Precompiled validation”It is possible to use precompiled validator.
<script lang="ts">
import { BasicForm, createForm, getValueSnapshot } from "@sjsf/form";
import { resolver } from "@sjsf/form/resolvers/compat";
import { fromValidators } from "@sjsf/form/validators/precompile";
import { createFormValidatorFactory } from "@sjsf/schemasafe-validator/precompile";
import * as defaults from "$lib/sjsf/defaults";
import { schema, fieldsValidationMode } from "./patched-schema";
import * as validateFunctions from "./validate-functions";
const form = createForm({
...defaults,
schema,
validator: createFormValidatorFactory({
validatorRetriever: fromValidators(validateFunctions),
}),
fieldsValidationMode,
resolver,
});
</script>
<BasicForm {form} novalidate />
<pre>{JSON.stringify(getValueSnapshot(form), null, 2)}</pre>
Run the following command for schema compilation:
node compile-schema-script.ts