UNPKG

seitu

Version:
26 lines (25 loc) • 1.03 kB
import { createReadableSubscription, createSubscription } from "../subscription/index.mjs"; //#region src/core/computed/index.ts function createComputed(source, transform) { const sources = Array.isArray(source) ? source : [source]; const isSingle = !Array.isArray(source); const { subscribe, notify } = createSubscription({ onFirstSubscribe() { const unsubscribes = sources.map((s) => s.subscribe(() => notify())); return () => unsubscribes.forEach((u) => u()); } }); const evaluate = (values) => transform(isSingle ? values[0] : values); let lastInputs; let lastOutput; const get = () => { const inputs = sources.map((s) => s.get()); if (!lastInputs || lastInputs.some((v, i) => v !== inputs[i])) { lastOutput = evaluate(inputs); lastInputs = inputs; } return lastOutput; }; const getServer = sources.every((s) => s.getServer) ? () => evaluate(sources.map((s) => s.getServer())) : void 0; return createReadableSubscription(get, subscribe, notify, getServer); } //#endregion export { createComputed };