123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import {TokenType as tt} from "../parser/tokenizer/types";
- import getImportExportSpecifierInfo from "./getImportExportSpecifierInfo";
- /**
- * Special case code to scan for imported names in ESM TypeScript. We need to do this so we can
- * properly get globals so we can compute shadowed globals.
- *
- * This is similar to logic in CJSImportProcessor, but trimmed down to avoid logic with CJS
- * replacement and flow type imports.
- */
- export default function getTSImportedNames(tokens) {
- const importedNames = new Set();
- for (let i = 0; i < tokens.tokens.length; i++) {
- if (
- tokens.matches1AtIndex(i, tt._import) &&
- !tokens.matches3AtIndex(i, tt._import, tt.name, tt.eq)
- ) {
- collectNamesForImport(tokens, i, importedNames);
- }
- }
- return importedNames;
- }
- function collectNamesForImport(
- tokens,
- index,
- importedNames,
- ) {
- index++;
- if (tokens.matches1AtIndex(index, tt.parenL)) {
- // Dynamic import, so nothing to do
- return;
- }
- if (tokens.matches1AtIndex(index, tt.name)) {
- importedNames.add(tokens.identifierNameAtIndex(index));
- index++;
- if (tokens.matches1AtIndex(index, tt.comma)) {
- index++;
- }
- }
- if (tokens.matches1AtIndex(index, tt.star)) {
- // * as
- index += 2;
- importedNames.add(tokens.identifierNameAtIndex(index));
- index++;
- }
- if (tokens.matches1AtIndex(index, tt.braceL)) {
- index++;
- collectNamesForNamedImport(tokens, index, importedNames);
- }
- }
- function collectNamesForNamedImport(
- tokens,
- index,
- importedNames,
- ) {
- while (true) {
- if (tokens.matches1AtIndex(index, tt.braceR)) {
- return;
- }
- const specifierInfo = getImportExportSpecifierInfo(tokens, index);
- index = specifierInfo.endIndex;
- if (!specifierInfo.isType) {
- importedNames.add(specifierInfo.rightName);
- }
- if (tokens.matches2AtIndex(index, tt.comma, tt.braceR)) {
- return;
- } else if (tokens.matches1AtIndex(index, tt.braceR)) {
- return;
- } else if (tokens.matches1AtIndex(index, tt.comma)) {
- index++;
- } else {
- throw new Error(`Unexpected token: ${JSON.stringify(tokens.tokens[index])}`);
- }
- }
- }
|