env-runner 0.1.9 → 0.1.11
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 +130 -16
- package/dist/THIRD-PARTY-LICENSES.md +19 -0
- package/dist/_chunks/base-runner.d.mts +80 -3
- package/dist/_chunks/base-runner.mjs +108 -44
- package/dist/_chunks/libs/cjs-module-lexer.mjs +1 -1
- package/dist/_chunks/libs/es-module-lexer.mjs +83 -0
- package/dist/_chunks/runner.d.mts +3 -3
- package/dist/_chunks/runner.mjs +6 -3
- package/dist/_chunks/runner2.d.mts +15 -3
- package/dist/_chunks/runner2.mjs +145 -56
- package/dist/_chunks/runner3.d.mts +3 -3
- package/dist/_chunks/runner3.mjs +3 -3
- package/dist/_chunks/runner4.d.mts +4 -4
- package/dist/_chunks/runner4.mjs +3 -2
- package/dist/_chunks/runner5.d.mts +4 -4
- package/dist/_chunks/runner5.mjs +3 -2
- package/dist/_chunks/server.mjs +60 -17
- package/dist/_chunks/types.d.mts +15 -3
- package/dist/_chunks/virtual-loader.mjs +63 -0
- package/dist/_chunks/worker-utils.mjs +123 -9
- package/dist/cli.mjs +1 -1
- package/dist/index.d.mts +52 -14
- package/dist/index.mjs +6 -6
- package/dist/runners/bun-process/runner.d.mts +2 -2
- package/dist/runners/bun-process/runner.mjs +12 -2
- package/dist/runners/bun-process/worker.mjs +23 -3
- package/dist/runners/deno-process/runner.d.mts +2 -2
- package/dist/runners/deno-process/runner.mjs +1 -1
- package/dist/runners/deno-process/worker.mjs +22 -3
- package/dist/runners/miniflare/runner.d.mts +2 -2
- package/dist/runners/miniflare/runner.mjs +1 -1
- package/dist/runners/netlify/runner.d.mts +2 -2
- package/dist/runners/netlify/runner.mjs +1 -1
- package/dist/runners/node-process/runner.d.mts +2 -2
- package/dist/runners/node-process/runner.mjs +4 -2
- package/dist/runners/node-process/worker.mjs +23 -3
- package/dist/runners/node-worker/runner.d.mts +2 -2
- package/dist/runners/node-worker/runner.mjs +1 -1
- package/dist/runners/node-worker/worker.mjs +22 -3
- package/dist/runners/self/runner.d.mts +3 -2
- package/dist/runners/self/runner.mjs +6 -3
- package/dist/runners/vercel/runner.d.mts +2 -2
- package/dist/runners/vercel/runner.mjs +1 -1
- package/dist/vite.d.mts +1 -1
- package/package.json +12 -11
|
@@ -1,11 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { handleInvalidateModule, isVirtualSpecifier, parseServerAddress, registerVirtualModules, reloadEntryModule, resolveEntry } from "../../_chunks/worker-utils.mjs";
|
|
2
2
|
import { serve } from "srvx";
|
|
3
3
|
import { plugin } from "crossws/server";
|
|
4
4
|
const data = JSON.parse(process.env.ENV_RUNNER_DATA || "{}");
|
|
5
|
-
let entry = await resolveEntry(data.entry);
|
|
6
5
|
const _stdout = globalThis.Deno?.stdout ? { write: (s) => globalThis.Deno.stdout.writeSync(new TextEncoder().encode(s)) } : process.stdout;
|
|
7
6
|
const sendMessage = (message) => _stdout.write(JSON.stringify(message) + "\n");
|
|
8
7
|
const _stdin = globalThis.Deno?.stdin?.readable || process.stdin;
|
|
8
|
+
const virtualEntry = isVirtualSpecifier(data.entry, data.virtual);
|
|
9
|
+
let unregisterVirtualModules;
|
|
10
|
+
let entry;
|
|
11
|
+
try {
|
|
12
|
+
unregisterVirtualModules = await registerVirtualModules(data.virtual);
|
|
13
|
+
entry = await resolveEntry(data.entry, virtualEntry);
|
|
14
|
+
} catch (error) {
|
|
15
|
+
const message = error?.message || String(error);
|
|
16
|
+
sendMessage({
|
|
17
|
+
event: "init-error",
|
|
18
|
+
error: message
|
|
19
|
+
});
|
|
20
|
+
console.error(`[env-runner] worker init failed: ${message}`);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
9
23
|
const server = serve({
|
|
10
24
|
port: 0,
|
|
11
25
|
hostname: "127.0.0.1",
|
|
@@ -48,13 +62,14 @@ async function readMessages() {
|
|
|
48
62
|
async function handleMessage(message) {
|
|
49
63
|
if (message?.event === "shutdown") {
|
|
50
64
|
Promise.resolve(entry.ipc?.onClose?.()).then(() => server.close()).then(() => {
|
|
65
|
+
unregisterVirtualModules();
|
|
51
66
|
sendMessage({ event: "exit" });
|
|
52
67
|
});
|
|
53
68
|
return;
|
|
54
69
|
}
|
|
55
70
|
if (message?.event === "reload-module") {
|
|
56
71
|
try {
|
|
57
|
-
entry = await reloadEntryModule(data.entry, entry, sendMessage);
|
|
72
|
+
entry = await reloadEntryModule(data.entry, entry, sendMessage, virtualEntry);
|
|
58
73
|
sendMessage({ event: "module-reloaded" });
|
|
59
74
|
} catch (error) {
|
|
60
75
|
sendMessage({
|
|
@@ -64,6 +79,10 @@ async function handleMessage(message) {
|
|
|
64
79
|
}
|
|
65
80
|
return;
|
|
66
81
|
}
|
|
82
|
+
if (message?.event === "invalidate-module") {
|
|
83
|
+
handleInvalidateModule(message, sendMessage);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
67
86
|
if (message?.type === "ping") {
|
|
68
87
|
sendMessage({
|
|
69
88
|
type: "pong",
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { EnvRunnerData } from "../../_chunks/base-runner.mjs";
|
|
2
|
+
import { MiniflareEnvRunner, MiniflareEnvRunnerOptions, MiniflareExportInfo, TransformResult } from "../../_chunks/runner2.mjs";
|
|
3
3
|
export { MiniflareEnvRunner, type EnvRunnerData as MiniflareEnvRunnerData, MiniflareEnvRunnerOptions, MiniflareExportInfo, TransformResult };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MiniflareEnvRunner } from "../../_chunks/runner2.mjs";
|
|
2
2
|
export { MiniflareEnvRunner };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { EnvRunnerData } from "../../_chunks/base-runner.mjs";
|
|
2
|
+
import { NetlifyEnvRunner } from "../../_chunks/runner5.mjs";
|
|
3
3
|
export { type EnvRunnerData, NetlifyEnvRunner };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NetlifyEnvRunner } from "../../_chunks/runner5.mjs";
|
|
2
2
|
export { NetlifyEnvRunner };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { WorkerHooks } from "../../_chunks/types.mjs";
|
|
2
|
+
import { BaseEnvRunner, EnvRunnerData } from "../../_chunks/base-runner.mjs";
|
|
3
3
|
declare class NodeProcessEnvRunner extends BaseEnvRunner {
|
|
4
4
|
#private;
|
|
5
5
|
constructor(opts: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BaseEnvRunner } from "../../_chunks/base-runner.mjs";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
3
|
import { fork } from "node:child_process";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
@@ -11,7 +11,7 @@ var NodeProcessEnvRunner = class extends BaseEnvRunner {
|
|
|
11
11
|
...opts,
|
|
12
12
|
workerEntry: opts.workerEntry || _defaultEntry
|
|
13
13
|
});
|
|
14
|
-
this.#initProcess(opts.execArgv);
|
|
14
|
+
this._initWithVirtualData(() => this.#initProcess(opts.execArgv));
|
|
15
15
|
}
|
|
16
16
|
sendMessage(message) {
|
|
17
17
|
if (!this.#process) throw new Error("Node env process should be initialized before sending messages.");
|
|
@@ -59,6 +59,8 @@ var NodeProcessEnvRunner = class extends BaseEnvRunner {
|
|
|
59
59
|
child.on("message", (message) => {
|
|
60
60
|
this._handleMessage(message);
|
|
61
61
|
});
|
|
62
|
+
child.stdout?.pipe(process.stdout);
|
|
63
|
+
child.stderr?.pipe(process.stderr);
|
|
62
64
|
this.#process = child;
|
|
63
65
|
}
|
|
64
66
|
};
|
|
@@ -1,9 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { handleInvalidateModule, isVirtualSpecifier, parseServerAddress, registerVirtualModules, reloadEntryModule, resolveEntry } from "../../_chunks/worker-utils.mjs";
|
|
2
2
|
import { serve } from "srvx";
|
|
3
3
|
import { plugin } from "crossws/server/node";
|
|
4
|
+
process.on("disconnect", () => process.exit(0));
|
|
4
5
|
const data = JSON.parse(process.env.ENV_RUNNER_DATA || "{}");
|
|
5
|
-
let entry = await resolveEntry(data.entry);
|
|
6
6
|
const sendMessage = (message) => process.send(message);
|
|
7
|
+
const virtualEntry = isVirtualSpecifier(data.entry, data.virtual);
|
|
8
|
+
let unregisterVirtualModules;
|
|
9
|
+
let entry;
|
|
10
|
+
try {
|
|
11
|
+
unregisterVirtualModules = await registerVirtualModules(data.virtual);
|
|
12
|
+
entry = await resolveEntry(data.entry, virtualEntry);
|
|
13
|
+
} catch (error) {
|
|
14
|
+
const message = error?.message || String(error);
|
|
15
|
+
sendMessage({
|
|
16
|
+
event: "init-error",
|
|
17
|
+
error: message
|
|
18
|
+
});
|
|
19
|
+
console.error(`[env-runner] worker init failed: ${message}`);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
7
22
|
const server = serve({
|
|
8
23
|
port: 0,
|
|
9
24
|
hostname: "127.0.0.1",
|
|
@@ -26,13 +41,14 @@ process.send({ address: parseServerAddress(server) });
|
|
|
26
41
|
process.on("message", async (message) => {
|
|
27
42
|
if (message?.event === "shutdown") {
|
|
28
43
|
Promise.resolve(entry.ipc?.onClose?.()).then(() => server.close()).then(() => {
|
|
44
|
+
unregisterVirtualModules();
|
|
29
45
|
process.send({ event: "exit" });
|
|
30
46
|
});
|
|
31
47
|
return;
|
|
32
48
|
}
|
|
33
49
|
if (message?.event === "reload-module") {
|
|
34
50
|
try {
|
|
35
|
-
entry = await reloadEntryModule(data.entry, entry, sendMessage);
|
|
51
|
+
entry = await reloadEntryModule(data.entry, entry, sendMessage, virtualEntry);
|
|
36
52
|
process.send({ event: "module-reloaded" });
|
|
37
53
|
} catch (error) {
|
|
38
54
|
process.send({
|
|
@@ -42,6 +58,10 @@ process.on("message", async (message) => {
|
|
|
42
58
|
}
|
|
43
59
|
return;
|
|
44
60
|
}
|
|
61
|
+
if (message?.event === "invalidate-module") {
|
|
62
|
+
handleInvalidateModule(message, sendMessage);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
45
65
|
if (message?.type === "ping") {
|
|
46
66
|
process.send({
|
|
47
67
|
type: "pong",
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { EnvRunnerData } from "../../_chunks/base-runner.mjs";
|
|
2
|
+
import { NodeWorkerEnvRunner } from "../../_chunks/runner3.mjs";
|
|
3
3
|
export { type EnvRunnerData, NodeWorkerEnvRunner };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NodeWorkerEnvRunner } from "../../_chunks/runner3.mjs";
|
|
2
2
|
export { NodeWorkerEnvRunner };
|
|
@@ -1,10 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { handleInvalidateModule, isVirtualSpecifier, parseServerAddress, registerVirtualModules, reloadEntryModule, resolveEntry } from "../../_chunks/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/node";
|
|
5
5
|
const data = workerData || {};
|
|
6
|
-
let entry = await resolveEntry(data.entry);
|
|
7
6
|
const sendMessage = (message) => parentPort?.postMessage(message);
|
|
7
|
+
const virtualEntry = isVirtualSpecifier(data.entry, data.virtual);
|
|
8
|
+
let unregisterVirtualModules;
|
|
9
|
+
let entry;
|
|
10
|
+
try {
|
|
11
|
+
unregisterVirtualModules = await registerVirtualModules(data.virtual);
|
|
12
|
+
entry = await resolveEntry(data.entry, virtualEntry);
|
|
13
|
+
} catch (error) {
|
|
14
|
+
const message = error?.message || String(error);
|
|
15
|
+
sendMessage({
|
|
16
|
+
event: "init-error",
|
|
17
|
+
error: message
|
|
18
|
+
});
|
|
19
|
+
console.error(`[env-runner] worker init failed: ${message}`);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
8
22
|
const server = serve({
|
|
9
23
|
port: 0,
|
|
10
24
|
hostname: "127.0.0.1",
|
|
@@ -27,13 +41,14 @@ parentPort?.postMessage({ address: parseServerAddress(server) });
|
|
|
27
41
|
parentPort?.on("message", async (message) => {
|
|
28
42
|
if (message?.event === "shutdown") {
|
|
29
43
|
Promise.resolve(entry.ipc?.onClose?.()).then(() => server.close()).then(() => {
|
|
44
|
+
unregisterVirtualModules();
|
|
30
45
|
parentPort?.postMessage({ event: "exit" });
|
|
31
46
|
});
|
|
32
47
|
return;
|
|
33
48
|
}
|
|
34
49
|
if (message?.event === "reload-module") {
|
|
35
50
|
try {
|
|
36
|
-
entry = await reloadEntryModule(data.entry, entry, sendMessage);
|
|
51
|
+
entry = await reloadEntryModule(data.entry, entry, sendMessage, virtualEntry);
|
|
37
52
|
parentPort?.postMessage({ event: "module-reloaded" });
|
|
38
53
|
} catch (error) {
|
|
39
54
|
parentPort?.postMessage({
|
|
@@ -43,6 +58,10 @@ parentPort?.on("message", async (message) => {
|
|
|
43
58
|
}
|
|
44
59
|
return;
|
|
45
60
|
}
|
|
61
|
+
if (message?.event === "invalidate-module") {
|
|
62
|
+
handleInvalidateModule(message, sendMessage);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
46
65
|
if (message?.type === "ping") {
|
|
47
66
|
parentPort?.postMessage({
|
|
48
67
|
type: "pong",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { WorkerHooks } from "../../_chunks/types.mjs";
|
|
2
|
+
import { BaseEnvRunner, EnvRunnerData } from "../../_chunks/base-runner.mjs";
|
|
3
3
|
declare class SelfEnvRunner extends BaseEnvRunner {
|
|
4
4
|
#private;
|
|
5
5
|
constructor(opts: {
|
|
@@ -16,6 +16,7 @@ declare class SelfEnvRunner extends BaseEnvRunner {
|
|
|
16
16
|
};
|
|
17
17
|
}): Promise<void>;
|
|
18
18
|
sendMessage(message: unknown): void;
|
|
19
|
+
invalidateModule(specifier: string): Promise<void>;
|
|
19
20
|
reloadModule(): Promise<void>;
|
|
20
21
|
protected _hasRuntime(): boolean;
|
|
21
22
|
protected _runtimeType(): string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { BaseEnvRunner } from "../../_chunks/base-runner.mjs";
|
|
2
|
+
import { reloadEntryModule, resolveEntry } from "../../_chunks/worker-utils.mjs";
|
|
3
3
|
var SelfEnvRunner = class extends BaseEnvRunner {
|
|
4
4
|
#active = false;
|
|
5
5
|
#entry;
|
|
@@ -13,7 +13,7 @@ var SelfEnvRunner = class extends BaseEnvRunner {
|
|
|
13
13
|
}
|
|
14
14
|
async fetch(input, init) {
|
|
15
15
|
if (!this.#entry || this.closed) return new Response("self env runner is unavailable", { status: 503 });
|
|
16
|
-
const request = input instanceof Request ? input : new Request(input, init);
|
|
16
|
+
const request = input instanceof Request ? input : new Request(this._resolveFetchInput(input), init);
|
|
17
17
|
return this.#entry.fetch(request);
|
|
18
18
|
}
|
|
19
19
|
async upgrade(context) {
|
|
@@ -35,6 +35,9 @@ var SelfEnvRunner = class extends BaseEnvRunner {
|
|
|
35
35
|
}
|
|
36
36
|
this.#entry?.ipc?.onMessage?.(message);
|
|
37
37
|
}
|
|
38
|
+
async invalidateModule(specifier) {
|
|
39
|
+
throw new Error(`Cannot invalidate "${specifier}": the self runner does not support virtual modules`);
|
|
40
|
+
}
|
|
38
41
|
async reloadModule() {
|
|
39
42
|
const entryPath = this._data?.entry;
|
|
40
43
|
if (!entryPath || !this.#entry) throw new Error("Cannot reload: no entry loaded");
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { EnvRunnerData } from "../../_chunks/base-runner.mjs";
|
|
2
|
+
import { VercelEnvRunner } from "../../_chunks/runner4.mjs";
|
|
3
3
|
export { type EnvRunnerData, VercelEnvRunner };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { VercelEnvRunner } from "../../_chunks/runner4.mjs";
|
|
2
2
|
export { VercelEnvRunner };
|
package/dist/vite.d.mts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "env-runner",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"description": "Generic environment runner for JavaScript runtimes.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "unjs/env-runner",
|
|
@@ -46,24 +46,25 @@
|
|
|
46
46
|
"crossws": "^0.4.5",
|
|
47
47
|
"exsolve": "^1.0.8",
|
|
48
48
|
"httpxy": "^0.5.3",
|
|
49
|
-
"srvx": "^0.11.
|
|
49
|
+
"srvx": "^0.11.16"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@netlify/runtime": "^4.1.
|
|
53
|
-
"@types/node": "^25.9.
|
|
52
|
+
"@netlify/runtime": "^4.1.25",
|
|
53
|
+
"@types/node": "^25.9.2",
|
|
54
54
|
"@typescript/native-preview": "7.0.0-dev.20260521.1",
|
|
55
|
-
"@vercel/queue": "^0.2.
|
|
56
|
-
"@vitest/coverage-v8": "^4.1.
|
|
55
|
+
"@vercel/queue": "^0.2.1",
|
|
56
|
+
"@vitest/coverage-v8": "^4.1.8",
|
|
57
57
|
"automd": "^0.4.3",
|
|
58
58
|
"changelogen": "^0.6.2",
|
|
59
59
|
"cjs-module-lexer": "^2.2.0",
|
|
60
60
|
"env-runner-fixture": "link:",
|
|
61
|
-
"
|
|
62
|
-
"
|
|
61
|
+
"es-module-lexer": "^2.1.0",
|
|
62
|
+
"miniflare": "^4.20260603.0",
|
|
63
|
+
"obuild": "^0.4.36",
|
|
63
64
|
"oxfmt": "^0.51.0",
|
|
64
|
-
"oxlint": "^1.
|
|
65
|
+
"oxlint": "^1.69.0",
|
|
65
66
|
"typescript": "^6.0.3",
|
|
66
|
-
"vitest": "^4.1.
|
|
67
|
+
"vitest": "^4.1.8"
|
|
67
68
|
},
|
|
68
69
|
"peerDependencies": {
|
|
69
70
|
"@netlify/runtime": "^4.1.23",
|
|
@@ -81,5 +82,5 @@
|
|
|
81
82
|
"optional": true
|
|
82
83
|
}
|
|
83
84
|
},
|
|
84
|
-
"packageManager": "pnpm@11.
|
|
85
|
+
"packageManager": "pnpm@11.5.2"
|
|
85
86
|
}
|