@workflow/core 5.0.0-beta.51 → 5.0.0-beta.53

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/types.d.ts CHANGED
@@ -1,5 +1,27 @@
1
1
  export declare function getErrorName(v: unknown): string;
2
2
  export declare function getErrorStack(v: unknown): string;
3
+ /**
4
+ * Summarize the `cause` chain hanging off a thrown value, one link per line,
5
+ * outermost first. The value itself is skipped: whatever logs this already
6
+ * states it, in the message or in the stack header.
7
+ *
8
+ * `util.inspect` renders `[cause]` when Node prints an error, but the
9
+ * structured logs read `name` / `message` / `stack` and drop everything else
10
+ * — exactly the wrong half for errors that arrive pre-wrapped.
11
+ * `TypeError: fetch failed` is the canonical one: undici's wrapper says
12
+ * nothing on its own and its stack is all `node:internal/` frames, so the DNS,
13
+ * socket or TLS failure that actually happened is only readable one or two
14
+ * `cause` hops down. Same for the world layer's own wrapping, where the
15
+ * request that failed is on the wrapper and the reason it failed is on the
16
+ * cause.
17
+ *
18
+ * `AggregateError` also gets its `errors` summarized, because a
19
+ * happy-eyeballs connect reports every attempt there and leaves the
20
+ * `AggregateError` itself blank.
21
+ *
22
+ * Returns `''` when there is no cause, so callers can drop the field.
23
+ */
24
+ export declare function formatErrorCauseChain(value: unknown): string;
3
25
  export declare function isAbortError(value: unknown): value is {
4
26
  name: 'AbortError';
5
27
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAK/C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKhD;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAYlE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAUhE;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AA2CD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,sBAAsB,CAAC,CAmBjC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAK/C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKhD;AAuBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA4B5D;AAgBD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAYlE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAUhE;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AA2CD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,sBAAsB,CAAC,CAmBjC"}
package/dist/types.js CHANGED
@@ -12,6 +12,78 @@ export function getErrorStack(v) {
12
12
  }
13
13
  return '';
14
14
  }
15
+ /** Upper bound on the links {@link formatErrorCauseChain} renders. */
16
+ const MAX_CAUSE_LINKS = 4;
17
+ /** One `Name: message (CODE)` line for a link in a cause chain. */
18
+ function describeErrorLink(value) {
19
+ if (typeof value !== 'object' || value === null) {
20
+ return String(value);
21
+ }
22
+ const { name, message, code } = value;
23
+ const label = typeof name === 'string' && name ? name : 'Error';
24
+ const text = typeof message === 'string' && message ? `${label}: ${message}` : label;
25
+ return typeof code === 'string' && code && !text.includes(code)
26
+ ? `${text} (${code})`
27
+ : text;
28
+ }
29
+ /**
30
+ * Summarize the `cause` chain hanging off a thrown value, one link per line,
31
+ * outermost first. The value itself is skipped: whatever logs this already
32
+ * states it, in the message or in the stack header.
33
+ *
34
+ * `util.inspect` renders `[cause]` when Node prints an error, but the
35
+ * structured logs read `name` / `message` / `stack` and drop everything else
36
+ * — exactly the wrong half for errors that arrive pre-wrapped.
37
+ * `TypeError: fetch failed` is the canonical one: undici's wrapper says
38
+ * nothing on its own and its stack is all `node:internal/` frames, so the DNS,
39
+ * socket or TLS failure that actually happened is only readable one or two
40
+ * `cause` hops down. Same for the world layer's own wrapping, where the
41
+ * request that failed is on the wrapper and the reason it failed is on the
42
+ * cause.
43
+ *
44
+ * `AggregateError` also gets its `errors` summarized, because a
45
+ * happy-eyeballs connect reports every attempt there and leaves the
46
+ * `AggregateError` itself blank.
47
+ *
48
+ * Returns `''` when there is no cause, so callers can drop the field.
49
+ */
50
+ export function formatErrorCauseChain(value) {
51
+ const lines = [];
52
+ const seen = new Set();
53
+ try {
54
+ for (let current = causeOf(value); current != null && lines.length <= MAX_CAUSE_LINKS; current = causeOf(current)) {
55
+ if (typeof current !== 'object') {
56
+ lines.push(String(current));
57
+ break;
58
+ }
59
+ // A cause chain can loop (`err.cause = err`) or repeat a shared error.
60
+ if (seen.has(current))
61
+ break;
62
+ seen.add(current);
63
+ lines.push(describeErrorLink(current), ...aggregatedLinks(current));
64
+ }
65
+ }
66
+ catch {
67
+ // Causes can contain getters or proxies that throw. Logging must not
68
+ // replace the original error or prevent the run_failed event from being written.
69
+ lines.push('[unavailable cause]');
70
+ }
71
+ return lines.length > MAX_CAUSE_LINKS
72
+ ? [...lines.slice(0, MAX_CAUSE_LINKS), '…'].join('\n')
73
+ : lines.join('\n');
74
+ }
75
+ function causeOf(value) {
76
+ return typeof value === 'object' && value !== null
77
+ ? value.cause
78
+ : undefined;
79
+ }
80
+ /** The attempts an `AggregateError` collected, if this link is one. */
81
+ function aggregatedLinks(value) {
82
+ const errors = value.errors;
83
+ return Array.isArray(errors)
84
+ ? errors.slice(0, MAX_CAUSE_LINKS).map(describeErrorLink)
85
+ : [];
86
+ }
15
87
  export function isAbortError(value) {
16
88
  return (typeof value === 'object' &&
17
89
  value !== null &&
@@ -94,4 +166,4 @@ export async function normalizeUnknownError(value) {
94
166
  }
95
167
  return normalizeSyncError(value);
96
168
  }
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUMsTUFBTSxVQUFVLFlBQVksQ0FBQyxDQUFVO0lBQ3JDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBVTtJQUN0QyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixLQUFjO0lBRWQsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxLQUFLLElBQUk7UUFDZCxNQUFNLElBQUksS0FBSztRQUNmLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWTtRQUMzQixTQUFTLElBQUksS0FBSztRQUNsQixPQUFPLEtBQUssQ0FBQyxPQUFPLEtBQUssUUFBUTtRQUNqQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUztZQUN6QixPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQ25DLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEtBQWM7SUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsWUFBWSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFRRCxTQUFTLFVBQVUsQ0FBQyxLQUFjO0lBQ2hDLE9BQU8sQ0FDTCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLEtBQUssS0FBSyxJQUFJO1FBQ2QsTUFBTSxJQUFJLEtBQUs7UUFDZixPQUFRLEtBQTRCLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FDekQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLENBQVU7SUFDcEMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTztZQUNMLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtZQUNaLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztZQUNsQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1NBQ3JCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0wsSUFBSSxFQUFFLE9BQU87WUFDYixPQUFPLEVBQUUsQ0FBQztZQUNWLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPO1lBQ0wsSUFBSSxFQUFFLE9BQU87WUFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU87WUFDTCxJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLEtBQWM7SUFFZCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDO1lBQzdCLE1BQU0sVUFBVSxHQUFHLE1BQU0scUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsT0FBTztnQkFDTCxHQUFHLFVBQVU7Z0JBQ2IsT0FBTyxFQUFFLHNCQUFzQixVQUFVLENBQUMsT0FBTyxFQUFFO2FBQ3BELENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxTQUFTLEVBQUUsQ0FBQztZQUNuQixNQUFNLFVBQVUsR0FBRyxNQUFNLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFELE9BQU87Z0JBQ0wsR0FBRyxVQUFVO2dCQUNiLE9BQU8sRUFBRSxzQkFBc0IsVUFBVSxDQUFDLE9BQU8sRUFBRTthQUNwRCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlcyB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBGYXRhbEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvck5hbWUodjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlcy5pc05hdGl2ZUVycm9yKHYpKSB7XG4gICAgcmV0dXJuIHYubmFtZTtcbiAgfVxuICByZXR1cm4gJ0Vycm9yJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yU3RhY2sodjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlcy5pc05hdGl2ZUVycm9yKHYpKSB7XG4gICAgcmV0dXJuIHYuc3RhY2sgPz8gJyc7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBYm9ydEVycm9yKFxuICB2YWx1ZTogdW5rbm93blxuKTogdmFsdWUgaXMgeyBuYW1lOiAnQWJvcnRFcnJvcic7IG1lc3NhZ2U6IHN0cmluZzsgc3RhY2s/OiBzdHJpbmcgfSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgJ25hbWUnIGluIHZhbHVlICYmXG4gICAgdmFsdWUubmFtZSA9PT0gJ0Fib3J0RXJyb3InICYmXG4gICAgJ21lc3NhZ2UnIGluIHZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmXG4gICAgKCEoJ3N0YWNrJyBpbiB2YWx1ZSkgfHxcbiAgICAgIHZhbHVlLnN0YWNrID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiB2YWx1ZS5zdGFjayA9PT0gJ3N0cmluZycpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9tb3RlQWJvcnRFcnJvclRvRmF0YWwodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKCFpc0Fib3J0RXJyb3IodmFsdWUpIHx8IEZhdGFsRXJyb3IuaXModmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY29uc3QgZmF0YWxFcnJvciA9IG5ldyBGYXRhbEVycm9yKGBBYm9ydGVkOiAke3ZhbHVlLm1lc3NhZ2V9YCk7XG4gIGlmICh2YWx1ZS5zdGFjaykge1xuICAgIGZhdGFsRXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgfVxuICByZXR1cm4gZmF0YWxFcnJvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3JtYWxpemVkVW5rbm93bkVycm9yIHtcbiAgbmFtZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHN0YWNrOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAndGhlbicgaW4gdmFsdWUgJiZcbiAgICB0eXBlb2YgKHZhbHVlIGFzIHsgdGhlbj86IHVua25vd24gfSkudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTeW5jRXJyb3IodjogdW5rbm93bik6IE5vcm1hbGl6ZWRVbmtub3duRXJyb3Ige1xuICBpZiAodHlwZXMuaXNOYXRpdmVFcnJvcih2KSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB2Lm5hbWUsXG4gICAgICBtZXNzYWdlOiB2Lm1lc3NhZ2UsXG4gICAgICBzdGFjazogdi5zdGFjayA/PyAnJyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnRXJyb3InLFxuICAgICAgbWVzc2FnZTogdixcbiAgICAgIHN0YWNrOiAnJyxcbiAgICB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IEpTT04uc3RyaW5naWZ5KHYpLFxuICAgICAgc3RhY2s6ICcnLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnRXJyb3InLFxuICAgICAgbWVzc2FnZTogU3RyaW5nKHYpLFxuICAgICAgc3RhY2s6ICcnLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIHVua25vd24gdGhyb3duIHZhbHVlcyBpbnRvIGEgc3RhYmxlIGVycm9yIHNoYXBlLlxuICogVGhpcyBoYW5kbGVzIFByb21pc2UvdGhlbmFibGUgdGhyb3cgdmFsdWVzIHNvIGxvZ3MvZXZlbnRzIG5ldmVyIGVuZCB1cFxuICogd2l0aCB1bmhlbHBmdWwgXCJbb2JqZWN0IFByb21pc2VdXCIgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBub3JtYWxpemVVbmtub3duRXJyb3IoXG4gIHZhbHVlOiB1bmtub3duXG4pOiBQcm9taXNlPE5vcm1hbGl6ZWRVbmtub3duRXJyb3I+IHtcbiAgaWYgKGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgdmFsdWU7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gYXdhaXQgbm9ybWFsaXplVW5rbm93bkVycm9yKHJlc29sdmVkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5vcm1hbGl6ZWQsXG4gICAgICAgIG1lc3NhZ2U6IGBQcm9taXNlIHJlamVjdGlvbjogJHtub3JtYWxpemVkLm1lc3NhZ2V9YCxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAocmVqZWN0aW9uKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gYXdhaXQgbm9ybWFsaXplVW5rbm93bkVycm9yKHJlamVjdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ub3JtYWxpemVkLFxuICAgICAgICBtZXNzYWdlOiBgUHJvbWlzZSByZWplY3Rpb246ICR7bm9ybWFsaXplZC5tZXNzYWdlfWAsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVTeW5jRXJyb3IodmFsdWUpO1xufVxuIl19
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUMsTUFBTSxVQUFVLFlBQVksQ0FBQyxDQUFVO0lBQ3JDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBVTtJQUN0QyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxzRUFBc0U7QUFDdEUsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLG1FQUFtRTtBQUNuRSxTQUFTLGlCQUFpQixDQUFDLEtBQWM7SUFDdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2hELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUkvQixDQUFDO0lBQ0YsTUFBTSxLQUFLLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDaEUsTUFBTSxJQUFJLEdBQ1IsT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8s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RUQsSUFBSSxDQUFDO1FBQ0gsT0FBTztZQUNMLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzFCLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQztJQUNKLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPO1lBQ0wsSUFBSSxFQUFFLE9BQU87WUFDYixPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNsQixLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxLQUFjO0lBRWQsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQztZQUM3QixNQUFNLFVBQVUsR0FBRyxNQUFNLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pELE9BQU87Z0JBQ0wsR0FBRyxVQUFVO2dCQUNiLE9BQU8sRUFBRSxzQkFBc0IsVUFBVSxDQUFDLE9BQU8sRUFBRTthQUNwRCxDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sU0FBUyxFQUFFLENBQUM7WUFDbkIsTUFBTSxVQUFVLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRCxPQUFPO2dCQUNMLEdBQUcsVUFBVTtnQkFDYixPQUFPLEVBQUUsc0JBQXNCLFVBQVUsQ0FBQyxPQUFPLEVBQUU7YUFDcEQsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgRmF0YWxFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXJyb3JOYW1lKHY6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZXMuaXNOYXRpdmVFcnJvcih2KSkge1xuICAgIHJldHVybiB2Lm5hbWU7XG4gIH1cbiAgcmV0dXJuICdFcnJvcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvclN0YWNrKHY6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZXMuaXNOYXRpdmVFcnJvcih2KSkge1xuICAgIHJldHVybiB2LnN0YWNrID8/ICcnO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqIFVwcGVyIGJvdW5kIG9uIHRoZSBsaW5rcyB7QGxpbmsgZm9ybWF0RXJyb3JDYXVzZUNoYWlufSByZW5kZXJzLiAqL1xuY29uc3QgTUFYX0NBVVNFX0xJTktTID0gNDtcblxuLyoqIE9uZSBgTmFtZTogbWVzc2FnZSAoQ09ERSlgIGxpbmUgZm9yIGEgbGluayBpbiBhIGNhdXNlIGNoYWluLiAqL1xuZnVuY3Rpb24gZGVzY3JpYmVFcnJvckxpbmsodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG4gIGNvbnN0IHsgbmFtZSwgbWVzc2FnZSwgY29kZSB9ID0gdmFsdWUgYXMge1xuICAgIG5hbWU/OiB1bmtub3duO1xuICAgIG1lc3NhZ2U/OiB1bmtub3duO1xuICAgIGNvZGU/OiB1bmtub3duO1xuICB9O1xuICBjb25zdCBsYWJlbCA9IHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiBuYW1lID8gbmFtZSA6ICdFcnJvcic7XG4gIGNvbnN0IHRleHQgPVxuICAgIHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlID8gYCR7bGFiZWx9OiAke21lc3NhZ2V9YCA6IGxhYmVsO1xuICByZXR1cm4gdHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUgJiYgIXRleHQuaW5jbHVkZXMoY29kZSlcbiAgICA/IGAke3RleHR9ICgke2NvZGV9KWBcbiAgICA6IHRleHQ7XG59XG5cbi8qKlxuICogU3VtbWFyaXplIHRoZSBgY2F1c2VgIGNoYWluIGhhbmdpbmcgb2ZmIGEgdGhyb3duIHZhbHVlLCBvbmUgbGluayBwZXIgbGluZSxcbiAqIG91dGVybW9zdCBmaXJzdC4gVGhlIHZhbHVlIGl0c2VsZiBpcyBza2lwcGVkOiB3aGF0ZXZlciBsb2dzIHRoaXMgYWxyZWFkeVxuICogc3RhdGVzIGl0LCBpbiB0aGUgbWVzc2FnZSBvciBpbiB0aGUgc3RhY2sgaGVhZGVyLlxuICpcbiAqIGB1dGlsLmluc3BlY3RgIHJlbmRlcnMgYFtjYXVzZV1gIHdoZW4gTm9kZSBwcmludHMgYW4gZXJyb3IsIGJ1dCB0aGVcbiAqIHN0cnVjdHVyZWQgbG9ncyByZWFkIGBuYW1lYCAvIGBtZXNzYWdlYCAvIGBzdGFja2AgYW5kIGRyb3AgZXZlcnl0aGluZyBlbHNlXG4gKiDigJQgZXhhY3RseSB0aGUgd3JvbmcgaGFsZiBmb3IgZXJyb3JzIHRoYXQgYXJyaXZlIHByZS13cmFwcGVkLlxuICogYFR5cGVFcnJvcjogZmV0Y2ggZmFpbGVkYCBpcyB0aGUgY2Fub25pY2FsIG9uZTogdW5kaWNpJ3Mgd3JhcHBlciBzYXlzXG4gKiBub3RoaW5nIG9uIGl0cyBvd24gYW5kIGl0cyBzdGFjayBpcyBhbGwgYG5vZGU6aW50ZXJuYWwvYCBmcmFtZXMsIHNvIHRoZSBETlMsXG4gKiBzb2NrZXQgb3IgVExTIGZhaWx1cmUgdGhhdCBhY3R1YWxseSBoYXBwZW5lZCBpcyBvbmx5IHJlYWRhYmxlIG9uZSBvciB0d29cbiAqIGBjYXVzZWAgaG9wcyBkb3duLiBTYW1lIGZvciB0aGUgd29ybGQgbGF5ZXIncyBvd24gd3JhcHBpbmcsIHdoZXJlIHRoZVxuICogcmVxdWVzdCB0aGF0IGZhaWxlZCBpcyBvbiB0aGUgd3JhcHBlciBhbmQgdGhlIHJlYXNvbiBpdCBmYWlsZWQgaXMgb24gdGhlXG4gKiBjYXVzZS5cbiAqXG4gKiBgQWdncmVnYXRlRXJyb3JgIGFsc28gZ2V0cyBpdHMgYGVycm9yc2Agc3VtbWFyaXplZCwgYmVjYXVzZSBhXG4gKiBoYXBweS1leWViYWxscyBjb25uZWN0IHJlcG9ydHMgZXZlcnkgYXR0ZW1wdCB0aGVyZSBhbmQgbGVhdmVzIHRoZVxuICogYEFnZ3JlZ2F0ZUVycm9yYCBpdHNlbGYgYmxhbmsuXG4gKlxuICogUmV0dXJucyBgJydgIHdoZW4gdGhlcmUgaXMgbm8gY2F1c2UsIHNvIGNhbGxlcnMgY2FuIGRyb3AgdGhlIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RXJyb3JDYXVzZUNoYWluKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHVua25vd24+KCk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKFxuICAgICAgbGV0IGN1cnJlbnQgPSBjYXVzZU9mKHZhbHVlKTtcbiAgICAgIGN1cnJlbnQgIT0gbnVsbCAmJiBsaW5lcy5sZW5ndGggPD0gTUFYX0NBVVNFX0xJTktTO1xuICAgICAgY3VycmVudCA9IGNhdXNlT2YoY3VycmVudClcbiAgICApIHtcbiAgICAgIGlmICh0eXBlb2YgY3VycmVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgbGluZXMucHVzaChTdHJpbmcoY3VycmVudCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIEEgY2F1c2UgY2hhaW4gY2FuIGxvb3AgKGBlcnIuY2F1c2UgPSBlcnJgKSBvciByZXBlYXQgYSBzaGFyZWQgZXJyb3IuXG4gICAgICBpZiAoc2Vlbi5oYXMoY3VycmVudCkpIGJyZWFrO1xuICAgICAgc2Vlbi5hZGQoY3VycmVudCk7XG4gICAgICBsaW5lcy5wdXNoKGRlc2NyaWJlRXJyb3JMaW5rKGN1cnJlbnQpLCAuLi5hZ2dyZWdhdGVkTGlua3MoY3VycmVudCkpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gQ2F1c2VzIGNhbiBjb250YWluIGdldHRlcnMgb3IgcHJveGllcyB0aGF0IHRocm93LiBMb2dnaW5nIG11c3Qgbm90XG4gICAgLy8gcmVwbGFjZSB0aGUgb3JpZ2luYWwgZXJyb3Igb3IgcHJldmVudCB0aGUgcnVuX2ZhaWxlZCBldmVudCBmcm9tIGJlaW5nIHdyaXR0ZW4uXG4gICAgbGluZXMucHVzaCgnW3VuYXZhaWxhYmxlIGNhdXNlXScpO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzLmxlbmd0aCA+IE1BWF9DQVVTRV9MSU5LU1xuICAgID8gWy4uLmxpbmVzLnNsaWNlKDAsIE1BWF9DQVVTRV9MSU5LUyksICfigKYnXS5qb2luKCdcXG4nKVxuICAgIDogbGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGNhdXNlT2YodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGxcbiAgICA/ICh2YWx1ZSBhcyB7IGNhdXNlPzogdW5rbm93biB9KS5jYXVzZVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKiogVGhlIGF0dGVtcHRzIGFuIGBBZ2dyZWdhdGVFcnJvcmAgY29sbGVjdGVkLCBpZiB0aGlzIGxpbmsgaXMgb25lLiAqL1xuZnVuY3Rpb24gYWdncmVnYXRlZExpbmtzKHZhbHVlOiBvYmplY3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9ycyA9ICh2YWx1ZSBhcyB7IGVycm9ycz86IHVua25vd24gfSkuZXJyb3JzO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShlcnJvcnMpXG4gICAgPyBlcnJvcnMuc2xpY2UoMCwgTUFYX0NBVVNFX0xJTktTKS5tYXAoZGVzY3JpYmVFcnJvckxpbmspXG4gICAgOiBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWJvcnRFcnJvcihcbiAgdmFsdWU6IHVua25vd25cbik6IHZhbHVlIGlzIHsgbmFtZTogJ0Fib3J0RXJyb3InOyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICduYW1lJyBpbiB2YWx1ZSAmJlxuICAgIHZhbHVlLm5hbWUgPT09ICdBYm9ydEVycm9yJyAmJlxuICAgICdtZXNzYWdlJyBpbiB2YWx1ZSAmJlxuICAgIHR5cGVvZiB2YWx1ZS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJlxuICAgICghKCdzdGFjaycgaW4gdmFsdWUpIHx8XG4gICAgICB2YWx1ZS5zdGFjayA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0eXBlb2YgdmFsdWUuc3RhY2sgPT09ICdzdHJpbmcnKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvbW90ZUFib3J0RXJyb3JUb0ZhdGFsKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmICghaXNBYm9ydEVycm9yKHZhbHVlKSB8fCBGYXRhbEVycm9yLmlzKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0IGZhdGFsRXJyb3IgPSBuZXcgRmF0YWxFcnJvcihgQWJvcnRlZDogJHt2YWx1ZS5tZXNzYWdlfWApO1xuICBpZiAodmFsdWUuc3RhY2spIHtcbiAgICBmYXRhbEVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gIH1cbiAgcmV0dXJuIGZhdGFsRXJyb3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9ybWFsaXplZFVua25vd25FcnJvciB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzdGFjazogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgJ3RoZW4nIGluIHZhbHVlICYmXG4gICAgdHlwZW9mICh2YWx1ZSBhcyB7IHRoZW4/OiB1bmtub3duIH0pLnRoZW4gPT09ICdmdW5jdGlvbidcbiAgKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU3luY0Vycm9yKHY6IHVua25vd24pOiBOb3JtYWxpemVkVW5rbm93bkVycm9yIHtcbiAgaWYgKHR5cGVzLmlzTmF0aXZlRXJyb3IodikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdi5uYW1lLFxuICAgICAgbWVzc2FnZTogdi5tZXNzYWdlLFxuICAgICAgc3RhY2s6IHYuc3RhY2sgPz8gJycsXG4gICAgfTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IHYsXG4gICAgICBzdGFjazogJycsXG4gICAgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiBKU09OLnN0cmluZ2lmeSh2KSxcbiAgICAgIHN0YWNrOiAnJyxcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IFN0cmluZyh2KSxcbiAgICAgIHN0YWNrOiAnJyxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyB1bmtub3duIHRocm93biB2YWx1ZXMgaW50byBhIHN0YWJsZSBlcnJvciBzaGFwZS5cbiAqIFRoaXMgaGFuZGxlcyBQcm9taXNlL3RoZW5hYmxlIHRocm93IHZhbHVlcyBzbyBsb2dzL2V2ZW50cyBuZXZlciBlbmQgdXBcbiAqIHdpdGggdW5oZWxwZnVsIFwiW29iamVjdCBQcm9taXNlXVwiIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm9ybWFsaXplVW5rbm93bkVycm9yKFxuICB2YWx1ZTogdW5rbm93blxuKTogUHJvbWlzZTxOb3JtYWxpemVkVW5rbm93bkVycm9yPiB7XG4gIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHZhbHVlO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGF3YWl0IG5vcm1hbGl6ZVVua25vd25FcnJvcihyZXNvbHZlZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ub3JtYWxpemVkLFxuICAgICAgICBtZXNzYWdlOiBgUHJvbWlzZSByZWplY3Rpb246ICR7bm9ybWFsaXplZC5tZXNzYWdlfWAsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHJlamVjdGlvbikge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGF3YWl0IG5vcm1hbGl6ZVVua25vd25FcnJvcihyZWplY3Rpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubm9ybWFsaXplZCxcbiAgICAgICAgbWVzc2FnZTogYFByb21pc2UgcmVqZWN0aW9uOiAke25vcm1hbGl6ZWQubWVzc2FnZX1gLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplU3luY0Vycm9yKHZhbHVlKTtcbn1cbiJdfQ==
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "5.0.0-beta.51";
1
+ export declare const version = "5.0.0-beta.53";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Generated by genversion.
2
- export const version = '5.0.0-beta.51';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGdlbnZlcnNpb24uXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjAuMC1iZXRhLjUxJ1xuIl19
2
+ export const version = '5.0.0-beta.53';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGdlbnZlcnNpb24uXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjAuMC1iZXRhLjUzJ1xuIl19
@@ -164,6 +164,16 @@ export async function myWorkflow(input: unknown) {
164
164
 
165
165
  Uncaught, the run fails immediately with the `USER_ERROR` code, without retrying. See [serialization-failed](/docs/errors/serialization-failed) for common causes and fixes.
166
166
 
167
+ ## Backend connection failures
168
+
169
+ On Vercel, backend connection failures and interrupted event streams use the existing retry policies, even when their error codes are unrecognized. This lets workflows recover from network failures instead of immediately failing with `USER_ERROR`. Persistent failures can still exhaust the retry budget.
170
+
171
+ The SDK also replaces its shared events connection pool after repeated HTTP/2 session failures. Invalid backend URLs, including unsupported protocols and embedded credentials, fail immediately. Fetch requests to blocked ports or with unsupported headers (such as `Expect`) also fail without retrying. Interrupted event writes retain their existing retries; caller cancellations do not trigger another write.
172
+
173
+ A connection failure does not prove that the backend rejected a write: it may have accepted it before the response was lost. Continue to make step side effects [idempotent](/docs/foundations/idempotency).
174
+
175
+ Failed-run logs include the underlying error causes and their codes, exposing socket, DNS, or TLS errors behind messages such as `TypeError: fetch failed`. If a cause cannot be read, the log includes `[unavailable cause]` and the run can still be recorded as failed.
176
+
167
177
  ## Error codes
168
178
 
169
179
  When a workflow run fails, the error includes an `errorCode` that classifies the failure, alongside the original thrown value (preserved as `cause`):
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/core",
3
- "version": "5.0.0-beta.51",
3
+ "version": "5.0.0-beta.53",
4
4
  "description": "Core runtime and engine for Workflow SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -88,9 +88,9 @@
88
88
  "@workflow/errors": "5.0.0-beta.21",
89
89
  "@workflow/serde": "5.0.0-beta.2",
90
90
  "@workflow/utils": "5.0.0-beta.10",
91
- "@workflow/world": "5.0.0-beta.35",
92
- "@workflow/world-local": "5.0.0-beta.44",
93
- "@workflow/world-vercel": "5.0.0-beta.46",
91
+ "@workflow/world": "5.0.0-beta.36",
92
+ "@workflow/world-local": "5.0.0-beta.45",
93
+ "@workflow/world-vercel": "5.0.0-beta.48",
94
94
  "debug": "4.4.3",
95
95
  "devalue": "5.9.2",
96
96
  "ms": "2.1.3",