@formhaus/core 0.11.1 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/definition-validation/issues.ts","../src/definition-validation/format.ts","../src/definition-validation/conditions.ts","../src/definition-validation/context.ts","../src/definition-validation/fields.ts","../src/definition-validation/graph.ts","../src/definition-validation/shape.ts","../src/definition-validation/paths.ts","../src/definition-validation/structure.ts","../src/definition-validation/warnings.ts","../src/definition-validation/check-definition.ts","../src/definition-validation/validate-definition.ts","../src/engine/subscriptions.ts","../src/engine/warnings.ts","../src/engine/visibility-index.ts","../src/engine/visibility-state.ts","../src/engine/runtime.ts"],"names":["FormDefinitionError","issues","issue","create","severity","code","path","problem","hint","error","warning","pointer","key","isError","oneOf","values","shown","value","distance","a","b","row","_","index","next","j","closest","candidates","lower","candidate","suggest","match","FORMAT_VERSION","formatIssues","version","valid","OPERATORS","CONDITION_OPERATORS","operatorIssues","condition","keys","unknown","count","referenceIssues","context","owner","step","target","sameStep","allowed","conditionErrors","entry","conditionIssues","collect","source","name","collectAction","action","createContext","definition","validators","steps","entries","field","position","conditions","route","rangeIssue","rules","min","max","low","high","patternIssue","pattern","ruleIssues","fieldIssues","dependencyGraph","graph","link","owners","dependencies","known","fieldsOf","findCycles","visiting","cycles","start","stack","frame","neighbor","nodes","node","cycleIssues","cycle","graphIssues","isEntry","KINDS","item","typed","kind","list","check","required","text","option","RULES","validation","shapeIssues","input","format","metaIssues","conditional","successors","indexes","from","reachableSteps","seen","queue","RESERVED","stepIssues","first","later","keyIssues","reachable","exclusive","clash","other","structureIssues","LIST_OPERATORS","COMPARISONS","STRING_TYPES","expectedType","BOOLEAN_TYPES","valueIssue","operator","operand","mismatch","result","operands","expected","wrong","options","missing","conditionWarnings","optionIssues","defaults","ruleWarnings","rule","BUILT_IN_TYPES","numeric","ranges","sized","fieldWarnings","routeWarnings","targets","to","sibling","exits","definitionWarnings","warnings","shape","definitionErrors","checkDefinition","parseDefinition","errors","validateDefinition","listen","listeners","listener","createSubscriptions","structureVersion","structureListeners","fieldVersions","fieldListeners","set","fieldKeys","structureChanged","developmentIssues","assertDefinition","warn","indexConditions","dependent","conditionFields","dependents","createVisibility","allFields","getAllFields","fieldsByKey","routeFields","createActivePath","fieldDependents","stepDependents","stepOfField","visibilityDirty","canGoNextDirty","cache","isMultiStep","visible","isVisible","onPath","state","stepIndex","current","valuesChanged","validateStep","fieldKey","clearedFields","queued","cleared","held","clear","FormEngine","initialValues","createValues","total","previousSteps","valueChanged","hadError","stepId","revalidated","clearResolvedMatchErrors","changedFields","reconcileStepIndex","pruned","pruneOffPathErrors","applyValidationErrors","loading","previous","changeStep","submit","skipStep","handler","submitForm","validateForm","validateOne","getSubmitValues","goToStepWithField","resetEngine"],"mappings":"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","file":"chunk-PNVVU36P.js","sourcesContent":["export type DefinitionIssueCode =\n | 'invalid-type'\n | 'missing-property'\n | 'fields-and-steps'\n | 'duplicate-step-id'\n | 'duplicate-key'\n | 'reserved-key'\n | 'route-target'\n | 'unknown-field'\n | 'forward-reference'\n | 'condition-operator-count'\n | 'unknown-operator'\n | 'condition-value-mismatch'\n | 'condition-cycle'\n | 'invalid-pattern'\n | 'invalid-range'\n | 'rule-not-applicable'\n | 'missing-options'\n | 'default-not-in-options'\n | 'unknown-field-type'\n | 'unknown-validator'\n | 'skip-unreachable'\n | 'route-fallthrough'\n | 'unsupported-format-version';\n\nexport interface DefinitionIssue {\n code: DefinitionIssueCode;\n severity: 'error' | 'warning';\n path: string;\n message: string;\n hint?: string;\n}\n\nexport class FormDefinitionError extends Error {\n readonly issues: DefinitionIssue[];\n\n constructor(issues: DefinitionIssue[]) {\n super(`Invalid form definition:\\n${issues.map((issue) => issue.message).join('\\n')}`);\n this.name = 'FormDefinitionError';\n this.issues = issues;\n }\n}\n\nfunction create(severity: DefinitionIssue['severity']) {\n return (code: DefinitionIssueCode, path: string, problem: string, hint?: string): DefinitionIssue => ({\n code,\n severity,\n path,\n message: `${path || '/'}: ${problem}.${hint ? ` ${hint}.` : ''}`,\n ...(hint && { hint: `${hint}.` }),\n });\n}\n\nexport const error = create('error');\nexport const warning = create('warning');\n\nexport function pointer(key: string): string {\n return key.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\nexport function isError(issue: DefinitionIssue): boolean {\n return issue.severity === 'error';\n}\n\nexport function oneOf(values: string[]): string {\n if (values.length === 1) return `Use ${JSON.stringify(values[0])}`;\n const shown = values.slice(0, 10).map((value) => JSON.stringify(value)).join(', ');\n return values.length > 10 ? `Use one of: ${shown}, ...` : `Use one of: ${shown}`;\n}\n\nfunction distance(a: string, b: string): number {\n let row = Array.from({ length: b.length + 1 }, (_, index) => index);\n for (let i = 1; i <= a.length; i++) {\n const next = [i];\n for (let j = 1; j <= b.length; j++) {\n next[j] = Math.min(row[j] + 1, next[j - 1] + 1, row[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1));\n }\n row = next;\n }\n return row[b.length];\n}\n\nexport function closest(value: string, candidates: string[]): string | undefined {\n const lower = value.toLowerCase();\n return candidates.find((candidate) => candidate !== value && distance(lower, candidate.toLowerCase()) <= (candidate.length > 4 ? 2 : 1));\n}\n\nexport function suggest(value: string, candidates: string[]): string | undefined {\n const match = closest(value, candidates);\n if (match !== undefined) return `Use ${JSON.stringify(match)}`;\n return candidates.length ? oneOf(candidates) : undefined;\n}\n","import type { DefinitionIssue } from './issues';\nimport { error } from './issues';\n\nexport const FORMAT_VERSION = '1.0';\n\nexport function formatIssues({ formatVersion: version }: Record<string, unknown>): DefinitionIssue[] {\n if (version === undefined) return [];\n const valid = typeof version === 'string' && /^[1-9]\\d*(\\.\\d+)?$/.test(version);\n if (valid && parseInt(version) <= parseInt(FORMAT_VERSION)) return [];\n return [valid\n ? error('unsupported-format-version', '/formatVersion', `format ${version} is not supported`, 'Upgrade @formhaus/core')\n : error('invalid-type', '/formatVersion', 'must be a version string', `Use \"${FORMAT_VERSION}\"`)];\n}\n","import { CONDITION_OPERATORS } from '../visibility/evaluate-condition';\nimport type { ShowCondition } from '../types';\nimport type { CheckContext, ConditionEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error, pointer } from './issues';\n\nexport const OPERATORS: readonly string[] = CONDITION_OPERATORS;\n\nfunction operatorIssues({ suggest }: CheckContext, condition: ShowCondition, path: string): DefinitionIssue[] {\n const keys = Object.keys(condition).filter((key) => key !== 'field');\n const unknown = keys.filter((key) => !OPERATORS.includes(key));\n const issues = unknown.map((key) => error('unknown-operator', `${path}/${pointer(key)}`, `\"${key}\" is not a condition operator`, suggest(key, [...OPERATORS])));\n const count = keys.length - unknown.length;\n if (count !== 1 && !(count === 0 && unknown.length)) {\n const problem = count ? `the condition has ${count} operators` : 'the condition has no operator';\n issues.push(error('condition-operator-count', path, problem, `Use exactly one of: ${OPERATORS.join(', ')}`));\n }\n return issues;\n}\n\nfunction referenceIssues(context: CheckContext, { condition, path, owner, step, key }: ConditionEntry): DefinitionIssue[] {\n const target = context.keys.get(condition.field);\n if (!target) {\n const candidates = context.keyList.filter((candidate) => candidate !== key);\n return [error('unknown-field', `${path}/field`, `\"${condition.field}\" is not a field key`, context.suggest(condition.field, candidates))];\n }\n if (step < 0 || owner === 'action') return [];\n const sameStep = owner === 'step' ? 'this or a later step' : 'a later step';\n if (target.step < step || (owner !== 'step' && target.step === step)) return [];\n const allowed = owner === 'step' ? 'earlier steps' : 'this or an earlier step';\n return [error('forward-reference', `${path}/field`, `\"${condition.field}\" belongs to ${sameStep}`, `${owner === 'route' ? 'Route' : owner === 'step' ? 'Step' : 'Field'} conditions can use fields of ${allowed}`)];\n}\n\nexport function conditionErrors(context: CheckContext, entry: ConditionEntry): DefinitionIssue[] {\n const { condition, path } = entry;\n if (typeof condition.field !== 'string') return [error('missing-property', `${path}/field`, 'the condition has no \"field\"', 'Add the key of the field to test')];\n return [...operatorIssues(context, condition, path), ...referenceIssues(context, entry)];\n}\n\nexport function conditionIssues(context: CheckContext): DefinitionIssue[] {\n return context.conditions.flatMap((entry) => conditionErrors(context, entry));\n}\n","import type { FormAction, FormDefinition, FormField, ShowCondition } from '../types';\n\nexport interface FieldEntry {\n field: FormField;\n path: string;\n step: number;\n}\n\nexport interface ConditionEntry {\n condition: ShowCondition;\n path: string;\n owner: 'field' | 'step' | 'route' | 'action';\n step: number;\n key?: string;\n}\n\nexport interface CheckContext {\n definition: FormDefinition;\n entries: FieldEntry[];\n keys: Map<string, FieldEntry>;\n keyList: string[];\n conditions: ConditionEntry[];\n validators?: Record<string, unknown>;\n suggest: (value: string, candidates: string[]) => string | undefined;\n}\n\ntype Owner = { show?: ShowCondition[]; showAny?: ShowCondition[] };\n\nfunction collect(target: ConditionEntry[], source: Owner, path: string, owner: ConditionEntry['owner'], step: number, key?: string): void {\n for (const name of ['show', 'showAny'] as const) {\n (source[name] ?? []).forEach((condition, index) => target.push({ condition, path: `${path}/${name}/${index}`, owner, step, key }));\n }\n}\n\nfunction collectAction(target: ConditionEntry[], action: FormAction | false | undefined, path: string, step: number): void {\n (action ? action.disabled ?? [] : []).forEach((condition, index) => (\n target.push({ condition, path: `${path}/disabled/${index}`, owner: 'action', step })\n ));\n}\n\nexport function createContext(definition: FormDefinition, validators?: Record<string, unknown>, suggest: CheckContext['suggest'] = () => undefined): CheckContext {\n const steps = definition.steps ?? [];\n const entries: FieldEntry[] = steps.length\n ? steps.flatMap((step, index) => step.fields.map((field, position) => ({ field, path: `/steps/${index}/fields/${position}`, step: index })))\n : (definition.fields ?? []).map((field, position) => ({ field, path: `/fields/${position}`, step: -1 }));\n const keys = new Map<string, FieldEntry>();\n for (const entry of entries) if (!keys.has(entry.field.key)) keys.set(entry.field.key, entry);\n const conditions: ConditionEntry[] = [];\n for (const entry of entries) collect(conditions, entry.field, entry.path, 'field', entry.step, entry.field.key);\n steps.forEach((step, index) => {\n collect(conditions, step, `/steps/${index}`, 'step', index);\n (step.routes ?? []).forEach((route, position) => collect(conditions, route, `/steps/${index}/routes/${position}`, 'route', index));\n for (const name of ['next', 'back', 'skip'] as const) collectAction(conditions, step[name], `/steps/${index}/${name}`, index);\n });\n collectAction(conditions, definition.submit, '/submit', -1);\n collectAction(conditions, definition.cancel, '/cancel', -1);\n return {\n definition,\n entries,\n keys,\n keyList: [...keys.keys()],\n conditions,\n validators,\n suggest,\n };\n}\n","import type { FieldValidation } from '../types';\nimport type { CheckContext, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error } from './issues';\n\nfunction rangeIssue(rules: FieldValidation, path: string, min: 'min' | 'minLength', max: 'max' | 'maxLength'): DefinitionIssue[] {\n const low = rules[min];\n const high = rules[max];\n if (low === undefined || high === undefined || low <= high) return [];\n return [error('invalid-range', `${path}/validation/${min}`, `${min} (${low}) is greater than ${max} (${high})`, `Lower ${min} or raise ${max}`)];\n}\n\nfunction patternIssue(pattern: string | undefined, path: string): DefinitionIssue[] {\n if (pattern === undefined) return [];\n try {\n new RegExp(pattern);\n return [];\n } catch {\n return [error('invalid-pattern', `${path}/validation/pattern`, `${JSON.stringify(pattern)} is not a valid regular expression`, 'Fix the pattern or escape special characters with a backslash')];\n }\n}\n\nfunction ruleIssues(context: CheckContext, { field, path }: FieldEntry): DefinitionIssue[] {\n const rules = field.validation;\n if (!rules) return [];\n const match = rules.matchField;\n return [\n ...rangeIssue(rules, path, 'minLength', 'maxLength'),\n ...rangeIssue(rules, path, 'min', 'max'),\n ...patternIssue(rules.pattern, path),\n ...(match === undefined || context.keys.has(match) ? [] : [error('unknown-field', `${path}/validation/matchField`, `\"${match}\" is not a field key`, context.suggest(match, context.keyList))]),\n ];\n}\n\nexport function fieldIssues(context: CheckContext): DefinitionIssue[] {\n return context.entries.flatMap((entry) => ruleIssues(context, entry));\n}\n","import type { CheckContext } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error } from './issues';\n\nfunction dependencyGraph({ definition, entries, keys }: CheckContext): Map<string, string[]> {\n const graph = new Map<string, string[]>();\n const link = (owners: string[], dependencies: string[]) => {\n const known = dependencies.filter((key) => keys.has(key));\n if (known.length) for (const owner of owners) graph.set(owner, [...(graph.get(owner) ?? []), ...known]);\n };\n const fieldsOf = (source: { show?: { field: string }[]; showAny?: { field: string }[] }) => (\n [...(source.show ?? []), ...(source.showAny ?? [])].map((condition) => condition.field)\n );\n for (const { field } of entries) link([field.key], fieldsOf(field));\n for (const step of definition.steps ?? []) link(step.fields.map((field) => field.key), fieldsOf(step));\n return graph;\n}\n\nfunction findCycles(graph: Map<string, string[]>): string[][] {\n const visiting = new Map<string, boolean>();\n const cycles: string[][] = [];\n for (const start of graph.keys()) {\n if (visiting.has(start)) continue;\n visiting.set(start, true);\n const stack: [string, number][] = [[start, 0]];\n while (stack.length > 0) {\n const frame = stack[stack.length - 1];\n const neighbor = graph.get(frame[0])?.[frame[1]++];\n if (neighbor === undefined) {\n visiting.set(frame[0], false);\n stack.pop();\n } else if (visiting.get(neighbor)) {\n const nodes = stack.map(([node]) => node);\n cycles.push([...nodes.slice(nodes.indexOf(neighbor)), neighbor]);\n } else if (!visiting.has(neighbor)) {\n visiting.set(neighbor, true);\n stack.push([neighbor, 0]);\n }\n }\n }\n return cycles;\n}\n\nfunction cycleIssues(context: CheckContext): DefinitionIssue[] {\n return findCycles(dependencyGraph(context)).map((cycle) => (\n error('condition-cycle', context.keys.get(cycle[0])!.path, `show conditions form a cycle: ${cycle.join(' -> ')}`, 'Remove one of the conditions in the cycle')\n ));\n}\n\nexport function graphIssues(context: CheckContext): DefinitionIssue[] {\n return cycleIssues(context);\n}\n","import type { DefinitionIssue } from './issues';\nimport { formatIssues } from './format';\nimport { error, pointer } from './issues';\n\ntype Entry = Record<string, unknown>;\ntype Check = (value: Entry, path: string) => DefinitionIssue[];\ntype Kind = 'string' | 'number' | 'boolean' | 'requirement' | 'scalar' | 'list';\n\nexport const isEntry = (value: unknown): value is Entry =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst KINDS: Record<Kind, [(value: unknown) => boolean, string]> = {\n string: [(value) => typeof value === 'string', 'a string'],\n number: [(value) => typeof value === 'number' && Number.isFinite(value), 'a number'],\n boolean: [(value) => typeof value === 'boolean', 'true or false'],\n requirement: [(value) => ['boolean', 'string'].includes(typeof value), 'true, false or a message string'],\n scalar: [(value) => ['string', 'number', 'boolean'].includes(typeof value), 'a string, number or boolean'],\n list: [(value) => Array.isArray(value) && value.every((item) => ['string', 'number'].includes(typeof item)), 'an array of strings or numbers'],\n};\n\nfunction typed(value: Entry, rules: Record<string, Kind>, path: string): DefinitionIssue[] {\n return Object.entries(rules).flatMap(([key, kind]) => {\n const [valid, name] = KINDS[kind];\n return value[key] === undefined || valid(value[key]) ? [] : [error('invalid-type', `${path}/${pointer(key)}`, `\"${key}\" must be ${name}`)];\n });\n}\n\nfunction list(value: unknown, path: string, name: string, check: Check, required = false): DefinitionIssue[] {\n if (value == null && !required) return [];\n if (!Array.isArray(value)) return [error('invalid-type', path, 'must be an array', required ? 'Use [] when there is nothing to list' : undefined)];\n return value.flatMap((item, index) => (\n isEntry(item) ? check(item, `${path}/${index}`) : [error('invalid-type', `${path}/${index}`, `must be ${name}`)]\n ));\n}\n\nfunction text(value: Entry, key: string, path: string): DefinitionIssue[] {\n return typeof value[key] === 'string' ? [] : [error('missing-property', `${path}/${key}`, `\"${key}\" must be a string`)];\n}\n\nconst condition: Check = (value, path) => typed(value, { field: 'string', eq: 'scalar', neq: 'scalar', in: 'list', notIn: 'list', notEmpty: 'boolean', gt: 'number', gte: 'number', lt: 'number', lte: 'number' }, path);\n\nfunction conditions(value: Entry, path: string): DefinitionIssue[] {\n return [\n ...list(value.show, `${path}/show`, 'a condition object', condition),\n ...list(value.showAny, `${path}/showAny`, 'a condition object', condition),\n ];\n}\n\nfunction action(value: unknown, path: string): DefinitionIssue[] {\n if (!isEntry(value)) return [];\n return [...typed(value, { label: 'string' }, path), ...list(value.disabled, `${path}/disabled`, 'a condition object', condition)];\n}\n\nconst option: Check = (value, path) => [...text(value, 'value', path), ...typed(value, { label: 'string' }, path)];\n\nconst RULES: Record<string, Kind> = {\n required: 'requirement', minLength: 'number', maxLength: 'number', min: 'number', max: 'number', pattern: 'string', matchField: 'string', validator: 'string',\n minLengthMessage: 'string', maxLengthMessage: 'string', minMessage: 'string', maxMessage: 'string', patternMessage: 'string', matchFieldMessage: 'string',\n};\n\nfunction validation(value: unknown, path: string): DefinitionIssue[] {\n if (value === undefined) return [];\n return isEntry(value) ? typed(value, RULES, path) : [error('invalid-type', path, 'must be an object of validation rules')];\n}\n\nfunction dependencies(value: unknown, path: string): DefinitionIssue[] {\n const valid = value === undefined || (Array.isArray(value) && value.every((key) => typeof key === 'string'));\n return valid ? [] : [error('invalid-type', path, 'must be an array of field keys')];\n}\n\nconst field: Check = (value, path) => [\n ...text(value, 'key', path),\n ...text(value, 'type', path),\n ...typed(value, { label: 'string', placeholder: 'string', helperText: 'string' }, path),\n ...conditions(value, path),\n ...list(value.options, `${path}/options`, 'an option object', option),\n ...validation(value.validation, `${path}/validation`),\n ...dependencies(value.optionsDependsOn, `${path}/optionsDependsOn`),\n];\n\nconst route: Check = (value, path) => [\n ...(value.to === null || typeof value.to === 'string' ? [] : [error('missing-property', `${path}/to`, '\"to\" must be a step id or null')]),\n ...conditions(value, path),\n];\n\nconst step: Check = (value, path) => [\n ...text(value, 'id', path),\n ...typed(value, { title: 'string', description: 'string' }, path),\n ...list(value.fields, `${path}/fields`, 'a field object', field, true),\n ...conditions(value, path),\n ...list(value.routes, `${path}/routes`, 'a route object', route),\n ...['next', 'back', 'skip'].flatMap((name) => action(value[name], `${path}/${name}`)),\n];\n\nexport function shapeIssues(input: unknown): DefinitionIssue[] {\n if (!isEntry(input)) return [error('invalid-type', '', 'the form definition must be an object')];\n const format = formatIssues(input);\n if (format.length) return format;\n return [\n ...list(input.fields, '/fields', 'a field object', field),\n ...list(input.steps, '/steps', 'a step object', step),\n ...action(input.submit, '/submit'),\n ...action(input.cancel, '/cancel'),\n ];\n}\n\nexport function metaIssues(input: Entry): DefinitionIssue[] {\n return [\n ...text(input, 'id', ''),\n ...(isEntry(input.submit) ? [] : [error('missing-property', '/submit', 'the submit action is missing', 'Add \"submit\": { \"label\": \"Submit\" }')]),\n ];\n}\n","import type { FormStep, StepRoute } from '../types';\n\nconst conditional = (source: Pick<StepRoute, 'show' | 'showAny'>) => !!(source.show?.length || source.showAny?.length);\n\nfunction successors(steps: FormStep[], indexes: Map<string, number>, from: number): number[] {\n const next: number[] = [];\n for (const route of steps[from].routes ?? []) {\n const target = route.to === null ? null : indexes.get(route.to);\n if (target === null && !conditional(route)) return next;\n if (target === null || target === undefined || target <= from) continue;\n next.push(target);\n if (!conditional(route) && !conditional(steps[target])) return next;\n }\n return from + 1 < steps.length ? [...next, from + 1] : next;\n}\n\nexport function reachableSteps(steps: FormStep[]): Set<number>[] {\n const indexes = new Map(steps.map((step, index) => [step.id, index]));\n return steps.map((_, start) => {\n const seen = new Set<number>();\n const queue = successors(steps, indexes, start);\n while (queue.length) {\n const index = queue.pop()!;\n if (seen.has(index)) continue;\n seen.add(index);\n queue.push(...successors(steps, indexes, index));\n if (conditional(steps[index]) && index + 1 < steps.length) queue.push(index + 1);\n }\n return seen;\n });\n}\n","import type { CheckContext, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error, oneOf } from './issues';\nimport { reachableSteps } from './paths';\n\nconst RESERVED = new Set([...Object.getOwnPropertyNames(Object.prototype), 'prototype']);\n\nfunction stepIssues({ definition }: CheckContext): DefinitionIssue[] {\n const issues: DefinitionIssue[] = [];\n const steps = definition.steps ?? [];\n const seen = new Map<string, number>();\n steps.forEach((step, index) => {\n const first = seen.get(step.id);\n if (first === undefined) seen.set(step.id, index);\n else issues.push(error('duplicate-step-id', `/steps/${index}/id`, `step id \"${step.id}\" is already used by /steps/${first}`, 'Give each step a unique id'));\n });\n steps.forEach((step, index) => (step.routes ?? []).forEach((route, position) => {\n if (route.to === null) return;\n const target = seen.get(route.to);\n if (target !== undefined && target > index) return;\n const later = steps.slice(index + 1).map((candidate) => candidate.id);\n const problem = target === undefined ? `\"${route.to}\" is not a step id` : `\"${route.to}\" is not a later step`;\n const hint = later.length ? `${oneOf(later)}, or null to end the form here` : 'Use null to end the form here';\n issues.push(error('route-target', `/steps/${index}/routes/${position}/to`, problem, hint));\n }));\n return issues;\n}\n\nfunction keyIssues({ definition, entries }: CheckContext): DefinitionIssue[] {\n const issues: DefinitionIssue[] = [];\n const reachable = reachableSteps(definition.steps ?? []);\n const exclusive = (a: FieldEntry, b: FieldEntry) => a.step !== b.step && !reachable[a.step]?.has(b.step);\n entries.forEach((entry, index) => {\n const { field, path } = entry;\n const clash = entries.slice(0, index).find((other) => other.field.key === field.key && !exclusive(other, entry));\n if (RESERVED.has(field.key)) {\n issues.push(error('reserved-key', `${path}/key`, `\"${field.key}\" is a built-in object property name`, 'Rename the field key'));\n } else if (clash) {\n issues.push(error('duplicate-key', `${path}/key`, `key \"${field.key}\" is already used by ${clash.path} on the same path`, 'Rename one of the fields, or move them to route branches that never meet'));\n }\n });\n return issues;\n}\n\nexport function structureIssues(context: CheckContext): DefinitionIssue[] {\n const { definition } = context;\n const both = !!definition.fields?.length && !!definition.steps?.length;\n return [\n ...(both ? [error('fields-and-steps', '', 'the definition has both \"fields\" and \"steps\"', 'Move the top-level fields into a step, or remove \"steps\"')] : []),\n ...stepIssues(context),\n ...keyIssues(context),\n ];\n}\n","import type { FormField } from '../types';\nimport { BOOLEAN_TYPES, BUILT_IN_TYPES } from '../validation/type-checks';\nimport { conditionErrors, OPERATORS } from './conditions';\nimport type { CheckContext, ConditionEntry, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { closest, oneOf, suggest, warning } from './issues';\n\nconst LIST_OPERATORS = ['in', 'notIn'];\nconst COMPARISONS = ['gt', 'gte', 'lt', 'lte'];\nconst STRING_TYPES = ['text', 'email', 'phone', 'password', 'textarea', 'date', 'datetime', 'select', 'radio', 'autocomplete'];\n\nfunction expectedType(field: FormField): string | undefined {\n if (field.type === 'number') return 'number';\n if (BOOLEAN_TYPES.includes(field.type)) return 'boolean';\n return STRING_TYPES.includes(field.type) ? 'string' : undefined;\n}\n\nfunction valueIssue(target: FormField, operator: string, operand: unknown, path: string): DefinitionIssue[] {\n const mismatch = (problem: string, hint: string) => [warning('condition-value-mismatch', path, problem, hint)];\n if (operator === 'notEmpty') return [];\n if (COMPARISONS.includes(operator)) {\n if (target.type !== 'multiselect' && !BOOLEAN_TYPES.includes(target.type)) return [];\n return mismatch(`\"${target.key}\" is a ${target.type} field, so \"${operator}\" never matches it`, 'Compare a number, text, radio or select field');\n }\n if (target.type === 'multiselect') {\n const result = operator === 'neq' || operator === 'notIn' ? 'always' : 'never';\n return mismatch(`\"${target.key}\" holds a list of values, so \"${operator}\" ${result} matches it`, 'Use notEmpty, or a select or radio field');\n }\n const operands = LIST_OPERATORS.includes(operator) && Array.isArray(operand) ? operand : [operand];\n const expected = expectedType(target);\n const wrong = expected && operands.find((item) => typeof item !== expected);\n if (expected && wrong !== undefined) return mismatch(`${JSON.stringify(wrong)} is a ${typeof wrong}, but \"${target.key}\" holds a ${expected}`, `Use a ${expected} value`);\n const options = expected === 'string' && !target.optionsFrom && target.options?.length ? target.options.map((option) => option.value) : null;\n const missing = options && operands.find((item) => !options.includes(item as string));\n return options && missing !== undefined ? mismatch(`${JSON.stringify(missing)} is not an option of \"${target.key}\"`, oneOf(options)) : [];\n}\n\nfunction conditionWarnings(context: CheckContext, entry: ConditionEntry): DefinitionIssue[] {\n const { condition, path } = entry;\n if (conditionErrors(context, entry).length) return [];\n const operator = OPERATORS.find((key) => key in condition)!;\n return valueIssue(context.keys.get(condition.field)!.field, operator, condition[operator as keyof typeof condition], `${path}/${operator}`);\n}\n\nfunction optionIssues({ field, path }: FieldEntry): DefinitionIssue[] {\n if (!['select', 'radio', 'multiselect'].includes(field.type)) return [];\n if (!Array.isArray(field.options)) {\n return field.optionsFrom ? [] : [warning('missing-options', `${path}/options`, `the ${field.type} field \"${field.key}\" has no options`, 'Add \"options\" or \"optionsFrom\"')];\n }\n const values = field.options.map((option) => option.value);\n const defaults = field.type === 'multiselect' && Array.isArray(field.defaultValue) ? field.defaultValue : [field.defaultValue];\n const missing = field.defaultValue === undefined || !values.length || field.optionsFrom ? undefined : defaults.find((value) => !values.includes(value as string));\n if (missing === undefined) return [];\n return [warning('default-not-in-options', `${path}/defaultValue`, `${JSON.stringify(missing)} is not an option of \"${field.key}\"`, oneOf(values))];\n}\n\nfunction ruleWarnings(context: CheckContext, { field, path }: FieldEntry): DefinitionIssue[] {\n const rules = field.validation ?? {};\n const rule = (name: string, problem: string, hint: string) => warning('rule-not-applicable', `${path}/validation/${name}`, problem, hint);\n const known = BUILT_IN_TYPES.includes(field.type);\n const numeric = field.type === 'number';\n const ranges = known && !numeric ? (['min', 'max'] as const).filter((name) => rules[name] !== undefined) : [];\n const sized = known && ['number', 'checkbox', 'switch'].includes(field.type) ? (['minLength', 'maxLength'] as const).filter((name) => rules[name] !== undefined) : [];\n const issues = [\n ...ranges.map((name) => rule(name, `\"${name}\" applies to number fields only`, `Use ${name}Length to limit text length`)),\n ...sized.map((name) => rule(name, `\"${name}\" does not apply to ${field.type} fields`, numeric ? 'Use min and max for numbers' : `Remove ${name}`)),\n ];\n const { validators } = context;\n if (rules.validator !== undefined && validators && !Object.prototype.hasOwnProperty.call(validators, rules.validator)) {\n issues.push(warning('unknown-validator', `${path}/validation/validator`, `the validator \"${rules.validator}\" is not registered`, 'Pass it in the \"validators\" option'));\n }\n return issues;\n}\n\nfunction fieldWarnings(context: CheckContext, entry: FieldEntry): DefinitionIssue[] {\n const { field, path } = entry;\n const match = BUILT_IN_TYPES.includes(field.type) ? undefined : closest(field.type, BUILT_IN_TYPES);\n return [\n ...(match === undefined ? [] : [warning('unknown-field-type', `${path}/type`, `\"${field.type}\" is not a built-in field type`, `Use \"${match}\", or register a component for \"${field.type}\"`)]),\n ...optionIssues(entry),\n ...ruleWarnings(context, entry),\n ...(field.optionsDependsOn ?? []).flatMap((key, index) => (\n context.keys.has(key) ? [] : [warning('unknown-field', `${path}/optionsDependsOn/${index}`, `\"${key}\" is not a field key`, suggest(key, context.keyList))]\n )),\n ];\n}\n\nfunction routeWarnings({ definition }: CheckContext): DefinitionIssue[] {\n const steps = definition.steps ?? [];\n return steps.flatMap((step, index) => {\n const issues: DefinitionIssue[] = [];\n const targets = new Set((step.routes ?? []).map((route) => route.to).filter((to) => to !== null));\n for (const target of targets) {\n const position = steps.findIndex((candidate) => candidate.id === target);\n const sibling = steps[position + 1];\n const exits = steps[position]?.routes?.some((route) => !route.show?.length && !route.showAny?.length);\n if (!sibling || !targets.has(sibling.id) || exits) continue;\n issues.push(warning('route-fallthrough', `/steps/${position}`, `branch \"${target}\" from \"${step.id}\" continues into the sibling branch \"${sibling.id}\"`, `Add an unconditional route on \"${target}\" to the step where the branches meet`));\n }\n if (step.skip && (step.next === false || !steps[1])) {\n issues.push(warning('skip-unreachable', `/steps/${index}/skip`, `step \"${step.id}\" has \"skip\" but no Continue button or later step`, 'Remove \"skip\", or remove \"next\": false'));\n }\n return issues;\n });\n}\n\nexport function definitionWarnings(context: CheckContext): DefinitionIssue[] {\n return [\n ...(typeof context.definition.title === 'string' ? [] : [warning('missing-property', '/title', '\"title\" must be a string', 'Add a title for host UI and editors')]),\n ...context.conditions.flatMap((entry) => conditionWarnings(context, entry)),\n ...context.entries.flatMap((entry) => fieldWarnings(context, entry)),\n ...routeWarnings(context),\n ];\n}\n","import type { FormDefinition } from '../types';\nimport { conditionIssues } from './conditions';\nimport { createContext, type CheckContext } from './context';\nimport { fieldIssues } from './fields';\nimport { graphIssues } from './graph';\nimport { FormDefinitionError, suggest, type DefinitionIssue } from './issues';\nimport { metaIssues, shapeIssues } from './shape';\nimport { structureIssues } from './structure';\nimport { definitionWarnings } from './warnings';\n\nexport interface CheckDefinitionOptions {\n validators?: Record<string, unknown>;\n}\n\ninterface Checks {\n validators?: Record<string, unknown>;\n suggest?: CheckContext['suggest'];\n warnings?: (context: CheckContext) => DefinitionIssue[];\n}\n\nfunction issues(input: unknown, { validators, suggest, warnings }: Checks = {}): DefinitionIssue[] {\n const shape = shapeIssues(input);\n if (shape.length) return shape;\n const context = createContext(input as FormDefinition, validators, suggest);\n return [\n ...metaIssues(input as Record<string, unknown>),\n ...structureIssues(context),\n ...conditionIssues(context),\n ...fieldIssues(context),\n ...graphIssues(context),\n ...(warnings ? warnings(context) : []),\n ];\n}\n\nexport function definitionErrors(input: unknown): DefinitionIssue[] {\n return issues(input);\n}\n\nexport function checkDefinition(input: unknown, options: CheckDefinitionOptions = {}): DefinitionIssue[] {\n return issues(input, { validators: options.validators, suggest, warnings: definitionWarnings });\n}\n\nexport function parseDefinition(input: unknown, options?: CheckDefinitionOptions): FormDefinition {\n const errors = issues(input, { suggest });\n if (errors.length) throw new FormDefinitionError(errors);\n return input as FormDefinition;\n}\n","import { checkDefinition } from './check-definition';\n\nexport function validateDefinition(input: unknown): string[] {\n return checkDefinition(input).map((issue) => issue.message);\n}\n","export interface NotifyOptions {\n fieldKeys?: Iterable<string>;\n structureChanged?: boolean;\n}\n\ntype Listener = () => void;\n\nfunction listen(listeners: Set<Listener>, listener: Listener): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\nexport function createSubscriptions() {\n let version = 0;\n let structureVersion = 0;\n const listeners = new Set<Listener>();\n const structureListeners = new Set<Listener>();\n const fieldVersions = new Map<string, number>();\n const fieldListeners = new Map<string, Set<Listener>>();\n\n return {\n subscribe: (listener: Listener) => listen(listeners, listener),\n getSnapshot: () => version,\n subscribeStructure: (listener: Listener) => listen(structureListeners, listener),\n getStructureSnapshot: () => structureVersion,\n getFieldSnapshot: (key: string) => fieldVersions.get(key) ?? 0,\n\n subscribeField(key: string, listener: Listener): () => void {\n const set = fieldListeners.get(key) ?? new Set();\n set.add(listener);\n fieldListeners.set(key, set);\n return () => {\n set.delete(listener);\n if (set.size === 0) fieldListeners.delete(key);\n };\n },\n\n notify({ fieldKeys = [], structureChanged = false }: NotifyOptions = {}): void {\n for (const key of new Set(fieldKeys)) {\n fieldVersions.set(key, (fieldVersions.get(key) ?? 0) + 1);\n for (const listener of fieldListeners.get(key) ?? []) listener();\n }\n if (structureChanged) {\n structureVersion++;\n for (const listener of structureListeners) listener();\n }\n version++;\n for (const listener of listeners) listener();\n },\n };\n}\n","import { checkDefinition, FormDefinitionError, type DefinitionIssue } from '../definition-validation';\nimport { definitionErrors } from '../definition-validation/check-definition';\nimport { isError } from '../definition-validation/issues';\nimport type { FormDefinition } from '../types';\nimport type { FormEngineOptions } from './engine-options';\n\nfunction developmentIssues(definition: FormDefinition, validators: Record<string, unknown>): DefinitionIssue[] | undefined {\n try {\n if (process.env.NODE_ENV !== 'production') return checkDefinition(definition, { validators });\n } catch (error) {\n if (!(error instanceof ReferenceError)) throw error;\n }\n return undefined;\n}\n\nexport function assertDefinition(definition: FormDefinition, options: FormEngineOptions, validators: Record<string, unknown>): void {\n const issues = developmentIssues(definition, validators) ?? definitionErrors(definition);\n const errors = issues.filter(isError);\n if (errors.length) throw new FormDefinitionError(errors);\n const warn = options.onWarning ?? ((issue: DefinitionIssue) => console.warn(`[formhaus] ${issue.message}`));\n for (const issue of issues) warn(issue);\n}\n","import type { FormField, FormStep } from '../types';\nimport { conditionFields } from './engine-utils';\n\nexport function indexConditions<T extends FormField | FormStep>(dependent: T, index: Map<string, Set<T>>): void {\n for (const field of conditionFields(dependent)) {\n const dependents = index.get(field) ?? new Set<T>();\n dependents.add(dependent);\n index.set(field, dependents);\n }\n}\n","import { conditionFields, getAllFields } from './engine-utils';\nimport { indexConditions } from './visibility-index';\nimport { createActivePath } from './step-routes';\nimport type { ValidatorFn } from '../validation';\nimport { validateStep } from '../validation';\nimport type { FormDefinition, FormField, FormStep } from '../types';\nimport { isVisible } from '../visibility';\n\ninterface VisibilityCache {\n visibleSteps: FormStep[];\n currentStep: FormStep | null;\n visibleFields: FormField[];\n canGoNext: boolean;\n}\n\ntype Values = Record<string, unknown>;\n\nexport type VisibilityState = ReturnType<typeof createVisibility>;\n\nexport function createVisibility(definition: FormDefinition) {\n const allFields = getAllFields(definition);\n const fieldsByKey = new Map<string, FormField[]>();\n const routeFields = new Set<string>();\n const path = createActivePath(definition);\n const fieldDependents = new Map<string, Set<FormField>>();\n const stepDependents = new Map<string, Set<FormStep>>();\n const stepOfField = new Map<FormField, FormStep>();\n let visibilityDirty = true;\n let canGoNextDirty = true;\n const cache: VisibilityCache = { visibleSteps: [], currentStep: null, visibleFields: [], canGoNext: false };\n\n for (const field of allFields) {\n fieldsByKey.set(field.key, [...(fieldsByKey.get(field.key) ?? []), field]);\n indexConditions(field, fieldDependents);\n }\n for (const step of definition.steps ?? []) {\n for (const field of step.fields) stepOfField.set(field, step);\n indexConditions(step, stepDependents);\n for (const route of step.routes ?? []) for (const key of conditionFields(route)) routeFields.add(key);\n }\n\n const isMultiStep = () => (definition.steps ?? []).length > 0;\n const visible = (source: FormField | FormStep, values: Values) => isVisible(source, path.values(values));\n const onPath = (field: FormField, values: Values) => {\n const step = stepOfField.get(field);\n return !step || path.steps(values).includes(step);\n };\n\n function state(values: Values, stepIndex: number): VisibilityCache {\n if (!visibilityDirty) return cache;\n visibilityDirty = false;\n if (!isMultiStep()) {\n cache.visibleSteps = [];\n cache.currentStep = null;\n cache.visibleFields = (definition.fields ?? []).filter((field) => visible(field, values));\n return cache;\n }\n const steps = cache.visibleSteps = path.steps(values);\n const current = cache.currentStep = steps[stepIndex] ?? steps[steps.length - 1] ?? null;\n cache.visibleFields = current ? current.fields.filter((field) => visible(field, values)) : [];\n return cache;\n }\n\n return {\n allFields,\n conditionValues: path.values,\n state,\n\n markChanged(structureChanged: boolean, valuesChanged: boolean): void {\n if (structureChanged || valuesChanged) path.invalidate();\n if (structureChanged) visibilityDirty = true;\n if (structureChanged || valuesChanged) canGoNextDirty = true;\n },\n\n getCanGoNext(values: Values, stepIndex: number, validators: Record<string, ValidatorFn>): boolean {\n const step = state(values, stepIndex).currentStep;\n if (!canGoNextDirty) return cache.canGoNext;\n canGoNextDirty = false;\n const errors = step ? validateStep(step, path.values(values), validators) : {};\n return cache.canGoNext = isMultiStep() && Object.keys(errors).length === 0;\n },\n\n findStepIndex(fieldKey: string, values: Values, stepIndex: number): number | null {\n const target = state(values, stepIndex).visibleSteps.findIndex((step) => step.fields.some((field) => field.key === fieldKey));\n return target === -1 ? null : target;\n },\n\n affectsStructure(key: string, clearedFields: Set<string>): boolean {\n return routeFields.has(key) || fieldDependents.has(key) || stepDependents.has(key) || clearedFields.size > 0;\n },\n\n activeField(key: string, values: Values): FormField | undefined {\n return fieldsByKey.get(key)?.find((field) => onPath(field, values) && visible(field, values));\n },\n\n reconcileHidden(values: Values, errors: Record<string, string>): Set<string> {\n path.invalidate();\n const queue = [...new Set([...fieldDependents.keys(), ...stepDependents.keys()])];\n const queued = new Set(queue);\n const cleared = new Set<string>();\n const held = (key: string) => values[key] !== undefined || errors[key] !== undefined;\n const clear = (key: string) => {\n delete values[key];\n delete errors[key];\n path.invalidate();\n cleared.add(key);\n if (queued.has(key)) return;\n queued.add(key);\n queue.push(key);\n };\n for (let index = 0; index < queue.length; index++) {\n const key = queue[index];\n queued.delete(key);\n for (const field of fieldDependents.get(key) ?? []) {\n if (onPath(field, values) && !visible(field, values) && held(field.key)) clear(field.key);\n }\n for (const step of stepDependents.get(key) ?? []) {\n if (!visible(step, values)) for (const field of step.fields) if (held(field.key)) clear(field.key);\n }\n }\n return cleared;\n },\n };\n}\n","import type { ValidatorFn } from '../validation';\nimport type { FormDefinition, FormField, FormStep } from '../types';\nimport type { FormEngineOptions, StepValidateFn, SubmitFn } from './engine-options';\nimport { createValues } from './engine-utils';\nimport { changeStep, goToStepWithField, skipStep } from './navigation';\nimport type { EngineInternals, EngineState, RuntimeNotifyOptions } from './runtime-internals';\nimport { createSubscriptions, type NotifyOptions } from './subscriptions';\nimport {\n applyValidationErrors,\n getSubmitValues,\n resetEngine,\n validateForm,\n validateOne,\n clearResolvedMatchErrors,\n pruneOffPathErrors,\n} from './validation-state';\nimport { submitForm } from './submission';\nimport { reconcileStepIndex } from './step-routes';\nimport { assertDefinition } from './warnings';\nimport { createVisibility, type VisibilityState } from './visibility-state';\n\nexport class FormEngine<TValues extends object = Record<string, unknown>> {\n private readonly state: EngineState;\n private readonly skipped = new Map<string, string[]>();\n private validationEpoch = 0;\n private operationEpoch = 0;\n private readonly lifecycle: FormEngineOptions;\n\n private readonly validators: Record<string, ValidatorFn>;\n private get onStepValidate(): StepValidateFn | undefined { return this.lifecycle.onStepValidate; }\n private readonly visibility: VisibilityState;\n private readonly subscriptions = createSubscriptions();\n\n constructor(\n readonly definition: FormDefinition,\n initialValues?: Partial<NoInfer<TValues>>,\n options?: FormEngineOptions,\n ) {\n this.lifecycle = options ?? {};\n this.validators = options?.validators ?? {};\n assertDefinition(definition, this.lifecycle, this.validators);\n this.visibility = createVisibility(definition);\n const values = createValues(this.visibility.allFields, initialValues as Record<string, unknown> | undefined);\n this.state = { values, errors: {}, topLevelErrors: [], currentStepIndex: 0, fieldLoading: {}, stepValidating: false, submitting: false };\n this.visibility.reconcileHidden(values, this.state.errors);\n }\n\n get values(): Readonly<Partial<TValues>> { return this.state.values as Partial<TValues>; }\n get errors(): Readonly<Record<string, string>> { return this.state.errors; }\n get topLevelErrors(): readonly string[] { return this.state.topLevelErrors; }\n get currentStepIndex(): number { return this.state.currentStepIndex; }\n get fieldLoading(): Readonly<Record<string, boolean>> { return this.state.fieldLoading; }\n get stepValidating(): boolean { return this.state.stepValidating; }\n get submitting(): boolean { return this.state.submitting; }\n\n get isMultiStep(): boolean {\n return (this.definition.steps ?? []).length > 0;\n }\n\n get visibleSteps(): FormStep[] {\n return this.view.visibleSteps;\n }\n\n get currentStep(): FormStep | null {\n return this.view.currentStep;\n }\n\n get visibleFields(): FormField[] {\n return this.view.visibleFields;\n }\n\n get isFirstStep(): boolean {\n return this.currentStepIndex === 0;\n }\n\n get isLastStep(): boolean {\n return this.currentStepIndex >= this.visibleSteps.length - 1;\n }\n\n get canGoNext(): boolean {\n return this.visibility.getCanGoNext(this.state.values, this.currentStepIndex, this.validators);\n }\n\n get progress(): { current: number; total: number } {\n const total = this.visibleSteps.length;\n return { current: Math.min(this.currentStepIndex + 1, total), total };\n }\n\n subscribe(listener: () => void): () => void {\n return this.subscriptions.subscribe(listener);\n }\n\n getSnapshot(): number {\n return this.subscriptions.getSnapshot();\n }\n\n subscribeField(key: string, listener: () => void): () => void {\n return this.subscriptions.subscribeField(key, listener);\n }\n\n getFieldSnapshot(key: string): number {\n return this.subscriptions.getFieldSnapshot(key);\n }\n\n subscribeStructure(listener: () => void): () => void {\n return this.subscriptions.subscribeStructure(listener);\n }\n\n getStructureSnapshot(): number {\n return this.subscriptions.getStructureSnapshot();\n }\n\n setValue(key: string, value: unknown): void {\n const { values, errors } = this.state;\n const previousSteps = this.isMultiStep ? this.visibleSteps : null;\n const valueChanged = !Object.is(values[key], value);\n const hadError = errors[key] !== undefined;\n values[key] = value;\n delete errors[key];\n for (const [stepId, keys] of this.skipped) if (valueChanged && keys.includes(key)) this.skipped.delete(stepId);\n const clearedFields = this.visibility.reconcileHidden(values, errors);\n const revalidated = clearResolvedMatchErrors(this.internals, key);\n const changedFields = new Set([...clearedFields, ...revalidated]);\n if (valueChanged || hadError) changedFields.add(key);\n const valuesChanged = valueChanged || clearedFields.size > 0;\n const structureChanged = valuesChanged && this.visibility.affectsStructure(key, clearedFields);\n if (previousSteps && structureChanged) {\n this.visibility.markChanged(true, true);\n this.state.currentStepIndex = reconcileStepIndex(previousSteps, this.visibleSteps, this.currentStepIndex);\n for (const pruned of pruneOffPathErrors(this.internals)) changedFields.add(pruned);\n }\n this.notify({ fieldKeys: changedFields, structureChanged, valuesChanged });\n }\n\n setErrors(errors: Record<string, string>): void {\n applyValidationErrors(this.internals, errors, true);\n }\n\n setFieldLoading(key: string, loading: boolean): void {\n const previous = this.state.fieldLoading[key] === true;\n if (loading) this.state.fieldLoading[key] = true;\n else delete this.state.fieldLoading[key];\n this.notify({ fieldKeys: previous === loading ? [] : [key] });\n }\n\n cancelPendingActions(): void {\n this.validationEpoch++;\n this.operationEpoch++;\n this.state.stepValidating = false;\n this.state.submitting = false;\n this.notify();\n }\n\n next(): Promise<boolean> { return changeStep(this.internals, 'next'); }\n back(): Promise<boolean> { return changeStep(this.internals, 'back'); }\n skip(submit?: SubmitFn): Promise<boolean> { return skipStep(this.internals, submit); }\n submit(handler: SubmitFn): Promise<boolean> { return submitForm(this.internals, handler); }\n isStepSkipped(stepId: string): boolean { return this.skipped.has(stepId); }\n validate(): Record<string, string> { return validateForm(this.internals); }\n validateField(key: string): string | null { return validateOne(this.internals, key); }\n getSubmitValues(): Partial<TValues> { return getSubmitValues(this.internals) as Partial<TValues>; }\n goToStepWithField(key: string): void { goToStepWithField(this.internals, key); }\n reset(values?: Record<string, unknown>): void { resetEngine(this.internals, values); }\n\n private get view() {\n return this.visibility.state(this.state.values, this.currentStepIndex);\n }\n\n private get internals(): EngineInternals {\n return this as unknown as EngineInternals;\n }\n\n private notify(options: RuntimeNotifyOptions = {}): void {\n this.visibility.markChanged(!!options.structureChanged, !!options.valuesChanged);\n this.subscriptions.notify(options);\n }\n}\n"]}
package/dist/cloud.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { C as CloudAction } from './controller-CUZ5bMpv.js';
2
- export { a as CloudClientOptions, b as CloudNotice, c as CloudSettings, d as CloudSubmission, e as CloudSubmitterOptions, D as DraftStorage, f as DraftStore, P as PublishedForm, g as createSubmitter, h as fetchDefinition, i as fetchForm, s as sessionDraftStore } from './controller-CUZ5bMpv.js';
3
- import './definition-Bufih_Bx.js';
1
+ import { C as CloudAction } from './controller-DXb698eH.js';
2
+ export { a as CloudClientOptions, b as CloudNotice, c as CloudSettings, d as CloudSubmission, e as CloudSubmitterOptions, D as DraftStorage, f as DraftStore, P as PublishedForm, g as createSubmitter, h as fetchDefinition, i as fetchForm, s as sessionDraftStore } from './controller-DXb698eH.js';
3
+ import './definition-PdtKhxBh.js';
4
4
 
5
5
  declare class CloudError extends Error {
6
6
  readonly status: number;
package/dist/cloud.js CHANGED
@@ -1,2 +1,2 @@
1
- export{d as CloudError,i as createSubmitter,h as fetchDefinition,g as fetchForm,k as sessionDraftStore}from'./chunk-IVSO5ANU.js';//# sourceMappingURL=cloud.js.map
1
+ export{d as CloudError,i as createSubmitter,h as fetchDefinition,g as fetchForm,k as sessionDraftStore}from'./chunk-HRT3TFHT.js';//# sourceMappingURL=cloud.js.map
2
2
  //# sourceMappingURL=cloud.js.map
@@ -1,4 +1,4 @@
1
- import { f as FormDefinition } from './definition-Bufih_Bx.js';
1
+ import { f as FormDefinition } from './definition-PdtKhxBh.js';
2
2
 
3
3
  type CloudAction = 'retry' | 'reload' | null;
4
4
 
@@ -61,6 +61,7 @@ interface FormAction {
61
61
 
62
62
  interface FormDefinition {
63
63
  $schema?: string;
64
+ formatVersion?: string;
64
65
  id: string;
65
66
  title: string;
66
67
  description?: string;
@@ -87,4 +88,4 @@ interface FormStep {
87
88
  skip?: FormAction;
88
89
  }
89
90
 
90
- export type { DefaultFieldType as D, FormField as F, ShowCondition as S, FormStep as a, FieldOption as b, FieldType as c, FieldValidation as d, FormAction as e, FormDefinition as f, StepRoute as g };
91
+ export type { DefaultFieldType as D, FormField as F, ShowCondition as S, FormStep as a, FormAction as b, FieldOption as c, FieldType as d, FieldValidation as e, FormDefinition as f, StepRoute as g };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { F as FormField, a as FormStep, S as ShowCondition } from './definition-Bufih_Bx.js';
2
- export { D as DefaultFieldType, b as FieldOption, c as FieldType, d as FieldValidation, e as FormAction, f as FormDefinition, g as StepRoute } from './definition-Bufih_Bx.js';
3
- export { A as AfterStepChangeFn, B as BeforeStepChangeFn, a as BeforeSubmitFn, F as FormEngine, b as FormEngineOptions, S as StepChangeContext, c as StepValidateFn, d as SubmitFn } from './runtime-LNJU0Dra.js';
4
- import { V as ValidatorFn } from './validate-field-glVVoN3E.js';
5
- export { D as DefinitionIssue, a as DefinitionIssueCode, F as FormDefinitionError, v as validateFieldValue } from './validate-field-glVVoN3E.js';
6
- export { C as CheckDefinitionOptions, c as checkDefinition, p as parseDefinition } from './check-definition-BTMV3Ziq.js';
1
+ import { F as FormField, a as FormStep, S as ShowCondition, b as FormAction } from './definition-PdtKhxBh.js';
2
+ export { D as DefaultFieldType, c as FieldOption, d as FieldType, e as FieldValidation, f as FormDefinition, g as StepRoute } from './definition-PdtKhxBh.js';
3
+ export { A as AfterStepChangeFn, B as BeforeStepChangeFn, a as BeforeSubmitFn, F as FormEngine, b as FormEngineOptions, S as StepChangeContext, c as StepValidateFn, d as SubmitFn } from './runtime-Bmzuud3o.js';
4
+ import { V as ValidatorFn } from './validate-field-dZd5yZAp.js';
5
+ export { D as DefinitionIssue, a as DefinitionIssueCode, F as FormDefinitionError, v as validateFieldValue } from './validate-field-dZd5yZAp.js';
6
+ export { C as CheckDefinitionOptions, c as checkDefinition, p as parseDefinition } from './check-definition-B-YU_XN6.js';
7
7
 
8
8
  type FormAnalyticsEvent = {
9
9
  type: 'step_viewed';
@@ -33,6 +33,8 @@ type FormAnalyticsEvent = {
33
33
 
34
34
  declare function validateDefinition(input: unknown): string[];
35
35
 
36
+ declare const FORMAT_VERSION = "1.0";
37
+
36
38
  type ValidationRule = 'required' | 'minLength' | 'maxLength' | 'min' | 'max' | 'pattern' | 'matchField';
37
39
  declare function getDefaultMessage(rule: ValidationRule, params?: Record<string, unknown>): string;
38
40
 
@@ -43,6 +45,8 @@ declare function evaluateCondition(condition: ShowCondition, values: Record<stri
43
45
 
44
46
  declare function isVisible(field: Pick<FormField, 'show' | 'showAny'>, values: Record<string, unknown>): boolean;
45
47
 
48
+ declare function isActionDisabled(action: FormAction | false | undefined, values: Record<string, unknown>): boolean;
49
+
46
50
  declare class FormLifecycleError extends Error {
47
51
  readonly phase: 'afterStepChange' | 'afterSubmit';
48
52
  readonly committed = true;
@@ -50,4 +54,4 @@ declare class FormLifecycleError extends Error {
50
54
  constructor(phase: 'afterStepChange' | 'afterSubmit', cause: unknown);
51
55
  }
52
56
 
53
- export { type FormAnalyticsEvent, FormField, FormLifecycleError, FormStep, ShowCondition, type ValidationRule, ValidatorFn, evaluateCondition, getDefaultMessage, isVisible, validateDefinition, validateFields, validateStep };
57
+ export { FORMAT_VERSION, FormAction, type FormAnalyticsEvent, FormField, FormLifecycleError, FormStep, ShowCondition, type ValidationRule, ValidatorFn, evaluateCondition, getDefaultMessage, isActionDisabled, isVisible, validateDefinition, validateFields, validateStep };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{a as FormDefinitionError,e as FormEngine,b as checkDefinition,c as parseDefinition,d as validateDefinition}from'./chunk-47C7QX7J.js';export{d as FormLifecycleError,g as evaluateCondition,e as getDefaultMessage,h as isVisible,m as validateFieldValue,o as validateFields,n as validateStep}from'./chunk-YXQFFAXK.js';//# sourceMappingURL=index.js.map
1
+ export{b as FORMAT_VERSION,a as FormDefinitionError,g as FormEngine,c as checkDefinition,d as parseDefinition,e as validateDefinition}from'./chunk-PNVVU36P.js';export{d as FormLifecycleError,g as evaluateCondition,e as getDefaultMessage,i as isActionDisabled,h as isVisible,n as validateFieldValue,p as validateFields,o as validateStep}from'./chunk-LK2GLVPK.js';//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
- export { j as CloudCallbacks, k as CloudControllerOptions, l as CloudState, m as cloudStateFor, n as createCloudController, o as initialCloudState } from './controller-CUZ5bMpv.js';
2
- import { F as FormEngine } from './runtime-LNJU0Dra.js';
3
- import './definition-Bufih_Bx.js';
4
- import './validate-field-glVVoN3E.js';
1
+ export { j as CloudCallbacks, k as CloudControllerOptions, l as CloudState, m as cloudStateFor, n as createCloudController, o as initialCloudState } from './controller-DXb698eH.js';
2
+ import { F as FormEngine } from './runtime-Bmzuud3o.js';
3
+ import './definition-PdtKhxBh.js';
4
+ import './validate-field-dZd5yZAp.js';
5
5
 
6
6
  interface Searchable {
7
7
  querySelector(selector: string): unknown;
package/dist/internal.js CHANGED
@@ -1,2 +1,2 @@
1
- import {f,i,j,g,d,e,a,c,b as b$1}from'./chunk-IVSO5ANU.js';import {B as B$1}from'./chunk-YXQFFAXK.js';var G={multiselect:"list",checkbox:"flag",switch:"flag",number:"number",file:"file"};function y(e){return [...e.fields??[],...(e.steps??[]).flatMap(n=>n.fields)]}function h(e){return G[e.type]??"text"}function L(e,n){if(!Array.isArray(e.options))return true;let r=new Set(e.options.map(i=>String(i.value)));return (Array.isArray(n)?n:[n]).every(i=>r.has(String(i)))}function $(e,n,r){if(e&&h(e)!==h(n))return false;switch(h(n)){case "list":return Array.isArray(r);case "flag":return typeof r=="boolean";case "number":return typeof r=="number";case "text":return typeof r=="string";default:return e!==void 0}}function O(e,n,r){let i=new Map(r?y(r).map(o=>[o.key,o]):[]),a={};for(let o of y(n)){let u=e[o.key];u!=null&&$(i.get(o.key),o,u)&&L(o,u)&&(a[o.key]=u);}return a}function P(e,n){let r=new Set(y(e).map(o=>o.key)),i={},a=new Set;for(let[o,u]of Object.entries(n))r.has(o)?i[o]=u:a.add(u);return {fields:i,other:[...a]}}function V(e,n,r,i){let a={};for(let o of y(e)){let u=n[o.key]!==void 0&&n[o.key]!==null&&n[o.key]!=="";u&&!(o.key in r)?a[o.key]=b$1:i[o.key]&&(!u||o.key in r)&&(a[o.key]=i[o.key]);}return a}var b={definition:null,version:null,settings:{},loadError:null,errors:{},notice:null,initialValues:null,revision:0,attempt:0,done:false};function N(e){return e?{...b,definition:e.definition,version:e.version??null,settings:f(e.settings)}:b}function T(e,n=[]){return {tone:"error",message:e.message,action:e.action,details:n}}function z(e$1,n){let r=new AbortController,i$1,a$1=t=>{i$1??(i$1=t.renderToken);let c=i$1===t.renderToken?void 0:i$1;return i({...e$1,version:t.version,renderToken:t.renderToken,firstRenderToken:c})},o=i(e$1),u=e$1.initialForm,m=()=>!r.signal.aborted,s=b,f$1=t=>{s={...s,...t},n.onChange(s);},p=t=>f$1({...t,attempt:s.attempt+1});function w(t){o=a$1(t);let c=e$1.draftStore?.load(e$1.id,t.version)??null;f$1({...N(t),revision:s.revision,attempt:s.attempt,initialValues:c});}async function j$1(t,c$1){let l=s.definition;try{let d$1=await g(e$1,r.signal,t.version);if(!m())return;if(d$1.version===void 0||d$1.version<(t.version??0))throw new d(409,"form_updated");let g$1=l?O(c$1,d$1.definition,l):{};o=a$1(d$1),p({definition:d$1.definition,version:d$1.version,settings:f(d$1.settings),initialValues:g$1,revision:s.revision+1,errors:V(d$1.definition,c$1,g$1,t.errors??{}),notice:{tone:"info",message:a,action:null,details:[]}});}catch{m()&&p({notice:{tone:"error",...c(409,"form_updated"),details:[]}});}}async function q(t,c){let l=t instanceof d?t:e(t);if(l.code==="form_updated"&&l.version!==void 0)return j$1(l,c);if(l.status!==422)return p({notice:T(l)});let d$1=l.errors??{},g=s.definition?P(s.definition,d$1):{fields:d$1,other:[]};p({errors:g.fields,notice:g.other.length>0?T(l,g.other):null});}return {start(){if(s.loadError&&f$1({loadError:null}),u){w(u),u=void 0;return}g(e$1,r.signal).then(t=>{m()&&w(t);},t=>{m()&&(f$1({loadError:t}),n.onError?.(t));});},dispose(){r.abort();},saveDraft(t){s.definition&&!s.done&&e$1.draftStore?.save(e$1.id,s.version??void 0,j(s.definition,t));},again(){f$1({done:false,errors:{},notice:null,initialValues:null,revision:s.revision+1});},async submit(t,c){s.notice&&f$1({notice:null});try{let l=await o(t,c);if(!m())return;e$1.draftStore?.clear(e$1.id),f$1({done:!0}),n.onSuccess?.(l);}catch(l){throw m()&&(await q(l,t),n.onError?.(l)),l}}}}var _='input:not([type="hidden"]):not(:disabled), select:not(:disabled), textarea:not(:disabled), button:not(:disabled)';function I(e,n){n.scrollIntoView?.({block:"center"}),e.focus({preventScroll:true});}function B(e,n){if(n)return I(n,n);let r=e?.querySelector('[aria-invalid="true"]');r&&I(r.matches(_)?r:r.querySelector(_)??r,r);}function H(e,n){let r=Object.keys(n);return r.length===Object.keys(e).length&&r.every(i=>e[i]===n[i])}function U(e,n){return Object.entries(n).every(([r,i])=>e.errors[r]===i||e.topLevelErrors.includes(i))}function W(e,n,r){return !n||!H(n,r)||!U(e,r)}function se(e){return B$1(e,"next","autoAdvance")}var M=e=>e.replace(/[^A-Za-z0-9_-]/g,"-");function le(e,n){return `${e?M(e):"fh"}-${M(n)}`}export{se as autoAdvance,N as cloudStateFor,z as createCloudController,le as fieldDomId,B as focusProblem,b as initialCloudState,W as shouldApplyExternalErrors};//# sourceMappingURL=internal.js.map
1
+ import {f,i,j,g,d,e,a,c,b as b$1}from'./chunk-HRT3TFHT.js';import {C}from'./chunk-LK2GLVPK.js';var G={multiselect:"list",checkbox:"flag",switch:"flag",number:"number",file:"file"};function y(e){return [...e.fields??[],...(e.steps??[]).flatMap(n=>n.fields)]}function h(e){return G[e.type]??"text"}function L(e,n){if(!Array.isArray(e.options))return true;let r=new Set(e.options.map(i=>String(i.value)));return (Array.isArray(n)?n:[n]).every(i=>r.has(String(i)))}function $(e,n,r){if(e&&h(e)!==h(n))return false;switch(h(n)){case "list":return Array.isArray(r);case "flag":return typeof r=="boolean";case "number":return typeof r=="number";case "text":return typeof r=="string";default:return e!==void 0}}function O(e,n,r){let i=new Map(r?y(r).map(o=>[o.key,o]):[]),a={};for(let o of y(n)){let u=e[o.key];u!=null&&$(i.get(o.key),o,u)&&L(o,u)&&(a[o.key]=u);}return a}function P(e,n){let r=new Set(y(e).map(o=>o.key)),i={},a=new Set;for(let[o,u]of Object.entries(n))r.has(o)?i[o]=u:a.add(u);return {fields:i,other:[...a]}}function V(e,n,r,i){let a={};for(let o of y(e)){let u=n[o.key]!==void 0&&n[o.key]!==null&&n[o.key]!=="";u&&!(o.key in r)?a[o.key]=b$1:i[o.key]&&(!u||o.key in r)&&(a[o.key]=i[o.key]);}return a}var b={definition:null,version:null,settings:{},loadError:null,errors:{},notice:null,initialValues:null,revision:0,attempt:0,done:false};function N(e){return e?{...b,definition:e.definition,version:e.version??null,settings:f(e.settings)}:b}function T(e,n=[]){return {tone:"error",message:e.message,action:e.action,details:n}}function z(e$1,n){let r=new AbortController,i$1,a$1=t=>{i$1??(i$1=t.renderToken);let c=i$1===t.renderToken?void 0:i$1;return i({...e$1,version:t.version,renderToken:t.renderToken,firstRenderToken:c})},o=i(e$1),u=e$1.initialForm,m=()=>!r.signal.aborted,s=b,f$1=t=>{s={...s,...t},n.onChange(s);},p=t=>f$1({...t,attempt:s.attempt+1});function w(t){o=a$1(t);let c=e$1.draftStore?.load(e$1.id,t.version)??null;f$1({...N(t),revision:s.revision,attempt:s.attempt,initialValues:c});}async function j$1(t,c$1){let l=s.definition;try{let d$1=await g(e$1,r.signal,t.version);if(!m())return;if(d$1.version===void 0||d$1.version<(t.version??0))throw new d(409,"form_updated");let g$1=l?O(c$1,d$1.definition,l):{};o=a$1(d$1),p({definition:d$1.definition,version:d$1.version,settings:f(d$1.settings),initialValues:g$1,revision:s.revision+1,errors:V(d$1.definition,c$1,g$1,t.errors??{}),notice:{tone:"info",message:a,action:null,details:[]}});}catch{m()&&p({notice:{tone:"error",...c(409,"form_updated"),details:[]}});}}async function q(t,c){let l=t instanceof d?t:e(t);if(l.code==="form_updated"&&l.version!==void 0)return j$1(l,c);if(l.status!==422)return p({notice:T(l)});let d$1=l.errors??{},g=s.definition?P(s.definition,d$1):{fields:d$1,other:[]};p({errors:g.fields,notice:g.other.length>0?T(l,g.other):null});}return {start(){if(s.loadError&&f$1({loadError:null}),u){w(u),u=void 0;return}g(e$1,r.signal).then(t=>{m()&&w(t);},t=>{m()&&(f$1({loadError:t}),n.onError?.(t));});},dispose(){r.abort();},saveDraft(t){s.definition&&!s.done&&e$1.draftStore?.save(e$1.id,s.version??void 0,j(s.definition,t));},again(){f$1({done:false,errors:{},notice:null,initialValues:null,revision:s.revision+1});},async submit(t,c){s.notice&&f$1({notice:null});try{let l=await o(t,c);if(!m())return;e$1.draftStore?.clear(e$1.id),f$1({done:!0}),n.onSuccess?.(l);}catch(l){throw m()&&(await q(l,t),n.onError?.(l)),l}}}}var _='input:not([type="hidden"]):not(:disabled), select:not(:disabled), textarea:not(:disabled), button:not(:disabled)';function I(e,n){n.scrollIntoView?.({block:"center"}),e.focus({preventScroll:true});}function B(e,n){if(n)return I(n,n);let r=e?.querySelector('[aria-invalid="true"]');r&&I(r.matches(_)?r:r.querySelector(_)??r,r);}function H(e,n){let r=Object.keys(n);return r.length===Object.keys(e).length&&r.every(i=>e[i]===n[i])}function U(e,n){return Object.entries(n).every(([r,i])=>e.errors[r]===i||e.topLevelErrors.includes(i))}function W(e,n,r){return !n||!H(n,r)||!U(e,r)}function se(e){return C(e,"next","autoAdvance")}var M=e=>e.replace(/[^A-Za-z0-9_-]/g,"-");function le(e,n){return `${e?M(e):"fh"}-${M(n)}`}export{se as autoAdvance,N as cloudStateFor,z as createCloudController,le as fieldDomId,B as focusProblem,b as initialCloudState,W as shouldApplyExternalErrors};//# sourceMappingURL=internal.js.map
2
2
  //# sourceMappingURL=internal.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cloud/carry.ts","../src/cloud/controller.ts","../src/cloud/focus.ts","../src/engine/external-errors.ts","../src/internal/index.ts"],"names":["SHAPES","fieldsOf","definition","step","shapeOf","field","allowed","value","options","option","item","fits","previous","next","carryValues","values","before","kept","splitErrors","errors","known","fields","other","key","message","updatedErrors","sent","rejected","answered","ANSWER_AGAIN","initialCloudState","cloudStateFor","form","parseSettings","errorNotice","error","details","createCloudController","callbacks","controller","firstRenderToken","submitterFor","first","createSubmitter","submitter","initial","alive","state","update","patch","report","show","draft","refresh","fetchForm","CloudError","FORM_UPDATED_MESSAGE","failureFor","fail","cloud","networkError","split","draftValues","skippedSteps","submission","CONTROLS","reveal","target","scrollTo","focusProblem","root","notice","invalid","sameErrors","keys","holdsErrors","engine","shouldApplyExternalErrors","autoAdvance","changeStep","clean","fieldDomId","formId"],"mappings":"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","file":"internal.js","sourcesContent":["import type { FormDefinition, FormField } from '../types';\nimport { ANSWER_AGAIN } from './failures';\n\nconst SHAPES: Record<string, string> = {\n multiselect: 'list',\n checkbox: 'flag',\n switch: 'flag',\n number: 'number',\n file: 'file',\n};\n\nfunction fieldsOf(definition: FormDefinition): FormField[] {\n return [...(definition.fields ?? []), ...(definition.steps ?? []).flatMap((step) => step.fields)];\n}\n\nfunction shapeOf(field: FormField): string {\n return SHAPES[field.type] ?? 'text';\n}\n\nfunction allowed(field: FormField, value: unknown): boolean {\n if (!Array.isArray(field.options)) return true;\n const options = new Set(field.options.map((option) => String(option.value)));\n return (Array.isArray(value) ? value : [value]).every((item) => options.has(String(item)));\n}\n\nfunction fits(previous: FormField | undefined, next: FormField, value: unknown): boolean {\n if (previous && shapeOf(previous) !== shapeOf(next)) return false;\n switch (shapeOf(next)) {\n case 'list': return Array.isArray(value);\n case 'flag': return typeof value === 'boolean';\n case 'number': return typeof value === 'number';\n case 'text': return typeof value === 'string';\n default: return previous !== undefined;\n }\n}\n\nexport function carryValues(\n values: Record<string, unknown>,\n next: FormDefinition,\n previous?: FormDefinition,\n): Record<string, unknown> {\n const before = new Map(previous ? fieldsOf(previous).map((field) => [field.key, field]) : []);\n const kept: Record<string, unknown> = {};\n for (const field of fieldsOf(next)) {\n const value = values[field.key];\n if (value === undefined || value === null) continue;\n if (fits(before.get(field.key), field, value) && allowed(field, value)) kept[field.key] = value;\n }\n return kept;\n}\n\nexport function splitErrors(definition: FormDefinition, errors: Record<string, string>) {\n const known = new Set(fieldsOf(definition).map((field) => field.key));\n const fields: Record<string, string> = {};\n const other = new Set<string>();\n for (const [key, message] of Object.entries(errors)) {\n if (known.has(key)) fields[key] = message;\n else other.add(message);\n }\n return { fields, other: [...other] };\n}\n\nexport function updatedErrors(\n next: FormDefinition,\n sent: Record<string, unknown>,\n kept: Record<string, unknown>,\n rejected: Record<string, string>,\n): Record<string, string> {\n const errors: Record<string, string> = {};\n for (const field of fieldsOf(next)) {\n const answered = sent[field.key] !== undefined && sent[field.key] !== null && sent[field.key] !== '';\n if (answered && !(field.key in kept)) errors[field.key] = ANSWER_AGAIN;\n else if (rejected[field.key] && (!answered || field.key in kept)) errors[field.key] = rejected[field.key];\n }\n return errors;\n}\n","import type { FormDefinition } from '../types';\nimport { carryValues, splitErrors, updatedErrors } from './carry';\nimport { createSubmitter, fetchForm, type CloudClientOptions, type CloudSubmission } from './client';\nimport { draftValues, type DraftStore } from './draft';\nimport { parseSettings, type CloudSettings, type PublishedForm } from './envelope';\nimport { CloudError, networkError } from './error';\nimport { FORM_UPDATED_MESSAGE, failureFor, type CloudAction } from './failures';\n\nexport interface CloudNotice {\n tone: 'error' | 'info';\n message: string;\n action: CloudAction;\n details: string[];\n}\n\nexport interface CloudState {\n definition: FormDefinition | null;\n version: number | null;\n settings: CloudSettings;\n loadError: Error | null;\n errors: Record<string, string>;\n notice: CloudNotice | null;\n initialValues: Record<string, unknown> | null;\n revision: number;\n attempt: number;\n done: boolean;\n}\n\nexport interface CloudCallbacks {\n onChange(state: CloudState): void;\n onSuccess?(submission: CloudSubmission): void;\n onError?(error: unknown): void;\n}\n\nexport interface CloudControllerOptions extends CloudClientOptions {\n initialForm?: PublishedForm;\n extraBody?: () => Record<string, unknown>;\n draftStore?: DraftStore;\n}\n\nexport const initialCloudState: CloudState = {\n definition: null, version: null, settings: {}, loadError: null, errors: {}, notice: null,\n initialValues: null, revision: 0, attempt: 0, done: false,\n};\n\nexport function cloudStateFor(form?: PublishedForm): CloudState {\n if (!form) return initialCloudState;\n return { ...initialCloudState, definition: form.definition, version: form.version ?? null, settings: parseSettings(form.settings) };\n}\n\nfunction errorNotice(error: CloudError, details: string[] = []): CloudNotice {\n return { tone: 'error', message: error.message, action: error.action, details };\n}\n\nexport function createCloudController(options: CloudControllerOptions, callbacks: CloudCallbacks) {\n const controller = new AbortController();\n let firstRenderToken: string | undefined;\n const submitterFor = (form: PublishedForm) => {\n firstRenderToken ??= form.renderToken;\n const first = firstRenderToken === form.renderToken ? undefined : firstRenderToken;\n return createSubmitter({ ...options, version: form.version, renderToken: form.renderToken, firstRenderToken: first });\n };\n let submitter = createSubmitter(options);\n let initial = options.initialForm;\n const alive = () => !controller.signal.aborted;\n let state = initialCloudState;\n const update = (patch: Partial<CloudState>) => {\n state = { ...state, ...patch };\n callbacks.onChange(state);\n };\n const report = (patch: Partial<CloudState>) => update({ ...patch, attempt: state.attempt + 1 });\n\n function show(form: PublishedForm) {\n submitter = submitterFor(form);\n const draft = options.draftStore?.load(options.id, form.version) ?? null;\n update({ ...cloudStateFor(form), revision: state.revision, attempt: state.attempt, initialValues: draft });\n }\n\n async function refresh(error: CloudError, sent: Record<string, unknown>) {\n const before = state.definition;\n try {\n const next = await fetchForm(options, controller.signal, error.version);\n if (!alive()) return;\n if (next.version === undefined || next.version < (error.version ?? 0)) throw new CloudError(409, 'form_updated');\n const kept = before ? carryValues(sent, next.definition, before) : {};\n submitter = submitterFor(next);\n report({\n definition: next.definition,\n version: next.version,\n settings: parseSettings(next.settings),\n initialValues: kept,\n revision: state.revision + 1,\n errors: updatedErrors(next.definition, sent, kept, error.errors ?? {}),\n notice: { tone: 'info', message: FORM_UPDATED_MESSAGE, action: null, details: [] },\n });\n } catch {\n if (alive()) report({ notice: { tone: 'error', ...failureFor(409, 'form_updated'), details: [] } });\n }\n }\n\n async function fail(error: unknown, values: Record<string, unknown>) {\n const cloud = error instanceof CloudError ? error : networkError(error);\n if (cloud.code === 'form_updated' && cloud.version !== undefined) return refresh(cloud, values);\n if (cloud.status !== 422) return report({ notice: errorNotice(cloud) });\n const errors = cloud.errors ?? {};\n const split = state.definition ? splitErrors(state.definition, errors) : { fields: errors, other: [] };\n report({ errors: split.fields, notice: split.other.length > 0 ? errorNotice(cloud, split.other) : null });\n }\n\n return {\n start() {\n if (state.loadError) update({ loadError: null });\n if (initial) {\n show(initial);\n initial = undefined;\n return;\n }\n fetchForm(options, controller.signal).then(\n (form) => { if (alive()) show(form); },\n (error: Error) => {\n if (!alive()) return;\n update({ loadError: error });\n callbacks.onError?.(error);\n },\n );\n },\n dispose() {\n controller.abort();\n },\n saveDraft(values: Record<string, unknown>) {\n if (state.definition && !state.done) options.draftStore?.save(options.id, state.version ?? undefined, draftValues(state.definition, values));\n },\n again() {\n update({ done: false, errors: {}, notice: null, initialValues: null, revision: state.revision + 1 });\n },\n async submit(values: Record<string, unknown>, skippedSteps?: string[]) {\n if (state.notice) update({ notice: null });\n try {\n const submission = await submitter(values, skippedSteps);\n if (!alive()) return;\n options.draftStore?.clear(options.id);\n update({ done: true });\n callbacks.onSuccess?.(submission);\n } catch (error) {\n if (!alive()) throw error;\n await fail(error, values);\n callbacks.onError?.(error);\n throw error;\n }\n },\n };\n}\n","interface Searchable {\n querySelector(selector: string): unknown;\n}\n\ninterface Focusable extends Searchable {\n focus(options?: { preventScroll?: boolean }): void;\n scrollIntoView?(options?: { block?: 'center' | 'nearest' }): void;\n matches(selector: string): boolean;\n}\n\nconst CONTROLS = 'input:not([type=\"hidden\"]):not(:disabled), select:not(:disabled), textarea:not(:disabled), button:not(:disabled)';\n\nfunction reveal(target: Focusable, scrollTo: Focusable): void {\n scrollTo.scrollIntoView?.({ block: 'center' });\n target.focus({ preventScroll: true });\n}\n\nexport function focusProblem(root: Searchable | null, notice?: Focusable | null): void {\n if (notice) return reveal(notice, notice);\n const invalid = root?.querySelector('[aria-invalid=\"true\"]') as Focusable | null | undefined;\n if (invalid) reveal(invalid.matches(CONTROLS) ? invalid : (invalid.querySelector(CONTROLS) as Focusable | null) ?? invalid, invalid);\n}\n","import type { FormEngine } from './runtime';\n\nfunction sameErrors(previous: Record<string, string>, next: Record<string, string>): boolean {\n const keys = Object.keys(next);\n return keys.length === Object.keys(previous).length && keys.every((key) => previous[key] === next[key]);\n}\n\nfunction holdsErrors(engine: FormEngine, errors: Record<string, string>): boolean {\n return Object.entries(errors).every(([key, message]) => (\n engine.errors[key] === message || engine.topLevelErrors.includes(message)\n ));\n}\n\nexport function shouldApplyExternalErrors(\n engine: FormEngine,\n previous: Record<string, string> | undefined,\n next: Record<string, string>,\n): boolean {\n return !previous || !sameErrors(previous, next) || !holdsErrors(engine, next);\n}\n","export { cloudStateFor, createCloudController, initialCloudState, type CloudCallbacks, type CloudControllerOptions, type CloudState } from '../cloud/controller';\nexport { focusProblem } from '../cloud/focus';\nexport { shouldApplyExternalErrors } from '../engine/external-errors';\nimport type { FormEngine } from '../engine';\nimport { changeStep } from '../engine/navigation';\nimport type { EngineInternals } from '../engine/runtime-internals';\n\nexport function autoAdvance(engine: FormEngine): Promise<boolean> {\n return changeStep(engine as unknown as EngineInternals, 'next', 'autoAdvance');\n}\n\nconst clean = (value: string) => value.replace(/[^A-Za-z0-9_-]/g, '-');\n\nexport function fieldDomId(formId: string | undefined, key: string): string {\n return `${formId ? clean(formId) : 'fh'}-${clean(key)}`;\n}\n"]}
1
+ {"version":3,"sources":["../src/cloud/carry.ts","../src/cloud/controller.ts","../src/cloud/focus.ts","../src/engine/external-errors.ts","../src/internal/index.ts"],"names":["SHAPES","fieldsOf","definition","step","shapeOf","field","allowed","value","options","option","item","fits","previous","next","carryValues","values","before","kept","splitErrors","errors","known","fields","other","key","message","updatedErrors","sent","rejected","answered","ANSWER_AGAIN","initialCloudState","cloudStateFor","form","parseSettings","errorNotice","error","details","createCloudController","callbacks","controller","firstRenderToken","submitterFor","first","createSubmitter","submitter","initial","alive","state","update","patch","report","show","draft","refresh","fetchForm","CloudError","FORM_UPDATED_MESSAGE","failureFor","fail","cloud","networkError","split","draftValues","skippedSteps","submission","CONTROLS","reveal","target","scrollTo","focusProblem","root","notice","invalid","sameErrors","keys","holdsErrors","engine","shouldApplyExternalErrors","autoAdvance","changeStep","clean","fieldDomId","formId"],"mappings":"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","file":"internal.js","sourcesContent":["import type { FormDefinition, FormField } from '../types';\nimport { ANSWER_AGAIN } from './failures';\n\nconst SHAPES: Record<string, string> = {\n multiselect: 'list',\n checkbox: 'flag',\n switch: 'flag',\n number: 'number',\n file: 'file',\n};\n\nfunction fieldsOf(definition: FormDefinition): FormField[] {\n return [...(definition.fields ?? []), ...(definition.steps ?? []).flatMap((step) => step.fields)];\n}\n\nfunction shapeOf(field: FormField): string {\n return SHAPES[field.type] ?? 'text';\n}\n\nfunction allowed(field: FormField, value: unknown): boolean {\n if (!Array.isArray(field.options)) return true;\n const options = new Set(field.options.map((option) => String(option.value)));\n return (Array.isArray(value) ? value : [value]).every((item) => options.has(String(item)));\n}\n\nfunction fits(previous: FormField | undefined, next: FormField, value: unknown): boolean {\n if (previous && shapeOf(previous) !== shapeOf(next)) return false;\n switch (shapeOf(next)) {\n case 'list': return Array.isArray(value);\n case 'flag': return typeof value === 'boolean';\n case 'number': return typeof value === 'number';\n case 'text': return typeof value === 'string';\n default: return previous !== undefined;\n }\n}\n\nexport function carryValues(\n values: Record<string, unknown>,\n next: FormDefinition,\n previous?: FormDefinition,\n): Record<string, unknown> {\n const before = new Map(previous ? fieldsOf(previous).map((field) => [field.key, field]) : []);\n const kept: Record<string, unknown> = {};\n for (const field of fieldsOf(next)) {\n const value = values[field.key];\n if (value === undefined || value === null) continue;\n if (fits(before.get(field.key), field, value) && allowed(field, value)) kept[field.key] = value;\n }\n return kept;\n}\n\nexport function splitErrors(definition: FormDefinition, errors: Record<string, string>) {\n const known = new Set(fieldsOf(definition).map((field) => field.key));\n const fields: Record<string, string> = {};\n const other = new Set<string>();\n for (const [key, message] of Object.entries(errors)) {\n if (known.has(key)) fields[key] = message;\n else other.add(message);\n }\n return { fields, other: [...other] };\n}\n\nexport function updatedErrors(\n next: FormDefinition,\n sent: Record<string, unknown>,\n kept: Record<string, unknown>,\n rejected: Record<string, string>,\n): Record<string, string> {\n const errors: Record<string, string> = {};\n for (const field of fieldsOf(next)) {\n const answered = sent[field.key] !== undefined && sent[field.key] !== null && sent[field.key] !== '';\n if (answered && !(field.key in kept)) errors[field.key] = ANSWER_AGAIN;\n else if (rejected[field.key] && (!answered || field.key in kept)) errors[field.key] = rejected[field.key];\n }\n return errors;\n}\n","import type { FormDefinition } from '../types';\nimport { carryValues, splitErrors, updatedErrors } from './carry';\nimport { createSubmitter, fetchForm, type CloudClientOptions, type CloudSubmission } from './client';\nimport { draftValues, type DraftStore } from './draft';\nimport { parseSettings, type CloudSettings, type PublishedForm } from './envelope';\nimport { CloudError, networkError } from './error';\nimport { FORM_UPDATED_MESSAGE, failureFor, type CloudAction } from './failures';\n\nexport interface CloudNotice {\n tone: 'error' | 'info';\n message: string;\n action: CloudAction;\n details: string[];\n}\n\nexport interface CloudState {\n definition: FormDefinition | null;\n version: number | null;\n settings: CloudSettings;\n loadError: Error | null;\n errors: Record<string, string>;\n notice: CloudNotice | null;\n initialValues: Record<string, unknown> | null;\n revision: number;\n attempt: number;\n done: boolean;\n}\n\nexport interface CloudCallbacks {\n onChange(state: CloudState): void;\n onSuccess?(submission: CloudSubmission): void;\n onError?(error: unknown): void;\n}\n\nexport interface CloudControllerOptions extends CloudClientOptions {\n initialForm?: PublishedForm;\n extraBody?: () => Record<string, unknown>;\n draftStore?: DraftStore;\n}\n\nexport const initialCloudState: CloudState = {\n definition: null, version: null, settings: {}, loadError: null, errors: {}, notice: null,\n initialValues: null, revision: 0, attempt: 0, done: false,\n};\n\nexport function cloudStateFor(form?: PublishedForm): CloudState {\n if (!form) return initialCloudState;\n return { ...initialCloudState, definition: form.definition, version: form.version ?? null, settings: parseSettings(form.settings) };\n}\n\nfunction errorNotice(error: CloudError, details: string[] = []): CloudNotice {\n return { tone: 'error', message: error.message, action: error.action, details };\n}\n\nexport function createCloudController(options: CloudControllerOptions, callbacks: CloudCallbacks) {\n const controller = new AbortController();\n let firstRenderToken: string | undefined;\n const submitterFor = (form: PublishedForm) => {\n firstRenderToken ??= form.renderToken;\n const first = firstRenderToken === form.renderToken ? undefined : firstRenderToken;\n return createSubmitter({ ...options, version: form.version, renderToken: form.renderToken, firstRenderToken: first });\n };\n let submitter = createSubmitter(options);\n let initial = options.initialForm;\n const alive = () => !controller.signal.aborted;\n let state = initialCloudState;\n const update = (patch: Partial<CloudState>) => {\n state = { ...state, ...patch };\n callbacks.onChange(state);\n };\n const report = (patch: Partial<CloudState>) => update({ ...patch, attempt: state.attempt + 1 });\n\n function show(form: PublishedForm) {\n submitter = submitterFor(form);\n const draft = options.draftStore?.load(options.id, form.version) ?? null;\n update({ ...cloudStateFor(form), revision: state.revision, attempt: state.attempt, initialValues: draft });\n }\n\n async function refresh(error: CloudError, sent: Record<string, unknown>) {\n const before = state.definition;\n try {\n const next = await fetchForm(options, controller.signal, error.version);\n if (!alive()) return;\n if (next.version === undefined || next.version < (error.version ?? 0)) throw new CloudError(409, 'form_updated');\n const kept = before ? carryValues(sent, next.definition, before) : {};\n submitter = submitterFor(next);\n report({\n definition: next.definition,\n version: next.version,\n settings: parseSettings(next.settings),\n initialValues: kept,\n revision: state.revision + 1,\n errors: updatedErrors(next.definition, sent, kept, error.errors ?? {}),\n notice: { tone: 'info', message: FORM_UPDATED_MESSAGE, action: null, details: [] },\n });\n } catch {\n if (alive()) report({ notice: { tone: 'error', ...failureFor(409, 'form_updated'), details: [] } });\n }\n }\n\n async function fail(error: unknown, values: Record<string, unknown>) {\n const cloud = error instanceof CloudError ? error : networkError(error);\n if (cloud.code === 'form_updated' && cloud.version !== undefined) return refresh(cloud, values);\n if (cloud.status !== 422) return report({ notice: errorNotice(cloud) });\n const errors = cloud.errors ?? {};\n const split = state.definition ? splitErrors(state.definition, errors) : { fields: errors, other: [] };\n report({ errors: split.fields, notice: split.other.length > 0 ? errorNotice(cloud, split.other) : null });\n }\n\n return {\n start() {\n if (state.loadError) update({ loadError: null });\n if (initial) {\n show(initial);\n initial = undefined;\n return;\n }\n fetchForm(options, controller.signal).then(\n (form) => { if (alive()) show(form); },\n (error: Error) => {\n if (!alive()) return;\n update({ loadError: error });\n callbacks.onError?.(error);\n },\n );\n },\n dispose() {\n controller.abort();\n },\n saveDraft(values: Record<string, unknown>) {\n if (state.definition && !state.done) options.draftStore?.save(options.id, state.version ?? undefined, draftValues(state.definition, values));\n },\n again() {\n update({ done: false, errors: {}, notice: null, initialValues: null, revision: state.revision + 1 });\n },\n async submit(values: Record<string, unknown>, skippedSteps?: string[]) {\n if (state.notice) update({ notice: null });\n try {\n const submission = await submitter(values, skippedSteps);\n if (!alive()) return;\n options.draftStore?.clear(options.id);\n update({ done: true });\n callbacks.onSuccess?.(submission);\n } catch (error) {\n if (!alive()) throw error;\n await fail(error, values);\n callbacks.onError?.(error);\n throw error;\n }\n },\n };\n}\n","interface Searchable {\n querySelector(selector: string): unknown;\n}\n\ninterface Focusable extends Searchable {\n focus(options?: { preventScroll?: boolean }): void;\n scrollIntoView?(options?: { block?: 'center' | 'nearest' }): void;\n matches(selector: string): boolean;\n}\n\nconst CONTROLS = 'input:not([type=\"hidden\"]):not(:disabled), select:not(:disabled), textarea:not(:disabled), button:not(:disabled)';\n\nfunction reveal(target: Focusable, scrollTo: Focusable): void {\n scrollTo.scrollIntoView?.({ block: 'center' });\n target.focus({ preventScroll: true });\n}\n\nexport function focusProblem(root: Searchable | null, notice?: Focusable | null): void {\n if (notice) return reveal(notice, notice);\n const invalid = root?.querySelector('[aria-invalid=\"true\"]') as Focusable | null | undefined;\n if (invalid) reveal(invalid.matches(CONTROLS) ? invalid : (invalid.querySelector(CONTROLS) as Focusable | null) ?? invalid, invalid);\n}\n","import type { FormEngine } from './runtime';\n\nfunction sameErrors(previous: Record<string, string>, next: Record<string, string>): boolean {\n const keys = Object.keys(next);\n return keys.length === Object.keys(previous).length && keys.every((key) => previous[key] === next[key]);\n}\n\nfunction holdsErrors(engine: FormEngine, errors: Record<string, string>): boolean {\n return Object.entries(errors).every(([key, message]) => (\n engine.errors[key] === message || engine.topLevelErrors.includes(message)\n ));\n}\n\nexport function shouldApplyExternalErrors(\n engine: FormEngine,\n previous: Record<string, string> | undefined,\n next: Record<string, string>,\n): boolean {\n return !previous || !sameErrors(previous, next) || !holdsErrors(engine, next);\n}\n","export { cloudStateFor, createCloudController, initialCloudState, type CloudCallbacks, type CloudControllerOptions, type CloudState } from '../cloud/controller';\nexport { focusProblem } from '../cloud/focus';\nexport { shouldApplyExternalErrors } from '../engine/external-errors';\nimport type { FormEngine } from '../engine';\nimport { changeStep } from '../engine/navigation';\nimport type { EngineInternals } from '../engine/runtime-internals';\n\nexport function autoAdvance(engine: FormEngine): Promise<boolean> {\n return changeStep(engine as unknown as EngineInternals, 'next', 'autoAdvance');\n}\n\nconst clean = (value: string) => value.replace(/[^A-Za-z0-9_-]/g, '-');\n\nexport function fieldDomId(formId: string | undefined, key: string): string {\n return `${formId ? clean(formId) : 'fh'}-${clean(key)}`;\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { f as FormDefinition, a as FormStep, F as FormField } from './definition-Bufih_Bx.js';
2
- import { V as ValidatorFn, D as DefinitionIssue } from './validate-field-glVVoN3E.js';
1
+ import { f as FormDefinition, a as FormStep, F as FormField } from './definition-PdtKhxBh.js';
2
+ import { V as ValidatorFn, D as DefinitionIssue } from './validate-field-dZd5yZAp.js';
3
3
 
4
4
  type StepValidateFn = (stepId: string, values: Record<string, unknown>) => Promise<Record<string, string> | null | void>;
5
5
  interface StepChangeContext {
package/dist/server.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export { C as CheckDefinitionOptions, c as checkDefinition, p as parseDefinition } from './check-definition-BTMV3Ziq.js';
2
- import { V as ValidatorFn } from './validate-field-glVVoN3E.js';
3
- export { D as DefinitionIssue, a as DefinitionIssueCode, F as FormDefinitionError } from './validate-field-glVVoN3E.js';
4
- import { f as FormDefinition } from './definition-Bufih_Bx.js';
1
+ export { C as CheckDefinitionOptions, c as checkDefinition, p as parseDefinition } from './check-definition-B-YU_XN6.js';
2
+ import { V as ValidatorFn } from './validate-field-dZd5yZAp.js';
3
+ export { D as DefinitionIssue, a as DefinitionIssueCode, F as FormDefinitionError } from './validate-field-dZd5yZAp.js';
4
+ import { f as FormDefinition } from './definition-PdtKhxBh.js';
5
5
 
6
6
  interface SubmissionOptions {
7
7
  skippedSteps?: string[];