@atlaskit/eslint-plugin-design-system 8.23.3 → 8.24.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.
Files changed (59) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +1 -0
  3. package/constellation/index/usage.mdx +39 -0
  4. package/dist/cjs/ast-nodes/index.js +7 -0
  5. package/dist/cjs/ast-nodes/object.js +102 -0
  6. package/dist/cjs/presets/all.codegen.js +2 -1
  7. package/dist/cjs/presets/recommended.codegen.js +2 -1
  8. package/dist/cjs/rules/index.codegen.js +3 -1
  9. package/dist/cjs/rules/local-cx-xcss/index.js +51 -0
  10. package/dist/cjs/rules/no-css-tagged-template-expression/create-no-tagged-template-expression-rule/index.js +3 -1
  11. package/dist/cjs/rules/no-css-tagged-template-expression/index.js +2 -2
  12. package/dist/cjs/rules/use-primitives/utils/is-valid-css-properties-to-transform.js +12 -1
  13. package/dist/cjs/rules/utils/is-supported-import.js +61 -0
  14. package/dist/es2019/ast-nodes/index.js +1 -0
  15. package/dist/es2019/ast-nodes/object.js +97 -0
  16. package/dist/es2019/presets/all.codegen.js +2 -1
  17. package/dist/es2019/presets/recommended.codegen.js +2 -1
  18. package/dist/es2019/rules/index.codegen.js +3 -1
  19. package/dist/es2019/rules/local-cx-xcss/index.js +45 -0
  20. package/dist/es2019/rules/no-css-tagged-template-expression/create-no-tagged-template-expression-rule/index.js +3 -1
  21. package/dist/es2019/rules/no-css-tagged-template-expression/index.js +2 -2
  22. package/dist/es2019/rules/use-primitives/utils/is-valid-css-properties-to-transform.js +9 -1
  23. package/dist/es2019/rules/utils/is-supported-import.js +52 -0
  24. package/dist/esm/ast-nodes/index.js +1 -0
  25. package/dist/esm/ast-nodes/object.js +97 -0
  26. package/dist/esm/presets/all.codegen.js +2 -1
  27. package/dist/esm/presets/recommended.codegen.js +2 -1
  28. package/dist/esm/rules/index.codegen.js +3 -1
  29. package/dist/esm/rules/local-cx-xcss/index.js +45 -0
  30. package/dist/esm/rules/no-css-tagged-template-expression/create-no-tagged-template-expression-rule/index.js +3 -1
  31. package/dist/esm/rules/no-css-tagged-template-expression/index.js +2 -2
  32. package/dist/esm/rules/use-primitives/utils/is-valid-css-properties-to-transform.js +9 -1
  33. package/dist/esm/rules/utils/is-supported-import.js +54 -0
  34. package/dist/types/ast-nodes/index.d.ts +1 -0
  35. package/dist/types/ast-nodes/object.d.ts +47 -0
  36. package/dist/types/index.codegen.d.ts +2 -0
  37. package/dist/types/presets/all.codegen.d.ts +2 -1
  38. package/dist/types/presets/recommended.codegen.d.ts +2 -1
  39. package/dist/types/rules/index.codegen.d.ts +1 -0
  40. package/dist/types/rules/local-cx-xcss/index.d.ts +3 -0
  41. package/dist/types/rules/no-css-tagged-template-expression/create-no-tagged-template-expression-rule/index.d.ts +3 -4
  42. package/dist/types/rules/use-primitives/config/index.d.ts +1 -1
  43. package/dist/types/rules/utils/is-supported-import.d.ts +16 -0
  44. package/dist/types-ts4.5/ast-nodes/index.d.ts +1 -0
  45. package/dist/types-ts4.5/ast-nodes/object.d.ts +47 -0
  46. package/dist/types-ts4.5/index.codegen.d.ts +2 -0
  47. package/dist/types-ts4.5/presets/all.codegen.d.ts +2 -1
  48. package/dist/types-ts4.5/presets/recommended.codegen.d.ts +2 -1
  49. package/dist/types-ts4.5/rules/index.codegen.d.ts +1 -0
  50. package/dist/types-ts4.5/rules/local-cx-xcss/index.d.ts +3 -0
  51. package/dist/types-ts4.5/rules/no-css-tagged-template-expression/create-no-tagged-template-expression-rule/index.d.ts +3 -4
  52. package/dist/types-ts4.5/rules/use-primitives/config/index.d.ts +1 -1
  53. package/dist/types-ts4.5/rules/utils/is-supported-import.d.ts +16 -0
  54. package/package.json +1 -1
  55. package/dist/cjs/rules/no-css-tagged-template-expression/is-supported-import.js +0 -29
  56. package/dist/es2019/rules/no-css-tagged-template-expression/is-supported-import.js +0 -21
  57. package/dist/esm/rules/no-css-tagged-template-expression/is-supported-import.js +0 -23
  58. package/dist/types/rules/no-css-tagged-template-expression/is-supported-import.d.ts +0 -12
  59. package/dist/types-ts4.5/rules/no-css-tagged-template-expression/is-supported-import.d.ts +0 -12
@@ -0,0 +1,16 @@
1
+ import type { Scope } from 'eslint';
2
+ import type { CallExpression } from 'estree';
3
+ type Callee = CallExpression['callee'];
4
+ type Reference = Scope.Reference;
5
+ export declare const CSS_IN_JS_IMPORTS: {
6
+ compiled: string;
7
+ emotionReact: string;
8
+ emotionCore: string;
9
+ styledComponents: string;
10
+ atlaskitCss: string;
11
+ };
12
+ type ValidImportSources = string[];
13
+ export type SupportedNameChecker = (nodeToCheck: Callee, referencesInScope: Reference[], importSources: ValidImportSources) => boolean;
14
+ export declare const isCss: SupportedNameChecker;
15
+ export declare const isCxFunction: SupportedNameChecker;
16
+ export {};
@@ -2,4 +2,5 @@ export { FunctionCall } from './function-call';
2
2
  export { Import } from './import';
3
3
  export { JSXAttribute } from './jsx-attribute';
4
4
  export { JSXElement } from './jsx-element';
5
+ export { Object } from './object';
5
6
  export { Root } from './root';
@@ -0,0 +1,47 @@
1
+ import type { Rule } from 'eslint';
2
+ import { ObjectExpression, Property } from 'eslint-codemod-utils';
3
+ declare const ASTObjectExpression: {
4
+ /**
5
+ * Returns `true` if an object contains a property with the specified name, `false` otherwise.
6
+ */
7
+ hasProperty(node: ObjectExpression, name: string): boolean;
8
+ /**
9
+ * Returns true if an object contains no nested values, false otherwise.
10
+ *
11
+ * Note:
12
+ * - Returns false if object contains spread elements.
13
+ * - Returns true if object is empty.
14
+ */
15
+ isFlat(node: ObjectExpression): boolean;
16
+ /**
17
+ * Returns a key-value pair like: `padding: '8px'` from: `{ padding: '8px' }`.
18
+ */
19
+ getEntryByPropertyName(node: ObjectExpression, name: string): Property | undefined;
20
+ deleteEntry(node: ObjectExpression, name: string, fixer: Rule.RuleFixer): Rule.Fix[];
21
+ /**
22
+ * Returns a only the property @type {Property['key']} like: `padding` from: `{ padding: '8px' }`.
23
+ */
24
+ getProperty(node: ObjectExpression, name: string): Property['key'] | undefined;
25
+ /**
26
+ * Returns a only the property @type {Property['value']} like: `'8px` from: `{ padding: '8px' }`.
27
+ *
28
+ * Values can be basically anything, so be careful with this.
29
+ */
30
+ getValueByPropertyName(node: ObjectExpression, name: string): Property['value'] | undefined;
31
+ containsSpreadProps(node: ObjectExpression): boolean;
32
+ updateValue(node: ObjectExpression, propertyName: string, newValue: string, fixer: Rule.RuleFixer): Rule.Fix;
33
+ /**
34
+ * Appends a key-value pair to the end of an object. For example:
35
+ * ```
36
+ * ast.Object.appendEntry(
37
+ * node, // { padding: 'space.100' }
38
+ * key, // 'margin',
39
+ * value, // 'space.200'
40
+ * fixer,
41
+ * )
42
+ * ```
43
+ * Will result in `{ padding: 'space.100', margin: 'space.200'}`.
44
+ */
45
+ appendEntry(node: ObjectExpression, key: string, value: string, fixer: Rule.RuleFixer): Rule.Fix;
46
+ };
47
+ export { ASTObjectExpression as Object };
@@ -7,6 +7,7 @@ export declare const configs: {
7
7
  '@atlaskit/design-system/ensure-design-token-usage': string;
8
8
  '@atlaskit/design-system/ensure-design-token-usage/preview': string;
9
9
  '@atlaskit/design-system/icon-label': string;
10
+ '@atlaskit/design-system/local-cx-xcss': string;
10
11
  '@atlaskit/design-system/no-banned-imports': string;
11
12
  '@atlaskit/design-system/no-css-tagged-template-expression': string;
12
13
  '@atlaskit/design-system/no-deprecated-apis': string;
@@ -33,6 +34,7 @@ export declare const configs: {
33
34
  '@atlaskit/design-system/consistent-css-prop-usage': string;
34
35
  '@atlaskit/design-system/ensure-design-token-usage': string;
35
36
  '@atlaskit/design-system/icon-label': string;
37
+ '@atlaskit/design-system/local-cx-xcss': string;
36
38
  '@atlaskit/design-system/no-banned-imports': string;
37
39
  '@atlaskit/design-system/no-deprecated-apis': string;
38
40
  '@atlaskit/design-system/no-deprecated-design-token-usage': string;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * THIS FILE WAS CREATED VIA CODEGEN DO NOT MODIFY {@see http://go/af-codegen}
3
- * @codegen <<SignedSource::d1a459e1ea71650f65b2890dc86cc398>>
3
+ * @codegen <<SignedSource::5026ba2cb55b3c1bcacbfe7fb7728a6c>>
4
4
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
5
5
  */
6
6
  declare const _default: {
@@ -10,6 +10,7 @@ declare const _default: {
10
10
  '@atlaskit/design-system/ensure-design-token-usage': string;
11
11
  '@atlaskit/design-system/ensure-design-token-usage/preview': string;
12
12
  '@atlaskit/design-system/icon-label': string;
13
+ '@atlaskit/design-system/local-cx-xcss': string;
13
14
  '@atlaskit/design-system/no-banned-imports': string;
14
15
  '@atlaskit/design-system/no-css-tagged-template-expression': string;
15
16
  '@atlaskit/design-system/no-deprecated-apis': string;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * THIS FILE WAS CREATED VIA CODEGEN DO NOT MODIFY {@see http://go/af-codegen}
3
- * @codegen <<SignedSource::3b93cfbbe0ea14514b9600509632394b>>
3
+ * @codegen <<SignedSource::839224bfab98c1ddf6018dec5320968e>>
4
4
  * @codegenCommand yarn workspace @atlaskit/eslint-plugin-design-system codegen
5
5
  */
6
6
  declare const _default: {
@@ -9,6 +9,7 @@ declare const _default: {
9
9
  '@atlaskit/design-system/consistent-css-prop-usage': string;
10
10
  '@atlaskit/design-system/ensure-design-token-usage': string;
11
11
  '@atlaskit/design-system/icon-label': string;
12
+ '@atlaskit/design-system/local-cx-xcss': string;
12
13
  '@atlaskit/design-system/no-banned-imports': string;
13
14
  '@atlaskit/design-system/no-deprecated-apis': string;
14
15
  '@atlaskit/design-system/no-deprecated-design-token-usage': string;
@@ -3,6 +3,7 @@ declare const _default: {
3
3
  'ensure-design-token-usage': import("eslint").Rule.RuleModule;
4
4
  'ensure-design-token-usage/preview': import("eslint").Rule.RuleModule;
5
5
  'icon-label': import("eslint").Rule.RuleModule;
6
+ 'local-cx-xcss': import("eslint").Rule.RuleModule;
6
7
  'no-banned-imports': import("eslint").Rule.RuleModule;
7
8
  'no-css-tagged-template-expression': import("eslint").Rule.RuleModule;
8
9
  'no-deprecated-apis': import("@typescript-eslint/utils/dist/ts-eslint/Rule").RuleModule<string, [
@@ -0,0 +1,3 @@
1
+ import type { Rule } from 'eslint';
2
+ export declare const rule: Rule.RuleModule;
3
+ export default rule;
@@ -1,6 +1,5 @@
1
- import type { Rule, Scope } from 'eslint';
2
- type Node = Rule.Node;
3
- type Reference = Scope.Reference;
1
+ import type { Rule } from 'eslint';
2
+ import { SupportedNameChecker } from '../../utils/is-supported-import';
4
3
  type RuleModule = Rule.RuleModule;
5
- export declare const createNoTaggedTemplateExpressionRule: (isUsage: (node: Node, references: Reference[]) => boolean, messageId: string) => RuleModule['create'];
4
+ export declare const createNoTaggedTemplateExpressionRule: (isUsage: SupportedNameChecker, messageId: string) => RuleModule['create'];
6
5
  export {};
@@ -1,4 +1,4 @@
1
- type Pattern = 'compiled-css-function' | 'compiled-styled-object' | 'css-template-literal' | 'css-property-with-tokens' | 'css-property-multiple-values';
1
+ type Pattern = 'compiled-css-function' | 'compiled-styled-object' | 'css-template-literal' | 'css-property-with-tokens' | 'css-property-multiple-values' | 'multiple-properties';
2
2
  export interface RuleConfig {
3
3
  patterns: Pattern[];
4
4
  }
@@ -0,0 +1,16 @@
1
+ import type { Scope } from 'eslint';
2
+ import type { CallExpression } from 'estree';
3
+ type Callee = CallExpression['callee'];
4
+ type Reference = Scope.Reference;
5
+ export declare const CSS_IN_JS_IMPORTS: {
6
+ compiled: string;
7
+ emotionReact: string;
8
+ emotionCore: string;
9
+ styledComponents: string;
10
+ atlaskitCss: string;
11
+ };
12
+ type ValidImportSources = string[];
13
+ export type SupportedNameChecker = (nodeToCheck: Callee, referencesInScope: Reference[], importSources: ValidImportSources) => boolean;
14
+ export declare const isCss: SupportedNameChecker;
15
+ export declare const isCxFunction: SupportedNameChecker;
16
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@atlaskit/eslint-plugin-design-system",
3
3
  "description": "The essential plugin for use with the Atlassian Design System.",
4
- "version": "8.23.3",
4
+ "version": "8.24.0",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "publishConfig": {
7
7
  "registry": "https://registry.npmjs.org/"
@@ -1,29 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.isSupportedImport = exports.SUPPORTED_IMPORTS = void 0;
7
- // eslint-disable-next-line import/no-extraneous-dependencies
8
-
9
- var SUPPORTED_IMPORTS = exports.SUPPORTED_IMPORTS = {
10
- compiled: '@compiled/react',
11
- emotionReact: '@emotion/react',
12
- emotionCore: '@emotion/core',
13
- styledComponents: 'styled-components'
14
- };
15
- var isImportSpecifierWrapper = function isImportSpecifierWrapper(name) {
16
- return function (def) {
17
- var _def$parent, _def$parent2, _def$parent3, _def$parent4, _def$parent5;
18
- return def.node.type === 'ImportSpecifier' && def.node.imported.type === 'Identifier' && def.node.imported.name === name && ((_def$parent = def.parent) === null || _def$parent === void 0 ? void 0 : _def$parent.type) === 'ImportDeclaration' && (((_def$parent2 = def.parent) === null || _def$parent2 === void 0 ? void 0 : _def$parent2.source.value) === SUPPORTED_IMPORTS.compiled || ((_def$parent3 = def.parent) === null || _def$parent3 === void 0 ? void 0 : _def$parent3.source.value) === SUPPORTED_IMPORTS.emotionReact || ((_def$parent4 = def.parent) === null || _def$parent4 === void 0 ? void 0 : _def$parent4.source.value) === SUPPORTED_IMPORTS.emotionCore || ((_def$parent5 = def.parent) === null || _def$parent5 === void 0 ? void 0 : _def$parent5.source.value) === SUPPORTED_IMPORTS.styledComponents);
19
- };
20
- };
21
- var isSupportedImport = exports.isSupportedImport = function isSupportedImport(name) {
22
- var isImportSpecifier = isImportSpecifierWrapper(name);
23
- return function (node, references) {
24
- return node.type === 'Identifier' && references.some(function (reference) {
25
- var _reference$resolved;
26
- return reference.identifier === node && ((_reference$resolved = reference.resolved) === null || _reference$resolved === void 0 ? void 0 : _reference$resolved.defs.some(isImportSpecifier));
27
- });
28
- };
29
- };
@@ -1,21 +0,0 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
- export const SUPPORTED_IMPORTS = {
4
- compiled: '@compiled/react',
5
- emotionReact: '@emotion/react',
6
- emotionCore: '@emotion/core',
7
- styledComponents: 'styled-components'
8
- };
9
- const isImportSpecifierWrapper = name => {
10
- return def => {
11
- var _def$parent, _def$parent2, _def$parent3, _def$parent4, _def$parent5;
12
- return def.node.type === 'ImportSpecifier' && def.node.imported.type === 'Identifier' && def.node.imported.name === name && ((_def$parent = def.parent) === null || _def$parent === void 0 ? void 0 : _def$parent.type) === 'ImportDeclaration' && (((_def$parent2 = def.parent) === null || _def$parent2 === void 0 ? void 0 : _def$parent2.source.value) === SUPPORTED_IMPORTS.compiled || ((_def$parent3 = def.parent) === null || _def$parent3 === void 0 ? void 0 : _def$parent3.source.value) === SUPPORTED_IMPORTS.emotionReact || ((_def$parent4 = def.parent) === null || _def$parent4 === void 0 ? void 0 : _def$parent4.source.value) === SUPPORTED_IMPORTS.emotionCore || ((_def$parent5 = def.parent) === null || _def$parent5 === void 0 ? void 0 : _def$parent5.source.value) === SUPPORTED_IMPORTS.styledComponents);
13
- };
14
- };
15
- export const isSupportedImport = name => {
16
- const isImportSpecifier = isImportSpecifierWrapper(name);
17
- return (node, references) => node.type === 'Identifier' && references.some(reference => {
18
- var _reference$resolved;
19
- return reference.identifier === node && ((_reference$resolved = reference.resolved) === null || _reference$resolved === void 0 ? void 0 : _reference$resolved.defs.some(isImportSpecifier));
20
- });
21
- };
@@ -1,23 +0,0 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
-
3
- export var SUPPORTED_IMPORTS = {
4
- compiled: '@compiled/react',
5
- emotionReact: '@emotion/react',
6
- emotionCore: '@emotion/core',
7
- styledComponents: 'styled-components'
8
- };
9
- var isImportSpecifierWrapper = function isImportSpecifierWrapper(name) {
10
- return function (def) {
11
- var _def$parent, _def$parent2, _def$parent3, _def$parent4, _def$parent5;
12
- return def.node.type === 'ImportSpecifier' && def.node.imported.type === 'Identifier' && def.node.imported.name === name && ((_def$parent = def.parent) === null || _def$parent === void 0 ? void 0 : _def$parent.type) === 'ImportDeclaration' && (((_def$parent2 = def.parent) === null || _def$parent2 === void 0 ? void 0 : _def$parent2.source.value) === SUPPORTED_IMPORTS.compiled || ((_def$parent3 = def.parent) === null || _def$parent3 === void 0 ? void 0 : _def$parent3.source.value) === SUPPORTED_IMPORTS.emotionReact || ((_def$parent4 = def.parent) === null || _def$parent4 === void 0 ? void 0 : _def$parent4.source.value) === SUPPORTED_IMPORTS.emotionCore || ((_def$parent5 = def.parent) === null || _def$parent5 === void 0 ? void 0 : _def$parent5.source.value) === SUPPORTED_IMPORTS.styledComponents);
13
- };
14
- };
15
- export var isSupportedImport = function isSupportedImport(name) {
16
- var isImportSpecifier = isImportSpecifierWrapper(name);
17
- return function (node, references) {
18
- return node.type === 'Identifier' && references.some(function (reference) {
19
- var _reference$resolved;
20
- return reference.identifier === node && ((_reference$resolved = reference.resolved) === null || _reference$resolved === void 0 ? void 0 : _reference$resolved.defs.some(isImportSpecifier));
21
- });
22
- };
23
- };
@@ -1,12 +0,0 @@
1
- import type { Rule, Scope } from 'eslint';
2
- type Node = Rule.Node;
3
- type Reference = Scope.Reference;
4
- type SupportedNameChecker = (node: Node, references: Reference[]) => boolean;
5
- export declare const SUPPORTED_IMPORTS: {
6
- compiled: string;
7
- emotionReact: string;
8
- emotionCore: string;
9
- styledComponents: string;
10
- };
11
- export declare const isSupportedImport: (name: string) => SupportedNameChecker;
12
- export {};
@@ -1,12 +0,0 @@
1
- import type { Rule, Scope } from 'eslint';
2
- type Node = Rule.Node;
3
- type Reference = Scope.Reference;
4
- type SupportedNameChecker = (node: Node, references: Reference[]) => boolean;
5
- export declare const SUPPORTED_IMPORTS: {
6
- compiled: string;
7
- emotionReact: string;
8
- emotionCore: string;
9
- styledComponents: string;
10
- };
11
- export declare const isSupportedImport: (name: string) => SupportedNameChecker;
12
- export {};