@jsonui/core 0.10.9 → 0.10.11
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/cjs/index.js +49 -25
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +49 -25
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/package.json +1 -1
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/util/contants.ts","../../src/util/helpers.ts","../../src/util/json-pointer.ts","../../src/store/formStore.ts","../../src/JsonUI/setAction.ts","../../src/actions/set.ts","../../src/actions/index.ts","../../src/JsonUI/expandSimplifiedNode.ts","../../src/JsonUI/renderNode/listPagination.ts","../../src/JsonUI/renderNode/mergePathModifiers.ts","../../src/JsonUI/renderNode/pathPrefix.ts","../../src/JsonUI/getModifier.ts","../../src/JsonUI/resolveModifier.ts","../../src/style/types.ts","../../src/style/resolveStyle.ts","../../src/JsonUI/validation.ts","../../src/JsonUI/renderNode/collectGetDeps.ts","../../src/JsonUI/renderNode/runResolution.ts","../../src/JsonUI/resolveAction.ts","../../src/modifiers/get.ts","../../src/modifiers/jsonata.ts","../../src/modifiers/isNotTouchedOrHasError.ts","../../src/modifiers/t.ts","../../src/modifiers/index.ts"],"sourcesContent":["export const V_COMP = '$comp'\nexport const V_CHILDREN = '$children'\nexport const ACTION_KEY = '$action'\nexport const MODIFIER_KEY = '$modifier'\nexport const PATH_MODIFIERS_KEY = '$pathModifiers'\nexport const LIST_SEMAPHORE = '$isList'\nexport const LIST_ITEM = '$listItem'\n\n/** Main JsonUI list pagination keys (parity). */\nexport const LIST_PAGE = '$page'\nexport const LIST_ITEM_PER_PAGE = '$itemPerPage'\nexport const LIST_LENGTH = '$listLength'\n\n/** Main JsonUI nested locale blobs merged into the translation map. */\nexport const REF_LOCALES = '$locales'\n\n/** Field-level inline validation spec key on a node. */\nexport const V_VALIDATIONS = '$validations'\n\n// Store-name suffixes for parallel trees (errors, touch-state, etc.).\nexport const ERROR_STORE_SUFFIX = '.error'\n/** Shadow store for field touched state (aligned with main JsonUI `.touch`). */\nexport const TOUCH_STORE_SUFFIX = '.touch'\n\nexport const JSON_SEPARATOR = '/'\n\n// Single-root store layout helper.\n// All logical stores live under `/storeRoot/{storeName}/...`.\nexport const STORE_ROOT_PATH = '/storeRoot'\n","/**\n * Shared helpers for function handlers.\n */\n\nexport const hasAnyError = (value: unknown): boolean => {\n if (value === null || value === undefined) return false\n if (Array.isArray(value)) {\n return value.some((v) => hasAnyError(v))\n }\n if (typeof value === 'object') {\n return Object.values(value as Record<string, unknown>).some((v) => hasAnyError(v))\n }\n // Any non-null / non-undefined primitive counts as \"has error\".\n return true\n}\n\nexport const hasAnyTouched = (value: unknown): boolean => {\n if (value === true) return true\n if (value === null || value === undefined) return false\n if (Array.isArray(value)) {\n return value.some((v) => hasAnyTouched(v))\n }\n if (typeof value === 'object') {\n return Object.values(value as Record<string, unknown>).some((v) => hasAnyTouched(v))\n }\n return false\n}\n\n/**\n * Throws if value contains anything that cannot round-trip through JSON:\n * undefined, function, symbol, bigint, NaN, non-finite numbers, or circular references.\n */\nexport const assertJsonCompatible = (value: unknown, seen = new WeakSet()): void => {\n if (value === null) return\n if (value === undefined) throw new Error('undefined is not JSON-compatible')\n\n const type = typeof value\n if (type === 'string' || type === 'boolean') return\n if (type === 'number') {\n if (!Number.isFinite(value)) throw new Error(`Non-finite number is not JSON-compatible: ${value}`)\n return\n }\n if (type === 'function' || type === 'symbol' || type === 'bigint') {\n throw new Error(`${type} is not JSON-compatible`)\n }\n\n const obj = value\n if (seen.has(obj)) throw new Error('Circular reference is not JSON-compatible')\n seen.add(obj)\n\n if (Array.isArray(value)) {\n for (const item of value as unknown[]) assertJsonCompatible(item, seen)\n } else {\n for (const v of Object.values(value as Record<string, unknown>)) assertJsonCompatible(v, seen)\n }\n\n seen.delete(obj)\n}\n\n/**\n * Deep clone helper used by get() so callers cannot mutate the internal store state.\n * Only JSON-compatible values are accepted; functions and other non-JSON types throw.\n */\nexport const cloneDeep = <T>(value: T): T => {\n if (value === null || value === undefined) return value\n\n const type = typeof value\n if (type !== 'object') {\n if (type === 'function' || type === 'symbol' || type === 'bigint') {\n throw new Error(`${type} is not JSON-compatible`)\n }\n if (type === 'number' && !Number.isFinite(value)) {\n throw new Error(`Non-finite number is not JSON-compatible: ${value}`)\n }\n return value\n }\n\n if (Array.isArray(value)) {\n return (value as unknown[]).map((item) => cloneDeep(item)) as unknown as T\n }\n\n const obj = value as Record<string, unknown>\n const result: Record<string, unknown> = {}\n for (const key of Object.keys(obj)) {\n result[key] = cloneDeep(obj[key])\n }\n return result as unknown as T\n}\n","/**\n * Minimal JSON Pointer implementation (RFC 6901).\n * Supports get, set, and path resolution (absolute, relative, ./ ../).\n *\n * Paths and nesting are unbounded: e.g. /a/b/c/0/d/e/1/f is valid;\n * segments can be object keys or array indices (numeric strings).\n */\n\nimport { JSON_SEPARATOR } from './contants'\n\nconst DANGEROUS_KEYS = new Set(['__proto__', 'prototype', 'constructor'])\n\n/**\n * Normalize a path: remove empty segments and trailing/leading slashes.\n * Prevents accidental keys like \"\" from paths such as \"//\" or \"/a/\".\n * Does not decode segments (e.g. ~1 stays so one segment is preserved).\n */\nexport const normalizePath = (pathStr: string): string => {\n if (!pathStr || pathStr === '/') return '/'\n const trimmed = pathStr.startsWith('/') ? pathStr.slice(1) : pathStr\n const segments = trimmed.split(JSON_SEPARATOR).filter((s) => s !== '')\n return segments.length === 0 ? '/' : JSON_SEPARATOR + segments.join(JSON_SEPARATOR)\n}\n\nexport const parsePath = (pathStr: string): string[] => {\n if (!pathStr || pathStr === '/') return []\n if (!pathStr.startsWith(JSON_SEPARATOR)) {\n throw new Error(`Invalid JSON Pointer path: ${pathStr}`)\n }\n return pathStr.slice(1).split(JSON_SEPARATOR).map(decode)\n}\n\nconst decode = (segment: string): string => {\n for (let i = 0; i < segment.length; i++) {\n if (segment[i] === '~') {\n const next = segment[i + 1]\n if (next !== '0' && next !== '1') {\n throw new Error(`Invalid JSON Pointer escape in segment: ${segment}`)\n }\n i += 1\n }\n }\n return segment.replace(/~1/g, '/').replace(/~0/g, '~')\n}\n\nconst encode = (segment: string): string => {\n return String(segment).replace(/~/g, '~0').replace(/\\//g, '~1')\n}\n\nexport const get = (obj: unknown, pathStr: string): unknown => {\n const segments = parsePath(pathStr) // parsePath normalizes, so /a//b/ -> /a/b\n let current: unknown = obj\n for (const seg of segments) {\n if (current == null || typeof current !== 'object') return undefined\n current = (current as Record<string, unknown>)[seg]\n }\n return current\n}\n\nexport const set = (obj: Record<string, unknown>, pathStr: string, value: unknown): void => {\n const segments = parsePath(pathStr)\n if (segments.length === 0) return\n\n let current: Record<string, unknown> = obj\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i]\n if (DANGEROUS_KEYS.has(seg)) {\n throw new Error(`Unsafe JSON Pointer segment: ${seg}`)\n }\n\n const nextSeg = segments[i + 1]\n const nextKey = isArrayIndexToken(nextSeg) ? parseInt(nextSeg, 10) : nextSeg\n\n if (!(seg in current) || current[seg] == null) {\n current[seg] = typeof nextKey === 'number' ? [] : {}\n }\n const next = current[seg]\n if (typeof next !== 'object' || next === null) {\n current[seg] = typeof nextKey === 'number' ? [] : {}\n }\n current = current[seg] as Record<string, unknown>\n }\n\n const lastSeg = segments[segments.length - 1]\n if (DANGEROUS_KEYS.has(lastSeg)) {\n throw new Error(`Unsafe JSON Pointer segment: ${lastSeg}`)\n }\n\n const lastKey = isArrayIndexToken(lastSeg) ? parseInt(lastSeg, 10) : lastSeg\n if (Array.isArray(current)) {\n if (typeof lastKey !== 'number') {\n throw new Error(`Invalid array index segment: ${lastSeg}`)\n }\n ;(current as unknown[])[lastKey] = value\n } else {\n current[lastSeg] = value\n }\n}\n\n/**\n * Resolve a path against a base path (for relative paths like ./x, ../y).\n * Supports arbitrary depth; excess \"..\" yields root then appends remaining segments.\n */\nexport const resolvePath = (basePath: string, relativePath: string): string => {\n if (relativePath.startsWith('/')) return normalizePath(relativePath)\n\n const baseSegments = parsePath(basePath)\n const relSegments = relativePath.split(JSON_SEPARATOR).filter(Boolean)\n\n for (const seg of relSegments) {\n if (seg === '..') {\n baseSegments.pop()\n } else if (seg !== '.') {\n baseSegments.push(decode(seg))\n }\n }\n\n return JSON_SEPARATOR + baseSegments.map(encode).join(JSON_SEPARATOR)\n}\n\nconst isArrayIndexToken = (token: string): boolean => {\n if (token.length === 0) return false\n if (token === '0') return true\n return /^[1-9]\\d*$/.test(token)\n}\n","/**\n * Tree-shaped state management with multiple stores.\n * Similar to Redux but tailored for JSON UI: per-store trees, JSON Pointer paths.\n *\n * Store paths are unbounded and can be arbitrarily nested (objects and arrays),\n * e.g. /a/b/c/2/d/e/0/f. Logical paths are resolved via resolveStorePath and\n * applied consistently in get/set.\n */\n\nimport { TOUCH_STORE_SUFFIX, ERROR_STORE_SUFFIX, STORE_ROOT_PATH } from '../util/contants.js'\nimport { assertJsonCompatible, cloneDeep } from '../util/helpers.js'\nimport { get as ptrGet, resolvePath, normalizePath, parsePath } from '../util/json-pointer.js'\nimport type { JSONValue, PathModifier } from '../util/types.js'\n\nexport type StoreState = Record<string, unknown>\nexport type Listener = () => void\nexport type StoreChangeListener = (storeName: string, logicalPath: string) => void\n\nconst isTouchOrErrorShadowStore = (storeName: string): boolean => {\n return storeName.endsWith(TOUCH_STORE_SUFFIX) || storeName.endsWith(ERROR_STORE_SUFFIX)\n}\n\nexport class FormStore {\n private state: StoreState = {}\n private changeListeners = new Set<StoreChangeListener>()\n\n getState(): Readonly<StoreState> {\n return cloneDeep(this.state)\n }\n\n /**\n * Logical JsonUI stores snapshot — same shape as `JsonUI` `defaultValues`:\n * `{ data: {...}, \"data.touch\": {...}, \"data.error\": {...} }`.\n * Omits the internal `/storeRoot` wrapper returned by {@link getState}.\n */\n getLogicalStoresMap(): Record<string, JSONValue> {\n const slice = ptrGet(this.state, STORE_ROOT_PATH)\n if (slice === undefined || slice === null || typeof slice !== 'object' || Array.isArray(slice)) {\n return {}\n }\n return cloneDeep(slice) as Record<string, JSONValue>\n }\n\n /**\n * Initialise a logical store root without marking fields as touched.\n */\n initializeStore(storeName: string, value: JSONValue): void {\n this.set(storeName, '/', value, false)\n }\n\n private getByPointer(path: string): unknown {\n const value = ptrGet(this.state, path)\n return cloneDeep(value)\n }\n\n private setByPointer(path: string, value: unknown): void {\n assertJsonCompatible(value)\n this.state = setImmutable(this.state, path, value)\n this.notify()\n }\n\n /**\n * Convenience helpers that work with logical store names and logical paths,\n * instead of requiring callers to compose `/storeRoot/{storeName}/...`.\n *\n * Store isolation: each storeName (e.g. \"data\", \"data.error\", \"data.touch\") is\n * a distinct store. get/set only read/write that store's subtree;\n * \"data.error\" cannot access \"data\" or any other store.\n *\n * When trackTouch is true, set also writes to `${storeName}.touch` at\n * the same logicalPath; path normalization applies (no empty segments).\n */\n set(storeName: string, logicalPath: string, value: unknown, trackTouch = true): void {\n const internalPath = makeStorePath(storeName, logicalPath)\n this.setByPointer(internalPath, value)\n\n if (trackTouch && !isTouchOrErrorShadowStore(storeName)) {\n const touchStoreName = `${storeName}${TOUCH_STORE_SUFFIX}`\n this.setByPointer(makeStorePath(touchStoreName, logicalPath), true)\n }\n\n // Notify fine-grained listeners with logical store name + path so\n // JsonUI can re-resolve only components that depend on this slice.\n this.notifyChange(storeName, logicalPath)\n }\n\n get(storeName: string, logicalPath: string): unknown {\n const internalPath = makeStorePath(storeName, logicalPath)\n return this.getByPointer(internalPath)\n }\n\n // Backward-compatible aliases for existing consumers.\n setForStore(storeName: string, logicalPath: string, value: unknown, trackTouch = true): void {\n this.set(storeName, logicalPath, value, trackTouch)\n }\n\n // Backward-compatible aliases for existing consumers.\n getForStore(storeName: string, logicalPath: string): unknown {\n return this.get(storeName, logicalPath)\n }\n\n private notify(): void {\n // No coarse-grained subscription API is exposed intentionally.\n }\n\n subscribeChange(listener: StoreChangeListener): () => void {\n this.changeListeners.add(listener)\n return () => this.changeListeners.delete(listener)\n }\n\n private notifyChange(storeName: string, logicalPath: string): void {\n this.changeListeners.forEach((l) => l(storeName, logicalPath))\n }\n}\n\nexport const makeStorePath = (storeName: string, path: string): string => {\n if (!storeName || storeName.length === 0) {\n throw new Error('storeName must be a non-empty string')\n }\n const base = `${STORE_ROOT_PATH}/${storeName}`\n const pointerPath = !path || path === '/' ? '/' : path.startsWith('/') ? path : `/${path}`\n const normalized = normalizePath(pointerPath)\n if (normalized === '/') return base\n return base + normalized\n}\n\n/**\n * Immutable variant of ptrSet: returns a new root object with the change applied,\n * without mutating the original tree. Only the objects/arrays along the path are\n * shallow-copied; unrelated subtrees are structurally shared for performance.\n */\nconst setImmutable = (root: StoreState, pathStr: string, value: unknown): StoreState => {\n const segments = parsePath(pathStr)\n if (segments.length === 0) return root\n\n const originalRoot = root\n\n const cloneContainer = (container: unknown): Record<string, unknown> | unknown[] => {\n if (Array.isArray(container)) {\n return (container as unknown[]).slice()\n }\n if (container && typeof container === 'object') {\n return { ...(container as Record<string, unknown>) }\n }\n return {}\n }\n\n const setAt = (current: unknown, index: number): { cloned: Record<string, unknown> | unknown[]; result: unknown } => {\n const isLast = index === segments.length - 1\n const seg = segments[index]\n const container = cloneContainer(current)\n\n if (isLast) {\n const lastSeg = seg\n const lastKey = lastSeg === '' || /^\\d+$/.test(lastSeg) ? parseInt(lastSeg, 10) : lastSeg\n\n if (Array.isArray(container)) {\n container[lastKey as number] = value\n } else {\n container[lastSeg] = value\n }\n\n return { cloned: container, result: container }\n }\n\n const nextSeg = segments[index + 1]\n const nextKey = nextSeg === '' || /^\\d+$/.test(nextSeg) ? parseInt(nextSeg, 10) : nextSeg\n\n // Non-last segment: ensure child container exists before descending.\n const keyForChild: string | number = seg\n let next = Array.isArray(container) && /^\\d+$/.test(seg) ? container[parseInt(seg, 10)] : (container as Record<string, unknown>)[seg]\n\n if (\n next == null ||\n typeof next !== 'object' ||\n (Array.isArray(next) && typeof nextKey === 'string') ||\n (!Array.isArray(next) && typeof nextKey === 'number')\n ) {\n next = typeof nextKey === 'number' ? [] : {}\n }\n\n const { result: childClone } = setAt(next, index + 1)\n\n if (Array.isArray(container) && /^\\d+$/.test(String(keyForChild))) {\n container[parseInt(String(keyForChild), 10)] = childClone\n } else {\n ;(container as Record<string, unknown>)[String(keyForChild)] = childClone\n }\n\n return { cloned: container, result: container }\n }\n\n const { result } = setAt(originalRoot, 0)\n return result as StoreState\n}\n\n/**\n * Resolve a path for a given store, using pathModifiers (from list context) and currentPath for relative paths.\n * - Absolute path: /firstname -> unchanged (then normalized).\n * - Relative path: firstname -> resolved against currentPath (or pathModifiers[storeName] when in list context).\n * - pathModifiers apply per store: only pathModifiers[storeName] is used for that store; \"data.error\" cannot\n * access \"data\" or any other store.\n * Returns a normalized path (no empty segments, no trailing slash).\n */\nexport const resolveStorePath = (pathStr: string, currentPath: string, pathModifiers?: PathModifier, storeName?: string): string => {\n let resolved: string\n const modifier =\n pathModifiers !== undefined && storeName !== undefined && Object.prototype.hasOwnProperty.call(pathModifiers, storeName)\n ? pathModifiers[storeName]\n : undefined\n if (modifier !== undefined) {\n resolved = resolvePath(modifier.path, pathStr)\n } else if (pathStr.startsWith('/')) {\n resolved = pathStr\n } else {\n resolved = resolvePath(currentPath, pathStr)\n }\n return normalizePath(resolved)\n}\n","import type { FormStore } from '../store/formStore.js'\nimport { resolveStorePath } from '../store/formStore.js'\nimport { ActionContext } from '../util/types.js'\n\nexport const createSetAction = (formStore: FormStore) => {\n return async (params: Record<string, unknown>, ctx?: Pick<ActionContext, 'currentPath' | 'pathModifiers'>): Promise<void> => {\n const storeName = params.store as string\n const path = params.path as string\n let value = params.value\n const jsonataDef = params.jsonataDef as string | undefined\n if (!storeName || storeName.length === 0) return\n\n if (typeof jsonataDef === 'string' && jsonataDef) {\n try {\n const jsonata = (await import('jsonata')).default\n const expr = jsonata(jsonataDef)\n value = await expr.evaluate(value)\n } catch {\n value = params.value\n }\n }\n\n const logicalPath = resolveStorePath(path, ctx?.currentPath ?? '/', ctx?.pathModifiers, storeName)\n formStore.set(storeName, logicalPath, value)\n }\n}\n","import type { ModifierContext } from '../util/types.js'\nimport { createSetAction } from '../JsonUI/setAction.js'\n\nexport const set = (params: Record<string, unknown>, ctx: ModifierContext): void | Promise<void> => {\n const setFn = createSetAction(ctx.formStore)\n return setFn(params, ctx)\n}\n","import type { ActionMap } from '../util/types.js'\nimport { set } from './set.js'\n\nconst actions: ActionMap = {\n set,\n}\nexport default actions\n","/**\n * Expands simplified node format into full JSON UI node so components receive\n * value, onChange, error, etc. without the model having to specify every binding.\n *\n * When a node has store + path (non-empty store, string path), we add:\n * - value: { $modifier: 'get', store, path }\n * - onChange: { $action: 'set', store, path }\n * - error / fieldErrors: { $modifier: 'get', store: store + '.error', path }\n * - fieldTouched: { $modifier: 'get', store: store + '.touch', path }\n *\n * The component is unchanged; RenderNode uses the expanded node for prop\n * resolution and the expanded props are passed through normally.\n */\n\nimport { MODIFIER_KEY, ACTION_KEY, V_COMP } from '../util/contants.js'\nimport type { JsonUINode } from '../util/types.js'\n\nconst isSimplifiedNode = (\n node: unknown\n): node is JsonUINode & {\n [key: string]: unknown\n store: string\n path: string\n} => {\n if (typeof node !== 'object' || node === null) return false\n const r = node as Record<string, unknown>\n const store = r.store\n const path = r.path\n return typeof store === 'string' && store.length > 0 && typeof path === 'string'\n}\n\n/**\n * Returns an expanded node with value, onChange, error, fieldErrors, fieldTouched\n * derived from store + path. Strips store and path from the result so they are\n * not passed as component props.\n * If the node is not simplified, returns the same node reference.\n */\nexport const expandSimplifiedNode = (node: JsonUINode): JsonUINode => {\n if (!isSimplifiedNode(node) && node[V_COMP] !== 'SubmitButton') {\n return node\n }\n\n const { store, path, ...rest } = node as Record<string, unknown>\n\n const expanded = {\n ...(node[V_COMP] === 'SubmitButton'\n ? {\n onClick: {\n [ACTION_KEY]: 'submit',\n },\n }\n : {}),\n ...(isSimplifiedNode(node)\n ? {\n value: {\n [MODIFIER_KEY]: 'get',\n store,\n path,\n },\n onChange: {\n [ACTION_KEY]: 'set',\n store,\n path,\n },\n fieldErrors: {\n [MODIFIER_KEY]: 'get',\n store,\n path,\n type: 'ERROR',\n },\n fieldTouched: {\n [MODIFIER_KEY]: 'get',\n store,\n path,\n type: 'TOUCH',\n },\n }\n : {\n //if is not a simplified node, we should add store and path props\n store,\n path,\n }),\n ...rest,\n }\n\n return expanded\n}\n","/**\n * JsonUI list pagination: maps `$page`, `$itemPerPage`, and `$listLength` to a slice of the backing list.\n *\n * Computes which indices belong on the current page. `page`, `itemPerPage`, and `listLength` are\n * coerced to non-negative integers; invalid or missing values use defaults (`page` → 0,\n * `itemPerPage` → effective list length, `listLength` → `realDataLength` when omitted).\n * If `page * itemPerPage` exceeds `listLength`, offset resets to 0 (parity with reference impl).\n *\n * @param args.realDataLength - Actual length of the list data in memory (caps defaults).\n * @param args.page - Zero-based page index from the model (`$page`).\n * @param args.itemPerPage - Page size from the model (`$itemPerPage`).\n * @param args.listLength - Logical list length from the model (`$listLength`); may differ from `realDataLength`.\n * @returns `offset` and `end` for half-open `[offset, end)` slicing, plus `indices` listing each index in range.\n * @see computeRenderNodeSlotChildren in @jsonui/react\n */\nexport interface ComputeListSliceRangeArgs {\n realDataLength: number\n page?: unknown\n itemPerPage?: unknown\n listLength?: unknown\n}\n\nexport interface ComputeListSliceRangeResult {\n offset: number\n end: number\n indices: number[]\n}\n\nexport const computeListSliceRange = ({\n realDataLength,\n page: pageRaw,\n itemPerPage: itemPerPageRaw,\n listLength: listLengthRaw,\n}: ComputeListSliceRangeArgs): ComputeListSliceRangeResult => {\n const coerceNonNegInt = (v: unknown, fallback: number): number => {\n if (typeof v === 'number' && Number.isInteger(v) && v >= 0) return v\n return fallback\n }\n\n let listLength = coerceNonNegInt(listLengthRaw, realDataLength)\n if (listLengthRaw === undefined) {\n listLength = realDataLength\n }\n const itemPerPage = coerceNonNegInt(itemPerPageRaw, listLength)\n const page = coerceNonNegInt(pageRaw, 0)\n const offset = page * itemPerPage <= listLength ? page * itemPerPage : 0\n const end = Math.min(listLength, offset + itemPerPage)\n const indices: number[] = []\n for (let i = offset; i < end; i++) indices.push(i)\n return { offset, end, indices }\n}\n","import type { JsonUINode, PathModifier } from '../../util/types.js'\nimport { resolveStorePath } from '../../store/formStore.js'\nimport { PATH_MODIFIERS_KEY } from '../../util/contants.js'\n\nexport const getOwnPathModifiers = (node: JsonUINode): PathModifier | undefined => {\n return (node as Record<string, unknown>)[PATH_MODIFIERS_KEY] as PathModifier | undefined\n}\n\nexport const mergeEffectivePathModifiers = ({\n ownPathModifiers,\n pathModifiers,\n currentPath,\n}: {\n ownPathModifiers?: PathModifier\n pathModifiers?: PathModifier\n currentPath: string\n}): PathModifier | undefined => {\n if (!ownPathModifiers || typeof ownPathModifiers !== 'object') {\n return pathModifiers\n }\n const merged: PathModifier = {\n ...(pathModifiers ?? {}),\n }\n\n for (const [storeName, spec] of Object.entries(ownPathModifiers)) {\n if (typeof spec !== 'object') continue\n const rawPath = (spec as { path?: string }).path\n if (typeof rawPath !== 'string' || rawPath.length === 0) continue\n\n const resolved = resolveStorePath(rawPath, currentPath, pathModifiers, storeName)\n merged[storeName] = { path: resolved }\n }\n\n return merged\n}\n","/** Segment-aware path overlap check (aligned with validation.ts). */\nexport const isPathPrefix = (rulePath: string, targetPath: string): boolean => {\n const r = rulePath === '' ? '/' : rulePath\n const t = targetPath === '' ? '/' : targetPath\n if (r === '/') return true\n if (t === r) return true\n return t.startsWith(r.endsWith('/') ? r : `${r}/`)\n}\n","import type { FormStore } from '../store/formStore.js'\nimport { resolveStorePath } from '../store/formStore.js'\nimport { ERROR_STORE_SUFFIX, TOUCH_STORE_SUFFIX } from '../util/contants.js'\nimport type { ModifierContext } from '../util/types.js'\n\nconst hasAnyError = (value: unknown): boolean => {\n if (value === null || value === undefined) return false\n if (Array.isArray(value)) {\n return value.some((v) => hasAnyError(v))\n }\n if (typeof value === 'object') {\n return Object.values(value as Record<string, unknown>).some((v) => hasAnyError(v))\n }\n return true\n}\n\nconst hasAnyTouched = (value: unknown): boolean => {\n if (value === true) return true\n if (value === null || value === undefined) return false\n if (Array.isArray(value)) {\n return value.some((v) => hasAnyTouched(v))\n }\n if (typeof value === 'object') {\n return Object.values(value as Record<string, unknown>).some((v) => hasAnyTouched(v))\n }\n return false\n}\n\nexport const createGetModifier = (formStore: FormStore) => {\n return async (params: Record<string, unknown>, ctx: ModifierContext): Promise<unknown> => {\n const storeName = params.store as string\n const path = params.path as string\n const type = params.type as string | undefined\n const jsonataDef = params.jsonataDef as string | undefined\n const resolvedStoreName = type === 'ERROR' ? `${storeName}${ERROR_STORE_SUFFIX}` : type === 'TOUCH' ? `${storeName}${TOUCH_STORE_SUFFIX}` : storeName\n\n // Path modifiers are keyed by the logical/base store (e.g. \"data\"),\n // not by shadow stores like \"data.error\".\n const logicalPath = resolveStorePath(path, ctx.currentPath, ctx.pathModifiers, storeName)\n let value = formStore.get(resolvedStoreName, logicalPath)\n\n // For ERROR lookups, leaf-less containers (e.g. { players: [{}] })\n // mean there is no actual validation message in the subtree.\n if (type === 'ERROR' && !hasAnyError(value)) {\n value = undefined\n }\n // TODO need to test hasAnyTouched and hasAnyError\n if (type === 'TOUCH') {\n value = hasAnyTouched(value)\n }\n\n if (jsonataDef && value !== undefined) {\n try {\n const jsonata = (await import('jsonata')).default\n const expr = jsonata(jsonataDef)\n value = await expr.evaluate(value)\n } catch {\n // fallback\n }\n }\n return value\n }\n}\n","import { MODIFIER_KEY } from '../util/contants.js'\nimport type { ModifierContext, ModifierMap } from '../util/types.js'\nimport { createGetModifier } from './getModifier.js'\n\n/**\n * Resolves $modifier (and nested values) anywhere in the tree.\n * Modifiers can appear at component root (value, onChange, etc.), in nested\n * structures (e.g. style.fontSize, style.base.padding), or in $child* slot content.\n * We recurse into objects and arrays so every occurrence is resolved.\n */\n//TODO add unit test to the resolveModifier\nexport async function resolveModifier(value: unknown, modifiers: ModifierMap, ctx: ModifierContext): Promise<unknown> {\n // If it's a direct modifier object: { $modifier: 'x', ...params }\n if (value != null && typeof value === 'object' && MODIFIER_KEY in value) {\n const { [MODIFIER_KEY]: mod, ...params } = value as Record<string, unknown>\n\n const resolvedParams: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(params)) {\n resolvedParams[k] = await resolveModifier(v, modifiers, ctx)\n }\n\n const handler = modifiers[mod as string] ?? (mod === 'get' ? createGetModifier(ctx.formStore) : undefined)\n if (!handler) return undefined\n\n const result = handler(resolvedParams, ctx)\n return result instanceof Promise ? await result : result\n }\n\n // If it's an array, resolve modifiers in each element.\n if (Array.isArray(value)) {\n const resolved = await Promise.all(value.map((item) => resolveModifier(item, modifiers, ctx)))\n return resolved\n }\n\n // If it's a plain object without $modifier, traverse its properties\n // so nested fields like www2.bbb or payload.value get resolved.\n if (value != null && typeof value === 'object') {\n const obj = value as Record<string, unknown>\n const entries = Object.entries(obj)\n if (entries.length === 0) return value\n\n const resolvedObj: Record<string, unknown> = {}\n for (const [k, v] of entries) {\n resolvedObj[k] = await resolveModifier(v, modifiers, ctx)\n }\n return resolvedObj\n }\n\n // Primitive or null – nothing to do.\n return value\n}\n","/**\n * Style types for the shared style layer (web + React Native).\n * Canonical style is a subset of CSS-like keys that we support and map to both platforms.\n */\n\n/** Supported style keys; values are number (px), string, or standard CSS values */\nexport type CanonicalStyle = Record<string, string | number | undefined>\n\n/** Breakpoint keys for responsive style objects */\nexport type BreakpointKey = 'base' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\n/**\n * Responsive style: base + optional overrides per breakpoint.\n * Resolver merges base with the current breakpoint's block (mobile-first).\n */\nexport interface ResponsiveStyle {\n base?: CanonicalStyle\n xs?: CanonicalStyle\n sm?: CanonicalStyle\n md?: CanonicalStyle\n lg?: CanonicalStyle\n xl?: CanonicalStyle\n}\n\n/** Input style can be a flat style object or a responsive object */\nexport type StyleInput = CanonicalStyle | ResponsiveStyle\n\n/** Platform for style resolution */\nexport type StylePlatform = 'web' | 'native'\n\nexport interface ResolveStyleOptions {\n platform: StylePlatform\n breakpoint?: BreakpointKey\n}\n\n/** Default breakpoint width thresholds (min-width in px) */\nexport const DEFAULT_BREAKPOINTS: Record<BreakpointKey, number> = {\n base: 0,\n xs: 0,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n}\n\n/** Order for merging: base first, then xs..xl */\nexport const BREAKPOINT_ORDER: BreakpointKey[] = ['base', 'xs', 'sm', 'md', 'lg', 'xl']\n","/**\n * Resolves canonical or responsive style to platform-specific style (web or React Native).\n * Pure and synchronous; no dependencies.\n */\n\nimport type { CanonicalStyle, ResponsiveStyle, StyleInput, BreakpointKey, ResolveStyleOptions } from './types.js'\nimport { BREAKPOINT_ORDER } from './types.js'\n\nconst isResponsiveStyle = (style: StyleInput): style is ResponsiveStyle => {\n if (typeof style !== 'object') return false\n const keys = Object.keys(style)\n return keys.some((k) => BREAKPOINT_ORDER.includes(k as BreakpointKey))\n}\n\n/**\n * Merge responsive style into a single style: base + all breakpoints up to and including current.\n * Mobile-first: current breakpoint index determines how many layers we merge.\n */\nconst mergeResponsive = (responsive: ResponsiveStyle, currentBreakpoint: BreakpointKey): CanonicalStyle => {\n const idx = BREAKPOINT_ORDER.indexOf(currentBreakpoint)\n const merged: CanonicalStyle = {}\n for (let i = 0; i <= idx; i++) {\n const key = BREAKPOINT_ORDER[i]\n const block = responsive[key]\n if (block && typeof block === 'object') {\n Object.assign(merged, block)\n }\n }\n return merged\n}\n\n/**\n * Parse \"1px solid #ccc\" or similar border shorthand into parts.\n */\nconst parseBorder = (\n value: string\n): {\n width?: number\n style?: string\n color?: string\n} => {\n const parts = value.trim().split(/\\s+/)\n const result: { width?: number; style?: string; color?: string } = {}\n for (const p of parts) {\n if (/^\\d+(\\.\\d+)?(px)?$/.test(p)) {\n result.width = parseFloat(p)\n } else if (['solid', 'dashed', 'dotted', 'none'].includes(p)) {\n result.style = p\n } else if (p.startsWith('#') || p.startsWith('rgb')) {\n result.color = p\n }\n }\n return result\n}\n\n/**\n * Convert canonical style to React Native-compatible style.\n * - border shorthand -> borderWidth, borderColor, borderStyle\n * - cursor is not supported on RN, omit\n * - numeric values kept as-is where RN expects numbers\n */\nconst toNativeStyle = (canonical: CanonicalStyle): Record<string, unknown> => {\n const out: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(canonical)) {\n if (value === undefined) continue\n if (key === 'cursor') continue // not supported on RN\n if (key === 'border' && typeof value === 'string') {\n const { width, style, color } = parseBorder(value)\n if (width !== undefined) out.borderWidth = width\n if (style) out.borderStyle = style\n if (color) out.borderColor = color\n continue\n }\n if (key === 'borderRadius' && typeof value === 'number') {\n out.borderRadius = value\n continue\n }\n if ((key === 'borderTop' || key === 'borderBottom' || key === 'borderLeft' || key === 'borderRight') && typeof value === 'string') {\n const { width, style, color } = parseBorder(value)\n if (width !== undefined) out[`${key}Width`] = width\n if (style) out[`${key}Style`] = style\n if (color) out[`${key}Color`] = color\n continue\n }\n out[key] = value\n }\n return out\n}\n\n/**\n * Length-like style keys that need a unit (px) when the value is a bare number\n * or numeric string (e.g. from a store/modifier like sliderValue).\n */\nconst LENGTH_KEYS = new Set([\n 'fontSize',\n 'width',\n 'height',\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight',\n 'margin',\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'padding',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'gap',\n])\n\nconst ensureLengthUnit = (key: string, value?: string | number): string | number | undefined => {\n if (value === undefined) return value\n if (!LENGTH_KEYS.has(key)) return value\n if (typeof value === 'number') return `${value}px`\n if (typeof value === 'string' && /^\\d+(\\.\\d+)?$/.test(value.trim())) {\n return `${value.trim()}px`\n }\n return value\n}\n\n/**\n * Web: pass through with minimal changes. Normalize length props (e.g. fontSize)\n * so numeric or numeric-string values get \"px\" and the browser applies them.\n */\nconst toWebStyle = (canonical: CanonicalStyle): Record<string, unknown> => {\n const out: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(canonical)) {\n out[key] = ensureLengthUnit(key, value)\n }\n return out\n}\n\n/**\n * Resolve style input (canonical or responsive) to platform-specific style.\n * - If style is responsive (has base/xs/sm/md/lg/xl), merge up to current breakpoint, then resolve.\n * - If no breakpoint is provided for a responsive style, only \"base\" is used.\n */\nexport const resolveStyle = (style: StyleInput | null | undefined, options: ResolveStyleOptions): Record<string, unknown> | undefined => {\n if (!style || typeof style !== 'object') return undefined\n\n let canonical: CanonicalStyle\n\n if (isResponsiveStyle(style)) {\n const breakpoint = options.breakpoint ?? 'base'\n canonical = mergeResponsive(style, breakpoint)\n } else {\n canonical = style\n }\n\n if (Object.keys(canonical).length === 0) return undefined\n\n return options.platform === 'native' ? toNativeStyle(canonical) : toWebStyle(canonical)\n}\n","import Ajv from 'ajv'\nimport addFormats from 'ajv-formats'\nimport ajvErrors from 'ajv-errors'\nimport type { FormStore } from '../store/formStore.js'\nimport { ERROR_STORE_SUFFIX } from '../util/contants.js'\nimport { InlineValidationSpec, ModifierContext, ModifierMap, ValidationRegistry, ValidationRule } from '../util/types.js'\nimport { resolveModifier } from './resolveModifier.js'\n\nlet inlineAjv: Ajv | null = null\n\nconst getInlineAjv = (): Ajv => {\n if (!inlineAjv) {\n // TODO why it's no strict?\n inlineAjv = new Ajv({ allErrors: true, strict: false })\n addFormats(inlineAjv)\n ajvErrors(inlineAjv)\n }\n return inlineAjv\n}\n\nconst stringifyValidationError = (error: unknown): string => {\n if (typeof error === 'string') return error\n if (typeof error === 'object' && error !== null && 'message' in error && typeof error.message === 'string') {\n return error.message\n }\n\n try {\n return String(error)\n } catch {\n return 'error'\n }\n}\n\nexport const buildValidationRegistry = (rules?: ValidationRule[]): ValidationRegistry => {\n const registry: ValidationRegistry = {}\n if (!rules || rules.length === 0) return registry\n\n const ajv = new Ajv({ allErrors: true, strict: false })\n // TODO: check test how looks like in jsonui\n addFormats(ajv)\n ajvErrors(ajv)\n\n for (const rule of rules) {\n if (rule.schema === undefined || rule.schema === null || !rule.store || !rule.path) continue\n const validate = ajv.compile(rule.schema)\n const byStore = registry[rule.store] ?? (registry[rule.store] = {})\n const list = byStore[rule.path] ?? (byStore[rule.path] = [])\n list.push(validate)\n }\n\n return registry\n}\n\n/**\n * Run a single inline (field-level) validation spec against the current store state.\n *\n * The component's own store name and resolved logical path are passed in directly —\n * they come from the simplified component's `store`/`path` props, not from the spec.\n *\n * Supports two validation styles:\n * - schema: AJV JSON Schema validation\n * - jsonataDef + errorMessage (not mandatory): JSONata expression; error shown when result is\n * not null, undefined, empty string, or true. errorMessage may be a plain string\n * or a { $modifier: ... } expression resolved via resolveModifier.\n */\nexport const runInlineValidation = async (\n spec: InlineValidationSpec,\n componentStoreName: string,\n componentLogicalPath: string,\n modifiers: ModifierMap,\n ctx: ModifierContext\n): Promise<void> => {\n const { formStore } = ctx\n const errorStoreName = `${componentStoreName}${ERROR_STORE_SUFFIX}`\n const value = formStore.get(componentStoreName, componentLogicalPath)\n\n if (spec.schema != null) {\n const ajv = getInlineAjv()\n const validate = ajv.compile(spec.schema)\n const messages: string[] = []\n const valid = validate(value)\n //TODO: need to outsource validation to separate function and test it\n if (!valid && validate.errors) {\n for (const err of validate.errors) {\n if (err.message) messages.push(err.message)\n }\n }\n\n const newError: string | null = messages.length > 0 ? messages.join('; ') : null\n const currentError = formStore.get(errorStoreName, componentLogicalPath)\n if ((currentError ?? null) !== newError) {\n formStore.set(errorStoreName, componentLogicalPath, newError, false)\n }\n return\n }\n\n if (spec.jsonataDef != null) {\n let result: unknown\n try {\n const jsonata = (await import('jsonata')).default\n const expr = jsonata(spec.jsonataDef)\n result = await expr.evaluate(value)\n } catch (e) {\n result = stringifyValidationError(e)\n }\n\n const hasError = result !== null && result !== undefined && result !== '' && result !== true\n\n const newError: string | null = hasError ? (spec.errorMessage ? String(await resolveModifier(spec.errorMessage, modifiers, ctx)) : String(result)) : null\n\n const currentError = formStore.get(errorStoreName, componentLogicalPath)\n if ((currentError ?? null) !== newError) {\n formStore.set(errorStoreName, componentLogicalPath, newError, false)\n }\n return\n }\n}\n\n// Runs all validators whose rule path matches the changed path prefix for the given store.\n// Aggregates current validation messages and writes or clears them in the matching .error store paths.\nexport const runValidationsForPath = (registry: ValidationRegistry, formStore: FormStore, storeName: string, path: string): void => {\n const storeValidators = registry[storeName]\n\n // No validators registered for this store at all\n if (!storeValidators) {\n return\n }\n\n const errorStoreName = `${storeName}${ERROR_STORE_SUFFIX}`\n\n // Collect new error messages per *concrete* target path (e.g. '/players/0/score').\n const perPathMessages: Partial<Record<string, string[]>> = {}\n const affectedErrorPaths = new Set<string>()\n\n // Include any existing error leaf paths under matching rule paths so we can clear\n // them if they become valid.\n const collectExistingPaths = (basePath: string, value: unknown): void => {\n if (value == null) return\n if (typeof value !== 'object') {\n affectedErrorPaths.add(basePath)\n return\n }\n if (Array.isArray(value)) {\n value.forEach((v, i) => {\n collectExistingPaths(`${basePath}/${i}`, v)\n })\n return\n }\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n collectExistingPaths(basePath === '/' ? `/${k}` : `${basePath}/${k}`, v)\n }\n }\n\n // Run all validators whose rule path is a prefix of the affected path.\n // Example: action path '/a/b/c' should trigger validators registered for\n // '/', '/a', '/a/b', and '/a/b/c'.\n for (const [rulePath, validators] of Object.entries(storeValidators)) {\n if (!validators) continue\n if (!isPathPrefix(rulePath, path)) continue\n\n // Track existing error paths under this rule so we can clear them.\n const existingSubtree = formStore.get(errorStoreName, rulePath)\n if (existingSubtree !== undefined) {\n collectExistingPaths(rulePath === '' ? '/' : rulePath, existingSubtree)\n }\n\n const valueAtRulePath = formStore.get(storeName, rulePath)\n for (const validate of validators) {\n const valid = validate(valueAtRulePath)\n if (!valid && validate.errors) {\n for (const err of validate.errors) {\n if (!err.message) continue\n const instancePath = err.instancePath\n // instancePath is relative to rulePath, e.g. '/0/score'\n let targetPath: string\n if (rulePath === '' || rulePath === '/') {\n targetPath = instancePath && instancePath.length > 0 ? instancePath : '/'\n } else {\n targetPath = instancePath && instancePath.length > 0 ? `${rulePath}${instancePath}` : rulePath\n }\n const list = perPathMessages[targetPath] ?? (perPathMessages[targetPath] = [])\n list.push(err.message)\n affectedErrorPaths.add(targetPath)\n }\n }\n }\n }\n\n // Apply updates for all affected error paths (both existing and new).\n for (const targetPath of affectedErrorPaths) {\n const messages = perPathMessages[targetPath] ?? []\n const newError: string | null = messages.length > 0 ? messages.join('; ') : null\n const currentError = formStore.get(errorStoreName, targetPath)\n if ((currentError ?? null) === newError) continue\n formStore.set(errorStoreName, targetPath, newError, false)\n }\n}\n\n/** Match whole segments only; works for paths of any depth (e.g. /a/b/0/c). */\nconst isPathPrefix = (rulePath: string, targetPath: string): boolean => {\n const r = rulePath === '' ? '/' : rulePath\n const t = targetPath === '' ? '/' : targetPath\n\n if (r === '/') return true\n if (t === r) return true\n return t.startsWith(r.endsWith('/') ? r : `${r}/`)\n}\n","import { resolveStorePath } from '../../store/formStore.js'\nimport { V_COMP, MODIFIER_KEY, ERROR_STORE_SUFFIX, TOUCH_STORE_SUFFIX } from '../../util/contants.js'\nimport { PathModifier, StorePathDependency } from '../../util/types.js'\n\n/**\n * Recursively walks a node's props value tree and collects all store path dependencies\n * introduced by `$modifier: 'get'` entries. For each `get` modifier found, it resolves\n * the logical store path (accounting for path modifiers and ERROR/TOUCH type variants)\n * and appends it to the `deps` array. Nodes with a `$comp` key are skipped to avoid\n * descending into nested component definitions.\n */\nexport const collectGetModifierDependencies = (val: unknown, currentPath: string, deps: StorePathDependency[], effectivePathModifiers?: PathModifier): void => {\n if (val && typeof val === 'object' && !Array.isArray(val) && V_COMP in val) {\n return\n }\n if (val && typeof val === 'object' && !Array.isArray(val) && MODIFIER_KEY in val && (val as Record<string, unknown>)[MODIFIER_KEY] === 'get') {\n const storeName = (val as Record<string, unknown>).store as string | undefined\n const type = (val as Record<string, unknown>).type as string | undefined\n const path = (val as Record<string, unknown>).path\n const alteredStoreName =\n type === 'ERROR' ? `${storeName ?? ''}${ERROR_STORE_SUFFIX}` : type === 'TOUCH' ? `${storeName ?? ''}${TOUCH_STORE_SUFFIX}` : storeName\n if (storeName && alteredStoreName) {\n if (typeof path === 'string' && path) {\n const logicalPath = resolveStorePath(path, currentPath, effectivePathModifiers, storeName)\n deps.push({ store: alteredStoreName, path: logicalPath })\n } else {\n deps.push({ store: alteredStoreName, path: '/' })\n }\n }\n return\n }\n if (Array.isArray(val)) {\n val.forEach((v) => collectGetModifierDependencies(v, currentPath, deps, effectivePathModifiers))\n return\n }\n if (val && typeof val === 'object') {\n for (const v of Object.values(val as Record<string, unknown>)) {\n collectGetModifierDependencies(v, currentPath, deps, effectivePathModifiers)\n }\n }\n}\n","import type { JsonUINode, ModifierContext, ModifierMap, PathModifier, ResolvedRenderNodeState, StorePathDependency } from '../../util/types.js'\nimport { resolveModifier } from '../resolveModifier.js'\nimport { resolveStyle } from '../../style/resolveStyle.js'\nimport type { StylePlatform, BreakpointKey } from '../../style/types.js'\nimport { runInlineValidation } from '../validation.js'\nimport { resolveStorePath } from '../../store/formStore.js'\nimport { V_VALIDATIONS } from '../../util/contants.js'\nimport { collectGetModifierDependencies } from './collectGetDeps.js'\n\nconst runValidationSpecsFromNode = async (\n node: JsonUINode,\n modifiers: ModifierMap,\n ctx: ModifierContext,\n componentStoreName: string | undefined,\n componentLogicalPath: string | undefined\n): Promise<void> => {\n const rawValidation = (node as Record<string, unknown>)[V_VALIDATIONS] as unknown[] | undefined\n\n if (!rawValidation || !Array.isArray(rawValidation) || rawValidation.length === 0) return\n if (!componentStoreName || componentLogicalPath == null) return\n\n for (const item of rawValidation) {\n if (item === null || typeof item !== 'object') continue\n await runInlineValidation(item, componentStoreName, componentLogicalPath, modifiers, ctx)\n }\n}\ninterface RunRenderNodeResolutionArgs {\n node: JsonUINode\n modifiers: ModifierMap\n ctx: ModifierContext\n currentPath: string\n effectivePathModifiers?: PathModifier\n stylePlatform: StylePlatform\n styleBreakpoint?: BreakpointKey\n /** Store name from the simplified component's own `store` prop, if any. */\n componentStore?: string\n /** Logical path from the simplified component's own `path` prop, if any. */\n componentPath?: string\n}\n\nexport const runRenderNodeResolution = async ({\n node,\n modifiers,\n ctx,\n currentPath,\n effectivePathModifiers,\n stylePlatform,\n styleBreakpoint,\n componentStore,\n componentPath,\n}: RunRenderNodeResolutionArgs): Promise<{\n state: ResolvedRenderNodeState\n deps: StorePathDependency[]\n}> => {\n const props: Record<string, unknown> = {}\n const deps: StorePathDependency[] = []\n const resolvedSlots: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(node)) {\n if (key.startsWith('$child') || !key.startsWith('$')) {\n collectGetModifierDependencies(value, currentPath, deps, effectivePathModifiers)\n if (key.startsWith('$child')) {\n resolvedSlots[key] = await resolveModifier(value, modifiers, ctx)\n } else if (!key.startsWith('$')) {\n props[key] = await resolveModifier(value, modifiers, ctx)\n }\n }\n }\n\n if (props.style != null && typeof props.style === 'object') {\n const resolved = resolveStyle(props.style, {\n platform: stylePlatform,\n breakpoint: styleBreakpoint,\n })\n props.style = resolved ?? props.style\n }\n\n const resolvedComponentPath =\n componentStore && componentPath != null ? resolveStorePath(componentPath, currentPath, effectivePathModifiers, componentStore) : undefined\n\n await runValidationSpecsFromNode(node, modifiers, ctx, componentStore, resolvedComponentPath)\n\n return {\n state: { props, resolvedSlots },\n deps,\n }\n}\n","import { resolveStorePath } from '../store/formStore.js'\nimport type { ActionContext, ActionMap, ModifierMap } from '../util/types.js'\nimport { createSetAction } from './setAction.js'\nimport { resolveModifier } from './resolveModifier.js'\nimport { runValidationsForPath } from './validation.js'\nimport { ACTION_KEY } from '../util/contants.js'\n\nexport const resolveAction = (value: unknown, actions: ActionMap, modifiers: ModifierMap, ctx: ActionContext): ((e: unknown) => Promise<void>) | undefined => {\n if (value != null && typeof value === 'object' && ACTION_KEY in value) {\n const { [ACTION_KEY]: actionName, ...params } = value as Record<string, unknown>\n const hasExplicitValue = Object.prototype.hasOwnProperty.call(value, 'value')\n\n // Extract modifiers from action ctx.\n const { componentProps, validators, ...modifierCtx } = ctx\n\n let handler = actions[actionName as string]\n\n if (!handler && actionName === 'set') {\n handler = createSetAction(ctx.formStore)\n }\n\n if (!handler) return undefined\n\n return async (e: unknown) => {\n // TODO: research, why componentProps need\n const resolvedParams: Record<string, unknown> = { ...componentProps, ...params }\n // Case 1: value from event (input onChange) – only when the model\n // did NOT define a value explicitly.\n if (!hasExplicitValue && e != null && typeof e === 'object' && 'target' in e) {\n const target = (e as { target?: { value?: unknown } }).target\n if (target?.value !== undefined) resolvedParams.value = target.value\n }\n // Cases 2 & 3: static JSON value or nested $modifier value – both\n // flow through resolveModifier below and are preserved.\n for (const [k, v] of Object.entries(resolvedParams)) {\n resolvedParams[k] = await resolveModifier(v, modifiers, modifierCtx)\n }\n const result = handler(resolvedParams, ctx)\n if (result instanceof Promise) await result\n\n // Run validations for this store/path if configured\n const storeName = resolvedParams.store as string | undefined\n const rawPath = resolvedParams.path as string | undefined\n if (validators && storeName && rawPath) {\n // Resolve to logical path so validations work with lists, pathModifiers,\n // and relative paths (e.g. \"score\" inside /players/0).\n const logicalPath = resolveStorePath(rawPath, ctx.currentPath, ctx.pathModifiers, storeName)\n runValidationsForPath(validators, ctx.formStore, storeName, logicalPath)\n }\n }\n }\n return undefined\n}\n","import type { ModifierContext } from '../util/types.js'\nimport { createGetModifier } from '../JsonUI/getModifier.js'\n\nexport const get = (params: Record<string, unknown>, ctx: ModifierContext): unknown | Promise<unknown> => {\n const getFn = createGetModifier(ctx.formStore)\n return getFn(params, ctx)\n}\n","export async function jsonata(params: Record<string, unknown>): Promise<unknown> {\n const { jsonataDef, ...input } = params as {\n jsonataDef?: unknown\n [key: string]: unknown\n }\n if (typeof jsonataDef !== 'string' || !jsonataDef) return undefined\n\n try {\n const jsonata = (await import('jsonata')).default\n const expr = jsonata(jsonataDef)\n // Evaluate with the remaining params (e.g. { error, touched }) as input.\n return await expr.evaluate(input)\n } catch {\n // On any jsonata error, fall back to undefined so UI doesn't break.\n return undefined\n }\n}\n","import { hasAnyError, hasAnyTouched } from '../util/helpers'\n\nexport const isNotTouchedOrHasError = (params: Record<string, unknown>): boolean => {\n const { error, touched } = params as {\n error?: unknown\n touched?: unknown\n }\n const hasError = hasAnyError(error)\n const isTouched = hasAnyTouched(touched)\n return !isTouched || hasError\n}\n","import type { ModifierContext } from '../util/types.js'\n\n/**\n * Translation function: looks up key in ctx.translations using active language.\n */\nexport const t = (params: Record<string, unknown>, ctx: ModifierContext): string | undefined => {\n const key = (params as { key?: unknown }).key as string | undefined\n if (!key) return undefined\n\n const translations = ctx.translations ?? {}\n\n const langParam = (params as { lang?: unknown }).lang as string | undefined\n const baseLang = ctx.defaultLanguage || 'en'\n const activeLang = langParam || ctx.activeLanguage || baseLang\n\n const entry = translations[key]\n // If we're in the base language, or there is no translation table\n // for this key, just return the key as-is (baseline text).\n if (activeLang === baseLang || entry === undefined) return key\n\n // Otherwise, use the requested language if available, falling back to key.\n return entry[activeLang] ?? key\n}\n","import type { ModifierMap } from '../util/types.js'\nimport { get } from './get.js'\nimport { jsonata } from './jsonata.js'\nimport { isNotTouchedOrHasError } from './isNotTouchedOrHasError.js'\nimport { t } from '../modifiers/t.js'\n\nconst modifiers: ModifierMap = {\n get,\n jsonata,\n isNotTouchedOrHasError,\n t,\n}\n\nexport default modifiers\n"],"names":["hasAnyError","hasAnyTouched","get","ptrGet","isPathPrefix"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/util/contants.ts","../../src/util/helpers.ts","../../src/util/json-pointer.ts","../../src/store/formStore.ts","../../src/JsonUI/setAction.ts","../../src/actions/set.ts","../../src/actions/index.ts","../../src/JsonUI/expandSimplifiedNode.ts","../../src/JsonUI/renderNode/listPagination.ts","../../src/JsonUI/renderNode/mergePathModifiers.ts","../../src/JsonUI/renderNode/pathPrefix.ts","../../src/JsonUI/getModifier.ts","../../src/JsonUI/resolveModifier.ts","../../src/style/types.ts","../../src/style/resolveStyle.ts","../../src/JsonUI/validation.ts","../../src/JsonUI/renderNode/collectGetDeps.ts","../../src/JsonUI/renderNode/runResolution.ts","../../src/JsonUI/resolveAction.ts","../../src/modifiers/get.ts","../../src/modifiers/jsonata.ts","../../src/modifiers/isNotTouchedOrHasError.ts","../../src/modifiers/t.ts","../../src/modifiers/index.ts"],"sourcesContent":["export const V_COMP = '$comp'\nexport const V_CHILDREN = '$children'\nexport const ACTION_KEY = '$action'\nexport const MODIFIER_KEY = '$modifier'\nexport const PATH_MODIFIERS_KEY = '$pathModifiers'\nexport const LIST_SEMAPHORE = '$isList'\nexport const LIST_ITEM = '$listItem'\n\n/** Main JsonUI list pagination keys (parity). */\nexport const LIST_PAGE = '$page'\nexport const LIST_ITEM_PER_PAGE = '$itemPerPage'\nexport const LIST_LENGTH = '$listLength'\n\n/** Main JsonUI nested locale blobs merged into the translation map. */\nexport const REF_LOCALES = '$locales'\n\n/** Field-level inline validation spec key on a node. */\nexport const V_VALIDATIONS = '$validations'\n\n// Store-name suffixes for parallel trees (errors, touch-state, etc.).\nexport const ERROR_STORE_SUFFIX = '.error'\n/** Shadow store for field touched state (aligned with main JsonUI `.touch`). */\nexport const TOUCH_STORE_SUFFIX = '.touch'\n\nexport const JSON_SEPARATOR = '/'\n\n// Single-root store layout helper.\n// All logical stores live under `/storeRoot/{storeName}/...`.\nexport const STORE_ROOT_PATH = '/storeRoot'\n","/**\n * Shared helpers for function handlers.\n */\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> => {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nexport const hasAnyError = (value: unknown): boolean => {\n if (value === null || value === undefined) return false\n if (Array.isArray(value)) {\n return value.some((v) => hasAnyError(v))\n }\n if (typeof value === 'object') {\n return Object.values(value as Record<string, unknown>).some((v) => hasAnyError(v))\n }\n // Any non-null / non-undefined primitive counts as \"has error\".\n return true\n}\n\nexport const hasAnyTouched = (value: unknown): boolean => {\n if (value === true) return true\n if (value === null || value === undefined) return false\n if (Array.isArray(value)) {\n return value.some((v) => hasAnyTouched(v))\n }\n if (typeof value === 'object') {\n return Object.values(value as Record<string, unknown>).some((v) => hasAnyTouched(v))\n }\n return false\n}\n\n/**\n * Throws if value contains anything that cannot round-trip through JSON:\n * undefined, function, symbol, bigint, NaN, non-finite numbers, or circular references.\n */\nexport const assertJsonCompatible = (value: unknown, seen = new WeakSet()): void => {\n if (value === null) return\n if (value === undefined) throw new Error('undefined is not JSON-compatible')\n\n const type = typeof value\n if (type === 'string' || type === 'boolean') return\n if (type === 'number') {\n if (!Number.isFinite(value)) throw new Error(`Non-finite number is not JSON-compatible: ${value}`)\n return\n }\n if (type === 'function' || type === 'symbol' || type === 'bigint') {\n throw new Error(`${type} is not JSON-compatible`)\n }\n\n const obj = value\n if (seen.has(obj)) throw new Error('Circular reference is not JSON-compatible')\n seen.add(obj)\n\n if (Array.isArray(value)) {\n for (const item of value as unknown[]) assertJsonCompatible(item, seen)\n } else {\n for (const v of Object.values(value as Record<string, unknown>)) assertJsonCompatible(v, seen)\n }\n\n seen.delete(obj)\n}\n\n/**\n * Deep clone helper used by get() so callers cannot mutate the internal store state.\n * Only JSON-compatible values are accepted; functions and other non-JSON types throw.\n */\nexport const cloneDeep = <T>(value: T): T => {\n if (value === null || value === undefined) return value\n\n const type = typeof value\n if (type !== 'object') {\n if (type === 'function' || type === 'symbol' || type === 'bigint') {\n throw new Error(`${type} is not JSON-compatible`)\n }\n if (type === 'number' && !Number.isFinite(value)) {\n throw new Error(`Non-finite number is not JSON-compatible: ${value}`)\n }\n return value\n }\n\n if (Array.isArray(value)) {\n return (value as unknown[]).map((item) => cloneDeep(item)) as unknown as T\n }\n\n const obj = value as Record<string, unknown>\n const result: Record<string, unknown> = {}\n for (const key of Object.keys(obj)) {\n result[key] = cloneDeep(obj[key])\n }\n return result as unknown as T\n}\n","/**\n * Minimal JSON Pointer implementation (RFC 6901).\n * Supports get, set, and path resolution (absolute, relative, ./ ../).\n *\n * Paths and nesting are unbounded: e.g. /a/b/c/0/d/e/1/f is valid;\n * segments can be object keys or array indices (numeric strings).\n */\n\nimport { JSON_SEPARATOR } from './contants'\n\nconst DANGEROUS_KEYS = new Set(['__proto__', 'prototype', 'constructor'])\n\n/**\n * Normalize a path: remove empty segments and trailing/leading slashes.\n * Prevents accidental keys like \"\" from paths such as \"//\" or \"/a/\".\n * Does not decode segments (e.g. ~1 stays so one segment is preserved).\n */\nexport const normalizePath = (pathStr: string): string => {\n if (!pathStr || pathStr === '/') return '/'\n const trimmed = pathStr.startsWith('/') ? pathStr.slice(1) : pathStr\n const segments = trimmed.split(JSON_SEPARATOR).filter((s) => s !== '')\n return segments.length === 0 ? '/' : JSON_SEPARATOR + segments.join(JSON_SEPARATOR)\n}\n\nexport const parsePath = (pathStr: string): string[] => {\n if (!pathStr || pathStr === '/') return []\n if (!pathStr.startsWith(JSON_SEPARATOR)) {\n throw new Error(`Invalid JSON Pointer path: ${pathStr}`)\n }\n return pathStr.slice(1).split(JSON_SEPARATOR).map(decode)\n}\n\nconst decode = (segment: string): string => {\n for (let i = 0; i < segment.length; i++) {\n if (segment[i] === '~') {\n const next = segment[i + 1]\n if (next !== '0' && next !== '1') {\n throw new Error(`Invalid JSON Pointer escape in segment: ${segment}`)\n }\n i += 1\n }\n }\n return segment.replace(/~1/g, '/').replace(/~0/g, '~')\n}\n\nconst encode = (segment: string): string => {\n return String(segment).replace(/~/g, '~0').replace(/\\//g, '~1')\n}\n\nexport const get = (obj: unknown, pathStr: string): unknown => {\n const segments = parsePath(pathStr) // parsePath normalizes, so /a//b/ -> /a/b\n let current: unknown = obj\n for (const seg of segments) {\n if (current == null || typeof current !== 'object') return undefined\n current = (current as Record<string, unknown>)[seg]\n }\n return current\n}\n\nexport const set = (obj: Record<string, unknown>, pathStr: string, value: unknown): void => {\n const segments = parsePath(pathStr)\n if (segments.length === 0) return\n\n let current: Record<string, unknown> = obj\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i]\n if (DANGEROUS_KEYS.has(seg)) {\n throw new Error(`Unsafe JSON Pointer segment: ${seg}`)\n }\n\n const nextSeg = segments[i + 1]\n const nextKey = isArrayIndexToken(nextSeg) ? parseInt(nextSeg, 10) : nextSeg\n\n if (!(seg in current) || current[seg] == null) {\n current[seg] = typeof nextKey === 'number' ? [] : {}\n }\n const next = current[seg]\n if (typeof next !== 'object' || next === null) {\n current[seg] = typeof nextKey === 'number' ? [] : {}\n }\n current = current[seg] as Record<string, unknown>\n }\n\n const lastSeg = segments[segments.length - 1]\n if (DANGEROUS_KEYS.has(lastSeg)) {\n throw new Error(`Unsafe JSON Pointer segment: ${lastSeg}`)\n }\n\n const lastKey = isArrayIndexToken(lastSeg) ? parseInt(lastSeg, 10) : lastSeg\n if (Array.isArray(current)) {\n if (typeof lastKey !== 'number') {\n throw new Error(`Invalid array index segment: ${lastSeg}`)\n }\n ;(current as unknown[])[lastKey] = value\n } else {\n current[lastSeg] = value\n }\n}\n\n/**\n * Resolve a path against a base path (for relative paths like ./x, ../y).\n * Supports arbitrary depth; excess \"..\" yields root then appends remaining segments.\n */\nexport const resolvePath = (basePath: string, relativePath: string): string => {\n if (relativePath.startsWith('/')) return normalizePath(relativePath)\n\n const baseSegments = parsePath(basePath)\n const relSegments = relativePath.split(JSON_SEPARATOR).filter(Boolean)\n\n for (const seg of relSegments) {\n if (seg === '..') {\n baseSegments.pop()\n } else if (seg !== '.') {\n baseSegments.push(decode(seg))\n }\n }\n\n return JSON_SEPARATOR + baseSegments.map(encode).join(JSON_SEPARATOR)\n}\n\nconst isArrayIndexToken = (token: string): boolean => {\n if (token.length === 0) return false\n if (token === '0') return true\n return /^[1-9]\\d*$/.test(token)\n}\n","/**\n * Tree-shaped state management with multiple stores.\n * Similar to Redux but tailored for JSON UI: per-store trees, JSON Pointer paths.\n *\n * Store paths are unbounded and can be arbitrarily nested (objects and arrays),\n * e.g. /a/b/c/2/d/e/0/f. Logical paths are resolved via resolveStorePath and\n * applied consistently in get/set.\n */\n\nimport { TOUCH_STORE_SUFFIX, ERROR_STORE_SUFFIX, STORE_ROOT_PATH } from '../util/contants.js'\nimport { assertJsonCompatible, cloneDeep } from '../util/helpers.js'\nimport { get as ptrGet, resolvePath, normalizePath, parsePath } from '../util/json-pointer.js'\nimport type { JSONValue, PathModifier } from '../util/types.js'\n\nexport type StoreState = Record<string, unknown>\nexport type Listener = () => void\nexport type StoreChangeListener = (storeName: string, logicalPath: string) => void\n\nconst isTouchOrErrorShadowStore = (storeName: string): boolean => {\n return storeName.endsWith(TOUCH_STORE_SUFFIX) || storeName.endsWith(ERROR_STORE_SUFFIX)\n}\n\nexport class FormStore {\n private state: StoreState = {}\n private changeListeners = new Set<StoreChangeListener>()\n\n getState(): Readonly<StoreState> {\n return cloneDeep(this.state)\n }\n\n /**\n * Logical JsonUI stores snapshot — same shape as `JsonUI` `defaultValues`:\n * `{ data: {...}, \"data.touch\": {...}, \"data.error\": {...} }`.\n * Omits the internal `/storeRoot` wrapper returned by {@link getState}.\n */\n getLogicalStoresMap(): Record<string, JSONValue> {\n const slice = ptrGet(this.state, STORE_ROOT_PATH)\n if (slice === undefined || slice === null || typeof slice !== 'object' || Array.isArray(slice)) {\n return {}\n }\n return cloneDeep(slice) as Record<string, JSONValue>\n }\n\n /**\n * Initialise a logical store root without marking fields as touched.\n */\n initializeStore(storeName: string, value: JSONValue): void {\n this.set(storeName, '/', value, false)\n }\n\n private getByPointer(path: string): unknown {\n const value = ptrGet(this.state, path)\n return cloneDeep(value)\n }\n\n private setByPointer(path: string, value: unknown): void {\n assertJsonCompatible(value)\n this.state = setImmutable(this.state, path, value)\n this.notify()\n }\n\n /**\n * Convenience helpers that work with logical store names and logical paths,\n * instead of requiring callers to compose `/storeRoot/{storeName}/...`.\n *\n * Store isolation: each storeName (e.g. \"data\", \"data.error\", \"data.touch\") is\n * a distinct store. get/set only read/write that store's subtree;\n * \"data.error\" cannot access \"data\" or any other store.\n *\n * When trackTouch is true, set also writes to `${storeName}.touch` at\n * the same logicalPath; path normalization applies (no empty segments).\n */\n set(storeName: string, logicalPath: string, value: unknown, trackTouch = true): void {\n const internalPath = makeStorePath(storeName, logicalPath)\n this.setByPointer(internalPath, value)\n\n if (trackTouch && !isTouchOrErrorShadowStore(storeName)) {\n const touchStoreName = `${storeName}${TOUCH_STORE_SUFFIX}`\n this.setByPointer(makeStorePath(touchStoreName, logicalPath), true)\n }\n\n // Notify fine-grained listeners with logical store name + path so\n // JsonUI can re-resolve only components that depend on this slice.\n this.notifyChange(storeName, logicalPath)\n }\n\n get(storeName: string, logicalPath: string): unknown {\n const internalPath = makeStorePath(storeName, logicalPath)\n return this.getByPointer(internalPath)\n }\n\n // Backward-compatible aliases for existing consumers.\n setForStore(storeName: string, logicalPath: string, value: unknown, trackTouch = true): void {\n this.set(storeName, logicalPath, value, trackTouch)\n }\n\n // Backward-compatible aliases for existing consumers.\n getForStore(storeName: string, logicalPath: string): unknown {\n return this.get(storeName, logicalPath)\n }\n\n private notify(): void {\n // No coarse-grained subscription API is exposed intentionally.\n }\n\n subscribeChange(listener: StoreChangeListener): () => void {\n this.changeListeners.add(listener)\n return () => this.changeListeners.delete(listener)\n }\n\n private notifyChange(storeName: string, logicalPath: string): void {\n this.changeListeners.forEach((l) => l(storeName, logicalPath))\n }\n}\n\nexport const makeStorePath = (storeName: string, path: string): string => {\n if (!storeName || storeName.length === 0) {\n throw new Error('storeName must be a non-empty string')\n }\n const base = `${STORE_ROOT_PATH}/${storeName}`\n const pointerPath = !path || path === '/' ? '/' : path.startsWith('/') ? path : `/${path}`\n const normalized = normalizePath(pointerPath)\n if (normalized === '/') return base\n return base + normalized\n}\n\n/**\n * Immutable variant of ptrSet: returns a new root object with the change applied,\n * without mutating the original tree. Only the objects/arrays along the path are\n * shallow-copied; unrelated subtrees are structurally shared for performance.\n */\nconst setImmutable = (root: StoreState, pathStr: string, value: unknown): StoreState => {\n const segments = parsePath(pathStr)\n if (segments.length === 0) return root\n\n const originalRoot = root\n\n const cloneContainer = (container: unknown): Record<string, unknown> | unknown[] => {\n if (Array.isArray(container)) {\n return (container as unknown[]).slice()\n }\n if (container && typeof container === 'object') {\n return { ...(container as Record<string, unknown>) }\n }\n return {}\n }\n\n const setAt = (current: unknown, index: number): { cloned: Record<string, unknown> | unknown[]; result: unknown } => {\n const isLast = index === segments.length - 1\n const seg = segments[index]\n const container = cloneContainer(current)\n\n if (isLast) {\n const lastSeg = seg\n const lastKey = lastSeg === '' || /^\\d+$/.test(lastSeg) ? parseInt(lastSeg, 10) : lastSeg\n\n if (Array.isArray(container)) {\n container[lastKey as number] = value\n } else {\n container[lastSeg] = value\n }\n\n return { cloned: container, result: container }\n }\n\n const nextSeg = segments[index + 1]\n const nextKey = nextSeg === '' || /^\\d+$/.test(nextSeg) ? parseInt(nextSeg, 10) : nextSeg\n\n // Non-last segment: ensure child container exists before descending.\n const keyForChild: string | number = seg\n let next = Array.isArray(container) && /^\\d+$/.test(seg) ? container[parseInt(seg, 10)] : (container as Record<string, unknown>)[seg]\n\n if (\n next == null ||\n typeof next !== 'object' ||\n (Array.isArray(next) && typeof nextKey === 'string') ||\n (!Array.isArray(next) && typeof nextKey === 'number')\n ) {\n next = typeof nextKey === 'number' ? [] : {}\n }\n\n const { result: childClone } = setAt(next, index + 1)\n\n if (Array.isArray(container) && /^\\d+$/.test(String(keyForChild))) {\n container[parseInt(String(keyForChild), 10)] = childClone\n } else {\n ;(container as Record<string, unknown>)[String(keyForChild)] = childClone\n }\n\n return { cloned: container, result: container }\n }\n\n const { result } = setAt(originalRoot, 0)\n return result as StoreState\n}\n\n/**\n * Resolve a path for a given store, using pathModifiers (from list context) and currentPath for relative paths.\n * - Absolute path: /firstname -> unchanged (then normalized).\n * - Relative path: firstname -> resolved against currentPath (or pathModifiers[storeName] when in list context).\n * - pathModifiers apply per store: only pathModifiers[storeName] is used for that store; \"data.error\" cannot\n * access \"data\" or any other store.\n * Returns a normalized path (no empty segments, no trailing slash).\n */\nexport const resolveStorePath = (pathStr: string, currentPath: string, pathModifiers?: PathModifier, storeName?: string): string => {\n let resolved: string\n const modifier =\n pathModifiers !== undefined && storeName !== undefined && Object.prototype.hasOwnProperty.call(pathModifiers, storeName)\n ? pathModifiers[storeName]\n : undefined\n if (modifier !== undefined) {\n resolved = resolvePath(modifier.path, pathStr)\n } else if (pathStr.startsWith('/')) {\n resolved = pathStr\n } else {\n resolved = resolvePath(currentPath, pathStr)\n }\n return normalizePath(resolved)\n}\n","import type { FormStore } from '../store/formStore.js'\nimport { resolveStorePath } from '../store/formStore.js'\nimport { ActionContext } from '../util/types.js'\n\nexport const createSetAction = (formStore: FormStore) => {\n return async (params: Record<string, unknown>, ctx?: Pick<ActionContext, 'currentPath' | 'pathModifiers'>): Promise<void> => {\n const storeName = params.store as string\n const path = params.path as string\n let value = params.value\n const jsonataDef = params.jsonataDef as string | undefined\n if (!storeName || storeName.length === 0) return\n\n if (typeof jsonataDef === 'string' && jsonataDef) {\n try {\n const jsonata = (await import('jsonata')).default\n const expr = jsonata(jsonataDef)\n value = await expr.evaluate(value)\n } catch {\n value = params.value\n }\n }\n\n const logicalPath = resolveStorePath(path, ctx?.currentPath ?? '/', ctx?.pathModifiers, storeName)\n formStore.set(storeName, logicalPath, value)\n }\n}\n","import type { ModifierContext } from '../util/types.js'\nimport { createSetAction } from '../JsonUI/setAction.js'\n\nexport const set = (params: Record<string, unknown>, ctx: ModifierContext): void | Promise<void> => {\n const setFn = createSetAction(ctx.formStore)\n return setFn(params, ctx)\n}\n","import type { ActionMap } from '../util/types.js'\nimport { set } from './set.js'\n\nconst actions: ActionMap = {\n set,\n}\nexport default actions\n","/**\n * Expands simplified node format into full JSON UI node so components receive\n * value, onChange, error, etc. without the model having to specify every binding.\n *\n * When a node has store + path (non-empty store, string path), we add:\n * - value: { $modifier: 'get', store, path }\n * - onChange: { $action: 'set', store, path }\n * - error / fieldErrors: { $modifier: 'get', store: store + '.error', path }\n * - fieldTouched: { $modifier: 'get', store: store + '.touch', path }\n *\n * The component is unchanged; RenderNode uses the expanded node for prop\n * resolution and the expanded props are passed through normally.\n */\n\nimport { MODIFIER_KEY, ACTION_KEY, V_COMP } from '../util/contants.js'\nimport type { JsonUINode } from '../util/types.js'\n\nconst isSimplifiedNode = (\n node: unknown\n): node is JsonUINode & {\n [key: string]: unknown\n store: string\n path: string\n} => {\n if (typeof node !== 'object' || node === null) return false\n const r = node as Record<string, unknown>\n const store = r.store\n const path = r.path\n return typeof store === 'string' && store.length > 0 && typeof path === 'string'\n}\n\n/**\n * Returns an expanded node with value, onChange, error, fieldErrors, fieldTouched\n * derived from store + path. Strips store and path from the result so they are\n * not passed as component props.\n * If the node is not simplified, returns the same node reference.\n */\nexport const expandSimplifiedNode = (node: JsonUINode): JsonUINode => {\n if (!isSimplifiedNode(node) && node[V_COMP] !== 'SubmitButton') {\n return node\n }\n\n const { store, path, ...rest } = node as Record<string, unknown>\n\n const expanded = {\n ...(node[V_COMP] === 'SubmitButton'\n ? {\n onClick: {\n [ACTION_KEY]: 'submit',\n },\n }\n : {}),\n ...(isSimplifiedNode(node)\n ? {\n value: {\n [MODIFIER_KEY]: 'get',\n store,\n path,\n },\n onChange: {\n [ACTION_KEY]: 'set',\n store,\n path,\n },\n fieldErrors: {\n [MODIFIER_KEY]: 'get',\n store,\n path,\n type: 'ERROR',\n },\n fieldTouched: {\n [MODIFIER_KEY]: 'get',\n store,\n path,\n type: 'TOUCH',\n },\n }\n : {\n //if is not a simplified node, we should add store and path props\n store,\n path,\n }),\n ...rest,\n }\n\n return expanded\n}\n","/**\n * JsonUI list pagination: maps `$page`, `$itemPerPage`, and `$listLength` to a slice of the backing list.\n *\n * Computes which indices belong on the current page. `page`, `itemPerPage`, and `listLength` are\n * coerced to non-negative integers; invalid or missing values use defaults (`page` → 0,\n * `itemPerPage` → effective list length, `listLength` → `realDataLength` when omitted).\n * If `page * itemPerPage` exceeds `listLength`, offset resets to 0 (parity with reference impl).\n *\n * @param args.realDataLength - Actual length of the list data in memory (caps defaults).\n * @param args.page - Zero-based page index from the model (`$page`).\n * @param args.itemPerPage - Page size from the model (`$itemPerPage`).\n * @param args.listLength - Logical list length from the model (`$listLength`); may differ from `realDataLength`.\n * @returns `offset` and `end` for half-open `[offset, end)` slicing, plus `indices` listing each index in range.\n * @see computeRenderNodeSlotChildren in @jsonui/react\n */\nexport interface ComputeListSliceRangeArgs {\n realDataLength: number\n page?: unknown\n itemPerPage?: unknown\n listLength?: unknown\n}\n\nexport interface ComputeListSliceRangeResult {\n offset: number\n end: number\n indices: number[]\n}\n\nexport const computeListSliceRange = ({\n realDataLength,\n page: pageRaw,\n itemPerPage: itemPerPageRaw,\n listLength: listLengthRaw,\n}: ComputeListSliceRangeArgs): ComputeListSliceRangeResult => {\n const coerceNonNegInt = (v: unknown, fallback: number): number => {\n if (typeof v === 'number' && Number.isInteger(v) && v >= 0) return v\n return fallback\n }\n\n let listLength = coerceNonNegInt(listLengthRaw, realDataLength)\n if (listLengthRaw === undefined) {\n listLength = realDataLength\n }\n const itemPerPage = coerceNonNegInt(itemPerPageRaw, listLength)\n const page = coerceNonNegInt(pageRaw, 0)\n const offset = page * itemPerPage <= listLength ? page * itemPerPage : 0\n const end = Math.min(listLength, offset + itemPerPage)\n const indices: number[] = []\n for (let i = offset; i < end; i++) indices.push(i)\n return { offset, end, indices }\n}\n","import type { JsonUINode, PathModifier } from '../../util/types.js'\nimport { resolveStorePath } from '../../store/formStore.js'\nimport { PATH_MODIFIERS_KEY } from '../../util/contants.js'\n\nexport const getOwnPathModifiers = (node: JsonUINode): PathModifier | undefined => {\n return (node as Record<string, unknown>)[PATH_MODIFIERS_KEY] as PathModifier | undefined\n}\n\nexport const mergeEffectivePathModifiers = ({\n ownPathModifiers,\n pathModifiers,\n currentPath,\n}: {\n ownPathModifiers?: PathModifier\n pathModifiers?: PathModifier\n currentPath: string\n}): PathModifier | undefined => {\n if (!ownPathModifiers || typeof ownPathModifiers !== 'object') {\n return pathModifiers\n }\n const merged: PathModifier = {\n ...(pathModifiers ?? {}),\n }\n\n for (const [storeName, spec] of Object.entries(ownPathModifiers)) {\n if (typeof spec !== 'object') continue\n const rawPath = (spec as { path?: string }).path\n if (typeof rawPath !== 'string' || rawPath.length === 0) continue\n\n const resolved = resolveStorePath(rawPath, currentPath, pathModifiers, storeName)\n merged[storeName] = { path: resolved }\n }\n\n return merged\n}\n","/** Segment-aware path overlap check (aligned with validation.ts). */\nexport const isPathPrefix = (rulePath: string, targetPath: string): boolean => {\n const r = rulePath === '' ? '/' : rulePath\n const t = targetPath === '' ? '/' : targetPath\n if (r === '/') return true\n if (t === r) return true\n return t.startsWith(r.endsWith('/') ? r : `${r}/`)\n}\n","import type { FormStore } from '../store/formStore.js'\nimport { resolveStorePath } from '../store/formStore.js'\nimport { ERROR_STORE_SUFFIX, TOUCH_STORE_SUFFIX } from '../util/contants.js'\nimport type { ModifierContext } from '../util/types.js'\n\nconst hasAnyError = (value: unknown): boolean => {\n if (value === null || value === undefined) return false\n if (Array.isArray(value)) {\n return value.some((v) => hasAnyError(v))\n }\n if (typeof value === 'object') {\n return Object.values(value as Record<string, unknown>).some((v) => hasAnyError(v))\n }\n return true\n}\n\nconst hasAnyTouched = (value: unknown): boolean => {\n if (value === true) return true\n if (value === null || value === undefined) return false\n if (Array.isArray(value)) {\n return value.some((v) => hasAnyTouched(v))\n }\n if (typeof value === 'object') {\n return Object.values(value as Record<string, unknown>).some((v) => hasAnyTouched(v))\n }\n return false\n}\n\nexport const createGetModifier = (formStore: FormStore) => {\n return async (params: Record<string, unknown> | undefined, ctx: ModifierContext): Promise<unknown> => {\n const storeName = !!params?.store && typeof params.store === 'string' ? params.store : ''\n const path = !!params?.path && typeof params.path === 'string' ? params.path : '/'\n const type = !!params?.type && typeof params.type === 'string' ? params.type : undefined\n const jsonataDef = params?.jsonataDef as string | undefined\n\n if (storeName.length === 0) return undefined\n\n const resolvedStoreName = type === 'ERROR' ? `${storeName}${ERROR_STORE_SUFFIX}` : type === 'TOUCH' ? `${storeName}${TOUCH_STORE_SUFFIX}` : storeName\n\n // Path modifiers are keyed by the logical/base store (e.g. \"data\"),\n // not by shadow stores like \"data.error\".\n const logicalPath = resolveStorePath(path, ctx.currentPath, ctx.pathModifiers, storeName)\n let value = formStore.get(resolvedStoreName, logicalPath)\n\n // For ERROR lookups, leaf-less containers (e.g. { players: [{}] })\n // mean there is no actual validation message in the subtree.\n if (type === 'ERROR' && !hasAnyError(value)) {\n value = undefined\n }\n // TODO need to test hasAnyTouched and hasAnyError\n if (type === 'TOUCH') {\n value = hasAnyTouched(value)\n }\n\n if (jsonataDef && value !== undefined) {\n try {\n const jsonata = (await import('jsonata')).default\n const expr = jsonata(jsonataDef)\n value = await expr.evaluate(value)\n } catch {\n // fallback\n }\n }\n return value\n }\n}\n","import { MODIFIER_KEY } from '../util/contants.js'\nimport type { ModifierContext, ModifierMap } from '../util/types.js'\nimport { createGetModifier } from './getModifier.js'\n\n/**\n * Resolves $modifier (and nested values) anywhere in the tree.\n * Modifiers can appear at component root (value, onChange, etc.), in nested\n * structures (e.g. style.fontSize, style.base.padding), or in $child* slot content.\n * We recurse into objects and arrays so every occurrence is resolved.\n */\n//TODO add unit test to the resolveModifier\nexport async function resolveModifier(value: unknown, modifiers: ModifierMap, ctx: ModifierContext): Promise<unknown> {\n // If it's a direct modifier object: { $modifier: 'x', ...params }\n if (value != null && typeof value === 'object' && MODIFIER_KEY in value) {\n const { [MODIFIER_KEY]: mod, ...params } = value as Record<string, unknown>\n\n const resolvedParams: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(params)) {\n resolvedParams[k] = await resolveModifier(v, modifiers, ctx)\n }\n\n const handler = modifiers[mod as string] ?? (mod === 'get' ? createGetModifier(ctx.formStore) : undefined)\n if (!handler) return undefined\n\n const result = handler(resolvedParams, ctx)\n return result instanceof Promise ? await result : result\n }\n\n // If it's an array, resolve modifiers in each element.\n if (Array.isArray(value)) {\n const resolved = await Promise.all(value.map((item) => resolveModifier(item, modifiers, ctx)))\n return resolved\n }\n\n // If it's a plain object without $modifier, traverse its properties\n // so nested fields like www2.bbb or payload.value get resolved.\n if (value != null && typeof value === 'object') {\n const obj = value as Record<string, unknown>\n const entries = Object.entries(obj)\n if (entries.length === 0) return value\n\n const resolvedObj: Record<string, unknown> = {}\n for (const [k, v] of entries) {\n resolvedObj[k] = await resolveModifier(v, modifiers, ctx)\n }\n return resolvedObj\n }\n\n // Primitive or null – nothing to do.\n return value\n}\n","/**\n * Style types for the shared style layer (web + React Native).\n * Canonical style is a subset of CSS-like keys that we support and map to both platforms.\n */\n\n/** Supported style keys; values are number (px), string, or standard CSS values */\nexport type CanonicalStyle = Record<string, string | number | undefined>\n\n/** Breakpoint keys for responsive style objects */\nexport type BreakpointKey = 'base' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\n/**\n * Responsive style: base + optional overrides per breakpoint.\n * Resolver merges base with the current breakpoint's block (mobile-first).\n */\nexport interface ResponsiveStyle {\n base?: CanonicalStyle\n xs?: CanonicalStyle\n sm?: CanonicalStyle\n md?: CanonicalStyle\n lg?: CanonicalStyle\n xl?: CanonicalStyle\n}\n\n/** Input style can be a flat style object or a responsive object */\nexport type StyleInput = CanonicalStyle | ResponsiveStyle\n\n/** Platform for style resolution */\nexport type StylePlatform = 'web' | 'native'\n\nexport interface ResolveStyleOptions {\n platform: StylePlatform\n breakpoint?: BreakpointKey\n}\n\n/** Default breakpoint width thresholds (min-width in px) */\nexport const DEFAULT_BREAKPOINTS: Record<BreakpointKey, number> = {\n base: 0,\n xs: 0,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n}\n\n/** Order for merging: base first, then xs..xl */\nexport const BREAKPOINT_ORDER: BreakpointKey[] = ['base', 'xs', 'sm', 'md', 'lg', 'xl']\n","/**\n * Resolves canonical or responsive style to platform-specific style (web or React Native).\n * Pure and synchronous; no dependencies.\n */\n\nimport type { CanonicalStyle, ResponsiveStyle, StyleInput, BreakpointKey, ResolveStyleOptions } from './types.js'\nimport { BREAKPOINT_ORDER } from './types.js'\n\nconst isResponsiveStyle = (style: StyleInput): style is ResponsiveStyle => {\n if (typeof style !== 'object' || Array.isArray(style)) return false\n const keys = Object.keys(style)\n return keys.some((k) => BREAKPOINT_ORDER.includes(k as BreakpointKey))\n}\n\n/**\n * Merge responsive style into a single style: base + all breakpoints up to and including current.\n * Mobile-first: current breakpoint index determines how many layers we merge.\n */\nconst mergeResponsive = (responsive: ResponsiveStyle, currentBreakpoint: BreakpointKey): CanonicalStyle => {\n const idx = BREAKPOINT_ORDER.indexOf(currentBreakpoint)\n const merged: CanonicalStyle = {}\n for (let i = 0; i <= idx; i++) {\n const key = BREAKPOINT_ORDER[i]\n const block = responsive[key]\n if (block && typeof block === 'object' && !Array.isArray(block)) {\n Object.assign(merged, block)\n }\n }\n return merged\n}\n\n/**\n * Parse \"1px solid #ccc\" or similar border shorthand into parts.\n */\nconst parseBorder = (\n value: string\n): {\n width?: number\n style?: string\n color?: string\n} => {\n const parts = value.trim().split(/\\s+/)\n const result: { width?: number; style?: string; color?: string } = {}\n for (const p of parts) {\n if (/^\\d+(\\.\\d+)?(px)?$/.test(p)) {\n result.width = parseFloat(p)\n } else if (['solid', 'dashed', 'dotted', 'none'].includes(p)) {\n result.style = p\n } else if (p.startsWith('#') || p.startsWith('rgb')) {\n result.color = p\n }\n }\n return result\n}\n\n/**\n * Convert canonical style to React Native-compatible style.\n * - border shorthand -> borderWidth, borderColor, borderStyle\n * - cursor is not supported on RN, omit\n * - numeric values kept as-is where RN expects numbers\n */\nconst toNativeStyle = (canonical: CanonicalStyle): Record<string, unknown> => {\n const out: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(canonical)) {\n if (value === undefined) continue\n if (key === 'cursor') continue // not supported on RN\n if (key === 'border' && typeof value === 'string') {\n const { width, style, color } = parseBorder(value)\n if (width !== undefined) out.borderWidth = width\n if (style) out.borderStyle = style\n if (color) out.borderColor = color\n continue\n }\n if (key === 'borderRadius' && typeof value === 'number') {\n out.borderRadius = value\n continue\n }\n if ((key === 'borderTop' || key === 'borderBottom' || key === 'borderLeft' || key === 'borderRight') && typeof value === 'string') {\n const { width, style, color } = parseBorder(value)\n if (width !== undefined) out[`${key}Width`] = width\n if (style) out[`${key}Style`] = style\n if (color) out[`${key}Color`] = color\n continue\n }\n out[key] = value\n }\n return out\n}\n\n/**\n * Length-like style keys that need a unit (px) when the value is a bare number\n * or numeric string (e.g. from a store/modifier like sliderValue).\n */\nconst LENGTH_KEYS = new Set([\n 'fontSize',\n 'width',\n 'height',\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight',\n 'margin',\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'padding',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'gap',\n])\n\nconst ensureLengthUnit = (key: string, value?: string | number): string | number | undefined => {\n if (value === undefined) return value\n if (!LENGTH_KEYS.has(key)) return value\n if (typeof value === 'number') return `${value}px`\n if (typeof value === 'string' && /^\\d+(\\.\\d+)?$/.test(value.trim())) {\n return `${value.trim()}px`\n }\n return value\n}\n\n/**\n * Web: pass through with minimal changes. Normalize length props (e.g. fontSize)\n * so numeric or numeric-string values get \"px\" and the browser applies them.\n */\nconst toWebStyle = (canonical: CanonicalStyle): Record<string, unknown> => {\n const out: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(canonical)) {\n out[key] = ensureLengthUnit(key, value)\n }\n return out\n}\n\n/**\n * Resolve style input (canonical or responsive) to platform-specific style.\n * - If style is responsive (has base/xs/sm/md/lg/xl), merge up to current breakpoint, then resolve.\n * - If no breakpoint is provided for a responsive style, only \"base\" is used.\n */\nexport const resolveStyle = (style: StyleInput | null | undefined, options: ResolveStyleOptions): Record<string, unknown> | undefined => {\n if (!style || typeof style !== 'object') return undefined\n\n let canonical: CanonicalStyle\n\n if (isResponsiveStyle(style)) {\n const breakpoint = options.breakpoint ?? 'base'\n canonical = mergeResponsive(style, breakpoint)\n } else {\n canonical = style\n }\n\n if (Object.keys(canonical).length === 0) return undefined\n\n return options.platform === 'native' ? toNativeStyle(canonical) : toWebStyle(canonical)\n}\n","import Ajv from 'ajv'\nimport addFormats from 'ajv-formats'\nimport ajvErrors from 'ajv-errors'\nimport type { FormStore } from '../store/formStore.js'\nimport { ERROR_STORE_SUFFIX } from '../util/contants.js'\nimport { InlineValidationSpec, ModifierContext, ModifierMap, ValidationRegistry, ValidationRule } from '../util/types.js'\nimport { resolveModifier } from './resolveModifier.js'\n\nlet inlineAjv: Ajv | null = null\n\nconst getInlineAjv = (): Ajv => {\n if (!inlineAjv) {\n // TODO why it's no strict?\n inlineAjv = new Ajv({ allErrors: true, strict: false })\n addFormats(inlineAjv)\n ajvErrors(inlineAjv)\n }\n return inlineAjv\n}\n\nconst stringifyValidationError = (error: unknown): string => {\n if (typeof error === 'string') return error\n if (typeof error === 'object' && error !== null && 'message' in error && typeof error.message === 'string') {\n return error.message\n }\n\n try {\n return String(error)\n } catch {\n return 'error'\n }\n}\n\nexport const buildValidationRegistry = (rules?: ValidationRule[]): ValidationRegistry => {\n const registry: ValidationRegistry = {}\n if (!Array.isArray(rules) || rules.length === 0) return registry\n\n const ajv = new Ajv({ allErrors: true, strict: false })\n // TODO: check test how looks like in jsonui\n addFormats(ajv)\n ajvErrors(ajv)\n\n for (const rule of rules) {\n if (rule.schema === undefined || rule.schema === null || !rule.store || !rule.path) continue\n\n const schema = (rule as Partial<ValidationRule>).schema\n const store = (rule as Partial<ValidationRule>).store\n const path = (rule as Partial<ValidationRule>).path\n\n if (schema === undefined || schema === null) continue\n if (typeof store !== 'string' || store.length === 0) continue\n if (typeof path !== 'string' || path.length === 0) continue\n\n const validate = ajv.compile(schema)\n const byStore = registry[store] ?? (registry[store] = {})\n const list = byStore[path] ?? (byStore[path] = [])\n list.push(validate)\n }\n\n return registry\n}\n\n/**\n * Run a single inline (field-level) validation spec against the current store state.\n *\n * The component's own store name and resolved logical path are passed in directly —\n * they come from the simplified component's `store`/`path` props, not from the spec.\n *\n * Supports two validation styles:\n * - schema: AJV JSON Schema validation\n * - jsonataDef + errorMessage (not mandatory): JSONata expression; error shown when result is\n * not null, undefined, empty string, or true. errorMessage may be a plain string\n * or a { $modifier: ... } expression resolved via resolveModifier.\n */\nexport const runInlineValidation = async (\n spec: InlineValidationSpec,\n componentStoreName: string,\n componentLogicalPath: string,\n modifiers: ModifierMap,\n ctx: ModifierContext\n): Promise<void> => {\n const { formStore } = ctx\n const errorStoreName = `${componentStoreName}${ERROR_STORE_SUFFIX}`\n const value = formStore.get(componentStoreName, componentLogicalPath)\n\n if (spec.schema != null) {\n const ajv = getInlineAjv()\n const validate = ajv.compile(spec.schema)\n const messages: string[] = []\n const valid = validate(value)\n //TODO: need to outsource validation to separate function and test it\n if (!valid && validate.errors) {\n for (const err of validate.errors) {\n if (err.message) messages.push(err.message)\n }\n }\n\n const newError: string | null = messages.length > 0 ? messages.join('; ') : null\n const currentError = formStore.get(errorStoreName, componentLogicalPath)\n if ((currentError ?? null) !== newError) {\n formStore.set(errorStoreName, componentLogicalPath, newError, false)\n }\n return\n }\n\n if (spec.jsonataDef != null) {\n let result: unknown\n try {\n const jsonata = (await import('jsonata')).default\n const expr = jsonata(spec.jsonataDef)\n result = await expr.evaluate(value)\n } catch (e) {\n result = stringifyValidationError(e)\n }\n\n const hasError = result !== null && result !== undefined && result !== '' && result !== true\n\n const newError: string | null = hasError ? (spec.errorMessage ? String(await resolveModifier(spec.errorMessage, modifiers, ctx)) : String(result)) : null\n\n const currentError = formStore.get(errorStoreName, componentLogicalPath)\n if ((currentError ?? null) !== newError) {\n formStore.set(errorStoreName, componentLogicalPath, newError, false)\n }\n return\n }\n}\n\n// Runs all validators whose rule path matches the changed path prefix for the given store.\n// Aggregates current validation messages and writes or clears them in the matching .error store paths.\nexport const runValidationsForPath = (registry: ValidationRegistry, formStore: FormStore, storeName: string, path: string): void => {\n const storeValidators = registry[storeName]\n\n // No validators registered for this store at all\n if (!storeValidators) {\n return\n }\n\n const errorStoreName = `${storeName}${ERROR_STORE_SUFFIX}`\n\n // Collect new error messages per *concrete* target path (e.g. '/players/0/score').\n const perPathMessages: Partial<Record<string, string[]>> = {}\n const affectedErrorPaths = new Set<string>()\n\n // Include any existing error leaf paths under matching rule paths so we can clear\n // them if they become valid.\n const collectExistingPaths = (basePath: string, value: unknown): void => {\n if (value == null) return\n if (typeof value !== 'object') {\n affectedErrorPaths.add(basePath)\n return\n }\n if (Array.isArray(value)) {\n value.forEach((v, i) => {\n collectExistingPaths(`${basePath}/${i}`, v)\n })\n return\n }\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n collectExistingPaths(basePath === '/' ? `/${k}` : `${basePath}/${k}`, v)\n }\n }\n\n // Run all validators whose rule path is a prefix of the affected path.\n // Example: action path '/a/b/c' should trigger validators registered for\n // '/', '/a', '/a/b', and '/a/b/c'.\n for (const [rulePath, validators] of Object.entries(storeValidators)) {\n if (!Array.isArray(validators) || validators.length === 0) continue\n if (!isPathPrefix(rulePath, path)) continue\n\n // Track existing error paths under this rule so we can clear them.\n const existingSubtree = formStore.get(errorStoreName, rulePath)\n if (existingSubtree !== undefined) {\n collectExistingPaths(rulePath === '' ? '/' : rulePath, existingSubtree)\n }\n\n const valueAtRulePath = formStore.get(storeName, rulePath)\n for (const validate of validators) {\n const valid = validate(valueAtRulePath)\n if (!valid && validate.errors) {\n for (const err of validate.errors) {\n if (!err.message) continue\n const instancePath = typeof err.instancePath === 'string' ? err.instancePath : ''\n // instancePath is relative to rulePath, e.g. '/0/score'\n let targetPath: string\n if (rulePath === '' || rulePath === '/') {\n targetPath = instancePath && instancePath.length > 0 ? instancePath : '/'\n } else {\n targetPath = instancePath && instancePath.length > 0 ? `${rulePath}${instancePath}` : rulePath\n }\n const list = perPathMessages[targetPath] ?? (perPathMessages[targetPath] = [])\n list.push(err.message)\n affectedErrorPaths.add(targetPath)\n }\n }\n }\n }\n\n // Apply updates for all affected error paths (both existing and new).\n for (const targetPath of affectedErrorPaths) {\n const messages = perPathMessages[targetPath] ?? []\n const newError: string | null = messages.length > 0 ? messages.join('; ') : null\n const currentError = formStore.get(errorStoreName, targetPath)\n if ((currentError ?? null) === newError) continue\n formStore.set(errorStoreName, targetPath, newError, false)\n }\n}\n\n/** Match whole segments only; works for paths of any depth (e.g. /a/b/0/c). */\nconst isPathPrefix = (rulePath: string, targetPath: string): boolean => {\n const r = rulePath === '' ? '/' : rulePath\n const t = targetPath === '' ? '/' : targetPath\n\n if (r === '/') return true\n if (t === r) return true\n return t.startsWith(r.endsWith('/') ? r : `${r}/`)\n}\n","import { resolveStorePath } from '../../store/formStore.js'\nimport { V_COMP, MODIFIER_KEY, ERROR_STORE_SUFFIX, TOUCH_STORE_SUFFIX } from '../../util/contants.js'\nimport { PathModifier, StorePathDependency } from '../../util/types.js'\n\n/**\n * Recursively walks a node's props value tree and collects all store path dependencies\n * introduced by `$modifier: 'get'` entries. For each `get` modifier found, it resolves\n * the logical store path (accounting for path modifiers and ERROR/TOUCH type variants)\n * and appends it to the `deps` array. Nodes with a `$comp` key are skipped to avoid\n * descending into nested component definitions.\n */\nexport const collectGetModifierDependencies = (val: unknown, currentPath: string, deps: StorePathDependency[], effectivePathModifiers?: PathModifier): void => {\n if (val && typeof val === 'object' && !Array.isArray(val) && V_COMP in val) {\n return\n }\n if (val && typeof val === 'object' && !Array.isArray(val) && MODIFIER_KEY in val && (val as Record<string, unknown>)[MODIFIER_KEY] === 'get') {\n const storeName = (val as Record<string, unknown>).store as string | undefined\n const type = (val as Record<string, unknown>).type as string | undefined\n const path = (val as Record<string, unknown>).path\n const alteredStoreName =\n type === 'ERROR' ? `${storeName ?? ''}${ERROR_STORE_SUFFIX}` : type === 'TOUCH' ? `${storeName ?? ''}${TOUCH_STORE_SUFFIX}` : storeName\n if (storeName && alteredStoreName) {\n if (typeof path === 'string' && path) {\n const logicalPath = resolveStorePath(path, currentPath, effectivePathModifiers, storeName)\n deps.push({ store: alteredStoreName, path: logicalPath })\n } else {\n deps.push({ store: alteredStoreName, path: '/' })\n }\n }\n return\n }\n if (Array.isArray(val)) {\n val.forEach((v) => collectGetModifierDependencies(v, currentPath, deps, effectivePathModifiers))\n return\n }\n if (val && typeof val === 'object') {\n for (const v of Object.values(val as Record<string, unknown>)) {\n collectGetModifierDependencies(v, currentPath, deps, effectivePathModifiers)\n }\n }\n}\n","import type { JsonUINode, ModifierContext, ModifierMap, PathModifier, ResolvedRenderNodeState, StorePathDependency } from '../../util/types.js'\nimport { resolveModifier } from '../resolveModifier.js'\nimport { resolveStyle } from '../../style/resolveStyle.js'\nimport type { StylePlatform, BreakpointKey } from '../../style/types.js'\nimport { runInlineValidation } from '../validation.js'\nimport { resolveStorePath } from '../../store/formStore.js'\nimport { V_VALIDATIONS } from '../../util/contants.js'\nimport { collectGetModifierDependencies } from './collectGetDeps.js'\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nconst runValidationSpecsFromNode = async (\n node: JsonUINode,\n modifiers: ModifierMap,\n ctx: ModifierContext,\n componentStoreName: string | undefined,\n componentLogicalPath: string | undefined\n): Promise<void> => {\n const rawValidation = isRecord(node) ? (node[V_VALIDATIONS] as unknown[] | undefined) : undefined\n\n if (!rawValidation || !Array.isArray(rawValidation) || rawValidation.length === 0) return\n if (!componentStoreName || componentLogicalPath == null) return\n\n for (const item of rawValidation) {\n if (item === null || typeof item !== 'object') continue\n await runInlineValidation(item, componentStoreName, componentLogicalPath, modifiers, ctx)\n }\n}\ninterface RunRenderNodeResolutionArgs {\n node: JsonUINode\n modifiers: ModifierMap\n ctx: ModifierContext\n currentPath: string\n effectivePathModifiers?: PathModifier\n stylePlatform: StylePlatform\n styleBreakpoint?: BreakpointKey\n /** Store name from the simplified component's own `store` prop, if any. */\n componentStore?: string\n /** Logical path from the simplified component's own `path` prop, if any. */\n componentPath?: string\n}\n\nexport const runRenderNodeResolution = async ({\n node,\n modifiers,\n ctx,\n currentPath,\n effectivePathModifiers,\n stylePlatform,\n styleBreakpoint,\n componentStore,\n componentPath,\n}: RunRenderNodeResolutionArgs): Promise<{\n state: ResolvedRenderNodeState\n deps: StorePathDependency[]\n}> => {\n const props: Record<string, unknown> = {}\n const deps: StorePathDependency[] = []\n const resolvedSlots: Record<string, unknown> = {}\n const nodeEntries = isRecord(node) ? Object.entries(node) : []\n\n for (const [key, value] of nodeEntries) {\n if (key.startsWith('$child') || !key.startsWith('$')) {\n collectGetModifierDependencies(value, currentPath, deps, effectivePathModifiers)\n if (key.startsWith('$child')) {\n resolvedSlots[key] = await resolveModifier(value, modifiers, ctx)\n } else if (!key.startsWith('$')) {\n props[key] = await resolveModifier(value, modifiers, ctx)\n }\n }\n }\n\n if (props.style != null) {\n if (typeof props.style !== 'object' || Array.isArray(props.style)) {\n delete props.style\n } else {\n const resolved = resolveStyle(props.style, {\n platform: stylePlatform,\n breakpoint: styleBreakpoint,\n })\n props.style = resolved ?? props.style\n }\n }\n\n const resolvedComponentPath =\n componentStore && componentPath != null ? resolveStorePath(componentPath, currentPath, effectivePathModifiers, componentStore) : undefined\n\n await runValidationSpecsFromNode(node, modifiers, ctx, componentStore, resolvedComponentPath)\n\n return {\n state: { props, resolvedSlots },\n deps,\n }\n}\n","import { resolveStorePath } from '../store/formStore.js'\nimport type { ActionContext, ActionMap, ModifierMap } from '../util/types.js'\nimport { createSetAction } from './setAction.js'\nimport { resolveModifier } from './resolveModifier.js'\nimport { runValidationsForPath } from './validation.js'\nimport { ACTION_KEY } from '../util/contants.js'\n\nexport const resolveAction = (value: unknown, actions: ActionMap, modifiers: ModifierMap, ctx: ActionContext): ((e: unknown) => Promise<void>) | undefined => {\n if (value != null && typeof value === 'object' && ACTION_KEY in value) {\n const { [ACTION_KEY]: actionName, ...params } = value as Record<string, unknown>\n const hasExplicitValue = Object.prototype.hasOwnProperty.call(value, 'value')\n\n // Extract modifiers from action ctx.\n const { componentProps, validators, ...modifierCtx } = ctx\n\n let handler = actions[actionName as string]\n\n if (!handler && actionName === 'set') {\n handler = createSetAction(ctx.formStore)\n }\n\n if (!handler) return undefined\n\n return async (e: unknown) => {\n // TODO: research, why componentProps need\n const safeComponentProps = typeof componentProps === 'object' ? componentProps : {}\n const resolvedParams: Record<string, unknown> = { ...safeComponentProps, ...params }\n // Case 1: value from event (input onChange) – only when the model\n // did NOT define a value explicitly.\n if (!hasExplicitValue && e != null && typeof e === 'object' && 'target' in e) {\n const target = (e as { target?: { value?: unknown } }).target\n if (target?.value !== undefined) resolvedParams.value = target.value\n }\n // Cases 2 & 3: static JSON value or nested $modifier value – both\n // flow through resolveModifier below and are preserved.\n for (const [k, v] of Object.entries(resolvedParams)) {\n resolvedParams[k] = await resolveModifier(v, modifiers, modifierCtx)\n }\n const result = handler(resolvedParams, ctx)\n if (result instanceof Promise) await result\n\n // Run validations for this store/path if configured\n const storeName = typeof resolvedParams.store === 'string' ? resolvedParams.store : undefined\n const rawPath = typeof resolvedParams.path === 'string' ? resolvedParams.path : undefined\n if (validators && storeName && rawPath) {\n // Resolve to logical path so validations work with lists, pathModifiers,\n // and relative paths (e.g. \"score\" inside /players/0).\n const logicalPath = resolveStorePath(rawPath, ctx.currentPath, ctx.pathModifiers, storeName)\n runValidationsForPath(validators, ctx.formStore, storeName, logicalPath)\n }\n }\n }\n return undefined\n}\n","import type { ModifierContext } from '../util/types.js'\nimport { createGetModifier } from '../JsonUI/getModifier.js'\n\nexport const get = (params: Record<string, unknown>, ctx: ModifierContext): unknown | Promise<unknown> => {\n const getFn = createGetModifier(ctx.formStore)\n return getFn(params, ctx)\n}\n","export async function jsonata(params: Record<string, unknown>): Promise<unknown> {\n const { jsonataDef, ...input } = params as {\n jsonataDef?: unknown\n [key: string]: unknown\n }\n if (typeof jsonataDef !== 'string' || !jsonataDef) return undefined\n\n try {\n const jsonata = (await import('jsonata')).default\n const expr = jsonata(jsonataDef)\n // Evaluate with the remaining params (e.g. { error, touched }) as input.\n return await expr.evaluate(input)\n } catch {\n // On any jsonata error, fall back to undefined so UI doesn't break.\n return undefined\n }\n}\n","import { hasAnyError, hasAnyTouched } from '../util/helpers'\n\nexport const isNotTouchedOrHasError = (params: Record<string, unknown>): boolean => {\n const { error, touched } = params as {\n error?: unknown\n touched?: unknown\n }\n const hasError = hasAnyError(error)\n const isTouched = hasAnyTouched(touched)\n return !isTouched || hasError\n}\n","import type { ModifierContext } from '../util/types.js'\n\n/**\n * Translation function: looks up key in ctx.translations using active language.\n */\nexport const t = (params: Record<string, unknown>, ctx: ModifierContext): string | undefined => {\n const key = (params as { key?: unknown }).key as string | undefined\n if (!key) return undefined\n\n const translations = ctx.translations ?? {}\n\n const langParam = (params as { lang?: unknown }).lang as string | undefined\n const baseLang = ctx.defaultLanguage || 'en'\n const activeLang = langParam || ctx.activeLanguage || baseLang\n\n const entry = translations[key]\n // If we're in the base language, or there is no translation table\n // for this key, just return the key as-is (baseline text).\n if (activeLang === baseLang || entry === undefined) return key\n\n // Otherwise, use the requested language if available, falling back to key.\n return entry[activeLang] ?? key\n}\n","import type { ModifierMap } from '../util/types.js'\nimport { get } from './get.js'\nimport { jsonata } from './jsonata.js'\nimport { isNotTouchedOrHasError } from './isNotTouchedOrHasError.js'\nimport { t } from '../modifiers/t.js'\n\nconst modifiers: ModifierMap = {\n get,\n jsonata,\n isNotTouchedOrHasError,\n t,\n}\n\nexport default modifiers\n"],"names":["isRecord","hasAnyError","hasAnyTouched","get","ptrGet","isPathPrefix"],"mappings":"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"}
|