@os-design/form 1.0.13 → 1.0.15

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 (39) hide show
  1. package/dist/cjs/ErrorData.js.map +1 -1
  2. package/dist/cjs/ErrorObserverManager.js.map +1 -1
  3. package/dist/cjs/Form.js.map +1 -1
  4. package/dist/cjs/ValueData.js.map +1 -1
  5. package/dist/cjs/ValueObserverManager.js.map +1 -1
  6. package/dist/cjs/index.js +0 -2
  7. package/dist/cjs/index.js.map +1 -1
  8. package/dist/cjs/types.js.map +1 -1
  9. package/dist/cjs/useFormContext.js.map +1 -1
  10. package/dist/cjs/utils/path.js.map +1 -1
  11. package/dist/esm/ErrorData.js.map +1 -1
  12. package/dist/esm/ErrorObserverManager.js.map +1 -1
  13. package/dist/esm/Form.js.map +1 -1
  14. package/dist/esm/ValueData.js.map +1 -1
  15. package/dist/esm/ValueObserverManager.js.map +1 -1
  16. package/dist/esm/index.js +0 -2
  17. package/dist/esm/index.js.map +1 -1
  18. package/dist/esm/types.js.map +1 -1
  19. package/dist/esm/useFormContext.js.map +1 -1
  20. package/dist/esm/utils/path.js.map +1 -1
  21. package/dist/types/ErrorData.d.ts +2 -2
  22. package/dist/types/ErrorData.d.ts.map +1 -1
  23. package/dist/types/ErrorObserverManager.d.ts +2 -2
  24. package/dist/types/ErrorObserverManager.d.ts.map +1 -1
  25. package/dist/types/Form.d.ts +2 -2
  26. package/dist/types/Form.d.ts.map +1 -1
  27. package/dist/types/ValueData.d.ts +2 -2
  28. package/dist/types/ValueData.d.ts.map +1 -1
  29. package/dist/types/ValueObserverManager.d.ts +2 -2
  30. package/dist/types/ValueObserverManager.d.ts.map +1 -1
  31. package/dist/types/index.d.ts +14 -14
  32. package/dist/types/index.d.ts.map +1 -1
  33. package/dist/types/types.d.ts +5 -6
  34. package/dist/types/types.d.ts.map +1 -1
  35. package/dist/types/useFormContext.d.ts +3 -3
  36. package/dist/types/useFormContext.d.ts.map +1 -1
  37. package/dist/types/utils/path.d.ts +2 -3
  38. package/dist/types/utils/path.d.ts.map +1 -1
  39. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorData.js","names":["ErrorData","errors","name","value","callObservers","ErrorObserverManager"],"sources":["../../src/ErrorData.ts"],"sourcesContent":["import ErrorObserverManager from './ErrorObserverManager';\nimport { StringMap } from './types';\n\nclass ErrorData<\n TErrors extends StringMap<string | undefined>,\n TName extends keyof TErrors = keyof TErrors\n> extends ErrorObserverManager<TErrors> {\n private readonly errors: TErrors;\n\n public constructor(errors: TErrors) {\n super();\n this.errors = errors;\n }\n\n public get<T extends TName>(name: T): TErrors[T] {\n return this.errors[name];\n }\n\n public getAll(): TErrors {\n return this.errors;\n }\n\n public set<T extends TName>(name: T, value: TErrors[T]): void {\n this.errors[name] = value;\n this.callObservers(name, value);\n }\n}\n\nexport default ErrorData;\n"],"mappings":";;;;;;;AAAA;AAA0D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAGpDA,SAAS;EAAA;EAAA;EAMb,mBAAmBC,MAAe,EAAE;IAAA;IAAA;IAClC;IAAQ,MAHOA,MAAM;IAIrB,MAAKA,MAAM,GAAGA,MAAM;IAAC;EACvB;EAAC;IAAA;IAAA,OAED,aAA4BC,IAAO,EAAc;MAC/C,OAAO,IAAI,CAACD,MAAM,CAACC,IAAI,CAAC;IAC1B;EAAC;IAAA;IAAA,OAED,kBAAyB;MACvB,OAAO,IAAI,CAACD,MAAM;IACpB;EAAC;IAAA;IAAA,OAED,aAA4BC,IAAO,EAAEC,KAAiB,EAAQ;MAC5D,IAAI,CAACF,MAAM,CAACC,IAAI,CAAC,GAAGC,KAAK;MACzB,IAAI,CAACC,aAAa,CAACF,IAAI,EAAEC,KAAK,CAAC;IACjC;EAAC;EAAA;AAAA,EAnBOE,iCAAoB;AAAA,eAsBfL,SAAS;AAAA"}
1
+ {"version":3,"file":"ErrorData.js","names":["ErrorData","errors","name","value","callObservers","ErrorObserverManager"],"sources":["../../src/ErrorData.ts"],"sourcesContent":["import ErrorObserverManager from './ErrorObserverManager';\nimport { Errors } from './types';\n\nclass ErrorData<\n TErrors extends Errors,\n TName extends keyof TErrors = keyof TErrors\n> extends ErrorObserverManager<TErrors> {\n private readonly errors: TErrors;\n\n public constructor(errors: TErrors) {\n super();\n this.errors = errors;\n }\n\n public get<T extends TName>(name: T): TErrors[T] {\n return this.errors[name];\n }\n\n public getAll(): TErrors {\n return this.errors;\n }\n\n public set<T extends TName>(name: T, value: TErrors[T]): void {\n this.errors[name] = value;\n this.callObservers(name, value);\n }\n}\n\nexport default ErrorData;\n"],"mappings":";;;;;;;AAAA;AAA0D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAGpDA,SAAS;EAAA;EAAA;EAMb,mBAAmBC,MAAe,EAAE;IAAA;IAAA;IAClC;IAAQ,MAHOA,MAAM;IAIrB,MAAKA,MAAM,GAAGA,MAAM;IAAC;EACvB;EAAC;IAAA;IAAA,OAED,aAA4BC,IAAO,EAAc;MAC/C,OAAO,IAAI,CAACD,MAAM,CAACC,IAAI,CAAC;IAC1B;EAAC;IAAA;IAAA,OAED,kBAAyB;MACvB,OAAO,IAAI,CAACD,MAAM;IACpB;EAAC;IAAA;IAAA,OAED,aAA4BC,IAAO,EAAEC,KAAiB,EAAQ;MAC5D,IAAI,CAACF,MAAM,CAACC,IAAI,CAAC,GAAGC,KAAK;MACzB,IAAI,CAACC,aAAa,CAACF,IAAI,EAAEC,KAAK,CAAC;IACjC;EAAC;EAAA;AAAA,EAnBOE,iCAAoB;AAAA,eAsBfL,SAAS;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorObserverManager.js","names":["ErrorObserverManager","observers","name","observer","getObservers","push","unsubscribe","deleteFromArray","value","callBroadcastObservers","forEach","BroadcastObserverManager"],"sources":["../../src/ErrorObserverManager.ts"],"sourcesContent":["import BroadcastObserverManager from './BroadcastObserverManager';\nimport { Observer, StringMap, Subscription } from './types';\nimport deleteFromArray from './utils/deleteFromArray';\n\nexport type ErrorObserver = Observer<string | undefined>;\n\nclass ErrorObserverManager<\n TErrors extends StringMap<string | undefined>,\n TName extends keyof TErrors = keyof TErrors\n> extends BroadcastObserverManager<TName, string | undefined> {\n private readonly observers: {\n [K in TName]?: ErrorObserver[];\n };\n\n public constructor() {\n super();\n this.observers = {};\n }\n\n private getObservers<T extends TName>(name: T): ErrorObserver[] {\n if (!this.observers[name]) this.observers[name] = [];\n return this.observers[name] as ErrorObserver[];\n }\n\n public subscribe<T extends TName>(\n name: T,\n observer: ErrorObserver\n ): Subscription {\n const observers = this.getObservers(name);\n observers.push(observer);\n return { unsubscribe: () => deleteFromArray(observers, observer) };\n }\n\n protected callObservers<T extends TName>(name: T, value: string | undefined) {\n this.callBroadcastObservers(name, value);\n this.getObservers(name).forEach((observer) => observer(value));\n }\n}\n\nexport default ErrorObserverManager;\n"],"mappings":";;;;;;;AAAA;AAEA;AAAsD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAIhDA,oBAAoB;EAAA;EAAA;EAQxB,gCAAqB;IAAA;IAAA;IACnB;IAAQ,MALOC,SAAS;IAMxB,MAAKA,SAAS,GAAG,CAAC,CAAC;IAAC;EACtB;EAAC;IAAA;IAAA,OAED,sBAAsCC,IAAO,EAAmB;MAC9D,IAAI,CAAC,IAAI,CAACD,SAAS,CAACC,IAAI,CAAC,EAAE,IAAI,CAACD,SAAS,CAACC,IAAI,CAAC,GAAG,EAAE;MACpD,OAAO,IAAI,CAACD,SAAS,CAACC,IAAI,CAAC;IAC7B;EAAC;IAAA;IAAA,OAED,mBACEA,IAAO,EACPC,QAAuB,EACT;MACd,IAAMF,SAAS,GAAG,IAAI,CAACG,YAAY,CAACF,IAAI,CAAC;MACzCD,SAAS,CAACI,IAAI,CAACF,QAAQ,CAAC;MACxB,OAAO;QAAEG,WAAW,EAAE;UAAA,OAAM,IAAAC,2BAAe,EAACN,SAAS,EAAEE,QAAQ,CAAC;QAAA;MAAC,CAAC;IACpE;EAAC;IAAA;IAAA,OAED,uBAAyCD,IAAO,EAAEM,KAAyB,EAAE;MAC3E,IAAI,CAACC,sBAAsB,CAACP,IAAI,EAAEM,KAAK,CAAC;MACxC,IAAI,CAACJ,YAAY,CAACF,IAAI,CAAC,CAACQ,OAAO,CAAC,UAACP,QAAQ;QAAA,OAAKA,QAAQ,CAACK,KAAK,CAAC;MAAA,EAAC;IAChE;EAAC;EAAA;AAAA,EA3BOG,oCAAwB;AAAA,eA8BnBX,oBAAoB;AAAA"}
1
+ {"version":3,"file":"ErrorObserverManager.js","names":["ErrorObserverManager","observers","name","observer","getObservers","push","unsubscribe","deleteFromArray","value","callBroadcastObservers","forEach","BroadcastObserverManager"],"sources":["../../src/ErrorObserverManager.ts"],"sourcesContent":["import BroadcastObserverManager from './BroadcastObserverManager';\nimport { Errors, Observer, Subscription } from './types';\nimport deleteFromArray from './utils/deleteFromArray';\n\nexport type ErrorObserver = Observer<string | undefined>;\n\nclass ErrorObserverManager<\n TErrors extends Errors,\n TName extends keyof TErrors = keyof TErrors\n> extends BroadcastObserverManager<TName, string | undefined> {\n private readonly observers: {\n [K in TName]?: ErrorObserver[];\n };\n\n public constructor() {\n super();\n this.observers = {};\n }\n\n private getObservers<T extends TName>(name: T): ErrorObserver[] {\n if (!this.observers[name]) this.observers[name] = [];\n return this.observers[name] as ErrorObserver[];\n }\n\n public subscribe<T extends TName>(\n name: T,\n observer: ErrorObserver\n ): Subscription {\n const observers = this.getObservers(name);\n observers.push(observer);\n return { unsubscribe: () => deleteFromArray(observers, observer) };\n }\n\n protected callObservers<T extends TName>(name: T, value: string | undefined) {\n this.callBroadcastObservers(name, value);\n this.getObservers(name).forEach((observer) => observer(value));\n }\n}\n\nexport default ErrorObserverManager;\n"],"mappings":";;;;;;;AAAA;AAEA;AAAsD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAIhDA,oBAAoB;EAAA;EAAA;EAQxB,gCAAqB;IAAA;IAAA;IACnB;IAAQ,MALOC,SAAS;IAMxB,MAAKA,SAAS,GAAG,CAAC,CAAC;IAAC;EACtB;EAAC;IAAA;IAAA,OAED,sBAAsCC,IAAO,EAAmB;MAC9D,IAAI,CAAC,IAAI,CAACD,SAAS,CAACC,IAAI,CAAC,EAAE,IAAI,CAACD,SAAS,CAACC,IAAI,CAAC,GAAG,EAAE;MACpD,OAAO,IAAI,CAACD,SAAS,CAACC,IAAI,CAAC;IAC7B;EAAC;IAAA;IAAA,OAED,mBACEA,IAAO,EACPC,QAAuB,EACT;MACd,IAAMF,SAAS,GAAG,IAAI,CAACG,YAAY,CAACF,IAAI,CAAC;MACzCD,SAAS,CAACI,IAAI,CAACF,QAAQ,CAAC;MACxB,OAAO;QAAEG,WAAW,EAAE;UAAA,OAAM,IAAAC,2BAAe,EAACN,SAAS,EAAEE,QAAQ,CAAC;QAAA;MAAC,CAAC;IACpE;EAAC;IAAA;IAAA,OAED,uBAAyCD,IAAO,EAAEM,KAAyB,EAAE;MAC3E,IAAI,CAACC,sBAAsB,CAACP,IAAI,EAAEM,KAAK,CAAC;MACxC,IAAI,CAACJ,YAAY,CAACF,IAAI,CAAC,CAACQ,OAAO,CAAC,UAACP,QAAQ;QAAA,OAAKA,QAAQ,CAACK,KAAK,CAAC;MAAA,EAAC;IAChE;EAAC;EAAA;AAAA,EA3BOG,oCAAwB;AAAA,eA8BnBX,oBAAoB;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","names":["Form","initValues","values","errors","ValueData","clone","ErrorData","Object","keys","getAll","forEach","name","set","undefined"],"sources":["../../src/Form.ts"],"sourcesContent":["import ErrorData from './ErrorData';\nimport { Errors, Path, StringMap } from './types';\nimport clone from './utils/clone';\nimport ValueData from './ValueData';\n\nclass Form<\n TValues extends StringMap = StringMap,\n TErrors extends Errors<TValues> = Errors<TValues>\n> {\n public initValues: TValues;\n\n public readonly values: ValueData<TValues>;\n\n public readonly errors: ErrorData<TErrors>;\n\n public constructor(initValues: TValues) {\n this.initValues = initValues;\n this.values = new ValueData(clone(initValues));\n this.errors = new ErrorData({} as TErrors);\n }\n\n public reset() {\n // Reset values\n Object.keys(this.values.getAll()).forEach((name) => {\n this.values.set(name as Path<TValues>, clone(this.initValues[name]));\n });\n\n // Reset errors\n Object.keys(this.errors.getAll()).forEach((name) => {\n this.errors.set(\n name as keyof TErrors,\n undefined as TErrors[keyof TErrors]\n );\n });\n }\n}\n\nexport default Form;\n"],"mappings":";;;;;;AAAA;AAEA;AACA;AAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAE9BA,IAAI;EAUR,cAAmBC,UAAmB,EAAE;IAAA;IAAA,KANjCA,UAAU;IAAA,KAEDC,MAAM;IAAA,KAENC,MAAM;IAGpB,IAAI,CAACF,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACC,MAAM,GAAG,IAAIE,qBAAS,CAAC,IAAAC,iBAAK,EAACJ,UAAU,CAAC,CAAC;IAC9C,IAAI,CAACE,MAAM,GAAG,IAAIG,qBAAS,CAAC,CAAC,CAAC,CAAY;EAC5C;EAAC;IAAA;IAAA,OAED,iBAAe;MAAA;MACb;MACAC,MAAM,CAACC,IAAI,CAAC,IAAI,CAACN,MAAM,CAACO,MAAM,EAAE,CAAC,CAACC,OAAO,CAAC,UAACC,IAAI,EAAK;QAClD,KAAI,CAACT,MAAM,CAACU,GAAG,CAACD,IAAI,EAAmB,IAAAN,iBAAK,EAAC,KAAI,CAACJ,UAAU,CAACU,IAAI,CAAC,CAAC,CAAC;MACtE,CAAC,CAAC;;MAEF;MACAJ,MAAM,CAACC,IAAI,CAAC,IAAI,CAACL,MAAM,CAACM,MAAM,EAAE,CAAC,CAACC,OAAO,CAAC,UAACC,IAAI,EAAK;QAClD,KAAI,CAACR,MAAM,CAACS,GAAG,CACbD,IAAI,EACJE,SAAS,CACV;MACH,CAAC,CAAC;IACJ;EAAC;EAAA;AAAA;AAAA,eAGYb,IAAI;AAAA"}
1
+ {"version":3,"file":"Form.js","names":["Form","initValues","values","errors","ValueData","clone","ErrorData","Object","keys","getAll","forEach","name","set","undefined"],"sources":["../../src/Form.ts"],"sourcesContent":["import ErrorData from './ErrorData';\nimport { Errors, Path, Values } from './types';\nimport clone from './utils/clone';\nimport ValueData from './ValueData';\n\nclass Form<\n TValues extends Values = Values,\n TErrors extends Errors<TValues> = Errors<TValues>\n> {\n public initValues: TValues;\n\n public readonly values: ValueData<TValues>;\n\n public readonly errors: ErrorData<TErrors>;\n\n public constructor(initValues: TValues) {\n this.initValues = initValues;\n this.values = new ValueData(clone(initValues));\n this.errors = new ErrorData({} as TErrors);\n }\n\n public reset() {\n // Reset values\n Object.keys(this.values.getAll()).forEach((name) => {\n this.values.set(name as Path<TValues>, clone(this.initValues[name]));\n });\n\n // Reset errors\n Object.keys(this.errors.getAll()).forEach((name) => {\n this.errors.set(\n name as keyof TErrors,\n undefined as TErrors[keyof TErrors]\n );\n });\n }\n}\n\nexport default Form;\n"],"mappings":";;;;;;AAAA;AAEA;AACA;AAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAE9BA,IAAI;EAUR,cAAmBC,UAAmB,EAAE;IAAA;IAAA,KANjCA,UAAU;IAAA,KAEDC,MAAM;IAAA,KAENC,MAAM;IAGpB,IAAI,CAACF,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACC,MAAM,GAAG,IAAIE,qBAAS,CAAC,IAAAC,iBAAK,EAACJ,UAAU,CAAC,CAAC;IAC9C,IAAI,CAACE,MAAM,GAAG,IAAIG,qBAAS,CAAC,CAAC,CAAC,CAAY;EAC5C;EAAC;IAAA;IAAA,OAED,iBAAe;MAAA;MACb;MACAC,MAAM,CAACC,IAAI,CAAC,IAAI,CAACN,MAAM,CAACO,MAAM,EAAE,CAAC,CAACC,OAAO,CAAC,UAACC,IAAI,EAAK;QAClD,KAAI,CAACT,MAAM,CAACU,GAAG,CAACD,IAAI,EAAmB,IAAAN,iBAAK,EAAC,KAAI,CAACJ,UAAU,CAACU,IAAI,CAAC,CAAC,CAAC;MACtE,CAAC,CAAC;;MAEF;MACAJ,MAAM,CAACC,IAAI,CAAC,IAAI,CAACL,MAAM,CAACM,MAAM,EAAE,CAAC,CAACC,OAAO,CAAC,UAACC,IAAI,EAAK;QAClD,KAAI,CAACR,MAAM,CAACS,GAAG,CACbD,IAAI,EACJE,SAAS,CACV;MACH,CAAC,CAAC;IACJ;EAAC;EAAA;AAAA;AAAA,eAGYb,IAAI;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValueData.js","names":["ValueData","values","name","get","value","ok","set","callObservers","ValueObserverManager"],"sources":["../../src/ValueData.ts"],"sourcesContent":["import { PathReturn, Path, StringMap } from './types';\nimport { get, set } from './utils/path';\nimport ValueObserverManager from './ValueObserverManager';\n\nclass ValueData<\n TValues extends StringMap,\n TName extends Path<TValues> = Path<TValues>\n> extends ValueObserverManager<TValues> {\n private readonly values: TValues;\n\n public constructor(values: TValues) {\n super();\n this.values = values;\n }\n\n public get<T extends TName>(name: T): PathReturn<TValues, T> {\n return get(this.values, name);\n }\n\n public getAll(): TValues {\n return this.values;\n }\n\n public set<T extends TName>(name: T, value: PathReturn<TValues, T>): void {\n const ok = set(this.values, name, value);\n if (ok) this.callObservers(name, this.values);\n }\n}\n\nexport default ValueData;\n"],"mappings":";;;;;;;AACA;AACA;AAA0D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAEpDA,SAAS;EAAA;EAAA;EAMb,mBAAmBC,MAAe,EAAE;IAAA;IAAA;IAClC;IAAQ,MAHOA,MAAM;IAIrB,MAAKA,MAAM,GAAGA,MAAM;IAAC;EACvB;EAAC;IAAA;IAAA,OAED,aAA4BC,IAAO,EAA0B;MAC3D,OAAO,IAAAC,SAAG,EAAC,IAAI,CAACF,MAAM,EAAEC,IAAI,CAAC;IAC/B;EAAC;IAAA;IAAA,OAED,kBAAyB;MACvB,OAAO,IAAI,CAACD,MAAM;IACpB;EAAC;IAAA;IAAA,OAED,aAA4BC,IAAO,EAAEE,KAA6B,EAAQ;MACxE,IAAMC,EAAE,GAAG,IAAAC,SAAG,EAAC,IAAI,CAACL,MAAM,EAAEC,IAAI,EAAEE,KAAK,CAAC;MACxC,IAAIC,EAAE,EAAE,IAAI,CAACE,aAAa,CAACL,IAAI,EAAE,IAAI,CAACD,MAAM,CAAC;IAC/C;EAAC;EAAA;AAAA,EAnBOO,iCAAoB;AAAA,eAsBfR,SAAS;AAAA"}
1
+ {"version":3,"file":"ValueData.js","names":["ValueData","values","name","get","value","ok","set","callObservers","ValueObserverManager"],"sources":["../../src/ValueData.ts"],"sourcesContent":["import { PathReturn, Path, Values } from './types';\nimport { get, set } from './utils/path';\nimport ValueObserverManager from './ValueObserverManager';\n\nclass ValueData<\n TValues extends Values,\n TName extends Path<TValues> = Path<TValues>\n> extends ValueObserverManager<TValues> {\n private readonly values: TValues;\n\n public constructor(values: TValues) {\n super();\n this.values = values;\n }\n\n public get<T extends TName>(name: T): PathReturn<TValues, T> {\n return get(this.values, name);\n }\n\n public getAll(): TValues {\n return this.values;\n }\n\n public set<T extends TName>(name: T, value: PathReturn<TValues, T>): void {\n const ok = set(this.values, name, value);\n if (ok) this.callObservers(name, this.values);\n }\n}\n\nexport default ValueData;\n"],"mappings":";;;;;;;AACA;AACA;AAA0D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAEpDA,SAAS;EAAA;EAAA;EAMb,mBAAmBC,MAAe,EAAE;IAAA;IAAA;IAClC;IAAQ,MAHOA,MAAM;IAIrB,MAAKA,MAAM,GAAGA,MAAM;IAAC;EACvB;EAAC;IAAA;IAAA,OAED,aAA4BC,IAAO,EAA0B;MAC3D,OAAO,IAAAC,SAAG,EAAC,IAAI,CAACF,MAAM,EAAEC,IAAI,CAAC;IAC/B;EAAC;IAAA;IAAA,OAED,kBAAyB;MACvB,OAAO,IAAI,CAACD,MAAM;IACpB;EAAC;IAAA;IAAA,OAED,aAA4BC,IAAO,EAAEE,KAA6B,EAAQ;MACxE,IAAMC,EAAE,GAAG,IAAAC,SAAG,EAAC,IAAI,CAACL,MAAM,EAAEC,IAAI,EAAEE,KAAK,CAAC;MACxC,IAAIC,EAAE,EAAE,IAAI,CAACE,aAAa,CAACL,IAAI,EAAE,IAAI,CAACD,MAAM,CAAC;IAC/C;EAAC;EAAA;AAAA,EAnBOO,iCAAoB;AAAA,eAsBfR,SAAS;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValueObserverManager.js","names":["split","path","ValueObserverManager","root","Node","keys","cur","forEach","key","getNode","createNode","name","observer","node","findNode","addObserver","unsubscribe","deleteObserver","observers","length","parent","deleteNode","data","callBroadcastObservers","get","callNodeObservers","curNode","curData","i","isObjectOrArray","callChildObservers","Object","entries","nodes","value","BroadcastObserverManager"],"sources":["../../src/ValueObserverManager.ts"],"sourcesContent":["import BroadcastObserverManager from './BroadcastObserverManager';\nimport Node from './Node';\nimport { Observer, PathReturn, Path, StringMap, Subscription } from './types';\nimport { get, isObjectOrArray } from './utils/path';\n\nconst split = (path: string) => path.split('.');\n\nclass ValueObserverManager<\n TValues extends StringMap,\n TName extends Path<TValues> = Path<TValues>\n> extends BroadcastObserverManager<TName, TValues[TName]> {\n private readonly root: Node;\n\n public constructor() {\n super();\n this.root = new Node();\n }\n\n private findNode(path: string) {\n const keys = split(path);\n let cur = this.root;\n keys.forEach((key) => {\n cur = cur.getNode(key) || cur.createNode(key);\n });\n return cur;\n }\n\n public subscribe<T extends TName>(\n name: T,\n observer: Observer<PathReturn<TValues, T>>\n ): Subscription {\n const node = this.findNode(name);\n node.addObserver(observer);\n\n return {\n unsubscribe: () => {\n node.deleteObserver(observer);\n if (node.observers.length === 0) {\n node.parent?.deleteNode(node.name);\n }\n },\n };\n }\n\n protected callObservers<T extends TName>(name: T, data: TValues): void {\n this.callBroadcastObservers(name, get(data, name));\n this.callNodeObservers(name, data);\n }\n\n private callNodeObservers<T extends TName>(name: T, data: TValues): void {\n const keys = split(name);\n let curNode = this.root;\n let curData = data;\n\n // Call the observers for the root node\n curNode.observers.forEach((observer) => observer(curData));\n\n // Call observers on each node from the root to the specified one\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const node = curNode.getNode(key);\n if (!node || !isObjectOrArray(curData)) return;\n curNode = node;\n curData = curData[key];\n // eslint-disable-next-line @typescript-eslint/no-loop-func\n curNode.observers.forEach((observer) => observer(curData));\n }\n\n // Call observers of all child nodes started from the specified one\n this.callChildObservers(curNode, curData);\n }\n\n private callChildObservers(parent: Node, data: TValues): void {\n if (!isObjectOrArray(data)) return;\n Object.entries(parent.nodes).forEach(([name, node]) => {\n const value = data[name];\n node.observers.forEach((observer) => observer(value));\n this.callChildObservers(node, value);\n });\n }\n}\n\nexport default ValueObserverManager;\n"],"mappings":";;;;;;;AAAA;AACA;AAEA;AAAoD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEpD,IAAMA,KAAK,GAAG,SAARA,KAAK,CAAIC,IAAY;EAAA,OAAKA,IAAI,CAACD,KAAK,CAAC,GAAG,CAAC;AAAA;AAAC,IAE1CE,oBAAoB;EAAA;EAAA;EAMxB,gCAAqB;IAAA;IAAA;IACnB;IAAQ,MAHOC,IAAI;IAInB,MAAKA,IAAI,GAAG,IAAIC,gBAAI,EAAE;IAAC;EACzB;EAAC;IAAA;IAAA,OAED,kBAAiBH,IAAY,EAAE;MAC7B,IAAMI,IAAI,GAAGL,KAAK,CAACC,IAAI,CAAC;MACxB,IAAIK,GAAG,GAAG,IAAI,CAACH,IAAI;MACnBE,IAAI,CAACE,OAAO,CAAC,UAACC,GAAG,EAAK;QACpBF,GAAG,GAAGA,GAAG,CAACG,OAAO,CAACD,GAAG,CAAC,IAAIF,GAAG,CAACI,UAAU,CAACF,GAAG,CAAC;MAC/C,CAAC,CAAC;MACF,OAAOF,GAAG;IACZ;EAAC;IAAA;IAAA,OAED,mBACEK,IAAO,EACPC,QAA0C,EAC5B;MACd,IAAMC,IAAI,GAAG,IAAI,CAACC,QAAQ,CAACH,IAAI,CAAC;MAChCE,IAAI,CAACE,WAAW,CAACH,QAAQ,CAAC;MAE1B,OAAO;QACLI,WAAW,EAAE,uBAAM;UACjBH,IAAI,CAACI,cAAc,CAACL,QAAQ,CAAC;UAC7B,IAAIC,IAAI,CAACK,SAAS,CAACC,MAAM,KAAK,CAAC,EAAE;YAAA;YAC/B,gBAAAN,IAAI,CAACO,MAAM,iDAAX,aAAaC,UAAU,CAACR,IAAI,CAACF,IAAI,CAAC;UACpC;QACF;MACF,CAAC;IACH;EAAC;IAAA;IAAA,OAED,uBAAyCA,IAAO,EAAEW,IAAa,EAAQ;MACrE,IAAI,CAACC,sBAAsB,CAACZ,IAAI,EAAE,IAAAa,SAAG,EAACF,IAAI,EAAEX,IAAI,CAAC,CAAC;MAClD,IAAI,CAACc,iBAAiB,CAACd,IAAI,EAAEW,IAAI,CAAC;IACpC;EAAC;IAAA;IAAA,OAED,2BAA2CX,IAAO,EAAEW,IAAa,EAAQ;MACvE,IAAMjB,IAAI,GAAGL,KAAK,CAACW,IAAI,CAAC;MACxB,IAAIe,OAAO,GAAG,IAAI,CAACvB,IAAI;MACvB,IAAIwB,OAAO,GAAGL,IAAI;;MAElB;MACAI,OAAO,CAACR,SAAS,CAACX,OAAO,CAAC,UAACK,QAAQ;QAAA,OAAKA,QAAQ,CAACe,OAAO,CAAC;MAAA,EAAC;;MAE1D;MACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGvB,IAAI,CAACc,MAAM,EAAES,CAAC,IAAI,CAAC,EAAE;QACvC,IAAMpB,GAAG,GAAGH,IAAI,CAACuB,CAAC,CAAC;QACnB,IAAMf,IAAI,GAAGa,OAAO,CAACjB,OAAO,CAACD,GAAG,CAAC;QACjC,IAAI,CAACK,IAAI,IAAI,CAAC,IAAAgB,qBAAe,EAACF,OAAO,CAAC,EAAE;QACxCD,OAAO,GAAGb,IAAI;QACdc,OAAO,GAAGA,OAAO,CAACnB,GAAG,CAAC;QACtB;QACAkB,OAAO,CAACR,SAAS,CAACX,OAAO,CAAC,UAACK,QAAQ;UAAA,OAAKA,QAAQ,CAACe,OAAO,CAAC;QAAA,EAAC;MAC5D;;MAEA;MACA,IAAI,CAACG,kBAAkB,CAACJ,OAAO,EAAEC,OAAO,CAAC;IAC3C;EAAC;IAAA;IAAA,OAED,4BAA2BP,MAAY,EAAEE,IAAa,EAAQ;MAAA;MAC5D,IAAI,CAAC,IAAAO,qBAAe,EAACP,IAAI,CAAC,EAAE;MAC5BS,MAAM,CAACC,OAAO,CAACZ,MAAM,CAACa,KAAK,CAAC,CAAC1B,OAAO,CAAC,gBAAkB;QAAA;UAAhBI,IAAI;UAAEE,IAAI;QAC/C,IAAMqB,KAAK,GAAGZ,IAAI,CAACX,IAAI,CAAC;QACxBE,IAAI,CAACK,SAAS,CAACX,OAAO,CAAC,UAACK,QAAQ;UAAA,OAAKA,QAAQ,CAACsB,KAAK,CAAC;QAAA,EAAC;QACrD,MAAI,CAACJ,kBAAkB,CAACjB,IAAI,EAAEqB,KAAK,CAAC;MACtC,CAAC,CAAC;IACJ;EAAC;EAAA;AAAA,EArEOC,oCAAwB;AAAA,eAwEnBjC,oBAAoB;AAAA"}
1
+ {"version":3,"file":"ValueObserverManager.js","names":["split","path","ValueObserverManager","root","Node","keys","cur","forEach","key","getNode","createNode","name","observer","node","findNode","addObserver","unsubscribe","deleteObserver","observers","length","parent","deleteNode","data","callBroadcastObservers","get","callNodeObservers","curNode","curData","i","isObjectOrArray","callChildObservers","Object","entries","nodes","value","BroadcastObserverManager"],"sources":["../../src/ValueObserverManager.ts"],"sourcesContent":["import BroadcastObserverManager from './BroadcastObserverManager';\nimport Node from './Node';\nimport { Observer, PathReturn, Path, Values, Subscription } from './types';\nimport { get, isObjectOrArray } from './utils/path';\n\nconst split = (path: string) => path.split('.');\n\nclass ValueObserverManager<\n TValues extends Values,\n TName extends Path<TValues> = Path<TValues>\n> extends BroadcastObserverManager<TName, TValues[TName]> {\n private readonly root: Node;\n\n public constructor() {\n super();\n this.root = new Node();\n }\n\n private findNode(path: string) {\n const keys = split(path);\n let cur = this.root;\n keys.forEach((key) => {\n cur = cur.getNode(key) || cur.createNode(key);\n });\n return cur;\n }\n\n public subscribe<T extends TName>(\n name: T,\n observer: Observer<PathReturn<TValues, T>>\n ): Subscription {\n const node = this.findNode(name);\n node.addObserver(observer);\n\n return {\n unsubscribe: () => {\n node.deleteObserver(observer);\n if (node.observers.length === 0) {\n node.parent?.deleteNode(node.name);\n }\n },\n };\n }\n\n protected callObservers<T extends TName>(name: T, data: TValues): void {\n this.callBroadcastObservers(name, get(data, name));\n this.callNodeObservers(name, data);\n }\n\n private callNodeObservers<T extends TName>(name: T, data: TValues): void {\n const keys = split(name);\n let curNode = this.root;\n let curData = data;\n\n // Call the observers for the root node\n curNode.observers.forEach((observer) => observer(curData));\n\n // Call observers on each node from the root to the specified one\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const node = curNode.getNode(key);\n if (!node || !isObjectOrArray(curData)) return;\n curNode = node;\n curData = curData[key];\n // eslint-disable-next-line @typescript-eslint/no-loop-func\n curNode.observers.forEach((observer) => observer(curData));\n }\n\n // Call observers of all child nodes started from the specified one\n this.callChildObservers(curNode, curData);\n }\n\n private callChildObservers(parent: Node, data: TValues): void {\n if (!isObjectOrArray(data)) return;\n Object.entries(parent.nodes).forEach(([name, node]) => {\n const value = data[name];\n node.observers.forEach((observer) => observer(value));\n this.callChildObservers(node, value);\n });\n }\n}\n\nexport default ValueObserverManager;\n"],"mappings":"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"}
package/dist/cjs/index.js CHANGED
@@ -117,8 +117,6 @@ var createUseErrorHook = function createUseErrorHook(form) {
117
117
  };
118
118
  };
119
119
  var createUseTransformerHook = function createUseTransformerHook(form) {
120
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
121
- // @ts-ignore
122
120
  var useValue = createUseValueHook(form);
123
121
  return function (name, transformer) {
124
122
  var value = useValue(name);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["createUseValueHook","form","name","useState","values","get","value","setValue","useEffect","subscription","subscribe","v","unsubscribe","createUseErrorHook","errors","createUseTransformerHook","useValue","transformer","transformerRef","useRef","current","partialValues","Object","entries","forEach","n","set","createFieldComponent","useError","props","render","error","initValue","useMemo","initValues","modified","isEqual","reset","useCallback","onChange","undefined","renderRef","inputProps","fieldState","useModifiedFields","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","useFormResponse","Field","useTransformer","length","useForm","memoizedInitValues","useDeepEqualMemo","formRef","Form","useExistingForm","useFormContext","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { PathReturn, Path, StringMap } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends StringMap>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends StringMap>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<\n TValues extends StringMap,\n TName extends Path<TValues>\n> = (value: PathReturn<TValues, TName>) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook = <TValues extends StringMap>(\n form: Form<TValues>\n) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const useValue = createUseValueHook(form);\n return <TName extends Path<TValues>>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as Path<TValues>, v as any);\n });\n }, [value]);\n };\n};\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue> {\n name: TName;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends StringMap>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends Path<TValues>>(\n props: FieldProps<TName, PathReturn<TValues, TName>>\n ) => {\n const { name, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n form.errors.set(name, undefined); // Reset the error when the value is changed\n },\n [name]\n );\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState),\n [fieldState, inputProps]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends StringMap>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<Path<TValues>>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends StringMap>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends StringMap = StringMap>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends StringMap = StringMap>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["createUseValueHook","form","name","useState","values","get","value","setValue","useEffect","subscription","subscribe","v","unsubscribe","createUseErrorHook","errors","createUseTransformerHook","useValue","transformer","transformerRef","useRef","current","partialValues","Object","entries","forEach","n","set","createFieldComponent","useError","props","render","error","initValue","useMemo","initValues","modified","isEqual","reset","useCallback","onChange","undefined","renderRef","inputProps","fieldState","useModifiedFields","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","useFormResponse","Field","useTransformer","length","useForm","memoizedInitValues","useDeepEqualMemo","formRef","Form","useExistingForm","useFormContext","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { PathReturn, Path, Values } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<TValues extends Values, TName extends Path<TValues>> = (\n value: PathReturn<TValues, TName>\n) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook = <TValues extends Values>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n return <TName extends Path<TValues>>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as Path<TValues>, v as any);\n });\n }, [value]);\n };\n};\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue> {\n name: TName;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends Path<TValues>>(\n props: FieldProps<TName, PathReturn<TValues, TName>>\n ) => {\n const { name, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n form.errors.set(name, undefined); // Reset the error when the value is changed\n },\n [name]\n );\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState),\n [fieldState, inputProps]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends Values>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<Path<TValues>>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends Values>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends Values = Values>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends Values = Values>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type StringMap<T = any> = Record<string, T>;\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\ntype KeyOf<T> = Exclude<keyof T, symbol | keyof any[]>;\ntype Depth = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\ntype MaxDepth = 9; // To avoid \"Type instantiation is excessively deep and possibly infinite\"\n\nexport type Path<\n T,\n N extends Depth[number] = MaxDepth,\n K = KeyOf<T>\n> = N extends never\n ? never\n : T extends StringMap\n ?\n | K\n | (K extends keyof T\n ? T[K] extends StringMap\n ? KeysWithSeparator<K, Path<T[K], Depth[N]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\nexport type Errors<T> = Record<Path<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\n\ntype OwnKeyOf<T> = Exclude<keyof T, keyof any[]> & string;\ntype IsAny<T> = unknown extends T & string ? true : false;\n\nexport type Path<T, K = OwnKeyOf<T>> = IsAny<T> extends true\n ? string\n : T extends object\n ?\n | K\n | (K extends keyof T\n ? T[K] extends object\n ? KeysWithSeparator<K, Path<T[K]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\nexport type Values<T = any> = Record<string, T>;\nexport type Errors<T = any> = Record<Path<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"useFormContext.js","names":["FormContext","createContext","FormProvider","form","children","useFormContext","useContext"],"sources":["../../src/useFormContext.tsx"],"sourcesContent":["import React, { createContext, ReactNode, useContext } from 'react';\nimport Form from './Form';\nimport { StringMap } from './types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst FormContext = createContext<any>(null);\n\nexport interface FormProviderProps<TValues extends StringMap> {\n form: Form<TValues>;\n children?: ReactNode;\n}\n\n// eslint-disable-next-line react/function-component-definition\nexport function FormProvider<TValues extends StringMap>({\n form,\n children,\n}: FormProviderProps<TValues>) {\n return <FormContext.Provider value={form}>{children}</FormContext.Provider>;\n}\n\nfunction useFormContext<T>() {\n return useContext<T>(FormContext);\n}\n\nexport default useFormContext;\n"],"mappings":";;;;;;;;AAAA;AAAoE;AAAA;AAIpE;AACA,IAAMA,WAAW,gBAAG,IAAAC,oBAAa,EAAM,IAAI,CAAC;AAO5C;AACO,SAASC,YAAY,OAGG;EAAA,IAF7BC,IAAI,QAAJA,IAAI;IACJC,QAAQ,QAARA,QAAQ;EAER,oBAAO,gCAAC,WAAW,CAAC,QAAQ;IAAC,KAAK,EAAED;EAAK,GAAEC,QAAQ,CAAwB;AAC7E;AAEA,SAASC,cAAc,GAAM;EAC3B,OAAO,IAAAC,iBAAU,EAAIN,WAAW,CAAC;AACnC;AAAC,eAEcK,cAAc;AAAA"}
1
+ {"version":3,"file":"useFormContext.js","names":["FormContext","createContext","FormProvider","form","children","useFormContext","useContext"],"sources":["../../src/useFormContext.tsx"],"sourcesContent":["import React, { createContext, ReactNode, useContext } from 'react';\nimport Form from './Form';\nimport { Values } from './types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst FormContext = createContext<any>(null);\n\nexport interface FormProviderProps<TValues extends Values> {\n form: Form<TValues>;\n children?: ReactNode;\n}\n\n// eslint-disable-next-line react/function-component-definition\nexport function FormProvider<TValues extends Values>({\n form,\n children,\n}: FormProviderProps<TValues>) {\n return <FormContext.Provider value={form}>{children}</FormContext.Provider>;\n}\n\nfunction useFormContext<T>() {\n return useContext<T>(FormContext);\n}\n\nexport default useFormContext;\n"],"mappings":";;;;;;;;AAAA;AAAoE;AAAA;AAIpE;AACA,IAAMA,WAAW,gBAAG,IAAAC,oBAAa,EAAM,IAAI,CAAC;AAO5C;AACO,SAASC,YAAY,OAGG;EAAA,IAF7BC,IAAI,QAAJA,IAAI;IACJC,QAAQ,QAARA,QAAQ;EAER,oBAAO,gCAAC,WAAW,CAAC,QAAQ;IAAC,KAAK,EAAED;EAAK,GAAEC,QAAQ,CAAwB;AAC7E;AAEA,SAASC,cAAc,GAAM;EAC3B,OAAO,IAAAC,iBAAU,EAAIN,WAAW,CAAC;AACnC;AAAC,eAEcK,cAAc;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"path.js","names":["isObjectOrArray","value","split","path","groups","match","get","data","Object","hasOwn","undefined","key","nextPath","set"],"sources":["../../../src/utils/path.ts"],"sourcesContent":["import { StringMap } from '../types';\n\n/* eslint-disable @typescript-eslint/no-explicit-any,no-param-reassign */\n\nexport const isObjectOrArray = (value: any): value is object =>\n typeof value === 'object' && value !== null;\n\nconst split = (path: string) => {\n const groups = path.match(/^([^.]*)\\.(.*)$/);\n return groups ? [groups[1], groups[2]] : null;\n};\n\nexport const get = (data: StringMap, path: string): any => {\n if (Object.hasOwn(data, path)) {\n return data[path];\n }\n\n const groups = split(path);\n if (!groups) return undefined;\n\n const [key, nextPath] = groups;\n if (!Object.hasOwn(data, key)) return undefined;\n if (!isObjectOrArray(data[key])) return undefined;\n\n return get(data[key], nextPath);\n};\n\nexport const set = (data: StringMap, path: string, value: any): boolean => {\n if (Object.hasOwn(data, path)) {\n data[path] = value;\n return true;\n }\n\n const groups = split(path);\n if (!groups) return false;\n\n const [key, nextPath] = groups;\n if (!Object.hasOwn(data, key)) return false;\n if (!isObjectOrArray(data[key])) return false;\n\n return set(data[key], nextPath, value);\n};\n"],"mappings":";;;;;;;;;;;;;AAEA;;AAEO,IAAMA,eAAe,GAAG,SAAlBA,eAAe,CAAIC,KAAU;EAAA,OACxC,QAAOA,KAAK,MAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI;AAAA;AAAC;AAE9C,IAAMC,KAAK,GAAG,SAARA,KAAK,CAAIC,IAAY,EAAK;EAC9B,IAAMC,MAAM,GAAGD,IAAI,CAACE,KAAK,CAAC,iBAAiB,CAAC;EAC5C,OAAOD,MAAM,GAAG,CAACA,MAAM,CAAC,CAAC,CAAC,EAAEA,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;AAC/C,CAAC;AAEM,IAAME,GAAG,GAAG,SAANA,GAAG,CAAIC,IAAe,EAAEJ,IAAY,EAAU;EACzD,IAAIK,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEJ,IAAI,CAAC,EAAE;IAC7B,OAAOI,IAAI,CAACJ,IAAI,CAAC;EACnB;EAEA,IAAMC,MAAM,GAAGF,KAAK,CAACC,IAAI,CAAC;EAC1B,IAAI,CAACC,MAAM,EAAE,OAAOM,SAAS;EAE7B,6BAAwBN,MAAM;IAAvBO,GAAG;IAAEC,QAAQ;EACpB,IAAI,CAACJ,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEI,GAAG,CAAC,EAAE,OAAOD,SAAS;EAC/C,IAAI,CAACV,eAAe,CAACO,IAAI,CAACI,GAAG,CAAC,CAAC,EAAE,OAAOD,SAAS;EAEjD,OAAOJ,GAAG,CAACC,IAAI,CAACI,GAAG,CAAC,EAAEC,QAAQ,CAAC;AACjC,CAAC;AAAC;AAEK,IAAMC,GAAG,GAAG,SAANA,GAAG,CAAIN,IAAe,EAAEJ,IAAY,EAAEF,KAAU,EAAc;EACzE,IAAIO,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEJ,IAAI,CAAC,EAAE;IAC7BI,IAAI,CAACJ,IAAI,CAAC,GAAGF,KAAK;IAClB,OAAO,IAAI;EACb;EAEA,IAAMG,MAAM,GAAGF,KAAK,CAACC,IAAI,CAAC;EAC1B,IAAI,CAACC,MAAM,EAAE,OAAO,KAAK;EAEzB,8BAAwBA,MAAM;IAAvBO,GAAG;IAAEC,QAAQ;EACpB,IAAI,CAACJ,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEI,GAAG,CAAC,EAAE,OAAO,KAAK;EAC3C,IAAI,CAACX,eAAe,CAACO,IAAI,CAACI,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK;EAE7C,OAAOE,GAAG,CAACN,IAAI,CAACI,GAAG,CAAC,EAAEC,QAAQ,EAAEX,KAAK,CAAC;AACxC,CAAC;AAAC"}
1
+ {"version":3,"file":"path.js","names":["isObjectOrArray","value","split","path","groups","match","get","data","Object","hasOwn","undefined","key","nextPath","set"],"sources":["../../../src/utils/path.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any,no-param-reassign */\n\nexport const isObjectOrArray = (value: any): value is object =>\n typeof value === 'object' && value !== null;\n\nconst split = (path: string) => {\n const groups = path.match(/^([^.]*)\\.(.*)$/);\n return groups ? [groups[1], groups[2]] : null;\n};\n\nexport const get = (data: Record<string, any>, path: string): any => {\n if (Object.hasOwn(data, path)) {\n return data[path];\n }\n\n const groups = split(path);\n if (!groups) return undefined;\n\n const [key, nextPath] = groups;\n if (!Object.hasOwn(data, key)) return undefined;\n if (!isObjectOrArray(data[key])) return undefined;\n\n return get(data[key], nextPath);\n};\n\nexport const set = (\n data: Record<string, any>,\n path: string,\n value: any\n): boolean => {\n if (Object.hasOwn(data, path)) {\n data[path] = value;\n return true;\n }\n\n const groups = split(path);\n if (!groups) return false;\n\n const [key, nextPath] = groups;\n if (!Object.hasOwn(data, key)) return false;\n if (!isObjectOrArray(data[key])) return false;\n\n return set(data[key], nextPath, value);\n};\n"],"mappings":";;;;;;;;;;;;;AAAA;;AAEO,IAAMA,eAAe,GAAG,SAAlBA,eAAe,CAAIC,KAAU;EAAA,OACxC,QAAOA,KAAK,MAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI;AAAA;AAAC;AAE9C,IAAMC,KAAK,GAAG,SAARA,KAAK,CAAIC,IAAY,EAAK;EAC9B,IAAMC,MAAM,GAAGD,IAAI,CAACE,KAAK,CAAC,iBAAiB,CAAC;EAC5C,OAAOD,MAAM,GAAG,CAACA,MAAM,CAAC,CAAC,CAAC,EAAEA,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;AAC/C,CAAC;AAEM,IAAME,GAAG,GAAG,SAANA,GAAG,CAAIC,IAAyB,EAAEJ,IAAY,EAAU;EACnE,IAAIK,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEJ,IAAI,CAAC,EAAE;IAC7B,OAAOI,IAAI,CAACJ,IAAI,CAAC;EACnB;EAEA,IAAMC,MAAM,GAAGF,KAAK,CAACC,IAAI,CAAC;EAC1B,IAAI,CAACC,MAAM,EAAE,OAAOM,SAAS;EAE7B,6BAAwBN,MAAM;IAAvBO,GAAG;IAAEC,QAAQ;EACpB,IAAI,CAACJ,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEI,GAAG,CAAC,EAAE,OAAOD,SAAS;EAC/C,IAAI,CAACV,eAAe,CAACO,IAAI,CAACI,GAAG,CAAC,CAAC,EAAE,OAAOD,SAAS;EAEjD,OAAOJ,GAAG,CAACC,IAAI,CAACI,GAAG,CAAC,EAAEC,QAAQ,CAAC;AACjC,CAAC;AAAC;AAEK,IAAMC,GAAG,GAAG,SAANA,GAAG,CACdN,IAAyB,EACzBJ,IAAY,EACZF,KAAU,EACE;EACZ,IAAIO,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEJ,IAAI,CAAC,EAAE;IAC7BI,IAAI,CAACJ,IAAI,CAAC,GAAGF,KAAK;IAClB,OAAO,IAAI;EACb;EAEA,IAAMG,MAAM,GAAGF,KAAK,CAACC,IAAI,CAAC;EAC1B,IAAI,CAACC,MAAM,EAAE,OAAO,KAAK;EAEzB,8BAAwBA,MAAM;IAAvBO,GAAG;IAAEC,QAAQ;EACpB,IAAI,CAACJ,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEI,GAAG,CAAC,EAAE,OAAO,KAAK;EAC3C,IAAI,CAACX,eAAe,CAACO,IAAI,CAACI,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK;EAE7C,OAAOE,GAAG,CAACN,IAAI,CAACI,GAAG,CAAC,EAAEC,QAAQ,EAAEX,KAAK,CAAC;AACxC,CAAC;AAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorData.js","names":["ErrorObserverManager","ErrorData","constructor","errors","get","name","getAll","set","value","callObservers"],"sources":["../../src/ErrorData.ts"],"sourcesContent":["import ErrorObserverManager from './ErrorObserverManager';\nimport { StringMap } from './types';\n\nclass ErrorData<\n TErrors extends StringMap<string | undefined>,\n TName extends keyof TErrors = keyof TErrors\n> extends ErrorObserverManager<TErrors> {\n private readonly errors: TErrors;\n\n public constructor(errors: TErrors) {\n super();\n this.errors = errors;\n }\n\n public get<T extends TName>(name: T): TErrors[T] {\n return this.errors[name];\n }\n\n public getAll(): TErrors {\n return this.errors;\n }\n\n public set<T extends TName>(name: T, value: TErrors[T]): void {\n this.errors[name] = value;\n this.callObservers(name, value);\n }\n}\n\nexport default ErrorData;\n"],"mappings":"AAAA,OAAOA,oBAAoB,MAAM,wBAAwB;AAGzD,MAAMC,SAAS,SAGLD,oBAAoB,CAAU;EAG/BE,WAAW,CAACC,MAAe,EAAE;IAClC,KAAK,EAAE;IAAC,KAHOA,MAAM;IAIrB,IAAI,CAACA,MAAM,GAAGA,MAAM;EACtB;EAEOC,GAAG,CAAkBC,IAAO,EAAc;IAC/C,OAAO,IAAI,CAACF,MAAM,CAACE,IAAI,CAAC;EAC1B;EAEOC,MAAM,GAAY;IACvB,OAAO,IAAI,CAACH,MAAM;EACpB;EAEOI,GAAG,CAAkBF,IAAO,EAAEG,KAAiB,EAAQ;IAC5D,IAAI,CAACL,MAAM,CAACE,IAAI,CAAC,GAAGG,KAAK;IACzB,IAAI,CAACC,aAAa,CAACJ,IAAI,EAAEG,KAAK,CAAC;EACjC;AACF;AAEA,eAAeP,SAAS"}
1
+ {"version":3,"file":"ErrorData.js","names":["ErrorObserverManager","ErrorData","constructor","errors","get","name","getAll","set","value","callObservers"],"sources":["../../src/ErrorData.ts"],"sourcesContent":["import ErrorObserverManager from './ErrorObserverManager';\nimport { Errors } from './types';\n\nclass ErrorData<\n TErrors extends Errors,\n TName extends keyof TErrors = keyof TErrors\n> extends ErrorObserverManager<TErrors> {\n private readonly errors: TErrors;\n\n public constructor(errors: TErrors) {\n super();\n this.errors = errors;\n }\n\n public get<T extends TName>(name: T): TErrors[T] {\n return this.errors[name];\n }\n\n public getAll(): TErrors {\n return this.errors;\n }\n\n public set<T extends TName>(name: T, value: TErrors[T]): void {\n this.errors[name] = value;\n this.callObservers(name, value);\n }\n}\n\nexport default ErrorData;\n"],"mappings":"AAAA,OAAOA,oBAAoB,MAAM,wBAAwB;AAGzD,MAAMC,SAAS,SAGLD,oBAAoB,CAAU;EAG/BE,WAAW,CAACC,MAAe,EAAE;IAClC,KAAK,EAAE;IAAC,KAHOA,MAAM;IAIrB,IAAI,CAACA,MAAM,GAAGA,MAAM;EACtB;EAEOC,GAAG,CAAkBC,IAAO,EAAc;IAC/C,OAAO,IAAI,CAACF,MAAM,CAACE,IAAI,CAAC;EAC1B;EAEOC,MAAM,GAAY;IACvB,OAAO,IAAI,CAACH,MAAM;EACpB;EAEOI,GAAG,CAAkBF,IAAO,EAAEG,KAAiB,EAAQ;IAC5D,IAAI,CAACL,MAAM,CAACE,IAAI,CAAC,GAAGG,KAAK;IACzB,IAAI,CAACC,aAAa,CAACJ,IAAI,EAAEG,KAAK,CAAC;EACjC;AACF;AAEA,eAAeP,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorObserverManager.js","names":["BroadcastObserverManager","deleteFromArray","ErrorObserverManager","constructor","observers","getObservers","name","subscribe","observer","push","unsubscribe","callObservers","value","callBroadcastObservers","forEach"],"sources":["../../src/ErrorObserverManager.ts"],"sourcesContent":["import BroadcastObserverManager from './BroadcastObserverManager';\nimport { Observer, StringMap, Subscription } from './types';\nimport deleteFromArray from './utils/deleteFromArray';\n\nexport type ErrorObserver = Observer<string | undefined>;\n\nclass ErrorObserverManager<\n TErrors extends StringMap<string | undefined>,\n TName extends keyof TErrors = keyof TErrors\n> extends BroadcastObserverManager<TName, string | undefined> {\n private readonly observers: {\n [K in TName]?: ErrorObserver[];\n };\n\n public constructor() {\n super();\n this.observers = {};\n }\n\n private getObservers<T extends TName>(name: T): ErrorObserver[] {\n if (!this.observers[name]) this.observers[name] = [];\n return this.observers[name] as ErrorObserver[];\n }\n\n public subscribe<T extends TName>(\n name: T,\n observer: ErrorObserver\n ): Subscription {\n const observers = this.getObservers(name);\n observers.push(observer);\n return { unsubscribe: () => deleteFromArray(observers, observer) };\n }\n\n protected callObservers<T extends TName>(name: T, value: string | undefined) {\n this.callBroadcastObservers(name, value);\n this.getObservers(name).forEach((observer) => observer(value));\n }\n}\n\nexport default ErrorObserverManager;\n"],"mappings":"AAAA,OAAOA,wBAAwB,MAAM,4BAA4B;AAEjE,OAAOC,eAAe,MAAM,yBAAyB;AAIrD,MAAMC,oBAAoB,SAGhBF,wBAAwB,CAA4B;EAKrDG,WAAW,GAAG;IACnB,KAAK,EAAE;IAAC,KALOC,SAAS;IAMxB,IAAI,CAACA,SAAS,GAAG,CAAC,CAAC;EACrB;EAEQC,YAAY,CAAkBC,IAAO,EAAmB;IAC9D,IAAI,CAAC,IAAI,CAACF,SAAS,CAACE,IAAI,CAAC,EAAE,IAAI,CAACF,SAAS,CAACE,IAAI,CAAC,GAAG,EAAE;IACpD,OAAO,IAAI,CAACF,SAAS,CAACE,IAAI,CAAC;EAC7B;EAEOC,SAAS,CACdD,IAAO,EACPE,QAAuB,EACT;IACd,MAAMJ,SAAS,GAAG,IAAI,CAACC,YAAY,CAACC,IAAI,CAAC;IACzCF,SAAS,CAACK,IAAI,CAACD,QAAQ,CAAC;IACxB,OAAO;MAAEE,WAAW,EAAE,MAAMT,eAAe,CAACG,SAAS,EAAEI,QAAQ;IAAE,CAAC;EACpE;EAEUG,aAAa,CAAkBL,IAAO,EAAEM,KAAyB,EAAE;IAC3E,IAAI,CAACC,sBAAsB,CAACP,IAAI,EAAEM,KAAK,CAAC;IACxC,IAAI,CAACP,YAAY,CAACC,IAAI,CAAC,CAACQ,OAAO,CAAEN,QAAQ,IAAKA,QAAQ,CAACI,KAAK,CAAC,CAAC;EAChE;AACF;AAEA,eAAeV,oBAAoB"}
1
+ {"version":3,"file":"ErrorObserverManager.js","names":["BroadcastObserverManager","deleteFromArray","ErrorObserverManager","constructor","observers","getObservers","name","subscribe","observer","push","unsubscribe","callObservers","value","callBroadcastObservers","forEach"],"sources":["../../src/ErrorObserverManager.ts"],"sourcesContent":["import BroadcastObserverManager from './BroadcastObserverManager';\nimport { Errors, Observer, Subscription } from './types';\nimport deleteFromArray from './utils/deleteFromArray';\n\nexport type ErrorObserver = Observer<string | undefined>;\n\nclass ErrorObserverManager<\n TErrors extends Errors,\n TName extends keyof TErrors = keyof TErrors\n> extends BroadcastObserverManager<TName, string | undefined> {\n private readonly observers: {\n [K in TName]?: ErrorObserver[];\n };\n\n public constructor() {\n super();\n this.observers = {};\n }\n\n private getObservers<T extends TName>(name: T): ErrorObserver[] {\n if (!this.observers[name]) this.observers[name] = [];\n return this.observers[name] as ErrorObserver[];\n }\n\n public subscribe<T extends TName>(\n name: T,\n observer: ErrorObserver\n ): Subscription {\n const observers = this.getObservers(name);\n observers.push(observer);\n return { unsubscribe: () => deleteFromArray(observers, observer) };\n }\n\n protected callObservers<T extends TName>(name: T, value: string | undefined) {\n this.callBroadcastObservers(name, value);\n this.getObservers(name).forEach((observer) => observer(value));\n }\n}\n\nexport default ErrorObserverManager;\n"],"mappings":"AAAA,OAAOA,wBAAwB,MAAM,4BAA4B;AAEjE,OAAOC,eAAe,MAAM,yBAAyB;AAIrD,MAAMC,oBAAoB,SAGhBF,wBAAwB,CAA4B;EAKrDG,WAAW,GAAG;IACnB,KAAK,EAAE;IAAC,KALOC,SAAS;IAMxB,IAAI,CAACA,SAAS,GAAG,CAAC,CAAC;EACrB;EAEQC,YAAY,CAAkBC,IAAO,EAAmB;IAC9D,IAAI,CAAC,IAAI,CAACF,SAAS,CAACE,IAAI,CAAC,EAAE,IAAI,CAACF,SAAS,CAACE,IAAI,CAAC,GAAG,EAAE;IACpD,OAAO,IAAI,CAACF,SAAS,CAACE,IAAI,CAAC;EAC7B;EAEOC,SAAS,CACdD,IAAO,EACPE,QAAuB,EACT;IACd,MAAMJ,SAAS,GAAG,IAAI,CAACC,YAAY,CAACC,IAAI,CAAC;IACzCF,SAAS,CAACK,IAAI,CAACD,QAAQ,CAAC;IACxB,OAAO;MAAEE,WAAW,EAAE,MAAMT,eAAe,CAACG,SAAS,EAAEI,QAAQ;IAAE,CAAC;EACpE;EAEUG,aAAa,CAAkBL,IAAO,EAAEM,KAAyB,EAAE;IAC3E,IAAI,CAACC,sBAAsB,CAACP,IAAI,EAAEM,KAAK,CAAC;IACxC,IAAI,CAACP,YAAY,CAACC,IAAI,CAAC,CAACQ,OAAO,CAAEN,QAAQ,IAAKA,QAAQ,CAACI,KAAK,CAAC,CAAC;EAChE;AACF;AAEA,eAAeV,oBAAoB"}
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","names":["ErrorData","clone","ValueData","Form","constructor","initValues","values","errors","reset","Object","keys","getAll","forEach","name","set","undefined"],"sources":["../../src/Form.ts"],"sourcesContent":["import ErrorData from './ErrorData';\nimport { Errors, Path, StringMap } from './types';\nimport clone from './utils/clone';\nimport ValueData from './ValueData';\n\nclass Form<\n TValues extends StringMap = StringMap,\n TErrors extends Errors<TValues> = Errors<TValues>\n> {\n public initValues: TValues;\n\n public readonly values: ValueData<TValues>;\n\n public readonly errors: ErrorData<TErrors>;\n\n public constructor(initValues: TValues) {\n this.initValues = initValues;\n this.values = new ValueData(clone(initValues));\n this.errors = new ErrorData({} as TErrors);\n }\n\n public reset() {\n // Reset values\n Object.keys(this.values.getAll()).forEach((name) => {\n this.values.set(name as Path<TValues>, clone(this.initValues[name]));\n });\n\n // Reset errors\n Object.keys(this.errors.getAll()).forEach((name) => {\n this.errors.set(\n name as keyof TErrors,\n undefined as TErrors[keyof TErrors]\n );\n });\n }\n}\n\nexport default Form;\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,aAAa;AAEnC,OAAOC,KAAK,MAAM,eAAe;AACjC,OAAOC,SAAS,MAAM,aAAa;AAEnC,MAAMC,IAAI,CAGR;EAOOC,WAAW,CAACC,UAAmB,EAAE;IAAA,KANjCA,UAAU;IAAA,KAEDC,MAAM;IAAA,KAENC,MAAM;IAGpB,IAAI,CAACF,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACC,MAAM,GAAG,IAAIJ,SAAS,CAACD,KAAK,CAACI,UAAU,CAAC,CAAC;IAC9C,IAAI,CAACE,MAAM,GAAG,IAAIP,SAAS,CAAC,CAAC,CAAC,CAAY;EAC5C;EAEOQ,KAAK,GAAG;IACb;IACAC,MAAM,CAACC,IAAI,CAAC,IAAI,CAACJ,MAAM,CAACK,MAAM,EAAE,CAAC,CAACC,OAAO,CAAEC,IAAI,IAAK;MAClD,IAAI,CAACP,MAAM,CAACQ,GAAG,CAACD,IAAI,EAAmBZ,KAAK,CAAC,IAAI,CAACI,UAAU,CAACQ,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC;;IAEF;IACAJ,MAAM,CAACC,IAAI,CAAC,IAAI,CAACH,MAAM,CAACI,MAAM,EAAE,CAAC,CAACC,OAAO,CAAEC,IAAI,IAAK;MAClD,IAAI,CAACN,MAAM,CAACO,GAAG,CACbD,IAAI,EACJE,SAAS,CACV;IACH,CAAC,CAAC;EACJ;AACF;AAEA,eAAeZ,IAAI"}
1
+ {"version":3,"file":"Form.js","names":["ErrorData","clone","ValueData","Form","constructor","initValues","values","errors","reset","Object","keys","getAll","forEach","name","set","undefined"],"sources":["../../src/Form.ts"],"sourcesContent":["import ErrorData from './ErrorData';\nimport { Errors, Path, Values } from './types';\nimport clone from './utils/clone';\nimport ValueData from './ValueData';\n\nclass Form<\n TValues extends Values = Values,\n TErrors extends Errors<TValues> = Errors<TValues>\n> {\n public initValues: TValues;\n\n public readonly values: ValueData<TValues>;\n\n public readonly errors: ErrorData<TErrors>;\n\n public constructor(initValues: TValues) {\n this.initValues = initValues;\n this.values = new ValueData(clone(initValues));\n this.errors = new ErrorData({} as TErrors);\n }\n\n public reset() {\n // Reset values\n Object.keys(this.values.getAll()).forEach((name) => {\n this.values.set(name as Path<TValues>, clone(this.initValues[name]));\n });\n\n // Reset errors\n Object.keys(this.errors.getAll()).forEach((name) => {\n this.errors.set(\n name as keyof TErrors,\n undefined as TErrors[keyof TErrors]\n );\n });\n }\n}\n\nexport default Form;\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,aAAa;AAEnC,OAAOC,KAAK,MAAM,eAAe;AACjC,OAAOC,SAAS,MAAM,aAAa;AAEnC,MAAMC,IAAI,CAGR;EAOOC,WAAW,CAACC,UAAmB,EAAE;IAAA,KANjCA,UAAU;IAAA,KAEDC,MAAM;IAAA,KAENC,MAAM;IAGpB,IAAI,CAACF,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACC,MAAM,GAAG,IAAIJ,SAAS,CAACD,KAAK,CAACI,UAAU,CAAC,CAAC;IAC9C,IAAI,CAACE,MAAM,GAAG,IAAIP,SAAS,CAAC,CAAC,CAAC,CAAY;EAC5C;EAEOQ,KAAK,GAAG;IACb;IACAC,MAAM,CAACC,IAAI,CAAC,IAAI,CAACJ,MAAM,CAACK,MAAM,EAAE,CAAC,CAACC,OAAO,CAAEC,IAAI,IAAK;MAClD,IAAI,CAACP,MAAM,CAACQ,GAAG,CAACD,IAAI,EAAmBZ,KAAK,CAAC,IAAI,CAACI,UAAU,CAACQ,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC;;IAEF;IACAJ,MAAM,CAACC,IAAI,CAAC,IAAI,CAACH,MAAM,CAACI,MAAM,EAAE,CAAC,CAACC,OAAO,CAAEC,IAAI,IAAK;MAClD,IAAI,CAACN,MAAM,CAACO,GAAG,CACbD,IAAI,EACJE,SAAS,CACV;IACH,CAAC,CAAC;EACJ;AACF;AAEA,eAAeZ,IAAI"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValueData.js","names":["get","set","ValueObserverManager","ValueData","constructor","values","name","getAll","value","ok","callObservers"],"sources":["../../src/ValueData.ts"],"sourcesContent":["import { PathReturn, Path, StringMap } from './types';\nimport { get, set } from './utils/path';\nimport ValueObserverManager from './ValueObserverManager';\n\nclass ValueData<\n TValues extends StringMap,\n TName extends Path<TValues> = Path<TValues>\n> extends ValueObserverManager<TValues> {\n private readonly values: TValues;\n\n public constructor(values: TValues) {\n super();\n this.values = values;\n }\n\n public get<T extends TName>(name: T): PathReturn<TValues, T> {\n return get(this.values, name);\n }\n\n public getAll(): TValues {\n return this.values;\n }\n\n public set<T extends TName>(name: T, value: PathReturn<TValues, T>): void {\n const ok = set(this.values, name, value);\n if (ok) this.callObservers(name, this.values);\n }\n}\n\nexport default ValueData;\n"],"mappings":"AACA,SAASA,GAAG,EAAEC,GAAG,QAAQ,cAAc;AACvC,OAAOC,oBAAoB,MAAM,wBAAwB;AAEzD,MAAMC,SAAS,SAGLD,oBAAoB,CAAU;EAG/BE,WAAW,CAACC,MAAe,EAAE;IAClC,KAAK,EAAE;IAAC,KAHOA,MAAM;IAIrB,IAAI,CAACA,MAAM,GAAGA,MAAM;EACtB;EAEOL,GAAG,CAAkBM,IAAO,EAA0B;IAC3D,OAAON,GAAG,CAAC,IAAI,CAACK,MAAM,EAAEC,IAAI,CAAC;EAC/B;EAEOC,MAAM,GAAY;IACvB,OAAO,IAAI,CAACF,MAAM;EACpB;EAEOJ,GAAG,CAAkBK,IAAO,EAAEE,KAA6B,EAAQ;IACxE,MAAMC,EAAE,GAAGR,GAAG,CAAC,IAAI,CAACI,MAAM,EAAEC,IAAI,EAAEE,KAAK,CAAC;IACxC,IAAIC,EAAE,EAAE,IAAI,CAACC,aAAa,CAACJ,IAAI,EAAE,IAAI,CAACD,MAAM,CAAC;EAC/C;AACF;AAEA,eAAeF,SAAS"}
1
+ {"version":3,"file":"ValueData.js","names":["get","set","ValueObserverManager","ValueData","constructor","values","name","getAll","value","ok","callObservers"],"sources":["../../src/ValueData.ts"],"sourcesContent":["import { PathReturn, Path, Values } from './types';\nimport { get, set } from './utils/path';\nimport ValueObserverManager from './ValueObserverManager';\n\nclass ValueData<\n TValues extends Values,\n TName extends Path<TValues> = Path<TValues>\n> extends ValueObserverManager<TValues> {\n private readonly values: TValues;\n\n public constructor(values: TValues) {\n super();\n this.values = values;\n }\n\n public get<T extends TName>(name: T): PathReturn<TValues, T> {\n return get(this.values, name);\n }\n\n public getAll(): TValues {\n return this.values;\n }\n\n public set<T extends TName>(name: T, value: PathReturn<TValues, T>): void {\n const ok = set(this.values, name, value);\n if (ok) this.callObservers(name, this.values);\n }\n}\n\nexport default ValueData;\n"],"mappings":"AACA,SAASA,GAAG,EAAEC,GAAG,QAAQ,cAAc;AACvC,OAAOC,oBAAoB,MAAM,wBAAwB;AAEzD,MAAMC,SAAS,SAGLD,oBAAoB,CAAU;EAG/BE,WAAW,CAACC,MAAe,EAAE;IAClC,KAAK,EAAE;IAAC,KAHOA,MAAM;IAIrB,IAAI,CAACA,MAAM,GAAGA,MAAM;EACtB;EAEOL,GAAG,CAAkBM,IAAO,EAA0B;IAC3D,OAAON,GAAG,CAAC,IAAI,CAACK,MAAM,EAAEC,IAAI,CAAC;EAC/B;EAEOC,MAAM,GAAY;IACvB,OAAO,IAAI,CAACF,MAAM;EACpB;EAEOJ,GAAG,CAAkBK,IAAO,EAAEE,KAA6B,EAAQ;IACxE,MAAMC,EAAE,GAAGR,GAAG,CAAC,IAAI,CAACI,MAAM,EAAEC,IAAI,EAAEE,KAAK,CAAC;IACxC,IAAIC,EAAE,EAAE,IAAI,CAACC,aAAa,CAACJ,IAAI,EAAE,IAAI,CAACD,MAAM,CAAC;EAC/C;AACF;AAEA,eAAeF,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValueObserverManager.js","names":["BroadcastObserverManager","Node","get","isObjectOrArray","split","path","ValueObserverManager","constructor","root","findNode","keys","cur","forEach","key","getNode","createNode","subscribe","name","observer","node","addObserver","unsubscribe","deleteObserver","observers","length","parent","deleteNode","callObservers","data","callBroadcastObservers","callNodeObservers","curNode","curData","i","callChildObservers","Object","entries","nodes","value"],"sources":["../../src/ValueObserverManager.ts"],"sourcesContent":["import BroadcastObserverManager from './BroadcastObserverManager';\nimport Node from './Node';\nimport { Observer, PathReturn, Path, StringMap, Subscription } from './types';\nimport { get, isObjectOrArray } from './utils/path';\n\nconst split = (path: string) => path.split('.');\n\nclass ValueObserverManager<\n TValues extends StringMap,\n TName extends Path<TValues> = Path<TValues>\n> extends BroadcastObserverManager<TName, TValues[TName]> {\n private readonly root: Node;\n\n public constructor() {\n super();\n this.root = new Node();\n }\n\n private findNode(path: string) {\n const keys = split(path);\n let cur = this.root;\n keys.forEach((key) => {\n cur = cur.getNode(key) || cur.createNode(key);\n });\n return cur;\n }\n\n public subscribe<T extends TName>(\n name: T,\n observer: Observer<PathReturn<TValues, T>>\n ): Subscription {\n const node = this.findNode(name);\n node.addObserver(observer);\n\n return {\n unsubscribe: () => {\n node.deleteObserver(observer);\n if (node.observers.length === 0) {\n node.parent?.deleteNode(node.name);\n }\n },\n };\n }\n\n protected callObservers<T extends TName>(name: T, data: TValues): void {\n this.callBroadcastObservers(name, get(data, name));\n this.callNodeObservers(name, data);\n }\n\n private callNodeObservers<T extends TName>(name: T, data: TValues): void {\n const keys = split(name);\n let curNode = this.root;\n let curData = data;\n\n // Call the observers for the root node\n curNode.observers.forEach((observer) => observer(curData));\n\n // Call observers on each node from the root to the specified one\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const node = curNode.getNode(key);\n if (!node || !isObjectOrArray(curData)) return;\n curNode = node;\n curData = curData[key];\n // eslint-disable-next-line @typescript-eslint/no-loop-func\n curNode.observers.forEach((observer) => observer(curData));\n }\n\n // Call observers of all child nodes started from the specified one\n this.callChildObservers(curNode, curData);\n }\n\n private callChildObservers(parent: Node, data: TValues): void {\n if (!isObjectOrArray(data)) return;\n Object.entries(parent.nodes).forEach(([name, node]) => {\n const value = data[name];\n node.observers.forEach((observer) => observer(value));\n this.callChildObservers(node, value);\n });\n }\n}\n\nexport default ValueObserverManager;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ValueObserverManager.js","names":["BroadcastObserverManager","Node","get","isObjectOrArray","split","path","ValueObserverManager","constructor","root","findNode","keys","cur","forEach","key","getNode","createNode","subscribe","name","observer","node","addObserver","unsubscribe","deleteObserver","observers","length","parent","deleteNode","callObservers","data","callBroadcastObservers","callNodeObservers","curNode","curData","i","callChildObservers","Object","entries","nodes","value"],"sources":["../../src/ValueObserverManager.ts"],"sourcesContent":["import BroadcastObserverManager from './BroadcastObserverManager';\nimport Node from './Node';\nimport { Observer, PathReturn, Path, Values, Subscription } from './types';\nimport { get, isObjectOrArray } from './utils/path';\n\nconst split = (path: string) => path.split('.');\n\nclass ValueObserverManager<\n TValues extends Values,\n TName extends Path<TValues> = Path<TValues>\n> extends BroadcastObserverManager<TName, TValues[TName]> {\n private readonly root: Node;\n\n public constructor() {\n super();\n this.root = new Node();\n }\n\n private findNode(path: string) {\n const keys = split(path);\n let cur = this.root;\n keys.forEach((key) => {\n cur = cur.getNode(key) || cur.createNode(key);\n });\n return cur;\n }\n\n public subscribe<T extends TName>(\n name: T,\n observer: Observer<PathReturn<TValues, T>>\n ): Subscription {\n const node = this.findNode(name);\n node.addObserver(observer);\n\n return {\n unsubscribe: () => {\n node.deleteObserver(observer);\n if (node.observers.length === 0) {\n node.parent?.deleteNode(node.name);\n }\n },\n };\n }\n\n protected callObservers<T extends TName>(name: T, data: TValues): void {\n this.callBroadcastObservers(name, get(data, name));\n this.callNodeObservers(name, data);\n }\n\n private callNodeObservers<T extends TName>(name: T, data: TValues): void {\n const keys = split(name);\n let curNode = this.root;\n let curData = data;\n\n // Call the observers for the root node\n curNode.observers.forEach((observer) => observer(curData));\n\n // Call observers on each node from the root to the specified one\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n const node = curNode.getNode(key);\n if (!node || !isObjectOrArray(curData)) return;\n curNode = node;\n curData = curData[key];\n // eslint-disable-next-line @typescript-eslint/no-loop-func\n curNode.observers.forEach((observer) => observer(curData));\n }\n\n // Call observers of all child nodes started from the specified one\n this.callChildObservers(curNode, curData);\n }\n\n private callChildObservers(parent: Node, data: TValues): void {\n if (!isObjectOrArray(data)) return;\n Object.entries(parent.nodes).forEach(([name, node]) => {\n const value = data[name];\n node.observers.forEach((observer) => observer(value));\n this.callChildObservers(node, value);\n });\n }\n}\n\nexport default ValueObserverManager;\n"],"mappings":"AAAA,OAAOA,wBAAwB,MAAM,4BAA4B;AACjE,OAAOC,IAAI,MAAM,QAAQ;AAEzB,SAASC,GAAG,EAAEC,eAAe,QAAQ,cAAc;AAEnD,MAAMC,KAAK,GAAIC,IAAY,IAAKA,IAAI,CAACD,KAAK,CAAC,GAAG,CAAC;AAE/C,MAAME,oBAAoB,SAGhBN,wBAAwB,CAAwB;EAGjDO,WAAW,GAAG;IACnB,KAAK,EAAE;IAAC,KAHOC,IAAI;IAInB,IAAI,CAACA,IAAI,GAAG,IAAIP,IAAI,EAAE;EACxB;EAEQQ,QAAQ,CAACJ,IAAY,EAAE;IAC7B,MAAMK,IAAI,GAAGN,KAAK,CAACC,IAAI,CAAC;IACxB,IAAIM,GAAG,GAAG,IAAI,CAACH,IAAI;IACnBE,IAAI,CAACE,OAAO,CAAEC,GAAG,IAAK;MACpBF,GAAG,GAAGA,GAAG,CAACG,OAAO,CAACD,GAAG,CAAC,IAAIF,GAAG,CAACI,UAAU,CAACF,GAAG,CAAC;IAC/C,CAAC,CAAC;IACF,OAAOF,GAAG;EACZ;EAEOK,SAAS,CACdC,IAAO,EACPC,QAA0C,EAC5B;IACd,MAAMC,IAAI,GAAG,IAAI,CAACV,QAAQ,CAACQ,IAAI,CAAC;IAChCE,IAAI,CAACC,WAAW,CAACF,QAAQ,CAAC;IAE1B,OAAO;MACLG,WAAW,EAAE,MAAM;QACjBF,IAAI,CAACG,cAAc,CAACJ,QAAQ,CAAC;QAC7B,IAAIC,IAAI,CAACI,SAAS,CAACC,MAAM,KAAK,CAAC,EAAE;UAC/BL,IAAI,CAACM,MAAM,EAAEC,UAAU,CAACP,IAAI,CAACF,IAAI,CAAC;QACpC;MACF;IACF,CAAC;EACH;EAEUU,aAAa,CAAkBV,IAAO,EAAEW,IAAa,EAAQ;IACrE,IAAI,CAACC,sBAAsB,CAACZ,IAAI,EAAEf,GAAG,CAAC0B,IAAI,EAAEX,IAAI,CAAC,CAAC;IAClD,IAAI,CAACa,iBAAiB,CAACb,IAAI,EAAEW,IAAI,CAAC;EACpC;EAEQE,iBAAiB,CAAkBb,IAAO,EAAEW,IAAa,EAAQ;IACvE,MAAMlB,IAAI,GAAGN,KAAK,CAACa,IAAI,CAAC;IACxB,IAAIc,OAAO,GAAG,IAAI,CAACvB,IAAI;IACvB,IAAIwB,OAAO,GAAGJ,IAAI;;IAElB;IACAG,OAAO,CAACR,SAAS,CAACX,OAAO,CAAEM,QAAQ,IAAKA,QAAQ,CAACc,OAAO,CAAC,CAAC;;IAE1D;IACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGvB,IAAI,CAACc,MAAM,EAAES,CAAC,IAAI,CAAC,EAAE;MACvC,MAAMpB,GAAG,GAAGH,IAAI,CAACuB,CAAC,CAAC;MACnB,MAAMd,IAAI,GAAGY,OAAO,CAACjB,OAAO,CAACD,GAAG,CAAC;MACjC,IAAI,CAACM,IAAI,IAAI,CAAChB,eAAe,CAAC6B,OAAO,CAAC,EAAE;MACxCD,OAAO,GAAGZ,IAAI;MACda,OAAO,GAAGA,OAAO,CAACnB,GAAG,CAAC;MACtB;MACAkB,OAAO,CAACR,SAAS,CAACX,OAAO,CAAEM,QAAQ,IAAKA,QAAQ,CAACc,OAAO,CAAC,CAAC;IAC5D;;IAEA;IACA,IAAI,CAACE,kBAAkB,CAACH,OAAO,EAAEC,OAAO,CAAC;EAC3C;EAEQE,kBAAkB,CAACT,MAAY,EAAEG,IAAa,EAAQ;IAC5D,IAAI,CAACzB,eAAe,CAACyB,IAAI,CAAC,EAAE;IAC5BO,MAAM,CAACC,OAAO,CAACX,MAAM,CAACY,KAAK,CAAC,CAACzB,OAAO,CAAC,CAAC,CAACK,IAAI,EAAEE,IAAI,CAAC,KAAK;MACrD,MAAMmB,KAAK,GAAGV,IAAI,CAACX,IAAI,CAAC;MACxBE,IAAI,CAACI,SAAS,CAACX,OAAO,CAAEM,QAAQ,IAAKA,QAAQ,CAACoB,KAAK,CAAC,CAAC;MACrD,IAAI,CAACJ,kBAAkB,CAACf,IAAI,EAAEmB,KAAK,CAAC;IACtC,CAAC,CAAC;EACJ;AACF;AAEA,eAAehC,oBAAoB"}
package/dist/esm/index.js CHANGED
@@ -30,8 +30,6 @@ const createUseErrorHook = form => name => {
30
30
  return value;
31
31
  };
32
32
  const createUseTransformerHook = form => {
33
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
34
- // @ts-ignore
35
33
  const useValue = createUseValueHook(form);
36
34
  return (name, transformer) => {
37
35
  const value = useValue(name);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","Form","useFormContext","isEqual","get","useDeepEqualMemo","default","createUseValueHook","form","name","value","setValue","values","subscription","subscribe","v","unsubscribe","createUseErrorHook","errors","createUseTransformerHook","useValue","transformer","transformerRef","current","partialValues","Object","entries","forEach","n","set","createFieldComponent","useError","props","render","error","initValue","initValues","modified","reset","onChange","undefined","renderRef","inputProps","fieldState","useModifiedFields","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","useFormResponse","Field","useTransformer","length","useForm","memoizedInitValues","formRef","useExistingForm","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { PathReturn, Path, StringMap } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends StringMap>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends StringMap>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<\n TValues extends StringMap,\n TName extends Path<TValues>\n> = (value: PathReturn<TValues, TName>) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook = <TValues extends StringMap>(\n form: Form<TValues>\n) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const useValue = createUseValueHook(form);\n return <TName extends Path<TValues>>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as Path<TValues>, v as any);\n });\n }, [value]);\n };\n};\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue> {\n name: TName;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends StringMap>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends Path<TValues>>(\n props: FieldProps<TName, PathReturn<TValues, TName>>\n ) => {\n const { name, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n form.errors.set(name, undefined); // Reset the error when the value is changed\n },\n [name]\n );\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState),\n [fieldState, inputProps]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends StringMap>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<Path<TValues>>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends StringMap>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends StringMap = StringMap>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends StringMap = StringMap>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["useCallback","useEffect","useMemo","useRef","useState","Form","useFormContext","isEqual","get","useDeepEqualMemo","default","createUseValueHook","form","name","value","setValue","values","subscription","subscribe","v","unsubscribe","createUseErrorHook","errors","createUseTransformerHook","useValue","transformer","transformerRef","current","partialValues","Object","entries","forEach","n","set","createFieldComponent","useError","props","render","error","initValue","initValues","modified","reset","onChange","undefined","renderRef","inputProps","fieldState","useModifiedFields","modifiedFields","setModifiedFields","modifiedFieldsRef","initValuesRef","subscribeToAll","isInitValue","fields","includes","filter","field","useFormResponse","Field","useTransformer","length","useForm","memoizedInitValues","formRef","useExistingForm","Error"],"sources":["../../src/index.tsx"],"sourcesContent":["import {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Form from './Form';\nimport { PathReturn, Path, Values } from './types';\nimport useFormContext from './useFormContext';\nimport isEqual from './utils/isEqual';\nimport { get } from './utils/path';\nimport useDeepEqualMemo from './utils/useDeepEqualMemo';\n\nexport * from './BroadcastObserverManager';\nexport * from './ErrorObserverManager';\nexport { default as Form } from './Form';\nexport * from './types';\nexport * from './useFormContext';\n\nconst createUseValueHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<PathReturn<TValues, TName>>(\n form.values.get(name)\n );\n\n useEffect(() => {\n const subscription = form.values.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nconst createUseErrorHook =\n <TValues extends Values>(form: Form<TValues>) =>\n <TName extends Path<TValues>>(name: TName) => {\n const [value, setValue] = useState<string | undefined>(\n form.errors.get(name)\n );\n\n useEffect(() => {\n const subscription = form.errors.subscribe(name, (v) => {\n setValue(v);\n });\n return () => subscription.unsubscribe();\n }, [name]);\n\n return value;\n };\n\nexport type Transformer<TValues extends Values, TName extends Path<TValues>> = (\n value: PathReturn<TValues, TName>\n) => {\n [K in Path<TValues>]?: PathReturn<TValues, K>;\n};\n\nconst createUseTransformerHook = <TValues extends Values>(\n form: Form<TValues>\n) => {\n const useValue = createUseValueHook(form);\n return <TName extends Path<TValues>>(\n name: TName,\n transformer: Transformer<TValues, TName>\n ) => {\n const value = useValue(name);\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n useEffect(() => {\n const partialValues = transformerRef.current(value);\n Object.entries(partialValues).forEach(([n, v]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form.values.set(n as Path<TValues>, v as any);\n });\n }, [value]);\n };\n};\n\ninterface InputProps<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n}\ninterface FieldState {\n error?: string;\n modified: boolean;\n reset: () => void;\n}\ninterface FieldProps<TName, TValue> {\n name: TName;\n transformer?: (value: TValue) => TValue;\n render: (\n inputProps: InputProps<TValue>,\n fieldState: FieldState\n ) => ReactElement | null;\n}\n\nconst createFieldComponent = <TValues extends Values>(form: Form<TValues>) => {\n const useValue = createUseValueHook(form);\n const useError = createUseErrorHook(form);\n return <TName extends Path<TValues>>(\n props: FieldProps<TName, PathReturn<TValues, TName>>\n ) => {\n const { name, transformer = (v) => v, render } = props;\n\n const value = useValue(name);\n const error = useError(name);\n\n const initValue = useMemo(() => get(form.initValues, name), [name]);\n const modified = useMemo(\n () => !isEqual(value, initValue),\n [initValue, value]\n );\n const reset = useCallback(\n () => form.values.set(name, initValue),\n [initValue, name]\n );\n\n const transformerRef = useRef(transformer);\n useEffect(() => {\n transformerRef.current = transformer;\n }, [transformer]);\n\n const onChange = useCallback(\n (v: PathReturn<TValues, TName>) => {\n form.values.set(name, transformerRef.current(v));\n form.errors.set(name, undefined); // Reset the error when the value is changed\n },\n [name]\n );\n\n const renderRef = useRef(render);\n useEffect(() => {\n renderRef.current = render;\n }, [render]);\n\n const inputProps = useMemo(() => ({ value, onChange }), [onChange, value]);\n const fieldState = useMemo(\n () => ({ error, modified, reset }),\n [error, modified, reset]\n );\n\n return useMemo(\n () => renderRef.current(inputProps, fieldState),\n [fieldState, inputProps]\n );\n };\n};\n\nconst useModifiedFields = <TValues extends Values>(form: Form<TValues>) => {\n const [modifiedFields, setModifiedFields] = useState<Array<Path<TValues>>>(\n []\n );\n\n const modifiedFieldsRef = useRef(modifiedFields);\n useEffect(() => {\n modifiedFieldsRef.current = modifiedFields;\n }, [modifiedFields]);\n\n const initValuesRef = useRef(form.initValues);\n useEffect(() => {\n initValuesRef.current = form.initValues;\n }, [form.initValues]);\n\n useEffect(() => {\n const subscription = form.values.subscribeToAll((name, value) => {\n const isInitValue = isEqual(value, get(initValuesRef.current, name));\n const fields = modifiedFieldsRef.current;\n\n if (fields.includes(name)) {\n if (isInitValue) {\n setModifiedFields(fields.filter((field) => field !== name));\n }\n } else if (!isInitValue) {\n setModifiedFields([...fields, name]);\n }\n });\n return () => subscription.unsubscribe();\n }, [form.values]);\n\n return modifiedFields;\n};\n\nconst useFormResponse = <TValues extends Values>(form: Form<TValues>) => {\n const Field = useMemo(() => createFieldComponent(form), [form]);\n const useValue = useMemo(() => createUseValueHook(form), [form]);\n const useError = useMemo(() => createUseErrorHook(form), [form]);\n const useTransformer = useMemo(() => createUseTransformerHook(form), [form]);\n\n const modifiedFields = useModifiedFields(form);\n const modified = useMemo(\n () => modifiedFields.length > 0,\n [modifiedFields.length]\n );\n\n return useMemo(\n () => ({\n form,\n Field,\n useValue,\n useError,\n useTransformer,\n modifiedFields,\n modified,\n }),\n [Field, form, modified, modifiedFields, useError, useTransformer, useValue]\n );\n};\n\nexport const useForm = <TValues extends Values = Values>(\n initValues: TValues\n) => {\n const memoizedInitValues = useDeepEqualMemo<TValues>(\n () => initValues,\n [initValues]\n );\n\n const formRef = useRef(new Form<TValues>(memoizedInitValues));\n useEffect(() => {\n formRef.current.initValues = memoizedInitValues;\n formRef.current.reset();\n }, [memoizedInitValues]);\n\n return useFormResponse(formRef.current);\n};\n\nexport const useExistingForm = <TValues extends Values = Values>() => {\n const form = useFormContext<Form<TValues> | null>();\n if (!form) throw new Error('Wrap your form in a FormProvider');\n return useFormResponse(form);\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type StringMap<T = any> = Record<string, T>;\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\ntype KeyOf<T> = Exclude<keyof T, symbol | keyof any[]>;\ntype Depth = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\ntype MaxDepth = 9; // To avoid \"Type instantiation is excessively deep and possibly infinite\"\n\nexport type Path<\n T,\n N extends Depth[number] = MaxDepth,\n K = KeyOf<T>\n> = N extends never\n ? never\n : T extends StringMap\n ?\n | K\n | (K extends keyof T\n ? T[K] extends StringMap\n ? KeysWithSeparator<K, Path<T[K], Depth[N]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\nexport type Errors<T> = Record<Path<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Separator = '.';\ntype KeysWithSeparator<K1, K2> = `${K1 & string}${Separator}${K2 & string}`;\n\ntype OwnKeyOf<T> = Exclude<keyof T, keyof any[]> & string;\ntype IsAny<T> = unknown extends T & string ? true : false;\n\nexport type Path<T, K = OwnKeyOf<T>> = IsAny<T> extends true\n ? string\n : T extends object\n ?\n | K\n | (K extends keyof T\n ? T[K] extends object\n ? KeysWithSeparator<K, Path<T[K]>>\n : never\n : never)\n : never;\n\nexport type PathReturn<T, K> = K extends keyof T\n ? T[K]\n : K extends `${infer U}${Separator}${infer R}`\n ? U extends keyof T\n ? PathReturn<T[U], R>\n : never\n : never;\n\nexport type Values<T = any> = Record<string, T>;\nexport type Errors<T = any> = Record<Path<T>, string | undefined>;\n\nexport type Observer<V = any> = (value: V) => void;\nexport interface Subscription {\n unsubscribe: () => void;\n}\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"useFormContext.js","names":["React","createContext","useContext","FormContext","FormProvider","form","children","useFormContext"],"sources":["../../src/useFormContext.tsx"],"sourcesContent":["import React, { createContext, ReactNode, useContext } from 'react';\nimport Form from './Form';\nimport { StringMap } from './types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst FormContext = createContext<any>(null);\n\nexport interface FormProviderProps<TValues extends StringMap> {\n form: Form<TValues>;\n children?: ReactNode;\n}\n\n// eslint-disable-next-line react/function-component-definition\nexport function FormProvider<TValues extends StringMap>({\n form,\n children,\n}: FormProviderProps<TValues>) {\n return <FormContext.Provider value={form}>{children}</FormContext.Provider>;\n}\n\nfunction useFormContext<T>() {\n return useContext<T>(FormContext);\n}\n\nexport default useFormContext;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAaC,UAAU,QAAQ,OAAO;AAInE;AACA,MAAMC,WAAW,gBAAGF,aAAa,CAAM,IAAI,CAAC;AAO5C;AACA,OAAO,SAASG,YAAY,CAA4B;EACtDC,IAAI;EACJC;AAC0B,CAAC,EAAE;EAC7B,oBAAO,oBAAC,WAAW,CAAC,QAAQ;IAAC,KAAK,EAAED;EAAK,GAAEC,QAAQ,CAAwB;AAC7E;AAEA,SAASC,cAAc,GAAM;EAC3B,OAAOL,UAAU,CAAIC,WAAW,CAAC;AACnC;AAEA,eAAeI,cAAc"}
1
+ {"version":3,"file":"useFormContext.js","names":["React","createContext","useContext","FormContext","FormProvider","form","children","useFormContext"],"sources":["../../src/useFormContext.tsx"],"sourcesContent":["import React, { createContext, ReactNode, useContext } from 'react';\nimport Form from './Form';\nimport { Values } from './types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst FormContext = createContext<any>(null);\n\nexport interface FormProviderProps<TValues extends Values> {\n form: Form<TValues>;\n children?: ReactNode;\n}\n\n// eslint-disable-next-line react/function-component-definition\nexport function FormProvider<TValues extends Values>({\n form,\n children,\n}: FormProviderProps<TValues>) {\n return <FormContext.Provider value={form}>{children}</FormContext.Provider>;\n}\n\nfunction useFormContext<T>() {\n return useContext<T>(FormContext);\n}\n\nexport default useFormContext;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAaC,UAAU,QAAQ,OAAO;AAInE;AACA,MAAMC,WAAW,gBAAGF,aAAa,CAAM,IAAI,CAAC;AAO5C;AACA,OAAO,SAASG,YAAY,CAAyB;EACnDC,IAAI;EACJC;AAC0B,CAAC,EAAE;EAC7B,oBAAO,oBAAC,WAAW,CAAC,QAAQ;IAAC,KAAK,EAAED;EAAK,GAAEC,QAAQ,CAAwB;AAC7E;AAEA,SAASC,cAAc,GAAM;EAC3B,OAAOL,UAAU,CAAIC,WAAW,CAAC;AACnC;AAEA,eAAeI,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"path.js","names":["isObjectOrArray","value","split","path","groups","match","get","data","Object","hasOwn","undefined","key","nextPath","set"],"sources":["../../../src/utils/path.ts"],"sourcesContent":["import { StringMap } from '../types';\n\n/* eslint-disable @typescript-eslint/no-explicit-any,no-param-reassign */\n\nexport const isObjectOrArray = (value: any): value is object =>\n typeof value === 'object' && value !== null;\n\nconst split = (path: string) => {\n const groups = path.match(/^([^.]*)\\.(.*)$/);\n return groups ? [groups[1], groups[2]] : null;\n};\n\nexport const get = (data: StringMap, path: string): any => {\n if (Object.hasOwn(data, path)) {\n return data[path];\n }\n\n const groups = split(path);\n if (!groups) return undefined;\n\n const [key, nextPath] = groups;\n if (!Object.hasOwn(data, key)) return undefined;\n if (!isObjectOrArray(data[key])) return undefined;\n\n return get(data[key], nextPath);\n};\n\nexport const set = (data: StringMap, path: string, value: any): boolean => {\n if (Object.hasOwn(data, path)) {\n data[path] = value;\n return true;\n }\n\n const groups = split(path);\n if (!groups) return false;\n\n const [key, nextPath] = groups;\n if (!Object.hasOwn(data, key)) return false;\n if (!isObjectOrArray(data[key])) return false;\n\n return set(data[key], nextPath, value);\n};\n"],"mappings":"AAEA;;AAEA,OAAO,MAAMA,eAAe,GAAIC,KAAU,IACxC,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI;AAE7C,MAAMC,KAAK,GAAIC,IAAY,IAAK;EAC9B,MAAMC,MAAM,GAAGD,IAAI,CAACE,KAAK,CAAC,iBAAiB,CAAC;EAC5C,OAAOD,MAAM,GAAG,CAACA,MAAM,CAAC,CAAC,CAAC,EAAEA,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;AAC/C,CAAC;AAED,OAAO,MAAME,GAAG,GAAG,CAACC,IAAe,EAAEJ,IAAY,KAAU;EACzD,IAAIK,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEJ,IAAI,CAAC,EAAE;IAC7B,OAAOI,IAAI,CAACJ,IAAI,CAAC;EACnB;EAEA,MAAMC,MAAM,GAAGF,KAAK,CAACC,IAAI,CAAC;EAC1B,IAAI,CAACC,MAAM,EAAE,OAAOM,SAAS;EAE7B,MAAM,CAACC,GAAG,EAAEC,QAAQ,CAAC,GAAGR,MAAM;EAC9B,IAAI,CAACI,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEI,GAAG,CAAC,EAAE,OAAOD,SAAS;EAC/C,IAAI,CAACV,eAAe,CAACO,IAAI,CAACI,GAAG,CAAC,CAAC,EAAE,OAAOD,SAAS;EAEjD,OAAOJ,GAAG,CAACC,IAAI,CAACI,GAAG,CAAC,EAAEC,QAAQ,CAAC;AACjC,CAAC;AAED,OAAO,MAAMC,GAAG,GAAG,CAACN,IAAe,EAAEJ,IAAY,EAAEF,KAAU,KAAc;EACzE,IAAIO,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEJ,IAAI,CAAC,EAAE;IAC7BI,IAAI,CAACJ,IAAI,CAAC,GAAGF,KAAK;IAClB,OAAO,IAAI;EACb;EAEA,MAAMG,MAAM,GAAGF,KAAK,CAACC,IAAI,CAAC;EAC1B,IAAI,CAACC,MAAM,EAAE,OAAO,KAAK;EAEzB,MAAM,CAACO,GAAG,EAAEC,QAAQ,CAAC,GAAGR,MAAM;EAC9B,IAAI,CAACI,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEI,GAAG,CAAC,EAAE,OAAO,KAAK;EAC3C,IAAI,CAACX,eAAe,CAACO,IAAI,CAACI,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK;EAE7C,OAAOE,GAAG,CAACN,IAAI,CAACI,GAAG,CAAC,EAAEC,QAAQ,EAAEX,KAAK,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"path.js","names":["isObjectOrArray","value","split","path","groups","match","get","data","Object","hasOwn","undefined","key","nextPath","set"],"sources":["../../../src/utils/path.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any,no-param-reassign */\n\nexport const isObjectOrArray = (value: any): value is object =>\n typeof value === 'object' && value !== null;\n\nconst split = (path: string) => {\n const groups = path.match(/^([^.]*)\\.(.*)$/);\n return groups ? [groups[1], groups[2]] : null;\n};\n\nexport const get = (data: Record<string, any>, path: string): any => {\n if (Object.hasOwn(data, path)) {\n return data[path];\n }\n\n const groups = split(path);\n if (!groups) return undefined;\n\n const [key, nextPath] = groups;\n if (!Object.hasOwn(data, key)) return undefined;\n if (!isObjectOrArray(data[key])) return undefined;\n\n return get(data[key], nextPath);\n};\n\nexport const set = (\n data: Record<string, any>,\n path: string,\n value: any\n): boolean => {\n if (Object.hasOwn(data, path)) {\n data[path] = value;\n return true;\n }\n\n const groups = split(path);\n if (!groups) return false;\n\n const [key, nextPath] = groups;\n if (!Object.hasOwn(data, key)) return false;\n if (!isObjectOrArray(data[key])) return false;\n\n return set(data[key], nextPath, value);\n};\n"],"mappings":"AAAA;;AAEA,OAAO,MAAMA,eAAe,GAAIC,KAAU,IACxC,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI;AAE7C,MAAMC,KAAK,GAAIC,IAAY,IAAK;EAC9B,MAAMC,MAAM,GAAGD,IAAI,CAACE,KAAK,CAAC,iBAAiB,CAAC;EAC5C,OAAOD,MAAM,GAAG,CAACA,MAAM,CAAC,CAAC,CAAC,EAAEA,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;AAC/C,CAAC;AAED,OAAO,MAAME,GAAG,GAAG,CAACC,IAAyB,EAAEJ,IAAY,KAAU;EACnE,IAAIK,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEJ,IAAI,CAAC,EAAE;IAC7B,OAAOI,IAAI,CAACJ,IAAI,CAAC;EACnB;EAEA,MAAMC,MAAM,GAAGF,KAAK,CAACC,IAAI,CAAC;EAC1B,IAAI,CAACC,MAAM,EAAE,OAAOM,SAAS;EAE7B,MAAM,CAACC,GAAG,EAAEC,QAAQ,CAAC,GAAGR,MAAM;EAC9B,IAAI,CAACI,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEI,GAAG,CAAC,EAAE,OAAOD,SAAS;EAC/C,IAAI,CAACV,eAAe,CAACO,IAAI,CAACI,GAAG,CAAC,CAAC,EAAE,OAAOD,SAAS;EAEjD,OAAOJ,GAAG,CAACC,IAAI,CAACI,GAAG,CAAC,EAAEC,QAAQ,CAAC;AACjC,CAAC;AAED,OAAO,MAAMC,GAAG,GAAG,CACjBN,IAAyB,EACzBJ,IAAY,EACZF,KAAU,KACE;EACZ,IAAIO,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEJ,IAAI,CAAC,EAAE;IAC7BI,IAAI,CAACJ,IAAI,CAAC,GAAGF,KAAK;IAClB,OAAO,IAAI;EACb;EAEA,MAAMG,MAAM,GAAGF,KAAK,CAACC,IAAI,CAAC;EAC1B,IAAI,CAACC,MAAM,EAAE,OAAO,KAAK;EAEzB,MAAM,CAACO,GAAG,EAAEC,QAAQ,CAAC,GAAGR,MAAM;EAC9B,IAAI,CAACI,MAAM,CAACC,MAAM,CAACF,IAAI,EAAEI,GAAG,CAAC,EAAE,OAAO,KAAK;EAC3C,IAAI,CAACX,eAAe,CAACO,IAAI,CAACI,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK;EAE7C,OAAOE,GAAG,CAACN,IAAI,CAACI,GAAG,CAAC,EAAEC,QAAQ,EAAEX,KAAK,CAAC;AACxC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import ErrorObserverManager from './ErrorObserverManager';
2
- import { StringMap } from './types';
3
- declare class ErrorData<TErrors extends StringMap<string | undefined>, TName extends keyof TErrors = keyof TErrors> extends ErrorObserverManager<TErrors> {
2
+ import { Errors } from './types';
3
+ declare class ErrorData<TErrors extends Errors, TName extends keyof TErrors = keyof TErrors> extends ErrorObserverManager<TErrors> {
4
4
  private readonly errors;
5
5
  constructor(errors: TErrors);
6
6
  get<T extends TName>(name: T): TErrors[T];
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorData.d.ts","sourceRoot":"","sources":["../../src/ErrorData.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,cAAM,SAAS,CACb,OAAO,SAAS,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAC7C,KAAK,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,CAC3C,SAAQ,oBAAoB,CAAC,OAAO,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAEd,MAAM,EAAE,OAAO;IAK3B,GAAG,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzC,MAAM,IAAI,OAAO;IAIjB,GAAG,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;CAI9D;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"ErrorData.d.ts","sourceRoot":"","sources":["../../src/ErrorData.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,cAAM,SAAS,CACb,OAAO,SAAS,MAAM,EACtB,KAAK,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,CAC3C,SAAQ,oBAAoB,CAAC,OAAO,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAEd,MAAM,EAAE,OAAO;IAK3B,GAAG,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzC,MAAM,IAAI,OAAO;IAIjB,GAAG,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;CAI9D;AAED,eAAe,SAAS,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import BroadcastObserverManager from './BroadcastObserverManager';
2
- import { Observer, StringMap, Subscription } from './types';
2
+ import { Errors, Observer, Subscription } from './types';
3
3
  export type ErrorObserver = Observer<string | undefined>;
4
- declare class ErrorObserverManager<TErrors extends StringMap<string | undefined>, TName extends keyof TErrors = keyof TErrors> extends BroadcastObserverManager<TName, string | undefined> {
4
+ declare class ErrorObserverManager<TErrors extends Errors, TName extends keyof TErrors = keyof TErrors> extends BroadcastObserverManager<TName, string | undefined> {
5
5
  private readonly observers;
6
6
  constructor();
7
7
  private getObservers;
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorObserverManager.d.ts","sourceRoot":"","sources":["../../src/ErrorObserverManager.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5D,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAEzD,cAAM,oBAAoB,CACxB,OAAO,SAAS,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAC7C,KAAK,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,CAC3C,SAAQ,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAExB;;IAOF,OAAO,CAAC,YAAY;IAKb,SAAS,CAAC,CAAC,SAAS,KAAK,EAC9B,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,aAAa,GACtB,YAAY;IAMf,SAAS,CAAC,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS;CAI5E;AAED,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"ErrorObserverManager.d.ts","sourceRoot":"","sources":["../../src/ErrorObserverManager.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGzD,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAEzD,cAAM,oBAAoB,CACxB,OAAO,SAAS,MAAM,EACtB,KAAK,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,CAC3C,SAAQ,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAExB;;IAOF,OAAO,CAAC,YAAY;IAKb,SAAS,CAAC,CAAC,SAAS,KAAK,EAC9B,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,aAAa,GACtB,YAAY;IAMf,SAAS,CAAC,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS;CAI5E;AAED,eAAe,oBAAoB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import ErrorData from './ErrorData';
2
- import { Errors, StringMap } from './types';
2
+ import { Errors, Values } from './types';
3
3
  import ValueData from './ValueData';
4
- declare class Form<TValues extends StringMap = StringMap, TErrors extends Errors<TValues> = Errors<TValues>> {
4
+ declare class Form<TValues extends Values = Values, TErrors extends Errors<TValues> = Errors<TValues>> {
5
5
  initValues: TValues;
6
6
  readonly values: ValueData<TValues>;
7
7
  readonly errors: ErrorData<TErrors>;
@@ -1 +1 @@
1
- {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../src/Form.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,MAAM,EAAQ,SAAS,EAAE,MAAM,SAAS,CAAC;AAElD,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,cAAM,IAAI,CACR,OAAO,SAAS,SAAS,GAAG,SAAS,EACrC,OAAO,SAAS,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IAE1C,UAAU,EAAE,OAAO,CAAC;IAE3B,SAAgB,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAE3C,SAAgB,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;gBAExB,UAAU,EAAE,OAAO;IAM/B,KAAK;CAcb;AAED,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../src/Form.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,MAAM,EAAQ,MAAM,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,cAAM,IAAI,CACR,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/B,OAAO,SAAS,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IAE1C,UAAU,EAAE,OAAO,CAAC;IAE3B,SAAgB,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAE3C,SAAgB,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;gBAExB,UAAU,EAAE,OAAO;IAM/B,KAAK;CAcb;AAED,eAAe,IAAI,CAAC"}
@@ -1,6 +1,6 @@
1
- import { PathReturn, Path, StringMap } from './types';
1
+ import { PathReturn, Path, Values } from './types';
2
2
  import ValueObserverManager from './ValueObserverManager';
3
- declare class ValueData<TValues extends StringMap, TName extends Path<TValues> = Path<TValues>> extends ValueObserverManager<TValues> {
3
+ declare class ValueData<TValues extends Values, TName extends Path<TValues> = Path<TValues>> extends ValueObserverManager<TValues> {
4
4
  private readonly values;
5
5
  constructor(values: TValues);
6
6
  get<T extends TName>(name: T): PathReturn<TValues, T>;
@@ -1 +1 @@
1
- {"version":3,"file":"ValueData.d.ts","sourceRoot":"","sources":["../../src/ValueData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEtD,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,cAAM,SAAS,CACb,OAAO,SAAS,SAAS,EACzB,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAC3C,SAAQ,oBAAoB,CAAC,OAAO,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAEd,MAAM,EAAE,OAAO;IAK3B,GAAG,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAIrD,MAAM,IAAI,OAAO;IAIjB,GAAG,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI;CAI1E;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"ValueData.d.ts","sourceRoot":"","sources":["../../src/ValueData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,cAAM,SAAS,CACb,OAAO,SAAS,MAAM,EACtB,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAC3C,SAAQ,oBAAoB,CAAC,OAAO,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAEd,MAAM,EAAE,OAAO;IAK3B,GAAG,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAIrD,MAAM,IAAI,OAAO;IAIjB,GAAG,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI;CAI1E;AAED,eAAe,SAAS,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import BroadcastObserverManager from './BroadcastObserverManager';
2
- import { Observer, PathReturn, Path, StringMap, Subscription } from './types';
3
- declare class ValueObserverManager<TValues extends StringMap, TName extends Path<TValues> = Path<TValues>> extends BroadcastObserverManager<TName, TValues[TName]> {
2
+ import { Observer, PathReturn, Path, Values, Subscription } from './types';
3
+ declare class ValueObserverManager<TValues extends Values, TName extends Path<TValues> = Path<TValues>> extends BroadcastObserverManager<TName, TValues[TName]> {
4
4
  private readonly root;
5
5
  constructor();
6
6
  private findNode;
@@ -1 +1 @@
1
- {"version":3,"file":"ValueObserverManager.d.ts","sourceRoot":"","sources":["../../src/ValueObserverManager.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK9E,cAAM,oBAAoB,CACxB,OAAO,SAAS,SAAS,EACzB,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAC3C,SAAQ,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;;IAO5B,OAAO,CAAC,QAAQ;IAST,SAAS,CAAC,CAAC,SAAS,KAAK,EAC9B,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GACzC,YAAY;IAcf,SAAS,CAAC,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAKtE,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,kBAAkB;CAQ3B;AAED,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"ValueObserverManager.d.ts","sourceRoot":"","sources":["../../src/ValueObserverManager.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK3E,cAAM,oBAAoB,CACxB,OAAO,SAAS,MAAM,EACtB,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAC3C,SAAQ,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;;IAO5B,OAAO,CAAC,QAAQ;IAST,SAAS,CAAC,CAAC,SAAS,KAAK,EAC9B,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GACzC,YAAY;IAcf,SAAS,CAAC,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAKtE,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,kBAAkB;CAQ3B;AAED,eAAe,oBAAoB,CAAC"}