网站搜索

javascript - TypeScript | 检测导入是否为目录


我正在尝试创建一个 TypeScript 插件(基于 https://github.com/nvandamme/typescript-transformer-append-js-extension),该插件会在导入/导出的文件末尾添加 .js 扩展名,或者在导入/导出的目录中添加 index.js:

// Before
import hello from './world';
import { test } from './directory';

// After
import hello from './world.js';
import { test } from './directory/index.js';

以下代码(仅)适用于导入/导出的文件:

import typescript from "typescript";

export default function transformer(_: typescript.Program) {
  return (transformationContext: typescript.TransformationContext) =>
    (sourceFile: typescript.SourceFile) => {
      function visitNode(node: typescript.Node): typescript.VisitResult<typescript.Node> {
        if (shouldMutateModuleSpecifier(node)) {
          const newModuleSpecifier = typescript.factory.createStringLiteral(
            `${node.moduleSpecifier.text}.js`,
          );

          if (typescript.isImportDeclaration(node)) {
            return typescript.factory.updateImportDeclaration(
              node,
              node.modifiers,
              node.importClause,
              newModuleSpecifier,
              undefined,
            );
          }

          if (typescript.isExportDeclaration(node)) {
            return typescript.factory.updateExportDeclaration(
              node,
              node.modifiers,
              false,
              node.exportClause,
              newModuleSpecifier,
              undefined,
            );
          }
        }

        return typescript.visitEachChild(node, visitNode, transformationContext);
      }

      return typescript.visitNode(sourceFile, visitNode);
    };
}

我不知道如何检测导入声明是否是目录。
有没有内置函数、Node的属性,或者其他方法可以知道这个信息?
谢谢!