@formhaus/core 0.13.1 → 0.14.0
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/{check-definition-DuLExofm.d.ts → check-definition-DyiWqhEV.d.ts} +3 -3
- package/dist/chunk-5WADJMJJ.js +2 -0
- package/dist/chunk-5WADJMJJ.js.map +1 -0
- package/dist/chunk-5YPOS62Y.js +3 -0
- package/dist/chunk-5YPOS62Y.js.map +1 -0
- package/dist/chunk-CW5ZWCSD.js +2 -0
- package/dist/chunk-CW5ZWCSD.js.map +1 -0
- package/dist/chunk-QMT7RJ4T.js +3 -0
- package/dist/chunk-QMT7RJ4T.js.map +1 -0
- package/dist/chunk-QVA6DLYS.js +2 -0
- package/dist/chunk-QVA6DLYS.js.map +1 -0
- package/dist/chunk-REIX6ART.js +2 -0
- package/dist/chunk-REIX6ART.js.map +1 -0
- package/dist/chunk-TMO47L42.js +5 -0
- package/dist/chunk-TMO47L42.js.map +1 -0
- package/dist/cloud.d.ts +3 -3
- package/dist/cloud.js +1 -1
- package/dist/{controller-Ds_kbXSU.d.ts → controller-BJVYkMHT.d.ts} +1 -1
- package/dist/default-messages-E-nZe4Tc.d.ts +10 -0
- package/dist/{definition-B4OIy_wH.d.ts → definition-o4Y0OY6y.d.ts} +53 -6
- package/dist/fix.d.ts +38 -0
- package/dist/fix.js +3 -0
- package/dist/fix.js.map +1 -0
- package/dist/i18n.d.ts +4 -3
- package/dist/i18n.js +1 -1
- package/dist/i18n.js.map +1 -1
- package/dist/{runtime-BN2PuKD7.d.ts → index-BNGgMIbC.d.ts} +20 -6
- package/dist/index.d.ts +67 -11
- package/dist/index.js +1 -1
- package/dist/internal.d.ts +28 -8
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/issues-Dua58e1J.d.ts +14 -0
- package/dist/server.d.ts +5 -5
- 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/dist/{validate-field-ND_UxoJU.d.ts → validate-field-CRR6GQBA.d.ts} +2 -2
- package/fixtures/submissions/choices.json +6 -26
- package/fixtures/submissions/groups.json +649 -0
- package/fixtures/submissions/messages.json +4 -16
- package/fixtures/submissions/show-conditions.json +2 -7
- package/fixtures/submissions/skip-routes.json +1 -3
- package/fixtures/submissions/skip.json +3 -9
- package/fixtures/submissions/special-types.json +2 -6
- package/package.json +10 -6
- package/schema/form-definition.schema.json +380 -19
- package/schema/form-translation.schema.json +79 -1
- package/style.css +103 -82
- package/dist/chunk-35SAVPYL.js +0 -2
- package/dist/chunk-35SAVPYL.js.map +0 -1
- package/dist/chunk-76YV4J3Q.js +0 -3
- package/dist/chunk-76YV4J3Q.js.map +0 -1
- package/dist/chunk-PBTYUSZR.js +0 -2
- package/dist/chunk-PBTYUSZR.js.map +0 -1
- package/dist/chunk-PZEBYRGE.js +0 -2
- package/dist/chunk-PZEBYRGE.js.map +0 -1
- package/dist/chunk-RN5GQHKN.js +0 -5
- package/dist/chunk-RN5GQHKN.js.map +0 -1
- package/dist/chunk-YTUVSJUF.js +0 -3
- package/dist/chunk-YTUVSJUF.js.map +0 -1
- package/dist/default-messages-yS4QtrYi.d.ts +0 -23
package/dist/fix.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/fix/patch.ts","../src/fix/names.ts","../src/fix/walk.ts","../src/fix/references.ts","../src/fix/rules.ts","../src/fix/suggest.ts"],"names":["UNSAFE","fail","problem","parsePointer","pointer","tokens","token","unsafe","isContainer","value","has","container","parentOf","root","last","node","replace","parent","remove","add","rest","name","item","index","copy","applyFix","definition","patch","operation","op","path","words","text","unique","base","taken","join","used","slug","fallback","camel","word","humanize","key","isEntry","list","strings","values","at","child","flatten","items","fields","step","keysOf","field","stepIds","valuesOf","options","option","references","found","visit","conditionValues","quoted","pattern","missingName","issue","suggestedName","fix","title","safe","set","quote","typoDistance","a","b","x","y","rows","_","i","j","cost","keysByStep","keys","grouped","parts","fieldScope","own","self","others","limit","entry","stepScope","from","repair","all","scope","near","candidate","typos","closest","referenceFixes","kind","stepStrings","loose","match","STEP","FIELD","OPTION","ACTION","ACTION_LABELS","rename","to","actionLabel","owner","label","catalog","missing","issues","target","typo","other","id","source","emptyLabel","unknownProperty","rules","move","duplicateKey","next","duplicateOption","duplicateStep","routed","closestTo","candidates","noun","unknownOperator","condition","CONDITION_OPERATORS","range","low","high","formatVersion","future","major","FORMAT_VERSION","fixesFor","BUILT_IN_TYPES","attempt","suggestFixes","checkDefinition","fixes","fixAll","current","applied","tried","round","code"],"mappings":"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","file":"fix.js","sourcesContent":["export type PatchOperation =\n | { op: 'add' | 'replace'; path: string; value: unknown }\n | { op: 'remove'; path: string }\n | { op: 'move'; from: string; path: string };\n\ntype Container = Record<string, unknown> | unknown[];\n\nconst UNSAFE = new Set(['__proto__', 'constructor', 'prototype']);\n\nfunction fail(problem: string): never {\n throw new Error(`Invalid patch: ${problem}`);\n}\n\nexport function parsePointer(pointer: string): string[] {\n if (typeof pointer !== 'string' || !pointer.startsWith('/')) fail(`${JSON.stringify(pointer)} is not a JSON pointer to a property`);\n const tokens = pointer\n .slice(1)\n .split('/')\n .map((token) => token.replace(/~1/g, '/').replace(/~0/g, '~'));\n const unsafe = tokens.find((token) => UNSAFE.has(token));\n if (unsafe !== undefined) fail(`\"${unsafe}\" is not allowed in ${pointer}`);\n return tokens;\n}\n\nconst isContainer = (value: unknown): value is Container => typeof value === 'object' && value !== null;\n\nfunction has(container: Container, token: string): boolean {\n return Array.isArray(container)\n ? /^(0|[1-9]\\d*)$/.test(token) && Number(token) < container.length\n : Object.prototype.hasOwnProperty.call(container, token);\n}\n\nfunction parentOf(root: unknown, pointer: string): [Container, string] {\n const tokens = parsePointer(pointer);\n const last = tokens.pop()!;\n let node = root;\n for (const token of tokens) {\n if (!isContainer(node) || !has(node, token)) fail(`${pointer} does not exist`);\n node = (node as Record<string, unknown>)[token];\n }\n if (!isContainer(node)) fail(`${pointer} does not exist`);\n return [node, last];\n}\n\nfunction replace(root: unknown, pointer: string, value: unknown): void {\n const [parent, token] = parentOf(root, pointer);\n if (!has(parent, token)) fail(`${pointer} does not exist`);\n (parent as Record<string, unknown>)[token] = value;\n}\n\nfunction remove(root: unknown, pointer: string): unknown {\n const [parent, token] = parentOf(root, pointer);\n if (!has(parent, token)) fail(`${pointer} does not exist`);\n if (Array.isArray(parent)) return parent.splice(Number(token), 1)[0];\n const value = parent[token];\n delete parent[token];\n return value;\n}\n\nfunction add(root: unknown, pointer: string, value: unknown): void {\n const [parent, token] = parentOf(root, pointer);\n if (!Array.isArray(parent)) {\n const lead = (token === 'id' || token === 'key') && !has(parent, token) && !has(parent, '__proto__');\n const rest = lead ? Object.entries(parent) : [];\n for (const [name] of rest) delete parent[name];\n parent[token] = value;\n for (const [name, item] of rest) parent[name] = item;\n return;\n }\n const index = token === '-' ? parent.length : /^(0|[1-9]\\d*)$/.test(token) ? Number(token) : -1;\n if (index < 0 || index > parent.length) fail(`${pointer} is not a valid array position`);\n parent.splice(index, 0, value);\n}\n\nconst copy = <T>(value: T): T => (value === undefined ? value : JSON.parse(JSON.stringify(value)));\n\nexport function applyFix<T>(definition: T, patch: readonly PatchOperation[]): T {\n if (!Array.isArray(patch)) fail('the patch must be an array of operations');\n const root = copy(definition);\n for (const operation of patch) {\n const { op, path } = operation ?? ({} as PatchOperation);\n if (op === 'add') add(root, path, copy(operation.value));\n else if (op === 'replace') replace(root, path, copy(operation.value));\n else if (op === 'remove') remove(root, path);\n else if (op === 'move') {\n if (typeof path !== 'string' || typeof operation.from !== 'string') fail('a move needs path and from pointers');\n if (path === operation.from || path.startsWith(`${operation.from}/`)) fail(`${path} is inside ${operation.from}`);\n add(root, path, remove(root, operation.from));\n } else fail(`${JSON.stringify(op)} is not a supported operation`);\n }\n return root;\n}\n","function words(text: string): string[] {\n return text\n .toLowerCase()\n .normalize('NFKD')\n .replace(/\\p{M}/gu, '')\n .replace(/['’]/g, '')\n .replace(/[^a-z0-9]+/g, ' ')\n .trim()\n .split(' ')\n .filter(Boolean);\n}\n\nexport function unique(base: string, taken: Iterable<string>, join = ''): string {\n const used = new Set(taken);\n let value = base;\n for (let index = 2; used.has(value); index++) value = `${base}${join}${index}`;\n return value;\n}\n\nexport const slug = (text: unknown, fallback: string) => (typeof text === 'string' && words(text).join('-')) || fallback;\n\nexport function camel(text: unknown, fallback: string): string {\n const base =\n typeof text === 'string'\n ? words(text)\n .map((word, index) => (index ? word[0].toUpperCase() + word.slice(1) : word))\n .join('')\n : '';\n if (!base) return fallback;\n return /^\\d/.test(base) ? `q${base}` : base;\n}\n\nexport function humanize(key: string): string {\n const text = key\n .replace(/([a-z\\d])([A-Z])/g, '$1 $2')\n .replace(/[_\\-.]+/g, ' ')\n .trim()\n .toLowerCase();\n return text ? text[0].toUpperCase() + text.slice(1) : key;\n}\n","import type { DefinitionIssue } from '../definition-validation/issues';\nimport { parsePointer, type PatchOperation } from './patch';\n\nexport interface DefinitionFix {\n title: string;\n safe: boolean;\n patch: PatchOperation[];\n}\n\nexport type Entry = Record<string, unknown>;\n\nexport const isEntry = (value: unknown): value is Entry => typeof value === 'object' && value !== null && !Array.isArray(value);\nexport const list = (value: unknown): unknown[] => (Array.isArray(value) ? value : []);\nexport const text = (value: unknown) => (typeof value === 'string' ? value : undefined);\nconst strings = (values: unknown[]) => values.filter((value): value is string => typeof value === 'string');\n\nexport function at(root: unknown, path: string): unknown {\n if (!path) return root;\n let node = root;\n for (const token of parsePointer(path)) node = isEntry(node) || Array.isArray(node) ? (node as Entry)[token] : undefined;\n return node;\n}\n\nexport const parent = (path: string) => path.slice(0, path.lastIndexOf('/'));\nexport const last = (path: string) => parsePointer(path).pop() ?? '';\nexport const child = (path: string, key: string) => `${path}/${key.replace(/~/g, '~0').replace(/\\//g, '~1')}`;\n\nfunction flatten(items: unknown): Entry[] {\n return list(items).flatMap((item) => (isEntry(item) ? [item, ...flatten(item.fields)] : []));\n}\n\nfunction fields(definition: Entry): Entry[] {\n return [...flatten(definition.fields), ...list(definition.steps).flatMap((step) => flatten(isEntry(step) ? step.fields : undefined))];\n}\n\nexport const keysOf = (definition: Entry) => strings(fields(definition).map((field) => field.key));\nexport const stepIds = (definition: Entry) => strings(list(definition.steps).map((step) => (isEntry(step) ? step.id : undefined)));\nexport const valuesOf = (options: unknown) => strings(list(options).map((option) => (isEntry(option) ? option.value : undefined)));\n\nexport function references(definition: Entry): Set<string> {\n const found = new Set<string>();\n const visit = (node: unknown, name?: string): void => {\n if (Array.isArray(node)) {\n for (const item of node) {\n if (name === 'optionsDependsOn' && typeof item === 'string') found.add(item);\n else if ((name === 'show' || name === 'showAny' || name === 'disabled') && isEntry(item) && typeof item.field === 'string')\n found.add(item.field);\n visit(item);\n }\n } else if (isEntry(node)) {\n if (typeof node.matchField === 'string') found.add(node.matchField);\n for (const [key, value] of Object.entries(node)) visit(value, key);\n }\n };\n visit(definition);\n return found;\n}\n\nexport function conditionValues(definition: Entry, key: string): unknown[] {\n const found: unknown[] = [];\n const visit = (node: unknown, name?: string): void => {\n if (Array.isArray(node)) {\n for (const item of node) {\n if ((name === 'show' || name === 'showAny' || name === 'disabled') && isEntry(item) && item.field === key) {\n found.push(item.eq, item.neq, ...list(item.in), ...list(item.notIn));\n }\n visit(item);\n }\n } else if (isEntry(node)) for (const [child, value] of Object.entries(node)) visit(value, child);\n };\n visit(definition);\n return found;\n}\n\nexport const quoted = (text: string | undefined, pattern: RegExp) => (text === undefined ? undefined : pattern.exec(text)?.[1]);\nexport const missingName = (issue: DefinitionIssue) => quoted(issue.message, /missing required property \"([^\"]+)\"/);\nexport const suggestedName = (issue: DefinitionIssue) => quoted(issue.hint, /^Did you mean \"([^\"]+)\"\\?$/);\n\nexport const fix = (title: string, safe: boolean, ...patch: PatchOperation[]): DefinitionFix => ({ title, safe, patch });\nexport const set = (path: string, value: unknown): PatchOperation => ({ op: 'add', path, value });\nexport const quote = (value: unknown) => JSON.stringify(value);\n","import { closest, type DefinitionIssue } from '../definition-validation/issues';\nimport { at, type DefinitionFix, type Entry, fix, isEntry, keysOf, list, quote, text } from './walk';\n\nexport function typoDistance(a: string, b: string): number {\n const x = a.toLowerCase();\n const y = b.toLowerCase();\n const rows = Array.from({ length: x.length + 1 }, (_, i) => Array.from({ length: y.length + 1 }, (_, j) => (i ? (j ? 0 : i) : j)));\n for (let i = 1; i <= x.length; i++) {\n for (let j = 1; j <= y.length; j++) {\n const cost = x[i - 1] === y[j - 1] ? 0 : 1;\n rows[i][j] = Math.min(rows[i - 1][j] + 1, rows[i][j - 1] + 1, rows[i - 1][j - 1] + cost);\n if (i > 1 && j > 1 && x[i - 1] === y[j - 2] && x[i - 2] === y[j - 1]) rows[i][j] = Math.min(rows[i][j], rows[i - 2][j - 2] + 1);\n }\n }\n return rows[x.length][y.length];\n}\n\ninterface Key {\n key: string;\n step: number;\n}\n\nfunction keysByStep(definition: Entry): Key[] {\n const keys = (fields: unknown, step: number): Key[] =>\n list(fields).flatMap((field) => {\n if (!isEntry(field) || field.type === 'group') return [];\n const own = field.type !== 'section' && typeof field.key === 'string' ? [{ key: field.key, step }] : [];\n return [...own, ...keys(field.fields, step)];\n });\n return [\n ...keys(definition.fields, -1),\n ...list(definition.steps).flatMap((step, index) => keys(isEntry(step) ? step.fields : undefined, index)),\n ];\n}\n\nfunction grouped(definition: Entry, path: string): boolean {\n const parts = path.split('/');\n return parts.some(\n (_, index) =>\n parts[index - 1] === 'fields' && (at(definition, parts.slice(0, index + 1).join('/')) as Entry | undefined)?.type === 'group',\n );\n}\n\nfunction fieldScope(definition: Entry, path: string): string[] {\n const keys = keysByStep(definition);\n const own = /^(.*\\/fields\\/\\d+)\\/(show|showAny|validation|optionsDependsOn)\\//.exec(path)?.[1];\n const self = own ? text((at(definition, own) as Entry | undefined)?.key) : undefined;\n const others = keys.filter(({ key }) => key !== self);\n const step = Number(/^\\/steps\\/(\\d+)/.exec(path)?.[1] ?? -1);\n if (step < 0 || !/\\/(show|showAny)\\/\\d+\\/field$/.test(path)) return others.map(({ key }) => key);\n const limit = own || /\\/routes\\//.test(path) ? step : step - 1;\n return others.filter((entry) => entry.step <= limit).map(({ key }) => key);\n}\n\nfunction stepScope(definition: Entry, path: string): string[] {\n const from = Number(/^\\/steps\\/(\\d+)/.exec(path)?.[1] ?? -1);\n return list(definition.steps).flatMap((step, index) => (index > from && isEntry(step) && typeof step.id === 'string' ? [step.id] : []));\n}\n\nfunction repair(value: string, all: string[], scope: string[]): { match?: string; safe: boolean } {\n const near = [...new Set(all)].filter((candidate) => candidate !== value && typoDistance(value, candidate) <= 2);\n const typos = near.filter((candidate) => typoDistance(value, candidate) <= 1);\n if (typos.length === 1 && near.length === 1 && scope.includes(typos[0])) return { match: typos[0], safe: true };\n return { match: closest(value, scope), safe: false };\n}\n\nexport function referenceFixes(definition: Entry, issue: DefinitionIssue, kind: 'field' | 'step'): DefinitionFix[] {\n const value = text(at(definition, issue.path));\n if (value === undefined) return [];\n const all = kind === 'field' ? keysOf(definition) : stepStrings(definition);\n const scope = kind === 'field' ? fieldScope(definition, issue.path) : stepScope(definition, issue.path);\n const loose = kind === 'field' && grouped(definition, issue.path);\n const { match, safe } = repair(value, all, loose ? all : scope);\n return match === undefined\n ? []\n : [fix(`Use the ${kind} ${quote(match)}`, safe && !loose, { op: 'replace', path: issue.path, value: match })];\n}\n\nconst stepStrings = (definition: Entry) =>\n list(definition.steps).flatMap((step) => (isEntry(step) && typeof step.id === 'string' ? [step.id] : []));\n","import { FORMAT_VERSION } from '../definition-validation/format';\nimport { closest, type DefinitionIssue } from '../definition-validation/issues';\nimport { BUILT_IN_TYPES } from '../validation/type-checks';\nimport { CONDITION_OPERATORS } from '../visibility/evaluate-condition';\nimport { camel, humanize, slug, unique } from './names';\nimport { referenceFixes } from './references';\nimport {\n at,\n child,\n conditionValues,\n type DefinitionFix,\n type Entry,\n fix,\n isEntry,\n keysOf,\n last,\n missingName,\n parent,\n quote,\n references,\n set,\n stepIds,\n suggestedName,\n text,\n valuesOf,\n} from './walk';\n\nconst STEP = /^\\/steps\\/\\d+$/;\nconst FIELD = /\\/fields\\/\\d+$/;\nconst OPTION = /\\/options\\/\\d+$/;\nconst ACTION = /^(\\/steps\\/\\d+)?\\/(submit|cancel|next|back|skip)$/;\nconst ACTION_LABELS: Record<string, string> = { submit: 'Submit', cancel: 'Cancel', next: 'Continue', back: 'Back', skip: 'Skip' };\n\nfunction rename(from: string, to: string): DefinitionFix {\n return fix(`Rename \"${last(from)}\" to \"${last(to)}\"`, true, { op: 'move', from, path: to });\n}\n\nfunction actionLabel(definition: Entry, owner: string): DefinitionFix[] {\n const name = last(owner);\n const label = ACTION_LABELS[name];\n const catalog = name === 'next' || name === 'back' ? definition.labels !== undefined || definition.lang !== undefined : name === 'cancel';\n return label ? [fix(`Set the label to ${quote(label)}`, !catalog, set(`${owner}/label`, label))] : [];\n}\n\nfunction missing(definition: Entry, issue: DefinitionIssue, issues: readonly DefinitionIssue[]): DefinitionFix[] {\n const name = missingName(issue);\n const owner = issue.path;\n const target = at(definition, owner);\n if (name === undefined || !isEntry(target)) return [];\n const path = child(owner, name);\n const typo = issues.find((other) => other.code === 'unknown-property' && parent(other.path) === owner && suggestedName(other) === name);\n if (typo) return [rename(typo.path, path)];\n if (name === 'submit' && owner === '') return [fix('Add a submit button labeled \"Submit\"', true, set(path, { label: 'Submit' }))];\n if (name === 'id' && (owner === '' || STEP.test(owner))) {\n const id = unique(slug(target.title, owner ? `step-${Number(last(owner)) + 1}` : 'my-form'), owner ? stepIds(definition) : [], '-');\n return [fix(`Set the id to ${quote(id)}`, true, set(path, id))];\n }\n if (name === 'fields' && STEP.test(owner)) return [fix('Add an empty \"fields\" list', true, set(path, []))];\n if (name === 'key' && FIELD.test(owner)) {\n const key = unique(camel(target.label, 'field'), keysOf(definition));\n return [fix(`Set the key to ${quote(key)}`, true, set(path, key))];\n }\n if (name === 'value' && OPTION.test(owner)) {\n const value = unique(slug(target.label, `option-${Number(last(owner)) + 1}`), valuesOf(at(definition, parent(owner))), '-');\n return [fix(`Set the value to ${quote(value)}`, true, set(path, value))];\n }\n if (name !== 'label') return [];\n if (ACTION.test(owner)) return actionLabel(definition, owner);\n const source = FIELD.test(owner) ? text(target.key) : OPTION.test(owner) ? text(target.value) : undefined;\n return source ? [fix(`Set the label to ${quote(humanize(source))}`, true, set(path, humanize(source)))] : [];\n}\n\nfunction emptyLabel(definition: Entry, { path }: DefinitionIssue): DefinitionFix[] {\n const key = text((at(definition, parent(path)) as Entry | undefined)?.key);\n return key ? [fix(`Set the label to ${quote(humanize(key))}`, true, set(path, humanize(key)))] : [];\n}\n\nfunction unknownProperty(definition: Entry, issue: DefinitionIssue): DefinitionFix[] {\n const owner = parent(issue.path);\n const name = last(issue.path);\n const match = suggestedName(issue);\n if (match !== undefined) return [rename(issue.path, child(owner, match))];\n if (!issue.hint?.startsWith('Move ')) return [];\n const rules = at(definition, `${owner}/validation`);\n if (rules !== undefined && (!isEntry(rules) || name in rules)) return [];\n const target = child(`${owner}/validation`, name);\n const move = { op: 'move' as const, from: issue.path, path: target };\n return [fix(`Move \"${name}\" into \"validation\"`, false, ...(rules === undefined ? [set(`${owner}/validation`, {}), move] : [move]))];\n}\n\nfunction duplicateKey(definition: Entry, { path }: DefinitionIssue): DefinitionFix[] {\n const key = text(at(definition, path));\n if (key === undefined) return [];\n const next = unique(key, keysOf(definition), '_');\n return [fix(`Rename the key to ${quote(next)}`, !references(definition).has(key), set(path, next))];\n}\n\nfunction duplicateOption(definition: Entry, { path }: DefinitionIssue): DefinitionFix[] {\n const value = text(at(definition, path));\n const options = parent(parent(path));\n const field = at(definition, parent(options));\n if (value === undefined || !isEntry(field)) return [];\n const next = unique(value, valuesOf(at(definition, options)), '_');\n const defaults = Array.isArray(field.defaultValue) ? field.defaultValue : [field.defaultValue];\n const used = defaults.includes(value) || (typeof field.key === 'string' && conditionValues(definition, field.key).includes(value));\n return [fix(`Change the value to ${quote(next)}`, !used, set(path, next))];\n}\n\nfunction duplicateStep(definition: Entry, { path }: DefinitionIssue): DefinitionFix[] {\n const id = text(at(definition, path));\n if (id === undefined) return [];\n const next = unique(id, stepIds(definition), '-');\n const routed = JSON.stringify(definition.steps).includes(`\"to\":${quote(id)}`);\n return [fix(`Rename the step id to ${quote(next)}`, !routed, set(path, next))];\n}\n\nfunction closestTo(definition: Entry, issue: DefinitionIssue, candidates: string[], noun: string): DefinitionFix[] {\n const value = text(at(definition, issue.path));\n const match = value === undefined ? undefined : closest(value, candidates);\n return match === undefined ? [] : [fix(`Use the ${noun} ${quote(match)}`, false, { op: 'replace', path: issue.path, value: match })];\n}\n\nfunction unknownOperator(definition: Entry, { path }: DefinitionIssue): DefinitionFix[] {\n const condition = at(definition, parent(path));\n const match = closest(last(path), [...CONDITION_OPERATORS]);\n if (match === undefined || !isEntry(condition) || match in condition) return [];\n return [{ ...rename(path, child(parent(path), match)), safe: false }];\n}\n\nfunction range(definition: Entry, { path }: DefinitionIssue): DefinitionFix[] {\n const rules = at(definition, parent(path));\n const low = last(path);\n const high = low === 'min' ? 'max' : 'maxLength';\n if (!isEntry(rules)) return [];\n const base = parent(path);\n return [fix(`Swap ${low} and ${high}`, false, set(`${base}/${low}`, rules[high]), set(`${base}/${high}`, rules[low]))];\n}\n\nfunction formatVersion(definition: Entry, future: boolean): DefinitionFix[] {\n const major = /^v?(\\d+)(\\.\\d+)*$/i.exec(String(definition.formatVersion))?.[1];\n const safe = !future && major !== undefined && Number(major) === parseInt(FORMAT_VERSION, 10);\n return [fix(`Set formatVersion to ${quote(FORMAT_VERSION)}`, safe, { op: 'replace', path: '/formatVersion', value: FORMAT_VERSION })];\n}\n\nexport function fixesFor(definition: Entry, issue: DefinitionIssue, issues: readonly DefinitionIssue[]): DefinitionFix[] {\n switch (issue.code) {\n case 'missing-property':\n return missing(definition, issue, issues);\n case 'unknown-property':\n return unknownProperty(definition, issue);\n case 'empty-label':\n return emptyLabel(definition, issue);\n case 'duplicate-key':\n return duplicateKey(definition, issue);\n case 'duplicate-option-value':\n return duplicateOption(definition, issue);\n case 'duplicate-step-id':\n return duplicateStep(definition, issue);\n case 'unknown-field':\n return referenceFixes(definition, issue, 'field');\n case 'route-target':\n return referenceFixes(definition, issue, 'step');\n case 'unknown-field-type':\n return closestTo(definition, issue, BUILT_IN_TYPES, 'type');\n case 'unknown-operator':\n return unknownOperator(definition, issue);\n case 'invalid-range':\n return range(definition, issue);\n case 'unsupported-format-version':\n return formatVersion(definition, true);\n case 'invalid-type':\n return issue.path === '/formatVersion' ? formatVersion(definition, false) : [];\n default:\n return [];\n }\n}\n","import { checkDefinition } from '../definition-validation/check-definition';\nimport type { DefinitionIssue } from '../definition-validation/issues';\nimport { applyFix } from './patch';\nimport { fixesFor } from './rules';\nimport { type DefinitionFix, isEntry } from './walk';\n\nexport type { DefinitionFix } from './walk';\n\nexport interface FixableIssue extends DefinitionIssue {\n fixes?: DefinitionFix[];\n}\n\nexport interface AppliedFix extends DefinitionFix {\n code: DefinitionIssue['code'];\n path: string;\n}\n\nexport interface FixAllResult<T> {\n definition: T;\n applied: AppliedFix[];\n issues: FixableIssue[];\n}\n\nfunction attempt(definition: Record<string, unknown>, issue: DefinitionIssue, issues: readonly DefinitionIssue[]): DefinitionFix[] {\n try {\n return fixesFor(definition, issue, issues);\n } catch {\n return [];\n }\n}\n\nexport function suggestFixes(definition: unknown, issues?: readonly DefinitionIssue[]): FixableIssue[] {\n const found = issues ?? checkDefinition(definition);\n if (!isEntry(definition)) return found.map((issue) => ({ ...issue }));\n return found.map((issue) => {\n const fixes = attempt(definition, issue, found);\n return fixes.length ? { ...issue, fixes } : { ...issue };\n });\n}\n\nexport function fixAll<T>(definition: T, limit = 500): FixAllResult<T> {\n let current = definition;\n const applied: AppliedFix[] = [];\n const tried = new Set<string>();\n for (let round = 0; round < limit; round++) {\n const next = suggestFixes(current)\n .flatMap(({ code, path, fixes = [] }) => fixes.map((item) => ({ ...item, code, path })))\n .find((item) => item.safe && !tried.has(JSON.stringify(item.patch)));\n if (!next) break;\n tried.add(JSON.stringify(next.patch));\n try {\n current = applyFix(current, next.patch);\n applied.push(next);\n } catch {}\n }\n return { definition: current, applied, issues: suggestFixes(current) };\n}\n"]}
|
package/dist/i18n.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { M as MessageSource
|
|
3
|
-
export {
|
|
1
|
+
import { l as FormDefinition, r as LabelSource, q as LabelKey } from './definition-o4Y0OY6y.js';
|
|
2
|
+
import { M as MessageSource } from './default-messages-E-nZe4Tc.js';
|
|
3
|
+
export { D as defaultMessages } from './default-messages-E-nZe4Tc.js';
|
|
4
|
+
import { D as DefinitionIssue } from './issues-Dua58e1J.js';
|
|
4
5
|
|
|
5
6
|
type Overlay = {
|
|
6
7
|
[key: string]: string | Overlay;
|
package/dist/i18n.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {a,b as b$1,c}from'./chunk-REIX6ART.js';export{c as defaultLabels}from'./chunk-REIX6ART.js';import {i,l,e,a as a$1,b,d,c as c$1,f}from'./chunk-TMO47L42.js';import {b as b$2}from'./chunk-QVA6DLYS.js';import {n,o,D,C,q as q$1,k,p}from'./chunk-5WADJMJJ.js';export{C as defaultMessages}from'./chunk-5WADJMJJ.js';function W({definition:e,entries:t,nodes:n}){let r=[],l=[],c$2=false,a$1=(o,p,m,u,w)=>{for(let N of Object.keys(o??{}))m.includes(N)||r.push(c$1(u,`${p}/${d(N)}`,`"${N}" is not ${w}`,m.length?f(m):"Remove it"));},f$1=(o,p,m,u)=>{o&&(u&&l.push([`${p}/${u}`,o[u]]),o.i18n&&(c$2=true,a$1(o.i18n,`${p}/i18n`,[...m],"unknown-i18n-slot","a translatable text here")));},s=Object.keys(C),i=Object.keys(c);a$1(e.messages,"/messages",s,"unknown-message-key","a message key"),a$1(e.labels,"/labels",i,"unknown-label-key","a label key"),a$1(e.i18n?.messages,"/i18n/messages",s,"unknown-message-key","a message key"),a$1(e.i18n?.labels,"/i18n/labels",i,"unknown-label-key","a label key"),f$1(e,"",[...a.form,"messages","labels"],"id"),f$1(e.submit,"/submit",a.action),f$1(e.cancel,"/cancel",a.action),(e.steps??[]).forEach((o,p)=>{f$1(o,`/steps/${p}`,a.step,"id");for(let m of ["next","back","skip"])f$1(o[m],`/steps/${p}/${m}`,a.action);});for(let{field:o,path:p}of t){f$1(o,p,o.type==="group"?a.group:a.field,"key"),o.options?.forEach((u,w)=>{f$1(u,`${p}/options/${w}`,a.option,"value");});let m=o.validation;m&&f$1(m,`${p}/validation`,a.validation.filter(u=>b$1(m,u)));}for(let o of n)o.node.type==="section"&&f$1(o.node,o.path,a.section,"key");if(c$2)for(let[o,p]of l)typeof p=="string"&&/[.:]/.test(p)&&r.push(c$1("i18n-unsafe-identifier",o,`${JSON.stringify(p)} contains "." or ":"`,'Use letters, digits, "-" or "_", because translation keys and TMS imports split on these characters'));return r}function T(e){let t=[],n=(a,f,s,i,o)=>{f&&t.push({kind:a,node:f,path:s,address:i,field:o});},r=(a,f,s,i)=>{for(let o of i)n("action",a[o],`${f}/${o}`,[...s,o]);},l=(a,f,s)=>a.forEach((i,o)=>{let p$1=`${f}/fields/${o}`;if(p(i)){n("section",i,p$1,[...s,"sections",i.key]),l(i.fields,p$1,s);return}let m=[...s,"fields",i.key];n(q$1(i)?"group":"field",i,p$1,m),i.options?.forEach((u,w)=>{n("option",u,`${p$1}/options/${w}`,[...m,"options",u.value]);}),n("validation",i.validation,`${p$1}/validation`,[...m,"validation"],i),q$1(i)&&l(i.fields,p$1,m);});n("form",e,"",[]),r(e,"",[],["submit","cancel"]);let c=e.steps??[];return c.forEach((a,f)=>{let s=`/steps/${f}`,i=["steps",a.id];n("step",a,s,i),r(a,s,i,["next","back","skip"]),l(a.fields,s,i);}),c.length||l(e.fields??[],"",[]),t}function q(e,t,n){return e==="option"?t:[...t,n]}var ee={...a,validation:[]};function $(e,t,n$1,r=[]){return e===void 0?[]:n(e)?Object.entries(e).flatMap(([l,c])=>r.includes(l)?$(c,`${t}/${l}`,n$1):typeof c=="string"&&c.trim()?[]:[b("invalid-type",`${t}/${d(l)}`,"must be a non-empty string")]):[b("invalid-type",t,`must be an object of ${n$1}`)]}function te(e){let t=e;return [...t.lang===void 0||typeof t.lang=="string"?[]:[b("invalid-type","/lang",'"lang" must be a string')],...$(t.messages,"/messages","message templates"),...$(t.labels,"/labels","label templates"),...T(e).flatMap(({kind:n$1,node:r,path:l})=>{let c=r.i18n,a=n(c)?ee[n$1].filter(f=>c[f]!==void 0&&typeof r[f]!="string"):[];return [...$(c,`${l}/i18n`,"translation keys",n$1==="form"?["messages","labels"]:[]),...a.map(f=>b("i18n-unbound-slot",`${l}/i18n/${f}`,`"${f}" has a translation key but no source text`,`Add "${f}" as the fallback text`))]})]}function I(e){let t=te(e);return t.length?t:W(i(e))}function x(e,t){let n$1=e;for(let r of t)n$1=n(n$1)&&o(n$1,r)?n$1[r]:void 0;return typeof n$1=="string"&&n$1.trim()?n$1:void 0}function H(e,t,n){Object.defineProperty(e,t,{value:n,enumerable:true,writable:true,configurable:true});}function X(e,t,n$1){let r=e;for(let l of t.slice(0,-1))(!o(r,l)||!n(r[l]))&&H(r,l,{}),r=r[l];H(r,t[t.length-1],n$1);}function K(e,t=[]){return n(e)?Object.keys(e).flatMap(n=>K(e[n],[...t,n])):[{path:t,value:e}]}var j=e=>JSON.stringify(e),O=e=>[...new Set(e.match(/\{\w+\}/g)??[])].map(t=>t.slice(1,-1)).sort();var Q={minLength:"min",maxLength:"max",min:"min",max:"max"};function Y(e,t){return (e.type==="multiselect"||e.type==="group")&&t.endsWith("Length")?t.replace("Length","Items"):t}function ne(e){let t=new Set([...Object.keys(e.messages??{}),...Object.keys(e.i18n?.messages??{})]);for(let n of b$2(e).flatMap(r=>q$1(r)?[r,...r.fields]:[r])){let r=n.validation??{};for(let l of a.validation)b$1(r,l)&&typeof r[l==="required"?l:`${l}Message`]!="string"&&t.add(Y(n,l));for(let l of k(n))t.add(l);}return t}function se(e,{kind:t,node:n,address:r,field:l}){let c=n.i18n??{};return a[t].flatMap(a=>{if(t!=="validation"){let m=n[a];return typeof m!="string"?[]:[{kind:"text",address:q(t,r,a),key:c[a],source:m,fallback:m,params:{},template:true,apply:u=>{n[a]=u;}}]}if(!b$1(n,a)||!l)return [];let f=a==="required"?a:`${a}Message`,s=typeof n[f]=="string"?n[f]:void 0,i=Q[a]?{[Q[a]]:n[a]}:{},o=Y(l,a),p=s??D(e.messages?.[o]??C[o],i);return [{kind:"rule",address:[...r,a],key:c[a],source:s,fallback:p,params:i,template:s!==void 0||!!c[a],apply:m=>{n[f]=m;}}]})}function V(e,t,n){let r=t==="messages"?C:c,l=e.i18n?.[t]??{};return Object.keys(r).map(c=>{let a=e[t]?.[c]??r[c];return {kind:t==="messages"?"message":"label",address:[t,c],key:l[c],source:a,fallback:a,params:{},template:n.has(c),apply:f=>{(e[t]??(e[t]={}))[c]=f;}}})}function S(e){let t=!!e.steps?.length,n=new Set(t?["continue","back","stepOf","errorSummary"]:["errorSummary"]);if(b$2(e).some(q$1))for(let r of ["addItem","removeItem","itemLabel","itemAdded","itemRemoved","removeItemNamed","removeItemPrompt","removeItemBody","cancel"])n.add(r);return [...T(e).flatMap(r=>se(e,r)),...V(e,"messages",ne(e)),...V(e,"labels",n)]}function R(e,t,n){if(t!==void 0)return t;if(e!==false)return (e?[e,...n]:n).join(".")}function re(e,t){for(let n of S(e)){let r=x(t,n.address);r!==void 0&&n.apply(n.kind==="rule"?D(r,n.params):r);}return {definition:e,messages:e.messages??{},labels:e.labels??{}}}function oe(e,{translate:t,prefix:n=e.id}){let r=(s,i,o,p)=>{let m=R(n,s,i),u;try{u=m===void 0?void 0:t(m,o,p);}catch{return}return typeof u=="string"&&u.trim()&&u!==m?D(u,o):void 0},l={messages:{...e.messages},labels:{...e.labels}},c$1=e.i18n??{};for(let s of S(e)){if(s.kind!=="text"&&s.kind!=="rule")continue;let i=r(s.key,s.address,s.params,s.fallback);i!==void 0&&(s.source!==void 0||i!==s.fallback)&&s.apply(i);}return {definition:e,messages:(s,i)=>r(c$1.messages?.[s],["messages",s],i,D(l.messages[s]??C[s],i)),labels:(s,i)=>r(c$1.labels?.[s],["labels",s],i,D(l.labels[s]??c[s],i))}}function ie(e$1,t){let n=I(l(e$1)).filter(e);if(n.length)throw new a$1(n);let r=JSON.parse(JSON.stringify(e$1));return t.lang&&(r.lang=t.lang),"overlay"in t?re(r,t.overlay):oe(r,t)}function ae(e,t){let n=2166136261;for(let r of `${e??""}\0${t}`)n=Math.imul(n^r.codePointAt(0),16777619)>>>0;return n.toString(16).padStart(8,"0")}var Z=e=>S(e).filter(t=>t.template);function z(e,t){let n=R(t,e.key,e.address),r=e.source??e.fallback,l=e.kind==="rule"?Object.keys(e.params):O(r);return {address:e.address.join("."),...n!==void 0&&{key:n},text:r,params:l,hash:ae(n,r)}}function le(e,{prefix:t=e.id}={}){return Z(e).map(n=>z(n,t))}function fe(e){let t={};for(let n of Z(e))X(t,n.address,n.source??n.fallback);return t}var E=e=>e.join(".");function ce(e,t){let n=O(t);return e.kind==="rule"?n.some(r=>!o(e.params,r)):n.join()!==O(e.source??e.fallback).join()}function pe(e,t,n$1){let r=S(e),l=new Set(r.map(s=>j(s.address))),c=n(t)?K(t):[{path:[],value:null}],a=r.filter(s=>x(t,s.address)!==void 0),f={missing:r.filter(s=>s.template&&x(t,s.address)===void 0).map(s=>E(s.address)),unknown:c.filter(({path:s,value:i})=>typeof i=="string"&&!l.has(j(s))).map(({path:s})=>E(s)),invalid:c.filter(({value:s})=>typeof s!="string").map(({path:s})=>E(s)),placeholderMismatch:a.filter(s=>ce(s,x(t,s.address))).map(s=>E(s.address)),unlabeled:T(e).filter(({kind:s,node:i,address:o})=>(s==="field"||s==="group")&&!(typeof i.label=="string"&&i.label.trim())&&x(t,[...o,"label"])===void 0).map(({address:s})=>E([...s,"label"]))};if(n$1?.slots){let s=n$1.slots,i=o$1=>o(s,o$1);f.stale=a.filter(o=>o.template).map(o=>z(o,n$1.prefix??e.id)).filter(({address:o,hash:p})=>i(o)&&s[o]?.hash!==void 0&&s[o].hash!==p).map(({address:o})=>o);}return f}export{I as checkTranslations,ie as localize,le as textSlots,pe as translationIssues,fe as translationTemplate};//# sourceMappingURL=i18n.js.map
|
|
2
2
|
//# sourceMappingURL=i18n.js.map
|
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/walk.ts","../src/i18n/check.ts","../src/i18n/overlay.ts","../src/i18n/slots.ts","../src/i18n/localize.ts","../src/i18n/template.ts","../src/i18n/issues.ts"],"names":["i18nWarnings","definition","entries","nodes","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","entry","textNodes","list","add","kind","address","actions","owner","names","fields","items","at","isSection","isGroup","position","steps","slotAddress","slot","TEXTS","strings","nested","isEntry","item","error","translationErrors","root","unbound","checkTranslations","errors","createContext","lookup","overlay","hasOwn","define","target","assign","leaves","addressKey","placeholders","text","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","own"],"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, nodes }: 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))\n 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, field.type === 'group' ? SLOTS.group : SLOTS.field, 'key');\n field.options?.forEach((option, index) => {\n node(option as unknown as Node, `${path}/options/${index}`, SLOTS.option, 'value');\n });\n const rules = field.validation as Node;\n if (rules)\n node(\n rules,\n `${path}/validation`,\n SLOTS.validation.filter((rule) => hasRule(rules, rule)),\n );\n }\n for (const entry of nodes) if (entry.node.type === 'section') node(entry.node as unknown as Node, entry.path, SLOTS.section, 'key');\n if (keyed) {\n for (const [path, id] of ids) {\n if (typeof id === 'string' && /[.:]/.test(id))\n issues.push(\n warning(\n 'i18n-unsafe-identifier',\n path,\n `${JSON.stringify(id)} contains \".\" or \":\"`,\n 'Use letters, digits, \"-\" or \"_\", because translation keys and TMS imports split on these characters',\n ),\n );\n }\n }\n return issues;\n}\n","import type { FormDefinition, FormField, FormNode } from '../types';\nimport { isGroup, isSection } from '../visibility/nodes';\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: FormNode[], path: string, address: string[]) =>\n items.forEach((field, index) => {\n const at = `${path}/fields/${index}`;\n if (isSection(field)) {\n add('section', field, at, [...address, 'sections', field.key]);\n fields(field.fields, at, address);\n return;\n }\n const key = [...address, 'fields', field.key];\n add(isGroup(field) ? 'group' : 'field', field, at, key);\n (field as FormField).options?.forEach((option, position) => {\n add('option', option, `${at}/options/${position}`, [...key, 'options', option.value]);\n });\n add('validation', field.validation, `${at}/validation`, [...key, 'validation'], field);\n if (isGroup(field)) fields(field.fields, at, key);\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 { SLOTS, type NodeKind } from './nodes';\nimport { isEntry } from '../visibility/nodes';\nimport { textNodes } from './walk';\n\nconst TEXTS: Record<NodeKind, readonly string[]> = { ...SLOTS, 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]) =>\n nested.includes(key)\n ? strings(item, `${path}/${key}`, what)\n : typeof item === 'string' && item.trim()\n ? []\n : [error('invalid-type', `${path}/${pointer(key)}`, 'must be a non-empty string')],\n );\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) =>\n error(\n 'i18n-unbound-slot',\n `${path}/i18n/${slot}`,\n `\"${slot}\" has a translation key but no source text`,\n `Add \"${slot}\" as the fallback text`,\n ),\n ),\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 { hasOwn, isEntry } from '../visibility/nodes';\nexport type Overlay = { [key: string]: string | Overlay };\n\nexport function lookup(overlay: unknown, path: string[]): string | undefined {\n let node = overlay;\n for (const key of path) node = isEntry(node) && hasOwn(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 (!hasOwn(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 { getAllFields } from '../engine/engine-utils';\nimport { isGroup } from '../visibility/nodes';\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 (\n (field.type === 'multiselect' || field.type === 'group') && rule.endsWith('Length') ? rule.replace('Length', 'Items') : rule\n ) 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).flatMap((field) => (isGroup(field) ? [field, ...field.fields] : [field]))) {\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 [\n {\n kind: 'text',\n address: slotAddress(kind, address, slot),\n key: keys[slot],\n source,\n fallback: source,\n params: {},\n template: true,\n apply: (text) => {\n node[slot] = text;\n },\n },\n ];\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 [\n {\n kind: 'rule',\n address: [...address, slot],\n key: keys[slot],\n source: literal,\n fallback,\n params,\n template: literal !== undefined || !!keys[slot],\n apply: (text) => {\n node[literalName] = text;\n },\n },\n ];\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',\n address: [name, item],\n key: keys[item],\n source,\n fallback: source,\n params: {},\n template: used.has(item),\n apply: (text: string) => {\n ((definition[name] ??= {}) as Record<string, string>)[item] = text;\n },\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 if (getAllFields(definition).some(isGroup))\n for (const key of [\n 'addItem',\n 'removeItem',\n 'itemLabel',\n 'itemAdded',\n 'itemRemoved',\n 'removeItemNamed',\n 'removeItemPrompt',\n 'removeItemBody',\n 'cancel',\n ] as const)\n labels.add(key);\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 const labels: LabelFn = (key, params) =>\n ask(keys.labels?.[key], ['labels', key], params, formatText(source.labels[key] ?? DEFAULT_LABELS[key], params));\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 { hasOwn, isEntry } from '../visibility/nodes';\nimport type { FormDefinition } from '../types';\nimport { textNodes } from './walk';\nimport { addressKey, 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) => !hasOwn(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(\n ({ kind, node, address }) =>\n (kind === 'field' || kind === 'group') &&\n !(typeof node.label === 'string' && node.label.trim()) &&\n lookup(overlay, [...address, 'label']) === undefined,\n )\n .map(({ address }) => dotted([...address, 'label'])),\n };\n if (meta?.slots) {\n const baseline = meta.slots;\n const own = (address: string) => hasOwn(baseline, address);\n result.stale = translated\n .filter((slot) => slot.template)\n .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,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { d as FormField, F as FormGroup, l as FormDefinition, c as FormStep, b as FormNode, i as FieldSourceName } from './definition-o4Y0OY6y.js';
|
|
2
|
+
import { D as DefinitionIssue } from './issues-Dua58e1J.js';
|
|
3
|
+
import { M as MessageSource } from './default-messages-E-nZe4Tc.js';
|
|
4
|
+
import { V as ValidatorFn } from './validate-field-CRR6GQBA.js';
|
|
4
5
|
|
|
5
6
|
type StepValidateFn = (stepId: string, values: Record<string, unknown>) => Promise<Record<string, string> | null | void>;
|
|
6
7
|
interface StepChangeContext {
|
|
@@ -32,6 +33,12 @@ interface FormEngineOptions {
|
|
|
32
33
|
onWarning?: (issue: DefinitionIssue) => void;
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
interface GroupItem {
|
|
37
|
+
id: string;
|
|
38
|
+
fields: FormField[];
|
|
39
|
+
}
|
|
40
|
+
declare function itemLimits(group: FormGroup): [number, number];
|
|
41
|
+
|
|
35
42
|
declare class FormEngine<TValues extends object = Record<string, unknown>> {
|
|
36
43
|
readonly definition: FormDefinition;
|
|
37
44
|
private readonly state;
|
|
@@ -42,7 +49,6 @@ declare class FormEngine<TValues extends object = Record<string, unknown>> {
|
|
|
42
49
|
private readonly lifecycle;
|
|
43
50
|
private readonly validators;
|
|
44
51
|
private readonly messages;
|
|
45
|
-
private get onStepValidate();
|
|
46
52
|
private readonly visibility;
|
|
47
53
|
private readonly subscriptions;
|
|
48
54
|
constructor(definition: FormDefinition, initialValues?: Partial<NoInfer<TValues>>, options?: FormEngineOptions);
|
|
@@ -57,6 +63,7 @@ declare class FormEngine<TValues extends object = Record<string, unknown>> {
|
|
|
57
63
|
get visibleSteps(): FormStep[];
|
|
58
64
|
get currentStep(): FormStep | null;
|
|
59
65
|
get visibleFields(): FormField[];
|
|
66
|
+
get visibleNodes(): FormNode[];
|
|
60
67
|
get isFirstStep(): boolean;
|
|
61
68
|
get isLastStep(): boolean;
|
|
62
69
|
get canGoNext(): boolean;
|
|
@@ -72,6 +79,10 @@ declare class FormEngine<TValues extends object = Record<string, unknown>> {
|
|
|
72
79
|
subscribeStructure(listener: () => void): () => void;
|
|
73
80
|
getStructureSnapshot(): number;
|
|
74
81
|
setValue(key: string, value: unknown): void;
|
|
82
|
+
items(key: string): GroupItem[];
|
|
83
|
+
addItem(key: string): boolean;
|
|
84
|
+
removeItem(key: string, index: number): boolean;
|
|
85
|
+
setItemValue(key: string, index: number, field: string, value: unknown): void;
|
|
75
86
|
setErrors(errors: Record<string, string>): void;
|
|
76
87
|
setFieldLoading(key: string, loading: boolean): void;
|
|
77
88
|
cancelPendingActions(): void;
|
|
@@ -85,9 +96,12 @@ declare class FormEngine<TValues extends object = Record<string, unknown>> {
|
|
|
85
96
|
getSubmitValues(): Partial<TValues>;
|
|
86
97
|
goToStepWithField(key: string): void;
|
|
87
98
|
reset(values?: Record<string, unknown>): void;
|
|
99
|
+
private advance;
|
|
88
100
|
private get view();
|
|
89
|
-
private get internals();
|
|
90
101
|
private notify;
|
|
91
102
|
}
|
|
92
103
|
|
|
93
|
-
|
|
104
|
+
type SourceContext = Partial<Record<Exclude<FieldSourceName, 'page'> | 'search' | 'href', string>>;
|
|
105
|
+
declare function resolveSources(definition: FormDefinition, context: SourceContext, initialValues?: Record<string, unknown>): Record<string, string>;
|
|
106
|
+
|
|
107
|
+
export { type AfterStepChangeFn as A, type BeforeStepChangeFn as B, FormEngine as F, type GroupItem as G, type SourceContext as S, type BeforeSubmitFn as a, type FormEngineOptions as b, type StepChangeContext as c, type StepValidateFn as d, type SubmitFn as e, type SubmitHandler as f, type SubmitResult as g, itemLimits as i, resolveSources as r };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { F as
|
|
2
|
-
export { D as DefaultFieldType,
|
|
3
|
-
export { A as AfterStepChangeFn, B as BeforeStepChangeFn, a as BeforeSubmitFn, F as FormEngine, b as FormEngineOptions, S as
|
|
4
|
-
import { M as MessageSource } from './default-messages-
|
|
5
|
-
export {
|
|
6
|
-
import { V as ValidatorFn } from './validate-field-
|
|
7
|
-
export { v as validateFieldValue } from './validate-field-
|
|
8
|
-
export { C as CheckDefinitionOptions, c as checkDefinition, p as parseDefinition } from './check-definition-
|
|
1
|
+
import { F as FormGroup, a as FormSection, b as FormNode, c as FormStep, S as ShowCondition, d as FormField, e as FormAction } from './definition-o4Y0OY6y.js';
|
|
2
|
+
export { D as DefaultFieldType, f as FieldI18n, g as FieldOption, h as FieldSource, i as FieldSourceName, j as FieldType, k as FieldValidation, l as FormDefinition, m as FormI18n, G as GroupI18n, n as GroupValidation, L as LabelCatalog, o as LabelFn, p as LabelI18n, q as LabelKey, r as LabelSource, M as MessageCatalog, s as MessageKey, t as StepI18n, u as StepRoute, V as ValidationI18n } from './definition-o4Y0OY6y.js';
|
|
3
|
+
export { A as AfterStepChangeFn, B as BeforeStepChangeFn, a as BeforeSubmitFn, F as FormEngine, b as FormEngineOptions, G as GroupItem, S as SourceContext, c as StepChangeContext, d as StepValidateFn, e as SubmitFn, f as SubmitHandler, g as SubmitResult, r as resolveSources } from './index-BNGgMIbC.js';
|
|
4
|
+
import { M as MessageSource } from './default-messages-E-nZe4Tc.js';
|
|
5
|
+
export { a as MessageFn, b as MessageParams, V as ValidationRule, g as getDefaultMessage } from './default-messages-E-nZe4Tc.js';
|
|
6
|
+
import { V as ValidatorFn } from './validate-field-CRR6GQBA.js';
|
|
7
|
+
export { v as validateFieldValue } from './validate-field-CRR6GQBA.js';
|
|
8
|
+
export { C as CheckDefinitionOptions, c as checkDefinition, p as parseDefinition } from './check-definition-DyiWqhEV.js';
|
|
9
|
+
export { D as DefinitionIssue, a as DefinitionIssueCode, F as FormDefinitionError } from './issues-Dua58e1J.js';
|
|
9
10
|
|
|
10
11
|
type FormAnalyticsEvent = {
|
|
11
12
|
type: 'step_viewed';
|
|
@@ -33,12 +34,60 @@ type FormAnalyticsEvent = {
|
|
|
33
34
|
fieldCount: number;
|
|
34
35
|
};
|
|
35
36
|
|
|
37
|
+
interface SectionView {
|
|
38
|
+
id: string;
|
|
39
|
+
section: FormSection;
|
|
40
|
+
title: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
descriptionId?: string;
|
|
43
|
+
}
|
|
44
|
+
interface GroupItemView {
|
|
45
|
+
id: string;
|
|
46
|
+
index: number;
|
|
47
|
+
title: string;
|
|
48
|
+
titleId: string;
|
|
49
|
+
canRemove: boolean;
|
|
50
|
+
remove: () => void;
|
|
51
|
+
requestRemove: () => void;
|
|
52
|
+
hasContent: boolean;
|
|
53
|
+
removeLabel: string;
|
|
54
|
+
removeName: string;
|
|
55
|
+
disabled?: boolean;
|
|
56
|
+
}
|
|
57
|
+
interface ConfirmDialogView {
|
|
58
|
+
id: string;
|
|
59
|
+
open: boolean;
|
|
60
|
+
title: string;
|
|
61
|
+
description: string;
|
|
62
|
+
confirmLabel: string;
|
|
63
|
+
cancelLabel: string;
|
|
64
|
+
confirm: () => void;
|
|
65
|
+
cancel: () => void;
|
|
66
|
+
}
|
|
67
|
+
interface GroupView<TItem extends GroupItemView = GroupItemView> {
|
|
68
|
+
id: string;
|
|
69
|
+
group: FormGroup;
|
|
70
|
+
label: string;
|
|
71
|
+
helperText?: string;
|
|
72
|
+
error?: string;
|
|
73
|
+
describedBy?: string;
|
|
74
|
+
items: TItem[];
|
|
75
|
+
canAdd: boolean;
|
|
76
|
+
add: () => void;
|
|
77
|
+
remove: (id: string) => void;
|
|
78
|
+
requestRemove: (id: string) => void;
|
|
79
|
+
addLabel: string;
|
|
80
|
+
removeLabel: string;
|
|
81
|
+
disabled?: boolean;
|
|
82
|
+
status: string;
|
|
83
|
+
}
|
|
84
|
+
|
|
36
85
|
declare function validateDefinition(input: unknown): string[];
|
|
37
86
|
|
|
38
|
-
declare const FORMAT_VERSION = "1.
|
|
87
|
+
declare const FORMAT_VERSION = "1.1";
|
|
39
88
|
|
|
40
89
|
declare function validateStep(step: FormStep, values: Record<string, unknown>, validators?: Record<string, ValidatorFn>, messages?: MessageSource): Record<string, string>;
|
|
41
|
-
declare function validateFields(fields:
|
|
90
|
+
declare function validateFields(fields: FormNode[], values: Record<string, unknown>, validators?: Record<string, ValidatorFn>, messages?: MessageSource): Record<string, string>;
|
|
42
91
|
|
|
43
92
|
declare function evaluateCondition(condition: ShowCondition, values: Record<string, unknown>): boolean;
|
|
44
93
|
|
|
@@ -46,6 +95,13 @@ declare function isVisible(field: Pick<FormField, 'show' | 'showAny'>, values: R
|
|
|
46
95
|
|
|
47
96
|
declare function isActionDisabled(action: FormAction | false | undefined, values: Record<string, unknown>): boolean;
|
|
48
97
|
|
|
98
|
+
declare const isSection: (node: {
|
|
99
|
+
type?: unknown;
|
|
100
|
+
}) => node is FormSection;
|
|
101
|
+
declare const isGroup: (node: {
|
|
102
|
+
type?: unknown;
|
|
103
|
+
}) => node is FormGroup;
|
|
104
|
+
|
|
49
105
|
declare class FormLifecycleError extends Error {
|
|
50
106
|
readonly phase: 'afterStepChange' | 'afterSubmit';
|
|
51
107
|
readonly committed = true;
|
|
@@ -53,4 +109,4 @@ declare class FormLifecycleError extends Error {
|
|
|
53
109
|
constructor(phase: 'afterStepChange' | 'afterSubmit', cause: unknown);
|
|
54
110
|
}
|
|
55
111
|
|
|
56
|
-
export { FORMAT_VERSION, FormAction, type FormAnalyticsEvent, FormField, FormLifecycleError, FormStep, MessageSource, ShowCondition, ValidatorFn, evaluateCondition, isActionDisabled, isVisible, validateDefinition, validateFields, validateStep };
|
|
112
|
+
export { type ConfirmDialogView, FORMAT_VERSION, FormAction, type FormAnalyticsEvent, FormField, FormGroup, FormLifecycleError, FormNode, FormSection, FormStep, type GroupItemView, type GroupView, MessageSource, type SectionView, ShowCondition, ValidatorFn, evaluateCondition, isActionDisabled, isGroup, isSection, isVisible, validateDefinition, validateFields, validateStep };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{
|
|
1
|
+
export{e as FormEngine,a as FormLifecycleError,c as validateDefinition}from'./chunk-QMT7RJ4T.js';export{a as isActionDisabled,b as validateFieldValue,d as validateFields,c as validateStep}from'./chunk-CW5ZWCSD.js';export{h as FORMAT_VERSION,a as FormDefinitionError,k as checkDefinition,l as parseDefinition}from'./chunk-TMO47L42.js';export{g as resolveSources}from'./chunk-QVA6DLYS.js';export{c as evaluateCondition,H as getDefaultMessage,q as isGroup,p as isSection,m as isVisible}from'./chunk-5WADJMJJ.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|