@atlaskit/eslint-plugin-platform 2.7.2 → 2.8.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 (75) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/cjs/index.js +14 -3
  3. package/dist/cjs/rules/feature-gating/valid-gate-name/index.js +60 -0
  4. package/dist/cjs/rules/import/no-barrel-entry-imports/index.js +871 -0
  5. package/dist/cjs/rules/import/no-barrel-entry-jest-mock/index.js +1384 -0
  6. package/dist/cjs/rules/import/no-conversation-assistant-barrel-imports/index.js +43 -0
  7. package/dist/cjs/rules/import/no-jest-mock-barrel-files/index.js +1401 -0
  8. package/dist/cjs/rules/import/no-relative-barrel-file-imports/index.js +777 -0
  9. package/dist/cjs/rules/import/shared/barrel-parsing.js +511 -0
  10. package/dist/cjs/rules/import/shared/file-system.js +186 -0
  11. package/dist/cjs/rules/import/shared/jest-utils.js +191 -0
  12. package/dist/cjs/rules/import/shared/package-registry.js +263 -0
  13. package/dist/cjs/rules/import/shared/package-resolution.js +185 -0
  14. package/dist/cjs/rules/import/shared/perf.js +89 -0
  15. package/dist/cjs/rules/import/shared/types.js +67 -0
  16. package/dist/es2019/index.js +14 -3
  17. package/dist/es2019/rules/feature-gating/valid-gate-name/index.js +52 -0
  18. package/dist/es2019/rules/import/no-barrel-entry-imports/index.js +801 -0
  19. package/dist/es2019/rules/import/no-barrel-entry-jest-mock/index.js +1113 -0
  20. package/dist/es2019/rules/import/no-conversation-assistant-barrel-imports/index.js +37 -0
  21. package/dist/es2019/rules/import/no-jest-mock-barrel-files/index.js +1179 -0
  22. package/dist/es2019/rules/import/no-relative-barrel-file-imports/index.js +738 -0
  23. package/dist/es2019/rules/import/shared/barrel-parsing.js +433 -0
  24. package/dist/es2019/rules/import/shared/file-system.js +174 -0
  25. package/dist/es2019/rules/import/shared/jest-utils.js +159 -0
  26. package/dist/es2019/rules/import/shared/package-registry.js +240 -0
  27. package/dist/es2019/rules/import/shared/package-resolution.js +161 -0
  28. package/dist/es2019/rules/import/shared/perf.js +83 -0
  29. package/dist/es2019/rules/import/shared/types.js +57 -0
  30. package/dist/esm/index.js +14 -3
  31. package/dist/esm/rules/feature-gating/valid-gate-name/index.js +53 -0
  32. package/dist/esm/rules/import/no-barrel-entry-imports/index.js +864 -0
  33. package/dist/esm/rules/import/no-barrel-entry-jest-mock/index.js +1375 -0
  34. package/dist/esm/rules/import/no-conversation-assistant-barrel-imports/index.js +37 -0
  35. package/dist/esm/rules/import/no-jest-mock-barrel-files/index.js +1391 -0
  36. package/dist/esm/rules/import/no-relative-barrel-file-imports/index.js +770 -0
  37. package/dist/esm/rules/import/shared/barrel-parsing.js +500 -0
  38. package/dist/esm/rules/import/shared/file-system.js +176 -0
  39. package/dist/esm/rules/import/shared/jest-utils.js +179 -0
  40. package/dist/esm/rules/import/shared/package-registry.js +256 -0
  41. package/dist/esm/rules/import/shared/package-resolution.js +175 -0
  42. package/dist/esm/rules/import/shared/perf.js +80 -0
  43. package/dist/esm/rules/import/shared/types.js +61 -0
  44. package/dist/types/index.d.ts +16 -2
  45. package/dist/types/rules/feature-gating/valid-gate-name/index.d.ts +3 -0
  46. package/dist/types/rules/import/no-barrel-entry-imports/index.d.ts +9 -0
  47. package/dist/types/rules/import/no-barrel-entry-jest-mock/index.d.ts +9 -0
  48. package/dist/types/rules/import/no-conversation-assistant-barrel-imports/index.d.ts +3 -0
  49. package/dist/types/rules/import/no-jest-mock-barrel-files/index.d.ts +22 -0
  50. package/dist/types/rules/import/no-relative-barrel-file-imports/index.d.ts +5 -0
  51. package/dist/types/rules/import/shared/barrel-parsing.d.ts +30 -0
  52. package/dist/types/rules/import/shared/file-system.d.ts +38 -0
  53. package/dist/types/rules/import/shared/jest-utils.d.ts +47 -0
  54. package/dist/types/rules/import/shared/package-registry.d.ts +26 -0
  55. package/dist/types/rules/import/shared/package-resolution.d.ts +38 -0
  56. package/dist/types/rules/import/shared/perf.d.ts +13 -0
  57. package/dist/types/rules/import/shared/types.d.ts +131 -0
  58. package/dist/types-ts4.5/index.d.ts +16 -2
  59. package/dist/types-ts4.5/rules/import/no-barrel-entry-imports/index.d.ts +9 -0
  60. package/dist/types-ts4.5/rules/import/no-barrel-entry-jest-mock/index.d.ts +9 -0
  61. package/dist/types-ts4.5/rules/import/no-jest-mock-barrel-files/index.d.ts +22 -0
  62. package/dist/types-ts4.5/rules/import/no-relative-barrel-file-imports/index.d.ts +5 -0
  63. package/dist/types-ts4.5/rules/import/shared/barrel-parsing.d.ts +30 -0
  64. package/dist/types-ts4.5/rules/import/shared/file-system.d.ts +38 -0
  65. package/dist/types-ts4.5/rules/import/shared/jest-utils.d.ts +47 -0
  66. package/dist/types-ts4.5/rules/import/shared/package-registry.d.ts +26 -0
  67. package/dist/types-ts4.5/rules/import/shared/package-resolution.d.ts +38 -0
  68. package/dist/types-ts4.5/rules/import/shared/perf.d.ts +13 -0
  69. package/dist/types-ts4.5/rules/import/shared/types.d.ts +131 -0
  70. package/package.json +4 -2
  71. package/dist/cjs/rules/ensure-native-and-af-exports-synced/index.js +0 -158
  72. package/dist/es2019/rules/ensure-native-and-af-exports-synced/index.js +0 -146
  73. package/dist/esm/rules/ensure-native-and-af-exports-synced/index.js +0 -151
  74. /package/dist/types-ts4.5/rules/{ensure-native-and-af-exports-synced → feature-gating/valid-gate-name}/index.d.ts +0 -0
  75. /package/dist/{types/rules/ensure-native-and-af-exports-synced → types-ts4.5/rules/import/no-conversation-assistant-barrel-imports}/index.d.ts +0 -0
package/dist/esm/index.js CHANGED
@@ -16,7 +16,6 @@ import ensureNoPrivateDependencies from './rules/ensure-no-private-dependencies'
16
16
  import expandBorderShorthand from './rules/compiled/expand-border-shorthand';
17
17
  import noInvalidStorybookDecoratorUsage from './rules/no-invalid-storybook-decorator-usage';
18
18
  import ensurePublishValid from './rules/ensure-publish-valid';
19
- import ensureNativeAndAfExportsSynced from './rules/ensure-native-and-af-exports-synced';
20
19
  import noModuleLevelEval from './rules/feature-gating/no-module-level-eval';
21
20
  import noModuleLevelEvalNav4 from './rules/feature-gating/no-module-level-eval-nav4';
22
21
  import staticFeatureFlags from './rules/feature-gating/static-feature-flags';
@@ -26,12 +25,18 @@ import preferFG from './rules/feature-gating/prefer-fg';
26
25
  import noAlias from './rules/feature-gating/no-alias';
27
26
  import useEntrypointsInExamples from './rules/use-entrypoints-in-examples';
28
27
  import useRecommendedUtils from './rules/feature-gating/use-recommended-utils';
28
+ import validGateName from './rules/feature-gating/valid-gate-name';
29
29
  import expandBackgroundShorthand from './rules/compiled/expand-background-shorthand';
30
30
  import expandSpacingShorthand from './rules/compiled/expand-spacing-shorthand';
31
31
  import noSparseCheckout from './rules/no-sparse-checkout';
32
32
  import noDirectDocumentUsage from './rules/no-direct-document-usage';
33
33
  import noSetImmediate from './rules/no-set-immediate';
34
34
  import preferCryptoRandomUuid from './rules/prefer-crypto-random-uuid';
35
+ import noBarrelEntryImports from './rules/import/no-barrel-entry-imports';
36
+ import noBarrelEntryJestMock from './rules/import/no-barrel-entry-jest-mock';
37
+ import noJestMockBarrelFiles from './rules/import/no-jest-mock-barrel-files';
38
+ import noRelativeBarrelFileImports from './rules/import/no-relative-barrel-file-imports';
39
+ import noConversationAssistantBarrelImports from './rules/import/no-conversation-assistant-barrel-imports';
35
40
  import { join, normalize } from 'node:path';
36
41
  import { readFileSync } from 'node:fs';
37
42
  var jiraRoot;
@@ -67,7 +72,6 @@ var rules = {
67
72
  'no-pre-post-install-scripts': noPreAndPostInstallScripts,
68
73
  'no-invalid-storybook-decorator-usage': noInvalidStorybookDecoratorUsage,
69
74
  'ensure-publish-valid': ensurePublishValid,
70
- 'ensure-native-and-af-exports-synced': ensureNativeAndAfExportsSynced,
71
75
  'no-module-level-eval': noModuleLevelEval,
72
76
  'no-module-level-eval-nav4': noModuleLevelEvalNav4,
73
77
  'static-feature-flags': staticFeatureFlags,
@@ -77,10 +81,16 @@ var rules = {
77
81
  'no-alias': noAlias,
78
82
  'use-entrypoints-in-examples': useEntrypointsInExamples,
79
83
  'use-recommended-utils': useRecommendedUtils,
84
+ 'valid-gate-name': validGateName,
80
85
  'no-sparse-checkout': noSparseCheckout,
81
86
  'no-direct-document-usage': noDirectDocumentUsage,
82
87
  'no-set-immediate': noSetImmediate,
83
- 'prefer-crypto-random-uuid': preferCryptoRandomUuid
88
+ 'prefer-crypto-random-uuid': preferCryptoRandomUuid,
89
+ 'no-barrel-entry-imports': noBarrelEntryImports,
90
+ 'no-barrel-entry-jest-mock': noBarrelEntryJestMock,
91
+ 'no-jest-mock-barrel-files': noJestMockBarrelFiles,
92
+ 'no-relative-barrel-file-imports': noRelativeBarrelFileImports,
93
+ 'no-conversation-assistant-barrel-imports': noConversationAssistantBarrelImports
84
94
  };
85
95
  var commonConfig = {
86
96
  '@atlaskit/platform/ensure-test-runner-arguments': 'error',
@@ -110,6 +120,7 @@ var recommendedRules = _objectSpread(_objectSpread({}, commonConfig), {}, {
110
120
  '@atlaskit/platform/inline-usage': 'error',
111
121
  '@atlaskit/platform/prefer-fg': 'error',
112
122
  '@atlaskit/platform/no-alias': 'error',
123
+ '@atlaskit/platform/valid-gate-name': 'error',
113
124
  // end: feature-gating rules
114
125
  '@atlaskit/platform/ensure-feature-flag-registration': 'error'
115
126
  });
@@ -0,0 +1,53 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import { FEATURE_API_IMPORT_SOURCES } from '../../constants';
3
+ import { isIdentifierImportedFrom } from '../utils';
4
+ var IMPORT_SOURCES = new Set([].concat(_toConsumableArray(FEATURE_API_IMPORT_SOURCES), ['@atlassian/jira-feature-flagging-utils', '@atlassian/jira-feature-gate-component']));
5
+ var FUNCTION_NAMES = new Set(['ff', 'fg', 'getFeatureFlagValue', 'componentWithFF', 'componentWithFG', 'passGate', 'withGate', 'expVal', 'expValEquals', 'UNSAFE_noExposureExp', 'mockExp', 'withExp', 'wasExperimentManuallyExposed']);
6
+
7
+ /**
8
+ * Valid gate names must only contain lowercase letters (a-z), numbers (0-9),
9
+ * underscores (_), hyphens (-), and dots (.).
10
+ * No spaces, capital letters, or other characters are allowed.
11
+ */
12
+ var VALID_GATE_NAME_PATTERN = /^[a-z0-9_.-]+$/;
13
+ function isValidGateName(name) {
14
+ return VALID_GATE_NAME_PATTERN.test(name);
15
+ }
16
+ var rule = {
17
+ meta: {
18
+ type: 'problem',
19
+ docs: {
20
+ description: 'Ensure feature gate names contain only lowercase letters, numbers, underscores, and hyphens'
21
+ },
22
+ messages: {
23
+ invalidGateName: 'Feature gate name "{{name}}" is invalid. Gate names must contain only lowercase letters (a-z), numbers (0-9), underscores (_), hyphens (-), and dots (.).'
24
+ }
25
+ },
26
+ create: function create(context) {
27
+ return {
28
+ 'CallExpression[callee.type="Identifier"][arguments.length>0][arguments.0.type="Literal"]': function CallExpressionCalleeTypeIdentifierArgumentsLength0Arguments0TypeLiteral(node) {
29
+ if (node.type !== 'CallExpression') {
30
+ return;
31
+ }
32
+ if (node.callee.type === 'Identifier' && (!FUNCTION_NAMES.has(node.callee.name) || !isIdentifierImportedFrom(node.callee.name, IMPORT_SOURCES, context, node))) {
33
+ return;
34
+ }
35
+ var nameArgument = node.arguments[0];
36
+ if (nameArgument.type !== 'Literal' || typeof nameArgument.value !== 'string') {
37
+ return;
38
+ }
39
+ var gateName = nameArgument.value;
40
+ if (!isValidGateName(gateName)) {
41
+ context.report({
42
+ node: nameArgument,
43
+ messageId: 'invalidGateName',
44
+ data: {
45
+ name: gateName
46
+ }
47
+ });
48
+ }
49
+ }
50
+ };
51
+ }
52
+ };
53
+ export default rule;