isInstantiated

tcmts.core.extract.isInstantiated · #x7eeoqz7 · term · runs anywhere

Whether a namespace produces a runtime value (anything but types inside).

import { isTypeOnlyImport } from "#codebase/tcmts/core/ts";
import {
  isImportDeclaration as ts_isImportDeclaration, isInterfaceDeclaration as ts_isInterfaceDeclaration,
  isModuleBlock as ts_isModuleBlock, isModuleDeclaration as ts_isModuleDeclaration,
  isTypeAliasDeclaration as ts_isTypeAliasDeclaration,
} from "typescript/ast";
import type { ModuleDeclaration as ts_ModuleDeclaration } from "typescript/ast";

export function isInstantiated(ns: ts_ModuleDeclaration): boolean {
  const body = ns.body;
  if (!body || !ts_isModuleBlock(body)) return false;
  return body.statements.some(
    (s) =>
      !ts_isTypeAliasDeclaration(s) &&
      !ts_isInterfaceDeclaration(s) &&
      !(ts_isImportDeclaration(s) && isTypeOnlyImport(s.importClause)) &&
      !(ts_isModuleDeclaration(s) && !isInstantiated(s)),
  );
}

uses

used by