@atlaskit/eslint-plugin-platform 0.7.2 → 0.7.4

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 (36) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/index.js +4 -3
  3. package/dist/cjs/rules/ensure-critical-dependency-resolutions/index.js +4 -4
  4. package/dist/cjs/rules/ensure-native-and-af-exports-synced/index.js +3 -3
  5. package/dist/cjs/rules/no-duplicate-dependencies/index.js +3 -3
  6. package/dist/cjs/rules/no-module-level-eval-nav4/index.js +56 -0
  7. package/dist/cjs/rules/utils.js +3 -3
  8. package/dist/es2019/index.js +4 -3
  9. package/dist/es2019/rules/ensure-critical-dependency-resolutions/index.js +4 -4
  10. package/dist/es2019/rules/ensure-native-and-af-exports-synced/index.js +3 -3
  11. package/dist/es2019/rules/no-module-level-eval-nav4/index.js +50 -0
  12. package/dist/esm/index.js +4 -3
  13. package/dist/esm/rules/ensure-critical-dependency-resolutions/index.js +4 -4
  14. package/dist/esm/rules/ensure-native-and-af-exports-synced/index.js +3 -3
  15. package/dist/esm/rules/no-duplicate-dependencies/index.js +3 -3
  16. package/dist/esm/rules/no-module-level-eval-nav4/index.js +50 -0
  17. package/dist/esm/rules/utils.js +3 -3
  18. package/dist/types/index.d.ts +2 -1
  19. package/dist/types-ts4.5/index.d.ts +2 -1
  20. package/index.js +1 -19
  21. package/package.json +8 -7
  22. package/src/index.tsx +7 -3
  23. package/src/rules/ensure-critical-dependency-resolutions/__test__/unit/rule.test.tsx +14 -14
  24. package/src/rules/ensure-critical-dependency-resolutions/index.tsx +4 -4
  25. package/src/rules/ensure-native-and-af-exports-synced/index.tsx +3 -3
  26. package/src/rules/no-module-level-eval-nav4/README.md +8 -0
  27. package/src/rules/no-module-level-eval-nav4/__tests__/test.tsx +130 -0
  28. package/src/rules/no-module-level-eval-nav4/index.tsx +67 -0
  29. package/tsconfig.app.json +5 -1
  30. package/dist/cjs/rules/ensure-valid-emotion-css-prop/index.js +0 -91
  31. package/dist/es2019/rules/ensure-valid-emotion-css-prop/index.js +0 -87
  32. package/dist/esm/rules/ensure-valid-emotion-css-prop/index.js +0 -85
  33. package/src/rules/ensure-valid-emotion-css-prop/__tests__/unit/rule.test.ts +0 -142
  34. package/src/rules/ensure-valid-emotion-css-prop/index.ts +0 -96
  35. /package/dist/types/rules/{ensure-valid-emotion-css-prop → no-module-level-eval-nav4}/index.d.ts +0 -0
  36. /package/dist/types-ts4.5/rules/{ensure-valid-emotion-css-prop → no-module-level-eval-nav4}/index.d.ts +0 -0
@@ -1,142 +0,0 @@
1
- import { tester } from '../../../../__tests__/utils/_tester';
2
- import rule from '../../index';
3
-
4
- describe('test ensure-valid-emotion-css-prop', () => {
5
- tester.run('ensure-valid-emotion-css-prop', rule, {
6
- valid: [
7
- {
8
- code: `
9
- /** @jsx jsx */
10
- import { jsx, css } from '@emotion/react';
11
- const styles = css({ opacity: 0.5 });
12
- const Component = () => <div css={styles} />;`,
13
- filename: 'src/index.tsx',
14
- },
15
- {
16
- code: `
17
- /** @jsx jsx */
18
- import { jsx, css } from '@emotion/react';
19
- const styles = css({ opacity: 0.5 });
20
- const Component = () => <div css={[styles, { color: 'red' }]} />;`,
21
- filename: 'src/index.tsx',
22
- },
23
- {
24
- code: `
25
- /** @jsx jsx */
26
- import { jsx } from '@emotion/react';
27
- const Component = () => <div />;`,
28
- filename: 'src/index.tsx',
29
- },
30
- {
31
- code: `
32
- /** @jsx jsx */
33
- import { jsx, css } from '@emotion/react';
34
- const Component = () => <div css={css({ opacity: 0.5 })} />;`,
35
- filename: 'src/index.tsx',
36
- },
37
- {
38
- code: `
39
- /** @jsx jsx */
40
- import { jsx } from '@emotion/react';
41
- const Component = () => <div css={{ opacity: 0.5 }} />;`,
42
- filename: 'src/__tests__/test.tsx',
43
- },
44
- {
45
- code: `
46
- /** @jsx jsx */
47
- import { jsx } from '@emotion/react';
48
- const Component = () => <div css={{ opacity: 0.5 }} />;`,
49
- filename: 'src/examples/example.tsx',
50
- },
51
- {
52
- code: `
53
- /** @jsx jsx */
54
- import { jsx } from '@emotion/react';
55
- const Component = () => <div css={{ opacity: 0.5 }} />;`,
56
- filename: 'src/example-helpers/index.tsx',
57
- },
58
- {
59
- code: `
60
- /** @jsx jsx */
61
- import { jsx } from '@emotion/react';
62
- const Component = () => <div css={{ opacity: 0.5 }} />;`,
63
- filename: 'src/__fixtures__/index.tsx',
64
- },
65
- {
66
- code: `
67
- /** @jsx jsx */
68
- import { jsx } from '@compiled/react';
69
- const Component = () => <div />;`,
70
- filename: 'src/index.tsx',
71
- },
72
- {
73
- code: `
74
- /** @jsx jsx */
75
- import { jsx } from '@emotion/react';
76
- const styles = { opacity: 0.5 };
77
- const Component = () => <div css={styles} />;`,
78
- filename: 'src/index.tsx',
79
- },
80
- {
81
- code: `
82
- /** @jsx jsx */
83
- import { jsx, css } from '@emotion/react';
84
- const getOpacity = (foo) => 0.5;
85
- const Component = (props) => {
86
- const styles = { opacity: getOpacity(props.foo) };
87
- return <div css={styles} />
88
- };`,
89
- filename: 'src/index.tsx',
90
- },
91
- {
92
- code: `
93
- /** @jsx jsx */
94
- import { jsx, css } from '@emotion/react';
95
- const getStyles = (opacity) => ({ color: 'red', opacity });
96
- const Component = (props) => <div css={getStyles(props.opacity)} />`,
97
- filename: 'src/index.tsx',
98
- },
99
- {
100
- code: `
101
- /** @jsx jsx */
102
- import { jsx, css } from '@emotion/react';
103
- const getOpacity = (foo) => 0.5;
104
- function getStyles(props) {
105
- return { color: 'red', opacity: props.opacity };
106
- }
107
- const Component = (props) => <div css={getStyles(props)} />;`,
108
- filename: 'src/index.tsx',
109
- },
110
- ],
111
- invalid: [
112
- {
113
- code: `
114
- /** @jsx jsx */
115
- import { jsx } from '@emotion/react';
116
- const Component = () => <div css={{ opacity: 0.5 }} />;`,
117
- filename: 'src/index.tsx',
118
- errors: [{ messageId: 'noEmotionCssImport' }],
119
- },
120
- {
121
- code: `
122
- /** @jsx jsx */
123
- import { jsx, css } from '@emotion/react';
124
- const getOpacity = (foo) => 0.5;
125
- const Component = (props) => <div css={{ opacity: getOpacity(props.foo) }} />;`,
126
- filename: 'src/index.tsx',
127
- errors: [{ messageId: 'noEmotionCssPropFunctionCall' }],
128
- },
129
- {
130
- code: `
131
- /** @jsx jsx */
132
- import { jsx, css } from '@emotion/react';
133
- function getOpacity(foo) {
134
- return 0.5;
135
- }
136
- const Component = (props) => <div css={{ opacity: getOpacity(props.foo) }} />;`,
137
- filename: 'src/index.tsx',
138
- errors: [{ messageId: 'noEmotionCssPropFunctionCall' }],
139
- },
140
- ],
141
- });
142
- });
@@ -1,96 +0,0 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
- import type { Rule } from 'eslint';
3
-
4
- type Position = {
5
- line: number;
6
- column: number;
7
- };
8
-
9
- const rule: Rule.RuleModule = {
10
- meta: {
11
- type: 'problem',
12
- docs: {
13
- description: 'Ensure valid use of the `css` prop from `@emotion/react`',
14
- recommended: true,
15
- },
16
- messages: {
17
- noEmotionCssImport: 'Must import `css` from `@emotion/react` when using the `css` prop.',
18
- noEmotionCssPropFunctionCall:
19
- 'No function calls allowed when passing an object directly to the `css` prop with `@emotion/react`.',
20
- },
21
- },
22
- create(context) {
23
- let emotionJsxImported = false;
24
- let emotionJsxImportPosition: Position | null | undefined;
25
- let emotionCssImported = false;
26
- let cssPropExpressonUsed = false;
27
-
28
- // Ignore files in these directories
29
- if (/example|__tests__|__fixtures__/.test(context.filename)) {
30
- return {};
31
- }
32
-
33
- return {
34
- ImportDeclaration(node) {
35
- if (node.source.value === '@emotion/react') {
36
- node.specifiers.forEach((specifier) => {
37
- if (specifier.type === 'ImportSpecifier') {
38
- if (specifier.imported.name === 'jsx') {
39
- emotionJsxImported = true;
40
- emotionJsxImportPosition = specifier.loc?.start;
41
- }
42
- if (specifier.imported.name === 'css') {
43
- emotionCssImported = true;
44
- }
45
- }
46
- });
47
- }
48
- },
49
- JSXAttribute(node: any) {
50
- const { name, value } = node;
51
-
52
- // Only run on emotion css props
53
- if (!emotionJsxImported) return;
54
- if (name.name !== 'css') return;
55
-
56
- if (
57
- value.type === 'JSXExpressionContainer' &&
58
- value.expression.type === 'ObjectExpression'
59
- ) {
60
- cssPropExpressonUsed = true;
61
- let containsFunctionExpression = false;
62
-
63
- // Iterate over the properties of the object
64
- value.expression.properties.forEach((prop: any) => {
65
- // Check for function expressions directly within the object literal
66
- if (
67
- prop.value?.type === 'ArrowFunctionExpression' ||
68
- prop.value?.type === 'FunctionExpression' ||
69
- prop.value?.type === 'CallExpression'
70
- ) {
71
- containsFunctionExpression = true;
72
- }
73
- });
74
-
75
- // If a function expression is found within the direct object literal, report an error
76
- if (containsFunctionExpression) {
77
- context.report({
78
- node,
79
- messageId: 'noEmotionCssPropFunctionCall',
80
- });
81
- }
82
- }
83
- },
84
- 'Program:exit'() {
85
- if (emotionJsxImported && cssPropExpressonUsed && !emotionCssImported) {
86
- context.report({
87
- messageId: 'noEmotionCssImport',
88
- loc: emotionJsxImportPosition || { line: 1, column: 0 },
89
- });
90
- }
91
- },
92
- };
93
- },
94
- };
95
-
96
- export default rule;