@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.
Files changed (139) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -0
  3. package/dist/build-utils/build/chunks/assetsModules.d.ts +3 -0
  4. package/dist/build-utils/build/chunks/assetsModules.js +32 -0
  5. package/dist/build-utils/build/chunks/chunkTransform.d.ts +4 -0
  6. package/dist/build-utils/build/chunks/chunkTransform.js +31 -0
  7. package/dist/build-utils/build/chunks/generateTileGraph.d.ts +10 -0
  8. package/dist/build-utils/build/chunks/generateTileGraph.js +77 -0
  9. package/dist/build-utils/build/chunks/index.d.ts +3 -0
  10. package/dist/build-utils/build/chunks/index.js +26 -0
  11. package/dist/build-utils/build/index.d.ts +4 -0
  12. package/dist/build-utils/build/index.js +47 -0
  13. package/dist/build-utils/build/module-graph/index.d.ts +3 -0
  14. package/dist/build-utils/build/module-graph/index.js +26 -0
  15. package/dist/build-utils/build/module-graph/parser.d.ts +2 -0
  16. package/dist/build-utils/build/module-graph/parser.js +44 -0
  17. package/dist/build-utils/build/module-graph/transform.d.ts +4 -0
  18. package/dist/build-utils/build/module-graph/transform.js +37 -0
  19. package/dist/build-utils/build/module-graph/treeShaking.d.ts +3 -0
  20. package/dist/build-utils/build/module-graph/treeShaking.js +130 -0
  21. package/dist/build-utils/build/module-graph/utils.d.ts +3 -0
  22. package/dist/build-utils/build/module-graph/utils.js +113 -0
  23. package/dist/build-utils/build/module-graph/webpack/transform.d.ts +11 -0
  24. package/dist/build-utils/build/module-graph/webpack/transform.js +197 -0
  25. package/dist/build-utils/build/utils/index.d.ts +3 -0
  26. package/dist/build-utils/build/utils/index.js +26 -0
  27. package/dist/build-utils/build/utils/loader.d.ts +12 -0
  28. package/dist/build-utils/build/utils/loader.js +210 -0
  29. package/dist/build-utils/build/utils/parseBundle.d.ts +12 -0
  30. package/dist/build-utils/build/utils/parseBundle.js +277 -0
  31. package/dist/build-utils/build/utils/plugin.d.ts +5 -0
  32. package/dist/build-utils/build/utils/plugin.js +63 -0
  33. package/dist/build-utils/common/chunks/assetsContent.d.ts +4 -0
  34. package/dist/build-utils/common/chunks/assetsContent.js +34 -0
  35. package/dist/build-utils/common/chunks/assetsModules.d.ts +23 -0
  36. package/dist/build-utils/common/chunks/assetsModules.js +106 -0
  37. package/dist/build-utils/common/chunks/chunkTransform.d.ts +5 -0
  38. package/dist/build-utils/common/chunks/chunkTransform.js +73 -0
  39. package/dist/build-utils/common/chunks/index.d.ts +3 -0
  40. package/dist/build-utils/common/chunks/index.js +26 -0
  41. package/dist/build-utils/common/index.d.ts +5 -0
  42. package/dist/build-utils/common/index.js +50 -0
  43. package/dist/build-utils/common/module-graph/compatible.d.ts +9 -0
  44. package/dist/build-utils/common/module-graph/compatible.js +63 -0
  45. package/dist/build-utils/common/module-graph/index.d.ts +3 -0
  46. package/dist/build-utils/common/module-graph/index.js +26 -0
  47. package/dist/build-utils/common/module-graph/transform.d.ts +10 -0
  48. package/dist/build-utils/common/module-graph/transform.js +193 -0
  49. package/dist/build-utils/common/module-graph/utils.d.ts +17 -0
  50. package/dist/build-utils/common/module-graph/utils.js +62 -0
  51. package/dist/build-utils/common/trans-utils/index.d.ts +1 -0
  52. package/dist/build-utils/common/trans-utils/index.js +22 -0
  53. package/dist/build-utils/common/trans-utils/transStats.d.ts +6 -0
  54. package/dist/build-utils/common/trans-utils/transStats.js +35 -0
  55. package/dist/build-utils/common/webpack/compatible.d.ts +26 -0
  56. package/dist/build-utils/common/webpack/compatible.js +181 -0
  57. package/dist/build-utils/index.d.ts +2 -0
  58. package/dist/build-utils/index.js +41 -0
  59. package/dist/index.d.ts +3 -0
  60. package/dist/index.js +43 -0
  61. package/dist/inner-plugins/constants.d.ts +6 -0
  62. package/dist/inner-plugins/constants.js +52 -0
  63. package/dist/inner-plugins/index.d.ts +2 -0
  64. package/dist/inner-plugins/index.js +24 -0
  65. package/dist/inner-plugins/loaders/proxy.d.ts +4 -0
  66. package/dist/inner-plugins/loaders/proxy.js +115 -0
  67. package/dist/inner-plugins/plugins/base.d.ts +13 -0
  68. package/dist/inner-plugins/plugins/base.js +45 -0
  69. package/dist/inner-plugins/plugins/errors.d.ts +11 -0
  70. package/dist/inner-plugins/plugins/errors.js +85 -0
  71. package/dist/inner-plugins/plugins/index.d.ts +6 -0
  72. package/dist/inner-plugins/plugins/index.js +32 -0
  73. package/dist/inner-plugins/plugins/loader.d.ts +11 -0
  74. package/dist/inner-plugins/plugins/loader.js +157 -0
  75. package/dist/inner-plugins/plugins/plugins.d.ts +8 -0
  76. package/dist/inner-plugins/plugins/plugins.js +60 -0
  77. package/dist/inner-plugins/plugins/progress.d.ts +8 -0
  78. package/dist/inner-plugins/plugins/progress.js +59 -0
  79. package/dist/inner-plugins/plugins/summary.d.ts +14 -0
  80. package/dist/inner-plugins/plugins/summary.js +115 -0
  81. package/dist/inner-plugins/utils/circleDetect.d.ts +4 -0
  82. package/dist/inner-plugins/utils/circleDetect.js +42 -0
  83. package/dist/inner-plugins/utils/config.d.ts +7 -0
  84. package/dist/inner-plugins/utils/config.js +145 -0
  85. package/dist/inner-plugins/utils/index.d.ts +5 -0
  86. package/dist/inner-plugins/utils/index.js +30 -0
  87. package/dist/inner-plugins/utils/loader.d.ts +11 -0
  88. package/dist/inner-plugins/utils/loader.js +201 -0
  89. package/dist/inner-plugins/utils/plugin.d.ts +5 -0
  90. package/dist/inner-plugins/utils/plugin.js +126 -0
  91. package/dist/inner-plugins/utils/sdk.d.ts +3 -0
  92. package/dist/inner-plugins/utils/sdk.js +36 -0
  93. package/dist/rules/index.d.ts +3 -0
  94. package/dist/rules/index.js +33 -0
  95. package/dist/rules/linter.d.ts +13 -0
  96. package/dist/rules/linter.js +74 -0
  97. package/dist/rules/rule.d.ts +31 -0
  98. package/dist/rules/rule.js +140 -0
  99. package/dist/rules/rules/default-import-check/index.d.ts +4 -0
  100. package/dist/rules/rules/default-import-check/index.js +124 -0
  101. package/dist/rules/rules/default-import-check/types.d.ts +4 -0
  102. package/dist/rules/rules/default-import-check/types.js +16 -0
  103. package/dist/rules/rules/default-import-check/utils.d.ts +10 -0
  104. package/dist/rules/rules/default-import-check/utils.js +93 -0
  105. package/dist/rules/rules/duplicate-package/index.d.ts +4 -0
  106. package/dist/rules/rules/duplicate-package/index.js +71 -0
  107. package/dist/rules/rules/duplicate-package/types.d.ts +24 -0
  108. package/dist/rules/rules/duplicate-package/types.js +51 -0
  109. package/dist/rules/rules/duplicate-package/utils.d.ts +3 -0
  110. package/dist/rules/rules/duplicate-package/utils.js +89 -0
  111. package/dist/rules/rules/ecma-version-check/index.d.ts +4 -0
  112. package/dist/rules/rules/ecma-version-check/index.js +82 -0
  113. package/dist/rules/rules/ecma-version-check/types.d.ts +7 -0
  114. package/dist/rules/rules/ecma-version-check/types.js +16 -0
  115. package/dist/rules/rules/ecma-version-check/utils.d.ts +2 -0
  116. package/dist/rules/rules/ecma-version-check/utils.js +31 -0
  117. package/dist/rules/rules/index.d.ts +1 -0
  118. package/dist/rules/rules/index.js +37 -0
  119. package/dist/rules/rules/loader-performance-optimization/index.d.ts +4 -0
  120. package/dist/rules/rules/loader-performance-optimization/index.js +121 -0
  121. package/dist/rules/rules/loader-performance-optimization/types.d.ts +22 -0
  122. package/dist/rules/rules/loader-performance-optimization/types.js +16 -0
  123. package/dist/rules/rules/loader-performance-optimization/utils.d.ts +1 -0
  124. package/dist/rules/rules/loader-performance-optimization/utils.js +38 -0
  125. package/dist/rules/utils.d.ts +3 -0
  126. package/dist/rules/utils.js +44 -0
  127. package/dist/types/chunks.d.ts +11 -0
  128. package/dist/types/chunks.js +16 -0
  129. package/dist/types/index.d.ts +5 -0
  130. package/dist/types/index.js +30 -0
  131. package/dist/types/loader.d.ts +19 -0
  132. package/dist/types/loader.js +16 -0
  133. package/dist/types/plugin.d.ts +72 -0
  134. package/dist/types/plugin.js +16 -0
  135. package/dist/types/rules.d.ts +7 -0
  136. package/dist/types/rules.js +16 -0
  137. package/dist/types/webpack.d.ts +14 -0
  138. package/dist/types/webpack.js +16 -0
  139. 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,4 @@
1
+ import { Linter } from '@rsdoctor/types';
2
+ import type { Config } from './types';
3
+ export type { Config } from './types';
4
+ export declare const rule: Linter.RuleData<Config, "default-import-check">;
@@ -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,4 @@
1
+ export interface Config {
2
+ /** Packages that need to be ignored */
3
+ ignore: string[];
4
+ }
@@ -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,4 @@
1
+ import { Linter } from '@rsdoctor/types';
2
+ import { Config } from './types';
3
+ export type { Config, CheckVersion } from './types';
4
+ export declare const rule: Linter.RuleData<Config, "duplicate-package">;
@@ -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,3 @@
1
+ import type { SDK, Rule } from '@rsdoctor/types';
2
+ export declare function getErrorMsg(packages: SDK.PackageInstance[], root: string): string;
3
+ export declare function getErrorDetail(pkg: SDK.PackageInstance, pkgGraph: SDK.PackageGraphInstance): Rule.PackageRelationData;
@@ -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
+ });
@@ -0,0 +1,4 @@
1
+ import { Config } from './types';
2
+ import { Linter } from '@rsdoctor/types';
3
+ export type { Config } from './types';
4
+ export declare const rule: Linter.RuleData<Config, "ecma-version-check">;