@formhaus/core 0.13.0 → 0.13.1
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-76YV4J3Q.js +3 -0
- package/dist/chunk-76YV4J3Q.js.map +1 -0
- 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/{chunk-UFYD5LVW.js → chunk-YTUVSJUF.js} +3 -3
- package/dist/{chunk-UFYD5LVW.js.map → chunk-YTUVSJUF.js.map} +1 -1
- package/dist/cloud.js +1 -1
- package/dist/i18n.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/internal.d.ts +18 -3
- 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-Y33LPJXU.js +0 -2
- package/dist/chunk-Y33LPJXU.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/definition-validation/issues.ts","../src/definition-validation/format.ts","../src/definition-validation/conditions.ts","../src/definition-validation/context.ts","../src/definition-validation/fields.ts","../src/definition-validation/graph.ts","../src/definition-validation/shape.ts","../src/definition-validation/paths.ts","../src/definition-validation/structure.ts","../src/definition-validation/warnings.ts","../src/definition-validation/check-definition.ts"],"names":["FormDefinitionError","issues","issue","create","severity","code","path","problem","hint","error","warning","pointer","key","isError","oneOf","values","shown","value","distance","a","b","row","_","index","next","j","closest","candidates","lower","candidate","suggest","match","FORMAT_VERSION","formatIssues","version","valid","OPERATORS","CONDITION_OPERATORS","operatorIssues","condition","keys","unknown","count","referenceIssues","context","owner","step","target","sameStep","allowed","conditionErrors","entry","conditionIssues","collect","source","name","collectAction","action","createContext","definition","validators","steps","entries","field","position","conditions","route","rangeIssue","rules","min","max","low","high","patternIssue","pattern","ruleIssues","fieldIssues","dependencyGraph","graph","link","owners","dependencies","known","fieldsOf","findCycles","visiting","cycles","start","stack","frame","neighbor","nodes","node","cycleIssues","cycle","graphIssues","isEntry","KINDS","item","typed","kind","list","check","required","text","option","RULES","validation","shapeIssues","input","format","metaIssues","conditional","successors","indexes","from","reachableSteps","seen","queue","RESERVED","stepIssues","first","later","keyIssues","reachable","exclusive","clash","other","structureIssues","LIST_OPERATORS","COMPARISONS","STRING_TYPES","expectedType","BOOLEAN_TYPES","valueIssue","operator","operand","mismatch","result","operands","expected","wrong","options","missing","conditionWarnings","optionIssues","defaults","ruleWarnings","rule","BUILT_IN_TYPES","numeric","ranges","sized","fieldWarnings","routeWarnings","targets","to","sibling","exits","definitionWarnings","warnings","shape","definitionErrors","checkDefinition","parseDefinition","errors"],"mappings":"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","file":"chunk-FQ3GLJTI.js","sourcesContent":["export type DefinitionIssueCode =\n | 'invalid-type'\n | 'missing-property'\n | 'fields-and-steps'\n | 'duplicate-step-id'\n | 'duplicate-key'\n | 'reserved-key'\n | 'route-target'\n | 'unknown-field'\n | 'forward-reference'\n | 'condition-operator-count'\n | 'unknown-operator'\n | 'condition-value-mismatch'\n | 'condition-cycle'\n | 'invalid-pattern'\n | 'invalid-range'\n | 'rule-not-applicable'\n | 'missing-options'\n | 'default-not-in-options'\n | 'unknown-field-type'\n | 'unknown-validator'\n | 'skip-unreachable'\n | 'route-fallthrough'\n | 'unsupported-format-version'\n | 'i18n-unbound-slot'\n | 'unknown-i18n-slot'\n | 'unknown-message-key'\n | 'unknown-label-key'\n | 'i18n-unsafe-identifier';\n\nexport interface DefinitionIssue {\n code: DefinitionIssueCode;\n severity: 'error' | 'warning';\n path: string;\n message: string;\n hint?: string;\n}\n\nexport class FormDefinitionError extends Error {\n readonly issues: DefinitionIssue[];\n\n constructor(issues: DefinitionIssue[]) {\n super(`Invalid form definition:\\n${issues.map((issue) => issue.message).join('\\n')}`);\n this.name = 'FormDefinitionError';\n this.issues = issues;\n }\n}\n\nfunction create(severity: DefinitionIssue['severity']) {\n return (code: DefinitionIssueCode, path: string, problem: string, hint?: string): DefinitionIssue => ({\n code,\n severity,\n path,\n message: `${path || '/'}: ${problem}.${hint ? ` ${hint}.` : ''}`,\n ...(hint && { hint: `${hint}.` }),\n });\n}\n\nexport const error = create('error');\nexport const warning = create('warning');\n\nexport function pointer(key: string): string {\n return key.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\nexport function isError(issue: DefinitionIssue): boolean {\n return issue.severity === 'error';\n}\n\nexport function oneOf(values: string[]): string {\n if (values.length === 1) return `Use ${JSON.stringify(values[0])}`;\n const shown = values.slice(0, 10).map((value) => JSON.stringify(value)).join(', ');\n return values.length > 10 ? `Use one of: ${shown}, ...` : `Use one of: ${shown}`;\n}\n\nfunction distance(a: string, b: string): number {\n let row = Array.from({ length: b.length + 1 }, (_, index) => index);\n for (let i = 1; i <= a.length; i++) {\n const next = [i];\n for (let j = 1; j <= b.length; j++) {\n next[j] = Math.min(row[j] + 1, next[j - 1] + 1, row[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1));\n }\n row = next;\n }\n return row[b.length];\n}\n\nexport function closest(value: string, candidates: string[]): string | undefined {\n const lower = value.toLowerCase();\n return candidates.find((candidate) => candidate !== value && distance(lower, candidate.toLowerCase()) <= (candidate.length > 4 ? 2 : 1));\n}\n\nexport function suggest(value: string, candidates: string[]): string | undefined {\n const match = closest(value, candidates);\n if (match !== undefined) return `Use ${JSON.stringify(match)}`;\n return candidates.length ? oneOf(candidates) : undefined;\n}\n","import type { DefinitionIssue } from './issues';\nimport { error } from './issues';\n\nexport const FORMAT_VERSION = '1.0';\n\nexport function formatIssues({ formatVersion: version }: Record<string, unknown>): DefinitionIssue[] {\n if (version === undefined) return [];\n const valid = typeof version === 'string' && /^[1-9]\\d*(\\.\\d+)?$/.test(version);\n if (valid && parseInt(version) <= parseInt(FORMAT_VERSION)) return [];\n return [valid\n ? error('unsupported-format-version', '/formatVersion', `format ${version} is not supported`, 'Upgrade @formhaus/core')\n : error('invalid-type', '/formatVersion', 'must be a version string', `Use \"${FORMAT_VERSION}\"`)];\n}\n","import { CONDITION_OPERATORS } from '../visibility/evaluate-condition';\nimport type { ShowCondition } from '../types';\nimport type { CheckContext, ConditionEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error, pointer } from './issues';\n\nexport const OPERATORS: readonly string[] = CONDITION_OPERATORS;\n\nfunction operatorIssues({ suggest }: CheckContext, condition: ShowCondition, path: string): DefinitionIssue[] {\n const keys = Object.keys(condition).filter((key) => key !== 'field');\n const unknown = keys.filter((key) => !OPERATORS.includes(key));\n const issues = unknown.map((key) => error('unknown-operator', `${path}/${pointer(key)}`, `\"${key}\" is not a condition operator`, suggest(key, [...OPERATORS])));\n const count = keys.length - unknown.length;\n if (count !== 1 && !(count === 0 && unknown.length)) {\n const problem = count ? `the condition has ${count} operators` : 'the condition has no operator';\n issues.push(error('condition-operator-count', path, problem, `Use exactly one of: ${OPERATORS.join(', ')}`));\n }\n return issues;\n}\n\nfunction referenceIssues(context: CheckContext, { condition, path, owner, step, key }: ConditionEntry): DefinitionIssue[] {\n const target = context.keys.get(condition.field);\n if (!target) {\n const candidates = context.keyList.filter((candidate) => candidate !== key);\n return [error('unknown-field', `${path}/field`, `\"${condition.field}\" is not a field key`, context.suggest(condition.field, candidates))];\n }\n if (step < 0 || owner === 'action') return [];\n const sameStep = owner === 'step' ? 'this or a later step' : 'a later step';\n if (target.step < step || (owner !== 'step' && target.step === step)) return [];\n const allowed = owner === 'step' ? 'earlier steps' : 'this or an earlier step';\n return [error('forward-reference', `${path}/field`, `\"${condition.field}\" belongs to ${sameStep}`, `${owner === 'route' ? 'Route' : owner === 'step' ? 'Step' : 'Field'} conditions can use fields of ${allowed}`)];\n}\n\nexport function conditionErrors(context: CheckContext, entry: ConditionEntry): DefinitionIssue[] {\n const { condition, path } = entry;\n if (typeof condition.field !== 'string') return [error('missing-property', `${path}/field`, 'the condition has no \"field\"', 'Add the key of the field to test')];\n return [...operatorIssues(context, condition, path), ...referenceIssues(context, entry)];\n}\n\nexport function conditionIssues(context: CheckContext): DefinitionIssue[] {\n return context.conditions.flatMap((entry) => conditionErrors(context, entry));\n}\n","import type { FormAction, FormDefinition, FormField, ShowCondition } from '../types';\n\nexport interface FieldEntry {\n field: FormField;\n path: string;\n step: number;\n}\n\nexport interface ConditionEntry {\n condition: ShowCondition;\n path: string;\n owner: 'field' | 'step' | 'route' | 'action';\n step: number;\n key?: string;\n}\n\nexport interface CheckContext {\n definition: FormDefinition;\n entries: FieldEntry[];\n keys: Map<string, FieldEntry>;\n keyList: string[];\n conditions: ConditionEntry[];\n validators?: Record<string, unknown>;\n suggest: (value: string, candidates: string[]) => string | undefined;\n}\n\ntype Owner = { show?: ShowCondition[]; showAny?: ShowCondition[] };\n\nfunction collect(target: ConditionEntry[], source: Owner, path: string, owner: ConditionEntry['owner'], step: number, key?: string): void {\n for (const name of ['show', 'showAny'] as const) {\n (source[name] ?? []).forEach((condition, index) => target.push({ condition, path: `${path}/${name}/${index}`, owner, step, key }));\n }\n}\n\nfunction collectAction(target: ConditionEntry[], action: FormAction | false | undefined, path: string, step: number): void {\n (action ? action.disabled ?? [] : []).forEach((condition, index) => (\n target.push({ condition, path: `${path}/disabled/${index}`, owner: 'action', step })\n ));\n}\n\nexport function createContext(definition: FormDefinition, validators?: Record<string, unknown>, suggest: CheckContext['suggest'] = () => undefined): CheckContext {\n const steps = definition.steps ?? [];\n const entries: FieldEntry[] = steps.length\n ? steps.flatMap((step, index) => step.fields.map((field, position) => ({ field, path: `/steps/${index}/fields/${position}`, step: index })))\n : (definition.fields ?? []).map((field, position) => ({ field, path: `/fields/${position}`, step: -1 }));\n const keys = new Map<string, FieldEntry>();\n for (const entry of entries) if (!keys.has(entry.field.key)) keys.set(entry.field.key, entry);\n const conditions: ConditionEntry[] = [];\n for (const entry of entries) collect(conditions, entry.field, entry.path, 'field', entry.step, entry.field.key);\n steps.forEach((step, index) => {\n collect(conditions, step, `/steps/${index}`, 'step', index);\n (step.routes ?? []).forEach((route, position) => collect(conditions, route, `/steps/${index}/routes/${position}`, 'route', index));\n for (const name of ['next', 'back', 'skip'] as const) collectAction(conditions, step[name], `/steps/${index}/${name}`, index);\n });\n collectAction(conditions, definition.submit, '/submit', -1);\n collectAction(conditions, definition.cancel, '/cancel', -1);\n return {\n definition,\n entries,\n keys,\n keyList: [...keys.keys()],\n conditions,\n validators,\n suggest,\n };\n}\n","import type { FieldValidation } from '../types';\nimport type { CheckContext, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error } from './issues';\n\nfunction rangeIssue(rules: FieldValidation, path: string, min: 'min' | 'minLength', max: 'max' | 'maxLength'): DefinitionIssue[] {\n const low = rules[min];\n const high = rules[max];\n if (low === undefined || high === undefined || low <= high) return [];\n return [error('invalid-range', `${path}/validation/${min}`, `${min} (${low}) is greater than ${max} (${high})`, `Lower ${min} or raise ${max}`)];\n}\n\nfunction patternIssue(pattern: string | undefined, path: string): DefinitionIssue[] {\n if (pattern === undefined) return [];\n try {\n new RegExp(pattern);\n return [];\n } catch {\n return [error('invalid-pattern', `${path}/validation/pattern`, `${JSON.stringify(pattern)} is not a valid regular expression`, 'Fix the pattern or escape special characters with a backslash')];\n }\n}\n\nfunction ruleIssues(context: CheckContext, { field, path }: FieldEntry): DefinitionIssue[] {\n const rules = field.validation;\n if (!rules) return [];\n const match = rules.matchField;\n return [\n ...rangeIssue(rules, path, 'minLength', 'maxLength'),\n ...rangeIssue(rules, path, 'min', 'max'),\n ...patternIssue(rules.pattern, path),\n ...(match === undefined || context.keys.has(match) ? [] : [error('unknown-field', `${path}/validation/matchField`, `\"${match}\" is not a field key`, context.suggest(match, context.keyList))]),\n ];\n}\n\nexport function fieldIssues(context: CheckContext): DefinitionIssue[] {\n return context.entries.flatMap((entry) => ruleIssues(context, entry));\n}\n","import type { CheckContext } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error } from './issues';\n\nfunction dependencyGraph({ definition, entries, keys }: CheckContext): Map<string, string[]> {\n const graph = new Map<string, string[]>();\n const link = (owners: string[], dependencies: string[]) => {\n const known = dependencies.filter((key) => keys.has(key));\n if (known.length) for (const owner of owners) graph.set(owner, [...(graph.get(owner) ?? []), ...known]);\n };\n const fieldsOf = (source: { show?: { field: string }[]; showAny?: { field: string }[] }) => (\n [...(source.show ?? []), ...(source.showAny ?? [])].map((condition) => condition.field)\n );\n for (const { field } of entries) link([field.key], fieldsOf(field));\n for (const step of definition.steps ?? []) link(step.fields.map((field) => field.key), fieldsOf(step));\n return graph;\n}\n\nfunction findCycles(graph: Map<string, string[]>): string[][] {\n const visiting = new Map<string, boolean>();\n const cycles: string[][] = [];\n for (const start of graph.keys()) {\n if (visiting.has(start)) continue;\n visiting.set(start, true);\n const stack: [string, number][] = [[start, 0]];\n while (stack.length > 0) {\n const frame = stack[stack.length - 1];\n const neighbor = graph.get(frame[0])?.[frame[1]++];\n if (neighbor === undefined) {\n visiting.set(frame[0], false);\n stack.pop();\n } else if (visiting.get(neighbor)) {\n const nodes = stack.map(([node]) => node);\n cycles.push([...nodes.slice(nodes.indexOf(neighbor)), neighbor]);\n } else if (!visiting.has(neighbor)) {\n visiting.set(neighbor, true);\n stack.push([neighbor, 0]);\n }\n }\n }\n return cycles;\n}\n\nfunction cycleIssues(context: CheckContext): DefinitionIssue[] {\n return findCycles(dependencyGraph(context)).map((cycle) => (\n error('condition-cycle', context.keys.get(cycle[0])!.path, `show conditions form a cycle: ${cycle.join(' -> ')}`, 'Remove one of the conditions in the cycle')\n ));\n}\n\nexport function graphIssues(context: CheckContext): DefinitionIssue[] {\n return cycleIssues(context);\n}\n","import type { DefinitionIssue } from './issues';\nimport { formatIssues } from './format';\nimport { error, pointer } from './issues';\n\ntype Entry = Record<string, unknown>;\ntype Check = (value: Entry, path: string) => DefinitionIssue[];\ntype Kind = 'string' | 'number' | 'boolean' | 'requirement' | 'scalar' | 'list';\n\nexport const isEntry = (value: unknown): value is Entry =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst KINDS: Record<Kind, [(value: unknown) => boolean, string]> = {\n string: [(value) => typeof value === 'string', 'a string'],\n number: [(value) => typeof value === 'number' && Number.isFinite(value), 'a number'],\n boolean: [(value) => typeof value === 'boolean', 'true or false'],\n requirement: [(value) => ['boolean', 'string'].includes(typeof value), 'true, false or a message string'],\n scalar: [(value) => ['string', 'number', 'boolean'].includes(typeof value), 'a string, number or boolean'],\n list: [(value) => Array.isArray(value) && value.every((item) => ['string', 'number'].includes(typeof item)), 'an array of strings or numbers'],\n};\n\nfunction typed(value: Entry, rules: Record<string, Kind>, path: string): DefinitionIssue[] {\n return Object.entries(rules).flatMap(([key, kind]) => {\n const [valid, name] = KINDS[kind];\n return value[key] === undefined || valid(value[key]) ? [] : [error('invalid-type', `${path}/${pointer(key)}`, `\"${key}\" must be ${name}`)];\n });\n}\n\nfunction list(value: unknown, path: string, name: string, check: Check, required = false): DefinitionIssue[] {\n if (value == null && !required) return [];\n if (!Array.isArray(value)) return [error('invalid-type', path, 'must be an array', required ? 'Use [] when there is nothing to list' : undefined)];\n return value.flatMap((item, index) => (\n isEntry(item) ? check(item, `${path}/${index}`) : [error('invalid-type', `${path}/${index}`, `must be ${name}`)]\n ));\n}\n\nfunction text(value: Entry, key: string, path: string): DefinitionIssue[] {\n return typeof value[key] === 'string' ? [] : [error('missing-property', `${path}/${key}`, `\"${key}\" must be a string`)];\n}\n\nconst condition: Check = (value, path) => typed(value, { field: 'string', eq: 'scalar', neq: 'scalar', in: 'list', notIn: 'list', notEmpty: 'boolean', gt: 'number', gte: 'number', lt: 'number', lte: 'number' }, path);\n\nfunction conditions(value: Entry, path: string): DefinitionIssue[] {\n return [\n ...list(value.show, `${path}/show`, 'a condition object', condition),\n ...list(value.showAny, `${path}/showAny`, 'a condition object', condition),\n ];\n}\n\nfunction action(value: unknown, path: string): DefinitionIssue[] {\n if (!isEntry(value)) return [];\n return [...typed(value, { label: 'string' }, path), ...list(value.disabled, `${path}/disabled`, 'a condition object', condition)];\n}\n\nconst option: Check = (value, path) => [...text(value, 'value', path), ...typed(value, { label: 'string' }, path)];\n\nconst RULES: Record<string, Kind> = {\n required: 'requirement', minLength: 'number', maxLength: 'number', min: 'number', max: 'number', pattern: 'string', matchField: 'string', validator: 'string',\n minLengthMessage: 'string', maxLengthMessage: 'string', minMessage: 'string', maxMessage: 'string', patternMessage: 'string', matchFieldMessage: 'string',\n};\n\nfunction validation(value: unknown, path: string): DefinitionIssue[] {\n if (value === undefined) return [];\n return isEntry(value) ? typed(value, RULES, path) : [error('invalid-type', path, 'must be an object of validation rules')];\n}\n\nfunction dependencies(value: unknown, path: string): DefinitionIssue[] {\n const valid = value === undefined || (Array.isArray(value) && value.every((key) => typeof key === 'string'));\n return valid ? [] : [error('invalid-type', path, 'must be an array of field keys')];\n}\n\nconst field: Check = (value, path) => [\n ...text(value, 'key', path),\n ...text(value, 'type', path),\n ...typed(value, { label: 'string', placeholder: 'string', helperText: 'string' }, path),\n ...conditions(value, path),\n ...list(value.options, `${path}/options`, 'an option object', option),\n ...validation(value.validation, `${path}/validation`),\n ...dependencies(value.optionsDependsOn, `${path}/optionsDependsOn`),\n];\n\nconst route: Check = (value, path) => [\n ...(value.to === null || typeof value.to === 'string' ? [] : [error('missing-property', `${path}/to`, '\"to\" must be a step id or null')]),\n ...conditions(value, path),\n];\n\nconst step: Check = (value, path) => [\n ...text(value, 'id', path),\n ...typed(value, { title: 'string', description: 'string' }, path),\n ...list(value.fields, `${path}/fields`, 'a field object', field, true),\n ...conditions(value, path),\n ...list(value.routes, `${path}/routes`, 'a route object', route),\n ...['next', 'back', 'skip'].flatMap((name) => action(value[name], `${path}/${name}`)),\n];\n\nexport function shapeIssues(input: unknown): DefinitionIssue[] {\n if (!isEntry(input)) return [error('invalid-type', '', 'the form definition must be an object')];\n const format = formatIssues(input);\n if (format.length) return format;\n return [\n ...list(input.fields, '/fields', 'a field object', field),\n ...list(input.steps, '/steps', 'a step object', step),\n ...action(input.submit, '/submit'),\n ...action(input.cancel, '/cancel'),\n ];\n}\n\nexport function metaIssues(input: Entry): DefinitionIssue[] {\n return [\n ...text(input, 'id', ''),\n ...(isEntry(input.submit) ? [] : [error('missing-property', '/submit', 'the submit action is missing', 'Add \"submit\": { \"label\": \"Submit\" }')]),\n ];\n}\n","import type { FormStep, StepRoute } from '../types';\n\nconst conditional = (source: Pick<StepRoute, 'show' | 'showAny'>) => !!(source.show?.length || source.showAny?.length);\n\nfunction successors(steps: FormStep[], indexes: Map<string, number>, from: number): number[] {\n const next: number[] = [];\n for (const route of steps[from].routes ?? []) {\n const target = route.to === null ? null : indexes.get(route.to);\n if (target === null && !conditional(route)) return next;\n if (target === null || target === undefined || target <= from) continue;\n next.push(target);\n if (!conditional(route) && !conditional(steps[target])) return next;\n }\n return from + 1 < steps.length ? [...next, from + 1] : next;\n}\n\nexport function reachableSteps(steps: FormStep[]): Set<number>[] {\n const indexes = new Map(steps.map((step, index) => [step.id, index]));\n return steps.map((_, start) => {\n const seen = new Set<number>();\n const queue = successors(steps, indexes, start);\n while (queue.length) {\n const index = queue.pop()!;\n if (seen.has(index)) continue;\n seen.add(index);\n queue.push(...successors(steps, indexes, index));\n if (conditional(steps[index]) && index + 1 < steps.length) queue.push(index + 1);\n }\n return seen;\n });\n}\n","import type { CheckContext, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error, oneOf } from './issues';\nimport { reachableSteps } from './paths';\n\nconst RESERVED = new Set([...Object.getOwnPropertyNames(Object.prototype), 'prototype']);\n\nfunction stepIssues({ definition }: CheckContext): DefinitionIssue[] {\n const issues: DefinitionIssue[] = [];\n const steps = definition.steps ?? [];\n const seen = new Map<string, number>();\n steps.forEach((step, index) => {\n const first = seen.get(step.id);\n if (first === undefined) seen.set(step.id, index);\n else issues.push(error('duplicate-step-id', `/steps/${index}/id`, `step id \"${step.id}\" is already used by /steps/${first}`, 'Give each step a unique id'));\n });\n steps.forEach((step, index) => (step.routes ?? []).forEach((route, position) => {\n if (route.to === null) return;\n const target = seen.get(route.to);\n if (target !== undefined && target > index) return;\n const later = steps.slice(index + 1).map((candidate) => candidate.id);\n const problem = target === undefined ? `\"${route.to}\" is not a step id` : `\"${route.to}\" is not a later step`;\n const hint = later.length ? `${oneOf(later)}, or null to end the form here` : 'Use null to end the form here';\n issues.push(error('route-target', `/steps/${index}/routes/${position}/to`, problem, hint));\n }));\n return issues;\n}\n\nfunction keyIssues({ definition, entries }: CheckContext): DefinitionIssue[] {\n const issues: DefinitionIssue[] = [];\n const reachable = reachableSteps(definition.steps ?? []);\n const exclusive = (a: FieldEntry, b: FieldEntry) => a.step !== b.step && !reachable[a.step]?.has(b.step);\n entries.forEach((entry, index) => {\n const { field, path } = entry;\n const clash = entries.slice(0, index).find((other) => other.field.key === field.key && !exclusive(other, entry));\n if (RESERVED.has(field.key)) {\n issues.push(error('reserved-key', `${path}/key`, `\"${field.key}\" is a built-in object property name`, 'Rename the field key'));\n } else if (clash) {\n issues.push(error('duplicate-key', `${path}/key`, `key \"${field.key}\" is already used by ${clash.path} on the same path`, 'Rename one of the fields, or move them to route branches that never meet'));\n }\n });\n return issues;\n}\n\nexport function structureIssues(context: CheckContext): DefinitionIssue[] {\n const { definition } = context;\n const both = !!definition.fields?.length && !!definition.steps?.length;\n return [\n ...(both ? [error('fields-and-steps', '', 'the definition has both \"fields\" and \"steps\"', 'Move the top-level fields into a step, or remove \"steps\"')] : []),\n ...stepIssues(context),\n ...keyIssues(context),\n ];\n}\n","import type { FormField } from '../types';\nimport { BOOLEAN_TYPES, BUILT_IN_TYPES } from '../validation/type-checks';\nimport { conditionErrors, OPERATORS } from './conditions';\nimport type { CheckContext, ConditionEntry, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { closest, oneOf, suggest, warning } from './issues';\n\nconst LIST_OPERATORS = ['in', 'notIn'];\nconst COMPARISONS = ['gt', 'gte', 'lt', 'lte'];\nconst STRING_TYPES = ['text', 'email', 'phone', 'password', 'textarea', 'date', 'datetime', 'select', 'radio', 'autocomplete'];\n\nfunction expectedType(field: FormField): string | undefined {\n if (field.type === 'number') return 'number';\n if (BOOLEAN_TYPES.includes(field.type)) return 'boolean';\n return STRING_TYPES.includes(field.type) ? 'string' : undefined;\n}\n\nfunction valueIssue(target: FormField, operator: string, operand: unknown, path: string): DefinitionIssue[] {\n const mismatch = (problem: string, hint: string) => [warning('condition-value-mismatch', path, problem, hint)];\n if (operator === 'notEmpty') return [];\n if (COMPARISONS.includes(operator)) {\n if (target.type !== 'multiselect' && !BOOLEAN_TYPES.includes(target.type)) return [];\n return mismatch(`\"${target.key}\" is a ${target.type} field, so \"${operator}\" never matches it`, 'Compare a number, text, radio or select field');\n }\n if (target.type === 'multiselect') {\n const result = operator === 'neq' || operator === 'notIn' ? 'always' : 'never';\n return mismatch(`\"${target.key}\" holds a list of values, so \"${operator}\" ${result} matches it`, 'Use notEmpty, or a select or radio field');\n }\n const operands = LIST_OPERATORS.includes(operator) && Array.isArray(operand) ? operand : [operand];\n const expected = expectedType(target);\n const wrong = expected && operands.find((item) => typeof item !== expected);\n if (expected && wrong !== undefined) return mismatch(`${JSON.stringify(wrong)} is a ${typeof wrong}, but \"${target.key}\" holds a ${expected}`, `Use a ${expected} value`);\n const options = expected === 'string' && !target.optionsFrom && target.options?.length ? target.options.map((option) => option.value) : null;\n const missing = options && operands.find((item) => !options.includes(item as string));\n return options && missing !== undefined ? mismatch(`${JSON.stringify(missing)} is not an option of \"${target.key}\"`, oneOf(options)) : [];\n}\n\nfunction conditionWarnings(context: CheckContext, entry: ConditionEntry): DefinitionIssue[] {\n const { condition, path } = entry;\n if (conditionErrors(context, entry).length) return [];\n const operator = OPERATORS.find((key) => key in condition)!;\n return valueIssue(context.keys.get(condition.field)!.field, operator, condition[operator as keyof typeof condition], `${path}/${operator}`);\n}\n\nfunction optionIssues({ field, path }: FieldEntry): DefinitionIssue[] {\n if (!['select', 'radio', 'multiselect'].includes(field.type)) return [];\n if (!Array.isArray(field.options)) {\n return field.optionsFrom ? [] : [warning('missing-options', `${path}/options`, `the ${field.type} field \"${field.key}\" has no options`, 'Add \"options\" or \"optionsFrom\"')];\n }\n const values = field.options.map((option) => option.value);\n const defaults = field.type === 'multiselect' && Array.isArray(field.defaultValue) ? field.defaultValue : [field.defaultValue];\n const missing = field.defaultValue === undefined || !values.length || field.optionsFrom ? undefined : defaults.find((value) => !values.includes(value as string));\n if (missing === undefined) return [];\n return [warning('default-not-in-options', `${path}/defaultValue`, `${JSON.stringify(missing)} is not an option of \"${field.key}\"`, oneOf(values))];\n}\n\nfunction ruleWarnings(context: CheckContext, { field, path }: FieldEntry): DefinitionIssue[] {\n const rules = field.validation ?? {};\n const rule = (name: string, problem: string, hint: string) => warning('rule-not-applicable', `${path}/validation/${name}`, problem, hint);\n const known = BUILT_IN_TYPES.includes(field.type);\n const numeric = field.type === 'number';\n const ranges = known && !numeric ? (['min', 'max'] as const).filter((name) => rules[name] !== undefined) : [];\n const sized = known && ['number', 'checkbox', 'switch'].includes(field.type) ? (['minLength', 'maxLength'] as const).filter((name) => rules[name] !== undefined) : [];\n const issues = [\n ...ranges.map((name) => rule(name, `\"${name}\" applies to number fields only`, `Use ${name}Length to limit text length`)),\n ...sized.map((name) => rule(name, `\"${name}\" does not apply to ${field.type} fields`, numeric ? 'Use min and max for numbers' : `Remove ${name}`)),\n ];\n const { validators } = context;\n if (rules.validator !== undefined && validators && !Object.prototype.hasOwnProperty.call(validators, rules.validator)) {\n issues.push(warning('unknown-validator', `${path}/validation/validator`, `the validator \"${rules.validator}\" is not registered`, 'Pass it in the \"validators\" option'));\n }\n return issues;\n}\n\nfunction fieldWarnings(context: CheckContext, entry: FieldEntry): DefinitionIssue[] {\n const { field, path } = entry;\n const match = BUILT_IN_TYPES.includes(field.type) ? undefined : closest(field.type, BUILT_IN_TYPES);\n return [\n ...(match === undefined ? [] : [warning('unknown-field-type', `${path}/type`, `\"${field.type}\" is not a built-in field type`, `Use \"${match}\", or register a component for \"${field.type}\"`)]),\n ...optionIssues(entry),\n ...ruleWarnings(context, entry),\n ...(field.optionsDependsOn ?? []).flatMap((key, index) => (\n context.keys.has(key) ? [] : [warning('unknown-field', `${path}/optionsDependsOn/${index}`, `\"${key}\" is not a field key`, suggest(key, context.keyList))]\n )),\n ];\n}\n\nfunction routeWarnings({ definition }: CheckContext): DefinitionIssue[] {\n const steps = definition.steps ?? [];\n return steps.flatMap((step, index) => {\n const issues: DefinitionIssue[] = [];\n const targets = new Set((step.routes ?? []).map((route) => route.to).filter((to) => to !== null));\n for (const target of targets) {\n const position = steps.findIndex((candidate) => candidate.id === target);\n const sibling = steps[position + 1];\n const exits = steps[position]?.routes?.some((route) => !route.show?.length && !route.showAny?.length);\n if (!sibling || !targets.has(sibling.id) || exits) continue;\n issues.push(warning('route-fallthrough', `/steps/${position}`, `branch \"${target}\" from \"${step.id}\" continues into the sibling branch \"${sibling.id}\"`, `Add an unconditional route on \"${target}\" to the step where the branches meet`));\n }\n if (step.skip && (step.next === false || !steps[1])) {\n issues.push(warning('skip-unreachable', `/steps/${index}/skip`, `step \"${step.id}\" has \"skip\" but no Continue button or later step`, 'Remove \"skip\", or remove \"next\": false'));\n }\n return issues;\n });\n}\n\nexport function definitionWarnings(context: CheckContext): DefinitionIssue[] {\n return [\n ...(typeof context.definition.title === 'string' ? [] : [warning('missing-property', '/title', '\"title\" must be a string', 'Add a title for host UI and editors')]),\n ...context.conditions.flatMap((entry) => conditionWarnings(context, entry)),\n ...context.entries.flatMap((entry) => fieldWarnings(context, entry)),\n ...routeWarnings(context),\n ];\n}\n","import type { FormDefinition } from '../types';\nimport { conditionIssues } from './conditions';\nimport { createContext, type CheckContext } from './context';\nimport { fieldIssues } from './fields';\nimport { graphIssues } from './graph';\nimport { FormDefinitionError, suggest, type DefinitionIssue } from './issues';\nimport { metaIssues, shapeIssues } from './shape';\nimport { structureIssues } from './structure';\nimport { definitionWarnings } from './warnings';\n\nexport interface CheckDefinitionOptions {\n validators?: Record<string, unknown>;\n}\n\ninterface Checks {\n validators?: Record<string, unknown>;\n suggest?: CheckContext['suggest'];\n warnings?: (context: CheckContext) => DefinitionIssue[];\n}\n\nfunction issues(input: unknown, { validators, suggest, warnings }: Checks = {}): DefinitionIssue[] {\n const shape = shapeIssues(input);\n if (shape.length) return shape;\n const context = createContext(input as FormDefinition, validators, suggest);\n return [\n ...metaIssues(input as Record<string, unknown>),\n ...structureIssues(context),\n ...conditionIssues(context),\n ...fieldIssues(context),\n ...graphIssues(context),\n ...(warnings ? warnings(context) : []),\n ];\n}\n\nexport function definitionErrors(input: unknown): DefinitionIssue[] {\n return issues(input);\n}\n\nexport function checkDefinition(input: unknown, options: CheckDefinitionOptions = {}): DefinitionIssue[] {\n return issues(input, { validators: options.validators, suggest, warnings: definitionWarnings });\n}\n\nexport function parseDefinition(input: unknown, options?: CheckDefinitionOptions): FormDefinition {\n const errors = issues(input, { suggest });\n if (errors.length) throw new FormDefinitionError(errors);\n return input as FormDefinition;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/definition-validation/issues.ts","../src/definition-validation/format.ts","../src/definition-validation/conditions.ts","../src/definition-validation/context.ts","../src/definition-validation/fields.ts","../src/definition-validation/graph.ts","../src/definition-validation/shape.ts","../src/definition-validation/paths.ts","../src/definition-validation/structure.ts","../src/definition-validation/warnings.ts","../src/definition-validation/check-definition.ts"],"names":["FormDefinitionError","issues","issue","create","severity","code","path","problem","hint","error","warning","pointer","key","isError","oneOf","values","shown","value","distance","a","b","row","_","index","next","j","closest","candidates","lower","candidate","suggest","match","FORMAT_VERSION","formatIssues","version","valid","OPERATORS","CONDITION_OPERATORS","operatorIssues","condition","keys","unknown","count","referenceIssues","context","owner","step","target","sameStep","allowed","conditionErrors","entry","conditionIssues","collect","source","name","collectAction","action","createContext","definition","validators","steps","entries","field","position","conditions","route","rangeIssue","rules","min","max","low","high","patternIssue","pattern","ruleIssues","fieldIssues","dependencyGraph","graph","link","owners","dependencies","known","fieldsOf","findCycles","visiting","cycles","start","stack","frame","neighbor","nodes","node","cycleIssues","cycle","graphIssues","isEntry","KINDS","item","typed","kind","list","check","required","text","option","RULES","validation","shapeIssues","input","format","metaIssues","conditional","successors","indexes","from","reachableSteps","seen","queue","RESERVED","stepIssues","first","later","keyIssues","reachable","exclusive","clash","other","structureIssues","LIST_OPERATORS","COMPARISONS","STRING_TYPES","expectedType","BOOLEAN_TYPES","valueIssue","operator","operand","mismatch","result","operands","expected","wrong","options","missing","conditionWarnings","optionIssues","defaults","ruleWarnings","rule","BUILT_IN_TYPES","numeric","ranges","sized","fieldWarnings","routeWarnings","targets","to","sibling","exits","definitionWarnings","warnings","shape","definitionErrors","checkDefinition","parseDefinition","errors"],"mappings":"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","file":"chunk-RN5GQHKN.js","sourcesContent":["export type DefinitionIssueCode =\n | 'invalid-type'\n | 'missing-property'\n | 'fields-and-steps'\n | 'duplicate-step-id'\n | 'duplicate-key'\n | 'reserved-key'\n | 'route-target'\n | 'unknown-field'\n | 'forward-reference'\n | 'condition-operator-count'\n | 'unknown-operator'\n | 'condition-value-mismatch'\n | 'condition-cycle'\n | 'invalid-pattern'\n | 'invalid-range'\n | 'rule-not-applicable'\n | 'missing-options'\n | 'default-not-in-options'\n | 'unknown-field-type'\n | 'unknown-validator'\n | 'skip-unreachable'\n | 'route-fallthrough'\n | 'unsupported-format-version'\n | 'i18n-unbound-slot'\n | 'unknown-i18n-slot'\n | 'unknown-message-key'\n | 'unknown-label-key'\n | 'i18n-unsafe-identifier';\n\nexport interface DefinitionIssue {\n code: DefinitionIssueCode;\n severity: 'error' | 'warning';\n path: string;\n message: string;\n hint?: string;\n}\n\nexport class FormDefinitionError extends Error {\n readonly issues: DefinitionIssue[];\n\n constructor(issues: DefinitionIssue[]) {\n super(`Invalid form definition:\\n${issues.map((issue) => issue.message).join('\\n')}`);\n this.name = 'FormDefinitionError';\n this.issues = issues;\n }\n}\n\nfunction create(severity: DefinitionIssue['severity']) {\n return (code: DefinitionIssueCode, path: string, problem: string, hint?: string): DefinitionIssue => ({\n code,\n severity,\n path,\n message: `${path || '/'}: ${problem}.${hint ? ` ${hint}.` : ''}`,\n ...(hint && { hint: `${hint}.` }),\n });\n}\n\nexport const error = create('error');\nexport const warning = create('warning');\n\nexport function pointer(key: string): string {\n return key.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\nexport function isError(issue: DefinitionIssue): boolean {\n return issue.severity === 'error';\n}\n\nexport function oneOf(values: string[]): string {\n if (values.length === 1) return `Use ${JSON.stringify(values[0])}`;\n const shown = values.slice(0, 10).map((value) => JSON.stringify(value)).join(', ');\n return values.length > 10 ? `Use one of: ${shown}, ...` : `Use one of: ${shown}`;\n}\n\nfunction distance(a: string, b: string): number {\n let row = Array.from({ length: b.length + 1 }, (_, index) => index);\n for (let i = 1; i <= a.length; i++) {\n const next = [i];\n for (let j = 1; j <= b.length; j++) {\n next[j] = Math.min(row[j] + 1, next[j - 1] + 1, row[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1));\n }\n row = next;\n }\n return row[b.length];\n}\n\nexport function closest(value: string, candidates: string[]): string | undefined {\n const lower = value.toLowerCase();\n return candidates.find((candidate) => candidate !== value && distance(lower, candidate.toLowerCase()) <= (candidate.length > 4 ? 2 : 1));\n}\n\nexport function suggest(value: string, candidates: string[]): string | undefined {\n const match = closest(value, candidates);\n if (match !== undefined) return `Use ${JSON.stringify(match)}`;\n return candidates.length ? oneOf(candidates) : undefined;\n}\n","import type { DefinitionIssue } from './issues';\nimport { error } from './issues';\n\nexport const FORMAT_VERSION = '1.0';\n\nexport function formatIssues({ formatVersion: version }: Record<string, unknown>): DefinitionIssue[] {\n if (version === undefined) return [];\n const valid = typeof version === 'string' && /^[1-9]\\d*(\\.\\d+)?$/.test(version);\n if (valid && parseInt(version) <= parseInt(FORMAT_VERSION)) return [];\n return [valid\n ? error('unsupported-format-version', '/formatVersion', `format ${version} is not supported`, 'Upgrade @formhaus/core')\n : error('invalid-type', '/formatVersion', 'must be a version string', `Use \"${FORMAT_VERSION}\"`)];\n}\n","import { CONDITION_OPERATORS } from '../visibility/evaluate-condition';\nimport type { ShowCondition } from '../types';\nimport type { CheckContext, ConditionEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error, pointer } from './issues';\n\nexport const OPERATORS: readonly string[] = CONDITION_OPERATORS;\n\nfunction operatorIssues({ suggest }: CheckContext, condition: ShowCondition, path: string): DefinitionIssue[] {\n const keys = Object.keys(condition).filter((key) => key !== 'field');\n const unknown = keys.filter((key) => !OPERATORS.includes(key));\n const issues = unknown.map((key) => error('unknown-operator', `${path}/${pointer(key)}`, `\"${key}\" is not a condition operator`, suggest(key, [...OPERATORS])));\n const count = keys.length - unknown.length;\n if (count !== 1 && !(count === 0 && unknown.length)) {\n const problem = count ? `the condition has ${count} operators` : 'the condition has no operator';\n issues.push(error('condition-operator-count', path, problem, `Use exactly one of: ${OPERATORS.join(', ')}`));\n }\n return issues;\n}\n\nfunction referenceIssues(context: CheckContext, { condition, path, owner, step, key }: ConditionEntry): DefinitionIssue[] {\n const target = context.keys.get(condition.field);\n if (!target) {\n const candidates = context.keyList.filter((candidate) => candidate !== key);\n return [error('unknown-field', `${path}/field`, `\"${condition.field}\" is not a field key`, context.suggest(condition.field, candidates))];\n }\n if (step < 0 || owner === 'action') return [];\n const sameStep = owner === 'step' ? 'this or a later step' : 'a later step';\n if (target.step < step || (owner !== 'step' && target.step === step)) return [];\n const allowed = owner === 'step' ? 'earlier steps' : 'this or an earlier step';\n return [error('forward-reference', `${path}/field`, `\"${condition.field}\" belongs to ${sameStep}`, `${owner === 'route' ? 'Route' : owner === 'step' ? 'Step' : 'Field'} conditions can use fields of ${allowed}`)];\n}\n\nexport function conditionErrors(context: CheckContext, entry: ConditionEntry): DefinitionIssue[] {\n const { condition, path } = entry;\n if (typeof condition.field !== 'string') return [error('missing-property', `${path}/field`, 'the condition has no \"field\"', 'Add the key of the field to test')];\n return [...operatorIssues(context, condition, path), ...referenceIssues(context, entry)];\n}\n\nexport function conditionIssues(context: CheckContext): DefinitionIssue[] {\n return context.conditions.flatMap((entry) => conditionErrors(context, entry));\n}\n","import type { FormAction, FormDefinition, FormField, ShowCondition } from '../types';\n\nexport interface FieldEntry {\n field: FormField;\n path: string;\n step: number;\n}\n\nexport interface ConditionEntry {\n condition: ShowCondition;\n path: string;\n owner: 'field' | 'step' | 'route' | 'action';\n step: number;\n key?: string;\n}\n\nexport interface CheckContext {\n definition: FormDefinition;\n entries: FieldEntry[];\n keys: Map<string, FieldEntry>;\n keyList: string[];\n conditions: ConditionEntry[];\n validators?: Record<string, unknown>;\n suggest: (value: string, candidates: string[]) => string | undefined;\n}\n\ntype Owner = { show?: ShowCondition[]; showAny?: ShowCondition[] };\n\nfunction collect(target: ConditionEntry[], source: Owner, path: string, owner: ConditionEntry['owner'], step: number, key?: string): void {\n for (const name of ['show', 'showAny'] as const) {\n (source[name] ?? []).forEach((condition, index) => target.push({ condition, path: `${path}/${name}/${index}`, owner, step, key }));\n }\n}\n\nfunction collectAction(target: ConditionEntry[], action: FormAction | false | undefined, path: string, step: number): void {\n (action ? action.disabled ?? [] : []).forEach((condition, index) => (\n target.push({ condition, path: `${path}/disabled/${index}`, owner: 'action', step })\n ));\n}\n\nexport function createContext(definition: FormDefinition, validators?: Record<string, unknown>, suggest: CheckContext['suggest'] = () => undefined): CheckContext {\n const steps = definition.steps ?? [];\n const entries: FieldEntry[] = steps.length\n ? steps.flatMap((step, index) => step.fields.map((field, position) => ({ field, path: `/steps/${index}/fields/${position}`, step: index })))\n : (definition.fields ?? []).map((field, position) => ({ field, path: `/fields/${position}`, step: -1 }));\n const keys = new Map<string, FieldEntry>();\n for (const entry of entries) if (!keys.has(entry.field.key)) keys.set(entry.field.key, entry);\n const conditions: ConditionEntry[] = [];\n for (const entry of entries) collect(conditions, entry.field, entry.path, 'field', entry.step, entry.field.key);\n steps.forEach((step, index) => {\n collect(conditions, step, `/steps/${index}`, 'step', index);\n (step.routes ?? []).forEach((route, position) => collect(conditions, route, `/steps/${index}/routes/${position}`, 'route', index));\n for (const name of ['next', 'back', 'skip'] as const) collectAction(conditions, step[name], `/steps/${index}/${name}`, index);\n });\n collectAction(conditions, definition.submit, '/submit', -1);\n collectAction(conditions, definition.cancel, '/cancel', -1);\n return {\n definition,\n entries,\n keys,\n keyList: [...keys.keys()],\n conditions,\n validators,\n suggest,\n };\n}\n","import type { FieldValidation } from '../types';\nimport type { CheckContext, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error } from './issues';\n\nfunction rangeIssue(rules: FieldValidation, path: string, min: 'min' | 'minLength', max: 'max' | 'maxLength'): DefinitionIssue[] {\n const low = rules[min];\n const high = rules[max];\n if (low === undefined || high === undefined || low <= high) return [];\n return [error('invalid-range', `${path}/validation/${min}`, `${min} (${low}) is greater than ${max} (${high})`, `Lower ${min} or raise ${max}`)];\n}\n\nfunction patternIssue(pattern: string | undefined, path: string): DefinitionIssue[] {\n if (pattern === undefined) return [];\n try {\n new RegExp(pattern);\n return [];\n } catch {\n return [error('invalid-pattern', `${path}/validation/pattern`, `${JSON.stringify(pattern)} is not a valid regular expression`, 'Fix the pattern or escape special characters with a backslash')];\n }\n}\n\nfunction ruleIssues(context: CheckContext, { field, path }: FieldEntry): DefinitionIssue[] {\n const rules = field.validation;\n if (!rules) return [];\n const match = rules.matchField;\n return [\n ...rangeIssue(rules, path, 'minLength', 'maxLength'),\n ...rangeIssue(rules, path, 'min', 'max'),\n ...patternIssue(rules.pattern, path),\n ...(match === undefined || context.keys.has(match) ? [] : [error('unknown-field', `${path}/validation/matchField`, `\"${match}\" is not a field key`, context.suggest(match, context.keyList))]),\n ];\n}\n\nexport function fieldIssues(context: CheckContext): DefinitionIssue[] {\n return context.entries.flatMap((entry) => ruleIssues(context, entry));\n}\n","import type { CheckContext } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error } from './issues';\n\nfunction dependencyGraph({ definition, entries, keys }: CheckContext): Map<string, string[]> {\n const graph = new Map<string, string[]>();\n const link = (owners: string[], dependencies: string[]) => {\n const known = dependencies.filter((key) => keys.has(key));\n if (known.length) for (const owner of owners) graph.set(owner, [...(graph.get(owner) ?? []), ...known]);\n };\n const fieldsOf = (source: { show?: { field: string }[]; showAny?: { field: string }[] }) => (\n [...(source.show ?? []), ...(source.showAny ?? [])].map((condition) => condition.field)\n );\n for (const { field } of entries) link([field.key], fieldsOf(field));\n for (const step of definition.steps ?? []) link(step.fields.map((field) => field.key), fieldsOf(step));\n return graph;\n}\n\nfunction findCycles(graph: Map<string, string[]>): string[][] {\n const visiting = new Map<string, boolean>();\n const cycles: string[][] = [];\n for (const start of graph.keys()) {\n if (visiting.has(start)) continue;\n visiting.set(start, true);\n const stack: [string, number][] = [[start, 0]];\n while (stack.length > 0) {\n const frame = stack[stack.length - 1];\n const neighbor = graph.get(frame[0])?.[frame[1]++];\n if (neighbor === undefined) {\n visiting.set(frame[0], false);\n stack.pop();\n } else if (visiting.get(neighbor)) {\n const nodes = stack.map(([node]) => node);\n cycles.push([...nodes.slice(nodes.indexOf(neighbor)), neighbor]);\n } else if (!visiting.has(neighbor)) {\n visiting.set(neighbor, true);\n stack.push([neighbor, 0]);\n }\n }\n }\n return cycles;\n}\n\nfunction cycleIssues(context: CheckContext): DefinitionIssue[] {\n return findCycles(dependencyGraph(context)).map((cycle) => (\n error('condition-cycle', context.keys.get(cycle[0])!.path, `show conditions form a cycle: ${cycle.join(' -> ')}`, 'Remove one of the conditions in the cycle')\n ));\n}\n\nexport function graphIssues(context: CheckContext): DefinitionIssue[] {\n return cycleIssues(context);\n}\n","import type { DefinitionIssue } from './issues';\nimport { formatIssues } from './format';\nimport { error, pointer } from './issues';\n\ntype Entry = Record<string, unknown>;\ntype Check = (value: Entry, path: string) => DefinitionIssue[];\ntype Kind = 'string' | 'number' | 'boolean' | 'requirement' | 'scalar' | 'list';\n\nexport const isEntry = (value: unknown): value is Entry =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst KINDS: Record<Kind, [(value: unknown) => boolean, string]> = {\n string: [(value) => typeof value === 'string', 'a string'],\n number: [(value) => typeof value === 'number' && Number.isFinite(value), 'a number'],\n boolean: [(value) => typeof value === 'boolean', 'true or false'],\n requirement: [(value) => ['boolean', 'string'].includes(typeof value), 'true, false or a message string'],\n scalar: [(value) => ['string', 'number', 'boolean'].includes(typeof value), 'a string, number or boolean'],\n list: [(value) => Array.isArray(value) && value.every((item) => ['string', 'number'].includes(typeof item)), 'an array of strings or numbers'],\n};\n\nfunction typed(value: Entry, rules: Record<string, Kind>, path: string): DefinitionIssue[] {\n return Object.entries(rules).flatMap(([key, kind]) => {\n const [valid, name] = KINDS[kind];\n return value[key] === undefined || valid(value[key]) ? [] : [error('invalid-type', `${path}/${pointer(key)}`, `\"${key}\" must be ${name}`)];\n });\n}\n\nfunction list(value: unknown, path: string, name: string, check: Check, required = false): DefinitionIssue[] {\n if (value == null && !required) return [];\n if (!Array.isArray(value)) return [error('invalid-type', path, 'must be an array', required ? 'Use [] when there is nothing to list' : undefined)];\n return value.flatMap((item, index) => (\n isEntry(item) ? check(item, `${path}/${index}`) : [error('invalid-type', `${path}/${index}`, `must be ${name}`)]\n ));\n}\n\nfunction text(value: Entry, key: string, path: string): DefinitionIssue[] {\n return typeof value[key] === 'string' ? [] : [error('missing-property', `${path}/${key}`, `\"${key}\" must be a string`)];\n}\n\nconst condition: Check = (value, path) => typed(value, { field: 'string', eq: 'scalar', neq: 'scalar', in: 'list', notIn: 'list', notEmpty: 'boolean', gt: 'number', gte: 'number', lt: 'number', lte: 'number' }, path);\n\nfunction conditions(value: Entry, path: string): DefinitionIssue[] {\n return [\n ...list(value.show, `${path}/show`, 'a condition object', condition),\n ...list(value.showAny, `${path}/showAny`, 'a condition object', condition),\n ];\n}\n\nfunction action(value: unknown, path: string): DefinitionIssue[] {\n if (!isEntry(value)) return [];\n return [...typed(value, { label: 'string' }, path), ...list(value.disabled, `${path}/disabled`, 'a condition object', condition)];\n}\n\nconst option: Check = (value, path) => [...text(value, 'value', path), ...typed(value, { label: 'string' }, path)];\n\nconst RULES: Record<string, Kind> = {\n required: 'requirement', minLength: 'number', maxLength: 'number', min: 'number', max: 'number', pattern: 'string', matchField: 'string', validator: 'string',\n minLengthMessage: 'string', maxLengthMessage: 'string', minMessage: 'string', maxMessage: 'string', patternMessage: 'string', matchFieldMessage: 'string',\n};\n\nfunction validation(value: unknown, path: string): DefinitionIssue[] {\n if (value === undefined) return [];\n return isEntry(value) ? typed(value, RULES, path) : [error('invalid-type', path, 'must be an object of validation rules')];\n}\n\nfunction dependencies(value: unknown, path: string): DefinitionIssue[] {\n const valid = value === undefined || (Array.isArray(value) && value.every((key) => typeof key === 'string'));\n return valid ? [] : [error('invalid-type', path, 'must be an array of field keys')];\n}\n\nconst field: Check = (value, path) => [\n ...text(value, 'key', path),\n ...text(value, 'type', path),\n ...typed(value, { label: 'string', placeholder: 'string', helperText: 'string' }, path),\n ...conditions(value, path),\n ...list(value.options, `${path}/options`, 'an option object', option),\n ...validation(value.validation, `${path}/validation`),\n ...dependencies(value.optionsDependsOn, `${path}/optionsDependsOn`),\n];\n\nconst route: Check = (value, path) => [\n ...(value.to === null || typeof value.to === 'string' ? [] : [error('missing-property', `${path}/to`, '\"to\" must be a step id or null')]),\n ...conditions(value, path),\n];\n\nconst step: Check = (value, path) => [\n ...text(value, 'id', path),\n ...typed(value, { title: 'string', description: 'string' }, path),\n ...list(value.fields, `${path}/fields`, 'a field object', field, true),\n ...conditions(value, path),\n ...list(value.routes, `${path}/routes`, 'a route object', route),\n ...['next', 'back', 'skip'].flatMap((name) => action(value[name], `${path}/${name}`)),\n];\n\nexport function shapeIssues(input: unknown): DefinitionIssue[] {\n if (!isEntry(input)) return [error('invalid-type', '', 'the form definition must be an object')];\n const format = formatIssues(input);\n if (format.length) return format;\n return [\n ...list(input.fields, '/fields', 'a field object', field),\n ...list(input.steps, '/steps', 'a step object', step),\n ...action(input.submit, '/submit'),\n ...action(input.cancel, '/cancel'),\n ];\n}\n\nexport function metaIssues(input: Entry): DefinitionIssue[] {\n return [\n ...text(input, 'id', ''),\n ...(isEntry(input.submit) ? [] : [error('missing-property', '/submit', 'the submit action is missing', 'Add \"submit\": { \"label\": \"Submit\" }')]),\n ];\n}\n","import type { FormStep, StepRoute } from '../types';\n\nconst conditional = (source: Pick<StepRoute, 'show' | 'showAny'>) => !!(source.show?.length || source.showAny?.length);\n\nfunction successors(steps: FormStep[], indexes: Map<string, number>, from: number): number[] {\n const next: number[] = [];\n for (const route of steps[from].routes ?? []) {\n const target = route.to === null ? null : indexes.get(route.to);\n if (target === null && !conditional(route)) return next;\n if (target === null || target === undefined || target <= from) continue;\n next.push(target);\n if (!conditional(route) && !conditional(steps[target])) return next;\n }\n return from + 1 < steps.length ? [...next, from + 1] : next;\n}\n\nexport function reachableSteps(steps: FormStep[]): Set<number>[] {\n const indexes = new Map(steps.map((step, index) => [step.id, index]));\n return steps.map((_, start) => {\n const seen = new Set<number>();\n const queue = successors(steps, indexes, start);\n while (queue.length) {\n const index = queue.pop()!;\n if (seen.has(index)) continue;\n seen.add(index);\n queue.push(...successors(steps, indexes, index));\n if (conditional(steps[index]) && index + 1 < steps.length) queue.push(index + 1);\n }\n return seen;\n });\n}\n","import type { CheckContext, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error, oneOf } from './issues';\nimport { reachableSteps } from './paths';\n\nconst RESERVED = new Set([...Object.getOwnPropertyNames(Object.prototype), 'prototype']);\n\nfunction stepIssues({ definition }: CheckContext): DefinitionIssue[] {\n const issues: DefinitionIssue[] = [];\n const steps = definition.steps ?? [];\n const seen = new Map<string, number>();\n steps.forEach((step, index) => {\n const first = seen.get(step.id);\n if (first === undefined) seen.set(step.id, index);\n else issues.push(error('duplicate-step-id', `/steps/${index}/id`, `step id \"${step.id}\" is already used by /steps/${first}`, 'Give each step a unique id'));\n });\n steps.forEach((step, index) => (step.routes ?? []).forEach((route, position) => {\n if (route.to === null) return;\n const target = seen.get(route.to);\n if (target !== undefined && target > index) return;\n const later = steps.slice(index + 1).map((candidate) => candidate.id);\n const problem = target === undefined ? `\"${route.to}\" is not a step id` : `\"${route.to}\" is not a later step`;\n const hint = later.length ? `${oneOf(later)}, or null to end the form here` : 'Use null to end the form here';\n issues.push(error('route-target', `/steps/${index}/routes/${position}/to`, problem, hint));\n }));\n return issues;\n}\n\nfunction keyIssues({ definition, entries }: CheckContext): DefinitionIssue[] {\n const issues: DefinitionIssue[] = [];\n const reachable = reachableSteps(definition.steps ?? []);\n const exclusive = (a: FieldEntry, b: FieldEntry) => a.step !== b.step && !reachable[a.step]?.has(b.step);\n entries.forEach((entry, index) => {\n const { field, path } = entry;\n const clash = entries.slice(0, index).find((other) => other.field.key === field.key && !exclusive(other, entry));\n if (RESERVED.has(field.key)) {\n issues.push(error('reserved-key', `${path}/key`, `\"${field.key}\" is a built-in object property name`, 'Rename the field key'));\n } else if (clash) {\n issues.push(error('duplicate-key', `${path}/key`, `key \"${field.key}\" is already used by ${clash.path} on the same path`, 'Rename one of the fields, or move them to route branches that never meet'));\n }\n });\n return issues;\n}\n\nexport function structureIssues(context: CheckContext): DefinitionIssue[] {\n const { definition } = context;\n const both = !!definition.fields?.length && !!definition.steps?.length;\n return [\n ...(both ? [error('fields-and-steps', '', 'the definition has both \"fields\" and \"steps\"', 'Move the top-level fields into a step, or remove \"steps\"')] : []),\n ...stepIssues(context),\n ...keyIssues(context),\n ];\n}\n","import type { FormField } from '../types';\nimport { BOOLEAN_TYPES, BUILT_IN_TYPES } from '../validation/type-checks';\nimport { conditionErrors, OPERATORS } from './conditions';\nimport type { CheckContext, ConditionEntry, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { closest, oneOf, suggest, warning } from './issues';\n\nconst LIST_OPERATORS = ['in', 'notIn'];\nconst COMPARISONS = ['gt', 'gte', 'lt', 'lte'];\nconst STRING_TYPES = ['text', 'email', 'phone', 'password', 'textarea', 'date', 'datetime', 'select', 'radio', 'autocomplete'];\n\nfunction expectedType(field: FormField): string | undefined {\n if (field.type === 'number') return 'number';\n if (BOOLEAN_TYPES.includes(field.type)) return 'boolean';\n return STRING_TYPES.includes(field.type) ? 'string' : undefined;\n}\n\nfunction valueIssue(target: FormField, operator: string, operand: unknown, path: string): DefinitionIssue[] {\n const mismatch = (problem: string, hint: string) => [warning('condition-value-mismatch', path, problem, hint)];\n if (operator === 'notEmpty') return [];\n if (COMPARISONS.includes(operator)) {\n if (target.type !== 'multiselect' && !BOOLEAN_TYPES.includes(target.type)) return [];\n return mismatch(`\"${target.key}\" is a ${target.type} field, so \"${operator}\" never matches it`, 'Compare a number, text, radio or select field');\n }\n if (target.type === 'multiselect') {\n const result = operator === 'neq' || operator === 'notIn' ? 'always' : 'never';\n return mismatch(`\"${target.key}\" holds a list of values, so \"${operator}\" ${result} matches it`, 'Use notEmpty, or a select or radio field');\n }\n const operands = LIST_OPERATORS.includes(operator) && Array.isArray(operand) ? operand : [operand];\n const expected = expectedType(target);\n const wrong = expected && operands.find((item) => typeof item !== expected);\n if (expected && wrong !== undefined) return mismatch(`${JSON.stringify(wrong)} is a ${typeof wrong}, but \"${target.key}\" holds a ${expected}`, `Use a ${expected} value`);\n const options = expected === 'string' && !target.optionsFrom && target.options?.length ? target.options.map((option) => option.value) : null;\n const missing = options && operands.find((item) => !options.includes(item as string));\n return options && missing !== undefined ? mismatch(`${JSON.stringify(missing)} is not an option of \"${target.key}\"`, oneOf(options)) : [];\n}\n\nfunction conditionWarnings(context: CheckContext, entry: ConditionEntry): DefinitionIssue[] {\n const { condition, path } = entry;\n if (conditionErrors(context, entry).length) return [];\n const operator = OPERATORS.find((key) => key in condition)!;\n return valueIssue(context.keys.get(condition.field)!.field, operator, condition[operator as keyof typeof condition], `${path}/${operator}`);\n}\n\nfunction optionIssues({ field, path }: FieldEntry): DefinitionIssue[] {\n if (!['select', 'radio', 'multiselect'].includes(field.type)) return [];\n if (!Array.isArray(field.options)) {\n return field.optionsFrom ? [] : [warning('missing-options', `${path}/options`, `the ${field.type} field \"${field.key}\" has no options`, 'Add \"options\" or \"optionsFrom\"')];\n }\n const values = field.options.map((option) => option.value);\n const defaults = field.type === 'multiselect' && Array.isArray(field.defaultValue) ? field.defaultValue : [field.defaultValue];\n const missing = field.defaultValue === undefined || !values.length || field.optionsFrom ? undefined : defaults.find((value) => !values.includes(value as string));\n if (missing === undefined) return [];\n return [warning('default-not-in-options', `${path}/defaultValue`, `${JSON.stringify(missing)} is not an option of \"${field.key}\"`, oneOf(values))];\n}\n\nfunction ruleWarnings(context: CheckContext, { field, path }: FieldEntry): DefinitionIssue[] {\n const rules = field.validation ?? {};\n const rule = (name: string, problem: string, hint: string) => warning('rule-not-applicable', `${path}/validation/${name}`, problem, hint);\n const known = BUILT_IN_TYPES.includes(field.type);\n const numeric = field.type === 'number';\n const ranges = known && !numeric ? (['min', 'max'] as const).filter((name) => rules[name] !== undefined) : [];\n const sized = known && ['number', 'checkbox', 'switch'].includes(field.type) ? (['minLength', 'maxLength'] as const).filter((name) => rules[name] !== undefined) : [];\n const issues = [\n ...ranges.map((name) => rule(name, `\"${name}\" applies to number fields only`, `Use ${name}Length to limit text length`)),\n ...sized.map((name) => rule(name, `\"${name}\" does not apply to ${field.type} fields`, numeric ? 'Use min and max for numbers' : `Remove ${name}`)),\n ];\n const { validators } = context;\n if (rules.validator !== undefined && validators && !Object.prototype.hasOwnProperty.call(validators, rules.validator)) {\n issues.push(warning('unknown-validator', `${path}/validation/validator`, `the validator \"${rules.validator}\" is not registered`, 'Pass it in the \"validators\" option'));\n }\n return issues;\n}\n\nfunction fieldWarnings(context: CheckContext, entry: FieldEntry): DefinitionIssue[] {\n const { field, path } = entry;\n const match = BUILT_IN_TYPES.includes(field.type) ? undefined : closest(field.type, BUILT_IN_TYPES);\n return [\n ...(match === undefined ? [] : [warning('unknown-field-type', `${path}/type`, `\"${field.type}\" is not a built-in field type`, `Use \"${match}\", or register a component for \"${field.type}\"`)]),\n ...optionIssues(entry),\n ...ruleWarnings(context, entry),\n ...(field.optionsDependsOn ?? []).flatMap((key, index) => (\n context.keys.has(key) ? [] : [warning('unknown-field', `${path}/optionsDependsOn/${index}`, `\"${key}\" is not a field key`, suggest(key, context.keyList))]\n )),\n ];\n}\n\nfunction routeWarnings({ definition }: CheckContext): DefinitionIssue[] {\n const steps = definition.steps ?? [];\n return steps.flatMap((step, index) => {\n const issues: DefinitionIssue[] = [];\n const targets = new Set((step.routes ?? []).map((route) => route.to).filter((to) => to !== null));\n for (const target of targets) {\n const position = steps.findIndex((candidate) => candidate.id === target);\n const sibling = steps[position + 1];\n const exits = steps[position]?.routes?.some((route) => !route.show?.length && !route.showAny?.length);\n if (!sibling || !targets.has(sibling.id) || exits) continue;\n issues.push(warning('route-fallthrough', `/steps/${position}`, `branch \"${target}\" from \"${step.id}\" continues into the sibling branch \"${sibling.id}\"`, `Add an unconditional route on \"${target}\" to the step where the branches meet`));\n }\n if (step.skip && (step.next === false || !steps[1])) {\n issues.push(warning('skip-unreachable', `/steps/${index}/skip`, `step \"${step.id}\" has \"skip\" but no Continue button or later step`, 'Remove \"skip\", or remove \"next\": false'));\n }\n return issues;\n });\n}\n\nexport function definitionWarnings(context: CheckContext): DefinitionIssue[] {\n return [\n ...(typeof context.definition.title === 'string' ? [] : [warning('missing-property', '/title', '\"title\" must be a string', 'Add a title for host UI and editors')]),\n ...context.conditions.flatMap((entry) => conditionWarnings(context, entry)),\n ...context.entries.flatMap((entry) => fieldWarnings(context, entry)),\n ...routeWarnings(context),\n ];\n}\n","import type { FormDefinition } from '../types';\nimport { conditionIssues } from './conditions';\nimport { createContext, type CheckContext } from './context';\nimport { fieldIssues } from './fields';\nimport { graphIssues } from './graph';\nimport { FormDefinitionError, suggest, type DefinitionIssue } from './issues';\nimport { metaIssues, shapeIssues } from './shape';\nimport { structureIssues } from './structure';\nimport { definitionWarnings } from './warnings';\n\nexport interface CheckDefinitionOptions {\n validators?: Record<string, unknown>;\n}\n\ninterface Checks {\n validators?: Record<string, unknown>;\n suggest?: CheckContext['suggest'];\n warnings?: (context: CheckContext) => DefinitionIssue[];\n}\n\nfunction issues(input: unknown, { validators, suggest, warnings }: Checks = {}): DefinitionIssue[] {\n const shape = shapeIssues(input);\n if (shape.length) return shape;\n const context = createContext(input as FormDefinition, validators, suggest);\n return [\n ...metaIssues(input as Record<string, unknown>),\n ...structureIssues(context),\n ...conditionIssues(context),\n ...fieldIssues(context),\n ...graphIssues(context),\n ...(warnings ? warnings(context) : []),\n ];\n}\n\nexport function definitionErrors(input: unknown): DefinitionIssue[] {\n return issues(input);\n}\n\nexport function checkDefinition(input: unknown, options: CheckDefinitionOptions = {}): DefinitionIssue[] {\n return issues(input, { validators: options.validators, suggest, warnings: definitionWarnings });\n}\n\nexport function parseDefinition(input: unknown, options?: CheckDefinitionOptions): FormDefinition {\n const errors = issues(input, { suggest });\n if (errors.length) throw new FormDefinitionError(errors);\n return input as FormDefinition;\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var M="This form was updated. Please review your answers and submit again.",V="Please answer again.",c={message:"Something went wrong. Try again.",action:"retry"},v={message:"Could not send. Try again.",action:"retry"},l={message:"Could not send. Reload the page and try again.",action:"reload"},y={network:{message:"Could not reach the form server. Check your connection and try again.",action:"retry"},timeout:{message:"The form server did not respond. Try again.",action:"retry"},invalid:{message:"Some answers were not accepted.",action:null},rate_limited:{message:"Too many attempts. Wait a minute and try again.",action:"retry"},limit_reached:{message:"This form is not accepting responses right now.",action:null},not_found:{message:"This form no longer exists.",action:null},paused:{message:"This form is paused.",action:null},expired:{message:"This form has expired.",action:null},body_too_large:{message:"Your answers are too long. Shorten them and try again.",action:null},idempotency_key_reused:{message:"Your answers changed while sending. Try again.",action:"retry"},form_updated:{message:"This form was updated. Reload the page.",action:"reload"},client_outdated:{message:"This form needs a newer version of this page.",action:null},malformed_body:l,unsupported_media_type:l,invalid_idempotency_key:l,invalid_response:c,unavailable:c,internal:c},E={0:"network",400:"malformed_body",402:"limit_reached",404:"not_found",409:"paused",410:"expired",413:"body_too_large",422:"invalid",426:"client_outdated",429:"rate_limited"};function w(e,n=""){let t=y[n]??y[E[e]??""];return t||(e>=500?c:v)}var d=class extends Error{constructor(n,t,o,r,i){let s=w(n,t);super(s.message),this.name="CloudError",this.status=n,this.code=t,this.errors=o,this.version=r,this.action=s.action,this.cause=i;}get retryable(){return this.action==="retry"}};function h(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var x=new Map([["Form paused","paused"],["Form not found","not_found"],["Form expired","expired"],["internal error","internal"]]);function k(e,n="network"){return new d(0,n,void 0,void 0,e)}async function f(e){try{return await e.json()}catch(n){throw new d(e.status,"invalid_response",void 0,void 0,n)}}async function m(e){let n=await e.json().catch(()=>null);if(!h(n))return new d(e.status,"unknown");let t=h(n.errors)?n.errors:void 0,o=typeof n.version=="number"&&Number.isInteger(n.version)?n.version:void 0,r=typeof n.error=="string"?x.get(n.error)??n.error:"unknown";return new d(e.status,r,t,o)}var A=["Formhaus-Form-Version","Formhaus-Version"];function g(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function b(e){let n=Number(e);return e!==null&&e!==""&&Number.isInteger(n)&&n>0?n:void 0}function C(e){for(let n of A){let t=b(e.headers?.get(n));if(t!==void 0)return t}}function u(e){return typeof e=="string"&&e!==""?e:void 0}function F(e){if(!g(e))return {};let n=u(e.redirectUrl);return {...u(e.successMessage)&&{successMessage:u(e.successMessage)},...n&&/^https?:\/\//i.test(n)&&{redirectUrl:n},...typeof e.allowAnother=="boolean"&&{allowAnother:e.allowAnother}}}function _(e,n){if(!g(e))throw new d(n.status,"invalid_response");if(!("definition"in e))return {definition:e,version:C(n),settings:{}};if(!g(e.definition))throw new d(n.status,"invalid_response");return {definition:e.definition,version:b(e.version)??C(n),settings:F(e.settings),...u(e.renderToken)&&{renderToken:u(e.renderToken)}}}function S(){if(typeof crypto.randomUUID=="function")return crypto.randomUUID();let e=crypto.getRandomValues(new Uint8Array(16));e[6]=e[6]&15|64,e[8]=e[8]&63|128;let n=Array.from(e,t=>t.toString(16).padStart(2,"0")).join("");return `${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}var D="https://api.formhaus.dev",p="core=0.13.
|
|
2
|
-
export{M as a,V as b,w as c,d,k as e,F as f,U as g,H as h,z as i,X as j,Z as k};//# sourceMappingURL=chunk-
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
var M="This form was updated. Please review your answers and submit again.",V="Please answer again.",c={message:"Something went wrong. Try again.",action:"retry"},v={message:"Could not send. Try again.",action:"retry"},l={message:"Could not send. Reload the page and try again.",action:"reload"},y={network:{message:"Could not reach the form server. Check your connection and try again.",action:"retry"},timeout:{message:"The form server did not respond. Try again.",action:"retry"},invalid:{message:"Some answers were not accepted.",action:null},rate_limited:{message:"Too many attempts. Wait a minute and try again.",action:"retry"},limit_reached:{message:"This form is not accepting responses right now.",action:null},not_found:{message:"This form no longer exists.",action:null},paused:{message:"This form is paused.",action:null},expired:{message:"This form has expired.",action:null},body_too_large:{message:"Your answers are too long. Shorten them and try again.",action:null},idempotency_key_reused:{message:"Your answers changed while sending. Try again.",action:"retry"},form_updated:{message:"This form was updated. Reload the page.",action:"reload"},client_outdated:{message:"This form needs a newer version of this page.",action:null},malformed_body:l,unsupported_media_type:l,invalid_idempotency_key:l,invalid_response:c,unavailable:c,internal:c},E={0:"network",400:"malformed_body",402:"limit_reached",404:"not_found",409:"paused",410:"expired",413:"body_too_large",422:"invalid",426:"client_outdated",429:"rate_limited"};function w(e,n=""){let t=y[n]??y[E[e]??""];return t||(e>=500?c:v)}var d=class extends Error{constructor(n,t,o,r,i){let s=w(n,t);super(s.message),this.name="CloudError",this.status=n,this.code=t,this.errors=o,this.version=r,this.action=s.action,this.cause=i;}get retryable(){return this.action==="retry"}};function h(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var x=new Map([["Form paused","paused"],["Form not found","not_found"],["Form expired","expired"],["internal error","internal"]]);function k(e,n="network"){return new d(0,n,void 0,void 0,e)}async function f(e){try{return await e.json()}catch(n){throw new d(e.status,"invalid_response",void 0,void 0,n)}}async function m(e){let n=await e.json().catch(()=>null);if(!h(n))return new d(e.status,"unknown");let t=h(n.errors)?n.errors:void 0,o=typeof n.version=="number"&&Number.isInteger(n.version)?n.version:void 0,r=typeof n.error=="string"?x.get(n.error)??n.error:"unknown";return new d(e.status,r,t,o)}var A=["Formhaus-Form-Version","Formhaus-Version"];function g(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function b(e){let n=Number(e);return e!==null&&e!==""&&Number.isInteger(n)&&n>0?n:void 0}function C(e){for(let n of A){let t=b(e.headers?.get(n));if(t!==void 0)return t}}function u(e){return typeof e=="string"&&e!==""?e:void 0}function F(e){if(!g(e))return {};let n=u(e.redirectUrl);return {...u(e.successMessage)&&{successMessage:u(e.successMessage)},...n&&/^https?:\/\//i.test(n)&&{redirectUrl:n},...typeof e.allowAnother=="boolean"&&{allowAnother:e.allowAnother}}}function _(e,n){if(!g(e))throw new d(n.status,"invalid_response");if(!("definition"in e))return {definition:e,version:C(n),settings:{}};if(!g(e.definition))throw new d(n.status,"invalid_response");return {definition:e.definition,version:b(e.version)??C(n),settings:F(e.settings),...u(e.renderToken)&&{renderToken:u(e.renderToken)}}}function S(){if(typeof crypto.randomUUID=="function")return crypto.randomUUID();let e=crypto.getRandomValues(new Uint8Array(16));e[6]=e[6]&15|64,e[8]=e[8]&63|128;let n=Array.from(e,t=>t.toString(16).padStart(2,"0")).join("");return `${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}var D="https://api.formhaus.dev",p="core=0.13.1";function R({id:e,apiBase:n=D}){return `${n.replace(/\/+$/,"")}/f/${encodeURIComponent(e)}`}var I=15e3,O=3e4;async function T(e,n,t={},o){let r=new AbortController,i=()=>r.abort(),s=setTimeout(i,n);o?.aborted&&i(),o?.addEventListener("abort",i);try{return await fetch(e,{...t,signal:r.signal})}catch(a){throw o?.aborted?a:k(a,r.signal.aborted?"timeout":"network")}finally{clearTimeout(s),o?.removeEventListener("abort",i);}}async function U(e,n,t){let o=t===void 0?p:`${p}&v=${t}`,r=await T(`${R(e)}/form?${o}`,I,{},n);if(!r.ok)throw await m(r);return _(await f(r),r)}async function H(e,n){return (await U(e,n)).definition}function z(e){let n=null;return async(t,o=[])=>{let r=JSON.stringify({...e.extraBody?.(),values:t,skippedSteps:o,version:e.version,_fh_rt:e.renderToken,...e.firstRenderToken&&{_fh_rt_first:e.firstRenderToken}});n?.body!==r&&(n={body:r,key:S()});let i=await T(`${R(e)}?${p}`,O,{method:"POST",headers:{"Content-Type":"application/json","Idempotency-Key":n.key},body:r});if(!i.ok)throw await m(i);let s=await f(i);return n=null,s}}var $=new Set(["password","file"]),P=10080*60*1e3;function X(e,n){let t=[...e.fields??[],...(e.steps??[]).flatMap(r=>r.fields)],o={};for(let r of t)!$.has(r.type)&&n[r.key]!==void 0&&(o[r.key]=n[r.key]);return o}var N=()=>globalThis.sessionStorage;function Z(e=P,n=N){let t=r=>`formhaus:draft:${r}`,o=(r,i)=>{try{let s=n();return s?r(s):i}catch{return i}};return {load:(r,i)=>o(s=>{let a=JSON.parse(s.getItem(t(r))??"null");return a&&a.version===i&&Date.now()-a.savedAt<e?a.values:null},null),save:(r,i,s)=>o(a=>a.setItem(t(r),JSON.stringify({version:i,savedAt:Date.now(),values:s})),void 0),clear:r=>o(i=>i.removeItem(t(r)),void 0)}}
|
|
2
|
+
export{M as a,V as b,w as c,d,k as e,F as f,U as g,H as h,z as i,X as j,Z as k};//# sourceMappingURL=chunk-YTUVSJUF.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-YTUVSJUF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cloud/failures.ts","../src/cloud/error.ts","../src/cloud/envelope.ts","../src/cloud/uuid.ts","../src/cloud/client.ts","../src/cloud/draft.ts"],"names":["FORM_UPDATED_MESSAGE","ANSWER_AGAIN","SERVER","GENERIC","BROKEN","BY_CODE","CODE_BY_STATUS","failureFor","status","code","known","CloudError","errors","version","cause","failure","isRecord","value","LEGACY_CODES","networkError","readJson","response","error","toCloudError","body","VERSION_HEADERS","toVersion","headerVersion","name","text","parseSettings","redirect","parseForm","randomId","bytes","hex","byte","DEFAULT_API_BASE","CORE","endpoint","id","apiBase","LOAD_TIMEOUT","SUBMIT_TIMEOUT","send","url","timeout","init","signal","controller","abort","timer","fetchForm","options","after","query","fetchDefinition","createSubmitter","pending","values","skippedSteps","submission","SENSITIVE","WEEK","draftValues","definition","fields","step","kept","field","sessionStorageOf","sessionDraftStore","maxAge","storageOf","key","attempt","action","fallback","storage","draft"],"mappings":"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","file":"chunk-UFYD5LVW.js","sourcesContent":["export type CloudAction = 'retry' | 'reload' | null;\n\nexport interface CloudFailure {\n message: string;\n action: CloudAction;\n}\n\nexport const FORM_UPDATED_MESSAGE = 'This form was updated. Please review your answers and submit again.';\nexport const ANSWER_AGAIN = 'Please answer again.';\n\nconst SERVER: CloudFailure = { message: 'Something went wrong. Try again.', action: 'retry' };\nconst GENERIC: CloudFailure = { message: 'Could not send. Try again.', action: 'retry' };\nconst BROKEN: CloudFailure = { message: 'Could not send. Reload the page and try again.', action: 'reload' };\n\nconst BY_CODE: Record<string, CloudFailure> = {\n network: { message: 'Could not reach the form server. Check your connection and try again.', action: 'retry' },\n timeout: { message: 'The form server did not respond. Try again.', action: 'retry' },\n invalid: { message: 'Some answers were not accepted.', action: null },\n rate_limited: { message: 'Too many attempts. Wait a minute and try again.', action: 'retry' },\n limit_reached: { message: 'This form is not accepting responses right now.', action: null },\n not_found: { message: 'This form no longer exists.', action: null },\n paused: { message: 'This form is paused.', action: null },\n expired: { message: 'This form has expired.', action: null },\n body_too_large: { message: 'Your answers are too long. Shorten them and try again.', action: null },\n idempotency_key_reused: { message: 'Your answers changed while sending. Try again.', action: 'retry' },\n form_updated: { message: 'This form was updated. Reload the page.', action: 'reload' },\n client_outdated: { message: 'This form needs a newer version of this page.', action: null },\n malformed_body: BROKEN,\n unsupported_media_type: BROKEN,\n invalid_idempotency_key: BROKEN,\n invalid_response: SERVER,\n unavailable: SERVER,\n internal: SERVER,\n};\n\nconst CODE_BY_STATUS: Record<number, string> = {\n 0: 'network',\n 400: 'malformed_body',\n 402: 'limit_reached',\n 404: 'not_found',\n 409: 'paused',\n 410: 'expired',\n 413: 'body_too_large',\n 422: 'invalid',\n 426: 'client_outdated',\n 429: 'rate_limited',\n};\n\nexport function failureFor(status: number, code = ''): CloudFailure {\n const known = BY_CODE[code] ?? BY_CODE[CODE_BY_STATUS[status] ?? ''];\n if (known) return known;\n return status >= 500 ? SERVER : GENERIC;\n}\n","import { failureFor, type CloudAction } from './failures';\n\nexport class CloudError extends Error {\n readonly status: number;\n readonly code: string;\n readonly errors?: Record<string, string>;\n readonly version?: number;\n readonly action: CloudAction;\n readonly cause?: unknown;\n\n constructor(status: number, code: string, errors?: Record<string, string>, version?: number, cause?: unknown) {\n const failure = failureFor(status, code);\n super(failure.message);\n this.name = 'CloudError';\n this.status = status;\n this.code = code;\n this.errors = errors;\n this.version = version;\n this.action = failure.action;\n this.cause = cause;\n }\n\n get retryable(): boolean {\n return this.action === 'retry';\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nconst LEGACY_CODES = new Map([\n ['Form paused', 'paused'],\n ['Form not found', 'not_found'],\n ['Form expired', 'expired'],\n ['internal error', 'internal'],\n]);\n\nexport function networkError(cause: unknown, code = 'network'): CloudError {\n return new CloudError(0, code, undefined, undefined, cause);\n}\n\nexport async function readJson(response: CloudResponse): Promise<unknown> {\n try {\n return await response.json();\n } catch (error) {\n throw new CloudError(response.status, 'invalid_response', undefined, undefined, error);\n }\n}\n\nexport async function toCloudError(response: CloudResponse): Promise<CloudError> {\n const body: unknown = await response.json().catch(() => null);\n if (!isRecord(body)) return new CloudError(response.status, 'unknown');\n const errors = isRecord(body.errors) ? body.errors as Record<string, string> : undefined;\n const version = typeof body.version === 'number' && Number.isInteger(body.version) ? body.version : undefined;\n const code = typeof body.error === 'string' ? LEGACY_CODES.get(body.error) ?? body.error : 'unknown';\n return new CloudError(response.status, code, errors, version);\n}\n","import type { FormDefinition } from '../types';\nimport { CloudError } from './error';\n\nexport interface CloudSettings {\n successMessage?: string;\n redirectUrl?: string;\n allowAnother?: boolean;\n}\n\nexport interface PublishedForm {\n definition: FormDefinition;\n version?: number;\n settings?: CloudSettings;\n renderToken?: string;\n}\n\nconst VERSION_HEADERS = ['Formhaus-Form-Version', 'Formhaus-Version'];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction toVersion(value: unknown): number | undefined {\n const version = Number(value);\n return value !== null && value !== '' && Number.isInteger(version) && version > 0 ? version : undefined;\n}\n\nfunction headerVersion(response: CloudResponse): number | undefined {\n for (const name of VERSION_HEADERS) {\n const version = toVersion(response.headers?.get(name));\n if (version !== undefined) return version;\n }\n return undefined;\n}\n\nfunction text(value: unknown): string | undefined {\n return typeof value === 'string' && value !== '' ? value : undefined;\n}\n\nexport function parseSettings(value: unknown): CloudSettings {\n if (!isRecord(value)) return {};\n const redirect = text(value.redirectUrl);\n return {\n ...(text(value.successMessage) && { successMessage: text(value.successMessage) }),\n ...(redirect && /^https?:\\/\\//i.test(redirect) && { redirectUrl: redirect }),\n ...(typeof value.allowAnother === 'boolean' && { allowAnother: value.allowAnother }),\n };\n}\n\nexport function parseForm(body: unknown, response: CloudResponse): PublishedForm {\n if (!isRecord(body)) throw new CloudError(response.status, 'invalid_response');\n if (!('definition' in body)) return { definition: body as unknown as FormDefinition, version: headerVersion(response), settings: {} };\n if (!isRecord(body.definition)) throw new CloudError(response.status, 'invalid_response');\n return {\n definition: body.definition as unknown as FormDefinition,\n version: toVersion(body.version) ?? headerVersion(response),\n settings: parseSettings(body.settings),\n ...(text(body.renderToken) && { renderToken: text(body.renderToken) }),\n };\n}\n","export function randomId(): string {\n if (typeof crypto.randomUUID === 'function') return crypto.randomUUID();\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6] & 15) | 64;\n bytes[8] = (bytes[8] & 63) | 128;\n const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","import type { FormDefinition } from '../types';\nimport { networkError, readJson, toCloudError } from './error';\nimport { parseForm, type PublishedForm } from './envelope';\nimport { randomId } from './uuid';\n\nconst DEFAULT_API_BASE = 'https://api.formhaus.dev';\nconst CORE = `core=${__FORMHAUS_CORE_VERSION__}`;\n\nexport interface CloudSubmission {\n id: string;\n values: Record<string, unknown>;\n}\n\nexport interface CloudClientOptions {\n id: string;\n apiBase?: string;\n}\n\nfunction endpoint({ id, apiBase = DEFAULT_API_BASE }: CloudClientOptions): string {\n return `${apiBase.replace(/\\/+$/, '')}/f/${encodeURIComponent(id)}`;\n}\n\nconst LOAD_TIMEOUT = 15_000;\nconst SUBMIT_TIMEOUT = 30_000;\n\nasync function send(url: string, timeout: number, init: CloudRequestInit = {}, signal?: AbortSignal): Promise<CloudResponse> {\n const controller = new AbortController();\n const abort = () => controller.abort();\n const timer = setTimeout(abort, timeout);\n if (signal?.aborted) abort();\n signal?.addEventListener('abort', abort);\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } catch (error) {\n if (signal?.aborted) throw error;\n throw networkError(error, controller.signal.aborted ? 'timeout' : 'network');\n } finally {\n clearTimeout(timer);\n signal?.removeEventListener('abort', abort);\n }\n}\n\nexport async function fetchForm(options: CloudClientOptions, signal?: AbortSignal, after?: number): Promise<PublishedForm> {\n const query = after === undefined ? CORE : `${CORE}&v=${after}`;\n const response = await send(`${endpoint(options)}/form?${query}`, LOAD_TIMEOUT, {}, signal);\n if (!response.ok) throw await toCloudError(response);\n return parseForm(await readJson(response), response);\n}\n\nexport async function fetchDefinition(options: CloudClientOptions, signal?: AbortSignal): Promise<FormDefinition> {\n return (await fetchForm(options, signal)).definition;\n}\n\nexport interface CloudSubmitterOptions extends CloudClientOptions {\n version?: number;\n renderToken?: string;\n firstRenderToken?: string;\n extraBody?: () => Record<string, unknown>;\n}\n\nexport function createSubmitter(options: CloudSubmitterOptions) {\n let pending: { body: string; key: string } | null = null;\n\n return async (values: Record<string, unknown>, skippedSteps: string[] = []): Promise<CloudSubmission> => {\n const body = JSON.stringify({ ...options.extraBody?.(), values, skippedSteps, version: options.version, _fh_rt: options.renderToken, ...(options.firstRenderToken && { _fh_rt_first: options.firstRenderToken }) });\n if (pending?.body !== body) pending = { body, key: randomId() };\n const response = await send(`${endpoint(options)}?${CORE}`, SUBMIT_TIMEOUT, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'Idempotency-Key': pending.key },\n body,\n });\n if (!response.ok) throw await toCloudError(response);\n const submission = await readJson(response) as CloudSubmission;\n pending = null;\n return submission;\n };\n}\n","import type { FormDefinition } from '../types';\n\nexport interface DraftStorage {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\nexport interface DraftStore {\n load(id: string, version: number | undefined): Record<string, unknown> | null;\n save(id: string, version: number | undefined, values: Record<string, unknown>): void;\n clear(id: string): void;\n}\n\nconst SENSITIVE = new Set(['password', 'file']);\nconst WEEK = 7 * 24 * 60 * 60 * 1000;\n\nexport function draftValues(definition: FormDefinition, values: Record<string, unknown>): Record<string, unknown> {\n const fields = [...(definition.fields ?? []), ...(definition.steps ?? []).flatMap((step) => step.fields)];\n const kept: Record<string, unknown> = {};\n for (const field of fields) {\n if (!SENSITIVE.has(field.type) && values[field.key] !== undefined) kept[field.key] = values[field.key];\n }\n return kept;\n}\n\nconst sessionStorageOf = () => (globalThis as { sessionStorage?: DraftStorage }).sessionStorage;\n\nexport function sessionDraftStore(maxAge = WEEK, storageOf: () => DraftStorage | undefined = sessionStorageOf): DraftStore {\n const key = (id: string) => `formhaus:draft:${id}`;\n const attempt = <T>(action: (storage: DraftStorage) => T, fallback: T): T => {\n try {\n const storage = storageOf();\n return storage ? action(storage) : fallback;\n } catch {\n return fallback;\n }\n };\n return {\n load: (id, version) => attempt((storage) => {\n const draft = JSON.parse(storage.getItem(key(id)) ?? 'null') as { version?: number; savedAt: number; values: Record<string, unknown> } | null;\n return draft && draft.version === version && Date.now() - draft.savedAt < maxAge ? draft.values : null;\n }, null),\n save: (id, version, values) => attempt((storage) => storage.setItem(key(id), JSON.stringify({ version, savedAt: Date.now(), values })), undefined),\n clear: (id) => attempt((storage) => storage.removeItem(key(id)), undefined),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cloud/failures.ts","../src/cloud/error.ts","../src/cloud/envelope.ts","../src/cloud/uuid.ts","../src/cloud/client.ts","../src/cloud/draft.ts"],"names":["FORM_UPDATED_MESSAGE","ANSWER_AGAIN","SERVER","GENERIC","BROKEN","BY_CODE","CODE_BY_STATUS","failureFor","status","code","known","CloudError","errors","version","cause","failure","isRecord","value","LEGACY_CODES","networkError","readJson","response","error","toCloudError","body","VERSION_HEADERS","toVersion","headerVersion","name","text","parseSettings","redirect","parseForm","randomId","bytes","hex","byte","DEFAULT_API_BASE","CORE","endpoint","id","apiBase","LOAD_TIMEOUT","SUBMIT_TIMEOUT","send","url","timeout","init","signal","controller","abort","timer","fetchForm","options","after","query","fetchDefinition","createSubmitter","pending","values","skippedSteps","submission","SENSITIVE","WEEK","draftValues","definition","fields","step","kept","field","sessionStorageOf","sessionDraftStore","maxAge","storageOf","key","attempt","action","fallback","storage","draft"],"mappings":"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","file":"chunk-YTUVSJUF.js","sourcesContent":["export type CloudAction = 'retry' | 'reload' | null;\n\nexport interface CloudFailure {\n message: string;\n action: CloudAction;\n}\n\nexport const FORM_UPDATED_MESSAGE = 'This form was updated. Please review your answers and submit again.';\nexport const ANSWER_AGAIN = 'Please answer again.';\n\nconst SERVER: CloudFailure = { message: 'Something went wrong. Try again.', action: 'retry' };\nconst GENERIC: CloudFailure = { message: 'Could not send. Try again.', action: 'retry' };\nconst BROKEN: CloudFailure = { message: 'Could not send. Reload the page and try again.', action: 'reload' };\n\nconst BY_CODE: Record<string, CloudFailure> = {\n network: { message: 'Could not reach the form server. Check your connection and try again.', action: 'retry' },\n timeout: { message: 'The form server did not respond. Try again.', action: 'retry' },\n invalid: { message: 'Some answers were not accepted.', action: null },\n rate_limited: { message: 'Too many attempts. Wait a minute and try again.', action: 'retry' },\n limit_reached: { message: 'This form is not accepting responses right now.', action: null },\n not_found: { message: 'This form no longer exists.', action: null },\n paused: { message: 'This form is paused.', action: null },\n expired: { message: 'This form has expired.', action: null },\n body_too_large: { message: 'Your answers are too long. Shorten them and try again.', action: null },\n idempotency_key_reused: { message: 'Your answers changed while sending. Try again.', action: 'retry' },\n form_updated: { message: 'This form was updated. Reload the page.', action: 'reload' },\n client_outdated: { message: 'This form needs a newer version of this page.', action: null },\n malformed_body: BROKEN,\n unsupported_media_type: BROKEN,\n invalid_idempotency_key: BROKEN,\n invalid_response: SERVER,\n unavailable: SERVER,\n internal: SERVER,\n};\n\nconst CODE_BY_STATUS: Record<number, string> = {\n 0: 'network',\n 400: 'malformed_body',\n 402: 'limit_reached',\n 404: 'not_found',\n 409: 'paused',\n 410: 'expired',\n 413: 'body_too_large',\n 422: 'invalid',\n 426: 'client_outdated',\n 429: 'rate_limited',\n};\n\nexport function failureFor(status: number, code = ''): CloudFailure {\n const known = BY_CODE[code] ?? BY_CODE[CODE_BY_STATUS[status] ?? ''];\n if (known) return known;\n return status >= 500 ? SERVER : GENERIC;\n}\n","import { failureFor, type CloudAction } from './failures';\n\nexport class CloudError extends Error {\n readonly status: number;\n readonly code: string;\n readonly errors?: Record<string, string>;\n readonly version?: number;\n readonly action: CloudAction;\n readonly cause?: unknown;\n\n constructor(status: number, code: string, errors?: Record<string, string>, version?: number, cause?: unknown) {\n const failure = failureFor(status, code);\n super(failure.message);\n this.name = 'CloudError';\n this.status = status;\n this.code = code;\n this.errors = errors;\n this.version = version;\n this.action = failure.action;\n this.cause = cause;\n }\n\n get retryable(): boolean {\n return this.action === 'retry';\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nconst LEGACY_CODES = new Map([\n ['Form paused', 'paused'],\n ['Form not found', 'not_found'],\n ['Form expired', 'expired'],\n ['internal error', 'internal'],\n]);\n\nexport function networkError(cause: unknown, code = 'network'): CloudError {\n return new CloudError(0, code, undefined, undefined, cause);\n}\n\nexport async function readJson(response: CloudResponse): Promise<unknown> {\n try {\n return await response.json();\n } catch (error) {\n throw new CloudError(response.status, 'invalid_response', undefined, undefined, error);\n }\n}\n\nexport async function toCloudError(response: CloudResponse): Promise<CloudError> {\n const body: unknown = await response.json().catch(() => null);\n if (!isRecord(body)) return new CloudError(response.status, 'unknown');\n const errors = isRecord(body.errors) ? body.errors as Record<string, string> : undefined;\n const version = typeof body.version === 'number' && Number.isInteger(body.version) ? body.version : undefined;\n const code = typeof body.error === 'string' ? LEGACY_CODES.get(body.error) ?? body.error : 'unknown';\n return new CloudError(response.status, code, errors, version);\n}\n","import type { FormDefinition } from '../types';\nimport { CloudError } from './error';\n\nexport interface CloudSettings {\n successMessage?: string;\n redirectUrl?: string;\n allowAnother?: boolean;\n}\n\nexport interface PublishedForm {\n definition: FormDefinition;\n version?: number;\n settings?: CloudSettings;\n renderToken?: string;\n}\n\nconst VERSION_HEADERS = ['Formhaus-Form-Version', 'Formhaus-Version'];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction toVersion(value: unknown): number | undefined {\n const version = Number(value);\n return value !== null && value !== '' && Number.isInteger(version) && version > 0 ? version : undefined;\n}\n\nfunction headerVersion(response: CloudResponse): number | undefined {\n for (const name of VERSION_HEADERS) {\n const version = toVersion(response.headers?.get(name));\n if (version !== undefined) return version;\n }\n return undefined;\n}\n\nfunction text(value: unknown): string | undefined {\n return typeof value === 'string' && value !== '' ? value : undefined;\n}\n\nexport function parseSettings(value: unknown): CloudSettings {\n if (!isRecord(value)) return {};\n const redirect = text(value.redirectUrl);\n return {\n ...(text(value.successMessage) && { successMessage: text(value.successMessage) }),\n ...(redirect && /^https?:\\/\\//i.test(redirect) && { redirectUrl: redirect }),\n ...(typeof value.allowAnother === 'boolean' && { allowAnother: value.allowAnother }),\n };\n}\n\nexport function parseForm(body: unknown, response: CloudResponse): PublishedForm {\n if (!isRecord(body)) throw new CloudError(response.status, 'invalid_response');\n if (!('definition' in body)) return { definition: body as unknown as FormDefinition, version: headerVersion(response), settings: {} };\n if (!isRecord(body.definition)) throw new CloudError(response.status, 'invalid_response');\n return {\n definition: body.definition as unknown as FormDefinition,\n version: toVersion(body.version) ?? headerVersion(response),\n settings: parseSettings(body.settings),\n ...(text(body.renderToken) && { renderToken: text(body.renderToken) }),\n };\n}\n","export function randomId(): string {\n if (typeof crypto.randomUUID === 'function') return crypto.randomUUID();\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6] & 15) | 64;\n bytes[8] = (bytes[8] & 63) | 128;\n const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","import type { FormDefinition } from '../types';\nimport { networkError, readJson, toCloudError } from './error';\nimport { parseForm, type PublishedForm } from './envelope';\nimport { randomId } from './uuid';\n\nconst DEFAULT_API_BASE = 'https://api.formhaus.dev';\nconst CORE = `core=${__FORMHAUS_CORE_VERSION__}`;\n\nexport interface CloudSubmission {\n id: string;\n values: Record<string, unknown>;\n}\n\nexport interface CloudClientOptions {\n id: string;\n apiBase?: string;\n}\n\nfunction endpoint({ id, apiBase = DEFAULT_API_BASE }: CloudClientOptions): string {\n return `${apiBase.replace(/\\/+$/, '')}/f/${encodeURIComponent(id)}`;\n}\n\nconst LOAD_TIMEOUT = 15_000;\nconst SUBMIT_TIMEOUT = 30_000;\n\nasync function send(url: string, timeout: number, init: CloudRequestInit = {}, signal?: AbortSignal): Promise<CloudResponse> {\n const controller = new AbortController();\n const abort = () => controller.abort();\n const timer = setTimeout(abort, timeout);\n if (signal?.aborted) abort();\n signal?.addEventListener('abort', abort);\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } catch (error) {\n if (signal?.aborted) throw error;\n throw networkError(error, controller.signal.aborted ? 'timeout' : 'network');\n } finally {\n clearTimeout(timer);\n signal?.removeEventListener('abort', abort);\n }\n}\n\nexport async function fetchForm(options: CloudClientOptions, signal?: AbortSignal, after?: number): Promise<PublishedForm> {\n const query = after === undefined ? CORE : `${CORE}&v=${after}`;\n const response = await send(`${endpoint(options)}/form?${query}`, LOAD_TIMEOUT, {}, signal);\n if (!response.ok) throw await toCloudError(response);\n return parseForm(await readJson(response), response);\n}\n\nexport async function fetchDefinition(options: CloudClientOptions, signal?: AbortSignal): Promise<FormDefinition> {\n return (await fetchForm(options, signal)).definition;\n}\n\nexport interface CloudSubmitterOptions extends CloudClientOptions {\n version?: number;\n renderToken?: string;\n firstRenderToken?: string;\n extraBody?: () => Record<string, unknown>;\n}\n\nexport function createSubmitter(options: CloudSubmitterOptions) {\n let pending: { body: string; key: string } | null = null;\n\n return async (values: Record<string, unknown>, skippedSteps: string[] = []): Promise<CloudSubmission> => {\n const body = JSON.stringify({ ...options.extraBody?.(), values, skippedSteps, version: options.version, _fh_rt: options.renderToken, ...(options.firstRenderToken && { _fh_rt_first: options.firstRenderToken }) });\n if (pending?.body !== body) pending = { body, key: randomId() };\n const response = await send(`${endpoint(options)}?${CORE}`, SUBMIT_TIMEOUT, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'Idempotency-Key': pending.key },\n body,\n });\n if (!response.ok) throw await toCloudError(response);\n const submission = await readJson(response) as CloudSubmission;\n pending = null;\n return submission;\n };\n}\n","import type { FormDefinition } from '../types';\n\nexport interface DraftStorage {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\nexport interface DraftStore {\n load(id: string, version: number | undefined): Record<string, unknown> | null;\n save(id: string, version: number | undefined, values: Record<string, unknown>): void;\n clear(id: string): void;\n}\n\nconst SENSITIVE = new Set(['password', 'file']);\nconst WEEK = 7 * 24 * 60 * 60 * 1000;\n\nexport function draftValues(definition: FormDefinition, values: Record<string, unknown>): Record<string, unknown> {\n const fields = [...(definition.fields ?? []), ...(definition.steps ?? []).flatMap((step) => step.fields)];\n const kept: Record<string, unknown> = {};\n for (const field of fields) {\n if (!SENSITIVE.has(field.type) && values[field.key] !== undefined) kept[field.key] = values[field.key];\n }\n return kept;\n}\n\nconst sessionStorageOf = () => (globalThis as { sessionStorage?: DraftStorage }).sessionStorage;\n\nexport function sessionDraftStore(maxAge = WEEK, storageOf: () => DraftStorage | undefined = sessionStorageOf): DraftStore {\n const key = (id: string) => `formhaus:draft:${id}`;\n const attempt = <T>(action: (storage: DraftStorage) => T, fallback: T): T => {\n try {\n const storage = storageOf();\n return storage ? action(storage) : fallback;\n } catch {\n return fallback;\n }\n };\n return {\n load: (id, version) => attempt((storage) => {\n const draft = JSON.parse(storage.getItem(key(id)) ?? 'null') as { version?: number; savedAt: number; values: Record<string, unknown> } | null;\n return draft && draft.version === version && Date.now() - draft.savedAt < maxAge ? draft.values : null;\n }, null),\n save: (id, version, values) => attempt((storage) => storage.setItem(key(id), JSON.stringify({ version, savedAt: Date.now(), values })), undefined),\n clear: (id) => attempt((storage) => storage.removeItem(key(id)), undefined),\n };\n}\n"]}
|
package/dist/cloud.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{d as CloudError,i as createSubmitter,h as fetchDefinition,g as fetchForm,k as sessionDraftStore}from'./chunk-
|
|
1
|
+
export{d as CloudError,i as createSubmitter,h as fetchDefinition,g as fetchForm,k as sessionDraftStore}from'./chunk-YTUVSJUF.js';//# sourceMappingURL=cloud.js.map
|
|
2
2
|
//# sourceMappingURL=cloud.js.map
|
package/dist/i18n.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {g,k,e,a,b,d,c as c$1,f}from'./chunk-
|
|
1
|
+
import {g,k,e,a,b,d,c as c$1,f}from'./chunk-RN5GQHKN.js';import {a as a$1,b as b$1,c}from'./chunk-PZEBYRGE.js';export{c as defaultLabels}from'./chunk-PZEBYRGE.js';import {b as b$2,a as a$2,g as g$1,r}from'./chunk-35SAVPYL.js';export{a as defaultMessages}from'./chunk-35SAVPYL.js';function B({definition:e,entries:t}){let n=[],r=[],l=false,f$1=(o,a,u,p,d$1)=>{for(let F of Object.keys(o??{}))u.includes(F)||n.push(c$1(p,`${a}/${d(F)}`,`"${F}" is not ${d$1}`,u.length?f(u):"Remove it"));},i=(o,a,u,p)=>{o&&(p&&r.push([`${a}/${p}`,o[p]]),o.i18n&&(l=true,f$1(o.i18n,`${a}/i18n`,[...u],"unknown-i18n-slot","a translatable text here")));},c$2=Object.keys(a$2),s=Object.keys(c);f$1(e.messages,"/messages",c$2,"unknown-message-key","a message key"),f$1(e.labels,"/labels",s,"unknown-label-key","a label key"),f$1(e.i18n?.messages,"/i18n/messages",c$2,"unknown-message-key","a message key"),f$1(e.i18n?.labels,"/i18n/labels",s,"unknown-label-key","a label key"),i(e,"",[...a$1.form,"messages","labels"],"id"),i(e.submit,"/submit",a$1.action),i(e.cancel,"/cancel",a$1.action),(e.steps??[]).forEach((o,a)=>{i(o,`/steps/${a}`,a$1.step,"id");for(let u of ["next","back","skip"])i(o[u],`/steps/${a}/${u}`,a$1.action);});for(let{field:o,path:a}of t){i(o,a,a$1.field,"key"),o.options?.forEach((p,d)=>i(p,`${a}/options/${d}`,a$1.option,"value"));let u=o.validation;u&&i(u,`${a}/validation`,a$1.validation.filter(p=>b$1(u,p)));}if(l)for(let[o,a]of r)typeof a=="string"&&/[.:]/.test(a)&&n.push(c$1("i18n-unsafe-identifier",o,`${JSON.stringify(a)} contains "." or ":"`,'Use letters, digits, "-" or "_", because translation keys and TMS imports split on these characters'));return n}var y=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),G=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function x(e,t){let n=e;for(let r of t)n=y(n)&&G(n,r)?n[r]:void 0;return typeof n=="string"&&n.trim()?n:void 0}function P(e,t,n){Object.defineProperty(e,t,{value:n,enumerable:true,writable:true,configurable:true});}function J(e,t,n){let r=e;for(let l of t.slice(0,-1))(!G(r,l)||!y(r[l]))&&P(r,l,{}),r=r[l];P(r,t[t.length-1],n);}function $(e,t=[]){return y(e)?Object.keys(e).flatMap(n=>$(e[n],[...t,n])):[{path:t,value:e}]}var N=e=>JSON.stringify(e),O=e=>[...new Set(e.match(/\{\w+\}/g)??[])].map(t=>t.slice(1,-1)).sort();function h(e){let t=[],n=(i,c,s,o,a)=>{c&&t.push({kind:i,node:c,path:s,address:o,field:a});},r=(i,c,s,o)=>{for(let a of o)n("action",i[a],`${c}/${a}`,[...s,a]);},l=(i,c,s)=>i.forEach((o,a)=>{let u=`${c}/fields/${a}`,p=[...s,"fields",o.key];n("field",o,u,p),o.options?.forEach((d,F)=>n("option",d,`${u}/options/${F}`,[...p,"options",d.value])),n("validation",o.validation,`${u}/validation`,[...p,"validation"],o);});n("form",e,"",[]),r(e,"",[],["submit","cancel"]);let f=e.steps??[];return f.forEach((i,c)=>{let s=`/steps/${c}`,o=["steps",i.id];n("step",i,s,o),r(i,s,o,["next","back","skip"]),l(i.fields,s,o);}),f.length||l(e.fields??[],"",[]),t}function W(e,t,n){return e==="option"?t:[...t,n]}var V={form:["title","description"],step:["title","description"],field:["label","placeholder","helperText"],option:["label"],action:["label"],validation:[]};function L(e,t,n,r=[]){return e===void 0?[]:y(e)?Object.entries(e).flatMap(([l,f])=>r.includes(l)?L(f,`${t}/${l}`,n):typeof f=="string"&&f.trim()?[]:[b("invalid-type",`${t}/${d(l)}`,"must be a non-empty string")]):[b("invalid-type",t,`must be an object of ${n}`)]}function Y(e){let t=e;return [...t.lang===void 0||typeof t.lang=="string"?[]:[b("invalid-type","/lang",'"lang" must be a string')],...L(t.messages,"/messages","message templates"),...L(t.labels,"/labels","label templates"),...h(e).flatMap(({kind:n,node:r,path:l})=>{let f=r.i18n,i=y(f)?V[n].filter(c=>f[c]!==void 0&&typeof r[c]!="string"):[];return [...L(f,`${l}/i18n`,"translation keys",n==="form"?["messages","labels"]:[]),...i.map(c=>b("i18n-unbound-slot",`${l}/i18n/${c}`,`"${c}" has a translation key but no source text`,`Add "${c}" as the fallback text`))]})]}function M(e){let t=Y(e);return t.length?t:B(g(e))}var q={minLength:"min",maxLength:"max",min:"min",max:"max"};function X(e,t){return e.type==="multiselect"&&t.endsWith("Length")?t.replace("Length","Items"):t}function Z(e){let t=new Set([...Object.keys(e.messages??{}),...Object.keys(e.i18n?.messages??{})]);for(let n of g$1(e)){let r$1=n.validation??{};for(let l of a$1.validation)b$1(r$1,l)&&r$1[l]!==""&&typeof r$1[l==="required"?l:`${l}Message`]!="string"&&t.add(X(n,l));for(let l of r(n))t.add(l);}return t}function ee(e,{kind:t,node:n,address:r,field:l}){let f=n.i18n??{};return a$1[t].flatMap(i=>{if(t!=="validation"){let p=n[i];return typeof p!="string"?[]:[{kind:"text",address:W(t,r,i),key:f[i],source:p,fallback:p,params:{},template:true,apply:d=>{n[i]=d;}}]}if(!b$1(n,i)||!l)return [];let c=i==="required"?i:`${i}Message`,s=typeof n[c]=="string"?n[c]:void 0,o=q[i]?{[q[i]]:n[i]}:{},a=X(l,i),u=s??b$2(e.messages?.[a]??a$2[a],o);return [{kind:"rule",address:[...r,i],key:f[i],source:s,fallback:u,params:o,template:s!==void 0||!!f[i],apply:p=>{n[c]=p;}}]})}function H(e,t,n){let r=t==="messages"?a$2:c,l=e.i18n?.[t]??{};return Object.keys(r).map(f=>{let i=e[t]?.[f]??r[f];return {kind:t==="messages"?"message":"label",address:[t,f],key:l[f],source:i,fallback:i,params:{},template:n.has(f),apply:c=>{(e[t]??(e[t]={}))[f]=c;}}})}function S(e){let t=!!e.steps?.length,n=new Set(t?["continue","back","stepOf","errorSummary"]:["errorSummary"]);return [...h(e).flatMap(r=>ee(e,r)),...H(e,"messages",Z(e)),...H(e,"labels",n)]}function A(e,t,n){if(t!==void 0)return t;if(e!==false)return (e?[e,...n]:n).join(".")}function te(e,t){for(let n of S(e)){let r=x(t,n.address);r!==void 0&&n.apply(n.kind==="rule"?b$2(r,n.params):r);}return {definition:e,messages:e.messages??{},labels:e.labels??{}}}function ne(e,{translate:t,prefix:n=e.id}){let r=(s,o,a,u)=>{let p=A(n,s,o),d;try{d=p===void 0?void 0:t(p,a,u);}catch{return}return typeof d=="string"&&d.trim()&&d!==p?b$2(d,a):void 0},l={messages:{...e.messages},labels:{...e.labels}},f=e.i18n??{};for(let s of S(e)){if(s.kind!=="text"&&s.kind!=="rule")continue;let o=r(s.key,s.address,s.params,s.fallback);o!==void 0&&(s.source!==void 0||o!==s.fallback)&&s.apply(o);}return {definition:e,messages:(s,o)=>r(f.messages?.[s],["messages",s],o,b$2(l.messages[s]??a$2[s],o)),labels:(s,o)=>r(f.labels?.[s],["labels",s],o,b$2(l.labels[s]??c[s],o))}}function se(e$1,t){let n=M(k(e$1)).filter(e);if(n.length)throw new a(n);let r=JSON.parse(JSON.stringify(e$1));return t.lang&&(r.lang=t.lang),"overlay"in t?te(r,t.overlay):ne(r,t)}function re(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 Q=e=>S(e).filter(t=>t.template);function j(e,t){let n=A(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:re(n,r)}}function oe(e,{prefix:t=e.id}={}){return Q(e).map(n=>j(n,t))}function ie(e){let t={};for(let n of Q(e))J(t,n.address,n.source??n.fallback);return t}var D=e=>e.join(".");function ae(e,t){let n=O(t);return e.kind==="rule"?n.some(r=>!Object.prototype.hasOwnProperty.call(e.params,r)):n.join()!==O(e.source??e.fallback).join()}function le(e,t,n){let r=S(e),l=new Set(r.map(s=>N(s.address))),f=y(t)?$(t):[{path:[],value:null}],i=r.filter(s=>x(t,s.address)!==void 0),c={missing:r.filter(s=>s.template&&x(t,s.address)===void 0).map(s=>D(s.address)),unknown:f.filter(({path:s,value:o})=>typeof o=="string"&&!l.has(N(s))).map(({path:s})=>D(s)),invalid:f.filter(({value:s})=>typeof s!="string").map(({path:s})=>D(s)),placeholderMismatch:i.filter(s=>ae(s,x(t,s.address))).map(s=>D(s.address)),unlabeled:h(e).filter(({kind:s,node:o,address:a})=>s==="field"&&!(typeof o.label=="string"&&o.label.trim())&&x(t,[...a,"label"])===void 0).map(({address:s})=>D([...s,"label"]))};if(n?.slots){let s=n.slots,o=a=>Object.prototype.hasOwnProperty.call(s,a);c.stale=i.filter(a=>a.template).map(a=>j(a,n.prefix??e.id)).filter(({address:a,hash:u})=>o(a)&&s[a]?.hash!==void 0&&s[a].hash!==u).map(({address:a})=>a);}return c}export{M as checkTranslations,se as localize,oe as textSlots,le as translationIssues,ie as translationTemplate};//# sourceMappingURL=i18n.js.map
|
|
2
2
|
//# sourceMappingURL=i18n.js.map
|
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
|