{"version":3,"file":"debounce.mjs","names":["abort: Nullable<() => void>","timeout: Nullable<NodeJS.Timeout>"],"sources":["../../src/exports/debounce.ts"],"sourcesContent":["import { CB, isPromise, Nullable } from 'vest-utils';\nimport { Isolate, TIsolate, IsolateSelectors } from 'vestjs-runtime';\n\nimport { SuiteContext } from '../core/context/SuiteContext';\nimport { TIsolateTest } from '../core/isolate/IsolateTest/IsolateTest';\nimport { getTestFromAbortSignal } from '../core/test/Abortable';\nimport { TestFn, TestFnPayload } from '../core/test/TestTypes';\nimport { registerReconciler } from '../vest';\n\nconst isolateType = 'Debounce';\n\nexport default function debounce<Callback extends CB = CB>(\n  callback: Callback,\n  delay: number = 0,\n): TestFn {\n  let abort: Nullable<() => void> = null;\n  let timeout: Nullable<NodeJS.Timeout> = null;\n\n  const f = () => (payload: TestFnPayload) => {\n    const currentTest =\n      getTestFromAbortSignal(payload?.signal) ??\n      (SuiteContext.useX().currentTest as TIsolateTest | undefined);\n\n    return new Promise((resolve, reject) => {\n      abort = () => {\n        if (timeout) {\n          clearTimeout(timeout);\n        }\n        resolve(undefined);\n      };\n\n      timeout = setTimeout(() => {\n        let res = false;\n        try {\n          res = SuiteContext.run(\n            {\n              currentTest,\n            },\n            () => callback(payload),\n          );\n        } catch (e) {\n          return reject(e);\n        }\n\n        if (res === false) {\n          return reject();\n        }\n\n        return isPromise(res) ? res.then(resolve, reject) : resolve(res);\n      }, delay);\n    });\n  };\n\n  const i = Isolate.create<IsolateDebouncePayload>(isolateType, f, {\n    abort: () => {\n      if (abort) {\n        abort();\n      }\n    },\n  });\n\n  return i.output;\n}\n\nclass IsolateDebounceReconciler {\n  static match(currentNode: TIsolate, historyNode: TIsolate): boolean {\n    return (\n      IsolateSelectors.isIsolateType(currentNode, isolateType) &&\n      IsolateSelectors.isIsolateType(historyNode, isolateType)\n    );\n  }\n\n  static reconcile(current: TIsolateDebounce, history: TIsolateDebounce) {\n    history?.data?.abort?.();\n\n    return current;\n  }\n}\n\ntype TIsolateDebounce = TIsolate<IsolateDebouncePayload>;\n\ntype IsolateDebouncePayload = {\n  abort: () => void;\n};\n\nregisterReconciler(IsolateDebounceReconciler);\n"],"mappings":";;;;;;AASA,MAAM,cAAc;AAEpB,SAAwB,SACtB,UACA,QAAgB,GACR;CACR,IAAIA,QAA8B;CAClC,IAAIC,UAAoC;CAExC,MAAM,WAAW,YAA2B;EAC1C,MAAM,cACJ,uBAAuB,SAAS,OAAO,IACtC,aAAa,MAAM,CAAC;AAEvB,SAAO,IAAI,SAAS,SAAS,WAAW;AACtC,iBAAc;AACZ,QAAI,QACF,cAAa,QAAQ;AAEvB,YAAQ,OAAU;;AAGpB,aAAU,iBAAiB;IACzB,IAAI,MAAM;AACV,QAAI;AACF,WAAM,aAAa,IACjB,EACE,aACD,QACK,SAAS,QAAQ,CACxB;aACM,GAAG;AACV,YAAO,OAAO,EAAE;;AAGlB,QAAI,QAAQ,MACV,QAAO,QAAQ;AAGjB,WAAO,UAAU,IAAI,GAAG,IAAI,KAAK,SAAS,OAAO,GAAG,QAAQ,IAAI;MAC/D,MAAM;IACT;;AAWJ,QARU,QAAQ,OAA+B,aAAa,GAAG,EAC/D,aAAa;AACX,MAAI,MACF,QAAO;IAGZ,CAAC,CAEO;;AAGX,IAAM,4BAAN,MAAgC;CAC9B,OAAO,MAAM,aAAuB,aAAgC;AAClE,SACE,iBAAiB,cAAc,aAAa,YAAY,IACxD,iBAAiB,cAAc,aAAa,YAAY;;CAI5D,OAAO,UAAU,SAA2B,SAA2B;AACrE,WAAS,MAAM,SAAS;AAExB,SAAO;;;AAUX,mBAAmB,0BAA0B"}