shareCache

tcmts.share.shareCache · #bbgqym3s · term · runs on the server

uses tcmts.cli.placement.Placement, which uses node:path

import type { Codebase } from "#codebase/tcmts/cli/codebase";
import { Placement } from "#codebase/tcmts/cli/placement";
import { NameTrees } from "#codebase/tcmts/share";
import type { ShareCache } from "#codebase/tcmts/share";

export function shareCache(): ShareCache {
  let at = "";
  let kept = new Map<string, unknown>();
  let trees: NameTrees | undefined;
  const cache: ShareCache = {
    atHead<T>(cb: Codebase, key: string, make: () => T): T {
      const head = `${cb.store.branch().id} ${cb.store.head()}`;
      if (head !== at) {
        at = head;
        kept = new Map();
      }
      if (!kept.has(key)) kept.set(key, make());
      return kept.get(key) as T;
    },
    placement: (cb) => cache.atHead(cb, "placement", () => new Placement(cb)),
    trees: (cb) => (trees ??= new NameTrees(cb.store)),
    entries: new Map(),
    releases: new Map(),
  };
  return cache;
}

uses

used by