UNPKG

tsurih

Version:

Svelte form validation library

123 lines (95 loc) • 2.74 kB
# Tsurih Svelte form validation library - Minimalistic 🚐 - Type safe šŸ›Ÿ - Small size šŸ“¦ - Ability to use custom validators ā˜˜ļø - Strategies šŸŽ–ļø - Helper functions šŸ’Ŗ - Focused on DX ā¤ļø Example šŸ‘‡ ```jsx <script lang="ts"> import { get } from "svelte/store"; import { tsurih, debounce, validators } from "tsurih"; import type { TConfig, TContext } from "tsurih"; const debounced = debounce(() => { return new Promise<boolean>((res) => setTimeout(() => { console.log("šŸš‚"); res(true); }) ); }, 2000); const customValidators = { debounce: (message?: string) => { return async (ctx: TContext<any, any, TConfig<any, any>>) => { const result = await debounced(); const values = get(ctx.config.values); if (!result) { // āŒ Error return message || "Field is not valid"; } // āœ… Success return ""; }; }, }; const form = tsurih({ field1: true, field2: "", }) .setSchema({ field1: [validators.required()], field2: [ validators.required(), (ctx) => { const values = get(ctx.config.values); if (!values.field1) { // āŒ Error return "Field is not valid"; } // āœ… Success return ""; }, customValidators.debounce(), ], }) .setStrategy("blur"); $: watchOnlyField1 = $values.field1; $: { watchOnlyField1; form.revalidate("field2"); } const { errors, isSubmitting, values } = form; </script> <form use:form.reg on:submit="{form.onSubmit((values) => { console.log(values); })}" > <input type="checkbox" bind:checked="{$values.field1}" name="{form.fields.field1}" /> {#if $errors.field1} <span>{$errors.field1}</span> {/if} <input bind:value="{$values.field2}" name="{form.fields.field2}" /> {#if $errors.field2} <span>{$errors.field2}</span> {/if} {#if $isSubmitting} Submitting... {/if} <button type="submit">Submit</button> </form> ``` ā˜˜ļø tsurih also provides validators, isString, isNumber, isArray, isObject, debounce utilities ā˜˜ļø "validators" utility which has standard min, max, required, regexp, optionalMin, optionalRegexp. ā˜˜ļø An additional validator "optional" is not needed as all default fields are optional. But if you, for example, want min or regexp to be checked only if a value is present, use optionMin or optionalRegexp . If you are writing your own validator which should be optional, then it should have an if(!ctx.value) return "" condition ## Author [Vladislav Yemelyanov](https://twitter.com/@hardwayder) Released under the MIT License.