@rspack/test-tools 1.5.8 → 1.6.0-beta.1
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/dist/case/builtin.js +0 -22
- package/dist/case/cache.d.ts +1 -1
- package/dist/case/cache.js +5 -5
- package/dist/case/common.d.ts +1 -0
- package/dist/case/common.js +17 -10
- package/dist/case/config.js +5 -3
- package/dist/case/diagnostic.d.ts +2 -2
- package/dist/case/diagnostic.js +2 -3
- package/dist/case/error.d.ts +1 -0
- package/dist/case/error.js +25 -6
- package/dist/case/esm-output.js +28 -2
- package/dist/case/example.d.ts +1 -0
- package/dist/case/example.js +57 -0
- package/dist/case/hash.js +1 -2
- package/dist/case/hook.js +3 -4
- package/dist/case/hot-step.d.ts +1 -1
- package/dist/case/hot-step.js +12 -13
- package/dist/case/hot.d.ts +5 -4
- package/dist/case/hot.js +61 -83
- package/dist/case/incremental.d.ts +2 -2
- package/dist/case/incremental.js +8 -27
- package/dist/case/index.d.ts +12 -1
- package/dist/case/index.js +7 -1
- package/dist/case/multi-compiler.d.ts +18 -0
- package/dist/case/multi-compiler.js +98 -0
- package/dist/case/normal.d.ts +2 -0
- package/dist/case/normal.js +22 -12
- package/dist/case/runner.d.ts +1 -1
- package/dist/case/runner.js +4 -3
- package/dist/case/stats-api.d.ts +9 -0
- package/dist/case/stats-output.js +5 -4
- package/dist/case/watch.d.ts +5 -5
- package/dist/case/watch.js +11 -16
- package/dist/compare/compare.js +6 -3
- package/dist/helper/directory.js +1 -1
- package/dist/helper/expect/error.js +1 -1
- package/dist/helper/expect/placeholder.js +7 -7
- package/dist/helper/expect/to-match-file-snapshot.d.ts +0 -1
- package/dist/helper/hot-update/loader.d.ts +2 -1
- package/dist/helper/hot-update/loader.js +5 -30
- package/dist/helper/hot-update/plugin.d.ts +1 -1
- package/dist/helper/hot-update/plugin.js +14 -13
- package/dist/helper/legacy/LogTestPlugin.d.ts +6 -0
- package/dist/helper/legacy/LogTestPlugin.js +35 -0
- package/dist/helper/legacy/asModule.js +0 -2
- package/dist/helper/legacy/createLazyTestEnv.d.ts +1 -0
- package/dist/helper/legacy/createLazyTestEnv.js +4 -3
- package/dist/helper/legacy/supportsTextDecoder.js +9 -0
- package/dist/helper/read-config-file.d.ts +2 -2
- package/dist/helper/read-config-file.js +5 -2
- package/dist/helper/setup-env.js +18 -2
- package/dist/helper/util/checkStats.d.ts +0 -1
- package/dist/helper/util/checkStats.js +0 -18
- package/dist/helper/util/expectWarningFactory.js +2 -4
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/jest/ignore-snapshot-default-reporter.d.ts +2 -0
- package/dist/jest/ignore-snapshot-default-reporter.js +57 -0
- package/dist/jest/ignore-snapshot-summary-reporter.d.ts +2 -0
- package/dist/jest/ignore-snapshot-summary-reporter.js +24 -0
- package/dist/jest/patch-node-env.d.ts +5 -0
- package/dist/jest/patch-node-env.js +18 -0
- package/dist/jest/slash.d.ts +2 -0
- package/dist/jest/slash.js +16 -0
- package/dist/runner/node/index.js +12 -3
- package/dist/runner/web/index.d.ts +20 -7
- package/dist/runner/web/index.js +293 -18
- package/dist/test/creator.js +15 -10
- package/dist/test/tester.d.ts +1 -0
- package/dist/test/tester.js +21 -4
- package/dist/type.d.ts +14 -5
- package/dist/type.js +1 -6
- package/jest.d.ts +2 -0
- package/package.json +10 -41
- package/dist/helper/legacy/FakeDocument.d.ts +0 -54
- package/dist/helper/legacy/FakeDocument.js +0 -280
- package/dist/helper/legacy/createLogger.d.ts +0 -23
- package/dist/helper/legacy/createLogger.js +0 -20
- package/dist/helper/legacy/supportsBlob.js +0 -10
- package/dist/helper/legacy/supportsClassFields.d.ts +0 -2
- package/dist/helper/legacy/supportsClassFields.js +0 -11
- package/dist/helper/legacy/supportsES6.d.ts +0 -2
- package/dist/helper/legacy/supportsES6.js +0 -11
- package/dist/helper/legacy/supportsForOf.d.ts +0 -2
- package/dist/helper/legacy/supportsForOf.js +0 -11
- package/dist/helper/legacy/supportsIteratorDestructuring.d.ts +0 -2
- package/dist/helper/legacy/supportsIteratorDestructuring.js +0 -11
- package/dist/helper/legacy/supportsLogicalAssignment.d.ts +0 -2
- package/dist/helper/legacy/supportsLogicalAssignment.js +0 -11
- package/dist/helper/legacy/supportsObjectDestructuring.d.ts +0 -2
- package/dist/helper/legacy/supportsObjectDestructuring.js +0 -11
- package/dist/helper/legacy/supportsOptionalCatchBinding.d.ts +0 -2
- package/dist/helper/legacy/supportsOptionalCatchBinding.js +0 -11
- package/dist/helper/legacy/supportsOptionalChaining.d.ts +0 -2
- package/dist/helper/legacy/supportsOptionalChaining.js +0 -11
- package/dist/helper/legacy/supportsRequireInModule.d.ts +0 -2
- package/dist/helper/legacy/supportsRequireInModule.js +0 -5
- package/dist/helper/legacy/supportsResponse.d.ts +0 -2
- package/dist/helper/legacy/supportsResponse.js +0 -10
- package/dist/helper/legacy/supportsSpread.d.ts +0 -2
- package/dist/helper/legacy/supportsSpread.js +0 -12
- package/dist/helper/legacy/supportsTemplateStrings.d.ts +0 -2
- package/dist/helper/legacy/supportsTemplateStrings.js +0 -11
- package/dist/helper/legacy/supportsWebAssembly.d.ts +0 -2
- package/dist/helper/legacy/supportsWebAssembly.js +0 -10
- package/dist/helper/legacy/supportsWorker.d.ts +0 -2
- package/dist/helper/legacy/supportsWorker.js +0 -17
- package/dist/helper/legacy/walkCssTokens.d.ts +0 -40
- package/dist/helper/legacy/walkCssTokens.js +0 -761
- package/dist/helper/legacy/warmup-webpack.d.ts +0 -1
- package/dist/helper/legacy/warmup-webpack.js +0 -26
- package/dist/helper/loaders/hot-update.d.ts +0 -1
- package/dist/helper/loaders/hot-update.js +0 -40
- package/dist/helper/plugins/hot-update.d.ts +0 -7
- package/dist/helper/plugins/hot-update.js +0 -40
- package/dist/helper/plugins/index.d.ts +0 -1
- package/dist/helper/plugins/index.js +0 -17
- package/dist/helper/util/currentWatchStep.d.ts +0 -1
- package/dist/helper/util/currentWatchStep.js +0 -2
- package/dist/helper/util/identifier.d.ts +0 -76
- package/dist/helper/util/identifier.js +0 -339
- package/dist/helper/util/replaceMitteDiagnostic.d.ts +0 -2
- package/dist/helper/util/replaceMitteDiagnostic.js +0 -17
- package/dist/reporter/diff-html.d.ts +0 -15
- package/dist/reporter/diff-html.js +0 -69
- package/dist/reporter/diff-stats.d.ts +0 -24
- package/dist/reporter/diff-stats.js +0 -131
- package/dist/reporter/index.d.ts +0 -2
- package/dist/reporter/index.js +0 -18
- package/dist/runner/web/fake.d.ts +0 -15
- package/dist/runner/web/fake.js +0 -213
- package/dist/runner/web/jsdom.d.ts +0 -24
- package/dist/runner/web/jsdom.js +0 -228
- /package/dist/helper/legacy/{supportsBlob.d.ts → supportsTextDecoder.d.ts} +0 -0
package/dist/case/hot.js
CHANGED
|
@@ -9,27 +9,26 @@ exports.createHotRunner = createHotRunner;
|
|
|
9
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
10
|
const core_1 = __importDefault(require("@rspack/core"));
|
|
11
11
|
const helper_1 = require("../helper");
|
|
12
|
+
const plugin_1 = require("../helper/hot-update/plugin");
|
|
12
13
|
const checkArrayExpectation_1 = __importDefault(require("../helper/legacy/checkArrayExpectation"));
|
|
13
|
-
const
|
|
14
|
-
const plugin_1 = require("../plugin");
|
|
14
|
+
const plugin_2 = require("../plugin");
|
|
15
15
|
const runner_1 = require("../runner");
|
|
16
16
|
const creator_1 = require("../test/creator");
|
|
17
|
-
const type_1 = require("../type");
|
|
18
17
|
const common_1 = require("./common");
|
|
19
18
|
const runner_2 = require("./runner");
|
|
20
19
|
const creators = new Map();
|
|
21
|
-
function createHotProcessor(name, target, incremental = false) {
|
|
22
|
-
const
|
|
23
|
-
updateIndex: 0,
|
|
24
|
-
totalUpdates: 1,
|
|
25
|
-
changedFiles: []
|
|
26
|
-
};
|
|
20
|
+
function createHotProcessor(name, src, temp, target, incremental = false) {
|
|
21
|
+
const updatePlugin = new plugin_1.HotUpdatePlugin(src, temp);
|
|
27
22
|
const processor = {
|
|
23
|
+
before: async (context) => {
|
|
24
|
+
await updatePlugin.initialize();
|
|
25
|
+
context.setValue(name, "hotUpdatePlugin", updatePlugin);
|
|
26
|
+
},
|
|
28
27
|
config: async (context) => {
|
|
29
28
|
const compiler = (0, common_1.getCompiler)(context, name);
|
|
30
|
-
let options = defaultOptions(context, target
|
|
29
|
+
let options = defaultOptions(context, target);
|
|
31
30
|
options = await (0, common_1.config)(context, name, ["rspack.config.js", "webpack.config.js"], options);
|
|
32
|
-
overrideOptions(context, options, target,
|
|
31
|
+
overrideOptions(context, options, target, updatePlugin);
|
|
33
32
|
if (incremental) {
|
|
34
33
|
options.experiments ??= {};
|
|
35
34
|
options.experiments.incremental ??= "advance-silent";
|
|
@@ -43,22 +42,26 @@ function createHotProcessor(name, target, incremental = false) {
|
|
|
43
42
|
await (0, common_1.build)(context, name);
|
|
44
43
|
},
|
|
45
44
|
run: async (env, context) => {
|
|
46
|
-
|
|
47
|
-
await (0, common_1.run)(env, context, name, context => findBundle(context, name, target, hotUpdateContext));
|
|
45
|
+
await (0, common_1.run)(env, context, name, context => findBundle(context, name, target, updatePlugin));
|
|
48
46
|
},
|
|
49
47
|
check: async (env, context) => {
|
|
50
48
|
await (0, common_1.check)(env, context, name);
|
|
51
49
|
},
|
|
50
|
+
after: async (context) => {
|
|
51
|
+
await (0, common_1.afterExecute)(context, name);
|
|
52
|
+
},
|
|
52
53
|
afterAll: async (context) => {
|
|
53
54
|
if (context.getTestConfig().checkSteps === false) {
|
|
54
55
|
return;
|
|
55
56
|
}
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
const updateIndex = updatePlugin.getUpdateIndex();
|
|
58
|
+
const totalUpdates = updatePlugin.getTotalUpdates();
|
|
59
|
+
if (updateIndex + 1 !== totalUpdates) {
|
|
60
|
+
throw new Error(`Should run all hot steps (${updateIndex + 1} / ${totalUpdates}): ${name}`);
|
|
58
61
|
}
|
|
59
62
|
}
|
|
60
63
|
};
|
|
61
|
-
processor.
|
|
64
|
+
processor.updatePlugin = updatePlugin;
|
|
62
65
|
return processor;
|
|
63
66
|
}
|
|
64
67
|
function getCreator(target) {
|
|
@@ -67,8 +70,8 @@ function getCreator(target) {
|
|
|
67
70
|
clean: true,
|
|
68
71
|
describe: true,
|
|
69
72
|
target,
|
|
70
|
-
steps: ({ name, target }) => [
|
|
71
|
-
createHotProcessor(name, target)
|
|
73
|
+
steps: ({ name, target, src, dist, temp }) => [
|
|
74
|
+
createHotProcessor(name, src, temp || node_path_1.default.resolve(dist, "temp"), target)
|
|
72
75
|
],
|
|
73
76
|
runner: {
|
|
74
77
|
key: (context, name, file) => name,
|
|
@@ -79,11 +82,11 @@ function getCreator(target) {
|
|
|
79
82
|
}
|
|
80
83
|
return creators.get(target);
|
|
81
84
|
}
|
|
82
|
-
function createHotCase(name, src, dist, target) {
|
|
85
|
+
function createHotCase(name, src, dist, temp, target) {
|
|
83
86
|
const creator = getCreator(target);
|
|
84
|
-
creator.create(name, src, dist);
|
|
87
|
+
creator.create(name, src, dist, temp);
|
|
85
88
|
}
|
|
86
|
-
function defaultOptions(context, target
|
|
89
|
+
function defaultOptions(context, target) {
|
|
87
90
|
const options = {
|
|
88
91
|
context: context.getSource(),
|
|
89
92
|
mode: "development",
|
|
@@ -108,15 +111,14 @@ function defaultOptions(context, target, updateOptions) {
|
|
|
108
111
|
force: false
|
|
109
112
|
}
|
|
110
113
|
},
|
|
111
|
-
inlineConst: true
|
|
112
|
-
lazyBarrel: true
|
|
114
|
+
inlineConst: true
|
|
113
115
|
}
|
|
114
116
|
};
|
|
115
117
|
options.plugins ??= [];
|
|
116
|
-
options.plugins.push(new core_1.default.HotModuleReplacementPlugin()
|
|
118
|
+
options.plugins.push(new core_1.default.HotModuleReplacementPlugin());
|
|
117
119
|
return options;
|
|
118
120
|
}
|
|
119
|
-
function overrideOptions(context, options, target,
|
|
121
|
+
function overrideOptions(context, options, target, updatePlugin) {
|
|
120
122
|
if (!options.entry) {
|
|
121
123
|
options.entry = "./index.js";
|
|
122
124
|
}
|
|
@@ -127,34 +129,24 @@ function overrideOptions(context, options, target, updateOptions) {
|
|
|
127
129
|
options.module.generator[cssModuleType].exportsOnly ??=
|
|
128
130
|
target === "async-node";
|
|
129
131
|
}
|
|
130
|
-
options.module.rules ??= [];
|
|
131
|
-
options.module.rules.push({
|
|
132
|
-
use: [
|
|
133
|
-
{
|
|
134
|
-
loader: node_path_1.default.resolve(__dirname, "../helper/loaders/hot-update.js"),
|
|
135
|
-
options: updateOptions
|
|
136
|
-
}
|
|
137
|
-
],
|
|
138
|
-
enforce: "pre"
|
|
139
|
-
});
|
|
140
132
|
options.plugins ??= [];
|
|
141
|
-
options.plugins.push(
|
|
133
|
+
options.plugins.push(updatePlugin);
|
|
142
134
|
if (!global.printLogger) {
|
|
143
135
|
options.infrastructureLogging = {
|
|
144
136
|
level: "error"
|
|
145
137
|
};
|
|
146
138
|
}
|
|
147
139
|
if (options.lazyCompilation) {
|
|
148
|
-
options.plugins.push(new
|
|
140
|
+
options.plugins.push(new plugin_2.LazyCompilationTestPlugin());
|
|
149
141
|
}
|
|
150
142
|
}
|
|
151
|
-
function findBundle(context, name, target,
|
|
143
|
+
function findBundle(context, name, target, updatePlugin) {
|
|
152
144
|
const compiler = context.getCompiler(name);
|
|
153
145
|
if (!compiler)
|
|
154
146
|
throw new Error("Compiler should exists when find bundle");
|
|
155
147
|
const testConfig = context.getTestConfig();
|
|
156
148
|
if (typeof testConfig.findBundle === "function") {
|
|
157
|
-
return testConfig.findBundle(
|
|
149
|
+
return testConfig.findBundle(updatePlugin.getUpdateIndex(), compiler.getOptions());
|
|
158
150
|
}
|
|
159
151
|
const files = [];
|
|
160
152
|
const prefiles = [];
|
|
@@ -184,68 +176,43 @@ function createHotRunner(context, name, file, env) {
|
|
|
184
176
|
const testConfig = context.getTestConfig();
|
|
185
177
|
const source = context.getSource();
|
|
186
178
|
const dist = context.getDist();
|
|
187
|
-
const
|
|
188
|
-
const
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
if (!stats) {
|
|
194
|
-
throw new Error("Should generate stats during build");
|
|
195
|
-
}
|
|
196
|
-
const jsonStats = stats.toJson({
|
|
197
|
-
// errorDetails: true
|
|
198
|
-
});
|
|
199
|
-
const compilerOptions = compiler.getOptions();
|
|
200
|
-
const checker = context.getValue(name, jsonStats.errors?.length
|
|
201
|
-
? "hotUpdateStepErrorChecker"
|
|
202
|
-
: "hotUpdateStepChecker");
|
|
203
|
-
if (checker) {
|
|
204
|
-
checker(hotUpdateContext, stats, runner.getGlobal("__HMR_UPDATED_RUNTIME__"));
|
|
205
|
-
}
|
|
206
|
-
await (0, checkArrayExpectation_1.default)(source, jsonStats, "error", `errors${hotUpdateContext.updateIndex}`, "Error", compilerOptions);
|
|
207
|
-
await (0, checkArrayExpectation_1.default)(source, jsonStats, "warning", `warnings${hotUpdateContext.updateIndex}`, "Warning", compilerOptions);
|
|
208
|
-
if (usePromise) {
|
|
209
|
-
// old callback style hmr cases
|
|
210
|
-
callback(null, jsonStats);
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
// new promise style hmr cases
|
|
214
|
-
return jsonStats;
|
|
215
|
-
}
|
|
179
|
+
const updatePlugin = context.getValue(name, "hotUpdatePlugin");
|
|
180
|
+
const nextHMR = async (m, options) => {
|
|
181
|
+
await updatePlugin.goNext();
|
|
182
|
+
const stats = await compiler.build();
|
|
183
|
+
if (!stats) {
|
|
184
|
+
throw new Error("Should generate stats during build");
|
|
216
185
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
186
|
+
const jsonStats = stats.toJson({
|
|
187
|
+
// errorDetails: true
|
|
188
|
+
});
|
|
189
|
+
const compilerOptions = compiler.getOptions();
|
|
190
|
+
const checker = context.getValue(name, jsonStats.errors?.length
|
|
191
|
+
? "hotUpdateStepErrorChecker"
|
|
192
|
+
: "hotUpdateStepChecker");
|
|
193
|
+
if (checker) {
|
|
194
|
+
checker(updatePlugin.getUpdateIndex(), stats, runner.getGlobal("__HMR_UPDATED_RUNTIME__"));
|
|
224
195
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
const jsonStats = await next();
|
|
196
|
+
await (0, checkArrayExpectation_1.default)(source, jsonStats, "error", `errors${updatePlugin.getUpdateIndex()}`, "Error", compilerOptions);
|
|
197
|
+
await (0, checkArrayExpectation_1.default)(source, jsonStats, "warning", `warnings${updatePlugin.getUpdateIndex()}`, "Warning", compilerOptions);
|
|
228
198
|
const updatedModules = await m.hot.check(options || true);
|
|
229
199
|
if (!updatedModules) {
|
|
230
200
|
throw new Error("No update available");
|
|
231
201
|
}
|
|
232
202
|
return jsonStats;
|
|
233
203
|
};
|
|
234
|
-
const
|
|
235
|
-
dom: context.getValue(name, "documentType") || type_1.EDocumentType.JSDOM,
|
|
204
|
+
const commonOptions = {
|
|
236
205
|
env,
|
|
237
206
|
stats: (0, runner_2.cachedStats)(context, name),
|
|
238
207
|
name: name,
|
|
239
208
|
runInNewContext: false,
|
|
240
209
|
testConfig: {
|
|
241
|
-
documentType: testConfig.documentType || type_1.EDocumentType.Fake,
|
|
242
210
|
...testConfig,
|
|
243
211
|
moduleScope(ms, stats, options) {
|
|
244
212
|
const moduleScope = ms;
|
|
245
213
|
if (typeof testConfig.moduleScope === "function") {
|
|
246
214
|
testConfig.moduleScope(moduleScope, stats, compilerOptions);
|
|
247
215
|
}
|
|
248
|
-
moduleScope.NEXT = next;
|
|
249
216
|
moduleScope.NEXT_HMR = nextHMR;
|
|
250
217
|
return moduleScope;
|
|
251
218
|
}
|
|
@@ -254,6 +221,17 @@ function createHotRunner(context, name, file, env) {
|
|
|
254
221
|
source,
|
|
255
222
|
dist,
|
|
256
223
|
compilerOptions
|
|
257
|
-
}
|
|
224
|
+
};
|
|
225
|
+
let runner;
|
|
226
|
+
if (compilerOptions.target === "web" ||
|
|
227
|
+
compilerOptions.target === "webworker") {
|
|
228
|
+
runner = new runner_1.WebRunner({
|
|
229
|
+
location: testConfig.location || "https://test.cases/path/index.html",
|
|
230
|
+
...commonOptions
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
runner = new runner_1.NodeRunner(commonOptions);
|
|
235
|
+
}
|
|
258
236
|
return runner;
|
|
259
237
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function createHotIncrementalCase(name: string, src: string, dist: string, target: TCompilerOptions<ECompilerType.Rspack>["target"], webpackCases: boolean): void;
|
|
1
|
+
import type { ECompilerType, TCompilerOptions } from "../type";
|
|
2
|
+
export declare function createHotIncrementalCase(name: string, src: string, dist: string, temp: string, target: TCompilerOptions<ECompilerType.Rspack>["target"], webpackCases: boolean): void;
|
|
3
3
|
export type WatchIncrementalOptions = {
|
|
4
4
|
ignoreNotFriendlyForIncrementalWarnings?: boolean;
|
|
5
5
|
};
|
package/dist/case/incremental.js
CHANGED
|
@@ -8,28 +8,11 @@ exports.createWatchIncrementalCase = createWatchIncrementalCase;
|
|
|
8
8
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
10
|
const creator_1 = require("../test/creator");
|
|
11
|
-
const type_1 = require("../type");
|
|
12
11
|
const hot_1 = require("./hot");
|
|
13
12
|
const watch_1 = require("./watch");
|
|
14
13
|
const hotCreators = new Map();
|
|
15
|
-
function createHotIncrementalProcessor(name, target, webpackCases) {
|
|
16
|
-
|
|
17
|
-
processor.before = async (context) => {
|
|
18
|
-
context.setValue(name, "documentType", webpackCases ? type_1.EDocumentType.Fake : type_1.EDocumentType.JSDOM);
|
|
19
|
-
};
|
|
20
|
-
const originalAfterAll = processor.afterAll;
|
|
21
|
-
processor.afterAll = async function (context) {
|
|
22
|
-
try {
|
|
23
|
-
await originalAfterAll?.(context);
|
|
24
|
-
}
|
|
25
|
-
catch (e) {
|
|
26
|
-
const isFake = context.getValue(name, "documentType") === type_1.EDocumentType.Fake;
|
|
27
|
-
if (isFake && /Should run all hot steps/.test(e.message))
|
|
28
|
-
return;
|
|
29
|
-
throw e;
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
return processor;
|
|
14
|
+
function createHotIncrementalProcessor(name, src, temp, target, webpackCases) {
|
|
15
|
+
return (0, hot_1.createHotProcessor)(name, src, temp, target, true);
|
|
33
16
|
}
|
|
34
17
|
function getHotCreator(target, webpackCases) {
|
|
35
18
|
const key = JSON.stringify({ target, webpackCases });
|
|
@@ -38,8 +21,8 @@ function getHotCreator(target, webpackCases) {
|
|
|
38
21
|
clean: true,
|
|
39
22
|
describe: true,
|
|
40
23
|
target,
|
|
41
|
-
steps: ({ name, target }) => [
|
|
42
|
-
createHotIncrementalProcessor(name, target, webpackCases)
|
|
24
|
+
steps: ({ name, target, src, temp, dist }) => [
|
|
25
|
+
createHotIncrementalProcessor(name, src, temp || node_path_1.default.resolve(dist, "temp"), target, webpackCases)
|
|
43
26
|
],
|
|
44
27
|
runner: {
|
|
45
28
|
key: (context, name, file) => name,
|
|
@@ -50,9 +33,9 @@ function getHotCreator(target, webpackCases) {
|
|
|
50
33
|
}
|
|
51
34
|
return hotCreators.get(key);
|
|
52
35
|
}
|
|
53
|
-
function createHotIncrementalCase(name, src, dist, target, webpackCases) {
|
|
36
|
+
function createHotIncrementalCase(name, src, dist, temp, target, webpackCases) {
|
|
54
37
|
const creator = getHotCreator(target, webpackCases);
|
|
55
|
-
creator.create(name, src, dist);
|
|
38
|
+
creator.create(name, src, dist, temp);
|
|
56
39
|
}
|
|
57
40
|
const watchCreators = new Map();
|
|
58
41
|
function getWatchCreator(options) {
|
|
@@ -79,12 +62,10 @@ function getWatchCreator(options) {
|
|
|
79
62
|
.map(name => ({ name }));
|
|
80
63
|
return runs.map((run, index) => index === 0
|
|
81
64
|
? (0, watch_1.createWatchInitialProcessor)(name, temp, run.name, watchState, {
|
|
82
|
-
incremental: true
|
|
83
|
-
ignoreNotFriendlyForIncrementalWarnings: options.ignoreNotFriendlyForIncrementalWarnings
|
|
65
|
+
incremental: true
|
|
84
66
|
})
|
|
85
67
|
: (0, watch_1.createWatchStepProcessor)(name, temp, run.name, watchState, {
|
|
86
|
-
incremental: true
|
|
87
|
-
ignoreNotFriendlyForIncrementalWarnings: options.ignoreNotFriendlyForIncrementalWarnings
|
|
68
|
+
incremental: true
|
|
88
69
|
}));
|
|
89
70
|
},
|
|
90
71
|
concurrent: true
|
package/dist/case/index.d.ts
CHANGED
|
@@ -1,20 +1,31 @@
|
|
|
1
1
|
export { createBuiltinCase } from "./builtin";
|
|
2
2
|
export { createCacheCase } from "./cache";
|
|
3
|
+
export type { TCompilerCaseConfig } from "./compiler";
|
|
3
4
|
export { createCompilerCase } from "./compiler";
|
|
5
|
+
export type { TConfigCaseConfig } from "./config";
|
|
4
6
|
export { createConfigCase } from "./config";
|
|
7
|
+
export type { TDefaultsCaseConfig } from "./defaults";
|
|
5
8
|
export { createDefaultsCase, getRspackDefaultConfig } from "./defaults";
|
|
9
|
+
export type { TDiagnosticOptions } from "./diagnostic";
|
|
6
10
|
export { createDiagnosticCase } from "./diagnostic";
|
|
7
11
|
export { createDiffCase } from "./diff";
|
|
12
|
+
export type { TErrorCaseConfig } from "./error";
|
|
8
13
|
export { createErrorCase } from "./error";
|
|
9
14
|
export { createEsmOutputCase } from "./esm-output";
|
|
15
|
+
export { createExampleCase } from "./example";
|
|
16
|
+
export type { THashCaseConfig } from "./hash";
|
|
10
17
|
export { createHashCase } from "./hash";
|
|
18
|
+
export type { THookCaseConfig } from "./hook";
|
|
11
19
|
export { createHookCase } from "./hook";
|
|
12
20
|
export { createHotCase } from "./hot";
|
|
13
21
|
export { createHotStepCase } from "./hot-step";
|
|
14
22
|
export { createHotIncrementalCase, createWatchIncrementalCase } from "./incremental";
|
|
23
|
+
export type { TMultiCompilerCaseConfig } from "./multi-compiler";
|
|
24
|
+
export { createMultiCompilerCase } from "./multi-compiler";
|
|
15
25
|
export { createNativeWatcher } from "./native-watcher";
|
|
16
|
-
export { createHotNormalCase, createNormalCase } from "./normal";
|
|
26
|
+
export { createDevNormalCase, createHotNormalCase, createNormalCase, createProdNormalCase } from "./normal";
|
|
17
27
|
export { createSerialCase } from "./serial";
|
|
28
|
+
export type { TStatsAPICaseConfig } from "./stats-api";
|
|
18
29
|
export { createStatsAPICase } from "./stats-api";
|
|
19
30
|
export { createStatsOutputCase } from "./stats-output";
|
|
20
31
|
export { createTreeShakingCase } from "./treeshaking";
|
package/dist/case/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createWatchCase = exports.createTreeShakingCase = exports.createStatsOutputCase = exports.createStatsAPICase = exports.createSerialCase = exports.createNormalCase = exports.createHotNormalCase = exports.createNativeWatcher = exports.createWatchIncrementalCase = exports.createHotIncrementalCase = exports.createHotStepCase = exports.createHotCase = exports.createHookCase = exports.createHashCase = exports.createEsmOutputCase = exports.createErrorCase = exports.createDiffCase = exports.createDiagnosticCase = exports.getRspackDefaultConfig = exports.createDefaultsCase = exports.createConfigCase = exports.createCompilerCase = exports.createCacheCase = exports.createBuiltinCase = void 0;
|
|
3
|
+
exports.createWatchCase = exports.createTreeShakingCase = exports.createStatsOutputCase = exports.createStatsAPICase = exports.createSerialCase = exports.createProdNormalCase = exports.createNormalCase = exports.createHotNormalCase = exports.createDevNormalCase = exports.createNativeWatcher = exports.createMultiCompilerCase = exports.createWatchIncrementalCase = exports.createHotIncrementalCase = exports.createHotStepCase = exports.createHotCase = exports.createHookCase = exports.createHashCase = exports.createExampleCase = exports.createEsmOutputCase = exports.createErrorCase = exports.createDiffCase = exports.createDiagnosticCase = exports.getRspackDefaultConfig = exports.createDefaultsCase = exports.createConfigCase = exports.createCompilerCase = exports.createCacheCase = exports.createBuiltinCase = void 0;
|
|
4
4
|
var builtin_1 = require("./builtin");
|
|
5
5
|
Object.defineProperty(exports, "createBuiltinCase", { enumerable: true, get: function () { return builtin_1.createBuiltinCase; } });
|
|
6
6
|
var cache_1 = require("./cache");
|
|
@@ -20,6 +20,8 @@ var error_1 = require("./error");
|
|
|
20
20
|
Object.defineProperty(exports, "createErrorCase", { enumerable: true, get: function () { return error_1.createErrorCase; } });
|
|
21
21
|
var esm_output_1 = require("./esm-output");
|
|
22
22
|
Object.defineProperty(exports, "createEsmOutputCase", { enumerable: true, get: function () { return esm_output_1.createEsmOutputCase; } });
|
|
23
|
+
var example_1 = require("./example");
|
|
24
|
+
Object.defineProperty(exports, "createExampleCase", { enumerable: true, get: function () { return example_1.createExampleCase; } });
|
|
23
25
|
var hash_1 = require("./hash");
|
|
24
26
|
Object.defineProperty(exports, "createHashCase", { enumerable: true, get: function () { return hash_1.createHashCase; } });
|
|
25
27
|
var hook_1 = require("./hook");
|
|
@@ -31,11 +33,15 @@ Object.defineProperty(exports, "createHotStepCase", { enumerable: true, get: fun
|
|
|
31
33
|
var incremental_1 = require("./incremental");
|
|
32
34
|
Object.defineProperty(exports, "createHotIncrementalCase", { enumerable: true, get: function () { return incremental_1.createHotIncrementalCase; } });
|
|
33
35
|
Object.defineProperty(exports, "createWatchIncrementalCase", { enumerable: true, get: function () { return incremental_1.createWatchIncrementalCase; } });
|
|
36
|
+
var multi_compiler_1 = require("./multi-compiler");
|
|
37
|
+
Object.defineProperty(exports, "createMultiCompilerCase", { enumerable: true, get: function () { return multi_compiler_1.createMultiCompilerCase; } });
|
|
34
38
|
var native_watcher_1 = require("./native-watcher");
|
|
35
39
|
Object.defineProperty(exports, "createNativeWatcher", { enumerable: true, get: function () { return native_watcher_1.createNativeWatcher; } });
|
|
36
40
|
var normal_1 = require("./normal");
|
|
41
|
+
Object.defineProperty(exports, "createDevNormalCase", { enumerable: true, get: function () { return normal_1.createDevNormalCase; } });
|
|
37
42
|
Object.defineProperty(exports, "createHotNormalCase", { enumerable: true, get: function () { return normal_1.createHotNormalCase; } });
|
|
38
43
|
Object.defineProperty(exports, "createNormalCase", { enumerable: true, get: function () { return normal_1.createNormalCase; } });
|
|
44
|
+
Object.defineProperty(exports, "createProdNormalCase", { enumerable: true, get: function () { return normal_1.createProdNormalCase; } });
|
|
39
45
|
var serial_1 = require("./serial");
|
|
40
46
|
Object.defineProperty(exports, "createSerialCase", { enumerable: true, get: function () { return serial_1.createSerialCase; } });
|
|
41
47
|
var stats_api_1 = require("./stats-api");
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ECompilerType, ITestContext, TCompilation, TCompiler, TCompilerOptions, TCompilerStats, TCompilerStatsCompilation } from "../type";
|
|
2
|
+
export declare function createMultiCompilerCase(name: string, src: string, dist: string, testConfig: string): void;
|
|
3
|
+
export type TMultiCompilerCaseConfig = {
|
|
4
|
+
description: string;
|
|
5
|
+
error?: boolean;
|
|
6
|
+
skip?: boolean;
|
|
7
|
+
options?: (context: ITestContext) => TCompilerOptions<ECompilerType.Rspack>;
|
|
8
|
+
compiler?: (context: ITestContext, compiler: TCompiler<ECompilerType.Rspack>) => Promise<void>;
|
|
9
|
+
build?: (context: ITestContext, compiler: TCompiler<ECompilerType.Rspack>) => Promise<void>;
|
|
10
|
+
check?: ({ context, stats, files, compiler, compilation }: {
|
|
11
|
+
context: ITestContext;
|
|
12
|
+
stats?: TCompilerStatsCompilation<ECompilerType.Rspack>;
|
|
13
|
+
files?: Record<string, string>;
|
|
14
|
+
compiler: TCompiler<ECompilerType.Rspack>;
|
|
15
|
+
compilation?: TCompilation<ECompilerType.Rspack>;
|
|
16
|
+
}) => Promise<void>;
|
|
17
|
+
compilerCallback?: (error: Error | null, stats: TCompilerStats<ECompilerType.Rspack> | null) => void;
|
|
18
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createMultiCompilerCase = createMultiCompilerCase;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const memfs_1 = require("memfs");
|
|
9
|
+
const creator_1 = require("../test/creator");
|
|
10
|
+
const common_1 = require("./common");
|
|
11
|
+
function createMultiCompilerProcessor(name, caseConfig) {
|
|
12
|
+
return {
|
|
13
|
+
config: async (context) => {
|
|
14
|
+
const compiler = (0, common_1.getCompiler)(context, name);
|
|
15
|
+
const options = Object.assign([
|
|
16
|
+
{
|
|
17
|
+
name: "a",
|
|
18
|
+
context: node_path_1.default.join(__dirname, "fixtures"),
|
|
19
|
+
entry: "./a.js"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "b",
|
|
23
|
+
context: node_path_1.default.join(__dirname, "fixtures"),
|
|
24
|
+
entry: "./b.js"
|
|
25
|
+
}
|
|
26
|
+
], caseConfig.options?.(context) || {});
|
|
27
|
+
compiler.setOptions(options);
|
|
28
|
+
},
|
|
29
|
+
compiler: async (context) => {
|
|
30
|
+
const compiler = (0, common_1.getCompiler)(context, name);
|
|
31
|
+
if (caseConfig.compilerCallback) {
|
|
32
|
+
compiler.createCompilerWithCallback(caseConfig.compilerCallback);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
compiler.createCompiler();
|
|
36
|
+
}
|
|
37
|
+
const c = compiler.getCompiler();
|
|
38
|
+
c.outputFileSystem = (0, memfs_1.createFsFromVolume)(new memfs_1.Volume());
|
|
39
|
+
c.watchFileSystem = {
|
|
40
|
+
watch() {
|
|
41
|
+
// watch should return a watcher instance
|
|
42
|
+
// watcher instance should have close, pause and getInfo methods
|
|
43
|
+
return {
|
|
44
|
+
close: () => { },
|
|
45
|
+
pause: () => { },
|
|
46
|
+
getInfo: () => {
|
|
47
|
+
return {
|
|
48
|
+
changes: new Set(),
|
|
49
|
+
removals: new Set(),
|
|
50
|
+
fileTimeInfoEntries: new Map(),
|
|
51
|
+
directoryTimeInfoEntries: new Map()
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
await caseConfig.compiler?.(context, c);
|
|
58
|
+
},
|
|
59
|
+
build: async (context) => {
|
|
60
|
+
const compiler = (0, common_1.getCompiler)(context, name);
|
|
61
|
+
if (typeof caseConfig.build === "function") {
|
|
62
|
+
await caseConfig.build?.(context, compiler.getCompiler());
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
await compiler.build();
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
run: async (env, context) => { },
|
|
69
|
+
check: async (env, context) => { }
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const creator = new creator_1.BasicCaseCreator({
|
|
73
|
+
clean: true,
|
|
74
|
+
describe: false,
|
|
75
|
+
steps: ({ name, caseConfig }) => {
|
|
76
|
+
return [
|
|
77
|
+
createMultiCompilerProcessor(name, caseConfig)
|
|
78
|
+
];
|
|
79
|
+
},
|
|
80
|
+
concurrent: false
|
|
81
|
+
});
|
|
82
|
+
function createMultiCompilerCase(name, src, dist, testConfig) {
|
|
83
|
+
let caseConfigList = require(testConfig);
|
|
84
|
+
if (!Array.isArray(caseConfigList)) {
|
|
85
|
+
caseConfigList = [caseConfigList];
|
|
86
|
+
}
|
|
87
|
+
for (let i = 0; i < caseConfigList.length; i++) {
|
|
88
|
+
const caseConfig = caseConfigList[i];
|
|
89
|
+
if (caseConfig.skip) {
|
|
90
|
+
it.skip(`${name}[${i}]`, () => { });
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
creator.create(`${name}[${i}]`, src, dist, undefined, {
|
|
94
|
+
caseConfig,
|
|
95
|
+
description: () => caseConfig.description
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
package/dist/case/normal.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export declare function createNormalCase(name: string, src: string, dist: string): void;
|
|
2
2
|
export declare function createHotNormalCase(name: string, src: string, dist: string): void;
|
|
3
|
+
export declare function createDevNormalCase(name: string, src: string, dist: string): void;
|
|
4
|
+
export declare function createProdNormalCase(name: string, src: string, dist: string): void;
|
package/dist/case/normal.js
CHANGED
|
@@ -5,14 +5,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.createNormalCase = createNormalCase;
|
|
7
7
|
exports.createHotNormalCase = createHotNormalCase;
|
|
8
|
+
exports.createDevNormalCase = createDevNormalCase;
|
|
9
|
+
exports.createProdNormalCase = createProdNormalCase;
|
|
8
10
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
11
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
12
|
const core_1 = require("@rspack/core");
|
|
11
13
|
const creator_1 = require("../test/creator");
|
|
12
14
|
const common_1 = require("./common");
|
|
13
15
|
const runner_1 = require("./runner");
|
|
14
|
-
const NORMAL_CASES_ROOT = node_path_1.default.resolve(
|
|
15
|
-
const createCaseOptions = (hot) => {
|
|
16
|
+
const NORMAL_CASES_ROOT = node_path_1.default.resolve(__TEST_PATH__, "normalCases");
|
|
17
|
+
const createCaseOptions = (hot, mode) => {
|
|
16
18
|
return {
|
|
17
19
|
clean: true,
|
|
18
20
|
describe: false,
|
|
@@ -22,7 +24,7 @@ const createCaseOptions = (hot) => {
|
|
|
22
24
|
const compiler = (0, common_1.getCompiler)(context, name);
|
|
23
25
|
let options = defaultOptions(context, {
|
|
24
26
|
plugins: hot ? [new core_1.HotModuleReplacementPlugin()] : []
|
|
25
|
-
});
|
|
27
|
+
}, mode);
|
|
26
28
|
options = await (0, common_1.config)(context, name, ["rspack.config.js", "webpack.config.js"], options);
|
|
27
29
|
overrideOptions(context, options);
|
|
28
30
|
compiler.setOptions(options);
|
|
@@ -38,6 +40,9 @@ const createCaseOptions = (hot) => {
|
|
|
38
40
|
},
|
|
39
41
|
check: async (env, context) => {
|
|
40
42
|
await (0, common_1.check)(env, context, name);
|
|
43
|
+
},
|
|
44
|
+
after: async (context) => {
|
|
45
|
+
await (0, common_1.afterExecute)(context, name);
|
|
41
46
|
}
|
|
42
47
|
}
|
|
43
48
|
],
|
|
@@ -56,6 +61,14 @@ const hotCreator = new creator_1.BasicCaseCreator(createCaseOptions(true));
|
|
|
56
61
|
function createHotNormalCase(name, src, dist) {
|
|
57
62
|
hotCreator.create(name, src, dist);
|
|
58
63
|
}
|
|
64
|
+
const devCreator = new creator_1.BasicCaseCreator(createCaseOptions(false, "development"));
|
|
65
|
+
function createDevNormalCase(name, src, dist) {
|
|
66
|
+
devCreator.create(name, src, dist);
|
|
67
|
+
}
|
|
68
|
+
const prodCreator = new creator_1.BasicCaseCreator(createCaseOptions(false, "production"));
|
|
69
|
+
function createProdNormalCase(name, src, dist) {
|
|
70
|
+
prodCreator.create(name, src, dist);
|
|
71
|
+
}
|
|
59
72
|
function findBundle(context, options) {
|
|
60
73
|
const testConfig = context.getTestConfig();
|
|
61
74
|
if (typeof testConfig.findBundle === "function") {
|
|
@@ -64,7 +77,7 @@ function findBundle(context, options) {
|
|
|
64
77
|
const filename = options.output?.filename;
|
|
65
78
|
return typeof filename === "string" ? filename : undefined;
|
|
66
79
|
}
|
|
67
|
-
function defaultOptions(context, compilerOptions) {
|
|
80
|
+
function defaultOptions(context, compilerOptions, mode) {
|
|
68
81
|
let testConfig = {};
|
|
69
82
|
const testConfigPath = node_path_1.default.join(context.getSource(), "test.config.js");
|
|
70
83
|
if (node_fs_1.default.existsSync(testConfigPath)) {
|
|
@@ -80,11 +93,12 @@ function defaultOptions(context, compilerOptions) {
|
|
|
80
93
|
entry: `./${node_path_1.default.relative(NORMAL_CASES_ROOT, context.getSource())}/`,
|
|
81
94
|
target: compilerOptions?.target || "async-node",
|
|
82
95
|
devtool: compilerOptions?.devtool,
|
|
83
|
-
mode: compilerOptions?.mode || "none",
|
|
96
|
+
mode: compilerOptions?.mode || mode || "none",
|
|
84
97
|
optimization: compilerOptions?.mode
|
|
85
98
|
? {
|
|
86
|
-
|
|
99
|
+
emitOnErrors: true,
|
|
87
100
|
minimizer: [terserForTesting],
|
|
101
|
+
minimize: false,
|
|
88
102
|
...testConfig.optimization
|
|
89
103
|
}
|
|
90
104
|
: {
|
|
@@ -98,7 +112,7 @@ function defaultOptions(context, compilerOptions) {
|
|
|
98
112
|
usedExports: true,
|
|
99
113
|
mangleExports: true,
|
|
100
114
|
// CHANGE: rspack does not support `emitOnErrors` yet.
|
|
101
|
-
|
|
115
|
+
emitOnErrors: true,
|
|
102
116
|
concatenateModules: !!testConfig?.optimization?.concatenateModules,
|
|
103
117
|
innerGraph: true,
|
|
104
118
|
// CHANGE: size is not supported yet
|
|
@@ -106,6 +120,7 @@ function defaultOptions(context, compilerOptions) {
|
|
|
106
120
|
// chunkIds: "size",
|
|
107
121
|
moduleIds: "named",
|
|
108
122
|
chunkIds: "named",
|
|
123
|
+
minimize: false,
|
|
109
124
|
minimizer: [terserForTesting],
|
|
110
125
|
...compilerOptions?.optimization
|
|
111
126
|
},
|
|
@@ -181,17 +196,12 @@ function defaultOptions(context, compilerOptions) {
|
|
|
181
196
|
asyncWebAssembly: true,
|
|
182
197
|
topLevelAwait: true,
|
|
183
198
|
inlineConst: true,
|
|
184
|
-
lazyBarrel: true,
|
|
185
199
|
// CHANGE: rspack does not support `backCompat` yet.
|
|
186
200
|
// backCompat: false,
|
|
187
201
|
// CHANGE: Rspack enables `css` by default.
|
|
188
202
|
// Turning off here to fallback to webpack's default css processing logic.
|
|
189
203
|
...(compilerOptions?.module ? { outputModule: true } : {})
|
|
190
204
|
}
|
|
191
|
-
// infrastructureLogging: compilerOptions?.cache && {
|
|
192
|
-
// debug: true,
|
|
193
|
-
// console: createLogger(infraStructureLog)
|
|
194
|
-
// }
|
|
195
205
|
};
|
|
196
206
|
}
|
|
197
207
|
function overrideOptions(context, options) {
|
package/dist/case/runner.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ECompilerType, ITestContext, ITestEnv, ITestRunner, TCompilerStatsCompilation } from "../type";
|
|
2
2
|
export type THotStepRuntimeLangData = {
|
|
3
3
|
outdatedModules: string[];
|
|
4
4
|
outdatedDependencies: Record<string, string[]>;
|