From e11754889541a39dcd8cf862a2a166433aeb316a Mon Sep 17 00:00:00 2001 From: Olivier Gagnon Date: Sun, 12 Dec 2021 14:49:02 -0500 Subject: [PATCH] fix some stack traces not printing file name --- src/NetscriptEvaluator.ts | 6 ++++++ src/NetscriptJSEvaluator.ts | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/NetscriptEvaluator.ts b/src/NetscriptEvaluator.ts index f724eb690..324f5f1a3 100644 --- a/src/NetscriptEvaluator.ts +++ b/src/NetscriptEvaluator.ts @@ -1,6 +1,7 @@ import { isString } from "./utils/helpers/isString"; import { GetServer } from "./Server/AllServers"; import { WorkerScript } from "./Netscript/WorkerScript"; +import { BlobsMap } from "./NetscriptJSEvaluator"; export function netscriptDelay(time: number, workerScript: WorkerScript): Promise { return new Promise(function (resolve) { @@ -18,6 +19,11 @@ export function makeRuntimeRejectMsg(workerScript: WorkerScript, msg: string): s throw new Error(`WorkerScript constructed with invalid server ip: ${workerScript.hostname}`); } + for (const url in BlobsMap) { + console.log(url); + // msg = msg.replace(new RegExp(url, "g"), BlobsMap[url]); + } + return "|DELIMITER|" + server.hostname + "|DELIMITER|" + workerScript.name + "|DELIMITER|" + msg; } diff --git a/src/NetscriptJSEvaluator.ts b/src/NetscriptJSEvaluator.ts index aaf8cfd5e..f6a82c2fb 100644 --- a/src/NetscriptJSEvaluator.ts +++ b/src/NetscriptJSEvaluator.ts @@ -3,6 +3,8 @@ import { ScriptUrl } from "./Script/ScriptUrl"; import { WorkerScript } from "./Netscript/WorkerScript"; import { Script } from "./Script/Script"; +export const BlobsMap: { [key: string]: string } = {}; + // Makes a blob that contains the code of a given script. function makeScriptBlob(code: string): Blob { return new Blob([code], { type: "text/javascript" }); @@ -19,7 +21,10 @@ export async function compile(script: Script, scripts: Script[]): Promise // by placing it inside an eval call. await script.updateRamUsage(scripts); const uurls = _getScriptUrls(script, scripts, []); - if (script.url) URL.revokeObjectURL(script.url); // remove the old reference. + if (script.url) { + URL.revokeObjectURL(script.url); // remove the old reference. + delete BlobsMap[script.url]; + } if (script.dependencies.length > 0) script.dependencies.forEach((dep) => URL.revokeObjectURL(dep.url)); script.url = uurls[uurls.length - 1].url; script.module = new Promise((resolve) => resolve(eval("import(uurls[uurls.length - 1].url)"))); @@ -133,7 +138,9 @@ function _getScriptUrls(script: Script, scripts: Script[], seen: Script[]): Scri // If we successfully transformed the code, create a blob url for it and // push that URL onto the top of the stack. - urlStack.push(new ScriptUrl(script.filename, URL.createObjectURL(makeScriptBlob(transformedCode)))); + const su = new ScriptUrl(script.filename, URL.createObjectURL(makeScriptBlob(transformedCode))); + urlStack.push(su); + BlobsMap[su.url] = su.filename; return urlStack; } catch (err) { // If there is an error, we need to clean up the URLs.