@atlaskit/eslint-plugin-design-system
Version:
The essential plugin for use with the Atlassian Design System.
49 lines (47 loc) • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Import = void 0;
var _eslintCodemodUtils = require("eslint-codemod-utils");
/* eslint-disable @repo/internal/react/require-jsdoc */
var Import = exports.Import = {
/**
* Note: fixes can't overlap, which means this will fail:
* ```
* const importNode = Root.findImportByModule('@atlaskit/primitives')
* Import.insertNamedSpecifier(importNode, 'Box')
* Import.insertNamedSpecifier(importNode, 'xcss')
* ```
*
* For this reason `insertNamedSpecifiers` accepts a `specifiers` array, so you can group all inserts together.
*/
insertNamedSpecifiers: function insertNamedSpecifiers(node, specifiers, fixer) {
var _this = this;
/**
* `insertImportSpecifier()` has the unfortunate implementation detail of naively adding duplicate specifiers.
* e.g. calling
* `insertImportSpecifier(importDecl, 'xcss')`
* on
* `import { Inline, xcss } from '@atlaskit/primitives'`
* will result in:
* `import { Inline, xcss, xcss } from '@atlaskit/primitives'`.
* So, we need to filter out specifiers that are already imported.
*/
var uniqueSpecifiers = specifiers.filter(function (specifier) {
return !_this.containsNamedSpecifier(node, specifier);
});
if (uniqueSpecifiers.length === 0) {
return;
}
return fixer.replaceText(node, "".concat((0, _eslintCodemodUtils.insertImportSpecifier)(node, uniqueSpecifiers.join(', ')), ";\n"));
},
containsNamedSpecifier: function containsNamedSpecifier(node, name) {
return node.specifiers.some(function (specifier) {
if (!(0, _eslintCodemodUtils.isNodeOfType)(specifier, 'ImportSpecifier')) {
return false;
}
return specifier.imported.type === 'Identifier' && specifier.imported.name === name;
});
}
};