importedPaths
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; }