@workflow/core 5.0.0-beta.4 → 5.0.0-beta.40
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/attribute-changes.d.ts +7 -0
- package/dist/attribute-changes.d.ts.map +1 -0
- package/dist/attribute-changes.js +25 -0
- package/dist/capabilities.d.ts +33 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +71 -4
- package/dist/capture-stack.d.ts +16 -0
- package/dist/capture-stack.d.ts.map +1 -0
- package/dist/capture-stack.js +21 -0
- package/dist/class-serialization.d.ts +32 -0
- package/dist/class-serialization.d.ts.map +1 -1
- package/dist/class-serialization.js +37 -1
- package/dist/classify-error.d.ts +26 -3
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +109 -6
- package/dist/context-errors.d.ts +27 -0
- package/dist/context-errors.d.ts.map +1 -0
- package/dist/context-errors.js +101 -0
- package/dist/context-violation-error.d.ts +97 -0
- package/dist/context-violation-error.d.ts.map +1 -0
- package/dist/context-violation-error.js +149 -0
- package/dist/correlation-id.d.ts +109 -0
- package/dist/correlation-id.d.ts.map +1 -0
- package/dist/correlation-id.js +139 -0
- package/dist/create-hook.d.ts +62 -4
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +4 -3
- package/dist/define-hook.d.ts.map +1 -1
- package/dist/define-hook.js +20 -5
- package/dist/describe-error.d.ts +70 -0
- package/dist/describe-error.d.ts.map +1 -0
- package/dist/describe-error.js +189 -0
- package/dist/encryption.d.ts +37 -3
- package/dist/encryption.d.ts.map +1 -1
- package/dist/encryption.js +97 -31
- package/dist/events-consumer.d.ts +26 -1
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +105 -18
- package/dist/flushable-stream.d.ts +65 -10
- package/dist/flushable-stream.d.ts.map +1 -1
- package/dist/flushable-stream.js +131 -18
- package/dist/global.d.ts +37 -1
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +21 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/log-format.d.ts +25 -0
- package/dist/log-format.d.ts.map +1 -0
- package/dist/log-format.js +250 -0
- package/dist/logger.d.ts +29 -30
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +82 -32
- package/dist/private.d.ts +178 -9
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +273 -9
- package/dist/replay-payload-cache.d.ts +68 -0
- package/dist/replay-payload-cache.d.ts.map +1 -0
- package/dist/replay-payload-cache.js +160 -0
- package/dist/runtime/compute-instance.d.ts +12 -0
- package/dist/runtime/compute-instance.d.ts.map +1 -0
- package/dist/runtime/compute-instance.js +13 -0
- package/dist/runtime/constants.d.ts +237 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +405 -15
- package/dist/runtime/count-step-started-events.d.ts +52 -0
- package/dist/runtime/count-step-started-events.d.ts.map +1 -0
- package/dist/runtime/count-step-started-events.js +72 -0
- package/dist/runtime/deployment-guard.d.ts +99 -0
- package/dist/runtime/deployment-guard.d.ts.map +1 -0
- package/dist/runtime/deployment-guard.js +154 -0
- package/dist/runtime/get-port-lazy.d.ts +25 -0
- package/dist/runtime/get-port-lazy.d.ts.map +1 -0
- package/dist/runtime/get-port-lazy.js +92 -0
- package/dist/runtime/get-world-lazy.d.ts +23 -0
- package/dist/runtime/get-world-lazy.d.ts.map +1 -0
- package/dist/runtime/get-world-lazy.js +46 -0
- package/dist/runtime/helpers.d.ts +219 -10
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +414 -40
- package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
- package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
- package/dist/runtime/quickjs-assets.generated.js +30 -0
- package/dist/runtime/quickjs-entrypoint.d.ts +124 -0
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
- package/dist/runtime/quickjs-entrypoint.js +1429 -0
- package/dist/runtime/quickjs-runtime.d.ts +193 -0
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
- package/dist/runtime/quickjs-runtime.js +1944 -0
- package/dist/runtime/replay-budget.d.ts +98 -0
- package/dist/runtime/replay-budget.d.ts.map +1 -0
- package/dist/runtime/replay-budget.js +192 -0
- package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
- package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
- package/dist/runtime/replay-recovery-reporter.js +64 -0
- package/dist/runtime/resume-hook.d.ts +27 -4
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +448 -76
- package/dist/runtime/run-id-time.d.ts +19 -0
- package/dist/runtime/run-id-time.d.ts.map +1 -0
- package/dist/runtime/run-id-time.js +42 -0
- package/dist/runtime/run.d.ts +8 -2
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +62 -15
- package/dist/runtime/runs.d.ts +54 -3
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +117 -10
- package/dist/runtime/start.d.ts +70 -1
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +312 -54
- package/dist/runtime/step-executor.d.ts +177 -0
- package/dist/runtime/step-executor.d.ts.map +1 -0
- package/dist/runtime/step-executor.js +949 -0
- package/dist/runtime/step-latency.d.ts +197 -0
- package/dist/runtime/step-latency.d.ts.map +1 -0
- package/dist/runtime/step-latency.js +207 -0
- package/dist/runtime/step-ownership.d.ts +72 -0
- package/dist/runtime/step-ownership.d.ts.map +1 -0
- package/dist/runtime/step-ownership.js +114 -0
- package/dist/runtime/step-single-flight.d.ts +12 -0
- package/dist/runtime/step-single-flight.d.ts.map +1 -0
- package/dist/runtime/step-single-flight.js +69 -0
- package/dist/runtime/suspension-handler.d.ts +102 -7
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +439 -140
- package/dist/runtime/vm-mode.d.ts +44 -0
- package/dist/runtime/vm-mode.d.ts.map +1 -0
- package/dist/runtime/vm-mode.js +62 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
- package/dist/runtime/vm-serde-bundle.generated.js +16 -0
- package/dist/runtime/wait-continuation.d.ts +84 -0
- package/dist/runtime/wait-continuation.d.ts.map +1 -0
- package/dist/runtime/wait-continuation.js +105 -0
- package/dist/runtime/wait-until.d.ts +18 -0
- package/dist/runtime/wait-until.d.ts.map +1 -0
- package/dist/runtime/wait-until.js +42 -0
- package/dist/runtime/world-compatibility.d.ts +5 -0
- package/dist/runtime/world-compatibility.d.ts.map +1 -0
- package/dist/runtime/world-compatibility.js +12 -0
- package/dist/runtime/world-init.d.ts +50 -0
- package/dist/runtime/world-init.d.ts.map +1 -0
- package/dist/runtime/world-init.js +50 -0
- package/dist/runtime/world.d.ts +14 -2
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +101 -26
- package/dist/runtime.d.ts +17 -12
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +3078 -327
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +1 -1
- package/dist/sealed-box.d.ts +167 -0
- package/dist/sealed-box.d.ts.map +1 -0
- package/dist/sealed-box.js +571 -0
- package/dist/serialization/client.d.ts +17 -0
- package/dist/serialization/client.d.ts.map +1 -0
- package/dist/serialization/client.js +48 -0
- package/dist/serialization/codec-devalue-vm.d.ts +9 -0
- package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
- package/dist/serialization/codec-devalue-vm.js +137 -0
- package/dist/serialization/codec-devalue.d.ts +14 -0
- package/dist/serialization/codec-devalue.d.ts.map +1 -0
- package/dist/serialization/codec-devalue.js +105 -0
- package/dist/serialization/codec.d.ts +125 -0
- package/dist/serialization/codec.d.ts.map +1 -0
- package/dist/serialization/codec.js +17 -0
- package/dist/serialization/compression.d.ts +104 -0
- package/dist/serialization/compression.d.ts.map +1 -0
- package/dist/serialization/compression.js +260 -0
- package/dist/serialization/encryption.d.ts +134 -0
- package/dist/serialization/encryption.d.ts.map +1 -0
- package/dist/serialization/encryption.js +186 -0
- package/dist/serialization/errors.d.ts +34 -0
- package/dist/serialization/errors.d.ts.map +1 -0
- package/dist/serialization/errors.js +59 -0
- package/dist/serialization/format.d.ts +60 -0
- package/dist/serialization/format.d.ts.map +1 -0
- package/dist/serialization/format.js +97 -0
- package/dist/serialization/hardened.d.ts +155 -0
- package/dist/serialization/hardened.d.ts.map +1 -0
- package/dist/serialization/hardened.js +523 -0
- package/dist/serialization/index.d.ts +20 -0
- package/dist/serialization/index.d.ts.map +1 -0
- package/dist/serialization/index.js +22 -0
- package/dist/serialization/reducers/class-vm.d.ts +20 -0
- package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/class-vm.js +77 -0
- package/dist/serialization/reducers/class.d.ts +11 -0
- package/dist/serialization/reducers/class.d.ts.map +1 -0
- package/dist/serialization/reducers/class.js +73 -0
- package/dist/serialization/reducers/common-vm.d.ts +15 -0
- package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/common-vm.js +579 -0
- package/dist/serialization/reducers/common.d.ts +16 -0
- package/dist/serialization/reducers/common.d.ts.map +1 -0
- package/dist/serialization/reducers/common.js +478 -0
- package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
- package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function-vm.js +97 -0
- package/dist/serialization/reducers/step-function.d.ts +35 -0
- package/dist/serialization/reducers/step-function.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function.js +104 -0
- package/dist/serialization/step.d.ts +17 -0
- package/dist/serialization/step.d.ts.map +1 -0
- package/dist/serialization/step.js +48 -0
- package/dist/serialization/types.d.ts +273 -0
- package/dist/serialization/types.d.ts.map +1 -0
- package/dist/serialization/types.js +35 -0
- package/dist/serialization/vm-bundle-entry.d.ts +12 -0
- package/dist/serialization/vm-bundle-entry.d.ts.map +1 -0
- package/dist/serialization/vm-bundle-entry.js +58 -0
- package/dist/serialization/workflow-vm.d.ts +24 -0
- package/dist/serialization/workflow-vm.d.ts.map +1 -0
- package/dist/serialization/workflow-vm.js +66 -0
- package/dist/serialization/workflow.d.ts +29 -0
- package/dist/serialization/workflow.d.ts.map +1 -0
- package/dist/serialization/workflow.js +54 -0
- package/dist/serialization-format.d.ts +60 -4
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +276 -56
- package/dist/serialization.d.ts +374 -221
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +2300 -783
- package/dist/set-attributes.d.ts +13 -0
- package/dist/set-attributes.d.ts.map +1 -0
- package/dist/set-attributes.js +60 -0
- package/dist/sleep.d.ts.map +1 -1
- package/dist/sleep.js +3 -2
- package/dist/source-map.d.ts +25 -0
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +148 -10
- package/dist/step/context-storage.d.ts +61 -2
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +7 -5
- package/dist/step/get-closure-vars.d.ts.map +1 -1
- package/dist/step/get-closure-vars.js +3 -2
- package/dist/step/get-step-metadata.d.ts.map +1 -1
- package/dist/step/get-step-metadata.js +3 -2
- package/dist/step/get-workflow-metadata.d.ts.map +1 -1
- package/dist/step/get-workflow-metadata.js +3 -2
- package/dist/step/writable-stream.d.ts.map +1 -1
- package/dist/step/writable-stream.js +71 -7
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +226 -30
- package/dist/symbols.d.ts +54 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +55 -1
- package/dist/telemetry/semantic-conventions.d.ts +242 -2
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +173 -1
- package/dist/telemetry.d.ts +73 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +153 -16
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +23 -1
- package/dist/util.d.ts +16 -6
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +25 -16
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.d.ts.map +1 -1
- package/dist/vm/index.js +77 -9
- package/dist/vm/script-cache.d.ts +28 -0
- package/dist/vm/script-cache.d.ts.map +1 -0
- package/dist/vm/script-cache.js +140 -0
- package/dist/workflow/abort-controller.d.ts +65 -0
- package/dist/workflow/abort-controller.d.ts.map +1 -0
- package/dist/workflow/abort-controller.js +314 -0
- package/dist/workflow/attribute-dispatcher.d.ts +6 -0
- package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
- package/dist/workflow/attribute-dispatcher.js +48 -0
- package/dist/workflow/create-hook.d.ts.map +1 -1
- package/dist/workflow/create-hook.js +25 -3
- package/dist/workflow/define-hook.d.ts +1 -1
- package/dist/workflow/define-hook.d.ts.map +1 -1
- package/dist/workflow/define-hook.js +8 -4
- package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
- package/dist/workflow/get-workflow-metadata.js +14 -3
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +303 -37
- package/dist/workflow/index.d.ts +1 -0
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +5 -3
- package/dist/workflow/set-attributes.d.ts +68 -0
- package/dist/workflow/set-attributes.d.ts.map +1 -0
- package/dist/workflow/set-attributes.js +60 -0
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +58 -9
- package/dist/workflow/world-init-stub.d.ts +15 -0
- package/dist/workflow/world-init-stub.d.ts.map +1 -0
- package/dist/workflow/world-init-stub.js +15 -0
- package/dist/workflow.d.ts +69 -3
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +791 -554
- package/docs/api-reference/create-hook.mdx +79 -0
- package/docs/api-reference/create-webhook.mdx +1 -0
- package/docs/api-reference/define-hook.mdx +26 -24
- package/docs/api-reference/fatal-error.mdx +29 -7
- package/docs/api-reference/fetch.mdx +8 -4
- package/docs/api-reference/index.mdx +3 -0
- package/docs/api-reference/set-attributes.mdx +61 -0
- package/docs/api-reference/sleep.mdx +1 -1
- package/docs/foundations/cancellation.mdx +459 -0
- package/docs/foundations/errors-and-retries.mdx +7 -3
- package/docs/foundations/hooks.mdx +29 -0
- package/docs/foundations/idempotency.mdx +243 -11
- package/docs/foundations/index.mdx +1 -23
- package/docs/foundations/meta.json +3 -1
- package/docs/foundations/serialization.mdx +77 -41
- package/docs/foundations/starting-workflows.mdx +79 -2
- package/docs/foundations/streaming.mdx +14 -23
- package/docs/foundations/versioning.mdx +263 -0
- package/docs/how-it-works/cancellation.mdx +287 -0
- package/docs/how-it-works/code-transform.mdx +21 -17
- package/docs/how-it-works/encryption.mdx +5 -5
- package/docs/how-it-works/event-sourcing.mdx +6 -6
- package/docs/how-it-works/framework-integrations.mdx +96 -337
- package/docs/how-it-works/meta.json +2 -1
- package/package.json +31 -13
- package/dist/runtime/step-handler.d.ts +0 -2
- package/dist/runtime/step-handler.d.ts.map +0 -1
- package/dist/runtime/step-handler.js +0 -678
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import * as Ansi from '@workflow/errors/ansi';
|
|
2
|
+
import { formatStepName, formatWorkflowName, parseStepName, parseWorkflowName, } from '@workflow/utils';
|
|
3
|
+
/**
|
|
4
|
+
* Structured-log composition for `console.error` / `console.warn`. Emits
|
|
5
|
+
* one string in three sections so the most useful information is at the
|
|
6
|
+
* top, stack trace at the bottom:
|
|
7
|
+
*
|
|
8
|
+
* [workflow-sdk] <framing line>
|
|
9
|
+
* user error · FatalError
|
|
10
|
+
* run wrun_…
|
|
11
|
+
* step step_… · add (./workflows/x)
|
|
12
|
+
* hint: Move the call to a step function.
|
|
13
|
+
* FatalError: …
|
|
14
|
+
* at … (trimmed stack — internals collapsed)
|
|
15
|
+
*
|
|
16
|
+
* Without this composition, callers passing `${framing}\n${stack}` as the
|
|
17
|
+
* message and structured fields as the metadata object got `util.inspect`'s
|
|
18
|
+
* default object dump appended *after* the stack, which buries the run ID
|
|
19
|
+
* and attribution badge under 30+ lines of `node_modules/.pnpm/...` frames.
|
|
20
|
+
*
|
|
21
|
+
* The same metadata is also emitted as structured OTel span events from
|
|
22
|
+
* the logger itself, so backends that want JSON-shaped data still get it.
|
|
23
|
+
* web/web-shared do not consume stderr at all — they read CBOR/JSON event
|
|
24
|
+
* payloads from the World event log.
|
|
25
|
+
*/
|
|
26
|
+
export function composeLogLine(prefix, message, metadata) {
|
|
27
|
+
const [framing, ...rest] = message.split('\n');
|
|
28
|
+
const body = rest.join('\n');
|
|
29
|
+
const fields = renderStructuredFields(framing ?? '', metadata);
|
|
30
|
+
const trimmedBody = trimStackBody(body);
|
|
31
|
+
const lines = [`${prefix} ${framing ?? ''}`];
|
|
32
|
+
if (fields)
|
|
33
|
+
lines.push(fields);
|
|
34
|
+
if (trimmedBody)
|
|
35
|
+
lines.push(trimmedBody);
|
|
36
|
+
return lines.join('\n');
|
|
37
|
+
}
|
|
38
|
+
function renderStructuredFields(framing, metadata) {
|
|
39
|
+
if (!metadata || Object.keys(metadata).length === 0)
|
|
40
|
+
return null;
|
|
41
|
+
// Drop fields that the message already encodes. We render framings and
|
|
42
|
+
// stacks into the message string itself in step executor / combined runtime, so
|
|
43
|
+
// repeating them here would be pure noise.
|
|
44
|
+
const redundant = new Set();
|
|
45
|
+
redundant.add('errorStack');
|
|
46
|
+
if (typeof metadata.errorMessage === 'string' &&
|
|
47
|
+
framing.includes(metadata.errorMessage)) {
|
|
48
|
+
redundant.add('errorMessage');
|
|
49
|
+
}
|
|
50
|
+
const wellKnown = new Set([
|
|
51
|
+
'workflowRunId',
|
|
52
|
+
'workflowName',
|
|
53
|
+
'stepId',
|
|
54
|
+
'stepName',
|
|
55
|
+
'errorAttribution',
|
|
56
|
+
'errorCode',
|
|
57
|
+
'errorName',
|
|
58
|
+
'errorMessage',
|
|
59
|
+
'errorStack',
|
|
60
|
+
'hint',
|
|
61
|
+
'attempt',
|
|
62
|
+
'retryCount',
|
|
63
|
+
]);
|
|
64
|
+
const lines = [];
|
|
65
|
+
// Header: error class + attribution badge.
|
|
66
|
+
const errorName = pickString(metadata, 'errorName');
|
|
67
|
+
const attribution = pickString(metadata, 'errorAttribution');
|
|
68
|
+
if (errorName || attribution) {
|
|
69
|
+
const badge = attribution
|
|
70
|
+
? attribution === 'sdk'
|
|
71
|
+
? Ansi.magenta('sdk error')
|
|
72
|
+
: Ansi.red('user error')
|
|
73
|
+
: '';
|
|
74
|
+
const cls = errorName ? Ansi.bold(errorName) : '';
|
|
75
|
+
const sep = badge && cls ? Ansi.dim(' · ') : '';
|
|
76
|
+
lines.push(` ${badge}${sep}${cls}`);
|
|
77
|
+
}
|
|
78
|
+
// ID + parsed friendly-name rows.
|
|
79
|
+
const runId = pickString(metadata, 'workflowRunId');
|
|
80
|
+
const wfName = pickString(metadata, 'workflowName');
|
|
81
|
+
if (runId) {
|
|
82
|
+
lines.push(formatIdRow('run', runId, wfName, formatWorkflowName));
|
|
83
|
+
}
|
|
84
|
+
else if (wfName) {
|
|
85
|
+
lines.push(formatIdRow('run', null, wfName, formatWorkflowName));
|
|
86
|
+
}
|
|
87
|
+
const stepId = pickString(metadata, 'stepId');
|
|
88
|
+
const stepName = pickString(metadata, 'stepName');
|
|
89
|
+
if (stepId || stepName) {
|
|
90
|
+
lines.push(formatIdRow('step', stepId, stepName, formatStepName));
|
|
91
|
+
}
|
|
92
|
+
if (metadata.attempt !== undefined || metadata.retryCount !== undefined) {
|
|
93
|
+
// `attempt` and `retryCount` read ambiguously next to each other (is
|
|
94
|
+
// "3 retries" the limit or what already happened?). Render the limit
|
|
95
|
+
// as "max retries" to make the boundary explicit, and keep `attempt`
|
|
96
|
+
// as the count of total invocations including the original.
|
|
97
|
+
const a = metadata.attempt;
|
|
98
|
+
const r = metadata.retryCount;
|
|
99
|
+
if (a !== undefined && r !== undefined) {
|
|
100
|
+
lines.push(` ${kvKey('retry')} ${a} ${Ansi.dim('attempts ·')} ${r} ${Ansi.dim('max retries')}`);
|
|
101
|
+
}
|
|
102
|
+
else if (a !== undefined) {
|
|
103
|
+
lines.push(` ${kvKey('retry')} ${a} ${Ansi.dim('attempts')}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const errorCode = pickString(metadata, 'errorCode');
|
|
107
|
+
if (errorCode && errorCode !== errorName) {
|
|
108
|
+
lines.push(` ${kvKey('code')} ${Ansi.dim(errorCode)}`);
|
|
109
|
+
}
|
|
110
|
+
const hint = pickString(metadata, 'hint');
|
|
111
|
+
if (hint) {
|
|
112
|
+
lines.push(` ${Ansi.hint(hint)}`);
|
|
113
|
+
}
|
|
114
|
+
// Sorted pass-through for unknown fields.
|
|
115
|
+
const passThrough = Object.entries(metadata)
|
|
116
|
+
.filter(([k, v]) => !wellKnown.has(k) && !redundant.has(k) && v !== undefined && v !== null)
|
|
117
|
+
.sort(([a], [b]) => a.localeCompare(b));
|
|
118
|
+
for (const [k, v] of passThrough) {
|
|
119
|
+
lines.push(` ${kvKey(k)} ${formatPassthroughValue(v)}`);
|
|
120
|
+
}
|
|
121
|
+
return lines.length ? lines.join('\n') : null;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Strip the stack down to frames the user can act on. V8 stacks for our
|
|
125
|
+
* runtime errors look like:
|
|
126
|
+
*
|
|
127
|
+
* Name: message
|
|
128
|
+
* at userStep (./workflows/foo.ts:12:11)
|
|
129
|
+
* at <unknown> (../../packages/core/src/runtime/step-executor.ts:535:32)
|
|
130
|
+
* at <unknown> (.../node_modules/.pnpm/next@…/…/base-server.js:1454:9)
|
|
131
|
+
* at <unknown> (.../node_modules/.pnpm/@opentelemetry+api@…/…/api.js:5440)
|
|
132
|
+
* at … (15 more frames into Next.js / pnpm internals)
|
|
133
|
+
*
|
|
134
|
+
* Two-pass trim:
|
|
135
|
+
*
|
|
136
|
+
* 1. Drop framework-internal frames (`node_modules/.pnpm/`, `node:internal/`,
|
|
137
|
+
* Turbopack-bundled `node_modules__pnpm_*` / `_next_dist_*` chunks).
|
|
138
|
+
* 2. Cap the surviving frames at `MAX_VISIBLE_FRAMES` — past that, even
|
|
139
|
+
* "user-ish" frames are usually deep async wrapping that doesn't help
|
|
140
|
+
* pinpoint the throw. The user can drop into the inspect CLI for the
|
|
141
|
+
* full stack on demand.
|
|
142
|
+
*
|
|
143
|
+
* Each suppressed run emits one summary line so people know how much was
|
|
144
|
+
* trimmed.
|
|
145
|
+
*/
|
|
146
|
+
const MAX_VISIBLE_FRAMES = 6;
|
|
147
|
+
function trimStackBody(body) {
|
|
148
|
+
if (!body)
|
|
149
|
+
return null;
|
|
150
|
+
const lines = body.split('\n');
|
|
151
|
+
const out = [];
|
|
152
|
+
let droppedRun = 0;
|
|
153
|
+
let visibleFrameCount = 0;
|
|
154
|
+
let cappedFrames = 0;
|
|
155
|
+
const flushDropped = () => {
|
|
156
|
+
if (droppedRun > 0) {
|
|
157
|
+
out.push(Ansi.dim(` … ${droppedRun} more ${droppedRun === 1 ? 'frame' : 'frames'} in framework internals`));
|
|
158
|
+
droppedRun = 0;
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
for (const line of lines) {
|
|
162
|
+
const isFrame = line.trimStart().startsWith('at ');
|
|
163
|
+
if (isFrame && isFrameworkFrame(line)) {
|
|
164
|
+
droppedRun++;
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (isFrame && visibleFrameCount >= MAX_VISIBLE_FRAMES) {
|
|
168
|
+
cappedFrames++;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
flushDropped();
|
|
172
|
+
out.push(line);
|
|
173
|
+
if (isFrame)
|
|
174
|
+
visibleFrameCount++;
|
|
175
|
+
}
|
|
176
|
+
flushDropped();
|
|
177
|
+
if (cappedFrames > 0) {
|
|
178
|
+
out.push(Ansi.dim(` … ${cappedFrames} more ${cappedFrames === 1 ? 'frame' : 'frames'} (run \`pnpm wf inspect run <id>\` for the full stack)`));
|
|
179
|
+
}
|
|
180
|
+
return out.join('\n');
|
|
181
|
+
}
|
|
182
|
+
function isFrameworkFrame(line) {
|
|
183
|
+
// Only at-frames are candidates for stripping. Header lines (`Name: …`)
|
|
184
|
+
// and arbitrary trailing context (e.g. `code: 'USER_ERROR'`) pass through.
|
|
185
|
+
const trimmed = line.trimStart();
|
|
186
|
+
if (!trimmed.startsWith('at '))
|
|
187
|
+
return false;
|
|
188
|
+
// node:* internals (timers, async hooks, vm, etc.) never help users.
|
|
189
|
+
if (trimmed.includes('node:internal/'))
|
|
190
|
+
return true;
|
|
191
|
+
// pnpm-rooted frameworks installed as node_modules dependencies.
|
|
192
|
+
if (trimmed.includes('node_modules/.pnpm/'))
|
|
193
|
+
return true;
|
|
194
|
+
// Turbopack/Next bundle the same framework code into chunks like
|
|
195
|
+
// `node_modules__pnpm_<hash>._.js` and `<...>_next_dist_<hash>._.js`,
|
|
196
|
+
// and emits Next.js loader runtime as `0dx6_next_dist_<hash>._.js`.
|
|
197
|
+
// These are the frames that show up after Turbopack DCE — same intent
|
|
198
|
+
// as the raw `node_modules/.pnpm/` filter above.
|
|
199
|
+
if (trimmed.includes('node_modules__pnpm_'))
|
|
200
|
+
return true;
|
|
201
|
+
if (trimmed.includes('_next_dist_'))
|
|
202
|
+
return true;
|
|
203
|
+
// Plain node_modules (non-pnpm setups) for the same kinds of frameworks.
|
|
204
|
+
if (trimmed.includes('node_modules/next/') ||
|
|
205
|
+
trimmed.includes('node_modules/@opentelemetry/') ||
|
|
206
|
+
trimmed.includes('node_modules/vitest/') ||
|
|
207
|
+
trimmed.includes('node_modules/@vitest/')) {
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
function pickString(metadata, key) {
|
|
213
|
+
const v = metadata[key];
|
|
214
|
+
return typeof v === 'string' && v.length > 0 ? v : null;
|
|
215
|
+
}
|
|
216
|
+
function kvKey(key) {
|
|
217
|
+
return Ansi.dim(key.padEnd(6));
|
|
218
|
+
}
|
|
219
|
+
function formatIdRow(label, id, name, formatName) {
|
|
220
|
+
const idCell = id ? id : Ansi.dim('—');
|
|
221
|
+
const parsed = name
|
|
222
|
+
? label === 'run'
|
|
223
|
+
? parseWorkflowName(name)
|
|
224
|
+
: parseStepName(name)
|
|
225
|
+
: null;
|
|
226
|
+
const nameCell = parsed
|
|
227
|
+
? `${Ansi.dim('·')} ${formatName(name)}`
|
|
228
|
+
: '';
|
|
229
|
+
return ` ${kvKey(label)} ${idCell}${nameCell ? ' ' + nameCell : ''}`;
|
|
230
|
+
}
|
|
231
|
+
function formatPassthroughValue(v) {
|
|
232
|
+
if (typeof v === 'string') {
|
|
233
|
+
if (v.includes('\n')) {
|
|
234
|
+
return v
|
|
235
|
+
.split('\n')
|
|
236
|
+
.map((line, i) => (i === 0 ? line : ` ${line}`))
|
|
237
|
+
.join('\n');
|
|
238
|
+
}
|
|
239
|
+
return v;
|
|
240
|
+
}
|
|
241
|
+
if (typeof v === 'number' || typeof v === 'boolean')
|
|
242
|
+
return String(v);
|
|
243
|
+
try {
|
|
244
|
+
return JSON.stringify(v);
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
return String(v);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2ctZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBYyxFQUNkLE9BQWUsRUFDZixRQUE2QztJQUU3QyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXhDLE1BQU0sS0FBSyxHQUFhLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkQsSUFBSSxNQUFNO1FBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixJQUFJLFdBQVc7UUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsT0FBZSxFQUNmLFFBQTZDO0lBRTdDLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FB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QUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDO2lCQUNMLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFuc2kgZnJvbSAnQHdvcmtmbG93L2Vycm9ycy9hbnNpJztcbmltcG9ydCB7XG4gIGZvcm1hdFN0ZXBOYW1lLFxuICBmb3JtYXRXb3JrZmxvd05hbWUsXG4gIHBhcnNlU3RlcE5hbWUsXG4gIHBhcnNlV29ya2Zsb3dOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQtbG9nIGNvbXBvc2l0aW9uIGZvciBgY29uc29sZS5lcnJvcmAgLyBgY29uc29sZS53YXJuYC4gRW1pdHNcbiAqIG9uZSBzdHJpbmcgaW4gdGhyZWUgc2VjdGlvbnMgc28gdGhlIG1vc3QgdXNlZnVsIGluZm9ybWF0aW9uIGlzIGF0IHRoZVxuICogdG9wLCBzdGFjayB0cmFjZSBhdCB0aGUgYm90dG9tOlxuICpcbiAqICAgICBbd29ya2Zsb3ctc2RrXSA8ZnJhbWluZyBsaW5lPlxuICogICAgICAgdXNlciBlcnJvciDCtyBGYXRhbEVycm9yXG4gKiAgICAgICBydW4gICAgd3J1bl/igKZcbiAqICAgICAgIHN0ZXAgICBzdGVwX+KApiDCtyBhZGQgKC4vd29ya2Zsb3dzL3gpXG4gKiAgICAgICBoaW50OiAgTW92ZSB0aGUgY2FsbCB0byBhIHN0ZXAgZnVuY3Rpb24uXG4gKiAgICAgRmF0YWxFcnJvcjog4oCmXG4gKiAgICAgICAgIGF0IOKApiAodHJpbW1lZCBzdGFjayDigJQgaW50ZXJuYWxzIGNvbGxhcHNlZClcbiAqXG4gKiBXaXRob3V0IHRoaXMgY29tcG9zaXRpb24sIGNhbGxlcnMgcGFzc2luZyBgJHtmcmFtaW5nfVxcbiR7c3RhY2t9YCBhcyB0aGVcbiAqIG1lc3NhZ2UgYW5kIHN0cnVjdHVyZWQgZmllbGRzIGFzIHRoZSBtZXRhZGF0YSBvYmplY3QgZ290IGB1dGlsLmluc3BlY3RgJ3NcbiAqIGRlZmF1bHQgb2JqZWN0IGR1bXAgYXBwZW5kZWQgKmFmdGVyKiB0aGUgc3RhY2ssIHdoaWNoIGJ1cmllcyB0aGUgcnVuIElEXG4gKiBhbmQgYXR0cmlidXRpb24gYmFkZ2UgdW5kZXIgMzArIGxpbmVzIG9mIGBub2RlX21vZHVsZXMvLnBucG0vLi4uYCBmcmFtZXMuXG4gKlxuICogVGhlIHNhbWUgbWV0YWRhdGEgaXMgYWxzbyBlbWl0dGVkIGFzIHN0cnVjdHVyZWQgT1RlbCBzcGFuIGV2ZW50cyBmcm9tXG4gKiB0aGUgbG9nZ2VyIGl0c2VsZiwgc28gYmFja2VuZHMgdGhhdCB3YW50IEpTT04tc2hhcGVkIGRhdGEgc3RpbGwgZ2V0IGl0LlxuICogd2ViL3dlYi1zaGFyZWQgZG8gbm90IGNvbnN1bWUgc3RkZXJyIGF0IGFsbCDigJQgdGhleSByZWFkIENCT1IvSlNPTiBldmVudFxuICogcGF5bG9hZHMgZnJvbSB0aGUgV29ybGQgZXZlbnQgbG9nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZUxvZ0xpbmUoXG4gIHByZWZpeDogc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcbiAgY29uc3QgW2ZyYW1pbmcsIC4uLnJlc3RdID0gbWVzc2FnZS5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IGJvZHkgPSByZXN0LmpvaW4oJ1xcbicpO1xuICBjb25zdCBmaWVsZHMgPSByZW5kZXJTdHJ1Y3R1cmVkRmllbGRzKGZyYW1pbmcgPz8gJycsIG1ldGFkYXRhKTtcbiAgY29uc3QgdHJpbW1lZEJvZHkgPSB0cmltU3RhY2tCb2R5KGJvZHkpO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtgJHtwcmVmaXh9ICR7ZnJhbWluZyA/PyAnJ31gXTtcbiAgaWYgKGZpZWxkcykgbGluZXMucHVzaChmaWVsZHMpO1xuICBpZiAodHJpbW1lZEJvZHkpIGxpbmVzLnB1c2godHJpbW1lZEJvZHkpO1xuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN0cnVjdHVyZWRGaWVsZHMoXG4gIGZyYW1pbmc6IHN0cmluZyxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFtZXRhZGF0YSB8fCBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAvLyBEcm9wIGZpZWxkcyB0aGF0IHRoZSBtZXNzYWdlIGFscmVhZHkgZW5jb2Rlcy4gV2UgcmVuZGVyIGZyYW1pbmdzIGFuZFxuICAvLyBzdGFja3MgaW50byB0aGUgbWVzc2FnZSBzdHJpbmcgaXRzZWxmIGluIHN0ZXAgZXhlY3V0b3IgLyBjb21iaW5lZCBydW50aW1lLCBzb1xuICAvLyByZXBlYXRpbmcgdGhlbSBoZXJlIHdvdWxkIGJlIHB1cmUgbm9pc2UuXG4gIGNvbnN0IHJlZHVuZGFudCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICByZWR1bmRhbnQuYWRkKCdlcnJvclN0YWNrJyk7XG4gIGlmIChcbiAgICB0eXBlb2YgbWV0YWRhdGEuZXJyb3JNZXNzYWdlID09PSAnc3RyaW5nJyAmJlxuICAgIGZyYW1pbmcuaW5jbHVkZXMobWV0YWRhdGEuZXJyb3JNZXNzYWdlIGFzIHN0cmluZylcbiAgKSB7XG4gICAgcmVkdW5kYW50LmFkZCgnZXJyb3JNZXNzYWdlJyk7XG4gIH1cblxuICBjb25zdCB3ZWxsS25vd24gPSBuZXcgU2V0KFtcbiAgICAnd29ya2Zsb3dSdW5JZCcsXG4gICAgJ3dvcmtmbG93TmFtZScsXG4gICAgJ3N0ZXBJZCcsXG4gICAgJ3N0ZXBOYW1lJyxcbiAgICAnZXJyb3JBdHRyaWJ1dGlvbicsXG4gICAgJ2Vycm9yQ29kZScsXG4gICAgJ2Vycm9yTmFtZScsXG4gICAgJ2Vycm9yTWVzc2FnZScsXG4gICAgJ2Vycm9yU3RhY2snLFxuICAgICdoaW50JyxcbiAgICAnYXR0ZW1wdCcsXG4gICAgJ3JldHJ5Q291bnQnLFxuICBdKTtcblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBIZWFkZXI6IGVycm9yIGNsYXNzICsgYXR0cmlidXRpb24gYmFkZ2UuXG4gIGNvbnN0IGVycm9yTmFtZSA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdlcnJvck5hbWUnKTtcbiAgY29uc3QgYXR0cmlidXRpb24gPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JBdHRyaWJ1dGlvbicpO1xuICBpZiAoZXJyb3JOYW1lIHx8IGF0dHJpYnV0aW9uKSB7XG4gICAgY29uc3QgYmFkZ2UgPSBhdHRyaWJ1dGlvblxuICAgICAgPyBhdHRyaWJ1dGlvbiA9PT0gJ3NkaydcbiAgICAgICAgPyBBbnNpLm1hZ2VudGEoJ3NkayBlcnJvcicpXG4gICAgICAgIDogQW5zaS5yZWQoJ3VzZXIgZXJyb3InKVxuICAgICAgOiAnJztcbiAgICBjb25zdCBjbHMgPSBlcnJvck5hbWUgPyBBbnNpLmJvbGQoZXJyb3JOYW1lKSA6ICcnO1xuICAgIGNvbnN0IHNlcCA9IGJhZGdlICYmIGNscyA/IEFuc2kuZGltKCcgwrcgJykgOiAnJztcbiAgICBsaW5lcy5wdXNoKGAgICR7YmFkZ2V9JHtzZXB9JHtjbHN9YCk7XG4gIH1cblxuICAvLyBJRCArIHBhcnNlZCBmcmllbmRseS1uYW1lIHJvd3MuXG4gIGNvbnN0IHJ1bklkID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ3dvcmtmbG93UnVuSWQnKTtcbiAgY29uc3Qgd2ZOYW1lID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ3dvcmtmbG93TmFtZScpO1xuICBpZiAocnVuSWQpIHtcbiAgICBsaW5lcy5wdXNoKGZvcm1hdElkUm93KCdydW4nLCBydW5JZCwgd2ZOYW1lLCBmb3JtYXRXb3JrZmxvd05hbWUpKTtcbiAgfSBlbHNlIGlmICh3Zk5hbWUpIHtcbiAgICBsaW5lcy5wdXNoKGZvcm1hdElkUm93KCdydW4nLCBudWxsLCB3Zk5hbWUsIGZvcm1hdFdvcmtmbG93TmFtZSkpO1xuICB9XG5cbiAgY29uc3Qgc3RlcElkID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ3N0ZXBJZCcpO1xuICBjb25zdCBzdGVwTmFtZSA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdzdGVwTmFtZScpO1xuICBpZiAoc3RlcElkIHx8IHN0ZXBOYW1lKSB7XG4gICAgbGluZXMucHVzaChmb3JtYXRJZFJvdygnc3RlcCcsIHN0ZXBJZCwgc3RlcE5hbWUsIGZvcm1hdFN0ZXBOYW1lKSk7XG4gIH1cblxuICBpZiAobWV0YWRhdGEuYXR0ZW1wdCAhPT0gdW5kZWZpbmVkIHx8IG1ldGFkYXRhLnJldHJ5Q291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIGBhdHRlbXB0YCBhbmQgYHJldHJ5Q291bnRgIHJlYWQgYW1iaWd1b3VzbHkgbmV4dCB0byBlYWNoIG90aGVyIChpc1xuICAgIC8vIFwiMyByZXRyaWVzXCIgdGhlIGxpbWl0IG9yIHdoYXQgYWxyZWFkeSBoYXBwZW5lZD8pLiBSZW5kZXIgdGhlIGxpbWl0XG4gICAgLy8gYXMgXCJtYXggcmV0cmllc1wiIHRvIG1ha2UgdGhlIGJvdW5kYXJ5IGV4cGxpY2l0LCBhbmQga2VlcCBgYXR0ZW1wdGBcbiAgICAvLyBhcyB0aGUgY291bnQgb2YgdG90YWwgaW52b2NhdGlvbnMgaW5jbHVkaW5nIHRoZSBvcmlnaW5hbC5cbiAgICBjb25zdCBhID0gbWV0YWRhdGEuYXR0ZW1wdDtcbiAgICBjb25zdCByID0gbWV0YWRhdGEucmV0cnlDb3VudDtcbiAgICBpZiAoYSAhPT0gdW5kZWZpbmVkICYmIHIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgYCAgJHtrdktleSgncmV0cnknKX0gJHthfSAke0Fuc2kuZGltKCdhdHRlbXB0cyDCtycpfSAke3J9ICR7QW5zaS5kaW0oJ21heCByZXRyaWVzJyl9YFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgICAke2t2S2V5KCdyZXRyeScpfSAke2F9ICR7QW5zaS5kaW0oJ2F0dGVtcHRzJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXJyb3JDb2RlID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yQ29kZScpO1xuICBpZiAoZXJyb3JDb2RlICYmIGVycm9yQ29kZSAhPT0gZXJyb3JOYW1lKSB7XG4gICAgbGluZXMucHVzaChgICAke2t2S2V5KCdjb2RlJyl9ICR7QW5zaS5kaW0oZXJyb3JDb2RlKX1gKTtcbiAgfVxuXG4gIGNvbnN0IGhpbnQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnaGludCcpO1xuICBpZiAoaGludCkge1xuICAgIGxpbmVzLnB1c2goYCAgJHtBbnNpLmhpbnQoaGludCl9YCk7XG4gIH1cblxuICAvLyBTb3J0ZWQgcGFzcy10aHJvdWdoIGZvciB1bmtub3duIGZpZWxkcy5cbiAgY29uc3QgcGFzc1Rocm91Z2ggPSBPYmplY3QuZW50cmllcyhtZXRhZGF0YSlcbiAgICAuZmlsdGVyKFxuICAgICAgKFtrLCB2XSkgPT5cbiAgICAgICAgIXdlbGxLbm93bi5oYXMoaykgJiYgIXJlZHVuZGFudC5oYXMoaykgJiYgdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGxcbiAgICApXG4gICAgLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBwYXNzVGhyb3VnaCkge1xuICAgIGxpbmVzLnB1c2goYCAgJHtrdktleShrKX0gJHtmb3JtYXRQYXNzdGhyb3VnaFZhbHVlKHYpfWApO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzLmxlbmd0aCA/IGxpbmVzLmpvaW4oJ1xcbicpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBTdHJpcCB0aGUgc3RhY2sgZG93biB0byBmcmFtZXMgdGhlIHVzZXIgY2FuIGFjdCBvbi4gVjggc3RhY2tzIGZvciBvdXJcbiAqIHJ1bnRpbWUgZXJyb3JzIGxvb2sgbGlrZTpcbiAqXG4gKiAgICAgTmFtZTogbWVzc2FnZVxuICogICAgICAgICBhdCB1c2VyU3RlcCAoLi93b3JrZmxvd3MvZm9vLnRzOjEyOjExKVxuICogICAgICAgICBhdCA8dW5rbm93bj4gKC4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3J1bnRpbWUvc3RlcC1leGVjdXRvci50czo1MzU6MzIpXG4gKiAgICAgICAgIGF0IDx1bmtub3duPiAoLi4uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QOKApi/igKYvYmFzZS1zZXJ2ZXIuanM6MTQ1NDo5KVxuICogICAgICAgICBhdCA8dW5rbm93bj4gKC4uLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkrYXBpQOKApi/igKYvYXBpLmpzOjU0NDApXG4gKiAgICAgICAgIGF0IOKApiAoMTUgbW9yZSBmcmFtZXMgaW50byBOZXh0LmpzIC8gcG5wbSBpbnRlcm5hbHMpXG4gKlxuICogVHdvLXBhc3MgdHJpbTpcbiAqXG4gKiAgIDEuIERyb3AgZnJhbWV3b3JrLWludGVybmFsIGZyYW1lcyAoYG5vZGVfbW9kdWxlcy8ucG5wbS9gLCBgbm9kZTppbnRlcm5hbC9gLFxuICogICAgICBUdXJib3BhY2stYnVuZGxlZCBgbm9kZV9tb2R1bGVzX19wbnBtXypgIC8gYF9uZXh0X2Rpc3RfKmAgY2h1bmtzKS5cbiAqICAgMi4gQ2FwIHRoZSBzdXJ2aXZpbmcgZnJhbWVzIGF0IGBNQVhfVklTSUJMRV9GUkFNRVNgIOKAlCBwYXN0IHRoYXQsIGV2ZW5cbiAqICAgICAgXCJ1c2VyLWlzaFwiIGZyYW1lcyBhcmUgdXN1YWxseSBkZWVwIGFzeW5jIHdyYXBwaW5nIHRoYXQgZG9lc24ndCBoZWxwXG4gKiAgICAgIHBpbnBvaW50IHRoZSB0aHJvdy4gVGhlIHVzZXIgY2FuIGRyb3AgaW50byB0aGUgaW5zcGVjdCBDTEkgZm9yIHRoZVxuICogICAgICBmdWxsIHN0YWNrIG9uIGRlbWFuZC5cbiAqXG4gKiBFYWNoIHN1cHByZXNzZWQgcnVuIGVtaXRzIG9uZSBzdW1tYXJ5IGxpbmUgc28gcGVvcGxlIGtub3cgaG93IG11Y2ggd2FzXG4gKiB0cmltbWVkLlxuICovXG5jb25zdCBNQVhfVklTSUJMRV9GUkFNRVMgPSA2O1xuXG5mdW5jdGlvbiB0cmltU3RhY2tCb2R5KGJvZHk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIWJvZHkpIHJldHVybiBudWxsO1xuICBjb25zdCBsaW5lcyA9IGJvZHkuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBvdXQ6IHN0cmluZ1tdID0gW107XG4gIGxldCBkcm9wcGVkUnVuID0gMDtcbiAgbGV0IHZpc2libGVGcmFtZUNvdW50ID0gMDtcbiAgbGV0IGNhcHBlZEZyYW1lcyA9IDA7XG5cbiAgY29uc3QgZmx1c2hEcm9wcGVkID0gKCkgPT4ge1xuICAgIGlmIChkcm9wcGVkUnVuID4gMCkge1xuICAgICAgb3V0LnB1c2goXG4gICAgICAgIEFuc2kuZGltKFxuICAgICAgICAgIGAgICAgICAgIOKApiAke2Ryb3BwZWRSdW59IG1vcmUgJHtkcm9wcGVkUnVuID09PSAxID8gJ2ZyYW1lJyA6ICdmcmFtZXMnfSBpbiBmcmFtZXdvcmsgaW50ZXJuYWxzYFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgZHJvcHBlZFJ1biA9IDA7XG4gICAgfVxuICB9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGNvbnN0IGlzRnJhbWUgPSBsaW5lLnRyaW1TdGFydCgpLnN0YXJ0c1dpdGgoJ2F0ICcpO1xuICAgIGlmIChpc0ZyYW1lICYmIGlzRnJhbWV3b3JrRnJhbWUobGluZSkpIHtcbiAgICAgIGRyb3BwZWRSdW4rKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNGcmFtZSAmJiB2aXNpYmxlRnJhbWVDb3VudCA+PSBNQVhfVklTSUJMRV9GUkFNRVMpIHtcbiAgICAgIGNhcHBlZEZyYW1lcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZsdXNoRHJvcHBlZCgpO1xuICAgIG91dC5wdXNoKGxpbmUpO1xuICAgIGlmIChpc0ZyYW1lKSB2aXNpYmxlRnJhbWVDb3VudCsrO1xuICB9XG4gIGZsdXNoRHJvcHBlZCgpO1xuICBpZiAoY2FwcGVkRnJhbWVzID4gMCkge1xuICAgIG91dC5wdXNoKFxuICAgICAgQW5zaS5kaW0oXG4gICAgICAgIGAgICAgICAgIOKApiAke2NhcHBlZEZyYW1lc30gbW9yZSAke2NhcHBlZEZyYW1lcyA9PT0gMSA/ICdmcmFtZScgOiAnZnJhbWVzJ30gKHJ1biBcXGBwbnBtIHdmIGluc3BlY3QgcnVuIDxpZD5cXGAgZm9yIHRoZSBmdWxsIHN0YWNrKWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHJldHVybiBvdXQuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGlzRnJhbWV3b3JrRnJhbWUobGluZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIE9ubHkgYXQtZnJhbWVzIGFyZSBjYW5kaWRhdGVzIGZvciBzdHJpcHBpbmcuIEhlYWRlciBsaW5lcyAoYE5hbWU6IOKApmApXG4gIC8vIGFuZCBhcmJpdHJhcnkgdHJhaWxpbmcgY29udGV4dCAoZS5nLiBgY29kZTogJ1VTRVJfRVJST1InYCkgcGFzcyB0aHJvdWdoLlxuICBjb25zdCB0cmltbWVkID0gbGluZS50cmltU3RhcnQoKTtcbiAgaWYgKCF0cmltbWVkLnN0YXJ0c1dpdGgoJ2F0ICcpKSByZXR1cm4gZmFsc2U7XG4gIC8vIG5vZGU6KiBpbnRlcm5hbHMgKHRpbWVycywgYXN5bmMgaG9va3MsIHZtLCBldGMuKSBuZXZlciBoZWxwIHVzZXJzLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZTppbnRlcm5hbC8nKSkgcmV0dXJuIHRydWU7XG4gIC8vIHBucG0tcm9vdGVkIGZyYW1ld29ya3MgaW5zdGFsbGVkIGFzIG5vZGVfbW9kdWxlcyBkZXBlbmRlbmNpZXMuXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvLnBucG0vJykpIHJldHVybiB0cnVlO1xuICAvLyBUdXJib3BhY2svTmV4dCBidW5kbGUgdGhlIHNhbWUgZnJhbWV3b3JrIGNvZGUgaW50byBjaHVua3MgbGlrZVxuICAvLyBgbm9kZV9tb2R1bGVzX19wbnBtXzxoYXNoPi5fLmpzYCBhbmQgYDwuLi4+X25leHRfZGlzdF88aGFzaD4uXy5qc2AsXG4gIC8vIGFuZCBlbWl0cyBOZXh0LmpzIGxvYWRlciBydW50aW1lIGFzIGAwZHg2X25leHRfZGlzdF88aGFzaD4uXy5qc2AuXG4gIC8vIFRoZXNlIGFyZSB0aGUgZnJhbWVzIHRoYXQgc2hvdyB1cCBhZnRlciBUdXJib3BhY2sgRENFIOKAlCBzYW1lIGludGVudFxuICAvLyBhcyB0aGUgcmF3IGBub2RlX21vZHVsZXMvLnBucG0vYCBmaWx0ZXIgYWJvdmUuXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXNfX3BucG1fJykpIHJldHVybiB0cnVlO1xuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnX25leHRfZGlzdF8nKSkgcmV0dXJuIHRydWU7XG4gIC8vIFBsYWluIG5vZGVfbW9kdWxlcyAobm9uLXBucG0gc2V0dXBzKSBmb3IgdGhlIHNhbWUga2luZHMgb2YgZnJhbWV3b3Jrcy5cbiAgaWYgKFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy9uZXh0LycpIHx8XG4gICAgdHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5LycpIHx8XG4gICAgdHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzL3ZpdGVzdC8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy9Adml0ZXN0LycpXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcGlja1N0cmluZyhcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBrZXk6IHN0cmluZ1xuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHYgPSBtZXRhZGF0YVtrZXldO1xuICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoID4gMCA/IHYgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBrdktleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBBbnNpLmRpbShrZXkucGFkRW5kKDYpKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SWRSb3coXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcgfCBudWxsLFxuICBuYW1lOiBzdHJpbmcgfCBudWxsLFxuICBmb3JtYXROYW1lOiAobjogc3RyaW5nKSA9PiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGNvbnN0IGlkQ2VsbCA9IGlkID8gaWQgOiBBbnNpLmRpbSgn4oCUJyk7XG4gIGNvbnN0IHBhcnNlZCA9IG5hbWVcbiAgICA/IGxhYmVsID09PSAncnVuJ1xuICAgICAgPyBwYXJzZVdvcmtmbG93TmFtZShuYW1lKVxuICAgICAgOiBwYXJzZVN0ZXBOYW1lKG5hbWUpXG4gICAgOiBudWxsO1xuICBjb25zdCBuYW1lQ2VsbCA9IHBhcnNlZFxuICAgID8gYCR7QW5zaS5kaW0oJ8K3Jyl9ICR7Zm9ybWF0TmFtZShuYW1lIGFzIHN0cmluZyl9YFxuICAgIDogJyc7XG4gIHJldHVybiBgICAke2t2S2V5KGxhYmVsKX0gJHtpZENlbGx9JHtuYW1lQ2VsbCA/ICcgJyArIG5hbWVDZWxsIDogJyd9YDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UGFzc3Rocm91Z2hWYWx1ZSh2OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgIGlmICh2LmluY2x1ZGVzKCdcXG4nKSkge1xuICAgICAgcmV0dXJuIHZcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKChsaW5lLCBpKSA9PiAoaSA9PT0gMCA/IGxpbmUgOiBgICAgICAgICAgJHtsaW5lfWApKVxuICAgICAgICAuam9pbignXFxuJyk7XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG4gIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHYgPT09ICdib29sZWFuJykgcmV0dXJuIFN0cmluZyh2KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBTdHJpbmcodik7XG4gIH1cbn1cbiJdfQ==
|
package/dist/logger.d.ts
CHANGED
|
@@ -1,31 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
export declare const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
};
|
|
1
|
+
type LogMetadata = Record<string, unknown>;
|
|
2
|
+
type LogFn = (message: string, metadata?: LogMetadata) => void;
|
|
3
|
+
export interface Logger {
|
|
4
|
+
debug: LogFn;
|
|
5
|
+
info: LogFn;
|
|
6
|
+
warn: LogFn;
|
|
7
|
+
error: LogFn;
|
|
8
|
+
/**
|
|
9
|
+
* Returns a child logger that merges the given metadata into every call.
|
|
10
|
+
* Useful for attaching stable context (e.g. `workflowRunId`, `workflowName`,
|
|
11
|
+
* `stepId`) so callers don't have to repeat it on every log.
|
|
12
|
+
*
|
|
13
|
+
* Call-site metadata wins on conflict, so children can still override.
|
|
14
|
+
*/
|
|
15
|
+
child: (metadata: LogMetadata) => Logger;
|
|
16
|
+
/**
|
|
17
|
+
* Convenience child logger for a workflow run. Equivalent to
|
|
18
|
+
* `logger.child({ workflowRunId, workflowName })`, but centralized so all
|
|
19
|
+
* runtime code structures run metadata consistently.
|
|
20
|
+
*/
|
|
21
|
+
forRun: (workflowRunId: string, workflowName?: string, extra?: LogMetadata) => Logger;
|
|
22
|
+
}
|
|
23
|
+
export declare const stepLogger: Logger;
|
|
24
|
+
export declare const runtimeLogger: Logger;
|
|
25
|
+
export declare const webhookLogger: Logger;
|
|
26
|
+
export declare const eventsLogger: Logger;
|
|
27
|
+
export declare const adapterLogger: Logger;
|
|
28
|
+
export declare const buildLogger: Logger;
|
|
29
|
+
export {};
|
|
31
30
|
//# sourceMappingURL=logger.d.ts.map
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;AAE/D,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;IACb;;;;;;OAMG;IACH,KAAK,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,MAAM,CAAC;IACzC;;;;OAIG;IACH,MAAM,EAAE,CACN,aAAa,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,WAAW,KAChB,MAAM,CAAC;CACb;AA8GD,eAAO,MAAM,UAAU,QAAuB,CAAC;AAC/C,eAAO,MAAM,aAAa,QAA0B,CAAC;AACrD,eAAO,MAAM,aAAa,QAA0B,CAAC;AACrD,eAAO,MAAM,YAAY,QAAyB,CAAC;AACnD,eAAO,MAAM,aAAa,QAA0B,CAAC;AACrD,eAAO,MAAM,WAAW,QAEtB,CAAC"}
|
package/dist/logger.js
CHANGED
|
@@ -1,41 +1,91 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { composeLogLine } from './log-format.js';
|
|
2
2
|
import { getActiveSpan } from './telemetry.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Lightweight `DEBUG=` pattern matcher. Replaces the `debug` package, which
|
|
5
|
+
* was previously a static dependency of this module — that import path
|
|
6
|
+
* pulled `debug/src/node` and its dynamic `require('tty')` into the
|
|
7
|
+
* generated Next.js webpack flow route, breaking the V2 combined-bundle
|
|
8
|
+
* build with `Dynamic require of "tty" is not supported`. Keeping this
|
|
9
|
+
* module free of `debug` is a prerequisite for V2 webpack builds.
|
|
10
|
+
*/
|
|
11
|
+
function matchesDebugNamespace(namespace, patternList) {
|
|
12
|
+
if (!patternList) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
let enabled = false;
|
|
16
|
+
for (const rawPattern of patternList.split(',')) {
|
|
17
|
+
const pattern = rawPattern.trim();
|
|
18
|
+
if (!pattern) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
const isNegated = pattern.startsWith('-');
|
|
22
|
+
const candidate = isNegated ? pattern.slice(1) : pattern;
|
|
23
|
+
const regex = new RegExp(`^${candidate.replace(/[|\\{}()[\]^$+?.]/g, '\\$&').replace(/\*/g, '.*')}$`);
|
|
24
|
+
if (regex.test(namespace)) {
|
|
25
|
+
enabled = !isNegated;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return enabled;
|
|
29
|
+
}
|
|
30
|
+
function createLogger(namespace, options = {}) {
|
|
31
|
+
const build = (parentMetadata) => {
|
|
32
|
+
const getDebugNamespace = (level) => options.debugNamespace ?? `workflow:${namespace}:${level}`;
|
|
33
|
+
const logger = (level) => {
|
|
34
|
+
const debugNamespace = getDebugNamespace(level);
|
|
35
|
+
return (message, metadata) => {
|
|
36
|
+
const hasParent = Object.keys(parentMetadata).length > 0;
|
|
37
|
+
const hasCallSite = metadata && Object.keys(metadata).length > 0;
|
|
38
|
+
const merged = hasParent || hasCallSite
|
|
39
|
+
? { ...parentMetadata, ...(metadata ?? {}) }
|
|
40
|
+
: undefined;
|
|
41
|
+
// Always output error/warn to console so users see critical issues.
|
|
42
|
+
// debug/info only output when DEBUG env var matches the namespace.
|
|
43
|
+
//
|
|
44
|
+
// Compose the framing + structured fields + (trimmed) stack into a
|
|
45
|
+
// single string so the runtime's `console.error` / `util.inspect`
|
|
46
|
+
// doesn't quote-escape multi-line stacks or paragraph hints inside
|
|
47
|
+
// a JSON-y object dump. The framing line stays at the top with the
|
|
48
|
+
// structured fields right under it; the stack body — with framework
|
|
49
|
+
// internal frames collapsed — sits at the bottom. See log-format.ts.
|
|
50
|
+
if (level === 'error' || level === 'warn') {
|
|
51
|
+
const out = level === 'error' ? console.error : console.warn;
|
|
52
|
+
out(composeLogLine('[workflow-sdk]', message, merged));
|
|
53
|
+
}
|
|
54
|
+
const debugEnabled = matchesDebugNamespace(debugNamespace, process.env.DEBUG);
|
|
55
|
+
if (debugEnabled) {
|
|
56
|
+
console.debug(`[${debugNamespace}] ${message}`, merged ?? '');
|
|
57
|
+
getActiveSpan()
|
|
58
|
+
.then((span) => {
|
|
59
|
+
span?.addEvent(`${level}.${namespace}`, { message, ...merged });
|
|
60
|
+
})
|
|
61
|
+
.catch(() => {
|
|
62
|
+
// Silently ignore telemetry errors
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
debug: logger('debug'),
|
|
69
|
+
info: logger('info'),
|
|
70
|
+
warn: logger('warn'),
|
|
71
|
+
error: logger('error'),
|
|
72
|
+
child: (metadata) => build({ ...parentMetadata, ...metadata }),
|
|
73
|
+
forRun: (workflowRunId, workflowName, extra) => build({
|
|
74
|
+
...parentMetadata,
|
|
75
|
+
workflowRunId,
|
|
76
|
+
...(workflowName !== undefined ? { workflowName } : {}),
|
|
77
|
+
...(extra ?? {}),
|
|
78
|
+
}),
|
|
27
79
|
};
|
|
28
80
|
};
|
|
29
|
-
return {
|
|
30
|
-
debug: logger('debug'),
|
|
31
|
-
info: logger('info'),
|
|
32
|
-
warn: logger('warn'),
|
|
33
|
-
error: logger('error'),
|
|
34
|
-
};
|
|
81
|
+
return build({});
|
|
35
82
|
}
|
|
36
83
|
export const stepLogger = createLogger('step');
|
|
37
84
|
export const runtimeLogger = createLogger('runtime');
|
|
38
85
|
export const webhookLogger = createLogger('webhook');
|
|
39
86
|
export const eventsLogger = createLogger('events');
|
|
40
87
|
export const adapterLogger = createLogger('adapter');
|
|
41
|
-
|
|
88
|
+
export const buildLogger = createLogger('build', {
|
|
89
|
+
debugNamespace: 'workflow:build',
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBbUMvQzs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxxQkFBcUIsQ0FDNUIsU0FBaUIsRUFDakIsV0FBK0I7SUFFL0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsU0FBUztRQUNYLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUN0QixJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUM1RSxDQUFDO1FBRUYsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxP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YixHQUFHLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQzthQUNqQixDQUFDO1NBQ0wsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUU7SUFDL0MsY0FBYyxFQUFFLGdCQUFnQjtDQUNqQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wb3NlTG9nTGluZSB9IGZyb20gJy4vbG9nLWZvcm1hdC5qcyc7XG5pbXBvcnQgeyBnZXRBY3RpdmVTcGFuIH0gZnJvbSAnLi90ZWxlbWV0cnkuanMnO1xuXG50eXBlIExvZ01ldGFkYXRhID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbnR5cGUgTG9nRm4gPSAobWVzc2FnZTogc3RyaW5nLCBtZXRhZGF0YT86IExvZ01ldGFkYXRhKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlciB7XG4gIGRlYnVnOiBMb2dGbjtcbiAgaW5mbzogTG9nRm47XG4gIHdhcm46IExvZ0ZuO1xuICBlcnJvcjogTG9nRm47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY2hpbGQgbG9nZ2VyIHRoYXQgbWVyZ2VzIHRoZSBnaXZlbiBtZXRhZGF0YSBpbnRvIGV2ZXJ5IGNhbGwuXG4gICAqIFVzZWZ1bCBmb3IgYXR0YWNoaW5nIHN0YWJsZSBjb250ZXh0IChlLmcuIGB3b3JrZmxvd1J1bklkYCwgYHdvcmtmbG93TmFtZWAsXG4gICAqIGBzdGVwSWRgKSBzbyBjYWxsZXJzIGRvbid0IGhhdmUgdG8gcmVwZWF0IGl0IG9uIGV2ZXJ5IGxvZy5cbiAgICpcbiAgICogQ2FsbC1zaXRlIG1ldGFkYXRhIHdpbnMgb24gY29uZmxpY3QsIHNvIGNoaWxkcmVuIGNhbiBzdGlsbCBvdmVycmlkZS5cbiAgICovXG4gIGNoaWxkOiAobWV0YWRhdGE6IExvZ01ldGFkYXRhKSA9PiBMb2dnZXI7XG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBjaGlsZCBsb2dnZXIgZm9yIGEgd29ya2Zsb3cgcnVuLiBFcXVpdmFsZW50IHRvXG4gICAqIGBsb2dnZXIuY2hpbGQoeyB3b3JrZmxvd1J1bklkLCB3b3JrZmxvd05hbWUgfSlgLCBidXQgY2VudHJhbGl6ZWQgc28gYWxsXG4gICAqIHJ1bnRpbWUgY29kZSBzdHJ1Y3R1cmVzIHJ1biBtZXRhZGF0YSBjb25zaXN0ZW50bHkuXG4gICAqL1xuICBmb3JSdW46IChcbiAgICB3b3JrZmxvd1J1bklkOiBzdHJpbmcsXG4gICAgd29ya2Zsb3dOYW1lPzogc3RyaW5nLFxuICAgIGV4dHJhPzogTG9nTWV0YWRhdGFcbiAgKSA9PiBMb2dnZXI7XG59XG5cbnR5cGUgTG9nZ2VyT3B0aW9ucyA9IHtcbiAgZGVidWdOYW1lc3BhY2U/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIExpZ2h0d2VpZ2h0IGBERUJVRz1gIHBhdHRlcm4gbWF0Y2hlci4gUmVwbGFjZXMgdGhlIGBkZWJ1Z2AgcGFja2FnZSwgd2hpY2hcbiAqIHdhcyBwcmV2aW91c2x5IGEgc3RhdGljIGRlcGVuZGVuY3kgb2YgdGhpcyBtb2R1bGUg4oCUIHRoYXQgaW1wb3J0IHBhdGhcbiAqIHB1bGxlZCBgZGVidWcvc3JjL25vZGVgIGFuZCBpdHMgZHluYW1pYyBgcmVxdWlyZSgndHR5JylgIGludG8gdGhlXG4gKiBnZW5lcmF0ZWQgTmV4dC5qcyB3ZWJwYWNrIGZsb3cgcm91dGUsIGJyZWFraW5nIHRoZSBWMiBjb21iaW5lZC1idW5kbGVcbiAqIGJ1aWxkIHdpdGggYER5bmFtaWMgcmVxdWlyZSBvZiBcInR0eVwiIGlzIG5vdCBzdXBwb3J0ZWRgLiBLZWVwaW5nIHRoaXNcbiAqIG1vZHVsZSBmcmVlIG9mIGBkZWJ1Z2AgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIFYyIHdlYnBhY2sgYnVpbGRzLlxuICovXG5mdW5jdGlvbiBtYXRjaGVzRGVidWdOYW1lc3BhY2UoXG4gIG5hbWVzcGFjZTogc3RyaW5nLFxuICBwYXR0ZXJuTGlzdDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuIHtcbiAgaWYgKCFwYXR0ZXJuTGlzdCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBlbmFibGVkID0gZmFsc2U7XG4gIGZvciAoY29uc3QgcmF3UGF0dGVybiBvZiBwYXR0ZXJuTGlzdC5zcGxpdCgnLCcpKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IHJhd1BhdHRlcm4udHJpbSgpO1xuICAgIGlmICghcGF0dGVybikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGVkID0gcGF0dGVybi5zdGFydHNXaXRoKCctJyk7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gaXNOZWdhdGVkID8gcGF0dGVybi5zbGljZSgxKSA6IHBhdHRlcm47XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgYF4ke2NhbmRpZGF0ZS5yZXBsYWNlKC9bfFxcXFx7fSgpW1xcXV4kKz8uXS9nLCAnXFxcXCQmJykucmVwbGFjZSgvXFwqL2csICcuKicpfSRgXG4gICAgKTtcblxuICAgIGlmIChyZWdleC50ZXN0KG5hbWVzcGFjZSkpIHtcbiAgICAgIGVuYWJsZWQgPSAhaXNOZWdhdGVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbmFibGVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb2dnZXIobmFtZXNwYWNlOiBzdHJpbmcsIG9wdGlvbnM6IExvZ2dlck9wdGlvbnMgPSB7fSk6IExvZ2dlciB7XG4gIGNvbnN0IGJ1aWxkID0gKHBhcmVudE1ldGFkYXRhOiBMb2dNZXRhZGF0YSk6IExvZ2dlciA9PiB7XG4gICAgY29uc3QgZ2V0RGVidWdOYW1lc3BhY2UgPSAobGV2ZWw6IHN0cmluZykgPT5cbiAgICAgIG9wdGlvbnMuZGVidWdOYW1lc3BhY2UgPz8gYHdvcmtmbG93OiR7bmFtZXNwYWNlfToke2xldmVsfWA7XG5cbiAgICBjb25zdCBsb2dnZXIgPSAobGV2ZWw6IHN0cmluZyk6IExvZ0ZuID0+IHtcbiAgICAgIGNvbnN0IGRlYnVnTmFtZXNwYWNlID0gZ2V0RGVidWdOYW1lc3BhY2UobGV2ZWwpO1xuXG4gICAgICByZXR1cm4gKG1lc3NhZ2UsIG1ldGFkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IE9iamVjdC5rZXlzKHBhcmVudE1ldGFkYXRhKS5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBoYXNDYWxsU2l0ZSA9IG1ldGFkYXRhICYmIE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBtZXJnZWQgPVxuICAgICAgICAgIGhhc1BhcmVudCB8fCBoYXNDYWxsU2l0ZVxuICAgICAgICAgICAgPyB7IC4uLnBhcmVudE1ldGFkYXRhLCAuLi4obWV0YWRhdGEgPz8ge30pIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIEFsd2F5cyBvdXRwdXQgZXJyb3Ivd2FybiB0byBjb25zb2xlIHNvIHVzZXJzIHNlZSBjcml0aWNhbCBpc3N1ZXMuXG4gICAgICAgIC8vIGRlYnVnL2luZm8gb25seSBvdXRwdXQgd2hlbiBERUJVRyBlbnYgdmFyIG1hdGNoZXMgdGhlIG5hbWVzcGFjZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gQ29tcG9zZSB0aGUgZnJhbWluZyArIHN0cnVjdHVyZWQgZmllbGRzICsgKHRyaW1tZWQpIHN0YWNrIGludG8gYVxuICAgICAgICAvLyBzaW5nbGUgc3RyaW5nIHNvIHRoZSBydW50aW1lJ3MgYGNvbnNvbGUuZXJyb3JgIC8gYHV0aWwuaW5zcGVjdGBcbiAgICAgICAgLy8gZG9lc24ndCBxdW90ZS1lc2NhcGUgbXVsdGktbGluZSBzdGFja3Mgb3IgcGFyYWdyYXBoIGhpbnRzIGluc2lkZVxuICAgICAgICAvLyBhIEpTT04teSBvYmplY3QgZHVtcC4gVGhlIGZyYW1pbmcgbGluZSBzdGF5cyBhdCB0aGUgdG9wIHdpdGggdGhlXG4gICAgICAgIC8vIHN0cnVjdHVyZWQgZmllbGRzIHJpZ2h0IHVuZGVyIGl0OyB0aGUgc3RhY2sgYm9keSDigJQgd2l0aCBmcmFtZXdvcmtcbiAgICAgICAgLy8gaW50ZXJuYWwgZnJhbWVzIGNvbGxhcHNlZCDigJQgc2l0cyBhdCB0aGUgYm90dG9tLiBTZWUgbG9nLWZvcm1hdC50cy5cbiAgICAgICAgaWYgKGxldmVsID09PSAnZXJyb3InIHx8IGxldmVsID09PSAnd2FybicpIHtcbiAgICAgICAgICBjb25zdCBvdXQgPSBsZXZlbCA9PT0gJ2Vycm9yJyA/IGNvbnNvbGUuZXJyb3IgOiBjb25zb2xlLndhcm47XG4gICAgICAgICAgb3V0KGNvbXBvc2VMb2dMaW5lKCdbd29ya2Zsb3ctc2RrXScsIG1lc3NhZ2UsIG1lcmdlZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVidWdFbmFibGVkID0gbWF0Y2hlc0RlYnVnTmFtZXNwYWNlKFxuICAgICAgICAgIGRlYnVnTmFtZXNwYWNlLFxuICAgICAgICAgIHByb2Nlc3MuZW52LkRFQlVHXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFske2RlYnVnTmFtZXNwYWNlfV0gJHttZXNzYWdlfWAsIG1lcmdlZCA/PyAnJyk7XG4gICAgICAgICAgZ2V0QWN0aXZlU3BhbigpXG4gICAgICAgICAgICAudGhlbigoc3BhbikgPT4ge1xuICAgICAgICAgICAgICBzcGFuPy5hZGRFdmVudChgJHtsZXZlbH0uJHtuYW1lc3BhY2V9YCwgeyBtZXNzYWdlLCAuLi5tZXJnZWQgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIHRlbGVtZXRyeSBlcnJvcnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGVidWc6IGxvZ2dlcignZGVidWcnKSxcbiAgICAgIGluZm86IGxvZ2dlcignaW5mbycpLFxuICAgICAgd2FybjogbG9nZ2VyKCd3YXJuJyksXG4gICAgICBlcnJvcjogbG9nZ2VyKCdlcnJvcicpLFxuICAgICAgY2hpbGQ6IChtZXRhZGF0YSkgPT4gYnVpbGQoeyAuLi5wYXJlbnRNZXRhZGF0YSwgLi4ubWV0YWRhdGEgfSksXG4gICAgICBmb3JSdW46ICh3b3JrZmxvd1J1bklkLCB3b3JrZmxvd05hbWUsIGV4dHJhKSA9PlxuICAgICAgICBidWlsZCh7XG4gICAgICAgICAgLi4ucGFyZW50TWV0YWRhdGEsXG4gICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAuLi4od29ya2Zsb3dOYW1lICE9PSB1bmRlZmluZWQgPyB7IHdvcmtmbG93TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihleHRyYSA/PyB7fSksXG4gICAgICAgIH0pLFxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIGJ1aWxkKHt9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0ZXBMb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3N0ZXAnKTtcbmV4cG9ydCBjb25zdCBydW50aW1lTG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdydW50aW1lJyk7XG5leHBvcnQgY29uc3Qgd2ViaG9va0xvZ2dlciA9IGNyZWF0ZUxvZ2dlcignd2ViaG9vaycpO1xuZXhwb3J0IGNvbnN0IGV2ZW50c0xvZ2dlciA9IGNyZWF0ZUxvZ2dlcignZXZlbnRzJyk7XG5leHBvcnQgY29uc3QgYWRhcHRlckxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignYWRhcHRlcicpO1xuZXhwb3J0IGNvbnN0IGJ1aWxkTG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdidWlsZCcsIHtcbiAgZGVidWdOYW1lc3BhY2U6ICd3b3JrZmxvdzpidWlsZCcsXG59KTtcbiJdfQ==
|