@ontemper/sdk 0.0.0 → 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 +221 -2
- package/dist/AxiosError.d.ts +46 -0
- package/dist/AxiosError.d.ts.map +1 -0
- package/dist/AxiosError.js +118 -0
- package/dist/AxiosError.js.map +1 -0
- package/dist/Contract/Invocation.d.ts +21 -0
- package/dist/Contract/Invocation.d.ts.map +1 -0
- package/dist/Contract/Invocation.js +2 -0
- package/dist/Contract/Invocation.js.map +1 -0
- package/dist/Contract/Manifest.d.ts +125 -0
- package/dist/Contract/Manifest.d.ts.map +1 -0
- package/dist/Contract/Manifest.js +59 -0
- package/dist/Contract/Manifest.js.map +1 -0
- package/dist/Contract/RuntimeApi.d.ts +143 -0
- package/dist/Contract/RuntimeApi.d.ts.map +1 -0
- package/dist/Contract/RuntimeApi.js +148 -0
- package/dist/Contract/RuntimeApi.js.map +1 -0
- package/dist/Contract/index.d.ts +4 -0
- package/dist/Contract/index.d.ts.map +1 -0
- package/dist/Contract/index.js +3 -0
- package/dist/Contract/index.js.map +1 -0
- package/dist/Correlation.d.ts +33 -0
- package/dist/Correlation.d.ts.map +1 -0
- package/dist/Correlation.js +57 -0
- package/dist/Correlation.js.map +1 -0
- package/dist/HttpApiResource.d.ts +32 -0
- package/dist/HttpApiResource.d.ts.map +1 -0
- package/dist/HttpApiResource.js +35 -0
- package/dist/HttpApiResource.js.map +1 -0
- package/dist/HttpClient.d.ts +10 -0
- package/dist/HttpClient.d.ts.map +1 -0
- package/dist/HttpClient.js +167 -0
- package/dist/HttpClient.js.map +1 -0
- package/dist/HttpPayload.d.ts +9 -0
- package/dist/HttpPayload.d.ts.map +1 -0
- package/dist/HttpPayload.js +32 -0
- package/dist/HttpPayload.js.map +1 -0
- package/dist/Invocation.d.ts +7 -0
- package/dist/Invocation.d.ts.map +1 -0
- package/dist/Invocation.js +4 -0
- package/dist/Invocation.js.map +1 -0
- package/dist/LogContext.d.ts +59 -0
- package/dist/LogContext.d.ts.map +1 -0
- package/dist/LogContext.js +47 -0
- package/dist/LogContext.js.map +1 -0
- package/dist/Logger.d.ts +5 -0
- package/dist/Logger.d.ts.map +1 -0
- package/dist/Logger.js +314 -0
- package/dist/Logger.js.map +1 -0
- package/dist/Manifest.d.ts +8 -0
- package/dist/Manifest.d.ts.map +1 -0
- package/dist/Manifest.js +101 -0
- package/dist/Manifest.js.map +1 -0
- package/dist/Middleware.d.ts +13 -0
- package/dist/Middleware.d.ts.map +1 -0
- package/dist/Middleware.js +287 -0
- package/dist/Middleware.js.map +1 -0
- package/dist/Redaction.d.ts +27 -0
- package/dist/Redaction.d.ts.map +1 -0
- package/dist/Redaction.js +149 -0
- package/dist/Redaction.js.map +1 -0
- package/dist/Resource.d.ts +66 -0
- package/dist/Resource.d.ts.map +1 -0
- package/dist/Resource.js +57 -0
- package/dist/Resource.js.map +1 -0
- package/dist/ResourcesErrors.d.ts +36 -0
- package/dist/ResourcesErrors.d.ts.map +1 -0
- package/dist/ResourcesErrors.js +27 -0
- package/dist/ResourcesErrors.js.map +1 -0
- package/dist/ResourcesToken.d.ts +10 -0
- package/dist/ResourcesToken.d.ts.map +1 -0
- package/dist/ResourcesToken.js +63 -0
- package/dist/ResourcesToken.js.map +1 -0
- package/dist/RuntimeResources.d.ts +26 -0
- package/dist/RuntimeResources.d.ts.map +1 -0
- package/dist/RuntimeResources.js +115 -0
- package/dist/RuntimeResources.js.map +1 -0
- package/dist/Trigger.d.ts +17 -0
- package/dist/Trigger.d.ts.map +1 -0
- package/dist/Trigger.js +4 -0
- package/dist/Trigger.js.map +1 -0
- package/dist/Workflow.d.ts +36 -0
- package/dist/Workflow.d.ts.map +1 -0
- package/dist/Workflow.js +80 -0
- package/dist/Workflow.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +447 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/testing.d.ts +42 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +49 -0
- package/dist/testing.js.map +1 -0
- package/package.json +57 -5
package/dist/cli.js
ADDED
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
import { execFile } from 'node:child_process';
|
|
3
|
+
import { watch } from 'node:fs';
|
|
4
|
+
import { mkdtemp, rm } from 'node:fs/promises';
|
|
5
|
+
import { createServer } from 'node:http';
|
|
6
|
+
import { tmpdir } from 'node:os';
|
|
7
|
+
import { dirname, join, resolve } from 'node:path';
|
|
8
|
+
import { finished } from 'node:stream';
|
|
9
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
10
|
+
const usage = `Usage:
|
|
11
|
+
temper-workflow dev --entrypoint <file> [--host 127.0.0.1] [--port 3051]
|
|
12
|
+
temper-workflow serve --entrypoint <file> [--host 0.0.0.0] [--port 3051]
|
|
13
|
+
temper-workflow invoke --entrypoint <file> [--method POST] [--path /] [--body <text>]
|
|
14
|
+
`;
|
|
15
|
+
const fail = (message) => {
|
|
16
|
+
throw new Error(`${message}\n\n${usage}`);
|
|
17
|
+
};
|
|
18
|
+
const parseCommand = (value) => {
|
|
19
|
+
if (value === 'dev' || value === 'invoke' || value === 'serve')
|
|
20
|
+
return value;
|
|
21
|
+
return fail('Use dev, serve, or invoke.');
|
|
22
|
+
};
|
|
23
|
+
const optionValue = (arguments_, name) => {
|
|
24
|
+
const index = arguments_.indexOf(name);
|
|
25
|
+
if (index === -1)
|
|
26
|
+
return undefined;
|
|
27
|
+
const value = arguments_[index + 1];
|
|
28
|
+
if (value === undefined || value.startsWith('--'))
|
|
29
|
+
fail(`Missing value for ${name}.`);
|
|
30
|
+
return value;
|
|
31
|
+
};
|
|
32
|
+
const parseArguments = (arguments_) => {
|
|
33
|
+
const command = parseCommand(arguments_[0]);
|
|
34
|
+
const entrypoint = optionValue(arguments_, '--entrypoint') ?? fail('Missing --entrypoint.');
|
|
35
|
+
const host = optionValue(arguments_, '--host') ?? (command === 'serve' ? '0.0.0.0' : '127.0.0.1');
|
|
36
|
+
if (command === 'dev' && host !== '127.0.0.1' && host !== 'localhost' && host !== '::1') {
|
|
37
|
+
fail('The dev listener must use a localhost address.');
|
|
38
|
+
}
|
|
39
|
+
const portText = optionValue(arguments_, '--port') ?? process.env.PORT ?? '3051';
|
|
40
|
+
const port = Number(portText);
|
|
41
|
+
if (!Number.isInteger(port) || port < 0 || port > 65_535)
|
|
42
|
+
fail('--port must be between 0 and 65535.');
|
|
43
|
+
const path = optionValue(arguments_, '--path') ?? '/';
|
|
44
|
+
if (!path.startsWith('/'))
|
|
45
|
+
fail('--path must start with /.');
|
|
46
|
+
return {
|
|
47
|
+
command,
|
|
48
|
+
entrypoint: resolve(entrypoint),
|
|
49
|
+
host,
|
|
50
|
+
port,
|
|
51
|
+
method: (optionValue(arguments_, '--method') ?? 'POST').toUpperCase(),
|
|
52
|
+
path,
|
|
53
|
+
body: optionValue(arguments_, '--body'),
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
const importWorkflowModule = async (url) => {
|
|
57
|
+
// SAFETY: a dynamic module namespace is checked for its required default export before use.
|
|
58
|
+
return (await import(url));
|
|
59
|
+
};
|
|
60
|
+
const moduleFromImport = (imported, entrypoint) => {
|
|
61
|
+
if (imported.default === undefined)
|
|
62
|
+
return fail(`${entrypoint} must export a default workflow.`);
|
|
63
|
+
return imported.default;
|
|
64
|
+
};
|
|
65
|
+
const buildEntrypoint = (entrypoint, output) => {
|
|
66
|
+
const build = Promise.withResolvers();
|
|
67
|
+
execFile(process.execPath, [
|
|
68
|
+
'build',
|
|
69
|
+
entrypoint,
|
|
70
|
+
'--target',
|
|
71
|
+
'bun',
|
|
72
|
+
'--format',
|
|
73
|
+
'esm',
|
|
74
|
+
'--outfile',
|
|
75
|
+
output,
|
|
76
|
+
// SSH2 falls back to Node crypto when its optional native addons are absent.
|
|
77
|
+
'--external',
|
|
78
|
+
'*/sshcrypto.node',
|
|
79
|
+
'--external',
|
|
80
|
+
'*/cpufeatures.node',
|
|
81
|
+
], { encoding: 'utf8' }, (error, _stdout, stderr) => {
|
|
82
|
+
if (error === null) {
|
|
83
|
+
build.resolve(undefined);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
build.reject(new Error(`Workflow build failed.\n${stderr.trim()}`));
|
|
87
|
+
});
|
|
88
|
+
return build.promise;
|
|
89
|
+
};
|
|
90
|
+
const loadWorkflow = async (entrypoint) => {
|
|
91
|
+
const directory = await mkdtemp(join(tmpdir(), 'temper-workflow-'));
|
|
92
|
+
const output = join(directory, 'workflow.mjs');
|
|
93
|
+
try {
|
|
94
|
+
await buildEntrypoint(entrypoint, output);
|
|
95
|
+
const imported = await importWorkflowModule(pathToFileURL(output).href);
|
|
96
|
+
const module = moduleFromImport(imported, entrypoint);
|
|
97
|
+
return {
|
|
98
|
+
module,
|
|
99
|
+
dispose: async () => {
|
|
100
|
+
try {
|
|
101
|
+
await module.dispose();
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
await rm(directory, { recursive: true, force: true });
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
await rm(directory, { recursive: true, force: true });
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
const loadBuiltWorkflow = async (entrypoint) => {
|
|
115
|
+
const imported = await importWorkflowModule(pathToFileURL(entrypoint).href);
|
|
116
|
+
const module = moduleFromImport(imported, entrypoint);
|
|
117
|
+
return { module, dispose: module.dispose };
|
|
118
|
+
};
|
|
119
|
+
/** Mirrors the Firecracker guest's 115 s request deadline so local runs surface the same interruption. */
|
|
120
|
+
const LOCAL_DEADLINE_MS = 115_000;
|
|
121
|
+
/**
|
|
122
|
+
* The platform sends SIGTERM after a 20 s preStop drain and SIGKILL 40 s later
|
|
123
|
+
* (packages/infrastructure/k8s-workflow/defaults.ts). Requests still being handled get the grace and
|
|
124
|
+
* are then interrupted; whatever still runs at the deadline, module disposal included, ends with the
|
|
125
|
+
* process. Tests shorten both through the environment.
|
|
126
|
+
*/
|
|
127
|
+
const SHUTDOWN_GRACE_MS = 30_000;
|
|
128
|
+
const SHUTDOWN_DEADLINE_MS = 35_000;
|
|
129
|
+
/** A whole number of milliseconds from the environment, else `fallback`. */
|
|
130
|
+
const millisecondsFromEnvironment = (name, fallback) => {
|
|
131
|
+
const text = process.env[name];
|
|
132
|
+
if (text === undefined)
|
|
133
|
+
return fallback;
|
|
134
|
+
if (!/^\d+$/.test(text))
|
|
135
|
+
fail(`${name} must be a whole number of milliseconds.`);
|
|
136
|
+
return Number(text);
|
|
137
|
+
};
|
|
138
|
+
/** The legacy host (@hono/node-server) discarded unread request bytes this long, and at most this many, after a response. */
|
|
139
|
+
const DRAIN_TIMEOUT_MS = 500;
|
|
140
|
+
const MAX_DRAIN_BYTES = 64 * 1024 * 1024;
|
|
141
|
+
const invocationFor = (module, triggerKind) => ({
|
|
142
|
+
workflowId: module.manifest.apiId,
|
|
143
|
+
deploymentId: 'local',
|
|
144
|
+
executionId: crypto.randomUUID(),
|
|
145
|
+
runId: crypto.randomUUID(),
|
|
146
|
+
attempt: 1,
|
|
147
|
+
triggerKind,
|
|
148
|
+
deadline: Date.now() + LOCAL_DEADLINE_MS,
|
|
149
|
+
token: '',
|
|
150
|
+
});
|
|
151
|
+
/**
|
|
152
|
+
* The request body, read from the socket only as the workflow reads it, so the module's 100 MiB
|
|
153
|
+
* ceiling and invocation deadline govern the read, as they did behind the legacy host. Cancelling it
|
|
154
|
+
* stops the reads but keeps the socket, which still carries the response.
|
|
155
|
+
*/
|
|
156
|
+
const requestBody = (incoming) => {
|
|
157
|
+
let detach = () => undefined;
|
|
158
|
+
return new ReadableStream({
|
|
159
|
+
start(controller) {
|
|
160
|
+
const onData = (chunk) => {
|
|
161
|
+
incoming.pause();
|
|
162
|
+
controller.enqueue(chunk);
|
|
163
|
+
};
|
|
164
|
+
incoming.pause();
|
|
165
|
+
incoming.on('data', onData);
|
|
166
|
+
const stopWatching = finished(incoming, (error) => {
|
|
167
|
+
detach();
|
|
168
|
+
if (error === undefined || error === null)
|
|
169
|
+
controller.close();
|
|
170
|
+
else
|
|
171
|
+
controller.error(error);
|
|
172
|
+
});
|
|
173
|
+
detach = () => {
|
|
174
|
+
incoming.off('data', onData);
|
|
175
|
+
stopWatching();
|
|
176
|
+
};
|
|
177
|
+
},
|
|
178
|
+
pull() {
|
|
179
|
+
incoming.resume();
|
|
180
|
+
},
|
|
181
|
+
cancel() {
|
|
182
|
+
detach();
|
|
183
|
+
},
|
|
184
|
+
}, { highWaterMark: 0 });
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* After a response, request bytes nobody read are discarded briefly and the socket then closes, so a
|
|
188
|
+
* client still sending (e.g. after a 413) can read the answer: the legacy host's drain.
|
|
189
|
+
*/
|
|
190
|
+
const drainIncoming = (incoming) => {
|
|
191
|
+
if (incoming.readableEnded || incoming.destroyed)
|
|
192
|
+
return;
|
|
193
|
+
let discarded = 0;
|
|
194
|
+
const onData = (chunk) => {
|
|
195
|
+
discarded += chunk.byteLength;
|
|
196
|
+
if (discarded > MAX_DRAIN_BYTES)
|
|
197
|
+
close();
|
|
198
|
+
};
|
|
199
|
+
const release = () => {
|
|
200
|
+
clearTimeout(timer);
|
|
201
|
+
incoming.off('data', onData);
|
|
202
|
+
};
|
|
203
|
+
const close = () => {
|
|
204
|
+
release();
|
|
205
|
+
incoming.socket.destroySoon();
|
|
206
|
+
};
|
|
207
|
+
const timer = setTimeout(close, DRAIN_TIMEOUT_MS);
|
|
208
|
+
timer.unref();
|
|
209
|
+
// The body stream's own listener would pause the socket again.
|
|
210
|
+
incoming.removeAllListeners('data');
|
|
211
|
+
incoming.on('data', onData);
|
|
212
|
+
incoming.once('end', release);
|
|
213
|
+
incoming.once('error', release);
|
|
214
|
+
incoming.resume();
|
|
215
|
+
};
|
|
216
|
+
const toWebRequest = (incoming, host, signal) => {
|
|
217
|
+
const headers = new Headers();
|
|
218
|
+
let index = 0;
|
|
219
|
+
while (index < incoming.rawHeaders.length) {
|
|
220
|
+
headers.append(incoming.rawHeaders[index], incoming.rawHeaders[index + 1]);
|
|
221
|
+
index += 2;
|
|
222
|
+
}
|
|
223
|
+
const init = {
|
|
224
|
+
method: incoming.method,
|
|
225
|
+
headers,
|
|
226
|
+
body: incoming.method === 'GET' || incoming.method === 'HEAD' ? undefined : requestBody(incoming),
|
|
227
|
+
// A streamed body is sent half-duplex.
|
|
228
|
+
duplex: 'half',
|
|
229
|
+
signal,
|
|
230
|
+
};
|
|
231
|
+
return new Request(`http://${incoming.headers.host ?? host}${incoming.url ?? '/'}`, init);
|
|
232
|
+
};
|
|
233
|
+
/**
|
|
234
|
+
* Writes the response until it ends or `signal` aborts. A response nobody will read is cancelled
|
|
235
|
+
* unread, and one cut short ends with its connection, so it cannot look complete.
|
|
236
|
+
*/
|
|
237
|
+
const sendWebResponse = async (response, outgoing, signal) => {
|
|
238
|
+
if (signal.aborted) {
|
|
239
|
+
await response.body?.cancel();
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
for (const [name, value] of response.headers) {
|
|
243
|
+
if (name !== 'set-cookie')
|
|
244
|
+
outgoing.setHeader(name, value);
|
|
245
|
+
}
|
|
246
|
+
const cookies = response.headers.getSetCookie();
|
|
247
|
+
if (cookies.length > 0)
|
|
248
|
+
outgoing.setHeader('set-cookie', cookies);
|
|
249
|
+
outgoing.statusCode = response.status;
|
|
250
|
+
outgoing.statusMessage = response.statusText;
|
|
251
|
+
if (response.body === null) {
|
|
252
|
+
outgoing.end();
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const reader = response.body.getReader();
|
|
256
|
+
// Cancelling ends a pending read and releases the body's source; the abort also ends a drain wait.
|
|
257
|
+
const aborted = Promise.withResolvers();
|
|
258
|
+
const onAbort = () => {
|
|
259
|
+
aborted.resolve(undefined);
|
|
260
|
+
reader.cancel().catch(() => undefined);
|
|
261
|
+
};
|
|
262
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
263
|
+
try {
|
|
264
|
+
while (true) {
|
|
265
|
+
const item = await reader.read();
|
|
266
|
+
if (item.done)
|
|
267
|
+
break;
|
|
268
|
+
if (!outgoing.write(item.value)) {
|
|
269
|
+
const drained = Promise.withResolvers();
|
|
270
|
+
const onDrain = () => drained.resolve(undefined);
|
|
271
|
+
outgoing.once('drain', onDrain);
|
|
272
|
+
await Promise.race([drained.promise, aborted.promise]);
|
|
273
|
+
outgoing.off('drain', onDrain);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
finally {
|
|
278
|
+
signal.removeEventListener('abort', onAbort);
|
|
279
|
+
reader.releaseLock();
|
|
280
|
+
}
|
|
281
|
+
if (signal.aborted)
|
|
282
|
+
outgoing.destroy();
|
|
283
|
+
else
|
|
284
|
+
outgoing.end();
|
|
285
|
+
};
|
|
286
|
+
/** Waits until every promise settles or `milliseconds` pass. */
|
|
287
|
+
const settleWithin = async (pending, milliseconds) => {
|
|
288
|
+
const elapsed = Promise.withResolvers();
|
|
289
|
+
const timer = setTimeout(() => elapsed.resolve(undefined), milliseconds);
|
|
290
|
+
await Promise.race([Promise.allSettled(pending), elapsed.promise]);
|
|
291
|
+
clearTimeout(timer);
|
|
292
|
+
};
|
|
293
|
+
/**
|
|
294
|
+
* Stops accepting connections and stops responses already streaming: after the platform's drain
|
|
295
|
+
* window they are long-lived streams that would hold the process open. Requests still being handled
|
|
296
|
+
* get `grace`; then their handlers are interrupted and their connections closed.
|
|
297
|
+
*/
|
|
298
|
+
const closeServer = async (server, requests, responding, grace) => {
|
|
299
|
+
const closed = Promise.withResolvers();
|
|
300
|
+
server.close((error) => (error === undefined ? closed.resolve(undefined) : closed.reject(error)));
|
|
301
|
+
for (const exchange of responding)
|
|
302
|
+
exchange.response.abort();
|
|
303
|
+
await settleWithin(requests.values(), grace);
|
|
304
|
+
for (const exchange of requests.keys()) {
|
|
305
|
+
exchange.handler.abort();
|
|
306
|
+
exchange.response.abort();
|
|
307
|
+
}
|
|
308
|
+
// The shutdown deadline bounds this wait, like everything after the signal.
|
|
309
|
+
await Promise.allSettled(requests.values());
|
|
310
|
+
server.closeAllConnections();
|
|
311
|
+
await closed.promise;
|
|
312
|
+
};
|
|
313
|
+
const runServer = async (options, loader, reload) => {
|
|
314
|
+
const shutdownGrace = millisecondsFromEnvironment('TEMPER_WORKFLOW_SHUTDOWN_GRACE_MS', SHUTDOWN_GRACE_MS);
|
|
315
|
+
const shutdownDeadline = millisecondsFromEnvironment('TEMPER_WORKFLOW_SHUTDOWN_DEADLINE_MS', SHUTDOWN_DEADLINE_MS);
|
|
316
|
+
let current = await loader(options.entrypoint);
|
|
317
|
+
let reloadTimer;
|
|
318
|
+
let stopping = false;
|
|
319
|
+
let reloadWork = Promise.resolve();
|
|
320
|
+
const watcher = reload
|
|
321
|
+
? watch(dirname(options.entrypoint), { recursive: true }, () => {
|
|
322
|
+
clearTimeout(reloadTimer);
|
|
323
|
+
reloadTimer = setTimeout(() => {
|
|
324
|
+
reloadWork = reloadWork
|
|
325
|
+
.then(async () => {
|
|
326
|
+
const next = await loader(options.entrypoint);
|
|
327
|
+
if (stopping) {
|
|
328
|
+
await next.dispose();
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
const previous = current;
|
|
332
|
+
current = next;
|
|
333
|
+
await previous.dispose();
|
|
334
|
+
process.stderr.write('Workflow reloaded.\n');
|
|
335
|
+
})
|
|
336
|
+
.catch((error) => {
|
|
337
|
+
process.stderr.write(`Reload failed: ${String(error)}\n`);
|
|
338
|
+
});
|
|
339
|
+
}, 40);
|
|
340
|
+
})
|
|
341
|
+
: undefined;
|
|
342
|
+
const requests = new Map();
|
|
343
|
+
const responding = new Set();
|
|
344
|
+
const server = createServer((incoming, outgoing) => {
|
|
345
|
+
const exchange = { handler: new AbortController(), response: new AbortController() };
|
|
346
|
+
// A client that leaves early stops only its response. As behind the legacy host, the handler runs
|
|
347
|
+
// to completion, since an interrupted handler could stop between two side effects.
|
|
348
|
+
outgoing.once('close', () => {
|
|
349
|
+
if (!outgoing.writableFinished)
|
|
350
|
+
exchange.response.abort();
|
|
351
|
+
});
|
|
352
|
+
outgoing.once('finish', () => drainIncoming(incoming));
|
|
353
|
+
const module = current.module;
|
|
354
|
+
const served = (async () => {
|
|
355
|
+
// The deadline starts at arrival and the body streams in, so both bound the body read.
|
|
356
|
+
const response = await module.fetch(toWebRequest(incoming, options.host, exchange.handler.signal), invocationFor(module, 'http'));
|
|
357
|
+
responding.add(exchange);
|
|
358
|
+
await sendWebResponse(response, outgoing, exchange.response.signal);
|
|
359
|
+
})()
|
|
360
|
+
.catch((error) => {
|
|
361
|
+
process.stderr.write(`${String(error)}\n`);
|
|
362
|
+
// A response already under way cannot become an error response.
|
|
363
|
+
if (responding.has(exchange))
|
|
364
|
+
outgoing.destroy();
|
|
365
|
+
else if (!outgoing.destroyed) {
|
|
366
|
+
outgoing.statusCode = 500;
|
|
367
|
+
outgoing.end('Workflow request failed.');
|
|
368
|
+
}
|
|
369
|
+
})
|
|
370
|
+
.finally(() => {
|
|
371
|
+
requests.delete(exchange);
|
|
372
|
+
responding.delete(exchange);
|
|
373
|
+
});
|
|
374
|
+
requests.set(exchange, served);
|
|
375
|
+
});
|
|
376
|
+
const listening = Promise.withResolvers();
|
|
377
|
+
server.once('error', listening.reject);
|
|
378
|
+
server.listen(options.port, options.host, () => listening.resolve(undefined));
|
|
379
|
+
try {
|
|
380
|
+
await listening.promise;
|
|
381
|
+
const address = server.address();
|
|
382
|
+
if (address === null)
|
|
383
|
+
throw new Error('Workflow listener has no address.');
|
|
384
|
+
// SAFETY: this server listens on a numeric TCP port, never a Unix socket path.
|
|
385
|
+
const port = address.port;
|
|
386
|
+
process.stderr.write(`Workflow listening on http://${options.host}:${port}\n`);
|
|
387
|
+
const shutdown = Promise.withResolvers();
|
|
388
|
+
process.once('SIGINT', () => shutdown.resolve(undefined));
|
|
389
|
+
process.once('SIGTERM', () => shutdown.resolve(undefined));
|
|
390
|
+
await shutdown.promise;
|
|
391
|
+
// One deadline bounds the whole shutdown, reload work and disposal included. It never holds the
|
|
392
|
+
// process open itself, but ends it even while a finalizer's timer or socket still would.
|
|
393
|
+
setTimeout(() => {
|
|
394
|
+
process.stderr.write(`Workflow shutdown passed its ${shutdownDeadline} ms deadline; exiting.\n`);
|
|
395
|
+
process.exit(1);
|
|
396
|
+
}, shutdownDeadline).unref();
|
|
397
|
+
}
|
|
398
|
+
finally {
|
|
399
|
+
stopping = true;
|
|
400
|
+
watcher?.close();
|
|
401
|
+
clearTimeout(reloadTimer);
|
|
402
|
+
await reloadWork;
|
|
403
|
+
if (server.listening)
|
|
404
|
+
await closeServer(server, requests, responding, shutdownGrace);
|
|
405
|
+
await current.dispose();
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
const runDev = (options) => runServer(options, loadWorkflow, true);
|
|
409
|
+
const runServe = (options) => runServer(options, loadBuiltWorkflow, false);
|
|
410
|
+
const runInvoke = async (options) => {
|
|
411
|
+
const loaded = await loadWorkflow(options.entrypoint);
|
|
412
|
+
// stdout carries only the response body; log lines go to stderr.
|
|
413
|
+
const module = loaded.module.withPlatform({ writeLog: (line) => process.stderr.write(`${line}\n`) });
|
|
414
|
+
try {
|
|
415
|
+
const headers = new Headers();
|
|
416
|
+
if (options.body !== undefined)
|
|
417
|
+
headers.set('content-type', 'application/json');
|
|
418
|
+
const response = await module.fetch(new Request(`http://127.0.0.1${options.path}`, {
|
|
419
|
+
method: options.method,
|
|
420
|
+
headers,
|
|
421
|
+
body: options.method === 'GET' || options.method === 'HEAD' ? undefined : options.body,
|
|
422
|
+
}), invocationFor(module, 'manual'));
|
|
423
|
+
process.stdout.write(new Uint8Array(await response.arrayBuffer()));
|
|
424
|
+
if (!response.ok)
|
|
425
|
+
process.exitCode = 1;
|
|
426
|
+
}
|
|
427
|
+
finally {
|
|
428
|
+
await module.dispose();
|
|
429
|
+
await loaded.dispose();
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
export const runCli = async (arguments_) => {
|
|
433
|
+
const options = parseArguments(arguments_);
|
|
434
|
+
if (options.command === 'dev')
|
|
435
|
+
return runDev(options);
|
|
436
|
+
if (options.command === 'serve')
|
|
437
|
+
return runServe(options);
|
|
438
|
+
return runInvoke(options);
|
|
439
|
+
};
|
|
440
|
+
const isMain = import.meta.main ?? resolve(process.argv[1] ?? '') === fileURLToPath(import.meta.url);
|
|
441
|
+
if (isMain) {
|
|
442
|
+
runCli(process.argv.slice(2)).catch((error) => {
|
|
443
|
+
process.stderr.write(`${String(error)}\n`);
|
|
444
|
+
process.exitCode = 1;
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { AxiosError, LegacyAxiosErrorFormat, toAxiosError, toAxiosErrorJson } from './AxiosError.js';
|
|
2
|
+
export { type ChildRequest, childMessageId, type Correlation, currentCorrelation, withCorrelation, withFreshTrace, } from './Correlation.js';
|
|
3
|
+
export { type OutboundFetch } from './HttpClient.js';
|
|
4
|
+
export type { InvocationContext, InvocationTriggerKind } from './Contract/Invocation.js';
|
|
5
|
+
export { ManifestResource, ResponsePolicy, TriggerKind, TriggerMetadata, WorkflowManifest, WorkflowManifestEndpoint, } from './Contract/Manifest.js';
|
|
6
|
+
export { HttpApiResource } from './HttpApiResource.js';
|
|
7
|
+
export { Invocation } from './Invocation.js';
|
|
8
|
+
export { type SpanLinesOptions, type SpanOutcome, withSpanLines } from './LogContext.js';
|
|
9
|
+
export { type DeadlineExceededBody } from './Middleware.js';
|
|
10
|
+
export { makeManifest, RUNTIME_API_VERSION, SDK_VERSION } from './Manifest.js';
|
|
11
|
+
export { registerSecrets } from './Redaction.js';
|
|
12
|
+
export { type AnyDeclaration, type Declaration, Resource, type ResourceSelection, ResourceType, Variable, } from './Resource.js';
|
|
13
|
+
export { type ResourceReader } from './RuntimeResources.js';
|
|
14
|
+
export { InvalidResourceError, ResourceNotFoundError, ResourceNotSelectableError, ResourcesUnauthorizedError, ResourcesUnavailableError, } from './ResourcesErrors.js';
|
|
15
|
+
export { Trigger } from './Trigger.js';
|
|
16
|
+
export { workflow, type WorkflowModule, type WorkflowOptions, type WorkflowPlatform } from './Workflow.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrG,OAAO,EACL,KAAK,YAAY,EACjB,cAAc,EACd,KAAK,WAAW,EAChB,kBAAkB,EAClB,eAAe,EACf,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,QAAQ,EACR,KAAK,iBAAiB,EACtB,YAAY,EACZ,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { AxiosError, LegacyAxiosErrorFormat, toAxiosError, toAxiosErrorJson } from './AxiosError.js';
|
|
2
|
+
export { childMessageId, currentCorrelation, withCorrelation, withFreshTrace, } from './Correlation.js';
|
|
3
|
+
export {} from './HttpClient.js';
|
|
4
|
+
export { ManifestResource, ResponsePolicy, TriggerKind, TriggerMetadata, WorkflowManifest, WorkflowManifestEndpoint, } from './Contract/Manifest.js';
|
|
5
|
+
export { HttpApiResource } from './HttpApiResource.js';
|
|
6
|
+
export { Invocation } from './Invocation.js';
|
|
7
|
+
export { withSpanLines } from './LogContext.js';
|
|
8
|
+
export {} from './Middleware.js';
|
|
9
|
+
export { makeManifest, RUNTIME_API_VERSION, SDK_VERSION } from './Manifest.js';
|
|
10
|
+
export { registerSecrets } from './Redaction.js';
|
|
11
|
+
export { Resource, ResourceType, Variable, } from './Resource.js';
|
|
12
|
+
export {} from './RuntimeResources.js';
|
|
13
|
+
export { InvalidResourceError, ResourceNotFoundError, ResourceNotSelectableError, ResourcesUnauthorizedError, ResourcesUnavailableError, } from './ResourcesErrors.js';
|
|
14
|
+
export { Trigger } from './Trigger.js';
|
|
15
|
+
export { workflow } from './Workflow.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrG,OAAO,EAEL,cAAc,EAEd,kBAAkB,EAClB,eAAe,EACf,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAsB,MAAM,iBAAiB,CAAC;AAErD,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAA2C,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAA6B,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAGL,QAAQ,EAER,YAAY,EACZ,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAuB,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAoE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type Clock, type Schema } from 'effect';
|
|
2
|
+
import type { InvocationContext } from './Contract/Invocation.js';
|
|
3
|
+
import type { OutboundFetch } from './HttpClient.js';
|
|
4
|
+
import type { WorkflowModule, WorkflowPlatform } from './Workflow.js';
|
|
5
|
+
export interface InvokeOptions {
|
|
6
|
+
readonly request: Request;
|
|
7
|
+
readonly context: InvocationContext;
|
|
8
|
+
}
|
|
9
|
+
/** A complete invocation for tests. Override only the fields the test observes. */
|
|
10
|
+
export declare const testInvocation: (overrides?: Partial<InvocationContext>) => InvocationContext;
|
|
11
|
+
export declare const invoke: (module: WorkflowModule, options: InvokeOptions) => Promise<Response>;
|
|
12
|
+
/** What declared resources, variables, and resource types read in a test instead of the runtime API. */
|
|
13
|
+
export interface TestResources {
|
|
14
|
+
/** Resource key → its resolved value, secrets filled in, as the runtime API answers it. */
|
|
15
|
+
readonly values?: Readonly<Record<string, Schema.Json>>;
|
|
16
|
+
/** Variable key → its value. */
|
|
17
|
+
readonly variables?: Readonly<Record<string, string>>;
|
|
18
|
+
/** The key of the record a selection finds; `undefined` when no record matches. */
|
|
19
|
+
readonly select?: (resourceTypeKey: string, match: Readonly<Record<string, string>>) => string | undefined;
|
|
20
|
+
}
|
|
21
|
+
export interface TestPlatformOptions {
|
|
22
|
+
/** Values every `Config` read sees; the real environment is never read. */
|
|
23
|
+
readonly config?: Readonly<Record<string, string>>;
|
|
24
|
+
/** Answers the workflow's outbound requests; without it every outbound request fails. */
|
|
25
|
+
readonly fetch?: OutboundFetch;
|
|
26
|
+
/** Drives the invocation deadline, for example a `TestClock`. */
|
|
27
|
+
readonly clock?: Clock.Clock;
|
|
28
|
+
/**
|
|
29
|
+
* Answers declared resources; a read of anything absent fails with `ResourceNotFoundError`. Without it,
|
|
30
|
+
* declared resources read through the runtime API at `UNNBOUND_API_URL`, answered by `fetch`.
|
|
31
|
+
*/
|
|
32
|
+
readonly resources?: TestResources;
|
|
33
|
+
}
|
|
34
|
+
export interface TestPlatform {
|
|
35
|
+
/** Pass to `module.withPlatform(platform)`. */
|
|
36
|
+
readonly platform: WorkflowPlatform;
|
|
37
|
+
/** Every JSON log line the workflow wrote, in order. */
|
|
38
|
+
readonly logs: Array<string>;
|
|
39
|
+
}
|
|
40
|
+
/** Platform services isolated from the process: no environment, network, or stdout. */
|
|
41
|
+
export declare const testPlatform: (options?: TestPlatformOptions) => TestPlatform;
|
|
42
|
+
//# sourceMappingURL=testing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAoC,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;CACrC;AAED,mFAAmF;AACnF,eAAO,MAAM,cAAc,eAAe,OAAO,CAAC,iBAAiB,CAAC,KAAQ,iBAU1E,CAAC;AAEH,eAAO,MAAM,MAAM,WAAY,cAAc,WAAW,aAAa,KAAG,OAAO,CAAC,QAAQ,CACxC,CAAC;AAEjD,wGAAwG;AACxG,MAAM,WAAW,aAAa;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,gCAAgC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,mFAAmF;IACnF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;CAC5G;AAED,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,yFAAyF;IACzF,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC9B;AAuBD,uFAAuF;AACvF,eAAO,MAAM,YAAY,aAAa,mBAAmB,KAAQ,YAehE,CAAC"}
|
package/dist/testing.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ConfigProvider, Effect, Redacted } from 'effect';
|
|
2
|
+
import { ResourceNotFoundError } from './ResourcesErrors.js';
|
|
3
|
+
/** A complete invocation for tests. Override only the fields the test observes. */
|
|
4
|
+
export const testInvocation = (overrides = {}) => ({
|
|
5
|
+
workflowId: 'workflow-test',
|
|
6
|
+
deploymentId: 'deployment-test',
|
|
7
|
+
executionId: 'execution-test',
|
|
8
|
+
runId: 'run-test',
|
|
9
|
+
attempt: 1,
|
|
10
|
+
triggerKind: 'http',
|
|
11
|
+
deadline: Number.POSITIVE_INFINITY,
|
|
12
|
+
token: '',
|
|
13
|
+
...overrides,
|
|
14
|
+
});
|
|
15
|
+
export const invoke = (module, options) => module.fetch(options.request, options.context);
|
|
16
|
+
const missing = (target) => Effect.fail(new ResourceNotFoundError({ target, message: `The test platform has no ${target}.` }));
|
|
17
|
+
const testResources = (resources) => ({
|
|
18
|
+
variable: (key) => {
|
|
19
|
+
return resources.variables !== undefined && Object.hasOwn(resources.variables, key)
|
|
20
|
+
? Effect.succeed(Redacted.make(resources.variables[key]))
|
|
21
|
+
: missing(`variable ${key}`);
|
|
22
|
+
},
|
|
23
|
+
resolve: (key) => resources.values !== undefined && Object.hasOwn(resources.values, key)
|
|
24
|
+
? Effect.succeed(resources.values[key])
|
|
25
|
+
: missing(`resource ${key}`),
|
|
26
|
+
select: ({ resourceTypeKey, match }) => {
|
|
27
|
+
const key = resources.select?.(resourceTypeKey, match);
|
|
28
|
+
return key === undefined
|
|
29
|
+
? missing(`${resourceTypeKey} matching ${Object.keys(match).join(', ')}`)
|
|
30
|
+
: Effect.succeed(key);
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
/** Platform services isolated from the process: no environment, network, or stdout. */
|
|
34
|
+
export const testPlatform = (options = {}) => {
|
|
35
|
+
const logs = [];
|
|
36
|
+
return {
|
|
37
|
+
logs,
|
|
38
|
+
platform: {
|
|
39
|
+
writeLog: (line) => logs.push(line),
|
|
40
|
+
// An empty string is a value, as in the process environment the default provider reads.
|
|
41
|
+
configProvider: ConfigProvider.fromUnknown(options.config ?? {}, { preserveEmptyStrings: true }),
|
|
42
|
+
outboundFetch: options.fetch ??
|
|
43
|
+
((url, init) => Promise.reject(new Error(`Unexpected outbound request: ${init.method ?? 'GET'} ${url.href}`))),
|
|
44
|
+
clock: options.clock,
|
|
45
|
+
resources: options.resources === undefined ? undefined : testResources(options.resources),
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=testing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
|