diff options
Diffstat (limited to 'dom/webgpu/tests/cts/checkout/src/common/util/parse_imports.ts')
-rw-r--r-- | dom/webgpu/tests/cts/checkout/src/common/util/parse_imports.ts | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/dom/webgpu/tests/cts/checkout/src/common/util/parse_imports.ts b/dom/webgpu/tests/cts/checkout/src/common/util/parse_imports.ts new file mode 100644 index 0000000000..4b5604b897 --- /dev/null +++ b/dom/webgpu/tests/cts/checkout/src/common/util/parse_imports.ts @@ -0,0 +1,36 @@ +/** + * 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('/'); +} |