Skip to content

Commit

Permalink
refactor(types): remove @ts-expect-error in Compiler and MultiCompiler (
Browse files Browse the repository at this point in the history
#7824)

* chore: update

* chore: update

* chore: update
  • Loading branch information
SoonIter authored Sep 10, 2024
1 parent b1b5504 commit f5c6a1b
Show file tree
Hide file tree
Showing 19 changed files with 105 additions and 120 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ module.exports = {
Object {
"message": " × Error: test push\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n",
"moduleTrace": Array [],
"stack": "Error: test push\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/error-test-push.js:10:31)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:460:41\\n at <cwd>packages/rspack/dist/Compiler.js:527:23",
"stack": "Error: test push\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/error-test-push.js:10:31)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:458:41\\n at <cwd>packages/rspack/dist/Compiler.js:525:23",
},
Object {
"loc": "1:0-33",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ module.exports = {
Object {
"message": " × Error: test unshift\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n",
"moduleTrace": Array [],
"stack": "Error: test unshift\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/error-test-shift.js:13:35)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:460:41\\n at <cwd>packages/rspack/dist/Compiler.js:527:23",
"stack": "Error: test unshift\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/error-test-shift.js:13:35)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:458:41\\n at <cwd>packages/rspack/dist/Compiler.js:525:23",
},
],
"warnings": Array [],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ module.exports = {
Object {
"message": " × Error: test splice\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n",
"moduleTrace": Array [],
"stack": "Error: test splice\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/error-test-splice-1.js:10:39)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:460:41\\n at <cwd>packages/rspack/dist/Compiler.js:527:23",
"stack": "Error: test splice\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/error-test-splice-1.js:10:39)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:458:41\\n at <cwd>packages/rspack/dist/Compiler.js:525:23",
},
],
"warnings": Array [],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ module.exports = {
Object {
"message": " × Error: test splice\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n",
"moduleTrace": Array [],
"stack": "Error: test splice\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/error-test-splice-2.js:10:39)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:460:41\\n at <cwd>packages/rspack/dist/Compiler.js:527:23",
"stack": "Error: test splice\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/error-test-splice-2.js:10:39)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:458:41\\n at <cwd>packages/rspack/dist/Compiler.js:525:23",
},
Object {
"loc": "1:0-33",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ module.exports = {
Object {
"message": " ⚠ Error: test push\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n",
"moduleTrace": Array [],
"stack": "Error: test push\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/warning-test-push.js:10:33)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:460:41\\n at <cwd>packages/rspack/dist/Compiler.js:527:23",
"stack": "Error: test push\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/warning-test-push.js:10:33)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:458:41\\n at <cwd>packages/rspack/dist/Compiler.js:525:23",
},
Object {
"message": " ⚠ Module parse warning:\\n ╰─▶ ⚠ Unsupported feature: require.main.require() is not supported by Rspack.\\n ╭────\\n 1 │ require.main.require('./file');\\n · ──────────────────────────────\\n ╰────\\n \\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ module.exports = {
Object {
"message": " ⚠ Error: test unshift\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n",
"moduleTrace": Array [],
"stack": "Error: test unshift\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/warning-test-shift.js:13:37)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:460:41\\n at <cwd>packages/rspack/dist/Compiler.js:527:23",
"stack": "Error: test unshift\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/warning-test-shift.js:13:37)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:458:41\\n at <cwd>packages/rspack/dist/Compiler.js:525:23",
},
],
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ module.exports = {
Object {
"message": " ⚠ Error: test splice\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n",
"moduleTrace": Array [],
"stack": "Error: test splice\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/warning-test-splice-1.js:10:41)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:460:41\\n at <cwd>packages/rspack/dist/Compiler.js:527:23",
"stack": "Error: test splice\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/warning-test-splice-1.js:10:41)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:458:41\\n at <cwd>packages/rspack/dist/Compiler.js:525:23",
},
],
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ module.exports = {
Object {
"message": " ⚠ Error: test splice\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n │ at xxx\\n",
"moduleTrace": Array [],
"stack": "Error: test splice\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/warning-test-splice-2.js:10:41)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:460:41\\n at <cwd>packages/rspack/dist/Compiler.js:527:23",
"stack": "Error: test splice\\n at Object.fn (<cwd>packages/rspack-test-tools/tests/errorCases/warning-test-splice-2.js:10:41)\\n at next (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:523:25)\\n at AsyncSeriesHook.callAsyncStageRange (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:543:9)\\n at AsyncSeriesHook.callAsync (<cwd>node_modules/.pnpm/@[email protected]/node_modules/@rspack/lite-tapable/dist/index.js:82:21)\\n at <cwd>packages/rspack/dist/Compiler.js:458:41\\n at <cwd>packages/rspack/dist/Compiler.js:525:23",
},
Object {
"message": " ⚠ Module parse warning:\\n ╰─▶ ⚠ Unsupported feature: require.main.require() is not supported by Rspack.\\n ╭────\\n 1 │ require.main.require('./file');\\n · ──────────────────────────────\\n ╰────\\n \\n",
Expand Down
16 changes: 8 additions & 8 deletions packages/rspack/etc/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ import * as liteTapable from '@rspack/lite-tapable';
import { Logger as Logger_2 } from './logging/Logger';
import type { ModuleDTO } from '@rspack/binding';
import { RawCopyPattern } from '@rspack/binding';
import type { RawCssExtractPluginOption } from '@rspack/binding';
import { RawCssExtractPluginOption } from '@rspack/binding';
import type { RawFuncUseCtx } from '@rspack/binding';
import { RawIgnorePluginOptions } from '@rspack/binding';
import { RawOptions } from '@rspack/binding';
Expand Down Expand Up @@ -7269,11 +7269,11 @@ export class MultiStats {
class MultiWatching {
constructor(watchings: Watching[], compiler: MultiCompiler);
// (undocumented)
close(callback: any): void;
close(callback: Callback<Error, void>): void;
// (undocumented)
compiler: MultiCompiler;
// (undocumented)
invalidate(callback: any): void;
invalidate(callback: Callback<Error, void>): void;
// (undocumented)
resume(): void;
// (undocumented)
Expand Down Expand Up @@ -15733,7 +15733,7 @@ interface WatchFileSystem {

// @public (undocumented)
export class Watching {
constructor(compiler: Compiler, watchOptions: WatchOptions, handler: (error?: Error, stats?: Stats) => void);
constructor(compiler: Compiler, watchOptions: WatchOptions, handler: Callback<Error, Stats>);
// (undocumented)
blocked: boolean;
// (undocumented)
Expand All @@ -15743,21 +15743,21 @@ export class Watching {
// (undocumented)
compiler: Compiler;
// (undocumented)
handler: (error?: Error, stats?: Stats) => void;
handler: Callback<Error, Stats>;
// (undocumented)
invalid: boolean;
// (undocumented)
invalidate(callback?: Callback<Error, void>): void;
// (undocumented)
isBlocked?: () => boolean;
isBlocked: () => boolean;
// (undocumented)
lastWatcherStartTime: number;
// (undocumented)
lazyCompilationInvalidate(files: Set<string>): void;
// (undocumented)
onChange?: () => void;
onChange: () => void;
// (undocumented)
onInvalid?: () => void;
onInvalid: () => void;
// (undocumented)
pausedWatcher?: Watcher;
// (undocumented)
Expand Down
32 changes: 17 additions & 15 deletions packages/rspack/src/Compiler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ import type {
EntryNormalized,
OutputNormalized,
RspackOptionsNormalized,
RspackPluginInstance
RspackPluginInstance,
WatchOptions
} from "./config";
import type {
InputFileSystem,
Expand Down Expand Up @@ -328,8 +329,7 @@ class Compiler {
let normalizedChildName = childName;
if (typeof normalizedName === "function") {
if (typeof normalizedChildName === "function") {
// @ts-expect-error
return this.getInfrastructureLogger(_ => {
return this.getInfrastructureLogger(() => {
if (typeof normalizedName === "function") {
normalizedName = normalizedName();
if (!normalizedName) {
Expand Down Expand Up @@ -391,13 +391,14 @@ class Compiler {
handler: liteTapable.Callback<Error, Stats>
): Watching {
if (this.running) {
// @ts-expect-error
return handler(new ConcurrentCompilationError());
// cannot be resolved without assertion
// copy from webpack
// Type 'void' is not assignable to type 'Watching'.
return handler(new ConcurrentCompilationError()) as unknown as Watching;
}
this.running = true;
this.watchMode = true;
// @ts-expect-error
this.watching = new Watching(this, watchOptions, handler);
this.watching = new Watching(this, watchOptions as WatchOptions, handler);
return this.watching;
}

Expand All @@ -411,8 +412,7 @@ class Compiler {
const startTime = Date.now();
this.running = true;
const doRun = () => {
// @ts-expect-error
const finalCallback = (err, stats?) => {
const finalCallback = (err: Error | null, stats?: Stats) => {
this.idle = true;
this.cache.beginIdle();
this.idle = true;
Expand All @@ -423,7 +423,7 @@ class Compiler {
if (callback) {
callback(err, stats);
}
this.hooks.afterDone.call(stats);
this.hooks.afterDone.call(stats!);
};
this.hooks.beforeRun.callAsync(this, err => {
if (err) {
Expand Down Expand Up @@ -583,11 +583,13 @@ class Compiler {
)
];

for (const name in this.hooks) {
if (canInherentFromParent(name as keyof Compiler["hooks"])) {
//@ts-ignore
for (const hookName in this.hooks) {
type HookNames = keyof Compiler["hooks"];

const name = hookName as unknown as HookNames;

if (canInherentFromParent(name)) {
if (childCompiler.hooks[name]) {
//@ts-ignore
childCompiler.hooks[name].taps = this.hooks[name].taps.slice();
}
}
Expand Down Expand Up @@ -1313,7 +1315,7 @@ class Compiler {
}
}
if (this.#nonSkippableRegisters.join() !== kinds.join()) {
this.#getInstance((error, instance) => {
this.#getInstance((_error, instance) => {
instance!.setNonSkippableRegisters(kinds);
this.#nonSkippableRegisters = kinds;
});
Expand Down
Loading

3 comments on commit f5c6a1b

@rspack-bot
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Benchmark detail: Open

Name Base (2024-09-10 8134f86) Current Change
10000_development-mode + exec 2.2 s ± 26 ms 2.24 s ± 36 ms +1.50 %
10000_development-mode_hmr + exec 689 ms ± 14 ms 724 ms ± 5.4 ms +5.09 %
10000_production-mode + exec 2.86 s ± 43 ms 2.84 s ± 43 ms -0.43 %
arco-pro_development-mode + exec 1.88 s ± 74 ms 1.85 s ± 65 ms -1.44 %
arco-pro_development-mode_hmr + exec 434 ms ± 2.5 ms 435 ms ± 2.3 ms +0.18 %
arco-pro_production-mode + exec 3.24 s ± 123 ms 3.27 s ± 81 ms +0.90 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.31 s ± 86 ms 3.36 s ± 68 ms +1.51 %
threejs_development-mode_10x + exec 1.69 s ± 16 ms 1.69 s ± 9.3 ms -0.24 %
threejs_development-mode_10x_hmr + exec 808 ms ± 13 ms 806 ms ± 13 ms -0.21 %
threejs_production-mode_10x + exec 5.18 s ± 34 ms 5.18 s ± 28 ms +0.05 %

Threshold exceeded: ["10000_development-mode_hmr + exec"]

@rspack-bot
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Ran ecosystem CI: Open

suite result
modernjs ✅ success
_selftest ✅ success
nx ❌ failure
rspress ✅ success
rslib ❌ failure
rsbuild ❌ failure
examples ✅ success

@rspack-bot
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Benchmark detail: Open

Name Base (2024-09-10 8134f86) Current Change
10000_development-mode + exec 2.2 s ± 26 ms 2.24 s ± 36 ms +1.78 %
10000_development-mode_hmr + exec 689 ms ± 14 ms 723 ms ± 9 ms +5.00 %
10000_production-mode + exec 2.86 s ± 43 ms 2.83 s ± 40 ms -0.91 %
arco-pro_development-mode + exec 1.88 s ± 74 ms 1.84 s ± 83 ms -2.00 %
arco-pro_development-mode_hmr + exec 434 ms ± 2.5 ms 435 ms ± 3.5 ms +0.13 %
arco-pro_production-mode + exec 3.24 s ± 123 ms 3.28 s ± 71 ms +1.03 %
arco-pro_production-mode_generate-package-json-webpack-plugin + exec 3.31 s ± 86 ms 3.32 s ± 58 ms +0.27 %
threejs_development-mode_10x + exec 1.69 s ± 16 ms 1.68 s ± 13 ms -0.27 %
threejs_development-mode_10x_hmr + exec 808 ms ± 13 ms 806 ms ± 13 ms -0.18 %
threejs_production-mode_10x + exec 5.18 s ± 34 ms 5.21 s ± 30 ms +0.55 %

Please sign in to comment.