@lehnihon/bit-form 2.2.6 → 2.2.8
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/README.md +80 -24
- package/dist/angular/index.cjs +1 -1
- package/dist/angular/index.cjs.map +1 -1
- package/dist/angular/index.d.cts +20 -20
- package/dist/angular/index.d.ts +20 -20
- package/dist/angular/index.js +1 -1
- package/dist/angular/index.js.map +1 -1
- package/dist/array-controller-B5bfXV1W.d.cts +23 -0
- package/dist/array-controller-Cx-DMH7Y.d.ts +23 -0
- package/dist/bus-B2VEKrPI.d.ts +19 -0
- package/dist/bus-ZLQeq4Vr.d.cts +19 -0
- package/dist/chunk-5NA2TFPG.js +1 -0
- package/dist/chunk-5NA2TFPG.js.map +1 -0
- package/dist/chunk-63OJBMKK.js +2 -0
- package/dist/chunk-63OJBMKK.js.map +1 -0
- package/dist/chunk-BSGJ3T5S.cjs +2 -0
- package/dist/chunk-BSGJ3T5S.cjs.map +1 -0
- package/dist/chunk-CPP7ELA5.js +2 -0
- package/dist/chunk-CPP7ELA5.js.map +1 -0
- package/dist/chunk-D7JQWF6V.cjs +2 -0
- package/dist/chunk-D7JQWF6V.cjs.map +1 -0
- package/dist/chunk-E2NZR44P.js +2 -0
- package/dist/chunk-E2NZR44P.js.map +1 -0
- package/dist/chunk-EQ55DKX2.js +2 -0
- package/dist/chunk-EQ55DKX2.js.map +1 -0
- package/dist/chunk-IV32WXCF.cjs +2 -0
- package/dist/chunk-IV32WXCF.cjs.map +1 -0
- package/dist/chunk-JC4R5WCC.js +2 -0
- package/dist/chunk-JC4R5WCC.js.map +1 -0
- package/dist/chunk-K5X37E3U.js +2 -0
- package/dist/chunk-K5X37E3U.js.map +1 -0
- package/dist/chunk-M6WBNHIT.cjs +2 -0
- package/dist/chunk-M6WBNHIT.cjs.map +1 -0
- package/dist/chunk-MFSQATNZ.cjs +2 -0
- package/dist/chunk-MFSQATNZ.cjs.map +1 -0
- package/dist/chunk-MFTWAFMG.cjs +2 -0
- package/dist/chunk-MFTWAFMG.cjs.map +1 -0
- package/dist/chunk-O5UPA33R.js +2 -0
- package/dist/chunk-O5UPA33R.js.map +1 -0
- package/dist/chunk-P2YWYBWG.cjs +2 -0
- package/dist/chunk-P2YWYBWG.cjs.map +1 -0
- package/dist/chunk-QKGTVKBU.cjs +2 -0
- package/dist/chunk-QKGTVKBU.cjs.map +1 -0
- package/dist/chunk-RD73EBSN.js +2 -0
- package/dist/chunk-RD73EBSN.js.map +1 -0
- package/dist/chunk-T2JRSWQU.cjs +2 -0
- package/dist/chunk-T2JRSWQU.cjs.map +1 -0
- package/dist/chunk-UQ3DSUWC.js +2 -0
- package/dist/chunk-UQ3DSUWC.js.map +1 -0
- package/dist/chunk-VZHG372Q.cjs +2 -0
- package/dist/chunk-VZHG372Q.cjs.map +1 -0
- package/dist/chunk-W2E5UIXT.js +2 -0
- package/dist/chunk-W2E5UIXT.js.map +1 -0
- package/dist/chunk-W5CLDRRE.cjs +1 -0
- package/dist/chunk-W5CLDRRE.cjs.map +1 -0
- package/dist/cli/index.cjs +22 -22
- package/dist/core/bindings.cjs +2 -0
- package/dist/core/bindings.cjs.map +1 -0
- package/dist/core/bindings.d.cts +81 -0
- package/dist/core/bindings.d.ts +81 -0
- package/dist/core/bindings.js +2 -0
- package/dist/core/bindings.js.map +1 -0
- package/dist/core/status.cjs +2 -0
- package/dist/core/status.cjs.map +1 -0
- package/dist/core/status.d.cts +44 -0
- package/dist/core/status.d.ts +44 -0
- package/dist/core/status.js +2 -0
- package/dist/core/status.js.map +1 -0
- package/dist/core/store.cjs +2 -0
- package/dist/core/store.cjs.map +1 -0
- package/dist/core/store.d.cts +84 -0
- package/dist/core/store.d.ts +84 -0
- package/dist/core/store.js +2 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/utils.cjs +2 -0
- package/dist/core/utils.cjs.map +1 -0
- package/dist/core/utils.d.cts +81 -0
- package/dist/core/utils.d.ts +81 -0
- package/dist/core/utils.js +2 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/core.cjs +2 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +14 -0
- package/dist/core.d.ts +14 -0
- package/dist/core.js +2 -0
- package/dist/core.js.map +1 -0
- package/dist/devtools/bridge.cjs +1 -1
- package/dist/devtools/bridge.cjs.map +1 -1
- package/dist/devtools/bridge.d.cts +5 -1
- package/dist/devtools/bridge.d.ts +5 -1
- package/dist/devtools/bridge.js +1 -1
- package/dist/devtools/bridge.js.map +1 -1
- package/dist/devtools/index.cjs +18 -18
- package/dist/devtools/index.cjs.map +1 -1
- package/dist/devtools/index.d.cts +27 -2
- package/dist/devtools/index.d.ts +27 -2
- package/dist/devtools/index.js +18 -18
- package/dist/devtools/index.js.map +1 -1
- package/dist/devtools/protocol.cjs +2 -0
- package/dist/devtools/protocol.cjs.map +1 -0
- package/dist/devtools/protocol.d.cts +54 -0
- package/dist/devtools/protocol.d.ts +54 -0
- package/dist/devtools/protocol.js +2 -0
- package/dist/devtools/protocol.js.map +1 -0
- package/dist/field-binding-B_OX3bjp.d.cts +25 -0
- package/dist/field-binding-MX6jVQbT.d.ts +25 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -193
- package/dist/index.d.ts +9 -193
- package/dist/index.js +1 -1
- package/dist/meta-types-Bzmm21TP.d.cts +18 -0
- package/dist/meta-types-Bzmm21TP.d.ts +18 -0
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +10 -7
- package/dist/react/index.d.ts +10 -7
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-native/index.cjs +1 -1
- package/dist/react-native/index.cjs.map +1 -1
- package/dist/react-native/index.d.cts +8 -5
- package/dist/react-native/index.d.ts +8 -5
- package/dist/react-native/index.js +1 -1
- package/dist/react-native/index.js.map +1 -1
- package/dist/resolvers/index.cjs +1 -1
- package/dist/resolvers/index.cjs.map +1 -1
- package/dist/resolvers/index.d.cts +2 -1
- package/dist/resolvers/index.d.ts +2 -1
- package/dist/resolvers/index.js +1 -1
- package/dist/resolvers/joi.d.cts +2 -1
- package/dist/resolvers/joi.d.ts +2 -1
- package/dist/resolvers/yup.d.cts +2 -1
- package/dist/resolvers/yup.d.ts +2 -1
- package/dist/resolvers/zod.d.cts +2 -1
- package/dist/resolvers/zod.d.ts +2 -1
- package/dist/store-api-types-D-ZHxzRy.d.cts +161 -0
- package/dist/store-api-types-DPi30jQF.d.ts +161 -0
- package/dist/{bus-B4zZmB9C.d.ts → types-CG5nYeRk.d.ts} +140 -41
- package/dist/{bus-BeAeZwWu.d.cts → types-D6LhF5GC.d.cts} +140 -41
- package/dist/{upload-EXnJLq8k.d.cts → upload-C2mpfhp1.d.cts} +1 -1
- package/dist/{upload-EXnJLq8k.d.ts → upload-C2mpfhp1.d.ts} +1 -1
- package/dist/{use-bit-persist-Dk3fUrds.d.ts → use-bit-persist-BTwy8kvA.d.ts} +14 -14
- package/dist/{use-bit-persist-D_gimC9A.d.cts → use-bit-persist-C2LHNTVv.d.cts} +14 -14
- package/dist/utils.cjs +2 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +6 -0
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +2 -0
- package/dist/utils.js.map +1 -0
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.d.cts +17 -18
- package/dist/vue/index.d.ts +17 -18
- package/dist/vue/index.js +1 -1
- package/dist/vue/index.js.map +1 -1
- package/package.json +48 -17
- package/dist/chunk-2CVKNPWX.js +0 -2
- package/dist/chunk-2CVKNPWX.js.map +0 -1
- package/dist/chunk-3EDD3V43.cjs +0 -2
- package/dist/chunk-3EDD3V43.cjs.map +0 -1
- package/dist/chunk-PX6WKENM.js +0 -2
- package/dist/chunk-PX6WKENM.js.map +0 -1
- package/dist/chunk-QWH2NBVB.js +0 -2
- package/dist/chunk-QWH2NBVB.js.map +0 -1
- package/dist/chunk-T3FR7D5V.js +0 -2
- package/dist/chunk-T3FR7D5V.js.map +0 -1
- package/dist/chunk-VQ7MK5VB.cjs +0 -2
- package/dist/chunk-VQ7MK5VB.cjs.map +0 -1
- package/dist/chunk-Y2ONHDRE.cjs +0 -2
- package/dist/chunk-Y2ONHDRE.cjs.map +0 -1
- package/dist/chunk-YCSWULEN.cjs +0 -2
- package/dist/chunk-YCSWULEN.cjs.map +0 -1
- package/dist/field-binding-BXw0Ku2c.d.cts +0 -12
- package/dist/field-binding-BXw0Ku2c.d.ts +0 -12
- package/dist/public-types-Cd9ai20P.d.cts +0 -97
- package/dist/public-types-DdZxD6Op.d.ts +0 -97
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/store/orchestration/framework-store-brand.ts","../src/core/store/orchestration/hook-brand.ts","../src/core/store/shared/value-derivation-pipeline.ts","../src/core/store/managers/core/computed-manager.ts","../src/core/store/managers/core/dirty-manager.ts","../src/core/store/managers/features/mask-manager.ts","../src/core/store/registry/field-catalog.ts","../src/core/store/registry/field-conditions.ts","../src/core/store/shared/path-prefix.ts","../src/core/store/registry/field-registry.ts","../src/core/store/shared/config.ts","../src/core/store/managers/features/persist-manager.ts","../src/core/store/managers/features/plugin-manager.ts","../src/core/store/engines/effects/persist-effects.ts","../src/core/store/engines/effects/plugin-effects.ts","../src/core/store/engines/effects/bus-effects.ts","../src/core/store/engines/effect-engine.ts","../src/core/store/shared/bus.ts","../src/core/store/orchestration/store-effects-composition.ts","../src/core/store/engines/store-field-cleanup-engine.ts","../src/core/store/engines/operation-engine.ts","../src/core/store/orchestration/store-registration-ops.ts","../src/core/store/orchestration/store-persist-ops.ts","../src/core/store/engines/subscription-engine.ts","../src/core/store/shared/pipeline.ts","../src/core/store/shared/error-map.ts","../src/core/store/managers/features/validation/validation-stages.ts","../src/core/store/managers/features/validation/async-validation-scheduler.ts","../src/core/store/managers/features/validation/validation-debouncer.ts","../src/core/store/managers/features/validation/validation-pipeline-stages.ts","../src/core/store/managers/features/validation/scope-validation-commit.ts","../src/core/store/managers/features/validation/validation-coordinator.ts","../src/core/store/managers/features/validation-manager.ts","../src/core/utils/error-utils.ts","../src/core/store/managers/features/lifecycle/field-update-manager.ts","../src/core/store/managers/features/lifecycle/values-lifecycle-manager.ts","../src/core/store/managers/features/lifecycle/submit-lifecycle-manager.ts","../src/core/store/managers/features/lifecycle-manager.ts","../src/core/store/engines/snapshot-diff-engine.ts","../src/core/store/managers/features/history-manager.ts","../src/core/store/managers/features/array-manager.ts","../src/core/store/managers/features/scope-manager.ts","../src/core/store/managers/features/field-query-manager.ts","../src/core/store/managers/features/error-manager.ts","../src/core/store/managers/core/computed-dependency-analyzer.ts","../src/core/store/orchestration/store-capability-registry.ts","../src/core/store/orchestration/store-bootstrap.ts","../src/core/store/orchestration/capability-ports.ts","../src/core/store/orchestration/store-runtime-feature-composition.ts","../src/core/store/orchestration/store-runtime.ts","../src/core/store/engines/store-batch-engine.ts","../src/core/store/engines/state-update-engine.ts","../src/core/store/engines/store-commit-engine.ts","../src/core/store/orchestration/store-state-ops.ts","../src/core/store/orchestration/store-runtime-kernel.ts","../src/core/store/managers/core/baseline-manager.ts","../src/core/store/orchestration/store-composition-root.ts","../src/core/store/engines/store-field-query-engine.ts","../src/core/store/orchestration/store-slices-factory.ts","../src/core/store/orchestration/store-feature-ops.ts","../src/core/store/orchestration/tracked-selector.ts","../src/core/store/orchestration/store-observe-ops.ts","../src/core/store/orchestration/store-domains.ts","../src/core/store/shared/store-state-reader.ts","../src/core/store/bit-store-class.ts","../src/core/store/index.ts","../src/core/store/orchestration/create-store.ts","../src/core/store/orchestration/store-slice-extractors.ts"],"sourcesContent":["export const BIT_FRAMEWORK_STORE_SYMBOL = Symbol.for(\n \"bit-form.framework-store-api\",\n);\n","export const BIT_HOOKS_API_SYMBOL = Symbol.for(\"bit-form.hooks-api\");\n","import { getDeepValue, setDeepValues, valueEqual } from \"../../utils\";\nimport type { BitTransformFn } from \"../contracts/types\";\nimport type { BitNormalizerEntry } from \"../registry/field-catalog\";\n\ninterface BitDependencyAwareEntry {\n path: string;\n dependsOn: readonly string[];\n}\n\nfunction mergeChangedPaths(\n previous?: readonly string[],\n next?: readonly string[],\n): string[] | undefined {\n if ((!previous || previous.length === 0) && (!next || next.length === 0)) {\n return undefined;\n }\n\n const merged = new Set<string>(previous ?? []);\n next?.forEach((path) => merged.add(path));\n return Array.from(merged);\n}\n\nfunction collectChangedValueUpdates<\n T extends object,\n TEntry extends { path: string },\n>(args: {\n values: T;\n entries: readonly TEntry[];\n deriveValue: (entry: TEntry, currentValue: unknown) => unknown;\n}): Array<[string, unknown]> {\n const { values, entries, deriveValue } = args;\n const updates: Array<[string, unknown]> = [];\n\n for (const entry of entries) {\n const currentValue = getDeepValue(values, entry.path);\n const derivedValue = deriveValue(entry, currentValue);\n\n if (!valueEqual(currentValue, derivedValue)) {\n updates.push([entry.path, derivedValue]);\n }\n }\n\n return updates;\n}\n\nexport function createDependencyImpactChecker(\n changedPaths?: readonly string[],\n) {\n const hasWildcardChange = changedPaths?.includes(\"*\") ?? false;\n\n return (dependencyPath: string) => {\n if (!changedPaths || changedPaths.length === 0 || hasWildcardChange) {\n return true;\n }\n\n return changedPaths.some(\n (changedPath) =>\n dependencyPath === changedPath ||\n dependencyPath.startsWith(`${changedPath}.`) ||\n changedPath.startsWith(`${dependencyPath}.`),\n );\n };\n}\n\nexport function filterDependencyEntries<TEntry extends BitDependencyAwareEntry>(\n entries: readonly TEntry[],\n changedPaths?: readonly string[],\n): readonly TEntry[] {\n if (\n !changedPaths ||\n changedPaths.length === 0 ||\n changedPaths.includes(\"*\")\n ) {\n return entries;\n }\n\n const isDependencyImpacted = createDependencyImpactChecker(changedPaths);\n return entries.filter((entry) =>\n entry.dependsOn.some((dependencyPath) =>\n isDependencyImpacted(dependencyPath),\n ),\n );\n}\n\nexport function applyValueDerivations<T extends object>(args: {\n values: T;\n changedPaths?: readonly string[];\n normalizerEntries: readonly BitNormalizerEntry<T>[];\n applyComputed: (values: T, changedPaths?: readonly string[]) => T;\n}): T {\n const { values, changedPaths, normalizerEntries, applyComputed } = args;\n\n const targetedNormalizers = filterDependencyEntries(\n normalizerEntries,\n changedPaths,\n );\n\n if (targetedNormalizers.length === 0) {\n return applyComputed(values, changedPaths);\n }\n\n const normalizerUpdates = collectChangedValueUpdates({\n values,\n entries: targetedNormalizers,\n deriveValue: (entry, currentValue) => entry.normalize(currentValue, values),\n });\n\n const normalizedValues =\n normalizerUpdates.length > 0\n ? setDeepValues(values, normalizerUpdates)\n : values;\n const nextChangedPaths = mergeChangedPaths(\n changedPaths,\n normalizerUpdates.map(([path]) => path),\n );\n\n return applyComputed(normalizedValues, nextChangedPaths);\n}\n\nexport function applyTransformDerivations<T extends object>(args: {\n values: T;\n sourceValues: T;\n transformEntries: readonly [string, BitTransformFn<T>][];\n}): T {\n const { values, sourceValues, transformEntries } = args;\n if (transformEntries.length === 0) {\n return values;\n }\n\n const updates = collectChangedValueUpdates({\n values,\n entries: transformEntries.map(([path, transform]) => ({ path, transform })),\n deriveValue: (entry, currentValue) =>\n entry.transform(currentValue, sourceValues),\n });\n\n if (updates.length === 0) {\n return values;\n }\n\n return setDeepValues(values, updates);\n}\n","import { getDeepValue, setDeepValue, deepEqual } from \"../../../utils\";\nimport type { BitComputedFn } from \"../../contracts/types\";\n\nexport interface BitComputedEntry<T extends object> {\n path: string;\n compute: BitComputedFn<T>;\n dependsOn: readonly string[];\n}\n\nexport class BitComputedManager<T extends object> {\n private equalityCache = new Map<\n string,\n { current: unknown; next: unknown; equal: boolean }\n >();\n private reverseDepsCache: Map<string, Set<string>> | null = null;\n private childDepsIndex: Map<string, Set<string>> | null = null;\n private validatedEntriesSignature: string | null = null;\n private orderedAllEntriesCache: {\n signature: string;\n ordered: BitComputedEntry<T>[];\n } | null = null;\n\n constructor(private getComputedEntries: () => BitComputedEntry<T>[]) {}\n\n private isCacheableScalar(value: unknown): boolean {\n return (\n value === null ||\n (typeof value !== \"object\" && typeof value !== \"function\")\n );\n }\n\n invalidateReverseDeps(): void {\n this.reverseDepsCache = null;\n this.childDepsIndex = null;\n this.orderedAllEntriesCache = null;\n this.validatedEntriesSignature = null;\n this.equalityCache.clear();\n }\n\n apply(values: T, changedPaths?: readonly string[]): T {\n const computedEntries = this.getComputedEntries();\n if (computedEntries.length === 0) return values;\n\n this.ensureEntriesAreValid(computedEntries);\n\n const entriesToRun = this.resolveEntriesToRun(\n computedEntries,\n changedPaths,\n );\n\n if (entriesToRun.length === 0) {\n return values;\n }\n\n let nextValues = values;\n\n for (const entry of entriesToRun) {\n const newValue = entry.compute(nextValues);\n const currentValue = getDeepValue(nextValues, entry.path);\n\n const cached = this.equalityCache.get(entry.path);\n let valuesEqual: boolean;\n const canUseScalarCache =\n this.isCacheableScalar(currentValue) &&\n this.isCacheableScalar(newValue);\n\n if (\n canUseScalarCache &&\n cached &&\n cached.current === currentValue &&\n cached.next === newValue\n ) {\n valuesEqual = cached.equal;\n } else {\n valuesEqual = deepEqual(currentValue, newValue);\n\n if (canUseScalarCache) {\n this.equalityCache.set(entry.path, {\n current: currentValue,\n next: newValue,\n equal: valuesEqual,\n });\n } else {\n this.equalityCache.delete(entry.path);\n }\n }\n\n if (!valuesEqual) {\n nextValues = setDeepValue(nextValues, entry.path, newValue);\n }\n }\n return nextValues;\n }\n\n private getReverseDependencies(\n entries: BitComputedEntry<T>[],\n ): Map<string, Set<string>> {\n if (this.reverseDepsCache) return this.reverseDepsCache;\n\n const map = new Map<string, Set<string>>();\n\n for (const entry of entries) {\n for (const dep of entry.dependsOn) {\n let dependents = map.get(dep);\n if (!dependents) {\n dependents = new Set();\n map.set(dep, dependents);\n }\n dependents.add(entry.path);\n }\n }\n\n const childIdx = new Map<string, Set<string>>();\n\n for (const dep of map.keys()) {\n const segments = dep.split(\".\");\n for (let len = 1; len < segments.length; len++) {\n const prefix = segments.slice(0, len).join(\".\");\n let children = childIdx.get(prefix);\n if (!children) {\n children = new Set();\n childIdx.set(prefix, children);\n }\n children.add(dep);\n }\n }\n\n this.reverseDepsCache = map;\n this.childDepsIndex = childIdx;\n return map;\n }\n\n private resolveEntriesToRun(\n entries: BitComputedEntry<T>[],\n changedPaths?: readonly string[],\n ): BitComputedEntry<T>[] {\n if (\n !changedPaths ||\n changedPaths.length === 0 ||\n changedPaths.includes(\"*\")\n ) {\n return this.getOrderedAllEntries(entries);\n }\n\n const reverseDependencies = this.getReverseDependencies(entries);\n const affectedPaths = new Set<string>();\n const queue = [...changedPaths];\n\n while (queue.length > 0) {\n const currentPath = queue.shift()!;\n const dependents = this.getDependentsForPath(\n reverseDependencies,\n currentPath,\n );\n\n if (!dependents) {\n continue;\n }\n\n for (const dependentPath of dependents) {\n if (affectedPaths.has(dependentPath)) {\n continue;\n }\n\n affectedPaths.add(dependentPath);\n queue.push(dependentPath);\n }\n }\n\n if (affectedPaths.size === 0) {\n return [];\n }\n\n // Optimization: Use pre-computed global order instead of recalculating\n // This keeps entries in their proper topological order without O(n²) recalculation\n const orderedAllEntries = this.getOrderedAllEntries(entries);\n return orderedAllEntries.filter((entry) => affectedPaths.has(entry.path));\n }\n\n private orderEntries(entries: BitComputedEntry<T>[]) {\n if (entries.length <= 1) {\n return entries;\n }\n\n const entryByPath = new Map(entries.map((entry) => [entry.path, entry]));\n const inDegree = new Map<string, number>();\n const dependents = new Map<string, Set<string>>();\n\n entries.forEach((entry) => inDegree.set(entry.path, 0));\n\n entries.forEach((entry) => {\n entry.dependsOn.forEach((dependencyPath) => {\n if (!entryByPath.has(dependencyPath)) {\n return;\n }\n\n const nextDependents = dependents.get(dependencyPath) ?? new Set();\n if (!nextDependents.has(entry.path)) {\n nextDependents.add(entry.path);\n dependents.set(dependencyPath, nextDependents);\n inDegree.set(entry.path, (inDegree.get(entry.path) ?? 0) + 1);\n }\n });\n });\n\n const queue = entries\n .filter((entry) => (inDegree.get(entry.path) ?? 0) === 0)\n .map((entry) => entry.path);\n const orderedPaths: string[] = [];\n\n while (queue.length > 0) {\n const currentPath = queue.shift()!;\n orderedPaths.push(currentPath);\n\n const nextDependents = dependents.get(currentPath);\n if (!nextDependents) {\n continue;\n }\n\n nextDependents.forEach((dependentPath) => {\n const nextDegree = (inDegree.get(dependentPath) ?? 0) - 1;\n inDegree.set(dependentPath, nextDegree);\n\n if (nextDegree === 0) {\n queue.push(dependentPath);\n }\n });\n }\n\n if (orderedPaths.length !== entries.length) {\n throw new Error(\n \"BitStore: cyclic computed dependencies detected. Check computedDependsOn definitions.\",\n );\n }\n\n return orderedPaths.map((path) => entryByPath.get(path)!);\n }\n\n private getOrderedAllEntries(entries: BitComputedEntry<T>[]) {\n const signature = this.createEntriesSignature(entries);\n if (\n this.orderedAllEntriesCache &&\n this.orderedAllEntriesCache.signature === signature\n ) {\n return this.orderedAllEntriesCache.ordered;\n }\n\n const ordered = this.orderEntries(entries);\n this.orderedAllEntriesCache = { signature, ordered };\n return ordered;\n }\n\n private ensureEntriesAreValid(entries: BitComputedEntry<T>[]) {\n const signature = this.createEntriesSignature(entries);\n if (this.validatedEntriesSignature === signature) {\n return;\n }\n\n entries.forEach((entry) => this.assertDependencies(entry));\n this.validatedEntriesSignature = signature;\n this.invalidateReverseDeps();\n }\n\n private createEntriesSignature(entries: BitComputedEntry<T>[]): string {\n return entries\n .map((entry) => `${entry.path}:${entry.dependsOn.join(\",\")}`)\n .join(\"|\");\n }\n\n private getDependentsForPath(\n reverseDependencies: Map<string, Set<string>>,\n changedPath: string,\n ) {\n const dependents = new Set<string>();\n\n const collect = (dependencyPath: string) => {\n const listeners = reverseDependencies.get(dependencyPath);\n if (!listeners) {\n return;\n }\n\n listeners.forEach((path) => dependents.add(path));\n };\n\n collect(changedPath);\n\n const parentSegments = changedPath.split(\".\");\n while (parentSegments.length > 1) {\n parentSegments.pop();\n collect(parentSegments.join(\".\"));\n }\n\n const childKeys = this.childDepsIndex?.get(changedPath);\n if (childKeys) {\n for (const childDep of childKeys) {\n collect(childDep);\n }\n }\n\n return dependents;\n }\n\n private assertDependencies(entry: BitComputedEntry<T>) {\n if (entry.dependsOn.length === 0) {\n throw new Error(\n `BitStore: computed field \\`${entry.path}\\` requires explicit computedDependsOn in v4.`,\n );\n }\n\n if (entry.dependsOn.includes(entry.path)) {\n throw new Error(\n `BitStore: computed field \\`${entry.path}\\` cannot depend on itself.`,\n );\n }\n }\n}\n","import {\n collectDirtyPaths,\n getDeepValue,\n setDeepValue,\n valueEqual,\n} from \"../../../utils\";\n\n/**\n * BitDirtyManager\n *\n * Manages dirty state tracking for form fields.\n * Tracks which fields have been modified from their initial values.\n */\nexport class BitDirtyManager<T extends object = Record<string, unknown>> {\n private dirtyPaths: Set<string> = new Set();\n private dirtyPathIndex: Set<string> = new Set();\n private dirtyPrefixRefCount: Map<string, number> = new Map();\n /** Maps each strict ancestor prefix → set of dirty paths that are its descendants. */\n private childrenByPrefix: Map<string, Set<string>> = new Map();\n\n /**\n * Updates dirty state for a single path change.\n * Automatically removes child paths when parent changes.\n * @returns true if any fields are dirty\n */\n updateForPath(path: string, values: T, initialValues: T): boolean {\n this.removeDirtyChildren(path);\n\n const current = getDeepValue(values, path);\n const initial = getDeepValue(initialValues, path);\n\n if (valueEqual(current, initial)) {\n this.removeDirtyPath(path);\n } else {\n this.addDirtyPath(path);\n }\n\n return this.dirtyPaths.size > 0;\n }\n\n /**\n * Rebuilds dirty paths from full state comparison.\n * Used for undo/redo and bulk updates.\n * @returns true if any fields are dirty\n */\n rebuild(values: T, initialValues: T): boolean {\n this.dirtyPaths = collectDirtyPaths(values, initialValues);\n this.dirtyPrefixRefCount.clear();\n this.rebuildIndex();\n return this.dirtyPaths.size > 0;\n }\n\n /**\n * Clears all dirty tracking.\n * Used when resetting form or updating initial values.\n */\n clear(): void {\n this.dirtyPaths.clear();\n this.dirtyPathIndex.clear();\n this.dirtyPrefixRefCount.clear();\n this.childrenByPrefix.clear();\n }\n\n /**\n * Returns current dirty state.\n */\n get isDirty(): boolean {\n return this.dirtyPaths.size > 0;\n }\n\n /**\n * Returns readonly set of dirty paths (for debugging/devtools).\n */\n getDirtyPaths(): ReadonlySet<string> {\n return this.dirtyPaths;\n }\n\n isPathDirty(path: string): boolean {\n // Check if exact path is dirty\n if (this.dirtyPathIndex.has(path)) {\n return true;\n }\n\n // Check if any ancestor prefix is dirty using refcount (O(1) instead of O(depth))\n let separatorIndex = path.lastIndexOf(\".\");\n while (separatorIndex > -1) {\n const ancestorPath = path.slice(0, separatorIndex);\n if ((this.dirtyPrefixRefCount.get(ancestorPath) ?? 0) > 0) {\n return true;\n }\n separatorIndex = path.lastIndexOf(\".\", separatorIndex - 1);\n }\n\n return false;\n }\n\n /**\n * Builds a partial object containing only dirty values.\n * For arrays, returns the entire array if any index changed.\n * @param values - current form values (already cleaned/transformed)\n */\n buildDirtyValues<T extends object>(values: T): Partial<T> {\n if (this.dirtyPaths.size === 0) return {};\n\n let result: Partial<T> = {};\n const processedArrays = new Set<string>();\n\n for (const path of this.dirtyPaths) {\n const arrayMatch = path.match(/^(.+)\\.\\d+/);\n\n if (arrayMatch) {\n const arrayPath = arrayMatch[1];\n if (processedArrays.has(arrayPath)) continue;\n processedArrays.add(arrayPath);\n const arrayVal = getDeepValue(values, arrayPath);\n result = setDeepValue(result, arrayPath, arrayVal);\n } else {\n const fieldVal = getDeepValue(values, path);\n result = setDeepValue(result, path, fieldVal);\n }\n }\n\n return result;\n }\n\n private rebuildIndex() {\n const nextIndex = new Set<string>();\n const nextRefCount = new Map<string, number>();\n const nextChildrenByPrefix = new Map<string, Set<string>>();\n\n for (const dirtyPath of this.dirtyPaths) {\n this.forEachPathPrefix(dirtyPath, (prefix) => {\n nextIndex.add(prefix);\n nextRefCount.set(prefix, (nextRefCount.get(prefix) ?? 0) + 1);\n });\n\n this.forEachAncestorPrefix(dirtyPath, (ancestor) => {\n const set = nextChildrenByPrefix.get(ancestor);\n if (set) {\n set.add(dirtyPath);\n } else {\n nextChildrenByPrefix.set(ancestor, new Set([dirtyPath]));\n }\n });\n }\n\n this.dirtyPathIndex = nextIndex;\n this.dirtyPrefixRefCount = nextRefCount;\n this.childrenByPrefix = nextChildrenByPrefix;\n }\n\n private removeDirtyChildren(parentPath: string) {\n const children = this.childrenByPrefix.get(parentPath);\n if (!children || children.size === 0) return;\n\n // Snapshot to avoid mutating the set while iterating\n for (const path of [...children]) {\n this.removeDirtyPath(path);\n }\n }\n\n private addDirtyPath(path: string) {\n if (this.dirtyPaths.has(path)) {\n return;\n }\n\n this.dirtyPaths.add(path);\n this.forEachPathPrefix(path, (prefix) => {\n this.dirtyPathIndex.add(prefix);\n this.dirtyPrefixRefCount.set(\n prefix,\n (this.dirtyPrefixRefCount.get(prefix) ?? 0) + 1,\n );\n });\n\n // Keep childrenByPrefix up to date for O(1) removeDirtyChildren\n this.forEachAncestorPrefix(path, (ancestor) => {\n const set = this.childrenByPrefix.get(ancestor);\n if (set) {\n set.add(path);\n } else {\n this.childrenByPrefix.set(ancestor, new Set([path]));\n }\n });\n }\n\n private removeDirtyPath(path: string) {\n if (!this.dirtyPaths.has(path)) {\n return;\n }\n\n this.dirtyPaths.delete(path);\n\n this.forEachPathPrefix(path, (prefix) => {\n const nextCount = (this.dirtyPrefixRefCount.get(prefix) ?? 0) - 1;\n\n if (nextCount <= 0) {\n this.dirtyPrefixRefCount.delete(prefix);\n this.dirtyPathIndex.delete(prefix);\n return;\n }\n\n this.dirtyPrefixRefCount.set(prefix, nextCount);\n });\n\n // Remove from childrenByPrefix\n this.forEachAncestorPrefix(path, (ancestor) => {\n this.childrenByPrefix.get(ancestor)?.delete(path);\n });\n }\n\n private forEachPathPrefix(path: string, callback: (prefix: string) => void) {\n const segments = path.split(\".\");\n let current = \"\";\n\n for (const segment of segments) {\n current = current ? `${current}.${segment}` : segment;\n callback(current);\n }\n }\n\n /**\n * Iterates over all strict ancestor prefixes of `path` (i.e., excludes the path itself).\n * Used to maintain childrenByPrefix.\n */\n private forEachAncestorPrefix(\n path: string,\n callback: (prefix: string) => void,\n ) {\n const segments = path.split(\".\");\n let current = \"\";\n\n for (let i = 0; i < segments.length - 1; i++) {\n current = current ? `${current}.${segments[i]}` : segments[i];\n callback(current);\n }\n }\n}\n","import { BitMask, BitMaskName } from \"../../../mask/types\";\n\n/**\n * BitMaskManager\n *\n * Manages input mask registration and resolution.\n * Decoupled from BitStore to reduce main class complexity.\n *\n * Responsibilities:\n * - Register/unregister masks\n * - Resolve masks by name\n */\nexport class BitMaskManager {\n private masks: Map<string, BitMask> = new Map();\n\n /**\n * Register a new input mask\n *\n * @param name - Unique mask identifier\n * @param mask - Mask configuration/pattern\n */\n registerMask(name: BitMaskName, mask: BitMask): void {\n this.masks.set(name, mask);\n }\n\n /**\n * Unregister an existing mask\n *\n * @param name - Mask identifier to remove\n */\n unregisterMask(name: BitMaskName): void {\n if (!this.masks.has(name)) {\n return; // Silently ignore non-existent masks\n }\n\n this.masks.delete(name);\n }\n\n /**\n * Get mask configuration by name\n *\n * @param name - Mask identifier\n * @returns Mask configuration or undefined if not found\n */\n resolveMask(name: BitMaskName): BitMask | undefined {\n return this.masks.get(name);\n }\n\n /**\n * Get all registered masks\n *\n * @returns Object map of all registered masks\n */\n getAllMasks(): Record<string, BitMask> {\n return Object.fromEntries(this.masks.entries());\n }\n\n /**\n * Clear all registered masks\n */\n clear(): void {\n this.masks.clear();\n }\n}\n","import type {\n BitFieldDefinition,\n BitNormalizeFn,\n BitTransformFn,\n} from \"../contracts/types\";\nimport type { BitComputedEntry } from \"../managers/core/computed-manager\";\n\nexport interface BitNormalizerEntry<\n T extends object = Record<string, unknown>,\n> {\n path: string;\n normalize: BitNormalizeFn<T>;\n dependsOn: readonly string[];\n}\n\nexport class BitFieldCatalog<T extends object = Record<string, unknown>> {\n private readonly fieldConfigs: Map<string, BitFieldDefinition<T>> = new Map();\n\n private scopeFieldsIndex: Map<string, Set<string>> | null = null;\n private computedEntriesCache: BitComputedEntry<T>[] | null = null;\n private normalizerEntriesCache: BitNormalizerEntry<T>[] | null = null;\n private transformEntriesCache: [string, BitTransformFn<T>][] | null = null;\n\n get(path: string): BitFieldDefinition<T> | undefined {\n return this.fieldConfigs.get(path);\n }\n\n set(path: string, config: BitFieldDefinition<T>) {\n this.fieldConfigs.set(path, config);\n this.registerCachedIndexes(path, config);\n }\n\n delete(path: string): BitFieldDefinition<T> | undefined {\n const config = this.fieldConfigs.get(path);\n this.fieldConfigs.delete(path);\n this.unregisterCachedIndexes(path, config);\n return config;\n }\n\n has(path: string): boolean {\n return this.fieldConfigs.has(path);\n }\n\n forEach(callback: (config: BitFieldDefinition<T>, path: string) => void) {\n this.fieldConfigs.forEach((config, path) => callback(config, path));\n }\n\n entries(): [string, BitFieldDefinition<T>][] {\n return Array.from(this.fieldConfigs.entries());\n }\n\n getScopeFields(scopeName: string): string[] {\n if (!this.scopeFieldsIndex) {\n const index = new Map<string, Set<string>>();\n this.forEach((cfg, path) => {\n if (!cfg.scope) {\n return;\n }\n const list = index.get(cfg.scope) ?? new Set<string>();\n list.add(path);\n index.set(cfg.scope, list);\n });\n this.scopeFieldsIndex = index;\n }\n\n return Array.from(this.scopeFieldsIndex.get(scopeName) ?? []);\n }\n\n getComputedEntries(): BitComputedEntry<T>[] {\n if (!this.computedEntriesCache) {\n const result: BitComputedEntry<T>[] = [];\n this.forEach((cfg, path) => {\n if (cfg.computed) {\n result.push({\n path,\n compute: cfg.computed,\n dependsOn: cfg.computedDependsOn,\n });\n }\n });\n this.computedEntriesCache = result;\n }\n\n return this.computedEntriesCache;\n }\n\n getTransformEntries(): [string, BitTransformFn<T>][] {\n if (!this.transformEntriesCache) {\n const result: [string, BitTransformFn<T>][] = [];\n this.forEach((cfg, path) => {\n if (cfg.transform) {\n result.push([path, cfg.transform]);\n }\n });\n this.transformEntriesCache = result;\n }\n\n return this.transformEntriesCache;\n }\n\n getNormalizerEntries(): BitNormalizerEntry<T>[] {\n if (!this.normalizerEntriesCache) {\n const result: BitNormalizerEntry<T>[] = [];\n this.forEach((cfg, path) => {\n if (cfg.normalize) {\n result.push({\n path,\n normalize: cfg.normalize,\n dependsOn: cfg.normalizeDependsOn?.length\n ? cfg.normalizeDependsOn\n : [path],\n });\n }\n });\n this.normalizerEntriesCache = result;\n }\n\n return this.normalizerEntriesCache;\n }\n\n invalidateIndexes() {\n this.scopeFieldsIndex = null;\n this.computedEntriesCache = null;\n this.normalizerEntriesCache = null;\n this.transformEntriesCache = null;\n }\n\n private registerCachedIndexes(path: string, config: BitFieldDefinition<T>) {\n if (this.scopeFieldsIndex && config.scope) {\n const scopedPaths =\n this.scopeFieldsIndex.get(config.scope) ?? new Set<string>();\n scopedPaths.add(path);\n this.scopeFieldsIndex.set(config.scope, scopedPaths);\n }\n\n if (this.computedEntriesCache && config.computed) {\n this.computedEntriesCache.push({\n path,\n compute: config.computed,\n dependsOn: config.computedDependsOn,\n });\n }\n\n if (this.normalizerEntriesCache && config.normalize) {\n this.normalizerEntriesCache.push({\n path,\n normalize: config.normalize,\n dependsOn: config.normalizeDependsOn?.length\n ? config.normalizeDependsOn\n : [path],\n });\n }\n\n if (this.transformEntriesCache && config.transform) {\n this.transformEntriesCache.push([path, config.transform]);\n }\n }\n\n private unregisterCachedIndexes(\n path: string,\n config?: BitFieldDefinition<T>,\n ) {\n if (!config) {\n this.invalidateIndexes();\n return;\n }\n\n if (this.scopeFieldsIndex && config.scope) {\n const scopedPaths = this.scopeFieldsIndex.get(config.scope);\n if (scopedPaths) {\n scopedPaths.delete(path);\n\n if (scopedPaths.size > 0) {\n this.scopeFieldsIndex.set(config.scope, scopedPaths);\n } else {\n this.scopeFieldsIndex.delete(config.scope);\n }\n }\n }\n\n if (this.computedEntriesCache && config.computed) {\n this.computedEntriesCache = this.computedEntriesCache.filter(\n (entry) => entry.path !== path,\n );\n }\n\n if (this.normalizerEntriesCache && config.normalize) {\n this.normalizerEntriesCache = this.normalizerEntriesCache.filter(\n (entry) => entry.path !== path,\n );\n }\n\n if (this.transformEntriesCache && config.transform) {\n this.transformEntriesCache = this.transformEntriesCache.filter(\n ([entryPath]) => entryPath !== path,\n );\n }\n }\n}\n","import { getDeepValue } from \"../../utils\";\nimport type { BitErrors, BitFieldDefinition } from \"../contracts/types\";\nimport type { BitDependencyUpdateDiff } from \"../contracts/port-types\";\n\nexport class BitFieldConditions<T extends object = Record<string, unknown>> {\n private readonly dependencies: Map<string, Set<string>> = new Map();\n private readonly hiddenFields: Set<string> = new Set();\n private readonly conditionalVisibilityPaths: Set<string> = new Set();\n private readonly requiredPathsByDependency: Map<string, Set<string>> =\n new Map();\n private readonly requiredConditionalPaths: Set<string> = new Set();\n private requiredEvaluationVersion = 0;\n private readonly requiredEvaluationCache = new Map<\n string,\n {\n version: number;\n valuesRef: T;\n result: boolean;\n }\n >();\n\n constructor(\n private readonly getFieldConfig: (\n path: string,\n ) => BitFieldDefinition<T> | undefined,\n ) {}\n\n getHiddenFields(): ReadonlySet<string> {\n return this.hiddenFields;\n }\n\n onRegister(path: string, config: BitFieldDefinition<T>, currentValues: T) {\n if (config.conditional?.showIf) {\n this.conditionalVisibilityPaths.add(path);\n }\n\n const dependsOn = config.conditional?.dependsOn;\n if (dependsOn) {\n dependsOn.forEach((dep) => {\n if (!this.dependencies.has(dep)) {\n this.dependencies.set(dep, new Set());\n }\n this.dependencies.get(dep)!.add(path);\n });\n }\n\n if (dependsOn && config.conditional?.requiredIf) {\n this.requiredConditionalPaths.add(path);\n dependsOn.forEach((dep) => {\n if (!this.requiredPathsByDependency.has(dep)) {\n this.requiredPathsByDependency.set(dep, new Set());\n }\n this.requiredPathsByDependency.get(dep)!.add(path);\n });\n }\n\n this.requiredEvaluationVersion += 1;\n this.requiredEvaluationCache.clear();\n this.evaluateFieldCondition(path, currentValues);\n }\n\n onUnregister(path: string, config?: BitFieldDefinition<T>) {\n this.hiddenFields.delete(path);\n this.conditionalVisibilityPaths.delete(path);\n this.dependencies.delete(path);\n this.requiredEvaluationVersion += 1;\n this.requiredEvaluationCache.clear();\n this.requiredConditionalPaths.delete(path);\n\n config?.conditional?.dependsOn?.forEach((dep) => {\n const requiredPaths = this.requiredPathsByDependency.get(dep);\n if (!requiredPaths) {\n return;\n }\n\n requiredPaths.delete(path);\n if (requiredPaths.size === 0) {\n this.requiredPathsByDependency.delete(dep);\n }\n });\n\n this.dependencies.forEach((dependentsSet) => {\n dependentsSet.delete(path);\n });\n }\n\n isHidden(path: string): boolean {\n return this.hiddenFields.has(path);\n }\n\n hasDependents(path: string): boolean {\n return (this.dependencies.get(path)?.size ?? 0) > 0;\n }\n\n isRequired(path: string, values: T): boolean {\n const config = this.getFieldConfig(path);\n if (!config || this.isHidden(path)) return false;\n\n if (!config.conditional?.requiredIf) {\n return false;\n }\n\n const cached = this.requiredEvaluationCache.get(path);\n if (\n cached &&\n cached.version === this.requiredEvaluationVersion &&\n cached.valuesRef === values\n ) {\n return cached.result;\n }\n\n const result = !!config.conditional.requiredIf(values);\n this.requiredEvaluationCache.set(path, {\n version: this.requiredEvaluationVersion,\n valuesRef: values,\n result,\n });\n return result;\n }\n\n getRequiredErrors(values: T): BitErrors<T> {\n const errors: BitErrors<T> = {};\n\n this.requiredConditionalPaths.forEach((path) => {\n const config = this.getFieldConfig(path);\n if (!config) {\n return;\n }\n\n if (this.isRequired(path, values)) {\n const val = getDeepValue(values, path);\n if (this.isEmpty(val)) {\n errors[path as keyof BitErrors<T>] = (config.conditional\n ?.requiredMessage ??\n \"required field\") as BitErrors<T>[keyof BitErrors<T>];\n }\n }\n });\n\n return errors;\n }\n\n evaluateAll(values: T) {\n this.conditionalVisibilityPaths.forEach((path) => {\n this.evaluateFieldCondition(path, values);\n });\n }\n\n updateDependencies(\n changedPath: string,\n currentValues: T,\n newValues: T,\n ): BitDependencyUpdateDiff {\n const affectedFields = new Set<string>();\n const visibilityChanged = new Set<string>();\n const requiredChanged = new Set<string>();\n\n const queue = [changedPath];\n const visited = new Set<string>();\n\n while (queue.length > 0) {\n const currentPath = queue.shift()!;\n\n if (visited.has(currentPath)) {\n continue;\n }\n\n visited.add(currentPath);\n\n const dependents = this.dependencies.get(currentPath);\n if (!dependents) {\n continue;\n }\n\n dependents.forEach((depPath) => {\n affectedFields.add(depPath);\n\n const wasHidden = this.isHidden(depPath);\n const wasRequired = this.isRequired(depPath, currentValues);\n this.evaluateFieldCondition(depPath, newValues);\n const isHiddenNow = this.isHidden(depPath);\n const isRequiredNow = this.isRequired(depPath, newValues);\n\n if (wasHidden !== isHiddenNow) {\n visibilityChanged.add(depPath);\n }\n\n if (wasRequired !== isRequiredNow) {\n requiredChanged.add(depPath);\n }\n\n queue.push(depPath);\n });\n }\n\n return {\n affectedFields: Array.from(affectedFields),\n visibilityChanged: Array.from(visibilityChanged),\n requiredChanged: Array.from(requiredChanged),\n };\n }\n\n private evaluateFieldCondition(path: string, values: T) {\n const config = this.getFieldConfig(path);\n const showIf = config?.conditional?.showIf;\n if (!showIf) return;\n\n if (showIf(values)) {\n this.hiddenFields.delete(path);\n } else {\n this.hiddenFields.add(path);\n }\n }\n\n private isEmpty(value: unknown): boolean {\n return (\n value === undefined ||\n value === null ||\n (typeof value === \"string\" && value.trim() === \"\") ||\n (Array.isArray(value) && value.length === 0)\n );\n }\n}\n","function stripTrailingSeparators(path: string): string {\n return path.replace(/\\.+$/g, \"\");\n}\n\nexport function normalizePathPrefix(prefix: string): string {\n return stripTrailingSeparators(prefix.trim());\n}\n\nexport function isPathWithinPrefix(path: string, prefix: string): boolean {\n const normalizedPrefix = normalizePathPrefix(prefix);\n\n if (normalizedPrefix.length === 0) {\n return false;\n }\n\n return path === normalizedPrefix || path.startsWith(`${normalizedPrefix}.`);\n}\n\nexport function toPathPrefix(path: string, index?: number): string {\n if (index === undefined) {\n return normalizePathPrefix(path);\n }\n\n return normalizePathPrefix(`${path}.${index}`);\n}\n","import type { BitFieldDefinition, BitTransformFn } from \"../contracts/types\";\nimport type { BitDependencyUpdateDiff } from \"../contracts/port-types\";\nimport type { BitComputedEntry } from \"../managers/core/computed-manager\";\nimport { BitFieldCatalog, type BitNormalizerEntry } from \"./field-catalog\";\nimport { BitFieldConditions } from \"./field-conditions\";\nimport type { BitFieldMetadataProvider } from \"./field-metadata-provider\";\nimport { isPathWithinPrefix, normalizePathPrefix } from \"../shared/path-prefix\";\n\nexport class BitFieldRegistry<\n T extends object = Record<string, unknown>,\n> implements BitFieldMetadataProvider<T> {\n private readonly catalog = new BitFieldCatalog<T>();\n private readonly conditions = new BitFieldConditions<T>((path) =>\n this.catalog.get(path),\n );\n\n getFieldConfig(path: string): BitFieldDefinition<T> | undefined {\n return this.catalog.get(path);\n }\n\n forEachFieldConfig(\n callback: (config: BitFieldDefinition<T>, path: string) => void,\n ) {\n this.catalog.forEach((config, path) => callback(config, path));\n }\n\n hasFieldConfig(path: string): boolean {\n return this.catalog.has(path);\n }\n\n getHiddenFields(): ReadonlySet<string> {\n return this.conditions.getHiddenFields();\n }\n\n register(path: string, config: BitFieldDefinition<T>, currentValues: T) {\n this.catalog.set(path, config);\n this.conditions.onRegister(path, config, currentValues);\n }\n\n unregister(path: string) {\n const config = this.catalog.delete(path);\n this.conditions.onUnregister(path, config);\n }\n\n unregisterPrefix(prefix: string) {\n const removedEntries: [string, BitFieldDefinition<T>][] = [];\n const normalizedPrefix = normalizePathPrefix(prefix);\n\n if (normalizedPrefix.length === 0) {\n return removedEntries;\n }\n\n this.catalog.forEach((config, path) => {\n if (isPathWithinPrefix(path, normalizedPrefix)) {\n removedEntries.push([path, config]);\n }\n });\n\n // Batch unregister all at once instead of calling unregister N times\n // This avoids N separate invalidations\n removedEntries.forEach(([path, config]) => {\n this.catalog.delete(path);\n this.conditions.onUnregister(path, config);\n });\n\n return removedEntries;\n }\n\n isHidden(path: string): boolean {\n return this.conditions.isHidden(path);\n }\n\n hasDependents(path: string): boolean {\n return this.conditions.hasDependents(path);\n }\n\n isRequired(path: string, values: T): boolean {\n return this.conditions.isRequired(path, values);\n }\n\n getRequiredErrors(values: T): Record<string, string> {\n return this.conditions.getRequiredErrors(values) as Record<string, string>;\n }\n\n evaluateAll(values: T) {\n this.conditions.evaluateAll(values);\n }\n\n updateDependencies(\n changedPath: string,\n currentValues: T,\n newValues: T,\n ): BitDependencyUpdateDiff {\n return this.conditions.updateDependencies(\n changedPath,\n currentValues,\n newValues,\n );\n }\n\n getScopeFields(scopeName: string): string[] {\n return this.catalog.getScopeFields(scopeName);\n }\n\n getComputedEntries(): BitComputedEntry<T>[] {\n return this.catalog.getComputedEntries();\n }\n\n getTransformEntries(): [string, BitTransformFn<T>][] {\n return this.catalog.getTransformEntries();\n }\n\n getNormalizerEntries(): BitNormalizerEntry<T>[] {\n return this.catalog.getNormalizerEntries();\n }\n\n invalidateIndexes() {\n this.catalog.invalidateIndexes();\n }\n}\n","import type { BitConfig, BitPersistResolvedConfig } from \"../contracts/types\";\nimport type { BitFrameworkConfig } from \"../contracts/public/store-api-types\";\nimport { deepClone } from \"../../utils\";\n\nfunction defaultIdFactory() {\n return `bit-form-${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction defaultUnhandledErrorReporter(error: unknown) {\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(error);\n }\n}\n\nexport function normalizeConfig<T extends object>(\n config: BitConfig<T> = {},\n): BitFrameworkConfig<T> {\n const rawInitial = (config.initialValues ?? {}) as T;\n const validation = config.validation;\n const history = config.history;\n\n const defaultPersistKey = config.name\n ? `bit-form:${config.name}:draft`\n : \"bit-form:draft\";\n\n const onUnhandledError =\n config.onUnhandledError ?? defaultUnhandledErrorReporter;\n const persistErrorHandler = config.persist?.onError;\n\n const persist: BitPersistResolvedConfig<T> = {\n enabled: config.persist?.enabled ?? false,\n key: config.persist?.key ?? defaultPersistKey,\n storage: config.persist?.storage,\n autoSave: config.persist?.autoSave ?? true,\n debounceMs: config.persist?.debounceMs ?? 300,\n mode: config.persist?.mode ?? \"values\",\n serialize: config.persist?.serialize ?? JSON.stringify,\n deserialize:\n config.persist?.deserialize ??\n ((raw: string) => JSON.parse(raw) as Partial<T>),\n onError: (error) => {\n persistErrorHandler?.(error);\n onUnhandledError(error, \"persist\");\n },\n };\n\n return {\n name: config.name,\n initialValues: deepClone(rawInitial),\n resolver: validation?.resolver,\n validationDelay: validation?.delay ?? 300,\n history: {\n enabled: history?.enabled ?? false,\n limit: history?.limit ?? 50,\n },\n masks: config.masks,\n fields: config.fields,\n devTools: config.devTools,\n persist,\n idFactory: config.idFactory ?? defaultIdFactory,\n plugins: config.plugins ?? [],\n scheduler: config.scheduler,\n subscriptionCacheSize: config.subscriptionCacheSize,\n bus: config.bus,\n onUnhandledError,\n } as BitFrameworkConfig<T>;\n}\n","import type {\n BitPersistResolvedConfig,\n BitPersistStorageAdapter,\n} from \"../../contracts/types\";\n\nfunction getDefaultStorage(): BitPersistStorageAdapter | undefined {\n if (typeof globalThis === \"undefined\") return undefined;\n\n const storageLike = (globalThis as { localStorage?: Storage }).localStorage;\n if (!storageLike) return undefined;\n\n return {\n getItem: (key: string) => storageLike.getItem(key),\n setItem: (key: string, value: string) => storageLike.setItem(key, value),\n removeItem: (key: string) => storageLike.removeItem(key),\n };\n}\n\nexport class BitPersistManager<T extends object = Record<string, unknown>> {\n private timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor(\n private config: BitPersistResolvedConfig<T>,\n private getValues: () => T,\n private getDirtyValues: () => Partial<T>,\n private applyRestoredValues: (values: Partial<T>) => void,\n ) {}\n\n private getStorage(): BitPersistStorageAdapter | undefined {\n return this.config.storage || getDefaultStorage();\n }\n\n private canPersist() {\n return !!(this.config.enabled && this.config.key && this.getStorage());\n }\n\n private handleError(error: unknown) {\n this.config.onError?.(error);\n }\n\n async saveNow() {\n if (!this.canPersist()) return;\n\n const storage = this.getStorage();\n if (!storage) return;\n\n try {\n const payload =\n this.config.mode === \"dirtyValues\"\n ? this.getDirtyValues()\n : this.getValues();\n const serialized = this.config.serialize(payload);\n await storage.setItem(this.config.key, serialized);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n queueSave() {\n if (!this.canPersist() || !this.config.autoSave) return;\n\n if (this.timer) {\n clearTimeout(this.timer);\n }\n\n this.timer = setTimeout(() => {\n void this.saveNow();\n }, this.config.debounceMs);\n }\n\n async restore() {\n if (!this.canPersist()) return false;\n\n const storage = this.getStorage();\n if (!storage) return false;\n\n try {\n const raw = await storage.getItem(this.config.key);\n if (!raw) return false;\n\n const parsed = this.config.deserialize(raw);\n if (!parsed || typeof parsed !== \"object\") {\n return false;\n }\n\n this.applyRestoredValues(parsed);\n return true;\n } catch (error) {\n this.handleError(error);\n return false;\n }\n }\n\n async clear() {\n if (!this.canPersist()) return;\n\n const storage = this.getStorage();\n if (!storage) return;\n\n try {\n await storage.removeItem(this.config.key);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n destroy() {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n}\n","import type {\n BitAfterSubmitEvent,\n BitAfterValidateEvent,\n BitBeforeSubmitEvent,\n BitBeforeValidateEvent,\n BitFieldChangeEvent,\n BitPlugin,\n BitPluginContext,\n BitPluginErrorEvent,\n} from \"../../contracts/types\";\n\nexport class BitPluginManager<T extends object = Record<string, unknown>> {\n private teardownFns: Array<() => void> = [];\n private notifyingError = false;\n private cachedContext: BitPluginContext<T> | null = null;\n\n constructor(\n private plugins: BitPlugin<T>[],\n private contextFactory: () => BitPluginContext<T>,\n ) {}\n\n setupAll() {\n const context = this.getContext();\n this.plugins.forEach((plugin) => {\n if (!plugin.setup) return;\n\n try {\n const maybeTeardown = plugin.setup(context);\n if (typeof maybeTeardown === \"function\") {\n this.teardownFns.push(maybeTeardown);\n }\n } catch (error) {\n void this.reportError(\"setup\", error, undefined, plugin.name);\n }\n });\n }\n\n async beforeValidate(event: BitBeforeValidateEvent<T>) {\n await this.emitHook(\"beforeValidate\", event);\n }\n\n async afterValidate(event: BitAfterValidateEvent<T>) {\n await this.emitHook(\"afterValidate\", event);\n }\n\n async beforeSubmit(event: BitBeforeSubmitEvent<T>) {\n await this.emitHook(\"beforeSubmit\", event);\n }\n\n async afterSubmit(event: BitAfterSubmitEvent<T>) {\n await this.emitHook(\"afterSubmit\", event);\n }\n\n onFieldChange(event: BitFieldChangeEvent<T>) {\n const context = this.getContext();\n this.plugins.forEach((plugin) => {\n const hook = plugin.hooks?.onFieldChange;\n if (!hook) return;\n\n try {\n const result = hook(event, context);\n void Promise.resolve(result).catch((error) => {\n void this.reportError(\"onFieldChange\", error, event, plugin.name);\n });\n } catch (error) {\n void this.reportError(\"onFieldChange\", error, event, plugin.name);\n }\n });\n }\n\n async reportError(\n source: BitPluginErrorEvent<T>[\"source\"],\n error: unknown,\n event?: unknown,\n pluginName?: string,\n ) {\n if (this.notifyingError) {\n return;\n }\n\n this.notifyingError = true;\n\n const context = this.getContext();\n const payload: BitPluginErrorEvent<T> = {\n source,\n pluginName,\n error,\n event,\n values: context.getState().values,\n state: context.getState(),\n };\n\n for (const plugin of this.plugins) {\n const onError = plugin.hooks?.onError;\n if (!onError) continue;\n\n try {\n await onError(payload, context);\n } catch {\n // fail-open: ignore secondary errors from onError handlers\n }\n }\n\n this.notifyingError = false;\n }\n\n destroy() {\n for (let index = this.teardownFns.length - 1; index >= 0; index -= 1) {\n const teardown = this.teardownFns[index];\n try {\n teardown();\n } catch (error) {\n void this.reportError(\"teardown\", error);\n }\n }\n\n this.teardownFns = [];\n this.cachedContext = null;\n }\n\n private async emitHook(\n hookName:\n | \"beforeValidate\"\n | \"afterValidate\"\n | \"beforeSubmit\"\n | \"afterSubmit\",\n event:\n | BitBeforeValidateEvent<T>\n | BitAfterValidateEvent<T>\n | BitBeforeSubmitEvent<T>\n | BitAfterSubmitEvent<T>,\n ) {\n const context = this.getContext();\n\n for (const plugin of this.plugins) {\n const hook = plugin.hooks?.[hookName];\n if (!hook) continue;\n\n try {\n await hook(event as never, context);\n } catch (error) {\n await this.reportError(hookName, error, event, plugin.name);\n }\n }\n }\n\n private getContext(): BitPluginContext<T> {\n if (!this.cachedContext) {\n this.cachedContext = this.contextFactory();\n }\n\n return this.cachedContext;\n }\n}\n","import type { BitState } from \"../../contracts/types\";\nimport { BitPersistManager } from \"../../managers/features/persist-manager\";\n\nexport class BitPersistEffects<T extends object> {\n constructor(private readonly persistManager: BitPersistManager<T>) {}\n\n onStateUpdated(_nextState: BitState<T>, valuesChanged: boolean): void {\n if (valuesChanged) {\n this.persistManager.queueSave();\n }\n }\n\n restorePersisted(): Promise<boolean> {\n return this.persistManager.restore();\n }\n\n savePersistedNow(): Promise<void> {\n return this.persistManager.saveNow();\n }\n\n clearPersisted(): Promise<void> {\n return this.persistManager.clear();\n }\n\n destroy(): void {\n this.persistManager.destroy();\n }\n}\n","import type {\n BitAfterSubmitEvent,\n BitAfterValidateEvent,\n BitBeforeSubmitEvent,\n BitBeforeValidateEvent,\n BitFieldChangeEvent,\n} from \"../../contracts/types\";\nimport { BitPluginManager } from \"../../managers/features/plugin-manager\";\n\nexport class BitPluginEffects<T extends object> {\n constructor(private readonly pluginManager: BitPluginManager<T>) {}\n\n initialize(): void {\n this.pluginManager.setupAll();\n }\n\n beforeValidate(event: BitBeforeValidateEvent<T>): Promise<void> {\n return this.pluginManager.beforeValidate(event);\n }\n\n afterValidate(event: BitAfterValidateEvent<T>): Promise<void> {\n return this.pluginManager.afterValidate(event);\n }\n\n beforeSubmit(event: BitBeforeSubmitEvent<T>): Promise<void> {\n return this.pluginManager.beforeSubmit(event);\n }\n\n afterSubmit(event: BitAfterSubmitEvent<T>): Promise<void> {\n return this.pluginManager.afterSubmit(event);\n }\n\n onFieldChange(event: BitFieldChangeEvent<T>): void {\n this.pluginManager.onFieldChange(event);\n }\n\n reportOperationalError(event: {\n source: \"submit\";\n error: unknown;\n payload?: unknown;\n }): Promise<void> {\n return this.pluginManager.reportError(\n event.source,\n event.error,\n event.payload,\n );\n }\n\n destroy(): void {\n this.pluginManager.destroy();\n }\n}\n","import type { BitState } from \"../../contracts/types\";\nimport type { BitBusStorePort, BitFormGlobal } from \"../../contracts/bus-types\";\n\nexport class BitBusEffects<T extends object> {\n constructor(\n private readonly storeId: string,\n private readonly storeBusPort: BitBusStorePort<T>,\n private readonly bus: BitFormGlobal,\n private readonly enableBusDispatch = true,\n ) {}\n\n initialize(): void {\n if (!this.enableBusDispatch) {\n return;\n }\n\n this.bus.stores[this.storeId] = this\n .storeBusPort as BitBusStorePort<object>;\n }\n\n onStateUpdated(nextState: BitState<T>): void {\n if (!this.enableBusDispatch) {\n return;\n }\n\n this.bus.dispatch(this.storeId, nextState);\n }\n\n destroy(): void {\n if (!this.enableBusDispatch) {\n return;\n }\n\n delete this.bus.stores[this.storeId];\n }\n}\n","import type {\n BitAfterSubmitEvent,\n BitAfterValidateEvent,\n BitBeforeSubmitEvent,\n BitBeforeValidateEvent,\n BitFieldChangeEvent,\n BitState,\n} from \"../contracts/types\";\nimport type { BitBusStorePort, BitFormGlobal } from \"../contracts/bus-types\";\nimport { BitPersistManager } from \"../managers/features/persist-manager\";\nimport { BitPluginManager } from \"../managers/features/plugin-manager\";\nimport { BitPersistEffects } from \"./effects/persist-effects\";\nimport { BitPluginEffects } from \"./effects/plugin-effects\";\nimport { BitBusEffects } from \"./effects/bus-effects\";\n\nexport class BitStoreEffectEngine<T extends object> {\n private readonly persistEffects: BitPersistEffects<T>;\n private readonly pluginEffects: BitPluginEffects<T>;\n private readonly busEffects: BitBusEffects<T>;\n\n constructor(\n storeId: string,\n storeBusPort: BitBusStorePort<T>,\n bus: BitFormGlobal,\n persistManager: BitPersistManager<T>,\n pluginManager: BitPluginManager<T>,\n enableBusDispatch = true,\n ) {\n this.persistEffects = new BitPersistEffects<T>(persistManager);\n this.pluginEffects = new BitPluginEffects<T>(pluginManager);\n this.busEffects = new BitBusEffects<T>(\n storeId,\n storeBusPort,\n bus,\n enableBusDispatch,\n );\n }\n\n initialize(): void {\n this.pluginEffects.initialize();\n this.busEffects.initialize();\n }\n\n onStateUpdated(nextState: BitState<T>, valuesChanged: boolean): void {\n this.persistEffects.onStateUpdated(nextState, valuesChanged);\n this.busEffects.onStateUpdated(nextState);\n }\n\n restorePersisted(): Promise<boolean> {\n return this.persistEffects.restorePersisted();\n }\n\n savePersistedNow(): Promise<void> {\n return this.persistEffects.savePersistedNow();\n }\n\n clearPersisted(): Promise<void> {\n return this.persistEffects.clearPersisted();\n }\n\n beforeValidate(event: BitBeforeValidateEvent<T>): Promise<void> {\n return this.pluginEffects.beforeValidate(event);\n }\n\n afterValidate(event: BitAfterValidateEvent<T>): Promise<void> {\n return this.pluginEffects.afterValidate(event);\n }\n\n beforeSubmit(event: BitBeforeSubmitEvent<T>): Promise<void> {\n return this.pluginEffects.beforeSubmit(event);\n }\n\n afterSubmit(event: BitAfterSubmitEvent<T>): Promise<void> {\n return this.pluginEffects.afterSubmit(event);\n }\n\n onFieldChange(event: BitFieldChangeEvent<T>): void {\n this.pluginEffects.onFieldChange(event);\n }\n\n reportOperationalError(event: {\n source: \"submit\";\n error: unknown;\n payload?: unknown;\n }): Promise<void> {\n return this.pluginEffects.reportOperationalError(event);\n }\n\n destroy(): void {\n this.persistEffects.destroy();\n this.pluginEffects.destroy();\n this.busEffects.destroy();\n }\n}\n","import { BitBusListener, BitFormGlobal } from \"../contracts/bus-types\";\n\ndeclare global {\n var __BIT_FORM__: BitFormGlobal | undefined;\n}\n\nconst rootGlobal =\n typeof globalThis !== \"undefined\"\n ? globalThis\n : typeof global !== \"undefined\"\n ? global\n : window;\n\nif (!rootGlobal.__BIT_FORM__) {\n rootGlobal.__BIT_FORM__ = {\n stores: {},\n listeners: new Set<BitBusListener>(),\n\n dispatch(id: string, state) {\n this.listeners.forEach((fn: BitBusListener) => fn(id, state));\n },\n\n subscribe(fn: BitBusListener) {\n this.listeners.add(fn);\n return () => {\n this.listeners.delete(fn);\n };\n },\n };\n}\n\nexport const bitBus = rootGlobal.__BIT_FORM__ as BitFormGlobal;\n\nconst noopBus: BitFormGlobal = {\n stores: {},\n listeners: new Set<BitBusListener>(),\n dispatch: () => {},\n subscribe: () => () => {},\n};\n\nexport function getNoopBitBus(): BitFormGlobal {\n return noopBus;\n}\n\n/**\n * Creates an isolated bus instance — not connected to the browser global.\n * Use this in SSR / Edge Runtime environments (e.g. Next.js Edge) where a\n * shared `globalThis` singleton is unsafe across request contexts.\n *\n * @example\n * // _app.tsx (SSR-safe)\n * const bus = createBitBus();\n * const store = createBitStore({ bus, initialValues: { ... } });\n */\nexport function createBitBus(): BitFormGlobal {\n const listeners = new Set<BitBusListener>();\n return {\n stores: {},\n listeners,\n dispatch(id, state) {\n listeners.forEach((fn) => fn(id, state));\n },\n subscribe(fn) {\n listeners.add(fn);\n return () => listeners.delete(fn);\n },\n };\n}\n","import { BitPersistManager } from \"../managers/features/persist-manager\";\nimport { BitPluginManager } from \"../managers/features/plugin-manager\";\nimport { BitStoreEffectEngine } from \"../engines/effect-engine\";\nimport type { BitFrameworkConfig } from \"../contracts/public/store-api-types\";\nimport { bitBus, getNoopBitBus } from \"../shared/bus\";\nimport type { BitBusStorePort } from \"../contracts/bus-types\";\nimport type { BitState } from \"../contracts/types\";\n\nfunction shouldEnableStoreBus<T extends object>(config: BitFrameworkConfig<T>) {\n if (config.bus) {\n return true;\n }\n\n if (typeof config.devTools === \"boolean\") {\n return config.devTools;\n }\n\n if (config.devTools && typeof config.devTools === \"object\") {\n return config.devTools.enabled !== false;\n }\n\n return false;\n}\n\nexport function createStoreEffects<T extends object>(args: {\n storeId: string;\n storeBusPort: BitBusStorePort<T>;\n config: BitFrameworkConfig<T>;\n getState: () => BitState<T>;\n getConfig: () => BitFrameworkConfig<T>;\n getValues: () => T;\n getDirtyValues: () => Partial<T>;\n applyPersistedValues: (values: Partial<T>) => void;\n}): BitStoreEffectEngine<T> {\n const {\n storeId,\n storeBusPort,\n config,\n getState,\n getConfig,\n getValues,\n getDirtyValues,\n applyPersistedValues,\n } = args;\n\n const persistManager = new BitPersistManager<T>(\n config.persist,\n getValues,\n getDirtyValues,\n applyPersistedValues,\n );\n\n const pluginManager = new BitPluginManager<T>([...config.plugins], () => ({\n storeId,\n getState: () => getState(),\n getConfig: () => getConfig(),\n }));\n\n const enableBusDispatch = shouldEnableStoreBus(config);\n const resolvedBus = enableBusDispatch\n ? (config.bus ?? bitBus)\n : getNoopBitBus();\n\n const effects = new BitStoreEffectEngine<T>(\n storeId,\n storeBusPort,\n resolvedBus,\n persistManager,\n pluginManager,\n enableBusDispatch,\n );\n effects.initialize();\n\n return effects;\n}\n","import type { BitErrors, BitState } from \"../contracts/types\";\n\nexport function buildFieldUnregisterPatch<T extends object>(args: {\n state: Readonly<BitState<T>>;\n path: string;\n}): Pick<BitState<T>, \"errors\" | \"touched\"> | null {\n const { state, path } = args;\n\n const nextErrors = { ...state.errors };\n const nextTouched = { ...state.touched };\n let changed = false;\n\n if (nextErrors[path as keyof BitErrors<T>]) {\n delete nextErrors[path as keyof BitErrors<T>];\n changed = true;\n }\n\n if (nextTouched[path as keyof typeof nextTouched]) {\n delete nextTouched[path as keyof typeof nextTouched];\n changed = true;\n }\n\n if (!changed) {\n return null;\n }\n\n return {\n errors: nextErrors,\n touched: nextTouched,\n };\n}\n","import type { BitErrors, BitState } from \"../contracts/types\";\n\nexport interface BitStatePatchOperation<T extends object> {\n kind: \"state.patch\";\n partialState: Partial<BitState<T>>;\n changedPaths?: string[];\n skipComputed?: boolean;\n}\n\nexport interface BitTouchFieldsOperation<T extends object> {\n kind: \"field.touchMany\";\n paths: string[];\n}\n\nexport interface BitPersistMetaOperation<T extends object> {\n kind: \"form.persistMeta\";\n patch: Partial<BitState<T>[\"persist\"]>;\n}\n\nexport interface BitHistoryApplyOperation<T extends object> {\n kind: \"history.apply\";\n values: T;\n isDirty: boolean;\n}\n\nexport interface BitValidationCommitOperation<T extends object> {\n kind: \"validation.commit\";\n errors: BitErrors<T>;\n isValid: boolean;\n}\n\nexport type BitStoreOperation<T extends object> =\n | BitStatePatchOperation<T>\n | BitTouchFieldsOperation<T>\n | BitPersistMetaOperation<T>\n | BitHistoryApplyOperation<T>\n | BitValidationCommitOperation<T>;\n\nexport function patchStateOperation<T extends object>(\n partialState: Partial<BitState<T>>,\n changedPaths?: string[],\n options?: { skipComputed?: boolean },\n): BitStatePatchOperation<T> {\n return {\n kind: \"state.patch\",\n partialState,\n changedPaths,\n skipComputed: options?.skipComputed,\n };\n}\n\nexport function touchFieldsOperation<T extends object>(\n paths: string[],\n): BitTouchFieldsOperation<T> {\n return {\n kind: \"field.touchMany\",\n paths,\n };\n}\n\nexport function persistMetaOperation<T extends object>(\n patch: Partial<BitState<T>[\"persist\"]>,\n): BitPersistMetaOperation<T> {\n return {\n kind: \"form.persistMeta\",\n patch,\n };\n}\n\nexport function historyApplyOperation<T extends object>(\n values: T,\n isDirty: boolean,\n): BitHistoryApplyOperation<T> {\n return {\n kind: \"history.apply\",\n values,\n isDirty,\n };\n}\n\nexport function validationCommitOperation<T extends object>(\n errors: BitErrors<T>,\n isValid: boolean,\n): BitValidationCommitOperation<T> {\n return {\n kind: \"validation.commit\",\n errors,\n isValid,\n };\n}\n","import type { BitFieldDefinition, BitState } from \"../contracts/types\";\nimport { BitFieldRegistry } from \"../registry/field-registry\";\nimport { BitSubscriptionEngine } from \"../engines/subscription-engine\";\nimport { buildFieldUnregisterPatch } from \"../engines/store-field-cleanup-engine\";\nimport { getScopeRegistrySubscriptionPath } from \"../shared/scope-status\";\nimport {\n patchStateOperation,\n type BitStoreOperation,\n} from \"../engines/operation-engine\";\nimport type { BitStoreStateReader } from \"../shared/store-state-reader\";\n\nexport function registerStoreField<T extends object>(args: {\n path: string;\n config: BitFieldDefinition<T>;\n state: BitState<T>;\n fieldRegistry: BitFieldRegistry<T>;\n subscriptions: BitSubscriptionEngine<T>;\n stateReader: BitStoreStateReader<T>;\n invalidateFieldIndexes: () => void;\n}): void {\n const {\n path,\n config,\n state,\n fieldRegistry,\n subscriptions,\n stateReader,\n invalidateFieldIndexes,\n } = args;\n\n fieldRegistry.register(path, config, state.values);\n invalidateFieldIndexes();\n subscriptions.invalidatePathExpansionCache(path);\n stateReader.invalidatePath(path);\n\n if (config.scope) {\n subscriptions.notify(state, [\n getScopeRegistrySubscriptionPath(config.scope),\n ]);\n }\n\n if (fieldRegistry.isHidden(path)) {\n subscriptions.notify(state, [path]);\n }\n}\n\nexport function unregisterStoreField<T extends object>(args: {\n path: string;\n state: BitState<T>;\n hasStaticConfig: boolean;\n fieldRegistry: BitFieldRegistry<T>;\n subscriptions: BitSubscriptionEngine<T>;\n validationCleanupField: (path: string) => void;\n invalidateFieldIndexes: () => void;\n dispatch: (operation: BitStoreOperation<T>) => void;\n}): void {\n const {\n path,\n state,\n hasStaticConfig,\n fieldRegistry,\n subscriptions,\n validationCleanupField,\n invalidateFieldIndexes,\n dispatch,\n } = args;\n\n if (hasStaticConfig) {\n return;\n }\n\n const fieldConfig = fieldRegistry.getFieldConfig(path);\n validationCleanupField(path);\n fieldRegistry.unregister(path);\n invalidateFieldIndexes();\n subscriptions.invalidatePathExpansionCache(path);\n\n if (fieldConfig?.scope) {\n subscriptions.notify(state, [\n getScopeRegistrySubscriptionPath(fieldConfig.scope),\n ]);\n }\n\n const cleanupPatch = buildFieldUnregisterPatch({ state, path });\n\n if (!cleanupPatch) {\n return;\n }\n\n dispatch(\n patchStateOperation({\n errors: cleanupPatch.errors,\n touched: cleanupPatch.touched,\n }),\n );\n}\n\nexport function unregisterStorePrefix<T extends object>(args: {\n prefix: string;\n state: BitState<T>;\n fieldRegistry: BitFieldRegistry<T>;\n subscriptions: BitSubscriptionEngine<T>;\n validationCleanupPrefix: (prefix: string) => void;\n invalidateFieldIndexes: () => void;\n}): void {\n const {\n prefix,\n state,\n fieldRegistry,\n subscriptions,\n validationCleanupPrefix,\n invalidateFieldIndexes,\n } = args;\n\n validationCleanupPrefix(prefix);\n const removedEntries = fieldRegistry.unregisterPrefix(prefix);\n invalidateFieldIndexes();\n subscriptions.invalidatePathExpansionCache(prefix);\n\n const impactedScopes = new Set(\n removedEntries\n .map(([, config]) => config.scope)\n .filter((scopeName): scopeName is string => !!scopeName),\n );\n\n impactedScopes.forEach((scopeName) => {\n subscriptions.notify(state, [getScopeRegistrySubscriptionPath(scopeName)]);\n });\n}\n","import { deepClone, deepMerge } from \"../../utils\";\nimport type { BitState } from \"../contracts/types\";\nimport {\n patchStateOperation,\n persistMetaOperation,\n type BitStoreOperation,\n} from \"../engines/operation-engine\";\nimport type { BitStoreEffectEngine } from \"../engines/effect-engine\";\nimport type { BitDirtyManager } from \"../managers/core/dirty-manager\";\nimport type { BitFieldRegistry } from \"../registry/field-registry\";\n\ninterface ValidationAccess {\n cancelAll(): void;\n validate(): Promise<boolean>;\n}\n\nexport async function restoreStorePersisted<T extends object>(args: {\n dispatch: (operation: BitStoreOperation<T>) => void;\n effects: BitStoreEffectEngine<T>;\n}): Promise<boolean> {\n const { dispatch, effects } = args;\n\n dispatch(persistMetaOperation({ isRestoring: true, error: null }));\n\n try {\n return await effects.restorePersisted();\n } catch (error) {\n dispatch(\n persistMetaOperation({\n isRestoring: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }),\n );\n return false;\n } finally {\n dispatch(persistMetaOperation({ isRestoring: false }));\n }\n}\n\nexport async function forceStorePersistedSave<T extends object>(args: {\n dispatch: (operation: BitStoreOperation<T>) => void;\n effects: BitStoreEffectEngine<T>;\n}): Promise<void> {\n const { dispatch, effects } = args;\n\n dispatch(persistMetaOperation({ isSaving: true, error: null }));\n\n try {\n await effects.savePersistedNow();\n } catch (error) {\n dispatch(\n persistMetaOperation({\n isSaving: false,\n error: error instanceof Error ? error : new Error(String(error)),\n }),\n );\n return;\n }\n\n dispatch(persistMetaOperation({ isSaving: false }));\n}\n\nexport async function clearStorePersisted<T extends object>(args: {\n dispatch: (operation: BitStoreOperation<T>) => void;\n effects: BitStoreEffectEngine<T>;\n}): Promise<void> {\n const { dispatch, effects } = args;\n\n dispatch(persistMetaOperation({ error: null }));\n\n try {\n await effects.clearPersisted();\n } catch (error) {\n dispatch(\n persistMetaOperation({\n error: error instanceof Error ? error : new Error(String(error)),\n }),\n );\n }\n}\n\nexport function applyStorePersistedValues<T extends object>(args: {\n values: Partial<T>;\n state: BitState<T>;\n initialValues: T;\n validation: ValidationAccess;\n fieldRegistry: BitFieldRegistry<T>;\n dirtyManager: BitDirtyManager<T>;\n dispatch: (operation: BitStoreOperation<T>) => void;\n saveHistorySnapshot: () => void;\n}): void {\n const {\n values,\n state,\n initialValues,\n validation,\n fieldRegistry,\n dirtyManager,\n dispatch,\n saveHistorySnapshot,\n } = args;\n\n const nextValues = deepClone(deepMerge(initialValues, values));\n\n validation.cancelAll();\n fieldRegistry.evaluateAll(nextValues);\n\n const isDirty = dirtyManager.rebuild(nextValues, initialValues);\n\n dispatch(\n patchStateOperation({\n values: nextValues,\n errors: {},\n touched: {},\n isValidating: {},\n persist: { ...state.persist, error: null },\n isValid: true,\n isDirty,\n isSubmitting: false,\n }),\n );\n\n saveHistorySnapshot();\n void validation.validate();\n}\n","import type {\n BitSelector,\n BitScopedSelectorSubscriptionOptions,\n} from \"../contracts/public/subscription-types\";\nimport type { BitState } from \"../contracts/types\";\nimport { isPathWithinPrefix, normalizePathPrefix } from \"../shared/path-prefix\";\n\ninterface SelectorListenerEntry<T extends object> {\n notify(nextState: Readonly<BitState<T>>): void;\n}\n\nexport class BitSubscriptionEngine<T extends object> {\n private listeners: Set<() => void> = new Set();\n private pathScopedSubscriptions: Map<SelectorListenerEntry<T>, string[]> =\n new Map();\n private pathSelectorIndex: Map<string, Set<SelectorListenerEntry<T>>> =\n new Map();\n private readonly pathExpansionCache = new Map<string, string[]>();\n private readonly expandedPathCache = this.pathExpansionCache;\n private readonly changedPathLookupCache = this.pathExpansionCache;\n private readonly subscriptionSeenVersion = new Map<\n SelectorListenerEntry<T>,\n number\n >();\n private notifyVersion = 0;\n private readonly MAX_PATH_EXPANSION_CACHE_SIZE: number;\n\n constructor(\n private readonly getState: () => Readonly<BitState<T>>,\n /**\n * Maximum number of entries for path expansion cache.\n * Lower = less memory; higher = fewer cache evictions in large dynamic forms.\n * @default 500\n */\n maxCacheSize = 500,\n ) {\n this.MAX_PATH_EXPANSION_CACHE_SIZE = maxCacheSize;\n }\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n subscribeSelector<TSlice>(\n selector: BitSelector<T, TSlice>,\n listener: (slice: TSlice) => void,\n options: BitScopedSelectorSubscriptionOptions<TSlice> | undefined,\n equalityFn: (previous: TSlice, next: TSlice) => boolean,\n ): () => void {\n let lastSlice = selector(this.getState());\n\n const subscription: SelectorListenerEntry<T> = {\n notify: (nextState) => {\n const nextSlice = selector(nextState);\n\n if (equalityFn(lastSlice, nextSlice)) {\n return;\n }\n\n lastSlice = nextSlice;\n listener(nextSlice);\n },\n };\n\n const scopedPaths = this.normalizeSubscriptionPaths(options?.paths);\n\n if (scopedPaths.length === 0) {\n throw new Error(\"BitStore: subscribeSelector requires explicit `paths`.\");\n }\n\n this.pathScopedSubscriptions.set(subscription, scopedPaths);\n scopedPaths.forEach((pathKey) => {\n this.forEachIndexPath(pathKey, (indexPath) => {\n const listeners = this.pathSelectorIndex.get(indexPath) ?? new Set();\n listeners.add(subscription);\n this.pathSelectorIndex.set(indexPath, listeners);\n });\n });\n\n if (options?.emitImmediately) {\n listener(lastSlice);\n }\n\n return () => {\n this.subscriptionSeenVersion.delete(subscription);\n\n const paths = this.pathScopedSubscriptions.get(subscription);\n if (!paths) return;\n\n paths.forEach((pathKey) => {\n this.forEachIndexPath(pathKey, (indexPath) => {\n const listeners = this.pathSelectorIndex.get(indexPath);\n if (!listeners) return;\n\n listeners.delete(subscription);\n if (listeners.size === 0) {\n this.pathSelectorIndex.delete(indexPath);\n }\n });\n });\n\n this.pathScopedSubscriptions.delete(subscription);\n };\n }\n\n notify(\n nextState: Readonly<BitState<T>>,\n changedPaths?: Iterable<string>,\n ): void {\n this.listeners.forEach((listener) => listener());\n\n if (this.pathScopedSubscriptions.size === 0) {\n return;\n }\n\n const normalizedChangedPaths = changedPaths\n ? this.normalizeSubscriptionPaths(Array.from(changedPaths))\n : [];\n\n if (\n normalizedChangedPaths.length === 0 ||\n normalizedChangedPaths.includes(\"*\")\n ) {\n this.pathScopedSubscriptions.forEach((_paths, subscription) => {\n subscription.notify(nextState);\n });\n return;\n }\n\n const scopedSubscribers = this.collectSubscribersForChangedPaths(\n normalizedChangedPaths,\n );\n\n scopedSubscribers.forEach((subscription) => {\n subscription.notify(nextState);\n });\n }\n\n destroy(): void {\n this.listeners.clear();\n this.pathScopedSubscriptions.clear();\n this.pathSelectorIndex.clear();\n this.pathExpansionCache.clear();\n this.subscriptionSeenVersion.clear();\n }\n\n invalidatePathExpansionCache(prefix?: string): void {\n if (!prefix) {\n this.pathExpansionCache.clear();\n return;\n }\n\n const normalizedPrefix = normalizePathPrefix(prefix);\n if (normalizedPrefix.length === 0) {\n this.pathExpansionCache.clear();\n return;\n }\n\n for (const key of this.pathExpansionCache.keys()) {\n if (\n isPathWithinPrefix(key, normalizedPrefix) ||\n isPathWithinPrefix(normalizedPrefix, key)\n ) {\n this.pathExpansionCache.delete(key);\n }\n }\n }\n\n private normalizeSubscriptionPaths(paths?: string[]): string[] {\n if (!paths || paths.length === 0) return [];\n\n const seen = new Set<string>();\n const normalized: string[] = [];\n\n for (const path of paths) {\n const trimmed = path.trim();\n if (trimmed.length === 0 || seen.has(trimmed)) {\n continue;\n }\n\n seen.add(trimmed);\n normalized.push(trimmed);\n }\n\n return normalized;\n }\n\n private collectSubscribersForChangedPaths(\n changedPaths: string[],\n ): SelectorListenerEntry<T>[] {\n const scopedSubscribers: SelectorListenerEntry<T>[] = [];\n const currentVersion = ++this.notifyVersion;\n\n const addByPath = (path: string) => {\n const listeners = this.pathSelectorIndex.get(path);\n if (!listeners) return;\n\n listeners.forEach((subscription) => {\n const seenVersion = this.subscriptionSeenVersion.get(subscription) ?? 0;\n if (seenVersion >= currentVersion) {\n return;\n }\n\n this.subscriptionSeenVersion.set(subscription, currentVersion);\n scopedSubscribers.push(subscription);\n });\n };\n\n changedPaths.forEach((changedPath) => {\n this.forEachLookupPath(changedPath, addByPath);\n });\n\n return scopedSubscribers;\n }\n\n private expandChangedPathForLookup(path: string): string[] {\n // Use unified expansion cache\n return this.expandPathGeneric(path);\n }\n\n private expandPathForIndexing(path: string): string[] {\n // Use unified expansion cache\n return this.expandPathGeneric(path);\n }\n\n private forEachIndexPath(\n path: string,\n visitor: (path: string) => void,\n ): void {\n if (!this.isSimplePath(path)) {\n this.expandPathForIndexing(path).forEach(visitor);\n return;\n }\n\n const segments = path.split(\".\");\n let currentPath = \"\";\n\n for (let index = 0; index < segments.length; index += 1) {\n currentPath = currentPath\n ? `${currentPath}.${segments[index]}`\n : segments[index];\n visitor(currentPath);\n }\n }\n\n private forEachLookupPath(\n path: string,\n visitor: (path: string) => void,\n ): void {\n if (!this.isSimplePath(path)) {\n this.expandChangedPathForLookup(path).forEach(visitor);\n return;\n }\n\n visitor(path);\n\n let separatorIndex = path.lastIndexOf(\".\");\n while (separatorIndex > -1) {\n visitor(path.slice(0, separatorIndex));\n separatorIndex = path.lastIndexOf(\".\", separatorIndex - 1);\n }\n }\n\n private isSimplePath(path: string): boolean {\n return !path.includes(\"*\") && !path.includes(\"[\") && !path.includes(\"]\");\n }\n\n private expandPathGeneric(path: string): string[] {\n const cached = this.pathExpansionCache.get(path);\n if (cached) {\n return cached;\n }\n\n const segments = path.split(\".\");\n const keys: string[] = [];\n for (let i = 1; i <= segments.length; i++) {\n keys.push(segments.slice(0, i).join(\".\"));\n }\n this.setBoundedCacheEntry(\n this.pathExpansionCache,\n path,\n keys,\n this.MAX_PATH_EXPANSION_CACHE_SIZE,\n );\n return keys;\n }\n\n private setBoundedCacheEntry<K, V>(\n cache: Map<K, V>,\n key: K,\n value: V,\n maxSize: number,\n ) {\n if (cache.size >= maxSize) {\n const oldestKey = cache.keys().next().value;\n if (oldestKey !== undefined) {\n cache.delete(oldestKey);\n }\n }\n\n cache.set(key, value);\n }\n}\n","export interface BitPipelineContext {\n halted?: boolean;\n}\n\nexport interface BitPipelineStep<TContext extends BitPipelineContext> {\n name: string;\n run: (context: TContext) => void | Promise<void>;\n}\n\nexport interface BitSyncPipelineStep<TContext extends BitPipelineContext> {\n name: string;\n run: (context: TContext) => void;\n}\n\nexport class BitPipelineRunner<TContext extends BitPipelineContext> {\n constructor(private readonly steps: BitPipelineStep<TContext>[]) {}\n\n async run(context: TContext): Promise<void> {\n for (const step of this.steps) {\n if (context.halted) {\n break;\n }\n\n await step.run(context);\n }\n }\n}\n\nexport class BitSyncPipelineRunner<TContext extends BitPipelineContext> {\n constructor(private readonly steps: BitSyncPipelineStep<TContext>[]) {}\n\n run(context: TContext): void {\n for (const step of this.steps) {\n if (context.halted) {\n break;\n }\n\n const result = step.run(context) as unknown;\n\n if (\n result !== null &&\n result !== undefined &&\n typeof (result as Promise<unknown>).then === \"function\" &&\n typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\"\n ) {\n console.warn(\n `BitSyncPipelineRunner: step \\\"${step.name}\\\" returned a Promise and will not be awaited.`,\n );\n }\n }\n }\n}\n","export function hasAnyError(errors: Record<string, unknown>): boolean {\n for (const _path in errors) {\n return true;\n }\n\n return false;\n}\n","import type { BitErrors, BitFieldDefinition } from \"../../../contracts/types\";\nimport { getDeepValue } from \"../../../../utils\";\n\ntype BitAsyncValidateFn<T extends object> = NonNullable<\n NonNullable<BitFieldDefinition<T>[\"validation\"]>[\"asyncValidate\"]\n>;\n\nexport function mergeValidationErrors<T extends object>(args: {\n targetFields?: string[];\n currentErrors: BitErrors<T>;\n allErrors: Record<string, string | undefined>;\n asyncErrors: ReadonlyMap<string, string>;\n}) {\n const { targetFields, currentErrors, allErrors, asyncErrors } = args;\n\n if (targetFields && targetFields.length > 0) {\n const scopedErrors = { ...currentErrors } as BitErrors<T>;\n\n targetFields.forEach((field) => {\n if (allErrors[field]) {\n scopedErrors[field as keyof BitErrors<T>] = allErrors[field];\n } else if (asyncErrors.has(field)) {\n scopedErrors[field as keyof BitErrors<T>] = asyncErrors.get(field)!;\n } else {\n delete scopedErrors[field as keyof BitErrors<T>];\n }\n });\n\n const scopedResult = targetFields.every(\n (field) => !allErrors[field] && !asyncErrors.has(field),\n );\n\n return {\n committedErrors: scopedErrors,\n result: scopedResult,\n mode: \"scoped\" as const,\n };\n }\n\n const globalErrors = {\n ...Object.fromEntries(asyncErrors.entries()),\n ...allErrors,\n } as BitErrors<T>;\n\n return {\n committedErrors: globalErrors,\n result: undefined,\n mode: \"global\" as const,\n };\n}\n\nexport function resolveAsyncValidationPaths<T extends object>(args: {\n targetFields?: string[];\n hiddenFields: ReadonlySet<string>;\n getFieldConfig: (path: string) => BitFieldDefinition<T> | undefined;\n forEachFieldConfig?: (\n callback: (config: BitFieldDefinition<T>, path: string) => void,\n ) => void;\n}): string[] {\n const { targetFields, hiddenFields, getFieldConfig, forEachFieldConfig } =\n args;\n const paths: string[] = [];\n\n if (targetFields && targetFields.length > 0) {\n for (const path of targetFields) {\n if (hiddenFields.has(path)) {\n continue;\n }\n\n const asyncValidate = getFieldConfig(path)?.validation?.asyncValidate;\n if (asyncValidate) {\n paths.push(path);\n }\n }\n\n return paths;\n }\n\n if (!forEachFieldConfig) {\n return paths;\n }\n\n forEachFieldConfig((config, path) => {\n if (!config.validation?.asyncValidate || hiddenFields.has(path)) {\n return;\n }\n\n paths.push(path);\n });\n\n return paths;\n}\n\nexport async function runImmediateAsyncValidationStage<T extends object>(args: {\n path: string;\n values: T;\n validationId: number;\n currentValidationId: number;\n getFieldConfig: (path: string) => BitFieldDefinition<T> | undefined;\n cancelFieldAsync: (path: string) => void;\n createAbortController: () => AbortController;\n setAbortController: (path: string, controller: AbortController) => void;\n clearAbortController: (path: string) => void;\n setFieldValidating: (path: string, isValidating: boolean) => void;\n setAsyncError: (path: string, message: string) => void;\n clearAsyncError: (path: string) => void;\n}) {\n const {\n path,\n values,\n validationId,\n currentValidationId,\n getFieldConfig,\n cancelFieldAsync,\n createAbortController,\n setAbortController,\n clearAbortController,\n setFieldValidating,\n setAsyncError,\n clearAsyncError,\n } = args;\n\n const asyncValidate = getFieldConfig(path)?.validation?.asyncValidate;\n\n if (!asyncValidate) {\n clearAsyncError(path);\n return;\n }\n\n cancelFieldAsync(path);\n\n const controller = createAbortController();\n setAbortController(path, controller);\n setFieldValidating(path, true);\n\n try {\n const errorMessage = await (asyncValidate as BitAsyncValidateFn<T>)(\n getDeepValue(values, path),\n values,\n );\n\n if (controller.signal.aborted || validationId !== currentValidationId) {\n return;\n }\n\n if (errorMessage) {\n setAsyncError(path, errorMessage);\n } else {\n clearAsyncError(path);\n }\n } finally {\n if (!controller.signal.aborted && validationId === currentValidationId) {\n setFieldValidating(path, false);\n }\n clearAbortController(path);\n }\n}\n","import type { BitFieldDefinition } from \"../../../contracts/types\";\nimport { isPathWithinPrefix } from \"../../../shared/path-prefix\";\n\nexport type BitAsyncValidateFn<T extends object> = NonNullable<\n NonNullable<BitFieldDefinition<T>[\"validation\"]>[\"asyncValidate\"]\n>;\n\ninterface PendingAsyncValidationJob<T extends object> {\n value: unknown;\n dueAt: number;\n validate: BitAsyncValidateFn<T>;\n controller: AbortController;\n}\n\nexport interface BitAsyncValidationSchedulerPort<T extends object> {\n schedule(fn: () => void, delayMs: number): () => void;\n getValues(): T;\n setFieldValidating(path: string, isValidating: boolean): void;\n setAsyncError(path: string, message: string): void;\n clearAsyncError(path: string): void;\n onValidationPassed(path: string): Promise<void>;\n}\n\nexport class BitAsyncValidationScheduler<T extends object> {\n private cancelSchedulerTimeout?: () => void;\n private readonly abortControllers = new Map<string, AbortController>();\n private readonly pendingJobs = new Map<\n string,\n PendingAsyncValidationJob<T>\n >();\n\n constructor(private readonly port: BitAsyncValidationSchedulerPort<T>) {}\n\n handle(\n path: string,\n value: unknown,\n validate: BitAsyncValidateFn<T> | undefined,\n delay: number,\n ): void {\n if (!validate) {\n this.cancel(path);\n this.port.setFieldValidating(path, false);\n return;\n }\n\n this.cancel(path);\n this.port.setFieldValidating(path, true);\n\n const controller = new AbortController();\n this.abortControllers.set(path, controller);\n this.pendingJobs.set(path, {\n value,\n dueAt: Date.now() + delay,\n validate,\n controller,\n });\n this.schedulePendingJobs();\n }\n\n cancel(path: string): void {\n if (this.pendingJobs.has(path)) {\n this.pendingJobs.delete(path);\n this.schedulePendingJobs();\n }\n\n const controller = this.abortControllers.get(path);\n if (controller) {\n controller.abort();\n this.abortControllers.delete(path);\n }\n }\n\n cleanupPrefix(prefix: string): void {\n for (const path of this.pendingJobs.keys()) {\n if (isPathWithinPrefix(path, prefix)) {\n this.cancel(path);\n this.port.clearAsyncError(path);\n this.port.setFieldValidating(path, false);\n }\n }\n }\n\n cancelAll(): void {\n if (this.cancelSchedulerTimeout) {\n this.cancelSchedulerTimeout();\n this.cancelSchedulerTimeout = undefined;\n }\n\n this.pendingJobs.clear();\n this.abortControllers.forEach((controller) => controller.abort());\n this.abortControllers.clear();\n }\n\n private schedulePendingJobs(): void {\n if (this.cancelSchedulerTimeout) {\n this.cancelSchedulerTimeout();\n this.cancelSchedulerTimeout = undefined;\n }\n\n let nextDueAt = Number.POSITIVE_INFINITY;\n\n for (const job of this.pendingJobs.values()) {\n if (job.dueAt < nextDueAt) {\n nextDueAt = job.dueAt;\n }\n }\n\n if (!Number.isFinite(nextDueAt)) {\n return;\n }\n\n this.cancelSchedulerTimeout = this.port.schedule(\n () => {\n this.cancelSchedulerTimeout = undefined;\n void this.flushPendingJobs();\n },\n Math.max(0, nextDueAt - Date.now()),\n );\n }\n\n private async flushPendingJobs(): Promise<void> {\n this.cancelSchedulerTimeout = undefined;\n\n const now = Date.now();\n const dueJobs = Array.from(this.pendingJobs.entries()).filter(\n ([, job]) => job.dueAt <= now,\n );\n\n if (dueJobs.length === 0) {\n this.schedulePendingJobs();\n return;\n }\n\n dueJobs.forEach(([path]) => {\n this.pendingJobs.delete(path);\n });\n\n await Promise.all(dueJobs.map(([path, job]) => this.runJob(path, job)));\n\n this.schedulePendingJobs();\n }\n\n private async runJob(\n path: string,\n job: PendingAsyncValidationJob<T>,\n ): Promise<void> {\n if (job.controller.signal.aborted) {\n return;\n }\n\n try {\n const errorMessage = await job.validate(job.value, this.port.getValues());\n\n if (job.controller.signal.aborted) {\n return;\n }\n\n if (errorMessage) {\n this.port.setAsyncError(path, errorMessage);\n } else {\n this.port.clearAsyncError(path);\n await this.port.onValidationPassed(path);\n }\n } finally {\n if (!job.controller.signal.aborted) {\n this.port.setFieldValidating(path, false);\n }\n this.abortControllers.delete(path);\n }\n }\n}\n","import type { BitValidationOptions } from \"../../../contracts/public/meta-types\";\nimport type { BitValidationTriggerOptions } from \"../../../contracts/port-types\";\n\nexport interface BitValidationDebouncerPort {\n schedule(fn: () => void, delayMs: number): () => void;\n validate(options?: BitValidationOptions): Promise<boolean>;\n readonly validationDelay: number;\n}\n\n/**\n * Responsável exclusivamente pelo debounce do trigger de validação.\n * Acumula campos pendentes dentro da janela de debounce, evitando\n * descartar paths de chamadas anteriores dentro do mesmo intervalo.\n */\nexport class BitValidationDebouncer {\n private cancelTimeout?: () => void;\n private pendingScopeFields: Set<string> | null = null;\n\n constructor(private readonly port: BitValidationDebouncerPort) {}\n\n trigger(scopeFields?: string[], options?: BitValidationTriggerOptions): void {\n if (this.cancelTimeout) {\n this.cancelTimeout();\n this.cancelTimeout = undefined;\n }\n\n const configuredDelay = this.port.validationDelay ?? 300;\n const delay = options?.forceDebounce\n ? Math.max(1, configuredDelay)\n : configuredDelay;\n\n if (delay > 0) {\n // Acumula paths em vez de substituir — garante que paths de calls\n // anteriores dentro do mesmo debounce não sejam descartados.\n if (scopeFields && scopeFields.length > 0) {\n if (!this.pendingScopeFields) {\n this.pendingScopeFields = new Set(scopeFields);\n } else {\n for (const f of scopeFields) this.pendingScopeFields.add(f);\n }\n } else {\n // Sem scope = validação global, descarta paths acumulados\n this.pendingScopeFields = null;\n }\n\n const resolvedScopeFields = this.pendingScopeFields\n ? Array.from(this.pendingScopeFields)\n : undefined;\n\n this.cancelTimeout = this.port.schedule(() => {\n this.pendingScopeFields = null;\n this.cancelTimeout = undefined;\n void this.port.validate({ scopeFields: resolvedScopeFields });\n }, delay);\n } else {\n this.pendingScopeFields = null;\n void this.port.validate({ scopeFields });\n }\n }\n\n cancelPending(): void {\n if (this.cancelTimeout) {\n this.cancelTimeout();\n this.cancelTimeout = undefined;\n }\n this.pendingScopeFields = null;\n }\n}\n","import type { BitValidationPipelinePort } from \"../../../contracts/port-types\";\nimport type { ValidationPipelineContext } from \"./validation-pipeline-context\";\nimport { hasAnyError } from \"../../../shared/error-map\";\nimport { validationCommitOperation } from \"../../../engines/operation-engine\";\nimport {\n mergeValidationErrors,\n resolveAsyncValidationPaths,\n} from \"./validation-stages\";\n\nexport interface BitValidationPipelineStageDeps<T extends object> {\n store: BitValidationPipelinePort<T>;\n asyncErrors: Map<string, string>;\n getCurrentValidationId: () => number;\n runImmediateAsyncValidation: (\n path: string,\n values: T,\n validationId: number,\n ) => Promise<void>;\n}\n\nexport function resolveTargetFieldsStage<T extends object>(args: {\n ctx: ValidationPipelineContext<T>;\n deps: BitValidationPipelineStageDeps<T>;\n}) {\n const { ctx, deps } = args;\n if (ctx.options?.scope) {\n const scopeFields = deps.store.getScopeFields(ctx.options.scope);\n if (scopeFields.length > 0) {\n ctx.targetFields = scopeFields;\n }\n }\n}\n\nexport async function runBeforeValidateHooksStage<T extends object>(args: {\n ctx: ValidationPipelineContext<T>;\n deps: BitValidationPipelineStageDeps<T>;\n}) {\n const { ctx, deps } = args;\n\n await deps.store.emitBeforeValidate({\n values: ctx.currentState.values,\n state: ctx.currentState,\n scope: ctx.options?.scope,\n scopeFields: ctx.targetFields,\n });\n}\n\nexport async function runSynchronousTrackStage<T extends object>(args: {\n ctx: ValidationPipelineContext<T>;\n deps: BitValidationPipelineStageDeps<T>;\n}) {\n const { ctx, deps } = args;\n\n const resolverErrors = deps.store.config.resolver\n ? await deps.store.config.resolver(ctx.currentState.values, {\n scopeFields: ctx.targetFields,\n })\n : {};\n\n const dynamicRequiredErrors = deps.store.getRequiredErrors(\n ctx.currentState.values,\n );\n\n ctx.allErrors = { ...resolverErrors, ...dynamicRequiredErrors };\n\n deps.store.getHiddenFields().forEach((hiddenPath) => {\n delete ctx.allErrors[hiddenPath];\n deps.asyncErrors.delete(hiddenPath);\n });\n}\n\nexport async function runAsyncTrackStage<T extends object>(args: {\n ctx: ValidationPipelineContext<T>;\n deps: BitValidationPipelineStageDeps<T>;\n}) {\n const { ctx, deps } = args;\n\n const targetPaths = resolveAsyncValidationPaths<T>({\n targetFields: ctx.targetFields,\n hiddenFields: deps.store.getHiddenFields(),\n getFieldConfig: (path) => deps.store.getFieldConfig(path),\n forEachFieldConfig: deps.store.forEachFieldConfig,\n });\n\n if (targetPaths.length === 0) {\n return;\n }\n\n await Promise.all(\n targetPaths.map((path) =>\n deps.runImmediateAsyncValidation(\n path,\n ctx.currentState.values,\n ctx.validationId,\n ),\n ),\n );\n}\n\nexport function mergeAsyncTrackStage<T extends object>(args: {\n ctx: ValidationPipelineContext<T>;\n deps: BitValidationPipelineStageDeps<T>;\n}) {\n const { ctx, deps } = args;\n\n const merged = mergeValidationErrors<T>({\n targetFields: ctx.targetFields,\n currentErrors: ctx.currentState.errors,\n allErrors: ctx.allErrors,\n asyncErrors: deps.asyncErrors,\n });\n\n ctx.committedErrors = merged.committedErrors;\n ctx.isValid = !hasAnyError(merged.committedErrors);\n ctx.result = merged.mode === \"scoped\" ? merged.result : ctx.isValid;\n}\n\nexport async function abortIfOutdatedStage<T extends object>(args: {\n ctx: ValidationPipelineContext<T>;\n deps: BitValidationPipelineStageDeps<T>;\n}) {\n const { ctx, deps } = args;\n if (ctx.validationId === deps.getCurrentValidationId()) {\n return;\n }\n\n ctx.aborted = true;\n ctx.result = ctx.currentState.isValid;\n ctx.halted = true;\n}\n\nexport async function commitValidationStage<T extends object>(args: {\n ctx: ValidationPipelineContext<T>;\n deps: BitValidationPipelineStageDeps<T>;\n}) {\n const { ctx, deps } = args;\n\n deps.store.dispatch(\n validationCommitOperation(ctx.committedErrors, ctx.isValid),\n );\n\n await deps.store.emitAfterValidate({\n values: deps.store.getState().values,\n state: deps.store.getState(),\n scope: ctx.options?.scope,\n scopeFields: ctx.targetFields,\n errors: ctx.committedErrors,\n result: ctx.result,\n });\n\n ctx.halted = true;\n}\n","import type { BitErrors } from \"../../../contracts/types\";\nimport type { BitValidationPipelinePort } from \"../../../contracts/port-types\";\nimport { validationCommitOperation } from \"../../../engines/operation-engine\";\nimport { hasAnyError } from \"../../../shared/error-map\";\n\nexport async function commitSynchronousScopeValidation<T extends object>(args: {\n scopeFields: string[];\n store: BitValidationPipelinePort<T>;\n asyncErrors: Map<string, string>;\n}) {\n const { scopeFields, store, asyncErrors } = args;\n const currentState = store.getState();\n const resolverErrors = store.config.resolver\n ? await store.config.resolver(currentState.values, {\n scopeFields,\n })\n : {};\n\n const dynamicRequiredErrors = store.getRequiredErrors(currentState.values);\n const allErrors = { ...resolverErrors, ...dynamicRequiredErrors };\n\n store.getHiddenFields().forEach((hiddenPath) => {\n delete allErrors[hiddenPath];\n asyncErrors.delete(hiddenPath);\n });\n\n const scopedErrors = { ...currentState.errors } as BitErrors<T>;\n\n scopeFields.forEach((field) => {\n if (allErrors[field]) {\n scopedErrors[field as keyof BitErrors<T>] = allErrors[field];\n } else if (asyncErrors.has(field)) {\n scopedErrors[field as keyof BitErrors<T>] = asyncErrors.get(field)!;\n } else {\n delete scopedErrors[field as keyof BitErrors<T>];\n }\n });\n\n store.dispatch(\n validationCommitOperation(scopedErrors, !hasAnyError(scopedErrors)),\n );\n}\n","import { isPathWithinPrefix } from \"../../../shared/path-prefix\";\n\nexport class BitValidationCoordinator {\n private currentValidationId = 0;\n private readonly immediateAbortControllers = new Map<\n string,\n AbortController\n >();\n\n beginValidation(): number {\n this.currentValidationId += 1;\n return this.currentValidationId;\n }\n\n getCurrentValidationId(): number {\n return this.currentValidationId;\n }\n\n isValidationCurrent(validationId: number): boolean {\n return validationId === this.currentValidationId;\n }\n\n setImmediateController(path: string, controller: AbortController): void {\n this.immediateAbortControllers.set(path, controller);\n }\n\n clearImmediateController(path: string): void {\n this.immediateAbortControllers.delete(path);\n }\n\n cancelImmediate(path: string): void {\n const controller = this.immediateAbortControllers.get(path);\n if (!controller) {\n return;\n }\n\n controller.abort();\n this.immediateAbortControllers.delete(path);\n }\n\n cancelImmediatePrefix(\n prefix: string,\n onPathCancelled: (path: string) => void,\n ) {\n for (const path of this.immediateAbortControllers.keys()) {\n if (!isPathWithinPrefix(path, prefix)) {\n continue;\n }\n\n this.cancelImmediate(path);\n onPathCancelled(path);\n }\n }\n\n cancelAllImmediate(): void {\n this.immediateAbortControllers.forEach((controller) => {\n controller.abort();\n });\n this.immediateAbortControllers.clear();\n }\n}\n","import { BitValidationOptions } from \"../../contracts/public/meta-types\";\nimport type { BitErrors } from \"../../contracts/types\";\nimport { BitPipelineRunner } from \"../../shared/pipeline\";\nimport {\n patchStateOperation,\n validationCommitOperation,\n} from \"../../engines/operation-engine\";\nimport { hasAnyError } from \"../../shared/error-map\";\nimport { runImmediateAsyncValidationStage } from \"./validation/validation-stages\";\nimport { BitAsyncValidationScheduler } from \"./validation/async-validation-scheduler\";\nimport { BitValidationDebouncer } from \"./validation/validation-debouncer\";\nimport type {\n BitValidationManagerPort,\n BitValidationTriggerOptions,\n} from \"../../contracts/port-types\";\nimport type { ValidationPipelineContext } from \"./validation/validation-pipeline-context\";\nimport {\n abortIfOutdatedStage,\n commitValidationStage,\n mergeAsyncTrackStage,\n resolveTargetFieldsStage,\n runAsyncTrackStage,\n runBeforeValidateHooksStage,\n runSynchronousTrackStage,\n type BitValidationPipelineStageDeps,\n} from \"./validation/validation-pipeline-stages\";\nimport { commitSynchronousScopeValidation } from \"./validation/scope-validation-commit\";\nimport { BitValidationCoordinator } from \"./validation/validation-coordinator\";\n\nexport class BitValidationManager<T extends object> {\n private validatingCount = 0;\n private readonly asyncErrors = new Map<string, string>();\n private readonly coordinator = new BitValidationCoordinator();\n private readonly validationPipeline: BitPipelineRunner<\n ValidationPipelineContext<T>\n >;\n private readonly schedule: (fn: () => void, delayMs: number) => () => void;\n private readonly asyncScheduler: BitAsyncValidationScheduler<T>;\n private readonly debouncer: BitValidationDebouncer;\n\n constructor(private store: BitValidationManagerPort<T>) {\n this.schedule =\n store.config.scheduler?.schedule ??\n ((fn, delayMs) => {\n const timeoutId = setTimeout(fn, delayMs);\n return () => clearTimeout(timeoutId);\n });\n\n this.debouncer = new BitValidationDebouncer({\n schedule: (fn, delayMs) => this.schedule(fn, delayMs),\n validate: (options) => this.validate(options),\n validationDelay: store.config.validationDelay ?? 300,\n });\n\n this.asyncScheduler = new BitAsyncValidationScheduler<T>({\n schedule: (fn, delayMs) => this.schedule(fn, delayMs),\n getValues: () => this.store.getState().values,\n setFieldValidating: (path, isValidating) =>\n this.updateFieldValidating(path, isValidating),\n setAsyncError: (path, message) => {\n this.asyncErrors.set(path, message);\n this.store.setError(path, message);\n },\n clearAsyncError: (path) => {\n this.asyncErrors.delete(path);\n },\n onValidationPassed: async (path) => {\n await commitSynchronousScopeValidation({\n scopeFields: [path],\n store: this.store,\n asyncErrors: this.asyncErrors,\n });\n },\n });\n\n const stageDeps: BitValidationPipelineStageDeps<T> = {\n store: this.store,\n asyncErrors: this.asyncErrors,\n getCurrentValidationId: () => this.coordinator.getCurrentValidationId(),\n runImmediateAsyncValidation: (path, values, validationId) =>\n this.runImmediateAsyncValidation(path, values, validationId),\n };\n\n this.validationPipeline = new BitPipelineRunner<\n ValidationPipelineContext<T>\n >([\n {\n name: \"validate:resolve-target-fields\",\n run: (ctx) => resolveTargetFieldsStage({ ctx, deps: stageDeps }),\n },\n {\n name: \"validate:before-hooks\",\n run: async (ctx) =>\n runBeforeValidateHooksStage({ ctx, deps: stageDeps }),\n },\n {\n name: \"validate:sync-track\",\n run: async (ctx) => runSynchronousTrackStage({ ctx, deps: stageDeps }),\n },\n {\n name: \"validate:abort-check-pre-async\",\n run: async (ctx) => abortIfOutdatedStage({ ctx, deps: stageDeps }),\n },\n {\n name: \"validate:async-track\",\n run: async (ctx) => runAsyncTrackStage({ ctx, deps: stageDeps }),\n },\n {\n name: \"validate:abort-check\",\n run: async (ctx) => abortIfOutdatedStage({ ctx, deps: stageDeps }),\n },\n {\n name: \"validate:async-track-merge\",\n run: (ctx) => mergeAsyncTrackStage({ ctx, deps: stageDeps }),\n },\n {\n name: \"validate:commit\",\n run: async (ctx) => commitValidationStage({ ctx, deps: stageDeps }),\n },\n ]);\n }\n\n private updateFieldValidating(path: string, isValidating: boolean) {\n const currentState = this.store.getState();\n const currentValue = !!currentState.isValidating[path];\n\n if (currentValue === isValidating) {\n return;\n }\n\n const nextValidating = { ...currentState.isValidating };\n\n if (isValidating) {\n nextValidating[path] = true;\n this.validatingCount += 1;\n } else {\n delete nextValidating[path];\n this.validatingCount = Math.max(0, this.validatingCount - 1);\n }\n\n this.store.dispatch(\n patchStateOperation({\n isValidating: nextValidating,\n }),\n );\n }\n\n private cancelFieldAsync(path: string) {\n this.asyncScheduler.cancel(path);\n this.coordinator.cancelImmediate(path);\n }\n\n cleanupField(path: string) {\n this.cancelFieldAsync(path);\n this.asyncErrors.delete(path);\n this.updateFieldValidating(path, false);\n }\n\n cleanupPrefix(prefix: string) {\n this.asyncScheduler.cleanupPrefix(prefix);\n\n this.coordinator.cancelImmediatePrefix(prefix, (path) => {\n this.asyncErrors.delete(path);\n this.updateFieldValidating(path, false);\n });\n }\n\n beginExternalValidation(path: string) {\n this.cancelFieldAsync(path);\n this.updateFieldValidating(path, true);\n }\n\n endExternalValidation(path: string) {\n this.updateFieldValidating(path, false);\n }\n\n async setExternalError(path: string, message: string | undefined) {\n if (message) {\n this.asyncErrors.set(path, message);\n this.store.setError(path, message);\n return;\n }\n\n this.asyncErrors.delete(path);\n\n if (this.store.validate) {\n await this.store.validate({ scopeFields: [path] });\n return;\n }\n\n const newErrors = { ...this.store.getState().errors };\n delete newErrors[path as keyof BitErrors<T>];\n this.store.dispatch(\n validationCommitOperation(newErrors, !hasAnyError(newErrors)),\n );\n }\n\n handleAsync(path: string, value: unknown) {\n const config = this.store.getFieldConfig(path);\n const asyncValidate = config?.validation?.asyncValidate;\n const asyncValidateOn = config?.validation?.asyncValidateOn ?? \"blur\";\n\n if (!asyncValidate || asyncValidateOn !== \"change\") {\n this.cancelFieldAsync(path);\n this.updateFieldValidating(path, false);\n return;\n }\n\n const delay = config.validation?.asyncValidateDelay ?? 500;\n this.asyncScheduler.handle(path, value, asyncValidate, delay);\n }\n\n hasValidationsInProgress(scopeFields?: string[]) {\n const state = this.store.getState();\n\n if (scopeFields && scopeFields.length > 0) {\n return scopeFields.some((field) => !!state.isValidating[field]);\n }\n\n return this.validatingCount > 0;\n }\n\n trigger(scopeFields?: string[], options?: BitValidationTriggerOptions) {\n this.debouncer.trigger(scopeFields, options);\n }\n\n async validate(options?: BitValidationOptions): Promise<boolean> {\n try {\n if (options?.scopeFields?.length) {\n options.scopeFields.forEach((fieldPath) =>\n this.cancelFieldAsync(fieldPath),\n );\n }\n\n const context: ValidationPipelineContext<T> = {\n options,\n validationId: this.coordinator.beginValidation(),\n currentState: this.store.getState(),\n targetFields: options?.scopeFields,\n allErrors: {},\n committedErrors: {},\n isValid: true,\n result: true,\n aborted: false,\n };\n\n await this.validationPipeline.run(context);\n\n if (context.aborted) {\n await this.store.emitAfterValidate({\n values: this.store.getState().values,\n state: this.store.getState(),\n scope: context.options?.scope,\n scopeFields: context.targetFields,\n errors: this.store.getState().errors,\n result: context.currentState.isValid,\n aborted: true,\n });\n }\n\n return context.result;\n } catch (error) {\n this.store.config.onUnhandledError(error, \"validation\");\n return false;\n }\n }\n\n clear(path: string) {\n this.cancelFieldAsync(path);\n this.updateFieldValidating(path, false);\n this.asyncErrors.delete(path);\n }\n\n cancelAll() {\n this.validatingCount = 0;\n this.debouncer.cancelPending();\n this.asyncScheduler.cancelAll();\n this.asyncErrors.clear();\n this.coordinator.cancelAllImmediate();\n\n this.store.dispatch(patchStateOperation({ isValidating: {} }));\n }\n\n private async runImmediateAsyncValidation(\n path: string,\n values: T,\n validationId: number,\n ) {\n await runImmediateAsyncValidationStage<T>({\n path,\n values,\n validationId,\n currentValidationId: this.coordinator.getCurrentValidationId(),\n getFieldConfig: (fieldPath) => this.store.getFieldConfig(fieldPath),\n cancelFieldAsync: (fieldPath) => this.cancelFieldAsync(fieldPath),\n createAbortController: () => new AbortController(),\n setAbortController: (fieldPath, controller) => {\n this.coordinator.setImmediateController(fieldPath, controller);\n },\n clearAbortController: (fieldPath) => {\n this.coordinator.clearImmediateController(fieldPath);\n },\n setFieldValidating: (fieldPath, isValidating) =>\n this.updateFieldValidating(fieldPath, isValidating),\n setAsyncError: (fieldPath, message) => {\n this.asyncErrors.set(fieldPath, message);\n },\n clearAsyncError: (fieldPath) => {\n this.asyncErrors.delete(fieldPath);\n },\n });\n }\n}\n","import type { BitErrors } from \"../store/contracts/types\";\n\n/**\n * Helper to safely clear an error from an errors object.\n * Returns a tuple of [newErrors, hasMutatedErrors] indicating if the error was cleared\n * and whether a clone was needed.\n */\nexport function clearErrorPath<T extends object>(\n errors: BitErrors<T>,\n path: string,\n alreadyMutated: boolean,\n): [BitErrors<T>, boolean] {\n const hasError = Object.prototype.hasOwnProperty.call(errors, path);\n\n if (!hasError) {\n return [errors, alreadyMutated];\n }\n\n let nextErrors = errors;\n let hasMutated = alreadyMutated;\n\n if (!hasMutated) {\n nextErrors = { ...errors };\n hasMutated = true;\n }\n\n delete nextErrors[path as keyof BitErrors<T>];\n\n return [nextErrors, hasMutated];\n}\n\n/**\n * Check if an error exists for a path.\n */\nexport function hasErrorPath<T extends object>(\n errors: BitErrors<T>,\n path: string,\n): boolean {\n return Object.prototype.hasOwnProperty.call(errors, path);\n}\n","import type { BitErrors, BitFieldChangeMeta } from \"../../../contracts/types\";\nimport { getDeepValue, setDeepValue } from \"../../../../utils\";\nimport { clearErrorPath } from \"../../../../utils/error-utils\";\nimport {\n BitPipelineContext,\n BitSyncPipelineRunner,\n} from \"../../../shared/pipeline\";\nimport { patchStateOperation } from \"../../../engines/operation-engine\";\nimport type {\n BitDependencyUpdateDiff,\n BitLifecycleFieldUpdatePort,\n} from \"../../../contracts/port-types\";\n\ninterface FieldUpdatePipelineContext<\n T extends object,\n> extends BitPipelineContext {\n path: string;\n value: unknown;\n meta: BitFieldChangeMeta;\n previousValue: unknown;\n nextValues: T;\n nextErrors: BitErrors<T>;\n hasMutatedErrors: boolean;\n dependencyDiff: BitDependencyUpdateDiff;\n isDirty: boolean;\n}\n\nexport class BitFieldUpdateManager<T extends object> {\n private readonly fieldUpdatePipeline: BitSyncPipelineRunner<\n FieldUpdatePipelineContext<T>\n >;\n\n constructor(private readonly store: BitLifecycleFieldUpdatePort<T>) {\n this.fieldUpdatePipeline = new BitSyncPipelineRunner<\n FieldUpdatePipelineContext<T>\n >([\n {\n name: \"field:clear-current-error\",\n run: (ctx) => this.clearCurrentError(ctx),\n },\n {\n name: \"field:update-dependencies\",\n run: (ctx) => this.updateDependencies(ctx),\n },\n { name: \"field:update-dirty\", run: (ctx) => this.updateDirtyState(ctx) },\n { name: \"field:commit-state\", run: (ctx) => this.commitFieldState(ctx) },\n { name: \"field:emit-change\", run: (ctx) => this.emitFieldChange(ctx) },\n {\n name: \"field:trigger-validate\",\n run: (ctx) => this.triggerResolverValidation(ctx),\n },\n {\n name: \"field:trigger-async-validate\",\n run: (ctx) => this.triggerAsyncValidation(ctx),\n },\n ]);\n }\n\n updateField(\n path: string,\n value: unknown,\n meta: BitFieldChangeMeta = { origin: \"setField\" },\n ) {\n const state = this.store.getState();\n const context: FieldUpdatePipelineContext<T> = {\n path,\n value,\n meta,\n previousValue: getDeepValue(state.values, path),\n nextValues: setDeepValue(state.values, path, value),\n nextErrors: state.errors,\n hasMutatedErrors: false,\n dependencyDiff: {\n affectedFields: [],\n visibilityChanged: [],\n requiredChanged: [],\n },\n isDirty: false,\n };\n\n this.fieldUpdatePipeline.run(context);\n }\n\n private clearCurrentError(ctx: FieldUpdatePipelineContext<T>) {\n [ctx.nextErrors, ctx.hasMutatedErrors] = clearErrorPath(\n ctx.nextErrors,\n ctx.path,\n ctx.hasMutatedErrors,\n );\n\n this.store.clearFieldValidation(ctx.path);\n }\n\n private updateDependencies(ctx: FieldUpdatePipelineContext<T>) {\n if (\n typeof this.store.hasDependentFields === \"function\" &&\n !this.store.hasDependentFields(ctx.path)\n ) {\n ctx.dependencyDiff.affectedFields.length = 0;\n ctx.dependencyDiff.visibilityChanged.length = 0;\n ctx.dependencyDiff.requiredChanged.length = 0;\n return;\n }\n\n ctx.dependencyDiff = this.store.updateDependencies(\n ctx.path,\n this.store.getState().values,\n ctx.nextValues,\n );\n\n const fieldsToReset = new Set([\n ...ctx.dependencyDiff.visibilityChanged,\n ...ctx.dependencyDiff.requiredChanged,\n ]);\n\n fieldsToReset.forEach((depPath) => {\n [ctx.nextErrors, ctx.hasMutatedErrors] = clearErrorPath(\n ctx.nextErrors,\n depPath,\n ctx.hasMutatedErrors,\n );\n this.store.clearFieldValidation(depPath);\n });\n }\n\n private updateDirtyState(ctx: FieldUpdatePipelineContext<T>) {\n ctx.isDirty = this.store.updateDirtyForPath(\n ctx.path,\n ctx.nextValues,\n this.store.getBaselineValues(),\n );\n }\n\n private commitFieldState(ctx: FieldUpdatePipelineContext<T>) {\n const changedPaths = Array.from(\n new Set([\n ctx.path,\n ...ctx.dependencyDiff.visibilityChanged,\n ...ctx.dependencyDiff.requiredChanged,\n ]),\n );\n\n this.store.dispatch(\n patchStateOperation(\n {\n values: ctx.nextValues,\n errors: ctx.nextErrors,\n isDirty: ctx.isDirty,\n },\n changedPaths,\n ),\n );\n }\n\n private emitFieldChange(ctx: FieldUpdatePipelineContext<T>) {\n this.store.emitFieldChange({\n path: ctx.path,\n previousValue: ctx.previousValue,\n nextValue: ctx.value,\n values: this.store.getState().values,\n state: this.store.getState(),\n meta: ctx.meta,\n });\n }\n\n private triggerResolverValidation(ctx: FieldUpdatePipelineContext<T>) {\n const validationTargets = Array.from(\n new Set([\n ctx.path,\n ...ctx.dependencyDiff.visibilityChanged,\n ...ctx.dependencyDiff.requiredChanged,\n ]),\n );\n\n if (\n this.store.config.resolver ||\n ctx.dependencyDiff.visibilityChanged.length > 0 ||\n ctx.dependencyDiff.requiredChanged.length > 0\n ) {\n this.store.triggerValidation(validationTargets);\n }\n }\n\n private triggerAsyncValidation(ctx: FieldUpdatePipelineContext<T>) {\n const asyncValidateOn =\n typeof this.store.getFieldConfig === \"function\"\n ? this.store.getFieldConfig(ctx.path)?.validation?.asyncValidateOn\n : undefined;\n\n if (asyncValidateOn !== \"change\") {\n return;\n }\n\n this.store.handleFieldAsyncValidation(ctx.path, ctx.value);\n }\n}\n","import type { DeepPartial } from \"../../../contracts/types\";\nimport { deepClone, deepMerge } from \"../../../../utils\";\nimport { patchStateOperation } from \"../../../engines/operation-engine\";\nimport type { BitLifecycleValuesPort } from \"../../../contracts/port-types\";\n\nexport class BitValuesLifecycleManager<T extends object> {\n constructor(private readonly store: BitLifecycleValuesPort<T>) {}\n\n private collectChangedPaths(values: DeepPartial<T>, prefix = \"\"): string[] {\n const changedPaths: string[] = [];\n\n Object.entries(values as Record<string, unknown>).forEach(\n ([key, value]) => {\n const nextPath = prefix ? `${prefix}.${key}` : key;\n\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n Object.keys(value as Record<string, unknown>).length > 0\n ) {\n changedPaths.push(\n ...this.collectChangedPaths(value as DeepPartial<T>, nextPath),\n );\n return;\n }\n\n changedPaths.push(nextPath);\n },\n );\n\n return changedPaths;\n }\n\n setValues(\n newValues: T | DeepPartial<T>,\n options?: { partial?: boolean; rebase?: boolean },\n ) {\n if (options?.rebase) {\n this.rebaseValues(newValues as T);\n return;\n }\n\n if (options?.partial) {\n this.hydrateValues(newValues as DeepPartial<T>);\n return;\n }\n\n this.replaceValuesInternal(newValues as T, \"replaceValues\");\n }\n\n hydrateValues(values: DeepPartial<T>) {\n const mergedValues = deepMerge(this.store.getState().values, values);\n const changedPaths = this.collectChangedPaths(values);\n this.replaceValuesInternal(\n mergedValues,\n \"hydrate\",\n changedPaths.length > 0 ? changedPaths : [\"*\"],\n );\n }\n\n rebaseValues(newValues: T) {\n const previousValues = this.store.getState().values;\n const clonedValues = deepClone(newValues);\n\n this.store.setBaselineValues(deepClone(clonedValues));\n\n this.store.cancelAllValidations();\n this.store.evaluateAllDependencies(clonedValues);\n\n this.store.clearDirtyState();\n\n this.store.dispatch(\n patchStateOperation(\n {\n values: clonedValues,\n errors: {},\n touched: {},\n isValidating: {},\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n },\n [\"*\"],\n ),\n );\n\n this.store.resetHistory(clonedValues);\n this.store.validateNow();\n\n this.store.emitFieldChange({\n path: \"*\",\n previousValue: previousValues,\n nextValue: clonedValues,\n values: this.store.getState().values,\n state: this.store.getState(),\n meta: { origin: \"rebase\" },\n });\n }\n\n applyHistoryState(snapshot: T) {\n const isDirty = this.store.rebuildDirtyState(\n snapshot,\n this.store.getBaselineValues(),\n );\n\n this.store.dispatch(\n patchStateOperation(\n {\n values: snapshot,\n isDirty,\n },\n [\"*\"],\n ),\n );\n\n this.store.triggerValidation(undefined, { forceDebounce: true });\n }\n\n reset() {\n this.store.cancelAllValidations();\n\n const initialCloned = deepClone(this.store.getBaselineValues());\n\n this.store.evaluateAllDependencies(initialCloned);\n\n this.store.clearDirtyState();\n\n this.store.dispatch(\n patchStateOperation(\n {\n values: initialCloned,\n errors: {},\n touched: {},\n isValidating: {},\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n },\n [\"*\"],\n ),\n );\n\n this.store.resetHistory(initialCloned);\n }\n\n private replaceValuesInternal(\n newValues: T,\n origin: \"replaceValues\" | \"hydrate\" = \"replaceValues\",\n changedPaths: string[] = [\"*\"],\n ) {\n const previousValues = this.store.getState().values;\n const clonedValues = deepClone(newValues);\n\n this.store.cancelAllValidations();\n this.store.evaluateAllDependencies(clonedValues);\n\n const isDirty = this.store.rebuildDirtyState(\n clonedValues,\n this.store.getBaselineValues(),\n );\n\n this.store.dispatch(\n patchStateOperation(\n {\n values: clonedValues,\n errors: {},\n isValidating: {},\n isValid: true,\n isDirty,\n isSubmitting: false,\n },\n changedPaths,\n ),\n );\n\n this.store.internalSaveSnapshot();\n this.store.validateNow();\n\n this.store.emitFieldChange({\n path: \"*\",\n previousValue: previousValues,\n nextValue: clonedValues,\n values: this.store.getState().values,\n state: this.store.getState(),\n meta: { origin },\n });\n }\n}\n","import { deepClone, setDeepValues } from \"../../../../utils\";\nimport type { BitSubmitResult } from \"../../../contracts/types\";\nimport { applyTransformDerivations } from \"../../../shared/value-derivation-pipeline\";\nimport {\n BitPipelineContext,\n BitPipelineRunner,\n} from \"../../../shared/pipeline\";\nimport { patchStateOperation } from \"../../../engines/operation-engine\";\nimport type { BitLifecycleSubmitPort } from \"../../../contracts/port-types\";\n\ninterface SubmitPipelineContext<T extends object> extends BitPipelineContext {\n onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>;\n isValid: boolean;\n valuesToSubmit: T;\n dirtyValues: Partial<T>;\n error?: unknown;\n invalid?: boolean;\n}\n\nexport class BitSubmitLifecycleManager<T extends object> {\n private readonly submitPipeline: BitPipelineRunner<SubmitPipelineContext<T>>;\n\n constructor(private readonly store: BitLifecycleSubmitPort<T>) {\n this.submitPipeline = new BitPipelineRunner<SubmitPipelineContext<T>>([\n { name: \"submit:start\", run: async (ctx) => this.startSubmit(ctx) },\n {\n name: \"submit:invalid\",\n run: async (ctx) => this.handleInvalidSubmit(ctx),\n },\n { name: \"submit:prepare\", run: (ctx) => this.prepareSubmitValues(ctx) },\n {\n name: \"submit:before-hooks\",\n run: async (ctx) => this.runBeforeSubmitHooks(ctx),\n },\n {\n name: \"submit:user-handler\",\n run: async (ctx) => this.runSubmitHandler(ctx),\n },\n {\n name: \"submit:after-hooks\",\n run: async (ctx) => this.runAfterSubmitHooks(ctx),\n },\n ]);\n }\n\n async submit(\n onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ): Promise<BitSubmitResult> {\n const currentState = this.store.getState();\n\n if (currentState.isSubmitting) {\n return { status: \"blocked\", reason: \"isSubmitting\" };\n }\n\n if (this.store.hasValidationsInProgress()) {\n return { status: \"blocked\", reason: \"validating\" };\n }\n\n this.store.cancelAllValidations();\n\n const context: SubmitPipelineContext<T> = {\n onSuccess,\n isValid: false,\n valuesToSubmit: deepClone(this.store.getState().values),\n dirtyValues: {},\n };\n\n try {\n await this.submitPipeline.run(context);\n\n if (context.invalid) {\n return { status: \"invalid\" };\n }\n\n return { status: \"submitted\" };\n } catch (error) {\n context.error = error;\n\n await this.store.emitOperationalError({\n source: \"submit\",\n error,\n });\n\n await this.store.emitAfterSubmit({\n values: this.store.getState().values,\n dirtyValues: this.store.buildDirtyValues(this.store.getState().values),\n state: this.store.getState(),\n success: false,\n error,\n });\n\n this.store.config.onUnhandledError(error, \"submit\");\n\n return { status: \"failed\", error };\n } finally {\n this.store.dispatch(patchStateOperation({ isSubmitting: false }));\n }\n }\n\n private async startSubmit(ctx: SubmitPipelineContext<T>) {\n this.store.dispatch(patchStateOperation({ isSubmitting: true }));\n ctx.isValid = await this.store.validateNow();\n }\n\n private async handleInvalidSubmit(ctx: SubmitPipelineContext<T>) {\n if (ctx.isValid) return;\n\n const currentErrors = this.store.getState().errors;\n const newTouched = { ...this.store.getState().touched };\n\n Object.keys(currentErrors).forEach((path) => {\n newTouched[path as keyof typeof newTouched] = true;\n });\n\n this.store.batchStateUpdates(() => {\n this.store.dispatch(patchStateOperation({ touched: newTouched }));\n });\n\n ctx.dirtyValues = this.store.buildDirtyValues(this.store.getState().values);\n ctx.invalid = true;\n\n await this.store.emitAfterSubmit({\n values: this.store.getState().values,\n dirtyValues: ctx.dirtyValues,\n state: this.store.getState(),\n success: false,\n invalid: true,\n });\n\n ctx.halted = true;\n }\n\n private prepareSubmitValues(ctx: SubmitPipelineContext<T>) {\n const updates: Array<[string, unknown]> = [];\n\n this.store.getHiddenFields().forEach((hiddenPath) => {\n updates.push([hiddenPath, undefined]);\n });\n\n ctx.valuesToSubmit = applyTransformDerivations({\n values: ctx.valuesToSubmit,\n sourceValues: this.store.getState().values,\n transformEntries: this.store.getTransformEntries(),\n });\n\n if (updates.length > 0) {\n ctx.valuesToSubmit = setDeepValues(ctx.valuesToSubmit, updates);\n }\n\n ctx.dirtyValues = this.store.buildDirtyValues(ctx.valuesToSubmit);\n }\n\n private async runBeforeSubmitHooks(ctx: SubmitPipelineContext<T>) {\n await this.store.emitBeforeSubmit({\n values: ctx.valuesToSubmit,\n dirtyValues: ctx.dirtyValues,\n state: this.store.getState(),\n });\n }\n\n private async runSubmitHandler(ctx: SubmitPipelineContext<T>) {\n await ctx.onSuccess(ctx.valuesToSubmit, ctx.dirtyValues);\n }\n\n private async runAfterSubmitHooks(ctx: SubmitPipelineContext<T>) {\n await this.store.emitAfterSubmit({\n values: ctx.valuesToSubmit,\n dirtyValues: ctx.dirtyValues,\n state: this.store.getState(),\n success: true,\n });\n }\n}\n","import { BitFieldChangeMeta, DeepPartial } from \"../../contracts/types\";\nimport type { BitSubmitResult } from \"../../contracts/types\";\nimport type { BitLifecyclePorts } from \"../../contracts/port-types\";\nimport { BitFieldUpdateManager } from \"./lifecycle/field-update-manager\";\nimport { BitValuesLifecycleManager } from \"./lifecycle/values-lifecycle-manager\";\nimport { BitSubmitLifecycleManager } from \"./lifecycle/submit-lifecycle-manager\";\n\nexport class BitLifecycleManager<T extends object> {\n private readonly fieldUpdate: BitFieldUpdateManager<T>;\n private readonly values: BitValuesLifecycleManager<T>;\n private readonly submitFlow: BitSubmitLifecycleManager<T>;\n\n constructor(private readonly ports: BitLifecyclePorts<T>) {\n this.fieldUpdate = new BitFieldUpdateManager<T>(ports.fieldUpdate);\n this.values = new BitValuesLifecycleManager<T>(ports.values);\n this.submitFlow = new BitSubmitLifecycleManager<T>(ports.submit);\n }\n\n updateField(\n path: string,\n value: unknown,\n meta: BitFieldChangeMeta = { origin: \"setField\" },\n ) {\n this.fieldUpdate.updateField(path, value, meta);\n }\n\n setValues(\n newValues: T | DeepPartial<T>,\n options?: { partial?: boolean; rebase?: boolean },\n ) {\n this.values.setValues(newValues, options);\n }\n\n hydrateValues(values: DeepPartial<T>) {\n this.values.hydrateValues(values);\n }\n\n rebaseValues(newValues: T) {\n this.values.rebaseValues(newValues);\n }\n\n applyHistoryState(snapshot: T) {\n this.values.applyHistoryState(snapshot);\n }\n\n async submit(\n onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ): Promise<BitSubmitResult> {\n return this.submitFlow.submit(onSuccess);\n }\n\n reset() {\n this.values.reset();\n }\n}\n","import {\n deepClone,\n deepEqual,\n setDeepValue,\n unsetDeepValue,\n} from \"../../utils\";\n\ntype HistoryDirection = \"undo\" | \"redo\";\n\nexport interface BitHistoryPatchOperation {\n path: string;\n previousValue: unknown;\n nextValue: unknown;\n hadPreviousValue: boolean;\n hasNextValue: boolean;\n}\n\nexport interface BitHistoryPatch<T extends object> {\n operations: BitHistoryPatchOperation[];\n _type?: T;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !(value instanceof Date) &&\n !(value instanceof RegExp)\n );\n}\n\nexport function createHistoryPatch<T extends object>(\n previousValue: T,\n nextValue: T,\n): BitHistoryPatch<T> {\n const operations: BitHistoryPatchOperation[] = [];\n\n const visit = (\n previousNode: unknown,\n nextNode: unknown,\n path: string,\n hadPreviousValue: boolean,\n hasNextValue: boolean,\n ) => {\n if (hadPreviousValue && hasNextValue && deepEqual(previousNode, nextNode)) {\n return;\n }\n\n if (\n isPlainObject(previousNode) &&\n isPlainObject(nextNode) &&\n hadPreviousValue &&\n hasNextValue\n ) {\n const keys = new Set<string>([\n ...Object.keys(previousNode),\n ...Object.keys(nextNode),\n ]);\n\n for (const key of keys) {\n const childPath = path ? `${path}.${key}` : key;\n const childHasPrevious = Object.prototype.hasOwnProperty.call(\n previousNode,\n key,\n );\n const childHasNext = Object.prototype.hasOwnProperty.call(\n nextNode,\n key,\n );\n\n visit(\n previousNode[key],\n nextNode[key],\n childPath,\n childHasPrevious,\n childHasNext,\n );\n }\n return;\n }\n\n operations.push({\n path,\n previousValue: deepClone(previousNode),\n nextValue: deepClone(nextNode),\n hadPreviousValue,\n hasNextValue,\n });\n };\n\n visit(previousValue, nextValue, \"\", true, true);\n\n return {\n operations,\n };\n}\n\nexport function applyHistoryPatch<T extends object>(\n currentValue: T,\n patch: BitHistoryPatch<T>,\n direction: HistoryDirection,\n): T {\n let nextValue: unknown = currentValue;\n\n for (const operation of patch.operations) {\n const shouldSet =\n direction === \"undo\"\n ? operation.hadPreviousValue\n : operation.hasNextValue;\n const value =\n direction === \"undo\" ? operation.previousValue : operation.nextValue;\n\n if (!operation.path) {\n nextValue = shouldSet ? deepClone(value) : {};\n continue;\n }\n\n nextValue = shouldSet\n ? setDeepValue(nextValue, operation.path, deepClone(value))\n : unsetDeepValue(nextValue, operation.path);\n }\n\n return nextValue as T;\n}\n","import { deepClone, deepEqual } from \"../../../utils\";\nimport {\n applyHistoryPatch,\n createHistoryPatch,\n type BitHistoryPatch,\n} from \"../../engines/snapshot-diff-engine\";\n\nexport class BitHistoryManager<T extends object = Record<string, unknown>> {\n private baseSnapshot: T | null = null;\n private currentSnapshot: T | null = null;\n private patches: BitHistoryPatch<T>[] = [];\n private historyIndex = -1;\n private historySize = 0;\n\n constructor(\n private enableHistory: boolean,\n private maxHistory: number,\n ) {}\n\n saveSnapshot(values: T) {\n if (!this.enableHistory) return;\n\n if (!this.currentSnapshot || this.baseSnapshot === null) {\n this.reset(values);\n return;\n }\n\n if (deepEqual(this.currentSnapshot, values)) {\n return;\n }\n\n if (this.historyIndex < this.historySize - 1) {\n this.patches.splice(this.historyIndex);\n this.historySize = this.historyIndex + 1;\n }\n\n const patch = createHistoryPatch(this.currentSnapshot, values);\n if (patch.operations.length === 0) {\n return;\n }\n\n this.patches.push(patch);\n this.currentSnapshot = deepClone(values);\n this.historyIndex += 1;\n this.historySize = this.historyIndex + 1;\n\n while (this.historySize > this.getCapacity()) {\n this.compactOldestSnapshot();\n }\n }\n\n get canUndo(): boolean {\n return this.enableHistory ? this.historyIndex > 0 : false;\n }\n\n get canRedo(): boolean {\n return this.enableHistory\n ? this.historyIndex < this.historySize - 1\n : false;\n }\n\n undo(): T | null {\n if (!this.canUndo || !this.currentSnapshot) {\n return null;\n }\n\n const patch = this.patches[this.historyIndex - 1];\n const previousSnapshot = applyHistoryPatch(\n this.currentSnapshot,\n patch,\n \"undo\",\n );\n\n this.currentSnapshot = deepClone(previousSnapshot);\n this.historyIndex -= 1;\n return previousSnapshot;\n }\n\n redo(): T | null {\n if (!this.canRedo || !this.currentSnapshot) {\n return null;\n }\n\n const patch = this.patches[this.historyIndex];\n const nextSnapshot = applyHistoryPatch(this.currentSnapshot, patch, \"redo\");\n\n this.currentSnapshot = deepClone(nextSnapshot);\n this.historyIndex += 1;\n return nextSnapshot;\n }\n\n reset(initialValues: T) {\n if (!this.enableHistory) {\n this.baseSnapshot = null;\n this.currentSnapshot = null;\n this.patches = [];\n this.historyIndex = -1;\n this.historySize = 0;\n return;\n }\n\n this.baseSnapshot = deepClone(initialValues);\n this.currentSnapshot = deepClone(initialValues);\n this.patches = [];\n this.historyIndex = 0;\n this.historySize = 1;\n }\n\n getMetadata(): {\n enabled: boolean;\n canUndo: boolean;\n canRedo: boolean;\n historyIndex: number;\n historySize: number;\n } {\n return {\n enabled: this.enableHistory,\n canUndo: this.canUndo,\n canRedo: this.canRedo,\n historyIndex: this.historyIndex,\n historySize: this.historySize,\n };\n }\n\n private compactOldestSnapshot() {\n const oldestPatch = this.patches.shift();\n if (!oldestPatch || this.baseSnapshot === null) {\n return;\n }\n\n this.baseSnapshot = applyHistoryPatch(\n this.baseSnapshot,\n oldestPatch,\n \"redo\",\n );\n this.historySize = Math.max(1, this.historySize - 1);\n this.historyIndex = Math.max(0, this.historyIndex - 1);\n }\n\n private getCapacity() {\n return Math.max(1, this.maxHistory);\n }\n}\n","import type { BitFieldChangeMeta, BitState } from \"../../contracts/types\";\nimport { getDeepValue, reindexFieldArrayMeta } from \"../../../utils\";\nimport { toPathPrefix } from \"../../shared/path-prefix\";\nimport {\n BitStoreOperation,\n patchStateOperation,\n} from \"../../engines/operation-engine\";\n\nexport interface BitArrayStorePort<T extends object> {\n getState: () => BitState<T>;\n setFieldWithMeta: (\n path: string,\n value: unknown,\n meta: BitFieldChangeMeta,\n ) => void;\n dispatch: (operation: BitStoreOperation<T>) => void;\n internalSaveSnapshot: () => void;\n unregisterPrefix?: (prefix: string) => void;\n}\n\nexport class BitArrayManager<T extends object = Record<string, unknown>> {\n constructor(private store: BitArrayStorePort<T>) {}\n\n pushItem(path: string, value: unknown) {\n this.mutateArrayWithSetField(path, (arr) => [...arr, value], {\n origin: \"array\",\n operation: \"push\",\n });\n }\n\n prependItem(path: string, value: unknown) {\n this.mutateArrayWithSetField(path, (arr) => [value, ...arr], {\n origin: \"array\",\n operation: \"prepend\",\n });\n }\n\n insertItem(path: string, index: number, value: unknown) {\n this.mutateArrayWithSetField(\n path,\n (arr) => {\n const next = [...arr];\n next.splice(index, 0, value);\n return next;\n },\n {\n origin: \"array\",\n operation: \"insert\",\n index,\n },\n );\n }\n\n removeItem(path: string, index: number) {\n const state = this.store.getState();\n const arr = getDeepValue(state.values, path);\n if (!Array.isArray(arr)) return;\n\n const previousArray = [...arr];\n\n if (this.store.unregisterPrefix) {\n this.store.unregisterPrefix(toPathPrefix(path, index));\n }\n\n const newArray = arr.filter((_, i) => i !== index);\n\n this.commitArrayMutationWithFieldPipeline({\n path,\n nextArray: newArray,\n meta: { origin: \"array\", operation: \"remove\", index },\n reindex: (currentIdx) => {\n if (currentIdx === index) {\n return null;\n }\n\n return currentIdx > index ? currentIdx - 1 : currentIdx;\n },\n });\n }\n\n swapItems(path: string, indexA: number, indexB: number) {\n const state = this.store.getState();\n const arr = [...(getDeepValue(state.values, path) || [])];\n [arr[indexA], arr[indexB]] = [arr[indexB], arr[indexA]];\n\n this.commitArrayMutationWithFieldPipeline({\n path,\n nextArray: arr,\n meta: {\n origin: \"array\",\n operation: \"swap\",\n from: indexA,\n to: indexB,\n },\n reindex: (currentIdx) => {\n if (currentIdx === indexA) {\n return indexB;\n }\n\n if (currentIdx === indexB) {\n return indexA;\n }\n\n return currentIdx;\n },\n });\n }\n\n moveItem(path: string, from: number, to: number) {\n const state = this.store.getState();\n const arr = [...(getDeepValue(state.values, path) || [])];\n const [item] = arr.splice(from, 1);\n arr.splice(to, 0, item);\n\n this.commitArrayMutationWithFieldPipeline({\n path,\n nextArray: arr,\n meta: {\n origin: \"array\",\n operation: \"move\",\n from,\n to,\n },\n reindex: (currentIdx) => {\n if (currentIdx === from) {\n return to;\n }\n\n if (from < to && currentIdx > from && currentIdx <= to) {\n return currentIdx - 1;\n }\n\n if (from > to && currentIdx >= to && currentIdx < from) {\n return currentIdx + 1;\n }\n\n return currentIdx;\n },\n });\n }\n\n replaceItems(path: string, items: unknown[]) {\n this.commitArrayMutationWithFieldPipeline({\n path,\n nextArray: items,\n meta: { origin: \"array\", operation: \"replace\" },\n reindex: (currentIdx) => (currentIdx < items.length ? currentIdx : null),\n });\n }\n\n clearItems(path: string) {\n if (this.store.unregisterPrefix) {\n this.store.unregisterPrefix(toPathPrefix(path));\n }\n\n this.commitArrayMutationWithFieldPipeline({\n path,\n nextArray: [],\n meta: { origin: \"array\", operation: \"clear\" },\n reindex: () => null,\n });\n }\n\n private mutateArrayWithSetField(\n path: string,\n mutate: (current: unknown[]) => unknown[],\n meta: BitFieldChangeMeta,\n ) {\n const current = getDeepValue(this.store.getState().values, path) || [];\n this.store.setFieldWithMeta(path, mutate(current), meta);\n this.store.internalSaveSnapshot();\n }\n\n private commitArrayMutationWithFieldPipeline(args: {\n path: string;\n nextArray: unknown[];\n meta: BitFieldChangeMeta;\n reindex: (currentIdx: number) => number | null;\n }) {\n const { path, nextArray, meta, reindex } = args;\n const previousState = this.store.getState();\n\n this.store.setFieldWithMeta(path, nextArray, meta);\n\n const reindexedMeta = reindexFieldArrayMeta(previousState, path, reindex);\n\n this.store.dispatch(\n patchStateOperation(\n {\n errors: reindexedMeta.errors,\n touched: reindexedMeta.touched,\n isValidating: reindexedMeta.isValidating,\n },\n [path],\n ),\n );\n\n this.store.internalSaveSnapshot();\n }\n}\n","import { BitErrors, BitState } from \"../../contracts/types\";\n\n/**\n * BitScopeManager\n *\n * Manages multi-scope forms and scope-based validation.\n * Scopes are groups of fields that can be validated and tracked independently,\n * useful for wizard-style forms or multi-section forms.\n */\nexport class BitScopeManager<T extends object = Record<string, unknown>> {\n constructor(\n private getState: () => BitState<T>,\n private getInitialValues: () => T,\n private getScopeFields: (scopeName: string) => string[],\n private isPathDirty: (path: string) => boolean,\n ) {}\n\n /**\n * Get validation status of a scope.\n * Returns whether the scope has errors, is dirty, and the error details.\n */\n getScopeStatus(scopeName: string) {\n const fields = this.getScopeFields(scopeName);\n const state = this.getState();\n\n const hasErrors = fields.some(\n (f) => !!state.errors[f as keyof BitErrors<T>],\n );\n\n const isDirty = fields.some((f) => this.isPathDirty(f));\n\n const errors = this.getScopeErrors(scopeName);\n\n return { hasErrors, isDirty, errors };\n }\n\n /**\n * Get all errors for fields in a specific scope.\n */\n getScopeErrors(scopeName: string): Record<string, string> {\n const fields = this.getScopeFields(scopeName);\n const state = this.getState();\n const result: Record<string, string> = {};\n\n for (const field of fields) {\n const error = state.errors[field as keyof BitErrors<T>];\n if (error) {\n result[field] = error;\n }\n }\n\n return result;\n }\n}\n","import { BitState } from \"../../contracts/types\";\nimport type { BitFieldMetadataProvider } from \"../../registry/field-metadata-provider\";\n\n/**\n * BitFieldQueryManager\n *\n * Provides query methods for field state without mutating.\n * All methods are read-only and delegate to appropriate managers.\n */\nexport class BitFieldQueryManager<T extends object = Record<string, unknown>> {\n private requiredValuesRef: T | null = null;\n\n constructor(\n private fieldMetadataProvider: BitFieldMetadataProvider<T>,\n private getState: () => BitState<T>,\n private isPathDirty: (path: string) => boolean,\n ) {}\n\n /**\n * Check if a field is hidden based on conditional logic.\n */\n isHidden<P extends string>(path: P): boolean {\n return this.fieldMetadataProvider.isHidden(path);\n }\n\n /**\n * Check if a field is required based on conditional logic.\n */\n isRequired<P extends string>(path: P): boolean {\n const values = this.getState().values;\n\n if (this.requiredValuesRef !== values) {\n this.requiredValuesRef = values;\n }\n\n return this.fieldMetadataProvider.isRequired(path, values);\n }\n\n /**\n * Check if a field has been modified from its initial value.\n */\n isFieldDirty(path: string): boolean {\n return this.isPathDirty(path);\n }\n\n /**\n * Check if a field is currently validating (async validation in progress).\n */\n isFieldValidating(path: string): boolean {\n return !!this.getState().isValidating[path];\n }\n\n isTouched(path: string): boolean {\n return !!this.getState().touched[path];\n }\n}\n","import { BitErrors, BitState } from \"../../contracts/types\";\nimport {\n BitStoreOperation,\n patchStateOperation,\n} from \"../../engines/operation-engine\";\n\n/**\n * BitErrorManager\n *\n * Manages error state for fields.\n * Handles setting individual errors, batch errors, and server errors.\n */\nexport class BitErrorManager<T extends object = Record<string, unknown>> {\n constructor(\n private getState: () => BitState<T>,\n private dispatch: (operation: BitStoreOperation<T>) => void,\n ) {}\n\n /**\n * Set or clear error for a single field.\n * Pass undefined to clear the error.\n */\n setError(path: string, message: string | undefined): void {\n const newErrors = {\n ...this.getState().errors,\n [path]: message,\n } as BitErrors<T>;\n\n if (!message) {\n delete newErrors[path as keyof BitErrors<T>];\n }\n\n this.dispatch(patchStateOperation({ errors: newErrors }));\n }\n\n /**\n * Set multiple field errors at once (merge behavior).\n */\n setErrors(errors: BitErrors<T>): void {\n this.dispatch(\n patchStateOperation({\n errors: { ...this.getState().errors, ...errors },\n }),\n );\n }\n\n /**\n * Set errors from server response (converts arrays to first element).\n * Useful for handling 422 validation error responses.\n */\n setServerErrors(serverErrors: Record<string, string[] | string>): void {\n const formattedErrors: BitErrors<T> = {};\n\n for (const [key, value] of Object.entries(serverErrors)) {\n formattedErrors[key as keyof BitErrors<T>] = Array.isArray(value)\n ? value[0]\n : value;\n }\n\n this.setErrors(formattedErrors);\n }\n}\n","/**\n * Computed Dependency Analyzer\n *\n * Detects cyclic dependencies in computed fields at initialization time.\n * Prevents runtime errors where computed fields don't stabilize.\n *\n * This replaces the runtime \"did not stabilize\" error with early, clear feedback during setup.\n */\n\n\nexport interface CyclicDependencyError {\n cycle: string[];\n paths: string[];\n message: string;\n}\n\n/**\n * Analyzes a set of computed field definitions for cyclic dependencies.\n *\n * @param entries - Computed field entries with their dependency information\n * @returns Array of detected cycles, empty if no cycles found\n *\n * @example\n * ```typescript\n * const entries = [\n * { path: 'total', compute: ..., dependsOn: ['price', 'quantity'] },\n * { path: 'price', compute: ..., dependsOn: ['total'] }, // CYCLE!\n * ];\n * const cycles = analyzeCyclicDependencies(entries);\n * if (cycles.length > 0) {\n * throw new Error(`Cyclic dependencies: ${cycles[0].message}`);\n * }\n * ```\n */\nexport function analyzeCyclicDependencies<T extends object>(\n entries: Array<{\n path: string;\n dependsOn?: readonly string[];\n }>,\n): CyclicDependencyError[] {\n const cycles: CyclicDependencyError[] = [];\n\n // Build adjacency list from dependencies\n const graph = new Map<string, Set<string>>();\n\n for (const entry of entries) {\n if (!graph.has(entry.path)) {\n graph.set(entry.path, new Set());\n }\n\n if (entry.dependsOn) {\n for (const dep of entry.dependsOn) {\n // Only track dependencies between computed fields\n // Ignore dependencies on form values (not computed fields)\n const depEntry = entries.find((e) => e.path === dep);\n if (depEntry) {\n graph.get(entry.path)!.add(dep);\n }\n }\n }\n }\n\n // DFS to find cycles\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n\n const hasCycle = (\n node: string,\n path: string[],\n ): CyclicDependencyError | null => {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n\n const neighbors = graph.get(node) || new Set();\n\n for (const neighbor of neighbors) {\n if (!visited.has(neighbor)) {\n const cycle = hasCycle(neighbor, [...path]);\n if (cycle) return cycle;\n } else if (recursionStack.has(neighbor)) {\n // Found a cycle\n const cycleStart = path.indexOf(neighbor);\n const cyclePath = [...path.slice(cycleStart), neighbor];\n\n return {\n cycle: cyclePath,\n paths: Array.from(graph.keys()).filter((p) => cyclePath.includes(p)),\n message: `Circular dependency detected: ${cyclePath.join(\n \" → \",\n )}. Check your computed field definitions.`,\n };\n }\n }\n\n recursionStack.delete(node);\n return null;\n };\n\n // Check each node for cycles\n for (const node of graph.keys()) {\n if (!visited.has(node)) {\n const cycle = hasCycle(node, []);\n if (cycle && !cycles.some((c) => c.message === cycle.message)) {\n cycles.push(cycle);\n }\n }\n }\n\n return cycles;\n}\n\n/**\n * Higher-order function that returns a validator for computed entries.\n * Useful for decorating BitStore initialization.\n *\n * @example\n * ```typescript\n * const validateComputeds = createComputedValidator();\n * const entries = getComputedEntries();\n * const errors = validateComputeds(entries);\n * if (errors.length > 0) {\n * console.error('Cyclic computeds:', errors);\n * throw new Error('Invalid computed field configuration');\n * }\n * ```\n */\nexport function createComputedValidator() {\n return function validate<T extends object>(\n entries: Array<{\n path: string;\n dependsOn?: readonly string[];\n }>,\n ): CyclicDependencyError[] {\n return analyzeCyclicDependencies(entries);\n };\n}\n","import type { BitStoreCapabilities } from \"./capabilities\";\n\nexport class BitStoreCapabilityRegistry<T extends object> {\n private readonly entries = new Map<\n keyof BitStoreCapabilities<T>,\n BitStoreCapabilities<T>[keyof BitStoreCapabilities<T>]\n >();\n\n register<K extends keyof BitStoreCapabilities<T>>(\n key: K,\n capability: BitStoreCapabilities<T>[K],\n ): void {\n this.entries.set(key, capability);\n }\n\n resolve<K extends keyof BitStoreCapabilities<T>>(\n key: K,\n ): BitStoreCapabilities<T>[K] {\n const capability = this.entries.get(key);\n\n if (!capability) {\n throw new Error(\n `BitStore capability \\\"${String(key)}\\\" não foi registrada.`,\n );\n }\n\n return capability as BitStoreCapabilities<T>[K];\n }\n\n toCapabilities(): BitStoreCapabilities<T> {\n return {\n validation: this.resolve(\"validation\"),\n lifecycle: this.resolve(\"lifecycle\"),\n history: this.resolve(\"history\"),\n arrays: this.resolve(\"arrays\"),\n scope: this.resolve(\"scope\"),\n query: this.resolve(\"query\"),\n error: this.resolve(\"error\"),\n };\n }\n}\n\nexport function createStoreCapabilityRegistry<T extends object>() {\n return new BitStoreCapabilityRegistry<T>();\n}\n","import { BitValidationManager } from \"../managers/features/validation-manager\";\nimport { BitLifecycleManager } from \"../managers/features/lifecycle-manager\";\nimport { BitHistoryManager } from \"../managers/features/history-manager\";\nimport {\n BitArrayManager,\n type BitArrayStorePort,\n} from \"../managers/features/array-manager\";\nimport { BitScopeManager } from \"../managers/features/scope-manager\";\nimport { BitFieldQueryManager } from \"../managers/features/field-query-manager\";\nimport { BitErrorManager } from \"../managers/features/error-manager\";\nimport { BitFieldRegistry } from \"../registry/field-registry\";\nimport { BitComputedManager } from \"../managers/core/computed-manager\";\nimport { analyzeCyclicDependencies } from \"../managers/core/computed-dependency-analyzer\";\nimport type { BitStoreOperation } from \"../engines/operation-engine\";\nimport { deepClone } from \"../../utils\";\nimport { applyValueDerivations } from \"../shared/value-derivation-pipeline\";\nimport type { BitStoreCapabilities } from \"./capabilities\";\nimport {\n createStoreCapabilityRegistry,\n type BitStoreCapabilityRegistry,\n} from \"./store-capability-registry\";\nimport type { BitFrameworkConfig } from \"../contracts/public/store-api-types\";\nimport type {\n BitLifecyclePorts,\n BitValidationManagerPort,\n} from \"../contracts/port-types\";\nimport type { BitFieldDefinition, BitState } from \"../contracts/types\";\n\nexport type BitStoreCapabilityPorts<T extends object> = {\n validationPort: BitValidationManagerPort<T>;\n lifecyclePorts: BitLifecyclePorts<T>;\n arrayPort: BitArrayStorePort<T>;\n config: BitFrameworkConfig<T>;\n getScopeFields(scopeName: string): string[];\n getState(): BitState<T>;\n dispatch(operation: BitStoreOperation<T>): void;\n getBaselineValues(): T;\n isPathDirty(path: string): boolean;\n};\n\nexport interface BitStoreCapabilityComposition<T extends object> {\n registry: BitStoreCapabilityRegistry<T>;\n capabilities: BitStoreCapabilities<T>;\n}\n\nfunction registerStoreCapabilities<T extends object>(args: {\n registry: BitStoreCapabilityRegistry<T>;\n ports: BitStoreCapabilityPorts<T>;\n fieldRegistry: BitFieldRegistry<T>;\n}) {\n const { registry, ports, fieldRegistry } = args;\n\n registry.register(\n \"validation\",\n new BitValidationManager<T>(ports.validationPort),\n );\n registry.register(\n \"lifecycle\",\n new BitLifecycleManager<T>(ports.lifecyclePorts),\n );\n registry.register(\n \"history\",\n new BitHistoryManager<T>(\n !!ports.config.history.enabled,\n ports.config.history.limit ?? 50,\n ),\n );\n registry.register(\"arrays\", new BitArrayManager<T>(ports.arrayPort));\n registry.register(\n \"scope\",\n new BitScopeManager<T>(\n () => ports.getState(),\n () => ports.getBaselineValues(),\n (scopeName) => ports.getScopeFields(scopeName),\n (path) => ports.isPathDirty(path),\n ),\n );\n registry.register(\n \"query\",\n new BitFieldQueryManager<T>(\n fieldRegistry,\n () => ports.getState(),\n (path) => ports.isPathDirty(path),\n ),\n );\n registry.register(\n \"error\",\n new BitErrorManager<T>(\n () => ports.getState(),\n (operation) => ports.dispatch(operation),\n ),\n );\n}\n\nexport function composeStoreCapabilities<T extends object>(args: {\n ports: BitStoreCapabilityPorts<T>;\n fieldRegistry: BitFieldRegistry<T>;\n}): BitStoreCapabilityComposition<T> {\n const { ports, fieldRegistry } = args;\n const registry = createStoreCapabilityRegistry<T>();\n registerStoreCapabilities({ registry, ports, fieldRegistry });\n\n return {\n registry,\n capabilities: registry.toCapabilities(),\n };\n}\n\nexport function createInitialStoreState<T extends object>(args: {\n config: BitFrameworkConfig<T>;\n fieldRegistry: BitFieldRegistry<T>;\n computedManager: BitComputedManager<T>;\n}): BitState<T> {\n const { config, fieldRegistry, computedManager } = args;\n\n const initialValues = deepClone(config.initialValues);\n\n if (config.fields) {\n Object.entries(config.fields).forEach(([path, fieldConfig]) => {\n fieldRegistry.register(\n path,\n fieldConfig as BitFieldDefinition<T>,\n initialValues,\n );\n });\n }\n\n const computedCycles = analyzeCyclicDependencies(\n fieldRegistry.getComputedEntries(),\n );\n\n if (computedCycles.length > 0) {\n throw new Error(computedCycles[0].message);\n }\n\n const initialDerivedValues = applyValueDerivations({\n values: initialValues,\n normalizerEntries: fieldRegistry.getNormalizerEntries(),\n applyComputed: (values, changedPaths) =>\n computedManager.apply(values, changedPaths),\n });\n\n return {\n values: initialDerivedValues,\n errors: {},\n touched: {},\n isValidating: {},\n persist: {\n isSaving: false,\n isRestoring: false,\n error: null,\n },\n isValid: true,\n isSubmitting: false,\n isDirty: false,\n };\n}\n","import type {\n BitFieldChangeMeta,\n BitFieldDefinition,\n BitState,\n BitTransformFn,\n} from \"../contracts/types\";\nimport type { BitFrameworkConfig } from \"../contracts/public/store-api-types\";\nimport type { BitValidationOptions } from \"../contracts/public/meta-types\";\nimport type {\n BitValidationTriggerOptions,\n BitLifecycleFieldUpdatePort,\n BitLifecyclePorts,\n BitLifecycleSubmitPort,\n BitLifecycleValuesPort,\n BitValidationManagerPort,\n} from \"../contracts/port-types\";\nimport type { BitArrayStorePort } from \"../managers/features/array-manager\";\nimport type { BitStoreOperation } from \"../engines/operation-engine\";\nimport { BitFieldRegistry } from \"../registry/field-registry\";\nimport { BitDirtyManager } from \"../managers/core/dirty-manager\";\nimport type { BitStoreEffectEngine } from \"../engines/effect-engine\";\n\n// Interfaces locais usadas pelas deps do lifecycle port\ninterface BitValidationAccess<T extends object> {\n clear(path: string): void;\n trigger(scopeFields?: string[], options?: BitValidationTriggerOptions): void;\n handleAsync(path: string, value: unknown): void;\n cancelAll(): void;\n validate(options?: BitValidationOptions): Promise<boolean>;\n hasValidationsInProgress(scopeFields?: string[]): boolean;\n}\n\ninterface BitHistoryAccess<T extends object> {\n reset(initialValues: T): void;\n}\n\n// ---------------------------------------------------------------------------\n// Validation port\n// ---------------------------------------------------------------------------\n\nexport interface BitValidationPortDeps<T extends object> {\n config: BitFrameworkConfig<T>;\n fieldRegistry: BitFieldRegistry<T>;\n getState(): BitState<T>;\n dispatch(operation: BitStoreOperation<T>): void;\n setError(path: string, message: string | undefined): void;\n validate(options?: BitValidationOptions): Promise<boolean>;\n getFieldConfig(path: string): BitFieldDefinition<T> | undefined;\n getScopeFields(scopeName: string): string[];\n getEffects(): BitStoreEffectEngine<T>;\n}\n\nexport function createValidationPort<T extends object>(\n deps: BitValidationPortDeps<T>,\n): BitValidationManagerPort<T> {\n return {\n getState: deps.getState,\n dispatch: deps.dispatch,\n setError: deps.setError,\n validate: deps.validate,\n getFieldConfig: deps.getFieldConfig,\n forEachFieldConfig: (callback) =>\n deps.fieldRegistry.forEachFieldConfig((config, path) =>\n callback(config, path),\n ),\n getScopeFields: deps.getScopeFields,\n config: deps.config,\n getRequiredErrors: (values) => deps.fieldRegistry.getRequiredErrors(values),\n getHiddenFields: () => deps.fieldRegistry.getHiddenFields(),\n emitBeforeValidate: (event) => deps.getEffects().beforeValidate(event),\n emitAfterValidate: (event) => deps.getEffects().afterValidate(event),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Lifecycle port\n// ---------------------------------------------------------------------------\n\nexport interface BitLifecyclePortDeps<T extends object> {\n config: BitFrameworkConfig<T>;\n fieldRegistry: BitFieldRegistry<T>;\n dirtyManager: BitDirtyManager<T>;\n getState(): BitState<T>;\n dispatch(operation: BitStoreOperation<T>): void;\n saveHistorySnapshot(): void;\n runStateBatch<TResult>(callback: () => TResult): TResult;\n getTransformEntries(): [string, BitTransformFn<T>][];\n getBaselineValues(): T;\n setBaselineValues(values: T): void;\n getValidation(): BitValidationAccess<T>;\n getHistory(): BitHistoryAccess<T>;\n getEffects(): BitStoreEffectEngine<T>;\n}\n\nexport function createLifecyclePort<T extends object>(\n deps: BitLifecyclePortDeps<T>,\n): BitLifecyclePorts<T> {\n const fieldUpdate: BitLifecycleFieldUpdatePort<T> = {\n getState: deps.getState,\n dispatch: deps.dispatch,\n config: deps.config,\n getFieldConfig: (path) => deps.fieldRegistry.getFieldConfig(path),\n updateDependencies: (changedPath, currentValues, newValues) =>\n deps.fieldRegistry.updateDependencies(\n changedPath,\n currentValues,\n newValues,\n ),\n hasDependentFields: (path) => deps.fieldRegistry.hasDependents(path),\n isFieldHidden: (path) => deps.fieldRegistry.isHidden(path),\n clearFieldValidation: (path) => deps.getValidation().clear(path),\n triggerValidation: (scopeFields, options) =>\n deps.getValidation().trigger(scopeFields, options),\n handleFieldAsyncValidation: (path, value) =>\n deps.getValidation().handleAsync(path, value),\n updateDirtyForPath: (path, nextValues, baselineValues) =>\n deps.dirtyManager.updateForPath(path, nextValues, baselineValues),\n getBaselineValues: deps.getBaselineValues,\n emitFieldChange: (event) => deps.getEffects().onFieldChange(event),\n };\n\n const values: BitLifecycleValuesPort<T> = {\n getState: deps.getState,\n dispatch: deps.dispatch,\n internalSaveSnapshot: deps.saveHistorySnapshot,\n evaluateAllDependencies: (newValues) =>\n deps.fieldRegistry.evaluateAll(newValues),\n cancelAllValidations: () => deps.getValidation().cancelAll(),\n validateNow: (options) => deps.getValidation().validate(options),\n rebuildDirtyState: (nextValues, baselineValues) =>\n deps.dirtyManager.rebuild(nextValues, baselineValues),\n clearDirtyState: deps.dirtyManager.clear.bind(deps.dirtyManager),\n getBaselineValues: deps.getBaselineValues,\n setBaselineValues: deps.setBaselineValues,\n resetHistory: (initialValues) => deps.getHistory().reset(initialValues),\n emitFieldChange: (event) => deps.getEffects().onFieldChange(event),\n triggerValidation: (scopeFields, options) =>\n deps.getValidation().trigger(scopeFields, options),\n };\n\n const submit: BitLifecycleSubmitPort<T> = {\n getState: deps.getState,\n dispatch: deps.dispatch,\n batchStateUpdates: deps.runStateBatch,\n config: deps.config,\n getTransformEntries: deps.getTransformEntries,\n getHiddenFields: () => deps.fieldRegistry.getHiddenFields(),\n cancelAllValidations: () => deps.getValidation().cancelAll(),\n validateNow: (options) => deps.getValidation().validate(options),\n hasValidationsInProgress: (scopeFields) =>\n deps.getValidation().hasValidationsInProgress(scopeFields),\n buildDirtyValues: (values) => deps.dirtyManager.buildDirtyValues(values),\n emitBeforeSubmit: (event) => deps.getEffects().beforeSubmit(event),\n emitAfterSubmit: (event) => deps.getEffects().afterSubmit(event),\n emitOperationalError: (event) =>\n deps.getEffects().reportOperationalError(event),\n };\n\n return {\n fieldUpdate,\n values,\n submit,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Array port\n// ---------------------------------------------------------------------------\n\nexport interface BitArrayPortDeps<T extends object> {\n getState(): BitState<T>;\n dispatch(operation: BitStoreOperation<T>): void;\n setFieldWithMeta(\n path: string,\n value: unknown,\n meta: BitFieldChangeMeta,\n ): void;\n unregisterPrefix(prefix: string): void;\n saveHistorySnapshot(): void;\n}\n\nexport function createArrayPort<T extends object>(\n deps: BitArrayPortDeps<T>,\n): BitArrayStorePort<T> {\n return {\n getState: deps.getState,\n setFieldWithMeta: deps.setFieldWithMeta,\n dispatch: deps.dispatch,\n internalSaveSnapshot: deps.saveHistorySnapshot,\n unregisterPrefix: deps.unregisterPrefix,\n };\n}\n","import {\n createArrayPort,\n createLifecyclePort,\n createValidationPort,\n} from \"./capability-ports\";\nimport {\n composeStoreCapabilities,\n type BitStoreCapabilityComposition,\n} from \"./store-bootstrap\";\nimport type { BitStoreEffectEngine } from \"../engines/effect-engine\";\nimport type { BitStoreOperation } from \"../engines/operation-engine\";\nimport type { BitValidationTriggerOptions } from \"../contracts/port-types\";\nimport type { BitFrameworkConfig } from \"../contracts/public/store-api-types\";\nimport type {\n BitFieldChangeMeta,\n BitFieldDefinition,\n BitState,\n BitTransformFn,\n} from \"../contracts/types\";\nimport type { BitFieldRegistry } from \"../registry/field-registry\";\nimport type { BitDirtyManager } from \"../managers/core/dirty-manager\";\nimport type { BitBaselineManager } from \"../managers/core/baseline-manager\";\nimport type { BitNormalizerEntry } from \"../registry/field-catalog\";\nimport type { BitStoreCapabilities } from \"./capabilities\";\n\nexport interface BitStoreRuntimeStateAccess<T extends object> {\n getState(): BitState<T>;\n dispatch(operation: BitStoreOperation<T>): void;\n saveHistorySnapshot(): void;\n runStateBatch<TResult>(callback: () => TResult): TResult;\n}\n\nexport interface BitStoreRuntimeFieldAccess<T extends object> {\n getFieldConfig(path: string): BitFieldDefinition<T> | undefined;\n getScopeFields(scopeName: string): string[];\n getNormalizerEntries(): BitNormalizerEntry<T>[];\n getTransformEntries(): [string, BitTransformFn<T>][];\n}\n\nexport interface BitStoreRuntimeFeatureAccess<T extends object> {\n getEffects(): BitStoreEffectEngine<T>;\n getHistory(): BitStoreCapabilities<T>[\"history\"];\n getValidation(): BitStoreCapabilities<T>[\"validation\"];\n}\n\nexport interface BitStoreRuntimeActions<T extends object> {\n setError(path: string, message: string | undefined): void;\n validate(options?: {\n scope?: string;\n scopeFields?: string[];\n }): Promise<boolean>;\n setFieldWithMeta(\n path: string,\n value: unknown,\n meta?: BitFieldChangeMeta,\n ): void;\n unregisterPrefix(prefix: string): void;\n triggerValidation(\n scopeFields?: string[],\n options?: BitValidationTriggerOptions,\n ): void;\n}\n\nexport interface BitStoreRuntimeContext<T extends object> {\n stateAccess: BitStoreRuntimeStateAccess<T>;\n fieldAccess: BitStoreRuntimeFieldAccess<T>;\n featureAccess: BitStoreRuntimeFeatureAccess<T>;\n actions: BitStoreRuntimeActions<T>;\n}\n\nexport interface ComposeRuntimeFeatureCapabilitiesArgs<T extends object> {\n config: BitFrameworkConfig<T>;\n fieldRegistry: BitFieldRegistry<T>;\n dirtyManager: BitDirtyManager<T>;\n baselineManager: BitBaselineManager<T>;\n runtimeContext: BitStoreRuntimeContext<T>;\n}\n\nexport function composeRuntimeFeatureCapabilities<T extends object>(\n args: ComposeRuntimeFeatureCapabilitiesArgs<T>,\n): BitStoreCapabilityComposition<T> {\n const {\n config,\n fieldRegistry,\n dirtyManager,\n baselineManager,\n runtimeContext,\n } = args;\n const { stateAccess, fieldAccess, featureAccess, actions } = runtimeContext;\n\n const validationPort = createValidationPort<T>({\n config,\n fieldRegistry,\n getState: stateAccess.getState,\n dispatch: stateAccess.dispatch,\n setError: actions.setError,\n validate: actions.validate,\n getFieldConfig: fieldAccess.getFieldConfig,\n getScopeFields: fieldAccess.getScopeFields,\n getEffects: featureAccess.getEffects,\n });\n\n const lifecyclePorts = createLifecyclePort<T>({\n config,\n fieldRegistry,\n dirtyManager,\n getState: stateAccess.getState,\n dispatch: stateAccess.dispatch,\n saveHistorySnapshot: stateAccess.saveHistorySnapshot,\n runStateBatch: stateAccess.runStateBatch,\n getTransformEntries: fieldAccess.getTransformEntries,\n getBaselineValues: () => baselineManager.getValues(),\n setBaselineValues: (values) => baselineManager.setValues(values),\n getValidation: featureAccess.getValidation,\n getHistory: featureAccess.getHistory,\n getEffects: featureAccess.getEffects,\n });\n\n const arrayPort = createArrayPort<T>({\n getState: stateAccess.getState,\n dispatch: stateAccess.dispatch,\n setFieldWithMeta: (path, value, meta) =>\n actions.setFieldWithMeta(path, value, meta),\n unregisterPrefix: actions.unregisterPrefix,\n saveHistorySnapshot: stateAccess.saveHistorySnapshot,\n });\n\n return composeStoreCapabilities<T>({\n ports: {\n validationPort,\n lifecyclePorts,\n arrayPort,\n config,\n getScopeFields: fieldAccess.getScopeFields,\n getState: stateAccess.getState,\n dispatch: stateAccess.dispatch,\n getBaselineValues: () => baselineManager.getValues(),\n isPathDirty: (path) => dirtyManager.isPathDirty(path),\n },\n fieldRegistry,\n });\n}\n","import { BitSubscriptionEngine } from \"../engines/subscription-engine\";\nimport { createInitialStoreState } from \"./store-bootstrap\";\nimport type { BitStoreCapabilityRegistry } from \"./store-capability-registry\";\nimport type { BitFrameworkConfig } from \"../contracts/public/store-api-types\";\nimport type {\n BitConfig,\n BitState,\n} from \"../contracts/types\";\nimport type { BitFieldRegistry } from \"../registry/field-registry\";\nimport type { BitComputedManager } from \"../managers/core/computed-manager\";\nimport type { BitDirtyManager } from \"../managers/core/dirty-manager\";\nimport type { BitBaselineManager } from \"../managers/core/baseline-manager\";\nimport {\n composeRuntimeFeatureCapabilities,\n type BitStoreRuntimeContext,\n} from \"./store-runtime-feature-composition\";\n\nexport interface BitStoreRuntimeMembers<T extends object> {\n state: BitState<T>;\n subscriptions: BitSubscriptionEngine<T>;\n capabilityRegistry: BitStoreCapabilityRegistry<T>;\n storeId: string;\n}\n\nexport interface CreateStoreRuntimeArgs<T extends object> {\n rawConfig: BitConfig<T>;\n config: BitFrameworkConfig<T>;\n fieldRegistry: BitFieldRegistry<T>;\n computedManager: BitComputedManager<T>;\n dirtyManager: BitDirtyManager<T>;\n baselineManager: BitBaselineManager<T>;\n runtimeContext: BitStoreRuntimeContext<T>;\n}\n\nexport function createStoreRuntime<T extends object>(\n args: CreateStoreRuntimeArgs<T>,\n): BitStoreRuntimeMembers<T> {\n const {\n config,\n fieldRegistry,\n dirtyManager,\n computedManager,\n rawConfig,\n baselineManager,\n runtimeContext,\n } = args;\n const { stateAccess, fieldAccess, featureAccess, actions } = runtimeContext;\n\n const capabilityComposition = composeRuntimeFeatureCapabilities<T>({\n config,\n fieldRegistry,\n dirtyManager,\n baselineManager,\n runtimeContext: {\n stateAccess,\n fieldAccess,\n featureAccess,\n actions,\n },\n });\n\n const state = createInitialStoreState<T>({\n config,\n fieldRegistry,\n computedManager,\n });\n\n const subscriptions = new BitSubscriptionEngine<T>(\n stateAccess.getState,\n config.subscriptionCacheSize,\n );\n\n const storeId =\n rawConfig.storeId ||\n config.name ||\n config.idFactory({\n scope: \"store\",\n storeName: config.name,\n });\n\n return {\n state,\n subscriptions,\n capabilityRegistry: capabilityComposition.registry,\n storeId,\n };\n}\n","import type { BitState } from \"../contracts/types\";\nimport type { BitStateUpdateResult } from \"./state-update-engine\";\n\nexport interface BitStoreBatchState<T extends object> {\n depth: number;\n pendingState: BitState<T> | null;\n changedPathSet: Set<string> | null;\n valuesChanged: boolean;\n /** When true, a history snapshot should be recorded the moment the top-level\n * batch flushes. This allows multiple mutations inside a `transaction()` –\n * including individual array operations – to produce a single history entry\n * instead of one per mutation. */\n pendingHistorySnapshot: boolean;\n}\n\nexport interface BitStoreBatchFlushResult<T extends object> {\n nextState: BitState<T>;\n changedPaths?: Set<string>;\n valuesChanged: boolean;\n}\n\nexport function createStoreBatchState<\n T extends object,\n>(): BitStoreBatchState<T> {\n return {\n depth: 0,\n pendingState: null,\n changedPathSet: null,\n valuesChanged: false,\n pendingHistorySnapshot: false,\n };\n}\n\nexport function beginStoreBatch<T extends object>(\n batchState: BitStoreBatchState<T>,\n): void {\n batchState.depth += 1;\n}\n\nexport function endStoreBatch<T extends object>(\n batchState: BitStoreBatchState<T>,\n): boolean {\n batchState.depth -= 1;\n return batchState.depth === 0;\n}\n\nexport function getEffectiveStoreState<T extends object>(\n currentState: BitState<T>,\n batchState: BitStoreBatchState<T>,\n): BitState<T> {\n return batchState.pendingState ?? currentState;\n}\n\nexport function trackBatchedStoreUpdate<T extends object>(\n batchState: BitStoreBatchState<T>,\n updateResult: BitStateUpdateResult<T>,\n): void {\n batchState.pendingState = updateResult.nextState;\n batchState.valuesChanged ||= updateResult.valuesChanged;\n if (updateResult.valuesChanged) {\n batchState.pendingHistorySnapshot = true;\n }\n\n if (updateResult.changedPaths && updateResult.changedPaths.length > 0) {\n const pathSet = batchState.changedPathSet ?? new Set<string>();\n updateResult.changedPaths.forEach((path) => pathSet.add(path));\n batchState.changedPathSet = pathSet;\n }\n}\n\nexport function flushStoreBatchState<T extends object>(args: {\n currentState: BitState<T>;\n batchState: BitStoreBatchState<T>;\n applyValueDerivations: (values: T, changedPaths?: readonly string[]) => T;\n}): BitStoreBatchFlushResult<T> | null {\n const { currentState, batchState, applyValueDerivations } = args;\n\n if (!batchState.pendingState) {\n batchState.pendingHistorySnapshot = false;\n return null;\n }\n\n let nextState = batchState.pendingState;\n let changedPaths = batchState.changedPathSet ?? undefined;\n const valuesChanged = batchState.valuesChanged;\n\n if (valuesChanged) {\n nextState = {\n ...nextState,\n values: applyValueDerivations(\n nextState.values,\n changedPaths ? [...changedPaths] : undefined,\n ),\n };\n }\n\n batchState.pendingState = null;\n batchState.changedPathSet = null;\n batchState.valuesChanged = false;\n // Note: pendingHistorySnapshot is reset by the caller after it records the snapshot.\n\n return {\n nextState: nextState ?? currentState,\n changedPaths,\n valuesChanged,\n };\n}\n","import type { BitErrors, BitState } from \"../contracts/types\";\nimport { hasAnyError } from \"../shared/error-map\";\n\nfunction normalizeErrors<T extends object>(errors: BitErrors<T>): BitErrors<T> {\n let hasUndefined = false;\n\n for (const message of Object.values(errors)) {\n if (message === undefined) {\n hasUndefined = true;\n break;\n }\n }\n\n if (!hasUndefined) {\n return errors;\n }\n\n const normalized: BitErrors<T> = {};\n\n Object.entries(errors).forEach(([path, message]) => {\n const typedMessage = message as string | undefined;\n\n if (typedMessage === undefined) {\n return;\n }\n\n normalized[path as keyof BitErrors<T>] = typedMessage;\n });\n\n return normalized;\n}\n\nexport interface BitStateUpdateResult<T extends object> {\n nextState: BitState<T>;\n changedPaths?: string[];\n valuesChanged: boolean;\n}\n\nexport function applyStateUpdate<T extends object>(args: {\n currentState: BitState<T>;\n partialState: Partial<BitState<T>>;\n changedPaths?: string[];\n applyValueDerivations?: (values: T, changedPaths?: readonly string[]) => T;\n applyComputedValues?: (values: T) => T;\n}): BitStateUpdateResult<T> {\n const {\n currentState,\n partialState,\n changedPaths,\n applyValueDerivations,\n applyComputedValues,\n } = args;\n const deriveValues =\n applyValueDerivations ??\n ((values: T) =>\n applyComputedValues ? applyComputedValues(values) : values);\n\n const nextState: BitState<T> = { ...currentState, ...partialState };\n const valuesChanged = !!partialState.values;\n\n if (partialState.values) {\n nextState.values = deriveValues(partialState.values, changedPaths);\n }\n\n if (partialState.errors) {\n nextState.errors = normalizeErrors(partialState.errors as BitErrors<T>);\n nextState.isValid = !hasAnyError(\n nextState.errors as Record<string, unknown>,\n );\n }\n\n const explicitChangedPaths =\n changedPaths && changedPaths.length > 0 ? changedPaths : undefined;\n const inferredChangedPaths = inferChangedPaths(partialState);\n const effectiveChangedPaths = mergeChangedPaths(\n explicitChangedPaths,\n inferredChangedPaths,\n );\n\n return {\n nextState,\n changedPaths: effectiveChangedPaths,\n valuesChanged,\n };\n}\n\nfunction inferChangedPaths<T extends object>(\n partialState: Partial<BitState<T>>,\n): string[] | undefined {\n const changedPaths = new Set<string>();\n\n // Itera os três dicionários de path em único passo para evitar\n // três Object.keys() + três forEach() separados.\n const pathMaps = [\n partialState.errors,\n partialState.touched,\n partialState.isValidating,\n ] as const;\n for (const map of pathMaps) {\n if (map) {\n for (const path in map) {\n changedPaths.add(path);\n }\n }\n }\n\n if (partialState.persist) {\n changedPaths.add(\"persist\");\n }\n\n if (\"isValid\" in partialState) {\n changedPaths.add(\"isValid\");\n }\n\n if (\"isDirty\" in partialState) {\n changedPaths.add(\"isDirty\");\n }\n\n if (\"isSubmitting\" in partialState) {\n changedPaths.add(\"isSubmitting\");\n }\n\n return changedPaths.size > 0 ? Array.from(changedPaths) : undefined;\n}\n\nfunction mergeChangedPaths(\n explicitChangedPaths?: string[],\n inferredChangedPaths?: string[],\n): string[] | undefined {\n if (!explicitChangedPaths?.length) {\n return inferredChangedPaths;\n }\n\n if (!inferredChangedPaths?.length) {\n return explicitChangedPaths;\n }\n\n const merged = new Set<string>();\n\n for (const path of explicitChangedPaths) {\n merged.add(path);\n }\n\n for (const path of inferredChangedPaths) {\n merged.add(path);\n }\n\n return Array.from(merged);\n}\n","import type { BitState } from \"../contracts/types\";\nimport {\n BitStatePatchOperation,\n BitStoreOperation,\n patchStateOperation,\n} from \"./operation-engine\";\nimport { applyStateUpdate } from \"./state-update-engine\";\nimport {\n flushStoreBatchState,\n getEffectiveStoreState,\n trackBatchedStoreUpdate,\n type BitStoreBatchState,\n} from \"./store-batch-engine\";\n\nfunction assertNever(value: never): never {\n throw new Error(\n `BitStore: unsupported operation kind: ${String((value as { kind?: unknown }).kind)}`,\n );\n}\n\nfunction routeStoreOperation<T extends object>(\n currentState: Readonly<BitState<T>>,\n operation: BitStoreOperation<T>,\n): BitStatePatchOperation<T> | null {\n switch (operation.kind) {\n case \"state.patch\":\n return operation;\n\n case \"field.touchMany\": {\n if (operation.paths.length === 0) {\n return null;\n }\n\n const touched = { ...currentState.touched };\n for (const path of operation.paths) {\n touched[path as keyof typeof touched] = true;\n }\n\n return patchStateOperation({ touched }, operation.paths);\n }\n\n case \"form.persistMeta\":\n return patchStateOperation({\n persist: {\n ...currentState.persist,\n ...operation.patch,\n },\n });\n\n case \"history.apply\":\n return patchStateOperation(\n {\n values: operation.values,\n isDirty: operation.isDirty,\n },\n [\"*\"],\n );\n\n case \"validation.commit\":\n return patchStateOperation({\n errors: operation.errors,\n isValid: operation.isValid,\n });\n\n default:\n return assertNever(operation);\n }\n}\n\nfunction executeStatePatchOperation<T extends object>(args: {\n currentState: BitState<T>;\n operation: BitStatePatchOperation<T>;\n applyValueDerivations: (values: T, changedPaths?: readonly string[]) => T;\n}) {\n const { currentState, operation, applyValueDerivations } = args;\n\n const hasValuesPatch = Object.prototype.hasOwnProperty.call(\n operation.partialState,\n \"values\",\n );\n const effectiveChangedPaths =\n operation.changedPaths ?? (hasValuesPatch ? [\"*\"] : undefined);\n\n return applyStateUpdate({\n currentState,\n partialState: operation.partialState,\n changedPaths: effectiveChangedPaths,\n applyValueDerivations,\n });\n}\n\nfunction executeStoreOperation<T extends object>(args: {\n currentState: BitState<T>;\n operation: BitStoreOperation<T>;\n applyValueDerivations: (values: T, changedPaths?: readonly string[]) => T;\n}) {\n const { currentState, operation, applyValueDerivations } = args;\n const patchOperation = routeStoreOperation(currentState, operation);\n\n if (!patchOperation) {\n return null;\n }\n\n return executeStatePatchOperation({\n currentState,\n operation: patchOperation,\n applyValueDerivations: (values, changedPaths) =>\n patchOperation.skipComputed\n ? values\n : applyValueDerivations(values, changedPaths),\n });\n}\n\nexport function dispatchStoreKernelOperation<T extends object>(args: {\n state: BitState<T>;\n batchState: BitStoreBatchState<T>;\n operation: BitStoreOperation<T>;\n applyValueDerivations: (values: T, changedPaths?: readonly string[]) => T;\n onStateCommitted: (payload: {\n nextState: BitState<T>;\n changedPaths?: Iterable<string>;\n valuesChanged: boolean;\n }) => void;\n}): BitState<T> {\n const {\n state,\n batchState,\n operation,\n applyValueDerivations,\n onStateCommitted,\n } = args;\n\n const currentState = getEffectiveStoreState(state, batchState);\n\n if (batchState.depth > 0) {\n const updateResult = executeStoreOperation({\n currentState,\n operation,\n applyValueDerivations: (values) => values,\n });\n\n if (!updateResult) {\n return state;\n }\n\n trackBatchedStoreUpdate(batchState, updateResult);\n return state;\n }\n\n const updateResult = executeStoreOperation({\n currentState: state,\n operation,\n applyValueDerivations,\n });\n\n if (!updateResult) {\n return state;\n }\n\n onStateCommitted({\n nextState: updateResult.nextState,\n changedPaths: updateResult.changedPaths,\n valuesChanged: updateResult.valuesChanged,\n });\n\n return updateResult.nextState;\n}\n\nexport function flushStoreKernelBatch<T extends object>(args: {\n state: BitState<T>;\n batchState: BitStoreBatchState<T>;\n applyValueDerivations: (values: T, changedPaths?: readonly string[]) => T;\n onStateCommitted: (payload: {\n nextState: BitState<T>;\n changedPaths?: Iterable<string>;\n valuesChanged: boolean;\n }) => void;\n}): BitState<T> {\n const { state, batchState, applyValueDerivations, onStateCommitted } = args;\n\n const flushResult = flushStoreBatchState({\n currentState: state,\n batchState,\n applyValueDerivations,\n });\n\n if (!flushResult) {\n return state;\n }\n\n onStateCommitted({\n nextState: flushResult.nextState,\n changedPaths: flushResult.changedPaths,\n valuesChanged: flushResult.valuesChanged,\n });\n\n return flushResult.nextState;\n}\n","import {\n beginStoreBatch,\n endStoreBatch,\n type BitStoreBatchState,\n} from \"../engines/store-batch-engine\";\nimport {\n dispatchStoreKernelOperation,\n flushStoreKernelBatch,\n} from \"../engines/store-commit-engine\";\nimport type { BitStoreOperation } from \"../engines/operation-engine\";\nimport type { BitState } from \"../contracts/types\";\n\nexport function runStoreStateBatch<T extends object, TResult>(args: {\n batchState: BitStoreBatchState<T>;\n callback: () => TResult;\n flushBatchedStateUpdates: () => void;\n}): TResult {\n const { batchState, callback, flushBatchedStateUpdates } = args;\n beginStoreBatch(batchState);\n\n try {\n return callback();\n } finally {\n if (endStoreBatch(batchState)) {\n flushBatchedStateUpdates();\n }\n }\n}\n\nexport function commitStoreStateUpdate<T extends object>(args: {\n payload: {\n nextState: BitState<T>;\n changedPaths?: Iterable<string>;\n valuesChanged: boolean;\n };\n setState: (state: BitState<T>) => void;\n notifySubscriptions: (\n state: BitState<T>,\n changedPaths?: Iterable<string>,\n ) => void;\n notifyEffects: (state: BitState<T>, valuesChanged: boolean) => void;\n}): void {\n const { payload, setState, notifySubscriptions, notifyEffects } = args;\n setState(payload.nextState);\n notifySubscriptions(payload.nextState, payload.changedPaths);\n notifyEffects(payload.nextState, payload.valuesChanged);\n}\n\nexport function dispatchStoreStateOperation<T extends object>(args: {\n state: BitState<T>;\n batchState: BitStoreBatchState<T>;\n operation: BitStoreOperation<T>;\n applyValueDerivations: (values: T, changedPaths?: readonly string[]) => T;\n onStateCommitted: (payload: {\n nextState: BitState<T>;\n changedPaths?: Iterable<string>;\n valuesChanged: boolean;\n }) => void;\n}): BitState<T> {\n const {\n state,\n batchState,\n operation,\n applyValueDerivations,\n onStateCommitted,\n } = args;\n\n return dispatchStoreKernelOperation({\n state,\n batchState,\n operation,\n applyValueDerivations,\n onStateCommitted,\n });\n}\n\nexport function saveStoreHistorySnapshot<T extends object>(args: {\n batchState: BitStoreBatchState<T>;\n values: T;\n saveHistory: (values: T) => void;\n}): void {\n const { batchState, values, saveHistory } = args;\n\n if (batchState.depth > 0) {\n batchState.pendingHistorySnapshot = true;\n return;\n }\n\n saveHistory(values);\n}\n\nexport function flushStoreBatchedStateUpdates<T extends object>(args: {\n state: BitState<T>;\n batchState: BitStoreBatchState<T>;\n applyValueDerivations: (values: T, changedPaths?: readonly string[]) => T;\n onStateCommitted: (payload: {\n nextState: BitState<T>;\n changedPaths?: Iterable<string>;\n valuesChanged: boolean;\n }) => void;\n saveHistory: (values: T) => void;\n}): BitState<T> {\n const {\n state,\n batchState,\n applyValueDerivations,\n onStateCommitted,\n saveHistory,\n } = args;\n\n const nextState = flushStoreKernelBatch({\n state,\n batchState,\n applyValueDerivations,\n onStateCommitted,\n });\n\n if (batchState.pendingHistorySnapshot) {\n batchState.pendingHistorySnapshot = false;\n saveHistory(nextState.values);\n }\n\n return nextState;\n}\n","import {\n createStoreBatchState,\n getEffectiveStoreState,\n type BitStoreBatchState,\n} from \"../engines/store-batch-engine\";\nimport type { BitStoreEffectEngine } from \"../engines/effect-engine\";\nimport type { BitStoreOperation } from \"../engines/operation-engine\";\nimport type { BitSubscriptionEngine } from \"../engines/subscription-engine\";\nimport type { BitState } from \"../contracts/types\";\nimport type { BitStoreCapabilities } from \"./capabilities\";\nimport type { BitStoreCapabilityRegistry } from \"./store-capability-registry\";\nimport {\n commitStoreStateUpdate,\n dispatchStoreStateOperation,\n flushStoreBatchedStateUpdates,\n runStoreStateBatch,\n saveStoreHistorySnapshot,\n} from \"./store-state-ops\";\nimport { getHistorySubscriptionPath } from \"../../history-status\";\n\nexport interface BitStoreRuntimeKernelArgs<T extends object> {\n state: BitState<T>;\n subscriptions: BitSubscriptionEngine<T>;\n effects: BitStoreEffectEngine<T>;\n capabilityRegistry: BitStoreCapabilityRegistry<T>;\n applyValueDerivations?: (values: T, changedPaths?: readonly string[]) => T;\n}\n\nexport class BitStoreRuntimeKernel<T extends object> {\n private state: BitState<T>;\n private readonly batchState: BitStoreBatchState<T> =\n createStoreBatchState<T>();\n\n readonly subscriptions: BitSubscriptionEngine<T>;\n readonly effects: BitStoreEffectEngine<T>;\n readonly capabilityRegistry: BitStoreCapabilityRegistry<T>;\n readonly capabilities: BitStoreCapabilities<T>;\n\n constructor(private readonly args: BitStoreRuntimeKernelArgs<T>) {\n this.state = args.state;\n this.subscriptions = args.subscriptions;\n this.effects = args.effects;\n this.capabilityRegistry = args.capabilityRegistry;\n this.capabilities = args.capabilityRegistry.toCapabilities();\n }\n\n getCapability<K extends keyof BitStoreCapabilities<T>>(\n name: K,\n ): BitStoreCapabilities<T>[K] {\n return this.capabilityRegistry.resolve(name);\n }\n\n getState(): BitState<T> {\n return getEffectiveStoreState(this.state, this.batchState);\n }\n\n runBatch<TResult>(callback: () => TResult): TResult {\n return runStoreStateBatch({\n batchState: this.batchState,\n callback,\n flushBatchedStateUpdates: () => this.flushBatchedStateUpdates(),\n });\n }\n\n dispatch(operation: BitStoreOperation<T>): void {\n this.state = dispatchStoreStateOperation({\n state: this.state,\n batchState: this.batchState,\n operation,\n applyValueDerivations: (values, changedPaths) =>\n this.applyValueDerivations(values, changedPaths),\n onStateCommitted: (payload) => this.onStateCommitted(payload),\n });\n }\n\n saveHistorySnapshot(): void {\n const before = this.capabilities.history.getMetadata();\n\n saveStoreHistorySnapshot({\n batchState: this.batchState,\n values: this.state.values,\n saveHistory: (values) => this.capabilities.history.saveSnapshot(values),\n });\n\n const after = this.capabilities.history.getMetadata();\n if (\n before.canUndo !== after.canUndo ||\n before.canRedo !== after.canRedo ||\n before.historyIndex !== after.historyIndex ||\n before.historySize !== after.historySize\n ) {\n this.subscriptions.notify(this.getState(), [\n getHistorySubscriptionPath(),\n ]);\n }\n }\n\n cleanup(): void {\n this.subscriptions.destroy();\n this.capabilities.validation.cancelAll();\n this.effects.destroy();\n }\n\n private onStateCommitted(payload: {\n nextState: BitState<T>;\n changedPaths?: Iterable<string>;\n valuesChanged: boolean;\n }): void {\n commitStoreStateUpdate({\n payload,\n setState: (state) => {\n this.state = state;\n },\n notifySubscriptions: (state, changedPaths) =>\n this.subscriptions.notify(state, changedPaths),\n notifyEffects: (state, valuesChanged) =>\n this.effects.onStateUpdated(state, valuesChanged),\n });\n }\n\n private flushBatchedStateUpdates(): void {\n const historyBeforeFlush = this.capabilities.history.getMetadata();\n\n this.state = flushStoreBatchedStateUpdates({\n state: this.state,\n batchState: this.batchState,\n applyValueDerivations: (values, changedPaths) =>\n this.applyValueDerivations(values, changedPaths),\n onStateCommitted: (payload) => this.onStateCommitted(payload),\n saveHistory: (values) => this.capabilities.history.saveSnapshot(values),\n });\n\n const historyAfterFlush = this.capabilities.history.getMetadata();\n if (\n historyBeforeFlush.canUndo !== historyAfterFlush.canUndo ||\n historyBeforeFlush.canRedo !== historyAfterFlush.canRedo ||\n historyBeforeFlush.historyIndex !== historyAfterFlush.historyIndex ||\n historyBeforeFlush.historySize !== historyAfterFlush.historySize\n ) {\n this.subscriptions.notify(this.getState(), [\n getHistorySubscriptionPath(),\n ]);\n }\n }\n\n private applyValueDerivations(\n values: T,\n changedPaths?: readonly string[],\n ): T {\n return this.args.applyValueDerivations\n ? this.args.applyValueDerivations(values, changedPaths)\n : values;\n }\n}\n","import { deepClone } from \"../../../utils\";\n\nexport class BitBaselineManager<T extends object> {\n constructor(baselineValues: T) {\n this.baselineValues = deepClone(baselineValues);\n }\n\n private baselineValues: T;\n\n getValues(): T {\n return deepClone(this.baselineValues);\n }\n\n setValues(values: T): void {\n this.baselineValues = deepClone(values);\n }\n}\n","import { applyValueDerivations } from \"../shared/value-derivation-pipeline\";\nimport type { BitConfig, BitFieldChangeMeta } from \"../contracts/types\";\nimport type { BitFrameworkConfig } from \"../contracts/public/store-api-types\";\nimport type { BitValidationTriggerOptions } from \"../contracts/port-types\";\nimport { BitComputedManager } from \"../managers/core/computed-manager\";\nimport { BitDirtyManager } from \"../managers/core/dirty-manager\";\nimport { BitMaskManager } from \"../managers/features/mask-manager\";\nimport { BitFieldRegistry } from \"../registry/field-registry\";\nimport { normalizeConfig } from \"../shared/config\";\nimport { createStoreEffects } from \"./store-effects-composition\";\nimport { unregisterStorePrefix } from \"./store-registration-ops\";\nimport { applyStorePersistedValues } from \"./store-persist-ops\";\nimport { createStoreRuntime } from \"./store-runtime\";\nimport { BitStoreRuntimeKernel } from \"./store-runtime-kernel\";\nimport { BitBaselineManager } from \"../managers/core/baseline-manager\";\nimport type { BitBusStorePort } from \"../contracts/bus-types\";\n\nexport interface BitStoreComposition<T extends object> {\n config: BitFrameworkConfig<T>;\n storeId: string;\n runtime: BitStoreRuntimeKernel<T>;\n fieldRegistry: BitFieldRegistry<T>;\n computedManager: BitComputedManager<T>;\n dirtyManager: BitDirtyManager<T>;\n maskManager: BitMaskManager;\n baselineManager: BitBaselineManager<T>;\n}\n\nexport function composeBitStoreRuntime<T extends object>(args: {\n rawConfig: BitConfig<T>;\n storeBusPort: BitBusStorePort<T>;\n}): BitStoreComposition<T> {\n const { rawConfig, storeBusPort } = args;\n const config = normalizeConfig(rawConfig);\n const baselineManager = new BitBaselineManager<T>(config.initialValues);\n\n const fieldRegistry = new BitFieldRegistry<T>();\n const computedManager = new BitComputedManager<T>(() =>\n fieldRegistry.getComputedEntries(),\n );\n const dirtyManager = new BitDirtyManager<T>();\n const maskManager = new BitMaskManager();\n\n if (config.masks) {\n Object.entries(config.masks).forEach(([name, mask]) => {\n maskManager.registerMask(name, mask);\n });\n }\n\n const invalidateFieldIndexes = () => {\n fieldRegistry.invalidateIndexes();\n computedManager.invalidateReverseDeps();\n };\n\n let runtimeKernel: BitStoreRuntimeKernel<T> | undefined;\n\n const getRuntimeKernel = () => {\n if (!runtimeKernel) {\n throw new Error(\"BitStore runtime kernel is not initialized yet.\");\n }\n\n return runtimeKernel;\n };\n\n const runtime = createStoreRuntime<T>({\n rawConfig,\n config,\n fieldRegistry,\n computedManager,\n dirtyManager,\n baselineManager,\n runtimeContext: {\n stateAccess: {\n getState: () => runtimeKernel?.getState() ?? runtime.state,\n dispatch: (operation) => getRuntimeKernel().dispatch(operation),\n saveHistorySnapshot: () => getRuntimeKernel().saveHistorySnapshot(),\n runStateBatch: (callback) => getRuntimeKernel().runBatch(callback),\n },\n fieldAccess: {\n getFieldConfig: (path) => fieldRegistry.getFieldConfig(path),\n getScopeFields: (scopeName) => fieldRegistry.getScopeFields(scopeName),\n getNormalizerEntries: () => fieldRegistry.getNormalizerEntries(),\n getTransformEntries: () => fieldRegistry.getTransformEntries(),\n },\n featureAccess: {\n getEffects: () => getRuntimeKernel().effects,\n getHistory: () => getRuntimeKernel().getCapability(\"history\"),\n getValidation: () => getRuntimeKernel().getCapability(\"validation\"),\n },\n actions: {\n setError: (path, message) => {\n getRuntimeKernel().getCapability(\"error\").setError(path, message);\n },\n validate: (options) => {\n return getRuntimeKernel()\n .getCapability(\"validation\")\n .validate(options);\n },\n setFieldWithMeta: (\n path,\n value,\n meta: BitFieldChangeMeta = { origin: \"setField\" },\n ) => {\n getRuntimeKernel().runBatch(() => {\n getRuntimeKernel()\n .getCapability(\"lifecycle\")\n .updateField(path, value, meta);\n });\n },\n unregisterPrefix: (prefix) => {\n unregisterStorePrefix({\n prefix,\n state: getRuntimeKernel().getState(),\n fieldRegistry,\n subscriptions: getRuntimeKernel().subscriptions,\n validationCleanupPrefix: (fieldPrefix) =>\n getRuntimeKernel()\n .getCapability(\"validation\")\n .cleanupPrefix(fieldPrefix),\n invalidateFieldIndexes,\n });\n },\n triggerValidation: (\n scopeFields?: string[],\n options?: BitValidationTriggerOptions,\n ) => {\n getRuntimeKernel()\n .getCapability(\"validation\")\n .trigger(scopeFields, options);\n },\n },\n },\n });\n\n const getDirtyValues = () => {\n const effectiveState = runtimeKernel?.getState() ?? runtime.state;\n return dirtyManager.buildDirtyValues(effectiveState.values);\n };\n\n const applyPersistedValues = (values: Partial<T>) => {\n applyStorePersistedValues({\n values,\n state: getRuntimeKernel().getState(),\n initialValues: baselineManager.getValues(),\n validation: getRuntimeKernel().getCapability(\"validation\"),\n fieldRegistry,\n dirtyManager,\n dispatch: (operation) => getRuntimeKernel().dispatch(operation),\n saveHistorySnapshot: () => getRuntimeKernel().saveHistorySnapshot(),\n });\n };\n\n const effects = createStoreEffects<T>({\n storeId: runtime.storeId,\n storeBusPort,\n config,\n getState: () => runtimeKernel?.getState() ?? runtime.state,\n getConfig: () => config,\n getValues: () => (runtimeKernel?.getState() ?? runtime.state).values,\n getDirtyValues,\n applyPersistedValues,\n });\n\n runtimeKernel = new BitStoreRuntimeKernel<T>({\n state: runtime.state,\n subscriptions: runtime.subscriptions,\n effects,\n capabilityRegistry: runtime.capabilityRegistry,\n applyValueDerivations: (values, changedPaths) =>\n applyValueDerivations({\n values,\n changedPaths,\n normalizerEntries: fieldRegistry.getNormalizerEntries(),\n applyComputed: (nextValues, nextChangedPaths) =>\n computedManager.apply(nextValues, nextChangedPaths),\n }),\n });\n\n runtimeKernel.saveHistorySnapshot();\n\n return {\n config,\n storeId: runtime.storeId,\n runtime: runtimeKernel,\n fieldRegistry,\n computedManager,\n dirtyManager,\n maskManager,\n baselineManager,\n };\n}\n","import type { BitMask, BitMaskName } from \"../../mask/types\";\nimport type {\n BitErrors,\n BitFieldDefinition,\n BitFieldState,\n BitPath,\n BitPathValue,\n BitState,\n} from \"../contracts/types\";\n\nexport function resolveFieldMask<T extends object>(args: {\n path: string;\n getFieldConfig: (path: string) => BitFieldDefinition<T> | undefined;\n masks: Record<BitMaskName, BitMask> | undefined;\n}): BitMask | undefined {\n const { path, getFieldConfig, masks } = args;\n const maskOption = getFieldConfig(path)?.mask;\n\n if (!maskOption) {\n return undefined;\n }\n\n if (typeof maskOption === \"string\") {\n return masks?.[maskOption as keyof typeof masks];\n }\n\n return maskOption;\n}\n\nexport function createFieldStateSnapshot<\n TForm extends object,\n P extends BitPath<TForm>,\n>(args: {\n state: Readonly<BitState<TForm>>;\n path: P;\n value: BitPathValue<TForm, P>;\n isHidden: boolean;\n isRequired: boolean;\n isDirty: boolean;\n isValidating: boolean;\n}): BitFieldState<TForm, BitPathValue<TForm, P>> {\n const { state, path, value, isHidden, isRequired, isDirty, isValidating } =\n args;\n const pathKey = path as string;\n\n return {\n value,\n error: state.errors[pathKey as keyof BitErrors<TForm>],\n touched: !!state.touched[pathKey as keyof typeof state.touched],\n isHidden,\n isRequired,\n isDirty,\n isValidating,\n };\n}\n","import type { BitFieldDefinition } from \"../contracts/types\";\n\nimport type { BitMask } from \"../../mask/types\";\nimport type {\n BitStoreFeatureApi,\n BitStoreIdentityApi,\n BitStoreNamespacesApi,\n BitStoreObserveSliceApi,\n BitStoreReadSliceApi,\n BitStoreWriteSliceApi,\n} from \"../contracts/public/store-api-types\";\nimport type {\n BitStoreFeatureDomain,\n BitStoreObserveDomain,\n BitStoreReadDomain,\n BitStoreWriteDomain,\n} from \"./store-domains\";\n\nexport interface BitStoreSlicesFactoryDeps<\n T extends object = Record<string, unknown>,\n> {\n identity: BitStoreIdentityApi<T>;\n read: BitStoreReadDomain<T>;\n observe: BitStoreObserveDomain<T>;\n write: BitStoreWriteDomain<T>;\n feature: BitStoreFeatureDomain<T>;\n getFieldConfig(path: string): BitFieldDefinition<T> | undefined;\n resolveMask(path: string): BitMask | undefined;\n createArrayItemId(path: string, index?: number): string;\n}\n\nexport function buildStoreSlicesApi<T extends object>(\n deps: BitStoreSlicesFactoryDeps<T>,\n): BitStoreNamespacesApi<T> {\n const readState = () => deps.read.getState();\n\n const read: BitStoreReadSliceApi<T> = {\n get storeId() {\n return deps.identity.storeId;\n },\n get config() {\n return deps.identity.config;\n },\n get isValid() {\n return deps.read.getIsValid();\n },\n get isSubmitting() {\n return deps.read.getIsSubmitting();\n },\n get isDirty() {\n return deps.read.getIsDirty();\n },\n getState: readState,\n getFieldConfig: (path) => deps.getFieldConfig(path),\n getFieldState: (path) => deps.read.getFieldState(path),\n isHidden: (path) => deps.read.isHidden(path),\n isRequired: (path) => deps.read.isRequired(path),\n isFieldDirty: (path) => deps.read.isFieldDirty(path),\n isFieldValidating: (path) => deps.read.isFieldValidating(path),\n getDirtyValues: () => deps.read.getDirtyValues(),\n getPersistMetadata: () => deps.read.getPersistMetadata(),\n getHistoryMetadata: () => deps.read.getHistoryMetadata(),\n getScopeStatus: (scopeName) => deps.read.getScopeStatus(scopeName),\n getScopeErrors: (scopeName) => deps.read.getScopeErrors(scopeName),\n getScopeFields: (scopeName) => deps.read.getScopeFields(scopeName),\n };\n\n const observe: BitStoreObserveSliceApi<T> = {\n getState: readState,\n subscribe: (listener) => deps.observe.subscribe(listener),\n subscribePersistMeta: (listener) =>\n deps.observe.subscribePersistMeta(listener),\n subscribeHistoryMeta: (listener) =>\n deps.observe.subscribeHistoryMeta(listener),\n subscribeScopeStatus: (scopeName, listener) =>\n deps.observe.subscribeScopeStatus(scopeName, listener),\n subscribeFormMeta: (listener) => deps.observe.subscribeFormMeta(listener),\n subscribeSelector: (selector, listener, options) =>\n deps.observe.subscribeSelector(selector, listener, options),\n subscribePath: (path, listener, options) =>\n deps.observe.subscribePath(path, listener, options),\n subscribeFieldState: (path, listener) =>\n deps.observe.subscribeFieldState(path, listener),\n };\n\n const write: BitStoreWriteSliceApi<T> = {\n setField: (path, value) => deps.write.setField(path, value),\n blurField: (path) => deps.write.blurField(path),\n markFieldsTouched: (paths) => deps.write.markFieldsTouched(paths),\n setValues: (values, options) => deps.write.setValues(values, options),\n setError: (path, message) => deps.write.setError(path, message),\n setErrors: (errors) => deps.write.setErrors(errors),\n setServerErrors: (serverErrors) => deps.write.setServerErrors(serverErrors),\n validate: (options) => deps.feature.validate(options),\n triggerValidation: (scopeFields, options) =>\n deps.feature.triggerValidation(scopeFields, options),\n reset: () => deps.write.reset(),\n transaction: (callback) => deps.write.transaction(callback),\n submit: (onSuccess) => deps.write.submit(onSuccess),\n };\n\n const feature: BitStoreFeatureApi<T> = {\n cleanup: () => deps.feature.cleanup(),\n getPersistMetadata: () => deps.read.getPersistMetadata(),\n restorePersisted: () => deps.feature.restorePersisted(),\n forceSave: () => deps.feature.forceSave(),\n clearPersisted: () => deps.feature.clearPersisted(),\n registerField: (path, config) => deps.write.registerField(path, config),\n unregisterField: (path) => deps.write.unregisterField(path),\n unregisterPrefix: (prefix) => deps.write.unregisterPrefix(prefix),\n pushItem: (path, value) => deps.write.pushItem(path, value),\n prependItem: (path, value) => deps.write.prependItem(path, value),\n insertItem: (path, index, value) =>\n deps.write.insertItem(path, index, value),\n removeItem: (path, index) => deps.write.removeItem(path, index),\n moveItem: (path, from, to) => deps.write.moveItem(path, from, to),\n swapItems: (path, indexA, indexB) =>\n deps.write.swapItems(path, indexA, indexB),\n replaceItems: (path, items) => deps.write.replaceItems(path, items),\n clearItems: (path) => deps.write.clearItems(path),\n get canUndo() {\n return deps.read.getCanUndo();\n },\n get canRedo() {\n return deps.read.getCanRedo();\n },\n hasValidationsInProgress: (scopeFields) =>\n deps.feature.hasValidationsInProgress(scopeFields),\n resolveMask: (path) => deps.resolveMask(path),\n createArrayItemId: (path, index) => deps.createArrayItemId(path, index),\n undo: () => deps.feature.undo(),\n redo: () => deps.feature.redo(),\n };\n\n return {\n read,\n observe,\n write,\n feature,\n };\n}\n","import type { BitHistoryMetadata } from \"../contracts/public/meta-types\";\nimport type { BitStoreOperation } from \"../engines/operation-engine\";\nimport type { BitStoreEffectEngine } from \"../engines/effect-engine\";\nimport {\n clearStorePersisted,\n forceStorePersistedSave,\n restoreStorePersisted,\n} from \"./store-persist-ops\";\n\nexport function restorePersistedFeature<T extends object>(args: {\n dispatch: (operation: BitStoreOperation<T>) => void;\n effects: BitStoreEffectEngine<T>;\n}): Promise<boolean> {\n const { dispatch, effects } = args;\n return restoreStorePersisted({ dispatch, effects });\n}\n\nexport function forceSavePersistedFeature<T extends object>(args: {\n dispatch: (operation: BitStoreOperation<T>) => void;\n effects: BitStoreEffectEngine<T>;\n}): Promise<void> {\n const { dispatch, effects } = args;\n return forceStorePersistedSave({ dispatch, effects });\n}\n\nexport function clearPersistedFeature<T extends object>(args: {\n dispatch: (operation: BitStoreOperation<T>) => void;\n effects: BitStoreEffectEngine<T>;\n}): Promise<void> {\n const { dispatch, effects } = args;\n return clearStorePersisted({ dispatch, effects });\n}\n\ntype HistoryFeaturePort<T extends object> = {\n undo: () => T | null;\n redo: () => T | null;\n getMetadata: () => BitHistoryMetadata;\n};\n\nexport function runUndoFeature<T extends object>(args: {\n history: HistoryFeaturePort<T>;\n applyHistoryState: (values: T) => void;\n}): void {\n const { history, applyHistoryState } = args;\n const prevState = history.undo();\n if (prevState) {\n applyHistoryState(prevState);\n }\n}\n\nexport function runRedoFeature<T extends object>(args: {\n history: HistoryFeaturePort<T>;\n applyHistoryState: (values: T) => void;\n}): void {\n const { history, applyHistoryState } = args;\n const nextState = history.redo();\n if (nextState) {\n applyHistoryState(nextState);\n }\n}\n\nexport function readHistoryFeatureMetadata<T extends object>(args: {\n history: HistoryFeaturePort<T>;\n}): BitHistoryMetadata {\n return args.history.getMetadata();\n}\n","import type {\n BitSelector,\n BitScopedSelectorSubscriptionOptions,\n BitTrackedSelectorSubscriptionOptions,\n} from \"../contracts/public/subscription-types\";\nimport type { BitState } from \"../contracts/types\";\n\nexport function collectTrackedSelectorPaths<T extends object, TSlice>(\n state: Readonly<BitState<T>>,\n selector: BitSelector<T, TSlice>,\n): string[] {\n const trackedPaths = new Set<string>();\n\n const createTrackingProxy = <TValue>(\n value: TValue,\n basePath: string,\n ): TValue => {\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n return new Proxy(value as object, {\n get: (target, key, receiver) => {\n if (typeof key === \"symbol\") {\n return Reflect.get(target, key, receiver);\n }\n\n const keyAsString = String(key);\n const childPath = basePath ? `${basePath}.${keyAsString}` : keyAsString;\n trackedPaths.add(childPath);\n\n const child = Reflect.get(target, key, receiver);\n return createTrackingProxy(child, childPath);\n },\n }) as TValue;\n };\n\n const proxyState = createTrackingProxy(state, \"\");\n selector(proxyState as Readonly<BitState<T>>);\n\n const normalizedPaths = new Set<string>();\n\n trackedPaths.forEach((path) => {\n const normalizedPath = normalizeTrackedPath(path);\n if (normalizedPath) {\n normalizedPaths.add(normalizedPath);\n }\n });\n\n return Array.from(normalizedPaths);\n}\n\nfunction normalizeTrackedPath(path: string): string | undefined {\n if (!path) {\n return undefined;\n }\n\n if (path === \"values\") {\n return \"*\";\n }\n\n if (path.startsWith(\"values.\")) {\n return path.slice(\"values.\".length);\n }\n\n if (path === \"errors\" || path === \"touched\" || path === \"isValidating\") {\n return \"*\";\n }\n\n if (path.startsWith(\"errors.\")) {\n return path.slice(\"errors.\".length);\n }\n\n if (path.startsWith(\"touched.\")) {\n return path.slice(\"touched.\".length);\n }\n\n if (path.startsWith(\"isValidating.\")) {\n return path.slice(\"isValidating.\".length);\n }\n\n if (path === \"persist\" || path.startsWith(\"persist.\")) {\n return \"persist\";\n }\n\n return path;\n}\n\nexport function areTrackedPathSetsEqual(\n previousPaths: readonly string[],\n nextPaths: readonly string[],\n): boolean {\n if (previousPaths.length !== nextPaths.length) {\n return false;\n }\n\n const next = new Set(nextPaths);\n for (const path of previousPaths) {\n if (!next.has(path)) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function withTrackedSelectorPaths<TValue>(\n paths: string[],\n options?: BitTrackedSelectorSubscriptionOptions<TValue>,\n): BitScopedSelectorSubscriptionOptions<TValue> {\n if (paths.length === 0) {\n return {\n emitImmediately: options?.emitImmediately,\n equalityFn: options?.equalityFn,\n mode: \"scoped\",\n paths: [\"*\"],\n };\n }\n\n return {\n emitImmediately: options?.emitImmediately,\n equalityFn: options?.equalityFn,\n mode: \"scoped\",\n paths,\n };\n}\n\nexport function createTrackedSubscription<T extends object, TSlice>(args: {\n getState: () => Readonly<BitState<T>>;\n subscribeSelector: (\n selector: BitSelector<T, TSlice>,\n listener: (slice: TSlice) => void,\n options?: BitScopedSelectorSubscriptionOptions<TSlice>,\n ) => () => void;\n selector: BitSelector<T, TSlice>;\n listener: (slice: TSlice) => void;\n options?: BitTrackedSelectorSubscriptionOptions<TSlice>;\n}): () => void {\n const { getState, subscribeSelector, selector, listener, options } = args;\n\n let activeUnsubscribe: (() => void) | null = null;\n let activePaths = collectTrackedSelectorPaths(getState(), selector);\n let isDisposed = false;\n let isResubscribeQueued = false;\n\n const subscribeWithPaths = (paths: string[]) => {\n activeUnsubscribe = subscribeSelector(\n selector,\n (slice) => {\n listener(slice);\n\n const nextPaths = collectTrackedSelectorPaths(getState(), selector);\n if (areTrackedPathSetsEqual(activePaths, nextPaths)) {\n return;\n }\n\n activePaths = nextPaths;\n\n if (isResubscribeQueued || isDisposed) {\n return;\n }\n\n isResubscribeQueued = true;\n queueMicrotask(() => {\n isResubscribeQueued = false;\n if (isDisposed) {\n return;\n }\n\n activeUnsubscribe?.();\n subscribeWithPaths(activePaths);\n });\n },\n withTrackedSelectorPaths(paths, options),\n );\n };\n\n subscribeWithPaths(activePaths);\n\n return () => {\n isDisposed = true;\n activeUnsubscribe?.();\n activeUnsubscribe = null;\n };\n}\n","import { getDeepValue, valueEqual } from \"../../utils\";\nimport { createTrackedSubscription } from \"./tracked-selector\";\nimport type {\n BitSelector,\n BitScopedSelectorSubscriptionOptions,\n BitSelectorSubscriptionOptions,\n} from \"../contracts/public/subscription-types\";\nimport type {\n BitFormMeta,\n BitHistoryMetadata,\n} from \"../contracts/public/meta-types\";\nimport type { BitFieldState, BitPath, BitPathValue } from \"../contracts/types\";\nimport type { BitState } from \"../contracts/types\";\nimport type { BitSubscriptionEngine } from \"../engines/subscription-engine\";\nimport type { BitPersistMetadata, ScopeStatus } from \"../contracts/types\";\nimport { isHistoryMetaEqual } from \"../../history-status\";\nimport {\n getScopeRegistrySubscriptionPath,\n getScopeSubscriptionPaths,\n isScopeStatusEqual,\n} from \"../shared/scope-status\";\nimport { getHistorySubscriptionPath } from \"../../history-status\";\n\nexport function subscribeStoreSelector<T extends object, TSlice>(args: {\n getState: () => Readonly<BitState<T>>;\n subscriptions: Pick<BitSubscriptionEngine<T>, \"subscribeSelector\">;\n selector: BitSelector<T, TSlice>;\n listener: (slice: TSlice) => void;\n options: BitSelectorSubscriptionOptions<TSlice>;\n}): () => void {\n const { getState, subscriptions, selector, listener, options } = args;\n const equalityFn = options?.equalityFn ?? valueEqual;\n\n if (options?.mode === \"tracked\") {\n return createTrackedSubscription({\n getState,\n subscribeSelector: (trackedSelector, trackedListener, trackedOptions) =>\n subscriptions.subscribeSelector(\n trackedSelector,\n trackedListener,\n trackedOptions,\n equalityFn,\n ),\n selector,\n listener,\n options,\n });\n }\n\n return subscriptions.subscribeSelector(\n selector,\n listener,\n options,\n equalityFn,\n );\n}\n\nexport function subscribeStorePath<\n T extends object,\n P extends BitPath<T>,\n>(args: {\n path: P;\n listener: (value: BitPathValue<T, P>) => void;\n options?: BitScopedSelectorSubscriptionOptions<BitPathValue<T, P>>;\n subscribeSelector: (\n selector: BitSelector<T, BitPathValue<T, P>>,\n listener: (slice: BitPathValue<T, P>) => void,\n options: BitSelectorSubscriptionOptions<BitPathValue<T, P>>,\n ) => () => void;\n}): () => void {\n const { path, listener, options, subscribeSelector } = args;\n const mergedPaths = [...(options?.paths ?? []), path as string];\n\n return subscribeSelector(\n (state) => getDeepValue(state.values, path as string) as BitPathValue<T, P>,\n listener,\n {\n ...options,\n paths: mergedPaths,\n },\n );\n}\n\nexport function subscribeStoreFieldState<\n T extends object,\n P extends BitPath<T>,\n>(args: {\n path: P;\n listener: (state: Readonly<BitFieldState<T, BitPathValue<T, P>>>) => void;\n getFieldState: (path: P) => Readonly<BitFieldState<T, BitPathValue<T, P>>>;\n subscribeSelector: (\n selector: BitSelector<T, Readonly<BitFieldState<T, BitPathValue<T, P>>>>,\n listener: (state: Readonly<BitFieldState<T, BitPathValue<T, P>>>) => void,\n options: BitSelectorSubscriptionOptions<\n Readonly<BitFieldState<T, BitPathValue<T, P>>>\n >,\n ) => () => void;\n}): () => void {\n const { path, listener, getFieldState, subscribeSelector } = args;\n\n return subscribeSelector(() => getFieldState(path), listener, {\n paths: [path as string],\n equalityFn: (prev, next) =>\n prev.value === next.value &&\n prev.error === next.error &&\n prev.touched === next.touched &&\n prev.isHidden === next.isHidden &&\n prev.isRequired === next.isRequired &&\n prev.isDirty === next.isDirty &&\n prev.isValidating === next.isValidating,\n });\n}\n\nexport function subscribeStoreFormMeta<T extends object>(args: {\n listener: (meta: BitFormMeta) => void;\n subscribeSelector: (\n selector: BitSelector<T, BitFormMeta>,\n listener: (meta: BitFormMeta) => void,\n options: BitSelectorSubscriptionOptions<BitFormMeta>,\n ) => () => void;\n}): () => void {\n const { listener, subscribeSelector } = args;\n\n return subscribeSelector(\n (state) => ({\n isValid: state.isValid,\n isDirty: state.isDirty,\n isSubmitting: state.isSubmitting,\n }),\n listener,\n {\n paths: [\"isValid\", \"isDirty\", \"isSubmitting\"],\n equalityFn: (prev, next) =>\n prev.isValid === next.isValid &&\n prev.isDirty === next.isDirty &&\n prev.isSubmitting === next.isSubmitting,\n },\n );\n}\n\nexport function subscribeStorePersistMeta<T extends object>(args: {\n listener: (meta: BitPersistMetadata) => void;\n subscribeSelector: (\n selector: BitSelector<T, BitPersistMetadata>,\n listener: (meta: BitPersistMetadata) => void,\n options: BitSelectorSubscriptionOptions<BitPersistMetadata>,\n ) => () => void;\n}): () => void {\n const { listener, subscribeSelector } = args;\n\n return subscribeSelector((state) => state.persist, listener, {\n paths: [\"persist\"],\n equalityFn: (prev, next) =>\n prev.isSaving === next.isSaving &&\n prev.isRestoring === next.isRestoring &&\n prev.error === next.error,\n });\n}\n\nexport function subscribeStoreHistoryMeta<T extends object>(args: {\n readHistoryMeta: () => BitHistoryMetadata;\n subscribeSelector: (\n selector: BitSelector<T, BitHistoryMetadata>,\n listener: (meta: BitHistoryMetadata) => void,\n options: BitSelectorSubscriptionOptions<BitHistoryMetadata>,\n ) => () => void;\n listener: (meta: BitHistoryMetadata) => void;\n}): () => void {\n const { readHistoryMeta, subscribeSelector, listener } = args;\n\n return subscribeSelector(() => readHistoryMeta(), listener, {\n paths: [getHistorySubscriptionPath()],\n equalityFn: (prev, next) => isHistoryMetaEqual(prev, next),\n });\n}\n\nexport function subscribeStoreScopeStatus<T extends object>(args: {\n scopeName: string;\n getScopeFields: (scopeName: string) => string[];\n readScopeStatus: (scopeName: string) => ScopeStatus;\n subscribeSelector: <TSlice>(\n selector: BitSelector<T, TSlice>,\n listener: (slice: TSlice) => void,\n options: BitSelectorSubscriptionOptions<TSlice>,\n ) => () => void;\n listener: (status: ScopeStatus) => void;\n}): () => void {\n const {\n scopeName,\n getScopeFields,\n readScopeStatus,\n subscribeSelector,\n listener,\n } = args;\n const registryPath = getScopeRegistrySubscriptionPath(scopeName);\n\n let lastStatus = readScopeStatus(scopeName);\n let unsubscribeScoped = () => {};\n\n const subscribeScoped = () => {\n unsubscribeScoped();\n const scopePaths = getScopeSubscriptionPaths(getScopeFields(scopeName));\n\n unsubscribeScoped = subscribeSelector(\n () => readScopeStatus(scopeName),\n (status) => {\n if (isScopeStatusEqual(lastStatus, status)) {\n return;\n }\n\n lastStatus = status;\n listener(status);\n },\n {\n paths: [...scopePaths, registryPath],\n },\n );\n };\n\n subscribeScoped();\n\n const unsubscribeRegistry = subscribeSelector(\n () => getScopeFields(scopeName).length,\n () => {\n subscribeScoped();\n const nextStatus = readScopeStatus(scopeName);\n if (isScopeStatusEqual(lastStatus, nextStatus)) {\n return;\n }\n\n lastStatus = nextStatus;\n listener(nextStatus);\n },\n {\n paths: [registryPath],\n },\n );\n\n return () => {\n unsubscribeScoped();\n unsubscribeRegistry();\n };\n}\n","import type {\n BitArrayItem,\n BitArrayPath,\n BitErrors,\n BitFieldDefinition,\n BitFieldState,\n BitPath,\n BitPathValue,\n BitPersistMetadata,\n BitSubmitResult,\n DeepPartial,\n ScopeStatus,\n} from \"../contracts/types\";\nimport type {\n BitFormMeta,\n BitHistoryMetadata,\n BitValidationOptions,\n} from \"../contracts/public/meta-types\";\nimport type {\n BitScopedSelectorSubscriptionOptions,\n BitSelector,\n BitSelectorSubscriptionOptions,\n} from \"../contracts/public/subscription-types\";\nimport type { BitValidationTriggerOptions } from \"../contracts/port-types\";\nimport type { BitFrameworkConfig } from \"../contracts/public/store-api-types\";\nimport type { BitStoreRuntimeKernel } from \"./store-runtime-kernel\";\nimport type { BitFieldRegistry } from \"../registry/field-registry\";\nimport type { BitDirtyManager } from \"../managers/core/dirty-manager\";\nimport type { BitStoreStateReader } from \"../shared/store-state-reader\";\nimport { touchFieldsOperation } from \"../engines/operation-engine\";\nimport {\n clearPersistedFeature,\n forceSavePersistedFeature,\n readHistoryFeatureMetadata,\n restorePersistedFeature,\n runRedoFeature,\n runUndoFeature,\n} from \"./store-feature-ops\";\nimport {\n registerStoreField,\n unregisterStoreField,\n unregisterStorePrefix,\n} from \"./store-registration-ops\";\nimport {\n subscribeStoreFieldState,\n subscribeStoreFormMeta,\n subscribeStoreHistoryMeta,\n subscribeStorePath,\n subscribeStorePersistMeta,\n subscribeStoreScopeStatus,\n subscribeStoreSelector,\n} from \"./store-observe-ops\";\n\nexport interface BitStoreReadDomain<T extends object> {\n getState(): ReturnType<BitStoreStateReader<T>[\"getState\"]>;\n getFieldState<P extends BitPath<T>>(\n path: P,\n ): BitFieldState<T, BitPathValue<T, P>>;\n getIsValid(): boolean;\n getIsSubmitting(): boolean;\n getIsDirty(): boolean;\n isHidden<P extends BitPath<T>>(path: P): boolean;\n isRequired<P extends BitPath<T>>(path: P): boolean;\n isFieldDirty(path: string): boolean;\n isFieldValidating(path: string): boolean;\n getDirtyValues(): Partial<T>;\n getPersistMetadata(): BitPersistMetadata;\n getHistoryMetadata(): BitHistoryMetadata;\n getScopeStatus(scopeName: string): ScopeStatus;\n getScopeErrors(scopeName: string): Record<string, string>;\n getCanUndo(): boolean;\n getCanRedo(): boolean;\n getScopeFields(scopeName: string): string[];\n}\n\nexport interface BitStoreObserveDomain<T extends object> {\n subscribe(listener: () => void): () => void;\n subscribePersistMeta(\n listener: (meta: BitPersistMetadata) => void,\n ): () => void;\n subscribeHistoryMeta(\n listener: (meta: BitHistoryMetadata) => void,\n ): () => void;\n subscribeScopeStatus(\n scopeName: string,\n listener: (status: ScopeStatus) => void,\n ): () => void;\n subscribeSelector<TSlice>(\n selector: BitSelector<T, TSlice>,\n listener: (slice: TSlice) => void,\n options: BitSelectorSubscriptionOptions<TSlice>,\n ): () => void;\n subscribePath<P extends BitPath<T>>(\n path: P,\n listener: (value: BitPathValue<T, P>) => void,\n options?: BitScopedSelectorSubscriptionOptions<BitPathValue<T, P>>,\n ): () => void;\n subscribeFieldState<P extends BitPath<T>>(\n path: P,\n listener: (state: Readonly<BitFieldState<T, BitPathValue<T, P>>>) => void,\n ): () => void;\n subscribeFormMeta(listener: (meta: BitFormMeta) => void): () => void;\n}\n\nexport interface BitStoreWriteDomain<T extends object> {\n registerField(path: string, config: BitFieldDefinition<T>): void;\n unregisterField(path: string): void;\n unregisterPrefix(prefix: string): void;\n setField<P extends BitPath<T>>(path: P, value: BitPathValue<T, P>): void;\n blurField<P extends BitPath<T>>(path: P): void;\n markFieldsTouched(paths: string[]): void;\n setValues(\n values: T | DeepPartial<T>,\n options?: { partial?: boolean; rebase?: boolean },\n ): void;\n setError(path: string, message: string | undefined): void;\n setErrors(errors: BitErrors<T>): void;\n setServerErrors(serverErrors: Record<string, string[] | string>): void;\n reset(): void;\n transaction<TResult>(callback: () => TResult): TResult;\n submit(\n onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ): Promise<BitSubmitResult>;\n pushItem<P extends BitArrayPath<T>>(\n path: P,\n value: BitArrayItem<BitPathValue<T, P>>,\n ): void;\n prependItem<P extends BitArrayPath<T>>(\n path: P,\n value: BitArrayItem<BitPathValue<T, P>>,\n ): void;\n insertItem<P extends BitArrayPath<T>>(\n path: P,\n index: number,\n value: BitArrayItem<BitPathValue<T, P>>,\n ): void;\n removeItem<P extends BitArrayPath<T>>(path: P, index: number): void;\n swapItems<P extends BitArrayPath<T>>(\n path: P,\n indexA: number,\n indexB: number,\n ): void;\n moveItem<P extends BitArrayPath<T>>(path: P, from: number, to: number): void;\n replaceItems<P extends BitArrayPath<T>>(\n path: P,\n items: BitArrayItem<BitPathValue<T, P>>[],\n ): void;\n clearItems<P extends BitArrayPath<T>>(path: P): void;\n}\n\nexport interface BitStoreFeatureDomain<T extends object> {\n undo(): void;\n redo(): void;\n validate(options?: BitValidationOptions): Promise<boolean>;\n hasValidationsInProgress(scopeFields?: string[]): boolean;\n triggerValidation(\n scopeFields?: string[],\n options?: BitValidationTriggerOptions,\n ): void;\n restorePersisted(): Promise<boolean>;\n forceSave(): Promise<void>;\n clearPersisted(): Promise<void>;\n cleanup(): void;\n}\n\nexport interface BitStoreDomains<T extends object> {\n read: BitStoreReadDomain<T>;\n observe: BitStoreObserveDomain<T>;\n write: BitStoreWriteDomain<T>;\n feature: BitStoreFeatureDomain<T>;\n}\n\nexport function createBitStoreDomains<T extends object>(args: {\n runtime: BitStoreRuntimeKernel<T>;\n config: BitFrameworkConfig<T>;\n fieldRegistry: BitFieldRegistry<T>;\n dirtyManager: BitDirtyManager<T>;\n stateReader: BitStoreStateReader<T>;\n}): BitStoreDomains<T> {\n const { runtime, config, fieldRegistry, dirtyManager, stateReader } = args;\n\n const readDomain: BitStoreReadDomain<T> = {\n getState: () => stateReader.getState(),\n getFieldState: (path) => stateReader.getFieldState(path),\n getIsValid: () => stateReader.getFlag(\"isValid\"),\n getIsSubmitting: () => stateReader.getFlag(\"isSubmitting\"),\n getIsDirty: () => stateReader.getFlag(\"isDirty\"),\n isHidden: (path) => runtime.capabilities.query.isHidden(path),\n isRequired: (path) => runtime.capabilities.query.isRequired(path),\n isFieldDirty: (path) => runtime.capabilities.query.isFieldDirty(path),\n isFieldValidating: (path) =>\n runtime.capabilities.query.isFieldValidating(path),\n getDirtyValues: () =>\n dirtyManager.buildDirtyValues(stateReader.getState().values),\n getPersistMetadata: () => stateReader.getPersistMetadata(),\n getHistoryMetadata: () =>\n readHistoryFeatureMetadata({ history: runtime.capabilities.history }),\n getScopeStatus: (scopeName) =>\n runtime.capabilities.scope.getScopeStatus(scopeName),\n getScopeErrors: (scopeName) =>\n runtime.capabilities.scope.getScopeErrors(scopeName),\n getCanUndo: () => runtime.capabilities.history.canUndo,\n getCanRedo: () => runtime.capabilities.history.canRedo,\n getScopeFields: (scopeName) => fieldRegistry.getScopeFields(scopeName),\n };\n\n const observeDomain: BitStoreObserveDomain<T> = {\n subscribe: (listener) => runtime.subscriptions.subscribe(listener),\n subscribePersistMeta: (listener) =>\n subscribeStorePersistMeta({\n listener,\n subscribeSelector: (selector, persistListener, options) =>\n observeDomain.subscribeSelector(selector, persistListener, options),\n }),\n subscribeHistoryMeta: (listener) =>\n subscribeStoreHistoryMeta({\n readHistoryMeta: () => readDomain.getHistoryMetadata(),\n subscribeSelector: (selector, historyListener, options) =>\n observeDomain.subscribeSelector(selector, historyListener, options),\n listener,\n }),\n subscribeScopeStatus: (scopeName, listener) =>\n subscribeStoreScopeStatus({\n scopeName,\n getScopeFields: (name) => readDomain.getScopeFields(name),\n readScopeStatus: (name) => readDomain.getScopeStatus(name),\n subscribeSelector: (selector, scopeListener, options) =>\n observeDomain.subscribeSelector(selector, scopeListener, options),\n listener,\n }),\n subscribeSelector: (selector, listener, options) =>\n subscribeStoreSelector({\n getState: () => readDomain.getState(),\n subscriptions: runtime.subscriptions,\n selector,\n listener,\n options,\n }),\n subscribePath: (path, listener, options) =>\n subscribeStorePath({\n path,\n listener,\n options,\n subscribeSelector: (selector, pathListener, selectorOptions) =>\n observeDomain.subscribeSelector(\n selector,\n pathListener,\n selectorOptions,\n ),\n }),\n subscribeFieldState: (path, listener) =>\n subscribeStoreFieldState({\n path,\n listener,\n getFieldState: (fieldPath) => readDomain.getFieldState(fieldPath),\n subscribeSelector: (selector, fieldListener, options) =>\n observeDomain.subscribeSelector(selector, fieldListener, options),\n }),\n subscribeFormMeta: (listener) =>\n subscribeStoreFormMeta({\n listener,\n subscribeSelector: (selector, metaListener, options) =>\n observeDomain.subscribeSelector(selector, metaListener, options),\n }),\n };\n\n const writeDomain: BitStoreWriteDomain<T> = {\n registerField: (path, fieldConfig) => {\n registerStoreField({\n path,\n config: fieldConfig,\n state: runtime.getState(),\n fieldRegistry,\n subscriptions: runtime.subscriptions,\n stateReader,\n invalidateFieldIndexes: () => {\n fieldRegistry.invalidateIndexes();\n },\n });\n },\n unregisterField: (path) => {\n unregisterStoreField({\n path,\n state: runtime.getState(),\n hasStaticConfig: !!config.fields?.[path as string],\n fieldRegistry,\n subscriptions: runtime.subscriptions,\n validationCleanupField: (fieldPath) =>\n runtime.capabilities.validation.cleanupField(fieldPath),\n invalidateFieldIndexes: () => {\n fieldRegistry.invalidateIndexes();\n },\n dispatch: (operation) => runtime.dispatch(operation),\n });\n },\n unregisterPrefix: (prefix) => {\n unregisterStorePrefix({\n prefix,\n state: runtime.getState(),\n fieldRegistry,\n subscriptions: runtime.subscriptions,\n validationCleanupPrefix: (fieldPrefix) =>\n runtime.capabilities.validation.cleanupPrefix(fieldPrefix),\n invalidateFieldIndexes: () => {\n fieldRegistry.invalidateIndexes();\n },\n });\n },\n setField: (path, value) => {\n runtime.runBatch(() => {\n runtime.capabilities.lifecycle.updateField(path as string, value, {\n origin: \"setField\",\n });\n });\n },\n blurField: (path) => {\n if (!runtime.capabilities.query.isTouched(path as string)) {\n runtime.runBatch(() => {\n runtime.dispatch(touchFieldsOperation([path as string]));\n });\n }\n\n runtime.capabilities.validation.trigger([path]);\n },\n markFieldsTouched: (paths) => {\n if (paths.length === 0) return;\n runtime.dispatch(touchFieldsOperation(paths));\n },\n setValues: (values, options) => {\n runtime.capabilities.lifecycle.setValues(values, options);\n },\n setError: (path, message) => {\n runtime.capabilities.error.setError(path, message);\n },\n setErrors: (errors) => {\n runtime.capabilities.error.setErrors(errors);\n },\n setServerErrors: (serverErrors) => {\n runtime.capabilities.error.setServerErrors(serverErrors);\n },\n reset: () => {\n runtime.runBatch(() => {\n runtime.capabilities.lifecycle.reset();\n });\n },\n transaction: (callback) => runtime.runBatch(callback),\n submit: (onSuccess) => runtime.capabilities.lifecycle.submit(onSuccess),\n pushItem: (path, value) =>\n runtime.capabilities.arrays.pushItem(path, value),\n prependItem: (path, value) =>\n runtime.capabilities.arrays.prependItem(path, value),\n insertItem: (path, index, value) =>\n runtime.capabilities.arrays.insertItem(path, index, value),\n removeItem: (path, index) =>\n runtime.capabilities.arrays.removeItem(path, index),\n swapItems: (path, indexA, indexB) =>\n runtime.capabilities.arrays.swapItems(path, indexA, indexB),\n moveItem: (path, from, to) =>\n runtime.capabilities.arrays.moveItem(path, from, to),\n replaceItems: (path, items) =>\n runtime.capabilities.arrays.replaceItems(path, items),\n clearItems: (path) => runtime.capabilities.arrays.clearItems(path),\n };\n\n const featureDomain: BitStoreFeatureDomain<T> = {\n undo: () => {\n runUndoFeature({\n history: runtime.capabilities.history,\n applyHistoryState: (values) =>\n runtime.capabilities.lifecycle.applyHistoryState(values),\n });\n },\n redo: () => {\n runRedoFeature({\n history: runtime.capabilities.history,\n applyHistoryState: (values) =>\n runtime.capabilities.lifecycle.applyHistoryState(values),\n });\n },\n validate: (options) => runtime.capabilities.validation.validate(options),\n hasValidationsInProgress: (scopeFields) =>\n runtime.capabilities.validation.hasValidationsInProgress(scopeFields),\n triggerValidation: (scopeFields, options) =>\n runtime.capabilities.validation.trigger(scopeFields, options),\n restorePersisted: () =>\n restorePersistedFeature({\n dispatch: (operation) => runtime.dispatch(operation),\n effects: runtime.effects,\n }),\n forceSave: () =>\n forceSavePersistedFeature({\n dispatch: (operation) => runtime.dispatch(operation),\n effects: runtime.effects,\n }),\n clearPersisted: () =>\n clearPersistedFeature({\n dispatch: (operation) => runtime.dispatch(operation),\n effects: runtime.effects,\n }),\n cleanup: () => runtime.cleanup(),\n };\n\n return {\n read: readDomain,\n observe: observeDomain,\n write: writeDomain,\n feature: featureDomain,\n };\n}\n","import { getDeepValue } from \"../../utils\";\nimport type {\n BitFieldState,\n BitPath,\n BitPathValue,\n BitPersistMetadata,\n BitState,\n} from \"../contracts/types\";\nimport { createFieldStateSnapshot } from \"../engines/store-field-query-engine\";\n\ninterface BitStoreStateReaderDeps<T extends object> {\n getState(): Readonly<BitState<T>>;\n isHidden(path: string): boolean;\n isRequired(path: string): boolean;\n isFieldDirty(path: string): boolean;\n isFieldValidating(path: string): boolean;\n}\n\ntype BitStateFlagKey = \"isValid\" | \"isSubmitting\" | \"isDirty\";\n\nexport class BitStoreStateReader<T extends object> {\n private readonly fieldStateCache = new Map<\n string,\n {\n state: Readonly<BitState<T>>;\n snapshot: Readonly<BitFieldState<T, unknown>>;\n }\n >();\n\n constructor(private readonly deps: BitStoreStateReaderDeps<T>) {}\n\n getState(): Readonly<BitState<T>> {\n return this.deps.getState();\n }\n\n getFlag<TKey extends BitStateFlagKey>(\n key: TKey,\n ): Readonly<BitState<T>>[TKey] {\n return this.deps.getState()[key];\n }\n\n getPersistMetadata(): BitPersistMetadata {\n return this.deps.getState().persist;\n }\n\n getFieldState<P extends BitPath<T>>(\n path: P,\n ): Readonly<BitFieldState<T, BitPathValue<T, P>>> {\n const pathKey = path as string;\n const state = this.deps.getState();\n const cached = this.fieldStateCache.get(pathKey);\n\n if (cached?.state === state) {\n return cached.snapshot as Readonly<BitFieldState<T, BitPathValue<T, P>>>;\n }\n\n const value = getDeepValue(state.values, pathKey) as BitPathValue<T, P>;\n const snapshot = createFieldStateSnapshot({\n state,\n path,\n value,\n isHidden: this.deps.isHidden(pathKey),\n isRequired: this.deps.isRequired(pathKey),\n isDirty: this.deps.isFieldDirty(pathKey),\n isValidating: this.deps.isFieldValidating(pathKey),\n });\n\n this.fieldStateCache.set(pathKey, {\n state,\n snapshot: snapshot as Readonly<BitFieldState<T, unknown>>,\n });\n\n return snapshot;\n }\n\n invalidatePath(path: string): void {\n this.fieldStateCache.delete(path);\n }\n}\n","import type { BitConfig } from \"./contracts/types\";\nimport type {\n BitFrameworkConfig,\n BitStoreFeatureApi,\n BitStoreObserveSliceApi,\n BitStoreReadSliceApi,\n BitStoreWriteSliceApi,\n} from \"./contracts/public/store-api-types\";\nimport { BIT_FRAMEWORK_STORE_SYMBOL } from \"./orchestration/framework-store-brand\";\nimport { BIT_HOOKS_API_SYMBOL } from \"./orchestration/hook-brand\";\nimport { composeBitStoreRuntime } from \"./orchestration/store-composition-root\";\nimport { resolveFieldMask } from \"./engines/store-field-query-engine\";\nimport { buildStoreSlicesApi } from \"./orchestration/store-slices-factory\";\nimport { createBitStoreDomains } from \"./orchestration/store-domains\";\nimport { BitStoreStateReader } from \"./shared/store-state-reader\";\n\nexport class BitStore<T extends object = Record<string, unknown>> {\n public readonly [BIT_HOOKS_API_SYMBOL] = true;\n public readonly [BIT_FRAMEWORK_STORE_SYMBOL] = true;\n\n public readonly storeId: string;\n\n private readonly _config: BitFrameworkConfig<T>;\n\n public readonly read: BitStoreReadSliceApi<T>;\n public readonly observe: BitStoreObserveSliceApi<T>;\n public readonly write: BitStoreWriteSliceApi<T>;\n public readonly feature: BitStoreFeatureApi<T>;\n\n constructor(config: BitConfig<T> = {}) {\n const storeBusPort = {\n getState: () => this.read.getState(),\n getHistoryMetadata: () => this.read.getHistoryMetadata(),\n undo: () => this.feature.undo(),\n redo: () => this.feature.redo(),\n reset: () => this.write.reset(),\n };\n\n const composition = composeBitStoreRuntime<T>({\n rawConfig: config,\n storeBusPort,\n });\n\n this._config = composition.config;\n this.storeId = composition.storeId;\n\n const stateReader = new BitStoreStateReader<T>({\n getState: () => composition.runtime.getState(),\n isHidden: (path) => composition.runtime.capabilities.query.isHidden(path),\n isRequired: (path) =>\n composition.runtime.capabilities.query.isRequired(path),\n isFieldDirty: (path) =>\n composition.runtime.capabilities.query.isFieldDirty(path),\n isFieldValidating: (path) =>\n composition.runtime.capabilities.query.isFieldValidating(path),\n });\n\n const domains = createBitStoreDomains<T>({\n runtime: composition.runtime,\n config: this._config,\n fieldRegistry: composition.fieldRegistry,\n dirtyManager: composition.dirtyManager,\n stateReader,\n });\n\n const slices = buildStoreSlicesApi<T>({\n identity: {\n storeId: this.storeId,\n config: this._config,\n },\n read: domains.read,\n observe: domains.observe,\n write: domains.write,\n feature: domains.feature,\n getFieldConfig: (path) => composition.fieldRegistry.getFieldConfig(path),\n resolveMask: (path) =>\n resolveFieldMask<T>({\n path,\n getFieldConfig: (fieldPath) =>\n composition.fieldRegistry.getFieldConfig(fieldPath),\n masks: composition.maskManager.getAllMasks(),\n }),\n createArrayItemId: (path, index) =>\n this._config.idFactory({ scope: \"array\", path, index }),\n });\n\n this.read = slices.read;\n this.observe = slices.observe;\n this.write = slices.write;\n this.feature = slices.feature;\n }\n}\n","import type { BitConfig } from \"./contracts/types\";\nimport { BitStore } from \"./bit-store-class\";\n\nexport function createInternalBitStore<\n T extends object = Record<string, unknown>,\n>(config: BitConfig<T> = {}) {\n return new BitStore<T>(config);\n}\n\nexport { BitStore };\n","import { createInternalBitStore } from \"../index\";\nimport { BitConfig } from \"../contracts/types\";\nimport {\n BitStoreApi,\n BitFrameworkStoreApi,\n BitStoreHooksApi,\n} from \"../contracts/public/store-api-types\";\nimport { BIT_FRAMEWORK_STORE_SYMBOL } from \"./framework-store-brand\";\nimport { BIT_HOOKS_API_SYMBOL } from \"./hook-brand\";\n\nfunction isHookCompatibleStore<T extends object>(\n store: unknown,\n): store is BitStoreHooksApi<T> {\n if (!store || typeof store !== \"object\") {\n return false;\n }\n\n const candidate = store as Record<PropertyKey, unknown>;\n return (\n candidate[BIT_HOOKS_API_SYMBOL] === true &&\n !!candidate.read &&\n !!candidate.observe &&\n !!candidate.write &&\n !!candidate.feature\n );\n}\n\nexport function resolveBitStoreForHooks<T extends object>(\n store: unknown,\n): BitStoreHooksApi<T> {\n if (isHookCompatibleStore<T>(store)) {\n return store;\n }\n\n throw new Error(\n \"BitForm: o store informado não expõe a API necessária para hooks/framework bindings.\",\n );\n}\n\nfunction isFrameworkBindingStore<T extends object>(\n store: unknown,\n): store is BitFrameworkStoreApi<T> {\n if (!store || typeof store !== \"object\") {\n return false;\n }\n\n const candidate = store as Record<PropertyKey, unknown>;\n return candidate[BIT_FRAMEWORK_STORE_SYMBOL] === true;\n}\n\nexport function createFrameworkStoreAdapter<T extends object>(\n store: unknown,\n): BitFrameworkStoreApi<T> {\n if (!isHookCompatibleStore<T>(store)) {\n throw new Error(\n \"BitForm: o store informado não possui branding de hooks (BIT_HOOKS_API_SYMBOL).\",\n );\n }\n\n if (!isFrameworkBindingStore<T>(store)) {\n throw new Error(\n \"BitForm: o store informado não possui branding de framework (BIT_FRAMEWORK_STORE_SYMBOL).\",\n );\n }\n\n return store as BitFrameworkStoreApi<T>;\n}\n\nfunction applyStoreBranding<T extends object>(\n store: BitStoreApi<T>,\n): BitStoreApi<T> {\n Object.defineProperty(store as object, BIT_HOOKS_API_SYMBOL, {\n value: true,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n\n Object.defineProperty(store as object, BIT_FRAMEWORK_STORE_SYMBOL, {\n value: true,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n\n return store;\n}\n\nexport function createBitStore<T extends object = Record<string, unknown>>(\n config: BitConfig<T> = {},\n): BitStoreApi<T> {\n const internalStore = createInternalBitStore<T>(config);\n\n const storeApi: BitStoreApi<T> = {\n read: internalStore.read,\n observe: internalStore.observe,\n write: internalStore.write,\n feature: internalStore.feature,\n };\n\n return applyStoreBranding(storeApi);\n}\n","import type {\n BitStoreApi,\n BitStoreReadSliceApi,\n BitStoreObserveSliceApi,\n BitStoreWriteSliceApi,\n BitStoreFeatureApi,\n} from \"../contracts/public/store-api-types\";\n\n/**\n * Extracts the `read` slice from a BitStore instance.\n *\n * Use this to pass a read-only API to utility functions and services.\n *\n * @example\n * ```typescript\n * function useFormValidation(read: BitStoreReadSliceApi<MyForm>) {\n * const isValid = read.getIsValid();\n * // ...\n * }\n *\n * useFormValidation(extractReadSlice(store));\n * ```\n */\nexport function extractReadSlice<T extends object>(\n store: BitStoreApi<T>,\n): BitStoreReadSliceApi<T> {\n return store.read;\n}\n\n/**\n * Extracts the `observe` slice from a BitStore instance.\n *\n * Use this to pass an observation-only API to framework hooks and subscriptions.\n *\n * @example\n * ```typescript\n * function useFormSubscribe(observe: BitStoreObserveSliceApi<MyForm>) {\n * useEffect(() => observe.subscribe(handler), [observe]);\n * }\n *\n * useFormSubscribe(extractObserveSlice(store));\n * ```\n */\nexport function extractObserveSlice<T extends object>(\n store: BitStoreApi<T>,\n): BitStoreObserveSliceApi<T> {\n return store.observe;\n}\n\n/**\n * Extracts the `write` slice from a BitStore instance.\n *\n * Use this to pass a write-only API for form mutations.\n *\n * @example\n * ```typescript\n * function useFormActions(write: BitStoreWriteSliceApi<MyForm>) {\n * const handleChange = (path: string, value: any) => {\n * write.setField(path, value);\n * };\n * }\n *\n * useFormActions(extractWriteSlice(store));\n * ```\n */\nexport function extractWriteSlice<T extends object>(\n store: BitStoreApi<T>,\n): BitStoreWriteSliceApi<T> {\n return store.write;\n}\n\n/**\n * Extracts the `feature` slice from a BitStore instance.\n *\n * Use this to pass feature-specific APIs (validation, history, persistence, etc.)\n *\n * @example\n * ```typescript\n * function useFormValidation(feature: BitStoreFeatureApi<MyForm>) {\n * const isValid = await feature.validate();\n * }\n *\n * useFormValidation(extractFeatureSlice(store));\n * ```\n */\nexport function extractFeatureSlice<T extends object>(\n store: BitStoreApi<T>,\n): BitStoreFeatureApi<T> {\n return store.feature;\n}\n\n/**\n * Extracts multiple slices at once for convenience.\n *\n * @example\n * ```typescript\n * const [readApi, writeApi] = extractSlices(store, [\"read\", \"write\"]);\n * ```\n */\nexport function extractSlices<\n T extends object,\n K extends (keyof BitStoreApi<T>)[],\n>(\n store: BitStoreApi<T>,\n keys: readonly [...K],\n): {\n [P in K[number]]: BitStoreApi<T>[P];\n} {\n const result: Partial<BitStoreApi<T>> = {};\n\n for (const key of keys) {\n result[key] = store[key];\n }\n\n return result as {\n [P in K[number]]: BitStoreApi<T>[P];\n };\n}\n"],"mappings":"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","names":["BIT_FRAMEWORK_STORE_SYMBOL","BIT_HOOKS_API_SYMBOL","mergeChangedPaths","previous","next","merged","path","collectChangedValueUpdates","args","values","entries","deriveValue","updates","entry","currentValue","getDeepValue","derivedValue","valueEqual","createDependencyImpactChecker","changedPaths","hasWildcardChange","dependencyPath","changedPath","filterDependencyEntries","isDependencyImpacted","applyValueDerivations","normalizerEntries","applyComputed","targetedNormalizers","normalizerUpdates","normalizedValues","setDeepValues","nextChangedPaths","applyTransformDerivations","sourceValues","transformEntries","transform","BitComputedManager","getComputedEntries","value","values","changedPaths","computedEntries","entriesToRun","nextValues","entry","newValue","currentValue","getDeepValue","cached","valuesEqual","canUseScalarCache","deepEqual","setDeepValue","entries","map","dep","dependents","childIdx","segments","len","prefix","children","reverseDependencies","affectedPaths","queue","currentPath","dependentPath","entryByPath","inDegree","dependencyPath","nextDependents","orderedPaths","nextDegree","path","signature","ordered","changedPath","collect","listeners","parentSegments","childKeys","childDep","BitDirtyManager","path","values","initialValues","current","getDeepValue","initial","valueEqual","collectDirtyPaths","separatorIndex","ancestorPath","result","processedArrays","arrayMatch","arrayPath","arrayVal","setDeepValue","fieldVal","nextIndex","nextRefCount","nextChildrenByPrefix","dirtyPath","prefix","ancestor","set","parentPath","children","nextCount","callback","segments","segment","i","BitMaskManager","name","mask","BitFieldCatalog","path","config","callback","scopeName","index","cfg","list","result","scopedPaths","entry","entryPath","BitFieldConditions","getFieldConfig","path","config","currentValues","dependsOn","dep","requiredPaths","dependentsSet","values","cached","result","errors","val","getDeepValue","changedPath","newValues","affectedFields","visibilityChanged","requiredChanged","queue","visited","currentPath","dependents","depPath","wasHidden","wasRequired","isHiddenNow","isRequiredNow","showIf","value","stripTrailingSeparators","path","normalizePathPrefix","prefix","isPathWithinPrefix","normalizedPrefix","toPathPrefix","index","BitFieldRegistry","BitFieldCatalog","BitFieldConditions","path","callback","config","currentValues","prefix","removedEntries","normalizedPrefix","normalizePathPrefix","isPathWithinPrefix","values","changedPath","newValues","scopeName","defaultIdFactory","defaultUnhandledErrorReporter","error","normalizeConfig","config","rawInitial","validation","history","defaultPersistKey","onUnhandledError","persistErrorHandler","persist","raw","deepClone","getDefaultStorage","storageLike","key","value","BitPersistManager","config","getValues","getDirtyValues","applyRestoredValues","error","storage","payload","serialized","raw","parsed","BitPluginManager","plugins","contextFactory","context","plugin","maybeTeardown","error","event","hook","result","source","pluginName","payload","onError","index","teardown","hookName","BitPersistEffects","persistManager","_nextState","valuesChanged","BitPluginEffects","pluginManager","event","BitBusEffects","storeId","storeBusPort","bus","enableBusDispatch","nextState","BitStoreEffectEngine","storeId","storeBusPort","bus","persistManager","pluginManager","enableBusDispatch","BitPersistEffects","BitPluginEffects","BitBusEffects","nextState","valuesChanged","event","rootGlobal","id","state","fn","bitBus","noopBus","getNoopBitBus","createBitBus","listeners","shouldEnableStoreBus","config","createStoreEffects","args","storeId","storeBusPort","getState","getConfig","getValues","getDirtyValues","applyPersistedValues","persistManager","BitPersistManager","pluginManager","BitPluginManager","enableBusDispatch","resolvedBus","bitBus","getNoopBitBus","effects","BitStoreEffectEngine","buildFieldUnregisterPatch","args","state","path","nextErrors","nextTouched","changed","patchStateOperation","partialState","changedPaths","options","touchFieldsOperation","paths","persistMetaOperation","patch","validationCommitOperation","errors","isValid","registerStoreField","args","path","config","state","fieldRegistry","subscriptions","stateReader","invalidateFieldIndexes","getScopeRegistrySubscriptionPath","unregisterStoreField","hasStaticConfig","validationCleanupField","dispatch","fieldConfig","cleanupPatch","buildFieldUnregisterPatch","patchStateOperation","unregisterStorePrefix","prefix","validationCleanupPrefix","removedEntries","scopeName","restoreStorePersisted","args","dispatch","effects","persistMetaOperation","error","forceStorePersistedSave","clearStorePersisted","applyStorePersistedValues","values","state","initialValues","validation","fieldRegistry","dirtyManager","saveHistorySnapshot","nextValues","deepClone","deepMerge","isDirty","patchStateOperation","BitSubscriptionEngine","getState","maxCacheSize","listener","selector","options","equalityFn","lastSlice","subscription","nextState","nextSlice","scopedPaths","pathKey","indexPath","listeners","paths","changedPaths","normalizedChangedPaths","_paths","prefix","normalizedPrefix","normalizePathPrefix","key","isPathWithinPrefix","seen","normalized","path","trimmed","scopedSubscribers","currentVersion","addByPath","changedPath","visitor","segments","currentPath","index","separatorIndex","cached","keys","i","cache","value","maxSize","oldestKey","BitPipelineRunner","steps","context","step","BitSyncPipelineRunner","result","hasAnyError","errors","_path","mergeValidationErrors","args","targetFields","currentErrors","allErrors","asyncErrors","scopedErrors","field","scopedResult","resolveAsyncValidationPaths","hiddenFields","getFieldConfig","forEachFieldConfig","paths","path","config","runImmediateAsyncValidationStage","values","validationId","currentValidationId","cancelFieldAsync","createAbortController","setAbortController","clearAbortController","setFieldValidating","setAsyncError","clearAsyncError","asyncValidate","controller","errorMessage","getDeepValue","BitAsyncValidationScheduler","port","path","value","validate","delay","controller","prefix","isPathWithinPrefix","nextDueAt","job","now","dueJobs","errorMessage","BitValidationDebouncer","port","scopeFields","options","configuredDelay","delay","f","resolvedScopeFields","resolveTargetFieldsStage","args","ctx","deps","scopeFields","runBeforeValidateHooksStage","runSynchronousTrackStage","resolverErrors","dynamicRequiredErrors","hiddenPath","runAsyncTrackStage","targetPaths","resolveAsyncValidationPaths","path","mergeAsyncTrackStage","merged","mergeValidationErrors","hasAnyError","abortIfOutdatedStage","commitValidationStage","validationCommitOperation","commitSynchronousScopeValidation","args","scopeFields","store","asyncErrors","currentState","resolverErrors","dynamicRequiredErrors","allErrors","hiddenPath","scopedErrors","field","validationCommitOperation","hasAnyError","BitValidationCoordinator","validationId","path","controller","prefix","onPathCancelled","isPathWithinPrefix","BitValidationManager","store","fn","delayMs","timeoutId","BitValidationDebouncer","options","BitAsyncValidationScheduler","path","isValidating","message","commitSynchronousScopeValidation","stageDeps","values","validationId","BitPipelineRunner","ctx","resolveTargetFieldsStage","runBeforeValidateHooksStage","runSynchronousTrackStage","abortIfOutdatedStage","runAsyncTrackStage","mergeAsyncTrackStage","commitValidationStage","BitValidationCoordinator","currentState","nextValidating","patchStateOperation","prefix","newErrors","validationCommitOperation","hasAnyError","value","config","asyncValidate","asyncValidateOn","delay","scopeFields","state","field","fieldPath","context","error","runImmediateAsyncValidationStage","controller","clearErrorPath","errors","path","alreadyMutated","nextErrors","hasMutated","BitFieldUpdateManager","store","BitSyncPipelineRunner","ctx","path","value","meta","state","context","getDeepValue","setDeepValue","clearErrorPath","depPath","changedPaths","patchStateOperation","validationTargets","BitValuesLifecycleManager","store","values","prefix","changedPaths","key","value","nextPath","newValues","options","mergedValues","deepMerge","previousValues","clonedValues","deepClone","patchStateOperation","snapshot","isDirty","initialCloned","origin","BitSubmitLifecycleManager","store","BitPipelineRunner","ctx","onSuccess","context","deepClone","error","patchStateOperation","currentErrors","newTouched","path","updates","hiddenPath","applyTransformDerivations","setDeepValues","BitLifecycleManager","ports","BitFieldUpdateManager","BitValuesLifecycleManager","BitSubmitLifecycleManager","path","value","meta","newValues","options","values","snapshot","onSuccess","isPlainObject","value","createHistoryPatch","previousValue","nextValue","operations","visit","previousNode","nextNode","path","hadPreviousValue","hasNextValue","deepEqual","keys","key","childPath","childHasPrevious","childHasNext","deepClone","applyHistoryPatch","currentValue","patch","direction","operation","shouldSet","setDeepValue","unsetDeepValue","BitHistoryManager","enableHistory","maxHistory","values","deepEqual","patch","createHistoryPatch","deepClone","previousSnapshot","applyHistoryPatch","nextSnapshot","initialValues","oldestPatch","BitArrayManager","store","path","value","arr","index","next","state","getDeepValue","previousArray","toPathPrefix","newArray","_","i","currentIdx","indexA","indexB","from","to","item","items","mutate","meta","current","args","nextArray","reindex","previousState","reindexedMeta","reindexFieldArrayMeta","patchStateOperation","BitScopeManager","getState","getInitialValues","getScopeFields","isPathDirty","scopeName","fields","state","hasErrors","f","isDirty","errors","result","field","error","BitFieldQueryManager","fieldMetadataProvider","getState","isPathDirty","path","values","BitErrorManager","getState","dispatch","path","message","newErrors","patchStateOperation","errors","serverErrors","formattedErrors","key","value","analyzeCyclicDependencies","entries","cycles","graph","entry","dep","e","visited","recursionStack","hasCycle","node","path","neighbors","neighbor","cycleStart","cyclePath","p","cycle","c","BitStoreCapabilityRegistry","key","capability","createStoreCapabilityRegistry","registerStoreCapabilities","args","registry","ports","fieldRegistry","BitValidationManager","BitLifecycleManager","BitHistoryManager","BitArrayManager","BitScopeManager","scopeName","path","BitFieldQueryManager","BitErrorManager","operation","composeStoreCapabilities","createStoreCapabilityRegistry","createInitialStoreState","config","computedManager","initialValues","deepClone","fieldConfig","computedCycles","analyzeCyclicDependencies","applyValueDerivations","values","changedPaths","createValidationPort","deps","callback","config","path","values","event","createLifecyclePort","fieldUpdate","changedPath","currentValues","newValues","scopeFields","options","value","nextValues","baselineValues","initialValues","submit","createArrayPort","composeRuntimeFeatureCapabilities","args","config","fieldRegistry","dirtyManager","baselineManager","runtimeContext","stateAccess","fieldAccess","featureAccess","actions","validationPort","createValidationPort","lifecyclePorts","createLifecyclePort","values","arrayPort","createArrayPort","path","value","meta","composeStoreCapabilities","createStoreRuntime","args","config","fieldRegistry","dirtyManager","computedManager","rawConfig","baselineManager","runtimeContext","stateAccess","fieldAccess","featureAccess","actions","capabilityComposition","composeRuntimeFeatureCapabilities","state","createInitialStoreState","subscriptions","BitSubscriptionEngine","storeId","createStoreBatchState","beginStoreBatch","batchState","endStoreBatch","getEffectiveStoreState","currentState","trackBatchedStoreUpdate","updateResult","pathSet","path","flushStoreBatchState","args","applyValueDerivations","nextState","changedPaths","valuesChanged","normalizeErrors","errors","hasUndefined","message","normalized","path","typedMessage","applyStateUpdate","args","currentState","partialState","changedPaths","applyValueDerivations","applyComputedValues","deriveValues","values","nextState","valuesChanged","hasAnyError","explicitChangedPaths","inferredChangedPaths","inferChangedPaths","effectiveChangedPaths","mergeChangedPaths","pathMaps","map","merged","assertNever","value","routeStoreOperation","currentState","operation","touched","path","patchStateOperation","executeStatePatchOperation","args","applyValueDerivations","hasValuesPatch","effectiveChangedPaths","applyStateUpdate","executeStoreOperation","patchOperation","values","changedPaths","dispatchStoreKernelOperation","state","batchState","onStateCommitted","getEffectiveStoreState","updateResult","trackBatchedStoreUpdate","flushStoreKernelBatch","flushResult","flushStoreBatchState","runStoreStateBatch","args","batchState","callback","flushBatchedStateUpdates","beginStoreBatch","endStoreBatch","commitStoreStateUpdate","payload","setState","notifySubscriptions","notifyEffects","dispatchStoreStateOperation","state","operation","applyValueDerivations","onStateCommitted","dispatchStoreKernelOperation","saveStoreHistorySnapshot","values","saveHistory","flushStoreBatchedStateUpdates","nextState","flushStoreKernelBatch","BitStoreRuntimeKernel","args","createStoreBatchState","name","getEffectiveStoreState","callback","runStoreStateBatch","operation","dispatchStoreStateOperation","values","changedPaths","payload","before","saveStoreHistorySnapshot","after","getHistorySubscriptionPath","commitStoreStateUpdate","state","valuesChanged","historyBeforeFlush","flushStoreBatchedStateUpdates","historyAfterFlush","BitBaselineManager","baselineValues","deepClone","values","composeBitStoreRuntime","args","rawConfig","storeBusPort","config","normalizeConfig","baselineManager","BitBaselineManager","fieldRegistry","BitFieldRegistry","computedManager","BitComputedManager","dirtyManager","BitDirtyManager","maskManager","BitMaskManager","name","mask","invalidateFieldIndexes","runtimeKernel","getRuntimeKernel","runtime","createStoreRuntime","operation","callback","path","scopeName","message","options","value","meta","prefix","unregisterStorePrefix","fieldPrefix","scopeFields","getDirtyValues","effectiveState","applyPersistedValues","values","applyStorePersistedValues","effects","createStoreEffects","BitStoreRuntimeKernel","changedPaths","applyValueDerivations","nextValues","nextChangedPaths","resolveFieldMask","args","path","getFieldConfig","masks","maskOption","createFieldStateSnapshot","state","value","isHidden","isRequired","isDirty","isValidating","pathKey","buildStoreSlicesApi","deps","readState","path","scopeName","listener","selector","options","value","paths","values","message","errors","serverErrors","scopeFields","callback","onSuccess","config","prefix","index","from","to","indexA","indexB","items","restorePersistedFeature","args","dispatch","effects","restoreStorePersisted","forceSavePersistedFeature","forceStorePersistedSave","clearPersistedFeature","clearStorePersisted","runUndoFeature","history","applyHistoryState","prevState","runRedoFeature","nextState","readHistoryFeatureMetadata","collectTrackedSelectorPaths","state","selector","trackedPaths","createTrackingProxy","value","basePath","target","key","receiver","keyAsString","childPath","child","proxyState","normalizedPaths","path","normalizedPath","normalizeTrackedPath","areTrackedPathSetsEqual","previousPaths","nextPaths","next","withTrackedSelectorPaths","paths","options","createTrackedSubscription","args","getState","subscribeSelector","listener","activeUnsubscribe","activePaths","isDisposed","isResubscribeQueued","subscribeWithPaths","slice","subscribeStoreSelector","args","getState","subscriptions","selector","listener","options","equalityFn","valueEqual","createTrackedSubscription","trackedSelector","trackedListener","trackedOptions","subscribeStorePath","path","subscribeSelector","mergedPaths","state","getDeepValue","subscribeStoreFieldState","getFieldState","prev","next","subscribeStoreFormMeta","subscribeStorePersistMeta","subscribeStoreHistoryMeta","readHistoryMeta","getHistorySubscriptionPath","isHistoryMetaEqual","subscribeStoreScopeStatus","scopeName","getScopeFields","readScopeStatus","registryPath","getScopeRegistrySubscriptionPath","lastStatus","unsubscribeScoped","subscribeScoped","scopePaths","getScopeSubscriptionPaths","status","isScopeStatusEqual","unsubscribeRegistry","nextStatus","createBitStoreDomains","args","runtime","config","fieldRegistry","dirtyManager","stateReader","readDomain","path","readHistoryFeatureMetadata","scopeName","observeDomain","listener","subscribeStorePersistMeta","selector","persistListener","options","subscribeStoreHistoryMeta","historyListener","subscribeStoreScopeStatus","name","scopeListener","subscribeStoreSelector","subscribeStorePath","pathListener","selectorOptions","subscribeStoreFieldState","fieldPath","fieldListener","subscribeStoreFormMeta","metaListener","fieldConfig","registerStoreField","unregisterStoreField","operation","prefix","unregisterStorePrefix","fieldPrefix","value","touchFieldsOperation","paths","values","message","errors","serverErrors","callback","onSuccess","index","indexA","indexB","from","to","items","runUndoFeature","runRedoFeature","scopeFields","restorePersistedFeature","forceSavePersistedFeature","clearPersistedFeature","BitStoreStateReader","deps","key","path","pathKey","state","cached","value","getDeepValue","snapshot","createFieldStateSnapshot","BitStore","BIT_HOOKS_API_SYMBOL","BIT_FRAMEWORK_STORE_SYMBOL","config","composition","composeBitStoreRuntime","stateReader","BitStoreStateReader","path","domains","createBitStoreDomains","slices","buildStoreSlicesApi","resolveFieldMask","fieldPath","index","createInternalBitStore","config","BitStore","isHookCompatibleStore","store","candidate","BIT_HOOKS_API_SYMBOL","resolveBitStoreForHooks","isFrameworkBindingStore","BIT_FRAMEWORK_STORE_SYMBOL","createFrameworkStoreAdapter","applyStoreBranding","createBitStore","config","internalStore","createInternalBitStore","storeApi","extractReadSlice","store","extractObserveSlice","extractWriteSlice","extractFeatureSlice","extractSlices","keys","result","key"]}
|