UNPKG

@atlaskit/eslint-plugin-design-system

Version:

The essential plugin for use with the Atlassian Design System.

59 lines • 2.49 kB
import { isNodeOfType } from 'eslint-codemod-utils'; export const FORM_PACKAGE = '@atlaskit/form'; const namedBarrelImports = new Set(['Field', 'MessageWrapper', 'ErrorMessage', 'HelperMessage', 'ValidMessage', 'CheckboxField', 'RangeField', 'CharacterCounterField']); const namedMessagesImports = new Set(['MessageWrapper', 'ErrorMessage', 'HelperMessage', 'ValidMessage']); const defaultImportSources = { Form: ['@atlaskit/form/form', '@atlaskit/form/Form'], Field: ['@atlaskit/form/field', '@atlaskit/form/Field'], MessageWrapper: [], ErrorMessage: [], HelperMessage: [], ValidMessage: [], CheckboxField: ['@atlaskit/form/checkbox-field', '@atlaskit/form/CheckboxField'], RangeField: ['@atlaskit/form/range-field', '@atlaskit/form/RangeField'], CharacterCounterField: ['@atlaskit/form/character-counter-field', '@atlaskit/form/CharacterCounterField'] }; const appendImport = (imports, importName, localName) => { var _imports$importName; const existing = (_imports$importName = imports[importName]) !== null && _imports$importName !== void 0 ? _imports$importName : []; existing.push(localName); imports[importName] = existing; }; export const getFormImportLocalNames = node => { const source = node.source.value; if (typeof source !== 'string' || !node.specifiers.length) { return {}; } const imports = {}; if (source === FORM_PACKAGE) { node.specifiers.forEach(spec => { if (isNodeOfType(spec, 'ImportDefaultSpecifier')) { appendImport(imports, 'Form', spec.local.name); return; } if (isNodeOfType(spec, 'ImportSpecifier') && 'name' in spec.imported && namedBarrelImports.has(spec.imported.name)) { appendImport(imports, spec.imported.name, spec.local.name); } }); return imports; } if (source === '@atlaskit/form/messages' || source === '@atlaskit/form/Messages') { node.specifiers.forEach(spec => { if (isNodeOfType(spec, 'ImportSpecifier') && 'name' in spec.imported && namedMessagesImports.has(spec.imported.name)) { appendImport(imports, spec.imported.name, spec.local.name); } }); return imports; } Object.entries(defaultImportSources).forEach(([importName, importSources]) => { if (!importSources.includes(source)) { return; } node.specifiers.forEach(spec => { if (isNodeOfType(spec, 'ImportDefaultSpecifier')) { appendImport(imports, importName, spec.local.name); } }); }); return imports; };