UNPKG

@atlaskit/eslint-plugin-design-system

Version:

The essential plugin for use with the Atlassian Design System.

49 lines (47 loc) 1.86 kB
"use strict"; 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; }); } };