@atlaskit/eslint-plugin-platform 0.2.5 → 0.3.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 +33 -21
- package/dist/cjs/index.js +28 -11
- package/dist/cjs/rules/ensure-atlassian-team/index.js +1 -2
- package/dist/cjs/rules/ensure-critical-dependency-resolutions/index.js +86 -0
- package/dist/cjs/rules/ensure-feature-flag-prefix/index.js +1 -2
- package/dist/cjs/rules/ensure-feature-flag-registration/index.js +3 -4
- package/dist/cjs/rules/ensure-publish-valid/index.js +5 -29
- package/dist/cjs/rules/ensure-test-runner-arguments/index.js +1 -2
- package/dist/cjs/rules/ensure-test-runner-nested-count/index.js +3 -4
- package/dist/cjs/rules/no-duplicate-dependencies/index.js +90 -0
- package/dist/cjs/rules/no-invalid-feature-flag-usage/index.js +1 -2
- package/dist/cjs/rules/no-invalid-storybook-decorator-usage/index.js +1 -2
- package/dist/cjs/rules/no-pre-post-installs/index.js +1 -2
- package/dist/cjs/rules/util/handle-ast-object.js +30 -0
- package/dist/cjs/rules/util/registration-utils.js +3 -5
- package/dist/es2019/index.js +25 -2
- package/dist/es2019/rules/ensure-critical-dependency-resolutions/index.js +64 -0
- package/dist/es2019/rules/ensure-publish-valid/index.js +1 -20
- package/dist/es2019/rules/no-duplicate-dependencies/index.js +65 -0
- package/dist/es2019/rules/util/handle-ast-object.js +20 -0
- package/dist/esm/index.js +24 -4
- package/dist/esm/rules/ensure-critical-dependency-resolutions/index.js +80 -0
- package/dist/esm/rules/ensure-feature-flag-registration/index.js +2 -2
- package/dist/esm/rules/ensure-publish-valid/index.js +1 -24
- package/dist/esm/rules/ensure-test-runner-nested-count/index.js +2 -2
- package/dist/esm/rules/no-duplicate-dependencies/index.js +83 -0
- package/dist/esm/rules/util/handle-ast-object.js +24 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/rules/ensure-critical-dependency-resolutions/index.d.ts +3 -0
- package/dist/types/rules/no-duplicate-dependencies/index.d.ts +3 -0
- package/dist/types/rules/util/handle-ast-object.d.ts +3 -0
- package/dist/types-ts4.5/index.d.ts +2 -0
- package/dist/types-ts4.5/rules/ensure-critical-dependency-resolutions/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/no-duplicate-dependencies/index.d.ts +3 -0
- package/dist/types-ts4.5/rules/util/handle-ast-object.d.ts +3 -0
- package/package.json +3 -2
- package/report.api.md +2 -0
- package/src/index.tsx +26 -4
- package/src/rules/ensure-critical-dependency-resolutions/__test__/unit/rule.test.tsx +125 -0
- package/src/rules/ensure-critical-dependency-resolutions/index.tsx +113 -0
- package/src/rules/ensure-publish-valid/index.ts +4 -43
- package/src/rules/no-duplicate-dependencies/__tests__/unit/rule.test.ts +116 -0
- package/src/rules/no-duplicate-dependencies/index.ts +83 -0
- package/src/rules/util/handle-ast-object.ts +44 -0
- package/tmp/api-report-tmp.d.ts +2 -0
- package/tsconfig.app.json +36 -0
- package/tsconfig.dev.json +40 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,127 +1,139 @@
|
|
|
1
1
|
# @atlaskit/eslint-plugin-platform
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#41190](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/41190) [`a5047d254d4`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a5047d254d4) - Add no-duplicate-dependencies rule and enable package-json-processor autofix
|
|
8
|
+
|
|
9
|
+
## 0.2.6
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#39249](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/39249) [`7efeb93141c`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7efeb93141c) - Add a rule to ensure critical packages are resolved to the correct versions
|
|
14
|
+
|
|
3
15
|
## 0.2.5
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
6
18
|
|
|
7
|
-
- [`e5f52093b2a`](https://bitbucket.org/atlassian/atlassian-frontend/commits/e5f52093b2a) - Add a rule to ensure that publish config is correct for packages
|
|
19
|
+
- [#39049](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/39049) [`e5f52093b2a`](https://bitbucket.org/atlassian/atlassian-frontend/commits/e5f52093b2a) - Add a rule to ensure that publish config is correct for packages
|
|
8
20
|
|
|
9
21
|
## 0.2.4
|
|
10
22
|
|
|
11
23
|
### Patch Changes
|
|
12
24
|
|
|
13
|
-
- [`eb64cbdd681`](https://bitbucket.org/atlassian/atlassian-frontend/commits/eb64cbdd681) - Add a new rule to verify that the atlassian team is defined if the relevant section exists in the package.json
|
|
25
|
+
- [#38261](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/38261) [`eb64cbdd681`](https://bitbucket.org/atlassian/atlassian-frontend/commits/eb64cbdd681) - Add a new rule to verify that the atlassian team is defined if the relevant section exists in the package.json
|
|
14
26
|
|
|
15
27
|
## 0.2.3
|
|
16
28
|
|
|
17
29
|
### Patch Changes
|
|
18
30
|
|
|
19
|
-
- [`0bf64fb3dd0`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0bf64fb3dd0) - Update to support unary expressions like negation
|
|
31
|
+
- [#33879](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/33879) [`0bf64fb3dd0`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0bf64fb3dd0) - Update to support unary expressions like negation
|
|
20
32
|
|
|
21
33
|
## 0.2.2
|
|
22
34
|
|
|
23
35
|
### Patch Changes
|
|
24
36
|
|
|
25
|
-
- [`9d00501a414`](https://bitbucket.org/atlassian/atlassian-frontend/commits/9d00501a414) - Ensure legacy types are published for TS 4.5-4.8
|
|
37
|
+
- [#33793](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/33793) [`9d00501a414`](https://bitbucket.org/atlassian/atlassian-frontend/commits/9d00501a414) - Ensure legacy types are published for TS 4.5-4.8
|
|
26
38
|
|
|
27
39
|
## 0.2.1
|
|
28
40
|
|
|
29
41
|
### Patch Changes
|
|
30
42
|
|
|
31
|
-
- [`41fae2c6f68`](https://bitbucket.org/atlassian/atlassian-frontend/commits/41fae2c6f68) - Upgrade Typescript from `4.5.5` to `4.9.5`
|
|
43
|
+
- [#33649](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/33649) [`41fae2c6f68`](https://bitbucket.org/atlassian/atlassian-frontend/commits/41fae2c6f68) - Upgrade Typescript from `4.5.5` to `4.9.5`
|
|
32
44
|
|
|
33
45
|
## 0.2.0
|
|
34
46
|
|
|
35
47
|
### Minor Changes
|
|
36
48
|
|
|
37
|
-
- [`56507598609`](https://bitbucket.org/atlassian/atlassian-frontend/commits/56507598609) - Skip minor dependency bump
|
|
49
|
+
- [#33258](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/33258) [`56507598609`](https://bitbucket.org/atlassian/atlassian-frontend/commits/56507598609) - Skip minor dependency bump
|
|
38
50
|
|
|
39
51
|
## 0.1.8
|
|
40
52
|
|
|
41
53
|
### Patch Changes
|
|
42
54
|
|
|
43
|
-
- [`cb0e94d2ce4`](https://bitbucket.org/atlassian/atlassian-frontend/commits/cb0e94d2ce4) - Fix prefixes for all flags being checked at any callsite, only the current flag will be checked from now on
|
|
55
|
+
- [#32441](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/32441) [`cb0e94d2ce4`](https://bitbucket.org/atlassian/atlassian-frontend/commits/cb0e94d2ce4) - Fix prefixes for all flags being checked at any callsite, only the current flag will be checked from now on
|
|
44
56
|
|
|
45
57
|
## 0.1.7
|
|
46
58
|
|
|
47
59
|
### Patch Changes
|
|
48
60
|
|
|
49
|
-
- [`2e01c9c74b5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2e01c9c74b5) - DUMMY remove before merging to master; dupe adf-schema via adf-utils
|
|
61
|
+
- [#32424](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/32424) [`2e01c9c74b5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2e01c9c74b5) - DUMMY remove before merging to master; dupe adf-schema via adf-utils
|
|
50
62
|
|
|
51
63
|
## 0.1.6
|
|
52
64
|
|
|
53
65
|
### Patch Changes
|
|
54
66
|
|
|
55
|
-
- [`e8a8808f299`](https://bitbucket.org/atlassian/atlassian-frontend/commits/e8a8808f299) - Add a new eslint rule that enforces prefixes on platform feature flags. Ignore existing usages.
|
|
67
|
+
- [#31962](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/31962) [`e8a8808f299`](https://bitbucket.org/atlassian/atlassian-frontend/commits/e8a8808f299) - Add a new eslint rule that enforces prefixes on platform feature flags. Ignore existing usages.
|
|
56
68
|
|
|
57
69
|
## 0.1.5
|
|
58
70
|
|
|
59
71
|
### Patch Changes
|
|
60
72
|
|
|
61
|
-
- [`b47e48ad163`](https://bitbucket.org/atlassian/atlassian-frontend/commits/b47e48ad163) - Adds an eslint rule to confirm that storybooks only get passed an object - to ensure that codemods work correctly.
|
|
73
|
+
- [#31956](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/31956) [`b47e48ad163`](https://bitbucket.org/atlassian/atlassian-frontend/commits/b47e48ad163) - Adds an eslint rule to confirm that storybooks only get passed an object - to ensure that codemods work correctly.
|
|
62
74
|
|
|
63
75
|
## 0.1.4
|
|
64
76
|
|
|
65
77
|
### Patch Changes
|
|
66
78
|
|
|
67
|
-
- [`971489f4ff4`](https://bitbucket.org/atlassian/atlassian-frontend/commits/971489f4ff4) - Add test runner to identified calls that require registration of platform feature flags
|
|
79
|
+
- [#31631](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/31631) [`971489f4ff4`](https://bitbucket.org/atlassian/atlassian-frontend/commits/971489f4ff4) - Add test runner to identified calls that require registration of platform feature flags
|
|
68
80
|
|
|
69
81
|
## 0.1.3
|
|
70
82
|
|
|
71
83
|
### Patch Changes
|
|
72
84
|
|
|
73
|
-
- [`7facf919a4e`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7facf919a4e) - Remove product specific rules and make it so the recommended set is used everywhere instead
|
|
85
|
+
- [#31581](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/31581) [`7facf919a4e`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7facf919a4e) - Remove product specific rules and make it so the recommended set is used everywhere instead
|
|
74
86
|
|
|
75
87
|
## 0.1.2
|
|
76
88
|
|
|
77
89
|
### Patch Changes
|
|
78
90
|
|
|
79
|
-
- [`166815fbd8f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/166815fbd8f) - Add recommended set of flags for use in products
|
|
91
|
+
- [#31440](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/31440) [`166815fbd8f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/166815fbd8f) - Add recommended set of flags for use in products
|
|
80
92
|
|
|
81
93
|
## 0.1.1
|
|
82
94
|
|
|
83
95
|
### Patch Changes
|
|
84
96
|
|
|
85
|
-
- [`7edd9e8b4b1`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7edd9e8b4b1) - Add suggestion to change feature flag to the closest matching feature flag using fuzzy search
|
|
97
|
+
- [#30710](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/30710) [`7edd9e8b4b1`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7edd9e8b4b1) - Add suggestion to change feature flag to the closest matching feature flag using fuzzy search
|
|
86
98
|
|
|
87
99
|
## 0.1.0
|
|
88
100
|
|
|
89
101
|
### Minor Changes
|
|
90
102
|
|
|
91
|
-
- [`6339334e3ac`](https://bitbucket.org/atlassian/atlassian-frontend/commits/6339334e3ac) - Adds new rule to disallow pre/post install scripts in package.json.
|
|
103
|
+
- [#30401](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/30401) [`6339334e3ac`](https://bitbucket.org/atlassian/atlassian-frontend/commits/6339334e3ac) - Adds new rule to disallow pre/post install scripts in package.json.
|
|
92
104
|
|
|
93
105
|
## 0.0.7
|
|
94
106
|
|
|
95
107
|
### Patch Changes
|
|
96
108
|
|
|
97
|
-
- [`0cab60b90c3`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0cab60b90c3) - Add fix to eslint rule on the arguments of nested test runner
|
|
109
|
+
- [#30777](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/30777) [`0cab60b90c3`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0cab60b90c3) - Add fix to eslint rule on the arguments of nested test runner
|
|
98
110
|
|
|
99
111
|
## 0.0.6
|
|
100
112
|
|
|
101
113
|
### Patch Changes
|
|
102
114
|
|
|
103
|
-
- [`99449cce7f5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/99449cce7f5) - Eslint rules around test runner arguments and limit on nested test runners
|
|
115
|
+
- [#30491](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/30491) [`99449cce7f5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/99449cce7f5) - Eslint rules around test runner arguments and limit on nested test runners
|
|
104
116
|
|
|
105
117
|
## 0.0.5
|
|
106
118
|
|
|
107
119
|
### Patch Changes
|
|
108
120
|
|
|
109
|
-
- [`aeb52cac34c`](https://bitbucket.org/atlassian/atlassian-frontend/commits/aeb52cac34c) - Split feature flag registration rule into two to more easily use it in products
|
|
121
|
+
- [#30484](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/30484) [`aeb52cac34c`](https://bitbucket.org/atlassian/atlassian-frontend/commits/aeb52cac34c) - Split feature flag registration rule into two to more easily use it in products
|
|
110
122
|
|
|
111
123
|
## 0.0.4
|
|
112
124
|
|
|
113
125
|
### Patch Changes
|
|
114
126
|
|
|
115
|
-
- [`cd5b194f403`](https://bitbucket.org/atlassian/atlassian-frontend/commits/cd5b194f403) - Add check to ensure that there is only one feature flag call per expression
|
|
127
|
+
- [#30432](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/30432) [`cd5b194f403`](https://bitbucket.org/atlassian/atlassian-frontend/commits/cd5b194f403) - Add check to ensure that there is only one feature flag call per expression
|
|
116
128
|
|
|
117
129
|
## 0.0.3
|
|
118
130
|
|
|
119
131
|
### Patch Changes
|
|
120
132
|
|
|
121
|
-
- [`11706c3e7c5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/11706c3e7c5) - Publish platform eslint rules to npm to be consumed in other products
|
|
133
|
+
- [#30320](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/30320) [`11706c3e7c5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/11706c3e7c5) - Publish platform eslint rules to npm to be consumed in other products
|
|
122
134
|
|
|
123
135
|
## 0.0.2
|
|
124
136
|
|
|
125
137
|
### Patch Changes
|
|
126
138
|
|
|
127
|
-
- [`85dc0230439`](https://bitbucket.org/atlassian/atlassian-frontend/commits/85dc0230439) - Add eslint rule to allow for platform feature flag usage
|
|
139
|
+
- [#28303](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/28303) [`85dc0230439`](https://bitbucket.org/atlassian/atlassian-frontend/commits/85dc0230439) - Add eslint rule to allow for platform feature flag usage
|
package/dist/cjs/index.js
CHANGED
|
@@ -5,28 +5,34 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.rules = exports.processors = exports.configs = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
8
9
|
var _ensureFeatureFlagRegistration = _interopRequireDefault(require("./rules/ensure-feature-flag-registration"));
|
|
9
10
|
var _noPrePostInstalls = _interopRequireDefault(require("./rules/no-pre-post-installs"));
|
|
10
11
|
var _ensureTestRunnerArguments = _interopRequireDefault(require("./rules/ensure-test-runner-arguments"));
|
|
11
12
|
var _ensureTestRunnerNestedCount = _interopRequireDefault(require("./rules/ensure-test-runner-nested-count"));
|
|
12
13
|
var _ensureAtlassianTeam = _interopRequireDefault(require("./rules/ensure-atlassian-team"));
|
|
14
|
+
var _noDuplicateDependencies = _interopRequireDefault(require("./rules/no-duplicate-dependencies"));
|
|
13
15
|
var _noInvalidFeatureFlagUsage = _interopRequireDefault(require("./rules/no-invalid-feature-flag-usage"));
|
|
14
16
|
var _ensureFeatureFlagPrefix = _interopRequireDefault(require("./rules/ensure-feature-flag-prefix"));
|
|
17
|
+
var _ensureCriticalDependencyResolutions = _interopRequireDefault(require("./rules/ensure-critical-dependency-resolutions"));
|
|
15
18
|
var _noInvalidStorybookDecoratorUsage = _interopRequireDefault(require("./rules/no-invalid-storybook-decorator-usage"));
|
|
16
19
|
var _ensurePublishValid = _interopRequireDefault(require("./rules/ensure-publish-valid"));
|
|
17
|
-
var
|
|
20
|
+
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; }
|
|
21
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
22
|
+
var rules = exports.rules = {
|
|
18
23
|
'ensure-feature-flag-registration': _ensureFeatureFlagRegistration.default,
|
|
19
24
|
'ensure-feature-flag-prefix': _ensureFeatureFlagPrefix.default,
|
|
20
25
|
'ensure-test-runner-arguments': _ensureTestRunnerArguments.default,
|
|
21
26
|
'ensure-test-runner-nested-count': _ensureTestRunnerNestedCount.default,
|
|
22
27
|
'ensure-atlassian-team': _ensureAtlassianTeam.default,
|
|
28
|
+
'ensure-critical-dependency-resolutions': _ensureCriticalDependencyResolutions.default,
|
|
29
|
+
'no-duplicate-dependencies': _noDuplicateDependencies.default,
|
|
23
30
|
'no-invalid-feature-flag-usage': _noInvalidFeatureFlagUsage.default,
|
|
24
31
|
'no-pre-post-install-scripts': _noPrePostInstalls.default,
|
|
25
32
|
'no-invalid-storybook-decorator-usage': _noInvalidStorybookDecoratorUsage.default,
|
|
26
33
|
'ensure-publish-valid': _ensurePublishValid.default
|
|
27
34
|
};
|
|
28
|
-
exports.
|
|
29
|
-
var configs = {
|
|
35
|
+
var configs = exports.configs = {
|
|
30
36
|
recommended: {
|
|
31
37
|
plugins: ['@atlaskit/platform'],
|
|
32
38
|
rules: {
|
|
@@ -42,16 +48,27 @@ var configs = {
|
|
|
42
48
|
}
|
|
43
49
|
}
|
|
44
50
|
};
|
|
45
|
-
exports
|
|
46
|
-
var processors = {
|
|
51
|
+
var jsonPrefix = '/* eslint-disable quote-props, comma-dangle, quotes, semi, eol-last, @typescript-eslint/semi, no-template-curly-in-string */ module.exports = ';
|
|
52
|
+
var processors = exports.processors = {
|
|
47
53
|
'package-json-processor': {
|
|
48
54
|
preprocess: function preprocess(source) {
|
|
49
55
|
// augment the json into a js file
|
|
50
|
-
return [
|
|
56
|
+
return [jsonPrefix + source.trim()];
|
|
51
57
|
},
|
|
52
|
-
postprocess: function postprocess(
|
|
53
|
-
return
|
|
54
|
-
|
|
58
|
+
postprocess: function postprocess(messages) {
|
|
59
|
+
return messages[0].map(function (message) {
|
|
60
|
+
var fix = message.fix;
|
|
61
|
+
if (!fix) {
|
|
62
|
+
return message;
|
|
63
|
+
}
|
|
64
|
+
var offset = jsonPrefix.length;
|
|
65
|
+
return _objectSpread(_objectSpread({}, message), {}, {
|
|
66
|
+
fix: _objectSpread(_objectSpread({}, fix), {}, {
|
|
67
|
+
range: [fix.range[0] - offset, fix.range[1] - offset]
|
|
68
|
+
})
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
supportsAutofix: true
|
|
55
73
|
}
|
|
56
|
-
};
|
|
57
|
-
exports.processors = processors;
|
|
74
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _findRoot = require("@manypkg/find-root");
|
|
10
|
+
var _handleAstObject = require("../util/handle-ast-object");
|
|
11
|
+
// Here we only need to specify the major and minor versions
|
|
12
|
+
// In matchMinorVersion, we will check if the versions in resolutions fall in the right ranges.
|
|
13
|
+
var DESIRED_PKG_VERSIONS = {
|
|
14
|
+
typescript: '4.9',
|
|
15
|
+
'@types/react': '16.14'
|
|
16
|
+
};
|
|
17
|
+
var matchMinorVersion = function matchMinorVersion(desiredVersion, versionInResolutions) {
|
|
18
|
+
var firstChar = versionInResolutions[0];
|
|
19
|
+
// The version is invalid if it doesn't start with a number or ~
|
|
20
|
+
if (!/^\d$/.test(firstChar) && firstChar !== '~') {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
return versionInResolutions.startsWith(desiredVersion) || versionInResolutions.startsWith('~' + desiredVersion);
|
|
24
|
+
};
|
|
25
|
+
var verifyResolutionFromObject = function verifyResolutionFromObject(node, pkg, version, optional) {
|
|
26
|
+
// For root package.json, we require the critical packages' resolutions exist and with matching version
|
|
27
|
+
// For individual package's package.json, it's ok if resolutions don't exist. But if they do, the version should match
|
|
28
|
+
var resolutionExist = node.properties.some(function (p) {
|
|
29
|
+
return p.type === 'Property' && p.key.type === 'Literal' && p.key.value === pkg;
|
|
30
|
+
});
|
|
31
|
+
if (!resolutionExist) {
|
|
32
|
+
return optional;
|
|
33
|
+
}
|
|
34
|
+
var resolutionExistAndMatch = node.properties.some(function (p) {
|
|
35
|
+
return p.type === 'Property' && p.key.type === 'Literal' && p.key.value === pkg && p.value.type === 'Literal' && matchMinorVersion(version, p.value.value);
|
|
36
|
+
});
|
|
37
|
+
return resolutionExistAndMatch;
|
|
38
|
+
};
|
|
39
|
+
var rule = {
|
|
40
|
+
meta: {
|
|
41
|
+
type: 'problem',
|
|
42
|
+
docs: {
|
|
43
|
+
description: 'Enforce the versions of critical packages are within desired ranges by checking resolutions section in package.json',
|
|
44
|
+
recommended: true
|
|
45
|
+
},
|
|
46
|
+
hasSuggestions: false,
|
|
47
|
+
messages: {
|
|
48
|
+
invalidPackageResolution: "Make sure the resolutions for the following packages match major and minor version ranges ".concat(JSON.stringify(DESIRED_PKG_VERSIONS))
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
create: function create(context) {
|
|
52
|
+
var fileName = context.getFilename();
|
|
53
|
+
return {
|
|
54
|
+
ObjectExpression: function (_ObjectExpression) {
|
|
55
|
+
function ObjectExpression(_x) {
|
|
56
|
+
return _ObjectExpression.apply(this, arguments);
|
|
57
|
+
}
|
|
58
|
+
ObjectExpression.toString = function () {
|
|
59
|
+
return _ObjectExpression.toString();
|
|
60
|
+
};
|
|
61
|
+
return ObjectExpression;
|
|
62
|
+
}(function (node) {
|
|
63
|
+
if (!fileName.endsWith('package.json') || node.type !== 'ObjectExpression') {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
var packageResolutions = (0, _handleAstObject.getObjectPropertyAsObject)(node, 'resolutions');
|
|
67
|
+
var rootDir = (0, _findRoot.findRootSync)(process.cwd());
|
|
68
|
+
var isRootPackageJson = fileName.endsWith("".concat(rootDir, "/package.json"));
|
|
69
|
+
if (packageResolutions !== null) {
|
|
70
|
+
for (var _i = 0, _Object$entries = Object.entries(DESIRED_PKG_VERSIONS); _i < _Object$entries.length; _i++) {
|
|
71
|
+
var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
|
|
72
|
+
key = _Object$entries$_i[0],
|
|
73
|
+
value = _Object$entries$_i[1];
|
|
74
|
+
if (!verifyResolutionFromObject(packageResolutions, key, value, !isRootPackageJson)) {
|
|
75
|
+
return context.report({
|
|
76
|
+
node: node,
|
|
77
|
+
messageId: 'invalidPackageResolution'
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
})
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
var _default = exports.default = rule;
|
|
@@ -7,8 +7,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
9
|
var _registrationUtils = require("../util/registration-utils");
|
|
10
|
-
function ownKeys(
|
|
11
|
-
function _objectSpread(
|
|
10
|
+
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; }
|
|
11
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
12
|
var rule = {
|
|
13
13
|
meta: {
|
|
14
14
|
docs: {
|
|
@@ -91,5 +91,4 @@ var rule = {
|
|
|
91
91
|
}));
|
|
92
92
|
}
|
|
93
93
|
};
|
|
94
|
-
var _default = rule;
|
|
95
|
-
exports.default = _default;
|
|
94
|
+
var _default = exports.default = rule;
|
|
@@ -4,30 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var
|
|
8
|
-
var prop = node.properties.find(function (p) {
|
|
9
|
-
return p.type === 'Property' && p.key.type === 'Literal' && p.key.value === property;
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
// double check for property is to make typescript happy
|
|
13
|
-
if ((prop === null || prop === void 0 ? void 0 : prop.type) === 'Property' && (prop === null || prop === void 0 ? void 0 : prop.value.type) === 'Literal') {
|
|
14
|
-
var _prop$value$value;
|
|
15
|
-
return (_prop$value$value = prop.value.value) !== null && _prop$value$value !== void 0 ? _prop$value$value : null;
|
|
16
|
-
}
|
|
17
|
-
return null;
|
|
18
|
-
};
|
|
19
|
-
var getObjectPropertyAsObject = function getObjectPropertyAsObject(node, property) {
|
|
20
|
-
var prop = node.properties.find(function (p) {
|
|
21
|
-
return p.type === 'Property' && p.key.type === 'Literal' && p.key.value === property;
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
// double check for property is to make typescript happy
|
|
25
|
-
if ((prop === null || prop === void 0 ? void 0 : prop.type) === 'Property' && (prop === null || prop === void 0 ? void 0 : prop.value.type) === 'ObjectExpression') {
|
|
26
|
-
var _prop$value;
|
|
27
|
-
return (_prop$value = prop.value) !== null && _prop$value !== void 0 ? _prop$value : null;
|
|
28
|
-
}
|
|
29
|
-
return null;
|
|
30
|
-
};
|
|
7
|
+
var _handleAstObject = require("../util/handle-ast-object");
|
|
31
8
|
var rule = {
|
|
32
9
|
meta: {
|
|
33
10
|
type: 'problem',
|
|
@@ -61,9 +38,9 @@ var rule = {
|
|
|
61
38
|
if (!context.getFilename().endsWith('package.json') || node.type !== 'ObjectExpression') {
|
|
62
39
|
return;
|
|
63
40
|
}
|
|
64
|
-
var packageName = getObjectPropertyAsLiteral(node, 'name');
|
|
65
|
-
var packagePrivate = getObjectPropertyAsLiteral(node, 'private');
|
|
66
|
-
var packagePublishConfig = getObjectPropertyAsObject(node, 'publishConfig');
|
|
41
|
+
var packageName = (0, _handleAstObject.getObjectPropertyAsLiteral)(node, 'name');
|
|
42
|
+
var packagePrivate = (0, _handleAstObject.getObjectPropertyAsLiteral)(node, 'private');
|
|
43
|
+
var packagePublishConfig = (0, _handleAstObject.getObjectPropertyAsObject)(node, 'publishConfig');
|
|
67
44
|
|
|
68
45
|
// exit if package is on known exception list
|
|
69
46
|
if (exceptions && exceptions.findIndex(function (name) {
|
|
@@ -95,5 +72,4 @@ var rule = {
|
|
|
95
72
|
};
|
|
96
73
|
}
|
|
97
74
|
};
|
|
98
|
-
var _default = rule;
|
|
99
|
-
exports.default = _default;
|
|
75
|
+
var _default = exports.default = rule;
|
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
-
function ownKeys(
|
|
10
|
-
function _objectSpread(
|
|
9
|
+
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; }
|
|
10
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
11
11
|
var NESTED_LIMIT = 4;
|
|
12
12
|
var TEST_RUNNER_IDENTIFIER = 'ffTest';
|
|
13
13
|
var getDepthOfNestedRunner = function getDepthOfNestedRunner(node) {
|
|
@@ -65,5 +65,4 @@ var rule = {
|
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
};
|
|
68
|
-
var _default = rule;
|
|
69
|
-
exports.default = _default;
|
|
68
|
+
var _default = exports.default = rule;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
10
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
11
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
12
|
+
var rule = {
|
|
13
|
+
meta: {
|
|
14
|
+
type: 'problem',
|
|
15
|
+
docs: {
|
|
16
|
+
description: 'This rule disallows a dependency to be defined in both dependencies and devDependencies',
|
|
17
|
+
recommended: false
|
|
18
|
+
},
|
|
19
|
+
fixable: 'code',
|
|
20
|
+
messages: {
|
|
21
|
+
unexpectedDuplicateDependency: 'Unexpected duplicate dependency {{name}}'
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
create: function create(context) {
|
|
25
|
+
var dependencies = new Map();
|
|
26
|
+
var devDependencies = new Map();
|
|
27
|
+
return {
|
|
28
|
+
'ObjectExpression Property[key.value=dependencies] Property': function ObjectExpressionPropertyKeyValueDependenciesProperty(node) {
|
|
29
|
+
// @ts-expect-error
|
|
30
|
+
dependencies.set(node.key.value, node.key);
|
|
31
|
+
},
|
|
32
|
+
'ObjectExpression Property[key.value=devDependencies] Property': function ObjectExpressionPropertyKeyValueDevDependenciesProperty(node) {
|
|
33
|
+
// @ts-expect-error
|
|
34
|
+
devDependencies.set(node.key.value, node.key);
|
|
35
|
+
},
|
|
36
|
+
'Program:exit': function ProgramExit() {
|
|
37
|
+
var _iterator = _createForOfIteratorHelper(devDependencies),
|
|
38
|
+
_step;
|
|
39
|
+
try {
|
|
40
|
+
var _loop = function _loop() {
|
|
41
|
+
var _step$value = (0, _slicedToArray2.default)(_step.value, 2),
|
|
42
|
+
dependency = _step$value[0],
|
|
43
|
+
node = _step$value[1];
|
|
44
|
+
if (dependencies.has(dependency)) {
|
|
45
|
+
context.report({
|
|
46
|
+
data: {
|
|
47
|
+
name: dependency
|
|
48
|
+
},
|
|
49
|
+
fix: function fix(fixer) {
|
|
50
|
+
var _sourceCode$getTokenA;
|
|
51
|
+
var sourceCode = context.getSourceCode();
|
|
52
|
+
var property = node.parent;
|
|
53
|
+
var isLastLine = ((_sourceCode$getTokenA = sourceCode.getTokenAfter(property)) === null || _sourceCode$getTokenA === void 0 ? void 0 : _sourceCode$getTokenA.value) === '}';
|
|
54
|
+
var end = property.loc.end;
|
|
55
|
+
if (!isLastLine) {
|
|
56
|
+
return fixer.removeRange([sourceCode.getIndexFromLoc({
|
|
57
|
+
line: property.loc.start.line,
|
|
58
|
+
column: 0
|
|
59
|
+
}), sourceCode.getIndexFromLoc({
|
|
60
|
+
line: end.line + 1,
|
|
61
|
+
column: 0
|
|
62
|
+
})]);
|
|
63
|
+
}
|
|
64
|
+
var previousToken = sourceCode.getTokenBefore(property);
|
|
65
|
+
return fixer.removeRange([sourceCode.getIndexFromLoc({
|
|
66
|
+
line: previousToken.loc.end.line,
|
|
67
|
+
column: previousToken.loc.end.column - 1
|
|
68
|
+
}), sourceCode.getIndexFromLoc({
|
|
69
|
+
line: end.line,
|
|
70
|
+
column: end.column
|
|
71
|
+
})]);
|
|
72
|
+
},
|
|
73
|
+
messageId: 'unexpectedDuplicateDependency',
|
|
74
|
+
node: node
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
79
|
+
_loop();
|
|
80
|
+
}
|
|
81
|
+
} catch (err) {
|
|
82
|
+
_iterator.e(err);
|
|
83
|
+
} finally {
|
|
84
|
+
_iterator.f();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
var _default = exports.default = rule;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getObjectPropertyAsObject = exports.getObjectPropertyAsLiteral = void 0;
|
|
7
|
+
var getObjectPropertyAsLiteral = exports.getObjectPropertyAsLiteral = function getObjectPropertyAsLiteral(node, property) {
|
|
8
|
+
var prop = node.properties.find(function (p) {
|
|
9
|
+
return p.type === 'Property' && p.key.type === 'Literal' && p.key.value === property;
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
// double check for property is to make typescript happy
|
|
13
|
+
if ((prop === null || prop === void 0 ? void 0 : prop.type) === 'Property' && (prop === null || prop === void 0 ? void 0 : prop.value.type) === 'Literal') {
|
|
14
|
+
var _prop$value$value;
|
|
15
|
+
return (_prop$value$value = prop.value.value) !== null && _prop$value$value !== void 0 ? _prop$value$value : null;
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
};
|
|
19
|
+
var getObjectPropertyAsObject = exports.getObjectPropertyAsObject = function getObjectPropertyAsObject(node, property) {
|
|
20
|
+
var prop = node.properties.find(function (p) {
|
|
21
|
+
return p.type === 'Property' && p.key.type === 'Literal' && p.key.value === property;
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// double check for property is to make typescript happy
|
|
25
|
+
if ((prop === null || prop === void 0 ? void 0 : prop.type) === 'Property' && (prop === null || prop === void 0 ? void 0 : prop.value.type) === 'ObjectExpression') {
|
|
26
|
+
var _prop$value;
|
|
27
|
+
return (_prop$value = prop.value) !== null && _prop$value !== void 0 ? _prop$value : null;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
};
|
|
@@ -11,15 +11,14 @@ var _path = _interopRequireDefault(require("path"));
|
|
|
11
11
|
var _fuse = _interopRequireDefault(require("fuse.js"));
|
|
12
12
|
// defines a "getter" to "type" map, if more types are required for feature flags (like string) add it here!
|
|
13
13
|
// if you don't want to verify the type use `null` as the value
|
|
14
|
-
var getterIdentifierToFlagTypeMap = {
|
|
14
|
+
var getterIdentifierToFlagTypeMap = exports.getterIdentifierToFlagTypeMap = {
|
|
15
15
|
getBooleanFF: 'boolean',
|
|
16
16
|
ffTest: 'boolean'
|
|
17
17
|
};
|
|
18
|
-
exports.getterIdentifierToFlagTypeMap = getterIdentifierToFlagTypeMap;
|
|
19
18
|
// make sure we cache reading the package.json so we don't end up reading it for every instance of this rule.
|
|
20
19
|
var pkgJsonCache = new Map();
|
|
21
20
|
// get the ancestor package.json for a given file
|
|
22
|
-
var getMetadataForFilename = function getMetadataForFilename(filename) {
|
|
21
|
+
var getMetadataForFilename = exports.getMetadataForFilename = function getMetadataForFilename(filename) {
|
|
23
22
|
var splitFilename = filename.split(_path.default.sep);
|
|
24
23
|
for (var i = 0; i < splitFilename.length; i++) {
|
|
25
24
|
// attempt to search using the filename in the cache to see if we've read the package.json for a sibling file before
|
|
@@ -43,5 +42,4 @@ var getMetadataForFilename = function getMetadataForFilename(filename) {
|
|
|
43
42
|
};
|
|
44
43
|
pkgJsonCache.set(pkgJsonPath, metaData);
|
|
45
44
|
return metaData;
|
|
46
|
-
};
|
|
47
|
-
exports.getMetadataForFilename = getMetadataForFilename;
|
|
45
|
+
};
|