summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/examples/wasm-sourcemaps/utils.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /devtools/client/debugger/test/mochitest/examples/wasm-sourcemaps/utils.js
parentInitial commit. (diff)
downloadfirefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz
firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/client/debugger/test/mochitest/examples/wasm-sourcemaps/utils.js')
-rw-r--r--devtools/client/debugger/test/mochitest/examples/wasm-sourcemaps/utils.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/examples/wasm-sourcemaps/utils.js b/devtools/client/debugger/test/mochitest/examples/wasm-sourcemaps/utils.js
new file mode 100644
index 0000000000..906ae02165
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/examples/wasm-sourcemaps/utils.js
@@ -0,0 +1,75 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Simple wasm parser to replace "sourceMappingURL" section.
+
+function updateSourceMappingURLSection(buffer, sourceMapUrl) {
+ function readVarUint8(buf, pos) {
+ let b = buf[pos++];
+ let shift = 0;
+ let result = 0;
+ while (b & 0x80) {
+ result |= (b & 0x7f) << shift;
+ shift += 7;
+ b = buf[pos++];
+ }
+ return {
+ value: result | (b << shift),
+ pos
+ };
+ }
+ function readWasmString(buf, pos) {
+ const { pos: next, value: len } = readVarUint8(buf, pos);
+ const result = String.fromCharCode.apply(
+ null,
+ buf.subarray(next, next + len)
+ );
+ return { value: result, pos: next + len };
+ }
+ function toVarUint(n) {
+ const buf = [];
+ while (n > 127) {
+ buf.push((n & 0x7f) | 0x80);
+ n >>>= 7;
+ }
+ buf.push(n);
+ return buf;
+ }
+ function toWasmString(s) {
+ const buf = toVarUint(s.length);
+ for (let i = 0; i < s.length; i++) {
+ buf.push(s.charCodeAt(i));
+ }
+ return buf;
+ }
+
+ // Appending/replacing sourceMappingURL section based on
+ // https://github.com/WebAssembly/design/pull/1051
+ const mappingSectionBody = toWasmString("sourceMappingURL").concat(
+ toWasmString(sourceMapUrl)
+ );
+ const mappingSection = toVarUint(0).concat(
+ toVarUint(mappingSectionBody.length),
+ mappingSectionBody
+ );
+ const data = new Uint8Array(buffer);
+ let start = data.length,
+ end = data.length;
+ for (let i = 8; i < data.length; ) {
+ const { pos: next, value: id } = readVarUint8(data, i);
+ const { pos: next2, value: size } = readVarUint8(data, next);
+ if (id == 0 && readWasmString(data, next2).value === "sourceMappingURL") {
+ start = i;
+ end = next2 + size;
+ break;
+ }
+ i = next2 + size;
+ }
+ const result = new Uint8Array(
+ start + (data.length - end) + mappingSection.length
+ );
+ result.set(data.subarray(0, start));
+ result.set(new Uint8Array(mappingSection), start);
+ result.set(data.subarray(end), start + mappingSection.length);
+ return result.buffer;
+}