UNPKG

@adyen/adyen-platform-experience-web

Version:

![Platform Experience header](https://github.com/Adyen/adyen-platform-experience-web/assets/7926613/18094965-9e01-450e-8dc9-ea84e6b22c2b)

57 lines (56 loc) 2.29 kB
import { INTERNAL_EVT_SESSION_DEADLINE as v } from "./constants.js"; import { createAbortable as y } from "../../../async/abortable/main.js"; import { createEventEmitter as A } from "../../../reactive/eventEmitter/main.js"; import { createPromisor as g } from "../../../async/promisor/main.js"; import { parseDate as S } from "../../../../utils/datetime/main.js"; import { isAbortSignal as D, abortSignalForAny as I, abortedSignal as N } from "../../../../utils/abort/main.js"; import { clock as w } from "../../../time/clock/main.js"; import { isWatchlistUnsubscribeToken as F } from "../../../reactive/watchlist/main.js"; import { struct as L } from "../../../../utils/struct/main.js"; import { getter as u, enumerable as c } from "../../../../utils/struct/property.js"; import { tryResolve as T } from "../../../../utils/async/main.js"; import { noop as k } from "../../../../utils/common.js"; import { isFunction as P } from "../../../../utils/value/is.js"; const O = (R, b) => { let r, i = 1 / 0, p, o; const n = y(), _ = A(), m = () => { r == null || r.removeEventListener("abort", m), i = 1 / 0, o == null || o(), n.refresh(), _.emit(v); }, E = g(async (t, a) => { p = t; const f = await T(() => { const e = b.deadline; return P(e) ? e.call(b, a, t) : e; }).catch(k); if (p !== t) return; const d = (Array.isArray(f) ? f : [f]).filter((e) => e || e === 0); if (d.length > 0) { let e = !1, s = /* @__PURE__ */ new Set(); for (const l of d) if (D(l)) { if (e = l.aborted) break; s.add(l); } else if (i = Math.min(i, S(l) ?? 1 / 0), e = i <= Date.now()) break; e || (e = s.size < 1 && !Number.isFinite(i)), e ? r ?? (r = N()) : (r = I([...s, n.signal]), r.addEventListener("abort", m), h()), d.length = 0, s.clear(); } else r = void 0; }), h = () => { if (!Number.isFinite(i)) return; let t = w.subscribe((a) => { if (F(a)) return m(); a.now >= i && n.abort(); }); o = () => { t == null || t(), t = o = void 0; }; }; return L({ elapse: c(n.abort), elapsed: u(() => r && r.aborted), on: c(_.on), refresh: c(E.bind(void 0)), signal: u(() => n.signal) }); }; export { O as createSessionDeadline, O as default };