@rspack/test-tools 1.5.3 → 1.5.5

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 (81) hide show
  1. package/dist/case/compiler.d.ts +11 -2
  2. package/dist/case/compiler.js +111 -8
  3. package/dist/case/config.js +2 -2
  4. package/dist/case/normal.d.ts +1 -0
  5. package/dist/case/normal.js +27 -15
  6. package/dist/case/serial.js +2 -2
  7. package/dist/compiler.d.ts +4 -3
  8. package/dist/compiler.js +7 -2
  9. package/dist/helper/expect/placeholder.js +1 -1
  10. package/dist/helper/legacy/FakeDocument.js +6 -4
  11. package/dist/helper/legacy/createFakeWorker.d.ts +1 -1
  12. package/dist/helper/legacy/createFakeWorker.js +44 -20
  13. package/dist/helper/legacy/deprecationTracking.d.ts +1 -0
  14. package/dist/helper/legacy/deprecationTracking.js +41 -0
  15. package/dist/helper/legacy/expectSource.d.ts +10 -0
  16. package/dist/helper/legacy/expectSource.js +23 -0
  17. package/dist/helper/legacy/findOutputFiles.d.ts +6 -0
  18. package/dist/helper/legacy/findOutputFiles.js +14 -0
  19. package/dist/helper/legacy/regexEscape.d.ts +2 -0
  20. package/dist/helper/legacy/regexEscape.js +5 -0
  21. package/dist/helper/legacy/supportDefaultAssignment.d.ts +2 -0
  22. package/dist/helper/legacy/supportDefaultAssignment.js +13 -0
  23. package/dist/helper/legacy/supportsBlob.d.ts +2 -0
  24. package/dist/helper/legacy/supportsBlob.js +10 -0
  25. package/dist/helper/legacy/supportsClassFields.d.ts +2 -0
  26. package/dist/helper/legacy/supportsClassFields.js +11 -0
  27. package/dist/helper/legacy/supportsES6.d.ts +2 -0
  28. package/dist/helper/legacy/supportsES6.js +11 -0
  29. package/dist/helper/legacy/supportsForOf.d.ts +2 -0
  30. package/dist/helper/legacy/supportsForOf.js +11 -0
  31. package/dist/helper/legacy/supportsIteratorDestructuring.d.ts +2 -0
  32. package/dist/helper/legacy/supportsIteratorDestructuring.js +11 -0
  33. package/dist/helper/legacy/supportsLogicalAssignment.d.ts +2 -0
  34. package/dist/helper/legacy/supportsLogicalAssignment.js +11 -0
  35. package/dist/helper/legacy/supportsObjectDestructuring.d.ts +2 -0
  36. package/dist/helper/legacy/supportsObjectDestructuring.js +11 -0
  37. package/dist/helper/legacy/supportsOptionalCatchBinding.d.ts +2 -0
  38. package/dist/helper/legacy/supportsOptionalCatchBinding.js +11 -0
  39. package/dist/helper/legacy/supportsOptionalChaining.d.ts +2 -0
  40. package/dist/helper/legacy/supportsOptionalChaining.js +11 -0
  41. package/dist/helper/legacy/supportsRequireInModule.d.ts +2 -0
  42. package/dist/helper/legacy/supportsRequireInModule.js +5 -0
  43. package/dist/helper/legacy/supportsResponse.d.ts +2 -0
  44. package/dist/helper/legacy/supportsResponse.js +10 -0
  45. package/dist/helper/legacy/supportsSpread.d.ts +2 -0
  46. package/dist/helper/legacy/supportsSpread.js +12 -0
  47. package/dist/helper/legacy/supportsTemplateStrings.d.ts +2 -0
  48. package/dist/helper/legacy/supportsTemplateStrings.js +11 -0
  49. package/dist/helper/legacy/supportsUsing.d.ts +2 -0
  50. package/dist/helper/legacy/supportsUsing.js +26 -0
  51. package/dist/helper/legacy/supportsWebAssembly.d.ts +2 -0
  52. package/dist/helper/legacy/supportsWebAssembly.js +10 -0
  53. package/dist/helper/legacy/supportsWorker.d.ts +2 -0
  54. package/dist/helper/legacy/supportsWorker.js +17 -0
  55. package/dist/helper/legacy/urlToRelativePath.js +5 -2
  56. package/dist/processor/basic.js +5 -5
  57. package/dist/processor/config.js +5 -0
  58. package/dist/processor/error.js +1 -1
  59. package/dist/processor/hook.js +2 -2
  60. package/dist/processor/hot.d.ts +1 -1
  61. package/dist/processor/hot.js +6 -2
  62. package/dist/processor/normal.js +21 -2
  63. package/dist/processor/simple.d.ts +1 -0
  64. package/dist/processor/simple.js +3 -1
  65. package/dist/processor/watch.js +1 -1
  66. package/dist/runner/cache.js +1 -1
  67. package/dist/runner/hot-step.js +1 -1
  68. package/dist/runner/hot.js +1 -1
  69. package/dist/runner/multiple.js +16 -2
  70. package/dist/runner/runner/basic.js +13 -11
  71. package/dist/runner/runner/cjs.d.ts +2 -0
  72. package/dist/runner/runner/cjs.js +42 -13
  73. package/dist/runner/runner/esm.js +3 -0
  74. package/dist/runner/runner/normal.js +4 -1
  75. package/dist/runner/runner/web/fake.d.ts +0 -1
  76. package/dist/runner/runner/web/fake.js +0 -12
  77. package/dist/runner/runner/web/jsdom.d.ts +0 -1
  78. package/dist/runner/runner/web/jsdom.js +1 -2
  79. package/dist/test/creator.js +1 -1
  80. package/dist/type.d.ts +11 -9
  81. package/package.json +22 -24
@@ -81,6 +81,9 @@ class EsmRunner extends cjs_1.CommonJsRunner {
81
81
  if (!file) {
82
82
  return this.requirers.get("miss")(currentDirectory, modulePath);
83
83
  }
84
+ if (file.content.includes("__STATS__")) {
85
+ esmContext.__STATS__ = this._options.stats?.();
86
+ }
84
87
  let esm = esmCache.get(file.path);
85
88
  if (!esm) {
86
89
  esm = new node_vm_1.SourceTextModule(file.content, {
@@ -7,7 +7,6 @@ class NormalRunner extends esm_1.EsmRunner {
7
7
  createBaseModuleScope() {
8
8
  const baseModuleScope = Object.assign(super.createBaseModuleScope(), {
9
9
  process,
10
- global,
11
10
  URL: node_url_1.URL,
12
11
  Buffer,
13
12
  setImmediate
@@ -17,6 +16,10 @@ class NormalRunner extends esm_1.EsmRunner {
17
16
  createModuleScope(requireFn, m, file) {
18
17
  const moduleScope = super.createModuleScope(requireFn, m, file);
19
18
  delete moduleScope.define;
19
+ moduleScope._globalAssign = {
20
+ ...(moduleScope._globalAssign || {}),
21
+ expect: this._options.env.expect
22
+ };
20
23
  return moduleScope;
21
24
  }
22
25
  }
@@ -11,7 +11,6 @@ export declare class FakeDocumentWebRunner<T extends ECompilerType = ECompilerTy
11
11
  protected createGlobalContext(): import("../../type").IBasicGlobalContext;
12
12
  protected createModuleScope(requireFn: TRunnerRequirer, m: any, file: TBasicRunnerFile): import("../../type").IBasicModuleScope;
13
13
  protected createBaseModuleScope(): import("../../type").IBasicModuleScope;
14
- protected createJsonRequirer(): TRunnerRequirer;
15
14
  protected createRunner(): void;
16
15
  protected preExecute(_: string, file: TBasicRunnerFile): void;
17
16
  protected postExecute(_: Object, file: TBasicRunnerFile): void;
@@ -141,18 +141,6 @@ class FakeDocumentWebRunner extends cjs_1.CommonJsRunner {
141
141
  moduleScope.__dirname = this._options.dist;
142
142
  return moduleScope;
143
143
  }
144
- createJsonRequirer() {
145
- return (currentDirectory, modulePath, context = {}) => {
146
- if (Array.isArray(modulePath)) {
147
- throw new Error("Array module path is not supported in hot cases");
148
- }
149
- const file = context.file || this.getFile(modulePath, currentDirectory);
150
- if (!file) {
151
- return this.requirers.get("miss")(currentDirectory, modulePath);
152
- }
153
- return JSON.parse(node_fs_1.default.readFileSync(node_path_1.default.join(this._options.dist, modulePath), "utf-8"));
154
- };
155
- }
156
144
  createRunner() {
157
145
  super.createRunner();
158
146
  this.requirers.set("cjs", this.getRequire());
@@ -5,7 +5,6 @@ import { CommonJsRunner } from "../cjs";
5
5
  export declare class JSDOMWebRunner<T extends ECompilerType = ECompilerType.Rspack> extends CommonJsRunner<T> {
6
6
  protected _webOptions: IBasicRunnerOptions<T>;
7
7
  private dom;
8
- private requireCache;
9
8
  constructor(_webOptions: IBasicRunnerOptions<T>);
10
9
  run(file: string): Promise<unknown>;
11
10
  getGlobal(name: string): unknown;
@@ -18,7 +18,6 @@ class JSDOMWebRunner extends cjs_1.CommonJsRunner {
18
18
  constructor(_webOptions) {
19
19
  super(_webOptions);
20
20
  this._webOptions = _webOptions;
21
- this.requireCache = Object.create(null);
22
21
  const virtualConsole = new jsdom_1.VirtualConsole();
23
22
  virtualConsole.sendTo(console);
24
23
  this.dom = new jsdom_1.JSDOM(`
@@ -159,7 +158,7 @@ class JSDOMWebRunner extends cjs_1.CommonJsRunner {
159
158
  };
160
159
  const currentModuleScope = this.createModuleScope(this.getRequire(), m, file);
161
160
  if (this._options.testConfig.moduleScope) {
162
- this._options.testConfig.moduleScope(currentModuleScope);
161
+ this._options.testConfig.moduleScope(currentModuleScope, this._options.stats, this._options.compilerOptions);
163
162
  }
164
163
  const scopeKey = (0, helper_1.escapeSep)(file.path);
165
164
  const args = Object.keys(currentModuleScope).filter(arg => !["window", "self", "globalThis", "console"].includes(arg));
@@ -231,7 +231,7 @@ class BasicCaseCreator {
231
231
  };
232
232
  }
233
233
  createEnv(testConfig) {
234
- if (typeof this._options.runner === "function" && !testConfig.noTest) {
234
+ if (typeof this._options.runner === "function" && !testConfig.noTests) {
235
235
  return (0, createLazyTestEnv_1.default)(10000);
236
236
  }
237
237
  return {
package/dist/type.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type EventEmitter from "node:events";
2
- import type { Compiler as RspackCompiler, MultiStats as RspackMultiStats, RspackOptions, Stats as RspackStats, StatsCompilation as RspackStatsCompilation } from "@rspack/core";
3
- import type { Compiler as WebpackCompiler, MultiStats as WebpackMultiStats, Configuration as WebpackOptions, Stats as WebpackStats, StatsCompilation as WebpackStatsCompilation } from "webpack";
2
+ import type { Compilation as RspackCompilation, Compiler as RspackCompiler, MultiStats as RspackMultiStats, RspackOptions, Stats as RspackStats, StatsCompilation as RspackStatsCompilation } from "@rspack/core";
3
+ import type { Compilation as WebpackCompilation, Compiler as WebpackCompiler, MultiStats as WebpackMultiStats, Configuration as WebpackOptions, Stats as WebpackStats, StatsCompilation as WebpackStatsCompilation } from "webpack";
4
4
  import type { IBasicModuleScope, TRunnerRequirer } from "./runner/type";
5
5
  export interface ITestContext {
6
6
  getSource(sub?: string): string;
@@ -25,6 +25,7 @@ export declare enum ECompilerType {
25
25
  }
26
26
  export type TCompilerOptions<T> = T extends ECompilerType.Rspack ? RspackOptions : WebpackOptions;
27
27
  export type TCompiler<T> = T extends ECompilerType.Rspack ? RspackCompiler : WebpackCompiler;
28
+ export type TCompilation<T> = T extends ECompilerType.Rspack ? RspackCompilation : WebpackCompilation;
28
29
  export type TCompilerStats<T> = T extends ECompilerType.Rspack ? RspackStats : WebpackStats;
29
30
  export type TCompilerMultiStats<T> = T extends ECompilerType.Rspack ? RspackMultiStats : WebpackMultiStats;
30
31
  export type TCompilerStatsCompilation<T> = T extends ECompilerType.Rspack ? RspackStatsCompilation : WebpackStatsCompilation;
@@ -34,6 +35,7 @@ export interface ITestCompilerManager<T extends ECompilerType> {
34
35
  mergeOptions(newOptions: TCompilerOptions<T>): TCompilerOptions<T>;
35
36
  getCompiler(): TCompiler<T> | null;
36
37
  createCompiler(): TCompiler<T>;
38
+ createCompilerWithCallback(callback: (error: Error | null, stats: TCompilerStats<T> | null) => void): TCompiler<T>;
37
39
  build(): Promise<TCompilerStats<T>>;
38
40
  watch(timeout?: number): void;
39
41
  getStats(): TCompilerStats<T> | TCompilerMultiStats<T> | null;
@@ -51,7 +53,7 @@ export interface ITesterConfig {
51
53
  temp?: string;
52
54
  steps?: ITestProcessor[];
53
55
  testConfig?: TTestConfig<ECompilerType>;
54
- compilerFactories?: TCompilerFactories;
56
+ compilerFactories?: TCompilerFactories<ECompilerType>;
55
57
  contextValue?: Record<string, unknown>;
56
58
  runnerFactory?: new (name: string, context: ITestContext) => TRunnerFactory<ECompilerType>;
57
59
  }
@@ -135,12 +137,12 @@ export declare enum EDocumentType {
135
137
  export type TTestConfig<T extends ECompilerType> = {
136
138
  documentType?: EDocumentType;
137
139
  validate?: (stats: TCompilerStats<T> | TCompilerMultiStats<T>, stderr?: string) => void;
138
- noTest?: boolean;
140
+ noTests?: boolean;
139
141
  writeStatsOuptut?: boolean;
140
142
  writeStatsJson?: boolean;
141
- beforeExecute?: () => void;
142
- afterExecute?: () => void;
143
- moduleScope?: (ms: IBasicModuleScope, stats?: TCompilerStatsCompilation<T>) => IBasicModuleScope;
143
+ beforeExecute?: (options: TCompilerOptions<T>) => void;
144
+ afterExecute?: (options: TCompilerOptions<T>) => void;
145
+ moduleScope?: (ms: IBasicModuleScope, stats?: TCompilerStatsCompilation<T>, options?: TCompilerOptions<T>) => IBasicModuleScope;
144
146
  checkStats?: (stepName: string, jsonStats: TCompilerStatsCompilation<T> | undefined, stringStats: String) => boolean;
145
147
  findBundle?: (index: number, options: TCompilerOptions<T>, stepName?: string) => string | string[];
146
148
  bundlePath?: string[];
@@ -157,7 +159,7 @@ export interface ITestRunner {
157
159
  getRequire(): TRunnerRequirer;
158
160
  getGlobal(name: string): unknown;
159
161
  }
160
- export type TCompilerFactory<T extends ECompilerType> = (options: TCompilerOptions<T> | TCompilerOptions<T>[]) => TCompiler<T>;
162
+ export type TCompilerFactory<T extends ECompilerType> = (options: TCompilerOptions<T> | TCompilerOptions<T>[], callback?: (error: Error | null, stats: TCompilerStats<T> | null) => void) => TCompiler<T>;
161
163
  export interface TRunnerFactory<T extends ECompilerType> {
162
164
  create(file: string, compilerOptions: TCompilerOptions<T>, env: ITestEnv): ITestRunner;
163
165
  }
@@ -166,4 +168,4 @@ export type TUpdateOptions = {
166
168
  totalUpdates: number;
167
169
  changedFiles: string[];
168
170
  };
169
- export type TCompilerFactories = Record<ECompilerType, TCompilerFactory<ECompilerType>>;
171
+ export type TCompilerFactories<T extends ECompilerType> = Record<T, TCompilerFactory<T>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rspack/test-tools",
3
- "version": "1.5.3",
3
+ "version": "1.5.5",
4
4
  "license": "MIT",
5
5
  "description": "Test tools for rspack",
6
6
  "main": "dist/index.js",
@@ -12,7 +12,10 @@
12
12
  "./setup-expect": "./dist/helper/setup-expect.js",
13
13
  "./setup-env": "./dist/helper/setup-env.js",
14
14
  "./setup-wasm": "./dist/helper/setup-wasm.js",
15
- "./package.json": "./package.json"
15
+ "./package.json": "./package.json",
16
+ "./helper/*": "./dist/helper/*.js",
17
+ "./helper/legacy/*": "./dist/helper/legacy/*.js",
18
+ "./helper/util/*": "./dist/helper/util/*.js"
16
19
  },
17
20
  "files": [
18
21
  "client",
@@ -32,15 +35,15 @@
32
35
  "directory": "packages/rspack-test-tools"
33
36
  },
34
37
  "dependencies": {
35
- "@babel/generator": "7.28.0",
36
- "@babel/parser": "7.28.0",
37
- "@babel/traverse": "7.28.0",
38
- "@babel/types": "7.28.2",
38
+ "@babel/generator": "7.28.3",
39
+ "@babel/parser": "7.28.4",
40
+ "@babel/traverse": "7.28.4",
41
+ "@babel/types": "7.28.4",
39
42
  "cross-env": "^7.0.3",
40
43
  "csv-to-markdown-table": "^1.5.0",
41
44
  "deepmerge": "^4.3.1",
42
45
  "filenamify": "4.3.0",
43
- "fs-extra": "^11.3.0",
46
+ "fs-extra": "^11.3.2",
44
47
  "glob": "^11.0.3",
45
48
  "graceful-fs": "^4.2.11",
46
49
  "iconv-lite": "^0.6.3",
@@ -49,7 +52,7 @@
49
52
  "jsdom": "^26.1.0",
50
53
  "memfs": "4.38.2",
51
54
  "loader-utils": "^2.0.4",
52
- "path-serializer": "0.5.0",
55
+ "path-serializer": "0.5.1",
53
56
  "pretty-format": "29.7.0",
54
57
  "rimraf": "^5.0.10",
55
58
  "source-map": "^0.7.6",
@@ -60,33 +63,33 @@
60
63
  },
61
64
  "devDependencies": {
62
65
  "@rspack/plugin-preact-refresh": "1.1.2",
63
- "@rspack/plugin-react-refresh": "^1.5.0",
66
+ "@rspack/plugin-react-refresh": "^1.5.1",
64
67
  "@swc/helpers": "0.5.17",
65
68
  "@swc/plugin-remove-console": "^9.0.0",
66
69
  "@types/babel__generator": "7.27.0",
67
70
  "@types/babel__traverse": "7.28.0",
68
71
  "@types/fs-extra": "11.0.4",
69
72
  "@types/jsdom": "^21.1.7",
70
- "@types/react": "^19.1.8",
71
- "@types/react-dom": "^19.1.6",
73
+ "@types/react": "^19.1.13",
74
+ "@types/react-dom": "^19.1.9",
72
75
  "@webdiscus/pug-loader": "^2.11.1",
73
76
  "acorn": "^8.15.0",
74
77
  "babel-loader": "^10.0.0",
75
78
  "babel-plugin-import": "^1.13.8",
76
79
  "chalk": "^4.1.2",
77
- "core-js": "3.45.0",
80
+ "core-js": "3.45.1",
78
81
  "css-loader": "^7.1.2",
79
82
  "file-loader": "^6.2.0",
80
83
  "graceful-fs": "^4.2.11",
81
84
  "html-loader": "^5.1.0",
82
- "html-webpack-plugin": "^5.6.3",
85
+ "html-webpack-plugin": "^5.6.4",
83
86
  "less-loader": "^12.3.0",
84
87
  "lodash": "^4.17.21",
85
- "postcss-loader": "^8.1.1",
88
+ "postcss-loader": "^8.2.0",
86
89
  "postcss-pxtorem": "^6.1.0",
87
90
  "raw-loader": "^4.0.2",
88
- "react": "^19.1.0",
89
- "react-dom": "^19.1.0",
91
+ "react": "^19.1.1",
92
+ "react-dom": "^19.1.1",
90
93
  "react-refresh": "^0.17.0",
91
94
  "sass-loader": "^16.0.5",
92
95
  "source-map": "^0.7.6",
@@ -97,10 +100,10 @@
97
100
  "wast-loader": "^1.14.1",
98
101
  "worker-rspack-loader": "^3.1.2",
99
102
  "exports-loader": "^5.0.0",
100
- "@rspack/cli": "1.5.3",
101
- "@rspack/test-tools": "1.5.3",
103
+ "@rspack/cli": "1.5.5",
102
104
  "@rspack/binding-testing": "1.4.1",
103
- "@rspack/core": "1.5.3"
105
+ "@rspack/test-tools": "1.5.5",
106
+ "@rspack/core": "1.5.5"
104
107
  },
105
108
  "peerDependencies": {
106
109
  "@rspack/core": ">=1.0.0"
@@ -108,11 +111,6 @@
108
111
  "scripts": {
109
112
  "build": "tsc -b ./tsconfig.build.json",
110
113
  "dev": "tsc -b -w",
111
- "test": "cross-env RUST_BACKTRACE=full pnpm run --stream /^test:.*/",
112
- "testu": "pnpm run --stream /^test:.*/ -u",
113
- "test:base": "cross-env node --no-warnings --expose-gc --max-old-space-size=8192 --experimental-vm-modules ../../node_modules/jest-cli/bin/jest --logHeapUsage --colors --config ./jest.config.js --passWithNoTests",
114
- "test:hot": "cross-env RSPACK_HOT_TEST=true node --no-warnings --expose-gc --max-old-space-size=8192 --experimental-vm-modules ../../node_modules/jest-cli/bin/jest --logHeapUsage --colors --config ./jest.config.hot.js --passWithNoTests",
115
- "test:diff": "cross-env RSPACK_DIFF=true node --no-warnings --expose-gc --max-old-space-size=8192 --experimental-vm-modules ../../node_modules/jest-cli/bin/jest --logHeapUsage --colors --config ./jest.config.diff.js --passWithNoTests",
116
114
  "api-extractor": "api-extractor run --verbose",
117
115
  "api-extractor:ci": "api-extractor run --verbose || diff temp/test-tools.api.md etc/test-tools.api.md"
118
116
  }