diff --git a/gulpfile.js b/gulpfile.js index 7d972823fc4c..4a24b005241c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -336,6 +336,14 @@ function runUglify() { return Promise.resolve(); } +function inlineBlocklySourcemaps() { + if (process.env.PXT_ENV === 'production') { + return; + } + + return exec("node ./scripts/inlineBlocklySourceMaps.js"); +} + /******************************************************** @@ -733,7 +741,7 @@ function getMochaExecutable() { const buildAll = gulp.series( updatestrings, maybeUpdateWebappStrings(), - gulp.parallel(copyTypescriptServices, copyBlocklyMedia), + gulp.parallel(copyTypescriptServices, copyBlocklyMedia, inlineBlocklySourcemaps), gulp.parallel(pxtlib, pxtweb), gulp.parallel(pxtcompiler, pxtsim, backendutils), pxtpy, diff --git a/scripts/inlineBlocklySourceMaps.js b/scripts/inlineBlocklySourceMaps.js new file mode 100644 index 000000000000..0795a96db0b6 --- /dev/null +++ b/scripts/inlineBlocklySourceMaps.js @@ -0,0 +1,21 @@ +const fs = require("fs"); +const path = require("path"); + +const blocklyRoot = path.resolve(__dirname, "..", "node_modules", "blockly"); + +const files = [ + "blockly_compressed.js", + "blocks_compressed.js" +]; + +for (const file of files) { + const fullPath = path.join(blocklyRoot, file); + const source = fs.readFileSync(fullPath, "utf8"); + const maps = fs.readFileSync(fullPath + ".map", "utf8"); + + const dataUri = "data:application/json;charset=utf-8;base64," + Buffer.from(maps).toString("base64"); + + const patched = source.replace(/\/\/# sourceMappingURL=.*/, `//# sourceMappingURL=${dataUri}`); + + fs.writeFileSync(fullPath, patched, "utf8"); +} \ No newline at end of file