{"version":3,"file":"ngxtension-reactive-on.mjs","sources":["../../../../libs/ngxtension/reactive-on/src/on.ts","../../../../libs/ngxtension/reactive-on/src/ngxtension-reactive-on.ts"],"sourcesContent":["import { EffectCleanupRegisterFn, Signal, untracked } from '@angular/core';\n\nexport type Accessor<T> = Signal<T> | (() => T);\n\n/**\n * Makes dependencies of a computation explicit\n\n * @param deps list of reactive dependencies or a single reactive dependency\n * @param fn computation on input; the current previous content(s) of input and the previous value are given as arguments and it returns a new value\n * @returns an effect function that is passed into `effect`. For example:\n *\n * ```typescript\n * effect(on(a, (v) => console.log(v, b())));\n *\n * // is equivalent to:\n * effect(() => {\n *   const v = a();\n *   untracked(() => console.log(v, b()));\n * });\n * ```\n */\nexport function on<\n\tconst Deps extends readonly Accessor<unknown>[],\n\tU,\n\tV = U | undefined,\n>(\n\tdeps: readonly [...Deps],\n\tfn: (\n\t\tinput: {\n\t\t\t-readonly [K in keyof Deps]: Deps[K] extends Accessor<infer T>\n\t\t\t\t? T\n\t\t\t\t: never;\n\t\t},\n\t\tprevInput:\n\t\t\t| {\n\t\t\t\t\t-readonly [K in keyof Deps]: Deps[K] extends Accessor<infer T>\n\t\t\t\t\t\t? T\n\t\t\t\t\t\t: never;\n\t\t\t  }\n\t\t\t| undefined,\n\t\tprevValue: V | undefined,\n\t\tcleanupFn: EffectCleanupRegisterFn,\n\t) => U,\n\toptions?: { defer?: boolean },\n): (onCleanup: EffectCleanupRegisterFn) => void;\n\nexport function on<\n\tconst Deps extends Record<string, Accessor<unknown>>,\n\tU,\n\tV = U | undefined,\n>(\n\tdeps: Deps,\n\tfn: (\n\t\tinput: { [K in keyof Deps]: Deps[K] extends Accessor<infer T> ? T : never },\n\t\tprevInput:\n\t\t\t| { [K in keyof Deps]: Deps[K] extends Accessor<infer T> ? T : never }\n\t\t\t| undefined,\n\t\tprevValue: V | undefined,\n\t\tcleanupFn: EffectCleanupRegisterFn,\n\t) => U,\n\toptions?: { defer?: boolean },\n): (onCleanup: EffectCleanupRegisterFn) => void;\n\nexport function on<S, U, V = U | undefined>(\n\tdeps: Accessor<S>,\n\tfn: (\n\t\tinput: S,\n\t\tprevInput: S | undefined,\n\t\tprevValue: V | undefined,\n\t\tcleanupFn: EffectCleanupRegisterFn,\n\t) => U,\n\toptions?: { defer?: boolean },\n): (onCleanup: EffectCleanupRegisterFn) => void;\n\nexport function on(\n\tdeps:\n\t\t| Accessor<unknown>\n\t\t| readonly Accessor<unknown>[]\n\t\t| Record<string, Accessor<unknown>>,\n\tfn: (\n\t\tinput: any,\n\t\tprevInput: any,\n\t\tprevValue: any,\n\t\tcleanupFn: EffectCleanupRegisterFn,\n\t) => any,\n\toptions?: { defer?: boolean },\n): (onCleanup: EffectCleanupRegisterFn) => void {\n\tconst isArray = Array.isArray(deps);\n\tconst isAccessor = typeof deps === 'function';\n\tlet prevInput: unknown;\n\tlet prevValue: unknown;\n\tlet defer = options && options.defer;\n\n\treturn (onCleanup: EffectCleanupRegisterFn) => {\n\t\tlet input: unknown;\n\n\t\tif (isArray) {\n\t\t\tinput = (deps as readonly Accessor<unknown>[]).map((d) => d());\n\t\t} else if (isAccessor) {\n\t\t\tinput = (deps as Accessor<unknown>)();\n\t\t} else {\n\t\t\t// Object\n\t\t\tinput = Object.keys(deps).reduce(\n\t\t\t\t(acc, key) => {\n\t\t\t\t\tacc[key] = (deps as Record<string, Accessor<unknown>>)[key]();\n\t\t\t\t\treturn acc;\n\t\t\t\t},\n\t\t\t\t{} as Record<string, unknown>,\n\t\t\t);\n\t\t}\n\n\t\tif (defer) {\n\t\t\tdefer = false;\n\t\t\treturn;\n\t\t}\n\n\t\tuntracked(() => {\n\t\t\tprevValue = fn(input, prevInput, prevValue, onCleanup);\n\t\t\tprevInput = input;\n\t\t});\n\t};\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;SA0EgB,EAAE,CACjB,IAGoC,EACpC,EAKQ,EACR,OAA6B,EAAA;IAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACpC,IAAA,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,UAAU,CAAC;AAC9C,IAAA,IAAI,SAAkB,CAAC;AACvB,IAAA,IAAI,SAAkB,CAAC;AACvB,IAAA,IAAI,KAAK,GAAG,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;IAErC,OAAO,CAAC,SAAkC,KAAI;AAC7C,QAAA,IAAI,KAAc,CAAC;QAEnB,IAAI,OAAO,EAAE;AACZ,YAAA,KAAK,GAAI,IAAqC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SAC/D;aAAM,IAAI,UAAU,EAAE;YACtB,KAAK,GAAI,IAA0B,EAAE,CAAC;SACtC;aAAM;;AAEN,YAAA,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAC/B,CAAC,GAAG,EAAE,GAAG,KAAI;gBACZ,GAAG,CAAC,GAAG,CAAC,GAAI,IAA0C,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9D,gBAAA,OAAO,GAAG,CAAC;aACX,EACD,EAA6B,CAC7B,CAAC;SACF;QAED,IAAI,KAAK,EAAE;YACV,KAAK,GAAG,KAAK,CAAC;YACd,OAAO;SACP;QAED,SAAS,CAAC,MAAK;YACd,SAAS,GAAG,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YACvD,SAAS,GAAG,KAAK,CAAC;AACnB,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC;AACH;;ACzHA;;AAEG;;;;"}