@rsdoctor/core 0.0.2-beta.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/LICENSE +21 -0
- package/README.md +15 -0
- package/dist/build-utils/build/chunks/assetsModules.d.ts +3 -0
- package/dist/build-utils/build/chunks/assetsModules.js +32 -0
- package/dist/build-utils/build/chunks/chunkTransform.d.ts +4 -0
- package/dist/build-utils/build/chunks/chunkTransform.js +31 -0
- package/dist/build-utils/build/chunks/generateTileGraph.d.ts +10 -0
- package/dist/build-utils/build/chunks/generateTileGraph.js +77 -0
- package/dist/build-utils/build/chunks/index.d.ts +3 -0
- package/dist/build-utils/build/chunks/index.js +26 -0
- package/dist/build-utils/build/index.d.ts +4 -0
- package/dist/build-utils/build/index.js +47 -0
- package/dist/build-utils/build/module-graph/index.d.ts +3 -0
- package/dist/build-utils/build/module-graph/index.js +26 -0
- package/dist/build-utils/build/module-graph/parser.d.ts +2 -0
- package/dist/build-utils/build/module-graph/parser.js +44 -0
- package/dist/build-utils/build/module-graph/transform.d.ts +4 -0
- package/dist/build-utils/build/module-graph/transform.js +37 -0
- package/dist/build-utils/build/module-graph/treeShaking.d.ts +3 -0
- package/dist/build-utils/build/module-graph/treeShaking.js +130 -0
- package/dist/build-utils/build/module-graph/utils.d.ts +3 -0
- package/dist/build-utils/build/module-graph/utils.js +113 -0
- package/dist/build-utils/build/module-graph/webpack/transform.d.ts +11 -0
- package/dist/build-utils/build/module-graph/webpack/transform.js +197 -0
- package/dist/build-utils/build/utils/index.d.ts +3 -0
- package/dist/build-utils/build/utils/index.js +26 -0
- package/dist/build-utils/build/utils/loader.d.ts +12 -0
- package/dist/build-utils/build/utils/loader.js +210 -0
- package/dist/build-utils/build/utils/parseBundle.d.ts +12 -0
- package/dist/build-utils/build/utils/parseBundle.js +277 -0
- package/dist/build-utils/build/utils/plugin.d.ts +5 -0
- package/dist/build-utils/build/utils/plugin.js +63 -0
- package/dist/build-utils/common/chunks/assetsContent.d.ts +4 -0
- package/dist/build-utils/common/chunks/assetsContent.js +34 -0
- package/dist/build-utils/common/chunks/assetsModules.d.ts +23 -0
- package/dist/build-utils/common/chunks/assetsModules.js +106 -0
- package/dist/build-utils/common/chunks/chunkTransform.d.ts +5 -0
- package/dist/build-utils/common/chunks/chunkTransform.js +73 -0
- package/dist/build-utils/common/chunks/index.d.ts +3 -0
- package/dist/build-utils/common/chunks/index.js +26 -0
- package/dist/build-utils/common/index.d.ts +5 -0
- package/dist/build-utils/common/index.js +50 -0
- package/dist/build-utils/common/module-graph/compatible.d.ts +9 -0
- package/dist/build-utils/common/module-graph/compatible.js +63 -0
- package/dist/build-utils/common/module-graph/index.d.ts +3 -0
- package/dist/build-utils/common/module-graph/index.js +26 -0
- package/dist/build-utils/common/module-graph/transform.d.ts +10 -0
- package/dist/build-utils/common/module-graph/transform.js +193 -0
- package/dist/build-utils/common/module-graph/utils.d.ts +17 -0
- package/dist/build-utils/common/module-graph/utils.js +62 -0
- package/dist/build-utils/common/trans-utils/index.d.ts +1 -0
- package/dist/build-utils/common/trans-utils/index.js +22 -0
- package/dist/build-utils/common/trans-utils/transStats.d.ts +6 -0
- package/dist/build-utils/common/trans-utils/transStats.js +35 -0
- package/dist/build-utils/common/webpack/compatible.d.ts +26 -0
- package/dist/build-utils/common/webpack/compatible.js +181 -0
- package/dist/build-utils/index.d.ts +2 -0
- package/dist/build-utils/index.js +41 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +43 -0
- package/dist/inner-plugins/constants.d.ts +6 -0
- package/dist/inner-plugins/constants.js +52 -0
- package/dist/inner-plugins/index.d.ts +2 -0
- package/dist/inner-plugins/index.js +24 -0
- package/dist/inner-plugins/loaders/proxy.d.ts +4 -0
- package/dist/inner-plugins/loaders/proxy.js +115 -0
- package/dist/inner-plugins/plugins/base.d.ts +13 -0
- package/dist/inner-plugins/plugins/base.js +45 -0
- package/dist/inner-plugins/plugins/errors.d.ts +11 -0
- package/dist/inner-plugins/plugins/errors.js +85 -0
- package/dist/inner-plugins/plugins/index.d.ts +6 -0
- package/dist/inner-plugins/plugins/index.js +32 -0
- package/dist/inner-plugins/plugins/loader.d.ts +11 -0
- package/dist/inner-plugins/plugins/loader.js +157 -0
- package/dist/inner-plugins/plugins/plugins.d.ts +8 -0
- package/dist/inner-plugins/plugins/plugins.js +60 -0
- package/dist/inner-plugins/plugins/progress.d.ts +8 -0
- package/dist/inner-plugins/plugins/progress.js +59 -0
- package/dist/inner-plugins/plugins/summary.d.ts +14 -0
- package/dist/inner-plugins/plugins/summary.js +115 -0
- package/dist/inner-plugins/utils/circleDetect.d.ts +4 -0
- package/dist/inner-plugins/utils/circleDetect.js +42 -0
- package/dist/inner-plugins/utils/config.d.ts +7 -0
- package/dist/inner-plugins/utils/config.js +145 -0
- package/dist/inner-plugins/utils/index.d.ts +5 -0
- package/dist/inner-plugins/utils/index.js +30 -0
- package/dist/inner-plugins/utils/loader.d.ts +11 -0
- package/dist/inner-plugins/utils/loader.js +201 -0
- package/dist/inner-plugins/utils/plugin.d.ts +5 -0
- package/dist/inner-plugins/utils/plugin.js +126 -0
- package/dist/inner-plugins/utils/sdk.d.ts +3 -0
- package/dist/inner-plugins/utils/sdk.js +36 -0
- package/dist/rules/index.d.ts +3 -0
- package/dist/rules/index.js +33 -0
- package/dist/rules/linter.d.ts +13 -0
- package/dist/rules/linter.js +74 -0
- package/dist/rules/rule.d.ts +31 -0
- package/dist/rules/rule.js +140 -0
- package/dist/rules/rules/default-import-check/index.d.ts +4 -0
- package/dist/rules/rules/default-import-check/index.js +124 -0
- package/dist/rules/rules/default-import-check/types.d.ts +4 -0
- package/dist/rules/rules/default-import-check/types.js +16 -0
- package/dist/rules/rules/default-import-check/utils.d.ts +10 -0
- package/dist/rules/rules/default-import-check/utils.js +93 -0
- package/dist/rules/rules/duplicate-package/index.d.ts +4 -0
- package/dist/rules/rules/duplicate-package/index.js +71 -0
- package/dist/rules/rules/duplicate-package/types.d.ts +24 -0
- package/dist/rules/rules/duplicate-package/types.js +51 -0
- package/dist/rules/rules/duplicate-package/utils.d.ts +3 -0
- package/dist/rules/rules/duplicate-package/utils.js +89 -0
- package/dist/rules/rules/ecma-version-check/index.d.ts +4 -0
- package/dist/rules/rules/ecma-version-check/index.js +82 -0
- package/dist/rules/rules/ecma-version-check/types.d.ts +7 -0
- package/dist/rules/rules/ecma-version-check/types.js +16 -0
- package/dist/rules/rules/ecma-version-check/utils.d.ts +2 -0
- package/dist/rules/rules/ecma-version-check/utils.js +31 -0
- package/dist/rules/rules/index.d.ts +1 -0
- package/dist/rules/rules/index.js +37 -0
- package/dist/rules/rules/loader-performance-optimization/index.d.ts +4 -0
- package/dist/rules/rules/loader-performance-optimization/index.js +121 -0
- package/dist/rules/rules/loader-performance-optimization/types.d.ts +22 -0
- package/dist/rules/rules/loader-performance-optimization/types.js +16 -0
- package/dist/rules/rules/loader-performance-optimization/utils.d.ts +1 -0
- package/dist/rules/rules/loader-performance-optimization/utils.js +38 -0
- package/dist/rules/utils.d.ts +3 -0
- package/dist/rules/utils.js +44 -0
- package/dist/types/chunks.d.ts +11 -0
- package/dist/types/chunks.js +16 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +30 -0
- package/dist/types/loader.d.ts +19 -0
- package/dist/types/loader.js +16 -0
- package/dist/types/plugin.d.ts +72 -0
- package/dist/types/plugin.js +16 -0
- package/dist/types/rules.d.ts +7 -0
- package/dist/types/rules.js +16 -0
- package/dist/types/webpack.d.ts +14 -0
- package/dist/types/webpack.js +16 -0
- package/package.json +87 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var rule_exports = {};
|
|
20
|
+
__export(rule_exports, {
|
|
21
|
+
Rule: () => Rule,
|
|
22
|
+
defineRule: () => defineRule
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(rule_exports);
|
|
25
|
+
var import_types = require("@rsdoctor/types");
|
|
26
|
+
var import_lodash = require("lodash");
|
|
27
|
+
var import_utils = require("./utils");
|
|
28
|
+
class Rule {
|
|
29
|
+
static from(data) {
|
|
30
|
+
return new Rule({
|
|
31
|
+
check: data.check,
|
|
32
|
+
onCheckEnd: data.onCheckEnd,
|
|
33
|
+
meta: {
|
|
34
|
+
...data.meta,
|
|
35
|
+
code: import_types.Rule.RuleMessageCodeEnumerated.Extend,
|
|
36
|
+
severity: (0, import_utils.toSeverity)(data.meta.severity, import_types.Linter.Severity.Warn)
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
constructor(data) {
|
|
41
|
+
this.check = data.check;
|
|
42
|
+
this.meta = data.meta;
|
|
43
|
+
this.onCheckEnd = typeof data.onCheckEnd === "function" ? data.onCheckEnd : import_utils.noop;
|
|
44
|
+
this._severity = this.meta.severity;
|
|
45
|
+
this._config = this.meta.defaultConfig;
|
|
46
|
+
}
|
|
47
|
+
get code() {
|
|
48
|
+
return this.meta.code;
|
|
49
|
+
}
|
|
50
|
+
get title() {
|
|
51
|
+
return this.meta.title;
|
|
52
|
+
}
|
|
53
|
+
get severity() {
|
|
54
|
+
return this._severity;
|
|
55
|
+
}
|
|
56
|
+
get config() {
|
|
57
|
+
return this._config;
|
|
58
|
+
}
|
|
59
|
+
get category() {
|
|
60
|
+
return this.meta.category;
|
|
61
|
+
}
|
|
62
|
+
setOption(opt) {
|
|
63
|
+
let severity;
|
|
64
|
+
let config;
|
|
65
|
+
if (Array.isArray(opt)) {
|
|
66
|
+
severity = (0, import_utils.toSeverity)(opt[0], this.meta.severity);
|
|
67
|
+
config = opt[1];
|
|
68
|
+
} else {
|
|
69
|
+
severity = (0, import_utils.toSeverity)(opt, this.meta.severity);
|
|
70
|
+
config = void 0;
|
|
71
|
+
}
|
|
72
|
+
this._severity = severity;
|
|
73
|
+
this._config = (0, import_lodash.isPlainObject)(config) ? {
|
|
74
|
+
...this.meta.defaultConfig,
|
|
75
|
+
...config
|
|
76
|
+
} : config || this.meta.defaultConfig;
|
|
77
|
+
}
|
|
78
|
+
match(level) {
|
|
79
|
+
if (level === import_types.Linter.Severity.Ignore || this.severity === import_types.Linter.Severity.Ignore) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
if (level === import_types.Linter.Severity.Error) {
|
|
83
|
+
return this.severity === import_types.Linter.Severity.Error || this.severity === import_types.Linter.Severity.Warn;
|
|
84
|
+
}
|
|
85
|
+
if (level === import_types.Linter.Severity.Warn) {
|
|
86
|
+
return this.severity === import_types.Linter.Severity.Warn;
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
async validate(context) {
|
|
91
|
+
const errors = [];
|
|
92
|
+
const replace = [];
|
|
93
|
+
const report = (data, remove) => {
|
|
94
|
+
if (remove) {
|
|
95
|
+
replace.push(remove);
|
|
96
|
+
}
|
|
97
|
+
const error = {
|
|
98
|
+
...data,
|
|
99
|
+
code: this.code,
|
|
100
|
+
severity: this.severity,
|
|
101
|
+
category: this.category,
|
|
102
|
+
title: this.title.toUpperCase()
|
|
103
|
+
};
|
|
104
|
+
errors.push(error);
|
|
105
|
+
};
|
|
106
|
+
await this.check({
|
|
107
|
+
...context,
|
|
108
|
+
ruleConfig: this.config,
|
|
109
|
+
report
|
|
110
|
+
});
|
|
111
|
+
return {
|
|
112
|
+
errors,
|
|
113
|
+
replace
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
async afterValidate({
|
|
117
|
+
hooks,
|
|
118
|
+
validateResult,
|
|
119
|
+
data
|
|
120
|
+
}) {
|
|
121
|
+
if (this.onCheckEnd === import_utils.noop)
|
|
122
|
+
return;
|
|
123
|
+
await this.onCheckEnd({
|
|
124
|
+
data: {
|
|
125
|
+
...data,
|
|
126
|
+
ruleConfig: this.config
|
|
127
|
+
},
|
|
128
|
+
hooks,
|
|
129
|
+
validateResult
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function defineRule(ruleCreator) {
|
|
134
|
+
return ruleCreator();
|
|
135
|
+
}
|
|
136
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
137
|
+
0 && (module.exports = {
|
|
138
|
+
Rule,
|
|
139
|
+
defineRule
|
|
140
|
+
});
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var default_import_check_exports = {};
|
|
20
|
+
__export(default_import_check_exports, {
|
|
21
|
+
rule: () => rule
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(default_import_check_exports);
|
|
24
|
+
var import_module = require("module");
|
|
25
|
+
var import_types = require("@rsdoctor/types");
|
|
26
|
+
var import_ruleUtils = require("@rsdoctor/utils/ruleUtils");
|
|
27
|
+
var import_utils = require("./utils");
|
|
28
|
+
var import_rule = require("../../rule");
|
|
29
|
+
const title = "default-import-check";
|
|
30
|
+
const rule = (0, import_rule.defineRule)(() => {
|
|
31
|
+
const parserOpt = {
|
|
32
|
+
ecmaVersion: 6
|
|
33
|
+
};
|
|
34
|
+
const exportsDefault = import_ruleUtils.parser.internal.parseExpressionAt(
|
|
35
|
+
"exports.default",
|
|
36
|
+
0,
|
|
37
|
+
parserOpt
|
|
38
|
+
);
|
|
39
|
+
const moduleExportsDefault = import_ruleUtils.parser.internal.parseExpressionAt(
|
|
40
|
+
"module.exports.default",
|
|
41
|
+
0,
|
|
42
|
+
parserOpt
|
|
43
|
+
);
|
|
44
|
+
return {
|
|
45
|
+
meta: {
|
|
46
|
+
code: "E1002",
|
|
47
|
+
title,
|
|
48
|
+
category: "compile",
|
|
49
|
+
severity: import_types.Linter.Severity.Warn,
|
|
50
|
+
defaultConfig: {
|
|
51
|
+
ignore: []
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
check({ moduleGraph, report, ruleConfig }) {
|
|
55
|
+
const dependencyWithNode = moduleGraph.getDependencies().filter((dep) => dep.meta.exportsType === "dynamic").filter((dep) => !dep.module.path.includes("node_modules")).filter(
|
|
56
|
+
(dep) => !ruleConfig.ignore.includes(dep.request) && !import_module.builtinModules.includes(dep.request)
|
|
57
|
+
).filter((dep) => dep.dependency.meta.hasSetEsModuleStatement).filter((dep) => dep.dependency.getProgram()).filter(
|
|
58
|
+
(dep) => !(0, import_utils.hasSameLeftInAssignStatement)(dep.dependency.getProgram(), [
|
|
59
|
+
exportsDefault,
|
|
60
|
+
moduleExportsDefault
|
|
61
|
+
])
|
|
62
|
+
).map((dependency) => {
|
|
63
|
+
const { module: module2, request } = dependency;
|
|
64
|
+
const node = module2.getProgram() && (0, import_utils.getDefaultImportByRequest)(module2.getProgram(), request);
|
|
65
|
+
return node ? {
|
|
66
|
+
dependency,
|
|
67
|
+
node
|
|
68
|
+
} : {};
|
|
69
|
+
}).filter((dep) => dep?.dependency);
|
|
70
|
+
for (const { dependency, node } of dependencyWithNode) {
|
|
71
|
+
if (!dependency)
|
|
72
|
+
continue;
|
|
73
|
+
const document = (0, import_utils.getSourceRangeFromTransformedOffset)(
|
|
74
|
+
dependency.module,
|
|
75
|
+
node
|
|
76
|
+
);
|
|
77
|
+
if (!document) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const message = "Do not to use the default import when you import a cjs module.";
|
|
81
|
+
const canFix = !document.isTransformed && !document.path.includes("node_modules");
|
|
82
|
+
if (canFix) {
|
|
83
|
+
const fixData = (0, import_utils.getFixData)(dependency.module, node, document.range);
|
|
84
|
+
const detail = {
|
|
85
|
+
type: "code-change",
|
|
86
|
+
file: {
|
|
87
|
+
path: document.path,
|
|
88
|
+
actual: document.content,
|
|
89
|
+
line: document.range.start.line,
|
|
90
|
+
expected: (0, import_ruleUtils.getDocument)(document.content).edit(fixData)
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
report({
|
|
94
|
+
message,
|
|
95
|
+
document,
|
|
96
|
+
detail,
|
|
97
|
+
suggestions: {
|
|
98
|
+
description: "Use namespace import instead.",
|
|
99
|
+
fixData
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
} else {
|
|
103
|
+
const detail = {
|
|
104
|
+
type: "code-view",
|
|
105
|
+
file: {
|
|
106
|
+
path: document.path,
|
|
107
|
+
content: document.content,
|
|
108
|
+
ranges: [node.loc]
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
report({
|
|
112
|
+
message,
|
|
113
|
+
document,
|
|
114
|
+
detail
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
122
|
+
0 && (module.exports = {
|
|
123
|
+
rule
|
|
124
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var types_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(types_exports);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Node, Range } from '@rsdoctor/utils/ruleUtils';
|
|
2
|
+
import type { SDK, Linter } from '@rsdoctor/types';
|
|
3
|
+
export declare function getDefaultImportByRequest(node: Node.Program, request: string): Node.ImportDeclaration | undefined;
|
|
4
|
+
/**
|
|
5
|
+
* Determine that it contains the same left value assignment expression in the enumeration.
|
|
6
|
+
*/
|
|
7
|
+
export declare function hasSameLeftInAssignStatement(node: Node.Program, compare: Node.SyntaxNode[]): Node.Pattern | undefined;
|
|
8
|
+
export declare function importDeclarationToString(node: Node.ImportDeclaration): string;
|
|
9
|
+
export declare function getFixData(module: SDK.ModuleInstance, node: Node.ImportDeclaration, originalRange: Range): Linter.FixData;
|
|
10
|
+
export declare function getSourceRangeFromTransformedOffset(module: SDK.ModuleInstance, node: Node.SyntaxNode): Linter.ReportDocument | undefined;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var utils_exports = {};
|
|
20
|
+
__export(utils_exports, {
|
|
21
|
+
getDefaultImportByRequest: () => getDefaultImportByRequest,
|
|
22
|
+
getFixData: () => getFixData,
|
|
23
|
+
getSourceRangeFromTransformedOffset: () => getSourceRangeFromTransformedOffset,
|
|
24
|
+
hasSameLeftInAssignStatement: () => hasSameLeftInAssignStatement,
|
|
25
|
+
importDeclarationToString: () => importDeclarationToString
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(utils_exports);
|
|
28
|
+
var import_ruleUtils = require("@rsdoctor/utils/ruleUtils");
|
|
29
|
+
var import_lodash = require("lodash");
|
|
30
|
+
function getDefaultImportByRequest(node, request) {
|
|
31
|
+
return import_ruleUtils.parser.utils.getDefaultImports(node).find((decl) => decl.source.value === request);
|
|
32
|
+
}
|
|
33
|
+
function hasSameLeftInAssignStatement(node, compare) {
|
|
34
|
+
return node.body.filter(import_ruleUtils.parser.asserts.isExpressionStatement).map((node2) => node2.expression).filter(import_ruleUtils.parser.asserts.isAssignmentExpression).map((node2) => node2.left).find(
|
|
35
|
+
(node2) => compare.some((item) => import_ruleUtils.parser.utils.isSameSemantics(node2, item))
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
function importDeclarationToString(node) {
|
|
39
|
+
const defaultSpecifier = node.specifiers[0];
|
|
40
|
+
const rawRequest = (node.source.raw ?? "").trim();
|
|
41
|
+
return `import * as ${defaultSpecifier.local.name} from ${rawRequest}`;
|
|
42
|
+
}
|
|
43
|
+
function getFixData(module2, node, originalRange) {
|
|
44
|
+
const { source, transformed } = module2.getSource();
|
|
45
|
+
const document = (0, import_ruleUtils.getDocument)(source);
|
|
46
|
+
const newImportText = importDeclarationToString(node);
|
|
47
|
+
const oldText = transformed.substring(node.start, node.end);
|
|
48
|
+
const hasLastSemi = oldText[oldText.length - 1] === ";";
|
|
49
|
+
return {
|
|
50
|
+
start: document.offsetAt(originalRange.start),
|
|
51
|
+
end: document.offsetAt(originalRange.end),
|
|
52
|
+
newText: hasLastSemi ? `${newImportText};` : newImportText
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function getSourceRangeFromTransformedOffset(module2, node) {
|
|
56
|
+
const source = module2.getSource();
|
|
57
|
+
const sourceMap = module2.getSourceMap();
|
|
58
|
+
const transformedStart = node.loc.start;
|
|
59
|
+
const transformedEnd = node.loc.end;
|
|
60
|
+
if (!transformedStart || !transformedEnd) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const transformedReport = {
|
|
64
|
+
path: module2.path,
|
|
65
|
+
content: source.transformed,
|
|
66
|
+
isTransformed: true,
|
|
67
|
+
range: {
|
|
68
|
+
start: transformedStart,
|
|
69
|
+
end: transformedEnd
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
if (!sourceMap) {
|
|
73
|
+
return transformedReport;
|
|
74
|
+
}
|
|
75
|
+
const sourceRange = module2.getSourceRange(node.loc);
|
|
76
|
+
if ((0, import_lodash.isUndefined)(sourceRange?.start.line) || (0, import_lodash.isUndefined)(sourceRange?.start.column) || (0, import_lodash.isUndefined)(sourceRange?.end?.line) || (0, import_lodash.isUndefined)(sourceRange?.end?.column)) {
|
|
77
|
+
return transformedReport;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
path: module2.path,
|
|
81
|
+
isTransformed: false,
|
|
82
|
+
content: source.source,
|
|
83
|
+
range: sourceRange
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
87
|
+
0 && (module.exports = {
|
|
88
|
+
getDefaultImportByRequest,
|
|
89
|
+
getFixData,
|
|
90
|
+
getSourceRangeFromTransformedOffset,
|
|
91
|
+
hasSameLeftInAssignStatement,
|
|
92
|
+
importDeclarationToString
|
|
93
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var duplicate_package_exports = {};
|
|
20
|
+
__export(duplicate_package_exports, {
|
|
21
|
+
rule: () => rule
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(duplicate_package_exports);
|
|
24
|
+
var import_types = require("@rsdoctor/types");
|
|
25
|
+
var import_semver = require("semver");
|
|
26
|
+
var import_types2 = require("./types");
|
|
27
|
+
var import_utils = require("./utils");
|
|
28
|
+
var import_rule = require("../../rule");
|
|
29
|
+
const title = "duplicate-package";
|
|
30
|
+
const rule = (0, import_rule.defineRule)(() => ({
|
|
31
|
+
meta: {
|
|
32
|
+
code: "E1001",
|
|
33
|
+
title,
|
|
34
|
+
category: "bundle",
|
|
35
|
+
severity: import_types.Linter.Severity.Warn,
|
|
36
|
+
defaultConfig: {
|
|
37
|
+
checkVersion: "major",
|
|
38
|
+
ignore: []
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
check({ packageGraph, report, root, ruleConfig }) {
|
|
42
|
+
const checkVersion = import_types2.CheckVersionMap[ruleConfig.checkVersion];
|
|
43
|
+
const packages = packageGraph.getDuplicatePackages().filter((pkg) => !ruleConfig.ignore.includes(pkg[0].name)).map((pkgs) => {
|
|
44
|
+
return pkgs.filter((current) => {
|
|
45
|
+
const check = pkgs.reduce(
|
|
46
|
+
// eslint-disable-next-line no-bitwise
|
|
47
|
+
(ans, pkg) => ans | import_types2.CheckVersionMap[(0, import_semver.diff)(current.version, pkg.version) ?? "null"],
|
|
48
|
+
0
|
|
49
|
+
);
|
|
50
|
+
return check <= checkVersion;
|
|
51
|
+
}).sort(
|
|
52
|
+
(_packA, _packB) => (0, import_semver.gt)(_packA.version, _packB.version) ? 1 : -1
|
|
53
|
+
);
|
|
54
|
+
}).filter((pkgs) => pkgs.length > 1);
|
|
55
|
+
for (const pkg of packages) {
|
|
56
|
+
const message = (0, import_utils.getErrorMsg)(pkg, root);
|
|
57
|
+
const detail = {
|
|
58
|
+
type: "package-relation",
|
|
59
|
+
packages: pkg.map((item) => (0, import_utils.getErrorDetail)(item, packageGraph))
|
|
60
|
+
};
|
|
61
|
+
report({
|
|
62
|
+
message,
|
|
63
|
+
detail
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}));
|
|
68
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
69
|
+
0 && (module.exports = {
|
|
70
|
+
rule
|
|
71
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare enum CheckVersion {
|
|
2
|
+
null = 0,
|
|
3
|
+
prerelease = 1,
|
|
4
|
+
prepatch = 16,
|
|
5
|
+
patch = 256,
|
|
6
|
+
preminor = 4096,
|
|
7
|
+
minor = 65536,
|
|
8
|
+
premajor = 1048576,
|
|
9
|
+
major = 16777216,
|
|
10
|
+
}
|
|
11
|
+
export declare enum CheckVersionMap {
|
|
12
|
+
null = 0,
|
|
13
|
+
prerelease = 1,
|
|
14
|
+
prepatch = 17,
|
|
15
|
+
patch = 273,
|
|
16
|
+
preminor = 4369,
|
|
17
|
+
minor = 69905,
|
|
18
|
+
premajor = 1118481,
|
|
19
|
+
major = 17895697,
|
|
20
|
+
}
|
|
21
|
+
export interface Config {
|
|
22
|
+
checkVersion: keyof typeof CheckVersion;
|
|
23
|
+
ignore: string[];
|
|
24
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var types_exports = {};
|
|
20
|
+
__export(types_exports, {
|
|
21
|
+
CheckVersion: () => CheckVersion,
|
|
22
|
+
CheckVersionMap: () => CheckVersionMap
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(types_exports);
|
|
25
|
+
var CheckVersion = /* @__PURE__ */ ((CheckVersion2) => {
|
|
26
|
+
CheckVersion2[CheckVersion2["null"] = 0] = "null";
|
|
27
|
+
CheckVersion2[CheckVersion2["prerelease"] = 1] = "prerelease";
|
|
28
|
+
CheckVersion2[CheckVersion2["prepatch"] = 16] = "prepatch";
|
|
29
|
+
CheckVersion2[CheckVersion2["patch"] = 256] = "patch";
|
|
30
|
+
CheckVersion2[CheckVersion2["preminor"] = 4096] = "preminor";
|
|
31
|
+
CheckVersion2[CheckVersion2["minor"] = 65536] = "minor";
|
|
32
|
+
CheckVersion2[CheckVersion2["premajor"] = 1048576] = "premajor";
|
|
33
|
+
CheckVersion2[CheckVersion2["major"] = 16777216] = "major";
|
|
34
|
+
return CheckVersion2;
|
|
35
|
+
})(CheckVersion || {});
|
|
36
|
+
var CheckVersionMap = /* @__PURE__ */ ((CheckVersionMap2) => {
|
|
37
|
+
CheckVersionMap2[CheckVersionMap2["null"] = 0] = "null";
|
|
38
|
+
CheckVersionMap2[CheckVersionMap2["prerelease"] = 1] = "prerelease";
|
|
39
|
+
CheckVersionMap2[CheckVersionMap2["prepatch"] = 17] = "prepatch";
|
|
40
|
+
CheckVersionMap2[CheckVersionMap2["patch"] = 273] = "patch";
|
|
41
|
+
CheckVersionMap2[CheckVersionMap2["preminor"] = 4369] = "preminor";
|
|
42
|
+
CheckVersionMap2[CheckVersionMap2["minor"] = 69905] = "minor";
|
|
43
|
+
CheckVersionMap2[CheckVersionMap2["premajor"] = 1118481] = "premajor";
|
|
44
|
+
CheckVersionMap2[CheckVersionMap2["major"] = 17895697] = "major";
|
|
45
|
+
return CheckVersionMap2;
|
|
46
|
+
})(CheckVersionMap || {});
|
|
47
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
48
|
+
0 && (module.exports = {
|
|
49
|
+
CheckVersion,
|
|
50
|
+
CheckVersionMap
|
|
51
|
+
});
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var utils_exports = {};
|
|
30
|
+
__export(utils_exports, {
|
|
31
|
+
getErrorDetail: () => getErrorDetail,
|
|
32
|
+
getErrorMsg: () => getErrorMsg
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(utils_exports);
|
|
35
|
+
var import_path = __toESM(require("path"));
|
|
36
|
+
var import_bytes = __toESM(require("bytes"));
|
|
37
|
+
function getErrorMsg(packages, root) {
|
|
38
|
+
const pkgName = packages[0].name;
|
|
39
|
+
let message = `Multiple packages of ${pkgName} found:
|
|
40
|
+
`;
|
|
41
|
+
for (const pkg of packages) {
|
|
42
|
+
message += ` ${pkg.version} ${(0, import_bytes.default)(
|
|
43
|
+
pkg.getSize().parsedSize
|
|
44
|
+
)} ${import_path.default.relative(root, pkg.root)}
|
|
45
|
+
`;
|
|
46
|
+
}
|
|
47
|
+
return message.slice(0, -1);
|
|
48
|
+
}
|
|
49
|
+
function getErrorDetail(pkg, pkgGraph) {
|
|
50
|
+
function getImported(pkg2, ans) {
|
|
51
|
+
const dependencies = pkgGraph.getDependenciesFromPackage(pkg2);
|
|
52
|
+
for (const dep of dependencies) {
|
|
53
|
+
if (!dep.refDependency) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (ans.some((dep2) => dep2.dependency === pkg2)) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (!dep.package) {
|
|
60
|
+
return ans.concat(dep);
|
|
61
|
+
}
|
|
62
|
+
return getImported(dep.package, ans.concat(dep));
|
|
63
|
+
}
|
|
64
|
+
return ans;
|
|
65
|
+
}
|
|
66
|
+
const packageImportLinks = getImported(pkg, []);
|
|
67
|
+
return {
|
|
68
|
+
target: {
|
|
69
|
+
name: pkg.name,
|
|
70
|
+
version: pkg.version,
|
|
71
|
+
root: pkg.root
|
|
72
|
+
},
|
|
73
|
+
targetSize: {
|
|
74
|
+
sourceSize: pkg.getSize().sourceSize,
|
|
75
|
+
parsedSize: pkg.getSize().parsedSize
|
|
76
|
+
},
|
|
77
|
+
dependencies: packageImportLinks.map((item) => {
|
|
78
|
+
return {
|
|
79
|
+
dependencyId: item.refDependency.id,
|
|
80
|
+
group: item.package ? `${item.package.name}@${item.package.version}` : void 0
|
|
81
|
+
};
|
|
82
|
+
})
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
86
|
+
0 && (module.exports = {
|
|
87
|
+
getErrorDetail,
|
|
88
|
+
getErrorMsg
|
|
89
|
+
});
|