javascript - TypeScript | Detektera om import är en katalog
Jag försöker skapa ett TypeScript-plugin (baserat på https://github.com/nvandamme/typescript-transformer-append-js-extension) som lägger till .js-ändelsen till en importerad/exporterad fil eller lägger till index.js till en importerad/exporterad katalog:
// Before
import hello from './world';
import { test } from './directory';
// After
import hello from './world.js';
import { test } from './directory/index.js';
Följande kod fungerar (endast) för importerade/exporterade filer:
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);
};
}
Jag vet inte hur man upptäcker om importdeklarationen är en katalog.
Finns det en inbyggd funktion, en nodes egenskap, eller finns det andra metoder som har denna kunskap?
Tack!