@atlaskit/eslint-plugin-design-system
Version:
The essential plugin for use with the Atlassian Design System.
59 lines • 2.49 kB
JavaScript
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;
};