env-runner 0.2.3 → 0.3.0
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/README.md +154 -19
- package/dist/_chunks/common-base-runner.d.mts +52 -14
- package/dist/_chunks/common-base-runner.mjs +123 -32
- package/dist/_chunks/common-process-data.mjs +13 -0
- package/dist/_chunks/common-worker-utils.mjs +464 -73
- package/dist/_chunks/deno-process-runner.mjs +2 -6
- package/dist/_chunks/lexer.mjs +2 -0
- package/dist/_chunks/libs/cjs-module-lexer.mjs +6 -1
- package/dist/_chunks/miniflare-runner.d.mts +21 -12
- package/dist/_chunks/miniflare-runner.mjs +266 -96
- package/dist/_chunks/node-worker-runner.mjs +1 -2
- package/dist/_chunks/server.mjs +20 -5
- package/dist/_chunks/types.d.mts +36 -0
- package/dist/_chunks/virtual-loader.mjs +303 -29
- package/dist/index.d.mts +17 -4
- package/dist/runners/bun-process/runner.mjs +4 -8
- package/dist/runners/bun-process/worker.mjs +8 -8
- package/dist/runners/deno-process/worker.mjs +8 -8
- package/dist/runners/node-process/runner.mjs +2 -6
- package/dist/runners/node-process/worker.mjs +8 -8
- package/dist/runners/node-worker/worker.mjs +6 -7
- package/dist/runners/self/runner.d.mts +2 -1
- package/dist/runners/self/runner.mjs +8 -0
- package/package.json +11 -11
- package/dist/_chunks/common-host-env.mjs +0 -11
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { formatInitError, handleUpdateVirtualModules, isVirtualEntry, parseServerAddress, registerVirtualModules, reloadEntryModule, resolveEntry, toServerOptions } from "../../_chunks/common-worker-utils.mjs";
|
|
2
|
+
import { receiveProcessData } from "../../_chunks/common-process-data.mjs";
|
|
2
3
|
import { serve } from "srvx";
|
|
3
4
|
import { plugin } from "crossws/server";
|
|
4
5
|
process.on("disconnect", () => process.exit(0));
|
|
5
|
-
const data =
|
|
6
|
+
const data = await receiveProcessData();
|
|
6
7
|
const sendMessage = (message) => process.send(message);
|
|
7
|
-
const virtualEntry = isVirtualSpecifier(data.entry, data.virtual);
|
|
8
8
|
let unregisterVirtualModules;
|
|
9
9
|
let entry;
|
|
10
10
|
let server;
|
|
11
11
|
try {
|
|
12
12
|
unregisterVirtualModules = await registerVirtualModules(data.virtual);
|
|
13
|
-
entry = await resolveEntry(data.entry,
|
|
13
|
+
entry = await resolveEntry(data.entry, isVirtualEntry(data.entry));
|
|
14
14
|
server = serve({
|
|
15
15
|
...toServerOptions(entry),
|
|
16
16
|
fetch: (request) => entry.fetch(request),
|
|
@@ -18,7 +18,7 @@ try {
|
|
|
18
18
|
});
|
|
19
19
|
await server.ready();
|
|
20
20
|
} catch (error) {
|
|
21
|
-
const message =
|
|
21
|
+
const message = formatInitError(error);
|
|
22
22
|
sendMessage({
|
|
23
23
|
event: "init-error",
|
|
24
24
|
error: message
|
|
@@ -45,7 +45,7 @@ process.on("message", async (message) => {
|
|
|
45
45
|
}
|
|
46
46
|
if (message?.event === "reload-module") {
|
|
47
47
|
try {
|
|
48
|
-
entry = await reloadEntryModule(data.entry, entry, sendMessage,
|
|
48
|
+
entry = await reloadEntryModule(data.entry, entry, sendMessage, isVirtualEntry(data.entry));
|
|
49
49
|
process.send({ event: "module-reloaded" });
|
|
50
50
|
} catch (error) {
|
|
51
51
|
process.send({
|
|
@@ -55,8 +55,8 @@ process.on("message", async (message) => {
|
|
|
55
55
|
}
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
|
-
if (message?.event === "
|
|
59
|
-
|
|
58
|
+
if (message?.event === "update-virtual-modules") {
|
|
59
|
+
handleUpdateVirtualModules(message, sendMessage);
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
62
|
if (message?.type === "ping") {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { BaseEnvRunner } from "../../_chunks/common-base-runner.mjs";
|
|
2
|
-
import { hostEnv } from "../../_chunks/common-host-env.mjs";
|
|
3
2
|
import { fileURLToPath } from "node:url";
|
|
4
3
|
import { existsSync } from "node:fs";
|
|
5
4
|
import { fork } from "node:child_process";
|
|
@@ -36,10 +35,7 @@ var NodeProcessEnvRunner = class extends BaseEnvRunner {
|
|
|
36
35
|
return;
|
|
37
36
|
}
|
|
38
37
|
const child = fork(this._workerEntry, [], {
|
|
39
|
-
env:
|
|
40
|
-
ENV_RUNNER_NAME: this._name,
|
|
41
|
-
ENV_RUNNER_DATA: JSON.stringify(this._data || {})
|
|
42
|
-
}),
|
|
38
|
+
env: this._processEnv(),
|
|
43
39
|
stdio: [
|
|
44
40
|
"pipe",
|
|
45
41
|
"pipe",
|
|
@@ -57,7 +53,7 @@ var NodeProcessEnvRunner = class extends BaseEnvRunner {
|
|
|
57
53
|
this.close(error);
|
|
58
54
|
});
|
|
59
55
|
child.on("message", (message) => {
|
|
60
|
-
this.
|
|
56
|
+
this._handleProcessMessage(message);
|
|
61
57
|
});
|
|
62
58
|
child.stdout?.pipe(process.stdout);
|
|
63
59
|
child.stderr?.pipe(process.stderr);
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { formatInitError, handleUpdateVirtualModules, isVirtualEntry, parseServerAddress, registerVirtualModules, reloadEntryModule, resolveEntry, toServerOptions } from "../../_chunks/common-worker-utils.mjs";
|
|
2
|
+
import { receiveProcessData } from "../../_chunks/common-process-data.mjs";
|
|
2
3
|
import { serve } from "srvx";
|
|
3
4
|
import { plugin } from "crossws/server";
|
|
4
5
|
process.on("disconnect", () => process.exit(0));
|
|
5
|
-
const data =
|
|
6
|
+
const data = await receiveProcessData();
|
|
6
7
|
const sendMessage = (message) => process.send(message);
|
|
7
|
-
const virtualEntry = isVirtualSpecifier(data.entry, data.virtual);
|
|
8
8
|
let unregisterVirtualModules;
|
|
9
9
|
let entry;
|
|
10
10
|
let server;
|
|
11
11
|
try {
|
|
12
12
|
unregisterVirtualModules = await registerVirtualModules(data.virtual);
|
|
13
|
-
entry = await resolveEntry(data.entry,
|
|
13
|
+
entry = await resolveEntry(data.entry, isVirtualEntry(data.entry));
|
|
14
14
|
server = serve({
|
|
15
15
|
...toServerOptions(entry),
|
|
16
16
|
fetch: (request) => entry.fetch(request),
|
|
@@ -18,7 +18,7 @@ try {
|
|
|
18
18
|
});
|
|
19
19
|
await server.ready();
|
|
20
20
|
} catch (error) {
|
|
21
|
-
const message =
|
|
21
|
+
const message = formatInitError(error);
|
|
22
22
|
sendMessage({
|
|
23
23
|
event: "init-error",
|
|
24
24
|
error: message
|
|
@@ -45,7 +45,7 @@ process.on("message", async (message) => {
|
|
|
45
45
|
}
|
|
46
46
|
if (message?.event === "reload-module") {
|
|
47
47
|
try {
|
|
48
|
-
entry = await reloadEntryModule(data.entry, entry, sendMessage,
|
|
48
|
+
entry = await reloadEntryModule(data.entry, entry, sendMessage, isVirtualEntry(data.entry));
|
|
49
49
|
process.send({ event: "module-reloaded" });
|
|
50
50
|
} catch (error) {
|
|
51
51
|
process.send({
|
|
@@ -55,8 +55,8 @@ process.on("message", async (message) => {
|
|
|
55
55
|
}
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
|
-
if (message?.event === "
|
|
59
|
-
|
|
58
|
+
if (message?.event === "update-virtual-modules") {
|
|
59
|
+
handleUpdateVirtualModules(message, sendMessage);
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
62
|
if (message?.type === "ping") {
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { formatInitError, handleUpdateVirtualModules, isVirtualEntry, parseServerAddress, registerVirtualModules, reloadEntryModule, resolveEntry, toServerOptions } from "../../_chunks/common-worker-utils.mjs";
|
|
2
2
|
import { parentPort, workerData } from "node:worker_threads";
|
|
3
3
|
import { serve } from "srvx";
|
|
4
4
|
import { plugin } from "crossws/server";
|
|
5
5
|
const data = workerData || {};
|
|
6
6
|
const sendMessage = (message) => parentPort?.postMessage(message);
|
|
7
|
-
const virtualEntry = isVirtualSpecifier(data.entry, data.virtual);
|
|
8
7
|
let unregisterVirtualModules;
|
|
9
8
|
let entry;
|
|
10
9
|
let server;
|
|
11
10
|
try {
|
|
12
11
|
unregisterVirtualModules = await registerVirtualModules(data.virtual);
|
|
13
|
-
entry = await resolveEntry(data.entry,
|
|
12
|
+
entry = await resolveEntry(data.entry, isVirtualEntry(data.entry));
|
|
14
13
|
server = serve({
|
|
15
14
|
...toServerOptions(entry),
|
|
16
15
|
fetch: (request) => entry.fetch(request),
|
|
@@ -18,7 +17,7 @@ try {
|
|
|
18
17
|
});
|
|
19
18
|
await server.ready();
|
|
20
19
|
} catch (error) {
|
|
21
|
-
const message =
|
|
20
|
+
const message = formatInitError(error);
|
|
22
21
|
sendMessage({
|
|
23
22
|
event: "init-error",
|
|
24
23
|
error: message
|
|
@@ -45,7 +44,7 @@ parentPort?.on("message", async (message) => {
|
|
|
45
44
|
}
|
|
46
45
|
if (message?.event === "reload-module") {
|
|
47
46
|
try {
|
|
48
|
-
entry = await reloadEntryModule(data.entry, entry, sendMessage,
|
|
47
|
+
entry = await reloadEntryModule(data.entry, entry, sendMessage, isVirtualEntry(data.entry));
|
|
49
48
|
parentPort?.postMessage({ event: "module-reloaded" });
|
|
50
49
|
} catch (error) {
|
|
51
50
|
parentPort?.postMessage({
|
|
@@ -55,8 +54,8 @@ parentPort?.on("message", async (message) => {
|
|
|
55
54
|
}
|
|
56
55
|
return;
|
|
57
56
|
}
|
|
58
|
-
if (message?.event === "
|
|
59
|
-
|
|
57
|
+
if (message?.event === "update-virtual-modules") {
|
|
58
|
+
handleUpdateVirtualModules(message, sendMessage);
|
|
60
59
|
return;
|
|
61
60
|
}
|
|
62
61
|
if (message?.type === "ping") {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WorkerHooks } from "../../_chunks/types.mjs";
|
|
1
|
+
import { VirtualModuleUpdates, WorkerHooks } from "../../_chunks/types.mjs";
|
|
2
2
|
import { BaseEnvRunner, EnvRunnerData } from "../../_chunks/common-base-runner.mjs";
|
|
3
3
|
export declare class SelfEnvRunner extends BaseEnvRunner {
|
|
4
4
|
#private;
|
|
@@ -16,6 +16,7 @@ export declare class SelfEnvRunner extends BaseEnvRunner {
|
|
|
16
16
|
};
|
|
17
17
|
}): Promise<void>;
|
|
18
18
|
sendMessage(message: unknown): void;
|
|
19
|
+
updateVirtualModules(_changes: VirtualModuleUpdates): Promise<void>;
|
|
19
20
|
invalidateModule(specifier: string): Promise<void>;
|
|
20
21
|
reloadModule(): Promise<void>;
|
|
21
22
|
protected _hasRuntime(): boolean;
|
|
@@ -39,6 +39,9 @@ var SelfEnvRunner = class extends BaseEnvRunner {
|
|
|
39
39
|
}
|
|
40
40
|
this.#entry?.ipc?.onMessage?.(message);
|
|
41
41
|
}
|
|
42
|
+
async updateVirtualModules(_changes) {
|
|
43
|
+
throw new Error("Cannot update virtual modules: the self runner does not support virtual modules");
|
|
44
|
+
}
|
|
42
45
|
async invalidateModule(specifier) {
|
|
43
46
|
throw new Error(`Cannot invalidate "${specifier}": the self runner does not support virtual modules`);
|
|
44
47
|
}
|
|
@@ -79,8 +82,13 @@ var SelfEnvRunner = class extends BaseEnvRunner {
|
|
|
79
82
|
this.close("self runner requires data.entry");
|
|
80
83
|
return;
|
|
81
84
|
}
|
|
85
|
+
if (Object.keys(this._data?.virtual ?? {}).length > 0) {
|
|
86
|
+
this.close(/* @__PURE__ */ new Error("Cannot use data.virtual: the self runner does not support virtual modules"));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
82
89
|
this.#active = true;
|
|
83
90
|
resolveEntry(entryPath).then(async (entry) => {
|
|
91
|
+
if (this.closed) return;
|
|
84
92
|
this.#entry = entry;
|
|
85
93
|
await entry.ipc?.onOpen?.({ sendMessage: (message) => {
|
|
86
94
|
queueMicrotask(() => this._handleMessage(message));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "env-runner",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Generic environment runner for JavaScript runtimes.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -41,22 +41,22 @@
|
|
|
41
41
|
"srvx": "^1.0.5"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@netlify/runtime": "^5.0.
|
|
45
|
-
"@types/node": "^26.
|
|
46
|
-
"@vercel/queue": "^0.
|
|
47
|
-
"@vitest/coverage-v8": "^5.0.
|
|
44
|
+
"@netlify/runtime": "^5.0.5",
|
|
45
|
+
"@types/node": "^26.6.2",
|
|
46
|
+
"@vercel/queue": "^0.6.0",
|
|
47
|
+
"@vitest/coverage-v8": "^5.0.1",
|
|
48
48
|
"automd": "^0.4.3",
|
|
49
49
|
"changelogen": "^0.6.2",
|
|
50
50
|
"cjs-module-lexer": "^2.2.1",
|
|
51
51
|
"env-runner-fixture": "link:",
|
|
52
52
|
"es-module-lexer": "^3.0.2",
|
|
53
|
-
"miniflare": "^
|
|
54
|
-
"obuild": "^0.4.
|
|
55
|
-
"oxfmt": ">=0.
|
|
56
|
-
"oxlint": "^1.
|
|
53
|
+
"miniflare": "^5.20260921.1-alpha",
|
|
54
|
+
"obuild": "^0.4.40",
|
|
55
|
+
"oxfmt": ">=0.70.0",
|
|
56
|
+
"oxlint": "^1.85.0",
|
|
57
57
|
"typescript": "^7.0.2",
|
|
58
|
-
"vitest": "^5.0.
|
|
59
|
-
"wrangler": "^4.
|
|
58
|
+
"vitest": "^5.0.1",
|
|
59
|
+
"wrangler": "^4.138.0"
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"build": "obuild",
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
function hostEnv(extra) {
|
|
2
|
-
const env = {
|
|
3
|
-
...process.env,
|
|
4
|
-
...extra
|
|
5
|
-
};
|
|
6
|
-
const stdout = process.stdout;
|
|
7
|
-
if (!("FORCE_COLOR" in env) && !env.NO_COLOR && stdout?.isTTY) env.FORCE_COLOR = "1";
|
|
8
|
-
if (!("COLUMNS" in env) && stdout?.columns) env.COLUMNS = String(stdout.columns);
|
|
9
|
-
return env;
|
|
10
|
-
}
|
|
11
|
-
export { hostEnv };
|