importedPaths

tcmts.cli.main.importedPaths · #mvgumwuw · term · runs on the server

uses tcmts.core.ts.parse, which uses tcmts.core.ts.compiler, which uses process

The codebase paths a scratch file imports (from #codebase/a/b: a.b.<name>).

import { joinName } from "#codebase/tcmts/cli/mirror";
import { parse } from "#codebase/tcmts/core/ts";
import {
  isImportDeclaration as ts_isImportDeclaration, isNamespaceImport as ts_isNamespaceImport,
  isStringLiteral as ts_isStringLiteral,
} from "typescript/ast";

export function importedPaths(file: string, text: string): string[] {
  const out: string[] = [];
  for (const st of parse(file, text).statements) {
    if (!ts_isImportDeclaration(st) || !st.importClause || !ts_isStringLiteral(st.moduleSpecifier)) continue;
    const m = /^#codebase(?:\/(.+))?$/.exec(st.moduleSpecifier.text);
    const b = st.importClause.namedBindings;
    if (!m || !b || ts_isNamespaceImport(b)) continue;
    const ns = (m[1] ?? "").split("/").filter(Boolean).join(".");
    for (const e of b.elements) out.push(joinName(ns, (e.propertyName ?? e.name).text));
  }
  return out;
}

uses

used by