INNER CODE UNIT · TypeScript

joinCleanups

isographlabs/isograph · libs/isograph-disposable-types/src/index.ts:9

export function joinCleanups<
  const T extends readonly ItemCleanupPair<unknown>[],
>(...pairs: T): ItemCleanupPair<ItemsOf<T>> {
  const items = pairs.map(([item]) => item) as ItemsOf<T>;
  const dispose: CleanupFn = () => {
    let error: unknown;
    pairs.reduceRight((_, [, cleanup]) => {
      try {
        cleanup();
      } catch (e) {
        error ??= e;
      }
      return undefined;
    }, undefined);
    if (error !== undefined) {
      throw error;
    }
  };

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…