UNPKG

@formkit/validation

Version:

Validation plugin for FormKit

1 lines 35.6 kB
{"version":3,"sources":["../src/validation.ts"],"names":["createMessage","cloneAny","token","eq","validation","removeListeners","isKilled","diffDeps","applyListeners","empty","has","createObserver","node","clone","hints"],"mappings":"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","file":"index.cjs","sourcesContent":["import { FormKitNode, FormKitMessage, createMessage } from '@formkit/core'\nimport {\n FormKitObservedNode,\n createObserver,\n applyListeners,\n diffDeps,\n removeListeners,\n FormKitDependencies,\n isKilled,\n} from '@formkit/observer'\nimport { has, empty, token, clone, cloneAny, eq } from '@formkit/utils'\n\n/**\n * Special validation properties that affect the way validations are applied.\n *\n * @public\n */\nexport interface FormKitValidationHints {\n /**\n * If this validation fails, should it block the form from being submitted or\n * considered \"valid\"? There are some cases where it is acceptable to allow\n * an incorrect value to still be allowed to submit.\n */\n blocking: boolean\n /**\n * Only run this rule after this many milliseconds of debounce. This is\n * particularity helpful for more \"expensive\" async validation rules like\n * checking if a username is taken from the backend.\n */\n debounce: number\n /**\n * Normally the first validation rule to fail blocks other rules from running\n * if this flag is flipped to true, this rule will be run every time even if\n * a previous rule in the validation stack failed.\n */\n force: boolean\n /**\n * Most validation rules are not run when the input is empty, but this flag\n * allows that behavior to be changed.\n */\n skipEmpty: boolean\n /**\n * The actual name of the validation rule.\n */\n name: string\n}\n\n/**\n * Defines what fully parsed validation rules look like.\n * @public\n */\nexport type FormKitValidation = {\n /**\n * The actual rule function that will be called\n */\n rule: FormKitValidationRule\n /**\n * Arguments to be passed to the validation rule\n */\n args: any[]\n /**\n * The debounce timer for this input.\n */\n timer: number\n /**\n * The state of a validation, can be true, false, or null which means unknown.\n */\n state: boolean | null\n /**\n * Determines if the rule should be considered for the next run cycle. This\n * does not mean the rule will be validated, it just means that it should be\n * considered.\n */\n queued: boolean\n /**\n * Dependencies this validation rule is observing.\n */\n deps: FormKitDependencies\n /**\n * The observed node that is being validated.\n */\n observer: FormKitObservedNode\n /**\n * An observer that updates validation messages when it’s dependencies change,\n * for example, the label of the input.\n */\n messageObserver?: FormKitObservedNode\n} & FormKitValidationHints\n\n/**\n * Defines what validation rules look like when they are parsed, but have not\n * necessarily had validation rules substituted in yet.\n * @public\n */\nexport type FormKitValidationIntent = [string | FormKitValidationRule, ...any[]]\n\n/**\n * Signature for a generic validation rule. It accepts an input — often a string\n * — but should be able to accept any input type, and returns a boolean\n * indicating whether or not it passed validation.\n * @public\n */\nexport type FormKitValidationRule = {\n (node: FormKitNode, ...args: any[]): boolean | Promise<boolean>\n ruleName?: string\n} & Partial<FormKitValidationHints>\n\n/**\n * A validation rule result.\n * @public\n */\nexport interface FormKitValidationRuleResult {\n result: boolean\n validation: FormKitValidation\n}\n\n/**\n * FormKit validation rules are structured as on object of key/function pairs\n * where the key of the object is the validation rule name.\n * @public\n */\nexport interface FormKitValidationRules {\n [index: string]: FormKitValidationRule\n}\n\n/**\n * The interface for the localized validation message function.\n * @public\n */\nexport interface FormKitValidationMessage {\n (...args: FormKitValidationI18NArgs): string\n}\n\n/**\n * The interface for the localized validation message registry.\n * @public\n */\nexport interface FormKitValidationMessages {\n [index: string]: string | FormKitValidationMessage\n}\n\n/**\n * Determines the validation nonce.\n * @public\n */\ninterface FormKitValidationState {\n input: string | null\n rerun: number | null\n isPassing: boolean\n}\n\n/**\n * The arguments that are passed to the validation messages in the i18n plugin.\n *\n * @public\n */\nexport type FormKitValidationI18NArgs = [\n {\n node: FormKitNode\n name: string\n args: any[]\n message?: string\n }\n]\n\n/**\n * Message that gets set when the node is awaiting validation.\n */\nconst validatingMessage = /* #__PURE__ */ createMessage({\n type: 'state',\n blocking: true,\n visible: false,\n value: true,\n key: 'validating',\n})\n\n/**\n * The actual validation plugin function. Everything must be bootstrapped here.\n *\n * @param baseRules - Base validation rules to include in the plugin. By default,\n * FormKit makes all rules in the \\@formkit/rules package available via the\n * defaultConfig.\n *\n * @public\n */\nexport function createValidationPlugin(baseRules: FormKitValidationRules = {}) {\n return function validationPlugin(node: FormKitNode): void {\n let propRules = cloneAny(node.props.validationRules || {})\n let availableRules = { ...baseRules, ...propRules }\n // create an observed node\n const state = { input: token(), rerun: null, isPassing: true }\n let validation = cloneAny(node.props.validation)\n // If the node's validation props change, reboot:\n node.on('prop:validation', ({ payload }) => reboot(payload, propRules))\n node.on('prop:validationRules', ({ payload }) =>\n reboot(validation, payload)\n )\n /**\n * Reboots the validation using new rules or declarations/intents.\n * @param newValidation - New validation declaration to use\n * @param newRules - New validation rules to use\n * @returns\n */\n function reboot(\n newValidation: undefined | string | FormKitValidationIntent[],\n newRules: FormKitValidationRules\n ) {\n if (\n eq(Object.keys(propRules || {}), Object.keys(newRules || {})) &&\n eq(validation, newValidation)\n )\n return\n propRules = cloneAny(newRules)\n validation = cloneAny(newValidation)\n availableRules = { ...baseRules, ...propRules }\n // Destroy all observers that may re-trigger validation on an old stack\n // Clear existing message observers\n node.props.parsedRules?.forEach((validation: FormKitValidation) => {\n removeMessage(validation)\n removeListeners(validation.observer.receipts)\n validation.observer.kill()\n })\n // Remove all existing messages before re-validating\n node.store.filter(() => false, 'validation')\n node.props.parsedRules = parseRules(newValidation, availableRules, node)\n state.isPassing = true\n validate(node, node.props.parsedRules, state)\n }\n\n // Validate the field when this plugin is initialized\n node.props.parsedRules = parseRules(validation, availableRules, node)\n validate(node, node.props.parsedRules, state)\n }\n}\n\n/**\n * Given parsed validations, a value and a node, run the validations and set\n * the appropriate store messages on the node.\n * @param value - The value being validated\n * @param node - The Node this value belongs to\n * @param rules - The rules\n */\nfunction validate(\n node: FormKitNode | FormKitObservedNode,\n validations: FormKitValidation[],\n state: FormKitValidationState\n) {\n if (isKilled(node)) return\n state.input = token()\n node.store.set(\n /* #__PURE__ */ createMessage({\n key: 'failing',\n value: !state.isPassing,\n visible: false,\n })\n )\n state.isPassing = true\n node.store.filter((message) => !message.meta.removeImmediately, 'validation')\n validations.forEach(\n (validation) => validation.debounce && clearTimeout(validation.timer)\n )\n if (validations.length) {\n node.store.set(validatingMessage)\n run(0, validations, state, false, () => {\n node.store.remove(validatingMessage.key)\n node.store.set(\n /* #__PURE__ */ createMessage({\n key: 'failing',\n value: !state.isPassing,\n visible: false,\n })\n )\n })\n }\n}\n\n/**\n * Runs validation rules recursively while collecting dependencies allowing for\n * cross-node validation rules that automatically re-trigger when a foreign\n * value is changed.\n * @param current - The index of the current validation rule\n * @param validations - The remaining validation rule stack to run\n * @param node - An observed node, the owner of this validation stack\n * @param state - An object of state information about this run\n * @param removeImmediately - Should messages created during this call be removed immediately when a new commit takes place?\n * @returns\n */\nfunction run(\n current: number,\n validations: FormKitValidation[],\n state: FormKitValidationState,\n removeImmediately: boolean,\n complete: () => void\n): void {\n const validation = validations[current]\n if (!validation) return complete()\n const node = validation.observer\n if (isKilled(node)) return\n const currentRun = state.input\n validation.state = null\n\n function next(async: boolean, result: boolean | null): void {\n if (state.input !== currentRun) return\n state.isPassing = state.isPassing && !!result\n validation.queued = false\n const newDeps = node.stopObserve()\n const diff = diffDeps(validation.deps, newDeps)\n applyListeners(\n node,\n diff,\n function revalidate() {\n // Event callback for when the deps change:\n try {\n node.store.set(validatingMessage)\n } catch (e) {}\n validation.queued = true\n if (state.rerun) clearTimeout(state.rerun)\n state.rerun = setTimeout(\n validate,\n 0,\n node,\n validations,\n state\n ) as unknown as number\n },\n 'unshift' // We want these listeners to run before other events are emitted so the 'state.validating' will be reliable.\n )\n validation.deps = newDeps\n\n validation.state = result\n if (result === false) {\n createFailedMessage(validation, removeImmediately || async)\n } else {\n removeMessage(validation)\n }\n if (validations.length > current + 1) {\n const nextValidation = validations[current + 1]\n if (\n (result || nextValidation.force || !nextValidation.skipEmpty) &&\n nextValidation.state === null\n ) {\n // If the next rule was never run then it has not been observed so it could never\n // run again on its own.\n nextValidation.queued = true\n }\n run(current + 1, validations, state, removeImmediately || async, complete)\n } else {\n // The validation has completed\n complete()\n }\n }\n if (\n (!empty(node.value) || !validation.skipEmpty) &&\n (state.isPassing || validation.force)\n ) {\n if (validation.queued) {\n runRule(validation, node, (result: boolean | Promise<boolean>) => {\n result instanceof Promise\n ? result.then((r) => next(true, r))\n : next(false, result)\n })\n } else {\n // In this case our rule is not queued, so literally nothing happened that\n // would affect it, we just need to move past this rule and make no\n // modifications to state\n run(current + 1, validations, state, removeImmediately, complete)\n }\n } else if (empty(node.value) && validation.skipEmpty && state.isPassing) {\n // This rule is not run because it is empty — the previous rule passed so normally we would run this rule\n // but in this case we cannot because it is empty. The node being empty is the only condition by which\n // this rule is not run, so the only dep at this point to the the value of the node.\n node.observe()\n node.value\n next(false, state.isPassing)\n } else {\n // This rule is not being run because a previous validation rule is failing and this one is not forced\n // In this case we should call next validation — a `null` result here explicitly means the rule was not run.\n next(false, null)\n }\n}\n\n/**\n * Run a validation rule debounced or not.\n * @param validation - A validation to debounce\n */\nfunction runRule(\n validation: FormKitValidation,\n node: FormKitObservedNode,\n after: (result: boolean | Promise<boolean>) => void\n) {\n if (validation.debounce) {\n validation.timer = setTimeout(() => {\n node.observe()\n after(validation.rule(node, ...validation.args))\n }, validation.debounce) as unknown as number\n } else {\n node.observe()\n after(validation.rule(node, ...validation.args))\n }\n}\n\n/**\n * The messages given to this function have already been set on the node, but\n * any other validation messages on the node that are not included in this\n * stack should be removed because they have been resolved.\n * @param node - The node to operate on.\n * @param messages - A new stack of messages\n */\nfunction removeMessage(validation: FormKitValidation) {\n const key = `rule_${validation.name}`\n if (validation.messageObserver) {\n validation.messageObserver = validation.messageObserver.kill()\n }\n if (has(validation.observer.store, key)) {\n validation.observer.store.remove(key)\n }\n}\n\n/**\n *\n * @param value - The value that is failing\n * @param validation - The validation object\n */\nfunction createFailedMessage(\n validation: FormKitValidation,\n removeImmediately: boolean\n): void {\n const node = validation.observer\n if (isKilled(node)) return\n\n if (!validation.messageObserver) {\n validation.messageObserver = createObserver(node._node)\n }\n validation.messageObserver.watch(\n (node) => {\n const i18nArgs: FormKitValidationI18NArgs = createI18nArgs(\n node,\n validation\n )\n return i18nArgs\n },\n (i18nArgs) => {\n const customMessage = createCustomMessage(node, validation, i18nArgs)\n // Here we short circuit the i18n system to force the output.\n const message = /* #__PURE__ */ createMessage({\n blocking: validation.blocking,\n key: `rule_${validation.name}`,\n meta: {\n /**\n * Use this key instead of the message root key to produce i18n validation\n * messages.\n */\n messageKey: validation.name,\n /**\n * For messages that were created *by or after* a debounced or async\n * validation rule — we make note of it so we can immediately remove them\n * as soon as the next commit happens.\n */\n removeImmediately,\n /**\n * Determines if this message should be passed to localization.\n */\n localize: !customMessage,\n /**\n * The arguments that will be passed to the validation rules\n */\n i18nArgs,\n },\n type: 'validation',\n value: customMessage || 'This field is not valid.',\n })\n node.store.set(message)\n }\n )\n}\n\n/**\n * Returns a custom validation message if applicable.\n * @param node - FormKit Node\n * @param validation - The validation rule being processed.\n */\nfunction createCustomMessage(\n node: FormKitNode,\n validation: FormKitValidation,\n i18nArgs: FormKitValidationI18NArgs\n): string | undefined {\n const customMessage =\n node.props.validationMessages &&\n has(node.props.validationMessages, validation.name)\n ? node.props.validationMessages[validation.name]\n : undefined\n if (typeof customMessage === 'function') {\n return customMessage(...i18nArgs)\n }\n return customMessage\n}\n\n/**\n * Creates the arguments passed to the i18n\n * @param node - The node that performed the validation\n * @param validation - The validation that failed\n */\nfunction createI18nArgs(\n node: FormKitNode,\n validation: FormKitValidation\n): FormKitValidationI18NArgs {\n // If a custom message has been found, short circuit the i18n system.\n return [\n {\n node,\n name: createMessageName(node),\n args: validation.args,\n },\n ]\n}\n\n/**\n * Given a node, this returns the name that should be used in validation\n * messages. This is either the `validationLabel` prop, the `label` prop, or\n * the name of the input (in that order).\n * @param node - The node to display\n * @returns\n * @public\n */\nexport function createMessageName(node: FormKitNode): string {\n if (typeof node.props.validationLabel === 'function') {\n return node.props.validationLabel(node)\n }\n return (\n node.props.validationLabel ||\n node.props.label ||\n node.props.name ||\n String(node.name)\n )\n}\n\n/**\n * Describes hints, must also be changed in the debounceExtractor.\n */\nconst hintPattern = '(?:[\\\\*+?()0-9]+)'\n\n/**\n * A pattern to describe rule names. Rules names can only contain letters,\n * numbers, and underscores and must start with a letter.\n */\nconst rulePattern = '[a-zA-Z][a-zA-Z0-9_]+'\n\n/**\n * Regular expression for extracting rule data.\n */\nconst ruleExtractor = new RegExp(\n `^(${hintPattern}?${rulePattern})(?:\\\\:(.*)+)?$`,\n 'i'\n)\n\n/**\n * Validation hints are special characters preceding a validation rule, like\n * !phone\n */\nconst hintExtractor = new RegExp(`^(${hintPattern})(${rulePattern})$`, 'i')\n\n/**\n * Given a hint string like ^(200)? or ^? or (200)?^ extract the hints to\n * matches.\n */\nconst debounceExtractor = /([\\*+?]+)?(\\(\\d+\\))([\\*+?]+)?/\n\n/**\n * Determines if a given string is in the proper debounce format.\n */\nconst hasDebounce = /\\(\\d+\\)/\n\n/**\n * The default values of the available validation hints.\n */\nexport const defaultHints: FormKitValidationHints = {\n blocking: true,\n debounce: 0,\n force: false,\n skipEmpty: true,\n name: '',\n}\n\n/**\n * Parse validation intents and strings into validation rule stacks.\n * @param validation - Either a string a validation rules, or proper array of structured rules.\n * @internal\n */\nexport function parseRules(\n validation: undefined | string | FormKitValidationIntent[],\n rules: FormKitValidationRules,\n node: FormKitNode\n): FormKitValidation[] {\n if (!validation) return []\n const intents =\n typeof validation === 'string'\n ? extractRules(validation)\n : clone(validation)\n return intents.reduce((validations, args) => {\n let rule = args.shift() as string | FormKitValidationRule\n const hints = {}\n if (typeof rule === 'string') {\n const [ruleName, parsedHints] = parseHints(rule)\n if (has(rules, ruleName)) {\n rule = rules[ruleName]\n Object.assign(hints, parsedHints)\n }\n }\n if (typeof rule === 'function') {\n validations.push({\n observer: createObserver(node),\n rule,\n args,\n timer: 0,\n state: null,\n queued: true,\n deps: new Map(),\n ...defaultHints,\n ...fnHints(hints, rule),\n })\n }\n return validations\n }, [] as FormKitValidation[])\n}\n\n/**\n * A string of validation rules written in FormKitRule notation.\n * @param validation - The string of rules\n * @internal\n */\nfunction extractRules(validation: string): FormKitValidationIntent[] {\n return validation.split('|').reduce((rules, rule) => {\n const parsedRule = parseRule(rule)\n if (parsedRule) {\n rules.push(parsedRule)\n }\n return rules\n }, [] as FormKitValidationIntent[])\n}\n\n/**\n * Given a rule like confirm:password_confirm produce a FormKitValidationIntent\n * @param rule - A string representing a validation rule.\n * @returns\n */\nfunction parseRule(rule: string): FormKitValidationIntent | false {\n const trimmed = rule.trim()\n if (trimmed) {\n const matches = trimmed.match(ruleExtractor)\n if (matches && typeof matches[1] === 'string') {\n const ruleName = matches[1].trim()\n const args =\n matches[2] && typeof matches[2] === 'string'\n ? matches[2].split(',').map((s) => s.trim())\n : []\n return [ruleName, ...args]\n }\n }\n return false\n}\n\n/**\n * Given a rule name, detect if there are any additional hints like !\n * @param ruleName - string representing a rule name\n * @returns\n */\nfunction parseHints(\n ruleName: string\n): [string, Partial<FormKitValidationHints>] {\n const matches = ruleName.match(hintExtractor)\n if (!matches) {\n return [ruleName, { name: ruleName }]\n }\n const map: { [index: string]: Partial<FormKitValidationHints> } = {\n '*': { force: true },\n '+': { skipEmpty: false },\n '?': { blocking: false },\n }\n const [, hints, rule] = matches\n const hintGroups = hasDebounce.test(hints)\n ? hints.match(debounceExtractor) || []\n : [, hints]\n return [\n rule,\n [hintGroups[1], hintGroups[2], hintGroups[3]].reduce(\n (hints: Partial<FormKitValidationHints>, group: string | undefined) => {\n if (!group) return hints\n if (hasDebounce.test(group)) {\n hints.debounce = parseInt(group.substr(1, group.length - 1))\n } else {\n group\n .split('')\n .forEach(\n (hint) => has(map, hint) && Object.assign(hints, map[hint])\n )\n }\n return hints\n },\n { name: rule } as Partial<FormKitValidationHints>\n ),\n ]\n}\n\n/**\n * Extracts hint properties from the validation rule function itself and applies\n * them if they are not already in the set of validation hints extracted from\n * strings.\n * @param existingHints - An existing set of hints already parsed\n * @param rule - The actual rule function, which can contain hint properties\n * @returns\n */\nfunction fnHints(\n existingHints: Partial<FormKitValidationHints>,\n rule: FormKitValidationRule\n) {\n if (!existingHints.name) {\n existingHints.name = rule.ruleName || rule.name\n }\n return ['skipEmpty', 'force', 'debounce', 'blocking'].reduce(\n (hints: Partial<FormKitValidationHints>, hint: string) => {\n if (has(rule, hint) && !has(hints, hint)) {\n Object.assign(hints, {\n [hint]: rule[hint as keyof FormKitValidationHints],\n })\n }\n return hints\n },\n existingHints\n )\n}\n\n/**\n * Extracts all validation messages from the given node and all its descendants.\n * This is not reactive and must be re-called each time the messages change.\n * @param node - The FormKit node to extract validation rules from — as well as its descendants.\n * @public\n */\nexport function getValidationMessages(\n node: FormKitNode\n): Map<FormKitNode, FormKitMessage[]> {\n const messages: Map<FormKitNode, FormKitMessage[]> = new Map()\n const extract = (n: FormKitNode) => {\n const nodeMessages = []\n for (const key in n.store) {\n const message = n.store[key]\n if (\n message.type === 'validation' &&\n message.visible &&\n typeof message.value === 'string'\n ) {\n nodeMessages.push(message)\n }\n }\n if (nodeMessages.length) {\n messages.set(n, nodeMessages)\n }\n return n\n }\n extract(node).walk(extract)\n return messages\n}\n"]}