Skip to content
PlaygroundForm Builder

exodus/schemasafe

Form validator implementation based on @exodus/schemasafe a code-generating JSON Schema validator.

Terminal window
npm i @sjsf/schemasafe-validator

Required peer dependencies: @exodus/schemasafe@1.3.0 @sjsf/form@3.5.0

<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>

This validator does not support async 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:

Terminal window
node compile-schema-script.ts