env-runner 0.1.5 → 0.1.7
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 +45 -15
- package/dist/THIRD-PARTY-LICENSES.md +0 -29
- package/dist/_chunks/base-runner.d.mts +0 -1
- package/dist/_chunks/base-runner.mjs +0 -15
- package/dist/_chunks/libs/cjs-module-lexer.mjs +1 -1
- package/dist/_chunks/runner.mjs +17 -13
- package/dist/_chunks/runner2.d.mts +8 -0
- package/dist/_chunks/runner2.mjs +14 -2
- package/dist/_chunks/runner3.d.mts +19 -0
- package/dist/_chunks/runner3.mjs +62 -0
- package/dist/_chunks/runner4.d.mts +17 -0
- package/dist/_chunks/runner4.mjs +42 -0
- package/dist/_chunks/runner5.d.mts +17 -0
- package/dist/_chunks/runner5.mjs +47 -0
- package/dist/_chunks/server.mjs +29 -8
- package/dist/_chunks/types.d.mts +1 -1
- package/dist/cli.mjs +4 -4
- package/dist/index.d.mts +17 -6
- package/dist/index.mjs +3 -3
- package/dist/runners/bun-process/runner.mjs +0 -8
- package/dist/runners/deno-process/runner.mjs +0 -2
- package/dist/runners/deno-process/worker.mjs +31 -8
- package/dist/runners/miniflare/runner.mjs +0 -3
- package/dist/runners/netlify/runner.d.mts +3 -0
- package/dist/runners/netlify/runner.mjs +2 -0
- package/dist/runners/netlify/worker.d.mts +1 -0
- package/dist/runners/netlify/worker.mjs +43 -0
- package/dist/runners/node-process/runner.mjs +0 -6
- package/dist/runners/node-worker/runner.d.mts +3 -19
- package/dist/runners/node-worker/runner.mjs +1 -67
- package/dist/runners/self/runner.mjs +0 -1
- package/dist/runners/vercel/runner.d.mts +3 -0
- package/dist/runners/vercel/runner.mjs +2 -0
- package/dist/runners/vercel/worker.d.mts +1 -0
- package/dist/runners/vercel/worker.mjs +50 -0
- package/package.json +27 -18
- package/dist/_chunks/libs/std-env.mjs +0 -171
package/dist/index.d.mts
CHANGED
|
@@ -2,6 +2,8 @@ import { a as RunnerMessageListener, c as UpgradeHandler, i as RPCOptions, l as
|
|
|
2
2
|
import { n as EnvRunnerData, t as BaseEnvRunner } from "./_chunks/base-runner.mjs";
|
|
3
3
|
import { t as DenoProcessEnvRunner } from "./_chunks/runner.mjs";
|
|
4
4
|
import { i as TransformResult, n as MiniflareEnvRunnerOptions, r as MiniflareExportInfo, t as MiniflareEnvRunner } from "./_chunks/runner2.mjs";
|
|
5
|
+
import { t as VercelEnvRunner } from "./_chunks/runner4.mjs";
|
|
6
|
+
import { t as NetlifyEnvRunner } from "./_chunks/runner5.mjs";
|
|
5
7
|
import { ServerOptions } from "srvx";
|
|
6
8
|
import { Hooks } from "crossws";
|
|
7
9
|
|
|
@@ -16,6 +18,8 @@ declare class RunnerManager implements EnvRunner {
|
|
|
16
18
|
private _messageListeners;
|
|
17
19
|
private _closed;
|
|
18
20
|
private _reloading;
|
|
21
|
+
private _closeListeners;
|
|
22
|
+
private _readyListeners;
|
|
19
23
|
constructor(runner?: EnvRunner);
|
|
20
24
|
get ready(): boolean;
|
|
21
25
|
get closed(): boolean;
|
|
@@ -32,8 +36,10 @@ declare class RunnerManager implements EnvRunner {
|
|
|
32
36
|
}): Promise<T>;
|
|
33
37
|
reloadModule(timeout?: number): Promise<void>;
|
|
34
38
|
close(): Promise<void>;
|
|
35
|
-
onClose
|
|
36
|
-
|
|
39
|
+
onClose(listener: (runner: EnvRunner, cause?: unknown) => void): void;
|
|
40
|
+
offClose(listener: (runner: EnvRunner, cause?: unknown) => void): void;
|
|
41
|
+
onReady(listener: (runner: EnvRunner, address?: WorkerAddress) => void): void;
|
|
42
|
+
offReady(listener: (runner: EnvRunner, address?: WorkerAddress) => void): void;
|
|
37
43
|
private _internalListener;
|
|
38
44
|
private _attach;
|
|
39
45
|
private _detach;
|
|
@@ -42,13 +48,15 @@ declare class RunnerManager implements EnvRunner {
|
|
|
42
48
|
}
|
|
43
49
|
//#endregion
|
|
44
50
|
//#region src/loader.d.ts
|
|
45
|
-
type RunnerName = "node-worker" | "node-process" | "bun-process" | "deno-process" | "self" | "miniflare";
|
|
51
|
+
type RunnerName = "node-worker" | "node-process" | "bun-process" | "deno-process" | "self" | "miniflare" | "vercel" | "netlify";
|
|
46
52
|
interface LoadRunnerOptions {
|
|
47
53
|
name: string;
|
|
48
54
|
workerEntry?: string;
|
|
49
55
|
hooks?: WorkerHooks;
|
|
50
56
|
data?: EnvRunnerData;
|
|
51
57
|
execArgv?: string[];
|
|
58
|
+
/** Additional runner-specific options (passed through to the runner constructor). */
|
|
59
|
+
[key: string]: unknown;
|
|
52
60
|
}
|
|
53
61
|
declare function loadRunner(runner: RunnerName, opts: LoadRunnerOptions): Promise<EnvRunner>;
|
|
54
62
|
//#endregion
|
|
@@ -75,9 +83,12 @@ declare class EnvServer extends RunnerManager {
|
|
|
75
83
|
private _opts;
|
|
76
84
|
private _watchers;
|
|
77
85
|
private _reloadTimeout;
|
|
86
|
+
private _reloadListeners;
|
|
78
87
|
runner: Awaited<ReturnType<typeof loadRunner>> | null;
|
|
79
|
-
/**
|
|
80
|
-
onReload
|
|
88
|
+
/** Register a listener called when the runner is reloaded due to a file change. */
|
|
89
|
+
onReload(listener: () => void): void;
|
|
90
|
+
/** Remove a previously registered reload listener. */
|
|
91
|
+
offReload(listener: () => void): void;
|
|
81
92
|
constructor(opts: EnvServerOptions);
|
|
82
93
|
/** Start the server by loading and attaching the runner. */
|
|
83
94
|
start(): Promise<this>;
|
|
@@ -106,4 +117,4 @@ interface AppEntry {
|
|
|
106
117
|
ipc?: AppEntryIPC;
|
|
107
118
|
}
|
|
108
119
|
//#endregion
|
|
109
|
-
export { type AppEntry, type AppEntryIPC, type AppEntryIPCContext, BaseEnvRunner, DenoProcessEnvRunner, type EnvRunnerData as DenoProcessEnvRunnerData, type EnvRunnerData, type EnvRunner, EnvServer, type EnvServerOptions, type FetchHandler, type LoadRunnerOptions, MiniflareEnvRunner, type MiniflareEnvRunnerOptions, type MiniflareExportInfo, type NodeUpgradeContext, type RPCOptions, RunnerManager, type RunnerMessageListener, type RunnerName, type RunnerRPCHooks, type TransformResult, type UpgradeContext, type UpgradeHandler, type WorkerAddress, type WorkerHooks, loadRunner };
|
|
120
|
+
export { type AppEntry, type AppEntryIPC, type AppEntryIPCContext, BaseEnvRunner, DenoProcessEnvRunner, type EnvRunnerData as DenoProcessEnvRunnerData, type EnvRunnerData, type EnvRunner, EnvServer, type EnvServerOptions, type FetchHandler, type LoadRunnerOptions, MiniflareEnvRunner, type MiniflareEnvRunnerOptions, type MiniflareExportInfo, NetlifyEnvRunner, type NodeUpgradeContext, type RPCOptions, RunnerManager, type RunnerMessageListener, type RunnerName, type RunnerRPCHooks, type TransformResult, type UpgradeContext, type UpgradeHandler, VercelEnvRunner, type WorkerAddress, type WorkerHooks, loadRunner };
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import "./_chunks/libs/std-env.mjs";
|
|
2
1
|
import { t as BaseEnvRunner } from "./_chunks/base-runner.mjs";
|
|
3
2
|
import { n as loadRunner, r as RunnerManager, t as EnvServer } from "./_chunks/server.mjs";
|
|
4
3
|
import { t as DenoProcessEnvRunner } from "./_chunks/runner.mjs";
|
|
5
|
-
import "./_chunks/libs/cjs-module-lexer.mjs";
|
|
6
4
|
import { t as MiniflareEnvRunner } from "./_chunks/runner2.mjs";
|
|
7
|
-
|
|
5
|
+
import { t as VercelEnvRunner } from "./_chunks/runner4.mjs";
|
|
6
|
+
import { t as NetlifyEnvRunner } from "./_chunks/runner5.mjs";
|
|
7
|
+
export { BaseEnvRunner, DenoProcessEnvRunner, EnvServer, MiniflareEnvRunner, NetlifyEnvRunner, RunnerManager, VercelEnvRunner, loadRunner };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import "../../_chunks/libs/std-env.mjs";
|
|
2
1
|
import { t as BaseEnvRunner } from "../../_chunks/base-runner.mjs";
|
|
3
2
|
import { existsSync } from "node:fs";
|
|
4
3
|
import { execSync, spawn } from "node:child_process";
|
|
@@ -41,13 +40,6 @@ var BunProcessEnvRunner = class extends BaseEnvRunner {
|
|
|
41
40
|
}
|
|
42
41
|
async _closeRuntime() {
|
|
43
42
|
if (!this.#process) return;
|
|
44
|
-
if (this.#process._exitCode == null) await this._requestGracefulShutdown(() => {
|
|
45
|
-
try {
|
|
46
|
-
this.#process.send({ event: "shutdown" });
|
|
47
|
-
} catch {}
|
|
48
|
-
}, (resolve) => {
|
|
49
|
-
this.#process?.exited.then(() => resolve());
|
|
50
|
-
}, () => this.#process?._exitCode != null);
|
|
51
43
|
this.#process.removeAllListeners?.();
|
|
52
44
|
try {
|
|
53
45
|
this.#process.kill();
|
|
@@ -4,7 +4,9 @@ import { plugin } from "crossws/server";
|
|
|
4
4
|
//#region src/runners/deno-process/worker.ts
|
|
5
5
|
const data = JSON.parse(process.env.ENV_RUNNER_DATA || "{}");
|
|
6
6
|
let entry = await resolveEntry(data.entry);
|
|
7
|
-
const
|
|
7
|
+
const _stdout = globalThis.Deno?.stdout ? { write: (s) => globalThis.Deno.stdout.writeSync(new TextEncoder().encode(s)) } : process.stdout;
|
|
8
|
+
const sendMessage = (message) => _stdout.write(JSON.stringify(message) + "\n");
|
|
9
|
+
const _stdin = globalThis.Deno?.stdin?.readable || process.stdin;
|
|
8
10
|
const server = serve({
|
|
9
11
|
port: 0,
|
|
10
12
|
hostname: "127.0.0.1",
|
|
@@ -23,20 +25,40 @@ if (entry.upgrade) server.node?.server?.on("upgrade", (req, socket, head) => {
|
|
|
23
25
|
} });
|
|
24
26
|
});
|
|
25
27
|
if (entry.ipc) await entry.ipc.onOpen?.({ sendMessage });
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
sendMessage({ address: parseServerAddress(server) });
|
|
29
|
+
async function readMessages() {
|
|
30
|
+
const decoder = new TextDecoder();
|
|
31
|
+
let buffer = "";
|
|
32
|
+
for await (const chunk of _stdin) {
|
|
33
|
+
buffer += decoder.decode(chunk, { stream: true });
|
|
34
|
+
let newlineIdx;
|
|
35
|
+
while ((newlineIdx = buffer.indexOf("\n")) !== -1) {
|
|
36
|
+
const line = buffer.slice(0, newlineIdx);
|
|
37
|
+
buffer = buffer.slice(newlineIdx + 1);
|
|
38
|
+
if (!line) continue;
|
|
39
|
+
let message;
|
|
40
|
+
try {
|
|
41
|
+
message = JSON.parse(line);
|
|
42
|
+
} catch {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
await handleMessage(message);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async function handleMessage(message) {
|
|
28
50
|
if (message?.event === "shutdown") {
|
|
29
51
|
Promise.resolve(entry.ipc?.onClose?.()).then(() => server.close()).then(() => {
|
|
30
|
-
|
|
52
|
+
sendMessage({ event: "exit" });
|
|
31
53
|
});
|
|
32
54
|
return;
|
|
33
55
|
}
|
|
34
56
|
if (message?.event === "reload-module") {
|
|
35
57
|
try {
|
|
36
58
|
entry = await reloadEntryModule(data.entry, entry, sendMessage);
|
|
37
|
-
|
|
59
|
+
sendMessage({ event: "module-reloaded" });
|
|
38
60
|
} catch (error) {
|
|
39
|
-
|
|
61
|
+
sendMessage({
|
|
40
62
|
event: "module-reloaded",
|
|
41
63
|
error: error?.message || String(error)
|
|
42
64
|
});
|
|
@@ -44,13 +66,14 @@ process.on("message", async (message) => {
|
|
|
44
66
|
return;
|
|
45
67
|
}
|
|
46
68
|
if (message?.type === "ping") {
|
|
47
|
-
|
|
69
|
+
sendMessage({
|
|
48
70
|
type: "pong",
|
|
49
71
|
data: message.data
|
|
50
72
|
});
|
|
51
73
|
return;
|
|
52
74
|
}
|
|
53
75
|
entry.ipc?.onMessage?.(message);
|
|
54
|
-
}
|
|
76
|
+
}
|
|
77
|
+
readMessages().catch(() => {});
|
|
55
78
|
//#endregion
|
|
56
79
|
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
//#region src/runners/netlify/worker.ts
|
|
2
|
+
try {
|
|
3
|
+
const { startRuntime } = await import("@netlify/runtime");
|
|
4
|
+
startRuntime({
|
|
5
|
+
deployID: "0",
|
|
6
|
+
siteID: "0",
|
|
7
|
+
env: {
|
|
8
|
+
get: (key) => process.env[key],
|
|
9
|
+
has: (key) => key in process.env,
|
|
10
|
+
set: (key, value) => {
|
|
11
|
+
process.env[key] = value;
|
|
12
|
+
},
|
|
13
|
+
delete: (key) => {
|
|
14
|
+
delete process.env[key];
|
|
15
|
+
},
|
|
16
|
+
toObject: () => ({ ...process.env })
|
|
17
|
+
},
|
|
18
|
+
getRequestContext: () => null,
|
|
19
|
+
cache: { getCacheAPIContext: () => null }
|
|
20
|
+
});
|
|
21
|
+
} catch {
|
|
22
|
+
if (!process.env.__ENV_RUNNER_NETLIFY_WARNED) {
|
|
23
|
+
process.env.__ENV_RUNNER_NETLIFY_WARNED = "1";
|
|
24
|
+
console.warn("@netlify/runtime is not installed. Install it for full Netlify runtime emulation: npx nypm i -D @netlify/runtime");
|
|
25
|
+
}
|
|
26
|
+
globalThis.Netlify = {
|
|
27
|
+
context: null,
|
|
28
|
+
env: {
|
|
29
|
+
get: (key) => process.env[key],
|
|
30
|
+
has: (key) => key in process.env,
|
|
31
|
+
set: (key, value) => {
|
|
32
|
+
process.env[key] = value;
|
|
33
|
+
},
|
|
34
|
+
delete: (key) => {
|
|
35
|
+
delete process.env[key];
|
|
36
|
+
},
|
|
37
|
+
toObject: () => ({ ...process.env })
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
await import("../node-worker/worker.mjs");
|
|
42
|
+
//#endregion
|
|
43
|
+
export {};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import "../../_chunks/libs/std-env.mjs";
|
|
2
1
|
import { t as BaseEnvRunner } from "../../_chunks/base-runner.mjs";
|
|
3
2
|
import { existsSync } from "node:fs";
|
|
4
3
|
import { fork } from "node:child_process";
|
|
@@ -27,11 +26,6 @@ var NodeProcessEnvRunner = class extends BaseEnvRunner {
|
|
|
27
26
|
}
|
|
28
27
|
async _closeRuntime() {
|
|
29
28
|
if (!this.#process) return;
|
|
30
|
-
await this._requestGracefulShutdown(() => this.#process.send({ event: "shutdown" }), (resolve) => {
|
|
31
|
-
this.#process?.on("message", (message) => {
|
|
32
|
-
if (message.event === "exit") resolve();
|
|
33
|
-
});
|
|
34
|
-
}, () => this.#process?._exitCode != null);
|
|
35
29
|
this.#process.removeAllListeners();
|
|
36
30
|
this.#process.kill();
|
|
37
31
|
this.#process = void 0;
|
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
//#region src/runners/node-worker/runner.d.ts
|
|
5
|
-
declare class NodeWorkerEnvRunner extends BaseEnvRunner {
|
|
6
|
-
#private;
|
|
7
|
-
constructor(opts: {
|
|
8
|
-
name: string;
|
|
9
|
-
workerEntry?: string;
|
|
10
|
-
hooks?: WorkerHooks;
|
|
11
|
-
data?: EnvRunnerData;
|
|
12
|
-
});
|
|
13
|
-
sendMessage(message: unknown): void;
|
|
14
|
-
protected _hasRuntime(): boolean;
|
|
15
|
-
protected _runtimeType(): string;
|
|
16
|
-
protected _closeRuntime(): Promise<void>;
|
|
17
|
-
}
|
|
18
|
-
//#endregion
|
|
19
|
-
export { type EnvRunnerData, NodeWorkerEnvRunner };
|
|
1
|
+
import { n as EnvRunnerData } from "../../_chunks/base-runner.mjs";
|
|
2
|
+
import { t as NodeWorkerEnvRunner } from "../../_chunks/runner3.mjs";
|
|
3
|
+
export { EnvRunnerData, NodeWorkerEnvRunner };
|
|
@@ -1,68 +1,2 @@
|
|
|
1
|
-
import "../../_chunks/
|
|
2
|
-
import { t as BaseEnvRunner } from "../../_chunks/base-runner.mjs";
|
|
3
|
-
import { existsSync } from "node:fs";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
|
-
import { Worker } from "node:worker_threads";
|
|
6
|
-
//#region src/runners/node-worker/runner.ts
|
|
7
|
-
let _defaultEntry;
|
|
8
|
-
var NodeWorkerEnvRunner = class extends BaseEnvRunner {
|
|
9
|
-
#worker;
|
|
10
|
-
constructor(opts) {
|
|
11
|
-
_defaultEntry ||= fileURLToPath(import.meta.resolve("env-runner/runners/node-worker/worker"));
|
|
12
|
-
super({
|
|
13
|
-
...opts,
|
|
14
|
-
workerEntry: opts.workerEntry || _defaultEntry
|
|
15
|
-
});
|
|
16
|
-
this.#initWorker();
|
|
17
|
-
}
|
|
18
|
-
sendMessage(message) {
|
|
19
|
-
if (!this.#worker) throw new Error("Node env worker should be initialized before sending messages.");
|
|
20
|
-
this.#worker.postMessage(message);
|
|
21
|
-
}
|
|
22
|
-
_hasRuntime() {
|
|
23
|
-
return Boolean(this.#worker);
|
|
24
|
-
}
|
|
25
|
-
_runtimeType() {
|
|
26
|
-
return "worker";
|
|
27
|
-
}
|
|
28
|
-
async _closeRuntime() {
|
|
29
|
-
if (!this.#worker) return;
|
|
30
|
-
await this._requestGracefulShutdown(() => this.#worker.postMessage({ event: "shutdown" }), (resolve) => {
|
|
31
|
-
this.#worker?.on("message", (message) => {
|
|
32
|
-
if (message.event === "exit") resolve();
|
|
33
|
-
});
|
|
34
|
-
}, () => Boolean(this.#worker?._exitCode));
|
|
35
|
-
this.#worker.removeAllListeners();
|
|
36
|
-
await this.#worker.terminate().catch((error) => {
|
|
37
|
-
console.error(error);
|
|
38
|
-
});
|
|
39
|
-
this.#worker = void 0;
|
|
40
|
-
}
|
|
41
|
-
#initWorker() {
|
|
42
|
-
if (!existsSync(this._workerEntry)) {
|
|
43
|
-
this.close(`worker entry not found in "${this._workerEntry}".`);
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const worker = new Worker(this._workerEntry, {
|
|
47
|
-
env: { ...process.env },
|
|
48
|
-
workerData: {
|
|
49
|
-
name: this._name,
|
|
50
|
-
...this._data
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
worker.once("exit", (code) => {
|
|
54
|
-
worker._exitCode = code;
|
|
55
|
-
this.close(`worker exited with code ${code}`);
|
|
56
|
-
});
|
|
57
|
-
worker.once("error", (error) => {
|
|
58
|
-
console.error(`Worker error:`, error);
|
|
59
|
-
this.close(error);
|
|
60
|
-
});
|
|
61
|
-
worker.on("message", (message) => {
|
|
62
|
-
this._handleMessage(message);
|
|
63
|
-
});
|
|
64
|
-
this.#worker = worker;
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
//#endregion
|
|
1
|
+
import { t as NodeWorkerEnvRunner } from "../../_chunks/runner3.mjs";
|
|
68
2
|
export { NodeWorkerEnvRunner };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
//#region src/runners/vercel/worker.ts
|
|
2
|
+
const SYMBOL_FOR_REQ_CONTEXT = Symbol.for("@vercel/request-context");
|
|
3
|
+
const waitUntilPromises = /* @__PURE__ */ new Set();
|
|
4
|
+
const cacheStore = /* @__PURE__ */ new Map();
|
|
5
|
+
const cacheTags = /* @__PURE__ */ new Set();
|
|
6
|
+
globalThis[SYMBOL_FOR_REQ_CONTEXT] = { get: () => ({
|
|
7
|
+
waitUntil(promise) {
|
|
8
|
+
waitUntilPromises.add(promise);
|
|
9
|
+
promise.finally(() => waitUntilPromises.delete(promise));
|
|
10
|
+
},
|
|
11
|
+
cache: {
|
|
12
|
+
async get(key) {
|
|
13
|
+
const entry = cacheStore.get(key);
|
|
14
|
+
if (!entry) return null;
|
|
15
|
+
if (entry.ttl && entry.lastModified + entry.ttl * 1e3 < Date.now()) {
|
|
16
|
+
cacheStore.delete(key);
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return JSON.parse(entry.value);
|
|
20
|
+
},
|
|
21
|
+
async set(key, value, options) {
|
|
22
|
+
cacheStore.set(key, {
|
|
23
|
+
value: JSON.stringify(value ?? null),
|
|
24
|
+
lastModified: Date.now(),
|
|
25
|
+
ttl: options?.ttl,
|
|
26
|
+
tags: new Set(options?.tags || [])
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
async delete(key) {
|
|
30
|
+
cacheStore.delete(key);
|
|
31
|
+
},
|
|
32
|
+
async expireTag(tag) {
|
|
33
|
+
const tags = Array.isArray(tag) ? tag : [tag];
|
|
34
|
+
for (const [key, entry] of cacheStore) if (tags.some((t) => entry.tags.has(t))) cacheStore.delete(key);
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
purge: {
|
|
38
|
+
invalidateByTag: (_tag) => Promise.resolve(),
|
|
39
|
+
dangerouslyDeleteByTag: (_tag) => Promise.resolve(),
|
|
40
|
+
invalidateBySrcImage: (_src) => Promise.resolve(),
|
|
41
|
+
dangerouslyDeleteBySrcImage: (_src) => Promise.resolve()
|
|
42
|
+
},
|
|
43
|
+
addCacheTag(tag) {
|
|
44
|
+
for (const t of Array.isArray(tag) ? tag : [tag]) cacheTags.add(t);
|
|
45
|
+
return Promise.resolve();
|
|
46
|
+
}
|
|
47
|
+
}) };
|
|
48
|
+
await import("../node-worker/worker.mjs");
|
|
49
|
+
//#endregion
|
|
50
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "env-runner",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Generic environment runner for JavaScript runtimes.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "unjs/env-runner",
|
|
@@ -24,6 +24,10 @@
|
|
|
24
24
|
"./runners/deno-process/worker": "./dist/runners/deno-process/worker.mjs",
|
|
25
25
|
"./runners/self": "./dist/runners/self/runner.mjs",
|
|
26
26
|
"./runners/miniflare": "./dist/runners/miniflare/runner.mjs",
|
|
27
|
+
"./runners/vercel": "./dist/runners/vercel/runner.mjs",
|
|
28
|
+
"./runners/vercel/worker": "./dist/runners/vercel/worker.mjs",
|
|
29
|
+
"./runners/netlify": "./dist/runners/netlify/runner.mjs",
|
|
30
|
+
"./runners/netlify/worker": "./dist/runners/netlify/worker.mjs",
|
|
27
31
|
"./vite": "./dist/vite.mjs"
|
|
28
32
|
},
|
|
29
33
|
"scripts": {
|
|
@@ -39,32 +43,37 @@
|
|
|
39
43
|
},
|
|
40
44
|
"dependencies": {
|
|
41
45
|
"crossws": "^0.4.4",
|
|
42
|
-
"
|
|
43
|
-
"
|
|
46
|
+
"exsolve": "^1.0.8",
|
|
47
|
+
"httpxy": "^0.5.0",
|
|
48
|
+
"srvx": "^0.11.13"
|
|
44
49
|
},
|
|
45
50
|
"devDependencies": {
|
|
46
|
-
"@
|
|
47
|
-
"@
|
|
48
|
-
"@
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
+
"@netlify/runtime": "^4.1.20",
|
|
52
|
+
"@types/node": "^25.5.0",
|
|
53
|
+
"@typescript/native-preview": "^7.0.0-dev.20260327.2",
|
|
54
|
+
"@vitest/coverage-v8": "^4.1.2",
|
|
55
|
+
"automd": "^0.4.3",
|
|
56
|
+
"changelogen": "^0.6.2",
|
|
51
57
|
"cjs-module-lexer": "^2.2.0",
|
|
52
|
-
"env-runner-fixture": "link
|
|
53
|
-
"miniflare": "^4.
|
|
54
|
-
"obuild": "
|
|
55
|
-
"oxfmt": "
|
|
56
|
-
"oxlint": "
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"vitest": "latest"
|
|
58
|
+
"env-runner-fixture": "link:",
|
|
59
|
+
"miniflare": "^4.20260317.3",
|
|
60
|
+
"obuild": "^0.4.32",
|
|
61
|
+
"oxfmt": "^0.42.0",
|
|
62
|
+
"oxlint": "^1.57.0",
|
|
63
|
+
"typescript": "^6.0.2",
|
|
64
|
+
"vitest": "^4.1.2"
|
|
60
65
|
},
|
|
61
66
|
"peerDependencies": {
|
|
62
|
-
"
|
|
67
|
+
"@netlify/runtime": "^4",
|
|
68
|
+
"miniflare": "^4.20260317.3"
|
|
63
69
|
},
|
|
64
70
|
"peerDependenciesMeta": {
|
|
65
71
|
"miniflare": {
|
|
66
72
|
"optional": true
|
|
73
|
+
},
|
|
74
|
+
"@netlify/runtime": {
|
|
75
|
+
"optional": true
|
|
67
76
|
}
|
|
68
77
|
},
|
|
69
|
-
"packageManager": "pnpm@10.
|
|
78
|
+
"packageManager": "pnpm@10.33.0"
|
|
70
79
|
}
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
//#region node_modules/.pnpm/std-env@4.0.0-rc.1/node_modules/std-env/dist/index.mjs
|
|
2
|
-
const e = globalThis.process?.env || Object.create(null), t = globalThis.process || { env: e }, n = t !== void 0 && t.env && t.env.NODE_ENV || void 0, r = [
|
|
3
|
-
[`claude`, [`CLAUDECODE`, `CLAUDE_CODE`]],
|
|
4
|
-
[`replit`, [`REPL_ID`]],
|
|
5
|
-
[`gemini`, [`GEMINI_CLI`]],
|
|
6
|
-
[`codex`, [`CODEX_SANDBOX`, `CODEX_THREAD_ID`]],
|
|
7
|
-
[`opencode`, [`OPENCODE`]],
|
|
8
|
-
[`pi`, [i(`PATH`, /\.pi[\\/]agent/)]],
|
|
9
|
-
[`auggie`, [`AUGMENT_AGENT`]],
|
|
10
|
-
[`goose`, [`GOOSE_PROVIDER`]],
|
|
11
|
-
[`devin`, [i(`EDITOR`, /devin/)]],
|
|
12
|
-
[`cursor`, [`CURSOR_AGENT`]],
|
|
13
|
-
[`kiro`, [i(`TERM_PROGRAM`, /kiro/)]]
|
|
14
|
-
];
|
|
15
|
-
function i(t, n) {
|
|
16
|
-
return () => {
|
|
17
|
-
let r = e[t];
|
|
18
|
-
return r ? n.test(r) : !1;
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
function a() {
|
|
22
|
-
let t = e.AI_AGENT;
|
|
23
|
-
if (t) return { name: t.toLowerCase() };
|
|
24
|
-
for (let [t, n] of r) for (let r of n) if (typeof r == `string` ? e[r] : r()) return { name: t };
|
|
25
|
-
return {};
|
|
26
|
-
}
|
|
27
|
-
const o = a();
|
|
28
|
-
o.name;
|
|
29
|
-
o.name;
|
|
30
|
-
const l = [
|
|
31
|
-
[`APPVEYOR`],
|
|
32
|
-
[
|
|
33
|
-
`AWS_AMPLIFY`,
|
|
34
|
-
`AWS_APP_ID`,
|
|
35
|
-
{ ci: !0 }
|
|
36
|
-
],
|
|
37
|
-
[`AZURE_PIPELINES`, `SYSTEM_TEAMFOUNDATIONCOLLECTIONURI`],
|
|
38
|
-
[`AZURE_STATIC`, `INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN`],
|
|
39
|
-
[`APPCIRCLE`, `AC_APPCIRCLE`],
|
|
40
|
-
[`BAMBOO`, `bamboo_planKey`],
|
|
41
|
-
[`BITBUCKET`, `BITBUCKET_COMMIT`],
|
|
42
|
-
[`BITRISE`, `BITRISE_IO`],
|
|
43
|
-
[`BUDDY`, `BUDDY_WORKSPACE_ID`],
|
|
44
|
-
[`BUILDKITE`],
|
|
45
|
-
[`CIRCLE`, `CIRCLECI`],
|
|
46
|
-
[`CIRRUS`, `CIRRUS_CI`],
|
|
47
|
-
[
|
|
48
|
-
`CLOUDFLARE_PAGES`,
|
|
49
|
-
`CF_PAGES`,
|
|
50
|
-
{ ci: !0 }
|
|
51
|
-
],
|
|
52
|
-
[
|
|
53
|
-
`CLOUDFLARE_WORKERS`,
|
|
54
|
-
`WORKERS_CI`,
|
|
55
|
-
{ ci: !0 }
|
|
56
|
-
],
|
|
57
|
-
[`GOOGLE_CLOUDRUN`, `K_SERVICE`],
|
|
58
|
-
[`GOOGLE_CLOUDRUN_JOB`, `CLOUD_RUN_JOB`],
|
|
59
|
-
[`CODEBUILD`, `CODEBUILD_BUILD_ARN`],
|
|
60
|
-
[`CODEFRESH`, `CF_BUILD_ID`],
|
|
61
|
-
[`DRONE`],
|
|
62
|
-
[`DRONE`, `DRONE_BUILD_EVENT`],
|
|
63
|
-
[`DSARI`],
|
|
64
|
-
[`GITHUB_ACTIONS`],
|
|
65
|
-
[`GITLAB`, `GITLAB_CI`],
|
|
66
|
-
[`GITLAB`, `CI_MERGE_REQUEST_ID`],
|
|
67
|
-
[`GOCD`, `GO_PIPELINE_LABEL`],
|
|
68
|
-
[`LAYERCI`],
|
|
69
|
-
[`JENKINS`, `JENKINS_URL`],
|
|
70
|
-
[`HUDSON`, `HUDSON_URL`],
|
|
71
|
-
[`MAGNUM`],
|
|
72
|
-
[`NETLIFY`],
|
|
73
|
-
[
|
|
74
|
-
`NETLIFY`,
|
|
75
|
-
`NETLIFY_LOCAL`,
|
|
76
|
-
{ ci: !1 }
|
|
77
|
-
],
|
|
78
|
-
[`NEVERCODE`],
|
|
79
|
-
[`RENDER`],
|
|
80
|
-
[`SAIL`, `SAILCI`],
|
|
81
|
-
[`SEMAPHORE`],
|
|
82
|
-
[`SCREWDRIVER`],
|
|
83
|
-
[`SHIPPABLE`],
|
|
84
|
-
[`SOLANO`, `TDDIUM`],
|
|
85
|
-
[`STRIDER`],
|
|
86
|
-
[`TEAMCITY`, `TEAMCITY_VERSION`],
|
|
87
|
-
[`TRAVIS`],
|
|
88
|
-
[`VERCEL`, `NOW_BUILDER`],
|
|
89
|
-
[
|
|
90
|
-
`VERCEL`,
|
|
91
|
-
`VERCEL`,
|
|
92
|
-
{ ci: !1 }
|
|
93
|
-
],
|
|
94
|
-
[
|
|
95
|
-
`VERCEL`,
|
|
96
|
-
`VERCEL_ENV`,
|
|
97
|
-
{ ci: !1 }
|
|
98
|
-
],
|
|
99
|
-
[`APPCENTER`, `APPCENTER_BUILD_ID`],
|
|
100
|
-
[
|
|
101
|
-
`CODESANDBOX`,
|
|
102
|
-
`CODESANDBOX_SSE`,
|
|
103
|
-
{ ci: !1 }
|
|
104
|
-
],
|
|
105
|
-
[
|
|
106
|
-
`CODESANDBOX`,
|
|
107
|
-
`CODESANDBOX_HOST`,
|
|
108
|
-
{ ci: !1 }
|
|
109
|
-
],
|
|
110
|
-
[`STACKBLITZ`],
|
|
111
|
-
[`STORMKIT`],
|
|
112
|
-
[`CLEAVR`],
|
|
113
|
-
[`ZEABUR`],
|
|
114
|
-
[
|
|
115
|
-
`CODESPHERE`,
|
|
116
|
-
`CODESPHERE_APP_ID`,
|
|
117
|
-
{ ci: !0 }
|
|
118
|
-
],
|
|
119
|
-
[`RAILWAY`, `RAILWAY_PROJECT_ID`],
|
|
120
|
-
[`RAILWAY`, `RAILWAY_SERVICE_ID`],
|
|
121
|
-
[`DENO-DEPLOY`, `DENO_DEPLOY`],
|
|
122
|
-
[`DENO-DEPLOY`, `DENO_DEPLOYMENT_ID`],
|
|
123
|
-
[
|
|
124
|
-
`FIREBASE_APP_HOSTING`,
|
|
125
|
-
`FIREBASE_APP_HOSTING`,
|
|
126
|
-
{ ci: !0 }
|
|
127
|
-
]
|
|
128
|
-
];
|
|
129
|
-
function u() {
|
|
130
|
-
for (let t of l) if (e[t[1] || t[0]]) return {
|
|
131
|
-
name: t[0].toLowerCase(),
|
|
132
|
-
...t[2]
|
|
133
|
-
};
|
|
134
|
-
return e.SHELL === `/bin/jsh` && t.versions?.webcontainer ? {
|
|
135
|
-
name: `stackblitz`,
|
|
136
|
-
ci: !1
|
|
137
|
-
} : {
|
|
138
|
-
name: ``,
|
|
139
|
-
ci: !1
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
const d = u();
|
|
143
|
-
d.name;
|
|
144
|
-
const p = t.platform || ``, m = !!e.CI || d.ci !== !1, h = !!t.stdout?.isTTY;
|
|
145
|
-
e.DEBUG;
|
|
146
|
-
const v = n === `test` || !!e.TEST;
|
|
147
|
-
n === `production` || e.MODE;
|
|
148
|
-
n === `dev` || n === `development` || e.MODE;
|
|
149
|
-
e.MINIMAL;
|
|
150
|
-
const S = /^win/i.test(p);
|
|
151
|
-
/^linux/i.test(p);
|
|
152
|
-
/^darwin/i.test(p);
|
|
153
|
-
!e.NO_COLOR && (e.FORCE_COLOR || (h || S) && e.TERM);
|
|
154
|
-
const E = (t.versions?.node || ``).replace(/^v/, ``) || null;
|
|
155
|
-
Number(E?.split(`.`)[0]);
|
|
156
|
-
const O = !!t?.versions?.node, k = `Bun` in globalThis, A = `Deno` in globalThis, j = `fastly` in globalThis, M = `Netlify` in globalThis, N = `EdgeRuntime` in globalThis, P = globalThis.navigator?.userAgent === `Cloudflare-Workers`, F = [
|
|
157
|
-
[M, `netlify`],
|
|
158
|
-
[N, `edge-light`],
|
|
159
|
-
[P, `workerd`],
|
|
160
|
-
[j, `fastly`],
|
|
161
|
-
[A, `deno`],
|
|
162
|
-
[k, `bun`],
|
|
163
|
-
[O, `node`]
|
|
164
|
-
];
|
|
165
|
-
function I() {
|
|
166
|
-
let e = F.find((e) => e[0]);
|
|
167
|
-
if (e) return { name: e[1] };
|
|
168
|
-
}
|
|
169
|
-
I()?.name;
|
|
170
|
-
//#endregion
|
|
171
|
-
export { v as n, m as t };
|