@formhaus/core 0.13.0 → 0.13.2
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.
- package/dist/chunk-35SAVPYL.js +2 -0
- package/dist/chunk-35SAVPYL.js.map +1 -0
- package/dist/chunk-4UCHIIVE.js +2 -0
- package/dist/chunk-4UCHIIVE.js.map +1 -0
- package/dist/chunk-76YV4J3Q.js +3 -0
- package/dist/chunk-76YV4J3Q.js.map +1 -0
- package/dist/{chunk-UFYD5LVW.js → chunk-J5TQSLO3.js} +3 -3
- package/dist/{chunk-UFYD5LVW.js.map → chunk-J5TQSLO3.js.map} +1 -1
- package/dist/chunk-PBTYUSZR.js +2 -0
- package/dist/chunk-PBTYUSZR.js.map +1 -0
- package/dist/{chunk-FQ3GLJTI.js → chunk-RN5GQHKN.js} +3 -3
- package/dist/{chunk-FQ3GLJTI.js.map → chunk-RN5GQHKN.js.map} +1 -1
- package/dist/cloud.js +1 -1
- package/dist/i18n.js +1 -1
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/internal.d.ts +19 -4
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/{runtime-BzYG6cit.d.ts → runtime-BN2PuKD7.d.ts} +1 -0
- package/dist/server.iife.js +3 -3
- package/dist/server.iife.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/fixtures/submissions/choices.json +3 -8
- package/fixtures/submissions/single-step.json +3 -4
- package/package.json +1 -1
- package/dist/chunk-4IHQINIH.js +0 -3
- package/dist/chunk-4IHQINIH.js.map +0 -1
- package/dist/chunk-5KV7BDCS.js +0 -2
- package/dist/chunk-5KV7BDCS.js.map +0 -1
- package/dist/chunk-PZEBYRGE.js +0 -2
- package/dist/chunk-PZEBYRGE.js.map +0 -1
- package/dist/chunk-Y33LPJXU.js +0 -2
- package/dist/chunk-Y33LPJXU.js.map +0 -1
package/dist/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/check-warnings.ts","../src/i18n/overlay.ts","../src/i18n/walk.ts","../src/i18n/check.ts","../src/i18n/slots.ts","../src/i18n/localize.ts","../src/i18n/template.ts","../src/i18n/issues.ts"],"names":["i18nWarnings","definition","entries","issues","ids","keyed","unknown","block","path","known","code","what","key","warning","pointer","oneOf","node","value","slots","id","messages","DEFAULT_MESSAGES","labels","DEFAULT_LABELS","SLOTS","step","index","name","field","option","rules","rule","hasRule","isEntry","own","lookup","overlay","define","target","assign","leaves","addressKey","placeholders","text","textNodes","list","add","kind","address","actions","owner","names","fields","items","at","position","steps","slotAddress","slot","TEXTS","strings","nested","item","error","translationErrors","root","unbound","checkTranslations","errors","createContext","BOUNDS","ruleKey","usedMessages","keys","getAllFields","typeMessageKeys","nodeSlots","source","literalName","literal","params","message","fallback","formatText","catalogSlots","used","defaults","definitionSlots","translationKey","prefix","explicit","fromOverlay","fromTranslate","translate","ask","localize","input","parseDefinition","isError","FormDefinitionError","textHash","hash","char","templateSlots","describeSlot","textSlots","translationTemplate","dotted","mismatch","translationIssues","meta","found","translated","result","baseline"],"mappings":"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","file":"i18n.js","sourcesContent":["import { DEFAULT_MESSAGES } from '../validation/default-messages';\nimport { DEFAULT_LABELS, hasRule, SLOTS } from './nodes';\nimport type { CheckContext } from '../definition-validation/context';\nimport type { DefinitionIssue, DefinitionIssueCode } from '../definition-validation/issues';\nimport { oneOf, pointer, warning } from '../definition-validation/issues';\n\ntype Node = Record<string, unknown> | undefined | false;\n\nexport function i18nWarnings({ definition, entries }: CheckContext): DefinitionIssue[] {\n const issues: DefinitionIssue[] = [];\n const ids: [string, unknown][] = [];\n let keyed = false;\n const unknown = (block: unknown, path: string, known: string[], code: DefinitionIssueCode, what: string) => {\n for (const key of Object.keys(block ?? {})) {\n if (!known.includes(key)) issues.push(warning(code, `${path}/${pointer(key)}`, `\"${key}\" is not ${what}`, known.length ? oneOf(known) : 'Remove it'));\n }\n };\n const node = (value: Node, path: string, slots: readonly string[], id?: string) => {\n if (!value) return;\n if (id) ids.push([`${path}/${id}`, value[id]]);\n if (!value.i18n) return;\n keyed = true;\n unknown(value.i18n, `${path}/i18n`, [...slots], 'unknown-i18n-slot', 'a translatable text here');\n };\n const messages = Object.keys(DEFAULT_MESSAGES);\n const labels = Object.keys(DEFAULT_LABELS);\n unknown(definition.messages, '/messages', messages, 'unknown-message-key', 'a message key');\n unknown(definition.labels, '/labels', labels, 'unknown-label-key', 'a label key');\n unknown(definition.i18n?.messages, '/i18n/messages', messages, 'unknown-message-key', 'a message key');\n unknown(definition.i18n?.labels, '/i18n/labels', labels, 'unknown-label-key', 'a label key');\n node(definition as unknown as Node, '', [...SLOTS.form, 'messages', 'labels'], 'id');\n node(definition.submit as unknown as Node, '/submit', SLOTS.action);\n node(definition.cancel as unknown as Node, '/cancel', SLOTS.action);\n (definition.steps ?? []).forEach((step, index) => {\n node(step as unknown as Node, `/steps/${index}`, SLOTS.step, 'id');\n for (const name of ['next', 'back', 'skip'] as const) node(step[name] as unknown as Node, `/steps/${index}/${name}`, SLOTS.action);\n });\n for (const { field, path } of entries) {\n node(field as unknown as Node, path, SLOTS.field, 'key');\n field.options?.forEach((option, index) => node(option as unknown as Node, `${path}/options/${index}`, SLOTS.option, 'value'));\n const rules = field.validation as Node;\n if (rules) node(rules, `${path}/validation`, SLOTS.validation.filter((rule) => hasRule(rules, rule)));\n }\n if (keyed) {\n for (const [path, id] of ids) {\n if (typeof id === 'string' && /[.:]/.test(id)) issues.push(warning('i18n-unsafe-identifier', path, `${JSON.stringify(id)} contains \".\" or \":\"`, 'Use letters, digits, \"-\" or \"_\", because translation keys and TMS imports split on these characters'));\n }\n }\n return issues;\n}\n","export type Overlay = { [key: string]: string | Overlay };\n\nexport const isEntry = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst own = (value: object, key: string) => Object.prototype.hasOwnProperty.call(value, key);\n\nexport function lookup(overlay: unknown, path: string[]): string | undefined {\n let node = overlay;\n for (const key of path) node = isEntry(node) && own(node, key) ? node[key] : undefined;\n return typeof node === 'string' && node.trim() ? node : undefined;\n}\n\nfunction define(target: object, key: string, value: unknown): void {\n Object.defineProperty(target, key, { value, enumerable: true, writable: true, configurable: true });\n}\n\nexport function assign(target: Overlay, path: string[], value: string): void {\n let node: Overlay = target;\n for (const key of path.slice(0, -1)) {\n if (!own(node, key) || !isEntry(node[key])) define(node, key, {});\n node = node[key] as Overlay;\n }\n define(node, path[path.length - 1], value);\n}\n\nexport function leaves(overlay: unknown, path: string[] = []): { path: string[]; value: unknown }[] {\n if (!isEntry(overlay)) return [{ path, value: overlay }];\n return Object.keys(overlay).flatMap((key) => leaves(overlay[key], [...path, key]));\n}\n\nexport const addressKey = (path: string[]) => JSON.stringify(path);\n\nexport const placeholders = (text: string) => [...new Set(text.match(/\\{\\w+\\}/g) ?? [])].map((name) => name.slice(1, -1)).sort();\n","import type { FormDefinition, FormField } from '../types';\nimport type { Entry, NodeKind } from './nodes';\n\nexport interface TextNode {\n kind: NodeKind;\n node: Entry;\n path: string;\n address: string[];\n field?: FormField;\n}\n\nexport function textNodes(definition: FormDefinition): TextNode[] {\n const list: TextNode[] = [];\n const add = (kind: NodeKind, node: unknown, path: string, address: string[], field?: FormField) => {\n if (node) list.push({ kind, node: node as Entry, path, address, field });\n };\n const actions = (owner: Entry, path: string, address: string[], names: string[]) => {\n for (const name of names) add('action', owner[name], `${path}/${name}`, [...address, name]);\n };\n const fields = (items: FormField[], path: string, address: string[]) => items.forEach((field, index) => {\n const at = `${path}/fields/${index}`;\n const key = [...address, 'fields', field.key];\n add('field', field, at, key);\n field.options?.forEach((option, position) => add('option', option, `${at}/options/${position}`, [...key, 'options', option.value]));\n add('validation', field.validation, `${at}/validation`, [...key, 'validation'], field);\n });\n add('form', definition, '', []);\n actions(definition as unknown as Entry, '', [], ['submit', 'cancel']);\n const steps = definition.steps ?? [];\n steps.forEach((step, index) => {\n const path = `/steps/${index}`;\n const address = ['steps', step.id];\n add('step', step, path, address);\n actions(step as unknown as Entry, path, address, ['next', 'back', 'skip']);\n fields(step.fields, path, address);\n });\n if (!steps.length) fields(definition.fields ?? [], '', []);\n return list;\n}\n\nexport function slotAddress(kind: NodeKind, address: string[], slot: string): string[] {\n return kind === 'option' ? address : [...address, slot];\n}\n","import { createContext } from '../definition-validation/context';\nimport { error, pointer, type DefinitionIssue } from '../definition-validation/issues';\nimport type { FormDefinition } from '../types';\nimport { i18nWarnings } from './check-warnings';\nimport { isEntry } from './overlay';\nimport { textNodes } from './walk';\n\nconst TEXTS = { form: ['title', 'description'], step: ['title', 'description'], field: ['label', 'placeholder', 'helperText'], option: ['label'], action: ['label'], validation: [] };\n\nfunction strings(value: unknown, path: string, what: string, nested: string[] = []): DefinitionIssue[] {\n if (value === undefined) return [];\n if (!isEntry(value)) return [error('invalid-type', path, `must be an object of ${what}`)];\n return Object.entries(value).flatMap(([key, item]) => (nested.includes(key)\n ? strings(item, `${path}/${key}`, what)\n : typeof item === 'string' && item.trim() ? [] : [error('invalid-type', `${path}/${pointer(key)}`, 'must be a non-empty string')]));\n}\n\nfunction translationErrors(definition: FormDefinition): DefinitionIssue[] {\n const root = definition as unknown as Record<string, unknown>;\n return [\n ...(root.lang === undefined || typeof root.lang === 'string' ? [] : [error('invalid-type', '/lang', '\"lang\" must be a string')]),\n ...strings(root.messages, '/messages', 'message templates'),\n ...strings(root.labels, '/labels', 'label templates'),\n ...textNodes(definition).flatMap(({ kind, node, path }) => {\n const block = node.i18n;\n const unbound = isEntry(block) ? TEXTS[kind].filter((slot) => block[slot] !== undefined && typeof node[slot] !== 'string') : [];\n return [\n ...strings(block, `${path}/i18n`, 'translation keys', kind === 'form' ? ['messages', 'labels'] : []),\n ...unbound.map((slot) => error('i18n-unbound-slot', `${path}/i18n/${slot}`, `\"${slot}\" has a translation key but no source text`, `Add \"${slot}\" as the fallback text`)),\n ];\n }),\n ];\n}\n\nexport function checkTranslations(definition: FormDefinition): DefinitionIssue[] {\n const errors = translationErrors(definition);\n return errors.length ? errors : i18nWarnings(createContext(definition));\n}\n","import { getAllFields } from '../engine/engine-utils';\nimport type { FormDefinition, FormField, LabelKey, MessageKey } from '../types';\nimport { DEFAULT_MESSAGES, formatText } from '../validation/default-messages';\nimport { typeMessageKeys } from '../validation/type-checks';\nimport { DEFAULT_LABELS, hasRule, SLOTS, type Entry } from './nodes';\nimport { slotAddress, textNodes, type TextNode } from './walk';\n\nexport type SlotKind = 'text' | 'rule' | 'message' | 'label';\n\nexport interface Slot {\n kind: SlotKind;\n address: string[];\n key?: string;\n source?: string;\n fallback: string;\n params: Record<string, unknown>;\n template: boolean;\n apply: (text: string) => void;\n}\n\nconst BOUNDS: Record<string, string> = { minLength: 'min', maxLength: 'max', min: 'min', max: 'max' };\n\nfunction ruleKey(field: FormField, rule: string): MessageKey {\n return (field.type === 'multiselect' && rule.endsWith('Length') ? rule.replace('Length', 'Items') : rule) as MessageKey;\n}\n\nfunction usedMessages(definition: FormDefinition): Set<string> {\n const keys = new Set([...Object.keys(definition.messages ?? {}), ...Object.keys(definition.i18n?.messages ?? {})]);\n for (const field of getAllFields(definition)) {\n const rules = (field.validation ?? {}) as Entry;\n for (const rule of SLOTS.validation) {\n if (hasRule(rules, rule) && rules[rule] !== '' && typeof rules[rule === 'required' ? rule : `${rule}Message`] !== 'string') keys.add(ruleKey(field, rule));\n }\n for (const key of typeMessageKeys(field)) keys.add(key);\n }\n return keys;\n}\n\nfunction nodeSlots(definition: FormDefinition, { kind, node, address, field }: TextNode): Slot[] {\n const keys = (node.i18n ?? {}) as Record<string, string>;\n return SLOTS[kind].flatMap((slot): Slot[] => {\n if (kind !== 'validation') {\n const source = node[slot];\n if (typeof source !== 'string') return [];\n return [{ kind: 'text', address: slotAddress(kind, address, slot), key: keys[slot], source, fallback: source, params: {}, template: true, apply: (text) => { node[slot] = text; } }];\n }\n if (!hasRule(node, slot) || !field) return [];\n const literalName = slot === 'required' ? slot : `${slot}Message`;\n const literal = typeof node[literalName] === 'string' ? node[literalName] as string : undefined;\n const params = BOUNDS[slot] ? { [BOUNDS[slot]]: node[slot] } : {};\n const message = ruleKey(field, slot);\n const fallback = literal ?? formatText(definition.messages?.[message] ?? DEFAULT_MESSAGES[message], params);\n return [{ kind: 'rule', address: [...address, slot], key: keys[slot], source: literal, fallback, params, template: literal !== undefined || !!keys[slot], apply: (text) => { node[literalName] = text; } }];\n });\n}\n\nfunction catalogSlots(definition: FormDefinition, name: 'messages' | 'labels', used: Set<string>): Slot[] {\n const defaults: Record<string, string> = name === 'messages' ? DEFAULT_MESSAGES : DEFAULT_LABELS;\n const keys = (definition.i18n?.[name] ?? {}) as Record<string, string>;\n return Object.keys(defaults).map((item) => {\n const source = (definition[name] as Record<string, string> | undefined)?.[item] ?? defaults[item];\n return {\n kind: name === 'messages' ? 'message' : 'label', address: [name, item], key: keys[item], source, fallback: source, params: {}, template: used.has(item),\n apply: (text: string) => { ((definition[name] ??= {}) as Record<string, string>)[item] = text; },\n };\n });\n}\n\nexport function definitionSlots(definition: FormDefinition): Slot[] {\n const steps = !!definition.steps?.length;\n const labels = new Set<LabelKey>(steps ? ['continue', 'back', 'stepOf', 'errorSummary'] : ['errorSummary']);\n return [\n ...textNodes(definition).flatMap((node) => nodeSlots(definition, node)),\n ...catalogSlots(definition, 'messages', usedMessages(definition)),\n ...catalogSlots(definition, 'labels', labels),\n ];\n}\n","import { parseDefinition } from '../definition-validation/check-definition';\nimport { FormDefinitionError, isError } from '../definition-validation/issues';\nimport { checkTranslations } from './check';\nimport type { FormDefinition, LabelFn, LabelSource } from '../types';\nimport { DEFAULT_MESSAGES, formatText, type MessageFn, type MessageSource } from '../validation/default-messages';\nimport { DEFAULT_LABELS } from './nodes';\nimport { lookup, type Overlay } from './overlay';\nimport { definitionSlots } from './slots';\n\nexport type TranslateFn = (key: string, params: Record<string, unknown>, defaultText: string) => string | undefined;\n\nexport interface OverlaySource {\n overlay: Overlay;\n lang?: string;\n}\n\nexport interface TranslateSource {\n translate: TranslateFn;\n prefix?: string | false;\n lang?: string;\n}\n\nexport type LocalizeSource = OverlaySource | TranslateSource;\n\nexport interface Localized {\n definition: FormDefinition;\n messages: MessageSource;\n labels: LabelSource;\n}\n\nexport function translationKey(prefix: string | false, explicit: string | undefined, address: string[]): string | undefined {\n if (explicit !== undefined) return explicit;\n if (prefix === false) return undefined;\n return (prefix ? [prefix, ...address] : address).join('.');\n}\n\nfunction fromOverlay(definition: FormDefinition, overlay: Overlay): Localized {\n for (const slot of definitionSlots(definition)) {\n const text = lookup(overlay, slot.address);\n if (text !== undefined) slot.apply(slot.kind === 'rule' ? formatText(text, slot.params) : text);\n }\n return { definition, messages: definition.messages ?? {}, labels: definition.labels ?? {} };\n}\n\nfunction fromTranslate(definition: FormDefinition, { translate, prefix = definition.id }: TranslateSource): Localized {\n const ask = (explicit: string | undefined, address: string[], params: Record<string, unknown>, fallback: string) => {\n const key = translationKey(prefix, explicit, address);\n let text: unknown;\n try {\n text = key === undefined ? undefined : translate(key, params, fallback);\n } catch {\n return undefined;\n }\n return typeof text === 'string' && text.trim() && text !== key ? formatText(text, params) : undefined;\n };\n const source = { messages: { ...definition.messages }, labels: { ...definition.labels } };\n const keys = definition.i18n ?? {};\n for (const slot of definitionSlots(definition)) {\n if (slot.kind !== 'text' && slot.kind !== 'rule') continue;\n const text = ask(slot.key, slot.address, slot.params, slot.fallback);\n if (text !== undefined && (slot.source !== undefined || text !== slot.fallback)) slot.apply(text);\n }\n const messages: MessageFn = (key, params) => (\n ask(keys.messages?.[key], ['messages', key], params, formatText(source.messages[key] ?? DEFAULT_MESSAGES[key], params))\n );\n const labels: LabelFn = (key, params) => (\n ask(keys.labels?.[key], ['labels', key], params, formatText(source.labels[key] ?? DEFAULT_LABELS[key], params))\n );\n return { definition, messages, labels };\n}\n\nexport function localize(input: FormDefinition, source: LocalizeSource): Localized {\n const errors = checkTranslations(parseDefinition(input)).filter(isError);\n if (errors.length) throw new FormDefinitionError(errors);\n const definition: FormDefinition = JSON.parse(JSON.stringify(input));\n if (source.lang) definition.lang = source.lang;\n return 'overlay' in source ? fromOverlay(definition, source.overlay) : fromTranslate(definition, source);\n}\n","import type { FormDefinition } from '../types';\nimport { translationKey } from './localize';\nimport { assign, placeholders, type Overlay } from './overlay';\nimport { definitionSlots, type Slot } from './slots';\n\nexport interface TextSlot {\n address: string;\n key?: string;\n text: string;\n params: string[];\n hash: string;\n}\n\nexport interface TextSlotOptions {\n prefix?: string | false;\n}\n\nexport function textHash(key: string | undefined, text: string): string {\n let hash = 0x811c9dc5;\n for (const char of `${key ?? ''}\\u0000${text}`) hash = Math.imul(hash ^ char.codePointAt(0)!, 0x01000193) >>> 0;\n return hash.toString(16).padStart(8, '0');\n}\n\nexport const templateSlots = (definition: FormDefinition): Slot[] => definitionSlots(definition).filter((slot) => slot.template);\n\nexport function describeSlot(slot: Slot, prefix: string | false): TextSlot {\n const key = translationKey(prefix, slot.key, slot.address);\n const text = slot.source ?? slot.fallback;\n const params = slot.kind === 'rule' ? Object.keys(slot.params) : placeholders(text);\n return { address: slot.address.join('.'), ...(key !== undefined && { key }), text, params, hash: textHash(key, text) };\n}\n\nexport function textSlots(definition: FormDefinition, { prefix = definition.id }: TextSlotOptions = {}): TextSlot[] {\n return templateSlots(definition).map((slot) => describeSlot(slot, prefix));\n}\n\nexport function translationTemplate(definition: FormDefinition): Overlay {\n const overlay: Overlay = {};\n for (const slot of templateSlots(definition)) assign(overlay, slot.address, slot.source ?? slot.fallback);\n return overlay;\n}\n","import type { FormDefinition } from '../types';\nimport { textNodes } from './walk';\nimport { addressKey, isEntry, leaves, lookup, placeholders } from './overlay';\nimport { definitionSlots, type Slot } from './slots';\nimport { describeSlot } from './template';\n\nexport interface TranslationMeta {\n prefix?: string | false;\n slots?: Record<string, { hash?: string }>;\n}\n\nexport interface TranslationIssues {\n missing: string[];\n unknown: string[];\n invalid: string[];\n placeholderMismatch: string[];\n unlabeled: string[];\n stale?: string[];\n}\n\nconst dotted = (path: string[]) => path.join('.');\n\nfunction mismatch(slot: Slot, text: string): boolean {\n const used = placeholders(text);\n if (slot.kind === 'rule') return used.some((name) => !Object.prototype.hasOwnProperty.call(slot.params, name));\n return used.join() !== placeholders(slot.source ?? slot.fallback).join();\n}\n\nexport function translationIssues(definition: FormDefinition, overlay: unknown, meta?: TranslationMeta): TranslationIssues {\n const slots = definitionSlots(definition);\n const known = new Set(slots.map((slot) => addressKey(slot.address)));\n const found = isEntry(overlay) ? leaves(overlay) : [{ path: [], value: null }];\n const translated = slots.filter((slot) => lookup(overlay, slot.address) !== undefined);\n const result: TranslationIssues = {\n missing: slots.filter((slot) => slot.template && lookup(overlay, slot.address) === undefined).map((slot) => dotted(slot.address)),\n unknown: found.filter(({ path, value }) => typeof value === 'string' && !known.has(addressKey(path))).map(({ path }) => dotted(path)),\n invalid: found.filter(({ value }) => typeof value !== 'string').map(({ path }) => dotted(path)),\n placeholderMismatch: translated.filter((slot) => mismatch(slot, lookup(overlay, slot.address)!)).map((slot) => dotted(slot.address)),\n unlabeled: textNodes(definition)\n .filter(({ kind, node, address }) => kind === 'field' && !(typeof node.label === 'string' && node.label.trim()) && lookup(overlay, [...address, 'label']) === undefined)\n .map(({ address }) => dotted([...address, 'label'])),\n };\n if (meta?.slots) {\n const baseline = meta.slots;\n const own = (address: string) => Object.prototype.hasOwnProperty.call(baseline, address);\n result.stale = translated.filter((slot) => slot.template).map((slot) => describeSlot(slot, meta.prefix ?? definition.id))\n .filter(({ address, hash }) => own(address) && baseline[address]?.hash !== undefined && baseline[address].hash !== hash)\n .map(({ address }) => address);\n }\n return result;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/i18n/check-warnings.ts","../src/i18n/overlay.ts","../src/i18n/walk.ts","../src/i18n/check.ts","../src/i18n/slots.ts","../src/i18n/localize.ts","../src/i18n/template.ts","../src/i18n/issues.ts"],"names":["i18nWarnings","definition","entries","issues","ids","keyed","unknown","block","path","known","code","what","key","warning","pointer","oneOf","node","value","slots","id","messages","DEFAULT_MESSAGES","labels","DEFAULT_LABELS","SLOTS","step","index","name","field","option","rules","rule","hasRule","isEntry","own","lookup","overlay","define","target","assign","leaves","addressKey","placeholders","text","textNodes","list","add","kind","address","actions","owner","names","fields","items","at","position","steps","slotAddress","slot","TEXTS","strings","nested","item","error","translationErrors","root","unbound","checkTranslations","errors","createContext","BOUNDS","ruleKey","usedMessages","keys","getAllFields","typeMessageKeys","nodeSlots","source","literalName","literal","params","message","fallback","formatText","catalogSlots","used","defaults","definitionSlots","translationKey","prefix","explicit","fromOverlay","fromTranslate","translate","ask","localize","input","parseDefinition","isError","FormDefinitionError","textHash","hash","char","templateSlots","describeSlot","textSlots","translationTemplate","dotted","mismatch","translationIssues","meta","found","translated","result","baseline"],"mappings":"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","file":"i18n.js","sourcesContent":["import { DEFAULT_MESSAGES } from '../validation/default-messages';\nimport { DEFAULT_LABELS, hasRule, SLOTS } from './nodes';\nimport type { CheckContext } from '../definition-validation/context';\nimport type { DefinitionIssue, DefinitionIssueCode } from '../definition-validation/issues';\nimport { oneOf, pointer, warning } from '../definition-validation/issues';\n\ntype Node = Record<string, unknown> | undefined | false;\n\nexport function i18nWarnings({ definition, entries }: CheckContext): DefinitionIssue[] {\n const issues: DefinitionIssue[] = [];\n const ids: [string, unknown][] = [];\n let keyed = false;\n const unknown = (block: unknown, path: string, known: string[], code: DefinitionIssueCode, what: string) => {\n for (const key of Object.keys(block ?? {})) {\n if (!known.includes(key)) issues.push(warning(code, `${path}/${pointer(key)}`, `\"${key}\" is not ${what}`, known.length ? oneOf(known) : 'Remove it'));\n }\n };\n const node = (value: Node, path: string, slots: readonly string[], id?: string) => {\n if (!value) return;\n if (id) ids.push([`${path}/${id}`, value[id]]);\n if (!value.i18n) return;\n keyed = true;\n unknown(value.i18n, `${path}/i18n`, [...slots], 'unknown-i18n-slot', 'a translatable text here');\n };\n const messages = Object.keys(DEFAULT_MESSAGES);\n const labels = Object.keys(DEFAULT_LABELS);\n unknown(definition.messages, '/messages', messages, 'unknown-message-key', 'a message key');\n unknown(definition.labels, '/labels', labels, 'unknown-label-key', 'a label key');\n unknown(definition.i18n?.messages, '/i18n/messages', messages, 'unknown-message-key', 'a message key');\n unknown(definition.i18n?.labels, '/i18n/labels', labels, 'unknown-label-key', 'a label key');\n node(definition as unknown as Node, '', [...SLOTS.form, 'messages', 'labels'], 'id');\n node(definition.submit as unknown as Node, '/submit', SLOTS.action);\n node(definition.cancel as unknown as Node, '/cancel', SLOTS.action);\n (definition.steps ?? []).forEach((step, index) => {\n node(step as unknown as Node, `/steps/${index}`, SLOTS.step, 'id');\n for (const name of ['next', 'back', 'skip'] as const) node(step[name] as unknown as Node, `/steps/${index}/${name}`, SLOTS.action);\n });\n for (const { field, path } of entries) {\n node(field as unknown as Node, path, SLOTS.field, 'key');\n field.options?.forEach((option, index) => node(option as unknown as Node, `${path}/options/${index}`, SLOTS.option, 'value'));\n const rules = field.validation as Node;\n if (rules) node(rules, `${path}/validation`, SLOTS.validation.filter((rule) => hasRule(rules, rule)));\n }\n if (keyed) {\n for (const [path, id] of ids) {\n if (typeof id === 'string' && /[.:]/.test(id)) issues.push(warning('i18n-unsafe-identifier', path, `${JSON.stringify(id)} contains \".\" or \":\"`, 'Use letters, digits, \"-\" or \"_\", because translation keys and TMS imports split on these characters'));\n }\n }\n return issues;\n}\n","export type Overlay = { [key: string]: string | Overlay };\n\nexport const isEntry = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst own = (value: object, key: string) => Object.prototype.hasOwnProperty.call(value, key);\n\nexport function lookup(overlay: unknown, path: string[]): string | undefined {\n let node = overlay;\n for (const key of path) node = isEntry(node) && own(node, key) ? node[key] : undefined;\n return typeof node === 'string' && node.trim() ? node : undefined;\n}\n\nfunction define(target: object, key: string, value: unknown): void {\n Object.defineProperty(target, key, { value, enumerable: true, writable: true, configurable: true });\n}\n\nexport function assign(target: Overlay, path: string[], value: string): void {\n let node: Overlay = target;\n for (const key of path.slice(0, -1)) {\n if (!own(node, key) || !isEntry(node[key])) define(node, key, {});\n node = node[key] as Overlay;\n }\n define(node, path[path.length - 1], value);\n}\n\nexport function leaves(overlay: unknown, path: string[] = []): { path: string[]; value: unknown }[] {\n if (!isEntry(overlay)) return [{ path, value: overlay }];\n return Object.keys(overlay).flatMap((key) => leaves(overlay[key], [...path, key]));\n}\n\nexport const addressKey = (path: string[]) => JSON.stringify(path);\n\nexport const placeholders = (text: string) => [...new Set(text.match(/\\{\\w+\\}/g) ?? [])].map((name) => name.slice(1, -1)).sort();\n","import type { FormDefinition, FormField } from '../types';\nimport type { Entry, NodeKind } from './nodes';\n\nexport interface TextNode {\n kind: NodeKind;\n node: Entry;\n path: string;\n address: string[];\n field?: FormField;\n}\n\nexport function textNodes(definition: FormDefinition): TextNode[] {\n const list: TextNode[] = [];\n const add = (kind: NodeKind, node: unknown, path: string, address: string[], field?: FormField) => {\n if (node) list.push({ kind, node: node as Entry, path, address, field });\n };\n const actions = (owner: Entry, path: string, address: string[], names: string[]) => {\n for (const name of names) add('action', owner[name], `${path}/${name}`, [...address, name]);\n };\n const fields = (items: FormField[], path: string, address: string[]) => items.forEach((field, index) => {\n const at = `${path}/fields/${index}`;\n const key = [...address, 'fields', field.key];\n add('field', field, at, key);\n field.options?.forEach((option, position) => add('option', option, `${at}/options/${position}`, [...key, 'options', option.value]));\n add('validation', field.validation, `${at}/validation`, [...key, 'validation'], field);\n });\n add('form', definition, '', []);\n actions(definition as unknown as Entry, '', [], ['submit', 'cancel']);\n const steps = definition.steps ?? [];\n steps.forEach((step, index) => {\n const path = `/steps/${index}`;\n const address = ['steps', step.id];\n add('step', step, path, address);\n actions(step as unknown as Entry, path, address, ['next', 'back', 'skip']);\n fields(step.fields, path, address);\n });\n if (!steps.length) fields(definition.fields ?? [], '', []);\n return list;\n}\n\nexport function slotAddress(kind: NodeKind, address: string[], slot: string): string[] {\n return kind === 'option' ? address : [...address, slot];\n}\n","import { createContext } from '../definition-validation/context';\nimport { error, pointer, type DefinitionIssue } from '../definition-validation/issues';\nimport type { FormDefinition } from '../types';\nimport { i18nWarnings } from './check-warnings';\nimport { isEntry } from './overlay';\nimport { textNodes } from './walk';\n\nconst TEXTS = { form: ['title', 'description'], step: ['title', 'description'], field: ['label', 'placeholder', 'helperText'], option: ['label'], action: ['label'], validation: [] };\n\nfunction strings(value: unknown, path: string, what: string, nested: string[] = []): DefinitionIssue[] {\n if (value === undefined) return [];\n if (!isEntry(value)) return [error('invalid-type', path, `must be an object of ${what}`)];\n return Object.entries(value).flatMap(([key, item]) => (nested.includes(key)\n ? strings(item, `${path}/${key}`, what)\n : typeof item === 'string' && item.trim() ? [] : [error('invalid-type', `${path}/${pointer(key)}`, 'must be a non-empty string')]));\n}\n\nfunction translationErrors(definition: FormDefinition): DefinitionIssue[] {\n const root = definition as unknown as Record<string, unknown>;\n return [\n ...(root.lang === undefined || typeof root.lang === 'string' ? [] : [error('invalid-type', '/lang', '\"lang\" must be a string')]),\n ...strings(root.messages, '/messages', 'message templates'),\n ...strings(root.labels, '/labels', 'label templates'),\n ...textNodes(definition).flatMap(({ kind, node, path }) => {\n const block = node.i18n;\n const unbound = isEntry(block) ? TEXTS[kind].filter((slot) => block[slot] !== undefined && typeof node[slot] !== 'string') : [];\n return [\n ...strings(block, `${path}/i18n`, 'translation keys', kind === 'form' ? ['messages', 'labels'] : []),\n ...unbound.map((slot) => error('i18n-unbound-slot', `${path}/i18n/${slot}`, `\"${slot}\" has a translation key but no source text`, `Add \"${slot}\" as the fallback text`)),\n ];\n }),\n ];\n}\n\nexport function checkTranslations(definition: FormDefinition): DefinitionIssue[] {\n const errors = translationErrors(definition);\n return errors.length ? errors : i18nWarnings(createContext(definition));\n}\n","import { getAllFields } from '../engine/engine-utils';\nimport type { FormDefinition, FormField, LabelKey, MessageKey } from '../types';\nimport { DEFAULT_MESSAGES, formatText } from '../validation/default-messages';\nimport { typeMessageKeys } from '../validation/type-checks';\nimport { DEFAULT_LABELS, hasRule, SLOTS, type Entry } from './nodes';\nimport { slotAddress, textNodes, type TextNode } from './walk';\n\nexport type SlotKind = 'text' | 'rule' | 'message' | 'label';\n\nexport interface Slot {\n kind: SlotKind;\n address: string[];\n key?: string;\n source?: string;\n fallback: string;\n params: Record<string, unknown>;\n template: boolean;\n apply: (text: string) => void;\n}\n\nconst BOUNDS: Record<string, string> = { minLength: 'min', maxLength: 'max', min: 'min', max: 'max' };\n\nfunction ruleKey(field: FormField, rule: string): MessageKey {\n return (field.type === 'multiselect' && rule.endsWith('Length') ? rule.replace('Length', 'Items') : rule) as MessageKey;\n}\n\nfunction usedMessages(definition: FormDefinition): Set<string> {\n const keys = new Set([...Object.keys(definition.messages ?? {}), ...Object.keys(definition.i18n?.messages ?? {})]);\n for (const field of getAllFields(definition)) {\n const rules = (field.validation ?? {}) as Entry;\n for (const rule of SLOTS.validation) {\n if (hasRule(rules, rule) && typeof rules[rule === 'required' ? rule : `${rule}Message`] !== 'string') keys.add(ruleKey(field, rule));\n }\n for (const key of typeMessageKeys(field)) keys.add(key);\n }\n return keys;\n}\n\nfunction nodeSlots(definition: FormDefinition, { kind, node, address, field }: TextNode): Slot[] {\n const keys = (node.i18n ?? {}) as Record<string, string>;\n return SLOTS[kind].flatMap((slot): Slot[] => {\n if (kind !== 'validation') {\n const source = node[slot];\n if (typeof source !== 'string') return [];\n return [{ kind: 'text', address: slotAddress(kind, address, slot), key: keys[slot], source, fallback: source, params: {}, template: true, apply: (text) => { node[slot] = text; } }];\n }\n if (!hasRule(node, slot) || !field) return [];\n const literalName = slot === 'required' ? slot : `${slot}Message`;\n const literal = typeof node[literalName] === 'string' ? node[literalName] as string : undefined;\n const params = BOUNDS[slot] ? { [BOUNDS[slot]]: node[slot] } : {};\n const message = ruleKey(field, slot);\n const fallback = literal ?? formatText(definition.messages?.[message] ?? DEFAULT_MESSAGES[message], params);\n return [{ kind: 'rule', address: [...address, slot], key: keys[slot], source: literal, fallback, params, template: literal !== undefined || !!keys[slot], apply: (text) => { node[literalName] = text; } }];\n });\n}\n\nfunction catalogSlots(definition: FormDefinition, name: 'messages' | 'labels', used: Set<string>): Slot[] {\n const defaults: Record<string, string> = name === 'messages' ? DEFAULT_MESSAGES : DEFAULT_LABELS;\n const keys = (definition.i18n?.[name] ?? {}) as Record<string, string>;\n return Object.keys(defaults).map((item) => {\n const source = (definition[name] as Record<string, string> | undefined)?.[item] ?? defaults[item];\n return {\n kind: name === 'messages' ? 'message' : 'label', address: [name, item], key: keys[item], source, fallback: source, params: {}, template: used.has(item),\n apply: (text: string) => { ((definition[name] ??= {}) as Record<string, string>)[item] = text; },\n };\n });\n}\n\nexport function definitionSlots(definition: FormDefinition): Slot[] {\n const steps = !!definition.steps?.length;\n const labels = new Set<LabelKey>(steps ? ['continue', 'back', 'stepOf', 'errorSummary'] : ['errorSummary']);\n return [\n ...textNodes(definition).flatMap((node) => nodeSlots(definition, node)),\n ...catalogSlots(definition, 'messages', usedMessages(definition)),\n ...catalogSlots(definition, 'labels', labels),\n ];\n}\n","import { parseDefinition } from '../definition-validation/check-definition';\nimport { FormDefinitionError, isError } from '../definition-validation/issues';\nimport { checkTranslations } from './check';\nimport type { FormDefinition, LabelFn, LabelSource } from '../types';\nimport { DEFAULT_MESSAGES, formatText, type MessageFn, type MessageSource } from '../validation/default-messages';\nimport { DEFAULT_LABELS } from './nodes';\nimport { lookup, type Overlay } from './overlay';\nimport { definitionSlots } from './slots';\n\nexport type TranslateFn = (key: string, params: Record<string, unknown>, defaultText: string) => string | undefined;\n\nexport interface OverlaySource {\n overlay: Overlay;\n lang?: string;\n}\n\nexport interface TranslateSource {\n translate: TranslateFn;\n prefix?: string | false;\n lang?: string;\n}\n\nexport type LocalizeSource = OverlaySource | TranslateSource;\n\nexport interface Localized {\n definition: FormDefinition;\n messages: MessageSource;\n labels: LabelSource;\n}\n\nexport function translationKey(prefix: string | false, explicit: string | undefined, address: string[]): string | undefined {\n if (explicit !== undefined) return explicit;\n if (prefix === false) return undefined;\n return (prefix ? [prefix, ...address] : address).join('.');\n}\n\nfunction fromOverlay(definition: FormDefinition, overlay: Overlay): Localized {\n for (const slot of definitionSlots(definition)) {\n const text = lookup(overlay, slot.address);\n if (text !== undefined) slot.apply(slot.kind === 'rule' ? formatText(text, slot.params) : text);\n }\n return { definition, messages: definition.messages ?? {}, labels: definition.labels ?? {} };\n}\n\nfunction fromTranslate(definition: FormDefinition, { translate, prefix = definition.id }: TranslateSource): Localized {\n const ask = (explicit: string | undefined, address: string[], params: Record<string, unknown>, fallback: string) => {\n const key = translationKey(prefix, explicit, address);\n let text: unknown;\n try {\n text = key === undefined ? undefined : translate(key, params, fallback);\n } catch {\n return undefined;\n }\n return typeof text === 'string' && text.trim() && text !== key ? formatText(text, params) : undefined;\n };\n const source = { messages: { ...definition.messages }, labels: { ...definition.labels } };\n const keys = definition.i18n ?? {};\n for (const slot of definitionSlots(definition)) {\n if (slot.kind !== 'text' && slot.kind !== 'rule') continue;\n const text = ask(slot.key, slot.address, slot.params, slot.fallback);\n if (text !== undefined && (slot.source !== undefined || text !== slot.fallback)) slot.apply(text);\n }\n const messages: MessageFn = (key, params) => (\n ask(keys.messages?.[key], ['messages', key], params, formatText(source.messages[key] ?? DEFAULT_MESSAGES[key], params))\n );\n const labels: LabelFn = (key, params) => (\n ask(keys.labels?.[key], ['labels', key], params, formatText(source.labels[key] ?? DEFAULT_LABELS[key], params))\n );\n return { definition, messages, labels };\n}\n\nexport function localize(input: FormDefinition, source: LocalizeSource): Localized {\n const errors = checkTranslations(parseDefinition(input)).filter(isError);\n if (errors.length) throw new FormDefinitionError(errors);\n const definition: FormDefinition = JSON.parse(JSON.stringify(input));\n if (source.lang) definition.lang = source.lang;\n return 'overlay' in source ? fromOverlay(definition, source.overlay) : fromTranslate(definition, source);\n}\n","import type { FormDefinition } from '../types';\nimport { translationKey } from './localize';\nimport { assign, placeholders, type Overlay } from './overlay';\nimport { definitionSlots, type Slot } from './slots';\n\nexport interface TextSlot {\n address: string;\n key?: string;\n text: string;\n params: string[];\n hash: string;\n}\n\nexport interface TextSlotOptions {\n prefix?: string | false;\n}\n\nexport function textHash(key: string | undefined, text: string): string {\n let hash = 0x811c9dc5;\n for (const char of `${key ?? ''}\\u0000${text}`) hash = Math.imul(hash ^ char.codePointAt(0)!, 0x01000193) >>> 0;\n return hash.toString(16).padStart(8, '0');\n}\n\nexport const templateSlots = (definition: FormDefinition): Slot[] => definitionSlots(definition).filter((slot) => slot.template);\n\nexport function describeSlot(slot: Slot, prefix: string | false): TextSlot {\n const key = translationKey(prefix, slot.key, slot.address);\n const text = slot.source ?? slot.fallback;\n const params = slot.kind === 'rule' ? Object.keys(slot.params) : placeholders(text);\n return { address: slot.address.join('.'), ...(key !== undefined && { key }), text, params, hash: textHash(key, text) };\n}\n\nexport function textSlots(definition: FormDefinition, { prefix = definition.id }: TextSlotOptions = {}): TextSlot[] {\n return templateSlots(definition).map((slot) => describeSlot(slot, prefix));\n}\n\nexport function translationTemplate(definition: FormDefinition): Overlay {\n const overlay: Overlay = {};\n for (const slot of templateSlots(definition)) assign(overlay, slot.address, slot.source ?? slot.fallback);\n return overlay;\n}\n","import type { FormDefinition } from '../types';\nimport { textNodes } from './walk';\nimport { addressKey, isEntry, leaves, lookup, placeholders } from './overlay';\nimport { definitionSlots, type Slot } from './slots';\nimport { describeSlot } from './template';\n\nexport interface TranslationMeta {\n prefix?: string | false;\n slots?: Record<string, { hash?: string }>;\n}\n\nexport interface TranslationIssues {\n missing: string[];\n unknown: string[];\n invalid: string[];\n placeholderMismatch: string[];\n unlabeled: string[];\n stale?: string[];\n}\n\nconst dotted = (path: string[]) => path.join('.');\n\nfunction mismatch(slot: Slot, text: string): boolean {\n const used = placeholders(text);\n if (slot.kind === 'rule') return used.some((name) => !Object.prototype.hasOwnProperty.call(slot.params, name));\n return used.join() !== placeholders(slot.source ?? slot.fallback).join();\n}\n\nexport function translationIssues(definition: FormDefinition, overlay: unknown, meta?: TranslationMeta): TranslationIssues {\n const slots = definitionSlots(definition);\n const known = new Set(slots.map((slot) => addressKey(slot.address)));\n const found = isEntry(overlay) ? leaves(overlay) : [{ path: [], value: null }];\n const translated = slots.filter((slot) => lookup(overlay, slot.address) !== undefined);\n const result: TranslationIssues = {\n missing: slots.filter((slot) => slot.template && lookup(overlay, slot.address) === undefined).map((slot) => dotted(slot.address)),\n unknown: found.filter(({ path, value }) => typeof value === 'string' && !known.has(addressKey(path))).map(({ path }) => dotted(path)),\n invalid: found.filter(({ value }) => typeof value !== 'string').map(({ path }) => dotted(path)),\n placeholderMismatch: translated.filter((slot) => mismatch(slot, lookup(overlay, slot.address)!)).map((slot) => dotted(slot.address)),\n unlabeled: textNodes(definition)\n .filter(({ kind, node, address }) => kind === 'field' && !(typeof node.label === 'string' && node.label.trim()) && lookup(overlay, [...address, 'label']) === undefined)\n .map(({ address }) => dotted([...address, 'label'])),\n };\n if (meta?.slots) {\n const baseline = meta.slots;\n const own = (address: string) => Object.prototype.hasOwnProperty.call(baseline, address);\n result.stale = translated.filter((slot) => slot.template).map((slot) => describeSlot(slot, meta.prefix ?? definition.id))\n .filter(({ address, hash }) => own(address) && baseline[address]?.hash !== undefined && baseline[address].hash !== hash)\n .map(({ address }) => address);\n }\n return result;\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { F as FormField, a as FormStep, S as ShowCondition, b as FormAction } from './definition-B4OIy_wH.js';
|
|
2
2
|
export { D as DefaultFieldType, c as FieldI18n, d as FieldOption, e as FieldType, f as FieldValidation, g as FormDefinition, h as FormI18n, L as LabelCatalog, i as LabelFn, j as LabelI18n, k as LabelKey, l as LabelSource, M as MessageCatalog, m as MessageKey, n as StepI18n, o as StepRoute, V as ValidationI18n } from './definition-B4OIy_wH.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, e as SubmitHandler, f as SubmitResult } from './runtime-
|
|
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, e as SubmitHandler, f as SubmitResult } from './runtime-BN2PuKD7.js';
|
|
4
4
|
import { M as MessageSource } from './default-messages-yS4QtrYi.js';
|
|
5
5
|
export { D as DefinitionIssue, a as DefinitionIssueCode, F as FormDefinitionError, b as MessageFn, c as MessageParams, V as ValidationRule, g as getDefaultMessage } from './default-messages-yS4QtrYi.js';
|
|
6
6
|
import { V as ValidatorFn } from './validate-field-ND_UxoJU.js';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{c as FormEngine,a as validateDefinition}from'./chunk-
|
|
1
|
+
export{c as FormEngine,a as validateDefinition}from'./chunk-PBTYUSZR.js';export{a as FormLifecycleError,c as isActionDisabled,b as isVisible,d as validateFieldValue,f as validateFields,e as validateStep}from'./chunk-76YV4J3Q.js';export{h as FORMAT_VERSION,a as FormDefinitionError,j as checkDefinition,k as parseDefinition}from'./chunk-RN5GQHKN.js';export{l as evaluateCondition,e as getDefaultMessage}from'./chunk-35SAVPYL.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/internal.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { j as CloudCallbacks, k as CloudControllerOptions, l as CloudState, m as cloudStateFor, n as createCloudController, o as initialCloudState } from './controller-Ds_kbXSU.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { g as FormDefinition, k as LabelKey, l as LabelSource } from './definition-B4OIy_wH.js';
|
|
3
|
+
import { F as FormEngine } from './runtime-BN2PuKD7.js';
|
|
4
4
|
import './default-messages-yS4QtrYi.js';
|
|
5
5
|
import './validate-field-ND_UxoJU.js';
|
|
6
6
|
|
|
@@ -15,14 +15,29 @@ interface Focusable extends Searchable {
|
|
|
15
15
|
block?: 'center' | 'nearest';
|
|
16
16
|
}): void;
|
|
17
17
|
matches(selector: string): boolean;
|
|
18
|
+
closest?(selector: string): unknown;
|
|
19
|
+
}
|
|
20
|
+
interface FormRoot extends Focusable {
|
|
21
|
+
ownerDocument: {
|
|
22
|
+
activeElement: unknown;
|
|
23
|
+
body: unknown;
|
|
24
|
+
};
|
|
25
|
+
contains(node: never): boolean;
|
|
18
26
|
}
|
|
19
27
|
declare function focusProblem(root: Searchable | null, notice?: Focusable | null): void;
|
|
28
|
+
declare function canMoveFocus(form: FormRoot | null | undefined): boolean;
|
|
29
|
+
declare function restoreFocus(form: FormRoot | null | undefined, target: (Focusable & {
|
|
30
|
+
isConnected: boolean;
|
|
31
|
+
}) | null): void;
|
|
32
|
+
declare function focusField(form: FormRoot | null | undefined, formId: string, key: string | null, definition?: FormDefinition): void;
|
|
33
|
+
|
|
34
|
+
declare function fieldDomId(formId: string | undefined, key: string, definition?: FormDefinition): string;
|
|
20
35
|
|
|
21
36
|
declare function shouldApplyExternalErrors(engine: FormEngine, previous: Record<string, string> | undefined, next: Record<string, string>): boolean;
|
|
22
37
|
|
|
23
38
|
declare function labelFor(key: LabelKey, params: Record<string, unknown>, ...sources: (LabelSource | undefined)[]): string;
|
|
24
39
|
|
|
40
|
+
declare function conditionValues(engine: FormEngine): Record<string, unknown>;
|
|
25
41
|
declare function autoAdvance(engine: FormEngine): Promise<boolean>;
|
|
26
|
-
declare function fieldDomId(formId: string | undefined, key: string): string;
|
|
27
42
|
|
|
28
|
-
export { autoAdvance, fieldDomId, focusProblem, labelFor, shouldApplyExternalErrors };
|
|
43
|
+
export { autoAdvance, canMoveFocus, conditionValues, fieldDomId, focusField, focusProblem, labelFor, restoreFocus, shouldApplyExternalErrors };
|
package/dist/internal.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {f,i,j as j$1,g,d,e,a,c as c$2,b as b$1}from'./chunk-
|
|
1
|
+
import {f,i,j as j$1,g as g$1,d,e,a,c as c$2,b as b$1}from'./chunk-J5TQSLO3.js';import {u}from'./chunk-76YV4J3Q.js';import {c as c$1}from'./chunk-4UCHIIVE.js';import {c,g as g$2}from'./chunk-35SAVPYL.js';var W={multiselect:"list",checkbox:"flag",switch:"flag",number:"number",file:"file"};function b(e){return [...e.fields??[],...(e.steps??[]).flatMap(n=>n.fields)]}function w(e){return W[e.type]??"text"}function H(e,n){if(!Array.isArray(e.options))return true;let t=new Set(e.options.map(s=>String(s.value)));return (Array.isArray(n)?n:[n]).every(s=>t.has(String(s)))}function z(e,n,t){if(e&&w(e)!==w(n))return false;switch(w(n)){case "list":return Array.isArray(t);case "flag":return typeof t=="boolean";case "number":return typeof t=="number";case "text":return typeof t=="string";default:return e!==void 0}}function _(e,n,t){let s=new Map(t?b(t).map(o=>[o.key,o]):[]),i={};for(let o of b(n)){let l=e[o.key];l!=null&&z(s.get(o.key),o,l)&&H(o,l)&&(i[o.key]=l);}return i}function I(e,n){let t=new Set(b(e).map(o=>o.key)),s={},i=new Set;for(let[o,l]of Object.entries(n))t.has(o)?s[o]=l:i.add(l);return {fields:s,other:[...i]}}function q(e,n,t,s){let i={};for(let o of b(e)){let l=n[o.key]!==void 0&&n[o.key]!==null&&n[o.key]!=="";l&&!(o.key in t)?i[o.key]=b$1:s[o.key]&&(!l||o.key in t)&&(i[o.key]=s[o.key]);}return i}var F={definition:null,version:null,settings:{},loadError:null,errors:{},notice:null,initialValues:null,revision:0,attempt:0,done:false};function $(e){return e?{...F,definition:e.definition,version:e.version??null,settings:f(e.settings)}:F}function N(e,n=[]){return {tone:"error",message:e.message,action:e.action,details:n}}function J(e$1,n){let t=new AbortController,s,i$1=r=>{s??(s=r.renderToken);let c=s===r.renderToken?void 0:s;return i({...e$1,version:r.version,renderToken:r.renderToken,firstRenderToken:c})},o=i(e$1),l=e$1.initialForm,f$1=()=>!t.signal.aborted,u=F,m=r=>{u={...u,...r},n.onChange(u);},y=r=>m({...r,attempt:u.attempt+1});function x(r){o=i$1(r);let c=e$1.draftStore?.load(e$1.id,r.version)??null;m({...$(r),revision:u.revision,attempt:u.attempt,initialValues:c});}async function K(r,c){let a$1=u.definition;try{let d$1=await g$1(e$1,t.signal,r.version);if(!f$1())return;if(d$1.version===void 0||d$1.version<(r.version??0))throw new d(409,"form_updated");let p=a$1?_(c,d$1.definition,a$1):{};o=i$1(d$1),y({definition:d$1.definition,version:d$1.version,settings:f(d$1.settings),initialValues:p,revision:u.revision+1,errors:q(d$1.definition,c,p,r.errors??{}),notice:{tone:"info",message:a,action:null,details:[]}});}catch{f$1()&&y({notice:{tone:"error",...c$2(409,"form_updated"),details:[]}});}}async function U(r,c){let a=r instanceof d?r:e(r);if(a.code==="form_updated"&&a.version!==void 0)return K(a,c);if(a.status!==422)return y({notice:N(a)});let d$1=a.errors??{},p=u.definition?I(u.definition,d$1):{fields:d$1,other:[]};y({errors:p.fields,notice:p.other.length>0?N(a,p.other):null});}return {start(){if(u.loadError&&m({loadError:null}),l){x(l),l=void 0;return}g$1(e$1,t.signal).then(r=>{f$1()&&x(r);},r=>{f$1()&&(m({loadError:r}),n.onError?.(r));});},dispose(){t.abort();},saveDraft(r){u.definition&&!u.done&&e$1.draftStore?.save(e$1.id,u.version??void 0,j$1(u.definition,r));},again(){m({done:false,errors:{},notice:null,initialValues:null,revision:u.revision+1});},async submit(r,c){u.notice&&m({notice:null});try{let a=await o(r,c);if(!f$1())return;e$1.draftStore?.clear(e$1.id),m({done:!0}),n.onSuccess?.(a);}catch(a){throw f$1()&&(await U(a,r),n.onError?.(a)),a}}}}var g=e=>e.replace(/[^\w-]/g,"-"),j=new WeakMap;function Q(e){let n=2166136261;for(let t of e)n=Math.imul(n^t.codePointAt(0),16777619)>>>0;return n.toString(36)}function X(e){let n=j.get(e);if(n)return n;n=new Map;let t=new Set,s=[...new Set(g$2(e).map(i=>i.key))].sort((i,o)=>+(g(o)===o)-+(g(i)===i)||(i<o?-1:1));for(let i of s){let o=g(i);for(let l=i;t.has(o);l=o)o=`${g(i)}-${Q(l)}`;t.add(o),n.set(i,o);}return j.set(e,n),n}function C(e,n,t){return `${e?g(e):"fh"}-${(t&&X(t).get(n))??g(n)}`}var B='input:not([type="hidden"]):not(:disabled), select:not(:disabled), textarea:not(:disabled), button:not(:disabled)';function E(e){return e?.matches(B)?e:e?.querySelector(B)}function G(e,n){n.scrollIntoView?.({block:"center"}),e.focus({preventScroll:true});}function Y(e,n){if(n)return G(n,n);let t=e?.querySelector('[aria-invalid="true"]');t&&G(E(t)??t,t);}function Z(e){let n=e?.ownerDocument.activeElement;return !n||!e?.contains(n)?false:!n.isContentEditable&&!(n.matches("input, select, textarea")&&!["checkbox","radio"].includes(n.type))}function ee(e,n){let t=e?.ownerDocument;t&&t.activeElement===t.body&&n?.isConnected&&n.focus();}function ne(e,n,t,s){let i=e?.querySelector(".fh-form__fields"),o=t&&C(n,t,s),l=o?i?.querySelector(`[id="${o}"], [id="${o}-error"]`):null;if(o&&!l)return;let f=l?.closest?.(".fh-field")??l??i?.querySelector('[aria-invalid="true"]');(f?.querySelector("input:checked:not(:disabled)")??E(f)??E(i)??e)?.focus();}function te(e,n){let t=Object.keys(n);return t.length===Object.keys(e).length&&t.every(s=>e[s]===n[s])}function oe(e,n){return Object.entries(n).every(([t,s])=>e.errors[t]===s||e.topLevelErrors.includes(s))}function re(e,n,t){return !n||!te(n,t)||!oe(e,t)}function ie(e,n,...t){return c(c$1,e,n,t)}function Ce(e){let n=e;return n.visibility.conditionValues(n.values)}function Ee(e){return u(e,"next","autoAdvance")}export{Ee as autoAdvance,Z as canMoveFocus,$ as cloudStateFor,Ce as conditionValues,J as createCloudController,C as fieldDomId,ne as focusField,Y as focusProblem,F as initialCloudState,ie as labelFor,ee as restoreFocus,re as shouldApplyExternalErrors};//# sourceMappingURL=internal.js.map
|
|
2
2
|
//# sourceMappingURL=internal.js.map
|
package/dist/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cloud/carry.ts","../src/cloud/controller.ts","../src/cloud/focus.ts","../src/engine/external-errors.ts","../src/i18n/labels.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","labelFor","params","sources","resolveText","DEFAULT_LABELS","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","import type { LabelKey, LabelSource } from '../types';\nimport { resolveText } from '../validation/default-messages';\nimport { DEFAULT_LABELS } from './nodes';\n\nexport function labelFor(key: LabelKey, params: Record<string, unknown>, ...sources: (LabelSource | undefined)[]): string {\n return resolveText(DEFAULT_LABELS, key, params, sources);\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';\nexport { labelFor } from '../i18n/labels';\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/internal/ids.ts","../src/internal/focus.ts","../src/engine/external-errors.ts","../src/i18n/labels.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","clean","cache","hash","text","char","idsOf","ids","taken","keys","getAllFields","a","b","id","seed","fieldDomId","formId","CONTROLS","firstControl","root","reveal","target","scrollTo","focusProblem","notice","invalid","canMoveFocus","active","restoreFocus","document","focusField","chosen","sameErrors","holdsErrors","engine","shouldApplyExternalErrors","labelFor","params","sources","resolveText","DEFAULT_LABELS","conditionValues","internals","autoAdvance","changeStep"],"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","import { getAllFields } from '../engine/engine-utils';\nimport type { FormDefinition } from '../types';\n\nconst clean = (value: string) => value.replace(/[^\\w-]/g, '-');\nconst cache = new WeakMap<FormDefinition, Map<string, string>>();\n\nfunction hash(text: string): string {\n let value = 0x811c9dc5;\n for (const char of text) value = Math.imul(value ^ char.codePointAt(0)!, 0x01000193) >>> 0;\n return value.toString(36);\n}\n\nfunction idsOf(definition: FormDefinition): Map<string, string> {\n let ids = cache.get(definition);\n if (ids) return ids;\n ids = new Map();\n const taken = new Set<string>();\n const keys = [...new Set(getAllFields(definition).map((field) => field.key))]\n .sort((a, b) => +(clean(b) === b) - +(clean(a) === a) || (a < b ? -1 : 1));\n for (const key of keys) {\n let id = clean(key);\n for (let seed = key; taken.has(id); seed = id) id = `${clean(key)}-${hash(seed)}`;\n taken.add(id);\n ids.set(key, id);\n }\n cache.set(definition, ids);\n return ids;\n}\n\nexport function fieldDomId(formId: string | undefined, key: string, definition?: FormDefinition): string {\n return `${formId ? clean(formId) : 'fh'}-${(definition && idsOf(definition).get(key)) ?? clean(key)}`;\n}\n","import type { FormDefinition } from '../types';\nimport { fieldDomId } from './ids';\n\ninterface 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 closest?(selector: string): unknown;\n}\n\ninterface Active {\n matches(selector: string): boolean;\n isContentEditable?: boolean;\n type?: string;\n}\n\ninterface FormRoot extends Focusable {\n ownerDocument: { activeElement: unknown; body: unknown };\n contains(node: never): boolean;\n}\n\ntype Found = Focusable | null | undefined;\n\nconst CONTROLS = 'input:not([type=\"hidden\"]):not(:disabled), select:not(:disabled), textarea:not(:disabled), button:not(:disabled)';\n\nfunction firstControl(root: Found): Found {\n return root?.matches(CONTROLS) ? root : root?.querySelector(CONTROLS) as Found;\n}\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 Found;\n if (invalid) reveal(firstControl(invalid) ?? invalid, invalid);\n}\n\nexport function canMoveFocus(form: FormRoot | null | undefined): boolean {\n const active = form?.ownerDocument.activeElement as Active | null | undefined;\n if (!active || !form?.contains(active as never)) return false;\n return !active.isContentEditable && !(active.matches('input, select, textarea') && !['checkbox', 'radio'].includes(active.type!));\n}\n\nexport function restoreFocus(form: FormRoot | null | undefined, target: (Focusable & { isConnected: boolean }) | null): void {\n const document = form?.ownerDocument;\n if (document && document.activeElement === document.body && target?.isConnected) target.focus();\n}\n\nexport function focusField(form: FormRoot | null | undefined, formId: string, key: string | null, definition?: FormDefinition): void {\n const fields = form?.querySelector('.fh-form__fields') as Found;\n const id = key && fieldDomId(formId, key, definition);\n const chosen = id ? fields?.querySelector(`[id=\"${id}\"], [id=\"${id}-error\"]`) as Found : null;\n if (id && !chosen) return;\n const field = (chosen?.closest?.('.fh-field') ?? chosen ?? fields?.querySelector('[aria-invalid=\"true\"]')) as Found;\n const target = (field?.querySelector('input:checked:not(:disabled)') as Found) ?? firstControl(field) ?? firstControl(fields);\n (target ?? form)?.focus();\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","import type { LabelKey, LabelSource } from '../types';\nimport { resolveText } from '../validation/default-messages';\nimport { DEFAULT_LABELS } from './nodes';\n\nexport function labelFor(key: LabelKey, params: Record<string, unknown>, ...sources: (LabelSource | undefined)[]): string {\n return resolveText(DEFAULT_LABELS, key, params, sources);\n}\n","export { cloudStateFor, createCloudController, initialCloudState, type CloudCallbacks, type CloudControllerOptions, type CloudState } from '../cloud/controller';\nexport { canMoveFocus, focusField, focusProblem, restoreFocus } from './focus';\nexport { fieldDomId } from './ids';\nexport { shouldApplyExternalErrors } from '../engine/external-errors';\nexport { labelFor } from '../i18n/labels';\nimport type { FormEngine } from '../engine';\nimport { changeStep } from '../engine/navigation';\nimport type { EngineInternals } from '../engine/runtime-internals';\n\nexport function conditionValues(engine: FormEngine): Record<string, unknown> {\n const internals = engine as unknown as EngineInternals;\n return internals.visibility.conditionValues(internals.values);\n}\n\nexport function autoAdvance(engine: FormEngine): Promise<boolean> {\n return changeStep(engine as unknown as EngineInternals, 'next', 'autoAdvance');\n}\n"]}
|
|
@@ -38,6 +38,7 @@ declare class FormEngine<TValues extends object = Record<string, unknown>> {
|
|
|
38
38
|
private readonly skipped;
|
|
39
39
|
private validationEpoch;
|
|
40
40
|
private operationEpoch;
|
|
41
|
+
private latestOperation;
|
|
41
42
|
private readonly lifecycle;
|
|
42
43
|
private readonly validators;
|
|
43
44
|
private readonly messages;
|