env-runner 0.2.0 → 0.2.2
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 +14 -0
- package/dist/_chunks/common-base-runner.d.mts +5 -6
- package/dist/_chunks/common-host-env.mjs +11 -0
- package/dist/_chunks/common-runtime-deps.d.mts +2 -3
- package/dist/_chunks/common-worker-utils.mjs +50 -1
- package/dist/_chunks/deno-process-runner.d.mts +2 -3
- package/dist/_chunks/deno-process-runner.mjs +3 -3
- package/dist/_chunks/libs/es-module-lexer.mjs +225 -65
- package/dist/_chunks/miniflare-runner.d.mts +8 -9
- package/dist/_chunks/miniflare-runner.mjs +99 -20
- package/dist/_chunks/netlify-runner.d.mts +3 -4
- package/dist/_chunks/node-worker-runner.d.mts +2 -3
- package/dist/_chunks/node-worker-runner.mjs +2 -1
- package/dist/_chunks/types.d.mts +11 -12
- package/dist/_chunks/vercel-runner.d.mts +2 -3
- package/dist/cli.mjs +0 -0
- package/dist/index.d.mts +38 -7
- package/dist/index.mjs +2 -1
- package/dist/runners/bun-process/runner.d.mts +2 -2
- package/dist/runners/bun-process/runner.mjs +4 -4
- package/dist/runners/bun-process/worker.mjs +8 -11
- package/dist/runners/deno-process/worker.mjs +8 -11
- package/dist/runners/node-process/runner.d.mts +2 -2
- package/dist/runners/node-process/runner.mjs +3 -3
- package/dist/runners/node-process/worker.mjs +8 -11
- package/dist/runners/node-worker/worker.mjs +8 -11
- package/dist/runners/self/runner.d.mts +2 -2
- package/dist/runners/vercel/queue-dev.d.mts +7 -8
- package/dist/vite.d.mts +4 -5
- package/package.json +30 -29
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { handleInvalidateModule, isVirtualSpecifier, parseServerAddress, registerVirtualModules, reloadEntryModule, resolveEntry } from "../../_chunks/common-worker-utils.mjs";
|
|
1
|
+
import { handleInvalidateModule, isVirtualSpecifier, parseServerAddress, registerVirtualModules, reloadEntryModule, resolveEntry, toServerOptions } from "../../_chunks/common-worker-utils.mjs";
|
|
2
2
|
import { serve } from "srvx";
|
|
3
3
|
import { plugin } from "crossws/server";
|
|
4
4
|
process.on("disconnect", () => process.exit(0));
|
|
@@ -7,9 +7,16 @@ const sendMessage = (message) => process.send(message);
|
|
|
7
7
|
const virtualEntry = isVirtualSpecifier(data.entry, data.virtual);
|
|
8
8
|
let unregisterVirtualModules;
|
|
9
9
|
let entry;
|
|
10
|
+
let server;
|
|
10
11
|
try {
|
|
11
12
|
unregisterVirtualModules = await registerVirtualModules(data.virtual);
|
|
12
13
|
entry = await resolveEntry(data.entry, virtualEntry);
|
|
14
|
+
server = serve({
|
|
15
|
+
...toServerOptions(entry),
|
|
16
|
+
fetch: (request) => entry.fetch(request),
|
|
17
|
+
plugins: [...entry.plugins || [], ...entry.websocket ? [plugin(entry.websocket)] : []]
|
|
18
|
+
});
|
|
19
|
+
await server.ready();
|
|
13
20
|
} catch (error) {
|
|
14
21
|
const message = error?.message || String(error);
|
|
15
22
|
sendMessage({
|
|
@@ -19,16 +26,6 @@ try {
|
|
|
19
26
|
console.error(`[env-runner] worker init failed: ${message}`);
|
|
20
27
|
process.exit(1);
|
|
21
28
|
}
|
|
22
|
-
const server = serve({
|
|
23
|
-
port: 0,
|
|
24
|
-
hostname: "127.0.0.1",
|
|
25
|
-
silent: true,
|
|
26
|
-
fetch: (request) => entry.fetch(request),
|
|
27
|
-
middleware: entry.middleware,
|
|
28
|
-
plugins: [...entry.plugins || [], ...entry.websocket ? [plugin(entry.websocket)] : []],
|
|
29
|
-
gracefulShutdown: false
|
|
30
|
-
});
|
|
31
|
-
await server.ready();
|
|
32
29
|
if (entry.upgrade) server.node?.server?.on("upgrade", (req, socket, head) => {
|
|
33
30
|
entry.upgrade({ node: {
|
|
34
31
|
req,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { handleInvalidateModule, isVirtualSpecifier, parseServerAddress, registerVirtualModules, reloadEntryModule, resolveEntry } from "../../_chunks/common-worker-utils.mjs";
|
|
1
|
+
import { handleInvalidateModule, isVirtualSpecifier, 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";
|
|
@@ -7,9 +7,16 @@ const sendMessage = (message) => parentPort?.postMessage(message);
|
|
|
7
7
|
const virtualEntry = isVirtualSpecifier(data.entry, data.virtual);
|
|
8
8
|
let unregisterVirtualModules;
|
|
9
9
|
let entry;
|
|
10
|
+
let server;
|
|
10
11
|
try {
|
|
11
12
|
unregisterVirtualModules = await registerVirtualModules(data.virtual);
|
|
12
13
|
entry = await resolveEntry(data.entry, virtualEntry);
|
|
14
|
+
server = serve({
|
|
15
|
+
...toServerOptions(entry),
|
|
16
|
+
fetch: (request) => entry.fetch(request),
|
|
17
|
+
plugins: [...entry.plugins || [], ...entry.websocket ? [plugin(entry.websocket)] : []]
|
|
18
|
+
});
|
|
19
|
+
await server.ready();
|
|
13
20
|
} catch (error) {
|
|
14
21
|
const message = error?.message || String(error);
|
|
15
22
|
sendMessage({
|
|
@@ -19,16 +26,6 @@ try {
|
|
|
19
26
|
console.error(`[env-runner] worker init failed: ${message}`);
|
|
20
27
|
process.exit(1);
|
|
21
28
|
}
|
|
22
|
-
const server = serve({
|
|
23
|
-
port: 0,
|
|
24
|
-
hostname: "127.0.0.1",
|
|
25
|
-
silent: true,
|
|
26
|
-
fetch: (request) => entry.fetch(request),
|
|
27
|
-
middleware: entry.middleware,
|
|
28
|
-
plugins: [...entry.plugins || [], ...entry.websocket ? [plugin(entry.websocket)] : []],
|
|
29
|
-
gracefulShutdown: false
|
|
30
|
-
});
|
|
31
|
-
await server.ready();
|
|
32
29
|
if (entry.upgrade) server.node?.server?.on("upgrade", (req, socket, head) => {
|
|
33
30
|
entry.upgrade({ node: {
|
|
34
31
|
req,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { WorkerHooks } from "../../_chunks/types.mjs";
|
|
2
2
|
import { BaseEnvRunner, EnvRunnerData } from "../../_chunks/common-base-runner.mjs";
|
|
3
|
-
declare class SelfEnvRunner extends BaseEnvRunner {
|
|
3
|
+
export declare class SelfEnvRunner extends BaseEnvRunner {
|
|
4
4
|
#private;
|
|
5
5
|
constructor(opts: {
|
|
6
6
|
name: string;
|
|
@@ -22,4 +22,4 @@ declare class SelfEnvRunner extends BaseEnvRunner {
|
|
|
22
22
|
protected _runtimeType(): string;
|
|
23
23
|
protected _closeRuntime(): Promise<void>;
|
|
24
24
|
}
|
|
25
|
-
export {
|
|
25
|
+
export type { EnvRunnerData as SelfEnvRunnerData };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RuntimeDep } from "../../_chunks/common-runtime-deps.mjs";
|
|
2
2
|
/** Metadata passed alongside each delivered message (`MessageMetadata`). */
|
|
3
|
-
interface VercelQueueMessageMetadata {
|
|
3
|
+
export interface VercelQueueMessageMetadata {
|
|
4
4
|
messageId: string;
|
|
5
5
|
deliveryCount: number;
|
|
6
6
|
createdAt: Date;
|
|
@@ -11,21 +11,21 @@ interface VercelQueueMessageMetadata {
|
|
|
11
11
|
region: string;
|
|
12
12
|
}
|
|
13
13
|
/** Instruction returned by a retry handler when the message handler throws. */
|
|
14
|
-
type VercelQueueRetryDirective = {
|
|
14
|
+
export type VercelQueueRetryDirective = {
|
|
15
15
|
afterSeconds: number;
|
|
16
16
|
} | {
|
|
17
17
|
acknowledge: true;
|
|
18
18
|
};
|
|
19
19
|
/** Function invoked with each delivered message (`MessageHandler`). */
|
|
20
|
-
type VercelQueueMessageHandler<T = unknown> = (message: T, metadata: VercelQueueMessageMetadata) => Promise<void> | void;
|
|
20
|
+
export type VercelQueueMessageHandler<T = unknown> = (message: T, metadata: VercelQueueMessageMetadata) => Promise<void> | void;
|
|
21
21
|
/** Called when the message handler throws (`RetryHandler`). */
|
|
22
|
-
type VercelQueueRetryHandler = (error: unknown, metadata: VercelQueueMessageMetadata) => VercelQueueRetryDirective | void | undefined;
|
|
22
|
+
export type VercelQueueRetryHandler = (error: unknown, metadata: VercelQueueMessageMetadata) => VercelQueueRetryDirective | void | undefined;
|
|
23
23
|
/**
|
|
24
24
|
* The `@vercel/queue` package, as imported by the consumer
|
|
25
25
|
* (`import * as queue from "@vercel/queue"`). Structurally typed so the real
|
|
26
26
|
* module namespace is assignable without env-runner depending on the package.
|
|
27
27
|
*/
|
|
28
|
-
interface VercelQueueSdk {
|
|
28
|
+
export interface VercelQueueSdk {
|
|
29
29
|
QueueClient: new (options?: any) => any;
|
|
30
30
|
registerDevConsumer?: (options: {
|
|
31
31
|
topic: string;
|
|
@@ -37,7 +37,7 @@ interface VercelQueueSdk {
|
|
|
37
37
|
}) => () => void;
|
|
38
38
|
[key: string]: unknown;
|
|
39
39
|
}
|
|
40
|
-
interface VercelQueueDevConsumer {
|
|
40
|
+
export interface VercelQueueDevConsumer {
|
|
41
41
|
/**
|
|
42
42
|
* The `@vercel/queue` package: the imported module, or a specifier for it.
|
|
43
43
|
*
|
|
@@ -95,5 +95,4 @@ interface VercelQueueDevConsumer {
|
|
|
95
95
|
* If no SDK is available, or it does not expose `registerDevConsumer`,
|
|
96
96
|
* resolves to a no-op unregister and logs a one-time warning.
|
|
97
97
|
*/
|
|
98
|
-
declare function registerVercelQueueConsumer(consumer: VercelQueueDevConsumer): Promise<() => void>;
|
|
99
|
-
export { VercelQueueDevConsumer, VercelQueueMessageHandler, VercelQueueMessageMetadata, VercelQueueRetryDirective, VercelQueueRetryHandler, VercelQueueSdk, registerVercelQueueConsumer };
|
|
98
|
+
export declare function registerVercelQueueConsumer(consumer: VercelQueueDevConsumer): Promise<() => void>;
|
package/dist/vite.d.mts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { RunnerRPCHooks } from "./_chunks/types.mjs";
|
|
2
2
|
/** Vite HotChannel-compatible interface (avoids hard dependency on vite types). */
|
|
3
|
-
interface ViteHotChannel {
|
|
3
|
+
export interface ViteHotChannel {
|
|
4
4
|
send: (data: any) => void;
|
|
5
5
|
on: (event: string, handler: (...args: any[]) => void) => void;
|
|
6
6
|
off: (event: string, handler: (...args: any[]) => void) => void;
|
|
7
7
|
}
|
|
8
8
|
/** Vite ModuleRunner transport-compatible interface. */
|
|
9
|
-
interface ViteTransport {
|
|
9
|
+
export interface ViteTransport {
|
|
10
10
|
connect: (handlers: {
|
|
11
11
|
onMessage: (payload: any) => void;
|
|
12
12
|
}) => void;
|
|
@@ -18,12 +18,11 @@ interface ViteTransport {
|
|
|
18
18
|
* Use on the **host side** to bridge env-runner IPC → Vite's DevEnvironment transport.
|
|
19
19
|
* Messages are namespaced by `envName` so multiple Vite environments can share one runner.
|
|
20
20
|
*/
|
|
21
|
-
declare function createViteHotChannel(hooks: RunnerRPCHooks, envName: string): ViteHotChannel;
|
|
21
|
+
export declare function createViteHotChannel(hooks: RunnerRPCHooks, envName: string): ViteHotChannel;
|
|
22
22
|
/**
|
|
23
23
|
* Create a Vite `ModuleRunner` transport from worker-side IPC primitives.
|
|
24
24
|
*
|
|
25
25
|
* Use on the **worker side** to bridge worker IPC → Vite's `ModuleRunner` transport.
|
|
26
26
|
* Filters messages by `envName` so multiple Vite environments can share one IPC channel.
|
|
27
27
|
*/
|
|
28
|
-
declare function createViteTransport(sendMessage: (data: any) => void, onMessage: (listener: (value: any) => void) => void, envName: string): ViteTransport;
|
|
29
|
-
export { ViteHotChannel, ViteTransport, createViteHotChannel, createViteTransport };
|
|
28
|
+
export declare function createViteTransport(sendMessage: (data: any) => void, onMessage: (listener: (value: any) => void) => void, envName: string): ViteTransport;
|
package/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "env-runner",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Generic environment runner for JavaScript runtimes.",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"repository":
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "unjs/env-runner"
|
|
9
|
+
},
|
|
7
10
|
"bin": {
|
|
8
11
|
"env-runner": "./dist/cli.mjs"
|
|
9
12
|
},
|
|
@@ -31,40 +34,38 @@
|
|
|
31
34
|
"./runners/netlify/worker": "./dist/runners/netlify/worker.mjs",
|
|
32
35
|
"./vite": "./dist/vite.mjs"
|
|
33
36
|
},
|
|
34
|
-
"scripts": {
|
|
35
|
-
"build": "obuild",
|
|
36
|
-
"dev": "vitest dev",
|
|
37
|
-
"fmt": "automd && oxlint . --fix && oxfmt .",
|
|
38
|
-
"lint": "oxlint . && oxfmt --check .",
|
|
39
|
-
"prepack": "pnpm build",
|
|
40
|
-
"env-runner": "node ./src/cli.ts",
|
|
41
|
-
"release": "pnpm test && pnpm build && changelogen --release && npm publish && git push --follow-tags",
|
|
42
|
-
"test": "pnpm lint && pnpm typecheck && vitest run --coverage",
|
|
43
|
-
"typecheck": "tsc --noEmit --skipLibCheck"
|
|
44
|
-
},
|
|
45
37
|
"dependencies": {
|
|
46
|
-
"crossws": "^0.4.
|
|
38
|
+
"crossws": "^0.4.12",
|
|
47
39
|
"exsolve": "^1.1.1",
|
|
48
40
|
"httpxy": "^0.5.5",
|
|
49
|
-
"srvx": "^0.
|
|
41
|
+
"srvx": "^1.0.3"
|
|
50
42
|
},
|
|
51
43
|
"devDependencies": {
|
|
52
|
-
"@netlify/runtime": "^5",
|
|
53
|
-
"@types/node": "^26.
|
|
54
|
-
"@vercel/queue": "^0.
|
|
55
|
-
"@vitest/coverage-v8": "^
|
|
44
|
+
"@netlify/runtime": "^5.0.3",
|
|
45
|
+
"@types/node": "^26.4.1",
|
|
46
|
+
"@vercel/queue": "^0.5.1",
|
|
47
|
+
"@vitest/coverage-v8": "^5.0.0",
|
|
56
48
|
"automd": "^0.4.3",
|
|
57
49
|
"changelogen": "^0.6.2",
|
|
58
50
|
"cjs-module-lexer": "^2.2.1",
|
|
59
51
|
"env-runner-fixture": "link:",
|
|
60
|
-
"es-module-lexer": "^
|
|
61
|
-
"miniflare": "^4",
|
|
62
|
-
"obuild": "^0.4.
|
|
63
|
-
"oxfmt": ">=0.
|
|
64
|
-
"oxlint": "^1.
|
|
65
|
-
"typescript": "^7",
|
|
66
|
-
"vitest": "^
|
|
67
|
-
"wrangler": "^4.
|
|
52
|
+
"es-module-lexer": "^3.0.1",
|
|
53
|
+
"miniflare": "^4.20260730.0",
|
|
54
|
+
"obuild": "^0.4.39",
|
|
55
|
+
"oxfmt": ">=0.67.0",
|
|
56
|
+
"oxlint": "^1.81.0",
|
|
57
|
+
"typescript": "^7.0.2",
|
|
58
|
+
"vitest": "^5.0.0",
|
|
59
|
+
"wrangler": "^4.129.0"
|
|
68
60
|
},
|
|
69
|
-
"
|
|
70
|
-
|
|
61
|
+
"scripts": {
|
|
62
|
+
"build": "obuild",
|
|
63
|
+
"dev": "vitest dev",
|
|
64
|
+
"fmt": "automd && oxlint . --fix && oxfmt .",
|
|
65
|
+
"lint": "oxlint . && oxfmt --check .",
|
|
66
|
+
"env-runner": "node ./src/cli.ts",
|
|
67
|
+
"release": "pnpm test && pnpm build && changelogen --release && pnpm publish && git push --follow-tags",
|
|
68
|
+
"test": "pnpm lint && pnpm typecheck && vitest run --coverage",
|
|
69
|
+
"typecheck": "tsc --noEmit --skipLibCheck"
|
|
70
|
+
}
|
|
71
|
+
}
|