@atlaskit/eslint-plugin-design-system 4.15.0 → 4.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/index.js +0 -11
  3. package/dist/cjs/rules/ensure-design-token-usage/index.js +1 -29
  4. package/dist/cjs/rules/ensure-design-token-usage-spacing/index.js +31 -75
  5. package/dist/cjs/rules/ensure-design-token-usage-spacing/utils.js +17 -87
  6. package/dist/cjs/rules/icon-label/index.js +0 -20
  7. package/dist/cjs/rules/no-banned-imports/index.js +1 -7
  8. package/dist/cjs/rules/no-deprecated-apis/index.js +8 -16
  9. package/dist/cjs/rules/no-deprecated-design-token-usage/index.js +0 -10
  10. package/dist/cjs/rules/no-deprecated-imports/index.js +8 -24
  11. package/dist/cjs/rules/no-deprecated-imports/paths.js +4 -5
  12. package/dist/cjs/rules/no-unsafe-design-token-usage/index.js +0 -24
  13. package/dist/cjs/rules/use-visually-hidden/fix-jsx.js +0 -10
  14. package/dist/cjs/rules/use-visually-hidden/fix-vanilla.js +0 -8
  15. package/dist/cjs/rules/use-visually-hidden/index.js +7 -32
  16. package/dist/cjs/rules/use-visually-hidden/utils.js +3 -17
  17. package/dist/cjs/rules/utils/get-import-node-by-source.js +0 -2
  18. package/dist/cjs/rules/utils/get-is-exception.js +0 -15
  19. package/dist/cjs/rules/utils/is-color.js +4 -17
  20. package/dist/cjs/rules/utils/is-elevation.js +10 -13
  21. package/dist/cjs/rules/utils/is-node.js +8 -40
  22. package/dist/cjs/rules/utils/is-token.js +2 -8
  23. package/dist/cjs/rules/utils/jsx.js +0 -1
  24. package/dist/cjs/version.json +1 -1
  25. package/dist/es2019/rules/ensure-design-token-usage/index.js +1 -30
  26. package/dist/es2019/rules/ensure-design-token-usage-spacing/index.js +29 -59
  27. package/dist/es2019/rules/ensure-design-token-usage-spacing/utils.js +14 -64
  28. package/dist/es2019/rules/icon-label/index.js +0 -19
  29. package/dist/es2019/rules/no-banned-imports/index.js +0 -5
  30. package/dist/es2019/rules/no-deprecated-apis/index.js +8 -16
  31. package/dist/es2019/rules/no-deprecated-design-token-usage/index.js +0 -8
  32. package/dist/es2019/rules/no-deprecated-imports/index.js +8 -20
  33. package/dist/es2019/rules/no-deprecated-imports/paths.js +4 -3
  34. package/dist/es2019/rules/no-unsafe-design-token-usage/index.js +0 -17
  35. package/dist/es2019/rules/use-visually-hidden/fix-jsx.js +0 -4
  36. package/dist/es2019/rules/use-visually-hidden/fix-vanilla.js +0 -3
  37. package/dist/es2019/rules/use-visually-hidden/index.js +5 -26
  38. package/dist/es2019/rules/use-visually-hidden/utils.js +4 -7
  39. package/dist/es2019/rules/utils/get-is-exception.js +0 -13
  40. package/dist/es2019/rules/utils/is-color.js +4 -10
  41. package/dist/es2019/rules/utils/is-elevation.js +10 -11
  42. package/dist/es2019/rules/utils/is-node.js +8 -20
  43. package/dist/es2019/rules/utils/is-token.js +0 -2
  44. package/dist/es2019/version.json +1 -1
  45. package/dist/esm/rules/ensure-design-token-usage/index.js +1 -23
  46. package/dist/esm/rules/ensure-design-token-usage-spacing/index.js +32 -68
  47. package/dist/esm/rules/ensure-design-token-usage-spacing/utils.js +17 -67
  48. package/dist/esm/rules/icon-label/index.js +0 -17
  49. package/dist/esm/rules/no-banned-imports/index.js +1 -4
  50. package/dist/esm/rules/no-deprecated-apis/index.js +8 -13
  51. package/dist/esm/rules/no-deprecated-design-token-usage/index.js +0 -6
  52. package/dist/esm/rules/no-deprecated-imports/index.js +9 -21
  53. package/dist/esm/rules/no-deprecated-imports/paths.js +4 -3
  54. package/dist/esm/rules/no-unsafe-design-token-usage/index.js +0 -15
  55. package/dist/esm/rules/use-visually-hidden/fix-jsx.js +0 -4
  56. package/dist/esm/rules/use-visually-hidden/fix-vanilla.js +0 -3
  57. package/dist/esm/rules/use-visually-hidden/index.js +7 -25
  58. package/dist/esm/rules/use-visually-hidden/utils.js +5 -9
  59. package/dist/esm/rules/utils/get-is-exception.js +0 -13
  60. package/dist/esm/rules/utils/is-color.js +4 -10
  61. package/dist/esm/rules/utils/is-elevation.js +10 -11
  62. package/dist/esm/rules/utils/is-node.js +8 -21
  63. package/dist/esm/rules/utils/is-token.js +2 -4
  64. package/dist/esm/version.json +1 -1
  65. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @atlaskit/eslint-plugin-design-system
2
2
 
3
+ ## 4.15.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`cf16d8f8bcc`](https://bitbucket.org/atlassian/atlassian-frontend/commits/cf16d8f8bcc) - Removes usage of tokens which have been removed from the codebase
8
+ - Updated dependencies
9
+
10
+ ## 4.15.1
11
+
12
+ ### Patch Changes
13
+
14
+ - [`18aeca8c199`](https://bitbucket.org/atlassian/atlassian-frontend/commits/18aeca8c199) - Internal change to update token references. There is no expected behaviour or visual change.
15
+
3
16
  ## 4.15.0
4
17
 
5
18
  ### Minor Changes
package/dist/cjs/index.js CHANGED
@@ -1,30 +1,19 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.rules = exports.configs = void 0;
9
-
10
8
  var _ensureDesignTokenUsage = _interopRequireDefault(require("./rules/ensure-design-token-usage"));
11
-
12
9
  var _ensureDesignTokenUsageSpacing = _interopRequireDefault(require("./rules/ensure-design-token-usage-spacing"));
13
-
14
10
  var _iconLabel = _interopRequireDefault(require("./rules/icon-label"));
15
-
16
11
  var _noBannedImports = _interopRequireDefault(require("./rules/no-banned-imports"));
17
-
18
12
  var _noDeprecatedApis = _interopRequireDefault(require("./rules/no-deprecated-apis"));
19
-
20
13
  var _noDeprecatedDesignTokenUsage = _interopRequireDefault(require("./rules/no-deprecated-design-token-usage"));
21
-
22
14
  var _noDeprecatedImports = _interopRequireDefault(require("./rules/no-deprecated-imports"));
23
-
24
15
  var _noUnsafeDesignTokenUsage = _interopRequireDefault(require("./rules/no-unsafe-design-token-usage"));
25
-
26
16
  var _useVisuallyHidden = _interopRequireDefault(require("./rules/use-visually-hidden"));
27
-
28
17
  var rules = {
29
18
  'ensure-design-token-usage': _ensureDesignTokenUsage.default,
30
19
  'icon-label': _iconLabel.default,
@@ -4,25 +4,17 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _eslintCodemodUtils = require("eslint-codemod-utils");
9
-
10
8
  var _getIsException = require("../utils/get-is-exception");
11
-
12
9
  var _isColor = require("../utils/is-color");
13
-
14
10
  var _isElevation = require("../utils/is-elevation");
15
-
16
11
  var _isNode = require("../utils/is-node");
17
-
18
12
  var defaultConfig = {
19
13
  shouldEnforceFallbacks: false
20
14
  };
21
-
22
15
  var getNodeColumn = function getNodeColumn(node) {
23
16
  return node.loc ? node.loc.start.column : 0;
24
17
  };
25
-
26
18
  var getTokenSuggestion = function getTokenSuggestion(node, reference, config) {
27
19
  return [{
28
20
  shouldReturnSuggestion: !(0, _isNode.isDecendantOfGlobalToken)(node) && config.shouldEnforceFallbacks === false,
@@ -38,12 +30,10 @@ var getTokenSuggestion = function getTokenSuggestion(node, reference, config) {
38
30
  }
39
31
  }].filter(filterSuggestion);
40
32
  };
41
-
42
33
  var filterSuggestion = function filterSuggestion(_ref) {
43
34
  var shouldReturnSuggestion = _ref.shouldReturnSuggestion;
44
35
  return shouldReturnSuggestion;
45
36
  };
46
-
47
37
  var rule = {
48
38
  meta: {
49
39
  // We need to upgrade the version of ESLint.
@@ -66,7 +56,6 @@ var rule = {
66
56
  if (!(0, _isNode.isDecendantOfStyleBlock)(node)) {
67
57
  return;
68
58
  }
69
-
70
59
  if (node.type === 'Identifier' && (0, _isColor.isLegacyNamedColor)(node.name) && !isException(node)) {
71
60
  context.report({
72
61
  messageId: 'hardCodedColor',
@@ -80,9 +69,7 @@ var rule = {
80
69
  if (isException(node) || (0, _isNode.isDecendantOfGlobalToken)(node) || (0, _isNode.isDecendantOfType)(node, 'ImportDeclaration') || (0, _isNode.isPropertyKey)(node) || (0, _isNode.isVariableName)(node)) {
81
70
  return;
82
71
  }
83
-
84
72
  var isNodeLegacyColor = (0, _isColor.isLegacyColor)(node.name);
85
-
86
73
  if (isNodeLegacyColor || (0, _isColor.isHardCodedColor)(node.name)) {
87
74
  if (node.parent.type === 'MemberExpression') {
88
75
  if (node.parent.object.type === 'Identifier') {
@@ -96,10 +83,8 @@ var rule = {
96
83
  });
97
84
  }
98
85
  }
99
-
100
86
  return;
101
87
  }
102
-
103
88
  context.report({
104
89
  messageId: 'hardCodedColor',
105
90
  node: node,
@@ -107,9 +92,7 @@ var rule = {
107
92
  });
108
93
  return;
109
94
  }
110
-
111
95
  var elevation = (0, _isElevation.isLegacyElevation)(node.name);
112
-
113
96
  if (elevation) {
114
97
  context.report({
115
98
  messageId: 'legacyElevation',
@@ -121,7 +104,6 @@ var rule = {
121
104
  if ((0, _isNode.isChildOfType)(node, 'TemplateLiteral') && node.range) {
122
105
  return fixer.replaceTextRange([node.range[0] - 2, node.range[1] + 1], "background-color: ${token('".concat(elevation.background, "')};\n").concat(' '.repeat(getNodeColumn(node) - 2), "box-shadow: ${token('").concat(elevation.shadow, "')}"));
123
106
  }
124
-
125
107
  return null;
126
108
  }
127
109
  });
@@ -131,16 +113,15 @@ var rule = {
131
113
  if (node.type !== 'TaggedTemplateExpression') {
132
114
  return;
133
115
  }
134
-
135
116
  var value = node.quasi.quasis.map(function (q) {
136
117
  return q.value.raw;
137
118
  }).join('');
119
+
138
120
  /**
139
121
  * Attempts to remove all non-essential words & characters from a style block.
140
122
  * Including selectors, queries and property names, leaving only values
141
123
  * This is necessary to avoid cases where a property might have a color in its name ie. "white-space"
142
124
  */
143
-
144
125
  var cssProperties = value.replace(/\n/g, '').split(/;|{|}/).map(function (el) {
145
126
  return el.trim().split(':').pop() || '';
146
127
  });
@@ -158,11 +139,9 @@ var rule = {
158
139
  if (node.type !== 'Literal' || typeof node.value !== 'string') {
159
140
  return;
160
141
  }
161
-
162
142
  if (!(0, _isNode.isDecendantOfStyleBlock)(node) && !(0, _isNode.isDecendantOfStyleJsxAttribute)(node)) {
163
143
  return;
164
144
  }
165
-
166
145
  if (((0, _isColor.isHardCodedColor)(node.value) || (0, _isColor.includesHardCodedColor)(node.value)) && !isException(node)) {
167
146
  context.report({
168
147
  messageId: 'hardCodedColor',
@@ -176,15 +155,12 @@ var rule = {
176
155
  if (node.type !== 'CallExpression' || node.callee.type !== 'Identifier') {
177
156
  return;
178
157
  }
179
-
180
158
  if (!(0, _isNode.isDecendantOfStyleBlock)(node) && !(0, _isNode.isDecendantOfStyleJsxAttribute)(node)) {
181
159
  return;
182
160
  }
183
-
184
161
  if (!(0, _isColor.isLegacyNamedColor)(node.callee.name) || (0, _isNode.isDecendantOfGlobalToken)(node) || isException(node)) {
185
162
  return;
186
163
  }
187
-
188
164
  context.report({
189
165
  messageId: 'hardCodedColor',
190
166
  node: node,
@@ -195,18 +171,14 @@ var rule = {
195
171
  if (!node.value) {
196
172
  return;
197
173
  }
198
-
199
174
  if (['alt', 'src', 'label'].includes(node.name.name)) {
200
175
  return;
201
176
  }
202
-
203
177
  if (node.value.type === 'Literal') {
204
178
  if (isException(node)) {
205
179
  return;
206
180
  }
207
-
208
181
  var literalValue = node.value.value;
209
-
210
182
  if ((0, _isColor.isHardCodedColor)(literalValue) || (0, _isColor.includesHardCodedColor)(literalValue)) {
211
183
  context.report({
212
184
  messageId: 'hardCodedColor',
@@ -1,28 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
10
  var _eslintCodemodUtils = require("eslint-codemod-utils");
15
-
16
11
  var _tokensRaw = require("@atlaskit/tokens/tokens-raw");
17
-
18
12
  var _isNode = require("../utils/is-node");
19
-
20
13
  var _utils = require("./utils");
21
-
22
14
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
23
-
24
15
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
25
-
26
16
  /**
27
17
  * Currently we have a wide range of experimental spacing tokens that we are testing.
28
18
  * We only want transforms to apply to the stable scale values, not the rest.
@@ -31,7 +21,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
31
21
  var onlyScaleTokens = _tokensRaw.spacing.filter(function (token) {
32
22
  return token.name.startsWith('space.');
33
23
  });
34
-
35
24
  var spacingValueToToken = Object.fromEntries(onlyScaleTokens.map(function (token) {
36
25
  return [token.attributes['pixelValue'], token.name];
37
26
  }));
@@ -46,17 +35,17 @@ var typographyValueToToken = Object.fromEntries(_tokensRaw.typography.map(functi
46
35
  return token.length;
47
36
  }))];
48
37
  }));
38
+
49
39
  /**
50
40
  * Returns a token node for a given value including fallbacks.
51
41
  * @param propertyName camelCase CSS property
52
42
  * @param value string representing pixel value, or font family, or number representing font weight
53
43
  * @example
54
44
  * ```
55
- * propertyName: padding, value: '8px' => token('spacing.scale.100', '8px')
45
+ * propertyName: padding, value: '8px' => token('space.100', '8px')
56
46
  * propertyName: fontWeight, value: 400 => token('font.weight.regular', '400')
57
47
  * ```
58
48
  */
59
-
60
49
  function getTokenNodeForValue(propertyName, value) {
61
50
  var token = (0, _utils.isTypographyProperty)(propertyName) ? typographyValueToToken[propertyName][value] : spacingValueToToken[value];
62
51
  var fallbackValue = propertyName === 'fontFamily' ? "\"".concat(value, "\"") : "'".concat(value, "'");
@@ -70,6 +59,7 @@ function getTokenNodeForValue(propertyName, value) {
70
59
  optional: false
71
60
  });
72
61
  }
62
+
73
63
  /**
74
64
  * Returns a boolean that signals wether the current property is revelant under the current configuration
75
65
  * @param propertyName camelCase CSS property
@@ -80,20 +70,15 @@ function getTokenNodeForValue(propertyName, value) {
80
70
  * propertyName: fontWeight, targetOptions: ['spacing', 'typography']
81
71
  * ```
82
72
  */
83
-
84
-
85
73
  function shouldAnalyzeProperty(propertyName, targetOptions) {
86
74
  if ((0, _utils.isSpacingProperty)(propertyName) && targetOptions.includes('spacing')) {
87
75
  return true;
88
76
  }
89
-
90
77
  if ((0, _utils.isTypographyProperty)(propertyName) && targetOptions.includes('typography')) {
91
78
  return true;
92
79
  }
93
-
94
80
  return false;
95
81
  }
96
-
97
82
  var rule = {
98
83
  meta: {
99
84
  type: 'problem',
@@ -109,14 +94,11 @@ var rule = {
109
94
  },
110
95
  create: function create(context) {
111
96
  var _context$options$;
112
-
113
97
  var targetCategories = ['spacing'];
114
98
  var configCategories = (_context$options$ = context.options[0]) === null || _context$options$ === void 0 ? void 0 : _context$options$.addons;
115
-
116
99
  if (Array.isArray(configCategories) && configCategories.includes('typography')) {
117
100
  targetCategories.push('typography');
118
101
  }
119
-
120
102
  return {
121
103
  // CSSObjectExpression
122
104
  // const styles = css({ color: 'red', margin: '4px' })
@@ -124,51 +106,42 @@ var rule = {
124
106
  if (!(0, _eslintCodemodUtils.isNodeOfType)(parentNode, 'ObjectExpression')) {
125
107
  return;
126
108
  }
109
+
127
110
  /**
128
111
  * We do this in case the fontSize for a style object is declared alongside the `em` or `lineHeight` declaration
129
112
  */
130
-
131
-
132
113
  var fontSizeNode = parentNode.properties.find(function (node) {
133
114
  if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'Property')) {
134
115
  return;
135
116
  }
136
-
137
117
  if (!(0, _eslintCodemodUtils.isNodeOfType)(node.key, 'Identifier')) {
138
118
  return;
139
119
  }
140
-
141
120
  return node.key.name === 'fontSize';
142
121
  });
143
- var fontSizeValue = (0, _utils.getValue)( // @ts-expect-error
122
+ var fontSizeValue = (0, _utils.getValue)(
123
+ // @ts-expect-error
144
124
  (0, _eslintCodemodUtils.isNodeOfType)(fontSizeNode, 'Property') && fontSizeNode.value, context);
145
125
  var fontSize = Array.isArray(fontSizeValue) ? fontSizeValue[0] : fontSizeValue;
146
-
147
126
  function findObjectStyles(node) {
148
127
  if (!(0, _eslintCodemodUtils.isNodeOfType)(node, 'Property')) {
149
128
  return;
150
129
  }
151
-
152
130
  if ((0, _eslintCodemodUtils.isNodeOfType)(node.value, 'ObjectExpression')) {
153
131
  return node.value.properties.forEach(findObjectStyles);
154
132
  }
155
-
156
133
  if (!(0, _eslintCodemodUtils.isNodeOfType)(node.key, 'Identifier')) {
157
134
  return;
158
135
  }
159
-
160
136
  if (!shouldAnalyzeProperty(node.key.name, targetCategories)) {
161
137
  return;
162
138
  }
163
-
164
139
  if ((0, _isNode.isDecendantOfGlobalToken)(node.value)) {
165
140
  return;
166
141
  }
167
-
168
142
  if ((0, _eslintCodemodUtils.isNodeOfType)(node.value, 'TemplateLiteral') && node.value.expressions.some(_isNode.isDecendantOfGlobalToken)) {
169
143
  return;
170
144
  }
171
-
172
145
  if (node.value.type === 'Literal' && !(0, _utils.isValidSpacingValue)(node.value.value, fontSize)) {
173
146
  context.report({
174
147
  node: node,
@@ -179,11 +152,11 @@ var rule = {
179
152
  });
180
153
  return;
181
154
  }
182
-
183
155
  var propertyName = node.key.name;
184
156
  var isFontFamily = /fontFamily/.test(propertyName);
185
- var value = (0, _utils.getValue)(node.value, context); // value is either NaN or it can't be resolved eg, em, 100% etc...
157
+ var value = (0, _utils.getValue)(node.value, context);
186
158
 
159
+ // value is either NaN or it can't be resolved eg, em, 100% etc...
187
160
  if (!(value && (0, _utils.isValidSpacingValue)(value, fontSize))) {
188
161
  return context.report({
189
162
  node: node,
@@ -193,14 +166,13 @@ var rule = {
193
166
  }
194
167
  });
195
168
  }
169
+ var values = Array.isArray(value) ? value : [value];
196
170
 
197
- var values = Array.isArray(value) ? value : [value]; // value is a single value so we can apply a more robust approach to our fix
171
+ // value is a single value so we can apply a more robust approach to our fix
198
172
  // treat fontFamily as having one value
199
-
200
173
  if (values.length === 1 || isFontFamily) {
201
174
  var _values = (0, _slicedToArray2.default)(values, 1),
202
- _value = _values[0];
203
-
175
+ _value = _values[0];
204
176
  var pixelValue = isFontFamily ? _value : (0, _utils.emToPixels)(_value, fontSize);
205
177
  return context.report({
206
178
  node: node,
@@ -210,19 +182,15 @@ var rule = {
210
182
  },
211
183
  fix: function fix(fixer) {
212
184
  var _node$loc;
213
-
214
185
  if (!shouldAnalyzeProperty(propertyName, targetCategories)) {
215
186
  return null;
216
187
  }
217
-
218
188
  var pixelValueString = "".concat(pixelValue, "px");
219
189
  var lookupValue = /fontWeight|fontFamily/.test(propertyName) ? pixelValue : pixelValueString;
220
190
  var tokenName = (0, _utils.isTypographyProperty)(propertyName) ? typographyValueToToken[propertyName][lookupValue] : spacingValueToToken[lookupValue];
221
-
222
191
  if (!tokenName) {
223
192
  return null;
224
193
  }
225
-
226
194
  var replacementValue = getTokenNodeForValue(propertyName, lookupValue);
227
195
  return [fixer.insertTextBefore(node, "// TODO Delete this comment after verifying spacing token -> previous value `".concat((0, _eslintCodemodUtils.node)(node.value), "`\n").concat(' '.padStart(((_node$loc = node.loc) === null || _node$loc === void 0 ? void 0 : _node$loc.start.column) || 0))), fixer.replaceText(node, (0, _eslintCodemodUtils.property)(_objectSpread(_objectSpread({}, node), {}, {
228
196
  value: replacementValue
@@ -230,6 +198,7 @@ var rule = {
230
198
  }
231
199
  });
232
200
  }
201
+
233
202
  /**
234
203
  * Compound values are hard to deal with / replace because we need to find/replace strings inside an
235
204
  * estree node.
@@ -237,8 +206,6 @@ var rule = {
237
206
  * @example
238
207
  * { padding: '8px 0px' } // two values we don't try and apply the fixer
239
208
  */
240
-
241
-
242
209
  values.forEach(function (val, index) {
243
210
  var pixelValue = (0, _utils.emToPixels)(val, fontSize);
244
211
  context.report({
@@ -251,11 +218,9 @@ var rule = {
251
218
  var allResolvableValues = values.every(function (value) {
252
219
  return !Number.isNaN((0, _utils.emToPixels)(value, fontSize));
253
220
  });
254
-
255
221
  if (!allResolvableValues) {
256
222
  return null;
257
223
  }
258
-
259
224
  return fixer.replaceText(node.value, "`".concat(values.map(function (value) {
260
225
  var pixelValue = (0, _utils.emToPixels)(value, fontSize);
261
226
  var pixelValueString = "".concat(pixelValue, "px");
@@ -265,7 +230,6 @@ var rule = {
265
230
  });
266
231
  });
267
232
  }
268
-
269
233
  parentNode.properties.forEach(findObjectStyles);
270
234
  },
271
235
  // CSSTemplateLiteral and StyledTemplateLiteral
@@ -275,46 +239,43 @@ var rule = {
275
239
  if (node.type !== 'TaggedTemplateExpression') {
276
240
  return;
277
241
  }
278
-
279
242
  var parentNode = (0, _utils.findParentNodeForLine)(node);
280
243
  var combinedString = node.quasi.quasis.map(function (q, i) {
281
244
  return "".concat(q.value.raw).concat(node.quasi.expressions[i] ? (0, _utils.getValue)(node.quasi.expressions[i], context) : '');
282
245
  }).join('');
246
+
283
247
  /**
284
248
  * Attempts to remove all non-essential words & characters from a style block.
285
249
  * Including selectors and queries
286
250
  * Adapted from ensure-design-token-usage
287
251
  */
288
-
289
252
  var cssProperties = combinedString.split('\n').filter(function (line) {
290
253
  return !line.trim().startsWith('@');
291
254
  }).join('\n').replace(/\n/g, '').split(/;|(?<!\$){|(?<!\${.+?)}/) // don't split on template literal expressions i.e. `${...}`
292
255
  .map(function (el) {
293
256
  return el.trim() || '';
294
- }).filter(Boolean); // Get font size
257
+ }).filter(Boolean);
295
258
 
259
+ // Get font size
296
260
  var fontSizeNode = cssProperties.find(function (style) {
297
261
  var _style$split = style.split(':'),
298
- _style$split2 = (0, _slicedToArray2.default)(_style$split, 2),
299
- rawProperty = _style$split2[0],
300
- value = _style$split2[1];
301
-
262
+ _style$split2 = (0, _slicedToArray2.default)(_style$split, 2),
263
+ rawProperty = _style$split2[0],
264
+ value = _style$split2[1];
302
265
  return /font-size/.test(rawProperty) ? value : null;
303
266
  });
304
267
  var fontSize = (0, _utils.getValueFromShorthand)(fontSizeNode)[0];
305
268
  cssProperties.forEach(function (style) {
306
269
  var _style$split3 = style.split(':'),
307
- _style$split4 = (0, _slicedToArray2.default)(_style$split3, 2),
308
- rawProperty = _style$split4[0],
309
- value = _style$split4[1];
310
-
270
+ _style$split4 = (0, _slicedToArray2.default)(_style$split3, 2),
271
+ rawProperty = _style$split4[0],
272
+ value = _style$split4[1];
311
273
  var propertyName = (0, _utils.convertHyphenatedNameToCamelCase)(rawProperty);
312
-
313
274
  if (!shouldAnalyzeProperty(propertyName, targetCategories)) {
314
275
  return;
315
- } // value is either NaN or it can't be resolved eg, em, 100% etc...
316
-
276
+ }
317
277
 
278
+ // value is either NaN or it can't be resolved eg, em, 100% etc...
318
279
  if (!(0, _utils.isValidSpacingValue)(value, fontSize)) {
319
280
  return context.report({
320
281
  node: node,
@@ -324,13 +285,11 @@ var rule = {
324
285
  }
325
286
  });
326
287
  }
327
-
328
288
  var values = (0, _utils.getValueFromShorthand)(value);
329
289
  values.forEach(function (val, index) {
330
290
  if (!val && val !== 0 || !shouldAnalyzeProperty(propertyName, targetCategories)) {
331
291
  return;
332
292
  }
333
-
334
293
  var isFontFamily = /fontFamily/.test(propertyName);
335
294
  var pixelValue = isFontFamily ? val : (0, _utils.emToPixels)(val, fontSize);
336
295
  context.report({
@@ -343,39 +302,36 @@ var rule = {
343
302
  var allResolvableValues = values.every(function (value) {
344
303
  return !Number.isNaN((0, _utils.emToPixels)(value, fontSize));
345
304
  });
346
-
347
305
  if (!allResolvableValues) {
348
306
  return null;
349
307
  }
350
-
351
308
  var replacementValue = values.map(function (value) {
352
309
  var propertyValue = typeof value === 'string' ? value.trim() : value;
353
310
  var pixelValue = isFontFamily ? propertyValue : (0, _utils.emToPixels)(propertyValue, fontSize);
354
311
  var pixelValueString = "".concat(pixelValue, "px");
355
312
  var lookupValue = /fontWeight|fontFamily/.test(propertyName) ? pixelValue : pixelValueString;
356
313
  var tokenName = (0, _utils.isTypographyProperty)(propertyName) ? typographyValueToToken[propertyName][lookupValue] : spacingValueToToken[lookupValue];
357
-
358
314
  if (!tokenName) {
359
315
  return pixelValueString;
360
316
  }
317
+ var replacementTokenValue = getTokenNodeForValue(propertyName, lookupValue);
361
318
 
362
- var replacementTokenValue = getTokenNodeForValue(propertyName, lookupValue); // ${token('...', '...')}
363
-
319
+ // ${token('...', '...')}
364
320
  var replacementSubValue = '${' + replacementTokenValue.toString() + '}';
365
321
  return replacementSubValue;
366
- }).join(' '); // get original source
367
-
368
- var textForSource = context.getSourceCode().getText(node.quasi); // find `<property>: ...;` in original
322
+ }).join(' ');
369
323
 
370
- var searchRegExp = new RegExp(style, 'g'); // replace property:val with new property:val
324
+ // get original source
325
+ var textForSource = context.getSourceCode().getText(node.quasi);
371
326
 
327
+ // find `<property>: ...;` in original
328
+ var searchRegExp = new RegExp(style, 'g');
329
+ // replace property:val with new property:val
372
330
  var replacement = textForSource.replace(searchRegExp, // padding: ${gridSize()}px;
373
331
  "".concat(rawProperty, ": ").concat(replacementValue));
374
-
375
332
  if (!replacement) {
376
333
  return [];
377
334
  }
378
-
379
335
  return [fixer.insertTextBefore(parentNode, "// TODO Delete this comment after verifying spacing token -> previous value `".concat(value.trim(), "`\n")), fixer.replaceText(node.quasi, replacement)];
380
336
  } : undefined
381
337
  });