astro-ghostcms/.pnpm-store/v3/files/d6/60f8e36cbc9050b5f3b32e48b43...

35 lines
1.1 KiB
Plaintext
Raw Normal View History

2024-02-14 14:10:47 +00:00
import { t, visit } from "./babel.js";
function ensureImport(root, importDeclaration) {
let specifiersToFind = [...importDeclaration.specifiers];
visit(root, {
ImportDeclaration(path) {
if (path.node.source.value === importDeclaration.source.value) {
path.node.specifiers.forEach(
(specifier) => specifiersToFind.forEach((specifierToFind, i) => {
if (specifier.type !== specifierToFind.type)
return;
if (specifier.local.name === specifierToFind.local.name) {
specifiersToFind.splice(i, 1);
}
})
);
}
}
});
if (specifiersToFind.length === 0)
return;
visit(root, {
Program(path) {
const declaration = t.importDeclaration(specifiersToFind, importDeclaration.source);
const latestImport = path.get("body").filter((statement) => statement.isImportDeclaration()).pop();
if (latestImport)
latestImport.insertAfter(declaration);
else
path.unshiftContainer("body", declaration);
}
});
}
export {
ensureImport
};