@atlaskit/eslint-plugin-platform 0.6.1 → 0.7.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 +103 -28
- package/afm-jira/tsconfig.json +20 -0
- package/dist/cjs/index.js +48 -2
- package/dist/cjs/rules/constants.js +11 -0
- package/dist/cjs/rules/ensure-critical-dependency-resolutions/index.js +54 -6
- package/dist/cjs/rules/ensure-native-and-af-exports-synced/index.js +16 -7
- package/dist/cjs/rules/ensure-valid-emotion-css-prop/index.js +91 -0
- package/dist/cjs/rules/inline-usage/index.js +94 -0
- package/dist/cjs/rules/no-alias/index.js +64 -0
- package/dist/cjs/rules/no-module-level-eval/index.js +45 -0
- package/dist/cjs/rules/no-preconditioning/index.js +108 -0
- package/dist/cjs/rules/prefer-fg/index.js +106 -0
- package/dist/cjs/rules/static-feature-flags/index.js +63 -0
- package/dist/cjs/rules/use-recommended-utils/index.js +47 -0
- package/dist/cjs/rules/util/registration-utils.js +2 -1
- package/dist/cjs/rules/utils.js +53 -0
- package/dist/es2019/index.js +52 -2
- package/dist/es2019/rules/constants.js +5 -0
- package/dist/es2019/rules/ensure-critical-dependency-resolutions/index.js +52 -6
- package/dist/es2019/rules/ensure-native-and-af-exports-synced/index.js +15 -7
- package/dist/es2019/rules/ensure-valid-emotion-css-prop/index.js +87 -0
- package/dist/es2019/rules/inline-usage/index.js +90 -0
- package/dist/es2019/rules/no-alias/index.js +58 -0
- package/dist/es2019/rules/no-module-level-eval/index.js +39 -0
- package/dist/es2019/rules/no-preconditioning/index.js +105 -0
- package/dist/es2019/rules/prefer-fg/index.js +81 -0
- package/dist/es2019/rules/static-feature-flags/index.js +54 -0
- package/dist/es2019/rules/use-recommended-utils/index.js +41 -0
- package/dist/es2019/rules/util/registration-utils.js +2 -1
- package/dist/es2019/rules/utils.js +29 -0
- package/dist/esm/index.js +48 -2
- package/dist/esm/rules/constants.js +5 -0
- package/dist/esm/rules/ensure-critical-dependency-resolutions/index.js +54 -6
- package/dist/esm/rules/ensure-native-and-af-exports-synced/index.js +16 -7
- package/dist/esm/rules/ensure-valid-emotion-css-prop/index.js +85 -0
- package/dist/esm/rules/inline-usage/index.js +87 -0
- package/dist/esm/rules/no-alias/index.js +57 -0
- package/dist/esm/rules/no-module-level-eval/index.js +39 -0
- package/dist/esm/rules/no-preconditioning/index.js +102 -0
- package/dist/esm/rules/prefer-fg/index.js +99 -0
- package/dist/esm/rules/static-feature-flags/index.js +56 -0
- package/dist/esm/rules/use-recommended-utils/index.js +41 -0
- package/dist/esm/rules/util/registration-utils.js +2 -1
- package/dist/esm/rules/utils.js +45 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/rules/constants.d.ts +3 -0
- package/dist/types/rules/ensure-valid-emotion-css-prop/index.d.ts +3 -0
- package/dist/types/rules/inline-usage/index.d.ts +3 -0
- package/dist/types/rules/no-alias/index.d.ts +3 -0
- package/dist/types/rules/no-module-level-eval/index.d.ts +3 -0
- package/dist/types/rules/no-preconditioning/index.d.ts +3 -0
- package/dist/types/rules/prefer-fg/index.d.ts +3 -0
- package/dist/types/rules/static-feature-flags/index.d.ts +3 -0
- package/dist/types/rules/use-recommended-utils/index.d.ts +3 -0
- package/dist/types/rules/util/registration-utils.d.ts +1 -0
- package/dist/types/rules/utils.d.ts +7 -0
- package/dist/types-ts4.5/index.d.ts +15 -0
- package/dist/types-ts4.5/rules/constants.d.ts +3 -0
- package/dist/types-ts4.5/rules/ensure-valid-emotion-css-prop/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/inline-usage/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/no-alias/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/no-module-level-eval/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/no-preconditioning/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/prefer-fg/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/static-feature-flags/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/use-recommended-utils/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/util/registration-utils.d.ts +1 -0
- package/dist/types-ts4.5/rules/utils.d.ts +7 -0
- package/index.js +9 -9
- package/package.json +43 -44
- package/report.api.md +31 -30
- package/src/__tests__/utils/_tester.tsx +16 -16
- package/src/index.tsx +102 -51
- package/src/rules/constants.tsx +20 -0
- package/src/rules/ensure-atlassian-team/__tests__/unit/rule.test.ts +19 -19
- package/src/rules/ensure-atlassian-team/index.ts +39 -52
- package/src/rules/ensure-critical-dependency-resolutions/__test__/unit/rule.test.tsx +146 -81
- package/src/rules/ensure-critical-dependency-resolutions/index.tsx +152 -97
- package/src/rules/ensure-feature-flag-prefix/__tests__/unit/rule.test.tsx +51 -51
- package/src/rules/ensure-feature-flag-prefix/index.tsx +65 -80
- package/src/rules/ensure-feature-flag-registration/__tests__/unit/rule.test.tsx +97 -97
- package/src/rules/ensure-feature-flag-registration/index.tsx +88 -105
- package/src/rules/ensure-native-and-af-exports-synced/__tests__/unit/rule.test.tsx +180 -180
- package/src/rules/ensure-native-and-af-exports-synced/index.tsx +162 -168
- package/src/rules/ensure-publish-valid/__tests__/unit/rule.test.ts +34 -36
- package/src/rules/ensure-publish-valid/index.ts +66 -81
- package/src/rules/ensure-test-runner-arguments/__tests__/unit/rule.test.tsx +93 -93
- package/src/rules/ensure-test-runner-arguments/index.tsx +107 -121
- package/src/rules/ensure-test-runner-nested-count/__tests__/unit/rule.test.tsx +43 -43
- package/src/rules/ensure-test-runner-nested-count/index.tsx +68 -70
- package/src/rules/ensure-valid-emotion-css-prop/__tests__/unit/rule.test.ts +142 -0
- package/src/rules/ensure-valid-emotion-css-prop/index.ts +96 -0
- package/src/rules/inline-usage/README.md +53 -0
- package/src/rules/inline-usage/__tests__/rule.test.tsx +106 -0
- package/src/rules/inline-usage/index.tsx +130 -0
- package/src/rules/no-alias/README.md +29 -0
- package/src/rules/no-alias/__tests__/rule.test.tsx +76 -0
- package/src/rules/no-alias/index.tsx +75 -0
- package/src/rules/no-duplicate-dependencies/__tests__/unit/rule.test.ts +44 -44
- package/src/rules/no-duplicate-dependencies/index.ts +68 -73
- package/src/rules/no-invalid-feature-flag-usage/__tests__/unit/rule.test.tsx +64 -64
- package/src/rules/no-invalid-feature-flag-usage/index.tsx +105 -112
- package/src/rules/no-invalid-storybook-decorator-usage/__tests__/unit/rule.test.tsx +13 -13
- package/src/rules/no-invalid-storybook-decorator-usage/index.tsx +28 -30
- package/src/rules/no-module-level-eval/README.md +53 -0
- package/src/rules/no-module-level-eval/__tests__/test.tsx +133 -0
- package/src/rules/no-module-level-eval/index.tsx +52 -0
- package/src/rules/no-pre-post-installs/__tests__/unit/rule.test.ts +36 -36
- package/src/rules/no-pre-post-installs/index.ts +27 -27
- package/src/rules/no-preconditioning/README.md +69 -0
- package/src/rules/no-preconditioning/__tests__/rule.test.tsx +164 -0
- package/src/rules/no-preconditioning/index.tsx +138 -0
- package/src/rules/prefer-fg/README.md +3 -0
- package/src/rules/prefer-fg/__tests__/rule.test.tsx +83 -0
- package/src/rules/prefer-fg/index.tsx +108 -0
- package/src/rules/static-feature-flags/README.md +3 -0
- package/src/rules/static-feature-flags/__tests__/test.tsx +135 -0
- package/src/rules/static-feature-flags/index.tsx +103 -0
- package/src/rules/use-recommended-utils/README.md +67 -0
- package/src/rules/use-recommended-utils/__tests__/rule.test.tsx +78 -0
- package/src/rules/use-recommended-utils/index.tsx +57 -0
- package/src/rules/util/handle-ast-object.ts +21 -32
- package/src/rules/util/registration-utils.ts +31 -30
- package/src/rules/utils.tsx +46 -0
- package/tsconfig.app.json +35 -35
- package/tsconfig.dev.json +39 -39
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Rule, Scope } from 'eslint';
|
|
2
|
+
export declare function isIdentifierImportedFrom(identifierName: string, sources: Set<string>, context: Rule.RuleContext): boolean;
|
|
3
|
+
export declare function isAPIimport(functionName: string, context: Rule.RuleContext): boolean;
|
|
4
|
+
export declare function getDef(name: string, context: Rule.RuleContext): Scope.Definition | null | undefined;
|
|
5
|
+
export type Node<T extends Rule.Node['type']> = Extract<Rule.Node, {
|
|
6
|
+
type: T;
|
|
7
|
+
}>;
|
package/index.js
CHANGED
|
@@ -6,19 +6,19 @@ const path = require('path');
|
|
|
6
6
|
const paths = require('tsconfig-paths');
|
|
7
7
|
|
|
8
8
|
if (!require.extensions['.ts']) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
// ts-node can only handle being registered once, see https://github.com/TypeStrong/ts-node/issues/409
|
|
10
|
+
require('ts-node').register({
|
|
11
|
+
project: path.join(__dirname, 'tsconfig.json'),
|
|
12
|
+
});
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
try {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
// We programatically register tsconfig paths here so it picks up the tsconfig here
|
|
17
|
+
// instead of in root CWD.
|
|
18
|
+
paths.register(paths.loadConfig(__dirname));
|
|
19
19
|
} catch (e) {
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
// eslint-disable-next-line no-console
|
|
21
|
+
console.log(e);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
module.exports = require('./src/index');
|
package/package.json
CHANGED
|
@@ -1,45 +1,44 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
2
|
+
"name": "@atlaskit/eslint-plugin-platform",
|
|
3
|
+
"description": "The essential plugin for use with Atlassian frontend platform tools",
|
|
4
|
+
"version": "0.7.0",
|
|
5
|
+
"author": "Atlassian Pty Ltd",
|
|
6
|
+
"atlassian": {
|
|
7
|
+
"team": "UIP - Platform Integration Trust (PITa)",
|
|
8
|
+
"releaseModel": "continuous",
|
|
9
|
+
"inPublicMirror": true
|
|
10
|
+
},
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"registry": "https://registry.npmjs.org/"
|
|
13
|
+
},
|
|
14
|
+
"repository": "https://bitbucket.org/atlassian/atlassian-frontend-mirror",
|
|
15
|
+
"main": "dist/cjs/index.js",
|
|
16
|
+
"module": "dist/esm/index.js",
|
|
17
|
+
"module:es2019": "dist/es2019/index.js",
|
|
18
|
+
"types": "dist/types/index.d.ts",
|
|
19
|
+
"typesVersions": {
|
|
20
|
+
">=4.5 <4.9": {
|
|
21
|
+
"*": [
|
|
22
|
+
"dist/types-ts4.5/*",
|
|
23
|
+
"dist/types-ts4.5/index.d.ts"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"sideEffects": false,
|
|
28
|
+
"atlaskit:src": "src/index.tsx",
|
|
29
|
+
"af:exports": {
|
|
30
|
+
".": "./src/index.tsx"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@babel/runtime": "^7.0.0",
|
|
34
|
+
"@manypkg/find-root": "^1.1.0",
|
|
35
|
+
"fuse.js": "^6.6.2",
|
|
36
|
+
"read-pkg-up": "^7.0.1"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/eslint": "^8.56.6",
|
|
40
|
+
"eslint": "^8.49.0",
|
|
41
|
+
"outdent": "^0.5.0",
|
|
42
|
+
"tsconfig-paths": "^4.2.0"
|
|
43
|
+
}
|
|
44
|
+
}
|
package/report.api.md
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
## API Report File for "@atlaskit/eslint-plugin-platform"
|
|
4
4
|
|
|
5
|
-
> Do not edit this file. This report is auto-generated using
|
|
5
|
+
> Do not edit this file. This report is auto-generated using
|
|
6
|
+
> [API Extractor](https://api-extractor.com/).
|
|
6
7
|
> [Learn more about API reports](https://hello.atlassian.net/wiki/spaces/UR/pages/1825484529/Package+API+Reports)
|
|
7
8
|
|
|
8
9
|
### Table of contents
|
|
@@ -20,43 +21,43 @@ import { Rule } from 'eslint';
|
|
|
20
21
|
|
|
21
22
|
// @public (undocumented)
|
|
22
23
|
export const configs: {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
24
|
+
recommended: {
|
|
25
|
+
plugins: string[];
|
|
26
|
+
rules: {
|
|
27
|
+
'@atlaskit/platform/ensure-feature-flag-registration': string;
|
|
28
|
+
'@atlaskit/platform/ensure-feature-flag-prefix': (
|
|
29
|
+
| string
|
|
30
|
+
| {
|
|
31
|
+
allowedPrefixes: string[];
|
|
32
|
+
}
|
|
33
|
+
)[];
|
|
34
|
+
'@atlaskit/platform/ensure-test-runner-arguments': string;
|
|
35
|
+
'@atlaskit/platform/ensure-test-runner-nested-count': string;
|
|
36
|
+
'@atlaskit/platform/no-invalid-feature-flag-usage': string;
|
|
37
|
+
'@atlaskit/platform/no-invalid-storybook-decorator-usage': string;
|
|
38
|
+
'@atlaskit/platform/ensure-atlassian-team': string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
40
41
|
};
|
|
41
42
|
|
|
42
43
|
// @public (undocumented)
|
|
43
44
|
export const processors: {
|
|
44
|
-
|
|
45
|
+
'package-json-processor': Linter.Processor<Linter.ProcessorFile | string>;
|
|
45
46
|
};
|
|
46
47
|
|
|
47
48
|
// @public (undocumented)
|
|
48
49
|
export const rules: {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
50
|
+
'ensure-feature-flag-registration': Rule.RuleModule;
|
|
51
|
+
'ensure-feature-flag-prefix': Rule.RuleModule;
|
|
52
|
+
'ensure-test-runner-arguments': Rule.RuleModule;
|
|
53
|
+
'ensure-test-runner-nested-count': Rule.RuleModule;
|
|
54
|
+
'ensure-atlassian-team': Rule.RuleModule;
|
|
55
|
+
'ensure-critical-dependency-resolutions': Rule.RuleModule;
|
|
56
|
+
'no-duplicate-dependencies': Rule.RuleModule;
|
|
57
|
+
'no-invalid-feature-flag-usage': Rule.RuleModule;
|
|
58
|
+
'no-pre-post-install-scripts': Rule.RuleModule;
|
|
59
|
+
'no-invalid-storybook-decorator-usage': Rule.RuleModule;
|
|
60
|
+
'ensure-publish-valid': Rule.RuleModule;
|
|
60
61
|
};
|
|
61
62
|
|
|
62
63
|
// (No @packageDocumentation comment for this package)
|
|
@@ -3,24 +3,24 @@
|
|
|
3
3
|
import { RuleTester } from 'eslint';
|
|
4
4
|
|
|
5
5
|
(RuleTester as any).describe = (text: string, method: Function) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
const origHasAssertions = expect.hasAssertions;
|
|
7
|
+
describe(text, () => {
|
|
8
|
+
beforeAll(() => {
|
|
9
|
+
// Stub out expect.hasAssertions beforeEach from jest-presetup.js
|
|
10
|
+
expect.hasAssertions = () => {};
|
|
11
|
+
});
|
|
12
|
+
afterAll(() => {
|
|
13
|
+
expect.hasAssertions = origHasAssertions;
|
|
14
|
+
});
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
method();
|
|
17
|
+
});
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
export const tester = new RuleTester({
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
parser: require.resolve('@babel/eslint-parser'),
|
|
22
|
+
parserOptions: {
|
|
23
|
+
ecmaVersion: 6,
|
|
24
|
+
sourceType: 'module',
|
|
25
|
+
},
|
|
26
26
|
});
|
package/src/index.tsx
CHANGED
|
@@ -9,69 +9,120 @@ 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 ensureValidEmotionCssProp from './rules/ensure-valid-emotion-css-prop';
|
|
12
13
|
import noInvalidStorybookDecoratorUsage from './rules/no-invalid-storybook-decorator-usage';
|
|
13
14
|
import ensurePublishValid from './rules/ensure-publish-valid';
|
|
14
15
|
import ensureNativeAndAfExportsSynced from './rules/ensure-native-and-af-exports-synced';
|
|
16
|
+
import noModuleLevelEval from './rules/no-module-level-eval';
|
|
17
|
+
import staticFeatureFlags from './rules/static-feature-flags';
|
|
18
|
+
import noPreconditioning from './rules/no-preconditioning';
|
|
19
|
+
import inlineUsage from './rules/inline-usage';
|
|
20
|
+
import preferFG from './rules/prefer-fg';
|
|
21
|
+
import noAlias from './rules/no-alias';
|
|
22
|
+
import useRecommendedUtils from './rules/use-recommended-utils';
|
|
15
23
|
|
|
16
24
|
export const rules = {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
'ensure-feature-flag-registration': ensureFeatureFlagRegistration,
|
|
26
|
+
'ensure-feature-flag-prefix': ensureFeatureFlagPrefix,
|
|
27
|
+
'ensure-test-runner-arguments': ensureTestRunnerArguments,
|
|
28
|
+
'ensure-test-runner-nested-count': ensureTestRunnerNestedCount,
|
|
29
|
+
'ensure-atlassian-team': ensureAtlassianTeam,
|
|
30
|
+
'ensure-critical-dependency-resolutions': ensureCriticalDependencyResolutions,
|
|
31
|
+
'ensure-valid-emotion-css-prop': ensureValidEmotionCssProp,
|
|
32
|
+
'no-duplicate-dependencies': noDuplicateDependencies,
|
|
33
|
+
'no-invalid-feature-flag-usage': noInvalidFeatureFlagUsage,
|
|
34
|
+
'no-pre-post-install-scripts': noPreAndPostInstallScripts,
|
|
35
|
+
'no-invalid-storybook-decorator-usage': noInvalidStorybookDecoratorUsage,
|
|
36
|
+
'ensure-publish-valid': ensurePublishValid,
|
|
37
|
+
'ensure-native-and-af-exports-synced': ensureNativeAndAfExportsSynced,
|
|
38
|
+
'no-module-level-eval': noModuleLevelEval,
|
|
39
|
+
'static-feature-flags': staticFeatureFlags,
|
|
40
|
+
'no-preconditioning': noPreconditioning,
|
|
41
|
+
'inline-usage': inlineUsage,
|
|
42
|
+
'prefer-fg': preferFG,
|
|
43
|
+
'no-alias': noAlias,
|
|
44
|
+
'use-recommended-utils': useRecommendedUtils,
|
|
29
45
|
};
|
|
30
46
|
|
|
31
47
|
export const configs = {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
48
|
+
recommended: {
|
|
49
|
+
plugins: ['@atlaskit/platform'],
|
|
50
|
+
rules: {
|
|
51
|
+
'@atlaskit/platform/ensure-feature-flag-registration': 'error',
|
|
52
|
+
'@atlaskit/platform/ensure-feature-flag-prefix': [
|
|
53
|
+
'error',
|
|
54
|
+
{ allowedPrefixes: ['platform.'] },
|
|
55
|
+
],
|
|
56
|
+
'@atlaskit/platform/ensure-test-runner-arguments': 'error',
|
|
57
|
+
'@atlaskit/platform/ensure-test-runner-nested-count': 'warn',
|
|
58
|
+
'@atlaskit/platform/no-invalid-feature-flag-usage': 'error',
|
|
59
|
+
'@atlaskit/platform/no-invalid-storybook-decorator-usage': 'error',
|
|
60
|
+
'@atlaskit/platform/ensure-atlassian-team': 'error',
|
|
61
|
+
'@atlaskit/platform/no-module-level-eval': 'error',
|
|
62
|
+
'@atlaskit/platform/static-feature-flags': 'error',
|
|
63
|
+
'@atlaskit/platform/no-preconditioning': 'error',
|
|
64
|
+
'@atlaskit/platform/inline-usage': 'error',
|
|
65
|
+
'@atlaskit/platform/prefer-fg': 'error',
|
|
66
|
+
'@atlaskit/platform/no-alias': 'error',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
47
69
|
};
|
|
48
70
|
|
|
49
71
|
const jsonPrefix =
|
|
50
|
-
|
|
72
|
+
'/* eslint-disable quote-props, comma-dangle, quotes, semi, eol-last, @typescript-eslint/semi, no-template-curly-in-string */ module.exports = ';
|
|
73
|
+
|
|
74
|
+
const jsonPrefixForFlatConfig =
|
|
75
|
+
'/* eslint-disable quote-props, comma-dangle, quotes, semi, eol-last, no-template-curly-in-string */ module.exports = ';
|
|
51
76
|
|
|
52
77
|
export const processors = {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
78
|
+
'package-json-processor': {
|
|
79
|
+
preprocess: (source: string) => {
|
|
80
|
+
// augment the json into a js file
|
|
81
|
+
return [jsonPrefix + source.trim()];
|
|
82
|
+
},
|
|
83
|
+
postprocess: (messages) => {
|
|
84
|
+
return messages[0].map((message) => {
|
|
85
|
+
const { fix } = message;
|
|
86
|
+
if (!fix) {
|
|
87
|
+
return message;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const offset = jsonPrefix.length;
|
|
91
|
+
return {
|
|
92
|
+
...message,
|
|
93
|
+
fix: {
|
|
94
|
+
...fix,
|
|
95
|
+
range: [fix.range[0] - offset, fix.range[1] - offset],
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
},
|
|
100
|
+
supportsAutofix: true,
|
|
101
|
+
} as Linter.Processor,
|
|
102
|
+
// This processor is used for ESLint FlatConfig,
|
|
103
|
+
// once we roll out FlatConfig, we can remove the above processor
|
|
104
|
+
'package-json-processor-for-flat-config': {
|
|
105
|
+
preprocess: (source: string) => {
|
|
106
|
+
// augment the json into a js file
|
|
107
|
+
return [jsonPrefixForFlatConfig + source.trim()];
|
|
108
|
+
},
|
|
109
|
+
postprocess: (messages) => {
|
|
110
|
+
return messages[0].map((message) => {
|
|
111
|
+
const { fix } = message;
|
|
112
|
+
if (!fix) {
|
|
113
|
+
return message;
|
|
114
|
+
}
|
|
64
115
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
116
|
+
const offset = jsonPrefixForFlatConfig.length;
|
|
117
|
+
return {
|
|
118
|
+
...message,
|
|
119
|
+
fix: {
|
|
120
|
+
...fix,
|
|
121
|
+
range: [fix.range[0] - offset, fix.range[1] - offset],
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
},
|
|
126
|
+
supportsAutofix: true,
|
|
127
|
+
} as Linter.Processor,
|
|
77
128
|
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// List of libraries that we maintain or have worked on
|
|
2
|
+
// - eg `@atlaskit/feature-gate-js-client` shouldn't be included in here
|
|
3
|
+
export const FEATURE_API_IMPORT_SOURCES = new Set([
|
|
4
|
+
'@atlassian/jira-feature-flagging',
|
|
5
|
+
'@atlassian/jira-feature-flagging-using-meta',
|
|
6
|
+
'@atlassian/jira-feature-gating',
|
|
7
|
+
'@atlassian/jira-feature-experiments',
|
|
8
|
+
'@atlaskit/platform-feature-flags',
|
|
9
|
+
]);
|
|
10
|
+
|
|
11
|
+
export const FEATURE_MOCKS_IMPORT_SOURCES = new Set([
|
|
12
|
+
'@atlassian/jira-feature-flagging-mocks',
|
|
13
|
+
'@atlassian/jira-feature-gates-test-mocks',
|
|
14
|
+
'@atlassian/jira-feature-gates-storybook-mocks',
|
|
15
|
+
]);
|
|
16
|
+
|
|
17
|
+
export const FEATURE_UTILS_IMPORT_SOURCES = new Set([
|
|
18
|
+
'@atlassian/jira-feature-flagging-utils',
|
|
19
|
+
'@atlassian/jira-feature-gate-component',
|
|
20
|
+
]);
|
|
@@ -2,23 +2,23 @@ import { tester } from '../../../../__tests__/utils/_tester';
|
|
|
2
2
|
import rule from '../../index';
|
|
3
3
|
|
|
4
4
|
describe('test no-pre-post-installs rule', () => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
5
|
+
tester.run('no-pre-post-installs', rule, {
|
|
6
|
+
valid: [
|
|
7
|
+
{
|
|
8
|
+
code: `const foo = {}`,
|
|
9
|
+
filename: 'package.json',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
code: `const foo = { "atlassian": { "team": "bar" } }`,
|
|
13
|
+
filename: 'foo/package.json',
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
invalid: [
|
|
17
|
+
{
|
|
18
|
+
code: `const foo = { "atlassian": {} }`,
|
|
19
|
+
filename: 'foo/package.json',
|
|
20
|
+
errors: [{ messageId: 'atlassianTeamRequired' }],
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
});
|
|
24
24
|
});
|
|
@@ -2,63 +2,50 @@
|
|
|
2
2
|
import type { Rule } from 'eslint';
|
|
3
3
|
|
|
4
4
|
const rule: Rule.RuleModule = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
node.type !== 'ObjectExpression'
|
|
23
|
-
) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
5
|
+
meta: {
|
|
6
|
+
type: 'problem',
|
|
7
|
+
docs: {
|
|
8
|
+
description: 'This rule ensures that the internal packages have a responsible team attached.',
|
|
9
|
+
recommended: true,
|
|
10
|
+
},
|
|
11
|
+
hasSuggestions: false,
|
|
12
|
+
messages: {
|
|
13
|
+
atlassianTeamRequired: 'The atlassian.team property is required',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
create(context) {
|
|
17
|
+
return {
|
|
18
|
+
ObjectExpression: (node: Rule.Node) => {
|
|
19
|
+
if (!context.getFilename().endsWith('package.json') || node.type !== 'ObjectExpression') {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
26
22
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
p.key.type === 'Literal' &&
|
|
31
|
-
p.key.value === 'atlassian',
|
|
32
|
-
);
|
|
23
|
+
const atlassianProp = node.properties.find(
|
|
24
|
+
(p) => p.type === 'Property' && p.key.type === 'Literal' && p.key.value === 'atlassian',
|
|
25
|
+
);
|
|
33
26
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
if (!atlassianProp) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
37
30
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
31
|
+
if (atlassianProp.type !== 'Property' || atlassianProp.value.type !== 'ObjectExpression') {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
44
34
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
p.key.type === 'Literal' &&
|
|
49
|
-
p.key.value === 'team',
|
|
50
|
-
);
|
|
35
|
+
const teamProp = atlassianProp.value.properties.find(
|
|
36
|
+
(p) => p.type === 'Property' && p.key.type === 'Literal' && p.key.value === 'team',
|
|
37
|
+
);
|
|
51
38
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
39
|
+
// this just checks for existence, we can potentially cross-reference it with teams.json to make sure its valid in the future.
|
|
40
|
+
if (!teamProp) {
|
|
41
|
+
return context.report({
|
|
42
|
+
node,
|
|
43
|
+
messageId: 'atlassianTeamRequired',
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
},
|
|
62
49
|
};
|
|
63
50
|
|
|
64
51
|
export default rule;
|