@workflow/utils 5.0.0-beta.4 → 5.0.0-beta.6
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/dist/get-port-internals.d.ts +2 -0
- package/dist/get-port-internals.d.ts.map +1 -0
- package/dist/get-port-internals.js +31 -0
- package/dist/get-port.d.ts.map +1 -1
- package/dist/get-port.js +6 -22
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/workflow-routes.d.ts +16 -0
- package/dist/workflow-routes.d.ts.map +1 -0
- package/dist/workflow-routes.js +39 -0
- package/dist/world-target.d.ts +2 -0
- package/dist/world-target.d.ts.map +1 -1
- package/dist/world-target.js +19 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-port-internals.d.ts","sourceRoot":"","sources":["../src/get-port-internals.ts"],"names":[],"mappings":"AAQA,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,MAAM,EAAE,CA2BV"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
function parsePort(value, radix = 10) {
|
|
2
|
+
const port = parseInt(value, radix);
|
|
3
|
+
if (!Number.isNaN(port) && port >= 0 && port <= 65535) {
|
|
4
|
+
return port;
|
|
5
|
+
}
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
export function parseWindowsNetstatPortsForPid(stdout, pid) {
|
|
9
|
+
const ports = [];
|
|
10
|
+
const lines = stdout.trim().split('\n');
|
|
11
|
+
for (const line of lines) {
|
|
12
|
+
const parts = line.trim().split(/\s+/);
|
|
13
|
+
if (parts.length < 5 || parts[0]?.toUpperCase() !== 'TCP') {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
const [, localAddress, , state, rowPid] = parts;
|
|
17
|
+
if (state?.toUpperCase() !== 'LISTENING' || rowPid !== pid.toString()) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const colonIndex = localAddress.lastIndexOf(':');
|
|
21
|
+
if (colonIndex === -1) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const port = parsePort(localAddress.slice(colonIndex + 1));
|
|
25
|
+
if (port !== undefined) {
|
|
26
|
+
ports.push(port);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return ports;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXBvcnQtaW50ZXJuYWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dldC1wb3J0LWludGVybmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsS0FBSyxHQUFHLEVBQUU7SUFDMUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFVLDhCQUE4QixDQUM1QyxNQUFjLEVBQ2QsR0FBVztJQUVYLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXhDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMxRCxTQUFTO1FBQ1gsQ0FBQztRQUVELE1BQU0sQ0FBQyxFQUFFLFlBQVksRUFBRSxBQUFELEVBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNoRCxJQUFJLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxXQUFXLElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3RFLFNBQVM7UUFDWCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RCLFNBQVM7UUFDWCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHBhcnNlUG9ydCh2YWx1ZTogc3RyaW5nLCByYWRpeCA9IDEwKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHZhbHVlLCByYWRpeCk7XG4gIGlmICghTnVtYmVyLmlzTmFOKHBvcnQpICYmIHBvcnQgPj0gMCAmJiBwb3J0IDw9IDY1NTM1KSB7XG4gICAgcmV0dXJuIHBvcnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlV2luZG93c05ldHN0YXRQb3J0c0ZvclBpZChcbiAgc3Rkb3V0OiBzdHJpbmcsXG4gIHBpZDogbnVtYmVyXG4pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHBvcnRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBsaW5lcyA9IHN0ZG91dC50cmltKCkuc3BsaXQoJ1xcbicpO1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGNvbnN0IHBhcnRzID0gbGluZS50cmltKCkuc3BsaXQoL1xccysvKTtcbiAgICBpZiAocGFydHMubGVuZ3RoIDwgNSB8fCBwYXJ0c1swXT8udG9VcHBlckNhc2UoKSAhPT0gJ1RDUCcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IFssIGxvY2FsQWRkcmVzcywgLCBzdGF0ZSwgcm93UGlkXSA9IHBhcnRzO1xuICAgIGlmIChzdGF0ZT8udG9VcHBlckNhc2UoKSAhPT0gJ0xJU1RFTklORycgfHwgcm93UGlkICE9PSBwaWQudG9TdHJpbmcoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29sb25JbmRleCA9IGxvY2FsQWRkcmVzcy5sYXN0SW5kZXhPZignOicpO1xuICAgIGlmIChjb2xvbkluZGV4ID09PSAtMSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcG9ydCA9IHBhcnNlUG9ydChsb2NhbEFkZHJlc3Muc2xpY2UoY29sb25JbmRleCArIDEpKTtcbiAgICBpZiAocG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwb3J0cy5wdXNoKHBvcnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwb3J0cztcbn1cbiJdfQ==
|
package/dist/get-port.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-port.d.ts","sourceRoot":"","sources":["../src/get-port.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-port.d.ts","sourceRoot":"","sources":["../src/get-port.ts"],"names":[],"mappings":"AAqLA;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBrD;AAED;;;GAGG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG3D;AAMD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiCD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAqC7B"}
|
package/dist/get-port.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { execFile } from 'node:child_process';
|
|
2
2
|
import { readdir, readFile, readlink } from 'node:fs/promises';
|
|
3
3
|
import { promisify } from 'node:util';
|
|
4
|
+
import { parseWindowsNetstatPortsForPid } from './get-port-internals.js';
|
|
5
|
+
import { WORKFLOW_ROUTE_BASE } from './workflow-routes.js';
|
|
4
6
|
const execFileAsync = promisify(execFile);
|
|
5
7
|
/**
|
|
6
8
|
* Parses a port string and returns it if valid (0-65535), otherwise undefined.
|
|
@@ -150,27 +152,9 @@ async function getWindowsPorts(pid) {
|
|
|
150
152
|
try {
|
|
151
153
|
const { stdout } = await execFileAsync('cmd', [
|
|
152
154
|
'/c',
|
|
153
|
-
|
|
155
|
+
'netstat -ano -p tcp | findstr LISTENING',
|
|
154
156
|
]);
|
|
155
|
-
|
|
156
|
-
const trimmedOutput = stdout.trim();
|
|
157
|
-
if (trimmedOutput) {
|
|
158
|
-
const lines = trimmedOutput.split('\n');
|
|
159
|
-
for (const line of lines) {
|
|
160
|
-
// Extract port from the local address column
|
|
161
|
-
// Matches both IPv4 (e.g., "127.0.0.1:3000") and IPv6 bracket notation (e.g., "[::1]:3000")
|
|
162
|
-
const match = line
|
|
163
|
-
.trim()
|
|
164
|
-
.match(/^\s*TCP\s+(?:\[[\da-f:]+\]|[\d.]+):(\d+)\s+/i);
|
|
165
|
-
if (match) {
|
|
166
|
-
const port = parsePort(match[1]);
|
|
167
|
-
if (port !== undefined) {
|
|
168
|
-
ports.push(port);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
return ports;
|
|
157
|
+
return parseWindowsNetstatPortsForPid(stdout, pid);
|
|
174
158
|
}
|
|
175
159
|
catch {
|
|
176
160
|
return [];
|
|
@@ -211,7 +195,7 @@ export async function getPort() {
|
|
|
211
195
|
}
|
|
212
196
|
// Configuration for HTTP probing
|
|
213
197
|
const PROBE_TIMEOUT_MS = 500;
|
|
214
|
-
const PROBE_ENDPOINT =
|
|
198
|
+
const PROBE_ENDPOINT = `${WORKFLOW_ROUTE_BASE}/flow?__health`;
|
|
215
199
|
/**
|
|
216
200
|
* Probes a port to check if it's serving the workflow HTTP server.
|
|
217
201
|
* Uses HEAD request to minimize overhead.
|
|
@@ -274,4 +258,4 @@ export async function getWorkflowPort(options) {
|
|
|
274
258
|
}
|
|
275
259
|
return ports[0];
|
|
276
260
|
}
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2V0LXBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRTFDOztHQUVHO0FBQ0gsU0FBUyxTQUFTLENBQUMsS0FBYSxFQUFFLEtBQUssR0FBRyxFQUFFO0lBQzFDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDdEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELG1GQUFtRjtBQUNuRixnR0FBZ0c7QUFDaEcscUdBQXFHO0FBQ3JHLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBYSxFQUFFLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFMUM7OztHQUdHO0FBQ0gsS0FBSyxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLG9DQUFvQztJQUM5RCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsU0FBUyxVQUFV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QUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVELElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsNEJBQTRCO0lBQzVCLDhDQUE4QztJQUM5QyxrQ0FBa0M7SUFDbEMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxhQUFhLEVBQUUsQ0FBQztRQUMzQyxPQUFPLENBQUMsS0FBSyxDQUNYLCtEQUErRCxFQUMvRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ1QsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcmVhZGRpciwgcmVhZEZpbGUsIHJlYWRsaW5rIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICdub2RlOnV0aWwnO1xuXG5jb25zdCBleGVjRmlsZUFzeW5jID0gcHJvbWlzaWZ5KGV4ZWNGaWxlKTtcblxuLyoqXG4gKiBQYXJzZXMgYSBwb3J0IHN0cmluZyBhbmQgcmV0dXJucyBpdCBpZiB2YWxpZCAoMC02NTUzNSksIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUG9ydCh2YWx1ZTogc3RyaW5nLCByYWRpeCA9IDEwKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHZhbHVlLCByYWRpeCk7XG4gIGlmICghTnVtYmVyLmlzTmFOKHBvcnQpICYmIHBvcnQgPj0gMCAmJiBwb3J0IDw9IDY1NTM1KSB7XG4gICAgcmV0dXJuIHBvcnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gTk9URTogV2UgYnVpbGQgL3Byb2MgcGF0aHMgZHluYW1pY2FsbHkgdG8gcHJldmVudCBAdmVyY2VsL25mdCBmcm9tIHRyYWNpbmcgdGhlbS5cbi8vIE5GVCdzIHN0YXRpYyBhbmFseXNpcyB0cmllcyB0byBidW5kbGUgYW55IGZpbGUgcGF0aCBsaXRlcmFsIGl0IGZpbmRzIChlLmcuLCAnL3Byb2MvbmV0L3RjcCcpLlxuLy8gU2luY2UgL3Byb2MgaXMgYSB2aXJ0dWFsIExpbnV4IGZpbGVzeXN0ZW0sIHRoaXMgY2F1c2VzIGJ1aWxkIGZhaWx1cmVzIGluIEBzdmVsdGVqcy9hZGFwdGVyLXZlcmNlbC5cbmNvbnN0IGpvaW4gPSAoYXJyOiBzdHJpbmdbXSwgc2VwOiBzdHJpbmcpID0+IGFyci5qb2luKHNlcCk7XG5jb25zdCBQUk9DX1JPT1QgPSBqb2luKFsnJywgJ3Byb2MnXSwgJy8nKTtcblxuLyoqXG4gKiBHZXRzIEFMTCBsaXN0ZW5pbmcgcG9ydHMgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3Mgb24gTGludXggYnkgcmVhZGluZyAvcHJvYyBmaWxlc3lzdGVtLlxuICogUmV0dXJucyBwb3J0cyBpbiBvcmRlciBvZiBmaWxlIGRlc2NyaXB0b3IgKGRldGVybWluaXN0aWMgb3JkZXJpbmcpLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRMaW51eFBvcnRzKHBpZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICBjb25zdCBsaXN0ZW5TdGF0ZSA9ICcwQSc7IC8vIFRDUCBMSVNURU4gc3RhdGUgaW4gL3Byb2MvbmV0L3RjcFxuICBjb25zdCB0Y3BGaWxlcyA9IFtgJHtQUk9DX1JPT1R9L25ldC90Y3BgLCBgJHtQUk9DX1JPT1R9L25ldC90Y3A2YF0gYXMgY29uc3Q7XG5cbiAgLy8gU3RlcCAxOiBHZXQgc29ja2V0IGlub2RlcyBmcm9tIC9wcm9jLzxwaWQ+L2ZkLyBpbiBvcmRlclxuICAvLyBXZSBwcmVzZXJ2ZSBvcmRlciB0byBtYWludGFpbiBkZXRlcm1pbmlzdGljIGJlaGF2aW9yXG4gIC8vIFVzZSBib3RoIGFycmF5IChmb3Igb3JkZXIpIGFuZCBTZXQgKGZvciBPKDEpIGxvb2t1cClcbiAgY29uc3Qgc29ja2V0SW5vZGVzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzb2NrZXRJbm9kZXNTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgZmRQYXRoID0gYCR7UFJPQ19ST09UfS8ke3BpZH0vZmRgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZmRzID0gYXdhaXQgcmVhZGRpcihmZFBhdGgpO1xuICAgIC8vIFNvcnQgRkRzIG51bWVyaWNhbGx5IHRvIGVuc3VyZSBkZXRlcm1pbmlzdGljIG9yZGVyIChGRHMgYXJlIGFsd2F5cyBudW1lcmljIHN0cmluZ3MpXG4gICAgY29uc3Qgc29ydGVkRmRzID0gZmRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IG51bUEgPSBOdW1iZXIucGFyc2VJbnQoYSwgMTApO1xuICAgICAgY29uc3QgbnVtQiA9IE51bWJlci5wYXJzZUludChiLCAxMCk7XG4gICAgICByZXR1cm4gbnVtQSAtIG51bUI7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgc29ydGVkRmRzLm1hcChhc3luYyAoZmQpID0+IHtcbiAgICAgICAgY29uc3QgbGluayA9IGF3YWl0IHJlYWRsaW5rKGAke2ZkUGF0aH0vJHtmZH1gKTtcbiAgICAgICAgLy8gU29ja2V0IGxpbmtzIGxvb2sgbGlrZTogc29ja2V0OlsxMjM0NV1cbiAgICAgICAgY29uc3QgbWF0Y2ggPSBsaW5rLm1hdGNoKC9ec29ja2V0OlxcWyhcXGQrKVxcXSQvKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoPy5bMV0gPz8gbnVsbDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiByZXN1bHQudmFsdWUpIHtcbiAgICAgICAgc29ja2V0SW5vZGVzLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgc29ja2V0SW5vZGVzU2V0LmFkZChyZXN1bHQudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gUHJvY2VzcyBtaWdodCBub3QgZXhpc3Qgb3Igbm8gcGVybWlzc2lvblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmIChzb2NrZXRJbm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gU3RlcCAyOiBSZWFkIC9wcm9jL25ldC90Y3AgYW5kIC9wcm9jL25ldC90Y3A2IHRvIGZpbmQgbGlzdGVuaW5nIHNvY2tldHNcbiAgLy8gRm9ybWF0OiBzbCBsb2NhbF9hZGRyZXNzIHJlbV9hZGRyZXNzIHN0IC4uLiBpbm9kZVxuICAvLyBsb2NhbF9hZGRyZXNzIGlzIGhleCBJUDpwb3J0LCBzdD0wQSBtZWFucyBMSVNURU5cbiAgY29uc3QgaW5vZGVUb1BvcnQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gIGZvciAoY29uc3QgdGNwRmlsZSBvZiB0Y3BGaWxlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUodGNwRmlsZSwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJykuc2xpY2UoMSk7IC8vIFNraXAgaGVhZGVyXG5cbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICBpZiAoIWxpbmUudHJpbSgpKSBjb250aW51ZTsgLy8gU2tpcCBlbXB0eSBsaW5lc1xuXG4gICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS50cmltKCkuc3BsaXQoL1xccysvKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA8IDEwKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBsb2NhbEFkZHIgPSBwYXJ0c1sxXTsgLy8gZS5nLiwgXCIwMDAwMDAwMDowQkI4XCIgKDAuMC4wLjA6MzAwMClcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBwYXJ0c1szXTsgLy8gXCIwQVwiID0gTElTVEVOXG4gICAgICAgIGNvbnN0IGlub2RlID0gcGFydHNbOV07XG5cbiAgICAgICAgaWYgKCFsb2NhbEFkZHIgfHwgc3RhdGUgIT09IGxpc3RlblN0YXRlIHx8ICFpbm9kZSkgY29udGludWU7XG4gICAgICAgIGlmICghc29ja2V0SW5vZGVzU2V0Lmhhcyhpbm9kZSkpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIEV4dHJhY3QgcG9ydCBmcm9tIGhleCBmb3JtYXQgKGUuZy4sIFwiMEJCOFwiIC0+IDMwMDApXG4gICAgICAgIGNvbnN0IGNvbG9uSW5kZXggPSBsb2NhbEFkZHIuaW5kZXhPZignOicpO1xuICAgICAgICBpZiAoY29sb25JbmRleCA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHBvcnRIZXggPSBsb2NhbEFkZHIuc2xpY2UoY29sb25JbmRleCArIDEpO1xuICAgICAgICBpZiAoIXBvcnRIZXgpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZVBvcnQocG9ydEhleCwgMTYpO1xuICAgICAgICBpZiAocG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaW5vZGVUb1BvcnQuc2V0KGlub2RlLCBwb3J0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIC8vIFJldHVybiBhbGwgcG9ydHMgaW4gc29ja2V0IGlub2RlIG9yZGVyIChkZXRlcm1pbmlzdGljKVxuICBjb25zdCBwb3J0czogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBpbm9kZSBvZiBzb2NrZXRJbm9kZXMpIHtcbiAgICBjb25zdCBwb3J0ID0gaW5vZGVUb1BvcnQuZ2V0KGlub2RlKTtcbiAgICBpZiAocG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwb3J0cy5wdXNoKHBvcnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwb3J0cztcbn1cblxuLyoqXG4gKiBHZXRzIEFMTCBsaXN0ZW5pbmcgcG9ydHMgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3Mgb24gbWFjT1MgdXNpbmcgbHNvZi5cbiAqIFJldHVybnMgcG9ydHMgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyIGluIGxzb2Ygb3V0cHV0LlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXREYXJ3aW5Qb3J0cyhwaWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgZXhlY0ZpbGVBc3luYygnbHNvZicsIFtcbiAgICAgICctYScsXG4gICAgICAnLWknLFxuICAgICAgJy1QJyxcbiAgICAgICctbicsXG4gICAgICAnLXAnLFxuICAgICAgcGlkLnRvU3RyaW5nKCksXG4gICAgXSk7XG5cbiAgICBjb25zdCBwb3J0czogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCBsaW5lcyA9IHN0ZG91dC5zcGxpdCgnXFxuJyk7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGlmIChsaW5lLmluY2x1ZGVzKCdMSVNURU4nKSkge1xuICAgICAgICAvLyBDb2x1bW4gOSAoMC1pbmRleGVkOiA4KSBjb250YWlucyB0aGUgYWRkcmVzcyBsaWtlIFwiKjozMDAwXCIgb3IgXCIxMjcuMC4wLjE6MzAwMFwiXG4gICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS50cmltKCkuc3BsaXQoL1xccysvKTtcbiAgICAgICAgY29uc3QgYWRkciA9IHBhcnRzWzhdO1xuICAgICAgICBpZiAoYWRkcikge1xuICAgICAgICAgIGNvbnN0IGNvbG9uSW5kZXggPSBhZGRyLmxhc3RJbmRleE9mKCc6Jyk7XG4gICAgICAgICAgaWYgKGNvbG9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBwb3J0ID0gcGFyc2VQb3J0KGFkZHIuc2xpY2UoY29sb25JbmRleCArIDEpKTtcbiAgICAgICAgICAgIGlmIChwb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcG9ydHMucHVzaChwb3J0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcG9ydHM7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgQUxMIGxpc3RlbmluZyBwb3J0cyBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcyBvbiBXaW5kb3dzIHVzaW5nIG5ldHN0YXQuXG4gKiBSZXR1cm5zIHBvcnRzIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbiBuZXRzdGF0IG91dHB1dC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V2luZG93c1BvcnRzKHBpZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjRmlsZUFzeW5jKCdjbWQnLCBbXG4gICAgICAnL2MnLFxuICAgICAgYG5ldHN0YXQgLWFubyB8IGZpbmRzdHIgJHtwaWR9IHwgZmluZHN0ciBMSVNURU5JTkdgLFxuICAgIF0pO1xuXG4gICAgY29uc3QgcG9ydHM6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgdHJpbW1lZE91dHB1dCA9IHN0ZG91dC50cmltKCk7XG5cbiAgICBpZiAodHJpbW1lZE91dHB1dCkge1xuICAgICAgY29uc3QgbGluZXMgPSB0cmltbWVkT3V0cHV0LnNwbGl0KCdcXG4nKTtcbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAvLyBFeHRyYWN0IHBvcnQgZnJvbSB0aGUgbG9jYWwgYWRkcmVzcyBjb2x1bW5cbiAgICAgICAgLy8gTWF0Y2hlcyBib3RoIElQdjQgKGUuZy4sIFwiMTI3LjAuMC4xOjMwMDBcIikgYW5kIElQdjYgYnJhY2tldCBub3RhdGlvbiAoZS5nLiwgXCJbOjoxXTozMDAwXCIpXG4gICAgICAgIGNvbnN0IG1hdGNoID0gbGluZVxuICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAubWF0Y2goL15cXHMqVENQXFxzKyg/OlxcW1tcXGRhLWY6XStcXF18W1xcZC5dKyk6KFxcZCspXFxzKy9pKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlUG9ydChtYXRjaFsxXSk7XG4gICAgICAgICAgaWYgKHBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcG9ydHMucHVzaChwb3J0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcG9ydHM7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgYWxsIGxpc3RlbmluZyBwb3J0cyBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcy5cbiAqIEByZXR1cm5zIEFycmF5IG9mIHBvcnQgbnVtYmVycyB0aGUgcHJvY2VzcyBpcyBsaXN0ZW5pbmcgb24sIGluIGRldGVybWluaXN0aWMgb3JkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBbGxQb3J0cygpOiBQcm9taXNlPG51bWJlcltdPiB7XG4gIGNvbnN0IHsgcGlkLCBwbGF0Zm9ybSB9ID0gcHJvY2VzcztcblxuICB0cnkge1xuICAgIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICAgIGNhc2UgJ2xpbnV4JzpcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldExpbnV4UG9ydHMocGlkKTtcbiAgICAgIGNhc2UgJ2Rhcndpbic6XG4gICAgICAgIHJldHVybiBhd2FpdCBnZXREYXJ3aW5Qb3J0cyhwaWQpO1xuICAgICAgY2FzZSAnd2luMzInOlxuICAgICAgICByZXR1cm4gYXdhaXQgZ2V0V2luZG93c1BvcnRzKHBpZCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2dldEFsbFBvcnRzXSBEZXRlY3Rpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcG9ydCBudW1iZXIgdGhhdCB0aGUgcHJvY2VzcyBpcyBsaXN0ZW5pbmcgb24uXG4gKiBAcmV0dXJucyBUaGUgcG9ydCBudW1iZXIgdGhhdCB0aGUgcHJvY2VzcyBpcyBsaXN0ZW5pbmcgb24sIG9yIHVuZGVmaW5lZCBpZiB0aGUgcHJvY2VzcyBpcyBub3QgbGlzdGVuaW5nIG9uIGFueSBwb3J0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UG9ydCgpOiBQcm9taXNlPG51bWJlciB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBwb3J0cyA9IGF3YWl0IGdldEFsbFBvcnRzKCk7XG4gIHJldHVybiBwb3J0c1swXTtcbn1cblxuLy8gQ29uZmlndXJhdGlvbiBmb3IgSFRUUCBwcm9iaW5nXG5jb25zdCBQUk9CRV9USU1FT1VUX01TID0gNTAwO1xuY29uc3QgUFJPQkVfRU5EUE9JTlQgPSAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3c/X19oZWFsdGgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2JlT3B0aW9ucyB7XG4gIGVuZHBvaW50Pzogc3RyaW5nO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFByb2JlcyBhIHBvcnQgdG8gY2hlY2sgaWYgaXQncyBzZXJ2aW5nIHRoZSB3b3JrZmxvdyBIVFRQIHNlcnZlci5cbiAqIFVzZXMgSEVBRCByZXF1ZXN0IHRvIG1pbmltaXplIG92ZXJoZWFkLlxuICpcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHBvcnQgcmVzcG9uZHMgd2l0aCBhIDIwMCBzdGF0dXMgZnJvbSB0aGUgaGVhbHRoIGNoZWNrIGVuZHBvaW50XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2JlUG9ydChcbiAgcG9ydDogbnVtYmVyLFxuICBvcHRpb25zOiBQcm9iZU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgZW5kcG9pbnQgPSBQUk9CRV9FTkRQT0lOVCwgdGltZW91dCA9IFBST0JFX1RJTUVPVVRfTVMgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIHRpbWVvdXQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cDovL2xvY2FsaG9zdDoke3BvcnR9JHtlbmRwb2ludH1gLCB7XG4gICAgICBtZXRob2Q6ICdIRUFEJyxcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBUaGUgd29ya2Zsb3cgaGVhbHRoIGVuZHBvaW50IHJldHVybnMgMjAwIGZvciBoZWFsdGh5XG4gICAgcmV0dXJuIHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwO1xuICB9IGNhdGNoIHtcbiAgICAvLyBDb25uZWN0aW9uIHJlZnVzZWQsIHRpbWVvdXQsIG9yIG90aGVyIGVycm9yXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgd29ya2Zsb3cgc2VydmVyIHBvcnQgYnkgcHJvYmluZyBhbGwgbGlzdGVuaW5nIHBvcnRzLlxuICogVGhpcyBpcyBtb3JlIHJlbGlhYmxlIHRoYW4gZ2V0UG9ydCgpIHdoZW4gb3RoZXIgc2VydmljZXMgKGxpa2UgTm9kZS5qcyBpbnNwZWN0b3IpXG4gKiBtYXkgYWxzbyBiZSBsaXN0ZW5pbmcgb24gcG9ydHMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciBwcm9iaW5nXG4gKiBAcmV0dXJucyBUaGUgcG9ydCBudW1iZXIgb2YgdGhlIHdvcmtmbG93IHNlcnZlciwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V29ya2Zsb3dQb3J0KFxuICBvcHRpb25zPzogUHJvYmVPcHRpb25zXG4pOiBQcm9taXNlPG51bWJlciB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBwb3J0cyA9IGF3YWl0IGdldEFsbFBvcnRzKCk7XG5cbiAgaWYgKHBvcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAocG9ydHMubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gT25seSBvbmUgcG9ydCwgbm8gbmVlZCB0byBwcm9iZVxuICAgIHJldHVybiBwb3J0c1swXTtcbiAgfVxuXG4gIC8vIFByb2JlIGFsbCBwb3J0cyBpbiBwYXJhbGxlbFxuICBjb25zdCBwcm9iZVJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBwb3J0cy5tYXAoYXN5bmMgKHBvcnQpID0+ICh7XG4gICAgICBwb3J0LFxuICAgICAgaXNXb3JrZmxvdzogYXdhaXQgcHJvYmVQb3J0KHBvcnQsIG9wdGlvbnMpLFxuICAgIH0pKVxuICApO1xuXG4gIC8vIFJldHVybiBmaXJzdCBwb3J0IHRoYXQgcmVzcG9uZGVkIGFzIHdvcmtmbG93IHNlcnZlclxuICBjb25zdCB3b3JrZmxvd1BvcnQgPSBwcm9iZVJlc3VsdHMuZmluZCgocikgPT4gci5pc1dvcmtmbG93KTtcbiAgaWYgKHdvcmtmbG93UG9ydCkge1xuICAgIHJldHVybiB3b3JrZmxvd1BvcnQucG9ydDtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIGZpcnN0IHBvcnQgaWYgcHJvYmluZyBkb2Vzbid0IGlkZW50aWZ5IHdvcmtmbG93IHNlcnZlclxuICAvLyBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmU6XG4gIC8vIC0gU2VydmVyIGhhc24ndCBzdGFydGVkIHdvcmtmbG93IHJvdXRlcyB5ZXRcbiAgLy8gLSBOZXR3b3JrIGlzc3VlcyBkdXJpbmcgcHJvYmluZ1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgJ1tnZXRXb3JrZmxvd1BvcnRdIFByb2JpbmcgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZmlyc3QgcG9ydDonLFxuICAgICAgcG9ydHNbMF1cbiAgICApO1xuICB9XG4gIHJldHVybiBwb3J0c1swXTtcbn1cbiJdfQ==
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2V0LXBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFM0QsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRTFDOztHQUVHO0FBQ0gsU0FBUyxTQUFTLENBQUMsS0FBYSxFQUFFLEtBQUssR0FBRyxFQUFFO0lBQzFDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDdEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELG1GQUFtRjtBQUNuRixnR0FBZ0c7QUFDaEcscUdBQXFHO0FBQ3JHLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBYSxFQUFFLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFMUM7OztHQUdHO0FBQ0gsS0FBSyxVQUFVLGFBQWEsQ0FB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ZXNzJztcbmltcG9ydCB7IHJlYWRkaXIsIHJlYWRGaWxlLCByZWFkbGluayB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB7IHBhcnNlV2luZG93c05ldHN0YXRQb3J0c0ZvclBpZCB9IGZyb20gJy4vZ2V0LXBvcnQtaW50ZXJuYWxzLmpzJztcbmltcG9ydCB7IFdPUktGTE9XX1JPVVRFX0JBU0UgfSBmcm9tICcuL3dvcmtmbG93LXJvdXRlcy5qcyc7XG5cbmNvbnN0IGV4ZWNGaWxlQXN5bmMgPSBwcm9taXNpZnkoZXhlY0ZpbGUpO1xuXG4vKipcbiAqIFBhcnNlcyBhIHBvcnQgc3RyaW5nIGFuZCByZXR1cm5zIGl0IGlmIHZhbGlkICgwLTY1NTM1KSwgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQb3J0KHZhbHVlOiBzdHJpbmcsIHJhZGl4ID0gMTApOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwb3J0ID0gcGFyc2VJbnQodmFsdWUsIHJhZGl4KTtcbiAgaWYgKCFOdW1iZXIuaXNOYU4ocG9ydCkgJiYgcG9ydCA+PSAwICYmIHBvcnQgPD0gNjU1MzUpIHtcbiAgICByZXR1cm4gcG9ydDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBOT1RFOiBXZSBidWlsZCAvcHJvYyBwYXRocyBkeW5hbWljYWxseSB0byBwcmV2ZW50IEB2ZXJjZWwvbmZ0IGZyb20gdHJhY2luZyB0aGVtLlxuLy8gTkZUJ3Mgc3RhdGljIGFuYWx5c2lzIHRyaWVzIHRvIGJ1bmRsZSBhbnkgZmlsZSBwYXRoIGxpdGVyYWwgaXQgZmluZHMgKGUuZy4sICcvcHJvYy9uZXQvdGNwJykuXG4vLyBTaW5jZSAvcHJvYyBpcyBhIHZpcnR1YWwgTGludXggZmlsZXN5c3RlbSwgdGhpcyBjYXVzZXMgYnVpbGQgZmFpbHVyZXMgaW4gQHN2ZWx0ZWpzL2FkYXB0ZXItdmVyY2VsLlxuY29uc3Qgam9pbiA9IChhcnI6IHN0cmluZ1tdLCBzZXA6IHN0cmluZykgPT4gYXJyLmpvaW4oc2VwKTtcbmNvbnN0IFBST0NfUk9PVCA9IGpvaW4oWycnLCAncHJvYyddLCAnLycpO1xuXG4vKipcbiAqIEdldHMgQUxMIGxpc3RlbmluZyBwb3J0cyBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcyBvbiBMaW51eCBieSByZWFkaW5nIC9wcm9jIGZpbGVzeXN0ZW0uXG4gKiBSZXR1cm5zIHBvcnRzIGluIG9yZGVyIG9mIGZpbGUgZGVzY3JpcHRvciAoZGV0ZXJtaW5pc3RpYyBvcmRlcmluZykuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldExpbnV4UG9ydHMocGlkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcltdPiB7XG4gIGNvbnN0IGxpc3RlblN0YXRlID0gJzBBJzsgLy8gVENQIExJU1RFTiBzdGF0ZSBpbiAvcHJvYy9uZXQvdGNwXG4gIGNvbnN0IHRjcEZpbGVzID0gW2Ake1BST0NfUk9PVH0vbmV0L3RjcGAsIGAke1BST0NfUk9PVH0vbmV0L3RjcDZgXSBhcyBjb25zdDtcblxuICAvLyBTdGVwIDE6IEdldCBzb2NrZXQgaW5vZGVzIGZyb20gL3Byb2MvPHBpZD4vZmQvIGluIG9yZGVyXG4gIC8vIFdlIHByZXNlcnZlIG9yZGVyIHRvIG1haW50YWluIGRldGVybWluaXN0aWMgYmVoYXZpb3JcbiAgLy8gVXNlIGJvdGggYXJyYXkgKGZvciBvcmRlcikgYW5kIFNldCAoZm9yIE8oMSkgbG9va3VwKVxuICBjb25zdCBzb2NrZXRJbm9kZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNvY2tldElub2Rlc1NldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBmZFBhdGggPSBgJHtQUk9DX1JPT1R9LyR7cGlkfS9mZGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmZHMgPSBhd2FpdCByZWFkZGlyKGZkUGF0aCk7XG4gICAgLy8gU29ydCBGRHMgbnVtZXJpY2FsbHkgdG8gZW5zdXJlIGRldGVybWluaXN0aWMgb3JkZXIgKEZEcyBhcmUgYWx3YXlzIG51bWVyaWMgc3RyaW5ncylcbiAgICBjb25zdCBzb3J0ZWRGZHMgPSBmZHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgbnVtQSA9IE51bWJlci5wYXJzZUludChhLCAxMCk7XG4gICAgICBjb25zdCBudW1CID0gTnVtYmVyLnBhcnNlSW50KGIsIDEwKTtcbiAgICAgIHJldHVybiBudW1BIC0gbnVtQjtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBzb3J0ZWRGZHMubWFwKGFzeW5jIChmZCkgPT4ge1xuICAgICAgICBjb25zdCBsaW5rID0gYXdhaXQgcmVhZGxpbmsoYCR7ZmRQYXRofS8ke2ZkfWApO1xuICAgICAgICAvLyBTb2NrZXQgbGlua3MgbG9vayBsaWtlOiBzb2NrZXQ6WzEyMzQ1XVxuICAgICAgICBjb25zdCBtYXRjaCA9IGxpbmsubWF0Y2goL15zb2NrZXQ6XFxbKFxcZCspXFxdJC8pO1xuICAgICAgICByZXR1cm4gbWF0Y2g/LlsxXSA/PyBudWxsO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHJlc3VsdC52YWx1ZSkge1xuICAgICAgICBzb2NrZXRJbm9kZXMucHVzaChyZXN1bHQudmFsdWUpO1xuICAgICAgICBzb2NrZXRJbm9kZXNTZXQuYWRkKHJlc3VsdC52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBQcm9jZXNzIG1pZ2h0IG5vdCBleGlzdCBvciBubyBwZXJtaXNzaW9uXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKHNvY2tldElub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBTdGVwIDI6IFJlYWQgL3Byb2MvbmV0L3RjcCBhbmQgL3Byb2MvbmV0L3RjcDYgdG8gZmluZCBsaXN0ZW5pbmcgc29ja2V0c1xuICAvLyBGb3JtYXQ6IHNsIGxvY2FsX2FkZHJlc3MgcmVtX2FkZHJlc3Mgc3QgLi4uIGlub2RlXG4gIC8vIGxvY2FsX2FkZHJlc3MgaXMgaGV4IElQOnBvcnQsIHN0PTBBIG1lYW5zIExJU1RFTlxuICBjb25zdCBpbm9kZVRvUG9ydCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgZm9yIChjb25zdCB0Y3BGaWxlIG9mIHRjcEZpbGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZSh0Y3BGaWxlLCAndXRmOCcpO1xuICAgICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KCdcXG4nKS5zbGljZSgxKTsgLy8gU2tpcCBoZWFkZXJcblxuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGlmICghbGluZS50cmltKCkpIGNvbnRpbnVlOyAvLyBTa2lwIGVtcHR5IGxpbmVzXG5cbiAgICAgICAgY29uc3QgcGFydHMgPSBsaW5lLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoIDwgMTApIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGxvY2FsQWRkciA9IHBhcnRzWzFdOyAvLyBlLmcuLCBcIjAwMDAwMDAwOjBCQjhcIiAoMC4wLjAuMDozMDAwKVxuICAgICAgICBjb25zdCBzdGF0ZSA9IHBhcnRzWzNdOyAvLyBcIjBBXCIgPSBMSVNURU5cbiAgICAgICAgY29uc3QgaW5vZGUgPSBwYXJ0c1s5XTtcblxuICAgICAgICBpZiAoIWxvY2FsQWRkciB8fCBzdGF0ZSAhPT0gbGlzdGVuU3RhdGUgfHwgIWlub2RlKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFzb2NrZXRJbm9kZXNTZXQuaGFzKGlub2RlKSkgY29udGludWU7XG5cbiAgICAgICAgLy8gRXh0cmFjdCBwb3J0IGZyb20gaGV4IGZvcm1hdCAoZS5nLiwgXCIwQkI4XCIgLT4gMzAwMClcbiAgICAgICAgY29uc3QgY29sb25JbmRleCA9IGxvY2FsQWRkci5pbmRleE9mKCc6Jyk7XG4gICAgICAgIGlmIChjb2xvbkluZGV4ID09PSAtMSkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcG9ydEhleCA9IGxvY2FsQWRkci5zbGljZShjb2xvbkluZGV4ICsgMSk7XG4gICAgICAgIGlmICghcG9ydEhleCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlUG9ydChwb3J0SGV4LCAxNik7XG4gICAgICAgIGlmIChwb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbm9kZVRvUG9ydC5zZXQoaW5vZGUsIHBvcnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgLy8gUmV0dXJuIGFsbCBwb3J0cyBpbiBzb2NrZXQgaW5vZGUgb3JkZXIgKGRldGVybWluaXN0aWMpXG4gIGNvbnN0IHBvcnRzOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGlub2RlIG9mIHNvY2tldElub2Rlcykge1xuICAgIGNvbnN0IHBvcnQgPSBpbm9kZVRvUG9ydC5nZXQoaW5vZGUpO1xuICAgIGlmIChwb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBvcnRzLnB1c2gocG9ydCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBvcnRzO1xufVxuXG4vKipcbiAqIEdldHMgQUxMIGxpc3RlbmluZyBwb3J0cyBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcyBvbiBtYWNPUyB1c2luZyBsc29mLlxuICogUmV0dXJucyBwb3J0cyBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW4gbHNvZiBvdXRwdXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldERhcndpblBvcnRzKHBpZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjRmlsZUFzeW5jKCdsc29mJywgW1xuICAgICAgJy1hJyxcbiAgICAgICctaScsXG4gICAgICAnLVAnLFxuICAgICAgJy1uJyxcbiAgICAgICctcCcsXG4gICAgICBwaWQudG9TdHJpbmcoKSxcbiAgICBdKTtcblxuICAgIGNvbnN0IHBvcnRzOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IGxpbmVzID0gc3Rkb3V0LnNwbGl0KCdcXG4nKTtcblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgaWYgKGxpbmUuaW5jbHVkZXMoJ0xJU1RFTicpKSB7XG4gICAgICAgIC8vIENvbHVtbiA5ICgwLWluZGV4ZWQ6IDgpIGNvbnRhaW5zIHRoZSBhZGRyZXNzIGxpa2UgXCIqOjMwMDBcIiBvciBcIjEyNy4wLjAuMTozMDAwXCJcbiAgICAgICAgY29uc3QgcGFydHMgPSBsaW5lLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICAgICAgICBjb25zdCBhZGRyID0gcGFydHNbOF07XG4gICAgICAgIGlmIChhZGRyKSB7XG4gICAgICAgICAgY29uc3QgY29sb25JbmRleCA9IGFkZHIubGFzdEluZGV4T2YoJzonKTtcbiAgICAgICAgICBpZiAoY29sb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZVBvcnQoYWRkci5zbGljZShjb2xvbkluZGV4ICsgMSkpO1xuICAgICAgICAgICAgaWYgKHBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBwb3J0cy5wdXNoKHBvcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb3J0cztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyBBTEwgbGlzdGVuaW5nIHBvcnRzIGZvciB0aGUgY3VycmVudCBwcm9jZXNzIG9uIFdpbmRvd3MgdXNpbmcgbmV0c3RhdC5cbiAqIFJldHVybnMgcG9ydHMgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyIGluIG5ldHN0YXQgb3V0cHV0LlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRXaW5kb3dzUG9ydHMocGlkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcltdPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNGaWxlQXN5bmMoJ2NtZCcsIFtcbiAgICAgICcvYycsXG4gICAgICAnbmV0c3RhdCAtYW5vIC1wIHRjcCB8IGZpbmRzdHIgTElTVEVOSU5HJyxcbiAgICBdKTtcblxuICAgIHJldHVybiBwYXJzZVdpbmRvd3NOZXRzdGF0UG9ydHNGb3JQaWQoc3Rkb3V0LCBwaWQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIGFsbCBsaXN0ZW5pbmcgcG9ydHMgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MuXG4gKiBAcmV0dXJucyBBcnJheSBvZiBwb3J0IG51bWJlcnMgdGhlIHByb2Nlc3MgaXMgbGlzdGVuaW5nIG9uLCBpbiBkZXRlcm1pbmlzdGljIG9yZGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsUG9ydHMoKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICBjb25zdCB7IHBpZCwgcGxhdGZvcm0gfSA9IHByb2Nlc3M7XG5cbiAgdHJ5IHtcbiAgICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgICBjYXNlICdsaW51eCc6XG4gICAgICAgIHJldHVybiBhd2FpdCBnZXRMaW51eFBvcnRzKHBpZCk7XG4gICAgICBjYXNlICdkYXJ3aW4nOlxuICAgICAgICByZXR1cm4gYXdhaXQgZ2V0RGFyd2luUG9ydHMocGlkKTtcbiAgICAgIGNhc2UgJ3dpbjMyJzpcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldFdpbmRvd3NQb3J0cyhwaWQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tnZXRBbGxQb3J0c10gRGV0ZWN0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIHBvcnQgbnVtYmVyIHRoYXQgdGhlIHByb2Nlc3MgaXMgbGlzdGVuaW5nIG9uLlxuICogQHJldHVybnMgVGhlIHBvcnQgbnVtYmVyIHRoYXQgdGhlIHByb2Nlc3MgaXMgbGlzdGVuaW5nIG9uLCBvciB1bmRlZmluZWQgaWYgdGhlIHByb2Nlc3MgaXMgbm90IGxpc3RlbmluZyBvbiBhbnkgcG9ydC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBvcnQoKTogUHJvbWlzZTxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcG9ydHMgPSBhd2FpdCBnZXRBbGxQb3J0cygpO1xuICByZXR1cm4gcG9ydHNbMF07XG59XG5cbi8vIENvbmZpZ3VyYXRpb24gZm9yIEhUVFAgcHJvYmluZ1xuY29uc3QgUFJPQkVfVElNRU9VVF9NUyA9IDUwMDtcbmNvbnN0IFBST0JFX0VORFBPSU5UID0gYCR7V09SS0ZMT1dfUk9VVEVfQkFTRX0vZmxvdz9fX2hlYWx0aGA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvYmVPcHRpb25zIHtcbiAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJvYmVzIGEgcG9ydCB0byBjaGVjayBpZiBpdCdzIHNlcnZpbmcgdGhlIHdvcmtmbG93IEhUVFAgc2VydmVyLlxuICogVXNlcyBIRUFEIHJlcXVlc3QgdG8gbWluaW1pemUgb3ZlcmhlYWQuXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgcG9ydCByZXNwb25kcyB3aXRoIGEgMjAwIHN0YXR1cyBmcm9tIHRoZSBoZWFsdGggY2hlY2sgZW5kcG9pbnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvYmVQb3J0KFxuICBwb3J0OiBudW1iZXIsXG4gIG9wdGlvbnM6IFByb2JlT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyBlbmRwb2ludCA9IFBST0JFX0VORFBPSU5ULCB0aW1lb3V0ID0gUFJPQkVfVElNRU9VVF9NUyB9ID0gb3B0aW9ucztcblxuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgdGltZW91dCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwOi8vbG9jYWxob3N0OiR7cG9ydH0ke2VuZHBvaW50fWAsIHtcbiAgICAgIG1ldGhvZDogJ0hFQUQnLFxuICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIC8vIFRoZSB3b3JrZmxvdyBoZWFsdGggZW5kcG9pbnQgcmV0dXJucyAyMDAgZm9yIGhlYWx0aHlcbiAgICByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzID09PSAyMDA7XG4gIH0gY2F0Y2gge1xuICAgIC8vIENvbm5lY3Rpb24gcmVmdXNlZCwgdGltZW91dCwgb3Igb3RoZXIgZXJyb3JcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB3b3JrZmxvdyBzZXJ2ZXIgcG9ydCBieSBwcm9iaW5nIGFsbCBsaXN0ZW5pbmcgcG9ydHMuXG4gKiBUaGlzIGlzIG1vcmUgcmVsaWFibGUgdGhhbiBnZXRQb3J0KCkgd2hlbiBvdGhlciBzZXJ2aWNlcyAobGlrZSBOb2RlLmpzIGluc3BlY3RvcilcbiAqIG1heSBhbHNvIGJlIGxpc3RlbmluZyBvbiBwb3J0cy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHByb2JpbmdcbiAqIEByZXR1cm5zIFRoZSBwb3J0IG51bWJlciBvZiB0aGUgd29ya2Zsb3cgc2VydmVyLCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXb3JrZmxvd1BvcnQoXG4gIG9wdGlvbnM/OiBQcm9iZU9wdGlvbnNcbik6IFByb21pc2U8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHBvcnRzID0gYXdhaXQgZ2V0QWxsUG9ydHMoKTtcblxuICBpZiAocG9ydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChwb3J0cy5sZW5ndGggPT09IDEpIHtcbiAgICAvLyBPbmx5IG9uZSBwb3J0LCBubyBuZWVkIHRvIHByb2JlXG4gICAgcmV0dXJuIHBvcnRzWzBdO1xuICB9XG5cbiAgLy8gUHJvYmUgYWxsIHBvcnRzIGluIHBhcmFsbGVsXG4gIGNvbnN0IHByb2JlUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHBvcnRzLm1hcChhc3luYyAocG9ydCkgPT4gKHtcbiAgICAgIHBvcnQsXG4gICAgICBpc1dvcmtmbG93OiBhd2FpdCBwcm9iZVBvcnQocG9ydCwgb3B0aW9ucyksXG4gICAgfSkpXG4gICk7XG5cbiAgLy8gUmV0dXJuIGZpcnN0IHBvcnQgdGhhdCByZXNwb25kZWQgYXMgd29ya2Zsb3cgc2VydmVyXG4gIGNvbnN0IHdvcmtmbG93UG9ydCA9IHByb2JlUmVzdWx0cy5maW5kKChyKSA9PiByLmlzV29ya2Zsb3cpO1xuICBpZiAod29ya2Zsb3dQb3J0KSB7XG4gICAgcmV0dXJuIHdvcmtmbG93UG9ydC5wb3J0O1xuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gZmlyc3QgcG9ydCBpZiBwcm9iaW5nIGRvZXNuJ3QgaWRlbnRpZnkgd29ya2Zsb3cgc2VydmVyXG4gIC8vIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZTpcbiAgLy8gLSBTZXJ2ZXIgaGFzbid0IHN0YXJ0ZWQgd29ya2Zsb3cgcm91dGVzIHlldFxuICAvLyAtIE5ldHdvcmsgaXNzdWVzIGR1cmluZyBwcm9iaW5nXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgIGNvbnNvbGUuZGVidWcoXG4gICAgICAnW2dldFdvcmtmbG93UG9ydF0gUHJvYmluZyBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBmaXJzdCBwb3J0OicsXG4gICAgICBwb3J0c1swXVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHBvcnRzWzBdO1xufVxuIl19
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { pluralize } from './pluralize.js';
|
|
2
1
|
export { formatStepName, formatWorkflowName, parseClassName, parseStepName, parseWorkflowName, stepDisplayName, workflowDisplayName, } from './parse-name.js';
|
|
2
|
+
export { pluralize } from './pluralize.js';
|
|
3
3
|
export { once, type PromiseWithResolvers, withResolvers } from './promise.js';
|
|
4
4
|
export { parseDurationToDate } from './time.js';
|
|
5
|
-
export {
|
|
5
|
+
export { createWorkflowBaseUrl, createWorkflowHealthEndpoint, createWorkflowUrl, setWorkflowBasePath, type WorkflowUrlRoute, WORKFLOW_ROUTE_BASE, } from './workflow-routes.js';
|
|
6
|
+
export { getWorldImport, isVercelWorldTarget, normalizeWorkflowTargetWorldImport, resolveWorkflowTargetWorld, usesVercelWorld, } from './world-target.js';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,KAAK,oBAAoB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,kCAAkC,EAClC,0BAA0B,EAC1B,eAAe,GAChB,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { pluralize } from './pluralize.js';
|
|
2
1
|
export { formatStepName, formatWorkflowName, parseClassName, parseStepName, parseWorkflowName, stepDisplayName, workflowDisplayName, } from './parse-name.js';
|
|
2
|
+
export { pluralize } from './pluralize.js';
|
|
3
3
|
export { once, withResolvers } from './promise.js';
|
|
4
4
|
export { parseDurationToDate } from './time.js';
|
|
5
|
-
export {
|
|
6
|
-
|
|
5
|
+
export { createWorkflowBaseUrl, createWorkflowHealthEndpoint, createWorkflowUrl, setWorkflowBasePath, WORKFLOW_ROUTE_BASE, } from './workflow-routes.js';
|
|
6
|
+
export { getWorldImport, isVercelWorldTarget, normalizeWorkflowTargetWorldImport, resolveWorkflowTargetWorld, usesVercelWorld, } from './world-target.js';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLG1CQUFtQixHQUNwQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUE2QixhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hELE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsNEJBQTRCLEVBQzVCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFFbkIsbUJBQW1CLEdBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQixlQUFlLEdBQ2hCLE1BQU0sbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBmb3JtYXRTdGVwTmFtZSxcbiAgZm9ybWF0V29ya2Zsb3dOYW1lLFxuICBwYXJzZUNsYXNzTmFtZSxcbiAgcGFyc2VTdGVwTmFtZSxcbiAgcGFyc2VXb3JrZmxvd05hbWUsXG4gIHN0ZXBEaXNwbGF5TmFtZSxcbiAgd29ya2Zsb3dEaXNwbGF5TmFtZSxcbn0gZnJvbSAnLi9wYXJzZS1uYW1lLmpzJztcbmV4cG9ydCB7IHBsdXJhbGl6ZSB9IGZyb20gJy4vcGx1cmFsaXplLmpzJztcbmV4cG9ydCB7IG9uY2UsIHR5cGUgUHJvbWlzZVdpdGhSZXNvbHZlcnMsIHdpdGhSZXNvbHZlcnMgfSBmcm9tICcuL3Byb21pc2UuanMnO1xuZXhwb3J0IHsgcGFyc2VEdXJhdGlvblRvRGF0ZSB9IGZyb20gJy4vdGltZS5qcyc7XG5leHBvcnQge1xuICBjcmVhdGVXb3JrZmxvd0Jhc2VVcmwsXG4gIGNyZWF0ZVdvcmtmbG93SGVhbHRoRW5kcG9pbnQsXG4gIGNyZWF0ZVdvcmtmbG93VXJsLFxuICBzZXRXb3JrZmxvd0Jhc2VQYXRoLFxuICB0eXBlIFdvcmtmbG93VXJsUm91dGUsXG4gIFdPUktGTE9XX1JPVVRFX0JBU0UsXG59IGZyb20gJy4vd29ya2Zsb3ctcm91dGVzLmpzJztcbmV4cG9ydCB7XG4gIGdldFdvcmxkSW1wb3J0LFxuICBpc1ZlcmNlbFdvcmxkVGFyZ2V0LFxuICBub3JtYWxpemVXb3JrZmxvd1RhcmdldFdvcmxkSW1wb3J0LFxuICByZXNvbHZlV29ya2Zsb3dUYXJnZXRXb3JsZCxcbiAgdXNlc1ZlcmNlbFdvcmxkLFxufSBmcm9tICcuL3dvcmxkLXRhcmdldC5qcyc7XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const WORKFLOW_ROUTE_BASE = "/.well-known/workflow/v1";
|
|
2
|
+
export declare function setWorkflowBasePath(basePath: string | undefined): void;
|
|
3
|
+
export declare function createWorkflowBaseUrl(origin: string): string;
|
|
4
|
+
export type WorkflowUrlRoute = {
|
|
5
|
+
type: 'flow' | 'step';
|
|
6
|
+
} | {
|
|
7
|
+
type: 'manifest';
|
|
8
|
+
} | {
|
|
9
|
+
type: 'webhook';
|
|
10
|
+
token: string;
|
|
11
|
+
} | {
|
|
12
|
+
type: 'health';
|
|
13
|
+
};
|
|
14
|
+
export declare function createWorkflowUrl(baseUrl: string, route: WorkflowUrlRoute): string;
|
|
15
|
+
export declare function createWorkflowHealthEndpoint(): string;
|
|
16
|
+
//# sourceMappingURL=workflow-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-routes.d.ts","sourceRoot":"","sources":["../src/workflow-routes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,6BAA6B,CAAC;AAK9D,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEtE;AAMD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEvB,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,gBAAgB,GACtB,MAAM,CAMR;AAkBD,wBAAgB,4BAA4B,IAAI,MAAM,CAErD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const WORKFLOW_ROUTE_BASE = '/.well-known/workflow/v1';
|
|
2
|
+
const BASE_PATH_SYMBOL = Symbol.for('@workflow/core/basePath');
|
|
3
|
+
const globalConfig = globalThis;
|
|
4
|
+
export function setWorkflowBasePath(basePath) {
|
|
5
|
+
globalConfig[BASE_PATH_SYMBOL] = basePath ?? '';
|
|
6
|
+
}
|
|
7
|
+
function getWorkflowBasePath() {
|
|
8
|
+
return globalConfig[BASE_PATH_SYMBOL] ?? '';
|
|
9
|
+
}
|
|
10
|
+
export function createWorkflowBaseUrl(origin) {
|
|
11
|
+
new URL(origin);
|
|
12
|
+
return `${origin.replace(/[?#].*$/, '').replace(/\/+$/, '')}${getWorkflowBasePath()}`;
|
|
13
|
+
}
|
|
14
|
+
export function createWorkflowUrl(baseUrl, route) {
|
|
15
|
+
const url = new URL(baseUrl);
|
|
16
|
+
url.pathname = `${url.pathname.replace(/\/+$/, '')}${WORKFLOW_ROUTE_BASE}/${getWorkflowRouteEndpoint(route)}`;
|
|
17
|
+
url.search = route.type === 'health' ? '__health' : '';
|
|
18
|
+
url.hash = '';
|
|
19
|
+
return url.toString();
|
|
20
|
+
}
|
|
21
|
+
function getWorkflowRouteEndpoint(route) {
|
|
22
|
+
switch (route.type) {
|
|
23
|
+
case 'flow':
|
|
24
|
+
case 'health':
|
|
25
|
+
return 'flow';
|
|
26
|
+
case 'step':
|
|
27
|
+
return 'step';
|
|
28
|
+
case 'manifest':
|
|
29
|
+
return 'manifest.json';
|
|
30
|
+
case 'webhook':
|
|
31
|
+
return `webhook/${encodeURIComponent(route.token)}`;
|
|
32
|
+
}
|
|
33
|
+
const exhaustive = route;
|
|
34
|
+
return exhaustive;
|
|
35
|
+
}
|
|
36
|
+
export function createWorkflowHealthEndpoint() {
|
|
37
|
+
return `${getWorkflowBasePath()}${WORKFLOW_ROUTE_BASE}/flow?__health`;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dvcmtmbG93LXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRywwQkFBMEIsQ0FBQztBQUM5RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUMvRCxNQUFNLFlBQVksR0FBRyxVQUNlLENBQUM7QUFFckMsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFFBQTRCO0lBQzlELFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDbEQsQ0FBQztBQUVELFNBQVMsbUJBQW1CO0lBQzFCLE9BQU8sWUFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO0FBQzlDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsTUFBYztJQUNsRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7QUFDeEYsQ0FBQztBQVFELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsT0FBZSxFQUNmLEtBQXVCO0lBRXZCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsbUJBQW1CLElBQUksd0JBQXdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUM5RyxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN2RCxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLEtBQXVCO0lBQ3ZELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxRQUFRO1lBQ1gsT0FBTyxNQUFNLENBQUM7UUFDaEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxNQUFNLENBQUM7UUFDaEIsS0FBSyxVQUFVO1lBQ2IsT0FBTyxlQUFlLENBQUM7UUFDekIsS0FBSyxTQUFTO1lBQ1osT0FBTyxXQUFXLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBVSxLQUFLLENBQUM7SUFDaEMsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEI7SUFDMUMsT0FBTyxHQUFHLG1CQUFtQixFQUFFLEdBQUcsbUJBQW1CLGdCQUFnQixDQUFDO0FBQ3hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgV09SS0ZMT1dfUk9VVEVfQkFTRSA9ICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEnO1xuY29uc3QgQkFTRV9QQVRIX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ0B3b3JrZmxvdy9jb3JlL2Jhc2VQYXRoJyk7XG5jb25zdCBnbG9iYWxDb25maWcgPSBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICZcbiAgUmVjb3JkPHN5bWJvbCwgc3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldFdvcmtmbG93QmFzZVBhdGgoYmFzZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBnbG9iYWxDb25maWdbQkFTRV9QQVRIX1NZTUJPTF0gPSBiYXNlUGF0aCA/PyAnJztcbn1cblxuZnVuY3Rpb24gZ2V0V29ya2Zsb3dCYXNlUGF0aCgpOiBzdHJpbmcge1xuICByZXR1cm4gZ2xvYmFsQ29uZmlnW0JBU0VfUEFUSF9TWU1CT0xdID8/ICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ya2Zsb3dCYXNlVXJsKG9yaWdpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgbmV3IFVSTChvcmlnaW4pO1xuICByZXR1cm4gYCR7b3JpZ2luLnJlcGxhY2UoL1s/I10uKiQvLCAnJykucmVwbGFjZSgvXFwvKyQvLCAnJyl9JHtnZXRXb3JrZmxvd0Jhc2VQYXRoKCl9YDtcbn1cblxuZXhwb3J0IHR5cGUgV29ya2Zsb3dVcmxSb3V0ZSA9XG4gIHwgeyB0eXBlOiAnZmxvdycgfCAnc3RlcCcgfVxuICB8IHsgdHlwZTogJ21hbmlmZXN0JyB9XG4gIHwgeyB0eXBlOiAnd2ViaG9vayc7IHRva2VuOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ2hlYWx0aCcgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtmbG93VXJsKFxuICBiYXNlVXJsOiBzdHJpbmcsXG4gIHJvdXRlOiBXb3JrZmxvd1VybFJvdXRlXG4pOiBzdHJpbmcge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGJhc2VVcmwpO1xuICB1cmwucGF0aG5hbWUgPSBgJHt1cmwucGF0aG5hbWUucmVwbGFjZSgvXFwvKyQvLCAnJyl9JHtXT1JLRkxPV19ST1VURV9CQVNFfS8ke2dldFdvcmtmbG93Um91dGVFbmRwb2ludChyb3V0ZSl9YDtcbiAgdXJsLnNlYXJjaCA9IHJvdXRlLnR5cGUgPT09ICdoZWFsdGgnID8gJ19faGVhbHRoJyA6ICcnO1xuICB1cmwuaGFzaCA9ICcnO1xuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGdldFdvcmtmbG93Um91dGVFbmRwb2ludChyb3V0ZTogV29ya2Zsb3dVcmxSb3V0ZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAocm91dGUudHlwZSkge1xuICAgIGNhc2UgJ2Zsb3cnOlxuICAgIGNhc2UgJ2hlYWx0aCc6XG4gICAgICByZXR1cm4gJ2Zsb3cnO1xuICAgIGNhc2UgJ3N0ZXAnOlxuICAgICAgcmV0dXJuICdzdGVwJztcbiAgICBjYXNlICdtYW5pZmVzdCc6XG4gICAgICByZXR1cm4gJ21hbmlmZXN0Lmpzb24nO1xuICAgIGNhc2UgJ3dlYmhvb2snOlxuICAgICAgcmV0dXJuIGB3ZWJob29rLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJvdXRlLnRva2VuKX1gO1xuICB9XG4gIGNvbnN0IGV4aGF1c3RpdmU6IG5ldmVyID0gcm91dGU7XG4gIHJldHVybiBleGhhdXN0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ya2Zsb3dIZWFsdGhFbmRwb2ludCgpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Z2V0V29ya2Zsb3dCYXNlUGF0aCgpfSR7V09SS0ZMT1dfUk9VVEVfQkFTRX0vZmxvdz9fX2hlYWx0aGA7XG59XG4iXX0=
|
package/dist/world-target.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export type WorkflowEnvironment = Record<string, string | undefined>;
|
|
2
|
+
export declare function normalizeWorkflowTargetWorldImport(targetWorld: string | undefined): string | undefined;
|
|
2
3
|
export declare function resolveWorkflowTargetWorld(env?: WorkflowEnvironment): string;
|
|
4
|
+
export declare function getWorldImport(env?: WorkflowEnvironment): string;
|
|
3
5
|
export declare function isVercelWorldTarget(targetWorld: string): boolean;
|
|
4
6
|
export declare function usesVercelWorld(env?: WorkflowEnvironment): boolean;
|
|
5
7
|
//# sourceMappingURL=world-target.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world-target.d.ts","sourceRoot":"","sources":["../src/world-target.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAErE,wBAAgB,0BAA0B,CACxC,GAAG,GAAE,mBAAiC,GACrC,MAAM,CAOR;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,eAAe,CAC7B,GAAG,GAAE,mBAAiC,GACrC,OAAO,CAET"}
|
|
1
|
+
{"version":3,"file":"world-target.d.ts","sourceRoot":"","sources":["../src/world-target.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAErE,wBAAgB,kCAAkC,CAChD,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,MAAM,GAAG,SAAS,CAWpB;AAED,wBAAgB,0BAA0B,CACxC,GAAG,GAAE,mBAAiC,GACrC,MAAM,CAOR;AAED,wBAAgB,cAAc,CAAC,GAAG,GAAE,mBAAiC,GAAG,MAAM,CAO7E;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,eAAe,CAC7B,GAAG,GAAE,mBAAiC,GACrC,OAAO,CAET"}
|
package/dist/world-target.js
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
export function normalizeWorkflowTargetWorldImport(targetWorld) {
|
|
2
|
+
if (!targetWorld) {
|
|
3
|
+
return undefined;
|
|
4
|
+
}
|
|
5
|
+
if (targetWorld === 'local') {
|
|
6
|
+
return '@workflow/world-local';
|
|
7
|
+
}
|
|
8
|
+
if (targetWorld === 'vercel') {
|
|
9
|
+
return '@workflow/world-vercel';
|
|
10
|
+
}
|
|
11
|
+
return targetWorld;
|
|
12
|
+
}
|
|
1
13
|
export function resolveWorkflowTargetWorld(env = process.env) {
|
|
2
14
|
const configuredWorld = env.WORKFLOW_TARGET_WORLD;
|
|
3
15
|
if (configuredWorld) {
|
|
@@ -5,10 +17,16 @@ export function resolveWorkflowTargetWorld(env = process.env) {
|
|
|
5
17
|
}
|
|
6
18
|
return env.VERCEL_DEPLOYMENT_ID ? 'vercel' : 'local';
|
|
7
19
|
}
|
|
20
|
+
export function getWorldImport(env = process.env) {
|
|
21
|
+
return (normalizeWorkflowTargetWorldImport(env.WORKFLOW_TARGET_WORLD) ??
|
|
22
|
+
(env.VERCEL_DEPLOYMENT_ID
|
|
23
|
+
? '@workflow/world-vercel'
|
|
24
|
+
: '@workflow/world-local'));
|
|
25
|
+
}
|
|
8
26
|
export function isVercelWorldTarget(targetWorld) {
|
|
9
27
|
return targetWorld === 'vercel' || targetWorld === '@workflow/world-vercel';
|
|
10
28
|
}
|
|
11
29
|
export function usesVercelWorld(env = process.env) {
|
|
12
30
|
return isVercelWorldTarget(resolveWorkflowTargetWorld(env));
|
|
13
31
|
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQtdGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dvcmxkLXRhcmdldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsa0NBQWtDLENBQ2hELFdBQStCO0lBRS9CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxXQUFXLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDNUIsT0FBTyx1QkFBdUIsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBSSxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsT0FBTyx3QkFBd0IsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsTUFBMkIsT0FBTyxDQUFDLEdBQUc7SUFFdEMsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLHFCQUFxQixDQUFDO0lBQ2xELElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEIsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUEyQixPQUFPLENBQUMsR0FBRztJQUNuRSxPQUFPLENBQ0wsa0NBQWtDLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO1FBQzdELENBQUMsR0FBRyxDQUFDLG9CQUFvQjtZQUN2QixDQUFDLENBQUMsd0JBQXdCO1lBQzFCLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUM3QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxXQUFtQjtJQUNyRCxPQUFPLFdBQVcsS0FBSyxRQUFRLElBQUksV0FBVyxLQUFLLHdCQUF3QixDQUFDO0FBQzlFLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixNQUEyQixPQUFPLENBQUMsR0FBRztJQUV0QyxPQUFPLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFdvcmtmbG93RW52aXJvbm1lbnQgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplV29ya2Zsb3dUYXJnZXRXb3JsZEltcG9ydChcbiAgdGFyZ2V0V29ybGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0YXJnZXRXb3JsZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHRhcmdldFdvcmxkID09PSAnbG9jYWwnKSB7XG4gICAgcmV0dXJuICdAd29ya2Zsb3cvd29ybGQtbG9jYWwnO1xuICB9XG4gIGlmICh0YXJnZXRXb3JsZCA9PT0gJ3ZlcmNlbCcpIHtcbiAgICByZXR1cm4gJ0B3b3JrZmxvdy93b3JsZC12ZXJjZWwnO1xuICB9XG4gIHJldHVybiB0YXJnZXRXb3JsZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXb3JrZmxvd1RhcmdldFdvcmxkKFxuICBlbnY6IFdvcmtmbG93RW52aXJvbm1lbnQgPSBwcm9jZXNzLmVudlxuKTogc3RyaW5nIHtcbiAgY29uc3QgY29uZmlndXJlZFdvcmxkID0gZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRDtcbiAgaWYgKGNvbmZpZ3VyZWRXb3JsZCkge1xuICAgIHJldHVybiBjb25maWd1cmVkV29ybGQ7XG4gIH1cblxuICByZXR1cm4gZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEID8gJ3ZlcmNlbCcgOiAnbG9jYWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ybGRJbXBvcnQoZW52OiBXb3JrZmxvd0Vudmlyb25tZW50ID0gcHJvY2Vzcy5lbnYpOiBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIG5vcm1hbGl6ZVdvcmtmbG93VGFyZ2V0V29ybGRJbXBvcnQoZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCkgPz9cbiAgICAoZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEXG4gICAgICA/ICdAd29ya2Zsb3cvd29ybGQtdmVyY2VsJ1xuICAgICAgOiAnQHdvcmtmbG93L3dvcmxkLWxvY2FsJylcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmVyY2VsV29ybGRUYXJnZXQodGFyZ2V0V29ybGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFyZ2V0V29ybGQgPT09ICd2ZXJjZWwnIHx8IHRhcmdldFdvcmxkID09PSAnQHdvcmtmbG93L3dvcmxkLXZlcmNlbCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VzVmVyY2VsV29ybGQoXG4gIGVudjogV29ya2Zsb3dFbnZpcm9ubWVudCA9IHByb2Nlc3MuZW52XG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVmVyY2VsV29ybGRUYXJnZXQocmVzb2x2ZVdvcmtmbG93VGFyZ2V0V29ybGQoZW52KSk7XG59XG4iXX0=
|