env-runner 0.1.15 → 0.2.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 +116 -4
- package/dist/_chunks/common-base-runner.d.mts +1 -0
- package/dist/_chunks/common-base-runner.mjs +9 -2
- package/dist/_chunks/common-runtime-deps.d.mts +51 -0
- package/dist/_chunks/common-runtime-deps.mjs +46 -0
- package/dist/_chunks/libs/es-module-lexer.mjs +48 -48
- package/dist/_chunks/miniflare-runner.d.mts +65 -6
- package/dist/_chunks/miniflare-runner.mjs +28 -19
- package/dist/_chunks/netlify-runner.d.mts +32 -7
- package/dist/_chunks/netlify-runner.mjs +10 -1
- package/dist/_chunks/server.mjs +62 -7
- package/dist/_chunks/types.d.mts +2 -0
- package/dist/_chunks/vercel-runner.mjs +3 -1
- package/dist/cli.d.mts +1 -1
- package/dist/cli.mjs +2 -8
- package/dist/index.d.mts +26 -3
- package/dist/index.mjs +2 -1
- package/dist/runners/bun-process/worker.d.mts +1 -1
- package/dist/runners/deno-process/worker.d.mts +1 -1
- package/dist/runners/miniflare/runner.d.mts +2 -2
- package/dist/runners/netlify/runner.d.mts +2 -2
- package/dist/runners/netlify/worker.d.mts +1 -1
- package/dist/runners/netlify/worker.mjs +31 -32
- package/dist/runners/node-process/worker.d.mts +1 -1
- package/dist/runners/node-worker/worker.d.mts +1 -1
- package/dist/runners/vercel/queue-dev.d.mts +62 -7
- package/dist/runners/vercel/queue-dev.mjs +36 -22
- package/dist/runners/vercel/worker.d.mts +1 -1
- package/package.json +20 -41
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {}
|
|
@@ -1,9 +1,64 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RuntimeDep } from "../../_chunks/common-runtime-deps.mjs";
|
|
2
|
+
/** Metadata passed alongside each delivered message (`MessageMetadata`). */
|
|
3
|
+
interface VercelQueueMessageMetadata {
|
|
4
|
+
messageId: string;
|
|
5
|
+
deliveryCount: number;
|
|
6
|
+
createdAt: Date;
|
|
7
|
+
expiresAt: Date;
|
|
8
|
+
topicName: string;
|
|
9
|
+
consumerGroup: string;
|
|
10
|
+
/** Vercel region the client is targeting. */
|
|
11
|
+
region: string;
|
|
12
|
+
}
|
|
13
|
+
/** Instruction returned by a retry handler when the message handler throws. */
|
|
14
|
+
type VercelQueueRetryDirective = {
|
|
15
|
+
afterSeconds: number;
|
|
16
|
+
} | {
|
|
17
|
+
acknowledge: true;
|
|
18
|
+
};
|
|
19
|
+
/** Function invoked with each delivered message (`MessageHandler`). */
|
|
20
|
+
type VercelQueueMessageHandler<T = unknown> = (message: T, metadata: VercelQueueMessageMetadata) => Promise<void> | void;
|
|
21
|
+
/** Called when the message handler throws (`RetryHandler`). */
|
|
22
|
+
type VercelQueueRetryHandler = (error: unknown, metadata: VercelQueueMessageMetadata) => VercelQueueRetryDirective | void | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* The `@vercel/queue` package, as imported by the consumer
|
|
25
|
+
* (`import * as queue from "@vercel/queue"`). Structurally typed so the real
|
|
26
|
+
* module namespace is assignable without env-runner depending on the package.
|
|
27
|
+
*/
|
|
28
|
+
interface VercelQueueSdk {
|
|
29
|
+
QueueClient: new (options?: any) => any;
|
|
30
|
+
registerDevConsumer?: (options: {
|
|
31
|
+
topic: string;
|
|
32
|
+
client: any;
|
|
33
|
+
handler: VercelQueueMessageHandler;
|
|
34
|
+
consumerGroup?: string;
|
|
35
|
+
visibilityTimeoutSeconds?: number;
|
|
36
|
+
retry?: VercelQueueRetryHandler;
|
|
37
|
+
}) => () => void;
|
|
38
|
+
[key: string]: unknown;
|
|
39
|
+
}
|
|
2
40
|
interface VercelQueueDevConsumer {
|
|
41
|
+
/**
|
|
42
|
+
* The `@vercel/queue` package: the imported module, or a specifier for it.
|
|
43
|
+
*
|
|
44
|
+
* ```ts
|
|
45
|
+
* import * as sdk from "@vercel/queue";
|
|
46
|
+
* await registerVercelQueueConsumer({ sdk, topic: "orders", handler });
|
|
47
|
+
*
|
|
48
|
+
* // or, equivalently
|
|
49
|
+
* await registerVercelQueueConsumer({ sdk: "@vercel/queue", topic, handler });
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* Passing it explicitly is preferred (`@vercel/queue` is not a dependency of
|
|
53
|
+
* `env-runner`). Bare specifiers resolve from the current working directory.
|
|
54
|
+
* When omitted, `@vercel/queue` is imported optionally and registration
|
|
55
|
+
* becomes a no-op if the package isn't installed.
|
|
56
|
+
*/
|
|
57
|
+
sdk?: RuntimeDep<VercelQueueSdk>;
|
|
3
58
|
/** Topic name. Wildcard patterns (e.g. `"user-*"`) are supported. */
|
|
4
59
|
topic: string;
|
|
5
60
|
/** Function invoked with each delivered message. */
|
|
6
|
-
handler:
|
|
61
|
+
handler: VercelQueueMessageHandler;
|
|
7
62
|
/**
|
|
8
63
|
* Logical consumer identifier. Re-registering with the same group on the same
|
|
9
64
|
* topic replaces the previous handler (HMR-safe). Use distinct groups to fan
|
|
@@ -27,18 +82,18 @@ interface VercelQueueDevConsumer {
|
|
|
27
82
|
* `{ afterSeconds }` to reschedule, `{ acknowledge: true }` to drop, or
|
|
28
83
|
* `undefined` to let the error propagate.
|
|
29
84
|
*/
|
|
30
|
-
retry?:
|
|
85
|
+
retry?: VercelQueueRetryHandler;
|
|
31
86
|
}
|
|
32
87
|
/**
|
|
33
88
|
* Bind a handler to a topic. Resolves to an unregister function.
|
|
34
89
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
90
|
+
* A shared `QueueClient` is constructed from `sdk` on first use and reused for
|
|
91
|
+
* later registrations with the same SDK. Re-registering with the same topic
|
|
37
92
|
* replaces the handler (HMR-safe; the SDK keys consumers by `consumerGroup`,
|
|
38
93
|
* so calling unregister on a replaced registration is a no-op).
|
|
39
94
|
*
|
|
40
|
-
* If
|
|
95
|
+
* If no SDK is available, or it does not expose `registerDevConsumer`,
|
|
41
96
|
* resolves to a no-op unregister and logs a one-time warning.
|
|
42
97
|
*/
|
|
43
98
|
declare function registerVercelQueueConsumer(consumer: VercelQueueDevConsumer): Promise<() => void>;
|
|
44
|
-
export { VercelQueueDevConsumer, registerVercelQueueConsumer };
|
|
99
|
+
export { VercelQueueDevConsumer, VercelQueueMessageHandler, VercelQueueMessageMetadata, VercelQueueRetryDirective, VercelQueueRetryHandler, VercelQueueSdk, registerVercelQueueConsumer };
|
|
@@ -1,10 +1,31 @@
|
|
|
1
|
+
import { resolveRuntimeDep } from "../../_chunks/common-runtime-deps.mjs";
|
|
1
2
|
const DEFAULT_CONSUMER_GROUP = "env-runner-vercel-dev";
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
const _clients = /* @__PURE__ */ new WeakMap();
|
|
4
|
+
const _warned = /* @__PURE__ */ new WeakSet();
|
|
5
|
+
let _warnedMissing = false;
|
|
6
|
+
let _importedSdk;
|
|
4
7
|
const noop = () => {};
|
|
5
8
|
async function registerVercelQueueConsumer(consumer) {
|
|
6
|
-
const sdk = await
|
|
7
|
-
if (!sdk
|
|
9
|
+
const sdk = await resolveSdk(consumer.sdk);
|
|
10
|
+
if (!sdk) {
|
|
11
|
+
if (!_warnedMissing) {
|
|
12
|
+
_warnedMissing = true;
|
|
13
|
+
console.warn("[env-runner:vercel-queue] `@vercel/queue` is not installed and no `sdk` was passed. Local queue delivery is disabled.");
|
|
14
|
+
}
|
|
15
|
+
return noop;
|
|
16
|
+
}
|
|
17
|
+
if (typeof sdk.registerDevConsumer !== "function") {
|
|
18
|
+
if (!_warned.has(sdk)) {
|
|
19
|
+
_warned.add(sdk);
|
|
20
|
+
console.warn("[env-runner:vercel-queue] The `@vercel/queue` SDK in use does not export `registerDevConsumer`. Upgrade @vercel/queue@^0.2.0 to enable local queue delivery.");
|
|
21
|
+
}
|
|
22
|
+
return noop;
|
|
23
|
+
}
|
|
24
|
+
let client = _clients.get(sdk);
|
|
25
|
+
if (!client) {
|
|
26
|
+
client = new sdk.QueueClient();
|
|
27
|
+
_clients.set(sdk, client);
|
|
28
|
+
}
|
|
8
29
|
return sdk.registerDevConsumer({
|
|
9
30
|
topic: consumer.topic,
|
|
10
31
|
client,
|
|
@@ -14,23 +35,16 @@ async function registerVercelQueueConsumer(consumer) {
|
|
|
14
35
|
retry: consumer.retry ?? (consumer.retryAfterSeconds === void 0 ? void 0 : () => ({ afterSeconds: consumer.retryAfterSeconds }))
|
|
15
36
|
});
|
|
16
37
|
}
|
|
17
|
-
function
|
|
18
|
-
if (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
console.warn("[env-runner:vercel-queue] Installed `@vercel/queue` does not export `registerDevConsumer`. Upgrade @vercel/queue@^0.2.0 to enable local queue delivery.");
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
client = new mod.QueueClient();
|
|
32
|
-
return mod;
|
|
33
|
-
})();
|
|
34
|
-
return sdkPromise;
|
|
38
|
+
function resolveSdk(value) {
|
|
39
|
+
if (value !== void 0) return resolveRuntimeDep({
|
|
40
|
+
name: "@vercel/queue",
|
|
41
|
+
option: "sdk",
|
|
42
|
+
value
|
|
43
|
+
});
|
|
44
|
+
_importedSdk ??= resolveRuntimeDep({
|
|
45
|
+
name: "@vercel/queue",
|
|
46
|
+
option: "sdk"
|
|
47
|
+
});
|
|
48
|
+
return _importedSdk;
|
|
35
49
|
}
|
|
36
50
|
export { registerVercelQueueConsumer };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "env-runner",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Generic environment runner for JavaScript runtimes.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "unjs/env-runner",
|
|
@@ -40,52 +40,31 @@
|
|
|
40
40
|
"env-runner": "node ./src/cli.ts",
|
|
41
41
|
"release": "pnpm test && pnpm build && changelogen --release && npm publish && git push --follow-tags",
|
|
42
42
|
"test": "pnpm lint && pnpm typecheck && vitest run --coverage",
|
|
43
|
-
"typecheck": "
|
|
43
|
+
"typecheck": "tsc --noEmit --skipLibCheck"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"crossws": "^0.4.
|
|
47
|
-
"exsolve": "^1.1.
|
|
48
|
-
"httpxy": "^0.5.
|
|
49
|
-
"srvx": "^0.
|
|
46
|
+
"crossws": "^0.4.11",
|
|
47
|
+
"exsolve": "^1.1.1",
|
|
48
|
+
"httpxy": "^0.5.5",
|
|
49
|
+
"srvx": "^0.12.7"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@netlify/runtime": "^
|
|
53
|
-
"@types/node": "^26.0
|
|
54
|
-
"@
|
|
55
|
-
"@
|
|
56
|
-
"@vitest/coverage-v8": "^4.1.9",
|
|
52
|
+
"@netlify/runtime": "^5",
|
|
53
|
+
"@types/node": "^26.2.0",
|
|
54
|
+
"@vercel/queue": "^0.4",
|
|
55
|
+
"@vitest/coverage-v8": "^4.1.11",
|
|
57
56
|
"automd": "^0.4.3",
|
|
58
57
|
"changelogen": "^0.6.2",
|
|
59
|
-
"cjs-module-lexer": "^2.2.
|
|
58
|
+
"cjs-module-lexer": "^2.2.1",
|
|
60
59
|
"env-runner-fixture": "link:",
|
|
61
|
-
"es-module-lexer": "^2.2
|
|
62
|
-
"miniflare": "^4
|
|
63
|
-
"obuild": "^0.4.
|
|
64
|
-
"oxfmt": "
|
|
65
|
-
"oxlint": "^1.
|
|
66
|
-
"typescript": "^
|
|
67
|
-
"vitest": "^4.1.
|
|
68
|
-
"wrangler": "^4.
|
|
60
|
+
"es-module-lexer": "^2.3.2",
|
|
61
|
+
"miniflare": "^4",
|
|
62
|
+
"obuild": "^0.4.38",
|
|
63
|
+
"oxfmt": ">=0.64.0",
|
|
64
|
+
"oxlint": "^1.79.0",
|
|
65
|
+
"typescript": "^7",
|
|
66
|
+
"vitest": "^4.1.11",
|
|
67
|
+
"wrangler": "^4.124.0"
|
|
69
68
|
},
|
|
70
|
-
"
|
|
71
|
-
"@netlify/runtime": "^4.1.23",
|
|
72
|
-
"@vercel/queue": ">=0.2.0",
|
|
73
|
-
"miniflare": "^4.20260515.0",
|
|
74
|
-
"wrangler": "^4.0.0"
|
|
75
|
-
},
|
|
76
|
-
"peerDependenciesMeta": {
|
|
77
|
-
"miniflare": {
|
|
78
|
-
"optional": true
|
|
79
|
-
},
|
|
80
|
-
"@netlify/runtime": {
|
|
81
|
-
"optional": true
|
|
82
|
-
},
|
|
83
|
-
"@vercel/queue": {
|
|
84
|
-
"optional": true
|
|
85
|
-
},
|
|
86
|
-
"wrangler": {
|
|
87
|
-
"optional": true
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
"packageManager": "pnpm@11.9.0"
|
|
69
|
+
"packageManager": "pnpm@11.22.0"
|
|
91
70
|
}
|