@logixjs/form 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Error-VvknI9Wj.d.cts +37 -0
- package/dist/Error-VvknI9Wj.d.ts +37 -0
- package/dist/Error.cjs +46 -0
- package/dist/Error.cjs.map +1 -0
- package/dist/Error.d.cts +1 -0
- package/dist/Error.d.ts +1 -0
- package/dist/Error.js +14 -0
- package/dist/Error.js.map +1 -0
- package/dist/Form.cjs +2455 -0
- package/dist/Form.cjs.map +1 -0
- package/dist/Form.d.cts +64 -0
- package/dist/Form.d.ts +64 -0
- package/dist/Form.js +25 -0
- package/dist/Form.js.map +1 -0
- package/dist/FormView-CAg9LVrf.d.cts +17 -0
- package/dist/FormView-CAg9LVrf.d.ts +17 -0
- package/dist/FormView.cjs +61 -0
- package/dist/FormView.cjs.map +1 -0
- package/dist/FormView.d.cts +1 -0
- package/dist/FormView.d.ts +1 -0
- package/dist/FormView.js +8 -0
- package/dist/FormView.js.map +1 -0
- package/dist/Path-DOjMkAS6.d.cts +42 -0
- package/dist/Path-DOjMkAS6.d.ts +42 -0
- package/dist/Path.cjs +132 -0
- package/dist/Path.cjs.map +1 -0
- package/dist/Path.d.cts +1 -0
- package/dist/Path.d.ts +1 -0
- package/dist/Path.js +22 -0
- package/dist/Path.js.map +1 -0
- package/dist/Rule-BOAiSVz9.d.cts +202 -0
- package/dist/Rule-BOAiSVz9.d.ts +202 -0
- package/dist/Rule.cjs +307 -0
- package/dist/Rule.cjs.map +1 -0
- package/dist/Rule.d.cts +2 -0
- package/dist/Rule.d.ts +2 -0
- package/dist/Rule.js +34 -0
- package/dist/Rule.js.map +1 -0
- package/dist/SchemaErrorMapping-Cu5gl7-Z.d.ts +50 -0
- package/dist/SchemaErrorMapping-DOrgLzii.d.cts +50 -0
- package/dist/SchemaErrorMapping.cjs +305 -0
- package/dist/SchemaErrorMapping.cjs.map +1 -0
- package/dist/SchemaErrorMapping.d.cts +2 -0
- package/dist/SchemaErrorMapping.d.ts +2 -0
- package/dist/SchemaErrorMapping.js +17 -0
- package/dist/SchemaErrorMapping.js.map +1 -0
- package/dist/SchemaPathMapping-BCoUW-_q.d.ts +16 -0
- package/dist/SchemaPathMapping-BUq2zm8W.d.cts +20 -0
- package/dist/SchemaPathMapping-BUq2zm8W.d.ts +20 -0
- package/dist/SchemaPathMapping-DJnExqM3.d.cts +16 -0
- package/dist/SchemaPathMapping.cjs +179 -0
- package/dist/SchemaPathMapping.cjs.map +1 -0
- package/dist/SchemaPathMapping.d.cts +2 -0
- package/dist/SchemaPathMapping.d.ts +2 -0
- package/dist/SchemaPathMapping.js +12 -0
- package/dist/SchemaPathMapping.js.map +1 -0
- package/dist/Trait-Bu794ROY.d.cts +49 -0
- package/dist/Trait-Bu794ROY.d.ts +49 -0
- package/dist/Trait.cjs +48 -0
- package/dist/Trait.cjs.map +1 -0
- package/dist/Trait.d.cts +2 -0
- package/dist/Trait.d.ts +2 -0
- package/dist/Trait.js +12 -0
- package/dist/Trait.js.map +1 -0
- package/dist/chunk-5DRI5UGD.js +105 -0
- package/dist/chunk-5DRI5UGD.js.map +1 -0
- package/dist/chunk-AD2ZA7KA.js +23 -0
- package/dist/chunk-AD2ZA7KA.js.map +1 -0
- package/dist/chunk-EOXJRCM6.js +146 -0
- package/dist/chunk-EOXJRCM6.js.map +1 -0
- package/dist/chunk-JZ5FZKPJ.js +71 -0
- package/dist/chunk-JZ5FZKPJ.js.map +1 -0
- package/dist/chunk-LNJJPZAG.js +46 -0
- package/dist/chunk-LNJJPZAG.js.map +1 -0
- package/dist/chunk-NAR5SIFP.js +22 -0
- package/dist/chunk-NAR5SIFP.js.map +1 -0
- package/dist/chunk-OJVEZKU7.js +117 -0
- package/dist/chunk-OJVEZKU7.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-PZ5AY32C.js.map +1 -0
- package/dist/chunk-S5JTU2CM.js +31 -0
- package/dist/chunk-S5JTU2CM.js.map +1 -0
- package/dist/chunk-YHDEJ47V.js +1885 -0
- package/dist/chunk-YHDEJ47V.js.map +1 -0
- package/dist/chunk-YVHXLY63.js +315 -0
- package/dist/chunk-YVHXLY63.js.map +1 -0
- package/dist/impl-BfSlyM58.d.ts +225 -0
- package/dist/impl-Ccdm5eDF.d.cts +225 -0
- package/dist/index.cjs +2689 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/react/index.cjs +332 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +43 -0
- package/dist/react/index.d.ts +43 -0
- package/dist/react/index.js +201 -0
- package/dist/react/index.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/form/impl.ts","../src/internal/form/traits.ts","../src/internal/form/errors.ts","../src/internal/form/arrays.ts","../src/internal/form/reducer.ts","../src/internal/form/controller.ts","../src/internal/dsl/traits.ts","../src/internal/form/install.ts","../src/internal/form/artifacts.ts","../src/internal/dsl/derived.ts","../src/internal/dsl/rules.ts","../src/internal/dsl/from.ts","../src/internal/dsl/node.ts","../src/internal/dsl/list.ts"],"sourcesContent":["import * as Logix from '@logixjs/core'\nimport { Effect, Schema } from 'effect'\nimport { mergeTraitSpecs, normalizeDerived, normalizeValidateOn, wrapTraitsForValidateOn } from './traits.js'\nimport { makeFormReducers } from './reducer.js'\nimport { makeFormController } from './controller.js'\nimport type { RuleDescriptor, RuleScope, RulesManifest } from './rules.js'\nimport type { RulesSpec } from '../dsl/rules.js'\nimport { traits as traitsDsl } from '../dsl/traits.js'\nimport { install as installLogic } from './install.js'\nimport { makeFormRulesManifestArtifactExporter } from './artifacts.js'\nimport * as Rule from '../../Rule.js'\nimport type { DerivedSpec } from '../../Trait.js'\n\nexport type { RuleDescriptor, RuleScope, RulesManifest } from './rules.js'\n\nexport type FormErrors = unknown\nexport type FormUiState = unknown\n\nexport type FormMeta = {\n readonly submitCount: number\n readonly isSubmitting: boolean\n readonly isDirty: boolean\n /**\n * errorCount:\n * - Used for O(1) reads in `FormView.isValid/canSubmit`.\n * - Semantics: the number of ErrorValue leaf nodes in the errors tree (including `$manual/$schema`).\n */\n readonly errorCount: number\n}\n\nexport type FormState<TValues extends object> = TValues & {\n readonly errors: FormErrors\n readonly ui: FormUiState\n readonly $form: FormMeta\n}\n\nconst FormActions = {\n setValue: Schema.Struct({ path: Schema.String, value: Schema.Unknown }),\n blur: Schema.Struct({ path: Schema.String }),\n submit: Schema.Void,\n validate: Schema.Void,\n validatePaths: Schema.Array(Schema.String),\n submitAttempt: Schema.Void,\n setSubmitting: Schema.Boolean,\n reset: Schema.UndefinedOr(Schema.Unknown),\n setError: Schema.Struct({ path: Schema.String, error: Schema.Unknown }),\n clearErrors: Schema.UndefinedOr(Schema.Array(Schema.String)),\n arrayAppend: Schema.Struct({ path: Schema.String, value: Schema.Unknown }),\n arrayPrepend: Schema.Struct({ path: Schema.String, value: Schema.Unknown }),\n arrayRemove: Schema.Struct({ path: Schema.String, index: Schema.Number }),\n arraySwap: Schema.Struct({\n path: Schema.String,\n indexA: Schema.Number,\n indexB: Schema.Number,\n }),\n arrayMove: Schema.Struct({\n path: Schema.String,\n from: Schema.Number,\n to: Schema.Number,\n }),\n} as const\n\ntype FormShapeForActions = FormShape<Record<string, never>>\nexport type FormAction = Logix.ActionOf<FormShapeForActions>\n\nexport type FormShape<TValues extends object> = Logix.Shape<Schema.Schema<FormState<TValues>, any>, typeof FormActions>\n\nexport interface FormMakeConfig<TValues extends object> {\n readonly values: Schema.Schema<TValues, any>\n readonly initialValues: TValues\n readonly validateOn?: ReadonlyArray<'onSubmit' | 'onChange' | 'onBlur'>\n readonly reValidateOn?: ReadonlyArray<'onSubmit' | 'onChange' | 'onBlur'>\n readonly debounceMs?: number\n /**\n * rules:\n * - Recommended: express validations using rules only (field/list/root rules).\n * - The result will be compiled into an equivalent StateTraitSpec (does not introduce a second runtime).\n */\n readonly rules?: RulesSpec<TValues>\n readonly traits?: Logix.StateTrait.StateTraitSpec<TValues>\n /**\n * derived:\n * - The entry point for domain-level linkage/derivation (by default, only writes back to values/ui are allowed).\n * - The result must be fully reducible to StateTraitSpec/IR (computed/link/source).\n */\n readonly derived?: DerivedSpec<TValues>\n}\n\nexport type FormExtendDef<TValues extends object> = Omit<\n Logix.Module.MakeExtendDef<Schema.Schema<FormState<TValues>, any>, typeof FormActions, {}>,\n 'actions'\n> & { readonly actions?: never }\n\nexport interface FormController<TValues extends object> {\n readonly runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>\n readonly getState: Effect.Effect<FormState<TValues>>\n readonly dispatch: (action: FormAction) => Effect.Effect<void>\n readonly submit: () => Effect.Effect<void>\n\n readonly controller: {\n readonly validate: () => Effect.Effect<void, never, any>\n readonly validatePaths: (paths: ReadonlyArray<string> | string) => Effect.Effect<void, never, any>\n readonly reset: (values?: TValues) => Effect.Effect<void>\n readonly setError: (path: string, error: unknown) => Effect.Effect<void>\n readonly clearErrors: (paths?: ReadonlyArray<string> | string) => Effect.Effect<void>\n readonly handleSubmit: (handlers: {\n readonly onValid: (values: TValues) => Effect.Effect<void, any, any>\n readonly onInvalid?: (errors: unknown) => Effect.Effect<void, any, any>\n }) => Effect.Effect<void, any, any>\n }\n\n readonly field: (path: string) => {\n readonly get: Effect.Effect<unknown>\n readonly set: (value: unknown) => Effect.Effect<void>\n readonly blur: () => Effect.Effect<void>\n }\n\n readonly fieldArray: (path: string) => {\n readonly get: Effect.Effect<ReadonlyArray<unknown>>\n readonly append: (value: unknown) => Effect.Effect<void>\n readonly prepend: (value: unknown) => Effect.Effect<void>\n readonly remove: (index: number) => Effect.Effect<void>\n readonly swap: (indexA: number, indexB: number) => Effect.Effect<void>\n readonly move: (from: number, to: number) => Effect.Effect<void>\n }\n}\n\nexport type FormHandleExt<TValues extends object> = {\n readonly controller: FormController<TValues>['controller']\n readonly rulesManifest: () => RulesManifest\n readonly rulesManifestWarnings: () => ReadonlyArray<string>\n}\n\nexport type FormModule<Id extends string, TValues extends object> = Logix.Module.Module<\n Id,\n FormShape<TValues>,\n FormHandleExt<TValues>,\n any\n> & {\n readonly controller: {\n readonly make: (runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>) => FormController<TValues>\n }\n}\n\nconst initialMeta = (): FormMeta => ({\n submitCount: 0,\n isSubmitting: false,\n isDirty: false,\n errorCount: 0,\n})\n\nexport const make = <Id extends string, TValues extends object>(\n id: Id,\n config: FormMakeConfig<TValues>,\n extend?: FormExtendDef<TValues>,\n): FormModule<Id, TValues> => {\n const ErrorsSchema = Schema.Unknown\n const UiSchema = Schema.Unknown\n const MetaSchema = Schema.Struct({\n submitCount: Schema.Number,\n isSubmitting: Schema.Boolean,\n isDirty: Schema.Boolean,\n errorCount: Schema.Number,\n })\n\n const StateSchema = Schema.extend(\n config.values,\n Schema.Struct({\n errors: ErrorsSchema,\n ui: UiSchema,\n $form: MetaSchema,\n }),\n )\n\n const Actions = FormActions\n\n type State = Schema.Schema.Type<typeof StateSchema>\n type Reducers = Logix.ReducersFromMap<typeof StateSchema, typeof Actions>\n const reducers = makeFormReducers<TValues>({\n initialValues: config.initialValues,\n }) as unknown as Reducers\n\n const validateOn = normalizeValidateOn(config.validateOn, ['onSubmit'])\n const reValidateOn = normalizeValidateOn(config.reValidateOn, ['onChange'])\n const assertCanonicalValuePath = (label: string, path: string): void => {\n const p = String(path ?? '').trim()\n if (!p) throw new Error(`[Form.make] ${label} must be a non-empty path`)\n if (p === '$root') return\n if (p.includes('[]') || p.includes('[') || p.includes(']')) {\n throw new Error(`[Form.make] ${label} \"${p}\" must not use bracket syntax`)\n }\n const segments = p\n .split('.')\n .map((s) => s.trim())\n .filter(Boolean)\n if (segments.length === 0) {\n throw new Error(`[Form.make] ${label} \"${p}\" must be a non-empty path`)\n }\n for (const seg of segments) {\n if (/^[0-9]+$/.test(seg)) {\n throw new Error(`[Form.make] ${label} \"${p}\" must not contain numeric segments`)\n }\n }\n }\n\n const assertValidListIdentity = (identity: Rule.ListIdentityPolicy, listPath: string): void => {\n if (!identity || typeof identity !== 'object') {\n throw new Error(`[Form.make] Missing list identity for \"${listPath}\"`)\n }\n const mode = (identity as any).mode\n if (mode === 'trackBy') {\n const trackBy = (identity as any).trackBy\n if (typeof trackBy !== 'string' || trackBy.trim().length === 0) {\n throw new Error(`[Form.make] identity.trackBy for \"${listPath}\" must be a non-empty string`)\n }\n if (trackBy.includes('[') || trackBy.includes(']')) {\n throw new Error(`[Form.make] identity.trackBy for \"${listPath}\" must not contain brackets (got \"${trackBy}\")`)\n }\n return\n }\n if (mode === 'store' || mode === 'index') return\n throw new Error(`[Form.make] Invalid identity.mode for \"${listPath}\" (got \"${String(mode)}\")`)\n }\n\n const compileRulesToTraitSpec = (rulesSpec: RulesSpec<TValues>): Logix.StateTrait.StateTraitSpec<TValues> => {\n if (!rulesSpec || (rulesSpec as any)._tag !== 'FormRulesSpec') {\n throw new Error(`[Form.make] \"rules\" must be a FormRulesSpec (from Form.rules(...)/rules.schema(...))`)\n }\n\n const joinPath = (prefix: string, suffix: string): string => {\n if (!prefix) return suffix\n if (!suffix) return prefix\n return `${prefix}.${suffix}`\n }\n\n const dirnamePath = (path: string): string => {\n const p = String(path ?? '').trim()\n if (!p) return ''\n const idx = p.lastIndexOf('.')\n return idx >= 0 ? p.slice(0, idx) : ''\n }\n\n const isRelativeDep = (dep: unknown): dep is string => {\n if (typeof dep !== 'string') return false\n const d = dep.trim()\n if (!d) return false\n if (d === '$root') return false\n if (d.includes('[') || d.includes(']')) return false\n if (d.includes('.')) return false\n return true\n }\n\n const prefixDeps = (deps: unknown, prefix: string): ReadonlyArray<string> | undefined => {\n if (!Array.isArray(deps)) return undefined\n const out: Array<string> = []\n for (const raw of deps) {\n if (typeof raw !== 'string') continue\n const d = raw.trim()\n if (!d) continue\n out.push(isRelativeDep(d) ? joinPath(prefix, d) : d)\n }\n return out\n }\n\n const prefixRuleInputDeps = (input: Rule.RuleInput<any, any>, prefix: string): Rule.RuleInput<any, any> => {\n if (!input || typeof input !== 'object') return input\n if (Array.isArray(input)) return input\n\n const anyInput = input as any\n const deps = prefixDeps(anyInput.deps, prefix)\n const validate = anyInput.validate\n\n if (typeof validate === 'function') {\n return deps !== undefined ? { ...anyInput, deps } : input\n }\n\n if (validate && typeof validate === 'object' && !Array.isArray(validate)) {\n const nextValidate: Record<string, unknown> = { ...(validate as any) }\n for (const [name, raw] of Object.entries(validate as any)) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) continue\n const entryDeps = prefixDeps((raw as any).deps, prefix)\n if (entryDeps !== undefined) {\n nextValidate[name] = { ...(raw as any), deps: entryDeps }\n }\n }\n return {\n ...anyInput,\n ...(deps !== undefined ? { deps } : {}),\n validate: nextValidate,\n }\n }\n\n return deps !== undefined ? { ...anyInput, deps } : input\n }\n\n const decls = Array.isArray((rulesSpec as any).decls) ? (rulesSpec as any).decls : []\n\n const spec: Record<string, unknown> = {}\n const declared = new Set<string>()\n\n const withDefaultDeps = (ruleSet: Record<string, any>, defaultDep: string): Record<string, any> => {\n const out: Record<string, any> = {}\n for (const name of Object.keys(ruleSet)) {\n const r = ruleSet[name]\n if (!r || typeof r !== 'object' || Array.isArray(r)) {\n out[name] = r\n continue\n }\n const deps = Array.isArray(r.deps) ? r.deps : []\n out[name] = deps.length > 0 ? r : { ...r, deps: [defaultDep] }\n }\n return out\n }\n\n const reserve = (kind: string, path: string): void => {\n const k = `${kind}:${path}`\n if (declared.has(k)) {\n throw new Error(`[Form.make] Duplicate rules declaration for ${kind} \"${path}\"`)\n }\n declared.add(k)\n }\n\n for (const decl of decls as ReadonlyArray<Rule.RulesDecl<TValues>>) {\n if (!decl || typeof decl !== 'object') continue\n\n if ((decl as any).kind === 'field') {\n const valuePath = String((decl as any).valuePath ?? '').trim()\n assertCanonicalValuePath('field path', valuePath)\n if (valuePath === '$root') {\n throw new Error(`[Form.make] field path \"$root\" is not allowed (use Form.Rule.root(...))`)\n }\n\n reserve('field', valuePath)\n\n const errorTarget = (decl as any).errorTarget as Rule.ErrorTarget | undefined\n if (errorTarget !== undefined && errorTarget !== '$value' && errorTarget !== '$self') {\n throw new Error(`[Form.make] Invalid errorTarget for field \"${valuePath}\"`)\n }\n\n const depsPrefix = errorTarget === '$self' ? valuePath : dirnamePath(valuePath)\n const ruleInput = prefixRuleInputDeps((decl as any).rule as any, depsPrefix)\n const rules = withDefaultDeps(Rule.make(ruleInput as any) as Record<string, any>, valuePath)\n const writebackPath = errorTarget === '$self' ? `errors.${valuePath}.$self` : undefined\n\n spec[valuePath] = {\n fieldPath: valuePath,\n kind: 'check',\n meta: {\n rules,\n writeback: {\n kind: 'errors',\n ...(writebackPath ? { path: writebackPath } : {}),\n },\n },\n } satisfies Logix.StateTrait.StateTraitEntry<any, any>\n\n continue\n }\n\n if ((decl as any).kind === 'root') {\n reserve('root', '$root')\n const ruleInput = prefixRuleInputDeps((decl as any).rule as any, '')\n const rules = Rule.make(ruleInput as any) as Record<string, any>\n spec.$root = {\n fieldPath: '$root',\n kind: 'check',\n meta: {\n rules,\n writeback: { kind: 'errors' },\n },\n } satisfies Logix.StateTrait.StateTraitEntry<any, any>\n continue\n }\n\n if ((decl as any).kind === 'list') {\n const listPath = String((decl as any).listPath ?? '').trim()\n assertCanonicalValuePath('list path', listPath)\n if (listPath === '$root') {\n throw new Error(`[Form.make] list path \"$root\" is not allowed`)\n }\n\n reserve('list', listPath)\n\n const identity = (decl as any).identity as Rule.ListIdentityPolicy\n assertValidListIdentity(identity, listPath)\n\n const itemInput = (decl as any).item as Rule.RuleInput<any, any> | undefined\n const listInput = (decl as any).list as Rule.RuleInput<any, any> | undefined\n\n const itemRules = itemInput ? (Rule.make(itemInput as any) as any) : undefined\n const listRules = listInput ? (Rule.make(listInput as any) as any) : undefined\n\n spec[listPath] = Logix.StateTrait.list({\n identityHint:\n (identity as any).mode === 'trackBy' ? { trackBy: String((identity as any).trackBy) } : undefined,\n item: itemRules ? Logix.StateTrait.node({ check: itemRules }) : undefined,\n list: listRules ? Logix.StateTrait.node<ReadonlyArray<any>>({ check: listRules }) : undefined,\n })\n\n continue\n }\n\n const kind = String((decl as any).kind ?? '')\n throw new Error(`[Form.make] Unknown rules declaration kind \"${kind}\"`)\n }\n\n return spec as any\n }\n\n const toFieldPathSegments = (label: string, valuePath: string): ReadonlyArray<string> => {\n assertCanonicalValuePath(label, valuePath)\n if (valuePath === '$root') return ['$root']\n return valuePath\n .split('.')\n .map((s) => s.trim())\n .filter(Boolean)\n }\n\n const normalizeAutoValidateOn = (input: unknown): ReadonlyArray<Rule.AutoValidateOn> | undefined => {\n if (!Array.isArray(input)) return undefined\n const out: Array<Rule.AutoValidateOn> = []\n for (const x of input) {\n if (x === 'onChange' || x === 'onBlur') out.push(x)\n }\n if (out.length === 0) return undefined\n return Array.from(new Set(out)).sort((a, b) => a.localeCompare(b))\n }\n\n const normalizeRuleDeps = (deps: unknown): ReadonlyArray<string> => {\n if (!Array.isArray(deps)) return []\n const out: Array<string> = []\n for (const x of deps) {\n if (typeof x !== 'string') continue\n const v = x.trim()\n if (!v) continue\n out.push(v)\n }\n return Array.from(new Set(out)).sort((a, b) => a.localeCompare(b))\n }\n\n const rulesManifestWarningsBase = (): ReadonlyArray<string> => {\n const warnings: Array<string> = []\n if (config.rules && config.traits) {\n warnings.push(\n `[Form.make] 同时传入了 \"rules\" 与 \"traits\":推荐将校验迁移到 rules;traits 仅保留 computed/source/link 或必要的高级声明(便于性能/诊断对照)。`,\n )\n }\n return warnings\n }\n\n const buildRulesManifest = (): RulesManifest => {\n type JsonValue = null | boolean | number | string | ReadonlyArray<JsonValue> | { readonly [key: string]: JsonValue }\n\n type Source = 'rules' | 'traits' | 'schema-bridge'\n\n const listsByPath = new Map<string, { path: ReadonlyArray<string>; identity: Rule.ListIdentityPolicy }>()\n const rulesById = new Map<string, RuleDescriptor>()\n\n const addList = (path: string, identity: Rule.ListIdentityPolicy): void => {\n const segments = toFieldPathSegments('list path', path)\n const key = segments.join('.')\n if (listsByPath.has(key)) return\n listsByPath.set(key, { path: segments, identity })\n }\n\n const addRule = (rule: RuleDescriptor): void => {\n if (rulesById.has(rule.ruleId)) return\n rulesById.set(rule.ruleId, rule)\n }\n\n const ruleMeta = (source: Source): JsonValue => ({ source })\n\n const emitRuleSet = (params: {\n readonly source: Source\n readonly scope: RuleScope\n readonly ruleId: (name: string) => string\n readonly rules: Rule.RuleSet<any, any>\n }): void => {\n const names = Object.keys(params.rules).sort((a, b) => a.localeCompare(b))\n for (const name of names) {\n const r = (params.rules as any)[name] as any\n if (!r || typeof r !== 'object') continue\n const deps = normalizeRuleDeps(r.deps)\n const validateOn = normalizeAutoValidateOn(r.validateOn)\n addRule({\n ruleId: params.ruleId(name),\n scope: params.scope,\n deps,\n ...(validateOn !== undefined ? { validateOn } : {}),\n meta: ruleMeta(params.source),\n })\n }\n }\n\n // 1) rulesSpec(decl list)→ lists + rules\n if (config.rules && (config.rules as any)._tag === 'FormRulesSpec') {\n const decls = Array.isArray((config.rules as any).decls) ? (config.rules as any).decls : []\n for (const decl of decls as ReadonlyArray<Rule.RulesDecl<TValues>>) {\n if (!decl || typeof decl !== 'object') continue\n\n if ((decl as any).kind === 'field') {\n const valuePath = String((decl as any).valuePath ?? '').trim()\n assertCanonicalValuePath('field path', valuePath)\n if (valuePath === '$root') continue\n\n const errorTarget = (decl as any).errorTarget as Rule.ErrorTarget | undefined\n const scope: RuleScope = {\n kind: 'field',\n fieldPath: toFieldPathSegments('field path', valuePath),\n ...(errorTarget !== undefined ? { errorTarget } : {}),\n }\n\n const depsPrefix =\n errorTarget === '$self'\n ? valuePath\n : (() => {\n const idx = valuePath.lastIndexOf('.')\n return idx >= 0 ? valuePath.slice(0, idx) : ''\n })()\n\n const prefixDeps = (deps: unknown, prefix: string): ReadonlyArray<string> | undefined => {\n if (!Array.isArray(deps)) return undefined\n const out: Array<string> = []\n for (const raw of deps) {\n if (typeof raw !== 'string') continue\n const d = raw.trim()\n if (!d) continue\n const isRelative =\n d !== '$root' && !d.includes('[') && !d.includes(']') && !d.includes('.') && !/^[0-9]+$/.test(d)\n out.push(isRelative && prefix ? `${prefix}.${d}` : d)\n }\n return out\n }\n\n const prefixRuleInputDeps = (input: Rule.RuleInput<any, any>, prefix: string): Rule.RuleInput<any, any> => {\n if (!input || typeof input !== 'object') return input\n if (Array.isArray(input)) return input\n\n const anyInput = input as any\n const deps = prefixDeps(anyInput.deps, prefix)\n const validate = anyInput.validate\n\n if (typeof validate === 'function') {\n return deps !== undefined ? { ...anyInput, deps } : input\n }\n\n if (validate && typeof validate === 'object' && !Array.isArray(validate)) {\n const nextValidate: Record<string, unknown> = { ...(validate as any) }\n for (const [ruleName, raw] of Object.entries(validate as any)) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) continue\n const entryDeps = prefixDeps((raw as any).deps, prefix)\n if (entryDeps !== undefined) {\n nextValidate[ruleName] = { ...(raw as any), deps: entryDeps }\n }\n }\n return {\n ...anyInput,\n ...(deps !== undefined ? { deps } : {}),\n validate: nextValidate,\n }\n }\n\n return deps !== undefined ? { ...anyInput, deps } : input\n }\n\n const ruleInput = prefixRuleInputDeps((decl as any).rule as any, depsPrefix)\n const rules = Rule.make(ruleInput as any)\n\n emitRuleSet({\n source: 'rules',\n scope,\n ruleId: (name) => `${valuePath}#${name}`,\n rules,\n })\n continue\n }\n\n if ((decl as any).kind === 'root') {\n const ruleInput = (decl as any).rule as Rule.RuleInput<any, any>\n const rules = Rule.make(ruleInput as any)\n emitRuleSet({\n source: 'rules',\n scope: { kind: 'root', fieldPath: ['$root'] },\n ruleId: (name) => `$root#${name}`,\n rules,\n })\n continue\n }\n\n if ((decl as any).kind === 'list') {\n const listPath = String((decl as any).listPath ?? '').trim()\n assertCanonicalValuePath('list path', listPath)\n if (listPath === '$root') continue\n\n const identity = (decl as any).identity as Rule.ListIdentityPolicy\n assertValidListIdentity(identity, listPath)\n addList(listPath, identity)\n\n const listFieldPath = toFieldPathSegments('list path', listPath)\n\n const itemInput = (decl as any).item as Rule.RuleInput<any, any> | undefined\n const listInput = (decl as any).list as Rule.RuleInput<any, any> | undefined\n\n if (itemInput) {\n const itemRules = Rule.make(itemInput as any)\n emitRuleSet({\n source: 'rules',\n scope: { kind: 'item', fieldPath: listFieldPath },\n ruleId: (name) => `${listPath}#item.${name}`,\n rules: itemRules,\n })\n }\n\n if (listInput) {\n const listRules = Rule.make(listInput as any)\n emitRuleSet({\n source: 'rules',\n scope: { kind: 'list', fieldPath: listFieldPath },\n ruleId: (name) => `${listPath}#list.${name}`,\n rules: listRules,\n })\n }\n\n continue\n }\n }\n }\n\n // 2) traitsBase(normalized)→ lists + rules(best-effort)\n const traitsSpec = config.traits ? (traitsDsl(config.values)(config.traits) as any) : undefined\n if (traitsSpec && typeof traitsSpec === 'object') {\n for (const [rawPath, value] of Object.entries(traitsSpec as any)) {\n const path = String(rawPath ?? '').trim()\n if (!path) continue\n\n const addFieldRuleSet = (fieldPath: string, rules: Record<string, unknown>, errorTarget?: Rule.ErrorTarget) => {\n const scope: RuleScope = {\n kind: fieldPath === '$root' ? 'root' : 'field',\n fieldPath: fieldPath === '$root' ? ['$root'] : toFieldPathSegments('field path', fieldPath),\n ...(errorTarget !== undefined ? { errorTarget } : {}),\n }\n\n const names = Object.keys(rules).sort((a, b) => a.localeCompare(b))\n for (const name of names) {\n const r = (rules as any)[name] as any\n if (!r || typeof r !== 'object') continue\n const deps = normalizeRuleDeps(r.deps)\n const validateOn = normalizeAutoValidateOn(r.validateOn)\n const ruleId = `${fieldPath}#${name}`\n addRule({\n ruleId,\n scope,\n deps,\n ...(validateOn !== undefined ? { validateOn } : {}),\n meta: ruleMeta('traits'),\n })\n }\n }\n\n if (value && typeof value === 'object' && (value as any)._tag === 'StateTraitList') {\n const listPath = path\n assertCanonicalValuePath('list path', listPath)\n if (listPath !== '$root') {\n const trackBy =\n (value as any).identityHint && typeof (value as any).identityHint === 'object'\n ? (value as any).identityHint.trackBy\n : undefined\n\n addList(\n listPath,\n typeof trackBy === 'string' && trackBy.length > 0\n ? { mode: 'trackBy', trackBy: String(trackBy) }\n : { mode: 'store' },\n )\n }\n\n const listFieldPath = toFieldPathSegments('list path', listPath)\n\n const item = (value as any).item\n const list = (value as any).list\n\n const emitNodeRules = (node: unknown, kind: 'item' | 'list') => {\n if (!node || typeof node !== 'object') return\n if ((node as any)._tag !== 'StateTraitNode') return\n const check = (node as any).check\n if (!check || typeof check !== 'object' || Array.isArray(check)) return\n\n const names = Object.keys(check as any).sort((a, b) => a.localeCompare(b))\n for (const name of names) {\n const r = (check as any)[name] as any\n if (!r || typeof r !== 'object') continue\n const deps = normalizeRuleDeps(r.deps)\n const validateOn = normalizeAutoValidateOn(r.validateOn)\n addRule({\n ruleId: `${listPath}#${kind}.${name}`,\n scope: { kind, fieldPath: listFieldPath },\n deps,\n ...(validateOn !== undefined ? { validateOn } : {}),\n meta: ruleMeta('traits'),\n })\n }\n }\n\n emitNodeRules(item, 'item')\n emitNodeRules(list, 'list')\n continue\n }\n\n if (value && typeof value === 'object' && (value as any)._tag === 'StateTraitNode') {\n const check = (value as any).check\n if (check && typeof check === 'object' && !Array.isArray(check)) {\n addFieldRuleSet(path, check as any)\n }\n continue\n }\n\n if (value && typeof value === 'object' && (value as any).kind === 'check') {\n const meta = (value as any).meta\n const rules = meta && typeof meta === 'object' ? (meta as any).rules : undefined\n if (rules && typeof rules === 'object' && !Array.isArray(rules)) {\n const writebackPath =\n meta && typeof meta === 'object' && (meta as any).writeback && typeof (meta as any).writeback === 'object'\n ? (meta as any).writeback.path\n : undefined\n\n const errorTarget =\n typeof writebackPath === 'string' && writebackPath.endsWith('.$self') ? '$self' : undefined\n\n addFieldRuleSet(path, rules as any, errorTarget)\n }\n }\n }\n }\n\n const lists = Array.from(listsByPath.values()).sort((a, b) => a.path.join('.').localeCompare(b.path.join('.')))\n const rules = Array.from(rulesById.values()).sort((a, b) => a.ruleId.localeCompare(b.ruleId))\n\n return {\n moduleId: id,\n lists,\n rules,\n }\n }\n\n const traitsBase = config.traits ? (traitsDsl(config.values)(config.traits) as any) : undefined\n const derivedSpec = normalizeDerived(config.derived)\n const rulesSpec = config.rules ? compileRulesToTraitSpec(config.rules) : undefined\n const mergedSpec1 = mergeTraitSpecs(traitsBase, derivedSpec, 'traits', 'derived')\n const mergedSpec = mergeTraitSpecs(mergedSpec1 as any, rulesSpec as any, 'traits/derived', 'rules')\n const traitsWrapped = mergedSpec\n ? wrapTraitsForValidateOn(mergedSpec as any, { validateOn, reValidateOn })\n : undefined\n const traits = traitsWrapped?.traits as unknown as Logix.StateTrait.StateTraitSpec<TValues> | undefined\n const rulesValidateOn = traitsWrapped?.rulesValidateOn ?? []\n\n const def = {\n state: StateSchema,\n actions: Actions,\n reducers,\n traits,\n schemas: { values: config.values },\n }\n\n const module = extend\n ? Logix.Module.make<Id, typeof StateSchema, typeof Actions, FormHandleExt<TValues>>(id, def, extend)\n : Logix.Module.make<Id, typeof StateSchema, typeof Actions, FormHandleExt<TValues>>(id, def)\n\n const logics: ReadonlyArray<Logix.ModuleLogic<any, any, any>> = [\n installLogic(module.tag, {\n validateOn,\n reValidateOn,\n rulesValidateOn,\n debounceMs: config.debounceMs,\n }),\n ]\n\n const initial = (values?: TValues): FormState<TValues> =>\n ({\n ...(values ?? config.initialValues),\n errors: {},\n ui: {},\n $form: initialMeta(),\n }) as FormState<TValues>\n\n const controller = {\n make: (runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>): FormController<TValues> => {\n return makeFormController<TValues>({\n runtime,\n shape: module.shape,\n valuesSchema: config.values,\n }) as FormController<TValues>\n },\n }\n\n ;(module as any).controller = controller\n\n Logix.Observability.registerTrialRunArtifactExporter(\n module.tag as any,\n makeFormRulesManifestArtifactExporter({\n getManifest: buildRulesManifest,\n getWarnings: rulesManifestWarningsBase,\n }),\n )\n\n // Make `$.use(form)` / `$.self` return values carry default controller actions on top of ModuleHandle (React/Logic aligned).\n const EXTEND_HANDLE = Symbol.for('logix.module.handle.extend')\n let manifestMemo: RulesManifest | undefined\n let manifestWarningsMemo: ReadonlyArray<string> | undefined\n ;(module.tag as any)[EXTEND_HANDLE] = (\n runtime: Logix.ModuleRuntime<FormState<TValues>, FormAction>,\n base: Logix.ModuleHandle<any>,\n ) => {\n const form = controller.make(runtime)\n return {\n ...base,\n controller: form.controller,\n rulesManifest: () => {\n if (!manifestMemo) {\n manifestMemo = buildRulesManifest()\n }\n return manifestMemo\n },\n rulesManifestWarnings: () => {\n if (!manifestWarningsMemo) {\n manifestWarningsMemo = rulesManifestWarningsBase()\n }\n return manifestWarningsMemo\n },\n }\n }\n\n return module.implement({\n initial: initial(),\n logics: [...logics],\n }) as unknown as FormModule<Id, TValues>\n}\n","import * as Logix from '@logixjs/core'\n\ntype AnyStateTraitSpec = Record<string, unknown>\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nexport const normalizeValidateOn = (\n input: unknown,\n fallback: ReadonlyArray<'onSubmit' | 'onChange' | 'onBlur'>,\n): ReadonlyArray<'onSubmit' | 'onChange' | 'onBlur'> => {\n if (!Array.isArray(input)) return fallback\n const out: Array<'onSubmit' | 'onChange' | 'onBlur'> = []\n for (const x of input) {\n if (x === 'onSubmit' || x === 'onChange' || x === 'onBlur') out.push(x)\n }\n return out.length > 0 ? Array.from(new Set(out)) : fallback\n}\n\nexport const normalizeRuleValidateOn = (input: unknown): ReadonlyArray<'onChange' | 'onBlur'> => {\n if (!Array.isArray(input)) return []\n const out: Array<'onChange' | 'onBlur'> = []\n for (const x of input) {\n if (x === 'onChange' || x === 'onBlur') out.push(x)\n }\n return Array.from(new Set(out))\n}\n\nconst readSubmitCount = (state: unknown): number => {\n const form = state && typeof state === 'object' && !Array.isArray(state) ? (state as any).$form : undefined\n const v = form && typeof form === 'object' && !Array.isArray(form) ? (form as any).submitCount : undefined\n return typeof v === 'number' && Number.isFinite(v) ? v : 0\n}\n\nconst RULE_SKIP = Symbol.for('logix.state-trait.validate.skip')\n\nexport const normalizeDerived = (input: unknown): AnyStateTraitSpec | undefined => {\n if (input === undefined) return undefined\n if (!isPlainObject(input)) {\n throw new Error(`[Form.make] \"derived\" must be a plain object`)\n }\n\n const isAllowedTargetPath = (path: string): boolean => {\n if (!path) return false\n if (path === '$root') return false\n if (path === 'errors' || path.startsWith('errors.')) return false\n if (path === '$form' || path.startsWith('$form.')) return false\n return true\n }\n\n const isDerivedEntry = (value: unknown): value is { readonly kind: 'computed' | 'link' | 'source' } => {\n if (!isPlainObject(value)) return false\n if ((value as any)._tag === 'StateTraitNode' || (value as any)._tag === 'StateTraitList') return false\n const kind = (value as any).kind\n return kind === 'computed' || kind === 'link' || kind === 'source'\n }\n\n const out: Record<string, unknown> = {}\n const keys = Object.keys(input).sort((a, b) => a.localeCompare(b))\n\n for (const rawKey of keys) {\n const key = rawKey.trim()\n if (!key) {\n throw new Error(`[Form.make] \"derived\" contains an empty key`)\n }\n if (!isAllowedTargetPath(key)) {\n throw new Error(`[Form.make] \"derived\" cannot write to \"${key}\" (only values/ui are allowed)`)\n }\n\n const value = (input as any)[rawKey] as unknown\n if (!isDerivedEntry(value)) {\n throw new Error(`[Form.make] \"derived.${key}\" must be a Form.Trait entry (computed/link/source)`)\n }\n out[key] = value\n }\n\n return Object.keys(out).length > 0 ? out : undefined\n}\n\nexport const mergeTraitSpecs = (\n base: AnyStateTraitSpec | undefined,\n extra: AnyStateTraitSpec | undefined,\n baseLabel: string,\n extraLabel: string,\n): AnyStateTraitSpec | undefined => {\n if (!base && !extra) return undefined\n if (!base) return extra\n if (!extra) return base\n\n const isStateTraitNode = (value: unknown): value is Logix.StateTrait.StateTraitNode<any, any> =>\n isPlainObject(value) && (value as any)._tag === 'StateTraitNode'\n\n const isStateTraitList = (value: unknown): value is Logix.StateTrait.StateTraitList<any> =>\n isPlainObject(value) && (value as any)._tag === 'StateTraitList'\n\n const isStateTraitEntry = (value: unknown): boolean =>\n isPlainObject(value) &&\n ((value as any).kind === 'computed' ||\n (value as any).kind === 'source' ||\n (value as any).kind === 'link' ||\n (value as any).kind === 'check')\n\n const mergeEntryOrRecord = (path: string, a: unknown, b: unknown): unknown => {\n if (a === undefined) return b\n if (b === undefined) return a\n\n // We currently do not support merging \"entry\" with \"record<entry>\" or merging two entries.\n // Keep a stable failure to avoid semantic drift.\n if (isStateTraitEntry(a) || isStateTraitEntry(b)) {\n throw new Error(\n `[Form.make] Cannot merge \"${path}\": entry/record conflict between \"${baseLabel}\" and \"${extraLabel}\"`,\n )\n }\n\n if (!isPlainObject(a) || !isPlainObject(b)) {\n throw new Error(\n `[Form.make] Cannot merge \"${path}\": incompatible values between \"${baseLabel}\" and \"${extraLabel}\"`,\n )\n }\n\n const out: Record<string, unknown> = { ...(a as any) }\n for (const [k, v] of Object.entries(b as any)) {\n if (k in out) {\n throw new Error(`[Form.make] Duplicate trait key \"${path}.${k}\" between \"${baseLabel}\" and \"${extraLabel}\"`)\n }\n out[k] = v\n }\n return out\n }\n\n const mergeCheckRules = (path: string, a: unknown, b: unknown): unknown => {\n if (a === undefined) return b\n if (b === undefined) return a\n if (!isPlainObject(a) || !isPlainObject(b)) {\n throw new Error(\n `[Form.make] Cannot merge \"${path}.check\": incompatible values between \"${baseLabel}\" and \"${extraLabel}\"`,\n )\n }\n const out: Record<string, unknown> = { ...(a as any) }\n for (const [k, v] of Object.entries(b as any)) {\n if (k in out) {\n throw new Error(\n `[Form.make] Duplicate check rule \"${path}.check.${k}\" between \"${baseLabel}\" and \"${extraLabel}\"`,\n )\n }\n out[k] = v\n }\n return out\n }\n\n const mergeNodes = (\n path: string,\n a: Logix.StateTrait.StateTraitNode<any, any>,\n b: Logix.StateTrait.StateTraitNode<any, any>,\n ): Logix.StateTrait.StateTraitNode<any, any> => {\n const out: any = { ...a }\n\n if (a.meta !== undefined && b.meta !== undefined) {\n throw new Error(`[Form.make] Duplicate node meta at \"${path}\" between \"${baseLabel}\" and \"${extraLabel}\"`)\n }\n if (out.meta === undefined && b.meta !== undefined) out.meta = b.meta\n\n out.computed = mergeEntryOrRecord(`${path}.computed`, a.computed, b.computed)\n out.source = mergeEntryOrRecord(`${path}.source`, a.source, b.source)\n out.link = mergeEntryOrRecord(`${path}.link`, a.link, b.link)\n out.check = mergeCheckRules(path, a.check, b.check)\n\n return out as Logix.StateTrait.StateTraitNode<any, any>\n }\n\n const mergeLists = (\n path: string,\n a: Logix.StateTrait.StateTraitList<any>,\n b: Logix.StateTrait.StateTraitList<any>,\n ): Logix.StateTrait.StateTraitList<any> => {\n const trackByA = a.identityHint && typeof a.identityHint === 'object' ? (a.identityHint as any).trackBy : undefined\n const trackByB = b.identityHint && typeof b.identityHint === 'object' ? (b.identityHint as any).trackBy : undefined\n\n if (trackByA !== undefined && trackByB !== undefined && trackByA !== trackByB) {\n throw new Error(\n `[Form.make] Conflicting list identityHint.trackBy for \"${path}\" between \"${baseLabel}\" and \"${extraLabel}\"`,\n )\n }\n\n const item = a.item && b.item ? mergeNodes(`${path}.item`, a.item, b.item) : a.item !== undefined ? a.item : b.item\n\n const list = a.list && b.list ? mergeNodes(`${path}.list`, a.list, b.list) : a.list !== undefined ? a.list : b.list\n\n return {\n ...a,\n ...b,\n ...(trackByA !== undefined || trackByB !== undefined\n ? { identityHint: { trackBy: String(trackByA ?? trackByB) } }\n : {}),\n ...(item !== undefined ? { item } : {}),\n ...(list !== undefined ? { list } : {}),\n } as Logix.StateTrait.StateTraitList<any>\n }\n\n const out: Record<string, unknown> = { ...base }\n for (const [k, v] of Object.entries(extra)) {\n const existing = out[k]\n if (existing === undefined) {\n out[k] = v\n continue\n }\n\n if (isStateTraitList(existing) && isStateTraitList(v)) {\n out[k] = mergeLists(k, existing, v)\n continue\n }\n\n if (isStateTraitNode(existing) && isStateTraitNode(v)) {\n out[k] = mergeNodes(k, existing, v)\n continue\n }\n\n throw new Error(`[Form.make] Duplicate trait path \"${k}\" between \"${baseLabel}\" and \"${extraLabel}\"`)\n }\n return out\n}\n\nexport const wrapTraitsForValidateOn = <S extends object>(\n spec: Logix.StateTrait.StateTraitSpec<S>,\n options: {\n readonly validateOn: ReadonlyArray<'onSubmit' | 'onChange' | 'onBlur'>\n readonly reValidateOn: ReadonlyArray<'onSubmit' | 'onChange' | 'onBlur'>\n },\n): {\n readonly traits: Logix.StateTrait.StateTraitSpec<S>\n readonly rulesValidateOn: ReadonlyArray<'onChange' | 'onBlur'>\n} => {\n const validateOn = options.validateOn\n const reValidateOn = options.reValidateOn\n\n const isNode = (value: unknown): value is Logix.StateTrait.StateTraitNode<any, any> =>\n typeof value === 'object' && value !== null && (value as any)._tag === 'StateTraitNode'\n\n const isList = (value: unknown): value is Logix.StateTrait.StateTraitList<any> =>\n typeof value === 'object' && value !== null && (value as any)._tag === 'StateTraitList'\n\n const isCheckEntry = (value: unknown): boolean =>\n Boolean(value) &&\n typeof value === 'object' &&\n (value as any).kind === 'check' &&\n (value as any).meta &&\n typeof (value as any).meta === 'object'\n\n const explicitTriggers = new Set<'onChange' | 'onBlur'>()\n\n const wrapRule = (rule: unknown): unknown => {\n if (typeof rule === 'function') {\n const validate = rule as any\n return (input: unknown, ctx: any) => {\n const mode = ctx?.mode\n if (mode === 'submit' || mode === 'manual') return validate(input, ctx)\n const trigger = mode === 'valueChange' ? 'onChange' : mode === 'blur' ? 'onBlur' : undefined\n if (!trigger) return validate(input, ctx)\n const submitCount = readSubmitCount(ctx?.state)\n const effective = submitCount > 0 ? reValidateOn : validateOn\n return effective.includes(trigger) ? validate(input, ctx) : RULE_SKIP\n }\n }\n\n if (!rule || typeof rule !== 'object') return rule\n const anyRule = rule as any\n const validate = anyRule.validate\n if (typeof validate !== 'function') return rule\n\n const hasExplicit = Array.isArray(anyRule.validateOn)\n const explicit = hasExplicit ? normalizeRuleValidateOn(anyRule.validateOn) : undefined\n if (explicit) {\n for (const t of explicit) explicitTriggers.add(t)\n }\n\n const wrappedValidate = (input: unknown, ctx: any) => {\n const mode = ctx?.mode\n if (mode === 'submit' || mode === 'manual') return validate(input, ctx)\n const trigger = mode === 'valueChange' ? 'onChange' : mode === 'blur' ? 'onBlur' : undefined\n if (!trigger) return validate(input, ctx)\n\n if (hasExplicit) {\n return explicit && explicit.includes(trigger) ? validate(input, ctx) : RULE_SKIP\n }\n\n const submitCount = readSubmitCount(ctx?.state)\n const effective = submitCount > 0 ? reValidateOn : validateOn\n return effective.includes(trigger) ? validate(input, ctx) : RULE_SKIP\n }\n\n return {\n ...anyRule,\n ...(hasExplicit ? { validateOn: explicit } : {}),\n validate: wrappedValidate,\n }\n }\n\n const visit = (value: unknown): unknown => {\n if (isNode(value)) {\n const check = value.check\n if (!check) return value\n\n const wrapped: Record<string, unknown> = {}\n for (const name of Object.keys(check)) {\n wrapped[name] = wrapRule((check as any)[name])\n }\n return { ...value, check: wrapped }\n }\n\n if (isList(value)) {\n return {\n ...value,\n item: value.item ? (visit(value.item) as any) : undefined,\n list: value.list ? (visit(value.list) as any) : undefined,\n }\n }\n\n if (isCheckEntry(value)) {\n const meta = (value as any).meta\n const rules = meta?.rules\n if (!isPlainObject(rules)) return value\n\n const wrapped: Record<string, unknown> = {}\n for (const name of Object.keys(rules)) {\n wrapped[name] = wrapRule((rules as any)[name])\n }\n\n return {\n ...(value as any),\n meta: { ...meta, rules: wrapped },\n }\n }\n\n if (isPlainObject(value)) {\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value)) {\n out[k] = visit(v)\n }\n return out\n }\n\n return value\n }\n\n return {\n traits: visit(spec) as any,\n rulesValidateOn: Array.from(explicitTriggers),\n }\n}\n","import { setAtPath } from './path.js'\n\ntype ErrorValueLeafObject = {\n readonly message: string\n readonly code?: string\n readonly details?: unknown\n}\n\nconst isErrorValueLeafObject = (value: unknown): value is ErrorValueLeafObject => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false\n const anyValue = value as Record<string, unknown>\n const msg = anyValue.message\n if (typeof msg !== 'string' || msg.length === 0) return false\n for (const key of Object.keys(anyValue)) {\n if (key !== 'message' && key !== 'code' && key !== 'details') return false\n }\n const code = anyValue.code\n if (code !== undefined && (typeof code !== 'string' || code.length === 0)) return false\n return true\n}\n\n/**\n * countErrorLeaves:\n * - Only does incremental counting at the boundary where we \"write back into the errors tree\", avoiding UI-layer scans.\n * - Recognizes ErrorValue leaf nodes by the contracts/error-value shape.\n * - `$rowId` is not an error value and is excluded from counting.\n */\nexport const countErrorLeaves = (value: unknown): number => {\n if (value === null || value === undefined) return 0\n if (typeof value === 'string') return value.length > 0 ? 1 : 0\n if (Array.isArray(value)) return value.reduce((acc, v) => acc + countErrorLeaves(v), 0)\n\n if (typeof value === 'object') {\n if (isErrorValueLeafObject(value)) return 1\n let acc = 0\n for (const [k, v] of Object.entries(value as any)) {\n if (k === '$rowId') continue\n acc += countErrorLeaves(v)\n }\n return acc\n }\n\n return 1\n}\n\nexport const readErrorCount = (state: unknown): number => {\n const form = state && typeof state === 'object' && !Array.isArray(state) ? (state as any).$form : undefined\n const v = form && typeof form === 'object' && !Array.isArray(form) ? (form as any).errorCount : undefined\n return typeof v === 'number' && Number.isFinite(v) ? v : 0\n}\n\nexport const writeErrorCount = <S>(state: S, nextCount: number): S =>\n setAtPath(state, '$form.errorCount', Math.max(0, nextCount)) as S\n","import { getAtPath, updateArrayAtPath } from './path.js'\n\nexport type AnyState = Record<string, unknown>\n\nexport const isAuxRootPath = (path: string): boolean =>\n path === 'errors' ||\n path === 'ui' ||\n path === '$form' ||\n path.startsWith('errors.') ||\n path.startsWith('ui.') ||\n path.startsWith('$form.')\n\nexport const normalizeArrayToLength = (items: ReadonlyArray<unknown>, length: number): Array<unknown | undefined> => {\n const next: Array<unknown | undefined> = items.slice(0, length)\n while (next.length < length) next.push(undefined)\n return next\n}\n\nexport const syncAuxArrays = (\n state: AnyState,\n path: string,\n currentLength: number,\n update: (items: ReadonlyArray<unknown | undefined>) => ReadonlyArray<unknown | undefined>,\n): AnyState => {\n if (!path || isAuxRootPath(path)) return state\n\n const nextUi = updateArrayAtPath(state, `ui.${path}`, (items) =>\n update(normalizeArrayToLength(items, currentLength)),\n ) as AnyState\n\n // Canonical shape for list error trees: `$list/rows[]`; row-level errors are always written to `errors.<list>.rows[i]`.\n const nextErrors = updateArrayAtPath(nextUi, `errors.${path}.rows`, (items) =>\n update(normalizeArrayToLength(items, currentLength)),\n ) as AnyState\n\n const manualRowsPath = `errors.$manual.${path}.rows`\n const nextManualErrors =\n getAtPath(state, manualRowsPath) !== undefined\n ? (updateArrayAtPath(nextErrors, manualRowsPath, (items) =>\n update(normalizeArrayToLength(items, currentLength)),\n ) as AnyState)\n : nextErrors\n\n const schemaRowsPath = `errors.$schema.${path}.rows`\n const nextSchemaErrors =\n getAtPath(state, schemaRowsPath) !== undefined\n ? (updateArrayAtPath(nextManualErrors, schemaRowsPath, (items) =>\n update(normalizeArrayToLength(items, currentLength)),\n ) as AnyState)\n : nextManualErrors\n\n return nextSchemaErrors\n}\n","import { getAtPath, setAtPath, unsetAtPath, updateArrayAtPath } from './path.js'\nimport { toManualErrorsPath, toSchemaErrorsPath } from '../../Path.js'\nimport { countErrorLeaves, readErrorCount, writeErrorCount } from './errors.js'\nimport { isAuxRootPath, syncAuxArrays, type AnyState } from './arrays.js'\n\ntype PatchSink = ((path: string) => void) | undefined\n\nconst mark = (sink: PatchSink, path: string): void => {\n if (!sink) return\n if (typeof path !== 'string' || path.length === 0) return\n sink(path)\n}\n\nconst markMany = (sink: PatchSink, paths: ReadonlyArray<string>): void => {\n for (const path of paths) {\n mark(sink, path)\n }\n}\n\ntype FieldUiMeta = {\n readonly touched?: boolean\n readonly dirty?: boolean\n}\n\nconst mergeUiMeta = (prev: unknown, patch: FieldUiMeta): FieldUiMeta => {\n const base = prev && typeof prev === 'object' && !Array.isArray(prev) ? (prev as Record<string, unknown>) : {}\n return {\n ...base,\n ...patch,\n }\n}\n\nconst setUiMeta = (state: unknown, path: string, patch: FieldUiMeta): unknown => {\n if (!path) return state\n const prev = getAtPath(state, `ui.${path}`)\n return setAtPath(state, `ui.${path}`, mergeUiMeta(prev, patch))\n}\n\nconst initialMeta = (): AnyState => ({\n submitCount: 0,\n isSubmitting: false,\n isDirty: false,\n errorCount: 0,\n})\n\nexport const makeFormReducers = <TValues extends object>(params: { readonly initialValues: TValues }): any => {\n const reducers: any = {\n setValue: (state: AnyState, action: any, sink: PatchSink) => {\n const path = action.payload.path\n const prevErrorCount = readErrorCount(state)\n\n // errors.* write-back (e.g. schema/root validate): keep errorCount incrementally consistent.\n if (path === 'errors' || path.startsWith('errors.')) {\n mark(sink, path)\n const prev = getAtPath(state, path)\n const nextValue = action.payload.value\n const delta = countErrorLeaves(nextValue) - countErrorLeaves(prev)\n const next = setAtPath(state, path, nextValue) as AnyState\n if (delta === 0) return next\n mark(sink, '$form.errorCount')\n return writeErrorCount(next, prevErrorCount + delta) as AnyState\n }\n\n mark(sink, path)\n const next = setAtPath(state, path, action.payload.value) as AnyState\n if (isAuxRootPath(path)) return next\n\n markMany(sink, [`ui.${path}`, '$form.isDirty'])\n\n const nextMeta = setAtPath(next, '$form.isDirty', true) as AnyState\n let nextUi = setUiMeta(nextMeta, path, { dirty: true }) as AnyState\n let nextCount = prevErrorCount\n\n const manualPath = toManualErrorsPath(path)\n const prevManual = getAtPath(nextUi, manualPath)\n if (prevManual !== undefined) {\n mark(sink, manualPath)\n nextCount -= countErrorLeaves(prevManual)\n nextUi = unsetAtPath(nextUi, manualPath) as AnyState\n }\n\n const schemaPath = toSchemaErrorsPath(path)\n const prevSchema = getAtPath(nextUi, schemaPath)\n if (prevSchema !== undefined) {\n mark(sink, schemaPath)\n nextCount -= countErrorLeaves(prevSchema)\n nextUi = unsetAtPath(nextUi, schemaPath) as AnyState\n }\n\n if (nextCount === prevErrorCount) return nextUi\n mark(sink, '$form.errorCount')\n return writeErrorCount(nextUi, nextCount) as AnyState\n },\n blur: (state: AnyState, action: any, sink: PatchSink) => {\n const path = action.payload.path\n if (isAuxRootPath(path)) return state as AnyState\n mark(sink, `ui.${path}`)\n return setUiMeta(state, path, { touched: true }) as AnyState\n },\n validate: (state: AnyState) => state as AnyState,\n validatePaths: (state: AnyState) => state as AnyState,\n submitAttempt: (state: AnyState, _action: any, sink: PatchSink) => {\n const prev = (state as any).$form\n const submitCount =\n prev && typeof prev === 'object' && !Array.isArray(prev) && typeof prev.submitCount === 'number'\n ? prev.submitCount\n : 0\n mark(sink, '$form.submitCount')\n return setAtPath(state, '$form.submitCount', submitCount + 1) as AnyState\n },\n setSubmitting: (state: AnyState, action: any, sink: PatchSink) => {\n mark(sink, '$form.isSubmitting')\n return setAtPath(state, '$form.isSubmitting', action.payload) as AnyState\n },\n reset: (_state: AnyState, action: any, sink: PatchSink) => {\n const values =\n action.payload && typeof action.payload === 'object' ? (action.payload as TValues) : params.initialValues\n\n markMany(sink, ['errors', 'ui', '$form'])\n if (values && typeof values === 'object' && !Array.isArray(values)) {\n for (const key of Object.keys(values)) {\n if (!key || isAuxRootPath(key)) continue\n mark(sink, key)\n }\n }\n\n return {\n ...(values as any),\n errors: {},\n ui: {},\n $form: initialMeta(),\n } as AnyState\n },\n setError: (state: AnyState, action: any, sink: PatchSink) => {\n const path = action.payload.path\n if (!path || isAuxRootPath(path)) return state as AnyState\n const error = action.payload.error\n const manualPath = toManualErrorsPath(path)\n mark(sink, manualPath)\n\n const prevErrorCount = readErrorCount(state)\n const prevManual = getAtPath(state, manualPath)\n\n if (error === null || error === undefined) {\n const next = unsetAtPath(state, manualPath) as AnyState\n const delta = -countErrorLeaves(prevManual)\n if (delta === 0) return next\n mark(sink, '$form.errorCount')\n return writeErrorCount(next, prevErrorCount + delta) as AnyState\n }\n const next = setAtPath(state, manualPath, error) as AnyState\n const delta = countErrorLeaves(error) - countErrorLeaves(prevManual)\n if (delta === 0) return next\n mark(sink, '$form.errorCount')\n return writeErrorCount(next, prevErrorCount + delta) as AnyState\n },\n clearErrors: (state: AnyState, action: any, sink: PatchSink) => {\n const paths = action.payload\n const prevErrorCount = readErrorCount(state)\n\n if (paths === undefined) {\n const prevManual = getAtPath(state, 'errors.$manual')\n mark(sink, 'errors.$manual')\n const next = unsetAtPath(state, 'errors.$manual') as AnyState\n const delta = -countErrorLeaves(prevManual)\n if (delta === 0) return next\n mark(sink, '$form.errorCount')\n return writeErrorCount(next, prevErrorCount + delta) as AnyState\n }\n\n let next: unknown = state\n let nextCount = prevErrorCount\n for (const path of paths) {\n if (typeof path !== 'string' || !path || isAuxRootPath(path)) continue\n const manualPath = toManualErrorsPath(path)\n const prevManual = getAtPath(next, manualPath)\n if (prevManual !== undefined) {\n mark(sink, manualPath)\n nextCount -= countErrorLeaves(prevManual)\n next = unsetAtPath(next, manualPath)\n }\n }\n const out = next as AnyState\n if (nextCount === prevErrorCount) return out\n mark(sink, '$form.errorCount')\n return writeErrorCount(out, nextCount) as AnyState\n },\n arrayAppend: (state: AnyState, action: any, sink: PatchSink) => {\n const path = action.payload.path as string\n const value = action.payload.value\n const current = getAtPath(state, path)\n const currentItems = Array.isArray(current) ? current : []\n markMany(sink, [path, `ui.${path}`, `errors.${path}.rows`, '$form.isDirty'])\n if (getAtPath(state, `errors.$manual.${path}.rows`) !== undefined) {\n mark(sink, `errors.$manual.${path}.rows`)\n }\n if (getAtPath(state, `errors.$schema.${path}.rows`) !== undefined) {\n mark(sink, `errors.$schema.${path}.rows`)\n }\n const nextState = updateArrayAtPath(state, path, (items) => [...items, value]) as AnyState\n const nextSync = syncAuxArrays(nextState, path, currentItems.length, (items) => [...items, undefined]) as AnyState\n const schemaRootPath = toSchemaErrorsPath(path)\n const prevErrorCount = readErrorCount(nextSync)\n const prevSchema = getAtPath(nextSync, schemaRootPath)\n mark(sink, schemaRootPath)\n const clearedSchema = unsetAtPath(nextSync, schemaRootPath) as AnyState\n const delta = -countErrorLeaves(prevSchema)\n const nextWithCount =\n delta === 0 ? clearedSchema : (writeErrorCount(clearedSchema, prevErrorCount + delta) as AnyState)\n if (delta !== 0) mark(sink, '$form.errorCount')\n return isAuxRootPath(path) ? nextWithCount : (setAtPath(nextWithCount, '$form.isDirty', true) as AnyState)\n },\n arrayPrepend: (state: AnyState, action: any, sink: PatchSink) => {\n const path = action.payload.path as string\n const value = action.payload.value\n const current = getAtPath(state, path)\n const currentItems = Array.isArray(current) ? current : []\n markMany(sink, [path, `ui.${path}`, `errors.${path}.rows`, '$form.isDirty'])\n if (getAtPath(state, `errors.$manual.${path}.rows`) !== undefined) {\n mark(sink, `errors.$manual.${path}.rows`)\n }\n if (getAtPath(state, `errors.$schema.${path}.rows`) !== undefined) {\n mark(sink, `errors.$schema.${path}.rows`)\n }\n const nextState = updateArrayAtPath(state, path, (items) => [value, ...items]) as AnyState\n const nextSync = syncAuxArrays(nextState, path, currentItems.length, (items) => [undefined, ...items]) as AnyState\n const schemaRootPath = toSchemaErrorsPath(path)\n const prevErrorCount = readErrorCount(nextSync)\n const prevSchema = getAtPath(nextSync, schemaRootPath)\n mark(sink, schemaRootPath)\n const clearedSchema = unsetAtPath(nextSync, schemaRootPath) as AnyState\n const delta = -countErrorLeaves(prevSchema)\n const nextWithCount =\n delta === 0 ? clearedSchema : (writeErrorCount(clearedSchema, prevErrorCount + delta) as AnyState)\n if (delta !== 0) mark(sink, '$form.errorCount')\n return isAuxRootPath(path) ? nextWithCount : (setAtPath(nextWithCount, '$form.isDirty', true) as AnyState)\n },\n arrayRemove: (state: AnyState, action: any, sink: PatchSink) => {\n const path = action.payload.path as string\n const index = action.payload.index as number\n const current = getAtPath(state, path)\n const currentItems = Array.isArray(current) ? current : []\n const prevErrorCount = readErrorCount(state)\n const prevRuleRow = getAtPath(state, `errors.${path}.rows.${index}`)\n const prevManualRow = getAtPath(state, `errors.$manual.${path}.rows.${index}`)\n const schemaRootPath = toSchemaErrorsPath(path)\n const prevSchemaRoot = getAtPath(state, schemaRootPath)\n\n markMany(sink, [path, `ui.${path}`, `errors.${path}.rows`, schemaRootPath, '$form.isDirty'])\n if (getAtPath(state, `errors.$manual.${path}.rows`) !== undefined) {\n mark(sink, `errors.$manual.${path}.rows`)\n }\n if (getAtPath(state, `errors.$schema.${path}.rows`) !== undefined) {\n mark(sink, `errors.$schema.${path}.rows`)\n }\n\n const nextState = updateArrayAtPath(state, path, (items) =>\n items.filter((_: unknown, i: number) => i !== index),\n ) as AnyState\n const nextSync = syncAuxArrays(nextState, path, currentItems.length, (items) =>\n items.filter((_: unknown, i: number) => i !== index),\n ) as AnyState\n let nextCount = prevErrorCount\n nextCount -= countErrorLeaves(prevRuleRow)\n nextCount -= countErrorLeaves(prevManualRow)\n nextCount -= countErrorLeaves(prevSchemaRoot)\n\n const clearedSchema = unsetAtPath(nextSync, schemaRootPath) as AnyState\n const nextWithCount =\n nextCount === prevErrorCount ? clearedSchema : (writeErrorCount(clearedSchema, nextCount) as AnyState)\n if (nextCount !== prevErrorCount) mark(sink, '$form.errorCount')\n return isAuxRootPath(path) ? nextWithCount : (setAtPath(nextWithCount, '$form.isDirty', true) as AnyState)\n },\n arraySwap: (state: AnyState, action: any, sink: PatchSink) => {\n const path = action.payload.path as string\n const a = action.payload.indexA as number\n const b = action.payload.indexB as number\n const current = getAtPath(state, path)\n const currentItems = Array.isArray(current) ? current : []\n const schemaRootPath = toSchemaErrorsPath(path)\n markMany(sink, [path, `ui.${path}`, `errors.${path}.rows`, schemaRootPath, '$form.isDirty'])\n if (getAtPath(state, `errors.$manual.${path}.rows`) !== undefined) {\n mark(sink, `errors.$manual.${path}.rows`)\n }\n if (getAtPath(state, `errors.$schema.${path}.rows`) !== undefined) {\n mark(sink, `errors.$schema.${path}.rows`)\n }\n\n const swap = <T>(items: ReadonlyArray<T>): ReadonlyArray<T> => {\n const next = items.slice()\n if (a >= 0 && b >= 0 && a < next.length && b < next.length) {\n const tmp = next[a]\n next[a] = next[b]\n next[b] = tmp\n }\n return next\n }\n\n const nextState = updateArrayAtPath(state, path, swap) as AnyState\n const nextSync = syncAuxArrays(nextState, path, currentItems.length, swap) as AnyState\n const prevErrorCount = readErrorCount(nextSync)\n const prevSchema = getAtPath(nextSync, schemaRootPath)\n const clearedSchema = unsetAtPath(nextSync, schemaRootPath) as AnyState\n const delta = -countErrorLeaves(prevSchema)\n const nextWithCount =\n delta === 0 ? clearedSchema : (writeErrorCount(clearedSchema, prevErrorCount + delta) as AnyState)\n if (delta !== 0) mark(sink, '$form.errorCount')\n return isAuxRootPath(path) ? nextWithCount : (setAtPath(nextWithCount, '$form.isDirty', true) as AnyState)\n },\n arrayMove: (state: AnyState, action: any, sink: PatchSink) => {\n const path = action.payload.path as string\n const from = action.payload.from as number\n const to = action.payload.to as number\n const current = getAtPath(state, path)\n const currentItems = Array.isArray(current) ? current : []\n const schemaRootPath = toSchemaErrorsPath(path)\n markMany(sink, [path, `ui.${path}`, `errors.${path}.rows`, schemaRootPath, '$form.isDirty'])\n if (getAtPath(state, `errors.$manual.${path}.rows`) !== undefined) {\n mark(sink, `errors.$manual.${path}.rows`)\n }\n if (getAtPath(state, `errors.$schema.${path}.rows`) !== undefined) {\n mark(sink, `errors.$schema.${path}.rows`)\n }\n\n const move = <T>(items: ReadonlyArray<T>): ReadonlyArray<T> => {\n const next = items.slice()\n if (from < 0 || from >= next.length || to < 0 || to >= next.length) {\n return next\n }\n const [moved] = next.splice(from, 1)\n next.splice(to, 0, moved)\n return next\n }\n\n const nextState = updateArrayAtPath(state, path, move) as AnyState\n const nextSync = syncAuxArrays(nextState, path, currentItems.length, move) as AnyState\n const prevErrorCount = readErrorCount(nextSync)\n const prevSchema = getAtPath(nextSync, schemaRootPath)\n const clearedSchema = unsetAtPath(nextSync, schemaRootPath) as AnyState\n const delta = -countErrorLeaves(prevSchema)\n const nextWithCount =\n delta === 0 ? clearedSchema : (writeErrorCount(clearedSchema, prevErrorCount + delta) as AnyState)\n if (delta !== 0) mark(sink, '$form.errorCount')\n return isAuxRootPath(path) ? nextWithCount : (setAtPath(nextWithCount, '$form.isDirty', true) as AnyState)\n },\n }\n\n return reducers\n}\n","import * as Logix from '@logixjs/core'\nimport { Effect, Schema } from 'effect'\nimport { getAtPath } from './path.js'\nimport { toSchemaErrorTree } from '../../SchemaErrorMapping.js'\nimport { isAuxRootPath } from './arrays.js'\nimport { readErrorCount } from './errors.js'\n\nexport const makeFormController = <TValues extends object>(params: {\n readonly runtime: Logix.ModuleRuntime<any, any>\n readonly shape: unknown\n readonly valuesSchema: Schema.Schema<TValues, any>\n}): any => {\n const runtime = params.runtime\n const bound = Logix.Bound.make(params.shape as any, runtime as any)\n\n return {\n runtime,\n getState: runtime.getState as Effect.Effect<any>,\n dispatch: runtime.dispatch,\n submit: () => runtime.dispatch({ _tag: 'submit', payload: undefined }),\n controller: {\n validate: () =>\n Effect.gen(function* () {\n yield* Logix.TraitLifecycle.scopedValidate(bound as any, {\n mode: 'manual',\n target: Logix.TraitLifecycle.Ref.root(),\n })\n\n const state = yield* runtime.getState\n const { errors: _errors, ui: _ui, $form: _meta, ...values } = state as any\n const decoded = Schema.decodeUnknownEither(params.valuesSchema)(values as any) as any\n const schemaTree = decoded._tag === 'Right' ? {} : toSchemaErrorTree(decoded.left)\n\n yield* runtime.dispatch({\n _tag: 'setValue',\n payload: { path: 'errors.$schema', value: schemaTree },\n })\n }),\n validatePaths: (paths: ReadonlyArray<string> | string) =>\n Effect.gen(function* () {\n const list = typeof paths === 'string' ? [paths] : paths\n if (!list || list.length === 0) return\n const state = yield* runtime.getState\n\n for (const raw of list) {\n if (typeof raw !== 'string') continue\n const path = raw.trim()\n if (!path || isAuxRootPath(path)) continue\n\n const value = getAtPath(state, path)\n const target = Array.isArray(value)\n ? Logix.TraitLifecycle.Ref.list(path)\n : Logix.TraitLifecycle.Ref.fromValuePath(path)\n\n yield* Logix.TraitLifecycle.scopedValidate(bound as any, {\n mode: 'manual',\n target,\n })\n }\n }),\n reset: (values?: TValues) => runtime.dispatch({ _tag: 'reset', payload: values as any }),\n setError: (path: string, error: unknown) => runtime.dispatch({ _tag: 'setError', payload: { path, error } }),\n clearErrors: (paths?: ReadonlyArray<string> | string) =>\n runtime.dispatch({\n _tag: 'clearErrors',\n payload: paths === undefined ? undefined : typeof paths === 'string' ? [paths] : (paths as any),\n }),\n handleSubmit: (handlers: any) =>\n Effect.gen(function* () {\n yield* runtime.dispatch({ _tag: 'submitAttempt', payload: undefined })\n yield* runtime.dispatch({ _tag: 'setSubmitting', payload: true })\n\n yield* Logix.TraitLifecycle.scopedValidate(bound as any, {\n mode: 'submit',\n target: Logix.TraitLifecycle.Ref.root(),\n })\n\n const stateAfterRules = yield* runtime.getState\n const {\n errors: _errorsAfterRules,\n ui: _uiAfterRules,\n $form: _metaAfterRules,\n ...valuesAfterRules\n } = stateAfterRules as any\n const decoded = Schema.decodeUnknownEither(params.valuesSchema)(valuesAfterRules as any) as any\n const schemaTree = decoded._tag === 'Right' ? {} : toSchemaErrorTree(decoded.left)\n\n yield* runtime.dispatch({\n _tag: 'setValue',\n payload: { path: 'errors.$schema', value: schemaTree },\n })\n\n const state = yield* runtime.getState\n const errorCount = readErrorCount(state)\n\n if (errorCount > 0) {\n if (handlers.onInvalid) {\n yield* handlers.onInvalid((state as any).errors)\n }\n return\n }\n\n const { errors: _errorsFinal, ui: _uiFinal, $form: _metaFinal, ...valuesFinal } = state as any\n yield* handlers.onValid(valuesFinal as TValues)\n }).pipe(Effect.ensuring(runtime.dispatch({ _tag: 'setSubmitting', payload: false }))),\n },\n field: (path: string) => ({\n get: runtime.getState.pipe(Effect.map((s: any) => getAtPath(s, path))),\n set: (value: unknown) => runtime.dispatch({ _tag: 'setValue', payload: { path, value } }),\n blur: () => runtime.dispatch({ _tag: 'blur', payload: { path } }),\n }),\n fieldArray: (path: string) => ({\n get: runtime.getState.pipe(\n Effect.map((s: any) => {\n const value = getAtPath(s, path)\n return Array.isArray(value) ? value : []\n }),\n ),\n append: (value: unknown) => runtime.dispatch({ _tag: 'arrayAppend', payload: { path, value } }),\n prepend: (value: unknown) => runtime.dispatch({ _tag: 'arrayPrepend', payload: { path, value } }),\n remove: (index: number) => runtime.dispatch({ _tag: 'arrayRemove', payload: { path, index } }),\n swap: (indexA: number, indexB: number) =>\n runtime.dispatch({ _tag: 'arraySwap', payload: { path, indexA, indexB } }),\n move: (from: number, to: number) => runtime.dispatch({ _tag: 'arrayMove', payload: { path, from, to } }),\n }),\n }\n}\n","import type { Schema } from 'effect'\nimport * as Logix from '@logixjs/core'\nimport type { RuleEntry } from '../../Rule.js'\n\ntype NonNull<T> = Exclude<T, null | undefined>\ntype ListItem<T> = NonNull<T> extends readonly (infer Item)[] ? Item : never\n\nexport type NodeSpec<Input = unknown, Ctx = unknown> = Omit<\n Logix.StateTrait.StateTraitNode<Input, Ctx>,\n '_tag' | 'check'\n> & {\n readonly check?: Readonly<Record<string, RuleEntry<Input, Ctx>>>\n}\n\nexport type ListSpec<Item = unknown> = Omit<Logix.StateTrait.StateTraitList<Item>, '_tag' | 'item' | 'list'> & {\n readonly item?: NodeSpec<Item, any> | Logix.StateTrait.StateTraitNode<Item, any>\n readonly list?: NodeSpec<ReadonlyArray<Item>, any> | Logix.StateTrait.StateTraitNode<ReadonlyArray<Item>, any>\n}\n\ntype NodeInput<Input, Ctx = unknown> = NodeSpec<Input, Ctx> | Logix.StateTrait.StateTraitNode<Input, Ctx>\n\ntype ListInput<Item> = ListSpec<Item> | Logix.StateTrait.StateTraitList<Item>\n\ntype TraitValueForPath<TValues extends object, P extends Logix.StateTrait.StateFieldPath<TValues>> =\n | Logix.StateTrait.StateTraitEntry<TValues, P>\n | NodeInput<Logix.StateTrait.StateAtPath<TValues, P>, any>\n | (Logix.StateTrait.StateAtPath<TValues, P> extends readonly any[]\n ? ListInput<ListItem<Logix.StateTrait.StateAtPath<TValues, P>>>\n : never)\n\nexport type TraitsSpec<TValues extends object> = {\n readonly [P in Logix.StateTrait.StateFieldPath<TValues>]?: TraitValueForPath<TValues, P>\n} & {\n readonly $root?: NodeInput<TValues, any>\n}\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isStateTraitNode = (value: unknown): value is Logix.StateTrait.StateTraitNode<any, any> =>\n Boolean(value) && typeof value === 'object' && (value as any)._tag === 'StateTraitNode'\n\nconst isStateTraitList = (value: unknown): value is Logix.StateTrait.StateTraitList<any> =>\n Boolean(value) && typeof value === 'object' && (value as any)._tag === 'StateTraitList'\n\nconst isStateTraitEntry = (value: unknown): value is Logix.StateTrait.StateTraitEntry<any, any> =>\n Boolean(value) && typeof value === 'object' && typeof (value as any).kind === 'string'\n\nconst normalizeRule = (rule: unknown): unknown => {\n if (typeof rule === 'function') {\n return { deps: [], validate: rule }\n }\n if (!isPlainObject(rule)) return rule\n const validate = (rule as any).validate\n if (typeof validate !== 'function') return rule\n const depsRaw = (rule as any).deps\n const deps = Array.isArray(depsRaw) ? depsRaw : []\n return { ...rule, deps }\n}\n\nconst normalizeNode = (value: unknown): Logix.StateTrait.StateTraitNode<any, any> => {\n const raw = isStateTraitNode(value) ? (value as any) : (value as any)\n const checkRaw = raw?.check\n const check =\n checkRaw && typeof checkRaw === 'object' && !Array.isArray(checkRaw)\n ? Object.fromEntries(Object.entries(checkRaw).map(([k, v]) => [k, normalizeRule(v)]))\n : checkRaw\n return isStateTraitNode(value)\n ? ({ ...raw, ...(checkRaw !== undefined ? { check } : {}) } as any)\n : Logix.StateTrait.node({ ...raw, ...(checkRaw !== undefined ? { check } : {}) })\n}\n\nconst normalizeList = (value: unknown): Logix.StateTrait.StateTraitList<any> => {\n const raw = isStateTraitList(value) ? (value as any) : (value as any)\n const item = raw?.item ? normalizeNodeOrListOrEntry(raw.item) : undefined\n const list = raw?.list ? normalizeNodeOrListOrEntry(raw.list) : undefined\n const next = {\n ...raw,\n ...(raw?.item !== undefined ? { item } : {}),\n ...(raw?.list !== undefined ? { list } : {}),\n }\n return isStateTraitList(value) ? (next as any) : Logix.StateTrait.list(next)\n}\n\nconst normalizeNodeOrListOrEntry = (value: unknown): unknown => {\n if (isStateTraitEntry(value)) return value\n if (isStateTraitNode(value)) return normalizeNode(value)\n if (isStateTraitList(value)) return normalizeList(value)\n if (isPlainObject(value)) {\n if ('item' in value || 'list' in value || 'identityHint' in value) {\n return normalizeList(value)\n }\n if ('check' in value || 'computed' in value || 'source' in value || 'link' in value || 'meta' in value) {\n return normalizeNode(value)\n }\n }\n return value\n}\n\n/**\n * Form.traits:\n * - Phase 3: a minimal entry point for \"type narrowing + fragment organization\".\n * - Allows mixing in raw node/list fragments (auto-fills StateTrait.node/list tags).\n * - Form defaults `check.deps=[]`; only declare deps when you need \"cross-field linked validation triggers\".\n * - Returns a StateTraitSpec fragment that can be spread directly (assembled by Form.make).\n */\nexport const traits = <TValues extends object, I>(_valuesSchema: Schema.Schema<TValues, I>) => {\n function run(spec: TraitsSpec<TValues>): Logix.StateTrait.StateTraitSpec<TValues>\n function run(spec: Logix.StateTrait.StateTraitSpec<TValues>): Logix.StateTrait.StateTraitSpec<TValues>\n function run(spec: any): any {\n return Object.fromEntries(Object.entries(spec as any).map(([k, v]) => [k, normalizeNodeOrListOrEntry(v)])) as any\n }\n\n return run\n}\n","import * as Logix from '@logixjs/core'\nimport { Duration, Effect, Fiber } from 'effect'\nimport type { FormShape } from '../../Form.js'\n\nexport type FormValidateOn = 'onSubmit' | 'onChange' | 'onBlur'\n\nexport interface FormInstallConfig {\n readonly validateOn: ReadonlyArray<FormValidateOn>\n readonly reValidateOn: ReadonlyArray<FormValidateOn>\n /**\n * rulesValidateOn:\n * - The set of explicitly declared validateOn triggers from `rules` (no inherited rules).\n * - Used to decide event wiring and whether to trigger scoped validation during the pre-submit phase.\n */\n readonly rulesValidateOn?: ReadonlyArray<Exclude<FormValidateOn, 'onSubmit'>>\n readonly debounceMs?: number\n}\n\nconst isAuxRootPath = (path: string): boolean =>\n path === 'errors' ||\n path === 'ui' ||\n path === '$form' ||\n path.startsWith('errors.') ||\n path.startsWith('ui.') ||\n path.startsWith('$form.')\n\ntype InstallActionMap = {\n readonly setValue: Logix.AnySchema\n readonly blur: Logix.AnySchema\n} & Record<string, Logix.AnySchema>\n\n/**\n * Form.install:\n * - Default domain wiring: maps UI events (setValue/blur) to scopedValidate (ReverseClosure is guaranteed by the kernel).\n * - UI subtree writes (dirty/touched) are synchronously committed by the reducer to avoid tearing.\n * - By default, avoids scattering useEffect triggers on the React side.\n */\nexport const install = <TValues extends object>(\n module: Logix.ModuleTagType<any, FormShape<TValues>>,\n config?: FormInstallConfig,\n): Logix.ModuleLogic<FormShape<TValues>, any, never> =>\n module.logic(($) => {\n const validateOn = config?.validateOn ?? ['onSubmit']\n const reValidateOn = config?.reValidateOn ?? ['onChange']\n const rulesValidateOn = config?.rulesValidateOn ?? []\n const debounceMs = config?.debounceMs\n const sourceWiring = Logix.TraitLifecycle.makeSourceWiring($, module)\n\n const validate = (trigger: Logix.TraitLifecycle.ValidateMode, path: string): Effect.Effect<void, never, any> =>\n Logix.TraitLifecycle.scopedValidate($, {\n mode: trigger,\n target: Logix.TraitLifecycle.Ref.fromValuePath(path),\n })\n\n const validateRoot = (): Effect.Effect<void, never, any> =>\n Logix.TraitLifecycle.scopedValidate($, {\n mode: 'submit',\n target: Logix.TraitLifecycle.Ref.root(),\n })\n\n const pending = new Map<string, Fiber.RuntimeFiber<void, never>>()\n\n const cancelPending = (path: string): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n const prev = pending.get(path)\n if (!prev) return\n pending.delete(path)\n yield* Fiber.interruptFork(prev)\n })\n\n const scheduleDebouncedValidate = (path: string): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n const ms = debounceMs ?? 0\n if (ms <= 0) {\n yield* validate('valueChange', path)\n return\n }\n\n yield* cancelPending(path)\n const fiber = yield* Effect.forkScoped(\n Effect.sleep(Duration.millis(ms)).pipe(\n Effect.zipRight(validate('valueChange', path)),\n Effect.ensuring(Effect.sync(() => pending.delete(path))),\n Effect.catchAllCause(() => Effect.void),\n ),\n )\n pending.set(path, fiber)\n })\n\n const has = (list: ReadonlyArray<FormValidateOn>, item: FormValidateOn): boolean => list.includes(item)\n\n const wantsChange =\n has(validateOn, 'onChange') || has(reValidateOn, 'onChange') || rulesValidateOn.includes('onChange')\n\n const wantsBlur = has(validateOn, 'onBlur') || has(reValidateOn, 'onBlur') || rulesValidateOn.includes('onBlur')\n\n const shouldValidateNow = (submitCount: number, trigger: Exclude<FormValidateOn, 'onSubmit'>): boolean => {\n const effective = submitCount > 0 ? reValidateOn : validateOn\n if (effective.includes(trigger)) return true\n return rulesValidateOn.includes(trigger)\n }\n\n const readSubmitCount = (state: unknown): number => {\n const form = state && typeof state === 'object' && !Array.isArray(state) ? (state as any).$form : undefined\n const v = form && typeof form === 'object' && !Array.isArray(form) ? (form as any).submitCount : undefined\n return typeof v === 'number' && Number.isFinite(v) ? v : 0\n }\n\n const setup = sourceWiring.setup\n\n const run = Effect.gen(function* () {\n // blur: trigger scoped validation if required by the current phase or rule allowlist.\n if (wantsBlur) {\n yield* $.onAction('blur').runFork((action) =>\n Effect.gen(function* () {\n const path = action.payload.path\n if (!path || isAuxRootPath(path)) return\n\n yield* cancelPending(path)\n\n const state = yield* $.state.read\n const submitCount = readSubmitCount(state)\n if (!shouldValidateNow(submitCount, 'onBlur')) return\n\n yield* validate('blur', path)\n }),\n )\n }\n\n // setValue: source wiring is always needed; triggering validation depends on validateOn/reValidateOn + rules.validateOn.\n yield* $.onAction('setValue').runFork((action) =>\n Effect.gen(function* () {\n const path = action.payload.path\n if (!path || isAuxRootPath(path)) return\n\n yield* sourceWiring.refreshOnKeyChange(path)\n yield* cancelPending(path)\n\n if (!wantsChange) return\n\n const state = yield* $.state.read\n const submitCount = readSubmitCount(state)\n if (!shouldValidateNow(submitCount, 'onChange')) return\n\n yield* scheduleDebouncedValidate(path)\n }),\n )\n\n // submit: always triggers root validation (even if validateOn only includes onBlur, we still validate on submit).\n yield* $.onAction('submit').runFork(() =>\n Effect.gen(function* () {\n pending.clear()\n yield* validateRoot()\n }),\n )\n\n // Array structural changes: refresh if they affect source deps.\n yield* $.onAction('arrayAppend').runFork((action) =>\n Effect.gen(function* () {\n yield* sourceWiring.refreshOnKeyChange(action.payload.path)\n if (!wantsChange) return\n const state = yield* $.state.read\n const submitCount = readSubmitCount(state)\n if (!shouldValidateNow(submitCount, 'onChange')) return\n yield* Logix.TraitLifecycle.scopedValidate($, {\n mode: 'valueChange',\n target: Logix.TraitLifecycle.Ref.list(action.payload.path),\n })\n }),\n )\n yield* $.onAction('arrayPrepend').runFork((action) =>\n Effect.gen(function* () {\n yield* sourceWiring.refreshOnKeyChange(action.payload.path)\n if (!wantsChange) return\n const state = yield* $.state.read\n const submitCount = readSubmitCount(state)\n if (!shouldValidateNow(submitCount, 'onChange')) return\n yield* Logix.TraitLifecycle.scopedValidate($, {\n mode: 'valueChange',\n target: Logix.TraitLifecycle.Ref.list(action.payload.path),\n })\n }),\n )\n yield* $.onAction('arrayRemove').runFork((action) =>\n Effect.gen(function* () {\n yield* sourceWiring.refreshOnKeyChange(action.payload.path)\n if (!wantsChange) return\n const state = yield* $.state.read\n const submitCount = readSubmitCount(state)\n if (!shouldValidateNow(submitCount, 'onChange')) return\n yield* Logix.TraitLifecycle.scopedValidate($, {\n mode: 'valueChange',\n target: Logix.TraitLifecycle.Ref.list(action.payload.path),\n })\n }),\n )\n yield* $.onAction('arraySwap').runFork((action) =>\n Effect.gen(function* () {\n yield* sourceWiring.refreshOnKeyChange(action.payload.path)\n if (!wantsChange) return\n const state = yield* $.state.read\n const submitCount = readSubmitCount(state)\n if (!shouldValidateNow(submitCount, 'onChange')) return\n yield* Logix.TraitLifecycle.scopedValidate($, {\n mode: 'valueChange',\n target: Logix.TraitLifecycle.Ref.list(action.payload.path),\n })\n }),\n )\n yield* $.onAction('arrayMove').runFork((action) =>\n Effect.gen(function* () {\n yield* sourceWiring.refreshOnKeyChange(action.payload.path)\n if (!wantsChange) return\n const state = yield* $.state.read\n const submitCount = readSubmitCount(state)\n if (!shouldValidateNow(submitCount, 'onChange')) return\n yield* Logix.TraitLifecycle.scopedValidate($, {\n mode: 'valueChange',\n target: Logix.TraitLifecycle.Ref.list(action.payload.path),\n })\n }),\n )\n }).pipe(Effect.asVoid)\n\n return { setup, run }\n }) as Logix.ModuleLogic<FormShape<TValues>, any, never>\n","import * as Logix from '@logixjs/core'\nimport type { RulesManifest } from './rules.js'\n\nexport const formRulesManifestArtifactKey = '@logixjs/form.rulesManifest@v1' as const\n\nexport type FormRulesManifestArtifactPayload = {\n readonly manifest: RulesManifest\n readonly warnings: ReadonlyArray<string>\n}\n\nexport const makeFormRulesManifestArtifactExporter = (params: {\n readonly getManifest: () => RulesManifest\n readonly getWarnings: () => ReadonlyArray<string>\n}): Logix.Observability.TrialRunArtifactExporter => ({\n exporterId: 'logix-form.rulesManifest@v1',\n artifactKey: formRulesManifestArtifactKey,\n export: () => {\n const manifest = params.getManifest()\n const warnings = params.getWarnings()\n return {\n manifest,\n warnings: Array.isArray(warnings) ? warnings : [],\n } satisfies FormRulesManifestArtifactPayload\n },\n})\n","import type { Schema } from 'effect'\nimport type { DerivedSpec } from '../../Trait.js'\n\n/**\n * Form.derived:\n * - Provides \"type narrowing based on the values schema\" for derived specs, so you can compose derived fragments\n * without losing type information.\n * - Does no extra runtime normalization; final validation is still governed by Form.make guardrails.\n */\nexport const derived = <TValues extends object, I>(_valuesSchema: Schema.Schema<TValues, I>) => {\n function run(spec: DerivedSpec<TValues>): DerivedSpec<TValues>\n function run(spec: any): any {\n return spec\n }\n\n return run\n}\n","import { Schema } from 'effect'\nimport * as Rule from '../../Rule.js'\nimport * as Validators from '../validators/index.js'\nimport type { CanonicalListItem, CanonicalListPath, CanonicalPath, CanonicalValue } from '../form/types.js'\n\n/**\n * RulesSpec: the input shape of `Form.make({ rules })`.\n *\n * - Task 028 compiles `rules` into an equivalent `StateTraitSpec`; `rules` itself does not introduce a second runtime.\n */\nexport type RulesSpec<TValues extends object> = Readonly<{\n readonly _tag: 'FormRulesSpec'\n readonly decls: ReadonlyArray<Rule.RulesDecl<TValues>>\n}>\n\nexport type RulesFieldNode = Readonly<{\n readonly _tag: 'FormRulesNodeField'\n readonly rule: Rule.RuleInput<any, any>\n}>\n\nexport type RulesObjectNode = Readonly<{\n readonly _tag: 'FormRulesNodeObject'\n readonly shape: Readonly<Record<string, RulesNode>>\n readonly refineRule?: Rule.RuleInput<any, any>\n readonly superRefineRule?: Rule.RuleInput<any, any>\n readonly refine: (rule: Rule.RuleInput<any, any>) => RulesObjectNode\n readonly superRefine: (rule: Rule.RuleInput<any, any>) => RulesObjectNode\n}>\n\nexport type RulesArrayNode = Readonly<{\n readonly _tag: 'FormRulesNodeArray'\n readonly item: RulesNode\n readonly identity: Rule.ListIdentityPolicy\n readonly refineRule?: Rule.RuleInput<any, any>\n readonly superRefineRule?: Rule.RuleInput<any, any>\n readonly refine: (rule: Rule.RuleInput<any, any>) => RulesArrayNode\n readonly superRefine: (rule: Rule.RuleInput<any, any>) => RulesArrayNode\n}>\n\nexport type RulesNode = RulesFieldNode | RulesObjectNode | RulesArrayNode\n\ntype TrackByKey<Item> = Item extends object\n ? CanonicalPath<Item> extends never\n ? string\n : CanonicalPath<Item>\n : string\n\nexport type RulesDsl<TValues extends object> = {\n (...decls: ReadonlyArray<Rule.RulesDecl<TValues>>): RulesSpec<TValues>\n (...decls: ReadonlyArray<Rule.RulesDecl<TValues> | ReadonlyArray<Rule.RulesDecl<TValues>>>): RulesSpec<TValues>\n readonly schema: (node: RulesNode) => RulesSpec<TValues>\n readonly at: (prefix: string) => RulesDsl<TValues>\n readonly root: <Ctx = unknown>(rule: Rule.RuleInput<TValues, Ctx>) => Rule.RootDecl<TValues, Ctx>\n readonly list: <P extends CanonicalListPath<TValues>, Ctx = unknown>(\n listPath: P,\n spec: {\n readonly identity:\n | Readonly<{ readonly mode: 'trackBy'; readonly trackBy: TrackByKey<CanonicalListItem<TValues, P>> }>\n | Readonly<{ readonly mode: 'store' }>\n | Readonly<{ readonly mode: 'index' }>\n readonly item?: Rule.RuleInput<CanonicalListItem<TValues, P>, Ctx>\n readonly list?: Rule.RuleInput<ReadonlyArray<CanonicalListItem<TValues, P>>, Ctx>\n },\n ) => Rule.ListDecl<CanonicalListItem<TValues, P>, Ctx>\n readonly field: {\n <P extends CanonicalPath<TValues>, Ctx = unknown>(\n valuePath: P,\n rule: Rule.RuleInput<CanonicalValue<TValues, P>, Ctx>,\n options?: { readonly errorTarget?: Rule.ErrorTarget },\n ): Rule.FieldDecl<CanonicalValue<TValues, P>, Ctx>\n (schema: Schema.Schema<any, any, never>): RulesFieldNode\n (rule: Rule.RuleInput<any, any>): RulesFieldNode\n }\n readonly object: (shape: Readonly<Record<string, RulesNode>>) => RulesObjectNode\n readonly array: (item: RulesNode, options: { readonly identity: Rule.ListIdentityPolicy }) => RulesArrayNode\n}\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst normalizePrefix = (prefix: string): string => {\n const p = String(prefix ?? '').trim()\n if (!p) return ''\n if (p.includes('[]') || p.includes('[') || p.includes(']')) {\n throw new Error(`[Form.rules] Invalid prefix \"${p}\" (bracket syntax is not allowed)`)\n }\n const segments = p\n .split('.')\n .map((s) => s.trim())\n .filter(Boolean)\n if (segments.length === 0) return ''\n for (const seg of segments) {\n if (/^[0-9]+$/.test(seg)) {\n throw new Error(`[Form.rules] Invalid prefix \"${p}\" (numeric segments are not allowed)`)\n }\n }\n return segments.join('.')\n}\n\nconst joinPath = (prefix: string, path: string): string => {\n const p = String(prefix ?? '').trim()\n const s = String(path ?? '').trim()\n if (!p) return s\n if (!s) return p\n return `${p}.${s}`\n}\n\nconst flattenDecls = <T>(decls: ReadonlyArray<T | ReadonlyArray<T>>): ReadonlyArray<T> => {\n const out: Array<T> = []\n for (const item of decls) {\n if (Array.isArray(item)) out.push(...item)\n else out.push(item as T)\n }\n return out\n}\n\nconst withPrefix = <TValues extends object>(\n prefix: string,\n decls: ReadonlyArray<Rule.RulesDecl<TValues>>,\n): ReadonlyArray<Rule.RulesDecl<TValues>> => {\n if (!prefix) return decls\n return decls.map((decl) => {\n if (!decl || typeof decl !== 'object') return decl\n if ((decl as any).kind === 'field') {\n const valuePath = joinPath(prefix, String((decl as any).valuePath ?? ''))\n return { ...(decl as any), valuePath }\n }\n if ((decl as any).kind === 'list') {\n const listPath = joinPath(prefix, String((decl as any).listPath ?? ''))\n return { ...(decl as any), listPath }\n }\n return decl\n })\n}\n\nconst makeFieldNode = (rule: Rule.RuleInput<any, any>): RulesFieldNode => ({\n _tag: 'FormRulesNodeField',\n rule,\n})\n\nconst fieldFromSchema = (schema: Schema.Schema<any, any, never>): Rule.RuleInput<any, any> => ({\n validate: {\n schema: (value: unknown) => {\n const decoded = Schema.decodeUnknownEither(schema)(value) as any\n return decoded._tag === 'Right' ? undefined : Validators.schemaErrorMessage(decoded.left)\n },\n },\n})\n\nconst makeObjectNode = (params: {\n readonly shape: Readonly<Record<string, RulesNode>>\n readonly refineRule?: Rule.RuleInput<any, any>\n readonly superRefineRule?: Rule.RuleInput<any, any>\n}): RulesObjectNode => {\n const base: any = {\n _tag: 'FormRulesNodeObject',\n shape: params.shape,\n ...(params.refineRule !== undefined ? { refineRule: params.refineRule } : {}),\n ...(params.superRefineRule !== undefined ? { superRefineRule: params.superRefineRule } : {}),\n }\n\n base.refine = (rule: Rule.RuleInput<any, any>) => {\n if (params.refineRule !== undefined || params.superRefineRule !== undefined) {\n throw new Error(`[Form.rules.schema] object.refine(...) can only be specified once`)\n }\n return makeObjectNode({ ...params, refineRule: rule })\n }\n\n base.superRefine = (rule: Rule.RuleInput<any, any>) => {\n if (params.refineRule !== undefined || params.superRefineRule !== undefined) {\n throw new Error(`[Form.rules.schema] object.superRefine(...) can only be specified once`)\n }\n return makeObjectNode({ ...params, superRefineRule: rule })\n }\n\n return base as RulesObjectNode\n}\n\nconst makeArrayNode = (params: {\n readonly item: RulesNode\n readonly identity: Rule.ListIdentityPolicy\n readonly refineRule?: Rule.RuleInput<any, any>\n readonly superRefineRule?: Rule.RuleInput<any, any>\n}): RulesArrayNode => {\n const base: any = {\n _tag: 'FormRulesNodeArray',\n item: params.item,\n identity: params.identity,\n ...(params.refineRule !== undefined ? { refineRule: params.refineRule } : {}),\n ...(params.superRefineRule !== undefined ? { superRefineRule: params.superRefineRule } : {}),\n }\n\n base.refine = (rule: Rule.RuleInput<any, any>) => {\n if (params.refineRule !== undefined || params.superRefineRule !== undefined) {\n throw new Error(`[Form.rules.schema] array.refine(...) can only be specified once`)\n }\n return makeArrayNode({ ...params, refineRule: rule })\n }\n\n base.superRefine = (rule: Rule.RuleInput<any, any>) => {\n if (params.refineRule !== undefined || params.superRefineRule !== undefined) {\n throw new Error(`[Form.rules.schema] array.superRefine(...) can only be specified once`)\n }\n return makeArrayNode({ ...params, superRefineRule: rule })\n }\n\n return base as RulesArrayNode\n}\n\nconst assertValidListIdentity = (identity: Rule.ListIdentityPolicy, listPath: string): void => {\n if (!identity || typeof identity !== 'object') {\n throw new Error(`[Form.rules] Missing list identity for \"${listPath}\"`)\n }\n const mode = (identity as any).mode\n if (mode === 'trackBy') {\n const trackBy = (identity as any).trackBy\n if (typeof trackBy !== 'string' || trackBy.trim().length === 0) {\n throw new Error(`[Form.rules] identity.trackBy for \"${listPath}\" must be a non-empty string`)\n }\n if (trackBy.includes('[') || trackBy.includes(']')) {\n throw new Error(`[Form.rules] identity.trackBy for \"${listPath}\" must not contain brackets (got \"${trackBy}\")`)\n }\n return\n }\n if (mode === 'store' || mode === 'index') return\n throw new Error(`[Form.rules] Invalid identity.mode for \"${listPath}\" (got \"${String(mode)}\")`)\n}\n\nconst assertCanonicalValuePath = (label: string, path: string): void => {\n const p = String(path ?? '').trim()\n if (!p) throw new Error(`[Form.rules] ${label} must be a non-empty path`)\n if (p === '$root') return\n if (p.includes('[]') || p.includes('[') || p.includes(']')) {\n throw new Error(`[Form.rules] ${label} \"${p}\" must not use bracket syntax`)\n }\n const segments = p\n .split('.')\n .map((s) => s.trim())\n .filter(Boolean)\n if (segments.length === 0) throw new Error(`[Form.rules] ${label} \"${p}\" must be a non-empty path`)\n for (const seg of segments) {\n if (/^[0-9]+$/.test(seg)) {\n throw new Error(`[Form.rules] ${label} \"${p}\" must not contain numeric segments`)\n }\n }\n}\n\nconst assertDeclListGuardrails = <TValues extends object>(decls: ReadonlyArray<Rule.RulesDecl<TValues>>): void => {\n const declared = new Map<string, string>()\n\n const reserve = (kind: string, path: string): void => {\n const existing = declared.get(path)\n if (existing) {\n throw new Error(`[Form.rules] Duplicate declaration for \"${path}\" (${existing} + ${kind})`)\n }\n declared.set(path, kind)\n }\n\n for (const decl of decls) {\n if (!decl || typeof decl !== 'object') continue\n\n if ((decl as any).kind === 'field') {\n const valuePath = String((decl as any).valuePath ?? '').trim()\n assertCanonicalValuePath('field path', valuePath)\n reserve('field', valuePath)\n continue\n }\n\n if ((decl as any).kind === 'root') {\n reserve('root', '$root')\n continue\n }\n\n if ((decl as any).kind === 'list') {\n const listPath = String((decl as any).listPath ?? '').trim()\n assertCanonicalValuePath('list path', listPath)\n const identity = (decl as any).identity as Rule.ListIdentityPolicy\n assertValidListIdentity(identity, listPath)\n reserve('list', listPath)\n continue\n }\n\n const kind = String((decl as any).kind ?? '')\n throw new Error(`[Form.rules] Unknown declaration kind \"${kind}\"`)\n }\n}\n\nconst compileSchema = <TValues extends object>(\n node: RulesNode,\n prefix: string,\n): ReadonlyArray<Rule.RulesDecl<TValues>> => {\n const visit = (n: RulesNode, at: string): ReadonlyArray<Rule.RulesDecl<TValues>> => {\n if (!n || typeof n !== 'object') return []\n\n if ((n as any)._tag === 'FormRulesNodeField') {\n const rule = (n as any).rule as Rule.RuleInput<any, any>\n assertCanonicalValuePath('field path', at)\n return [Rule.field(at, rule) as any]\n }\n\n if ((n as any)._tag === 'FormRulesNodeObject') {\n const shape = (n as any).shape as Readonly<Record<string, RulesNode>>\n const out: Array<Rule.RulesDecl<TValues>> = []\n for (const key of Object.keys(shape)) {\n out.push(...visit(shape[key]!, joinPath(at, key)))\n }\n\n const refineRule = (n as any).refineRule as Rule.RuleInput<any, any> | undefined\n const superRefineRule = (n as any).superRefineRule as Rule.RuleInput<any, any> | undefined\n const selfRule = superRefineRule ?? refineRule\n if (selfRule !== undefined) {\n if (at) {\n out.push(Rule.field(at, selfRule, { errorTarget: '$self' }) as any)\n } else {\n out.push(Rule.root(selfRule) as any)\n }\n }\n\n return out\n }\n\n if ((n as any)._tag === 'FormRulesNodeArray') {\n const identity = (n as any).identity as Rule.ListIdentityPolicy\n assertCanonicalValuePath('list path', at)\n assertValidListIdentity(identity, at)\n\n const item = (n as any).item as RulesNode\n if (!item || typeof item !== 'object' || (item as any)._tag !== 'FormRulesNodeObject') {\n throw new Error(`[Form.rules.schema] array(item) currently requires item to be an object node`)\n }\n\n const itemObj = item as any\n if (itemObj.refineRule !== undefined || itemObj.superRefineRule !== undefined) {\n throw new Error(`[Form.rules.schema] array(item).item.refine(...) is not supported yet`)\n }\n\n const shape = itemObj.shape as Readonly<Record<string, RulesNode>>\n const validate: Record<string, Rule.RuleEntry<any, any>> = {}\n\n for (const key of Object.keys(shape)) {\n const child = shape[key] as any\n if (!child || typeof child !== 'object') continue\n if (child._tag !== 'FormRulesNodeField') {\n throw new Error(\n `[Form.rules.schema] array(item) only supports flat field nodes (nested object/array is not supported yet)`,\n )\n }\n\n const ruleInput = child.rule as Rule.RuleInput<any, any>\n const leafRules = Rule.make(ruleInput as any)\n for (const name of Object.keys(leafRules).sort((a, b) => a.localeCompare(b))) {\n const leaf = (leafRules as any)[name]\n const ruleName = `${key}.${name}`\n const deps = Array.isArray((leaf as any)?.deps) ? (leaf as any).deps : []\n const depsWithKey = Array.from(new Set([key, ...deps])).sort((a, b) => a.localeCompare(b))\n validate[ruleName] = {\n ...leaf,\n deps: depsWithKey,\n validate: (row: any, ctx: any) => {\n const v = row?.[key]\n const out = (leaf as any).validate(v, ctx)\n if (out === Symbol.for('logix.state-trait.validate.skip')) return out\n return out === undefined ? undefined : { [key]: out }\n },\n }\n }\n }\n\n const itemRule: Rule.RuleInput<any, any> | undefined =\n Object.keys(validate).length > 0 ? ({ validate } as any) : undefined\n\n const listRule = (n as any).refineRule as Rule.RuleInput<any, any> | undefined\n const listSuper = (n as any).superRefineRule as Rule.RuleInput<any, any> | undefined\n const listRuleInput = listSuper ?? listRule\n\n return [\n Rule.list(at, {\n identity,\n ...(itemRule !== undefined ? { item: itemRule } : {}),\n ...(listRuleInput !== undefined ? { list: listRuleInput } : {}),\n }) as any,\n ]\n }\n\n return []\n }\n\n const rootPrefix = normalizePrefix(prefix)\n return visit(node, rootPrefix)\n}\n\n/**\n * Form.rules:\n * - `$.rules(...decls)`:decl list(`Form.Rule.field/list/root`)\n * - `$.rules.schema(node)`: zod-like rules authoring (Phase 3 will be filled in gradually)\n * - `$.rules.at(prefix)`: write relative paths under `prefix`\n */\nexport const rules = <TValues extends object, I>(_valuesSchema: Schema.Schema<TValues, I>): RulesDsl<TValues> => {\n const makeDsl = (prefix: string): RulesDsl<TValues> => {\n const build: any = (\n ...decls: ReadonlyArray<Rule.RulesDecl<TValues> | ReadonlyArray<Rule.RulesDecl<TValues>>>\n ): RulesSpec<TValues> => {\n const flat = flattenDecls(decls as any) as ReadonlyArray<Rule.RulesDecl<TValues>>\n const p = normalizePrefix(prefix)\n const normalized = withPrefix(p, flat)\n assertDeclListGuardrails(normalized)\n return {\n _tag: 'FormRulesSpec',\n decls: normalized,\n }\n }\n\n build.schema = (node: RulesNode) => {\n const p = normalizePrefix(prefix)\n const normalized = compileSchema<TValues>(node, p)\n assertDeclListGuardrails(normalized)\n return {\n _tag: 'FormRulesSpec',\n decls: normalized,\n }\n }\n\n build.at = (p2: string) => makeDsl(joinPath(normalizePrefix(prefix), normalizePrefix(p2)))\n\n function field<P extends CanonicalPath<TValues>, Ctx = unknown>(\n valuePath: P,\n ruleInput: Rule.RuleInput<CanonicalValue<TValues, P>, Ctx>,\n options?: { readonly errorTarget?: Rule.ErrorTarget },\n ): Rule.FieldDecl<CanonicalValue<TValues, P>, Ctx>\n function field(schema: Schema.Schema<any, any, never>): RulesFieldNode\n function field(rule: Rule.RuleInput<any, any>): RulesFieldNode\n function field(...args: ReadonlyArray<any>): any {\n if (args.length >= 2 && typeof args[0] === 'string') {\n return Rule.field(args[0], args[1], args[2])\n }\n const input = args[0]\n if (Schema.isSchema(input)) return makeFieldNode(fieldFromSchema(input as any))\n return makeFieldNode(input as any)\n }\n\n build.field = field\n build.object = (shape: Readonly<Record<string, RulesNode>>) => makeObjectNode({ shape })\n build.array = (item: RulesNode, options: { readonly identity: Rule.ListIdentityPolicy }) =>\n makeArrayNode({ item, identity: options.identity })\n build.root = (ruleInput: unknown) => Rule.root(ruleInput as any)\n build.list = (listPath: string, spec: unknown) => Rule.list(listPath, spec as any)\n\n return build as RulesDsl<TValues>\n }\n\n return makeDsl('') as any\n}\n","import type { Schema } from 'effect'\nimport { derived } from './derived.js'\nimport { rules } from './rules.js'\nimport { traits } from './traits.js'\n\nexport type FormFrom<TValues extends object> = Readonly<{\n readonly derived: ReturnType<typeof derived<TValues, any>>\n readonly rules: ReturnType<typeof rules<TValues, any>>\n readonly traits: ReturnType<typeof traits<TValues, any>>\n}>\n\nexport const fromValues = <TValues extends object, I>(valuesSchema: Schema.Schema<TValues, I>): FormFrom<TValues> => ({\n derived: derived(valuesSchema),\n rules: rules(valuesSchema),\n traits: traits(valuesSchema),\n})\n","import * as Logix from '@logixjs/core'\nimport type { RuleEntry } from '../../Rule.js'\n\nexport type Node<Input = unknown, Ctx = unknown> = Logix.StateTrait.StateTraitNode<Input, Ctx>\nexport type CheckRule<Input = unknown, Ctx = unknown> = RuleEntry<Input, Ctx>\n\nexport type NodeSpec<Input = unknown, Ctx = unknown> = Omit<\n Logix.StateTrait.StateTraitNode<Input, Ctx>,\n '_tag' | 'check'\n> & {\n readonly check?: Readonly<Record<string, RuleEntry<Input, Ctx>>>\n}\n\nexport const node = <Input = unknown, Ctx = unknown>(\n spec: NodeSpec<Input, Ctx>,\n): Logix.StateTrait.StateTraitNode<Input, Ctx> => Logix.StateTrait.node(spec as any)\n","import * as Logix from '@logixjs/core'\nimport type { NodeSpec } from './traits.js'\n\nexport type List<Item = unknown> = Logix.StateTrait.StateTraitList<Item>\n\nexport type ListSpec<Item = unknown> = Omit<Logix.StateTrait.StateTraitList<Item>, '_tag' | 'item' | 'list'> & {\n readonly item?: NodeSpec<Item, any> | Logix.StateTrait.StateTraitNode<Item, any>\n readonly list?: NodeSpec<ReadonlyArray<Item>, any> | Logix.StateTrait.StateTraitNode<ReadonlyArray<Item>, any>\n}\n\nexport const list = <Item = unknown>(spec: ListSpec<Item>): Logix.StateTrait.StateTraitList<Item> =>\n Logix.StateTrait.list(spec as any)\n"],"mappings":"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","names":["Logix","Schema","isStateTraitNode","isStateTraitList","isStateTraitEntry","out","list","validate","rules","next","delta","list","Logix","isPlainObject","list","Logix","Effect","isAuxRootPath","list","readSubmitCount","Schema","initialMeta","make","assertCanonicalValuePath","assertValidListIdentity","rulesSpec","joinPath","rules","validateOn","list","node","traits","Schema","Schema","node","field","Logix","Logix","list"]}
|