usesPackages

tcmts.cli.kept.usesPackages · #z4z32w2n · term · runs anywhere

Whether a component's code, or anything it uses, imports an npm package (or anything else that isn't Node's or the codebase's) not known to be pure: pure says which are, from the package's code (isPureExport); without it, none is.

import { packaged } from "#codebase/tcmts/cli/kept";
import type { DefSource } from "#codebase/tcmts/loader";

export function usesPackages(
  src: DefSource,
  comp: string,
  pure: (ref: string) => boolean = () => false,
): boolean {
  const known = packaged.get(comp);
  if (known !== undefined) return known;
  packaged.set(comp, false);
  let uses = false;
  for (const m of src.members(comp)) {
    for (const d of m.deps) {
      if (d.pos !== "value") continue;
      if (!d.ref.startsWith("#")) uses ||= !d.ref.startsWith("node:") && !pure(d.ref);
      else {
        const dep = src.get(d.ref.slice(1));
        if (dep && dep.componentHash !== comp) uses ||= usesPackages(src, dep.componentHash, pure);
      }
      if (uses) break;
    }
    if (uses) break;
  }
  packaged.set(comp, uses);
  return uses;
}

uses

used by