From 19714775374b78326f90f2e8307fe77eab48144f Mon Sep 17 00:00:00 2001 From: 1001mei <77192251+1001mei@users.noreply.github.com> Date: Wed, 10 Apr 2024 18:35:03 +0800 Subject: [PATCH 01/14] Integrate Java compiler into frontend --- src/commons/utils/JavaHelper.ts | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/commons/utils/JavaHelper.ts b/src/commons/utils/JavaHelper.ts index 21ddc66f51..2b9899ff7a 100644 --- a/src/commons/utils/JavaHelper.ts +++ b/src/commons/utils/JavaHelper.ts @@ -1,3 +1,5 @@ +import { compileFromSource } from 'java-slang/dist/compiler'; +import { BinaryWriter } from 'java-slang/dist/compiler/binary-writer'; import setupJVM, { parseBin } from 'java-slang/dist/jvm'; import { createModuleProxy, loadCachedFiles } from 'java-slang/dist/jvm/utils/integration'; import { Context } from 'js-slang'; @@ -7,7 +9,23 @@ import Constants from './Constants'; import DisplayBufferService from './DisplayBufferService'; export async function javaRun(javaCode: string, context: Context) { - let compiled = {}; + let compiled = {} + + try { + const classFile = compileFromSource(javaCode); + compiled = { + "Main.class": Buffer.from(new BinaryWriter().generateBinary(classFile)).toString('base64') + }; + } catch (e) { + context.errors.push({ + type: "CompileError" as any, + severity: "Error" as any, + location: { start: { line: -1, column: -1 }, end: { line: -1, column: -1 } }, + explain: () => e, + elaborate: () => e + }); + return Promise.resolve({ status: 'error' }); + } let files = {}; let buffer: string[] = []; @@ -86,15 +104,6 @@ export async function javaRun(javaCode: string, context: Context) { }); }; - // FIXME: Remove when the compiler is working - try { - const json = JSON.parse(javaCode); - compiled = json; - } catch (e) { - stderr(e); - return Promise.resolve({ status: 'error' }); - } - // load cached classfiles from IndexedDB return loadCachedFiles(() => // Initial loader to fetch commonly used classfiles From 1f5c9f12fd88030e699fb15b29b9ad7bee32f54c Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Wed, 10 Apr 2024 19:59:55 +0800 Subject: [PATCH 02/14] Add typechecker from java-slang --- src/commons/utils/JavaHelper.ts | 52 +++++++++++++++------------------ 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/src/commons/utils/JavaHelper.ts b/src/commons/utils/JavaHelper.ts index 2b9899ff7a..2078d03fd9 100644 --- a/src/commons/utils/JavaHelper.ts +++ b/src/commons/utils/JavaHelper.ts @@ -2,6 +2,7 @@ import { compileFromSource } from 'java-slang/dist/compiler'; import { BinaryWriter } from 'java-slang/dist/compiler/binary-writer'; import setupJVM, { parseBin } from 'java-slang/dist/jvm'; import { createModuleProxy, loadCachedFiles } from 'java-slang/dist/jvm/utils/integration'; +import { convertErrorsToReadableMsgs, parseProgram, typeCheck } from 'java-slang/dist/types'; import { Context } from 'js-slang'; import loadSourceModules from 'js-slang/dist/modules/loader'; @@ -9,21 +10,32 @@ import Constants from './Constants'; import DisplayBufferService from './DisplayBufferService'; export async function javaRun(javaCode: string, context: Context) { - let compiled = {} + let compiled = {}; + + const stderr = (type: 'TypeCheck' | 'Compile' | 'Runtime', msg: string) => { + context.errors.push({ + type: type as any, + severity: 'Error' as any, + location: { start: { line: -1, column: -1 }, end: { line: -1, column: -1 } }, + explain: () => msg, + elaborate: () => msg + }); + }; + + const typeCheckResult = typeCheck(parseProgram(javaCode)); + if (typeCheckResult.hasTypeErrors) { + const typeErrMsg = convertErrorsToReadableMsgs(javaCode, typeCheckResult.errors).join('\n'); + stderr('TypeCheck', typeErrMsg); + return Promise.resolve({ status: 'error' }); + } try { const classFile = compileFromSource(javaCode); compiled = { - "Main.class": Buffer.from(new BinaryWriter().generateBinary(classFile)).toString('base64') + 'Main.class': Buffer.from(new BinaryWriter().generateBinary(classFile)).toString('base64') }; } catch (e) { - context.errors.push({ - type: "CompileError" as any, - severity: "Error" as any, - location: { start: { line: -1, column: -1 }, end: { line: -1, column: -1 } }, - explain: () => e, - elaborate: () => e - }); + stderr('TypeCheck', e); return Promise.resolve({ status: 'error' }); } @@ -64,6 +76,7 @@ export async function javaRun(javaCode: string, context: Context) { } return parseBin(new DataView(bytes.buffer)); }; + const loadNatives = async (path: string) => { // dynamic load modules if (path.startsWith('modules')) { @@ -74,6 +87,7 @@ export async function javaRun(javaCode: string, context: Context) { } return await import(`java-slang/dist/jvm/stdlib/${path}.js`); }; + const stdout = (str: string) => { if (str.endsWith('\n')) { buffer.push(str); @@ -85,24 +99,6 @@ export async function javaRun(javaCode: string, context: Context) { buffer.push(str); } }; - const stderr = (msg: string) => { - context.errors.push({ - type: 'Runtime' as any, - severity: 'Error' as any, - location: { - start: { - line: -1, - column: -1 - }, - end: { - line: -1, - column: -1 - } - }, - explain: () => msg, - elaborate: () => msg - }); - }; // load cached classfiles from IndexedDB return loadCachedFiles(() => @@ -128,7 +124,7 @@ export async function javaRun(javaCode: string, context: Context) { readFileSync: readClassFiles, readFile: loadNatives, stdout, - stderr, + stderr: (msg: string) => stderr('Runtime', msg), onFinish: () => { resolve( context.errors.length From 370fde9d3dc04f1adf8fe0bef8e82925ab48aa16 Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Thu, 11 Apr 2024 00:30:58 +0800 Subject: [PATCH 03/14] Add program terminated succesfully output to Java --- src/commons/utils/JavaHelper.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/commons/utils/JavaHelper.ts b/src/commons/utils/JavaHelper.ts index 2078d03fd9..a57adc4279 100644 --- a/src/commons/utils/JavaHelper.ts +++ b/src/commons/utils/JavaHelper.ts @@ -9,6 +9,12 @@ import loadSourceModules from 'js-slang/dist/modules/loader'; import Constants from './Constants'; import DisplayBufferService from './DisplayBufferService'; +class ProgramTerminatedSuccessfully { + toString() { + return 'Program terminated successfully'; + } +} + export async function javaRun(javaCode: string, context: Context) { let compiled = {}; @@ -129,7 +135,11 @@ export async function javaRun(javaCode: string, context: Context) { resolve( context.errors.length ? { status: 'error' } - : { status: 'finished', context, value: '' } + : { + status: 'finished', + context, + value: new ProgramTerminatedSuccessfully() + } ); } }, From 65fbd446de4bb077c28535945c781798e529c128 Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Thu, 11 Apr 2024 11:56:13 +0800 Subject: [PATCH 04/14] Bump java-slang to 1.0.7 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 40c3ee9e69..4040a0a061 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "flexboxgrid": "^6.3.1", "flexboxgrid-helpers": "^1.1.3", "hastscript": "^9.0.0", - "java-slang": "^1.0.6", + "java-slang": "^1.0.7", "js-slang": "^1.0.65", "js-yaml": "^4.1.0", "konva": "^9.2.0", diff --git a/yarn.lock b/yarn.lock index 9bf09f8e38..11c0c798de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8024,10 +8024,10 @@ java-parser@^2.0.5: chevrotain-allstar "0.3.1" lodash "4.17.21" -java-slang@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/java-slang/-/java-slang-1.0.6.tgz#34a68954a8dfb5bde8572d49a6bea170d7026749" - integrity sha512-CHq2s9xuzuuPfygRp9pQncfPfIuzpHivXn3wfy4QBiQ801IvdVFL3w/nV6qQn6GUG+kvOU+qCuxUFsFH8X5Dhg== +java-slang@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/java-slang/-/java-slang-1.0.7.tgz#9d829ad8ae74d9fd1183d1f0ab656c207b00f67b" + integrity sha512-N2mfYi9UCezDTeJ8uWhgddRe6Q2KrGldLZGSo2SgVq4v4ij2m/eT6p2wGdRM2rMXKvaZ7bDxxUOVe7nrmobnUQ== dependencies: "@types/lodash" "^4.14.198" java-parser "^2.0.5" From 8c944e949f4af172bbc8188de398b22462352a42 Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Thu, 11 Apr 2024 12:02:01 +0800 Subject: [PATCH 05/14] Remove program terminated output from java in frontend --- src/commons/utils/JavaHelper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commons/utils/JavaHelper.ts b/src/commons/utils/JavaHelper.ts index a57adc4279..a2178866f3 100644 --- a/src/commons/utils/JavaHelper.ts +++ b/src/commons/utils/JavaHelper.ts @@ -11,7 +11,7 @@ import DisplayBufferService from './DisplayBufferService'; class ProgramTerminatedSuccessfully { toString() { - return 'Program terminated successfully'; + return ' '; } } From 196ecf893cf3a0ca47a8d17d609c25846f2a65ad Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Thu, 11 Apr 2024 12:03:25 +0800 Subject: [PATCH 06/14] Change ProgramTerminatedSuccessfully to anonymous class in java --- src/commons/utils/JavaHelper.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/commons/utils/JavaHelper.ts b/src/commons/utils/JavaHelper.ts index a2178866f3..8942c3679c 100644 --- a/src/commons/utils/JavaHelper.ts +++ b/src/commons/utils/JavaHelper.ts @@ -9,12 +9,6 @@ import loadSourceModules from 'js-slang/dist/modules/loader'; import Constants from './Constants'; import DisplayBufferService from './DisplayBufferService'; -class ProgramTerminatedSuccessfully { - toString() { - return ' '; - } -} - export async function javaRun(javaCode: string, context: Context) { let compiled = {}; @@ -138,7 +132,11 @@ export async function javaRun(javaCode: string, context: Context) { : { status: 'finished', context, - value: new ProgramTerminatedSuccessfully() + value: new (class { + toString() { + return ' '; + } + })() } ); } From 56ef155c7e07dcea067860056f2c74c748d8be0d Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Thu, 11 Apr 2024 15:01:23 +0800 Subject: [PATCH 07/14] Bump java-slang to 1.0.8 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4040a0a061..d61022c707 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "flexboxgrid": "^6.3.1", "flexboxgrid-helpers": "^1.1.3", "hastscript": "^9.0.0", - "java-slang": "^1.0.7", + "java-slang": "^1.0.8", "js-slang": "^1.0.65", "js-yaml": "^4.1.0", "konva": "^9.2.0", diff --git a/yarn.lock b/yarn.lock index 11c0c798de..c873e5b998 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8024,10 +8024,10 @@ java-parser@^2.0.5: chevrotain-allstar "0.3.1" lodash "4.17.21" -java-slang@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/java-slang/-/java-slang-1.0.7.tgz#9d829ad8ae74d9fd1183d1f0ab656c207b00f67b" - integrity sha512-N2mfYi9UCezDTeJ8uWhgddRe6Q2KrGldLZGSo2SgVq4v4ij2m/eT6p2wGdRM2rMXKvaZ7bDxxUOVe7nrmobnUQ== +java-slang@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/java-slang/-/java-slang-1.0.8.tgz#ee3209526674506472bb09ac9bf7f02e4f59bb9a" + integrity sha512-xLOyJ8dBLwHbbubBBxgb20XS3gvftlq3fdx7ELuhOA9iaVxtfNcd5LKVqH+wlgUsaVH6PjtdpiGrLrsJxhdabA== dependencies: "@types/lodash" "^4.14.198" java-parser "^2.0.5" From 15b1544280cf52fc96623c91d1a0db7e2ee7a029 Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Thu, 11 Apr 2024 20:05:04 +0800 Subject: [PATCH 08/14] Bump java-slang to 1.0.9 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d61022c707..dfae39d4f2 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "flexboxgrid": "^6.3.1", "flexboxgrid-helpers": "^1.1.3", "hastscript": "^9.0.0", - "java-slang": "^1.0.8", + "java-slang": "^1.0.9", "js-slang": "^1.0.65", "js-yaml": "^4.1.0", "konva": "^9.2.0", diff --git a/yarn.lock b/yarn.lock index c873e5b998..e5d40a483c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8024,10 +8024,10 @@ java-parser@^2.0.5: chevrotain-allstar "0.3.1" lodash "4.17.21" -java-slang@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/java-slang/-/java-slang-1.0.8.tgz#ee3209526674506472bb09ac9bf7f02e4f59bb9a" - integrity sha512-xLOyJ8dBLwHbbubBBxgb20XS3gvftlq3fdx7ELuhOA9iaVxtfNcd5LKVqH+wlgUsaVH6PjtdpiGrLrsJxhdabA== +java-slang@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/java-slang/-/java-slang-1.0.9.tgz#a29045e71ff46d7f250857279113c39120a6df2c" + integrity sha512-GzdFXCLHw8rIGIYe24xu6J0+U0jl2O08jZfEXKGI6EZxWFoJaYSVWcnv8/6J1jAeKuHMbDYBXleQNv4LVLsYRg== dependencies: "@types/lodash" "^4.14.198" java-parser "^2.0.5" From 8a7386ebcee1eab6525da719fca02f71fd7a967f Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Thu, 11 Apr 2024 22:46:33 +0800 Subject: [PATCH 09/14] Add process/browser to craco polyfill --- craco.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/craco.config.js b/craco.config.js index 6c8c6a5d34..32b0c6b85d 100644 --- a/craco.config.js +++ b/craco.config.js @@ -47,9 +47,10 @@ const cracoConfig = { 'https': require.resolve('https-browserify'), 'os': require.resolve('os-browserify/browser'), 'path/posix': require.resolve('path-browserify'), + 'process/browser': require.resolve('process/browser'), 'stream': require.resolve('stream-browserify'), 'timers': require.resolve('timers-browserify'), - 'url': require.resolve('url/') + 'url': require.resolve('url/'), }; // workaround .mjs files by Acorn From b6ca50df04dbbc2895e148e4ee0ab59f18761463 Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Thu, 11 Apr 2024 23:20:10 +0800 Subject: [PATCH 10/14] Add java-parser to jest transform ignore patterns --- craco.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/craco.config.js b/craco.config.js index 32b0c6b85d..f344daab13 100644 --- a/craco.config.js +++ b/craco.config.js @@ -139,6 +139,7 @@ const cracoConfig = { 'split-on-first', 'filter-obj', '@sourceacademy/c-slang', + 'java-parser' ), '^.+\\.module\\.(css|sass|scss)$' ]; From 09a4c4c60fd51cc9d15bd363a3007a031fdbdaaa Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Sat, 13 Apr 2024 17:02:30 +0800 Subject: [PATCH 11/14] Bump java-slang to 1.0.13 --- package.json | 4 ++-- src/commons/utils/JavaHelper.ts | 7 +++---- yarn.lock | 8 ++++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index bd110bb042..e6f1a45057 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "format:scss": "prettier --list-different --parser scss \"src/**/*.scss\"", "format:ci": "yarn run format:tsx && yarn run format:scss", "start": "cross-env EXTEND_ESLINT=true BROWSER=none PORT=8000 craco start", - "test": "cross-env TZ=UTF-8 craco test", + "test": "cross-env TZ=UTF-8 NODE_OPTIONS=--experimental-vm-modules craco test", "test-coveralls": "./scripts/test-coveralls.sh", "update-ui-snapshots": "jest --updateSnapshot", "eslint": "eslint --ext \".js,.jsx,.ts,.tsx\" src", @@ -51,8 +51,8 @@ "flexboxgrid": "^6.3.1", "flexboxgrid-helpers": "^1.1.3", "hastscript": "^9.0.0", - "java-slang": "^1.0.9", "js-slang": "^1.0.66", + "java-slang": "^1.0.13", "js-yaml": "^4.1.0", "konva": "^9.2.0", "lodash": "^4.17.21", diff --git a/src/commons/utils/JavaHelper.ts b/src/commons/utils/JavaHelper.ts index 8942c3679c..c7f83a366e 100644 --- a/src/commons/utils/JavaHelper.ts +++ b/src/commons/utils/JavaHelper.ts @@ -1,8 +1,7 @@ -import { compileFromSource } from 'java-slang/dist/compiler'; +import { compileFromSource, typeCheck } from 'java-slang'; import { BinaryWriter } from 'java-slang/dist/compiler/binary-writer'; import setupJVM, { parseBin } from 'java-slang/dist/jvm'; import { createModuleProxy, loadCachedFiles } from 'java-slang/dist/jvm/utils/integration'; -import { convertErrorsToReadableMsgs, parseProgram, typeCheck } from 'java-slang/dist/types'; import { Context } from 'js-slang'; import loadSourceModules from 'js-slang/dist/modules/loader'; @@ -22,9 +21,9 @@ export async function javaRun(javaCode: string, context: Context) { }); }; - const typeCheckResult = typeCheck(parseProgram(javaCode)); + const typeCheckResult = typeCheck(javaCode); if (typeCheckResult.hasTypeErrors) { - const typeErrMsg = convertErrorsToReadableMsgs(javaCode, typeCheckResult.errors).join('\n'); + const typeErrMsg = typeCheckResult.errorMsgs.join('\n'); stderr('TypeCheck', typeErrMsg); return Promise.resolve({ status: 'error' }); } diff --git a/yarn.lock b/yarn.lock index c79bbac705..021ca1a104 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8024,10 +8024,10 @@ java-parser@^2.0.5: chevrotain-allstar "0.3.1" lodash "4.17.21" -java-slang@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/java-slang/-/java-slang-1.0.9.tgz#a29045e71ff46d7f250857279113c39120a6df2c" - integrity sha512-GzdFXCLHw8rIGIYe24xu6J0+U0jl2O08jZfEXKGI6EZxWFoJaYSVWcnv8/6J1jAeKuHMbDYBXleQNv4LVLsYRg== +java-slang@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/java-slang/-/java-slang-1.0.13.tgz#601454c9dd28a41ea6918dab51a7e65401d2c2d9" + integrity sha512-xBh84Gcp7iyc3o9bWDbaIa7GXf75tpUVmDrd/gXIAU/gxNARitJdl5xCjQW5y4iesqwucV7cY+Ewx6MIt4xKeQ== dependencies: "@types/lodash" "^4.14.198" java-parser "^2.0.5" From 70e83b1c80a1fe42db15b3952cba43ddafa62759 Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Sat, 13 Apr 2024 17:17:21 +0800 Subject: [PATCH 12/14] Add mocks for java-slang functions --- package.json | 2 +- src/setupTests.ts | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index e6f1a45057..ef9f067938 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "format:scss": "prettier --list-different --parser scss \"src/**/*.scss\"", "format:ci": "yarn run format:tsx && yarn run format:scss", "start": "cross-env EXTEND_ESLINT=true BROWSER=none PORT=8000 craco start", - "test": "cross-env TZ=UTF-8 NODE_OPTIONS=--experimental-vm-modules craco test", + "test": "cross-env TZ=UTF-8 craco test", "test-coveralls": "./scripts/test-coveralls.sh", "update-ui-snapshots": "jest --updateSnapshot", "eslint": "eslint --ext \".js,.jsx,.ts,.tsx\" src", diff --git a/src/setupTests.ts b/src/setupTests.ts index 325a68de3a..342d11a07b 100644 --- a/src/setupTests.ts +++ b/src/setupTests.ts @@ -8,3 +8,10 @@ jest.mock('./commons/utils/notifications/createNotification', () => ({ show: jest.fn() } })); + +jest.mock('java-slang', () => { + return { + compileFromSource: () => '', + typeCheck: () => ({ hasTypeErrors: false, errorMsgs: [] }) + }; +}); From 5c49e73b27ce46dd2b8449e749017737958da0b0 Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Sat, 13 Apr 2024 17:37:40 +0800 Subject: [PATCH 13/14] Fix wrong error label in java helper --- src/commons/utils/JavaHelper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commons/utils/JavaHelper.ts b/src/commons/utils/JavaHelper.ts index c7f83a366e..42eea82175 100644 --- a/src/commons/utils/JavaHelper.ts +++ b/src/commons/utils/JavaHelper.ts @@ -34,7 +34,7 @@ export async function javaRun(javaCode: string, context: Context) { 'Main.class': Buffer.from(new BinaryWriter().generateBinary(classFile)).toString('base64') }; } catch (e) { - stderr('TypeCheck', e); + stderr('Compile', e); return Promise.resolve({ status: 'error' }); } From d3004bd64586cb61024878ccc747a6250019f13c Mon Sep 17 00:00:00 2001 From: Bryan Loh Date: Sat, 13 Apr 2024 17:42:13 +0800 Subject: [PATCH 14/14] Increase max file size to cache to 20 --- craco.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/craco.config.js b/craco.config.js index f344daab13..9ced7dac49 100644 --- a/craco.config.js +++ b/craco.config.js @@ -18,7 +18,7 @@ const cracoConfig = { plugin => plugin.constructor.name === 'InjectManifest' ); if (injectManifestPlugin) { - injectManifestPlugin.config.maximumFileSizeToCacheInBytes = 17 * 1024 * 1024; + injectManifestPlugin.config.maximumFileSizeToCacheInBytes = 20 * 1024 * 1024; } // add rules to pack WASM (for Sourceror)