vue-declassify
Version:
Convert Vue 2 class-based components into object-based syntax.
37 lines (36 loc) • 1.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ensure = exports.remove = void 0;
function find(source, module) {
return source.getImportDeclaration(declaration => {
return declaration.getModuleSpecifierValue() === module;
});
}
function remove(source, ...modules) {
for (const module of modules) {
const declaration = find(source, module);
if (declaration) {
declaration.remove();
}
}
}
exports.remove = remove;
function ensure(source, module, imports) {
let declaration = find(source, module);
if (!declaration) {
declaration = source.addImportDeclaration({
moduleSpecifier: module,
});
}
if (imports.default) {
declaration.setDefaultImport(imports.default);
}
if (imports.named) {
const existingNamedImports = new Set(declaration.getNamedImports().map(specifier => specifier.getName()));
const newNamedImports = imports.named.filter(name => !existingNamedImports.has(name));
declaration.addNamedImports(newNamedImports.map(name => ({
name,
})));
}
}
exports.ensure = ensure;