import { types, NodePath } from '@babel/core'; export function ensureImport(t: typeof types, program: NodePath, importSpecifier: string, importSource: string) export function ensureImport(t, program, importSpecifier, importSource) { // check to see if we've already added the real import line to this file const foundImport = program.get("body").filter((x) => { if (t.isImportDeclaration(x) && x.node.source.value === importSource) { return ( x.node.specifiers.filter( (s) => s.local.name === importSpecifier ).length > 0 ) } return false }).length > 0 // if not, add it, i.e.: // import { importSpecifier } from importSource if (!foundImport) { program.unshiftContainer( "body", t.importDeclaration( [ t.importSpecifier( t.identifier(importSpecifier), t.identifier(importSpecifier) ) ], t.stringLiteral(importSource) ) ) } }