@atlaskit/eslint-plugin-platform 2.6.0 → 2.7.1

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 (119) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/index.js +4 -3
  3. package/dist/cjs/rules/ensure-critical-dependency-resolutions/index.js +2 -2
  4. package/dist/cjs/rules/ensure-native-and-af-exports-synced/index.js +3 -0
  5. package/dist/cjs/rules/feature-gating/no-alias/index.js +1 -1
  6. package/dist/cjs/rules/no-direct-document-usage/index.js +1 -1
  7. package/dist/cjs/rules/no-set-immediate/index.js +39 -0
  8. package/dist/cjs/rules/util/context-compat.js +4 -2
  9. package/dist/es2019/index.js +4 -3
  10. package/dist/es2019/rules/ensure-critical-dependency-resolutions/index.js +2 -2
  11. package/dist/es2019/rules/ensure-native-and-af-exports-synced/index.js +3 -0
  12. package/dist/es2019/rules/feature-gating/no-alias/index.js +1 -1
  13. package/dist/es2019/rules/no-direct-document-usage/index.js +1 -1
  14. package/dist/es2019/rules/no-set-immediate/index.js +33 -0
  15. package/dist/es2019/rules/util/context-compat.js +4 -2
  16. package/dist/esm/index.js +4 -3
  17. package/dist/esm/rules/ensure-critical-dependency-resolutions/index.js +2 -2
  18. package/dist/esm/rules/ensure-native-and-af-exports-synced/index.js +3 -0
  19. package/dist/esm/rules/feature-gating/no-alias/index.js +1 -1
  20. package/dist/esm/rules/no-direct-document-usage/index.js +1 -1
  21. package/dist/esm/rules/no-set-immediate/index.js +33 -0
  22. package/dist/esm/rules/util/context-compat.js +4 -2
  23. package/dist/types/index.d.ts +14 -6
  24. package/dist/types/rules/util/handle-ast-object.d.ts +1 -1
  25. package/dist/types-ts4.5/index.d.ts +14 -6
  26. package/dist/types-ts4.5/rules/util/handle-ast-object.d.ts +1 -1
  27. package/package.json +2 -2
  28. package/afm-cc/tsconfig.json +0 -24
  29. package/afm-jira/tsconfig.json +0 -24
  30. package/build/tsconfig.json +0 -17
  31. package/dist/cjs/rules/ensure-valid-platform-yarn-protocol-usage/index.js +0 -79
  32. package/dist/es2019/rules/ensure-valid-platform-yarn-protocol-usage/index.js +0 -62
  33. package/dist/esm/rules/ensure-valid-platform-yarn-protocol-usage/index.js +0 -75
  34. package/src/__tests__/utils/_tester.tsx +0 -26
  35. package/src/index.tsx +0 -251
  36. package/src/rules/compiled/README.md +0 -3
  37. package/src/rules/compiled/expand-background-shorthand/README.md +0 -23
  38. package/src/rules/compiled/expand-background-shorthand/__tests__/rule.test.ts +0 -160
  39. package/src/rules/compiled/expand-background-shorthand/index.tsx +0 -43
  40. package/src/rules/compiled/expand-border-shorthand/README.md +0 -51
  41. package/src/rules/compiled/expand-border-shorthand/__tests__/rule.test.ts +0 -211
  42. package/src/rules/compiled/expand-border-shorthand/index.ts +0 -103
  43. package/src/rules/compiled/expand-spacing-shorthand/README.md +0 -38
  44. package/src/rules/compiled/expand-spacing-shorthand/__tests__/rule.test.ts +0 -448
  45. package/src/rules/compiled/expand-spacing-shorthand/index.ts +0 -240
  46. package/src/rules/constants.tsx +0 -20
  47. package/src/rules/ensure-atlassian-team/__tests__/unit/rule.test.ts +0 -24
  48. package/src/rules/ensure-atlassian-team/index.ts +0 -51
  49. package/src/rules/ensure-critical-dependency-resolutions/__test__/unit/rule.test.tsx +0 -200
  50. package/src/rules/ensure-critical-dependency-resolutions/index.tsx +0 -172
  51. package/src/rules/ensure-feature-flag-prefix/__tests__/unit/rule.test.tsx +0 -65
  52. package/src/rules/ensure-feature-flag-prefix/index.tsx +0 -81
  53. package/src/rules/ensure-feature-flag-registration/__tests__/unit/rule.test.tsx +0 -115
  54. package/src/rules/ensure-feature-flag-registration/index.tsx +0 -106
  55. package/src/rules/ensure-native-and-af-exports-synced/__tests__/unit/rule.test.tsx +0 -199
  56. package/src/rules/ensure-native-and-af-exports-synced/index.tsx +0 -188
  57. package/src/rules/ensure-no-private-dependencies/__tests__/unit/rule.test.ts +0 -212
  58. package/src/rules/ensure-no-private-dependencies/index.ts +0 -64
  59. package/src/rules/ensure-publish-valid/__tests__/unit/rule.test.ts +0 -39
  60. package/src/rules/ensure-publish-valid/index.ts +0 -81
  61. package/src/rules/ensure-test-runner-arguments/__tests__/unit/rule.test.tsx +0 -298
  62. package/src/rules/ensure-test-runner-arguments/index.tsx +0 -121
  63. package/src/rules/ensure-test-runner-nested-count/__tests__/unit/rule.test.tsx +0 -308
  64. package/src/rules/ensure-test-runner-nested-count/index.tsx +0 -82
  65. package/src/rules/ensure-valid-bin-values/__tests__/unit/rule.test.ts +0 -159
  66. package/src/rules/ensure-valid-bin-values/index.ts +0 -70
  67. package/src/rules/ensure-valid-platform-yarn-protocol-usage/__tests__/unit/rule.test.ts +0 -147
  68. package/src/rules/ensure-valid-platform-yarn-protocol-usage/index.ts +0 -67
  69. package/src/rules/feature-gating/README.md +0 -8
  70. package/src/rules/feature-gating/inline-usage/README.md +0 -53
  71. package/src/rules/feature-gating/inline-usage/__tests__/rule.test.tsx +0 -106
  72. package/src/rules/feature-gating/inline-usage/index.tsx +0 -135
  73. package/src/rules/feature-gating/no-alias/README.md +0 -29
  74. package/src/rules/feature-gating/no-alias/__tests__/rule.test.tsx +0 -76
  75. package/src/rules/feature-gating/no-alias/index.tsx +0 -80
  76. package/src/rules/feature-gating/no-module-level-eval/README.md +0 -53
  77. package/src/rules/feature-gating/no-module-level-eval/__tests__/test.tsx +0 -133
  78. package/src/rules/feature-gating/no-module-level-eval/index.tsx +0 -54
  79. package/src/rules/feature-gating/no-module-level-eval-nav4/README.md +0 -8
  80. package/src/rules/feature-gating/no-module-level-eval-nav4/__tests__/test.tsx +0 -130
  81. package/src/rules/feature-gating/no-module-level-eval-nav4/index.tsx +0 -73
  82. package/src/rules/feature-gating/no-preconditioning/README.md +0 -69
  83. package/src/rules/feature-gating/no-preconditioning/__tests__/rule.test.tsx +0 -164
  84. package/src/rules/feature-gating/no-preconditioning/index.tsx +0 -138
  85. package/src/rules/feature-gating/prefer-fg/README.md +0 -3
  86. package/src/rules/feature-gating/prefer-fg/__tests__/rule.test.tsx +0 -83
  87. package/src/rules/feature-gating/prefer-fg/index.tsx +0 -110
  88. package/src/rules/feature-gating/static-feature-flags/README.md +0 -3
  89. package/src/rules/feature-gating/static-feature-flags/__tests__/test.tsx +0 -135
  90. package/src/rules/feature-gating/static-feature-flags/index.tsx +0 -103
  91. package/src/rules/feature-gating/use-recommended-utils/README.md +0 -67
  92. package/src/rules/feature-gating/use-recommended-utils/__tests__/rule.test.tsx +0 -78
  93. package/src/rules/feature-gating/use-recommended-utils/index.tsx +0 -57
  94. package/src/rules/feature-gating/utils.tsx +0 -48
  95. package/src/rules/no-direct-document-usage/index.tsx +0 -109
  96. package/src/rules/no-duplicate-dependencies/__tests__/unit/rule.test.ts +0 -116
  97. package/src/rules/no-duplicate-dependencies/index.ts +0 -79
  98. package/src/rules/no-invalid-feature-flag-usage/__tests__/unit/rule.test.tsx +0 -69
  99. package/src/rules/no-invalid-feature-flag-usage/index.tsx +0 -128
  100. package/src/rules/no-invalid-storybook-decorator-usage/__tests__/unit/rule.test.tsx +0 -18
  101. package/src/rules/no-invalid-storybook-decorator-usage/index.tsx +0 -39
  102. package/src/rules/no-pre-post-installs/__tests__/unit/rule.test.ts +0 -41
  103. package/src/rules/no-pre-post-installs/index.ts +0 -35
  104. package/src/rules/no-sparse-checkout/__tests__/unit/rule.test.tsx +0 -48
  105. package/src/rules/no-sparse-checkout/index.tsx +0 -54
  106. package/src/rules/use-entrypoints-in-examples/README.md +0 -27
  107. package/src/rules/use-entrypoints-in-examples/__tests__/rule.test.tsx +0 -34
  108. package/src/rules/use-entrypoints-in-examples/index.tsx +0 -43
  109. package/src/rules/util/__tests__/context-compat.test.ts +0 -122
  110. package/src/rules/util/compiled-utils.ts +0 -27
  111. package/src/rules/util/context-compat.ts +0 -41
  112. package/src/rules/util/file-exclusions.ts +0 -39
  113. package/src/rules/util/handle-ast-object.ts +0 -33
  114. package/src/rules/util/registration-utils.ts +0 -59
  115. package/tsconfig.app.json +0 -43
  116. package/tsconfig.dev.json +0 -40
  117. package/tsconfig.json +0 -23
  118. /package/dist/types/rules/{ensure-valid-platform-yarn-protocol-usage → no-set-immediate}/index.d.ts +0 -0
  119. /package/dist/types-ts4.5/rules/{ensure-valid-platform-yarn-protocol-usage → no-set-immediate}/index.d.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @atlaskit/eslint-plugin-platform
2
2
 
3
+ ## 2.7.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`098cfbb01dc36`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/098cfbb01dc36) -
8
+ Add missing npmignore files to remove unnecessary files from published package
9
+
10
+ ## 2.7.0
11
+
12
+ ### Minor Changes
13
+
14
+ - [#157255](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/157255)
15
+ [`334db48ef3650`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/334db48ef3650) -
16
+ Linting rule to forbid use of non standard setImediate
17
+
3
18
  ## 2.6.0
4
19
 
5
20
  ### Minor Changes
package/dist/cjs/index.js CHANGED
@@ -16,7 +16,6 @@ var _noDuplicateDependencies = _interopRequireDefault(require("./rules/no-duplic
16
16
  var _noInvalidFeatureFlagUsage = _interopRequireDefault(require("./rules/no-invalid-feature-flag-usage"));
17
17
  var _ensureFeatureFlagPrefix = _interopRequireDefault(require("./rules/ensure-feature-flag-prefix"));
18
18
  var _ensureCriticalDependencyResolutions = _interopRequireDefault(require("./rules/ensure-critical-dependency-resolutions"));
19
- var _ensureValidPlatformYarnProtocolUsage = _interopRequireDefault(require("./rules/ensure-valid-platform-yarn-protocol-usage"));
20
19
  var _ensureValidBinValues = _interopRequireDefault(require("./rules/ensure-valid-bin-values"));
21
20
  var _ensureNoPrivateDependencies = _interopRequireDefault(require("./rules/ensure-no-private-dependencies"));
22
21
  var _expandBorderShorthand = _interopRequireDefault(require("./rules/compiled/expand-border-shorthand"));
@@ -36,6 +35,7 @@ var _expandBackgroundShorthand = _interopRequireDefault(require("./rules/compile
36
35
  var _expandSpacingShorthand = _interopRequireDefault(require("./rules/compiled/expand-spacing-shorthand"));
37
36
  var _noSparseCheckout = _interopRequireDefault(require("./rules/no-sparse-checkout"));
38
37
  var _noDirectDocumentUsage = _interopRequireDefault(require("./rules/no-direct-document-usage"));
38
+ var _noSetImmediate = _interopRequireDefault(require("./rules/no-set-immediate"));
39
39
  var _nodePath = require("node:path");
40
40
  var _nodeFs = require("node:fs");
41
41
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -64,7 +64,6 @@ var rules = exports.rules = {
64
64
  'ensure-test-runner-nested-count': _ensureTestRunnerNestedCount.default,
65
65
  'ensure-atlassian-team': _ensureAtlassianTeam.default,
66
66
  'ensure-critical-dependency-resolutions': _ensureCriticalDependencyResolutions.default,
67
- 'ensure-valid-platform-yarn-protocol-usage': _ensureValidPlatformYarnProtocolUsage.default,
68
67
  'ensure-valid-bin-values': _ensureValidBinValues.default,
69
68
  'ensure-no-private-dependencies': _ensureNoPrivateDependencies.default,
70
69
  'expand-border-shorthand': _expandBorderShorthand.default,
@@ -86,7 +85,8 @@ var rules = exports.rules = {
86
85
  'use-entrypoints-in-examples': _useEntrypointsInExamples.default,
87
86
  'use-recommended-utils': _useRecommendedUtils.default,
88
87
  'no-sparse-checkout': _noSparseCheckout.default,
89
- 'no-direct-document-usage': _noDirectDocumentUsage.default
88
+ 'no-direct-document-usage': _noDirectDocumentUsage.default,
89
+ 'no-set-immediate': _noSetImmediate.default
90
90
  };
91
91
  var commonConfig = {
92
92
  '@atlaskit/platform/ensure-test-runner-arguments': 'error',
@@ -96,6 +96,7 @@ var commonConfig = {
96
96
  '@atlaskit/platform/ensure-atlassian-team': 'error',
97
97
  '@atlaskit/platform/no-module-level-eval-nav4': 'error',
98
98
  '@atlaskit/platform/no-direct-document-usage': 'warn',
99
+ '@atlaskit/platform/no-set-immediate': 'error',
99
100
  // Compiled: rules that are not included via `@compiled/recommended
100
101
  '@atlaskit/platform/expand-border-shorthand': 'error',
101
102
  '@atlaskit/platform/expand-background-shorthand': 'error',
@@ -14,8 +14,8 @@ var _handleAstObject = require("../util/handle-ast-object");
14
14
  // In matchMinorVersion, we will check if the versions in resolutions fall in the right ranges.
15
15
  //
16
16
  var DESIRED_PKG_VERSIONS = {
17
- typescript: ['5.4'],
18
- tslib: ['2.6'],
17
+ typescript: ['5.4', '5.9'],
18
+ tslib: ['2.6', '2.8'],
19
19
  '@types/react': ['16.14', '18.2'],
20
20
  'react-relay': ['npm:atl-react-relay@0.0.0-main-5980a913'],
21
21
  'relay-compiler': ['npm:atl-relay-compiler@0.0.0-main-5980a913'],
@@ -21,6 +21,9 @@ var exportsValidationExceptions = {
21
21
  },
22
22
  '@atlaskit/storybook-addon-design-system': {
23
23
  ignoredAfExportKeys: ['.']
24
+ },
25
+ '@atlassian/react-async': {
26
+ ignoredAfExportKeys: ['./mock']
24
27
  }
25
28
  };
26
29
  var rule = {
@@ -29,7 +29,7 @@ var rule = {
29
29
  return;
30
30
  }
31
31
  (_node$specifiers = node.specifiers) === null || _node$specifiers === void 0 || _node$specifiers.forEach(function (specifier) {
32
- if (specifier.type === 'ImportSpecifier') {
32
+ if (specifier.type === 'ImportSpecifier' && 'name' in specifier.imported) {
33
33
  var imported = specifier.imported,
34
34
  local = specifier.local;
35
35
  if (imported.name !== local.name) {
@@ -40,7 +40,7 @@ var rule = {
40
40
  return {
41
41
  ImportDeclaration: function ImportDeclaration(node) {
42
42
  if (node.source.value === '@atlaskit/browser-apis' && node.specifiers.some(function (specifier) {
43
- return specifier.type === 'ImportSpecifier' && specifier.imported.name === 'getDocument';
43
+ return specifier.type === 'ImportSpecifier' && specifier.imported.type === 'Identifier' && specifier.imported.name === 'getDocument';
44
44
  })) {
45
45
  hasGetDocumentImport = true;
46
46
  }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var rule = {
8
+ meta: {
9
+ docs: {
10
+ description: "Prevent usage of setImmediate in favor of React Testing Library's `waitFor` or similar",
11
+ recommended: true
12
+ },
13
+ type: 'problem',
14
+ messages: {
15
+ noSetImmediate: "Avoid using setImmediate. Use React Testing Library's waitFor or similar instead for better test reliability.",
16
+ suggestWaitFor: 'Replace with waitFor from @testing-library/react or similar'
17
+ },
18
+ hasSuggestions: true
19
+ },
20
+ create: function create(context) {
21
+ return {
22
+ CallExpression: function CallExpression(node) {
23
+ if (node.callee.type === 'Identifier' && node.callee.name === 'setImmediate') {
24
+ context.report({
25
+ node: node,
26
+ messageId: 'noSetImmediate',
27
+ suggest: [{
28
+ messageId: 'suggestWaitFor',
29
+ fix: function fix(fixer) {
30
+ return fixer.replaceText(node, 'await waitFor(() => { /* your assertion here */ })');
31
+ }
32
+ }]
33
+ });
34
+ }
35
+ }
36
+ };
37
+ }
38
+ };
39
+ var _default = exports.default = rule;
@@ -30,7 +30,7 @@ var getSourceCode = exports.getSourceCode = function getSourceCode(context) {
30
30
  */
31
31
  var getScope = exports.getScope = function getScope(context, node) {
32
32
  var _getSourceCode$getSco, _getSourceCode, _getSourceCode$getSco2;
33
- return (_getSourceCode$getSco = (_getSourceCode = getSourceCode(context)) === null || _getSourceCode === void 0 || (_getSourceCode$getSco2 = _getSourceCode.getScope) === null || _getSourceCode$getSco2 === void 0 ? void 0 : _getSourceCode$getSco2.call(_getSourceCode, node)) !== null && _getSourceCode$getSco !== void 0 ? _getSourceCode$getSco : context.getScope();
33
+ return (_getSourceCode$getSco = (_getSourceCode = getSourceCode(context)) === null || _getSourceCode === void 0 || (_getSourceCode$getSco2 = _getSourceCode.getScope) === null || _getSourceCode$getSco2 === void 0 ? void 0 : _getSourceCode$getSco2.call(_getSourceCode, node)) !== null && _getSourceCode$getSco !== void 0 ? _getSourceCode$getSco : context.getScope(node);
34
34
  };
35
35
 
36
36
  /**
@@ -43,5 +43,7 @@ var getScope = exports.getScope = function getScope(context, node) {
43
43
  */
44
44
  var getAncestors = exports.getAncestors = function getAncestors(context, node) {
45
45
  var _getSourceCode$getAnc, _getSourceCode2, _getSourceCode2$getAn;
46
- return (_getSourceCode$getAnc = (_getSourceCode2 = getSourceCode(context)) === null || _getSourceCode2 === void 0 || (_getSourceCode2$getAn = _getSourceCode2.getAncestors) === null || _getSourceCode2$getAn === void 0 ? void 0 : _getSourceCode2$getAn.call(_getSourceCode2, node)) !== null && _getSourceCode$getAnc !== void 0 ? _getSourceCode$getAnc : context.getAncestors();
46
+ return (_getSourceCode$getAnc = (_getSourceCode2 = getSourceCode(context)) === null || _getSourceCode2 === void 0 || (_getSourceCode2$getAn = _getSourceCode2.getAncestors) === null || _getSourceCode2$getAn === void 0 ? void 0 : _getSourceCode2$getAn.call(_getSourceCode2, node)) !== null && _getSourceCode$getAnc !== void 0 ? _getSourceCode$getAnc :
47
+ // this is needed for jira's eslint update, as otherwise there is type errors only in jira typechecking
48
+ context.getAncestors(node);
47
49
  };
@@ -9,7 +9,6 @@ import noDuplicateDependencies from './rules/no-duplicate-dependencies';
9
9
  import noInvalidFeatureFlagUsage from './rules/no-invalid-feature-flag-usage';
10
10
  import ensureFeatureFlagPrefix from './rules/ensure-feature-flag-prefix';
11
11
  import ensureCriticalDependencyResolutions from './rules/ensure-critical-dependency-resolutions';
12
- import ensureValidPlatformYarnProtocolUsage from './rules/ensure-valid-platform-yarn-protocol-usage';
13
12
  import ensureValidBinValues from './rules/ensure-valid-bin-values';
14
13
  import ensureNoPrivateDependencies from './rules/ensure-no-private-dependencies';
15
14
  import expandBorderShorthand from './rules/compiled/expand-border-shorthand';
@@ -29,6 +28,7 @@ import expandBackgroundShorthand from './rules/compiled/expand-background-shorth
29
28
  import expandSpacingShorthand from './rules/compiled/expand-spacing-shorthand';
30
29
  import noSparseCheckout from './rules/no-sparse-checkout';
31
30
  import noDirectDocumentUsage from './rules/no-direct-document-usage';
31
+ import noSetImmediate from './rules/no-set-immediate';
32
32
  import { join, normalize } from 'node:path';
33
33
  import { readFileSync } from 'node:fs';
34
34
  let jiraRoot;
@@ -55,7 +55,6 @@ const rules = {
55
55
  'ensure-test-runner-nested-count': ensureTestRunnerNestedCount,
56
56
  'ensure-atlassian-team': ensureAtlassianTeam,
57
57
  'ensure-critical-dependency-resolutions': ensureCriticalDependencyResolutions,
58
- 'ensure-valid-platform-yarn-protocol-usage': ensureValidPlatformYarnProtocolUsage,
59
58
  'ensure-valid-bin-values': ensureValidBinValues,
60
59
  'ensure-no-private-dependencies': ensureNoPrivateDependencies,
61
60
  'expand-border-shorthand': expandBorderShorthand,
@@ -77,7 +76,8 @@ const rules = {
77
76
  'use-entrypoints-in-examples': useEntrypointsInExamples,
78
77
  'use-recommended-utils': useRecommendedUtils,
79
78
  'no-sparse-checkout': noSparseCheckout,
80
- 'no-direct-document-usage': noDirectDocumentUsage
79
+ 'no-direct-document-usage': noDirectDocumentUsage,
80
+ 'no-set-immediate': noSetImmediate
81
81
  };
82
82
  const commonConfig = {
83
83
  '@atlaskit/platform/ensure-test-runner-arguments': 'error',
@@ -87,6 +87,7 @@ const commonConfig = {
87
87
  '@atlaskit/platform/ensure-atlassian-team': 'error',
88
88
  '@atlaskit/platform/no-module-level-eval-nav4': 'error',
89
89
  '@atlaskit/platform/no-direct-document-usage': 'warn',
90
+ '@atlaskit/platform/no-set-immediate': 'error',
90
91
  // Compiled: rules that are not included via `@compiled/recommended
91
92
  '@atlaskit/platform/expand-border-shorthand': 'error',
92
93
  '@atlaskit/platform/expand-background-shorthand': 'error',
@@ -7,8 +7,8 @@ import { getObjectPropertyAsObject } from '../util/handle-ast-object';
7
7
  // In matchMinorVersion, we will check if the versions in resolutions fall in the right ranges.
8
8
  //
9
9
  const DESIRED_PKG_VERSIONS = {
10
- typescript: ['5.4'],
11
- tslib: ['2.6'],
10
+ typescript: ['5.4', '5.9'],
11
+ tslib: ['2.6', '2.8'],
12
12
  '@types/react': ['16.14', '18.2'],
13
13
  'react-relay': ['npm:atl-react-relay@0.0.0-main-5980a913'],
14
14
  'relay-compiler': ['npm:atl-relay-compiler@0.0.0-main-5980a913'],
@@ -9,6 +9,9 @@ const exportsValidationExceptions = {
9
9
  },
10
10
  '@atlaskit/storybook-addon-design-system': {
11
11
  ignoredAfExportKeys: ['.']
12
+ },
13
+ '@atlassian/react-async': {
14
+ ignoredAfExportKeys: ['./mock']
12
15
  }
13
16
  };
14
17
  const rule = {
@@ -21,7 +21,7 @@ const rule = {
21
21
  return;
22
22
  }
23
23
  (_node$specifiers = node.specifiers) === null || _node$specifiers === void 0 ? void 0 : _node$specifiers.forEach(specifier => {
24
- if (specifier.type === 'ImportSpecifier') {
24
+ if (specifier.type === 'ImportSpecifier' && 'name' in specifier.imported) {
25
25
  const {
26
26
  imported,
27
27
  local
@@ -33,7 +33,7 @@ const rule = {
33
33
  }
34
34
  return {
35
35
  ImportDeclaration(node) {
36
- if (node.source.value === '@atlaskit/browser-apis' && node.specifiers.some(specifier => specifier.type === 'ImportSpecifier' && specifier.imported.name === 'getDocument')) {
36
+ if (node.source.value === '@atlaskit/browser-apis' && node.specifiers.some(specifier => specifier.type === 'ImportSpecifier' && specifier.imported.type === 'Identifier' && specifier.imported.name === 'getDocument')) {
37
37
  hasGetDocumentImport = true;
38
38
  }
39
39
  },
@@ -0,0 +1,33 @@
1
+ const rule = {
2
+ meta: {
3
+ docs: {
4
+ description: "Prevent usage of setImmediate in favor of React Testing Library's `waitFor` or similar",
5
+ recommended: true
6
+ },
7
+ type: 'problem',
8
+ messages: {
9
+ noSetImmediate: "Avoid using setImmediate. Use React Testing Library's waitFor or similar instead for better test reliability.",
10
+ suggestWaitFor: 'Replace with waitFor from @testing-library/react or similar'
11
+ },
12
+ hasSuggestions: true
13
+ },
14
+ create(context) {
15
+ return {
16
+ CallExpression(node) {
17
+ if (node.callee.type === 'Identifier' && node.callee.name === 'setImmediate') {
18
+ context.report({
19
+ node,
20
+ messageId: 'noSetImmediate',
21
+ suggest: [{
22
+ messageId: 'suggestWaitFor',
23
+ fix(fixer) {
24
+ return fixer.replaceText(node, 'await waitFor(() => { /* your assertion here */ })');
25
+ }
26
+ }]
27
+ });
28
+ }
29
+ }
30
+ };
31
+ }
32
+ };
33
+ export default rule;
@@ -24,7 +24,7 @@ export const getSourceCode = context => {
24
24
  */
25
25
  export const getScope = (context, node) => {
26
26
  var _getSourceCode$getSco, _getSourceCode, _getSourceCode$getSco2;
27
- return (_getSourceCode$getSco = (_getSourceCode = getSourceCode(context)) === null || _getSourceCode === void 0 ? void 0 : (_getSourceCode$getSco2 = _getSourceCode.getScope) === null || _getSourceCode$getSco2 === void 0 ? void 0 : _getSourceCode$getSco2.call(_getSourceCode, node)) !== null && _getSourceCode$getSco !== void 0 ? _getSourceCode$getSco : context.getScope();
27
+ return (_getSourceCode$getSco = (_getSourceCode = getSourceCode(context)) === null || _getSourceCode === void 0 ? void 0 : (_getSourceCode$getSco2 = _getSourceCode.getScope) === null || _getSourceCode$getSco2 === void 0 ? void 0 : _getSourceCode$getSco2.call(_getSourceCode, node)) !== null && _getSourceCode$getSco !== void 0 ? _getSourceCode$getSco : context.getScope(node);
28
28
  };
29
29
 
30
30
  /**
@@ -37,5 +37,7 @@ export const getScope = (context, node) => {
37
37
  */
38
38
  export const getAncestors = (context, node) => {
39
39
  var _getSourceCode$getAnc, _getSourceCode2, _getSourceCode2$getAn;
40
- return (_getSourceCode$getAnc = (_getSourceCode2 = getSourceCode(context)) === null || _getSourceCode2 === void 0 ? void 0 : (_getSourceCode2$getAn = _getSourceCode2.getAncestors) === null || _getSourceCode2$getAn === void 0 ? void 0 : _getSourceCode2$getAn.call(_getSourceCode2, node)) !== null && _getSourceCode$getAnc !== void 0 ? _getSourceCode$getAnc : context.getAncestors();
40
+ return (_getSourceCode$getAnc = (_getSourceCode2 = getSourceCode(context)) === null || _getSourceCode2 === void 0 ? void 0 : (_getSourceCode2$getAn = _getSourceCode2.getAncestors) === null || _getSourceCode2$getAn === void 0 ? void 0 : _getSourceCode2$getAn.call(_getSourceCode2, node)) !== null && _getSourceCode$getAnc !== void 0 ? _getSourceCode$getAnc :
41
+ // this is needed for jira's eslint update, as otherwise there is type errors only in jira typechecking
42
+ context.getAncestors(node);
41
43
  };
package/dist/esm/index.js CHANGED
@@ -12,7 +12,6 @@ import noDuplicateDependencies from './rules/no-duplicate-dependencies';
12
12
  import noInvalidFeatureFlagUsage from './rules/no-invalid-feature-flag-usage';
13
13
  import ensureFeatureFlagPrefix from './rules/ensure-feature-flag-prefix';
14
14
  import ensureCriticalDependencyResolutions from './rules/ensure-critical-dependency-resolutions';
15
- import ensureValidPlatformYarnProtocolUsage from './rules/ensure-valid-platform-yarn-protocol-usage';
16
15
  import ensureValidBinValues from './rules/ensure-valid-bin-values';
17
16
  import ensureNoPrivateDependencies from './rules/ensure-no-private-dependencies';
18
17
  import expandBorderShorthand from './rules/compiled/expand-border-shorthand';
@@ -32,6 +31,7 @@ import expandBackgroundShorthand from './rules/compiled/expand-background-shorth
32
31
  import expandSpacingShorthand from './rules/compiled/expand-spacing-shorthand';
33
32
  import noSparseCheckout from './rules/no-sparse-checkout';
34
33
  import noDirectDocumentUsage from './rules/no-direct-document-usage';
34
+ import noSetImmediate from './rules/no-set-immediate';
35
35
  import { join, normalize } from 'node:path';
36
36
  import { readFileSync } from 'node:fs';
37
37
  var jiraRoot;
@@ -58,7 +58,6 @@ var rules = {
58
58
  'ensure-test-runner-nested-count': ensureTestRunnerNestedCount,
59
59
  'ensure-atlassian-team': ensureAtlassianTeam,
60
60
  'ensure-critical-dependency-resolutions': ensureCriticalDependencyResolutions,
61
- 'ensure-valid-platform-yarn-protocol-usage': ensureValidPlatformYarnProtocolUsage,
62
61
  'ensure-valid-bin-values': ensureValidBinValues,
63
62
  'ensure-no-private-dependencies': ensureNoPrivateDependencies,
64
63
  'expand-border-shorthand': expandBorderShorthand,
@@ -80,7 +79,8 @@ var rules = {
80
79
  'use-entrypoints-in-examples': useEntrypointsInExamples,
81
80
  'use-recommended-utils': useRecommendedUtils,
82
81
  'no-sparse-checkout': noSparseCheckout,
83
- 'no-direct-document-usage': noDirectDocumentUsage
82
+ 'no-direct-document-usage': noDirectDocumentUsage,
83
+ 'no-set-immediate': noSetImmediate
84
84
  };
85
85
  var commonConfig = {
86
86
  '@atlaskit/platform/ensure-test-runner-arguments': 'error',
@@ -90,6 +90,7 @@ var commonConfig = {
90
90
  '@atlaskit/platform/ensure-atlassian-team': 'error',
91
91
  '@atlaskit/platform/no-module-level-eval-nav4': 'error',
92
92
  '@atlaskit/platform/no-direct-document-usage': 'warn',
93
+ '@atlaskit/platform/no-set-immediate': 'error',
93
94
  // Compiled: rules that are not included via `@compiled/recommended
94
95
  '@atlaskit/platform/expand-border-shorthand': 'error',
95
96
  '@atlaskit/platform/expand-background-shorthand': 'error',
@@ -8,8 +8,8 @@ import { getObjectPropertyAsObject } from '../util/handle-ast-object';
8
8
  // In matchMinorVersion, we will check if the versions in resolutions fall in the right ranges.
9
9
  //
10
10
  var DESIRED_PKG_VERSIONS = {
11
- typescript: ['5.4'],
12
- tslib: ['2.6'],
11
+ typescript: ['5.4', '5.9'],
12
+ tslib: ['2.6', '2.8'],
13
13
  '@types/react': ['16.14', '18.2'],
14
14
  'react-relay': ['npm:atl-react-relay@0.0.0-main-5980a913'],
15
15
  'relay-compiler': ['npm:atl-relay-compiler@0.0.0-main-5980a913'],
@@ -14,6 +14,9 @@ var exportsValidationExceptions = {
14
14
  },
15
15
  '@atlaskit/storybook-addon-design-system': {
16
16
  ignoredAfExportKeys: ['.']
17
+ },
18
+ '@atlassian/react-async': {
19
+ ignoredAfExportKeys: ['./mock']
17
20
  }
18
21
  };
19
22
  var rule = {
@@ -22,7 +22,7 @@ var rule = {
22
22
  return;
23
23
  }
24
24
  (_node$specifiers = node.specifiers) === null || _node$specifiers === void 0 || _node$specifiers.forEach(function (specifier) {
25
- if (specifier.type === 'ImportSpecifier') {
25
+ if (specifier.type === 'ImportSpecifier' && 'name' in specifier.imported) {
26
26
  var imported = specifier.imported,
27
27
  local = specifier.local;
28
28
  if (imported.name !== local.name) {
@@ -34,7 +34,7 @@ var rule = {
34
34
  return {
35
35
  ImportDeclaration: function ImportDeclaration(node) {
36
36
  if (node.source.value === '@atlaskit/browser-apis' && node.specifiers.some(function (specifier) {
37
- return specifier.type === 'ImportSpecifier' && specifier.imported.name === 'getDocument';
37
+ return specifier.type === 'ImportSpecifier' && specifier.imported.type === 'Identifier' && specifier.imported.name === 'getDocument';
38
38
  })) {
39
39
  hasGetDocumentImport = true;
40
40
  }
@@ -0,0 +1,33 @@
1
+ var rule = {
2
+ meta: {
3
+ docs: {
4
+ description: "Prevent usage of setImmediate in favor of React Testing Library's `waitFor` or similar",
5
+ recommended: true
6
+ },
7
+ type: 'problem',
8
+ messages: {
9
+ noSetImmediate: "Avoid using setImmediate. Use React Testing Library's waitFor or similar instead for better test reliability.",
10
+ suggestWaitFor: 'Replace with waitFor from @testing-library/react or similar'
11
+ },
12
+ hasSuggestions: true
13
+ },
14
+ create: function create(context) {
15
+ return {
16
+ CallExpression: function CallExpression(node) {
17
+ if (node.callee.type === 'Identifier' && node.callee.name === 'setImmediate') {
18
+ context.report({
19
+ node: node,
20
+ messageId: 'noSetImmediate',
21
+ suggest: [{
22
+ messageId: 'suggestWaitFor',
23
+ fix: function fix(fixer) {
24
+ return fixer.replaceText(node, 'await waitFor(() => { /* your assertion here */ })');
25
+ }
26
+ }]
27
+ });
28
+ }
29
+ }
30
+ };
31
+ }
32
+ };
33
+ export default rule;
@@ -24,7 +24,7 @@ export var getSourceCode = function getSourceCode(context) {
24
24
  */
25
25
  export var getScope = function getScope(context, node) {
26
26
  var _getSourceCode$getSco, _getSourceCode, _getSourceCode$getSco2;
27
- return (_getSourceCode$getSco = (_getSourceCode = getSourceCode(context)) === null || _getSourceCode === void 0 || (_getSourceCode$getSco2 = _getSourceCode.getScope) === null || _getSourceCode$getSco2 === void 0 ? void 0 : _getSourceCode$getSco2.call(_getSourceCode, node)) !== null && _getSourceCode$getSco !== void 0 ? _getSourceCode$getSco : context.getScope();
27
+ return (_getSourceCode$getSco = (_getSourceCode = getSourceCode(context)) === null || _getSourceCode === void 0 || (_getSourceCode$getSco2 = _getSourceCode.getScope) === null || _getSourceCode$getSco2 === void 0 ? void 0 : _getSourceCode$getSco2.call(_getSourceCode, node)) !== null && _getSourceCode$getSco !== void 0 ? _getSourceCode$getSco : context.getScope(node);
28
28
  };
29
29
 
30
30
  /**
@@ -37,5 +37,7 @@ export var getScope = function getScope(context, node) {
37
37
  */
38
38
  export var getAncestors = function getAncestors(context, node) {
39
39
  var _getSourceCode$getAnc, _getSourceCode2, _getSourceCode2$getAn;
40
- return (_getSourceCode$getAnc = (_getSourceCode2 = getSourceCode(context)) === null || _getSourceCode2 === void 0 || (_getSourceCode2$getAn = _getSourceCode2.getAncestors) === null || _getSourceCode2$getAn === void 0 ? void 0 : _getSourceCode2$getAn.call(_getSourceCode2, node)) !== null && _getSourceCode$getAnc !== void 0 ? _getSourceCode$getAnc : context.getAncestors();
40
+ return (_getSourceCode$getAnc = (_getSourceCode2 = getSourceCode(context)) === null || _getSourceCode2 === void 0 || (_getSourceCode2$getAn = _getSourceCode2.getAncestors) === null || _getSourceCode2$getAn === void 0 ? void 0 : _getSourceCode2$getAn.call(_getSourceCode2, node)) !== null && _getSourceCode$getAnc !== void 0 ? _getSourceCode$getAnc :
41
+ // this is needed for jira's eslint update, as otherwise there is type errors only in jira typechecking
42
+ context.getAncestors(node);
41
43
  };
@@ -6,7 +6,6 @@ declare const rules: {
6
6
  'ensure-test-runner-nested-count': import("eslint").Rule.RuleModule;
7
7
  'ensure-atlassian-team': import("eslint").Rule.RuleModule;
8
8
  'ensure-critical-dependency-resolutions': import("eslint").Rule.RuleModule;
9
- 'ensure-valid-platform-yarn-protocol-usage': import("eslint").Rule.RuleModule;
10
9
  'ensure-valid-bin-values': import("eslint").Rule.RuleModule;
11
10
  'ensure-no-private-dependencies': import("eslint").Rule.RuleModule;
12
11
  'expand-border-shorthand': import("eslint").Rule.RuleModule;
@@ -29,6 +28,7 @@ declare const rules: {
29
28
  'use-recommended-utils': import("eslint").Rule.RuleModule;
30
29
  'no-sparse-checkout': import("eslint").Rule.RuleModule;
31
30
  'no-direct-document-usage': import("eslint").Rule.RuleModule;
31
+ 'no-set-immediate': import("eslint").Rule.RuleModule;
32
32
  };
33
33
  declare const plugin: {
34
34
  meta: {
@@ -42,7 +42,6 @@ declare const plugin: {
42
42
  'ensure-test-runner-nested-count': import("eslint").Rule.RuleModule;
43
43
  'ensure-atlassian-team': import("eslint").Rule.RuleModule;
44
44
  'ensure-critical-dependency-resolutions': import("eslint").Rule.RuleModule;
45
- 'ensure-valid-platform-yarn-protocol-usage': import("eslint").Rule.RuleModule;
46
45
  'ensure-valid-bin-values': import("eslint").Rule.RuleModule;
47
46
  'ensure-no-private-dependencies': import("eslint").Rule.RuleModule;
48
47
  'expand-border-shorthand': import("eslint").Rule.RuleModule;
@@ -65,6 +64,7 @@ declare const plugin: {
65
64
  'use-recommended-utils': import("eslint").Rule.RuleModule;
66
65
  'no-sparse-checkout': import("eslint").Rule.RuleModule;
67
66
  'no-direct-document-usage': import("eslint").Rule.RuleModule;
67
+ 'no-set-immediate': import("eslint").Rule.RuleModule;
68
68
  };
69
69
  configs: {
70
70
  recommended: {
@@ -87,6 +87,7 @@ declare const plugin: {
87
87
  '@atlaskit/platform/ensure-atlassian-team': "error";
88
88
  '@atlaskit/platform/no-module-level-eval-nav4': "error";
89
89
  '@atlaskit/platform/no-direct-document-usage': "warn";
90
+ '@atlaskit/platform/no-set-immediate': "error";
90
91
  '@atlaskit/platform/expand-border-shorthand': "error";
91
92
  '@atlaskit/platform/expand-background-shorthand': "error";
92
93
  '@atlaskit/platform/expand-spacing-shorthand': "error";
@@ -120,6 +121,7 @@ declare const plugin: {
120
121
  '@atlaskit/platform/ensure-atlassian-team': "error";
121
122
  '@atlaskit/platform/no-module-level-eval-nav4': "error";
122
123
  '@atlaskit/platform/no-direct-document-usage': "warn";
124
+ '@atlaskit/platform/no-set-immediate': "error";
123
125
  '@atlaskit/platform/expand-border-shorthand': "error";
124
126
  '@atlaskit/platform/expand-background-shorthand': "error";
125
127
  '@atlaskit/platform/expand-spacing-shorthand': "error";
@@ -140,6 +142,7 @@ declare const plugin: {
140
142
  '@atlaskit/platform/ensure-atlassian-team': "error";
141
143
  '@atlaskit/platform/no-module-level-eval-nav4': "error";
142
144
  '@atlaskit/platform/no-direct-document-usage': "warn";
145
+ '@atlaskit/platform/no-set-immediate': "error";
143
146
  '@atlaskit/platform/expand-border-shorthand': "error";
144
147
  '@atlaskit/platform/expand-background-shorthand': "error";
145
148
  '@atlaskit/platform/expand-spacing-shorthand': "error";
@@ -163,6 +166,7 @@ declare const plugin: {
163
166
  '@atlaskit/platform/ensure-atlassian-team': "error";
164
167
  '@atlaskit/platform/no-module-level-eval-nav4': "error";
165
168
  '@atlaskit/platform/no-direct-document-usage': "warn";
169
+ '@atlaskit/platform/no-set-immediate': "error";
166
170
  '@atlaskit/platform/expand-border-shorthand': "error";
167
171
  '@atlaskit/platform/expand-background-shorthand': "error";
168
172
  '@atlaskit/platform/expand-spacing-shorthand': "error";
@@ -175,8 +179,8 @@ declare const plugin: {
175
179
  };
176
180
  };
177
181
  processors: {
178
- 'package-json-processor': Linter.Processor<string | Linter.ProcessorFile>;
179
- 'package-json-processor-for-flat-config': Linter.Processor<string | Linter.ProcessorFile>;
182
+ 'package-json-processor': Linter.Processor;
183
+ 'package-json-processor-for-flat-config': Linter.Processor;
180
184
  };
181
185
  };
182
186
  declare const configs: {
@@ -200,6 +204,7 @@ declare const configs: {
200
204
  '@atlaskit/platform/ensure-atlassian-team': "error";
201
205
  '@atlaskit/platform/no-module-level-eval-nav4': "error";
202
206
  '@atlaskit/platform/no-direct-document-usage': "warn";
207
+ '@atlaskit/platform/no-set-immediate': "error";
203
208
  '@atlaskit/platform/expand-border-shorthand': "error";
204
209
  '@atlaskit/platform/expand-background-shorthand': "error";
205
210
  '@atlaskit/platform/expand-spacing-shorthand': "error";
@@ -233,6 +238,7 @@ declare const configs: {
233
238
  '@atlaskit/platform/ensure-atlassian-team': "error";
234
239
  '@atlaskit/platform/no-module-level-eval-nav4': "error";
235
240
  '@atlaskit/platform/no-direct-document-usage': "warn";
241
+ '@atlaskit/platform/no-set-immediate': "error";
236
242
  '@atlaskit/platform/expand-border-shorthand': "error";
237
243
  '@atlaskit/platform/expand-background-shorthand': "error";
238
244
  '@atlaskit/platform/expand-spacing-shorthand': "error";
@@ -253,6 +259,7 @@ declare const configs: {
253
259
  '@atlaskit/platform/ensure-atlassian-team': "error";
254
260
  '@atlaskit/platform/no-module-level-eval-nav4': "error";
255
261
  '@atlaskit/platform/no-direct-document-usage': "warn";
262
+ '@atlaskit/platform/no-set-immediate': "error";
256
263
  '@atlaskit/platform/expand-border-shorthand': "error";
257
264
  '@atlaskit/platform/expand-background-shorthand': "error";
258
265
  '@atlaskit/platform/expand-spacing-shorthand': "error";
@@ -276,6 +283,7 @@ declare const configs: {
276
283
  '@atlaskit/platform/ensure-atlassian-team': "error";
277
284
  '@atlaskit/platform/no-module-level-eval-nav4': "error";
278
285
  '@atlaskit/platform/no-direct-document-usage': "warn";
286
+ '@atlaskit/platform/no-set-immediate': "error";
279
287
  '@atlaskit/platform/expand-border-shorthand': "error";
280
288
  '@atlaskit/platform/expand-background-shorthand': "error";
281
289
  '@atlaskit/platform/expand-spacing-shorthand': "error";
@@ -288,8 +296,8 @@ declare const configs: {
288
296
  };
289
297
  };
290
298
  declare const processors: {
291
- 'package-json-processor': Linter.Processor<string | Linter.ProcessorFile>;
292
- 'package-json-processor-for-flat-config': Linter.Processor<string | Linter.ProcessorFile>;
299
+ 'package-json-processor': Linter.Processor;
300
+ 'package-json-processor-for-flat-config': Linter.Processor;
293
301
  };
294
302
  export { configs, plugin, processors, rules };
295
303
  export default plugin;
@@ -1,3 +1,3 @@
1
1
  import type { ObjectExpression, SimpleLiteral, RegExpLiteral, BigIntLiteral } from 'estree';
2
- export declare const getObjectPropertyAsLiteral: (node: ObjectExpression, property: string) => SimpleLiteral['value'] | RegExpLiteral['value'] | BigIntLiteral['value'];
2
+ export declare const getObjectPropertyAsLiteral: (node: ObjectExpression, property: string) => SimpleLiteral["value"] | RegExpLiteral["value"] | BigIntLiteral["value"];
3
3
  export declare const getObjectPropertyAsObject: (node: ObjectExpression, property: string) => ObjectExpression | null;