env-runner 0.1.10 → 0.1.12
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 +18 -1
- package/dist/THIRD-PARTY-LICENSES.md +19 -0
- package/dist/_chunks/{base-runner.d.mts → common-base-runner.d.mts} +34 -0
- package/dist/_chunks/{base-runner.mjs → common-base-runner.mjs} +81 -44
- package/dist/_chunks/{worker-utils.mjs → common-worker-utils.mjs} +54 -17
- package/dist/_chunks/{runner.d.mts → deno-process-runner.d.mts} +1 -1
- package/dist/_chunks/{runner.mjs → deno-process-runner.mjs} +2 -2
- package/dist/_chunks/libs/es-module-lexer.mjs +83 -0
- package/dist/_chunks/{runner2.d.mts → miniflare-runner.d.mts} +13 -1
- package/dist/_chunks/{runner2.mjs → miniflare-runner.mjs} +93 -54
- package/dist/_chunks/{runner5.d.mts → netlify-runner.d.mts} +2 -2
- package/dist/_chunks/{runner5.mjs → netlify-runner.mjs} +2 -1
- package/dist/_chunks/{runner3.d.mts → node-worker-runner.d.mts} +1 -1
- package/dist/_chunks/{runner3.mjs → node-worker-runner.mjs} +2 -2
- package/dist/_chunks/server.mjs +37 -10
- package/dist/_chunks/types.d.mts +11 -1
- package/dist/_chunks/{runner4.d.mts → vercel-runner.d.mts} +2 -2
- package/dist/_chunks/{runner4.mjs → vercel-runner.mjs} +2 -1
- package/dist/_chunks/virtual-loader.mjs +38 -6
- package/dist/index.d.mts +34 -8
- package/dist/index.mjs +5 -5
- package/dist/runners/bun-process/runner.d.mts +1 -1
- package/dist/runners/bun-process/runner.mjs +2 -2
- package/dist/runners/bun-process/worker.mjs +5 -1
- 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 +5 -1
- 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 +1 -1
- package/dist/runners/node-process/runner.mjs +2 -2
- package/dist/runners/node-process/worker.mjs +5 -1
- 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 +5 -1
- package/dist/runners/self/runner.d.mts +2 -1
- 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/package.json +2 -1
package/README.md
CHANGED
|
@@ -67,6 +67,9 @@ envServer.onReload(() => {
|
|
|
67
67
|
// Optional — the server auto-starts on first fetch()
|
|
68
68
|
await envServer.start();
|
|
69
69
|
|
|
70
|
+
// Restart with a fresh runner created from the server options
|
|
71
|
+
await envServer.reload();
|
|
72
|
+
|
|
70
73
|
// Use with any HTTP server
|
|
71
74
|
const server = serve({
|
|
72
75
|
fetch: (request) => envServer.fetch(request),
|
|
@@ -141,7 +144,8 @@ await using runner = new NodeProcessEnvRunner({
|
|
|
141
144
|
});
|
|
142
145
|
|
|
143
146
|
// Proxy HTTP requests (retries with exponential backoff)
|
|
144
|
-
|
|
147
|
+
// Relative URLs are resolved against a placeholder origin
|
|
148
|
+
const response = await runner.fetch("/api");
|
|
145
149
|
|
|
146
150
|
// Proxy WebSocket upgrades
|
|
147
151
|
runner.upgrade?.({ node: { req, socket, head } });
|
|
@@ -159,6 +163,10 @@ const result = await runner.rpc<string>("transformHTML", "<html>...</html>");
|
|
|
159
163
|
// Hot-reload entry module without restarting the worker
|
|
160
164
|
await runner.reloadModule();
|
|
161
165
|
|
|
166
|
+
// Invalidate a virtual module (re-runs a factory source), then reload
|
|
167
|
+
await runner.invalidateModule("#config.json");
|
|
168
|
+
await runner.reloadModule();
|
|
169
|
+
|
|
162
170
|
// Graceful shutdown happens automatically at the end of the scope
|
|
163
171
|
// (`await using`) — or call `await runner.close()` explicitly
|
|
164
172
|
```
|
|
@@ -238,6 +246,15 @@ await using runner = new NodeWorkerEnvRunner({
|
|
|
238
246
|
|
|
239
247
|
Factories are invoked once on the host (before the worker is spawned), so the worker always receives plain strings — functions can't cross the `workerData`/`JSON` boundary, and Node's synchronous load hook can't await. For the same reason, **all** factories are resolved eagerly at startup (in parallel), not lazily on first import — so keep them cheap, or use plain strings for sources that don't need computation. Maps containing only strings skip this step entirely.
|
|
240
248
|
|
|
249
|
+
To refresh a single virtual module without restarting the worker, call `invalidateModule(specifier)`: a factory-valued source is re-run on the host and the module is invalidated in the worker so its **next import evaluates fresh**. Virtual modules that import the invalidated one (directly or transitively) are invalidated along with it, so the fresh module is picked up even through intermediate virtual importers. Already-imported modules keep their instances, so pair it with `reloadModule()` to re-import the entry graph:
|
|
250
|
+
|
|
251
|
+
```ts
|
|
252
|
+
await runner.invalidateModule("#config"); // re-runs the factory, busts the module
|
|
253
|
+
await runner.reloadModule(); // re-imports the entry, picking up the fresh module
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
When fetching through `RunnerManager` or `EnvServer`, the reload is automatic: `invalidateModule()` marks the manager dirty and the next `fetch()` reloads the entry once before serving (concurrent fetches share the reload), so no explicit `reloadModule()` call is needed.
|
|
257
|
+
|
|
241
258
|
The module format is derived from the specifier extension: `.ts`/`.mts` sources are served as **TypeScript** and `.json` sources as **JSON modules**; everything else is plain JavaScript ESM:
|
|
242
259
|
|
|
243
260
|
```ts
|
|
@@ -21,3 +21,22 @@ Repository: https://github.com/nodejs/cjs-module-lexer
|
|
|
21
21
|
> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
22
22
|
>
|
|
23
23
|
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
24
|
+
|
|
25
|
+
---------------------------------------
|
|
26
|
+
|
|
27
|
+
## es-module-lexer
|
|
28
|
+
|
|
29
|
+
License: MIT
|
|
30
|
+
By: Guy Bedford
|
|
31
|
+
Repository: https://github.com/guybedford/es-module-lexer
|
|
32
|
+
|
|
33
|
+
> MIT License
|
|
34
|
+
> -----------
|
|
35
|
+
>
|
|
36
|
+
> Copyright (C) 2018-2022 Guy Bedford
|
|
37
|
+
>
|
|
38
|
+
> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
39
|
+
>
|
|
40
|
+
> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
41
|
+
>
|
|
42
|
+
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -37,9 +37,12 @@ declare abstract class BaseEnvRunner implements EnvRunner, AsyncDisposable {
|
|
|
37
37
|
protected _name: string;
|
|
38
38
|
protected _workerEntry: string;
|
|
39
39
|
protected _data?: EnvRunnerData;
|
|
40
|
+
protected _virtualSources?: VirtualModules;
|
|
40
41
|
protected _hooks: Partial<WorkerHooks>;
|
|
41
42
|
protected _address?: WorkerAddress;
|
|
42
43
|
protected _messageListeners: Set<(data: unknown) => void>;
|
|
44
|
+
protected _pendingRequests: Set<(cause?: unknown) => void>;
|
|
45
|
+
protected _virtualResolved?: Promise<void>;
|
|
43
46
|
constructor(opts: {
|
|
44
47
|
name: string;
|
|
45
48
|
workerEntry: string;
|
|
@@ -63,9 +66,34 @@ declare abstract class BaseEnvRunner implements EnvRunner, AsyncDisposable {
|
|
|
63
66
|
timeout?: number;
|
|
64
67
|
}): Promise<T>;
|
|
65
68
|
reloadModule(timeout?: number): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Invalidate a virtual module so the next `reloadModule()` re-evaluates it.
|
|
71
|
+
* A factory-valued `data.virtual` source is re-run on the host and the fresh
|
|
72
|
+
* source is shipped to the worker along with the invalidation. Rejects when
|
|
73
|
+
* the specifier is not a registered virtual module.
|
|
74
|
+
*/
|
|
75
|
+
invalidateModule(specifier: string, timeout?: number): Promise<void>;
|
|
66
76
|
close(cause?: unknown): Promise<void>;
|
|
67
77
|
[Symbol.asyncDispose](): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* Resolve a relative fetch input (e.g. `"/path"`) against a placeholder
|
|
80
|
+
* `http://localhost` origin so it parses as a full URL. The origin is a
|
|
81
|
+
* placeholder — requests are dispatched to the worker address regardless.
|
|
82
|
+
*/
|
|
83
|
+
protected _resolveFetchInput(input: string | URL | Request): string | URL | Request;
|
|
68
84
|
protected _handleMessage(message: any): void;
|
|
85
|
+
/**
|
|
86
|
+
* Send a message and await a matching response message. Shared by `rpc()`,
|
|
87
|
+
* `reloadModule()`, and `invalidateModule()`. Rejects on timeout, on a
|
|
88
|
+
* response carrying an `error`, and promptly when the runner closes mid-wait
|
|
89
|
+
* (instead of letting callers wait out the timeout on a dead worker).
|
|
90
|
+
*/
|
|
91
|
+
protected _request<T = unknown>(message: unknown, opts: {
|
|
92
|
+
match: (msg: any) => boolean;
|
|
93
|
+
timeout: number;
|
|
94
|
+
timeoutError: string;
|
|
95
|
+
send?: (message: unknown) => void;
|
|
96
|
+
}): Promise<T>;
|
|
69
97
|
/**
|
|
70
98
|
* Resolve any factory-valued `data.virtual` sources to strings before the
|
|
71
99
|
* worker is spawned. Returns a pending promise only when there is async work
|
|
@@ -74,6 +102,12 @@ declare abstract class BaseEnvRunner implements EnvRunner, AsyncDisposable {
|
|
|
74
102
|
* functions can't cross the worker boundary and the load hook can't await.
|
|
75
103
|
*/
|
|
76
104
|
protected _resolveVirtualData(): Promise<void> | undefined;
|
|
105
|
+
/**
|
|
106
|
+
* Re-run a factory-valued virtual source on the host and sync the resolved
|
|
107
|
+
* `data.virtual` map. Returns the fresh source, or `undefined` when the
|
|
108
|
+
* source is a plain string or unknown (nothing to re-evaluate).
|
|
109
|
+
*/
|
|
110
|
+
protected _refreshVirtualSource(specifier: string): Promise<string | undefined>;
|
|
77
111
|
/**
|
|
78
112
|
* Run a subclass spawn callback after `data.virtual` is resolved.
|
|
79
113
|
* Synchronous when no factory-valued source is present; otherwise defers
|
|
@@ -6,15 +6,19 @@ var BaseEnvRunner = class {
|
|
|
6
6
|
_name;
|
|
7
7
|
_workerEntry;
|
|
8
8
|
_data;
|
|
9
|
+
_virtualSources;
|
|
9
10
|
_hooks;
|
|
10
11
|
_address;
|
|
11
12
|
_messageListeners;
|
|
13
|
+
_pendingRequests;
|
|
14
|
+
_virtualResolved;
|
|
12
15
|
constructor(opts) {
|
|
13
16
|
this._name = opts.name;
|
|
14
17
|
this._workerEntry = opts.workerEntry;
|
|
15
18
|
this._data = opts.data;
|
|
16
19
|
this._hooks = opts.hooks || {};
|
|
17
20
|
this._messageListeners = /* @__PURE__ */ new Set();
|
|
21
|
+
this._pendingRequests = /* @__PURE__ */ new Set();
|
|
18
22
|
}
|
|
19
23
|
get ready() {
|
|
20
24
|
return Boolean(!this.closed && this._address && this._hasRuntime());
|
|
@@ -22,7 +26,7 @@ var BaseEnvRunner = class {
|
|
|
22
26
|
async fetch(input, init) {
|
|
23
27
|
for (let i = 0; i < 5 && !this._address && !this.closed; i++) await new Promise((r) => setTimeout(r, 100 * Math.pow(2, i)));
|
|
24
28
|
if (!this._address) return new Response(`${this._runtimeType()} env runner is unavailable`, { status: 503 });
|
|
25
|
-
return proxyFetch(this._address, input, init);
|
|
29
|
+
return proxyFetch(this._address, this._resolveFetchInput(input), init);
|
|
26
30
|
}
|
|
27
31
|
async upgrade(context) {
|
|
28
32
|
if (!this.ready || !this._address) return;
|
|
@@ -58,55 +62,40 @@ var BaseEnvRunner = class {
|
|
|
58
62
|
}
|
|
59
63
|
rpc(name, data, opts) {
|
|
60
64
|
const id = Math.random().toString(36).slice(2);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (msg.error) reject(typeof msg.error === "string" ? new Error(msg.error) : msg.error);
|
|
71
|
-
else resolve(msg.data);
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
const cleanup = () => {
|
|
75
|
-
clearTimeout(timer);
|
|
76
|
-
this.offMessage(listener);
|
|
77
|
-
};
|
|
78
|
-
this.onMessage(listener);
|
|
79
|
-
this.sendMessage({
|
|
80
|
-
__rpc: name,
|
|
81
|
-
__rpc_id: id,
|
|
82
|
-
data
|
|
83
|
-
});
|
|
84
|
-
});
|
|
65
|
+
return this._request({
|
|
66
|
+
__rpc: name,
|
|
67
|
+
__rpc_id: id,
|
|
68
|
+
data
|
|
69
|
+
}, {
|
|
70
|
+
match: (msg) => msg?.__rpc_id === id,
|
|
71
|
+
timeout: opts?.timeout ?? 3e3,
|
|
72
|
+
timeoutError: `RPC "${name}" timed out`
|
|
73
|
+
}).then((msg) => msg.data);
|
|
85
74
|
}
|
|
86
75
|
async reloadModule(timeout = 5e3) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
this.onMessage(listener);
|
|
104
|
-
this.sendMessage({ event: "reload-module" });
|
|
76
|
+
await this._request({ event: "reload-module" }, {
|
|
77
|
+
match: (msg) => msg?.event === "module-reloaded",
|
|
78
|
+
timeout,
|
|
79
|
+
timeoutError: "Module reload timed out"
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
async invalidateModule(specifier, timeout = 5e3) {
|
|
83
|
+
const source = await this._refreshVirtualSource(specifier);
|
|
84
|
+
await this._request({
|
|
85
|
+
event: "invalidate-module",
|
|
86
|
+
specifier,
|
|
87
|
+
source
|
|
88
|
+
}, {
|
|
89
|
+
match: (msg) => msg?.event === "module-invalidated" && msg.specifier === specifier,
|
|
90
|
+
timeout,
|
|
91
|
+
timeoutError: `Module invalidation timed out for "${specifier}"`
|
|
105
92
|
});
|
|
106
93
|
}
|
|
107
94
|
async close(cause) {
|
|
108
95
|
if (this.closed) return;
|
|
109
96
|
this.closed = true;
|
|
97
|
+
for (const rejectPending of this._pendingRequests) rejectPending(cause);
|
|
98
|
+
this._pendingRequests.clear();
|
|
110
99
|
this._hooks.onClose?.(this, cause);
|
|
111
100
|
this._hooks = {};
|
|
112
101
|
const onError = (error) => console.error(error);
|
|
@@ -120,6 +109,10 @@ var BaseEnvRunner = class {
|
|
|
120
109
|
const status = this.closed ? "closed" : this.ready ? "ready" : "pending";
|
|
121
110
|
return `${this.constructor.name}#${this._name}(${status})`;
|
|
122
111
|
}
|
|
112
|
+
_resolveFetchInput(input) {
|
|
113
|
+
if (typeof input === "string" && !URL.canParse(input)) return new URL(input, "http://localhost");
|
|
114
|
+
return input;
|
|
115
|
+
}
|
|
123
116
|
_handleMessage(message) {
|
|
124
117
|
if (message?.address) {
|
|
125
118
|
this._address = message.address;
|
|
@@ -128,15 +121,59 @@ var BaseEnvRunner = class {
|
|
|
128
121
|
if (message?.event === "init-error" && !this.ready && !this.closed) this.close(new Error(String(message.error || "Worker initialization failed")));
|
|
129
122
|
for (const listener of this._messageListeners) listener(message);
|
|
130
123
|
}
|
|
124
|
+
_request(message, opts) {
|
|
125
|
+
if (this.closed) return Promise.reject(/* @__PURE__ */ new Error("Runner is closed"));
|
|
126
|
+
return new Promise((resolve, reject) => {
|
|
127
|
+
const timer = setTimeout(() => {
|
|
128
|
+
cleanup();
|
|
129
|
+
reject(new Error(opts.timeoutError));
|
|
130
|
+
}, opts.timeout);
|
|
131
|
+
const listener = (msg) => {
|
|
132
|
+
if (opts.match(msg)) {
|
|
133
|
+
cleanup();
|
|
134
|
+
if (msg.error) reject(typeof msg.error === "string" ? new Error(msg.error) : msg.error);
|
|
135
|
+
else resolve(msg);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
const onClose = (cause) => {
|
|
139
|
+
cleanup();
|
|
140
|
+
reject(new Error("Runner closed before responding", cause ? { cause } : void 0));
|
|
141
|
+
};
|
|
142
|
+
const cleanup = () => {
|
|
143
|
+
clearTimeout(timer);
|
|
144
|
+
this.offMessage(listener);
|
|
145
|
+
this._pendingRequests.delete(onClose);
|
|
146
|
+
};
|
|
147
|
+
this.onMessage(listener);
|
|
148
|
+
this._pendingRequests.add(onClose);
|
|
149
|
+
try {
|
|
150
|
+
(opts.send ?? ((m) => this.sendMessage(m)))(message);
|
|
151
|
+
} catch (error) {
|
|
152
|
+
cleanup();
|
|
153
|
+
reject(error);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
131
157
|
_resolveVirtualData() {
|
|
132
158
|
const virtual = this._data?.virtual;
|
|
159
|
+
this._virtualSources = virtual;
|
|
133
160
|
if (!virtual || !Object.values(virtual).some((v) => typeof v === "function")) return;
|
|
134
|
-
|
|
161
|
+
this._virtualResolved = resolveVirtualModules(virtual).then((resolved) => {
|
|
135
162
|
this._data = {
|
|
136
163
|
...this._data,
|
|
137
164
|
virtual: resolved
|
|
138
165
|
};
|
|
139
166
|
});
|
|
167
|
+
return this._virtualResolved;
|
|
168
|
+
}
|
|
169
|
+
async _refreshVirtualSource(specifier) {
|
|
170
|
+
await this._virtualResolved?.catch(() => {});
|
|
171
|
+
const original = this._virtualSources?.[specifier];
|
|
172
|
+
if (typeof original !== "function") return;
|
|
173
|
+
const source = await original();
|
|
174
|
+
const resolved = this._data?.virtual;
|
|
175
|
+
if (resolved) resolved[specifier] = source;
|
|
176
|
+
return source;
|
|
140
177
|
}
|
|
141
178
|
_initWithVirtualData(init) {
|
|
142
179
|
const pending = this._resolveVirtualData();
|
|
@@ -1,14 +1,30 @@
|
|
|
1
|
-
import { createVirtualHooks, virtualModuleFormat } from "./virtual-loader.mjs";
|
|
2
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
1
|
+
import { createVirtualHooks, expandVirtualInvalidation, stripVirtualTypeScript, virtualModuleFormat } from "./virtual-loader.mjs";
|
|
3
2
|
import { pathToFileURL } from "node:url";
|
|
3
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
4
4
|
import { isAbsolute } from "node:path";
|
|
5
5
|
async function registerVirtualModules(virtual) {
|
|
6
6
|
if (!virtual || Object.keys(virtual).length === 0) return _noop;
|
|
7
7
|
const { registerHooks, stripTypeScriptTypes } = await import("node:module");
|
|
8
8
|
if (typeof registerHooks === "function") {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
let transformSource;
|
|
10
|
+
if ("Deno" in globalThis) {
|
|
11
|
+
transformSource = (specifier, source) => _transformSourceForDeno(specifier, source, stripTypeScriptTypes);
|
|
12
|
+
const transformed = {};
|
|
13
|
+
for (const [specifier, source] of Object.entries(virtual)) transformed[specifier] = transformSource(specifier, source);
|
|
14
|
+
virtual = transformed;
|
|
15
|
+
}
|
|
16
|
+
const registration = {
|
|
17
|
+
virtual,
|
|
18
|
+
versions: /* @__PURE__ */ new Map(),
|
|
19
|
+
transformSource
|
|
20
|
+
};
|
|
21
|
+
const hooks = registerHooks(createVirtualHooks(virtual, registration.versions));
|
|
22
|
+
_hooksRegistrations.unshift(registration);
|
|
23
|
+
return _once(() => {
|
|
24
|
+
const index = _hooksRegistrations.indexOf(registration);
|
|
25
|
+
if (index !== -1) _hooksRegistrations.splice(index, 1);
|
|
26
|
+
hooks.deregister();
|
|
27
|
+
});
|
|
12
28
|
}
|
|
13
29
|
if (typeof globalThis.Bun?.plugin === "function") {
|
|
14
30
|
_bunVirtual = virtual;
|
|
@@ -25,6 +41,30 @@ function refreshVirtualModule(specifier) {
|
|
|
25
41
|
_registerBunModules([specifier]);
|
|
26
42
|
return true;
|
|
27
43
|
}
|
|
44
|
+
function invalidateVirtualModule(specifier, source) {
|
|
45
|
+
for (const registration of _hooksRegistrations) {
|
|
46
|
+
if (!Object.hasOwn(registration.virtual, specifier)) continue;
|
|
47
|
+
const { virtual, versions, transformSource } = registration;
|
|
48
|
+
if (source !== void 0) virtual[specifier] = transformSource ? transformSource(specifier, source) : source;
|
|
49
|
+
for (const key of expandVirtualInvalidation(virtual, specifier)) versions.set(key, (versions.get(key) ?? 0) + 1);
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
if (_bunVirtual && Object.hasOwn(_bunVirtual, specifier)) {
|
|
53
|
+
if (source !== void 0) _bunVirtual[specifier] = source;
|
|
54
|
+
_registerBunModules(expandVirtualInvalidation(_bunVirtual, specifier));
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
function handleInvalidateModule(message, sendMessage) {
|
|
60
|
+
const ok = invalidateVirtualModule(message.specifier, message.source);
|
|
61
|
+
sendMessage({
|
|
62
|
+
event: "module-invalidated",
|
|
63
|
+
specifier: message.specifier,
|
|
64
|
+
error: ok ? void 0 : `Cannot invalidate "${message.specifier}" (not a registered virtual module)`
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
const _hooksRegistrations = [];
|
|
28
68
|
let _bunVirtual;
|
|
29
69
|
function _registerBunModules(specifiers) {
|
|
30
70
|
globalThis.Bun.plugin({
|
|
@@ -46,17 +86,14 @@ function _registerBunModules(specifiers) {
|
|
|
46
86
|
}
|
|
47
87
|
});
|
|
48
88
|
}
|
|
49
|
-
function
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
else out[specifier] = source;
|
|
58
|
-
}
|
|
59
|
-
return out;
|
|
89
|
+
function _transformSourceForDeno(specifier, source, stripTypeScriptTypes) {
|
|
90
|
+
const format = virtualModuleFormat(specifier);
|
|
91
|
+
if (format === "module-typescript") return stripVirtualTypeScript(specifier, source, stripTypeScriptTypes, {
|
|
92
|
+
requirement: "(custom load hooks bypass Deno's native type stripping)",
|
|
93
|
+
remedy: "upgrade Deno"
|
|
94
|
+
});
|
|
95
|
+
if (format === "json") return `export default JSON.parse(${JSON.stringify(source)});`;
|
|
96
|
+
return source;
|
|
60
97
|
}
|
|
61
98
|
const _noop = () => {};
|
|
62
99
|
function _once(fn) {
|
|
@@ -111,4 +148,4 @@ async function _importFresh(entryPath, virtual) {
|
|
|
111
148
|
if (typeof entry.fetch !== "function") throw new Error(`[env-runner] Entry module "${entryPath}" must export a \`fetch\` handler (export default { fetch(req) { ... } }).`);
|
|
112
149
|
return entry;
|
|
113
150
|
}
|
|
114
|
-
export { isVirtualSpecifier, parseServerAddress, registerVirtualModules, reloadEntryModule, resolveEntry };
|
|
151
|
+
export { handleInvalidateModule, isVirtualSpecifier, parseServerAddress, registerVirtualModules, reloadEntryModule, resolveEntry };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { WorkerHooks } from "./types.mjs";
|
|
2
|
-
import { BaseEnvRunner, EnvRunnerData } from "./base-runner.mjs";
|
|
2
|
+
import { BaseEnvRunner, EnvRunnerData } from "./common-base-runner.mjs";
|
|
3
3
|
declare class DenoProcessEnvRunner extends BaseEnvRunner {
|
|
4
4
|
#private;
|
|
5
5
|
constructor(opts: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { BaseEnvRunner } from "./base-runner.mjs";
|
|
1
|
+
import { BaseEnvRunner } from "./common-base-runner.mjs";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
2
3
|
import { existsSync } from "node:fs";
|
|
3
4
|
import { spawn } from "node:child_process";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
5
|
let _defaultEntry;
|
|
6
6
|
var DenoProcessEnvRunner = class extends BaseEnvRunner {
|
|
7
7
|
#process;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
var ImportType;
|
|
2
|
+
(function(A) {
|
|
3
|
+
A[A.Static = 1] = "Static", A[A.Dynamic = 2] = "Dynamic", A[A.ImportMeta = 3] = "ImportMeta", A[A.StaticSourcePhase = 4] = "StaticSourcePhase", A[A.DynamicSourcePhase = 5] = "DynamicSourcePhase", A[A.StaticDeferPhase = 6] = "StaticDeferPhase", A[A.DynamicDeferPhase = 7] = "DynamicDeferPhase";
|
|
4
|
+
})(ImportType || (ImportType = {}));
|
|
5
|
+
const A = 1 === new Uint8Array(new Uint16Array([1]).buffer)[0];
|
|
6
|
+
function parse(E, g = "@") {
|
|
7
|
+
if (!C) return init.then((() => parse(E)));
|
|
8
|
+
const I = E.length + 1, o = (C.__heap_base.value || C.__heap_base) + 4 * I - C.memory.buffer.byteLength;
|
|
9
|
+
o > 0 && C.memory.grow(Math.ceil(o / 65536));
|
|
10
|
+
const D = C.sa(I - 1);
|
|
11
|
+
if ((A ? B : Q)(E, new Uint16Array(C.memory.buffer, D, I)), !C.parse()) throw Object.assign(/* @__PURE__ */ new Error(`Parse error ${g}:${E.slice(0, C.e()).split("\n").length}:${C.e() - E.lastIndexOf("\n", C.e() - 1)}`), { idx: C.e() });
|
|
12
|
+
const K = [], k = [];
|
|
13
|
+
for (; C.ri();) {
|
|
14
|
+
const A = C.is(), Q = C.ie(), B = C.it(), g = C.ai(), I = C.id(), o = C.ss(), D = C.se();
|
|
15
|
+
let k;
|
|
16
|
+
C.ip() && (k = w(E.slice(-1 === I ? A - 1 : A, -1 === I ? Q + 1 : Q)));
|
|
17
|
+
const i = [];
|
|
18
|
+
for (C.rsa(); C.ra();) {
|
|
19
|
+
const A = C.aks(), Q = C.ake(), B = C.avs(), g = C.ave();
|
|
20
|
+
i.push([N(E.slice(A, Q)), N(E.slice(B, g))]);
|
|
21
|
+
}
|
|
22
|
+
K.push({
|
|
23
|
+
n: k,
|
|
24
|
+
t: B,
|
|
25
|
+
s: A,
|
|
26
|
+
e: Q,
|
|
27
|
+
ss: o,
|
|
28
|
+
se: D,
|
|
29
|
+
d: I,
|
|
30
|
+
a: g,
|
|
31
|
+
at: i.length > 0 ? i : null
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
for (; C.re();) {
|
|
35
|
+
const A = C.es(), Q = C.ee(), B = C.els(), g = C.ele(), I = N(E.slice(A, Q)), o = B < 0 ? void 0 : N(E.slice(B, g));
|
|
36
|
+
k.push({
|
|
37
|
+
s: A,
|
|
38
|
+
e: Q,
|
|
39
|
+
ls: B,
|
|
40
|
+
le: g,
|
|
41
|
+
n: I,
|
|
42
|
+
ln: o
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function w(A) {
|
|
46
|
+
try {
|
|
47
|
+
return (0, eval)(A);
|
|
48
|
+
} catch (A) {}
|
|
49
|
+
}
|
|
50
|
+
function N(A) {
|
|
51
|
+
if (!A) return A;
|
|
52
|
+
const Q = A[0];
|
|
53
|
+
return ("\"" === Q || "'" === Q) && w(A) || A;
|
|
54
|
+
}
|
|
55
|
+
return [
|
|
56
|
+
K,
|
|
57
|
+
k,
|
|
58
|
+
!!C.f(),
|
|
59
|
+
!!C.ms()
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
function Q(A, Q) {
|
|
63
|
+
const B = A.length;
|
|
64
|
+
let C = 0;
|
|
65
|
+
for (; C < B;) {
|
|
66
|
+
const B = A.charCodeAt(C);
|
|
67
|
+
Q[C++] = (255 & B) << 8 | B >>> 8;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function B(A, Q) {
|
|
71
|
+
const B = A.length;
|
|
72
|
+
let C = 0;
|
|
73
|
+
for (; C < B;) Q[C] = A.charCodeAt(C++);
|
|
74
|
+
}
|
|
75
|
+
let C;
|
|
76
|
+
const E = () => {
|
|
77
|
+
return A = "AGFzbQEAAAABKwhgAX8Bf2AEf39/fwBgAAF/YAAAYAF/AGADf39/AX9gAn9/AX9gA39/fwADODcAAQECAgICAgICAgICAgICAgICAgICAgICAwIAAwMDBAAEAAAABQAAAAAAAwMDAAAGAAcABgIFBAUBcAEBAQUDAQABBg8CfwFBsPIAC38AQbDyAAsHnQEbBm1lbW9yeQIAAnNhAAABZQADAmlzAAQCaWUABQJzcwAGAnNlAAcCaXQACAJhaQAJAmlkAAoCaXAACwJlcwAMAmVlAA0DZWxzAA4DZWxlAA8CcmkAEAJyZQARAWYAEgJtcwATAnJhABQDYWtzABUDYWtlABYDYXZzABcDYXZlABgDcnNhABkFcGFyc2UAGgtfX2hlYXBfYmFzZQMBCrxJN2gBAX9BACAANgL0CUEAKALQCSIBIABBAXRqIgBBADsBAEEAIABBAmoiADYC+AlBACAANgL8CUEAQQA2AtQJQQBBADYC5AlBAEEANgLcCUEAQQA2AtgJQQBBADYC7AlBAEEANgLgCSABC9MBAQN/QQAoAuQJIQRBAEEAKAL8CSIFNgLkCUEAIAQ2AugJQQAgBUEoajYC/AkgBEEkakHUCSAEGyAFNgIAQQAoAsgJIQRBACgCxAkhBiAFIAE2AgAgBSAANgIIIAUgAiACQQJqQQAgBiADRiIAGyAEIANGIgQbNgIMIAUgAzYCFCAFQQA2AhAgBSACNgIEIAVCADcCICAFQQNBAUECIAAbIAQbNgIcIAVBACgCxAkgA0YiAjoAGAJAAkAgAg0AQQAoAsgJIANHDQELQQBBAToAgAoLC14BAX9BACgC7AkiBEEQakHYCSAEG0EAKAL8CSIENgIAQQAgBDYC7AlBACAEQRRqNgL8CUEAQQE6AIAKIARBADYCECAEIAM2AgwgBCACNgIIIAQgATYCBCAEIAA2AgALCABBACgChAoLFQBBACgC3AkoAgBBACgC0AlrQQF1Cx4BAX9BACgC3AkoAgQiAEEAKALQCWtBAXVBfyAAGwsVAEEAKALcCSgCCEEAKALQCWtBAXULHgEBf0EAKALcCSgCDCIAQQAoAtAJa0EBdUF/IAAbCwsAQQAoAtwJKAIcCx4BAX9BACgC3AkoAhAiAEEAKALQCWtBAXVBfyAAGws7AQF/AkBBACgC3AkoAhQiAEEAKALECUcNAEF/DwsCQCAAQQAoAsgJRw0AQX4PCyAAQQAoAtAJa0EBdQsLAEEAKALcCS0AGAsVAEEAKALgCSgCAEEAKALQCWtBAXULFQBBACgC4AkoAgRBACgC0AlrQQF1Cx4BAX9BACgC4AkoAggiAEEAKALQCWtBAXVBfyAAGwseAQF/QQAoAuAJKAIMIgBBACgC0AlrQQF1QX8gABsLJQEBf0EAQQAoAtwJIgBBJGpB1AkgABsoAgAiADYC3AkgAEEARwslAQF/QQBBACgC4AkiAEEQakHYCSAAGygCACIANgLgCSAAQQBHCwgAQQAtAIgKCwgAQQAtAIAKCysBAX9BAEEAKAKMCiIAQRBqQQAoAtwJQSBqIAAbKAIAIgA2AowKIABBAEcLFQBBACgCjAooAgBBACgC0AlrQQF1CxUAQQAoAowKKAIEQQAoAtAJa0EBdQsVAEEAKAKMCigCCEEAKALQCWtBAXULFQBBACgCjAooAgxBACgC0AlrQQF1CwoAQQBBADYCjAoLuw8BBX8jAEGA0ABrIgAkAEEAQQE6AIgKQQBBACgCzAk2ApQKQQBBACgC0AlBfmoiATYCqApBACABQQAoAvQJQQF0aiICNgKsCkEAQQA6AIAKQQBBADsBkApBAEEAOwGSCkEAQQA6AJgKQQBBADYChApBAEEAOgDwCUEAIABBgBBqNgKcCkEAIAA2AqAKQQBBADoApAoCQAJAAkACQANAQQAgAUECaiIDNgKoCiABIAJPDQECQCADLwEAIgJBd2pBBUkNAAJAAkACQAJAAkAgAkGbf2oOBQEICAgCAAsgAkEgRg0EIAJBL0YNAyACQTtGDQIMBwtBAC8BkgoNASADEBtFDQEgAUEEakGCCEEKEDYNARAcQQAtAIgKDQFBAEEAKAKoCiIBNgKUCgwHCyADEBtFDQAgAUEEakGMCEEKEDYNABAdC0EAQQAoAqgKNgKUCgwBCwJAIAEvAQQiA0EqRg0AIANBL0cNBBAeDAELQQEQHwtBACgCrAohAkEAKAKoCiEBDAALC0EAIQIgAyEBQQAtAPAJDQIMAQtBACABNgKoCkEAQQA6AIgKCwNAQQAgAUECaiIDNgKoCgJAAkACQAJAAkACQAJAIAFBACgCrApPDQACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADLwEAIgJBYGoOEBMSCRISEhIIAQUSEgQSEgoACwJAAkACQAJAIAJBpX9qDg8FFQYVFQ4VFQMVARUVFQIACyACQXdqQQVJDRUgAkGFf2oOAwgUCRQLQQAvAZIKDRMgAxAbRQ0TIAFBBGpBgghBChA2DRMQHAwTCyADEBtFDRIgAUEEakGMCEEKEDYNEhAdDBILIAMQG0UNESABKQAEQuyAhIOwjsA5Ug0RIAEvAQwiA0F3aiIBQRdLDQ9BASABdEGfgIAEcUUNDwwQC0EAQQAvAZIKIgFBAWo7AZIKQQAoApwKIAFBA3RqIgFBATYCACABQQAoApQKNgIEDBALQQBBAC8BkgoiAUEBajsBkgpBACgCnAogAUEDdGoiAUEINgIAIAFBACgClAo2AgQMDwtBAC8BkgoiAUUNC0EAIAFBf2o7AZIKDA4LQQAvAZAKIgNFDQ1BAC8BkgoiAkUNDSACQQN0QQAoApwKakF4aigCAEEFRw0NIANBAnRBACgCoApqQXxqKAIAIgMoAgQNDUEAIAFBBGo2AqgKIANBACgClApBAmo2AgRBARAgGiADQQAoAqgKIgE2AhBBACABQX5qNgKoCgwNC0EALwGSCiIDRQ0JQQAgA0F/aiIDOwGSCkEALwGQCiICRQ0MQQAoApwKIANB//8DcUEDdGooAgBBBUcNDAJAIAJBAnRBACgCoApqQXxqKAIAIgMoAgQNACADQQAoApQKQQJqNgIEC0EAIAJBf2o7AZAKIAMgAUEEajYCDAwMCwJAQQAoApQKIgEvAQBBKUcNAEEAKALkCSIDRQ0AIAMoAgQgAUcNAEEAQQAoAugJIgM2AuQJAkAgA0UNACADQQA2AiQMAQtBAEEANgLUCQtBAEEALwGSCiIDQQFqOwGSCkEAKAKcCiADQQN0aiIDQQZBAkEALQCkChs2AgAgAyABNgIEQQBBADoApAoMCwtBAC8BkgoiAUUNB0EAIAFBf2oiATsBkgpBACgCnAogAUH//wNxQQN0aigCAEEERg0EDAoLQScQIQwJC0EiECEMCAsCQAJAIAEvAQQiAUEqRg0AIAFBL0cNARAeDAoLQQEQHwwJCwJAAkACQAJAQQAoApQKIgEvAQAiAxAiRQ0AAkACQCADQVVqDgQACQEDCQsgAUF+ai8BAEErRg0DDAgLIAFBfmovAQBBLUYNAgwHCyADQSlHDQFBACgCnApBAC8BkgoiAkEDdGooAgQQI0UNAgwGCyABQX5qLwEAQVBqQf//A3FBCk8NBQtBAC8BkgohAgsCQAJAIAJB//8DcSICRQ0AIANB5gBHDQBBACgCnAogAkF/akEDdGoiBCgCAEEBRw0AIAFBfmovAQBB7wBHDQEgAUF8ahAkRQ0BIAQoAgRBlghBAxAlRQ0BDAULIANB/QBHDQBBACgCnAogAkEDdGoiAigCBBAmDQQgAigCAEEGRg0ECyABECcNAyADRQ0DIANBL0ZBAC0AmApBAEdxDQMCQEEAKALsCSICRQ0AIAEgAigCAEkNACABIAIoAgRNDQQLIAFBfmohAUEAKALQCSECAkADQCABQQJqIgQgAk0NAUEAIAE2ApQKIAEvAQAhAyABQX5qIgQhASADEChFDQALIARBAmohBAsCQCADQf//A3EQKUUNACAEQX5qIQECQANAIAFBAmoiAyACTQ0BQQAgATYClAogAS8BACEDIAFBfmoiBCEBIAMQKQ0ACyAEQQJqIQMLIAMQKg0EC0EAQQE6AJgKDAcLQQAoApwKQQAvAZIKIgFBA3QiA2pBACgClAo2AgRBACABQQFqOwGSCkEAKAKcCiADakEDNgIACxArDAULQQAtAPAJQQAvAZAKQQAvAZIKcnJFIQIMBwsQLEEAQQA6AJgKDAMLEC1BACECDAULIANBoAFHDQELQQBBAToApAoLQQBBACgCqAo2ApQKC0EAKAKoCiEBDAALCyAAQYDQAGokACACCxoAAkBBACgC0AkgAEcNAEEBDwsgAEF+ahAuC/4KAQZ/QQBBACgCqAoiAEEMaiIBNgKoCkEAKALsCSECQQEQICEDAkACQAJAAkACQAJAAkACQAJAQQAoAqgKIgQgAUcNACADEC9FDQELAkACQAJAAkACQAJAAkAgA0EqRg0AIANB+wBHDQFBACAEQQJqNgKoCkEBECAhA0EAKAKoCiEEA0ACQAJAIANB//8DcSIDQSJGDQAgA0EnRg0AIAMQMxpBACgCqAohAwwBCyADECFBAEEAKAKoCkECaiIDNgKoCgtBARAgGgJAIAQgAxA0IgNBLEcNAEEAQQAoAqgKQQJqNgKoCkEBECAhAwsgA0H9AEYNA0EAKAKoCiIFIARGDQ8gBSEEIAVBACgCrApNDQAMDwsLQQAgBEECajYCqApBARAgGkEAKAKoCiIDIAMQNBoMAgtBAEEAOgCICgJAAkACQAJAAkACQCADQZ9/ag4MAgsEAQsDCwsLCwsFAAsgA0H2AEYNBAwKC0EAIARBDmoiAzYCqAoCQAJAAkBBARAgQZ9/ag4GABICEhIBEgtBACgCqAoiBSkAAkLzgOSD4I3AMVINESAFLwEKEClFDRFBACAFQQpqNgKoCkEAECAaC0EAKAKoCiIFQQJqQbIIQQ4QNg0QIAUvARAiAkF3aiIBQRdLDQ1BASABdEGfgIAEcUUNDQwOC0EAKAKoCiIFKQACQuyAhIOwjsA5Ug0PIAUvAQoiAkF3aiIBQRdNDQYMCgtBACAEQQpqNgKoCkEAECAaQQAoAqgKIQQLQQAgBEEQajYCqAoCQEEBECAiBEEqRw0AQQBBACgCqApBAmo2AqgKQQEQICEEC0EAKAKoCiEDIAQQMxogA0EAKAKoCiIEIAMgBBACQQBBACgCqApBfmo2AqgKDwsCQCAEKQACQuyAhIOwjsA5Ug0AIAQvAQoQKEUNAEEAIARBCmo2AqgKQQEQICEEQQAoAqgKIQMgBBAzGiADQQAoAqgKIgQgAyAEEAJBAEEAKAKoCkF+ajYCqAoPC0EAIARBBGoiBDYCqAoLQQAgBEEGajYCqApBAEEAOgCICkEBECAhBEEAKAKoCiEDIAQQMyEEQQAoAqgKIQIgBEHf/wNxIgFB2wBHDQNBACACQQJqNgKoCkEBECAhBUEAKAKoCiEDQQAhBAwEC0EAQQE6AIAKQQBBACgCqApBAmo2AqgKC0EBECAhBEEAKAKoCiEDAkAgBEHmAEcNACADQQJqQawIQQYQNg0AQQAgA0EIajYCqAogAEEBECBBABAyIAJBEGpB2AkgAhshAwNAIAMoAgAiA0UNBSADQgA3AgggA0EQaiEDDAALC0EAIANBfmo2AqgKDAMLQQEgAXRBn4CABHFFDQMMBAtBASEECwNAAkACQCAEDgIAAQELIAVB//8DcRAzGkEBIQQMAQsCQAJAQQAoAqgKIgQgA0YNACADIAQgAyAEEAJBARAgIQQCQCABQdsARw0AIARBIHJB/QBGDQQLQQAoAqgKIQMCQCAEQSxHDQBBACADQQJqNgKoCkEBECAhBUEAKAKoCiEDIAVBIHJB+wBHDQILQQAgA0F+ajYCqAoLIAFB2wBHDQJBACACQX5qNgKoCg8LQQAhBAwACwsPCyACQaABRg0AIAJB+wBHDQQLQQAgBUEKajYCqApBARAgIgVB+wBGDQMMAgsCQCACQVhqDgMBAwEACyACQaABRw0CC0EAIAVBEGo2AqgKAkBBARAgIgVBKkcNAEEAQQAoAqgKQQJqNgKoCkEBECAhBQsgBUEoRg0BC0EAKAKoCiEBIAUQMxpBACgCqAoiBSABTQ0AIAQgAyABIAUQAkEAQQAoAqgKQX5qNgKoCg8LIAQgA0EAQQAQAkEAIARBDGo2AqgKDwsQLQuFDAEKf0EAQQAoAqgKIgBBDGoiATYCqApBARAgIQJBACgCqAohAwJAAkACQAJAAkACQAJAAkAgAkEuRw0AQQAgA0ECajYCqAoCQEEBECAiAkHkAEYNAAJAIAJB8wBGDQAgAkHtAEcNB0EAKAKoCiICQQJqQZwIQQYQNg0HAkBBACgClAoiAxAxDQAgAy8BAEEuRg0ICyAAIAAgAkEIakEAKALICRABDwtBACgCqAoiAkECakGiCEEKEDYNBgJAQQAoApQKIgMQMQ0AIAMvAQBBLkYNBwtBACEEQQAgAkEMajYCqApBASEFQQUhBkEBECAhAkEAIQdBASEIDAILQQAoAqgKIgIpAAJC5YCYg9CMgDlSDQUCQEEAKAKUCiIDEDENACADLwEAQS5GDQYLQQAhBEEAIAJBCmo2AqgKQQIhCEEHIQZBASEHQQEQICECQQEhBQwBCwJAAkACQAJAIAJB8wBHDQAgAyABTQ0AIANBAmpBoghBChA2DQACQCADLwEMIgRBd2oiB0EXSw0AQQEgB3RBn4CABHENAgsgBEGgAUYNAQtBACEHQQchBkEBIQQgAkHkAEYNAQwCC0EAIQRBACADQQxqIgI2AqgKQQEhBUEBECAhCQJAQQAoAqgKIgYgAkYNAEHmACECAkAgCUHmAEYNAEEFIQZBACEHQQEhCCAJIQIMBAtBACEHQQEhCCAGQQJqQawIQQYQNg0EIAYvAQgQKEUNBAtBACEHQQAgAzYCqApBByEGQQEhBEEAIQVBACEIIAkhAgwCCyADIABBCmpNDQBBACEIQeQAIQICQCADKQACQuWAmIPQjIA5Ug0AAkACQCADLwEKIgRBd2oiB0EXSw0AQQEgB3RBn4CABHENAQtBACEIIARBoAFHDQELQQAhBUEAIANBCmo2AqgKQSohAkEBIQdBAiEIQQEQICIJQSpGDQRBACADNgKoCkEBIQRBACEHQQAhCCAJIQIMAgsgAyEGQQAhBwwCC0EAIQVBACEICwJAIAJBKEcNAEEAKAKcCkEALwGSCiICQQN0aiIDQQAoAqgKNgIEQQAgAkEBajsBkgogA0EFNgIAQQAoApQKLwEAQS5GDQRBAEEAKAKoCiIDQQJqNgKoCkEBECAhAiAAQQAoAqgKQQAgAxABAkACQCAFDQBBACgC5AkhAQwBC0EAKALkCSIBIAY2AhwLQQBBAC8BkAoiA0EBajsBkApBACgCoAogA0ECdGogATYCAAJAIAJBIkYNACACQSdGDQBBAEEAKAKoCkF+ajYCqAoPCyACECFBAEEAKAKoCkECaiICNgKoCgJAAkACQEEBECBBV2oOBAECAgACC0EAQQAoAqgKQQJqNgKoCkEBECAaQQAoAuQJIgMgAjYCBCADQQE6ABggA0EAKAKoCiICNgIQQQAgAkF+ajYCqAoPC0EAKALkCSIDIAI2AgQgA0EBOgAYQQBBAC8BkgpBf2o7AZIKIANBACgCqApBAmo2AgxBAEEALwGQCkF/ajsBkAoPC0EAQQAoAqgKQX5qNgKoCg8LAkAgBEEBcyACQfsAR3INAEEAKAKoCiECQQAvAZIKDQUDQAJAAkACQCACQQAoAqwKTw0AQQEQICICQSJGDQEgAkEnRg0BIAJB/QBHDQJBAEEAKAKoCkECajYCqAoLQQEQICEDQQAoAqgKIQICQCADQeYARw0AIAJBAmpBrAhBBhA2DQcLQQAgAkEIajYCqAoCQEEBECAiAkEiRg0AIAJBJ0cNBwsgACACQQAQMg8LIAIQIQtBAEEAKAKoCkECaiICNgKoCgwACwsCQAJAIAJBWWoOBAMBAQMACyACQSJGDQILQQAoAqgKIQYLIAYgAUcNAEEAIABBCmo2AqgKDwsgAkEqRyAHcQ0DQQAvAZIKQf//A3ENA0EAKAKoCiECQQAoAqwKIQEDQCACIAFPDQECQAJAIAIvAQAiA0EnRg0AIANBIkcNAQsgACADIAgQMg8LQQAgAkECaiICNgKoCgwACwsQLQsPC0EAIAJBfmo2AqgKDwtBAEEAKAKoCkF+ajYCqAoLRwEDf0EAKAKoCkECaiEAQQAoAqwKIQECQANAIAAiAkF+aiABTw0BIAJBAmohACACLwEAQXZqDgQBAAABAAsLQQAgAjYCqAoLmAEBA39BAEEAKAKoCiIBQQJqNgKoCiABQQZqIQFBACgCrAohAgNAAkACQAJAIAFBfGogAk8NACABQX5qLwEAIQMCQAJAIAANACADQSpGDQEgA0F2ag4EAgQEAgQLIANBKkcNAwsgAS8BAEEvRw0CQQAgAUF+ajYCqAoMAQsgAUF+aiEBC0EAIAE2AqgKDwsgAUECaiEBDAALC5wBAQN/QQAoAqgKIQECQANAAkACQCABLwEAIgJBL0cNAAJAIAEvAQIiAUEqRg0AIAFBL0cNBBAeDAILIAAQHwwBCwJAAkAgAEUNACACQXdqIgFBF0sNAUEBIAF0QZ+AgARxRQ0BDAILIAIQKUUNAwwBCyACQaABRw0CC0EAQQAoAqgKIgNBAmoiATYCqAogA0EAKAKsCkkNAAsLIAILiAEBBH9BACgCqAohAUEAKAKsCiECAkACQANAIAEiA0ECaiEBIAMgAk8NASABLwEAIgQgAEYNAgJAIARB3ABGDQAgBEF2ag4EAgEBAgELIANBBGohASADLwEEQQ1HDQAgA0EGaiABIAMvAQZBCkYbIQEMAAsLQQAgATYCqAoQLQ8LQQAgATYCqAoLbAEBfwJAAkAgAEFfaiIBQQVLDQBBASABdEExcQ0BCyAAQUZqQf//A3FBBkkNACAAQSlHIABBWGpB//8DcUEHSXENAAJAIABBpX9qDgQBAAABAAsgAEH9AEcgAEGFf2pB//8DcUEESXEPC0EBCy4BAX9BASEBAkAgAEGcCUEFECUNACAAQZYIQQMQJQ0AIABBpglBAhAlIQELIAELygEBAn8CQAJAIAAvAQAiAUF3akEFSQ0AIAFBIEYNACABQSlGDQAgAUHdAEYNACABQaABRg0AQQAhAiABQf0ARw0BC0EAKALQCSECAkACQANAIAAvAQAhASAAIAJNDQECQCABQXdqQQVJDQAgAUEgRg0AIAFBoAFGDQACQCABQSlGDQAgAUHdAEYNACABQf0ARw0EC0EBDwsgAEF+aiEADAALC0EBIQIgAUEpRg0BIAFB3QBGDQEgAUH9AEYNAQsgARAvQQFzIQILIAILRgEDf0EAIQMCQCAAIAJBAXQiAmsiBEECaiIAQQAoAtAJIgVJDQAgACABIAIQNg0AAkAgACAFRw0AQQEPCyAEEC4hAwsgAwuDAQECf0EBIQECQAJAAkACQAJAAkAgAC8BACICQUVqDgQFBAQBAAsCQCACQZt/ag4EAwQEAgALIAJBKUYNBCACQfkARw0DIABBfmpBsglBBhAlDwsgAEF+ai8BAEE9Rg8LIABBfmpBqglBBBAlDwsgAEF+akG+CUEDECUPC0EAIQELIAELtAMBAn9BACEBAkACQAJAAkACQAJAAkACQAJAAkAgAC8BAEGcf2oOFAABAgkJCQkDCQkEBQkJBgkHCQkICQsCQAJAIABBfmovAQBBl39qDgQACgoBCgsgAEF8akHACEECECUPCyAAQXxqQcQIQQMQJQ8LAkACQAJAIABBfmovAQBBjX9qDgMAAQIKCwJAIABBfGovAQAiAkHhAEYNACACQewARw0KIABBempB5QAQMA8LIABBempB4wAQMA8LIABBfGpByghBBBAlDwsgAEF8akHSCEEGECUPCyAAQX5qLwEAQe8ARw0GIABBfGovAQBB5QBHDQYCQCAAQXpqLwEAIgJB8ABGDQAgAkHjAEcNByAAQXhqQd4IQQYQJQ8LIABBeGpB6ghBAhAlDwsgAEF+akHuCEEEECUPC0EBIQEgAEF+aiIAQekAEDANBCAAQfYIQQUQJQ8LIABBfmpB5AAQMA8LIABBfmpBgAlBBxAlDwsgAEF+akGOCUEEECUPCwJAIABBfmovAQAiAkHvAEYNACACQeUARw0BIABBfGpB7gAQMA8LIABBfGpBlglBAxAlIQELIAELNAEBf0EBIQECQCAAQXdqQf//A3FBBUkNACAAQYABckGgAUYNACAAQS5HIAAQL3EhAQsgAQswAQF/AkACQCAAQXdqIgFBF0sNAEEBIAF0QY2AgARxDQELIABBoAFGDQBBAA8LQQELTgECf0EAIQECQAJAIAAvAQAiAkHlAEYNACACQesARw0BIABBfmpB7ghBBBAlDwsgAEF+ai8BAEH1AEcNACAAQXxqQdIIQQYQJSEBCyABC94BAQR/QQAoAqgKIQBBACgCrAohAQJAAkACQANAIAAiAkECaiEAIAIgAU8NAQJAAkACQCAALwEAIgNBpH9qDgUCAwMDAQALIANBJEcNAiACLwEEQfsARw0CQQAgAkEEaiIANgKoCkEAQQAvAZIKIgJBAWo7AZIKQQAoApwKIAJBA3RqIgJBBDYCACACIAA2AgQPC0EAIAA2AqgKQQBBAC8BkgpBf2oiADsBkgpBACgCnAogAEH//wNxQQN0aigCAEEDRw0DDAQLIAJBBGohAAwACwtBACAANgKoCgsQLQsLcAECfwJAAkADQEEAQQAoAqgKIgBBAmoiATYCqAogAEEAKAKsCk8NAQJAAkACQCABLwEAIgFBpX9qDgIBAgALAkAgAUF2ag4EBAMDBAALIAFBL0cNAgwECxA1GgwBC0EAIABBBGo2AqgKDAALCxAtCws1AQF/QQBBAToA8AlBACgCqAohAEEAQQAoAqwKQQJqNgKoCkEAIABBACgC0AlrQQF1NgKECgtDAQJ/QQEhAQJAIAAvAQAiAkF3akH//wNxQQVJDQAgAkGAAXJBoAFGDQBBACEBIAIQL0UNACACQS5HIAAQMXIPCyABC2gBAn9BASEBAkACQCAAQV9qIgJBBUsNAEEBIAJ0QTFxDQELIABB+P8DcUEoRg0AIABBRmpB//8DcUEGSQ0AAkAgAEGlf2oiAkEDSw0AIAJBAUcNAQsgAEGFf2pB//8DcUEESSEBCyABCz0BAn9BACECAkBBACgC0AkiAyAASw0AIAAvAQAgAUcNAAJAIAMgAEcNAEEBDwsgAEF+ai8BABAoIQILIAILMQEBf0EAIQECQCAALwEAQS5HDQAgAEF+ai8BAEEuRw0AIABBfGovAQBBLkYhAQsgAQvbBAEFfwJAIAFBIkYNACABQSdGDQAQLQ8LQQAoAqgKIQMgARAhIAAgA0ECakEAKAKoCkEAKALECRABAkAgAkEBSA0AQQAoAuQJQQRBBiACQQFGGzYCHAtBAEEAKAKoCkECajYCqApBABAgIQJBACgCqAohAQJAAkAgAkH3AEcNACABLwECQekARw0AIAEvAQRB9ABHDQAgAS8BBkHoAEYNAQtBACABQX5qNgKoCg8LQQAgAUEIajYCqAoCQEEBECBB+wBGDQBBACABNgKoCg8LQQAoAqgKIgQhA0EAIQADQEEAIANBAmo2AqgKAkACQAJAAkBBARAgIgJBJ0cNAEEAKAKoCiEFQScQIUEAKAKoCkECaiEDDAELQQAoAqgKIQUgAkEiRw0BQSIQIUEAKAKoCkECaiEDC0EAIAM2AqgKQQEQICECDAELIAIQMyECQQAoAqgKIQMLAkAgAkE6Rg0AQQAgATYCqAoPC0EAQQAoAqgKQQJqNgKoCgJAQQEQICICQSJGDQAgAkEnRg0AQQAgATYCqAoPC0EAKAKoCiEGIAIQIUEAQQAoAvwJIgJBFGo2AvwJQQAoAqgKIQcgAiAFNgIAIAJBADYCECACIAY2AgggAiADNgIEIAIgB0ECajYCDEEAQQAoAqgKQQJqNgKoCiAAQRBqQQAoAuQJQSBqIAAbIAI2AgACQAJAQQEQICIAQSxGDQAgAEH9AEYNAUEAIAE2AqgKDwtBAEEAKAKoCkECaiIDNgKoCiACIQAMAQsLQQAoAuQJIgEgBDYCECABQQAoAqgKQQJqNgIMC20BAn8CQAJAA0ACQCAAQf//A3EiAUF3aiICQRdLDQBBASACdEGfgIAEcQ0CCyABQaABRg0BIAAhAiABEC8NAkEAIQJBAEEAKAKoCiIAQQJqNgKoCiAALwECIgANAAwCCwsgACECCyACQf//A3ELqwEBBH8CQAJAQQAoAqgKIgIvAQAiA0HhAEYNACABIQQgACEFDAELQQAgAkEEajYCqApBARAgIQJBACgCqAohBQJAAkAgAkEiRg0AIAJBJ0YNACACEDMaQQAoAqgKIQQMAQsgAhAhQQBBACgCqApBAmoiBDYCqAoLQQEQICEDQQAoAqgKIQILAkAgAiAFRg0AIAUgBEEAIAAgACABRiICG0EAIAEgAhsQAgsgAwtyAQR/QQAoAqgKIQBBACgCrAohAQJAAkADQCAAQQJqIQIgACABTw0BAkACQCACLwEAIgNBpH9qDgIBBAALIAIhACADQXZqDgQCAQECAQsgAEEEaiEADAALC0EAIAI2AqgKEC1BAA8LQQAgAjYCqApB3QALSQEDf0EAIQMCQCACRQ0AAkADQCAALQAAIgQgAS0AACIFRw0BIAFBAWohASAAQQFqIQAgAkF/aiICDQAMAgsLIAQgBWshAwsgAwsL4gECAEGACAvEAQAAeABwAG8AcgB0AG0AcABvAHIAdABmAG8AcgBlAHQAYQBvAHUAcgBjAGUAcgBvAG0AdQBuAGMAdABpAG8AbgB2AG8AeQBpAGUAZABlAGwAZQBjAG8AbgB0AGkAbgBpAG4AcwB0AGEAbgB0AHkAYgByAGUAYQByAGUAdAB1AHIAZABlAGIAdQBnAGcAZQBhAHcAYQBpAHQAaAByAHcAaABpAGwAZQBpAGYAYwBhAHQAYwBmAGkAbgBhAGwAbABlAGwAcwAAQcQJCxABAAAAAgAAAAAEAAAwOQAA", "undefined" != typeof Buffer ? Buffer.from(A, "base64") : Uint8Array.from(atob(A), ((A) => A.charCodeAt(0)));
|
|
78
|
+
var A;
|
|
79
|
+
};
|
|
80
|
+
const init = WebAssembly.compile(E()).then(WebAssembly.instantiate).then((({ exports: A }) => {
|
|
81
|
+
C = A;
|
|
82
|
+
}));
|
|
83
|
+
export { init, parse };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { WorkerHooks } from "./types.mjs";
|
|
2
|
-
import { BaseEnvRunner, EnvRunnerData } from "./base-runner.mjs";
|
|
2
|
+
import { BaseEnvRunner, EnvRunnerData } from "./common-base-runner.mjs";
|
|
3
3
|
import { IncomingMessage } from "node:http";
|
|
4
4
|
import { Socket } from "node:net";
|
|
5
5
|
/** Result from a module transform (compatible with Vite's `TransformResult`). */
|
|
@@ -70,6 +70,18 @@ declare class MiniflareEnvRunner extends BaseEnvRunner {
|
|
|
70
70
|
* and responds with `module-reloaded` when done.
|
|
71
71
|
*/
|
|
72
72
|
reloadModule(timeout?: number): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Invalidate a virtual module so the next `reloadModule()` re-evaluates it.
|
|
75
|
+
*
|
|
76
|
+
* Host-side only (no worker round-trip): the module fallback service serves
|
|
77
|
+
* virtual sources from a live map, so re-running a factory source and
|
|
78
|
+
* bumping the per-specifier versions — the module plus its transitive
|
|
79
|
+
* virtual importers — is enough. Import specifiers in re-served module code
|
|
80
|
+
* are rewritten to the versioned form, giving workerd fresh module
|
|
81
|
+
* identities (it caches by name). A `persistent` instance is evicted from
|
|
82
|
+
* the cache, since its served sources no longer match the cache key.
|
|
83
|
+
*/
|
|
84
|
+
invalidateModule(specifier: string, _timeout?: number): Promise<void>;
|
|
73
85
|
protected _hasRuntime(): boolean;
|
|
74
86
|
protected _runtimeType(): string;
|
|
75
87
|
protected _closeRuntime(): Promise<void>;
|