@remix_labs/machine-starter 2.3101.0-dev → 2.3105.0-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common.js +0 -51
- package/groovebox_build.js +1 -1
- package/package.json +2 -2
- package/start.js +39 -52
package/common.js
CHANGED
|
@@ -5,31 +5,18 @@ import { MixcoreTauri, filterFFINames } from "./mixcore.lib.mjs";
|
|
|
5
5
|
let workers = {};
|
|
6
6
|
let children = {};
|
|
7
7
|
let ffiLoops = {};
|
|
8
|
-
let blobs = {};
|
|
9
|
-
let blobsLoops = {};
|
|
10
8
|
|
|
11
9
|
function terminateAll() {
|
|
12
10
|
console.log("[groovebox-starter] terminate all VMs");
|
|
13
11
|
for (let [vmID, worker] of Object.entries(workers)) {
|
|
14
12
|
worker.terminate();
|
|
15
13
|
};
|
|
16
|
-
for (let [vmID, blobs] of Object.entries(blobs)) {
|
|
17
|
-
for (let blob_url of blobs) {
|
|
18
|
-
console.log("[groovebox-starter] revoke ", blob_url);
|
|
19
|
-
URL.revokeObjectURL(blob_url);
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
14
|
for (let ffiLoop of Object.values(ffiLoops)) {
|
|
23
15
|
ffiLoop.terminate();
|
|
24
16
|
}
|
|
25
|
-
for (let blobsLoop of Object.values(blobsLoops)) {
|
|
26
|
-
blobsLoop.terminate();
|
|
27
|
-
}
|
|
28
17
|
workers = {};
|
|
29
18
|
children = {};
|
|
30
19
|
ffiLoops = {};
|
|
31
|
-
blobs = {};
|
|
32
|
-
blobsLoops = {};
|
|
33
20
|
}
|
|
34
21
|
|
|
35
22
|
function terminateVM(vmID) {
|
|
@@ -37,20 +24,12 @@ function terminateVM(vmID) {
|
|
|
37
24
|
let worker = workers[vmID];
|
|
38
25
|
if (worker) {
|
|
39
26
|
let vmChildren = children[vmID];
|
|
40
|
-
let blobList = blobs[vmID] || [];
|
|
41
27
|
let ffiLoop = ffiLoops[vmID];
|
|
42
|
-
let blobsLoop = blobsLoops[vmID];
|
|
43
28
|
delete workers[vmID];
|
|
44
29
|
delete children[vmID];
|
|
45
30
|
delete ffiLoops[vmID];
|
|
46
|
-
delete blobsLoops[vmID];
|
|
47
31
|
worker.terminate();
|
|
48
32
|
ffiLoop.terminate();
|
|
49
|
-
blobsLoop.terminate();
|
|
50
|
-
for (let blob_url of blobList) {
|
|
51
|
-
console.log("[groovebox-starter] revoke ", blob_url);
|
|
52
|
-
URL.revokeObjectURL(blob_url);
|
|
53
|
-
};
|
|
54
33
|
if (vmChildren) {
|
|
55
34
|
for (let subID of vmChildren) {
|
|
56
35
|
terminateVM(subID)
|
|
@@ -122,7 +101,6 @@ async function StartWASM2(hub, config) {
|
|
|
122
101
|
localFFIkind["$vm_stop"] = vm_kind;
|
|
123
102
|
localFFIfuns["$vm_stop"] = ffi_vm_stop;
|
|
124
103
|
ffiLoops[config.vmID] = setupLocalFFIs(hub, config, localFFIfuns);
|
|
125
|
-
blobsLoops[config.vmID] = setupBlobs(hub, config);
|
|
126
104
|
let config_msg =
|
|
127
105
|
{ "_rmx_type": "msg_vm_configure",
|
|
128
106
|
"baseURL": config.baseURL,
|
|
@@ -344,35 +322,6 @@ async function localFFIsMessageLoop(hub, config, localFFIs, terminate) {
|
|
|
344
322
|
}
|
|
345
323
|
}
|
|
346
324
|
|
|
347
|
-
function setupBlobs(hub, config) {
|
|
348
|
-
let vmID = config.vmID;
|
|
349
|
-
let terminate = Promise.withResolvers();
|
|
350
|
-
blobsMessageLoop(hub, config, terminate.promise); // don't wait
|
|
351
|
-
return {terminate: terminate.resolve};
|
|
352
|
-
}
|
|
353
|
-
async function blobsMessageLoop(hub, config, terminate) {
|
|
354
|
-
let vmID = config.vmID;
|
|
355
|
-
let channel = await hub.newChannel();
|
|
356
|
-
let comm = new FFIComm(vmID, hub, channel);
|
|
357
|
-
let sub = await channel.subscribe("/local/" + vmID + "/blobs");
|
|
358
|
-
while (true) {
|
|
359
|
-
let {msg, terminated} = await Promise.race([
|
|
360
|
-
sub.next().then((msg) => ({msg})),
|
|
361
|
-
terminate.then(() => ({terminated: true})),
|
|
362
|
-
]);
|
|
363
|
-
if (terminated) {
|
|
364
|
-
console.log("[groovebox-starter] terminate blobs loop", vmID);
|
|
365
|
-
return;
|
|
366
|
-
}
|
|
367
|
-
let name = msg.payload.name;
|
|
368
|
-
let url = msg.payload.url;
|
|
369
|
-
let blobList = blobs[vmID];
|
|
370
|
-
if (!blobList) blobList = [];
|
|
371
|
-
blobList.push(url);
|
|
372
|
-
blobs[vmID] = blobList;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
|
|
376
325
|
class FFIComm {
|
|
377
326
|
constructor(vmID, hub, channel) {
|
|
378
327
|
this.vmID = vmID;
|
package/groovebox_build.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var GROOVEBOX_BUILD = "
|
|
1
|
+
var GROOVEBOX_BUILD = "3455";
|
|
2
2
|
export { GROOVEBOX_BUILD }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remix_labs/machine-starter",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3105.0-dev",
|
|
4
4
|
"description": "start the groove",
|
|
5
5
|
"main": "node.js",
|
|
6
6
|
"browser": "index.js",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"author": "Remixlabs staff",
|
|
12
12
|
"license": "ISC",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@remix_labs/hub-client": "2.
|
|
14
|
+
"@remix_labs/hub-client": "2.3105.0-dev",
|
|
15
15
|
"nanoid": "^5.0.2",
|
|
16
16
|
"web-worker": "^1.2.0"
|
|
17
17
|
},
|
package/start.js
CHANGED
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
import Process from "process";
|
|
2
2
|
import { StartWASM2, Hub } from "./node.js";
|
|
3
|
-
import {
|
|
4
|
-
import { mixcoreWasmCode } from './mixcore-wasm.js';
|
|
5
|
-
import { WASI, OpenFile, File, Directory, PreopenDirectory, ConsoleStdout } from "@bjorn3/browser_wasi_shim";
|
|
6
|
-
function importCode(base64) {
|
|
7
|
-
let binstr = atob(base64);
|
|
8
|
-
let code = new Uint8Array(binstr.length);
|
|
9
|
-
for (let i = 0; i < binstr.length; i++)
|
|
10
|
-
code[i] = binstr.charCodeAt(i);
|
|
11
|
-
return code;
|
|
12
|
-
}
|
|
13
|
-
let mixcoreWasm = importCode(mixcoreWasmCode);
|
|
3
|
+
import { mixcoreWasmBase64, mixcoreJsBase64 } from './mixcore-wasm.js';
|
|
14
4
|
|
|
15
5
|
if (Process.stdout._handle)
|
|
16
6
|
Process.stdout._handle.setBlocking(true);
|
|
@@ -42,46 +32,43 @@ let noOutputViaMQTT = Process.env["MIX_MQTT_NO_OUTPUT"] !== undefined;
|
|
|
42
32
|
console.log("Machine params: variant=" + variant + " baseURL=" + baseURL, " mqttURL=" + mqttURL, " mqttUser=" + mqttUser, " mqttToken=" + mqttToken, " id=" + id, " noOutputViaMQTT=" + noOutputViaMQTT);
|
|
43
33
|
let w = new Hub.Worker();
|
|
44
34
|
globalThis.GROOVEBOX_ALLOW_INSECURE_HTTP = true;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
]
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
localFFIs: {},
|
|
74
|
-
mixcore: mixcoreConfig,
|
|
75
|
-
});
|
|
35
|
+
let mixcore = {
|
|
36
|
+
kind: "wasm-opfs",
|
|
37
|
+
mixcoreWasmUrl: "data:application/wasm;base64," + mixcoreWasmBase64,
|
|
38
|
+
mixcoreJsUrl: "data:text/javascript;charset=utf-8;base64," + mixcoreJsBase64,
|
|
39
|
+
dbDir: "/databases",
|
|
40
|
+
dbUser: "test@user",
|
|
41
|
+
dbName: "compiler-testing",
|
|
42
|
+
createDbs: ["compiler-testing"],
|
|
43
|
+
};
|
|
44
|
+
w.configure({wsURL: mqttURL, user:mqttUser, token:mqttToken}).then(resp => {
|
|
45
|
+
if (variant == "BYTE") variant = "QCODE";
|
|
46
|
+
switch(variant) {
|
|
47
|
+
case "WASM":
|
|
48
|
+
case "WAT":
|
|
49
|
+
case "QCODE":
|
|
50
|
+
let startVM = (_ => {
|
|
51
|
+
MixSetMask(64 + 256 + 512 + 1024);
|
|
52
|
+
StartWASM2(w, {
|
|
53
|
+
baseURL: baseURL,
|
|
54
|
+
org: "local",
|
|
55
|
+
workspace: "local",
|
|
56
|
+
vmID: id,
|
|
57
|
+
user: mqttUser,
|
|
58
|
+
token: mqttToken,
|
|
59
|
+
noOutputViaMQTT: noOutputViaMQTT,
|
|
60
|
+
machType: variant,
|
|
61
|
+
localFFIs: {},
|
|
62
|
+
mixcore,
|
|
76
63
|
});
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
64
|
+
});
|
|
65
|
+
if (globalThis.EnableAndStartMixCompiler) {
|
|
66
|
+
EnableAndStartMixCompiler(w).then(startVM);
|
|
67
|
+
} else {
|
|
68
|
+
startVM()
|
|
69
|
+
};
|
|
70
|
+
break
|
|
71
|
+
default:
|
|
72
|
+
throw(new Error("unknown MIX_MACHINE_VARIANT: " + variant))
|
|
73
|
+
}
|
|
87
74
|
});
|