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.
Files changed (37) hide show
  1. package/README.md +45 -15
  2. package/dist/THIRD-PARTY-LICENSES.md +0 -29
  3. package/dist/_chunks/base-runner.d.mts +0 -1
  4. package/dist/_chunks/base-runner.mjs +0 -15
  5. package/dist/_chunks/libs/cjs-module-lexer.mjs +1 -1
  6. package/dist/_chunks/runner.mjs +17 -13
  7. package/dist/_chunks/runner2.d.mts +8 -0
  8. package/dist/_chunks/runner2.mjs +14 -2
  9. package/dist/_chunks/runner3.d.mts +19 -0
  10. package/dist/_chunks/runner3.mjs +62 -0
  11. package/dist/_chunks/runner4.d.mts +17 -0
  12. package/dist/_chunks/runner4.mjs +42 -0
  13. package/dist/_chunks/runner5.d.mts +17 -0
  14. package/dist/_chunks/runner5.mjs +47 -0
  15. package/dist/_chunks/server.mjs +29 -8
  16. package/dist/_chunks/types.d.mts +1 -1
  17. package/dist/cli.mjs +4 -4
  18. package/dist/index.d.mts +17 -6
  19. package/dist/index.mjs +3 -3
  20. package/dist/runners/bun-process/runner.mjs +0 -8
  21. package/dist/runners/deno-process/runner.mjs +0 -2
  22. package/dist/runners/deno-process/worker.mjs +31 -8
  23. package/dist/runners/miniflare/runner.mjs +0 -3
  24. package/dist/runners/netlify/runner.d.mts +3 -0
  25. package/dist/runners/netlify/runner.mjs +2 -0
  26. package/dist/runners/netlify/worker.d.mts +1 -0
  27. package/dist/runners/netlify/worker.mjs +43 -0
  28. package/dist/runners/node-process/runner.mjs +0 -6
  29. package/dist/runners/node-worker/runner.d.mts +3 -19
  30. package/dist/runners/node-worker/runner.mjs +1 -67
  31. package/dist/runners/self/runner.mjs +0 -1
  32. package/dist/runners/vercel/runner.d.mts +3 -0
  33. package/dist/runners/vercel/runner.mjs +2 -0
  34. package/dist/runners/vercel/worker.d.mts +1 -0
  35. package/dist/runners/vercel/worker.mjs +50 -0
  36. package/package.json +27 -18
  37. 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?: (runner: EnvRunner, cause?: unknown) => void;
36
- onReady?: (runner: EnvRunner, address?: WorkerAddress) => void;
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
- /** Called when the runner is reloaded due to a file change. */
80
- onReload?: () => void;
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
- export { BaseEnvRunner, DenoProcessEnvRunner, EnvServer, MiniflareEnvRunner, RunnerManager, loadRunner };
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();
@@ -1,4 +1,2 @@
1
- import "../../_chunks/libs/std-env.mjs";
2
- import "../../_chunks/base-runner.mjs";
3
1
  import { t as DenoProcessEnvRunner } from "../../_chunks/runner.mjs";
4
2
  export { DenoProcessEnvRunner };
@@ -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 sendMessage = (message) => process.send(message);
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
- process.send({ address: parseServerAddress(server) });
27
- process.on("message", async (message) => {
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
- process.send({ event: "exit" });
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
- process.send({ event: "module-reloaded" });
59
+ sendMessage({ event: "module-reloaded" });
38
60
  } catch (error) {
39
- process.send({
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
- process.send({
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 {};
@@ -1,5 +1,2 @@
1
- import "../../_chunks/libs/std-env.mjs";
2
- import "../../_chunks/base-runner.mjs";
3
- import "../../_chunks/libs/cjs-module-lexer.mjs";
4
1
  import { t as MiniflareEnvRunner } from "../../_chunks/runner2.mjs";
5
2
  export { MiniflareEnvRunner };
@@ -0,0 +1,3 @@
1
+ import { n as EnvRunnerData } from "../../_chunks/base-runner.mjs";
2
+ import { t as NetlifyEnvRunner } from "../../_chunks/runner5.mjs";
3
+ export { EnvRunnerData, NetlifyEnvRunner };
@@ -0,0 +1,2 @@
1
+ import { t as NetlifyEnvRunner } from "../../_chunks/runner5.mjs";
2
+ export { NetlifyEnvRunner };
@@ -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 { u as WorkerHooks } from "../../_chunks/types.mjs";
2
- import { n as EnvRunnerData, t as BaseEnvRunner } from "../../_chunks/base-runner.mjs";
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/libs/std-env.mjs";
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 };
@@ -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 { n as reloadEntryModule, r as resolveEntry } from "../../_chunks/worker-utils.mjs";
4
3
  //#region src/runners/self/runner.ts
@@ -0,0 +1,3 @@
1
+ import { n as EnvRunnerData } from "../../_chunks/base-runner.mjs";
2
+ import { t as VercelEnvRunner } from "../../_chunks/runner4.mjs";
3
+ export { EnvRunnerData, VercelEnvRunner };
@@ -0,0 +1,2 @@
1
+ import { t as VercelEnvRunner } from "../../_chunks/runner4.mjs";
2
+ export { VercelEnvRunner };
@@ -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.5",
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
- "httpxy": "^0.3.1",
43
- "srvx": "^0.11.9"
46
+ "exsolve": "^1.0.8",
47
+ "httpxy": "^0.5.0",
48
+ "srvx": "^0.11.13"
44
49
  },
45
50
  "devDependencies": {
46
- "@types/node": "latest",
47
- "@typescript/native-preview": "latest",
48
- "@vitest/coverage-v8": "latest",
49
- "automd": "latest",
50
- "changelogen": "latest",
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.20260301.1",
54
- "obuild": "latest",
55
- "oxfmt": "latest",
56
- "oxlint": "latest",
57
- "std-env": "4.0.0-rc.1",
58
- "typescript": "latest",
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
- "miniflare": "^4.0.0"
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.29.3"
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 };