function analyzeTypeName()

in src/module-utils.ts [96:115]


function analyzeTypeName(type: reflect.Type): TypeNameParts {
  // Need to divide the namespace into submodule and non-submodule

  // For type 'asm.b.c.d.Type' contains ['asm', 'b', 'c', 'd']
  const nsParts = type.fqn.split('.').slice(0, -1);

  const moduleFqns = new Set(type.assembly.allSubmodules.map((s) => s.fqn));

  let split = nsParts.length;
  while (split > 1 && !moduleFqns.has(nsParts.slice(0, split).join('.'))) {
    split--;
  }

  return {
    assemblyName: type.assembly.name,
    submoduleNameParts: nsParts.slice(1, split),
    namespaceNameParts: nsParts.slice(split, nsParts.length),
    simpleName: type.name,
  };
}