aboutsummaryrefslogtreecommitdiff
path: root/test/wasm/index.js
blob: a3a0277a7192f8fe40c4af1cd002bca060e582f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env node

/*
Copyright 2024 New Vector Ltd.
Copyright 2021 The Matrix.org Foundation C.I.C.

SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/

const fs = require("fs");
const path = require("path");
const childProcess = require("child_process");

(async function () {
  // sql.js
  const initSqlJs = require("sql.js");
  await initSqlJs().then((SQL) => {
    global._go_sqlite = SQL;
    console.log("Loaded sqlite");
  });
  // dendritejs expects to write to `/idb` so we create that here
  // Since this is testing only, we use the default in-memory FS
  global._go_sqlite.FS.mkdir("/idb");

  // WebSocket
  const WebSocket = require("isomorphic-ws");
  global.WebSocket = WebSocket;

  // Load the generic Go Wasm exec helper inline to trigger built-in run call
  // This approach avoids copying `wasm_exec.js` into the repo, which is nice
  // to aim for since it can differ between Go versions.
  const goRoot = await new Promise((resolve, reject) => {
    childProcess.execFile("go", ["env", "GOROOT"], (err, out) => {
      if (err) {
        reject("Can't find go");
      }
      resolve(out.trim());
    });
  });
  const execPath = path.join(goRoot, "misc/wasm/wasm_exec.js");
  const execCode = fs.readFileSync(execPath, "utf8");
  eval(execCode);
})();