@atlaskit/eslint-plugin-design-system 4.0.0 → 4.2.0
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.
- package/CHANGELOG.md +31 -0
- package/dist/cjs/index.js +14 -3
- package/dist/cjs/rules/ensure-design-token-usage/index.js +3 -0
- package/dist/cjs/rules/no-deprecated-apis/index.js +91 -0
- package/dist/cjs/rules/no-deprecated-design-token-usage/index.js +76 -0
- package/dist/cjs/rules/no-deprecated-imports/index.js +45 -33
- package/dist/cjs/rules/no-deprecated-imports/paths.js +43 -15
- package/dist/cjs/rules/no-unsafe-design-token-usage/index.js +19 -5
- package/dist/cjs/rules/use-visually-hidden/constants.js +12 -0
- package/dist/cjs/rules/use-visually-hidden/fix-jsx.js +39 -0
- package/dist/cjs/rules/use-visually-hidden/fix-vanilla.js +35 -0
- package/dist/cjs/rules/use-visually-hidden/index.js +194 -0
- package/dist/cjs/rules/use-visually-hidden/utils.js +91 -0
- package/dist/cjs/rules/utils/get-import-node-by-source.js +23 -0
- package/dist/cjs/rules/utils/is-color.js +3 -2
- package/dist/cjs/rules/utils/is-node.js +33 -3
- package/dist/cjs/rules/utils/remove-named-import.js +29 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/index.js +10 -2
- package/dist/es2019/rules/ensure-design-token-usage/index.js +3 -0
- package/dist/es2019/rules/no-deprecated-apis/index.js +72 -0
- package/dist/es2019/rules/no-deprecated-design-token-usage/index.js +58 -0
- package/dist/es2019/rules/no-deprecated-imports/index.js +45 -32
- package/dist/es2019/rules/no-deprecated-imports/paths.js +41 -14
- package/dist/es2019/rules/no-unsafe-design-token-usage/index.js +12 -5
- package/dist/es2019/rules/use-visually-hidden/constants.js +3 -0
- package/dist/es2019/rules/use-visually-hidden/fix-jsx.js +24 -0
- package/dist/es2019/rules/use-visually-hidden/fix-vanilla.js +21 -0
- package/dist/es2019/rules/use-visually-hidden/index.js +169 -0
- package/dist/es2019/rules/use-visually-hidden/utils.js +62 -0
- package/dist/es2019/rules/utils/get-import-node-by-source.js +10 -0
- package/dist/es2019/rules/utils/is-color.js +2 -1
- package/dist/es2019/rules/utils/is-node.js +19 -2
- package/dist/es2019/rules/utils/remove-named-import.js +16 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/index.js +10 -2
- package/dist/esm/rules/ensure-design-token-usage/index.js +3 -0
- package/dist/esm/rules/no-deprecated-apis/index.js +81 -0
- package/dist/esm/rules/no-deprecated-design-token-usage/index.js +66 -0
- package/dist/esm/rules/no-deprecated-imports/index.js +45 -32
- package/dist/esm/rules/no-deprecated-imports/paths.js +41 -14
- package/dist/esm/rules/no-unsafe-design-token-usage/index.js +20 -5
- package/dist/esm/rules/use-visually-hidden/constants.js +3 -0
- package/dist/esm/rules/use-visually-hidden/fix-jsx.js +26 -0
- package/dist/esm/rules/use-visually-hidden/fix-vanilla.js +23 -0
- package/dist/esm/rules/use-visually-hidden/index.js +180 -0
- package/dist/esm/rules/use-visually-hidden/utils.js +74 -0
- package/dist/esm/rules/utils/get-import-node-by-source.js +14 -0
- package/dist/esm/rules/utils/is-color.js +2 -1
- package/dist/esm/rules/utils/is-node.js +22 -1
- package/dist/esm/rules/utils/remove-named-import.js +20 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/index.d.ts +5 -0
- package/dist/types/rules/no-deprecated-apis/index.d.ts +3 -0
- package/dist/types/rules/no-deprecated-design-token-usage/index.d.ts +3 -0
- package/dist/types/rules/no-deprecated-imports/paths.d.ts +33 -14
- package/dist/types/rules/use-visually-hidden/constants.d.ts +3 -0
- package/dist/types/rules/use-visually-hidden/fix-jsx.d.ts +3 -0
- package/dist/types/rules/use-visually-hidden/fix-vanilla.d.ts +3 -0
- package/dist/types/rules/use-visually-hidden/index.d.ts +3 -0
- package/dist/types/rules/use-visually-hidden/utils.d.ts +35 -0
- package/dist/types/rules/utils/get-import-node-by-source.d.ts +8 -0
- package/dist/types/rules/utils/is-node.d.ts +7 -0
- package/dist/types/rules/utils/remove-named-import.d.ts +8 -0
- package/package.json +6 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# @atlaskit/eslint-plugin-design-system
|
|
2
2
|
|
|
3
|
+
## 4.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`afc248d2ded`](https://bitbucket.org/atlassian/atlassian-frontend/commits/afc248d2ded) - Adds a new rule, `use-visually-hidden` to complement the `@atlaskit/visually-hidden` component.
|
|
8
|
+
- [`0c0a8b5dff4`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0c0a8b5dff4) - Adds an additional rule 'no-deprecated-api-usage'. This rule targets APIs/props in the Design System that we intend to remove completely. This rule should be used by all product repos as it will provide an early warning of expected deprecations.
|
|
9
|
+
- [`93d6f8856f2`](https://bitbucket.org/atlassian/atlassian-frontend/commits/93d6f8856f2) - @atlaskit/icon-priority has been deprecated due to low usage. It will be deleted after 21 April 2022. If you rely on these icons, @atlaskit/icon-priority will still be available as a deprecated package on NPM, but we recommend self-hosting and managing.
|
|
10
|
+
|
|
11
|
+
## 4.1.1
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [`19d72473dfb`](https://bitbucket.org/atlassian/atlassian-frontend/commits/19d72473dfb) - The no-unsafe-design-token-usage eslint rule now respects the new token naming conventions when auto-fixing by correctly formatting token ids.
|
|
16
|
+
- Updated dependencies
|
|
17
|
+
|
|
18
|
+
## 4.1.0
|
|
19
|
+
|
|
20
|
+
### Minor Changes
|
|
21
|
+
|
|
22
|
+
- [`52fbe80eeb5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/52fbe80eeb5) - Moved logic for detecting deprecated tokens out of no-unsafe-design-token-usage and moves it into a new rule: no-deprecated-token-usage. This rule is solely reponsible for catching usage of deprecated tokens. In most cases this allows consumers to set this rule to "warn", allowing iterative migration to new token names rather than in a big bang.
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- Updated dependencies
|
|
27
|
+
|
|
28
|
+
## 4.0.1
|
|
29
|
+
|
|
30
|
+
### Patch Changes
|
|
31
|
+
|
|
32
|
+
- [`7da1a30902a`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7da1a30902a) - Adds missing meta to `ensure-design-token-usage` rule.
|
|
33
|
+
|
|
3
34
|
## 4.0.0
|
|
4
35
|
|
|
5
36
|
### Major Changes
|
package/dist/cjs/index.js
CHANGED
|
@@ -5,25 +5,36 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.rules = exports.configs = void 0;
|
|
9
9
|
|
|
10
10
|
var _ensureDesignTokenUsage = _interopRequireDefault(require("./rules/ensure-design-token-usage"));
|
|
11
11
|
|
|
12
|
+
var _noDeprecatedApis = _interopRequireDefault(require("./rules/no-deprecated-apis"));
|
|
13
|
+
|
|
14
|
+
var _noDeprecatedDesignTokenUsage = _interopRequireDefault(require("./rules/no-deprecated-design-token-usage"));
|
|
15
|
+
|
|
12
16
|
var _noDeprecatedImports = _interopRequireDefault(require("./rules/no-deprecated-imports"));
|
|
13
17
|
|
|
14
18
|
var _noUnsafeDesignTokenUsage = _interopRequireDefault(require("./rules/no-unsafe-design-token-usage"));
|
|
15
19
|
|
|
20
|
+
var _useVisuallyHidden = _interopRequireDefault(require("./rules/use-visually-hidden"));
|
|
21
|
+
|
|
16
22
|
var rules = {
|
|
17
23
|
'ensure-design-token-usage': _ensureDesignTokenUsage.default,
|
|
18
24
|
'no-unsafe-design-token-usage': _noUnsafeDesignTokenUsage.default,
|
|
19
|
-
'no-deprecated-
|
|
25
|
+
'no-deprecated-design-token-usage': _noDeprecatedDesignTokenUsage.default,
|
|
26
|
+
'no-deprecated-imports': _noDeprecatedImports.default,
|
|
27
|
+
'no-deprecated-apis': _noDeprecatedApis.default,
|
|
28
|
+
'use-visually-hidden': _useVisuallyHidden.default
|
|
20
29
|
};
|
|
21
30
|
exports.rules = rules;
|
|
22
31
|
var configs = {
|
|
23
32
|
recommended: {
|
|
24
33
|
plugins: ['@atlaskit/design-system'],
|
|
25
34
|
rules: {
|
|
26
|
-
'@atlaskit/design-system/no-deprecated-imports': 'error'
|
|
35
|
+
'@atlaskit/design-system/no-deprecated-imports': 'error',
|
|
36
|
+
'@atlaskit/design-system/use-visually-hidden': 'error',
|
|
37
|
+
'@atlaskit/design-system/no-deprecated-apis': 'warn'
|
|
27
38
|
}
|
|
28
39
|
}
|
|
29
40
|
};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _getImportNodeBySource = require("../utils/get-import-node-by-source");
|
|
9
|
+
|
|
10
|
+
var _isNode = require("../utils/is-node");
|
|
11
|
+
|
|
12
|
+
// eslint-disable-next-line import/no-unresolved
|
|
13
|
+
var unsafeOverridesConfig = {
|
|
14
|
+
cssFn: ['@atlaskit/menu', '@atlaskit/side-navigation'],
|
|
15
|
+
overrides: ['@atlaskit/drawer', '@atlaskit/menu', '@atlaskit/side-navigation']
|
|
16
|
+
};
|
|
17
|
+
var unsafeOverrides = ['cssFn', 'overrides'];
|
|
18
|
+
var rule = {
|
|
19
|
+
meta: {
|
|
20
|
+
type: 'suggestion',
|
|
21
|
+
docs: {
|
|
22
|
+
description: 'Disallow specified APIs that have been marked as deprecated and/or discouraged.',
|
|
23
|
+
recommended: true
|
|
24
|
+
},
|
|
25
|
+
messages: {
|
|
26
|
+
noDeprecatedApis: "The prop \"{{propName}}\" has been deprecated. It will be removed in the next major release."
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
create: function create(context) {
|
|
30
|
+
return {
|
|
31
|
+
// find JSX atribute - find name of attribute - get source and find relevant identifiers.
|
|
32
|
+
JSXAttribute: function (_JSXAttribute) {
|
|
33
|
+
function JSXAttribute(_x) {
|
|
34
|
+
return _JSXAttribute.apply(this, arguments);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
JSXAttribute.toString = function () {
|
|
38
|
+
return _JSXAttribute.toString();
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
return JSXAttribute;
|
|
42
|
+
}(function (node) {
|
|
43
|
+
var _node$name, _closesetJSXElement$n;
|
|
44
|
+
|
|
45
|
+
if (!unsafeOverrides.includes(node === null || node === void 0 ? void 0 : (_node$name = node.name) === null || _node$name === void 0 ? void 0 : _node$name.name)) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
var source = context.getSourceCode();
|
|
50
|
+
var bannedApi = node.name.name; // traverse the tree to the nearest JSX Element and get its name
|
|
51
|
+
|
|
52
|
+
var closesetJSXElement = (0, _isNode.getClosestNodeOfType)(node, 'JSXOpeningElement'); // @ts-ignore
|
|
53
|
+
|
|
54
|
+
var jsxElementName = closesetJSXElement === null || closesetJSXElement === void 0 ? void 0 : (_closesetJSXElement$n = closesetJSXElement.name) === null || _closesetJSXElement$n === void 0 ? void 0 : _closesetJSXElement$n.name;
|
|
55
|
+
|
|
56
|
+
if (!jsxElementName) {
|
|
57
|
+
return;
|
|
58
|
+
} // find an import for the path of the banned api
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
unsafeOverridesConfig[bannedApi].forEach(function (path) {
|
|
62
|
+
var importNode = (0, _getImportNodeBySource.getImportedNodeBySource)(source, path);
|
|
63
|
+
|
|
64
|
+
if (!importNode) {
|
|
65
|
+
return;
|
|
66
|
+
} // find an import that matches our JSX element
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
var hasTargetNode = importNode.specifiers.some(function (node) {
|
|
70
|
+
return node.local.name === jsxElementName;
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
if (!hasTargetNode) {
|
|
74
|
+
return;
|
|
75
|
+
} // if we're here the import exists and there is a valid lint error.
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
context.report({
|
|
79
|
+
node: node,
|
|
80
|
+
messageId: 'noDeprecatedApis',
|
|
81
|
+
data: {
|
|
82
|
+
propName: bannedApi
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
})
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
var _default = rule;
|
|
91
|
+
exports.default = _default;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _renameMapping = _interopRequireDefault(require("@atlaskit/tokens/rename-mapping"));
|
|
11
|
+
|
|
12
|
+
var getCleanPathId = function getCleanPathId(path) {
|
|
13
|
+
return path.split('.').filter(function (el) {
|
|
14
|
+
return el !== '[default]';
|
|
15
|
+
}).join('.');
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
var rule = {
|
|
19
|
+
meta: {
|
|
20
|
+
docs: {
|
|
21
|
+
recommended: true
|
|
22
|
+
},
|
|
23
|
+
fixable: 'code',
|
|
24
|
+
type: 'problem',
|
|
25
|
+
messages: {
|
|
26
|
+
tokenRenamed: 'The token "{{name}}" is deprecated in favour of "{{replacement}}".'
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
create: function create(context) {
|
|
30
|
+
return {
|
|
31
|
+
'CallExpression[callee.name="token"]': function CallExpressionCalleeNameToken(node) {
|
|
32
|
+
if (node.type !== 'CallExpression') {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (node.arguments[0].type !== 'Literal') {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
var tokenKey = node.arguments[0].value;
|
|
41
|
+
|
|
42
|
+
if (!tokenKey) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (typeof tokenKey !== 'string') {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
var migrationMeta = _renameMapping.default.filter(function (t) {
|
|
51
|
+
return t.state === 'deprecated';
|
|
52
|
+
}).find(function (t) {
|
|
53
|
+
return t.path === tokenKey;
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
if (migrationMeta) {
|
|
57
|
+
var cleanTokenKey = getCleanPathId(migrationMeta.replacement);
|
|
58
|
+
context.report({
|
|
59
|
+
messageId: 'tokenRenamed',
|
|
60
|
+
node: node,
|
|
61
|
+
data: {
|
|
62
|
+
name: tokenKey,
|
|
63
|
+
replacement: cleanTokenKey
|
|
64
|
+
},
|
|
65
|
+
fix: function fix(fixer) {
|
|
66
|
+
return fixer.replaceText(node.arguments[0], "'".concat(cleanTokenKey, "'"));
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
var _default = rule;
|
|
76
|
+
exports.default = _default;
|
|
@@ -31,18 +31,24 @@ var rule = {
|
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
create: function create(context) {
|
|
34
|
-
var sourceCode = context.getSourceCode();
|
|
35
|
-
|
|
36
34
|
var restrictedPathMessages = _paths.restrictedPaths.reduce(function (memo, importSource) {
|
|
37
35
|
if (typeof importSource === 'string') {
|
|
38
36
|
memo[importSource] = {
|
|
39
37
|
message: ''
|
|
40
38
|
};
|
|
41
39
|
} else {
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
if ('message' in importSource) {
|
|
41
|
+
memo[importSource.path] = {
|
|
42
|
+
message: importSource.message
|
|
43
|
+
};
|
|
44
|
+
}
|
|
44
45
|
|
|
45
|
-
|
|
46
|
+
if ('imports' in importSource) {
|
|
47
|
+
memo[importSource.path] = {
|
|
48
|
+
// @ts-ignore
|
|
49
|
+
imports: importSource.imports
|
|
50
|
+
};
|
|
51
|
+
}
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
return memo;
|
|
@@ -50,27 +56,46 @@ var rule = {
|
|
|
50
56
|
/**
|
|
51
57
|
* Report a restricted path.
|
|
52
58
|
* @param {string} importSource path of the import
|
|
53
|
-
* @param {Map<string,Object[]>} importNames Map of import names that are being imported
|
|
54
59
|
* @param {node} node representing the restricted path reference
|
|
60
|
+
* @param {Map<string,Rule.Node>} importNames Map of import names that are being imported
|
|
55
61
|
* @returns {void}
|
|
56
62
|
* @private
|
|
57
63
|
*/
|
|
58
64
|
|
|
59
65
|
|
|
60
|
-
function checkRestrictedPathAndReport(importSource,
|
|
66
|
+
function checkRestrictedPathAndReport(importSource, node, importNames) {
|
|
61
67
|
if (!Object.prototype.hasOwnProperty.call(restrictedPathMessages, importSource)) {
|
|
62
68
|
return;
|
|
63
69
|
}
|
|
64
70
|
|
|
65
|
-
var
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
var config = restrictedPathMessages[importSource]; // The message will only exist if the import is completely banned,
|
|
72
|
+
// eg a deprecated package
|
|
73
|
+
|
|
74
|
+
if ('message' in config) {
|
|
75
|
+
context.report({
|
|
76
|
+
node: node,
|
|
77
|
+
messageId: config.message ? 'pathWithCustomMessage' : 'path',
|
|
78
|
+
data: {
|
|
79
|
+
importSource: importSource,
|
|
80
|
+
customMessage: config.message
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
} // if there are specific named exports that are banned,
|
|
84
|
+
// iterate through and check if they're being imported
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
if ('imports' in config) {
|
|
88
|
+
var _config$imports;
|
|
89
|
+
|
|
90
|
+
(_config$imports = config.imports) === null || _config$imports === void 0 ? void 0 : _config$imports.forEach(function (restrictedImport) {
|
|
91
|
+
if (importNames.has(restrictedImport.importName)) {
|
|
92
|
+
context.report({
|
|
93
|
+
node: importNames.get(restrictedImport.importName),
|
|
94
|
+
message: restrictedImport.message
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
74
99
|
}
|
|
75
100
|
/**
|
|
76
101
|
* Checks a node to see if any problems should be reported.
|
|
@@ -84,12 +109,7 @@ var rule = {
|
|
|
84
109
|
var importSource = node.source.value.trim();
|
|
85
110
|
var importNames = new Map();
|
|
86
111
|
|
|
87
|
-
if (
|
|
88
|
-
var starToken = sourceCode.getFirstToken(node, 1);
|
|
89
|
-
importNames.set('*', [{
|
|
90
|
-
loc: starToken === null || starToken === void 0 ? void 0 : starToken.loc
|
|
91
|
-
}]);
|
|
92
|
-
} else if ('specifiers' in node) {
|
|
112
|
+
if ('specifiers' in node) {
|
|
93
113
|
// @ts-ignore
|
|
94
114
|
var _iterator = _createForOfIteratorHelper(node.specifiers),
|
|
95
115
|
_step;
|
|
@@ -98,9 +118,6 @@ var rule = {
|
|
|
98
118
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
99
119
|
var specifier = _step.value;
|
|
100
120
|
var name = void 0;
|
|
101
|
-
var specifierData = {
|
|
102
|
-
loc: specifier.loc
|
|
103
|
-
};
|
|
104
121
|
|
|
105
122
|
if (specifier.type === 'ImportDefaultSpecifier') {
|
|
106
123
|
name = 'default';
|
|
@@ -113,11 +130,7 @@ var rule = {
|
|
|
113
130
|
}
|
|
114
131
|
|
|
115
132
|
if (name) {
|
|
116
|
-
|
|
117
|
-
importNames.get(name).push(specifierData);
|
|
118
|
-
} else {
|
|
119
|
-
importNames.set(name, [specifierData]);
|
|
120
|
-
}
|
|
133
|
+
importNames.set(name, specifier);
|
|
121
134
|
}
|
|
122
135
|
}
|
|
123
136
|
} catch (err) {
|
|
@@ -127,7 +140,7 @@ var rule = {
|
|
|
127
140
|
}
|
|
128
141
|
}
|
|
129
142
|
|
|
130
|
-
checkRestrictedPathAndReport(importSource,
|
|
143
|
+
checkRestrictedPathAndReport(importSource, node, importNames);
|
|
131
144
|
};
|
|
132
145
|
|
|
133
146
|
return {
|
|
@@ -136,8 +149,7 @@ var rule = {
|
|
|
136
149
|
if (node.source) {
|
|
137
150
|
checkNode(node);
|
|
138
151
|
}
|
|
139
|
-
}
|
|
140
|
-
ExportAllDeclaration: checkNode
|
|
152
|
+
}
|
|
141
153
|
};
|
|
142
154
|
}
|
|
143
155
|
};
|
|
@@ -3,48 +3,76 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.restrictedPaths = void 0;
|
|
6
|
+
exports.restrictedPaths = exports.namedThemeExports = void 0;
|
|
7
|
+
var namedThemeExports = [{
|
|
8
|
+
importName: 'assistive',
|
|
9
|
+
message: 'The assistive mixin is deprecated. Please use `@atlaskit/visually-hidden` instead.'
|
|
10
|
+
}, {
|
|
11
|
+
importName: 'visuallyHidden',
|
|
12
|
+
message: 'The visuallyHidden mixin is deprecated. Please use `@atlaskit/visually-hidden` instead.'
|
|
13
|
+
}, {
|
|
14
|
+
importName: 'focusRing',
|
|
15
|
+
message: 'The focusRing mixin is deprecated. Please use `@atlaskit/visually-hidden` instead.'
|
|
16
|
+
}];
|
|
17
|
+
exports.namedThemeExports = namedThemeExports;
|
|
7
18
|
var restrictedPaths = [{
|
|
8
|
-
|
|
19
|
+
path: '@atlaskit/navigation-next',
|
|
9
20
|
message: "navigation-next is deprecated. Please use '@atlaskit/atlassian-navigation' instead."
|
|
10
21
|
}, {
|
|
11
|
-
|
|
22
|
+
path: '@atlaskit/field-base',
|
|
12
23
|
message: "field-base is deprecated. Please use the '@atlaskit/form' package instead."
|
|
13
24
|
}, {
|
|
14
|
-
|
|
25
|
+
path: '@atlaskit/field-radio-group',
|
|
15
26
|
message: "field-radio-group is deprecated. Please use '@atlaskit/radio' instead, and check the migration guide."
|
|
16
27
|
}, {
|
|
17
|
-
|
|
28
|
+
path: '@atlaskit/field-range',
|
|
18
29
|
message: "field-range is deprecated. Please use '@atlaskit/range' instead."
|
|
19
30
|
}, {
|
|
20
|
-
|
|
31
|
+
path: '@atlaskit/field-text',
|
|
21
32
|
message: "field-text is deprecated. Please use '@atlaskit/textfield' instead."
|
|
22
33
|
}, {
|
|
23
|
-
|
|
34
|
+
path: '@atlaskit/field-text-area',
|
|
24
35
|
message: "field-text-area is deprecated. Please use '@atlaskit/textarea' instead."
|
|
25
36
|
}, {
|
|
26
|
-
|
|
37
|
+
path: '@atlaskit/navigation',
|
|
27
38
|
message: "navigation is deprecated. Please use '@atlaskit/atlassian-navigation' instead."
|
|
28
39
|
}, {
|
|
29
|
-
|
|
40
|
+
path: '@atlaskit/global-navigation',
|
|
30
41
|
message: "global-navigation is deprecated. Please use '@atlaskit/atlassian-navigation' for the horizontal nav bar, '@atlaskit/side-navigation' for the side nav, and '@atlaskit/page-layout' to layout your application."
|
|
31
42
|
}, {
|
|
32
|
-
|
|
43
|
+
path: '@atlaskit/input',
|
|
33
44
|
message: 'input is deprecated. This was an internal component and should not be used directly.'
|
|
34
45
|
}, {
|
|
35
|
-
|
|
46
|
+
path: '@atlaskit/layer',
|
|
36
47
|
message: 'layer is deprecated. This was an internal component and should not be used directly.'
|
|
37
48
|
}, {
|
|
38
|
-
|
|
49
|
+
path: '@atlaskit/single-select',
|
|
39
50
|
message: "single-select is deprecated. Please use '@atlaskit/select' instead."
|
|
40
51
|
}, {
|
|
41
|
-
|
|
52
|
+
path: '@atlaskit/multi-select',
|
|
42
53
|
message: "multi-select is deprecated. Please use '@atlaskit/select' instead."
|
|
43
54
|
}, {
|
|
44
|
-
|
|
55
|
+
path: '@atlaskit/droplist',
|
|
45
56
|
message: "droplist is deprecated. For the pop-up behaviour please use '@atlaskit/popup' and for common menu components please use '@atlaskit/menu'."
|
|
46
57
|
}, {
|
|
47
|
-
|
|
58
|
+
path: '@atlaskit/item',
|
|
48
59
|
message: "item is deprecated. Please use '@atlaskit/menu' instead."
|
|
60
|
+
}, // TODO uncomment me when we formally deprecate typography
|
|
61
|
+
// {
|
|
62
|
+
// path: '@atlaskit/theme/typography',
|
|
63
|
+
// message: 'The typography mixins are deprecated. Please use `@atlaskit/heading` instead.',
|
|
64
|
+
// },
|
|
65
|
+
{
|
|
66
|
+
path: '@atlaskit/theme/constants',
|
|
67
|
+
imports: namedThemeExports
|
|
68
|
+
}, {
|
|
69
|
+
path: '@atlaskit/theme',
|
|
70
|
+
imports: namedThemeExports // .concat(
|
|
71
|
+
// { importName: 'typography', message: 'The typography mixins are deprecated. Please use `@atlaskit/heading` instead.',}
|
|
72
|
+
// )
|
|
73
|
+
|
|
74
|
+
}, {
|
|
75
|
+
path: '@atlaskit/icon-priority',
|
|
76
|
+
message: "icon-priority is deprecated due to limited usage in Cloud products. It will be deleted after 21 April 2022."
|
|
49
77
|
}];
|
|
50
78
|
exports.restrictedPaths = restrictedPaths;
|
|
@@ -15,6 +15,12 @@ var _isNode = require("../utils/is-node");
|
|
|
15
15
|
|
|
16
16
|
var _isToken = require("../utils/is-token");
|
|
17
17
|
|
|
18
|
+
var getCleanPathId = function getCleanPathId(path) {
|
|
19
|
+
return path.split('.').filter(function (el) {
|
|
20
|
+
return el !== '[default]';
|
|
21
|
+
}).join('.');
|
|
22
|
+
};
|
|
23
|
+
|
|
18
24
|
var defaultConfig = {
|
|
19
25
|
shouldEnforceFallbacks: false
|
|
20
26
|
};
|
|
@@ -29,7 +35,7 @@ var rule = {
|
|
|
29
35
|
directTokenUsage: "Access the global theme using the token function.\n\n```\nimport { token } from '@atlaskit/tokens';\n\ntoken('{{tokenKey}}');\n```\n",
|
|
30
36
|
staticToken: "Token string should be inlined directly into the function call.\n\n```\ntoken('color.background.blanket');\n```\n",
|
|
31
37
|
invalidToken: 'The token "{{name}}" does not exist.',
|
|
32
|
-
|
|
38
|
+
tokenRemoved: 'The token "{{name}}" is removed in favour of "{{replacement}}".',
|
|
33
39
|
tokenFallbackEnforced: "Token function requires a fallback, preferably something that best matches the light/default theme in case tokens aren't present.\n\n```\ntoken('color.background.blanket', N500A);\n```\n ",
|
|
34
40
|
tokenFallbackRestricted: "Token function must not use a fallback.\n\n```\ntoken('color.background.blanket');\n```\n "
|
|
35
41
|
}
|
|
@@ -130,15 +136,23 @@ var rule = {
|
|
|
130
136
|
return;
|
|
131
137
|
}
|
|
132
138
|
|
|
133
|
-
|
|
139
|
+
var migrationMeta = _renameMapping.default.filter(function (t) {
|
|
140
|
+
return t.state === 'deleted';
|
|
141
|
+
}).find(function (t) {
|
|
142
|
+
return t.path === tokenKey;
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
if (typeof tokenKey === 'string' && migrationMeta) {
|
|
146
|
+
var cleanTokenKey = getCleanPathId(migrationMeta.replacement);
|
|
134
147
|
context.report({
|
|
135
|
-
messageId: '
|
|
148
|
+
messageId: 'tokenRemoved',
|
|
136
149
|
node: node,
|
|
137
150
|
data: {
|
|
138
|
-
name: tokenKey
|
|
151
|
+
name: tokenKey,
|
|
152
|
+
replacement: cleanTokenKey
|
|
139
153
|
},
|
|
140
154
|
fix: function fix(fixer) {
|
|
141
|
-
return fixer.replaceText(node.arguments[0], "'".concat(
|
|
155
|
+
return fixer.replaceText(node.arguments[0], "'".concat(cleanTokenKey, "'"));
|
|
142
156
|
}
|
|
143
157
|
});
|
|
144
158
|
return;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.VISUALLY_HIDDEN_SOURCE = exports.VISUALLY_HIDDEN_IMPORT = exports.IMPORT_NAME = void 0;
|
|
7
|
+
var IMPORT_NAME = 'AKVisuallyHidden';
|
|
8
|
+
exports.IMPORT_NAME = IMPORT_NAME;
|
|
9
|
+
var VISUALLY_HIDDEN_SOURCE = '@atlaskit/visually-hidden';
|
|
10
|
+
exports.VISUALLY_HIDDEN_SOURCE = VISUALLY_HIDDEN_SOURCE;
|
|
11
|
+
var VISUALLY_HIDDEN_IMPORT = "import ".concat(IMPORT_NAME, " from '").concat(VISUALLY_HIDDEN_SOURCE, "';\n");
|
|
12
|
+
exports.VISUALLY_HIDDEN_IMPORT = VISUALLY_HIDDEN_IMPORT;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _getImportNodeBySource = require("../utils/get-import-node-by-source");
|
|
9
|
+
|
|
10
|
+
var _isNode = require("../utils/is-node");
|
|
11
|
+
|
|
12
|
+
var _constants = require("./constants");
|
|
13
|
+
|
|
14
|
+
var _utils = require("./utils");
|
|
15
|
+
|
|
16
|
+
var _default = function _default(source, node) {
|
|
17
|
+
return function (fixer) {
|
|
18
|
+
var fixes = [];
|
|
19
|
+
var importedNode = (0, _utils.getFirstImport)(source);
|
|
20
|
+
var visuallyHiddenNode = (0, _getImportNodeBySource.getImportedNodeBySource)(source, _constants.VISUALLY_HIDDEN_SOURCE);
|
|
21
|
+
|
|
22
|
+
if (!importedNode) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
var jsxOpeningElement = (0, _isNode.getClosestNodeOfType)(node, 'JSXOpeningElement');
|
|
27
|
+
|
|
28
|
+
if (visuallyHiddenNode) {
|
|
29
|
+
fixes.push(fixer.replaceText(jsxOpeningElement, visuallyHiddenNode.specifiers[0].local.name));
|
|
30
|
+
} else {
|
|
31
|
+
fixes.push(fixer.insertTextBefore(importedNode, _constants.VISUALLY_HIDDEN_IMPORT));
|
|
32
|
+
fixes.push(fixer.replaceText(jsxOpeningElement, "<".concat(_constants.IMPORT_NAME, " />")));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return fixes;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
exports.default = _default;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _getImportNodeBySource = require("../utils/get-import-node-by-source");
|
|
9
|
+
|
|
10
|
+
var _constants = require("./constants");
|
|
11
|
+
|
|
12
|
+
var _utils = require("./utils");
|
|
13
|
+
|
|
14
|
+
var _default = function _default(source, node) {
|
|
15
|
+
return function (fixer) {
|
|
16
|
+
var fixes = [];
|
|
17
|
+
var importedNode = (0, _utils.getFirstImport)(source);
|
|
18
|
+
var visuallyHiddenNode = (0, _getImportNodeBySource.getImportedNodeBySource)(source, _constants.VISUALLY_HIDDEN_SOURCE);
|
|
19
|
+
|
|
20
|
+
if (!importedNode) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (visuallyHiddenNode) {
|
|
25
|
+
fixes.push(fixer.replaceText(node, visuallyHiddenNode.specifiers[0].local.name));
|
|
26
|
+
} else {
|
|
27
|
+
fixes.push(fixer.insertTextBefore(importedNode, _constants.VISUALLY_HIDDEN_IMPORT));
|
|
28
|
+
fixes.push(fixer.replaceText(node, _constants.IMPORT_NAME));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return fixes;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
exports.default = _default;
|