/** * Parses all the paths of the typescript `import` statements from content * @param path the current path of the file * @param content the file content * @returns the list of import paths */ export function parseImports(path: string, content: string): string[] { const out: string[] = []; const importRE = /^import\s[^'"]*(['"])([./\w]*)(\1);/gm; let importMatch: RegExpMatchArray | null; while ((importMatch = importRE.exec(content))) { const importPath = importMatch[2].replace(`'`, '').replace(`"`, ''); out.push(joinPath(path, importPath)); } return out; } function joinPath(a: string, b: string): string { const aParts = a.split('/'); const bParts = b.split('/'); aParts.pop(); // remove file let bStart = 0; while (aParts.length > 0) { switch (bParts[bStart]) { case '.': bStart++; continue; case '..': aParts.pop(); bStart++; continue; } break; } return [...aParts, ...bParts.slice(bStart)].join('/'); }