@rsdoctor/core 1.5.3-alpha.0 → 1.5.4

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 (101) hide show
  1. package/compiled/axios/index.d.ts +1 -0
  2. package/compiled/axios/index.js +1898 -1479
  3. package/compiled/axios/package.json +1 -1
  4. package/dist/build-utils/build/chunks/assetsModules.js +1 -2
  5. package/dist/build-utils/build/chunks/chunkTransform.js +1 -2
  6. package/dist/build-utils/build/chunks/index.js +1 -2
  7. package/dist/build-utils/build/chunks/rspack/transform.js +1 -2
  8. package/dist/build-utils/build/index.js +1 -2
  9. package/dist/build-utils/build/loader/index.js +1 -2
  10. package/dist/build-utils/build/loader/probeLoader.js +3 -3
  11. package/dist/build-utils/build/loader/probeLoaderPlugin.js +1 -2
  12. package/dist/build-utils/build/module-graph/index.js +1 -2
  13. package/dist/build-utils/build/module-graph/parser.js +1 -2
  14. package/dist/build-utils/build/module-graph/rspack/transform.cjs +42 -5
  15. package/dist/build-utils/build/module-graph/rspack/transform.d.ts +6 -0
  16. package/dist/build-utils/build/module-graph/rspack/transform.js +40 -7
  17. package/dist/build-utils/build/module-graph/transform.js +1 -2
  18. package/dist/build-utils/build/module-graph/treeShaking.js +1 -2
  19. package/dist/build-utils/build/module-graph/utils.js +1 -2
  20. package/dist/build-utils/build/module-graph/webpack/transform.cjs +1 -1
  21. package/dist/build-utils/build/module-graph/webpack/transform.js +2 -3
  22. package/dist/build-utils/build/utils/index.js +1 -2
  23. package/dist/build-utils/build/utils/loader.js +7 -16
  24. package/dist/build-utils/build/utils/parseBundle.js +1 -2
  25. package/dist/build-utils/build/utils/plugin.js +1 -2
  26. package/dist/build-utils/index.js +1 -2
  27. package/dist/index.js +1 -2
  28. package/dist/inner-plugins/constants.js +1 -2
  29. package/dist/inner-plugins/index.js +1 -2
  30. package/dist/inner-plugins/loaders/proxy.js +3 -3
  31. package/dist/inner-plugins/plugins/base.js +1 -2
  32. package/dist/inner-plugins/plugins/bundle.cjs +1 -1
  33. package/dist/inner-plugins/plugins/bundle.js +2 -3
  34. package/dist/inner-plugins/plugins/bundleTagPlugin.js +1 -2
  35. package/dist/inner-plugins/plugins/ensureModulesChunkGraph.js +1 -2
  36. package/dist/inner-plugins/plugins/errors.js +1 -2
  37. package/dist/inner-plugins/plugins/index.js +1 -2
  38. package/dist/inner-plugins/plugins/loader.cjs +3 -2
  39. package/dist/inner-plugins/plugins/loader.js +5 -4
  40. package/dist/inner-plugins/plugins/plugins.js +1 -2
  41. package/dist/inner-plugins/plugins/progress.js +1 -2
  42. package/dist/inner-plugins/plugins/resolver.js +1 -2
  43. package/dist/inner-plugins/plugins/rspack.cjs +1 -0
  44. package/dist/inner-plugins/plugins/rspack.js +2 -2
  45. package/dist/inner-plugins/plugins/rules.js +1 -2
  46. package/dist/inner-plugins/plugins/sourcemapTool.js +1 -2
  47. package/dist/inner-plugins/plugins/summary.js +1 -2
  48. package/dist/inner-plugins/utils/circleDetect.js +1 -2
  49. package/dist/inner-plugins/utils/config.js +1 -2
  50. package/dist/inner-plugins/utils/index.js +1 -2
  51. package/dist/inner-plugins/utils/loader.cjs +4 -9
  52. package/dist/inner-plugins/utils/loader.d.ts +4 -1
  53. package/dist/inner-plugins/utils/loader.js +5 -9
  54. package/dist/inner-plugins/utils/normalize-config.js +1 -2
  55. package/dist/inner-plugins/utils/plugin-common.js +1 -2
  56. package/dist/inner-plugins/utils/plugin.js +1 -2
  57. package/dist/inner-plugins/utils/sdk.js +1 -2
  58. package/dist/rslib-runtime.js +19 -0
  59. package/dist/rules/index.js +2 -4
  60. package/dist/rules/linter.js +2 -3
  61. package/dist/rules/rule.js +2 -3
  62. package/dist/rules/rules/cjs-require/index.cjs +82 -0
  63. package/dist/rules/rules/cjs-require/index.d.ts +4 -0
  64. package/dist/rules/rules/cjs-require/index.js +49 -0
  65. package/dist/rules/rules/cjs-require/types.cjs +18 -0
  66. package/dist/rules/rules/cjs-require/types.d.ts +4 -0
  67. package/dist/rules/rules/cjs-require/types.js +1 -0
  68. package/dist/rules/rules/cross-chunks-package/index.cjs +4 -3
  69. package/dist/rules/rules/cross-chunks-package/index.js +6 -6
  70. package/dist/rules/rules/cross-chunks-package/types.js +1 -2
  71. package/dist/rules/rules/cross-chunks-package/utils.js +1 -2
  72. package/dist/rules/rules/default-import-check/index.js +2 -3
  73. package/dist/rules/rules/default-import-check/types.js +1 -2
  74. package/dist/rules/rules/default-import-check/utils.js +1 -2
  75. package/dist/rules/rules/duplicate-package/index.js +2 -3
  76. package/dist/rules/rules/duplicate-package/types.js +1 -2
  77. package/dist/rules/rules/duplicate-package/utils.js +1 -2
  78. package/dist/rules/rules/ecma-version-check/index.js +2 -3
  79. package/dist/rules/rules/ecma-version-check/types.js +1 -2
  80. package/dist/rules/rules/ecma-version-check/utils.js +1 -2
  81. package/dist/rules/rules/index.cjs +5 -1
  82. package/dist/rules/rules/index.d.ts +1 -1
  83. package/dist/rules/rules/index.js +6 -3
  84. package/dist/rules/rules/loader-performance-optimization/index.js +2 -3
  85. package/dist/rules/rules/loader-performance-optimization/types.js +1 -2
  86. package/dist/rules/rules/loader-performance-optimization/utils.js +1 -2
  87. package/dist/rules/rules/module-mixed-chunks/index.js +2 -3
  88. package/dist/rules/rules/module-mixed-chunks/types.js +1 -2
  89. package/dist/rules/rules/side-effects-only-imports/index.cjs +114 -0
  90. package/dist/rules/rules/side-effects-only-imports/index.d.ts +4 -0
  91. package/dist/rules/rules/side-effects-only-imports/index.js +81 -0
  92. package/dist/rules/rules/side-effects-only-imports/types.cjs +18 -0
  93. package/dist/rules/rules/side-effects-only-imports/types.d.ts +9 -0
  94. package/dist/rules/rules/side-effects-only-imports/types.js +1 -0
  95. package/dist/rules/utils.js +1 -2
  96. package/dist/types/chunks.js +1 -2
  97. package/dist/types/index.js +1 -2
  98. package/dist/types/loader.js +1 -2
  99. package/dist/types/plugin.js +1 -2
  100. package/dist/types/rules.js +1 -2
  101. package/package.json +14 -14
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ rule: ()=>rule
28
+ });
29
+ const types_namespaceObject = require("@rsdoctor/types");
30
+ const external_rule_cjs_namespaceObject = require("../../rule.cjs");
31
+ const title = 'tree-shaking-side-effects-only';
32
+ function isSideEffectDependencyType(dependencyType) {
33
+ return 'esm import' === dependencyType.toLowerCase();
34
+ }
35
+ function isImportSpecifierDependencyType(dependencyType) {
36
+ return 'esm import specifier' === dependencyType.toLowerCase();
37
+ }
38
+ function isStyleFile(modulePath) {
39
+ const normalizedPath = modulePath.split('?')[0].split('#')[0].toLowerCase();
40
+ return /\.(css|less|sass|scss|styl|stylus|pcss|postcss)$/.test(normalizedPath);
41
+ }
42
+ function shouldCheckModule(modulePath, include) {
43
+ const isNodeModulesModule = modulePath.includes('/node_modules/');
44
+ if (!isNodeModulesModule) return true;
45
+ return include.some((pattern)=>modulePath.includes(pattern));
46
+ }
47
+ function getSideEffectsImportConnections(connections, fallbackOriginModule) {
48
+ const byOrigin = new Map();
49
+ for (const connection of connections){
50
+ const originModule = connection.originModule ?? fallbackOriginModule;
51
+ const existing = byOrigin.get(originModule);
52
+ if (existing) existing.push(connection);
53
+ else byOrigin.set(originModule, [
54
+ connection
55
+ ]);
56
+ }
57
+ const result = [];
58
+ for (const group of byOrigin.values()){
59
+ const hasEsmImport = group.some((connection)=>isSideEffectDependencyType(connection.dependencyType));
60
+ const hasEsmImportSpecifier = group.some((connection)=>isImportSpecifierDependencyType(connection.dependencyType));
61
+ if (hasEsmImport && !hasEsmImportSpecifier) result.push(...group.filter((connection)=>isSideEffectDependencyType(connection.dependencyType)));
62
+ }
63
+ return result;
64
+ }
65
+ const rule = (0, external_rule_cjs_namespaceObject.defineRule)(()=>({
66
+ meta: {
67
+ code: 'E1007',
68
+ title,
69
+ category: 'bundle',
70
+ severity: types_namespaceObject.Linter.Severity.Warn,
71
+ defaultConfig: {
72
+ ignore: [],
73
+ include: []
74
+ }
75
+ },
76
+ check ({ moduleGraph, report, ruleConfig }) {
77
+ const precomputed = moduleGraph.getConnectionsOnlyImports();
78
+ for (const item of precomputed){
79
+ if (isStyleFile(item.modulePath)) continue;
80
+ if (ruleConfig.ignore.some((pattern)=>item.modulePath.includes(pattern))) continue;
81
+ if (!shouldCheckModule(item.modulePath, ruleConfig.include)) continue;
82
+ const module = moduleGraph.getModuleById(item.moduleUkey);
83
+ if (!module) continue;
84
+ const sideEffectConnections = getSideEffectsImportConnections(item.connections, item.moduleUkey);
85
+ if (!sideEffectConnections.length) continue;
86
+ const detail = {
87
+ type: title,
88
+ module: {
89
+ id: module.id,
90
+ path: module.path,
91
+ webpackId: module.webpackId
92
+ },
93
+ connections: sideEffectConnections.map((c)=>({
94
+ originModule: c.originModule ?? module.id,
95
+ dependencyType: c.dependencyType,
96
+ userRequest: c.userRequest
97
+ }))
98
+ };
99
+ const importerCount = new Set(sideEffectConnections.map((c)=>c.originModule ?? module.id)).size;
100
+ const message = `Module "${item.modulePath}" is only imported for its side effects by ${importerCount} importer(s). This may indicate an unintended tree-shaking failure causing redundant bundle output.`;
101
+ report({
102
+ message,
103
+ detail
104
+ });
105
+ }
106
+ }
107
+ }));
108
+ exports.rule = __webpack_exports__.rule;
109
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
110
+ "rule"
111
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
112
+ Object.defineProperty(exports, '__esModule', {
113
+ value: true
114
+ });
@@ -0,0 +1,4 @@
1
+ import { Linter } from '@rsdoctor/types';
2
+ import type { Config } from './types.js';
3
+ export type { Config } from './types.js';
4
+ export declare const rule: Linter.RuleData<Config, "tree-shaking-side-effects-only">;
@@ -0,0 +1,81 @@
1
+ import "node:module";
2
+ import { Linter } from "@rsdoctor/types";
3
+ import { defineRule } from "../../rule.js";
4
+ const title = 'tree-shaking-side-effects-only';
5
+ function isSideEffectDependencyType(dependencyType) {
6
+ return 'esm import' === dependencyType.toLowerCase();
7
+ }
8
+ function isImportSpecifierDependencyType(dependencyType) {
9
+ return 'esm import specifier' === dependencyType.toLowerCase();
10
+ }
11
+ function isStyleFile(modulePath) {
12
+ const normalizedPath = modulePath.split('?')[0].split('#')[0].toLowerCase();
13
+ return /\.(css|less|sass|scss|styl|stylus|pcss|postcss)$/.test(normalizedPath);
14
+ }
15
+ function shouldCheckModule(modulePath, include) {
16
+ const isNodeModulesModule = modulePath.includes('/node_modules/');
17
+ if (!isNodeModulesModule) return true;
18
+ return include.some((pattern)=>modulePath.includes(pattern));
19
+ }
20
+ function getSideEffectsImportConnections(connections, fallbackOriginModule) {
21
+ const byOrigin = new Map();
22
+ for (const connection of connections){
23
+ const originModule = connection.originModule ?? fallbackOriginModule;
24
+ const existing = byOrigin.get(originModule);
25
+ if (existing) existing.push(connection);
26
+ else byOrigin.set(originModule, [
27
+ connection
28
+ ]);
29
+ }
30
+ const result = [];
31
+ for (const group of byOrigin.values()){
32
+ const hasEsmImport = group.some((connection)=>isSideEffectDependencyType(connection.dependencyType));
33
+ const hasEsmImportSpecifier = group.some((connection)=>isImportSpecifierDependencyType(connection.dependencyType));
34
+ if (hasEsmImport && !hasEsmImportSpecifier) result.push(...group.filter((connection)=>isSideEffectDependencyType(connection.dependencyType)));
35
+ }
36
+ return result;
37
+ }
38
+ const rule = defineRule(()=>({
39
+ meta: {
40
+ code: 'E1007',
41
+ title: title,
42
+ category: 'bundle',
43
+ severity: Linter.Severity.Warn,
44
+ defaultConfig: {
45
+ ignore: [],
46
+ include: []
47
+ }
48
+ },
49
+ check ({ moduleGraph, report, ruleConfig }) {
50
+ const precomputed = moduleGraph.getConnectionsOnlyImports();
51
+ for (const item of precomputed){
52
+ if (isStyleFile(item.modulePath)) continue;
53
+ if (ruleConfig.ignore.some((pattern)=>item.modulePath.includes(pattern))) continue;
54
+ if (!shouldCheckModule(item.modulePath, ruleConfig.include)) continue;
55
+ const module = moduleGraph.getModuleById(item.moduleUkey);
56
+ if (!module) continue;
57
+ const sideEffectConnections = getSideEffectsImportConnections(item.connections, item.moduleUkey);
58
+ if (!sideEffectConnections.length) continue;
59
+ const detail = {
60
+ type: title,
61
+ module: {
62
+ id: module.id,
63
+ path: module.path,
64
+ webpackId: module.webpackId
65
+ },
66
+ connections: sideEffectConnections.map((c)=>({
67
+ originModule: c.originModule ?? module.id,
68
+ dependencyType: c.dependencyType,
69
+ userRequest: c.userRequest
70
+ }))
71
+ };
72
+ const importerCount = new Set(sideEffectConnections.map((c)=>c.originModule ?? module.id)).size;
73
+ const message = `Module "${item.modulePath}" is only imported for its side effects by ${importerCount} importer(s). This may indicate an unintended tree-shaking failure causing redundant bundle output.`;
74
+ report({
75
+ message,
76
+ detail
77
+ });
78
+ }
79
+ }
80
+ }));
81
+ export { rule };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.r = (exports1)=>{
5
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
6
+ value: 'Module'
7
+ });
8
+ Object.defineProperty(exports1, '__esModule', {
9
+ value: true
10
+ });
11
+ };
12
+ })();
13
+ var __webpack_exports__ = {};
14
+ __webpack_require__.r(__webpack_exports__);
15
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
16
+ Object.defineProperty(exports, '__esModule', {
17
+ value: true
18
+ });
@@ -0,0 +1,9 @@
1
+ export interface Config {
2
+ /** Module path patterns to ignore */
3
+ ignore: string[];
4
+ /**
5
+ * Module path patterns to include when the module is under node_modules.
6
+ * Example: ['react', '@babel/runtime']
7
+ */
8
+ include: string[];
9
+ }
@@ -0,0 +1 @@
1
+ import "node:module";
@@ -1,5 +1,4 @@
1
- import 'module';
2
- /*#__PURE__*/ import.meta.url;
1
+ import "node:module";
3
2
  import { Linter } from "@rsdoctor/types";
4
3
  function toSeverity(input, defaultLevel) {
5
4
  if ('off' === input) return Linter.Severity.Ignore;
@@ -1,2 +1 @@
1
- import 'module';
2
- /*#__PURE__*/ import.meta.url;
1
+ import "node:module";
@@ -1,5 +1,4 @@
1
- import 'module';
2
- /*#__PURE__*/ import.meta.url;
1
+ import "node:module";
3
2
  export * from "./chunks.js";
4
3
  export * from "./rules.js";
5
4
  export * from "./loader.js";
@@ -1,2 +1 @@
1
- import 'module';
2
- /*#__PURE__*/ import.meta.url;
1
+ import "node:module";
@@ -1,2 +1 @@
1
- import 'module';
2
- /*#__PURE__*/ import.meta.url;
1
+ import "node:module";
@@ -1,2 +1 @@
1
- import 'module';
2
- /*#__PURE__*/ import.meta.url;
1
+ import "node:module";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdoctor/core",
3
- "version": "1.5.3-alpha.0",
3
+ "version": "1.5.4",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/web-infra-dev/rsdoctor",
@@ -63,32 +63,32 @@
63
63
  "dependencies": {
64
64
  "browserslist-load-config": "^1.0.1",
65
65
  "@rsbuild/plugin-check-syntax": "1.6.1",
66
- "enhanced-resolve": "5.12.0",
67
- "es-toolkit": "^1.44.0",
66
+ "@rspack/resolver": "0.2.8",
67
+ "es-toolkit": "^1.45.1",
68
68
  "filesize": "^10.1.6",
69
69
  "fs-extra": "^11.1.1",
70
- "semver": "^7.7.3",
70
+ "semver": "^7.7.4",
71
71
  "source-map": "^0.7.6",
72
- "@rsdoctor/graph": "1.5.3-alpha.0",
73
- "@rsdoctor/sdk": "1.5.3-alpha.0",
74
- "@rsdoctor/types": "1.5.3-alpha.0",
75
- "@rsdoctor/utils": "1.5.3-alpha.0"
72
+ "@rsdoctor/graph": "1.5.4",
73
+ "@rsdoctor/sdk": "1.5.4",
74
+ "@rsdoctor/utils": "1.5.4",
75
+ "@rsdoctor/types": "1.5.4"
76
76
  },
77
77
  "devDependencies": {
78
- "axios": "^1.13.4",
79
- "@rspack/core": "1.7.4",
78
+ "axios": "^1.13.6",
79
+ "@rspack/core": "2.0.0-canary-20260116",
80
80
  "@types/fs-extra": "^11.0.4",
81
81
  "@types/node": "^22.8.1",
82
82
  "@types/node-fetch": "^2.6.13",
83
83
  "@types/semver": "^7.7.1",
84
- "@types/tapable": "2.2.7",
85
- "babel-loader": "10.0.0",
86
- "prebundle": "1.4.2",
84
+ "@types/tapable": "2.3.0",
85
+ "babel-loader": "10.1.1",
86
+ "prebundle": "1.6.4",
87
87
  "string-loader": "0.0.1",
88
88
  "ts-loader": "^9.5.4",
89
89
  "tslib": "2.8.1",
90
90
  "typescript": "^5.9.2",
91
- "webpack": "^5.97.1",
91
+ "webpack": "^5.105.4",
92
92
  "@scripts/test-helper": "0.1.1"
93
93
  },
94
94
  "publishConfig": {