@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.
Files changed (101) hide show
  1. package/dist/Error-VvknI9Wj.d.cts +37 -0
  2. package/dist/Error-VvknI9Wj.d.ts +37 -0
  3. package/dist/Error.cjs +46 -0
  4. package/dist/Error.cjs.map +1 -0
  5. package/dist/Error.d.cts +1 -0
  6. package/dist/Error.d.ts +1 -0
  7. package/dist/Error.js +14 -0
  8. package/dist/Error.js.map +1 -0
  9. package/dist/Form.cjs +2455 -0
  10. package/dist/Form.cjs.map +1 -0
  11. package/dist/Form.d.cts +64 -0
  12. package/dist/Form.d.ts +64 -0
  13. package/dist/Form.js +25 -0
  14. package/dist/Form.js.map +1 -0
  15. package/dist/FormView-CAg9LVrf.d.cts +17 -0
  16. package/dist/FormView-CAg9LVrf.d.ts +17 -0
  17. package/dist/FormView.cjs +61 -0
  18. package/dist/FormView.cjs.map +1 -0
  19. package/dist/FormView.d.cts +1 -0
  20. package/dist/FormView.d.ts +1 -0
  21. package/dist/FormView.js +8 -0
  22. package/dist/FormView.js.map +1 -0
  23. package/dist/Path-DOjMkAS6.d.cts +42 -0
  24. package/dist/Path-DOjMkAS6.d.ts +42 -0
  25. package/dist/Path.cjs +132 -0
  26. package/dist/Path.cjs.map +1 -0
  27. package/dist/Path.d.cts +1 -0
  28. package/dist/Path.d.ts +1 -0
  29. package/dist/Path.js +22 -0
  30. package/dist/Path.js.map +1 -0
  31. package/dist/Rule-BOAiSVz9.d.cts +202 -0
  32. package/dist/Rule-BOAiSVz9.d.ts +202 -0
  33. package/dist/Rule.cjs +307 -0
  34. package/dist/Rule.cjs.map +1 -0
  35. package/dist/Rule.d.cts +2 -0
  36. package/dist/Rule.d.ts +2 -0
  37. package/dist/Rule.js +34 -0
  38. package/dist/Rule.js.map +1 -0
  39. package/dist/SchemaErrorMapping-Cu5gl7-Z.d.ts +50 -0
  40. package/dist/SchemaErrorMapping-DOrgLzii.d.cts +50 -0
  41. package/dist/SchemaErrorMapping.cjs +305 -0
  42. package/dist/SchemaErrorMapping.cjs.map +1 -0
  43. package/dist/SchemaErrorMapping.d.cts +2 -0
  44. package/dist/SchemaErrorMapping.d.ts +2 -0
  45. package/dist/SchemaErrorMapping.js +17 -0
  46. package/dist/SchemaErrorMapping.js.map +1 -0
  47. package/dist/SchemaPathMapping-BCoUW-_q.d.ts +16 -0
  48. package/dist/SchemaPathMapping-BUq2zm8W.d.cts +20 -0
  49. package/dist/SchemaPathMapping-BUq2zm8W.d.ts +20 -0
  50. package/dist/SchemaPathMapping-DJnExqM3.d.cts +16 -0
  51. package/dist/SchemaPathMapping.cjs +179 -0
  52. package/dist/SchemaPathMapping.cjs.map +1 -0
  53. package/dist/SchemaPathMapping.d.cts +2 -0
  54. package/dist/SchemaPathMapping.d.ts +2 -0
  55. package/dist/SchemaPathMapping.js +12 -0
  56. package/dist/SchemaPathMapping.js.map +1 -0
  57. package/dist/Trait-Bu794ROY.d.cts +49 -0
  58. package/dist/Trait-Bu794ROY.d.ts +49 -0
  59. package/dist/Trait.cjs +48 -0
  60. package/dist/Trait.cjs.map +1 -0
  61. package/dist/Trait.d.cts +2 -0
  62. package/dist/Trait.d.ts +2 -0
  63. package/dist/Trait.js +12 -0
  64. package/dist/Trait.js.map +1 -0
  65. package/dist/chunk-5DRI5UGD.js +105 -0
  66. package/dist/chunk-5DRI5UGD.js.map +1 -0
  67. package/dist/chunk-AD2ZA7KA.js +23 -0
  68. package/dist/chunk-AD2ZA7KA.js.map +1 -0
  69. package/dist/chunk-EOXJRCM6.js +146 -0
  70. package/dist/chunk-EOXJRCM6.js.map +1 -0
  71. package/dist/chunk-JZ5FZKPJ.js +71 -0
  72. package/dist/chunk-JZ5FZKPJ.js.map +1 -0
  73. package/dist/chunk-LNJJPZAG.js +46 -0
  74. package/dist/chunk-LNJJPZAG.js.map +1 -0
  75. package/dist/chunk-NAR5SIFP.js +22 -0
  76. package/dist/chunk-NAR5SIFP.js.map +1 -0
  77. package/dist/chunk-OJVEZKU7.js +117 -0
  78. package/dist/chunk-OJVEZKU7.js.map +1 -0
  79. package/dist/chunk-PZ5AY32C.js +10 -0
  80. package/dist/chunk-PZ5AY32C.js.map +1 -0
  81. package/dist/chunk-S5JTU2CM.js +31 -0
  82. package/dist/chunk-S5JTU2CM.js.map +1 -0
  83. package/dist/chunk-YHDEJ47V.js +1885 -0
  84. package/dist/chunk-YHDEJ47V.js.map +1 -0
  85. package/dist/chunk-YVHXLY63.js +315 -0
  86. package/dist/chunk-YVHXLY63.js.map +1 -0
  87. package/dist/impl-BfSlyM58.d.ts +225 -0
  88. package/dist/impl-Ccdm5eDF.d.cts +225 -0
  89. package/dist/index.cjs +2689 -0
  90. package/dist/index.cjs.map +1 -0
  91. package/dist/index.d.cts +12 -0
  92. package/dist/index.d.ts +12 -0
  93. package/dist/index.js +56 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/react/index.cjs +332 -0
  96. package/dist/react/index.cjs.map +1 -0
  97. package/dist/react/index.d.cts +43 -0
  98. package/dist/react/index.d.ts +43 -0
  99. package/dist/react/index.js +201 -0
  100. package/dist/react/index.js.map +1 -0
  101. package/package.json +62 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/internal/form/impl.ts","../src/internal/form/traits.ts","../src/internal/form/path.ts","../src/Path.ts","../src/internal/form/errors.ts","../src/internal/form/arrays.ts","../src/internal/form/reducer.ts","../src/internal/form/controller.ts","../src/SchemaErrorMapping.ts","../src/internal/schema/SchemaPathMapping.ts","../src/internal/schema/SchemaErrorMapping.ts","../src/internal/dsl/traits.ts","../src/internal/form/install.ts","../src/internal/form/artifacts.ts","../src/Rule.ts","../src/internal/validators/index.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","../src/FormView.ts","../src/Error.ts","../src/Trait.ts","../src/SchemaPathMapping.ts"],"sourcesContent":["// Public barrel for @logixjs/form\n// Recommended usage:\n// import * as Form from \"@logixjs/form\"\n// Then Form exposes namespaces like make / traits / node / list / Rule / Error / Path.\n\nexport { make } from './Form.js'\nexport type * from './Form.js'\n\nexport { fromValues as from } from './Form.js'\nexport { derived, list, node, rules, traits } from './Form.js'\n\nexport * as FormView from './FormView.js'\nexport * as Rule from './Rule.js'\nexport * as Error from './Error.js'\nexport * as Trait from './Trait.js'\nexport { computed, link, source } from './Trait.js'\nexport * as Path from './Path.js'\nexport * as SchemaPathMapping from './SchemaPathMapping.js'\nexport * as SchemaErrorMapping from './SchemaErrorMapping.js'\n","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","export const getAtPath = (state: unknown, path: string): unknown => {\n if (!path) return state\n\n const segments = path.split('.')\n let current: any = state\n\n for (const segment of segments) {\n if (current == null) return undefined\n const index = Number(segment)\n if (Array.isArray(current) && Number.isInteger(index) && String(index) === segment) {\n current = current[index]\n continue\n }\n current = current[segment]\n }\n\n return current\n}\n\nconst cloneContainer = (value: unknown): any => {\n if (Array.isArray(value)) return value.slice()\n if (value && typeof value === 'object') return { ...(value as any) }\n return undefined\n}\n\nexport const setAtPath = (state: unknown, path: string, value: unknown): unknown => {\n if (!path) return value\n\n const segments = path.split('.')\n const rootClone = cloneContainer(state) ?? {}\n\n let current: any = rootClone\n let currentSource: any = state\n\n for (let i = 0; i < segments.length - 1; i++) {\n const segment = segments[i]!\n const index = Number(segment)\n const isIndex = Number.isInteger(index) && String(index) === segment\n\n const nextSource =\n currentSource == null\n ? undefined\n : isIndex && Array.isArray(currentSource)\n ? currentSource[index]\n : currentSource[segment]\n\n const nextSegment = segments[i + 1]!\n const nextIndex = Number(nextSegment)\n const nextIsIndex = Number.isInteger(nextIndex) && String(nextIndex) === nextSegment\n\n const nextClone = cloneContainer(nextSource) ?? (nextIsIndex ? [] : {})\n\n if (isIndex && Array.isArray(current)) {\n current[index] = nextClone\n } else {\n current[segment] = nextClone\n }\n\n current = nextClone\n currentSource = nextSource\n }\n\n const last = segments[segments.length - 1]!\n const lastIndex = Number(last)\n const lastIsIndex = Number.isInteger(lastIndex) && String(lastIndex) === last\n\n if (lastIsIndex && Array.isArray(current)) {\n current[lastIndex] = value\n } else {\n current[last] = value\n }\n\n return rootClone\n}\n\nexport const unsetAtPath = (state: unknown, path: string): unknown => {\n if (!path) return state\n if (getAtPath(state, path) === undefined) return state\n\n const segments = path.split('.')\n const rootClone = cloneContainer(state)\n if (rootClone === undefined) return state\n\n let current: any = rootClone\n let currentSource: any = state\n\n for (let i = 0; i < segments.length - 1; i++) {\n const segment = segments[i]!\n const index = Number(segment)\n const isIndex = Number.isInteger(index) && String(index) === segment\n\n const nextSource =\n currentSource == null\n ? undefined\n : isIndex && Array.isArray(currentSource)\n ? currentSource[index]\n : currentSource[segment]\n\n const nextClone = cloneContainer(nextSource)\n if (nextClone === undefined) {\n return state\n }\n\n if (isIndex && Array.isArray(current)) {\n current[index] = nextClone\n } else {\n current[segment] = nextClone\n }\n\n current = nextClone\n currentSource = nextSource\n }\n\n const last = segments[segments.length - 1]!\n const lastIndex = Number(last)\n const lastIsIndex = Number.isInteger(lastIndex) && String(lastIndex) === last\n\n if (lastIsIndex && Array.isArray(current)) {\n current[lastIndex] = undefined\n return rootClone\n }\n\n if (current && typeof current === 'object') {\n delete current[last]\n }\n\n return rootClone\n}\n\nexport const updateArrayAtPath = (\n state: unknown,\n path: string,\n update: (items: ReadonlyArray<unknown>) => ReadonlyArray<unknown>,\n): unknown => {\n const current = getAtPath(state, path)\n const items = Array.isArray(current) ? current : []\n const next = update(items)\n return setAtPath(state, path, next)\n}\n","export type ValuePath = string\nexport type PatternPath = string\nexport type ListPath = string\nexport type ErrorsPath = string\nexport type UiPath = string\nexport type FieldPath = ReadonlyArray<string>\n\nconst isNumericSegment = (seg: string): boolean => /^[0-9]+$/.test(seg)\n\nconst splitPath = (path: string): ReadonlyArray<string> => {\n if (!path) return []\n const parts = path.split('.').filter((p) => p.length > 0)\n const segs: Array<string> = []\n\n for (const part of parts) {\n if (!part) continue\n if (part.endsWith('[]')) {\n const base = part.slice(0, -2)\n if (base) segs.push(base)\n segs.push('[]')\n continue\n }\n const bracket = /^(.+)\\[(\\d+)\\]$/.exec(part)\n if (bracket) {\n const base = bracket[1]!\n if (base) segs.push(base)\n segs.push(bracket[2]!)\n continue\n }\n segs.push(part)\n }\n\n return segs\n}\n\nexport const toPatternPath = (valuePath: ValuePath): PatternPath => {\n if (!valuePath) return valuePath\n const segs = splitPath(valuePath)\n const out: Array<string> = []\n\n for (const seg of segs) {\n if (seg === '[]' || isNumericSegment(seg)) {\n if (out.length === 0) continue\n const last = out[out.length - 1]!\n if (!last.endsWith('[]')) out[out.length - 1] = `${last}[]`\n continue\n }\n out.push(seg)\n }\n\n return out.join('.')\n}\n\nexport const toListPath = (valuePath: ValuePath): ListPath | undefined => {\n const segs = splitPath(valuePath)\n const firstIndex = segs.findIndex((seg) => seg === '[]' || isNumericSegment(seg))\n if (firstIndex <= 0) return undefined\n return segs.slice(0, firstIndex).join('.')\n}\n\nexport const toErrorsPath = (valuePath: ValuePath): ErrorsPath => {\n if (!valuePath) return 'errors'\n const segs = splitPath(valuePath)\n const out: Array<string> = []\n\n for (const seg of segs) {\n if (isNumericSegment(seg)) {\n out.push('rows', seg)\n continue\n }\n if (seg === '[]') {\n continue\n }\n out.push(seg)\n }\n\n return `errors.${out.join('.')}`\n}\n\nexport const toManualErrorsPath = (valuePath: ValuePath): ErrorsPath => {\n const base = toErrorsPath(valuePath)\n return base === 'errors' ? 'errors.$manual' : base.replace(/^errors\\./, 'errors.$manual.')\n}\n\nexport const toSchemaErrorsPath = (valuePath: ValuePath): ErrorsPath => {\n const base = toErrorsPath(valuePath)\n return base === 'errors' ? 'errors.$schema' : base.replace(/^errors\\./, 'errors.$schema.')\n}\n\nexport const toUiPath = (valuePath: ValuePath): UiPath => (valuePath ? `ui.${valuePath}` : 'ui')\n\nexport const toFieldPath = (path: ValuePath | PatternPath): FieldPath => {\n const segs = splitPath(path)\n const out: Array<string> = []\n for (const seg of segs) {\n if (seg === '[]' || isNumericSegment(seg)) continue\n out.push(seg)\n }\n return out.length > 0 ? out : ['$root']\n}\n\nexport const Path = {\n toPatternPath,\n toListPath,\n toErrorsPath,\n toManualErrorsPath,\n toSchemaErrorsPath,\n toUiPath,\n toFieldPath,\n} as const\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 {\n applySchemaErrorToState,\n toSchemaErrorTree,\n toSchemaErrorWrites,\n} from './internal/schema/SchemaErrorMapping.js'\n\nexport type { SchemaErrorMappingOptions, SchemaErrorWrite } from './internal/schema/SchemaErrorMapping.js'\n\nexport { applySchemaErrorToState, toSchemaErrorTree, toSchemaErrorWrites }\n\nexport const SchemaErrorMapping = {\n applySchemaErrorToState,\n toSchemaErrorTree,\n toSchemaErrorWrites,\n} as const\n","export type FieldPath = string\n\nexport type SchemaError = unknown\n\nexport interface SchemaPathMappingOptions {\n /**\n * errorMap: an escape hatch for complex transform cases (explicitly assigns an error to a set of field paths).\n */\n readonly errorMap?: (schemaError: SchemaError) => ReadonlyArray<FieldPath>\n /**\n * rename: a common rename mapping (domainPath -> viewPath).\n */\n readonly rename?: Readonly<Record<FieldPath, FieldPath>>\n}\n\ntype Segment = string | number\n\nconst isNumericSegment = (seg: string): boolean => /^[0-9]+$/.test(seg)\n\nconst parseSegmentsFromString = (path: string): ReadonlyArray<Segment> => {\n if (!path) return []\n return path\n .split('.')\n .filter(Boolean)\n .map((seg) => (isNumericSegment(seg) ? Number(seg) : seg))\n}\n\nconst asSegments = (value: unknown): ReadonlyArray<Segment> | undefined => {\n if (typeof value === 'string') return parseSegmentsFromString(value)\n if (Array.isArray(value)) {\n const parts: Array<Segment> = []\n for (const x of value) {\n if (typeof x === 'number' && Number.isFinite(x)) {\n parts.push(Math.floor(x))\n continue\n }\n if (typeof x === 'string' && x.length > 0) {\n parts.push(isNumericSegment(x) ? Number(x) : x)\n }\n }\n return parts.length ? parts : undefined\n }\n return undefined\n}\n\nconst toConcretePath = (segments: ReadonlyArray<Segment>): string => segments.map(String).join('.')\n\nconst toPatternPath = (\n segments: ReadonlyArray<Segment>,\n): { readonly pattern: string; readonly indices: ReadonlyArray<number> } => {\n const out: Array<string> = []\n const indices: Array<number> = []\n for (const seg of segments) {\n if (typeof seg === 'number') {\n out.push('[]')\n indices.push(seg)\n } else {\n out.push(seg)\n }\n }\n const pattern = out.join('.').replace(/\\.\\[\\]/g, '[]')\n return { pattern, indices }\n}\n\nconst applyIndicesToPattern = (pattern: string, indices: ReadonlyArray<number>): string | undefined => {\n if (!pattern) return pattern\n const raw = pattern.split('.').filter(Boolean)\n const out: Array<string> = []\n\n let cursor = 0\n for (const part of raw) {\n if (part === '[]') {\n const idx = indices[cursor++]\n if (idx === undefined) return undefined\n out.push(String(idx))\n continue\n }\n if (part.endsWith('[]') && part.length > 2) {\n const base = part.slice(0, -2)\n out.push(base)\n const idx = indices[cursor++]\n if (idx === undefined) return undefined\n out.push(String(idx))\n continue\n }\n out.push(part)\n }\n return out.join('.')\n}\n\nconst concatPaths = (prefix: string, rest: string): string => {\n if (!prefix) return rest\n if (!rest) return prefix\n return `${prefix}.${rest}`\n}\n\nconst mapByRename = (\n segments: ReadonlyArray<Segment>,\n rename: Readonly<Record<FieldPath, FieldPath>>,\n): string | undefined => {\n const concrete = toConcretePath(segments)\n const direct = rename[concrete]\n if (direct !== undefined) {\n return direct\n }\n\n const { pattern, indices } = toPatternPath(segments)\n const patternDirect = rename[pattern]\n if (patternDirect !== undefined) {\n return applyIndicesToPattern(patternDirect, indices)\n }\n\n const keys = Object.keys(rename).sort((a, b) => b.length - a.length)\n for (const from of keys) {\n const to = rename[from]!\n\n const isPattern = from.includes('[]')\n const target = isPattern ? pattern : concrete\n\n if (target === from || target.startsWith(`${from}.`)) {\n const rawRest = target.slice(from.length)\n const rest = rawRest.startsWith('.') ? rawRest.slice(1) : rawRest\n const mapped = concatPaths(to, rest)\n return isPattern ? applyIndicesToPattern(mapped, indices) : mapped\n }\n }\n\n // Segment-level rename: only enabled when both from/to are single segments, to avoid accidental \"path rewrites\".\n const segMap: Record<string, string> = {}\n for (const [from, to] of Object.entries(rename)) {\n if (from.includes('.') || from.includes('[]')) continue\n if (to.includes('.') || to.includes('[]')) continue\n if (!to) continue\n segMap[from] = to\n }\n if (Object.keys(segMap).length === 0) return undefined\n\n const mappedSegments = segments.map((seg) => (typeof seg === 'string' ? (segMap[seg] ?? seg) : seg))\n return toConcretePath(mappedSegments)\n}\n\nconst extractRawPaths = (schemaError: SchemaError): ReadonlyArray<unknown> => {\n const out: Array<unknown> = []\n\n if (schemaError && typeof schemaError === 'object') {\n const anyErr = schemaError as any\n if (Array.isArray(anyErr.errors)) {\n for (const e of anyErr.errors) {\n if (e && typeof e === 'object' && 'path' in (e as any)) {\n out.push((e as any).path)\n }\n }\n }\n if (Array.isArray(anyErr.issues)) {\n for (const e of anyErr.issues) {\n if (e && typeof e === 'object' && 'path' in (e as any)) {\n out.push((e as any).path)\n }\n }\n }\n if ('path' in anyErr) {\n out.push(anyErr.path)\n }\n }\n\n return out\n}\n\n/**\n * mapSchemaErrorToFieldPaths:\n * - Phase 3: provides a minimal, usable default mapping, and allows `errorMap` to override.\n * - In a later phase (US3), we will raise the coverage goal to \">= 80% common mappings\" and fill the test matrix.\n */\nexport const mapSchemaErrorToFieldPaths = (\n schemaError: SchemaError,\n options?: SchemaPathMappingOptions,\n): ReadonlyArray<FieldPath> => {\n const fromEscapeHatch = options?.errorMap?.(schemaError)\n if (fromEscapeHatch && fromEscapeHatch.length) {\n return Array.from(new Set(fromEscapeHatch.filter((p) => typeof p === 'string' && p.length > 0)))\n }\n\n const rename = options?.rename\n const results: Array<string> = []\n\n for (const rawPath of extractRawPaths(schemaError)) {\n const segments = asSegments(rawPath)\n if (!segments || segments.length === 0) continue\n\n const mapped = rename ? mapByRename(segments, rename) : undefined\n\n const path = mapped ?? toConcretePath(segments)\n if (path) results.push(path)\n }\n\n return Array.from(new Set(results))\n}\n","import type { FieldPath, SchemaError, SchemaPathMappingOptions } from './SchemaPathMapping.js'\nimport { mapSchemaErrorToFieldPaths } from './SchemaPathMapping.js'\nimport { setAtPath } from '../form/path.js'\nimport { toSchemaErrorsPath } from '../../Path.js'\n\nexport interface SchemaErrorMappingOptions extends SchemaPathMappingOptions {\n /**\n * toLeaf: converts a schemaError into a leaf value that can be written into the error tree.\n * - Default: write the raw schemaError as-is.\n */\n readonly toLeaf?: (schemaError: SchemaError) => unknown\n}\n\nexport type SchemaErrorWrite = {\n /**\n * fieldPath: the field path without the `errors.` prefix (domain-facing).\n */\n readonly fieldPath: FieldPath\n /**\n * errorPath: the actual path written into state (with the `errors.` prefix).\n */\n readonly errorPath: string\n readonly error: unknown\n}\n\nexport const toSchemaErrorWrites = (\n schemaError: SchemaError,\n options?: SchemaErrorMappingOptions,\n): ReadonlyArray<SchemaErrorWrite> => {\n const fieldPaths = mapSchemaErrorToFieldPaths(schemaError, options)\n if (fieldPaths.length === 0) return []\n\n const toLeaf = options?.toLeaf ?? ((e: SchemaError) => e)\n const leaf = toLeaf(schemaError)\n\n return fieldPaths.map((fieldPath) => ({\n fieldPath,\n errorPath: toSchemaErrorsPath(fieldPath),\n error: leaf,\n }))\n}\n\n/**\n * toSchemaErrorTree:\n * - Produces a subtree that can be written directly to `errors.$schema` (without the `errors.$schema` prefix).\n */\nexport const toSchemaErrorTree = (schemaError: SchemaError, options?: SchemaErrorMappingOptions): unknown => {\n const writes = toSchemaErrorWrites(schemaError, options)\n if (writes.length === 0) return {}\n\n let next: unknown = {}\n for (const w of writes) {\n const prefix = 'errors.$schema.'\n const relative = w.errorPath.startsWith(prefix) ? w.errorPath.slice(prefix.length) : w.errorPath\n if (!relative) continue\n next = setAtPath(next, relative, w.error)\n }\n return next\n}\n\n/**\n * applySchemaErrorToState:\n * - Maps a SchemaError and writes it back into state.errors.$schema.*.\n * - Does not clear stale errors that are no longer matched (the caller should clear them within a more explicit scope).\n */\nexport const applySchemaErrorToState = (\n state: unknown,\n schemaError: SchemaError,\n options?: SchemaErrorMappingOptions,\n): unknown => {\n const writes = toSchemaErrorWrites(schemaError, options)\n if (writes.length === 0) return state\n\n let next: unknown = state\n for (const w of writes) {\n next = setAtPath(next, w.errorPath, w.error)\n }\n return next\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 * as Logix from '@logixjs/core'\nimport * as Validators from './internal/validators/index.js'\nimport type { CanonicalPath } from './internal/form/types.js'\n\nexport type AutoValidateOn = 'onChange' | 'onBlur'\n\nexport type RuleValidateOn = ReadonlyArray<AutoValidateOn>\n\nexport type RuleFn<Input, Ctx = unknown> = (input: Input, ctx: Ctx) => unknown | undefined\n\ntype RuleDeps<Input> = Input extends object\n ? CanonicalPath<Input> extends never\n ? string\n : CanonicalPath<Input>\n : string\n\nexport type Rule<Input, Ctx = unknown> = Logix.StateTrait.CheckRule<Input, Ctx> & {\n /**\n * validateOn:\n * - Only affects the auto-validation phase (onChange/onBlur); submit/manual always runs.\n * - If an empty array, auto-validation is disabled (only submit/manual runs).\n */\n readonly validateOn?: RuleValidateOn\n}\n\nexport type RuleSet<Input, Ctx = unknown> = Readonly<Record<string, Rule<Input, Ctx>>>\n\nexport type RuleEntry<Input, Ctx = unknown> =\n | RuleFn<Input, Ctx>\n | (Omit<Rule<Input, Ctx>, 'deps'> & {\n readonly deps?: ReadonlyArray<RuleDeps<Input>>\n })\n\nexport type RuleGroup<Input, Ctx = unknown> = Readonly<{\n readonly deps?: ReadonlyArray<RuleDeps<Input>>\n readonly validateOn?: RuleValidateOn\n readonly validate: Readonly<Record<string, RuleEntry<Input, Ctx>>>\n}>\n\nexport type RuleConfig<Input, Ctx = unknown> = Readonly<{\n readonly deps?: ReadonlyArray<RuleDeps<Input>>\n readonly validateOn?: RuleValidateOn\n\n // RHF-like builtins (expanded at build time into equivalent pure functions)\n readonly required?: Validators.RequiredDecl\n readonly minLength?: Validators.MinLengthDecl\n readonly maxLength?: Validators.MaxLengthDecl\n readonly min?: Validators.MinDecl\n readonly max?: Validators.MaxDecl\n readonly pattern?: Validators.PatternDecl\n\n // RHF-like validate: a function or a named map of functions (RuleEntry form is also allowed to override deps/validateOn)\n readonly validate?: RuleFn<Input, Ctx> | Readonly<Record<string, RuleEntry<Input, Ctx>>>\n}>\n\nexport type RuleInput<Input, Ctx = unknown> = RuleFn<Input, Ctx> | RuleGroup<Input, Ctx> | RuleConfig<Input, Ctx>\n\nconst uniq = <T>(items: ReadonlyArray<T>): ReadonlyArray<T> => Array.from(new Set(items))\n\nconst normalizeValidateOn = (input: unknown): RuleValidateOn | undefined => {\n if (!Array.isArray(input)) return undefined\n const out: Array<AutoValidateOn> = []\n for (const x of input) {\n if (x === 'onChange' || x === 'onBlur') out.push(x)\n }\n return uniq(out)\n}\n\nconst normalizeDeps = (input: unknown): ReadonlyArray<string> | undefined => {\n if (!Array.isArray(input)) return undefined\n const out: Array<string> = []\n for (const x of input) {\n if (typeof x !== 'string') continue\n const v = x.trim()\n if (!v) continue\n out.push(v)\n }\n return uniq(out)\n}\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === 'object' && value !== null && !Array.isArray(value)\n\n/**\n * make:\n * - The result must be directly attachable to `StateTrait.node({ check })`.\n * - Does not introduce an extra wrapper (e.g. `{ rules: ... }`).\n */\nexport const make = <Input, Ctx = unknown>(input: RuleInput<Input, Ctx>): RuleSet<Input, Ctx> => {\n if (typeof input === 'function') {\n return {\n default: {\n deps: [],\n validate: input,\n },\n }\n }\n\n if (!isPlainObject(input)) {\n return {}\n }\n\n const baseDeps = normalizeDeps((input as any).deps) ?? []\n const baseValidateOn = normalizeValidateOn((input as any).validateOn)\n\n const byName = new Map<string, Rule<Input, Ctx>>()\n\n const addRule = (name: string, raw: unknown): void => {\n const ruleName = typeof name === 'string' ? name.trim() : ''\n if (!ruleName) return\n if (byName.has(ruleName)) {\n throw new Error(`[Form.Rule.make] Duplicate rule name \"${ruleName}\"`)\n }\n\n if (typeof raw === 'function') {\n byName.set(ruleName, {\n deps: baseDeps,\n validate: raw as any,\n ...(baseValidateOn !== undefined ? { validateOn: baseValidateOn } : {}),\n })\n return\n }\n\n if (!raw || typeof raw !== 'object') return\n const entry = raw as any\n const deps = normalizeDeps(entry.deps) ?? baseDeps\n const validateOn = normalizeValidateOn(entry.validateOn) ?? baseValidateOn\n const validate = entry.validate\n if (typeof validate !== 'function') return\n\n byName.set(ruleName, {\n ...entry,\n deps,\n validate,\n ...(validateOn !== undefined ? { validateOn } : {}),\n })\n }\n\n // RHF-like builtins (if declared, it will be expanded into an equivalent pure function)\n const requiredDecl = (input as any).required as Validators.RequiredDecl | undefined\n if (requiredDecl !== undefined && requiredDecl !== false) {\n const validate = Validators.required(requiredDecl)\n addRule('required', (value: Input) => validate(value))\n }\n\n const minLengthDecl = (input as any).minLength as Validators.MinLengthDecl | undefined\n if (minLengthDecl !== undefined) {\n const validate = Validators.minLength(minLengthDecl)\n addRule('minLength', (value: Input) => validate(value))\n }\n\n const maxLengthDecl = (input as any).maxLength as Validators.MaxLengthDecl | undefined\n if (maxLengthDecl !== undefined) {\n const validate = Validators.maxLength(maxLengthDecl)\n addRule('maxLength', (value: Input) => validate(value))\n }\n\n const minDecl = (input as any).min as Validators.MinDecl | undefined\n if (minDecl !== undefined) {\n const validate = Validators.min(minDecl)\n addRule('min', (value: Input) => validate(value))\n }\n\n const maxDecl = (input as any).max as Validators.MaxDecl | undefined\n if (maxDecl !== undefined) {\n const validate = Validators.max(maxDecl)\n addRule('max', (value: Input) => validate(value))\n }\n\n const patternDecl = (input as any).pattern as Validators.PatternDecl | undefined\n if (patternDecl !== undefined) {\n const validate = Validators.pattern(patternDecl)\n addRule('pattern', (value: Input) => validate(value))\n }\n\n // validate: supports both legacy RuleGroup `{ validate: Record<string, RuleEntry> }`\n // and RHF-style `validate: fn | Record<string, fn>`.\n const validateBlock = (input as any).validate as unknown\n if (typeof validateBlock === 'function') {\n addRule('validate', validateBlock)\n } else if (isPlainObject(validateBlock)) {\n const names = Object.keys(validateBlock).sort((a, b) => a.localeCompare(b))\n for (const name of names) {\n addRule(name, (validateBlock as any)[name])\n }\n }\n\n const out: Record<string, Rule<Input, Ctx>> = {}\n const names = Array.from(byName.keys()).sort((a, b) => a.localeCompare(b))\n for (const name of names) {\n out[name] = byName.get(name)!\n }\n return out\n}\n\nexport const merge = <Input, Ctx = unknown>(...rules: ReadonlyArray<RuleSet<Input, Ctx>>): RuleSet<Input, Ctx> => {\n const byName = new Map<string, Rule<Input, Ctx>>()\n const duplicates = new Set<string>()\n\n for (const ruleSet of rules) {\n for (const name of Object.keys(ruleSet)) {\n if (byName.has(name)) duplicates.add(name)\n else byName.set(name, ruleSet[name]!)\n }\n }\n\n if (duplicates.size > 0) {\n const list = Array.from(duplicates)\n .sort((a, b) => a.localeCompare(b))\n .join(', ')\n throw new Error(`[Form.Rule.merge] Duplicate rule name(s): ${list}`)\n }\n\n const merged: Record<string, Rule<Input, Ctx>> = {}\n const names = Array.from(byName.keys()).sort((a, b) => a.localeCompare(b))\n for (const name of names) {\n merged[name] = byName.get(name)!\n }\n\n return merged\n}\n\nexport type ErrorTarget = '$value' | '$self'\n\nexport type ListIdentityPolicy =\n | Readonly<{ readonly mode: 'trackBy'; readonly trackBy: string }>\n | Readonly<{ readonly mode: 'store' }>\n | Readonly<{ readonly mode: 'index' }>\n\nexport type FieldDecl<Input, Ctx = unknown> = Readonly<{\n readonly kind: 'field'\n readonly valuePath: string\n readonly rule: RuleInput<Input, Ctx>\n readonly errorTarget?: ErrorTarget\n}>\n\nexport type RootDecl<Input, Ctx = unknown> = Readonly<{\n readonly kind: 'root'\n readonly rule: RuleInput<Input, Ctx>\n}>\n\nexport type ListDecl<Item, Ctx = unknown> = Readonly<{\n readonly kind: 'list'\n readonly listPath: string\n readonly identity: ListIdentityPolicy\n readonly item?: RuleInput<Item, Ctx>\n readonly list?: RuleInput<ReadonlyArray<Item>, Ctx>\n}>\n\nexport type RulesDecl<TValues extends object = any> = FieldDecl<any> | RootDecl<TValues> | ListDecl<any>\n\nexport const field = <Input, Ctx = unknown>(\n valuePath: string,\n rule: RuleInput<Input, Ctx>,\n options?: { readonly errorTarget?: ErrorTarget },\n): FieldDecl<Input, Ctx> => ({\n kind: 'field',\n valuePath,\n rule,\n ...(options?.errorTarget !== undefined ? { errorTarget: options.errorTarget } : {}),\n})\n\nexport const root = <Input, Ctx = unknown>(rule: RuleInput<Input, Ctx>): RootDecl<Input, Ctx> => ({\n kind: 'root',\n rule,\n})\n\nexport const list = <Item, Ctx = unknown>(\n listPath: string,\n spec: {\n readonly identity: ListIdentityPolicy\n readonly item?: RuleInput<Item, Ctx>\n readonly list?: RuleInput<ReadonlyArray<Item>, Ctx>\n },\n): ListDecl<Item, Ctx> => ({\n kind: 'list',\n listPath,\n identity: spec.identity,\n ...(spec.item !== undefined ? { item: spec.item } : {}),\n ...(spec.list !== undefined ? { list: spec.list } : {}),\n})\n\nexport const fields = <Input, Ctx = unknown>(\n ...decls: ReadonlyArray<FieldDecl<Input, Ctx> | ReadonlyArray<FieldDecl<Input, Ctx>>>\n): Readonly<Record<string, RuleInput<Input, Ctx>>> => {\n const out: Record<string, RuleInput<Input, Ctx>> = {}\n const list: Array<FieldDecl<Input, Ctx>> = []\n\n const isDeclArray = (value: unknown): value is ReadonlyArray<FieldDecl<Input, Ctx>> => Array.isArray(value)\n\n for (const item of decls) {\n if (isDeclArray(item)) {\n list.push(...item)\n continue\n }\n list.push(item)\n }\n\n for (const decl of list) {\n const path = typeof decl?.valuePath === 'string' ? decl.valuePath.trim() : ''\n if (!path) continue\n if (path in out) {\n throw new Error(`[Form.Rule.fields] Duplicate valuePath \"${path}\"`)\n }\n out[path] = decl.rule\n }\n\n return out\n}\n\nexport {\n ERROR_VALUE_MAX_BYTES,\n assertErrorValueBudget,\n required,\n minLength,\n maxLength,\n min,\n max,\n pattern,\n} from './internal/validators/index.js'\n","import { ParseResult } from 'effect'\n\nexport const ERROR_VALUE_MAX_BYTES = 256\n\nconst textEncoder = new TextEncoder()\n\nconst jsonByteSize = (value: unknown): number => {\n const json = JSON.stringify(value)\n return textEncoder.encode(json).length\n}\n\nconst truncateToJsonByteBudget = (value: string, maxBytes: number): string => {\n if (jsonByteSize(value) <= maxBytes) return value\n\n let lo = 0\n let hi = value.length\n while (lo < hi) {\n const mid = Math.ceil((lo + hi) / 2)\n const slice = value.slice(0, mid)\n if (jsonByteSize(slice) <= maxBytes) lo = mid\n else hi = mid - 1\n }\n return value.slice(0, lo)\n}\n\nexport const assertErrorValueBudget = (value: unknown, label: string): unknown => {\n const bytes = jsonByteSize(value)\n if (bytes <= ERROR_VALUE_MAX_BYTES) return value\n throw new Error(`[Form.validators] ErrorValue for \"${label}\" must be JSON ≤${ERROR_VALUE_MAX_BYTES}B (got ${bytes}B)`)\n}\n\nconst errorValue = (label: string, value: unknown): unknown => assertErrorValueBudget(value, label)\n\nexport type RequiredDecl =\n | boolean\n | string\n | Readonly<{\n readonly message?: string\n readonly trim?: boolean\n }>\n\nexport const required = (decl: RequiredDecl): ((value: unknown) => unknown | undefined) => {\n const trim = typeof decl === 'object' && decl !== null ? Boolean((decl as any).trim) : true\n const message =\n typeof decl === 'string'\n ? decl\n : typeof decl === 'object' && decl !== null && typeof (decl as any).message === 'string'\n ? (decl as any).message\n : 'required'\n\n const err = errorValue('required', message)\n\n return (value: unknown) => {\n if (value === null || value === undefined) return err\n if (typeof value === 'string') {\n const v = trim ? value.trim() : value\n return v.length > 0 ? undefined : err\n }\n if (Array.isArray(value)) return value.length > 0 ? undefined : err\n if (typeof value === 'boolean') return value ? undefined : err\n return undefined\n }\n}\n\nexport type MinLengthDecl =\n | number\n | Readonly<{\n readonly min: number\n readonly message?: string\n }>\n\nexport const minLength = (decl: MinLengthDecl): ((value: unknown) => unknown | undefined) => {\n const min = typeof decl === 'number' ? decl : decl.min\n const message =\n typeof decl === 'object' && decl !== null && typeof decl.message === 'string' ? decl.message : 'minLength'\n const err = errorValue('minLength', message)\n\n return (value: unknown) => {\n if (value === null || value === undefined) return undefined\n if (typeof value === 'string') return value.length >= min ? undefined : err\n if (Array.isArray(value)) return value.length >= min ? undefined : err\n return undefined\n }\n}\n\nexport type MaxLengthDecl =\n | number\n | Readonly<{\n readonly max: number\n readonly message?: string\n }>\n\nexport const maxLength = (decl: MaxLengthDecl): ((value: unknown) => unknown | undefined) => {\n const max = typeof decl === 'number' ? decl : decl.max\n const message =\n typeof decl === 'object' && decl !== null && typeof decl.message === 'string' ? decl.message : 'maxLength'\n const err = errorValue('maxLength', message)\n\n return (value: unknown) => {\n if (value === null || value === undefined) return undefined\n if (typeof value === 'string') return value.length <= max ? undefined : err\n if (Array.isArray(value)) return value.length <= max ? undefined : err\n return undefined\n }\n}\n\nexport type MinDecl =\n | number\n | Readonly<{\n readonly min: number\n readonly message?: string\n }>\n\nexport const min = (decl: MinDecl): ((value: unknown) => unknown | undefined) => {\n const minValue = typeof decl === 'number' ? decl : decl.min\n const message = typeof decl === 'object' && decl !== null && typeof decl.message === 'string' ? decl.message : 'min'\n const err = errorValue('min', message)\n\n return (value: unknown) => {\n if (value === null || value === undefined) return undefined\n if (typeof value === 'number' && Number.isFinite(value)) return value >= minValue ? undefined : err\n return undefined\n }\n}\n\nexport type MaxDecl =\n | number\n | Readonly<{\n readonly max: number\n readonly message?: string\n }>\n\nexport const max = (decl: MaxDecl): ((value: unknown) => unknown | undefined) => {\n const maxValue = typeof decl === 'number' ? decl : decl.max\n const message = typeof decl === 'object' && decl !== null && typeof decl.message === 'string' ? decl.message : 'max'\n const err = errorValue('max', message)\n\n return (value: unknown) => {\n if (value === null || value === undefined) return undefined\n if (typeof value === 'number' && Number.isFinite(value)) return value <= maxValue ? undefined : err\n return undefined\n }\n}\n\nexport type PatternDecl =\n | RegExp\n | Readonly<{\n readonly re: RegExp\n readonly message?: string\n }>\n\nexport const pattern = (decl: PatternDecl): ((value: unknown) => unknown | undefined) => {\n const re = decl instanceof RegExp ? decl : decl.re\n const message =\n typeof decl === 'object' && decl !== null && typeof (decl as any).message === 'string'\n ? (decl as any).message\n : 'pattern'\n const err = errorValue('pattern', message)\n\n return (value: unknown) => {\n if (value === null || value === undefined) return undefined\n if (typeof value !== 'string') return undefined\n return re.test(value) ? undefined : err\n }\n}\n\nexport const schemaErrorMessage = (schemaError: unknown): string => {\n let message: string\n try {\n message = ParseResult.TreeFormatter.formatErrorSync(schemaError as any)\n } catch {\n message = 'schema invalid'\n }\n\n const truncated = truncateToJsonByteBudget(message, ERROR_VALUE_MAX_BYTES)\n return truncated.length > 0 ? truncated : 'schema invalid'\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","export type FormView = {\n readonly canSubmit: boolean\n readonly isSubmitting: boolean\n readonly isValid: boolean\n readonly isDirty: boolean\n readonly isPristine: boolean\n readonly submitCount: number\n}\n\ntype Snapshot = {\n readonly submitCount: number\n readonly isSubmitting: boolean\n readonly isDirty: boolean\n readonly errorCount: number\n}\n\nconst readSnapshot = (state: unknown): Snapshot => {\n const meta = state && typeof state === 'object' && !Array.isArray(state) ? (state as any).$form : undefined\n const safe = meta && typeof meta === 'object' && !Array.isArray(meta) ? (meta as any) : undefined\n\n const submitCount = typeof safe?.submitCount === 'number' && Number.isFinite(safe.submitCount) ? safe.submitCount : 0\n const isSubmitting = safe?.isSubmitting === true\n const isDirty = safe?.isDirty === true\n const errorCount = typeof safe?.errorCount === 'number' && Number.isFinite(safe.errorCount) ? safe.errorCount : 0\n\n return {\n submitCount,\n isSubmitting,\n isDirty,\n errorCount,\n }\n}\n\nexport const getFormView = (state: unknown, prev?: FormView): FormView => {\n const snap = readSnapshot(state)\n const isValid = snap.errorCount === 0\n const isPristine = !snap.isDirty\n const canSubmit = !snap.isSubmitting && isValid\n\n if (\n prev &&\n prev.submitCount === snap.submitCount &&\n prev.isSubmitting === snap.isSubmitting &&\n prev.isDirty === snap.isDirty &&\n prev.isValid === isValid\n ) {\n return prev\n }\n\n return {\n canSubmit,\n isSubmitting: snap.isSubmitting,\n isValid,\n isDirty: snap.isDirty,\n isPristine,\n submitCount: snap.submitCount,\n }\n}\n","export type ErrorPatch = unknown\n\nexport type FieldErrors = Readonly<Record<string, unknown>>\n\nexport const leaf = (message: unknown): unknown => message\n\n/**\n * item:\n * - Creates a row-level error object (can carry both field-level errors and a $item row-level error).\n */\nexport const item = (fieldErrors?: FieldErrors, meta?: { readonly item?: unknown }): ErrorPatch => ({\n ...(fieldErrors ?? {}),\n ...(meta?.item !== undefined ? { $item: meta.item } : {}),\n})\n\n/**\n * list:\n * - Creates a list-level error object (includes $list and an array of per-row errors).\n *\n * Notes:\n * - Each entry in `rows` can be undefined (meaning that row has no error).\n * - This structure is only a domain-level wrapper; the actual write-back path is decided by the Form/StateTrait\n * compiler layer.\n */\nexport const list = (rows: ReadonlyArray<unknown | undefined>, meta?: { readonly list?: unknown }): ErrorPatch => ({\n rows,\n ...(meta?.list !== undefined ? { $list: meta.list } : {}),\n})\n\nexport const root = (meta?: { readonly form?: unknown }): ErrorPatch =>\n meta?.form !== undefined ? { $form: meta.form } : {}\n","import * as Logix from '@logixjs/core'\n\nexport type FieldPath<S extends object> = Logix.StateTrait.StateFieldPath<S>\nexport type AtPath<S extends object, P extends FieldPath<S>> = Logix.StateTrait.StateAtPath<S, P>\n\nexport type TraitEntry<S extends object, P extends string = FieldPath<S>> = Logix.StateTrait.StateTraitEntry<S, P>\n\nexport type DerivedEntry<S extends object, P extends string = FieldPath<S>> = Extract<\n TraitEntry<S, P>,\n { readonly kind: 'computed' | 'link' | 'source' }\n>\n\nexport type DerivedState<TValues extends object> = TValues & {\n readonly ui: Readonly<Record<string, unknown>>\n}\n\nexport type DerivedSpec<TValues extends object> = Readonly<{\n [P in FieldPath<DerivedState<TValues>>]?: DerivedEntry<DerivedState<TValues>, P>\n}>\n\ntype DepsArgs<S extends object, Deps extends ReadonlyArray<FieldPath<S>>> = {\n readonly [K in keyof Deps]: AtPath<S, Deps[K]>\n}\n\nexport const computed = <\n S extends object,\n P extends FieldPath<S>,\n const Deps extends ReadonlyArray<FieldPath<S>>,\n>(input: {\n readonly deps: Deps\n readonly get: (...depsValues: DepsArgs<S, Deps>) => AtPath<S, P>\n readonly equals?: (prev: AtPath<S, P>, next: AtPath<S, P>) => boolean\n}): DerivedEntry<S, P> => Logix.StateTrait.computed(input as any) as any\n\nexport const source = <S extends object, P extends FieldPath<S>, const Deps extends ReadonlyArray<FieldPath<S>>>(input: {\n readonly resource: string\n readonly deps: Deps\n readonly key: (...depsValues: DepsArgs<S, Deps>) => unknown\n readonly triggers?: ReadonlyArray<'onMount' | 'onKeyChange' | 'manual'>\n readonly debounceMs?: number\n readonly concurrency?: 'switch' | 'exhaust-trailing'\n readonly meta?: Record<string, unknown>\n}): DerivedEntry<S, P> => Logix.StateTrait.source(input as any) as any\n\nexport const link = <S extends object, P extends FieldPath<S>>(meta: {\n readonly from: FieldPath<S>\n}): DerivedEntry<S, P> => Logix.StateTrait.link(meta as any) as any\n","import type { FieldPath, SchemaError, SchemaPathMappingOptions } from './internal/schema/SchemaPathMapping.js'\nimport { mapSchemaErrorToFieldPaths } from './internal/schema/SchemaPathMapping.js'\n\nexport type { FieldPath, SchemaError, SchemaPathMappingOptions }\nexport { mapSchemaErrorToFieldPaths }\n\nexport const SchemaPathMapping = {\n mapSchemaErrorToFieldPaths,\n} as const\n"],"mappings":"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","names":["list","make","Logix","import_effect","isStateTraitNode","isStateTraitList","isStateTraitEntry","out","item","list","validate","rules","next","delta","isNumericSegment","toPatternPath","pattern","leaf","list","Logix","isPlainObject","item","list","Logix","import_effect","isAuxRootPath","module","list","item","readSubmitCount","import_effect","min","max","normalizeValidateOn","isPlainObject","names","rules","list","item","initialMeta","make","assertCanonicalValuePath","assertValidListIdentity","rulesSpec","joinPath","rules","source","validateOn","item","list","node","traits","module","import_effect","item","node","leaf","field","Logix","Logix","list","list","root","Logix"]}
@@ -0,0 +1,12 @@
1
+ export { f as FormAction, j as FormController, F as FormErrors, i as FormExtendDef, k as FormHandleExt, h as FormMakeConfig, d as FormMeta, l as FormModule, g as FormShape, e as FormState, c as FormUiState, n as RuleDescriptor, o as RuleScope, R as RulesDsl, p as RulesManifest, a as RulesNode, b as RulesSpec, m as make, r as rules } from './impl-Ccdm5eDF.cjs';
2
+ export { FormFrom, ListSpec, NodeSpec, TraitsSpec, derived, fromValues as from, fromValues, list, node, traits } from './Form.cjs';
3
+ export { d as CanonicalListItem, c as CanonicalListPath, C as CanonicalPath, b as CanonicalValue, F as FieldPath, a as FieldValue, R as Rule } from './Rule-BOAiSVz9.cjs';
4
+ export { F as FormView } from './FormView-CAg9LVrf.cjs';
5
+ export { E as Error } from './Error-VvknI9Wj.cjs';
6
+ export { T as Trait, c as computed, l as link, s as source } from './Trait-Bu794ROY.cjs';
7
+ export { P as Path } from './Path-DOjMkAS6.cjs';
8
+ export { S as SchemaPathMapping } from './SchemaPathMapping-DJnExqM3.cjs';
9
+ export { S as SchemaErrorMapping } from './SchemaErrorMapping-DOrgLzii.cjs';
10
+ import '@logixjs/core';
11
+ import 'effect';
12
+ import './SchemaPathMapping-BUq2zm8W.cjs';
@@ -0,0 +1,12 @@
1
+ export { f as FormAction, j as FormController, F as FormErrors, i as FormExtendDef, k as FormHandleExt, h as FormMakeConfig, d as FormMeta, l as FormModule, g as FormShape, e as FormState, c as FormUiState, n as RuleDescriptor, o as RuleScope, R as RulesDsl, p as RulesManifest, a as RulesNode, b as RulesSpec, m as make, r as rules } from './impl-BfSlyM58.js';
2
+ export { FormFrom, ListSpec, NodeSpec, TraitsSpec, derived, fromValues as from, fromValues, list, node, traits } from './Form.js';
3
+ export { d as CanonicalListItem, c as CanonicalListPath, C as CanonicalPath, b as CanonicalValue, F as FieldPath, a as FieldValue, R as Rule } from './Rule-BOAiSVz9.js';
4
+ export { F as FormView } from './FormView-CAg9LVrf.js';
5
+ export { E as Error } from './Error-VvknI9Wj.js';
6
+ export { T as Trait, c as computed, l as link, s as source } from './Trait-Bu794ROY.js';
7
+ export { P as Path } from './Path-DOjMkAS6.js';
8
+ export { S as SchemaPathMapping } from './SchemaPathMapping-BCoUW-_q.js';
9
+ export { S as SchemaErrorMapping } from './SchemaErrorMapping-Cu5gl7-Z.js';
10
+ import '@logixjs/core';
11
+ import 'effect';
12
+ import './SchemaPathMapping-BUq2zm8W.js';