@allwright.dev/core 0.0.41 → 0.0.42
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/dist/bootstrap.js +59 -4
- package/package.json +1 -1
package/dist/bootstrap.js
CHANGED
|
@@ -12,7 +12,7 @@ const ALLWRIGHT_HOME_ENV_VAR = "ALLWRIGHT_HOME";
|
|
|
12
12
|
const ALLWRIGHT_REPOSITORY_ENV_VAR = "ALLWRIGHT_REPOSITORY";
|
|
13
13
|
const ALLWRIGHT_VERSION_ENV_VAR = "ALLWRIGHT_VERSION";
|
|
14
14
|
const DEFAULT_RELEASE_REPOSITORY = "allwright-dev/allwright";
|
|
15
|
-
const DEFAULT_RELEASE_VERSION = "0.0.
|
|
15
|
+
const DEFAULT_RELEASE_VERSION = "0.0.42";
|
|
16
16
|
const STARTUP_TIMEOUT_MS = 20_000;
|
|
17
17
|
const PING_TIMEOUT_MS = 1_000;
|
|
18
18
|
const PROTO_ROOT = fileURLToPath(new URL("../proto/", import.meta.url));
|
|
@@ -20,6 +20,9 @@ const ENGINE_PROTO_PATH = fileURLToPath(new URL("../proto/engine/v1/engine.proto
|
|
|
20
20
|
let managedServer = null;
|
|
21
21
|
let managedServerAddr = null;
|
|
22
22
|
let managedServerBaseAddr = null;
|
|
23
|
+
let managedServerStdout = "";
|
|
24
|
+
let managedServerStderr = "";
|
|
25
|
+
let managedServerSpawnError = null;
|
|
23
26
|
export async function ensureRuntimeReady(serverAddr) {
|
|
24
27
|
const expectedVersion = expectedRuntimeVersion();
|
|
25
28
|
const status = await pingServer(serverAddr);
|
|
@@ -42,6 +45,9 @@ export async function ensureRuntimeReady(serverAddr) {
|
|
|
42
45
|
managedServer = null;
|
|
43
46
|
managedServerAddr = null;
|
|
44
47
|
managedServerBaseAddr = null;
|
|
48
|
+
managedServerStdout = "";
|
|
49
|
+
managedServerStderr = "";
|
|
50
|
+
managedServerSpawnError = null;
|
|
45
51
|
}
|
|
46
52
|
const cliPath = await ensureCliAvailable(expectedVersion);
|
|
47
53
|
ensureWebPlugin(cliPath, expectedVersion);
|
|
@@ -50,7 +56,19 @@ export async function ensureRuntimeReady(serverAddr) {
|
|
|
50
56
|
resolvedServerAddr = await allocateManagedServerAddr(serverAddr);
|
|
51
57
|
}
|
|
52
58
|
managedServer = spawn(cliPath, ["serve", "--listen-addr", cliListenAddr(resolvedServerAddr)], {
|
|
53
|
-
stdio: "ignore",
|
|
59
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
60
|
+
});
|
|
61
|
+
managedServerStdout = "";
|
|
62
|
+
managedServerStderr = "";
|
|
63
|
+
managedServerSpawnError = null;
|
|
64
|
+
managedServer.stdout?.on("data", (chunk) => {
|
|
65
|
+
managedServerStdout = appendManagedServerOutput(managedServerStdout, chunk);
|
|
66
|
+
});
|
|
67
|
+
managedServer.stderr?.on("data", (chunk) => {
|
|
68
|
+
managedServerStderr = appendManagedServerOutput(managedServerStderr, chunk);
|
|
69
|
+
});
|
|
70
|
+
managedServer.on("error", (error) => {
|
|
71
|
+
managedServerSpawnError = error.message;
|
|
54
72
|
});
|
|
55
73
|
managedServerAddr = resolvedServerAddr;
|
|
56
74
|
managedServerBaseAddr = serverAddr;
|
|
@@ -63,18 +81,32 @@ export async function shutdownManagedServer() {
|
|
|
63
81
|
managedServer = null;
|
|
64
82
|
managedServerAddr = null;
|
|
65
83
|
managedServerBaseAddr = null;
|
|
84
|
+
managedServerStdout = "";
|
|
85
|
+
managedServerStderr = "";
|
|
86
|
+
managedServerSpawnError = null;
|
|
66
87
|
}
|
|
67
88
|
async function waitForServer(serverAddr, expectedVersion) {
|
|
68
89
|
const deadline = Date.now() + STARTUP_TIMEOUT_MS;
|
|
69
90
|
while (Date.now() < deadline) {
|
|
91
|
+
if (managedServer && managedServer.exitCode !== null) {
|
|
92
|
+
const details = formatManagedServerFailure(managedServer.exitCode, managedServer.signalCode);
|
|
93
|
+
await shutdownManagedServer();
|
|
94
|
+
throw new Error(`allwright server exited before becoming ready at ${serverAddr}${details}`);
|
|
95
|
+
}
|
|
96
|
+
if (managedServerSpawnError) {
|
|
97
|
+
const details = formatManagedServerFailure(null, null);
|
|
98
|
+
await shutdownManagedServer();
|
|
99
|
+
throw new Error(`failed to start allwright server at ${serverAddr}${details}`);
|
|
100
|
+
}
|
|
70
101
|
const status = await pingServer(serverAddr);
|
|
71
102
|
if (status?.version === expectedVersion) {
|
|
72
103
|
return serverAddr;
|
|
73
104
|
}
|
|
74
105
|
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
75
106
|
}
|
|
107
|
+
const details = formatManagedServerFailure(managedServer?.exitCode ?? null, managedServer?.signalCode ?? null);
|
|
76
108
|
await shutdownManagedServer();
|
|
77
|
-
throw new Error(`timed out waiting for allwright server at ${serverAddr} to become ready with version ${expectedVersion}`);
|
|
109
|
+
throw new Error(`timed out waiting for allwright server at ${serverAddr} to become ready with version ${expectedVersion}${details}`);
|
|
78
110
|
}
|
|
79
111
|
async function pingServer(serverAddr) {
|
|
80
112
|
const loaded = protoLoader.loadSync(ENGINE_PROTO_PATH, {
|
|
@@ -299,7 +331,7 @@ async function allocateManagedServerAddr(serverAddr) {
|
|
|
299
331
|
});
|
|
300
332
|
});
|
|
301
333
|
});
|
|
302
|
-
return host.includes(":") ? `
|
|
334
|
+
return host.includes(":") ? `[${host}]:${port}` : `${host}:${port}`;
|
|
303
335
|
}
|
|
304
336
|
function localBindingHost(serverAddr) {
|
|
305
337
|
const host = parseServerHost(serverAddr);
|
|
@@ -346,6 +378,29 @@ function allwrightHome() {
|
|
|
346
378
|
function cliFilename() {
|
|
347
379
|
return process.platform === "win32" ? "allwright.exe" : "allwright";
|
|
348
380
|
}
|
|
381
|
+
function appendManagedServerOutput(current, chunk) {
|
|
382
|
+
const next = `${current}${typeof chunk === "string" ? chunk : chunk.toString("utf8")}`;
|
|
383
|
+
return next.length > 8_000 ? next.slice(-8_000) : next;
|
|
384
|
+
}
|
|
385
|
+
function formatManagedServerFailure(exitCode, signalCode) {
|
|
386
|
+
const parts = [];
|
|
387
|
+
if (managedServerSpawnError) {
|
|
388
|
+
parts.push(`spawn error: ${managedServerSpawnError}`);
|
|
389
|
+
}
|
|
390
|
+
if (exitCode !== null) {
|
|
391
|
+
parts.push(`exit code: ${exitCode}`);
|
|
392
|
+
}
|
|
393
|
+
if (signalCode) {
|
|
394
|
+
parts.push(`signal: ${signalCode}`);
|
|
395
|
+
}
|
|
396
|
+
if (managedServerStdout.trim()) {
|
|
397
|
+
parts.push(`stdout:\n${managedServerStdout.trim()}`);
|
|
398
|
+
}
|
|
399
|
+
if (managedServerStderr.trim()) {
|
|
400
|
+
parts.push(`stderr:\n${managedServerStderr.trim()}`);
|
|
401
|
+
}
|
|
402
|
+
return parts.length > 0 ? `\n${parts.join("\n")}` : "";
|
|
403
|
+
}
|
|
349
404
|
function findExtractedCli(extractRoot) {
|
|
350
405
|
const queue = [extractRoot];
|
|
351
406
|
while (queue.length > 0) {
|