deno_graph 0.108.1

Module graph analysis for deno
Documentation
// Copyright 2018-2024 the Deno authors. MIT license.

use deno_ast::swc::ast::Id;
use deno_ast::swc::ast::TsEntityName;
use deno_ast::swc::ast::TsQualifiedName;

pub fn ts_entity_name_to_parts(
  entity_name: &TsEntityName,
) -> (Id, Vec<String>) {
  match entity_name {
    TsEntityName::TsQualifiedName(qualified_name) => {
      ts_qualified_name_parts(qualified_name)
    }
    TsEntityName::Ident(ident) => (ident.to_id(), Vec::new()),
  }
}

pub fn ts_qualified_name_parts(
  mut qualified_name: &TsQualifiedName,
) -> (Id, Vec<String>) {
  let mut parts = Vec::new();
  loop {
    parts.push(qualified_name.right.sym.to_string());
    match &qualified_name.left {
      TsEntityName::TsQualifiedName(n) => {
        qualified_name = n;
      }
      TsEntityName::Ident(n) => {
        parts.reverse();
        return (n.to_id(), parts);
      }
    }
  }
}