UNPKG

@atlaskit/eslint-plugin-design-system

Version:

The essential plugin for use with the Atlassian Design System.

76 lines (72 loc) 3.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ObjectEntry = void 0; var _eslintCodemodUtils = require("eslint-codemod-utils"); var _contextCompat = require("@atlaskit/eslint-utils/context-compat"); /* eslint-disable @repo/internal/react/require-jsdoc */ var ObjectEntry = exports.ObjectEntry = { getProperty: function getProperty(node) { if ((0, _eslintCodemodUtils.isNodeOfType)(node.key, 'Identifier')) { return { type: 'Identifier', value: node.key.name }; } if ((0, _eslintCodemodUtils.isNodeOfType)(node.key, 'Literal') && node.key.value) { return { type: 'Literal', value: node.key.value.toString() }; } return { type: undefined, value: undefined }; }, getValue: function getValue(node) { // The value is a number, like `-3` if ((0, _eslintCodemodUtils.isNodeOfType)(node.value, 'UnaryExpression') && (0, _eslintCodemodUtils.isNodeOfType)(node.value.argument, 'Literal') && node.value.argument.raw) { if (node.value.operator === '-') { return -1 * Number.parseInt(node.value.argument.raw); } return Number.parseInt(node.value.argument.raw); } // The value is a string, like `'4px'` if ((0, _eslintCodemodUtils.isNodeOfType)(node.value, 'Literal') && node.value.value) { return node.value.value; } return undefined; }, deleteEntry: function deleteEntry(node, context, fixer) { var _lastToken; var sourceCode = (0, _contextCompat.getSourceCode)(context); // fixer.remove() doesn't account for things like commas or newlines within an ObjectExpression and will result in invalid output. // This approach specifically removes the node and trailing comma, and should work for single- and multi-line objects. // From https://github.com/eslint/eslint/issues/9576#issuecomment-341737453 var prevToken = sourceCode.getTokenBefore(node); while (((_prevToken = prevToken) === null || _prevToken === void 0 ? void 0 : _prevToken.value) !== ',' && ((_prevToken2 = prevToken) === null || _prevToken2 === void 0 ? void 0 : _prevToken2.value) !== '{') { var _prevToken, _prevToken2; prevToken = sourceCode.getTokenBefore(node); } var lastToken = sourceCode.getTokenAfter(node); if (((_lastToken = lastToken) === null || _lastToken === void 0 ? void 0 : _lastToken.value) !== ',') { lastToken = sourceCode.getTokenBefore(lastToken); } return fixer.removeRange([prevToken.range[1], lastToken.range[1]]); }, getPropertyName: function getPropertyName(node) { // SpreadElements don't really have a property name if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'Property')) { return undefined; } if ((0, _eslintCodemodUtils.isNodeOfType)(node.key, 'Literal')) { var _node$key$value; return (_node$key$value = node.key.value) === null || _node$key$value === void 0 ? void 0 : _node$key$value.toString(); } if ((0, _eslintCodemodUtils.isNodeOfType)(node.key, 'Identifier')) { return node.key.name; } } };